simpledomcontrol 0.158.7__tar.gz → 0.158.9__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.
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/PKG-INFO +1 -1
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/pyproject.toml +1 -1
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/consumers.py +9 -3
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/sdc_extentions/models.py +5 -1
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/bin/sdc_tools/controller/sdc_model_form/sdc_model_form.js +16 -12
- {simpledomcontrol-0.158.7/sdc_tools/Assets/src → simpledomcontrol-0.158.9/sdc_tools/Assets/bin}/sdc_tools/controller/sdc_navigator/sdc_navigator.js +8 -4
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/bin/sdc_tools/controller/sdc_search_select/sdc_search_select.js +34 -30
- simpledomcontrol-0.158.9/sdc_tools/Assets/bin/sdc_tools/sdc_tools.organizer.js +1 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/bin/sdc_tools/sdc_tools.style.css +28 -14
- {simpledomcontrol-0.158.7/sdc_tools/Assets/bin → simpledomcontrol-0.158.9/sdc_tools/Assets/src}/sdc_tools/controller/sdc_detail_view/sdc_detail_view.js +0 -7
- {simpledomcontrol-0.158.7/sdc_tools/Assets/bin → simpledomcontrol-0.158.9/sdc_tools/Assets/src}/sdc_tools/controller/sdc_list_view/sdc_list_view.js +25 -14
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_model_form/sdc_model_form.js +16 -12
- {simpledomcontrol-0.158.7/sdc_tools/Assets/bin → simpledomcontrol-0.158.9/sdc_tools/Assets/src}/sdc_tools/controller/sdc_navigator/sdc_navigator.js +8 -4
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_search_select/sdc_search_select.js +34 -30
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_search_select/sdc_search_select.scss +34 -15
- simpledomcontrol-0.158.7/sdc_tools/Assets/bin/sdc_tools/sdc_tools.organizer.js +0 -1
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/README.md +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/__init__.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/apps.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/jwt_utils.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/__init__.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/__init__.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/_private.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/init_add/__init__.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/init_add/add_controller_manager.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/init_add/add_model_manager.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/init_add/options.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/init_add/sdc_core_manager.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/init_add/settings_manager.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/init_add/utils.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_cc.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_db_tools.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_get_controller_infos.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_get_controller_url.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_get_model_infos.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_init.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_is_installed.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_make_model_js.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_new_model.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_open_api.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_overwrite_lib_file.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_shell_execute_script.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_update_links.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/sdc_update_url.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/management/commands/utils/__init__.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/rest_api.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/sdc_extentions/__init__.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/sdc_extentions/forms.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/sdc_extentions/import_manager.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/sdc_extentions/response.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/sdc_extentions/search.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/sdc_extentions/views.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/signals.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/.devcontainer/Dockerfile +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/.devcontainer/devcontainer.json +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/.devcontainer/on_create.sh +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/.devcontainer/on_startup.sh +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/Assets/babel.config.json +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/Assets/gulpfile.jsx +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/Assets/src/index.organizer.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/Assets/src/index.style.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/Assets/static/img/favicon.png +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/Assets/tests/config/post-test-teardown.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/Assets/tests/config/pre-test-setup.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/Assets/tests/config/test-setup.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/Assets/webpack.config/webpack.bundle.config.jsx +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/Assets/webpack.config/webpack.default.config.jsx +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/Assets/webpack.config/webpack.development.config.jsx +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/Assets/webpack.config/webpack.production.config.jsx +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/asgi.py.txt +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/controller/template_controller.js.txt +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/controller/template_css.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/controller/template_test.js.txt +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/controller/template_view.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/js_test.js.txt +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/models/detail.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/models/list.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/package.json +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/routing.py.txt +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/sdc_urls.py.txt +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/sdc_views.py.txt +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/settings_extension.py.txt +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/templates/base.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/templates/elements/form.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/templates/elements/inline_form.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/templates/index.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/template_files/urls.py.txt +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/templatetags/__init__.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/templatetags/addclass.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/templatetags/indexfilter.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_core/templatetags/sdc_filter.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/bin/sdc_tools/controller/sdc_alert_messenger/sdc_alert_messenger.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/bin/sdc_tools/controller/sdc_auto_submit/sdc_auto_submit.js +0 -0
- {simpledomcontrol-0.158.7/sdc_tools/Assets/src → simpledomcontrol-0.158.9/sdc_tools/Assets/bin}/sdc_tools/controller/sdc_detail_view/sdc_detail_view.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/bin/sdc_tools/controller/sdc_dummy/sdc_dummy.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/bin/sdc_tools/controller/sdc_error/sdc_error.js +0 -0
- {simpledomcontrol-0.158.7/sdc_tools/Assets/src → simpledomcontrol-0.158.9/sdc_tools/Assets/bin}/sdc_tools/controller/sdc_list_view/sdc_list_view.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/bin/sdc_tools/controller/sdc_navigation_client/sdc_navigation_client.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/bin/sdc_tools/controller/sdc_search_view/sdc_search_view.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/bin/sdc_tools/controller/sdc_update_on_change/sdc_update_on_change.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_alert_messenger/sdc_alert_messenger.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_alert_messenger/sdc_alert_messenger.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_auto_submit/sdc_auto_submit.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_detail_view/sdc_detail_view.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_dummy/sdc_dummy.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_dummy/sdc_dummy.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_error/sdc_error.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_error/sdc_error.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_list_view/sdc_list_view.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_model_form/sdc_model_form.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_navigation_client/sdc_navigation_client.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_navigator/sdc_navigator.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_search_view/sdc_search_view.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_search_view/sdc_search_view.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/controller/sdc_update_on_change/sdc_update_on_change.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/sdc_tools.organizer.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/src/sdc_tools/sdc_tools.style.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/Assets/tests/sdc_tools.test.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/__init__.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/admin.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/apps.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/migrations/__init__.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/models.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/sdc_urls.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/sdc_views.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/templates/email/base.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/templates/sdc_tools/sdc/dummy_sdc.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/templates/sdc_tools/sdc/sdc_alert_messenger.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/templates/sdc_tools/sdc/sdc_detail_view.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/templates/sdc_tools/sdc/sdc_dummy.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/templates/sdc_tools/sdc/sdc_error.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/templates/sdc_tools/sdc/sdc_list_view.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/templates/sdc_tools/sdc/sdc_model_form.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/templates/sdc_tools/sdc/sdc_navigator.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/templates/sdc_tools/sdc/sdc_search_select.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/templates/sdc_tools/sdc/sdc_search_view.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/templates/widgets/searchable_select.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/tests.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/views.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_tools/widgets.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/bin/sdc_user/controller/register/register.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/bin/sdc_user/controller/sdc_change_password/sdc_change_password.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/bin/sdc_user/controller/sdc_confirm_email/sdc_confirm_email.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/bin/sdc_user/controller/sdc_login/sdc_login.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/bin/sdc_user/controller/sdc_logout/sdc_logout.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/bin/sdc_user/controller/sdc_password_forgotten/sdc_password_forgotten.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/bin/sdc_user/controller/sdc_reset_password/sdc_reset_password.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/bin/sdc_user/controller/sdc_user/sdc_user.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/bin/sdc_user/controller/sdc_user_nav_btn/sdc_user_nav_btn.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/bin/sdc_user/sdc_user.organizer.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/bin/sdc_user/sdc_user.style.css +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/register/register.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/register/register.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_change_password/sdc_change_password.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_change_password/sdc_change_password.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_confirm_email/sdc_confirm_email.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_confirm_email/sdc_confirm_email.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_login/sdc_login.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_login/sdc_login.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_logout/sdc_logout.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_logout/sdc_logout.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_password_forgotten/sdc_password_forgotten.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_password_forgotten/sdc_password_forgotten.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_reset_password/sdc_reset_password.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_reset_password/sdc_reset_password.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_user/sdc_user.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_user/sdc_user.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_user_nav_btn/sdc_user_nav_btn.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/controller/sdc_user_nav_btn/sdc_user_nav_btn.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/sdc_user.organizer.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/src/sdc_user/sdc_user.style.scss +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/Assets/tests/sdc_user.test.js +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/__init__.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/admin.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/apps.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/forms.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/mails.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/migrations/0001_initial.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/migrations/__init__.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/models.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/sdc_urls.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/sdc_views.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/templates/email/confirm.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/templates/email/reset_password.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/templates/sdc_user/models/SdcUser/SdcUser_details.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/templates/sdc_user/models/SdcUser/SdcUser_list.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/templates/sdc_user/sdc/register.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/templates/sdc_user/sdc/sdc_change_password.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/templates/sdc_user/sdc/sdc_confirm_email.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/templates/sdc_user/sdc/sdc_login.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/templates/sdc_user/sdc/sdc_logout.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/templates/sdc_user/sdc/sdc_password_forgotten.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/templates/sdc_user/sdc/sdc_reset_password.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/templates/sdc_user/sdc/sdc_user_nav_btn.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/templates/widgets/read_only_password_hash.html +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/tests.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/views.py +0 -0
- {simpledomcontrol-0.158.7 → simpledomcontrol-0.158.9}/sdc_user/widgets.py +0 -0
|
@@ -206,6 +206,7 @@ class SDCModelConsumer(WebsocketConsumer):
|
|
|
206
206
|
def websocket_disconnect(self, close_code):
|
|
207
207
|
for group in self._group_names:
|
|
208
208
|
async_to_sync(self.channel_layer.group_discard(group, self.channel_name))
|
|
209
|
+
hasattr(self.model.SdcMeta, 'on_disconnected') and self.model.SdcMeta.on_disconnected(self._load_model('disconnect'))
|
|
209
210
|
super().websocket_disconnect(close_code)
|
|
210
211
|
|
|
211
212
|
def on_update(self, data):
|
|
@@ -286,7 +287,9 @@ class SDCModelConsumer(WebsocketConsumer):
|
|
|
286
287
|
except Exception as e:
|
|
287
288
|
extracted_list = traceback.extract_tb(e.__traceback__)
|
|
288
289
|
e_text = [e.__str__()] + [item for item in traceback.StackSummary.from_list(extracted_list).format()]
|
|
290
|
+
|
|
289
291
|
if settings.DEBUG:
|
|
292
|
+
logger.error(e_text[0])
|
|
290
293
|
traceback.print_tb(e.__traceback__)
|
|
291
294
|
else:
|
|
292
295
|
logger.error(e_text)
|
|
@@ -316,8 +319,10 @@ class SDCModelConsumer(WebsocketConsumer):
|
|
|
316
319
|
self.channel_name
|
|
317
320
|
)
|
|
318
321
|
|
|
319
|
-
def _load_model(self):
|
|
320
|
-
|
|
322
|
+
def _load_model(self, event_type=None):
|
|
323
|
+
if event_type is None:
|
|
324
|
+
event_type = self.scope['event_type']
|
|
325
|
+
queryset = self.model.get_queryset(self.scope['user'], event_type, self.queryset)
|
|
321
326
|
|
|
322
327
|
data_load_result = self.model.data_load(self.scope['user'], queryset, self.queryset)
|
|
323
328
|
if data_load_result is not None:
|
|
@@ -473,7 +478,8 @@ class SDCModelConsumer(WebsocketConsumer):
|
|
|
473
478
|
loaded_data = self._load_model()
|
|
474
479
|
view_name = json_data['args']['view_name']
|
|
475
480
|
if not hasattr(self.model.SdcMeta, view_name):
|
|
476
|
-
|
|
481
|
+
text = f'"{view_name}" is not implemented in "{loaded_data.__class__.__name__}.SdcMeta".'
|
|
482
|
+
raise Exception(text)
|
|
477
483
|
self.send(text_data=json.dumps({
|
|
478
484
|
'type': json_data['event_type'],
|
|
479
485
|
'event_id': json_data['event_id'],
|
|
@@ -168,7 +168,7 @@ _SDC_META_DEFAULT = {
|
|
|
168
168
|
'create_form': None,
|
|
169
169
|
'html_list_template': None,
|
|
170
170
|
'html_detail_template': None,
|
|
171
|
-
'html_form_template': getattr(settings, 'MODEL_FORM_TEMPLATE', "elements/form.html")
|
|
171
|
+
'html_form_template': getattr(settings, 'MODEL_FORM_TEMPLATE', "elements/form.html"),
|
|
172
172
|
}
|
|
173
173
|
|
|
174
174
|
|
|
@@ -229,6 +229,10 @@ class SdcModel:
|
|
|
229
229
|
"""
|
|
230
230
|
_sdc_checked = False
|
|
231
231
|
|
|
232
|
+
@classmethod
|
|
233
|
+
def on_disconnected(cls, qs: QuerySet):
|
|
234
|
+
pass
|
|
235
|
+
|
|
232
236
|
@property
|
|
233
237
|
def scope(self) -> dict[str, Any]:
|
|
234
238
|
"""
|
|
@@ -85,16 +85,16 @@ export class SdcModelFormController extends AbstractSDC {
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
if (typeof this.model === 'object' && this.model instanceof SdcQuerySet) {
|
|
88
|
-
|
|
89
|
-
this.
|
|
90
|
-
this.
|
|
91
|
-
}
|
|
92
|
-
|
|
88
|
+
if(Object.keys(this.model.modelQuery).length === 0) {
|
|
89
|
+
this.id = null;
|
|
90
|
+
this.model = this.model.new();
|
|
91
|
+
} else {
|
|
92
|
+
try {
|
|
93
|
+
this.model = await this.model.get();
|
|
94
|
+
this.id = this.model.id;
|
|
95
|
+
} catch (e) {
|
|
93
96
|
this.id = null;
|
|
94
97
|
this.model = this.model.new();
|
|
95
|
-
} else {
|
|
96
|
-
console.error(e);
|
|
97
|
-
throw e;
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
}
|
|
@@ -118,10 +118,14 @@ export class SdcModelFormController extends AbstractSDC {
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
async onLoad($html) {
|
|
121
|
-
await this.onInitForm(this.params)
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
121
|
+
await this.onInitForm(this.params).catch((e) => {
|
|
122
|
+
this.model = null;
|
|
123
|
+
console.error(e);
|
|
124
|
+
});
|
|
125
|
+
if (this.model) {
|
|
126
|
+
this.form = this.formGenerator(this.model).addClass('container-fluid');
|
|
127
|
+
$html.find('.form-container').append(this.form);
|
|
128
|
+
}
|
|
125
129
|
// $html.find(`.not-${this.type}`).remove();
|
|
126
130
|
return super.onLoad($html);
|
|
127
131
|
}
|
|
@@ -182,7 +182,7 @@ export class SdcNavigatorController extends AbstractSDC {
|
|
|
182
182
|
}
|
|
183
183
|
this._is_processing = false;
|
|
184
184
|
this._updateBreadcrumb();
|
|
185
|
-
this._checkProcessQueue();
|
|
185
|
+
this._checkProcessQueue(controller);
|
|
186
186
|
this.refresh();
|
|
187
187
|
return;
|
|
188
188
|
}
|
|
@@ -237,7 +237,7 @@ export class SdcNavigatorController extends AbstractSDC {
|
|
|
237
237
|
} else {
|
|
238
238
|
this._updateBreadcrumb();
|
|
239
239
|
if (!this._manageDefault(last_view_array.empty_container)) {
|
|
240
|
-
this._checkProcessQueue();
|
|
240
|
+
this._checkProcessQueue(controller);
|
|
241
241
|
}
|
|
242
242
|
setTimeout(() => {
|
|
243
243
|
this.$container.find('.header-loading').removeClass('active');
|
|
@@ -264,12 +264,16 @@ export class SdcNavigatorController extends AbstractSDC {
|
|
|
264
264
|
return c_list.join('~').split('~~').join('~');
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
-
_checkProcessQueue() {
|
|
267
|
+
_checkProcessQueue(controller) {
|
|
268
268
|
let next = this._process_queue.shift();
|
|
269
269
|
this._current_process = null;
|
|
270
270
|
if (next) {
|
|
271
271
|
this._pushState(next[0], next[1]);
|
|
272
|
-
} else if (this._redirectAfterCurrentProcess) {
|
|
272
|
+
} else if (this._redirectAfterCurrentProcess || controller.autoRedirect) {
|
|
273
|
+
if(controller.autoRedirect) {
|
|
274
|
+
this._RedirectOnView(controller.autoRedirect);
|
|
275
|
+
}
|
|
276
|
+
|
|
273
277
|
const temp = this._redirectAfterCurrentProcess;
|
|
274
278
|
this._redirectAfterCurrentProcess = null;
|
|
275
279
|
this.goTo(temp);
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {AbstractSDC, app} from 'sdc_client';
|
|
1
|
+
import { AbstractSDC, app } from 'sdc_client';
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
class SdcSearchSelectController extends AbstractSDC {
|
|
@@ -63,7 +63,7 @@ class SdcSearchSelectController extends AbstractSDC {
|
|
|
63
63
|
this.name = name;
|
|
64
64
|
if (modelName) {
|
|
65
65
|
if (ids) {
|
|
66
|
-
this.model = this.newModel(modelName, {pk__in: ids});
|
|
66
|
+
this.model = this.newModel(modelName, { pk__in: ids });
|
|
67
67
|
} else {
|
|
68
68
|
this.model = this.newModel(modelName);
|
|
69
69
|
}
|
|
@@ -132,32 +132,28 @@ class SdcSearchSelectController extends AbstractSDC {
|
|
|
132
132
|
|
|
133
133
|
current_val() {
|
|
134
134
|
if (this._state === 0) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
values = this.value[0];
|
|
144
|
-
}
|
|
145
|
-
return <div className={this.multi ? 'multi' : ''}>{this._currentOption}
|
|
146
|
-
<input className="timer-change" type="hidden" name={this.name} value={values}/>
|
|
147
|
-
</div>
|
|
148
|
-
}
|
|
135
|
+
if (this.value.length === 0) {
|
|
136
|
+
return <div>
|
|
137
|
+
<p sdc_click="onActivate" className="mb-2 custom-select form-control">
|
|
138
|
+
<span className="select-label">{gettext('Search & select...')}</span>
|
|
139
|
+
<span className="select-arrow"></span>
|
|
140
|
+
</p>
|
|
141
|
+
<input type="hidden" className="timer-change" name={this.name} value=""/>
|
|
142
|
+
</div>
|
|
149
143
|
}
|
|
150
144
|
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
145
|
+
let values;
|
|
146
|
+
if (this.multi) {
|
|
147
|
+
values = `[${this.value.join(',')}]`;
|
|
148
|
+
} else {
|
|
149
|
+
values = this.value[0];
|
|
150
|
+
}
|
|
151
|
+
return <div sdc_click="onActivate" className={this.multi ? 'multi custom-select-selected' : 'custom-select-selected'}>
|
|
152
|
+
{this._currentOption.map(this._optionBtnToSelected.bind(this))}
|
|
153
|
+
<input className="timer-change" type="hidden" name={this.name} value={values}/>
|
|
154
|
+
<span className="select-arrow"></span>
|
|
157
155
|
</div>
|
|
158
156
|
}
|
|
159
|
-
|
|
160
|
-
|
|
161
157
|
}
|
|
162
158
|
|
|
163
159
|
onActivate() {
|
|
@@ -182,9 +178,8 @@ class SdcSearchSelectController extends AbstractSDC {
|
|
|
182
178
|
});
|
|
183
179
|
}
|
|
184
180
|
|
|
185
|
-
|
|
181
|
+
_optionBtnToSelected($btn) {
|
|
186
182
|
const currentOption = $btn.clone()[0];
|
|
187
|
-
$btn.addClass('selected');
|
|
188
183
|
// copy attributes into array first (NamedNodeMap is live)
|
|
189
184
|
Array.from(currentOption.attributes).forEach(attr => currentOption.removeAttribute(attr.name));
|
|
190
185
|
currentOption.className = "selected-option";
|
|
@@ -196,19 +191,28 @@ class SdcSearchSelectController extends AbstractSDC {
|
|
|
196
191
|
currentOption.append(delBtn[0]);
|
|
197
192
|
}
|
|
198
193
|
|
|
194
|
+
return currentOption;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
_storeSelectedOption($btn) {
|
|
198
|
+
const newVal = String($btn.data('value'));
|
|
199
|
+
$btn.addClass('selected');
|
|
199
200
|
if (!this.multi) {
|
|
200
201
|
this.value = [newVal];
|
|
201
|
-
this._currentOption
|
|
202
|
+
this._currentOption.forEach(($selBtn) => $selBtn.removeClass('selected'));
|
|
203
|
+
this._currentOption = [$btn];
|
|
202
204
|
} else if (!this.value.includes(newVal)) {
|
|
203
205
|
this.value.push(newVal);
|
|
204
|
-
this._currentOption.push(
|
|
206
|
+
this._currentOption.push($btn);
|
|
205
207
|
}
|
|
206
208
|
}
|
|
207
209
|
|
|
208
|
-
remove_selection($btn) {
|
|
210
|
+
remove_selection($btn, e) {
|
|
211
|
+
e.stopPropagation();
|
|
209
212
|
const idx = this.value.indexOf($btn.data('value'));
|
|
210
213
|
this.value.splice(idx, 1);
|
|
211
|
-
this._currentOption.splice(idx, 1);
|
|
214
|
+
const [$selBtn] = this._currentOption.splice(idx, 1);
|
|
215
|
+
$selBtn.removeClass('selected');
|
|
212
216
|
this.refresh().then(() => {
|
|
213
217
|
this.find('.timer-change').trigger('change');
|
|
214
218
|
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
(()=>{"use strict";const t=sdc_client;class SdcSearchSelectController extends t.AbstractSDC{constructor(){super(),this.contentUrl="/sdc_view/sdc_tools/sdc_search_select",this._state=0,this._searchIdx={},this._searchtimer=null,this._currentOption=[],this.startValues=[],this.value=[],this._allowDelete=!1,this.model=null,this.events.unshift({click:{".option-container":function(t){this.onSelect(t)}}})}onInitSearchSelect({name:t="unknown",required:e,value:i=[""],modelName:s,multiple:n,ids:r}){this.required=Boolean("true"===e?.toLocaleLowerCase()),this.multi=Boolean("true"===n?.toLocaleLowerCase()),this._allowDelete=!this.required||this.multi,this.startValues=i instanceof Array?i:JSON.parse(i.replaceAll("'",'"')),this.name=t,s&&(this.model=r?this.newModel(s,{pk__in:r}):this.newModel(s))}onLoad(t){if(this.onInitSearchSelect(this.params),!this.model){let e=this;const i=$('<div class="all-option-container"></div>');t.find(".main-select-options").append(i),this.find(".option-container").each((function(){e._prepareOption(this),i.append(this)}))}return super.onLoad(t)}willShow(){return this.model?new Promise((t=>{const e=this,i=this.model.view({viewName:"html_select_template",cbResolve:()=>{e.find(".option-container").each((function(){e._prepareOption(this)})),t(super.willShow())}});i.removeClass("container-fluid").addClass("all-option-container"),this.find(".main-select-options").append(i)})):super.willShow()}_prepareOption(t){const e=$(t),i=String(e.data("value")),s=i.replace(/[^a-zA-Z0-9_-]+/g,"__");this._searchIdx[s]=e.data("search").toLowerCase().split(",").map((t=>t.replaceAll(" ",""))),this._searchIdx[s].push(e.data("search")),e.addClass(`oc-${s}`).addClass("oc-style"),this.startValues.includes(i)&&this._storeSelectedOption(e)}onRefresh(){return 1===this._state?(setTimeout((()=>this.find(".search-term-input").focus()),100),this.find(".main-select-options").addClass("active").find(".search-term-input").val(""),this.find(".option-container").addClass("found")):this.find(".main-select-options").removeClass("active"),super.onRefresh()}current_val(){if(0===this._state){if(0===this.value.length)return sdcDom("div",null,sdcDom("p",{sdc_click:"onActivate",className:"mb-2 custom-select form-control"},sdcDom("span",{className:"select-label"},gettext("Search & select...")),sdcDom("span",{className:"select-arrow"})),sdcDom("input",{type:"hidden",className:"timer-change",name:this.name,value:""}));let t;return t=this.multi?`[${this.value.join(",")}]`:this.value[0],sdcDom("div",{sdc_click:"onActivate",className:this.multi?"multi custom-select-selected":"custom-select-selected"},this._currentOption.map(this._optionBtnToSelected.bind(this)),sdcDom("input",{className:"timer-change",type:"hidden",name:this.name,value:t}),sdcDom("span",{className:"select-arrow"}))}}onActivate(){this._state=1,this.refresh()}onDeactivate(t,e){const i=document.elementFromPoint(e.clientX,e.clientY);$(i).hasClass("background-event")&&this._deactivate()}_deactivate(){return new Promise((t=>{setTimeout((()=>{this._state=0,t(this.refresh())}),100)}))}_optionBtnToSelected(t){const e=t.clone()[0];Array.from(e.attributes).forEach((t=>e.removeAttribute(t.name))),e.className="selected-option";const i=String(t.data("value"));if(this._allowDelete){const t=$('<button type="button" sdc_click="remove_selection" class="delete-btn" aria-label="Remove Bouldering">×</button>');t.data("value",i),e.append(t[0])}return e}_storeSelectedOption(t){const e=String(t.data("value"));t.addClass("selected"),this.multi?this.value.includes(e)||(this.value.push(e),this._currentOption.push(t)):(this.value=[e],this._currentOption.forEach((t=>t.removeClass("selected"))),this._currentOption=[t])}remove_selection(t,e){e.stopPropagation();const i=this.value.indexOf(t.data("value"));this.value.splice(i,1);const[s]=this._currentOption.splice(i,1);s.removeClass("selected"),this.refresh().then((()=>{this.find(".timer-change").trigger("change")}))}onSelect(t){this._storeSelectedOption(t),this._deactivate().then((()=>{this.find(".timer-change").trigger("change")}))}updateSearch(t){this._searchtimer&&clearTimeout(this._searchtimer),this._searchtimer=setTimeout((()=>{this.find(".option-container").removeClass("found");const e=t.val().toLowerCase().split(/[,\s]+/);e&&Object.entries(this._searchIdx).forEach((([t,i])=>{e.every((t=>i.some((e=>e.includes(t)))))&&this.find(`.oc-${t}`).addClass("found")}))}),500)}}t.app.register(SdcSearchSelectController);class SdcDummyController extends t.AbstractSDC{constructor(){super(),this.contentUrl="/sdc_view/sdc_tools/sdc_dummy"}onInitDummy({text:t}){this._text=t}onLoad(t){return this.onInitDummy(this.params),t.find(".origen_content").append(this.$container.html()),super.onLoad(t)}willShow(){return super.willShow()}onRefresh(){return super.onRefresh()}page_text(){return sdcDom("p",{className:"col"},this._text||"")}}t.app.register(SdcDummyController);class SdcAutoSubmitController extends t.AbstractSDC{constructor(){super(),this.events.unshift({submit:{".ajax-form":function(e,i){i.preventDefault();const s=e[0];this.submitForm(s).then((e=>{(e.msg||e.header)&&(0,t.trigger)("pushMsg",e.header||"",e.msg||""),(0,t.clearErrorsInForm)($(s)),this.onSubmit(e)})).catch((i=>{let s=i.responseJSON;s&&(s.html&&(0,t.setErrorsInForm)(e,$(s.html)),(s.msg||s.header)&&(0,t.trigger)("pushErrorMsg",s.header||"",s.msg||"")),this.onErrorSubmit(i)}))}}})}onLoad(t){return super.onLoad(t)}willShow(){return super.willShow()}onRefresh(){return super.onRefresh()}onSubmit(){}onErrorSubmit(){}onChange(t){t.closest(".ajax-form").submit()}}t.app.register(SdcAutoSubmitController);class SdcErrorController extends t.AbstractSDC{constructor(){super(),this.contentUrl="/sdc_view/sdc_tools/sdc_error/%(code)s"}onLoad(t){return t.find(".error_content").append(this.$container.html()),super.onLoad(t)}willShow(){return super.willShow()}onRefresh(){return super.onRefresh()}}t.app.register(SdcErrorController);class SdcNavigationClientController extends t.AbstractSDC{constructor(){super(),this.menu_id=0,this._navController=null}onLoad(e){return(0,t.on)("_onResize",this),super.onLoad(e)}willShow(){return this.confirmPageLoaded(),super.willShow()}_onResize(){this.onResize()}onResize(){}confirmPageLoaded(){(0,t.trigger)("navLoaded",this),(0,t.trigger)("changeMenu",this.menu_id)}get navController(){return this._navController?.deref()}get activeController(){return this._navController?.deref().activeController}get navControllerPath(){return this._navController?.deref()._origin_target}}t.app.register(SdcNavigationClientController);class SdcAlertMessengerController extends t.AbstractSDC{constructor(){super(),this.contentUrl="/sdc_view/sdc_tools/sdc_alert_messenger",this.msgCounter=0}onLoad(e){return(0,t.on)("pushMsg",this),(0,t.on)("pushErrorMsg",this),super.onLoad(e)}willShow(){return super.willShow()}onRefresh(){return super.onRefresh()}pushMsg(t,e){return this._pushMsg(t,e,!1)}pushErrorMsg(t,e){return this._pushMsg(t,e,!0)}_pushMsg(t,e,i){"string"==typeof e&&(e=[e]),this._pushMsgArray(t,e,i)}_pushMsgArray(t,e,i){let s=this.find(".dummy_row");if(0===s.length)return;let n=s.clone();n.removeClass("dummy_row"),i&&n.addClass("error_box"),n.find(".msg_header").text(t),n.find(".msg_body")[0].innerHTML=e;let r=new Date,o=r.getMinutes();o=o<10?"0"+o:o,n.find(".msg_date").text(r.getHours()+":"+o),n.insertAfter(s);let a=this;var l;this.msgCounter++,this.find(".alert_msg_container").addClass("active"),l=n,setTimeout((()=>{l.remove(),a.msgCounter--,0===a.msgCounter&&a.find(".alert_msg_container").removeClass("active")}),2e3)}}t.app.registerGlobal(SdcAlertMessengerController);class SdcUpdateOnChangeController extends t.AbstractSDC{constructor(){super(),this._timer=null,this.isAutoChange=!0,this._isNotReady=!0,this._isChanged=!1,this._lastTimeChanged="",this.events.unshift({change:{".timer-change":this.change},keydown:{".timer-change":this.startTimer}})}onLoad(t){return super.onLoad(t)}willShow(){return this._isNotReady=!0,super.willShow()}onRefresh(){return setTimeout((()=>{this._isNotReady=!1}),500),super.onRefresh()}change(t){this.isAutoChange&&!this._isNotReady&&(this._timer&&(clearTimeout(this._timer),this._timer=null),!this._lastTimeChanged!==t.name&&(this.onChange($(t)),this._isChanged=!0,this._lastTimeChanged=""))}startTimer(t){this.isAutoChange&&!this._isNotReady&&(this._timer&&(clearTimeout(this._timer),this._timer=null),this._lastTimeChanged="",this._isChanged=!1,this._timer=setTimeout((()=>{this._isChanged||(this.onChange($(t)),this._lastTimeChanged=t.name)}),1e3))}}t.app.register(SdcUpdateOnChangeController);class SdcSearchViewController extends t.AbstractSDC{constructor(){super(),this.contentUrl="/sdc_view/sdc_tools/sdc_search_view",this.isRange=!0,this.isTotalCount=!0,this.dataIdxKey="next-idx",this.id=`${(new Date).getTime()}_${Math.random().toString(36).substring(7)}`,this.$form=null,this.events.unshift({submit:{".search-form":(t,e)=>{e.preventDefault()}},click:{".page-number-control-btn":function(t){this.$form[0].range_start.value=$(t).data(this.dataIdxKey),this.onChange()}}})}onInitSearch({url:t,rangeSize:e,rangeStart:i,rangeEnd:s,totalCount:n,removeLabels:r}){this.url=t||"",void 0===i||void 0===s?this.isRange=!1:(void 0===e&&(e=s-i),void 0===n&&(this.isTotalCount=!1),this.totalCount=n,this.rangeSize=e,this.range=[i-e-1,i,s],i<=1&&s>=n&&(this.isRange=!1)),this.removeLabels=r||!1}onLoad(t){return this.onInitSearch(this.params),this.$form=$(document.createElement("form")),t.find(".inner-form.search-form").append(this.$container.html()),this.$form.append(this.$container.html()),this.$form.attr("action",this.url),this.$form.attr("method","post"),this.$form.attr("id",this.id),super.onLoad(t)}willShow(){let t=this.find(".page-number-control");return this.find(".form-group").addClass("form-group-sm"),this.removeLabels&&(this.find(".form-input-container").removeClass("col-md-7"),this.find(".form-group").addClass("no-label")),this.isRange?(t.find(".range-span").text(this.range[1]+" - "+this.range[2]),this.isTotalCount?t.find(".total-amount-span").text(" / "+this.totalCount):t.find(".total-amount-span").remove(),this.range[1]>1?t.find(".page-number-control-btn-prev").data(this.dataIdxKey,this.range[0]):t.find(".page-number-control-btn-prev").addClass("disabled").prop("disabled",!0),this.range[2]<this.totalCount?t.find(".page-number-control-btn-next").data(this.dataIdxKey,this.range[2]):t.find(".page-number-control-btn-next").addClass("disabled").prop("disabled",!0),super.willShow()):(t.remove(),super.willShow())}onRefresh(){return super.onRefresh()}onChange(){let t=this.find(".inner-form.search-form");this.$form.find(".form-control").each((function(){if(""!==this.id){let e=t.find(`#${this.id}`);if("SELECT"===this.tagName){let t=$(this);t.empty(),t.append(`<option value="${e.val()}" selected">`)}else $(this).val(e.val())}})),this._parentController.onSearch?this._parentController.onSearch(this.$form[0]):console.error("SearchController parent needs to implement onSearch(form)")}}t.app.register(SdcSearchViewController).addMixin("sdc-update-on-change");class SdcDetailViewController extends t.AbstractSDC{constructor(){super(),this.contentUrl="/sdc_view/sdc_tools/sdc_detail_view",this.template_context=null,this.model=null}async onInitDetails({model:e,pk:i,id:s}){if(this.id??=s??i,this.model&&(e=this.model),e instanceof Promise&&(e=await e),"object"==typeof e&&e instanceof t.SdcModel)return this.model=e,void(this.querySetInstance=e.querySet);"object"==typeof e&&e instanceof t.SdcQuerySet&&(this.querySetInstance=e),"object"!=typeof e&&(this.querySetInstance=this.querySet(this.model_name||e,{id:this.id})),this.model=await this.querySetInstance.get()}async onLoad(t){await this.onInitDetails(this.params);const e=this.model.detailView({cbResolve:()=>{this.find(".detail-container").append(e),this.refresh().then((t=>null)),this._onUpdate.bind(this)},templateContext:this.template_context});return this.querySetInstance&&(this.querySetInstance.onUpdate=async()=>{await this._updateView(),this._onUpdate()}),super.onLoad(t)}willShow(){return super.willShow()}onRefresh(){return this.find('[data-bs-toggle="tooltip"]').each((function(){new Tooltip(this)})),super.onRefresh()}_onUpdate(){this.on_update&&this.model.update().then((()=>{this.on_update(this.model)}))}_updateView(){return new Promise((e=>{const i=this.model.detailView({cbResolve:()=>{$(".tooltip.fade.show").remove(),t.app.reconcile(this,i,this.find(".detail-container").children()),e()},templateContext:this.template_context})}))}}t.app.register(SdcDetailViewController);class SdcModelFormController extends t.AbstractSDC{constructor(){super(),this.id=null,this.contentUrl="/sdc_view/sdc_tools/sdc_model_form",this.model_name=null,this.isKeepEditing=null,this.isReset=null,this._isLoaded=!1,this.autoSave=null,this.model=null,this.formHeader=null,this.buttonText=null}async onInitForm({model:e,pk:i,id:s,next:n,filter:r=null,on_update:o,on_error:a,form_header:l,button_text:h,form_name:d=!1,reset_on_save:c=!1,editing_after_save:u=!1,auto_save:p=!0}){if(this.on_update??=o,this.on_error??=a,this.next??=n,this.buttonText??=h||gettext("Save"),this.formHeader??=l,this.autoSave??=p,this.isReset??=c,this.isKeepEditing??=u,this.id??=s??i,this.form_name??=d,this.id?r={id:this.id}:"function"==typeof r&&(r=r()),this.model&&(e=this.model),e instanceof Promise&&(e=await e),"object"==typeof e&&e instanceof t.SdcModel?(this.model=e,this.id??=e.id):"object"!=typeof e?this.model=this.querySet(this.model_name||e,r):"object"==typeof e&&e instanceof t.SdcQuerySet&&(this.model=e),"object"==typeof this.model&&this.model instanceof t.SdcQuerySet)if(0===Object.keys(this.model.modelQuery).length)this.id=null,this.model=this.model.new();else try{this.model=await this.model.get(),this.id=this.model.id}catch(t){this.id=null,this.model=this.model.new()}void 0===this.id||null===this.id?(this.isAutoChange=!1,this.type="create",this.formGenerator=t=>t.form({cbResolve:this._onFormLoaded.bind(this)})):this.form_name?(this.isAutoChange=this.autoSave,this.type="edit",this.formGenerator=t=>t.namedForm({formName:this.form_name,cbResolve:this._onFormLoaded.bind(this)})):(this.isAutoChange=!0,this.type="edit",this.formGenerator=t=>t.form({cbResolve:this._onFormLoaded.bind(this)}))}async onLoad(t){return await this.onInitForm(this.params).catch((t=>{this.model=null,console.error(t)})),this.model&&(this.form=this.formGenerator(this.model).addClass("container-fluid"),t.find(".form-container").append(this.form)),super.onLoad(t)}onChange(){this.form?.closest("form").submit()}willShow(){return super.willShow()}onRefresh(){return super.onRefresh()}_onFormLoaded(){this._isLoaded||this.refresh(),this._isLoaded=!0}_createFormToEditForm(){this.id=this.model.id,this.type="edit",this.isAutoChange=!0;const t=this.form?.closest("form"),e=t.clone(),i=e.find(".form-container").safeEmpty(),s=this.model.form({cbResolve:()=>{this.reconcile(e,t)}}).addClass("container-fluid");i.append(s)}submitModelForm(e,i){let s=this;return super.defaultSubmitModelForm(e,i).then((function(i){let n=!0;i&&"create"===i.type&&(n=!1,s.isReset?e[0].reset():s.isKeepEditing?(s.model.querySet.setIds(s.model.id),s._createFormToEditForm()):(0,t.trigger)("goTo",s.next||"..")),s.on_update&&s.on_update(i),n&&s.next&&(0,t.trigger)("goTo",s.next)})).catch((t=>{s.on_error&&s.on_error(t)}))}controller_name(){return`${this.type.replace(/^./g,(t=>t.toUpperCase()))} ${this.model.constructor.name.replace(/[A-Z]/g,(t=>" "+t)).replace(/^./g,(t=>t.toUpperCase()))}`}save_btn(){return this._isLoaded?this.autoSave||"edit"!==this.type?sdcDom("span",null):sdcDom("button",{className:"btn btn-success"},this.buttonText):sdcDom("h3",null,gettext("Loading..."))}header_top(){return this.formHeader?sdcDom("h3",null,this.formHeader):sdcDom("span",null)}}t.app.register(SdcModelFormController).addMixin("sdc-update-on-change");class SdcListViewController extends t.AbstractSDC{constructor(){super(),this.contentUrl="/sdc_view/sdc_tools/sdc_list_view",this.search_values={},this.model_name=null,this.template_context=null}async onInitList({model:e,filter:i,onUpdate:s}){this.model&&(e=this.model),e instanceof Promise&&(e=await e),this.filter??=i,this.model_name??=e,this.on_update??=s,"function"==typeof this.filter&&(this.filter=this.filter()),"object"==typeof e&&e instanceof t.SdcQuerySet&&(this.model=e),"object"!=typeof e&&(this.model=this.querySet(this.model_name)),this.filter&&this.model.setFilter(this.filter),this.on_update&&this.model.load().then((()=>{this.on_update(this.model)}))}onLoad(t){this.onInitList(this.params);let e=t.filter(".list-container");return 0===e.length&&(e=t.find(".list-container")),e.append(this.model.listView({modelQuery:this.search_values,templateContext:this.template_context})),this.model.onUpdate=this.model.onCreate=()=>{this.on_update&&this.model.update().then((()=>{this.on_update(this.model)})),this._updateView()},super.onLoad(t)}willShow(){return super.willShow()}onRefresh(){return this.find('[data-bs-toggle="tooltip"]').each((function(){new Tooltip(this)})),super.onRefresh()}removeInstance(t){this.model.delete({id:t.data("instance-pk")})}onSearch(t){new FormData(t).forEach(((t,e)=>this.search_values[e]=t)),this._updateView()}_updateView(){const e=this.model.listView({searchValues:this.search_values,templateContext:this.template_context,cbResolve:()=>{$(".tooltip.fade.show").remove(),t.app.reconcile(this,e,this.find(".list-container .container-fluid").first()).then((t=>null))}})}}t.app.register(SdcListViewController);const e="sdc_sub_detail_container",i="sdc_detail_view";class SdcNavigatorController extends t.AbstractSDC{constructor(){super(),this.contentUrl="/sdc_view/sdc_tools/sdc_navigator",this._setup(),this.events.unshift({click:{".navigation-links":function(t,e){e.preventDefault(),this.onNavLink(t,e)}}})}_setup(){this._isLoggedIn=!1,this._history_path=[],this._breadcrumb=[],this._activeContorller=[],this._history_idx=0,this._origin_target=[],this._$detail_view_container=[],this._default_controller=null,this._previous_args=[],this._is_processing=!1,this._process_queue=[],this._current_process=null,this._redirectAfterCurrentProcess=null,this._non_controller_path_prefix="/",this._menu_id=0}onInitNav({defaultController:t}){this._default_controller=t}onLoad(e){return this.onInitNav(this.params),(0,t.on)("onNavLink",this),(0,t.on)("onNavigateToController",this),(0,t.on)("_RedirectOnView",this),(0,t.on)("goTo",this),(0,t.on)("changeMenu",this),(0,t.on)("navigateToPage",this),(0,t.on)("navLoaded",this),(0,t.on)("login",this),(0,t.on)("logout",this),e.find(".main-nav-import-container").append(this.$container.html()),this._isLoggedIn=e.data("user"),super.onLoad(e)}willShow(){let e=this;$(window).resize((function(){(0,t.trigger)("_onResize",e)})),this._setupButton();let i=this._handleUrl(window.location.pathname);return history.replaceState(i,"",i.url,i),super.willShow()}onRefresh(){return super.onRefresh()}get activeController(){return this._activeContorller}get default_controller(){return this._default_controller?this._default_controller:(console.error(`Set the property data-default-controller in < ${this.tagName}> (tag name of the default controller)`),"")}onNavLink(t,e){e&&e.preventDefault(),this.goTo($(t).attr("href"))}goTo(t,e=null){return t=this._prepareUrl(t),this.onNavigateToController(t,e)}onNavigateToController(t,e=null){if(Array.isArray(t)&&(t=t.join("~")),e){if(Array.isArray(e))e=e.join("&");else if("object"==typeof e){const t=[];for(const[i,s]of Object.entries(e))t.push(`${i}=${s}`);e=t.join("&")}t+="~&"+e}this._pushState(t)}navigateToPage(e,i,s){this._current_process=[e,i],s&&this._updateButton(s.buttonSelector),this._is_processing=!0,this._origin_target=e;let n=this._getSubViewObj(i);if(this._previous_args=i,n.container.container.data("modal")){if(!this._currentModal){this._currentModal=new Modal(n.container.empty_container.closest(n.container.container.data("modal"))[0],{keyboard:!1}),this._currentModal.show(),this._currentModal.off=()=>{this.addEvent("hide.bs.modal",n.container.container.data("modal"),(()=>{}))};const t="/"+"~*".repeat(n.idx);this.addEvent("hide.bs.modal",n.container.container.data("modal"),(()=>{this._currentModal.off(),this.onNavigateToController(t)}))}}else this._currentModal&&(this._currentModal.off(),this._currentModal.hide(),this._currentModal=null);if(n.isBack){n.container.active_sub_container.removeClass("active loading"),n.container.empty_container.addClass("empty").removeClass("active loading"),n.container.active_container.addClass("active").removeClass("empty loading"),n.container.deeper_sub_container.safeEmpty().removeClass("empty loading");let e=t.app.getController(n.container.active_container.find("> ._sdc_controller_"));return this._manageDefault(n.container.active_container),"function"==typeof e.onBack&&e.onBack(),this._is_processing=!1,this._updateBreadcrumb(),this._checkProcessQueue(e),void this.refresh()}n.container.empty_container.addClass("loading"),n.container.active_sub_container.addClass("loading"),n.container.active_container.addClass("loading");let r=$(`<${n.target}_sdc-navigation-client></${n.target}_sdc-navigation-client>`);for(let[t,e]of Object.entries(i)){let i=t.split(".");i.length>0&&(t=i.at(-1));const s=t.replace(/([A-Z])/g,(t=>"-"+t.toLowerCase()));(1===i.length||i.length>1&&parseInt(i[0])===n.idx+1)&&r.data(s,e)}n.container.empty_container.safeEmpty().append(r),this.refresh(),this.find(".header-loading").addClass("active"),r.hasClass("_sdc_controller_")||(n.container.empty_container.empty().append('<sdc-error_sdc-navigation-client data-code="404"></sdc-error_sdc-navigation-client>'),this.refresh())}navLoaded(t){let e=this._history_path.length-1,i=this._preparedLastViewContainer(e);i.active_container.removeClass("active loading").addClass("empty"),i.active_sub_container.removeClass("active loading"),i.empty_container.addClass("active").removeClass("empty loading"),i.deeper_sub_container.safeEmpty().removeClass("empty loading"),this._breadcrumb.splice(e),this._activeContorller.splice(e),this._is_processing=!1,$(".tooltip.fade.show").remove(),this._breadcrumb[e]=t.controller_name(),this._activeContorller[e]=t,t._navController=new WeakRef(this),this._origin_target.length!==this._history_path.length?this._current_process&&this.navigateToPage(this._current_process[0],this._current_process[1]):(this._updateBreadcrumb(),this._manageDefault(i.empty_container)||this._checkProcessQueue(t),setTimeout((()=>{this.$container.find(".header-loading").removeClass("active")}),100))}_prepareUrl(t){Array.isArray(t)&&(0!==t.length&&[".","..",""].includes(t[0])||t.unshift(""),t=t.join("~"));let e=t.split("~").map((t=>t.split("/"))).flat().filter(((t,e)=>e<1||t.length>0));if(!e[0].startsWith(".")&&"*"!==e[0]&&""!==e[0]){for(let t=0;t<this._history_path.length;++t)e.unshift("*");e.unshift("")}return e.join("~").split("~~").join("~")}_checkProcessQueue(t){let e=this._process_queue.shift();if(this._current_process=null,e)this._pushState(e[0],e[1]);else if(this._redirectAfterCurrentProcess||t.autoRedirect){t.autoRedirect&&this._RedirectOnView(t.autoRedirect);const e=this._redirectAfterCurrentProcess;this._redirectAfterCurrentProcess=null,this.goTo(e)}}_RedirectOnView(t){let e=Array(this._history_path.length).fill("~*").join(""),{href:i}=this._handleUrl(e);this._redirectAfterCurrentProcess=$(t).attr("href").replace("next=..",`next=${i}`)}_updateBreadcrumb(){this._breadcrumb.splice(this._history_path.length),this._activeContorller.splice(this._history_path.length);const t=this.find(".breadcrumb"),e=this;t.each((function(){const t=$(this);t.safeEmpty();let i=t.data("offset");i=i?parseInt(i):0;let s=[];e._breadcrumb.length-i-1>0&&(s=Array(e._breadcrumb.length-i-1).fill(".."));for(let n=i;n<e._breadcrumb.length-1;++n)t.append(`<li class="breadcrumb-item"><a class="navigation-links" href="${s.join("~")}">${e._breadcrumb[n]}</a></li>`),s.pop();t.append(`<li class="breadcrumb-item">${e._breadcrumb.at(-1)}</li>`)}))}_preparedLastViewContainer(){let t=this._$detail_view_container.at(-1);const s=this._$detail_view_container.length-1;0===t.length&&console.error(`sdc-navigation only works if you have a <div class="${i}"></div>`),t.hasClass("prepared")||t.addClass("prepared").safeEmpty(),t.hasClass(`prepared${s}`)||t.addClass(`prepared${s}`).append(`<div data-nav-idx="${s}" class="${e} ${s}_${e} empty"></div>`).append(`<div data-nav-idx="${s}" class="${e} ${s}_${e} active"></div>`);let n=t.find(`> .${s}_${e}`).eq(1),r=t.find(`> .${s}_${e}`).first();return r.hasClass("empty")||([r,n]=[n,r]),{container:t,empty_container:r,active_container:n,active_sub_container:t.find(`.${e}.active`).filter((function(){return parseInt($(this).data("nav-idx"))!==s})),deeper_sub_container:t.find(`.${e}`).filter((function(){return parseInt($(this).data("nav-idx"))>s}))}}_getViewContainer(t=0){0===this._$detail_view_container.length&&this._$detail_view_container.push(this.find(`.${i}`)),this._$detail_view_container.splice(t+1).map((t=>t.addClass("sdc_nav_to_remove").find(`> .${e}`).addClass("loading")));let s=this._preparedLastViewContainer();if(this._$detail_view_container.length!==t+1){let t=s.active_container.find(`.${i}`);0!==t.length?this._$detail_view_container.push(t.first()):this._$detail_view_container.push(this._$detail_view_container.at(-1)),s=this._preparedLastViewContainer()}return s}_getSubViewObj(t){const e=this._origin_target;let i=0,s=!1;for(;i<Math.min(e.length,this._history_path.length)&&e[i]===this._history_path[i];)i++;return i>=e.length&&e[i-1]===this._history_path[i-1]?(i=e.length-1,s=e.length<this._history_path.length&&_.isMatch(this._previous_args,t),this._history_path=[...e]):i>=e.length?(i=e.length-1,this._history_path=[...e]):this._history_path=[...e].slice(0,i+1),{idx:i,container:this._getViewContainer(i),target:e[i],isBack:s}}changeMenu(t){t>0&&this._menu_id!==t&&(this._menu_id=t,this.find(".nav-menu-set").removeClass("active"),this.find(`.nav-menu-set.menu-${t}`).addClass("active"))}_setupButton(){let t=this;this.find(".navigation-links").each((function(){let e=$(this);if(!this.hasAttribute("href"))return;e.hasClass("_link-done")||(e.data("_origin_href",t._prepareUrl(e.attr("href"))),e.addClass("_link-done")),e.addClass("_link-done");let i=t._handleUrl(e.data("_origin_href"));e.attr("href",i.href),e.addClass(`nav-family-${i.path.at(-1)}`)}))}_updateButton(t){let e;return t&&(this._currentButton=t),e=this.find(this._currentButton.join(", ")),e&&(this.find(".navigation-links").removeClass("active"),e.addClass("active")),this._isLoggedIn?(this.find(".navigation-links.only-logged-in").show(),this.find(".navigation-links.only-logged-out").hide()):(this.find(".navigation-links.only-logged-in").hide(),this.find(".navigation-links.only-logged-out").show()),e}_handleUrl(t){let e,i,s,n=t.match(/[&?]/);n?(e=t.substring(n.index+1),i=t.substring(0,n.index).split(/[~]/)):(i=t.split(/[~]/),e="");let r=0;t.startsWith(".")?s=[...this._history_path]:(r=-1,this._non_controller_path_prefix=i.shift(),""===this._non_controller_path_prefix&&(this._non_controller_path_prefix="/"),s=[]);for(let t of i)".."===t?s.pop():"*"===t?this._history_path.length>s.length&&s.push(this._history_path[s.length]):"."!==t&&""!==t&&s.push(t);if(0!==i.length&&i.at(-1)!==s.at(-1)&&(r=0),0===s.length&&""!==this.default_controller)return this._handleUrl(`~${this.default_controller}`);t=this._non_controller_path_prefix+"~"+s.join("~"),e=this._parseArgs(e,s.length);let o=[];r+=s.length;for(const[t,i]of Object.entries(this._previous_args)){let s=t.split(".");!e.hasOwnProperty(t)&&(1===s.length||parseInt(s[0])<=r)&&(e[t]=i)}for(const[t,i]of Object.entries(e))o.push(`${t}=${i}`);o.length>0&&(t+="~&"+o.join("&"));let a=`${window.location.protocol}//${window.location.host}${t}`,l=s.map((t=>`.navigation-links.nav-family-${t}`));return{contentName:s.at(-1),args:e,path:s,buttonSelector:l,url:a,href:t}}_parseArgs(e,i=null){if(!e||""===e)return{};let s={},n=e.split("&");for(var r=0;r<n.length;r++){let e=n[r].split("="),o=e.shift();i&&o.split(".").length<2&&(o=`${i}.${o}`);let a=e.join("=");s.hasOwnProperty(o)&&console.error("Duplication of url params: "+o),s[o]=(0,t.checkIfParamNumberBoolOrString)(decodeURIComponent(a))}return s}_manageDefault(t){const e=t.find(`.${i}`).data("default-controller");return!!e&&(this._pushState(`.~${e}`,!0),!0)}_pushState(t,e=!0){if(this._is_processing)return void this._process_queue.push([t,e]);let i=this._handleUrl(t);e?history.pushState(i,"",i.url):this.navigateToPage(i.path,i.args,i)}login(){location.reload()}logout(){this.login()}}t.app.register(SdcNavigatorController),function(e){function updateStateFunc(i){let s=e[i];e[i]=function(n,r,o){let a=Array.apply(null,arguments);if("function"==typeof e["on"+i.toLowerCase()]&&e["on"+i.toLowerCase()]({state:n}),t.trigger.apply(t.app.events,["navigateToPage",n.path,n.args,n]),"function"==typeof s)return s.apply(e,a)}}updateStateFunc("replaceState"),updateStateFunc("pushState"),updateStateFunc("popState"),window.onpopstate=function(t){e.popState(t.state)}}(window.history)})();
|
|
@@ -229,37 +229,51 @@
|
|
|
229
229
|
cursor: pointer;
|
|
230
230
|
user-select: none;
|
|
231
231
|
transition: all 0.2s ease;
|
|
232
|
+
/* ▼ arrow */
|
|
233
|
+
}
|
|
234
|
+
[sdc-search-select] .main-select .custom-select .select-arrow {
|
|
235
|
+
display: inline-block;
|
|
236
|
+
width: 0;
|
|
237
|
+
height: 0;
|
|
238
|
+
margin-left: 10px;
|
|
239
|
+
vertical-align: middle;
|
|
240
|
+
border-left: 6px solid transparent;
|
|
241
|
+
border-right: 6px solid transparent;
|
|
242
|
+
border-top: 6px solid #555;
|
|
243
|
+
transition: transform 0.2s ease;
|
|
232
244
|
}
|
|
233
|
-
[sdc-search-select] .main-select .custom-select:hover {
|
|
245
|
+
[sdc-search-select] .main-select .custom-select-selected:hover, [sdc-search-select] .main-select .custom-select:hover {
|
|
234
246
|
border-color: #999;
|
|
235
247
|
background-color: #fafafa;
|
|
236
248
|
}
|
|
237
|
-
[sdc-search-select] .main-select {
|
|
238
|
-
|
|
239
|
-
}
|
|
240
|
-
[sdc-search-select] .main-select .select-label {
|
|
241
|
-
flex: 1;
|
|
242
|
-
color: #333;
|
|
243
|
-
font-size: 14px;
|
|
244
|
-
}
|
|
245
|
-
[sdc-search-select] .main-select {
|
|
249
|
+
[sdc-search-select] .main-select .custom-select-selected {
|
|
250
|
+
position: relative;
|
|
246
251
|
/* ▼ arrow */
|
|
247
252
|
}
|
|
248
|
-
[sdc-search-select] .main-select .select-arrow {
|
|
249
|
-
|
|
253
|
+
[sdc-search-select] .main-select .custom-select-selected .select-arrow {
|
|
254
|
+
position: absolute;
|
|
250
255
|
width: 0;
|
|
251
256
|
height: 0;
|
|
252
|
-
|
|
257
|
+
right: 12px;
|
|
258
|
+
top: 12px;
|
|
253
259
|
vertical-align: middle;
|
|
254
260
|
border-left: 6px solid transparent;
|
|
255
261
|
border-right: 6px solid transparent;
|
|
256
262
|
border-top: 6px solid #555;
|
|
257
263
|
transition: transform 0.2s ease;
|
|
258
264
|
}
|
|
265
|
+
[sdc-search-select] .main-select {
|
|
266
|
+
/* Label text */
|
|
267
|
+
}
|
|
268
|
+
[sdc-search-select] .main-select .select-label {
|
|
269
|
+
flex: 1;
|
|
270
|
+
color: #333;
|
|
271
|
+
font-size: 14px;
|
|
272
|
+
}
|
|
259
273
|
[sdc-search-select] .main-select {
|
|
260
274
|
/* Optional — rotate arrow when open */
|
|
261
275
|
}
|
|
262
|
-
[sdc-search-select] .main-select .
|
|
276
|
+
[sdc-search-select] .main-select .open .select-arrow {
|
|
263
277
|
transform: rotate(-180deg);
|
|
264
278
|
}
|
|
265
279
|
[sdc-search-select] .main-select .selected-option {
|
|
@@ -37,8 +37,6 @@ export class SdcDetailViewController extends AbstractSDC {
|
|
|
37
37
|
model = await model;
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
|
|
41
|
-
|
|
42
40
|
if (typeof model === 'object' && model instanceof SdcModel) {
|
|
43
41
|
this.model = model;
|
|
44
42
|
this.querySetInstance = model.querySet;
|
|
@@ -88,11 +86,6 @@ export class SdcDetailViewController extends AbstractSDC {
|
|
|
88
86
|
return super.onRefresh();
|
|
89
87
|
}
|
|
90
88
|
|
|
91
|
-
|
|
92
|
-
removeInstance($btn, e) {
|
|
93
|
-
this.model.delete();
|
|
94
|
-
}
|
|
95
|
-
|
|
96
89
|
_onUpdate() {
|
|
97
90
|
if (this.on_update) {
|
|
98
91
|
this.model.update().then(() => {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {AbstractSDC, app} from 'sdc_client';
|
|
1
|
+
import { AbstractSDC, app, SdcModel, SdcQuerySet } from 'sdc_client';
|
|
2
2
|
|
|
3
3
|
export class SdcListViewController extends AbstractSDC {
|
|
4
4
|
|
|
@@ -12,7 +12,7 @@ export class SdcListViewController extends AbstractSDC {
|
|
|
12
12
|
/**
|
|
13
13
|
* Events is an array of dom events.
|
|
14
14
|
* The pattern is {'event': {'dom_selector': handler}}
|
|
15
|
-
*
|
|
15
|
+
* Uncomment the following line to add events;
|
|
16
16
|
*/
|
|
17
17
|
// this.events.unshift({'click': {'.header-sample': (ev, $elem)=> $elem.css('border', '2px solid black')}}});
|
|
18
18
|
}
|
|
@@ -26,22 +26,31 @@ export class SdcListViewController extends AbstractSDC {
|
|
|
26
26
|
// - onRemove //
|
|
27
27
|
//-------------------------------------------------//
|
|
28
28
|
|
|
29
|
-
onInitList({ model, filter, onUpdate }) {
|
|
30
|
-
if (
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
}
|
|
29
|
+
async onInitList({ model, filter, onUpdate }) {
|
|
30
|
+
if (this.model) {
|
|
31
|
+
model = this.model;
|
|
32
|
+
}
|
|
34
33
|
|
|
35
|
-
|
|
34
|
+
if (model instanceof Promise) {
|
|
35
|
+
model = await model;
|
|
36
36
|
}
|
|
37
|
-
|
|
38
|
-
|
|
37
|
+
this.filter ??= filter;
|
|
38
|
+
this.model_name ??= model;
|
|
39
|
+
this.on_update ??= onUpdate;
|
|
40
|
+
if (typeof this.filter === 'function') {
|
|
41
|
+
this.filter = this.filter();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
if (typeof model === 'object' && model instanceof SdcQuerySet) {
|
|
45
|
+
this.model = model;
|
|
39
46
|
}
|
|
40
|
-
|
|
41
|
-
|
|
47
|
+
|
|
48
|
+
if (typeof model !== 'object') {
|
|
49
|
+
this.model = this.querySet(this.model_name);
|
|
42
50
|
}
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
|
|
52
|
+
if(this.filter) {
|
|
53
|
+
this.model.setFilter(this.filter);
|
|
45
54
|
}
|
|
46
55
|
|
|
47
56
|
if (this.on_update) {
|
|
@@ -57,6 +66,7 @@ export class SdcListViewController extends AbstractSDC {
|
|
|
57
66
|
if (lc.length === 0) {
|
|
58
67
|
lc = $html.find('.list-container');
|
|
59
68
|
}
|
|
69
|
+
|
|
60
70
|
lc.append(this.model.listView({modelQuery: this.search_values, templateContext: this.template_context}));
|
|
61
71
|
this.model.onUpdate = this.model.onCreate = () => {
|
|
62
72
|
if (this.on_update) {
|
|
@@ -64,6 +74,7 @@ export class SdcListViewController extends AbstractSDC {
|
|
|
64
74
|
this.on_update(this.model);
|
|
65
75
|
});
|
|
66
76
|
}
|
|
77
|
+
|
|
67
78
|
this._updateView();
|
|
68
79
|
};
|
|
69
80
|
return super.onLoad($html);
|
|
@@ -85,16 +85,16 @@ export class SdcModelFormController extends AbstractSDC {
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
if (typeof this.model === 'object' && this.model instanceof SdcQuerySet) {
|
|
88
|
-
|
|
89
|
-
this.
|
|
90
|
-
this.
|
|
91
|
-
}
|
|
92
|
-
|
|
88
|
+
if(Object.keys(this.model.modelQuery).length === 0) {
|
|
89
|
+
this.id = null;
|
|
90
|
+
this.model = this.model.new();
|
|
91
|
+
} else {
|
|
92
|
+
try {
|
|
93
|
+
this.model = await this.model.get();
|
|
94
|
+
this.id = this.model.id;
|
|
95
|
+
} catch (e) {
|
|
93
96
|
this.id = null;
|
|
94
97
|
this.model = this.model.new();
|
|
95
|
-
} else {
|
|
96
|
-
console.error(e);
|
|
97
|
-
throw e;
|
|
98
98
|
}
|
|
99
99
|
}
|
|
100
100
|
}
|
|
@@ -118,10 +118,14 @@ export class SdcModelFormController extends AbstractSDC {
|
|
|
118
118
|
}
|
|
119
119
|
|
|
120
120
|
async onLoad($html) {
|
|
121
|
-
await this.onInitForm(this.params)
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
121
|
+
await this.onInitForm(this.params).catch((e) => {
|
|
122
|
+
this.model = null;
|
|
123
|
+
console.error(e);
|
|
124
|
+
});
|
|
125
|
+
if (this.model) {
|
|
126
|
+
this.form = this.formGenerator(this.model).addClass('container-fluid');
|
|
127
|
+
$html.find('.form-container').append(this.form);
|
|
128
|
+
}
|
|
125
129
|
// $html.find(`.not-${this.type}`).remove();
|
|
126
130
|
return super.onLoad($html);
|
|
127
131
|
}
|
|
@@ -182,7 +182,7 @@ export class SdcNavigatorController extends AbstractSDC {
|
|
|
182
182
|
}
|
|
183
183
|
this._is_processing = false;
|
|
184
184
|
this._updateBreadcrumb();
|
|
185
|
-
this._checkProcessQueue();
|
|
185
|
+
this._checkProcessQueue(controller);
|
|
186
186
|
this.refresh();
|
|
187
187
|
return;
|
|
188
188
|
}
|
|
@@ -237,7 +237,7 @@ export class SdcNavigatorController extends AbstractSDC {
|
|
|
237
237
|
} else {
|
|
238
238
|
this._updateBreadcrumb();
|
|
239
239
|
if (!this._manageDefault(last_view_array.empty_container)) {
|
|
240
|
-
this._checkProcessQueue();
|
|
240
|
+
this._checkProcessQueue(controller);
|
|
241
241
|
}
|
|
242
242
|
setTimeout(() => {
|
|
243
243
|
this.$container.find('.header-loading').removeClass('active');
|
|
@@ -264,12 +264,16 @@ export class SdcNavigatorController extends AbstractSDC {
|
|
|
264
264
|
return c_list.join('~').split('~~').join('~');
|
|
265
265
|
}
|
|
266
266
|
|
|
267
|
-
_checkProcessQueue() {
|
|
267
|
+
_checkProcessQueue(controller) {
|
|
268
268
|
let next = this._process_queue.shift();
|
|
269
269
|
this._current_process = null;
|
|
270
270
|
if (next) {
|
|
271
271
|
this._pushState(next[0], next[1]);
|
|
272
|
-
} else if (this._redirectAfterCurrentProcess) {
|
|
272
|
+
} else if (this._redirectAfterCurrentProcess || controller.autoRedirect) {
|
|
273
|
+
if(controller.autoRedirect) {
|
|
274
|
+
this._RedirectOnView(controller.autoRedirect);
|
|
275
|
+
}
|
|
276
|
+
|
|
273
277
|
const temp = this._redirectAfterCurrentProcess;
|
|
274
278
|
this._redirectAfterCurrentProcess = null;
|
|
275
279
|
this.goTo(temp);
|