Flask-Exts 0.2.5__tar.gz → 0.2.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {flask_exts-0.2.5 → flask_exts-0.2.6}/.readthedocs.yaml +2 -2
- {flask_exts-0.2.5 → flask_exts-0.2.6}/CHANGES.rst +8 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/PKG-INFO +6 -5
- {flask_exts-0.2.5 → flask_exts-0.2.6}/README.rst +5 -4
- {flask_exts-0.2.5 → flask_exts-0.2.6}/docs/conf.py +6 -6
- {flask_exts-0.2.5 → flask_exts-0.2.6}/docs/index.rst +1 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/make_app.py +4 -4
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/admin_views.py +1 -1
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/make_app.py +3 -3
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/fileadmin/make_app.py +4 -4
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/rediscli.py +5 -5
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/simple.py +4 -4
- flask_exts-0.2.6/src/flask_exts/__about__.py +1 -0
- flask_exts-0.2.6/src/flask_exts/__init__.py +1 -0
- flask_exts-0.2.5/src/flask_exts/manager.py → flask_exts-0.2.6/src/flask_exts/exts.py +4 -4
- flask_exts-0.2.6/src/flask_exts/proxies.py +19 -0
- flask_exts-0.2.6/src/flask_exts/themes/plugins/detail_filter_plugin.py +10 -0
- flask_exts-0.2.6/src/flask_exts/themes/plugins/list_action_plugin.py +10 -0
- flask_exts-0.2.6/src/flask_exts/themes/plugins/plugin_manager.py +83 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/css/admin.css +1 -1
- flask_exts-0.2.6/src/flask_exts/themes/static/js/detail_filter.js +55 -0
- flask_exts-0.2.6/src/flask_exts/themes/static/js/model_action.js +70 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/admin/master.html +0 -5
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/admin/model/details.html +10 -4
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/admin/model/list.html +16 -3
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/admin/model/modals/details.html +10 -4
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/actions.html +0 -6
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/row_actions.html +1 -1
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/file/list.html +14 -1
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/rediscli/console.html +2 -7
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/setup_tfa.html +2 -6
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/customer/conftest.py +8 -8
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/conftest.py +10 -10
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap5/conftest.py +3 -3
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/test_base.py +6 -6
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/views/test_user_view.py +3 -3
- flask_exts-0.2.5/src/flask_exts/__about__.py +0 -1
- flask_exts-0.2.5/src/flask_exts/__init__.py +0 -1
- flask_exts-0.2.5/src/flask_exts/proxies.py +0 -19
- flask_exts-0.2.5/src/flask_exts/themes/plugins/plugin_manager.py +0 -55
- flask_exts-0.2.5/src/flask_exts/themes/static/js/actions.js +0 -51
- flask_exts-0.2.5/src/flask_exts/themes/static/js/details_filter.js +0 -10
- flask_exts-0.2.5/src/flask_exts/themes/static/js/helper.js +0 -7
- flask_exts-0.2.5/src/flask_exts/themes/templates/default/macro/javascript.html +0 -10
- {flask_exts-0.2.5 → flask_exts-0.2.6}/.github/workflows/release.yml +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/.gitignore +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/LICENSE.rst +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/babel/babel.cfg +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/babel/babel.sh +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/babel/messages.pot +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/docs/Makefile +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/docs/_static/logo.png +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/docs/api.rst +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/docs/changes.rst +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/docs/configure.rst +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/docs/develop.rst +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/docs/examples.rst +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/docs/make.bat +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/docs/requirements.txt +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/README.rst +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/forms.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/models.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/static/favicon.ico +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/templates/bootstrap/bootswatch.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/templates/bootstrap/flash.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/templates/bootstrap/form.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/templates/bootstrap/icon.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/templates/bootstrap/icons.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/templates/bootstrap/index.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/templates/bootstrap/nav.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/templates/bootstrap/pagination.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/templates/bootstrap/table.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/templates/mybase.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap/view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap5/static/favicon.ico +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap5/templates/bootswatch.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap5/templates/flash.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap5/templates/form.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap5/templates/icon.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap5/templates/icons.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap5/templates/index.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap5/templates/mybase.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap5/templates/nav.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap5/templates/pagination.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/bootstrap5/templates/table.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/build_sample.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/file_op.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/models/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/models/author.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/models/keyword.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/models/location_image.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/models/post.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/models/post_tag.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/models/tag.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/models/tree.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/models/user.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/models/user_keyword.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/static/favicon.ico +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/templates/field_list.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/templates/locations.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/templates/my/index.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/templates/tree_list.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/views/author_view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/views/keyword_view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/views/location_image_view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/views/my_view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/views/post_view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/views/tag_view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/views/tree_view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/demo/views/user_view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/fileadmin/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/fileadmin/file_view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/fileadmin/tmp/bbb/a.txt +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/examples/instance/config.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/pyproject.toml +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/requirements/build.in +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/requirements/test.in +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/actions.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/admin.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/menu.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/model/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/model/ajax.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/model/filters.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/model/form.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/model/typefmt.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/model/view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/row_action.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/sqla/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/sqla/ajax.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/sqla/filters.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/sqla/form.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/sqla/typefmt.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/sqla/view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/admin/view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/babel/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/babel/selector.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/commands.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/constants.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/datastore/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/datastore/sqla/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/datastore/sqla/orm.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/email/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/email/base.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/email/reset_password_sender.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/email/sender.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/email/smtp.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/email/verify_email_sender.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/authorizer/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/authorizer/base.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/authorizer/casbin_authorizer.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/authorizer/sqlalchemy_adapter.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/core.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/email_verification.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/hasher.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/principal/identity.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/principal/identity_context.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/principal/permission.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/principal/principal.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/reset_password.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/serializer.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/security/two_factor_authentication.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/signals.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/base.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/fields/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/fields/ajax_select.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/fields/datetime.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/fields/file.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/fields/inline.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/fields/json.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/fields/recaptcha.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/fields/select.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/fields/sqla.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/fields/switch.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/fields/taglist.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/form/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/form/base_form.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/form/csrf.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/form/flask_form.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/form/form_opts.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/form/meta.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/form/session_csrf.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/form/utils.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/forms/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/forms/change_password.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/forms/forgot_password.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/forms/login.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/forms/profile.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/forms/recovery.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/forms/register.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/forms/reset_password.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/forms/two_factor.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/funcs.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/rules.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/validators/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/validators/field_list.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/validators/file.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/validators/recaptcha.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/validators/sqla.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/widgets/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/widgets/checkbox.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/widgets/datetime.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/widgets/file.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/widgets/inline.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/widgets/recaptcha.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/widgets/render_template.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/widgets/select.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/template/widgets/xeditable.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/plugins/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/plugins/base_plugin.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/plugins/bootstrap4_plugin.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/plugins/bootstrap5_plugin.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/plugins/clipboard_plugin.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/plugins/copybutton_plugin.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/plugins/jquery_plugin.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/plugins/qrcode_plugin.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/plugins/rediscli_plugin.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/plugins/sphinx_copybutton_plugin.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/css/rediscli.css +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/js/copybutton.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/js/filters.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/js/form.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/js/modal.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/js/qrcode.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/js/rediscli.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/js/security/base64.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/js/security/webauthn.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/logo.png +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/bootstrap-icons/bootstrap-icons.svg +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/bootstrap-icons/font/bootstrap-icons.css +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/bootstrap-icons/font/bootstrap-icons.json +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/bootstrap-icons/font/bootstrap-icons.min.css +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/bootstrap-icons/font/bootstrap-icons.scss +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/bootstrap-icons/font/fonts/bootstrap-icons.woff +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/bootstrap-icons/font/fonts/bootstrap-icons.woff2 +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/bootstrap4/bootstrap.bundle.min.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/bootstrap4/bootstrap.min.css +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/bootstrap5/bootstrap.bundle.min.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/bootstrap5/bootstrap.min.css +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/clipboard/clipboard.min.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/daterangepicker/daterangepicker.css +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/daterangepicker/daterangepicker.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/jquery/jquery.min.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/moment.min.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/select2/select2.min.css +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/select2/select2.min.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/sphinx-copybutton/sphinx-copybutton.css +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/sphinx-copybutton/sphinx-copybutton.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/vanilla-editor/css/bootstrap-editable.css +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/vanilla-editor/img/clear.png +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/vanilla-editor/img/loading.gif +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/static/vendor/vanilla-editor/js/bootstrap-editable.min.js +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/admin/index.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/admin/model/create.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/admin/model/edit.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/admin/model/modals/create.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/admin/model/modals/edit.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/base.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/bootstrap4/form.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/bootstrap4/message.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/bootstrap4/pagination.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/bootstrap5/form.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/bootstrap5/message.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/index.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/layout.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/form.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/icon.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/inline.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/layout.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/menu.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/message.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/nav.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/pagination.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/table.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/vendor.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/file/form.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/file/modals/form.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/rediscli/response.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/change_password.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/forgot_password.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/index.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/list.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/login.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/recovery.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/recovery_codes.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/register.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/reset_password.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/show_tfa.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/verify_email.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/verify_tfa.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/views/user/verify_tfa_modal.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/widgets/inline_field_list.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/widgets/inline_form.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/theme.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/translations/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/translations/en/LC_MESSAGES/messages.mo +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/translations/en/LC_MESSAGES/messages.po +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/translations/zh_CN/LC_MESSAGES/messages.mo +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/translations/zh_CN/LC_MESSAGES/messages.po +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/types.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/usercenter/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/usercenter/base_user.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/usercenter/base_user_store.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/usercenter/core.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/usercenter/models/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/usercenter/models/role.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/usercenter/models/user.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/usercenter/models/user_profile.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/usercenter/models/webauthn.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/usercenter/sqla_user_store.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/utils/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/utils/decorators.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/utils/flask.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/utils/image.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/utils/jwt.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/utils/request_user.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/utils/sqla.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/utils/tools.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/utils/url.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/views/file/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/views/file/base_file_view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/views/file/local_file_storage.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/views/file/local_file_view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/views/index/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/views/index/view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/views/rediscli/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/views/rediscli/mock_redis.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/views/rediscli/view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/views/user/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/views/user/view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/customer/templates/mock.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/customer/test_admin.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/sqla/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/sqla/templates/another_macro.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/sqla/templates/macro.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/sqla/test_basic.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/sqla/test_form_rules.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/sqla/test_inlineform.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/sqla/test_multi_pk.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/sqla/test_translation.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/test_base.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/admin/test_model.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/data/copyleft.gif +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/data/copyleft.jpeg +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/data/copyleft.jpg +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/data/copyleft.png +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/data/copyleft.tiff +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/email/test_base.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/email/test_smtp.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/helper.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/models/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/models/message.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/models/model1.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/models/multpk.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/models/polymorphic.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/models/tree.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/models/user.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/security/authorizer/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/security/authorizer/casbin_adapter/rbac_model.conf +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/security/authorizer/casbin_adapter/rbac_policy.csv +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/security/authorizer/casbin_adapter/test_sqlalchemy_adapter.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/security/authorizer/casbin_files/authz_policy.csv +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/security/authorizer/casbin_files/rbac_model.conf +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/security/authorizer/casbin_files/rbac_policy.csv +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/security/authorizer/test_casbin_auth.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/security/test_core.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/security/test_principal.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/security/test_tfa.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap4/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap4/test_render_field.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap4/test_render_form.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap4/test_render_form_row.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap4/test_render_hidden_errors.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap4/test_render_icon.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap4/test_render_messages.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap4/test_render_pager.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap4/test_render_pagination.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap4/test_render_table.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap5/__init__.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap5/_test_base.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap5/_test_render_form.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap5/_test_render_form_row.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap5/_test_render_messages.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/bootstrap5/_test_render_pagination.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/conftest.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/forms/test_csrf.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/forms/test_fields.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/forms/test_filefield.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/forms/test_uploadfile.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/macros/test_render_breadcrumb_item.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/macros/test_render_nav_item.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/template/test_base.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/templates/method.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/templates/mock.html +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/test_babel.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/test_flask.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/translations/en/LC_MESSAGES/messages.mo +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/translations/en/LC_MESSAGES/messages.po +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/translations/zh_CN/LC_MESSAGES/messages.po +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/usercenter/test_sqla_usercenter.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/utils/test_image.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/utils/test_request_user.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/utils/test_url.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/views/files/dummy.txt +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/views/test_file_view.py +0 -0
- {flask_exts-0.2.5 → flask_exts-0.2.6}/tests/views/test_rediscli_view.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: Flask-Exts
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.6
|
|
4
4
|
Summary: Flask extensions with admin, SQLAlchemy, babel, forms, fields, widgets, and so on.
|
|
5
5
|
Project-URL: Documentation, https://flask-exts.readthedocs.io
|
|
6
6
|
Project-URL: Source, https://github.com/ojso/flask-exts
|
|
@@ -62,6 +62,7 @@ Flask Exts
|
|
|
62
62
|
|
|
63
63
|
Flask-Exts is mainly inspired by:
|
|
64
64
|
|
|
65
|
+
- `Bootstrap <https://getbootstrap.com/>`_
|
|
65
66
|
- `Flask-Admin <https://github.com/pallets-eco/flask-admin/>`_
|
|
66
67
|
- `Flask-Security <https://github.com/pallets-eco/flask-security/>`_
|
|
67
68
|
|
|
@@ -88,13 +89,13 @@ Examples
|
|
|
88
89
|
.. code-block:: python
|
|
89
90
|
|
|
90
91
|
from flask import Flask
|
|
91
|
-
from flask_exts import
|
|
92
|
+
from flask_exts import Exts
|
|
92
93
|
|
|
93
94
|
app = Flask(__name__)
|
|
94
95
|
app.config["SECRET_KEY"] = "dev"
|
|
95
|
-
#
|
|
96
|
-
|
|
97
|
-
|
|
96
|
+
# Exts init
|
|
97
|
+
exts = Exts()
|
|
98
|
+
exts.init_app(app)
|
|
98
99
|
|
|
99
100
|
if __name__ == "__main__":
|
|
100
101
|
app.run(debug=True)
|
|
@@ -3,6 +3,7 @@ Flask Exts
|
|
|
3
3
|
|
|
4
4
|
Flask-Exts is mainly inspired by:
|
|
5
5
|
|
|
6
|
+
- `Bootstrap <https://getbootstrap.com/>`_
|
|
6
7
|
- `Flask-Admin <https://github.com/pallets-eco/flask-admin/>`_
|
|
7
8
|
- `Flask-Security <https://github.com/pallets-eco/flask-security/>`_
|
|
8
9
|
|
|
@@ -29,13 +30,13 @@ Examples
|
|
|
29
30
|
.. code-block:: python
|
|
30
31
|
|
|
31
32
|
from flask import Flask
|
|
32
|
-
from flask_exts import
|
|
33
|
+
from flask_exts import Exts
|
|
33
34
|
|
|
34
35
|
app = Flask(__name__)
|
|
35
36
|
app.config["SECRET_KEY"] = "dev"
|
|
36
|
-
#
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
# Exts init
|
|
38
|
+
exts = Exts()
|
|
39
|
+
exts.init_app(app)
|
|
39
40
|
|
|
40
41
|
if __name__ == "__main__":
|
|
41
42
|
app.run(debug=True)
|
|
@@ -32,12 +32,12 @@ extensions = [
|
|
|
32
32
|
"sphinx.ext.intersphinx",
|
|
33
33
|
]
|
|
34
34
|
|
|
35
|
-
intersphinx_mapping = {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
40
|
-
intersphinx_disabled_domains = ["std"]
|
|
35
|
+
# intersphinx_mapping = {
|
|
36
|
+
# "rtd": ("https://docs.readthedocs.io/en/stable/", None),
|
|
37
|
+
# "python": ("https://docs.python.org/3/", None),
|
|
38
|
+
# "sphinx": ("https://www.sphinx-doc.org/en/master/", None),
|
|
39
|
+
# }
|
|
40
|
+
# intersphinx_disabled_domains = ["std"]
|
|
41
41
|
|
|
42
42
|
templates_path = ["_templates"]
|
|
43
43
|
|
|
@@ -10,6 +10,7 @@ Welcome to Flask-Exts's documentation!
|
|
|
10
10
|
|
|
11
11
|
Flask-Exts is mainly inspired by:
|
|
12
12
|
|
|
13
|
+
- `Bootstrap <https://getbootstrap.com/>`_
|
|
13
14
|
- `Flask-Admin <https://github.com/pallets-eco/flask-admin/>`_
|
|
14
15
|
- `Flask-Security <https://github.com/pallets-eco/flask-security/>`_
|
|
15
16
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from flask import Flask
|
|
2
|
-
from flask_exts import
|
|
2
|
+
from flask_exts import Exts
|
|
3
3
|
from .models import db, Message, MyCategory
|
|
4
4
|
from .view import BootstrapView
|
|
5
5
|
|
|
@@ -11,9 +11,9 @@ def create_app():
|
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
def init_app(app: Flask):
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
exts = Exts()
|
|
15
|
+
exts.init_app(app)
|
|
16
|
+
exts.admin.add_view(BootstrapView())
|
|
17
17
|
|
|
18
18
|
with app.app_context():
|
|
19
19
|
db.drop_all()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import os.path as op
|
|
2
2
|
from flask import Flask
|
|
3
|
-
from flask_exts import
|
|
3
|
+
from flask_exts import Exts
|
|
4
4
|
|
|
5
5
|
|
|
6
6
|
def get_sqlite_path():
|
|
@@ -25,8 +25,8 @@ def create_app():
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
def init_app(app: Flask):
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
exts = Exts()
|
|
29
|
+
exts.init_app(app)
|
|
30
30
|
|
|
31
31
|
from .models import init_models
|
|
32
32
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from flask import Flask
|
|
2
|
-
from flask_exts import
|
|
2
|
+
from flask_exts import Exts
|
|
3
3
|
from .file_view import file_view
|
|
4
4
|
from flask_exts.datastore.sqla import db
|
|
5
5
|
|
|
@@ -18,6 +18,6 @@ def create_app():
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
def init_app(app: Flask):
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
exts = Exts()
|
|
22
|
+
exts.init_app(app)
|
|
23
|
+
exts.admin.add_view(file_view)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
from flask import Flask
|
|
2
|
-
from flask_exts import
|
|
2
|
+
from flask_exts import Exts
|
|
3
3
|
from flask_exts.datastore.sqla import db
|
|
4
4
|
from flask_exts.views.rediscli.view import RedisCli
|
|
5
5
|
|
|
@@ -9,14 +9,14 @@ from flask_exts.views.rediscli.mock_redis import MockRedis as Redis
|
|
|
9
9
|
app = Flask(__name__)
|
|
10
10
|
app.config["SECRET_KEY"] = "dev"
|
|
11
11
|
|
|
12
|
-
#
|
|
13
|
-
|
|
14
|
-
|
|
12
|
+
# Exts init
|
|
13
|
+
exts = Exts()
|
|
14
|
+
exts.init_app(app)
|
|
15
15
|
|
|
16
16
|
# add rediscli view
|
|
17
17
|
# redis_view = RedisCli(Redis())
|
|
18
18
|
redis_view = RedisCli(Redis())
|
|
19
|
-
|
|
19
|
+
exts.admin.add_view(redis_view)
|
|
20
20
|
|
|
21
21
|
with app.app_context():
|
|
22
22
|
db.drop_all()
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
from flask import Flask
|
|
4
4
|
from flask import render_template_string
|
|
5
|
-
from flask_exts import
|
|
5
|
+
from flask_exts import Exts
|
|
6
6
|
from flask_exts.admin import expose
|
|
7
7
|
from flask_exts.admin import BaseView
|
|
8
8
|
from flask_exts.datastore.sqla import db
|
|
@@ -19,10 +19,10 @@ class MockView(BaseView):
|
|
|
19
19
|
|
|
20
20
|
app = Flask(__name__)
|
|
21
21
|
app.config["SECRET_KEY"] = "dev"
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
exts = Exts()
|
|
23
|
+
exts.init_app(app)
|
|
24
24
|
# Register a mock view
|
|
25
|
-
|
|
25
|
+
exts.admin.add_view(MockView())
|
|
26
26
|
|
|
27
27
|
with app.app_context():
|
|
28
28
|
db.drop_all()
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "0.2.6"
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
from .exts import Exts
|
|
@@ -9,7 +9,7 @@ from .views.index.view import IndexView
|
|
|
9
9
|
from .views.user.view import UserView
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
class
|
|
12
|
+
class Exts:
|
|
13
13
|
"""This is used to manager babel,template,admin, and so on..."""
|
|
14
14
|
|
|
15
15
|
def __init__(self, app=None):
|
|
@@ -29,10 +29,10 @@ class Manager:
|
|
|
29
29
|
if not hasattr(app, "extensions"):
|
|
30
30
|
app.extensions = {}
|
|
31
31
|
|
|
32
|
-
if "
|
|
33
|
-
raise Exception("
|
|
32
|
+
if "exts" in app.extensions:
|
|
33
|
+
raise Exception("exts extension already exists in app.extensions.")
|
|
34
34
|
|
|
35
|
-
app.extensions["
|
|
35
|
+
app.extensions["exts"] = self
|
|
36
36
|
|
|
37
37
|
# init sqlalchemy db
|
|
38
38
|
if app.config.get("SQLALCHEMY_DATABASE_URI", None) is None:
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import typing as t
|
|
2
|
+
|
|
3
|
+
from flask import current_app
|
|
4
|
+
from werkzeug.local import LocalProxy
|
|
5
|
+
|
|
6
|
+
if t.TYPE_CHECKING:
|
|
7
|
+
from .exts import Exts
|
|
8
|
+
from .template.base import Template
|
|
9
|
+
from .usercenter.base_user_store import BaseUserStore
|
|
10
|
+
from .security.core import Security
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
_exts: "Exts" = LocalProxy(lambda: current_app.extensions["exts"])
|
|
14
|
+
|
|
15
|
+
_template: "Template" = LocalProxy(lambda: _exts.template)
|
|
16
|
+
|
|
17
|
+
_userstore: "BaseUserStore" = LocalProxy(lambda: _exts.usercenter.userstore)
|
|
18
|
+
|
|
19
|
+
_security: "Security" = LocalProxy(lambda: _exts.security)
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
from markupsafe import Markup
|
|
2
|
+
import os
|
|
3
|
+
import sys
|
|
4
|
+
import importlib.util
|
|
5
|
+
import inspect
|
|
6
|
+
from .base_plugin import BasePlugin
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class PluginManager:
|
|
10
|
+
def __init__(self):
|
|
11
|
+
self.registered_plugins = {}
|
|
12
|
+
self.enabled_plugins = []
|
|
13
|
+
|
|
14
|
+
def register_plugin(self, plugin):
|
|
15
|
+
self.registered_plugins[plugin.name] = plugin
|
|
16
|
+
|
|
17
|
+
def enable_plugin(self, names):
|
|
18
|
+
if isinstance(names, str):
|
|
19
|
+
names = [names]
|
|
20
|
+
for name in names:
|
|
21
|
+
if name not in self.enabled_plugins and name in self.registered_plugins:
|
|
22
|
+
self.enabled_plugins.append(name)
|
|
23
|
+
|
|
24
|
+
def init_app(self, app):
|
|
25
|
+
# Register plugins
|
|
26
|
+
plugins_directory = os.path.dirname(__file__)
|
|
27
|
+
self.load_plugins_in_directory(plugins_directory, BasePlugin)
|
|
28
|
+
# print("registered plugins:", [k for k in self.registered_plugins])
|
|
29
|
+
|
|
30
|
+
def load_css(self):
|
|
31
|
+
css_links = [
|
|
32
|
+
f'<link rel="stylesheet" href="{css}">'
|
|
33
|
+
for name in self.enabled_plugins
|
|
34
|
+
if (plugin := self.registered_plugins.get(name)) and (css := plugin.css())
|
|
35
|
+
]
|
|
36
|
+
css = "\n".join(css_links)
|
|
37
|
+
return Markup(css)
|
|
38
|
+
|
|
39
|
+
def load_js(self):
|
|
40
|
+
js_links = [
|
|
41
|
+
f'<script src="{js}"></script>'
|
|
42
|
+
for name in self.enabled_plugins
|
|
43
|
+
if (plugin := self.registered_plugins.get(name)) and (js := plugin.js())
|
|
44
|
+
]
|
|
45
|
+
js = "\n".join(js_links)
|
|
46
|
+
return Markup(js)
|
|
47
|
+
|
|
48
|
+
def load_plugins_in_directory(self, directory, base_class):
|
|
49
|
+
"""
|
|
50
|
+
Scans the specified directory for Python files, imports them,
|
|
51
|
+
and returns a list of subclasses of the specified base class.
|
|
52
|
+
|
|
53
|
+
:param directory: The directory to scan for Python files.
|
|
54
|
+
:param base_class: The base class to find subclasses of.
|
|
55
|
+
:return: A list of subclasses of the specified base class.
|
|
56
|
+
"""
|
|
57
|
+
subclasses = []
|
|
58
|
+
|
|
59
|
+
for filename in os.listdir(directory):
|
|
60
|
+
if (
|
|
61
|
+
filename.endswith("plugin.py")
|
|
62
|
+
and not filename.startswith("__")
|
|
63
|
+
and filename != "base_plugin.py"
|
|
64
|
+
):
|
|
65
|
+
module_name = filename[:-3]
|
|
66
|
+
try:
|
|
67
|
+
module = importlib.import_module(f"{__package__}.{module_name}")
|
|
68
|
+
except:
|
|
69
|
+
module_path = os.path.join(directory, filename)
|
|
70
|
+
spec = importlib.util.spec_from_file_location(
|
|
71
|
+
module_name, module_path
|
|
72
|
+
)
|
|
73
|
+
module = importlib.util.module_from_spec(spec)
|
|
74
|
+
# sys.modules[module_name] = module
|
|
75
|
+
spec.loader.exec_module(module)
|
|
76
|
+
|
|
77
|
+
for name, obj in inspect.getmembers(module, inspect.isclass):
|
|
78
|
+
if issubclass(obj, base_class) and obj is not base_class:
|
|
79
|
+
subclasses.append((name, obj))
|
|
80
|
+
plugin_instance = obj()
|
|
81
|
+
self.register_plugin(plugin_instance)
|
|
82
|
+
|
|
83
|
+
# print(subclasses)
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
class SearchDetail {
|
|
2
|
+
constructor(searchId) {
|
|
3
|
+
this.searchInput = document.getElementById(searchId);
|
|
4
|
+
this.timeoutId = null;
|
|
5
|
+
this.delay = 500; // 500ms delay
|
|
6
|
+
this.lastValue = '';
|
|
7
|
+
this.searchableRows = null; // no query at constructor
|
|
8
|
+
if (this.searchInput) {
|
|
9
|
+
this.searchInput.addEventListener('input', this.handleInput);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
handleInput = (event) => {
|
|
14
|
+
const value = event.target.value.trim();
|
|
15
|
+
if (value === this.lastValue) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
this.clearTimeout();
|
|
19
|
+
this.timeoutId = setTimeout(() => {
|
|
20
|
+
this.lastValue = value;
|
|
21
|
+
this.performSearch(value);
|
|
22
|
+
}, this.delay);
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
clearTimeout() {
|
|
26
|
+
if (this.timeoutId) {
|
|
27
|
+
clearTimeout(this.timeoutId);
|
|
28
|
+
this.timeoutId = null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
performSearch(value) {
|
|
33
|
+
const rex = new RegExp(value, 'i');
|
|
34
|
+
if (this.searchableRows == null) {
|
|
35
|
+
this.searchableRows = document.querySelectorAll('.searchable tr');
|
|
36
|
+
}
|
|
37
|
+
this.searchableRows.forEach(function (row) {
|
|
38
|
+
const rowText = row.textContent;
|
|
39
|
+
if (rex.test(rowText)) {
|
|
40
|
+
row.style.display = '';
|
|
41
|
+
} else {
|
|
42
|
+
row.style.display = 'none';
|
|
43
|
+
}
|
|
44
|
+
})
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
destroy() {
|
|
48
|
+
this.clearTimeout();
|
|
49
|
+
if (this.searchInput) {
|
|
50
|
+
this.searchInput.removeEventListener('input', this.handleInput);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
}
|
|
55
|
+
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
class ModelAction {
|
|
2
|
+
constructor(actionErrorMessage, actionConfirmations) {
|
|
3
|
+
this.actionErrorMessage = actionErrorMessage;
|
|
4
|
+
this.actionConfirmations = actionConfirmations;
|
|
5
|
+
this.init();
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
init = () => {
|
|
9
|
+
this.rowToggle = document.querySelector('.action-rowtoggle');
|
|
10
|
+
this.inputs = document.querySelectorAll('input.action-checkbox');
|
|
11
|
+
this.setupEventListeners();
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
setupEventListeners() {
|
|
15
|
+
// Master toggle functionality: when master checkbox changes
|
|
16
|
+
this.rowToggle.addEventListener('change', (event) => {
|
|
17
|
+
// Set all individual checkboxes to match master checkbox state
|
|
18
|
+
this.inputs.forEach(input => {
|
|
19
|
+
input.checked = event.target.checked;
|
|
20
|
+
});
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
// Individual checkbox functionality: when any individual checkbox changes
|
|
24
|
+
this.inputs.forEach(input => {
|
|
25
|
+
input.addEventListener('change', () => {
|
|
26
|
+
// Check if all individual checkboxes are checked
|
|
27
|
+
const allInputsChecked = Array.from(this.inputs).every(input => input.checked);
|
|
28
|
+
// Update master checkbox to reflect the overall state
|
|
29
|
+
this.rowToggle.checked = allInputsChecked;
|
|
30
|
+
});
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
execute(name) {
|
|
35
|
+
if (document.querySelectorAll('input.action-checkbox:checked').length === 0) {
|
|
36
|
+
alert(this.actionErrorMessage);
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const msg = this.actionConfirmations[name];
|
|
41
|
+
if (msg) {
|
|
42
|
+
if (!confirm(msg)) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Update hidden form and submit it
|
|
48
|
+
const form = document.getElementById('action_form');
|
|
49
|
+
|
|
50
|
+
// Remove existing action checkboxes from form
|
|
51
|
+
const formCheckboxes = form.querySelectorAll('input.action-checkbox');
|
|
52
|
+
formCheckboxes.forEach(checkbox => {
|
|
53
|
+
checkbox.remove();
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
// Add cloned copies of checked checkboxes to form
|
|
57
|
+
const checkedCheckboxes = document.querySelectorAll('input.action-checkbox:checked');
|
|
58
|
+
checkedCheckboxes.forEach(checkbox => {
|
|
59
|
+
form.appendChild(checkbox.cloneNode(true));
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
// Set action value and submit form
|
|
63
|
+
form.querySelector('input[name="action"]').value = name;
|
|
64
|
+
form.submit();
|
|
65
|
+
return false;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
{% extends 'admin/master.html' %}
|
|
2
2
|
|
|
3
|
+
{%- set _none = _template.theme.plugin.enable_plugin(['detail_filter']) -%}
|
|
4
|
+
|
|
3
5
|
{% block main %}
|
|
4
6
|
{% block navlinks %}
|
|
5
7
|
<ul class="nav nav-tabs">
|
|
@@ -23,9 +25,9 @@
|
|
|
23
25
|
{% endblock %}
|
|
24
26
|
|
|
25
27
|
{% block details_search %}
|
|
26
|
-
<div class="form-inline
|
|
27
|
-
<label for="
|
|
28
|
-
<input id="
|
|
28
|
+
<div class="form-inline detail_filter_container col-lg-6">
|
|
29
|
+
<label for="detail_filter">{{ gettext('Filter') }}</label>
|
|
30
|
+
<input id="detail_filter" type="text" class="ml-3 form-control">
|
|
29
31
|
</div>
|
|
30
32
|
{% endblock %}
|
|
31
33
|
|
|
@@ -47,5 +49,9 @@
|
|
|
47
49
|
|
|
48
50
|
{% block tail %}
|
|
49
51
|
{{ super() }}
|
|
50
|
-
<script
|
|
52
|
+
<script>
|
|
53
|
+
document.addEventListener("DOMContentLoaded",()=>{
|
|
54
|
+
new SearchDetail('detail_filter')
|
|
55
|
+
});
|
|
56
|
+
</script>
|
|
51
57
|
{% endblock %}
|
{flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/admin/model/list.html
RENAMED
|
@@ -6,6 +6,10 @@
|
|
|
6
6
|
{% import 'macro/actions.html' as actionlib with context %}
|
|
7
7
|
{% from 'macro/row_actions.html' import render_row_action with context %}
|
|
8
8
|
|
|
9
|
+
{% if actions %}
|
|
10
|
+
{%- set _none = _template.theme.plugin.enable_plugin(['model_action']) -%}
|
|
11
|
+
{% endif %}
|
|
12
|
+
|
|
9
13
|
{% block styles -%}
|
|
10
14
|
{{ super() }}
|
|
11
15
|
{{ form_css(xeditable=editable_columns) }}
|
|
@@ -180,13 +184,22 @@
|
|
|
180
184
|
{% block tail %}
|
|
181
185
|
{{ super() }}
|
|
182
186
|
{% if filter_groups %}
|
|
183
|
-
<div id="filter-groups-data" class="d-none">{{ filter_groups|tojson
|
|
184
|
-
<div id="active-filters-data" class="d-none">{{ active_filters|tojson
|
|
187
|
+
<div id="filter-groups-data" class="d-none">{{ filter_groups|tojson }}</div>
|
|
188
|
+
<div id="active-filters-data" class="d-none">{{ active_filters|tojson }}</div>
|
|
185
189
|
{% endif %}
|
|
186
190
|
{{ form_js(xeditable=editable_columns) }}
|
|
187
191
|
<script src="{{ url_for('_template.static',filename='js/modal.js') }}"></script>
|
|
188
192
|
<script src="{{ url_for('_template.static',filename='js/filters.js') }}"></script>
|
|
189
193
|
{% if actions %}
|
|
190
|
-
|
|
194
|
+
<script>
|
|
195
|
+
const actionErrorMessage = "{{ _('Please select at least one record.') }}";
|
|
196
|
+
const actionConfirmations = {{ actions_confirmation|tojson }};
|
|
197
|
+
let modelActions;
|
|
198
|
+
document.addEventListener("DOMContentLoaded",()=>{
|
|
199
|
+
modelActions = new ModelAction(actionErrorMessage, actionConfirmations);
|
|
200
|
+
});
|
|
201
|
+
</script>
|
|
191
202
|
{% endif %}
|
|
203
|
+
|
|
204
|
+
|
|
192
205
|
{% endblock %}
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
{%- set _none = _template.theme.plugin.enable_plugin(['detail_filter']) -%}
|
|
2
|
+
|
|
1
3
|
{% block body %}
|
|
2
4
|
<div class="modal-header">
|
|
3
5
|
{% block header_text %}
|
|
@@ -7,9 +9,9 @@
|
|
|
7
9
|
</div>
|
|
8
10
|
<div class="modal-body">
|
|
9
11
|
{% block details_search %}
|
|
10
|
-
<div class="form-inline
|
|
11
|
-
<label for="
|
|
12
|
-
<input id="
|
|
12
|
+
<div class="form-inline detail_filter_container col-lg-6">
|
|
13
|
+
<label for="detail_filter">{{ gettext('Filter') }}</label>
|
|
14
|
+
<input id="detail_filter" type="text" class="ml-3 form-control">
|
|
13
15
|
</div>
|
|
14
16
|
{% endblock %}
|
|
15
17
|
{% block details_table %}
|
|
@@ -30,7 +32,11 @@
|
|
|
30
32
|
{% endblock %}
|
|
31
33
|
|
|
32
34
|
{% block tail %}
|
|
33
|
-
<script
|
|
35
|
+
<script>
|
|
36
|
+
document.addEventListener("DOMContentLoaded",()=>{
|
|
37
|
+
new SearchDetail('detail_filter')
|
|
38
|
+
});
|
|
39
|
+
</script>
|
|
34
40
|
{% endblock %}
|
|
35
41
|
|
|
36
42
|
|
{flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/actions.html
RENAMED
|
@@ -20,12 +20,6 @@
|
|
|
20
20
|
</form>
|
|
21
21
|
{% endmacro %}
|
|
22
22
|
|
|
23
|
-
{% macro add_action_js(message, actions, actions_confirmation) %}
|
|
24
|
-
<div id="actions-confirmation-data" class="d-none">{{ actions_confirmation|tojson|safe }}</div>
|
|
25
|
-
<div id="message-data" class="d-none">{{ message|tojson|safe }}</div>
|
|
26
|
-
<script src="{{ url_for('_template.static',filename='js/actions.js') }}"></script>
|
|
27
|
-
{% endmacro %}
|
|
28
|
-
|
|
29
23
|
{# ---------------------- Modal Window ------------------- #}
|
|
30
24
|
|
|
31
25
|
{% macro add_modal_button(url='', title='', content='', modal_window_id='fa_modal_window', btn_class='icon') %}
|
{flask_exts-0.2.5 → flask_exts-0.2.6}/src/flask_exts/themes/templates/default/macro/row_actions.html
RENAMED
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
{% elif _template.funcs.csrf_token %}
|
|
34
34
|
<input type="hidden" name="csrf_token" value="{{ _template.funcs.csrf_token() }}"/>
|
|
35
35
|
{% endif %}
|
|
36
|
-
<button onclick="return
|
|
36
|
+
<button onclick="return confirm('{{ gettext('Are you sure you want to delete this record?') }}');" title="{{ gettext('Delete Record') }}">
|
|
37
37
|
{{ render_icon(action.icon) }}
|
|
38
38
|
</button>
|
|
39
39
|
</form>
|