{ "info": { "author": "Alessandro Molina", "author_email": "alessandro.molina@axant.it", "bugtrack_url": null, "classifiers": [], "description": "=========================\nAbout AXF\n=========================\n\nAXF is a collection of ToscaWidgets2 widgets with resources loading\nbased on the `AXEL Loader `_ to perform\nresources loading so that it is possible to replace resources and load\nwidgets from ajax requests.\n\nInstalling\n=========================\n\naxf can be installed from pypi::\n\n easy_install axf\n\nor::\n\n pip install axf\n\nshould just work for most of the users\n\nLayouts\n=======\n\nAXF provides a TW2 layout for bootstrap, which is available as\n``axf.bootstrap.BootstrapFormLayout``, to make your forms use\nbootstrap3 just have their layout inherit from it::\n\n from axf.bootstrap import BootstrapFormLayout\n\n class BootstrapRegistrationForm(Form):\n class child(BootstrapFormLayout):\n text = TextField(label=l_('Text'))\n\n submit = SubmitButton(value=l_('Register'), css_class='btn btn-default')\n\n\nUsing Widgets\n==========================\n\nTo start using AXF widgets you must add axel to your pages so that\nwidgets can load their resources::\n\n \n\nThe AXEL loader is used instead of standard ToscaWidgets2 resources\ninjection to make possible to load the forms where they are used through\n``jQuery.load``, as resources loading and injection is performed by\nAXEL not response manipulation to append the resources to head or body\nis required.\n\nIf you want to load and submit forms through ajax requests in TurboGears\nconsider using `tgext.ajaxforms `_\n\nReplacing resources required by the widgets can be performed using\nthe AXEL loader. Most widgets will depend on jQuery and will load it\nfrom the jquery cdn, if your website uses jQuery and you want to use\na different version of it you can easily replace it using::\n\n axel.register('jquery', 'http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js');\n\nJust place your register **before** displaying the widget and your version\nof the library will be used.\n\nEach widget will list its resources with the name used to register them\nin AXEL, so that you can replace them.\n\nAjaxAutoCompleteField\n==========================\n\n``axf.widgets.ajax_autocomplete_field.AjaxAutocompleteField`` is field that provides\nautocompletion based on select2 backed by a json based api. Each entry has to provide\na *text* which is displayed to the user and an *id* which is submitted with the form.\n*text* and *id* can coincide for plain text autocompletion.\n\nThe field requires two parameters ``datasource`` and ``inverse_datasource`` are respectively\nthe api to retrieve list of data available for the text written by the user and to retrieve\nthe text corresponding to an already selected entry (for example in case of validation error\nor editing existing data)\n\nEXAMPLE::\n\n city = AjaxAutocompleteField(label=l_('City'), validator=validators.Validator(required=True),\n placeholder=l_('Select City'),\n datasource=lurl('/ajax/get_cities'),\n inverse_datasource=lurl('/ajax/city_from_id'))\n\nresources\n~~~~~~~~~~~~~~~~~~\n\n * jquery - jquery library\n * select2 - select2 library\n * select2-style - select2 stylesheet\n\ndatasource api\n~~~~~~~~~~~~~~~~~~\n\nThe API is required to accept a term to search as input, to return a list of\n``{text: \"value\", id: \"id\"}`` entries and a marker to indicate if more data is available::\n\n @expose('json')\n def get_cities(self, term='', **kw):\n return dict(more=False, results=[dict(text=c[1], id=c[0]) for c in cities_dict.items()])\n\ndatasource_inverse api\n~~~~~~~~~~~~~~~~~~~~~~~~~\n\nThe API is required to accept an id as argument in the form ``/apiname/ID`` and return the\n``text`` and ``id`` of the corresponding entry::\n\n @expose('json')\n def city_from_id(self, city_id=None, **kw):\n return dict(text=cities_dict.get(city_id), id=city_id)\n\n\nAjaxSingleSelectField\n==========================\n\n``axf.widgets.ajax_single_select.AjaxSingleSelectField`` is a field that loads its data\nfrom a datasource api whenever another field changes. This can be used to implement cascading\nsingle select fields, where options available depend on another selection.\n\nThe field requires two parameters ``datasource`` which is the api to call to request\nfor the data available on the value of the other field and ``onevent`` which is\na tuple with a selector and a javascript event (currently ignored) which specifies\nwhich field should trigger data update. Whenever the field specified by the selector changes\nthe single select field is reloaded asking to the datasource for the data.\n\nEXAMPLE::\n\n category = forms.SingleSelectField(label=l_('Category'), options=Deferred(get_categories),\n validator=validators.Validator(required=True))\n subcategory = AjaxSingleSelectField(label=l_('Sub Category'), onevent=('#category', 'change'), prompt_text=None,\n validator=validators.Validator(required=True),\n datasource=lurl('/ajax/get_subcategories'))\n\nresources\n~~~~~~~~~~~~~~~~~~\n\n * jquery - jquery library\n\ndatasource api\n~~~~~~~~~~~~~~~~~~~~~\n\nThe API is required to accept the current value of the field linked by ``onevent`` option\nand return a list of options for the ``AjaxSingleSelectField`` in the form\n``{name: \"name\", value: \"value\"}``::\n\n @expose('json')\n def get_subcategories(self, selected=None, **kw):\n if not selected:\n return dict(options=[])\n return dict(options=[dict(name=c['name'], value=c['id']) for c in subcategories.get(selected, [])])\n\n\nAjaxCascadingField\n==========================\n\n``axf.widgets.ajax_cascading_field.AjaxCascadingField`` is a field that loads its data\nfrom a datasource api whenever another field changes. This can be used to implement input fields,\nwhere value depend on another selection.\n\nThe field requires three parameters ``datasource`` which is the api to call to request\nfor the data available on the value of the other field, ``onevent`` which is\na tuple with a selector and a javascript event (currently ignored) which specifies\nwhich field should trigger data update and ``type`` which is the type of the input.\nWhenever the field specified by the selector changes the input field is\nreloaded asking to the datasourcefor the data.\n\nEXAMPLE::\n\n category = forms.SingleSelectField(label=l_('Category'), options=Deferred(get_categories),\n validator=validators.Validator(required=True))\n category_description = AjaxCascadingField(label=l_('Category Description'),\n onevent=('#category', 'change'),\n prompt_text=None,\n validator=validators.Validator(required=True),\n datasource=lurl('/ajax/get_category_description'),\n type='textarea')\n\nresources\n~~~~~~~~~~~~~~~~~~\n\n * jquery - jquery library\n\ndatasource api\n~~~~~~~~~~~~~~~~~~~~~\n\nThe API is required to accept the current value of the field linked by ``onevent`` option\nand return the value for the ``AjaxCascadingField`` in the form\n``{value: \"value\"}``::\n\n @expose('json')\n def get_category_description(self, selected=None, **kw):\n if not selected:\n return dict(value='')\n return dict(value=category[selected].get('description'))\n\n\nWysiHtml5TextArea\n==========================\n\n``axf.widgets.wysihtml5_text_area.WysiHtml5TextArea`` is a Text Area with wysiwyg editor\n\nWysiHtml5TextArea requires the same parameter of tw2 TextArea, when you render the result\nhtml you must declare CSS rules for alignment::\n\n .wysiwyg-text-align-right {\n text-align: right;\n }\n\n .wysiwyg-text-align-center {\n text-align: center;\n }\n\n .wysiwyg-text-align-left {\n text-align: left;\n }\n\n`WysiHtml5 Documentation `_\n\n\nEXAMPLE::\n\n description = WysiHtml5TextArea(label=l_('Description'), validator=Validator(required=True), rows=8)\n\nresources\n~~~~~~~~~~~~~~~~~~\n\n * jquery - jquery library\n * wysihtml5 - WYSIHTML5 library\n * wysihtml5ParserRules - WYSIHTML5 parser\n * wysihtml5_text_area.css - WYSIHTML5 style", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://bitbucket.org/axant/axf", "keywords": "", "license": "MIT", "maintainer": null, "maintainer_email": null, "name": "axf", "package_url": "https://pypi.org/project/axf/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/axf/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://bitbucket.org/axant/axf" }, "release_url": "https://pypi.org/project/axf/0.0.19/", "requires_dist": null, "requires_python": null, "summary": "AXANT ToscaWidget2 Widgets collection", "version": "0.0.19" }, "last_serial": 1790770, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "2fbcbca74f50ecee140c40d56e446574", "sha256": "b7fc003048def14cd28a2c3fafa01a09d8c800c95b33cf680da508bdd21952b3" }, "downloads": -1, "filename": "axf-0.0.1.tar.gz", "has_sig": false, "md5_digest": "2fbcbca74f50ecee140c40d56e446574", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 24635, "upload_time": "2013-05-31T14:38:10", "url": "https://files.pythonhosted.org/packages/e0/76/12a3e41f24b9505cdc73741076d5d29e1fe597f720df185a381a6a66b965/axf-0.0.1.tar.gz" } ], "0.0.10": [ { "comment_text": "", "digests": { "md5": "81e28dca3aeecb750302c1cbf7dff62e", "sha256": "590cc2257a6a2f8e3ee414bffd7bfd7a7d518c9f31a600aed26ac732f5198d7f" }, "downloads": -1, "filename": "axf-0.0.10.tar.gz", "has_sig": false, "md5_digest": "81e28dca3aeecb750302c1cbf7dff62e", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69306, "upload_time": "2014-01-15T15:18:56", "url": "https://files.pythonhosted.org/packages/da/76/2f37ea2d3b5325dfdcdb0f193297689b1d4153f34ec2e3314d339bcf3c82/axf-0.0.10.tar.gz" } ], "0.0.11": [ { "comment_text": "", "digests": { "md5": "32cfc8f7222c93a29918562ee3c33e94", "sha256": "0821899c78a5fd797e1905d31a827f43db1d59511a65e8d922b2d3666917e5d6" }, "downloads": -1, "filename": "axf-0.0.11.tar.gz", "has_sig": false, "md5_digest": "32cfc8f7222c93a29918562ee3c33e94", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69452, "upload_time": "2014-01-21T17:44:40", "url": "https://files.pythonhosted.org/packages/ce/8a/46e956d40c38f20676d6ad43a151af55bd9596b55ebc24a2d20113f9f712/axf-0.0.11.tar.gz" } ], "0.0.12": [ { "comment_text": "", "digests": { "md5": "bcec91c464526167e5a5663f61ec7fdc", "sha256": "4fc30af6ff201f7f3674ff9daf02eae9a3e01a571e6a6574d70e0cad1284330a" }, "downloads": -1, "filename": "axf-0.0.12.tar.gz", "has_sig": false, "md5_digest": "bcec91c464526167e5a5663f61ec7fdc", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69570, "upload_time": "2014-02-27T16:10:42", "url": "https://files.pythonhosted.org/packages/ac/1f/17e439065f356fe4ec8ef3f046f9f839bba9a3518a206552942024917ad6/axf-0.0.12.tar.gz" } ], "0.0.13": [ { "comment_text": "", "digests": { "md5": "2a69289785ef383331a8b8e420b2995c", "sha256": "da228289b7fb9c580959d9e763e69155322991caddca871cdd7f07f4ca7f04a8" }, "downloads": -1, "filename": "axf-0.0.13.tar.gz", "has_sig": false, "md5_digest": "2a69289785ef383331a8b8e420b2995c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69006, "upload_time": "2014-05-14T09:47:09", "url": "https://files.pythonhosted.org/packages/fb/ea/24e902e2cecafce30d3040a19ee754c1047a32089e30c4f955eff119783f/axf-0.0.13.tar.gz" } ], "0.0.14": [ { "comment_text": "", "digests": { "md5": "0dc74cf410e03187ce9560d7f5cecc37", "sha256": "81315c0cd71ca166ef2bc288b30e66d8ba981b28994d1802e7f8c693098b215c" }, "downloads": -1, "filename": "axf-0.0.14.tar.gz", "has_sig": false, "md5_digest": "0dc74cf410e03187ce9560d7f5cecc37", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69018, "upload_time": "2015-01-13T11:27:58", "url": "https://files.pythonhosted.org/packages/70/99/7dea2538c7a77154f4e624341283f31b6bdaaaaac1d36b29e799ec325b6e/axf-0.0.14.tar.gz" } ], "0.0.15": [ { "comment_text": "", "digests": { "md5": "9a33a5034cc17bda98fd1043fba06c9c", "sha256": "0685de6196bc7555075cde84ef06f62e4a6b8b52ae61bfa782e6aafc2838153d" }, "downloads": -1, "filename": "axf-0.0.15.tar.gz", "has_sig": false, "md5_digest": "9a33a5034cc17bda98fd1043fba06c9c", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69024, "upload_time": "2015-01-14T10:51:33", "url": "https://files.pythonhosted.org/packages/55/7f/d62cac3542c7ee23b9667df042106d1d715a23ca6cdd5aaf25dd72a59431/axf-0.0.15.tar.gz" } ], "0.0.16": [ { "comment_text": "", "digests": { "md5": "60e7f4b9e0379e685fcfe7f2286fe5bd", "sha256": "11fa7496ee3dfec1565b3d143fc1e62f38fbadfbc92f0ddc4b9dd81bf5758bf6" }, "downloads": -1, "filename": "axf-0.0.16.tar.gz", "has_sig": false, "md5_digest": "60e7f4b9e0379e685fcfe7f2286fe5bd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 69468, "upload_time": "2015-04-10T03:21:00", "url": "https://files.pythonhosted.org/packages/a4/26/36cded9f5486586f50f3f46143eed6fc2a70cda2a8ce1e27a9816ff281db/axf-0.0.16.tar.gz" } ], "0.0.17": [ { "comment_text": "", "digests": { "md5": "7728b7d057deeb1a52f11dab2877eccf", "sha256": "2cfc54606cf7d2b210b26a57f811bce3fa3512887fef8518de46d6334f526d2f" }, "downloads": -1, "filename": "axf-0.0.17.tar.gz", "has_sig": false, "md5_digest": "7728b7d057deeb1a52f11dab2877eccf", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 78565, "upload_time": "2015-04-12T20:01:44", "url": "https://files.pythonhosted.org/packages/45/82/a1f23b66d5399fb48fc253992015b19a08810fec178041bd140a219bf8ad/axf-0.0.17.tar.gz" } ], "0.0.18": [ { "comment_text": "", "digests": { "md5": "58389a93138703b8780ccca2e380917b", "sha256": "9a015870c97bdcb58b4c91865310df04d5445101a4be04a8e641b88334d9ca94" }, "downloads": -1, "filename": "axf-0.0.18.tar.gz", "has_sig": false, "md5_digest": "58389a93138703b8780ccca2e380917b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 78556, "upload_time": "2015-09-14T15:44:15", "url": "https://files.pythonhosted.org/packages/0d/4d/7cbd3e21e966f51ec43878ef34926d7395166e12a5a3344dce7959ee6338/axf-0.0.18.tar.gz" } ], "0.0.19": [ { "comment_text": "", "digests": { "md5": "424dc7119c89fcee0457746ee023ecb1", "sha256": "e5ddb4b7a26dd630b0a10f82a8c39be1fd36aa44b3c0f04343a7756730237164" }, "downloads": -1, "filename": "axf-0.0.19.tar.gz", "has_sig": false, "md5_digest": "424dc7119c89fcee0457746ee023ecb1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79277, "upload_time": "2015-10-28T21:04:59", "url": "https://files.pythonhosted.org/packages/ad/c2/59fc412cba7d1aef1b3c69a42cdcc967e7cd76d8226aa8d38f4f6c8b1ddb/axf-0.0.19.tar.gz" } ], "0.0.2": [ { "comment_text": "", "digests": { "md5": "cc4ed6690f3e32b757920b5199e3b354", "sha256": "fba7007a3788db2ce572ebfabfb8dc1732e3dc0fc9ae8ddb0cdd64249652c78a" }, "downloads": -1, "filename": "axf-0.0.2.tar.gz", "has_sig": false, "md5_digest": "cc4ed6690f3e32b757920b5199e3b354", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 30040, "upload_time": "2013-10-02T22:16:57", "url": "https://files.pythonhosted.org/packages/db/6e/e546840bef17148beac02f024e90bc9fdea44b306ccc003352667e7782a2/axf-0.0.2.tar.gz" } ], "0.0.3": [ { "comment_text": "", "digests": { "md5": "9db0150019eda22f5acb029a37acc49d", "sha256": "d4c4dff3ee6127b4ea8e39f6d01d388f6442a6e5617ce63c20adff4a3ea8e6eb" }, "downloads": -1, "filename": "axf-0.0.3.tar.gz", "has_sig": false, "md5_digest": "9db0150019eda22f5acb029a37acc49d", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31459, "upload_time": "2013-10-21T21:50:44", "url": "https://files.pythonhosted.org/packages/a8/9f/ac623f42c309bcce63069e532a30e7e8eef112b3c13631ce71dbf0cecfed/axf-0.0.3.tar.gz" } ], "0.0.4": [ { "comment_text": "", "digests": { "md5": "9792195cdc86e7cb7de97b861121eadd", "sha256": "2a5f6188c8533a99cdfe87b220ba8f14753bd2dee6b9c598fd03649977f36ec9" }, "downloads": -1, "filename": "axf-0.0.4.tar.gz", "has_sig": false, "md5_digest": "9792195cdc86e7cb7de97b861121eadd", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31948, "upload_time": "2013-10-22T10:07:38", "url": "https://files.pythonhosted.org/packages/08/6b/7eea528314ff88e7bce12203d3c8eed7b4e180c0289e9a3e81e4e6fde73a/axf-0.0.4.tar.gz" } ], "0.0.5": [ { "comment_text": "", "digests": { "md5": "204233a5b575fbba59941102bddc89b5", "sha256": "15c83f10b78704e1155cb64b1ff68aa793567b16219ec8bf66b99b57d7cc99a3" }, "downloads": -1, "filename": "axf-0.0.5.tar.gz", "has_sig": false, "md5_digest": "204233a5b575fbba59941102bddc89b5", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31965, "upload_time": "2013-10-22T10:50:57", "url": "https://files.pythonhosted.org/packages/a6/40/f539ac3799e6255d6110c7d2586c69706d466da2fbe361055da39b63518e/axf-0.0.5.tar.gz" } ], "0.0.6": [ { "comment_text": "", "digests": { "md5": "3aa3d9ed89b0f18275803387ec1ea5a9", "sha256": "6fa94399b09936859d98b14044e88775a7b6e2c63e7ac3ae0d95a1592744b7c5" }, "downloads": -1, "filename": "axf-0.0.6.tar.gz", "has_sig": false, "md5_digest": "3aa3d9ed89b0f18275803387ec1ea5a9", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 31895, "upload_time": "2013-10-22T15:51:56", "url": "https://files.pythonhosted.org/packages/25/cc/43841113ec54984cf4b053cb17cc9c81e619c5536a15016457f092ff55e4/axf-0.0.6.tar.gz" } ], "0.0.8": [ { "comment_text": "", "digests": { "md5": "242a468ef29062219d35974b200b4487", "sha256": "f8cf57cba913e68b1134fc7eeddab35e573d04418bd64d6705890856c0f30089" }, "downloads": -1, "filename": "axf-0.0.8.tar.gz", "has_sig": false, "md5_digest": "242a468ef29062219d35974b200b4487", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32438, "upload_time": "2013-11-29T15:35:01", "url": "https://files.pythonhosted.org/packages/5d/8a/859e0124a8389cd6eccf55f1a29c8a9e048919f96cbf2f394abbae81d457/axf-0.0.8.tar.gz" } ], "0.0.9": [ { "comment_text": "", "digests": { "md5": "54afce23c3321683e533de8d5d0f67ab", "sha256": "c10e235ed4be12edffa7b0bca866546c926da6faefcd7234a4e6c64f2fb59638" }, "downloads": -1, "filename": "axf-0.0.9.tar.gz", "has_sig": false, "md5_digest": "54afce23c3321683e533de8d5d0f67ab", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 32495, "upload_time": "2013-12-11T17:24:30", "url": "https://files.pythonhosted.org/packages/fa/d7/3505c452c91c8d680d28d14404637c33bb5dcd6a4f43b157d08850fdde2c/axf-0.0.9.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "424dc7119c89fcee0457746ee023ecb1", "sha256": "e5ddb4b7a26dd630b0a10f82a8c39be1fd36aa44b3c0f04343a7756730237164" }, "downloads": -1, "filename": "axf-0.0.19.tar.gz", "has_sig": false, "md5_digest": "424dc7119c89fcee0457746ee023ecb1", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 79277, "upload_time": "2015-10-28T21:04:59", "url": "https://files.pythonhosted.org/packages/ad/c2/59fc412cba7d1aef1b3c69a42cdcc967e7cd76d8226aa8d38f4f6c8b1ddb/axf-0.0.19.tar.gz" } ] }