simpledomcontrol 0.57.22__tar.gz → 0.58.0__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.
Files changed (175) hide show
  1. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/PKG-INFO +2 -2
  2. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/pyproject.toml +2 -2
  3. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/init_add/add_controller_manager.py +15 -5
  4. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/sdc_update_links.py +13 -2
  5. simpledomcontrol-0.58.0/sdc_core/template_files/Assets/gulpfile.jsx +69 -0
  6. simpledomcontrol-0.58.0/sdc_core/template_files/Assets/src/index.organizer.js +23 -0
  7. simpledomcontrol-0.58.0/sdc_core/template_files/Assets/webpack.config/webpack.bundle.config.jsx +22 -0
  8. simpledomcontrol-0.58.0/sdc_core/template_files/Assets/webpack.config/webpack.default.config.jsx +56 -0
  9. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/Assets/webpack.config/webpack.development.config.jsx +1 -1
  10. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/Assets/webpack.config/webpack.production.config.jsx +1 -1
  11. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/package.json +3 -3
  12. simpledomcontrol-0.58.0/sdc_tools/Assets/bin/sdc_tools/sdc_tools.organizer.js +1 -0
  13. simpledomcontrol-0.58.0/sdc_tools/Assets/bin/sdc_tools/sdc_tools.style.css +351 -0
  14. simpledomcontrol-0.58.0/sdc_user/Assets/bin/sdc_user/sdc_user.organizer.js +1 -0
  15. simpledomcontrol-0.58.0/sdc_user/migrations/__init__.py +0 -0
  16. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/templates/sdc_user/sdc/sdc_user_nav_btn.html +1 -1
  17. simpledomcontrol-0.57.22/sdc_core/template_files/Assets/gulpfile.jsx +0 -49
  18. simpledomcontrol-0.57.22/sdc_core/template_files/Assets/src/index.organizer.js +0 -17
  19. simpledomcontrol-0.57.22/sdc_core/template_files/Assets/webpack.config/webpack.default.config.jsx +0 -53
  20. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/README.md +0 -0
  21. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/__init__.py +0 -0
  22. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/apps.py +0 -0
  23. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/consumers.py +0 -0
  24. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/__init__.py +0 -0
  25. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/__init__.py +0 -0
  26. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/_private.py +0 -0
  27. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/init_add/__init__.py +0 -0
  28. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/init_add/add_model_manager.py +0 -0
  29. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/init_add/options.py +0 -0
  30. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/init_add/sdc_core_manager.py +0 -0
  31. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/init_add/settings_manager.py +0 -0
  32. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/init_add/utils.py +0 -0
  33. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/sdc_cc.py +0 -0
  34. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/sdc_db_tools.py +0 -0
  35. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/sdc_get_controller_infos.py +0 -0
  36. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/sdc_get_controller_url.py +0 -0
  37. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/sdc_get_model_infos.py +0 -0
  38. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/sdc_init.py +0 -0
  39. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/sdc_is_installed.py +0 -0
  40. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/sdc_new_model.py +0 -0
  41. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/sdc_overwrite_lib_file.py +0 -0
  42. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/sdc_shell_execute_script.py +0 -0
  43. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/sdc_update_url.py +0 -0
  44. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/management/commands/utils/__init__.py +0 -0
  45. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/sdc_extentions/__init__.py +0 -0
  46. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/sdc_extentions/forms.py +0 -0
  47. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/sdc_extentions/import_manager.py +0 -0
  48. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/sdc_extentions/models.py +0 -0
  49. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/sdc_extentions/response.py +0 -0
  50. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/sdc_extentions/search.py +0 -0
  51. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/sdc_extentions/views.py +0 -0
  52. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/signals.py +0 -0
  53. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/.devcontainer/Dockerfile +0 -0
  54. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/.devcontainer/devcontainer.json +0 -0
  55. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/.devcontainer/on_create.sh +0 -0
  56. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/.devcontainer/on_startup.sh +0 -0
  57. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/Assets/babel.config.json +0 -0
  58. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/Assets/src/index.style.scss +0 -0
  59. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/Assets/static/img/favicon.png +0 -0
  60. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/Assets/tests/config/post-test-teardown.js +0 -0
  61. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/Assets/tests/config/pre-test-setup.js +0 -0
  62. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/Assets/tests/config/test-setup.js +0 -0
  63. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/asgi.py.txt +0 -0
  64. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/controller/templade_view.html +0 -0
  65. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/controller/template_controller.js.txt +0 -0
  66. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/controller/template_css.scss +0 -0
  67. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/controller/template_test.js.text +0 -0
  68. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/js_test.js.txt +0 -0
  69. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/models/detail.html +0 -0
  70. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/models/list.html +0 -0
  71. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/routing.py.txt +0 -0
  72. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/sdc_urls.py.txt +0 -0
  73. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/sdc_views.py.txt +0 -0
  74. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/settings_extension.py.txt +0 -0
  75. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/templates/base.html +0 -0
  76. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/templates/elements/form.html +0 -0
  77. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/templates/elements/inline_form.html +0 -0
  78. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/templates/index.html +0 -0
  79. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/template_files/urls.py.txt +0 -0
  80. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/templatetags/__init__.py +0 -0
  81. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/templatetags/addclass.py +0 -0
  82. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/templatetags/indexfilter.py +0 -0
  83. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_core/templatetags/sdc_filter.py +0 -0
  84. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_alert_messenger/sdc_alert_messenger.js +0 -0
  85. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_alert_messenger/sdc_alert_messenger.scss +0 -0
  86. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_auto_submit/sdc_auto_submit.js +0 -0
  87. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_detail_view/sdc_detail_view.js +0 -0
  88. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_detail_view/sdc_detail_view.scss +0 -0
  89. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_dummy/sdc_dummy.js +0 -0
  90. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_dummy/sdc_dummy.scss +0 -0
  91. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_error/sdc_error.js +0 -0
  92. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_error/sdc_error.scss +0 -0
  93. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_list_view/sdc_list_view.js +0 -0
  94. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_list_view/sdc_list_view.scss +0 -0
  95. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_model_form/sdc_model_form.js +0 -0
  96. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_model_form/sdc_model_form.scss +0 -0
  97. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_navigation_client/sdc_navigation_client.js +0 -0
  98. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_navigator/sdc_navigator.js +0 -0
  99. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_navigator/sdc_navigator.scss +0 -0
  100. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_search_select/sdc_search_select.js +0 -0
  101. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_search_select/sdc_search_select.scss +0 -0
  102. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_search_view/sdc_search_view.js +0 -0
  103. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_search_view/sdc_search_view.scss +0 -0
  104. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/controller/sdc_update_on_change/sdc_update_on_change.js +0 -0
  105. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/sdc_tools.organizer.js +0 -0
  106. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/src/sdc_tools/sdc_tools.style.scss +0 -0
  107. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/Assets/tests/sdc_tools.test.js +0 -0
  108. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/__init__.py +0 -0
  109. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/admin.py +0 -0
  110. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/apps.py +0 -0
  111. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/migrations/__init__.py +0 -0
  112. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/models.py +0 -0
  113. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/sdc_urls.py +0 -0
  114. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/sdc_views.py +0 -0
  115. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/templates/email/base.html +0 -0
  116. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/templates/sdc_tools/sdc/dummy_sdc.html +0 -0
  117. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/templates/sdc_tools/sdc/sdc_alert_messenger.html +0 -0
  118. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/templates/sdc_tools/sdc/sdc_detail_view.html +0 -0
  119. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/templates/sdc_tools/sdc/sdc_dummy.html +0 -0
  120. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/templates/sdc_tools/sdc/sdc_error.html +0 -0
  121. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/templates/sdc_tools/sdc/sdc_list_view.html +0 -0
  122. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/templates/sdc_tools/sdc/sdc_model_form.html +0 -0
  123. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/templates/sdc_tools/sdc/sdc_navigator.html +0 -0
  124. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/templates/sdc_tools/sdc/sdc_search_select.html +0 -0
  125. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/templates/sdc_tools/sdc/sdc_search_view.html +0 -0
  126. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/templates/widgets/searchable_select.html +0 -0
  127. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/tests.py +0 -0
  128. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/views.py +0 -0
  129. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_tools/widgets.py +0 -0
  130. /simpledomcontrol-0.57.22/sdc_user/__init__.py → /simpledomcontrol-0.58.0/sdc_user/Assets/bin/sdc_user/sdc_user.style.css +0 -0
  131. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/register/register.js +0 -0
  132. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/register/register.scss +0 -0
  133. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_change_password/sdc_change_password.js +0 -0
  134. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_change_password/sdc_change_password.scss +0 -0
  135. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_confirm_email/sdc_confirm_email.js +0 -0
  136. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_confirm_email/sdc_confirm_email.scss +0 -0
  137. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_login/sdc_login.js +0 -0
  138. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_login/sdc_login.scss +0 -0
  139. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_logout/sdc_logout.js +0 -0
  140. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_logout/sdc_logout.scss +0 -0
  141. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_password_forgotten/sdc_password_forgotten.js +0 -0
  142. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_password_forgotten/sdc_password_forgotten.scss +0 -0
  143. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_reset_password/sdc_reset_password.js +0 -0
  144. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_reset_password/sdc_reset_password.scss +0 -0
  145. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_user/sdc_user.js +0 -0
  146. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_user/sdc_user.scss +0 -0
  147. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_user_nav_btn/sdc_user_nav_btn.js +0 -0
  148. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/controller/sdc_user_nav_btn/sdc_user_nav_btn.scss +0 -0
  149. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/sdc_user.organizer.js +0 -0
  150. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/src/sdc_user/sdc_user.style.scss +0 -0
  151. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/Assets/tests/sdc_user.test.js +0 -0
  152. {simpledomcontrol-0.57.22/sdc_user/migrations → simpledomcontrol-0.58.0/sdc_user}/__init__.py +0 -0
  153. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/admin.py +0 -0
  154. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/apps.py +0 -0
  155. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/forms.py +0 -0
  156. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/mails.py +0 -0
  157. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/migrations/0001_initial.py +0 -0
  158. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/models.py +0 -0
  159. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/sdc_urls.py +0 -0
  160. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/sdc_views.py +0 -0
  161. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/templates/email/confirm.html +0 -0
  162. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/templates/email/reset_password.html +0 -0
  163. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/templates/sdc_user/models/SdcUser/SdcUser_details.html +0 -0
  164. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/templates/sdc_user/models/SdcUser/SdcUser_list.html +0 -0
  165. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/templates/sdc_user/sdc/register.html +0 -0
  166. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/templates/sdc_user/sdc/sdc_change_password.html +0 -0
  167. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/templates/sdc_user/sdc/sdc_confirm_email.html +0 -0
  168. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/templates/sdc_user/sdc/sdc_login.html +0 -0
  169. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/templates/sdc_user/sdc/sdc_logout.html +0 -0
  170. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/templates/sdc_user/sdc/sdc_password_forgotten.html +0 -0
  171. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/templates/sdc_user/sdc/sdc_reset_password.html +0 -0
  172. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/templates/widgets/read_only_password_hash.html +0 -0
  173. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/tests.py +0 -0
  174. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/views.py +0 -0
  175. {simpledomcontrol-0.57.22 → simpledomcontrol-0.58.0}/sdc_user/widgets.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: SimpleDomControl
3
- Version: 0.57.22
3
+ Version: 0.58.0
4
4
  Summary: Simple DOM control -> a django MVC framework
5
5
  License: Apache-2.0
6
6
  Keywords: django,MVC
@@ -19,7 +19,7 @@ Requires-Dist: channels (>=4.3.2,<5.0.0)
19
19
  Requires-Dist: channels-redis (>=4.3.0,<5.0.0)
20
20
  Requires-Dist: click (>=8.1.0)
21
21
  Requires-Dist: daphne (>=4.2.1,<5.0.0)
22
- Requires-Dist: django (>=5.2.10,<6.0.0)
22
+ Requires-Dist: django (>=6.0.2,<7.0.0)
23
23
  Requires-Dist: inquirerpy (>=0.3.4,<0.4.0)
24
24
  Requires-Dist: poetry-core (>=2.3.0,<3.0.0)
25
25
  Requires-Dist: psycopg2-binary (>=2.9.11,<3.0.0)
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "SimpleDomControl"
3
- version = "0.57.22"
3
+ version = "0.58.0"
4
4
  authors = [ "Martin Starman <private@martin-starman.com>", ]
5
5
  description = "Simple DOM control -> a django MVC framework"
6
6
  readme = "README.md"
@@ -22,7 +22,7 @@ python = ">=3.13,<4.0"
22
22
  daphne = "^4.2.1"
23
23
  channels = "^4.3.2"
24
24
  channels-redis = "^4.3.0"
25
- django = "^5.2.10"
25
+ django = "^6.0.2"
26
26
  psycopg2-binary = "^2.9.11"
27
27
  attrs = "^25.4.0"
28
28
  regex = "^2026.1.15"
@@ -55,9 +55,10 @@ class AddControllerManager:
55
55
  "index.organizer.js")
56
56
  if get_app_path(app_name).startswith(os.path.join(options.PROJECT_ROOT, app_name)):
57
57
  line = 'import {} from "./%s/%s.organizer.js";\n' % (app_name, app_name)
58
+ cls._add_js_to_src(org_file_path_root, line)
58
59
  else:
59
- line = 'import {} from "#lib/%s/%s.organizer.js";\n' % (app_name, app_name)
60
- cls._add_js_to_src(org_file_path_root, line)
60
+ line = ' import("#lib/%s/%s.organizer.js"),\n' % (app_name, app_name)
61
+ cls._add_js_to_src(org_file_path_root, line, '// SDC APP import')
61
62
 
62
63
  @classmethod
63
64
  def add_css_app_to_organizer(cls, app_name):
@@ -196,16 +197,25 @@ class AddControllerManager:
196
197
  fout.close()
197
198
 
198
199
  @staticmethod
199
- def _add_js_to_src(org_file_path, new_line: str):
200
+ def _add_js_to_src(org_file_path, new_line: str, after_line=None):
200
201
  text = []
201
202
  new_line = new_line.strip('\n')
203
+ in_text = False
204
+ line_idx = 0
202
205
  if os.path.exists(org_file_path):
203
206
  with open(org_file_path, 'r', encoding='utf-8') as fin:
207
+ line_counter = -1 if after_line else 0
204
208
  for line in fin:
209
+ in_text |= new_line.strip() == line.strip()
210
+ line_counter += 1
211
+ if after_line and line_idx == 0 and after_line in line:
212
+ line_idx = line_counter + 1
205
213
  text.append(line.strip('\n'))
206
214
 
207
- if new_line not in text:
208
- text.insert(0, new_line)
215
+ if line_idx == -1:
216
+ raise TypeError('The Assets/src/index.organizer.js does not contain the import comment: "// SDC APP import" (run ./manage.py sdc_init -u')
217
+ if not in_text:
218
+ text.insert(line_idx, new_line)
209
219
  with open(org_file_path, "w+", encoding='utf-8') as fout:
210
220
  fout.write('\n'.join(text))
211
221
 
@@ -48,15 +48,26 @@ def make_app_links(app_name):
48
48
  app_root = get_app_path(app_name)
49
49
  if not app_root.startswith(os.path.join(options.PROJECT_ROOT, app_name)):
50
50
  sdc_controller_link_dir = os.path.join(options.PROJECT_ROOT, "Assets/libs", app_name)
51
+ sdc_controller_dir = os.path.join(app_root, "Assets/bin", app_name)
51
52
  else:
52
53
  sdc_controller_link_dir = os.path.join(options.PROJECT_ROOT, "Assets/src", app_name)
53
-
54
+ sdc_controller_dir = os.path.join(app_root, "Assets/src", app_name)
54
55
  sdc_test_link_dir = os.path.join(options.PROJECT_ROOT, "Assets/tests") # , f"{app_name}.test.js")
55
56
  sdc_test_file_dir = os.path.join(app_root, "Assets/tests") # , f"{app_name}.test.js")
56
57
  for file in os.listdir(sdc_test_file_dir):
57
58
  if file.endswith('.test.js'):
58
59
  relative_symlink(os.path.join(sdc_test_file_dir, file), os.path.join(sdc_test_link_dir, file))
59
- sdc_controller_dir = os.path.join(app_root, "Assets/src", app_name)
60
+
61
+ sdc_controller_link_bin_dir = os.path.join(options.PROJECT_ROOT, "Assets/bin")
62
+ os.makedirs(sdc_controller_link_bin_dir, exist_ok=True)
63
+ sdc_controller_link_bin_dir = os.path.join(sdc_controller_link_bin_dir, app_name)
64
+
65
+ sdc_controller_bin_dir = os.path.join(app_root, "Assets/bin", app_name)
66
+ if os.path.exists(sdc_controller_link_bin_dir):
67
+ os.remove(sdc_controller_link_bin_dir)
68
+ os.makedirs(sdc_controller_bin_dir, exist_ok=True)
69
+ relative_symlink(sdc_controller_bin_dir, sdc_controller_link_bin_dir)
70
+
60
71
  if os.path.exists(sdc_controller_link_dir):
61
72
  os.remove(sdc_controller_link_dir)
62
73
  relative_symlink(sdc_controller_dir, sdc_controller_link_dir)
@@ -0,0 +1,69 @@
1
+ 'use strict'
2
+
3
+ const {src, dest, series, parallel} = require('gulp');
4
+ const {sync} = require("glob");
5
+ const webpack = require('webpack-stream');
6
+ const copy = require('gulp-copy');
7
+ const through = require('through2');
8
+
9
+ const gulp = require('gulp');
10
+ process.env.JS_CILENT_FILE_EXTENTIONS = ['.js', '.json'];
11
+
12
+ const {
13
+ sdc_scss,
14
+ sdc_clean,
15
+ sdc_link_files,
16
+ sdc_watch_webpack_factory,
17
+ sdc_watch_scss,
18
+ sdc_default_build_factory,
19
+ sdc_default_bundle_factory
20
+ } = require('sdc_client/gulp/gulp.jsx');
21
+
22
+ function webpack_bundle() {
23
+ const webpack_config = require('./webpack.config/webpack.bundle.config.jsx');
24
+ const filename = [];
25
+
26
+ sync("./_build/*/*.js").forEach(file => {
27
+ -filename.push(file);
28
+ });
29
+
30
+ return through.obj()
31
+ .pipe(webpack(webpack_config(filename)))
32
+ .pipe(dest('./bin'));
33
+ }
34
+
35
+ function webpack_javascript() {
36
+ const webpack_config = require((process.env.NODE_ENV === 'development' ? './webpack.config/webpack.development.config.jsx' : './webpack.config/webpack.production.config.jsx'));
37
+ const filename = ['./_build/index.organizer.js'];
38
+
39
+ return through.obj()
40
+ .pipe(webpack(webpack_config(filename)))
41
+ .pipe(dest('../static'));
42
+ }
43
+
44
+ function copy_statics() {
45
+ return src('./static/**/*')
46
+ .pipe(copy('../static', {prefix: 1}))
47
+ .on('end', () => {
48
+ console.log('Contents copied successfully!');
49
+ });
50
+ }
51
+
52
+ exports.webpack = webpack_javascript;
53
+ exports.scss = sdc_scss;
54
+ exports.link_files = sdc_link_files;
55
+ exports.clean = sdc_clean;
56
+ exports.copy_statics = copy_statics;
57
+ exports.default = series(copy_statics, sdc_default_build_factory(webpack_javascript));
58
+ exports.bundle = series(copy_statics, sdc_default_bundle_factory(webpack_bundle));
59
+ exports.watch_scss = sdc_watch_scss;
60
+ exports.watch_webpack = sdc_watch_webpack_factory(webpack_javascript);
61
+
62
+ exports.develop = series(function (done) {
63
+ process.env.NODE_ENV = 'development';
64
+ process.env.BABEL_ENV = 'development';
65
+ done();
66
+ }, copy_statics, sdc_default_build_factory(webpack_javascript), parallel(
67
+ sdc_watch_scss,
68
+ sdc_watch_webpack_factory(webpack_javascript)
69
+ ));
@@ -0,0 +1,23 @@
1
+ import {app} from 'sdc_client';
2
+
3
+ window['sdc_client'] = sdc_client;
4
+
5
+ await (async () => Promise.all([
6
+ // SDC APP import
7
+ import("#lib/sdc_user/sdc_user.organizer.js"),
8
+ import("#lib/sdc_tools/sdc_tools.organizer.js"),
9
+ ]))();
10
+
11
+
12
+ Promise.all([
13
+ import('jquery'),
14
+ import('bootstrap/dist/js/bootstrap.bundle.js'),
15
+ import('lodash')]).then(([jquery, bootstrap, lodash]) => {
16
+ window['Modal'] = bootstrap.Modal;
17
+ window['Tooltip'] = bootstrap.Tooltip;
18
+ window['jQuery'] = window['$'] = jquery.default;
19
+ window['_'] = lodash.default;
20
+ app.init_sdc()
21
+ .then(() => {
22
+ });
23
+ });
@@ -0,0 +1,22 @@
1
+ const TerserPlugin = require("terser-webpack-plugin");
2
+ let prod_conf = require('./webpack.production.config.jsx');
3
+ const _ = require("lodash");
4
+
5
+
6
+ const bundle_conf = {
7
+ externals: {
8
+ jquery: "jquery",
9
+ lodash: "lodash",
10
+ bootstrap: "bootstrap",
11
+ sdc_client: "sdc_client",
12
+ },
13
+ output: {
14
+ filename: (pathData)=> {
15
+ const name = pathData.chunk.name;
16
+ const appName = name.replace(/\.organizer$/, '')
17
+ return `${appName}/[name].js`
18
+ }
19
+ }
20
+ };
21
+
22
+ module.exports = (filepath) => _.merge(prod_conf(filepath), bundle_conf);
@@ -0,0 +1,56 @@
1
+ const path = require('path');
2
+
3
+ const override = path.resolve(__dirname, "../overwrite_libs");
4
+
5
+ module.exports = (filepaths) => {
6
+ const entry = filepaths.reduce((acc, file)=> {
7
+ const name = path.basename(file, ".js");
8
+ acc[name] = file;
9
+ return acc;
10
+ }, {})
11
+
12
+ return {
13
+ resolve: {
14
+ alias: {
15
+ "libs": override
16
+ },
17
+ modules: [
18
+ path.resolve(__dirname, "../../node_modules"),
19
+ "node_modules"
20
+ ],
21
+ symlinks: false
22
+ },
23
+ entry,
24
+ output: {
25
+ filename: '[name].js'
26
+ },
27
+ module: {
28
+ rules: [
29
+ {
30
+ test: /\.js$/,
31
+ exclude: /node_modules/,
32
+ use: ['babel-loader']
33
+ },
34
+ {
35
+ test: /\.s[ac]ss$/i,
36
+ use: [{
37
+ loader: 'style-loader', // inject CSS to page
38
+ }, {
39
+ loader: 'css-loader', // translates CSS into CommonJS modules
40
+ }, {
41
+ loader: 'postcss-loader', // Run post css actions
42
+ options: {
43
+ plugins: function () { // post css plugins, can be exported to postcss.config.js
44
+ return [
45
+ require('precss'),
46
+ require('autoprefixer')
47
+ ];
48
+ }
49
+ }
50
+ }, {
51
+ loader: 'sass-loader' // compiles Sass to CSS
52
+ }]
53
+ }]
54
+ }
55
+ }
56
+ };
@@ -11,4 +11,4 @@ let dev_conf = {
11
11
  ]
12
12
  };
13
13
 
14
- module.exports = _.merge(default_conf, dev_conf);
14
+ module.exports = (filepath) => _.merge(default_conf(filepath), dev_conf);
@@ -20,4 +20,4 @@ const prod_conf = {
20
20
  }
21
21
  };
22
22
 
23
- module.exports = _.merge(default_conf, prod_conf);
23
+ module.exports = (filepath) => _.merge(default_conf(filepath), prod_conf);
@@ -65,7 +65,7 @@
65
65
  "sass-loader": "^16.0.5",
66
66
  "style-loader": "^4.0.0",
67
67
  "terser-webpack-plugin": "^5.3.14",
68
- "webpack": "^5.98.0",
68
+ "webpack": "^5.104.1",
69
69
  "webpack-stream": "^7.0.0"
70
70
  },
71
71
  "overrides": {
@@ -77,7 +77,7 @@
77
77
  "bootstrap": "^5.3.3",
78
78
  "esm": "^3.2.25",
79
79
  "jquery": "^3.7.0",
80
- "lodash": "^4.17.21",
81
- "sdc_client": "^0.57.22"
80
+ "lodash": "^4.17.23",
81
+ "sdc_client": "^0.58.0"
82
82
  }
83
83
  }
@@ -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)}}})}onInit(t="unknown",e,i=[""],s,n,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.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){const content=()=>{if(0===this.value.length)return 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",{className:this.multi?"multi":""},this._currentOption,sdcDom("input",{className:"timer-change",type:"hidden",name:this.name,value:t}))}};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"})),content())}}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)}))}_storeSelectedOption(t){const e=t.clone()[0];t.addClass("selected"),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">&times;</button>');t.data("value",i),e.append(t[0])}this.multi?this.value.includes(i)||(this.value.push(i),this._currentOption.push(e)):(this.value=[i],this._currentOption=[e])}remove_selection(t){const e=this.value.indexOf(t.data("value"));this.value.splice(e,1),this._currentOption.splice(e,1),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),SdcSearchSelectController.prototype._on_init_params=function(){return["name","required","value","modelName","multiple","ids"]};class SdcDummyController extends t.AbstractSDC{constructor(){super(),this.contentUrl="/sdc_view/sdc_tools/sdc_dummy"}onInit(t){this._text=t}onLoad(t){return 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),SdcDummyController.prototype._on_init_params=function(){return["text"]};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)}))}}})}onInit(){}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"}onInit(){}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}onInit(){}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}onInit(){}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}})}onInit(){}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()}}})}onInit(t,e,i,s,n,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.$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"),SdcSearchViewController.prototype._on_init_params=function(){return["url","rangeSize","rangeStart","rangeEnd","totalCount","removeLabels"]};class SdcDetailViewController extends t.AbstractSDC{constructor(){super(),this.contentUrl="/sdc_view/sdc_tools/sdc_detail_view",this.template_context=null,this.model=null}onInit(t,e){this.model||(t&&void 0!==e||console.error("You have to set data-model and data-pk in the <sdc-detail-view> tag!"),this.model=this.newModel(t,{pk:e}))}onLoad(t){const e=this.model.detailView(null,(()=>{this.find(".detail-container").append(e),this.refresh(),this._onUpdate.bind(this)}),null,this.template_context);return this.model.on_update=this.model.on_create=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()}removeInstance(t,e){this.model.delete()}_onUpdate(){this.on_update&&this.model.load().then((()=>{this.on_update(this.model.values_list)}))}_updateView(){return new Promise((e=>{const i=this.model.listView(this.search_values,(()=>{$(".tooltip.fade.show").remove(),t.app.reconcile(this,i,this.find(".detail-container").children()),e()}),null,this.template_context)}))}}t.app.register(SdcDetailViewController),SdcDetailViewController.prototype._on_init_params=function(){return["model","pk"]};class SdcModelFormController extends t.AbstractSDC{constructor(){super(),this.pk=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 onInit(t,e,i,s,n,r,o,a,l=!1,h=!1,d=!1,c=!0){!this.on_update&&(this.on_update=n),!this.on_error&&(this.on_error=r),!this.next&&(this.next=i),null===this.buttonText&&a?this.buttonText=a:this.buttonText=gettext("Save"),null===this.formHeader&&(this.formHeader=o),null===this.autoSave&&(this.autoSave=c),null===this.isReset&&(this.isReset=h),null===this.isKeepEditing&&(this.isKeepEditing=d),"function"==typeof s&&(s=s()),t instanceof Promise&&(t=await t),"object"==typeof t&&"Model"===t.constructor.name&&(this.model=t),this.model&&this.model.values?.pk>0?e=this.model.values.pk:this.model_name&&(t=this.model_name),this.form_name||=l,this.form_name?(this.isAutoChange=this.autoSave,this.pk=e,this.type="edit",this.model??=this.newModel(t,{pk:e}),this.form_generator=()=>this.model.namedForm(e,this.form_name,this._onFormLoaded.bind(this))):void 0!==e?(this.isAutoChange=!0,this.pk=e,this.type="edit",this.model??=this.newModel(t,{pk:e}),this.form_generator=()=>this.model.editForm(-1,this._onFormLoaded.bind(this))):(this.isAutoChange=!1,this.type="create",this.model??=this.newModel(t),this.form_generator=()=>this.model.createForm(this._onFormLoaded.bind(this))),"object"==typeof s&&this.model.filter(s)}onLoad(t){return this.form=this.form_generator().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.pk=this.model.values.pk,this.type="edit",this.isAutoChange=!0;const t=this.form?.closest("form"),e=t.clone(),i=e.find(".form-container").safeEmpty(),s=this.model.editForm(this.pk,(()=>{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._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.model_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"),SdcModelFormController.prototype._on_init_params=function(){return["model","pk","next","filter","on_update","on_error","form_header","button_text","form_name","reset_on_save","editing_after_save","auto_save"]};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}onInit(t,e,i){this.model||(this.model_name&&(t=this.model_name),this.model=this.newModel(t)),i&&(this.on_update=i),"function"==typeof e&&(e=e()),"object"==typeof e&&this.model.filter(e),this.on_update&&this.model.load().then((()=>{this.on_update(this.model.values_list)}))}onLoad(t){let e=t.filter(".list-container");return 0===e.length&&(e=t.find(".list-container")),e.append(this.model.listView(this.search_values,null,null,this.template_context)),this.model.on_update=this.model.on_create=()=>{this.on_update&&this.model.load().then((()=>{this.on_update(this.model.values_list)})),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(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(this.search_values,(()=>{$(".tooltip.fade.show").remove(),t.app.reconcile(this,e,this.find(".list-container .container-fluid").first())}),null,this.template_context)}}t.app.register(SdcListViewController),SdcListViewController.prototype._on_init_params=function(){return["model","filter","onUpdate"]};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}onInit(t){this._default_controller=t}onLoad(e){return(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(),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(),setTimeout((()=>{this.$container.find(".header-loading").removeClass("active")}),100))}_prepareUrl(t){Array.isArray(t)&&(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(){let t=this._process_queue.shift();if(this._current_process=null,t)this._pushState(t[0],t[1]);else if(this._redirectAfterCurrentProcess){const t=this._redirectAfterCurrentProcess;this._redirectAfterCurrentProcess=null,this.goTo(t)}}_RedirectOnView(t){this._redirectAfterCurrentProcess=$(t).attr("href").replace("next=..",`next=${Array(this._history_path.length).fill("/*").join("")}`)}_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(){console.log(location),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),SdcNavigatorController.prototype._on_init_params=function(){return["defaultController"]}})();