django-microsys 2.2.1__tar.gz → 2.2.3__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 (264) hide show
  1. {django_microsys-2.2.1 → django_microsys-2.2.3}/PKG-INFO +1 -1
  2. {django_microsys-2.2.1 → django_microsys-2.2.3}/django_microsys.egg-info/PKG-INFO +1 -1
  3. django_microsys-2.2.3/microsys/VERSION +1 -0
  4. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/context_processors.py +1 -0
  5. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/forms.py +77 -3
  6. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/css/system_setup.css +10 -21
  7. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/js/options.js +3 -1
  8. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/js/system_setup.js +8 -1
  9. django_microsys-2.2.3/microsys/templates/microsys/includes/font_previews.html +20 -0
  10. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/options.html +1 -1
  11. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/utils.py +90 -69
  12. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/views/sections.py +7 -1
  13. django_microsys-2.2.1/microsys/VERSION +0 -1
  14. django_microsys-2.2.1/microsys/templates/microsys/includes/font_previews.html +0 -12
  15. {django_microsys-2.2.1 → django_microsys-2.2.3}/LICENSE +0 -0
  16. {django_microsys-2.2.1 → django_microsys-2.2.3}/MANIFEST.in +0 -0
  17. {django_microsys-2.2.1 → django_microsys-2.2.3}/README.md +0 -0
  18. {django_microsys-2.2.1 → django_microsys-2.2.3}/django_microsys.egg-info/SOURCES.txt +0 -0
  19. {django_microsys-2.2.1 → django_microsys-2.2.3}/django_microsys.egg-info/dependency_links.txt +0 -0
  20. {django_microsys-2.2.1 → django_microsys-2.2.3}/django_microsys.egg-info/entry_points.txt +0 -0
  21. {django_microsys-2.2.1 → django_microsys-2.2.3}/django_microsys.egg-info/requires.txt +0 -0
  22. {django_microsys-2.2.1 → django_microsys-2.2.3}/django_microsys.egg-info/top_level.txt +0 -0
  23. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/__init__.py +0 -0
  24. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/__main__.py +0 -0
  25. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/admin.py +0 -0
  26. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/api.py +0 -0
  27. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/apps.py +0 -0
  28. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/cli.py +0 -0
  29. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/constants.py +0 -0
  30. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/discovery.py +0 -0
  31. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/fetcher.py +0 -0
  32. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/filters.py +0 -0
  33. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/fonts.py +0 -0
  34. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/formats/__init__.py +0 -0
  35. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/formats/ar/__init__.py +0 -0
  36. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/formats/ar/formats.py +0 -0
  37. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/formats/en/__init__.py +0 -0
  38. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/formats/en/formats.py +0 -0
  39. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/guards.py +0 -0
  40. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/management/commands/__init__.py +0 -0
  41. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/management/commands/microsys_check.py +0 -0
  42. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/management/commands/microsys_setup.py +0 -0
  43. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/management/commands/migrator.py +0 -0
  44. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/management/commands/seed_activity_log.py +0 -0
  45. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/managers.py +0 -0
  46. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/middleware.py +0 -0
  47. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/migrations/0001_initial.py +0 -0
  48. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/migrations/0002_public_registration.py +0 -0
  49. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/migrations/0003_public_root_split.py +0 -0
  50. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/migrations/0004_client_ip_and_trusted_devices.py +0 -0
  51. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/migrations/0005_systemsettings_allow_user_font_override_and_more.py +0 -0
  52. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/migrations/__init__.py +0 -0
  53. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/models.py +0 -0
  54. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/patches.py +0 -0
  55. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/registration.py +0 -0
  56. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold.py +0 -0
  57. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/README.md.tmpl +0 -0
  58. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/__init__.py.tmpl +0 -0
  59. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/apps.py.tmpl +0 -0
  60. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/filters.py.tmpl +0 -0
  61. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/forms.py.tmpl +0 -0
  62. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/migrations/__init__.py.tmpl +0 -0
  63. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/models.py.tmpl +0 -0
  64. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/tables.py.tmpl +0 -0
  65. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/templates/example_record_confirm_delete.html.tmpl +0 -0
  66. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/templates/example_record_detail.html.tmpl +0 -0
  67. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/templates/example_record_form.html.tmpl +0 -0
  68. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/templates/example_record_list.html.tmpl +0 -0
  69. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/tests/__init__.py.tmpl +0 -0
  70. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/tests/test_app.py.tmpl +0 -0
  71. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/translations.py.tmpl +0 -0
  72. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/urls.py.tmpl +0 -0
  73. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/app/views.py.tmpl +0 -0
  74. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/.nginx/nginx.conf.tmpl +0 -0
  75. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/.secrets/.env.tmpl +0 -0
  76. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/Dockerfile.tmpl +0 -0
  77. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/README.md.tmpl +0 -0
  78. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/compose.dev.yml.tmpl +0 -0
  79. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/compose.yml.tmpl +0 -0
  80. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/dockerignore.tmpl +0 -0
  81. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/docs/README.md.tmpl +0 -0
  82. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/entrypoint.sh.tmpl +0 -0
  83. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/gitattributes.tmpl +0 -0
  84. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/gitignore.tmpl +0 -0
  85. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/gunicorn.py.tmpl +0 -0
  86. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/manage.py.tmpl +0 -0
  87. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/package/__init__.py.tmpl +0 -0
  88. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/package/asgi.py.tmpl +0 -0
  89. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/package/celery.py.tmpl +0 -0
  90. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/package/settings.py.tmpl +0 -0
  91. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/package/urls.py.tmpl +0 -0
  92. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/package/wsgi.py.tmpl +0 -0
  93. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/req.txt.tmpl +0 -0
  94. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/start.ps1.tmpl +0 -0
  95. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/start.sh.tmpl +0 -0
  96. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/tests/__init__.py.tmpl +0 -0
  97. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/tests/test_scaffold.py.tmpl +0 -0
  98. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/scaffold_templates/project/tools/smtp_relay.py.tmpl +0 -0
  99. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/signals.py +0 -0
  100. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/bootstrap/bootstrap-icons.css +0 -0
  101. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/bootstrap/bootstrap-icons.woff +0 -0
  102. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/bootstrap/bootstrap-icons.woff2 +0 -0
  103. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/bootstrap/bootstrap.bundle.min.js +0 -0
  104. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/bootstrap/bootstrap.bundle.min.js.map +0 -0
  105. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/bootstrap/bootstrap.min.css +0 -0
  106. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/bootstrap/bootstrap.min.css.map +0 -0
  107. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/bootstrap/bootstrap.rtl.min.css +0 -0
  108. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/bootstrap/bootstrap.rtl.min.css.map +0 -0
  109. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/favicon.ico +0 -0
  110. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/img/base_logo.webp +0 -0
  111. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/img/default_profile.webp +0 -0
  112. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/img/login_logo.webp +0 -0
  113. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/accessibility/css/main.css +0 -0
  114. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/accessibility/js/main.js +0 -0
  115. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/activitylog/js/main.js +0 -0
  116. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/fonts/TwemojiCountryFlags.woff2 +0 -0
  117. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/fonts/cairo-bold.woff2 +0 -0
  118. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/fonts/cairo-medium.woff2 +0 -0
  119. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/fonts/cairo-regular.woff2 +0 -0
  120. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/fonts/shabwa-bold.woff2 +0 -0
  121. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/fonts/shabwa-medium.woff2 +0 -0
  122. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/fonts/shabwa-regular.woff2 +0 -0
  123. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/forms/css/file_field.css +0 -0
  124. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/forms/css/form_actions.css +0 -0
  125. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/forms/css/form_fields.css +0 -0
  126. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/forms/js/file_field.js +0 -0
  127. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/forms/js/filter_form.js +0 -0
  128. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/helpers/autofill/js/main.js +0 -0
  129. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/helpers/context_menu/css/main.css +0 -0
  130. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/helpers/context_menu/js/main.js +0 -0
  131. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/helpers/context_menu/js/section_manager.js +0 -0
  132. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/helpers/dynamic_modal/js/main.js +0 -0
  133. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/helpers/prevent_double_submit.js +0 -0
  134. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/helpers/scan_link/js/main.js +0 -0
  135. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/helpers/scan_link/js/scan_button.js +0 -0
  136. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/helpers/wizard/js/main.js +0 -0
  137. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/language/css/main.css +0 -0
  138. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/language/js/main.js +0 -0
  139. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/language/js/translations.js +0 -0
  140. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/css/buttons.css +0 -0
  141. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/css/dropdowns.css +0 -0
  142. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/css/index_cards.css +0 -0
  143. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/css/main.css +0 -0
  144. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/css/options.css +0 -0
  145. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/css/pagination.css +0 -0
  146. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/css/selectors.css +0 -0
  147. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/css/tables.css +0 -0
  148. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/css/template_cleanup.css +0 -0
  149. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/css/titlebar.css +0 -0
  150. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/js/base_head.js +0 -0
  151. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/js/base_runtime.js +0 -0
  152. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/js/selectors.js +0 -0
  153. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/main/js/tables.js +0 -0
  154. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/sections/js/manage_sections.js +0 -0
  155. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/sidebar/css/main.css +0 -0
  156. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/sidebar/css/reorder.css +0 -0
  157. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/sidebar/css/theme_picker.css +0 -0
  158. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/sidebar/js/main.js +0 -0
  159. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/sidebar/js/preload.js +0 -0
  160. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/sidebar/js/reorder.js +0 -0
  161. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/sidebar/js/theme_picker.js +0 -0
  162. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/themes/css/blue.css +0 -0
  163. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/themes/css/dark.css +0 -0
  164. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/themes/css/gold.css +0 -0
  165. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/themes/css/gothic.css +0 -0
  166. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/themes/css/green.css +0 -0
  167. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/themes/css/light.css +0 -0
  168. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/themes/css/mono.css +0 -0
  169. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/themes/css/neon.css +0 -0
  170. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/themes/css/red.css +0 -0
  171. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/themes/css/retro.css +0 -0
  172. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/themes/js/main.js +0 -0
  173. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/tutorial/css/main.css +0 -0
  174. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/tutorial/js/driver.js +0 -0
  175. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/tutorial/js/main.js +0 -0
  176. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/users/css/login.css +0 -0
  177. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/users/css/permissions.css +0 -0
  178. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/users/css/profile.css +0 -0
  179. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/users/css/user_hub.css +0 -0
  180. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/users/js/login.js +0 -0
  181. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/users/js/manage_users.js +0 -0
  182. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/users/js/permissions.js +0 -0
  183. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/users/js/profile_2fa.js +0 -0
  184. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/users/js/profile_image_widget.js +0 -0
  185. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/users/js/twofa_verify.js +0 -0
  186. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/microsys/users/js/user_hub.js +0 -0
  187. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/vanillajs-datepicker/datepicker-bs5.min.css +0 -0
  188. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/static/vanillajs-datepicker/datepicker.min.js +0 -0
  189. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/tables.py +0 -0
  190. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/bootstrap5/layout/field_file.html +0 -0
  191. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/2fa/verify.html +0 -0
  192. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/activitylog/activity_log.html +0 -0
  193. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/activitylog/activity_log_detail_modal.html +0 -0
  194. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/base.html +0 -0
  195. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/form_base.html +0 -0
  196. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/forms/assets_head.html +0 -0
  197. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/forms/assets_scripts.html +0 -0
  198. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/forms/crispy_file_field.html +0 -0
  199. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/forms/file_input.html +0 -0
  200. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/forms/filter_assets_head.html +0 -0
  201. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/forms/filter_assets_scripts.html +0 -0
  202. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/helpers/dynamic_modal.html +0 -0
  203. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/helpers/dynamic_modal_combined.html +0 -0
  204. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/helpers/dynamic_modal_detail.html +0 -0
  205. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/helpers/dynamic_modal_form.html +0 -0
  206. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/helpers/dynamic_modal_list.html +0 -0
  207. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/helpers/micro_context_menu.html +0 -0
  208. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/font_settings_matrix.html +0 -0
  209. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/language_catalog_editor.html +0 -0
  210. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/language_fonts_editor.html +0 -0
  211. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/language_previews.html +0 -0
  212. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/sidebar_builder.html +0 -0
  213. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/sidebar_density_previews.html +0 -0
  214. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/sidebar_items.html +0 -0
  215. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/system_names_editor.html +0 -0
  216. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/system_setup.html +0 -0
  217. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/table_density_previews.html +0 -0
  218. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/theme_previews.html +0 -0
  219. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/theme_settings_matrix.html +0 -0
  220. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/titlebar.html +0 -0
  221. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/translation_matrix_editor.html +0 -0
  222. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/includes/tutorial.html +0 -0
  223. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/list_base.html +0 -0
  224. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/registration/pending.html +0 -0
  225. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/scopes/scope_actions.html +0 -0
  226. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/scopes/scope_form.html +0 -0
  227. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/scopes/scope_manager.html +0 -0
  228. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/sections/manage_sections.html +0 -0
  229. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/sections/subsection_select.html +0 -0
  230. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/sidebar/auto.html +0 -0
  231. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/sidebar/extra_groups.html +0 -0
  232. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/sidebar/main.html +0 -0
  233. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/sidebar/tree.html +0 -0
  234. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/tables/table.html +0 -0
  235. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/users/grouped_permissions.html +0 -0
  236. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/users/manage_users.html +0 -0
  237. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/users/profile.html +0 -0
  238. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/users/profile_image_widget.html +0 -0
  239. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/users/user_detail_modal.html +0 -0
  240. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/microsys/users/user_hub.html +0 -0
  241. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/registration/email/verify_registration.txt +0 -0
  242. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/registration/login.html +0 -0
  243. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/registration/register.html +0 -0
  244. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/registration/register_sent.html +0 -0
  245. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templates/registration/register_verify.html +0 -0
  246. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templatetags/__init__.py +0 -0
  247. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templatetags/microsys_tags.py +0 -0
  248. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templatetags/microsys_translation.py +0 -0
  249. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/templatetags/sidebar_tags.py +0 -0
  250. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/themes.py +0 -0
  251. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/translations.py +0 -0
  252. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/urls.py +0 -0
  253. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/views/__init__.py +0 -0
  254. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/views/activitylog.py +0 -0
  255. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/views/general.py +0 -0
  256. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/views/profile.py +0 -0
  257. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/views/registration.py +0 -0
  258. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/views/scopes.py +0 -0
  259. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/views/sidebar.py +0 -0
  260. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/views/twofa.py +0 -0
  261. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/views/users.py +0 -0
  262. {django_microsys-2.2.1 → django_microsys-2.2.3}/microsys/widgets.py +0 -0
  263. {django_microsys-2.2.1 → django_microsys-2.2.3}/pyproject.toml +0 -0
  264. {django_microsys-2.2.1 → django_microsys-2.2.3}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django_microsys
3
- Version: 2.2.1
3
+ Version: 2.2.3
4
4
  Summary: Django microSYS (System Integration Service) - Multilingual Django Starter Pack, Packed with Features.
5
5
  Author-email: DeBeski <debeski1@gmail.com>
6
6
  License: NON-COMMERCIAL
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: django-microsys
3
- Version: 2.2.1
3
+ Version: 2.2.3
4
4
  Summary: Django microSYS (System Integration Service) - Multilingual Django Starter Pack, Packed with Features.
5
5
  Author-email: DeBeski <debeski1@gmail.com>
6
6
  License: NON-COMMERCIAL
@@ -0,0 +1 @@
1
+ 2.2.3
@@ -346,6 +346,7 @@ def microsys_context(request):
346
346
  from .fonts import generate_font_face_css, get_builtin_fonts
347
347
  allowed_fonts = normalize_allowed_fonts(final_config.get('allowed_fonts'))
348
348
  context['font_face_css'] = generate_font_face_css(allowed_fonts)
349
+ context['option_fonts'] = [font for font in get_builtin_fonts() if font.get('slug') in allowed_fonts]
349
350
 
350
351
  allow_user_font_override = bool(final_config.get('allow_user_font_override', True))
351
352
  default_fonts_by_lang = final_config.get('default_fonts', {})
@@ -1,5 +1,6 @@
1
1
  # Imports of the required python modules and libraries
2
2
  ######################################################
3
+ import os
3
4
  import json
4
5
  from types import MethodType, SimpleNamespace
5
6
 
@@ -1686,6 +1687,12 @@ class SystemSettingsForm(forms.ModelForm):
1686
1687
  if parsed_step in (0, 1, 2, 3, 4, 5):
1687
1688
  self.single_step_mode = True
1688
1689
  self.single_step_index = parsed_step
1690
+ if self.mode != 'setup' and self.single_step_mode:
1691
+ # Single-step modal posts can legitimately omit values owned by another
1692
+ # wizard step; field-level required validation must not fire before the
1693
+ # step-preservation cleaners get a chance to restore them.
1694
+ self.fields['default_theme'].required = False
1695
+ self.fields['default_table_density'].required = False
1689
1696
 
1690
1697
  from microsys.discovery import discover_sidebar_catalog, sanitize_sidebar_config
1691
1698
  from microsys.utils import get_system_config
@@ -2873,12 +2880,27 @@ class SystemSettingsForm(forms.ModelForm):
2873
2880
  return str(self.cleaned_data.get('default_language') or 'en').strip().lower().replace('_', '-')
2874
2881
 
2875
2882
  def clean_allowed_fonts(self):
2883
+ if self.is_bound and self.mode != 'setup' and self.single_step_mode and 'allowed_fonts' not in self.data:
2884
+ preserved = getattr(self.instance, 'allowed_fonts', None)
2885
+ if preserved in (None, ''):
2886
+ preserved = self.initial.get('allowed_fonts')
2887
+ return list(normalize_allowed_fonts(preserved))
2876
2888
  data = self.cleaned_data.get('allowed_fonts')
2877
2889
  if not data:
2878
2890
  return []
2879
2891
  return list(data)
2880
2892
 
2881
2893
  def clean_default_fonts(self):
2894
+ if self.is_bound and self.mode != 'setup' and self.single_step_mode and 'default_fonts' not in self.data:
2895
+ preserved = getattr(self.instance, 'default_fonts', None)
2896
+ if preserved in (None, ''):
2897
+ preserved = self.initial.get('default_fonts')
2898
+ if isinstance(preserved, str):
2899
+ try:
2900
+ preserved = json.loads(preserved)
2901
+ except json.JSONDecodeError:
2902
+ preserved = {}
2903
+ return preserved if isinstance(preserved, dict) else {}
2882
2904
  data = self.cleaned_data.get('default_fonts')
2883
2905
  if not data:
2884
2906
  return {}
@@ -2891,12 +2913,27 @@ class SystemSettingsForm(forms.ModelForm):
2891
2913
  return {}
2892
2914
 
2893
2915
  def clean_default_theme(self):
2894
- value = self.cleaned_data.get('default_theme') or 'light'
2916
+ if self.is_bound and self.mode != 'setup' and self.single_step_mode and 'default_theme' not in self.data:
2917
+ value = (
2918
+ getattr(self.instance, 'default_theme', None)
2919
+ or self.initial.get('default_theme')
2920
+ or 'light'
2921
+ )
2922
+ else:
2923
+ value = self.cleaned_data.get('default_theme') or 'light'
2895
2924
  if not is_valid_theme(value):
2896
2925
  raise ValidationError("Invalid theme choice.")
2897
2926
  return value
2898
2927
 
2899
2928
  def clean_allowed_themes(self):
2929
+ if self.is_bound and self.mode != 'setup' and self.single_step_mode and 'allowed_themes' not in self.data:
2930
+ values = getattr(self.instance, 'allowed_themes', None)
2931
+ if not values:
2932
+ values = self.initial.get('allowed_themes')
2933
+ normalized = list(normalize_allowed_themes(values))
2934
+ if not normalized:
2935
+ raise ValidationError("At least one theme must remain enabled.")
2936
+ return normalized
2900
2937
  values = self.cleaned_data.get('allowed_themes') or []
2901
2938
  if not values:
2902
2939
  raise ValidationError("At least one theme must remain enabled.")
@@ -2906,7 +2943,14 @@ class SystemSettingsForm(forms.ModelForm):
2906
2943
  return normalized
2907
2944
 
2908
2945
  def clean_default_table_density(self):
2909
- value = self.cleaned_data.get('default_table_density') or DEFAULT_TABLE_DENSITY
2946
+ if self.is_bound and self.mode != 'setup' and self.single_step_mode and 'default_table_density' not in self.data:
2947
+ value = (
2948
+ getattr(self.instance, 'default_table_density', None)
2949
+ or self.initial.get('default_table_density')
2950
+ or DEFAULT_TABLE_DENSITY
2951
+ )
2952
+ else:
2953
+ value = self.cleaned_data.get('default_table_density') or DEFAULT_TABLE_DENSITY
2910
2954
  if value not in TABLE_DENSITY_VALUES:
2911
2955
  raise ValidationError("Invalid table density choice.")
2912
2956
  return value
@@ -3246,13 +3290,43 @@ class SystemSettingsForm(forms.ModelForm):
3246
3290
  if cleaned.get('registration_activation_mode') not in REGISTRATION_ACTIVATION_VALUES:
3247
3291
  cleaned['registration_activation_mode'] = 'auto_login_after_verify'
3248
3292
  email_ready = get_email_service_status().get('available')
3249
- if email_config.get('secret_storage') == 'encrypted_db':
3293
+ backend = getattr(settings, 'EMAIL_BACKEND', 'django.core.mail.backends.smtp.EmailBackend')
3294
+ local_backends = {
3295
+ 'django.core.mail.backends.console.EmailBackend',
3296
+ 'django.core.mail.backends.locmem.EmailBackend',
3297
+ 'django.core.mail.backends.filebased.EmailBackend',
3298
+ }
3299
+ if backend in local_backends and getattr(settings, 'DEBUG', False):
3300
+ email_ready = True
3301
+ elif email_config.get('transport') == 'relay':
3302
+ relay_host = str(email_config.get('host') or os.getenv('SMTP_RELAY_HOST') or '').strip()
3303
+ relay_port = email_config.get('port')
3304
+ relay_from_email = str(
3305
+ email_config.get('default_from_email')
3306
+ or getattr(settings, 'DEFAULT_FROM_EMAIL', '')
3307
+ or os.getenv('DEFAULT_FROM_EMAIL')
3308
+ or ''
3309
+ ).strip()
3310
+ relay_password_ok = True
3311
+ if email_config.get('secret_storage') == 'encrypted_db' and email_config.get('username'):
3312
+ relay_password_ok = bool(email_config.get('encrypted_password'))
3313
+ email_ready = bool(relay_host and relay_port and relay_from_email and relay_password_ok)
3314
+ elif email_config.get('secret_storage') == 'encrypted_db':
3250
3315
  email_ready = bool(
3251
3316
  email_config.get('host')
3252
3317
  and email_config.get('port')
3253
3318
  and email_config.get('default_from_email')
3254
3319
  and (not email_config.get('username') or email_config.get('encrypted_password'))
3255
3320
  )
3321
+ elif backend == 'django.core.mail.backends.smtp.EmailBackend':
3322
+ email_ready = bool(
3323
+ (email_config.get('host') or getattr(settings, 'EMAIL_HOST', ''))
3324
+ and (email_config.get('port') or getattr(settings, 'EMAIL_PORT', None))
3325
+ and (
3326
+ email_config.get('default_from_email')
3327
+ or getattr(settings, 'DEFAULT_FROM_EMAIL', '')
3328
+ )
3329
+ )
3256
3330
  if (cleaned.get('public_registration_enabled') or cleaned.get('email_2fa')) and not email_ready:
3257
3331
  self.add_error(
3258
3332
  'email_config',
@@ -683,40 +683,29 @@
683
683
  }
684
684
 
685
685
  /* Font Previews Support */
686
- .ms-font-previews {
687
- display: flex;
688
- flex-wrap: wrap;
689
- gap: 1rem;
690
- }
691
-
692
- .ms-font-preview-card {
693
- width: 100px;
694
- cursor: pointer;
695
- transition: all 0.2s ease-in-out;
696
- border-width: 2px !important;
697
- text-align: center;
698
- }
699
-
700
- .ms-font-preview-card.active {
701
- border-color: var(--primal) !important;
702
- background-color: rgba(var(--primal-rgb), 0.05);
686
+ .ms-font-option {
687
+ align-items: center;
703
688
  }
704
689
 
705
- .ms-font-preview-card:hover:not(.active) {
706
- border-color: var(--ms-setup-pane-border, rgba(var(--primal-rgb), 0.24)) !important;
690
+ .ms-font-option__icon {
691
+ width: 3.5rem;
692
+ height: 3.5rem;
693
+ border-radius: 1rem;
707
694
  }
708
695
 
709
696
  .font-preview-sample {
710
697
  font-weight: 500;
698
+ font-size: 1.5rem;
699
+ line-height: 1;
711
700
  }
712
701
 
713
702
  /* Specific Font Mapping Rules for Previews */
714
- .ms-font-preview-card[data-font="shabwa"] .font-preview-sample,
703
+ .ms-font-option[data-font="shabwa"] .font-preview-sample,
715
704
  .ms-font-settings-option[data-font-option="shabwa"] .font-preview-sample {
716
705
  font-family: 'Shabwa', sans-serif !important;
717
706
  }
718
707
 
719
- .ms-font-preview-card[data-font="cairo"] .font-preview-sample,
708
+ .ms-font-option[data-font="cairo"] .font-preview-sample,
720
709
  .ms-font-settings-option[data-font-option="cairo"] .font-preview-sample {
721
710
  font-family: 'Cairo', sans-serif !important;
722
711
  }
@@ -103,7 +103,9 @@
103
103
  element.addEventListener('click', function () {
104
104
  const font = this.getAttribute('data-font');
105
105
  // Update local UI
106
- document.querySelectorAll('[data-font]').forEach(el => el.classList.toggle('active', el === this));
106
+ document.querySelectorAll('[data-font]').forEach((option) => {
107
+ option.classList.toggle('is-active', option === this);
108
+ });
107
109
 
108
110
  // Apply immediately
109
111
  const familyName = font.charAt(0).toUpperCase() + font.slice(1);
@@ -2858,13 +2858,15 @@
2858
2858
  input.value = activeTheme;
2859
2859
  allowedCheckboxes.forEach((checkbox) => {
2860
2860
  const theme = checkbox.getAttribute('data-setup-theme-allowed');
2861
- checkbox.disabled = checkbox.checked && resolvedAllowedThemes.length === 1;
2861
+ const isLocked = checkbox.checked && resolvedAllowedThemes.length === 1;
2862
+ checkbox.setAttribute('aria-disabled', isLocked ? 'true' : 'false');
2862
2863
  const container = checkbox.closest('[data-theme-option]');
2863
2864
  if (!container) {
2864
2865
  return;
2865
2866
  }
2866
2867
  const isAllowed = resolvedAllowedThemes.includes(theme);
2867
2868
  const isDefault = theme === activeTheme;
2869
+ container.classList.toggle('is-locked', isLocked);
2868
2870
  container.classList.toggle('opacity-50', !isAllowed);
2869
2871
  container.classList.toggle('is-default', isDefault);
2870
2872
  const button = container.querySelector('[data-setup-theme-choice]');
@@ -2897,6 +2899,11 @@
2897
2899
  });
2898
2900
 
2899
2901
  allowedCheckboxes.forEach((checkbox) => {
2902
+ checkbox.addEventListener('click', (event) => {
2903
+ if (checkbox.checked && getAllowedThemes().length === 1) {
2904
+ event.preventDefault();
2905
+ }
2906
+ });
2900
2907
  checkbox.addEventListener('change', () => {
2901
2908
  if (!getAllowedThemes().length) {
2902
2909
  checkbox.checked = true;
@@ -0,0 +1,20 @@
1
+ {% load static %}
2
+ <div class="ms-font-picker" id="msFontPreviews">
3
+ <div class="ms-density-options" role="group" aria-label="{{ MS_TRANS.typography }}">
4
+ {% for font in option_fonts %}
5
+ <button
6
+ type="button"
7
+ class="ms-density-option ms-font-option{% if selected_font == font.slug %} is-active{% endif %}"
8
+ data-font="{{ font.slug }}"
9
+ >
10
+ <span class="ms-density-option__icon ms-font-option__icon" aria-hidden="true">
11
+ <span class="font-preview-sample">Aa</span>
12
+ </span>
13
+ <span class="ms-density-option__copy">
14
+ <strong>{{ font.label }}</strong>
15
+ <small>{{ font.slug }}</small>
16
+ </span>
17
+ </button>
18
+ {% endfor %}
19
+ </div>
20
+ </div>
@@ -304,7 +304,7 @@
304
304
  <h4 class="mb-3"><i class="bi bi-fonts me-2"></i> {{ MS_TRANS.typography }}</h4>
305
305
  <p class="text-muted small mb-4">{{ MS_TRANS.typography_desc }}</p>
306
306
 
307
- {% include 'microsys/includes/font_previews.html' with selected_font=active_font allowed_fonts=APP_CONFIG.allowed_fonts %}
307
+ {% include 'microsys/includes/font_previews.html' with selected_font=active_font option_fonts=option_fonts %}
308
308
  </div>
309
309
  </div>
310
310
  {% endif %}