wagtail 7.1.1__py3-none-any.whl → 7.2rc1__py3-none-any.whl

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 (345) hide show
  1. wagtail/__init__.py +1 -1
  2. wagtail/actions/copy_page.py +1 -1
  3. wagtail/actions/create_alias.py +1 -1
  4. wagtail/actions/delete_page.py +1 -1
  5. wagtail/actions/publish_page_revision.py +1 -1
  6. wagtail/actions/publish_revision.py +1 -1
  7. wagtail/actions/revert_to_page_revision.py +1 -1
  8. wagtail/actions/unpublish.py +1 -1
  9. wagtail/actions/unpublish_page.py +1 -1
  10. wagtail/admin/auth.py +3 -1
  11. wagtail/admin/checks.py +2 -2
  12. wagtail/admin/filters.py +28 -1
  13. wagtail/admin/forms/collections.py +1 -1
  14. wagtail/admin/forms/comments.py +1 -1
  15. wagtail/admin/forms/models.py +1 -1
  16. wagtail/admin/forms/pages.py +1 -1
  17. wagtail/admin/forms/tags.py +1 -1
  18. wagtail/admin/locale/cs/LC_MESSAGES/django.mo +0 -0
  19. wagtail/admin/locale/cs/LC_MESSAGES/django.po +25 -1
  20. wagtail/admin/locale/en/LC_MESSAGES/django.po +278 -192
  21. wagtail/admin/locale/en/LC_MESSAGES/djangojs.po +29 -15
  22. wagtail/admin/locale/it/LC_MESSAGES/django.mo +0 -0
  23. wagtail/admin/locale/it/LC_MESSAGES/django.po +3 -2
  24. wagtail/admin/locale/nl/LC_MESSAGES/django.mo +0 -0
  25. wagtail/admin/locale/nl/LC_MESSAGES/django.po +57 -3
  26. wagtail/admin/locale/nl/LC_MESSAGES/djangojs.mo +0 -0
  27. wagtail/admin/locale/nl/LC_MESSAGES/djangojs.po +8 -2
  28. wagtail/admin/locale/ru/LC_MESSAGES/django.mo +0 -0
  29. wagtail/admin/locale/ru/LC_MESSAGES/django.po +58 -1
  30. wagtail/admin/locale/tr/LC_MESSAGES/django.mo +0 -0
  31. wagtail/admin/locale/tr/LC_MESSAGES/django.po +3 -2
  32. wagtail/admin/static/wagtailadmin/css/core.css +1 -1
  33. wagtail/admin/static/wagtailadmin/js/bulk-actions.js +1 -1
  34. wagtail/admin/static/wagtailadmin/js/chooser-modal.js +1 -1
  35. wagtail/admin/static/wagtailadmin/js/chooser-widget-telepath.js +1 -1
  36. wagtail/admin/static/wagtailadmin/js/chooser-widget.js +1 -1
  37. wagtail/admin/static/wagtailadmin/js/comments.js +1 -1
  38. wagtail/admin/static/wagtailadmin/js/core.js +1 -1
  39. wagtail/admin/static/wagtailadmin/js/core.js.LICENSE.txt +2 -2
  40. wagtail/admin/static/wagtailadmin/js/date-time-chooser.js +1 -1
  41. wagtail/admin/static/wagtailadmin/js/draftail.js +1 -1
  42. wagtail/admin/static/wagtailadmin/js/filtered-select.js +1 -1
  43. wagtail/admin/static/wagtailadmin/js/icons.js +1 -1
  44. wagtail/admin/static/wagtailadmin/js/modal-workflow.js +1 -1
  45. wagtail/admin/static/wagtailadmin/js/page-chooser-modal.js +1 -1
  46. wagtail/admin/static/wagtailadmin/js/page-chooser-telepath.js +1 -1
  47. wagtail/admin/static/wagtailadmin/js/page-chooser.js +1 -1
  48. wagtail/admin/static/wagtailadmin/js/privacy-switch.js +1 -1
  49. wagtail/admin/static/wagtailadmin/js/sidebar.js +1 -1
  50. wagtail/admin/static/wagtailadmin/js/task-chooser-modal.js +1 -1
  51. wagtail/admin/static/wagtailadmin/js/task-chooser.js +1 -1
  52. wagtail/admin/static/wagtailadmin/js/telepath/blocks.js +1 -1
  53. wagtail/admin/static/wagtailadmin/js/telepath/telepath.js +1 -1
  54. wagtail/admin/static/wagtailadmin/js/telepath/widgets.js +1 -1
  55. wagtail/admin/static/wagtailadmin/js/userbar.js +1 -1
  56. wagtail/admin/static/wagtailadmin/js/userbar.js.LICENSE.txt +2 -2
  57. wagtail/admin/static/wagtailadmin/js/vendor/bootstrap-modal.js +1 -1
  58. wagtail/admin/static/wagtailadmin/js/vendor/bootstrap-transition.js +1 -1
  59. wagtail/admin/static/wagtailadmin/js/vendor/jquery-3.6.0.min.js +1 -1
  60. wagtail/admin/static/wagtailadmin/js/vendor/jquery-ui-1.13.2.min.js +1 -1
  61. wagtail/admin/static/wagtailadmin/js/vendor/jquery.datetimepicker.js +1 -1
  62. wagtail/admin/static/wagtailadmin/js/vendor/jquery.fileupload-process.js +1 -1
  63. wagtail/admin/static/wagtailadmin/js/vendor/jquery.fileupload.js +1 -1
  64. wagtail/admin/static/wagtailadmin/js/vendor/jquery.iframe-transport.js +1 -1
  65. wagtail/admin/static/wagtailadmin/js/vendor/tag-it.js +1 -1
  66. wagtail/admin/static/wagtailadmin/js/vendor.js +1 -1
  67. wagtail/admin/static/wagtailadmin/js/vendor.js.LICENSE.txt +1 -1
  68. wagtail/admin/static/wagtailadmin/js/wagtailadmin.js +1 -1
  69. wagtail/admin/static/wagtailadmin/js/workflow-action.js +1 -1
  70. wagtail/admin/templates/wagtailadmin/account/account.html +2 -0
  71. wagtail/admin/templates/wagtailadmin/base.html +14 -0
  72. wagtail/admin/templates/wagtailadmin/generic/chooser/chooser.html +2 -1
  73. wagtail/admin/templates/wagtailadmin/generic/chooser/creation_form.html +2 -1
  74. wagtail/admin/templates/wagtailadmin/generic/form.html +3 -1
  75. wagtail/admin/templates/wagtailadmin/panels/multi_field_panel_child.html +1 -1
  76. wagtail/admin/templates/wagtailadmin/panels/object_list.html +1 -1
  77. wagtail/admin/templates/wagtailadmin/panels/tabbed_interface.html +3 -2
  78. wagtail/admin/templates/wagtailadmin/shared/formatted_field.html +1 -1
  79. wagtail/admin/templates/wagtailadmin/shared/forms/single_checkbox.html +1 -1
  80. wagtail/admin/templates/wagtailadmin/shared/keyboard_shortcuts_dialog.html +19 -0
  81. wagtail/admin/templates/wagtailadmin/shared/panel.html +1 -1
  82. wagtail/admin/templates/wagtailadmin/shared/set_privacy.html +15 -0
  83. wagtail/admin/templates/wagtailadmin/shared/side_panels/checks.html +28 -1
  84. wagtail/admin/templates/wagtailadmin/shared/workflow_history/detail.html +2 -2
  85. wagtail/admin/templates/wagtailadmin/{pages/listing/_ordering_header.html → tables/ordering_header.html} +2 -2
  86. wagtail/admin/templates/wagtailadmin/tables/title_cell.html +1 -1
  87. wagtail/admin/templates/wagtailadmin/userbar/base.html +6 -3
  88. wagtail/admin/templates/wagtailadmin/userbar/item_admin.html +2 -2
  89. wagtail/admin/templates/wagtailadmin/userbar/item_page_add.html +2 -2
  90. wagtail/admin/templates/wagtailadmin/userbar/item_page_edit.html +2 -2
  91. wagtail/admin/templates/wagtailadmin/userbar/item_page_explore.html +2 -2
  92. wagtail/admin/templates/wagtailadmin/widgets/{daterange_input.html → range_input.html} +1 -1
  93. wagtail/admin/templates/wagtailadmin/workflows/task_chooser/chooser.html +4 -2
  94. wagtail/admin/templatetags/wagtailadmin_tags.py +56 -22
  95. wagtail/admin/tests/api/test_pages.py +7 -7
  96. wagtail/admin/tests/api/test_renderer_classes.py +16 -0
  97. wagtail/admin/tests/pages/test_create_page.py +34 -2
  98. wagtail/admin/tests/pages/test_edit_page.py +128 -14
  99. wagtail/admin/tests/pages/test_explorer_view.py +34 -7
  100. wagtail/admin/tests/pages/test_reorder_page.py +11 -0
  101. wagtail/admin/tests/test_collections_views.py +12 -0
  102. wagtail/admin/tests/test_edit_handlers.py +3 -3
  103. wagtail/admin/tests/test_filters.py +2 -2
  104. wagtail/admin/tests/test_keyboard_shortcuts.py +52 -2
  105. wagtail/admin/tests/test_menu.py +0 -2
  106. wagtail/admin/tests/test_privacy.py +16 -16
  107. wagtail/admin/tests/test_templatetags.py +137 -0
  108. wagtail/admin/tests/test_userbar.py +75 -35
  109. wagtail/admin/tests/test_views_generic.py +34 -0
  110. wagtail/admin/tests/test_workflows.py +34 -0
  111. wagtail/admin/tests/viewsets/test_model_viewset.py +322 -0
  112. wagtail/admin/ui/tables/orderable.py +73 -0
  113. wagtail/admin/ui/tables/pages.py +3 -13
  114. wagtail/admin/userbar.py +6 -1
  115. wagtail/admin/views/collection_privacy.py +6 -2
  116. wagtail/admin/views/generic/__init__.py +1 -0
  117. wagtail/admin/views/generic/mixins.py +20 -2
  118. wagtail/admin/views/generic/models.py +67 -1
  119. wagtail/admin/views/generic/ordering.py +79 -0
  120. wagtail/admin/views/home.py +3 -3
  121. wagtail/admin/views/page_privacy.py +5 -2
  122. wagtail/admin/views/pages/create.py +1 -1
  123. wagtail/admin/views/pages/edit.py +2 -2
  124. wagtail/admin/views/pages/listing.py +7 -42
  125. wagtail/admin/views/pages/move.py +1 -1
  126. wagtail/admin/views/pages/ordering.py +1 -1
  127. wagtail/admin/viewsets/base.py +1 -1
  128. wagtail/admin/viewsets/model.py +49 -1
  129. wagtail/admin/wagtail_hooks.py +2 -1
  130. wagtail/admin/widgets/slug.py +10 -10
  131. wagtail/api/v2/serializers.py +1 -1
  132. wagtail/api/v2/tests/test_renderer_classes.py +32 -0
  133. wagtail/apps.py +2 -0
  134. wagtail/bin/wagtail.py +1 -1
  135. wagtail/blocks/struct_block.py +2 -1
  136. wagtail/contrib/forms/locale/en/LC_MESSAGES/django.po +14 -14
  137. wagtail/contrib/forms/locale/nl/LC_MESSAGES/django.mo +0 -0
  138. wagtail/contrib/forms/locale/nl/LC_MESSAGES/django.po +19 -2
  139. wagtail/contrib/forms/locale/ru/LC_MESSAGES/django.mo +0 -0
  140. wagtail/contrib/forms/locale/ru/LC_MESSAGES/django.po +18 -1
  141. wagtail/contrib/frontend_cache/tests.py +4 -2
  142. wagtail/contrib/redirects/locale/en/LC_MESSAGES/django.po +4 -4
  143. wagtail/contrib/redirects/tests/test_tmp_storages.py +20 -0
  144. wagtail/contrib/redirects/tmp_storages.py +1 -1
  145. wagtail/contrib/redirects/views.py +3 -3
  146. wagtail/contrib/search_promotions/locale/en/LC_MESSAGES/django.po +3 -3
  147. wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.mo +0 -0
  148. wagtail/contrib/search_promotions/locale/tr/LC_MESSAGES/django.po +43 -3
  149. wagtail/contrib/search_promotions/static/wagtailsearchpromotions/js/query-chooser-modal.js +1 -1
  150. wagtail/contrib/search_promotions/views/settings.py +2 -2
  151. wagtail/contrib/settings/locale/cs/LC_MESSAGES/django.mo +0 -0
  152. wagtail/contrib/settings/locale/cs/LC_MESSAGES/django.po +6 -1
  153. wagtail/contrib/settings/locale/en/LC_MESSAGES/django.po +1 -1
  154. wagtail/contrib/settings/locale/nl/LC_MESSAGES/django.mo +0 -0
  155. wagtail/contrib/settings/locale/nl/LC_MESSAGES/django.po +6 -2
  156. wagtail/contrib/settings/locale/ru/LC_MESSAGES/django.mo +0 -0
  157. wagtail/contrib/settings/locale/ru/LC_MESSAGES/django.po +6 -1
  158. wagtail/contrib/settings/tests/site_specific/test_admin.py +40 -6
  159. wagtail/contrib/simple_translation/locale/en/LC_MESSAGES/django.po +1 -1
  160. wagtail/contrib/styleguide/locale/en/LC_MESSAGES/django.po +1 -1
  161. wagtail/contrib/styleguide/templates/wagtailstyleguide/base.html +5 -5
  162. wagtail/contrib/table_block/blocks.py +1 -0
  163. wagtail/contrib/table_block/locale/en/LC_MESSAGES/django.po +5 -1
  164. wagtail/contrib/table_block/static/table_block/js/table.js +1 -1
  165. wagtail/contrib/typed_table_block/locale/en/LC_MESSAGES/django.po +1 -1
  166. wagtail/contrib/typed_table_block/static/typed_table_block/js/typed_table_block.js +1 -1
  167. wagtail/coreutils.py +5 -5
  168. wagtail/documents/forms.py +18 -1
  169. wagtail/documents/locale/en/LC_MESSAGES/django.po +10 -10
  170. wagtail/documents/locale/nl/LC_MESSAGES/django.mo +0 -0
  171. wagtail/documents/locale/nl/LC_MESSAGES/django.po +9 -0
  172. wagtail/documents/locale/ru/LC_MESSAGES/django.mo +0 -0
  173. wagtail/documents/locale/ru/LC_MESSAGES/django.po +9 -0
  174. wagtail/documents/models.py +1 -1
  175. wagtail/documents/static/wagtaildocs/js/add-multiple.js +1 -1
  176. wagtail/documents/static/wagtaildocs/js/document-chooser-modal.js +1 -1
  177. wagtail/documents/static/wagtaildocs/js/document-chooser-telepath.js +1 -1
  178. wagtail/documents/static/wagtaildocs/js/document-chooser.js +1 -1
  179. wagtail/documents/templates/wagtaildocs/documents/add.html +0 -34
  180. wagtail/documents/tests/test_admin_views.py +132 -26
  181. wagtail/documents/tests/test_collection_privacy.py +18 -4
  182. wagtail/documents/tests/test_form_overrides.py +1 -1
  183. wagtail/documents/tests/test_search.py +21 -8
  184. wagtail/documents/views/documents.py +1 -1
  185. wagtail/embeds/locale/en/LC_MESSAGES/django.po +1 -1
  186. wagtail/embeds/static/wagtailembeds/js/embed-chooser-modal.js +1 -1
  187. wagtail/images/forms.py +16 -1
  188. wagtail/images/locale/cs/LC_MESSAGES/django.mo +0 -0
  189. wagtail/images/locale/cs/LC_MESSAGES/django.po +12 -1
  190. wagtail/images/locale/en/LC_MESSAGES/django.po +57 -46
  191. wagtail/images/locale/nl/LC_MESSAGES/django.mo +0 -0
  192. wagtail/images/locale/nl/LC_MESSAGES/django.po +37 -14
  193. wagtail/images/locale/ru/LC_MESSAGES/django.mo +0 -0
  194. wagtail/images/locale/ru/LC_MESSAGES/django.po +20 -1
  195. wagtail/images/models.py +1 -1
  196. wagtail/images/static/wagtailimages/js/add-multiple.js +1 -1
  197. wagtail/images/static/wagtailimages/js/focal-point-chooser.js +1 -1
  198. wagtail/images/static/wagtailimages/js/image-block.js +1 -1
  199. wagtail/images/static/wagtailimages/js/image-chooser-modal.js +1 -1
  200. wagtail/images/static/wagtailimages/js/image-chooser-telepath.js +1 -1
  201. wagtail/images/static/wagtailimages/js/image-chooser.js +1 -1
  202. wagtail/images/static/wagtailimages/js/image-url-generator.js +1 -1
  203. wagtail/images/static/wagtailimages/js/vendor/jquery.Jcrop.min.js +1 -1
  204. wagtail/images/static/wagtailimages/js/vendor/jquery.fileupload-image.js +1 -1
  205. wagtail/images/static/wagtailimages/js/vendor/jquery.fileupload-validate.js +1 -1
  206. wagtail/images/static/wagtailimages/js/vendor/load-image.min.js +1 -1
  207. wagtail/images/templates/wagtailimages/chooser/chooser.html +22 -13
  208. wagtail/images/templates/wagtailimages/chooser/image_preview_column_cell.html +10 -0
  209. wagtail/images/templates/wagtailimages/chooser/results.html +24 -20
  210. wagtail/images/templates/wagtailimages/chooser/title_column_cell.html +15 -0
  211. wagtail/images/templates/wagtailimages/images/add.html +0 -34
  212. wagtail/images/templates/wagtailimages/images/index.html +3 -3
  213. wagtail/images/templates/wagtailimages/images/index_results.html +1 -1
  214. wagtail/images/templates/wagtailimages/images/layout_toggle_button.html +8 -7
  215. wagtail/images/templatetags/wagtailimages_tags.py +2 -2
  216. wagtail/images/tests/test_admin_views.py +87 -0
  217. wagtail/images/tests/test_form_overrides.py +1 -1
  218. wagtail/images/tests/test_models.py +48 -9
  219. wagtail/images/views/chooser.py +66 -2
  220. wagtail/locale/en/LC_MESSAGES/django.po +55 -55
  221. wagtail/locale/is_IS/LC_MESSAGES/django.mo +0 -0
  222. wagtail/locale/is_IS/LC_MESSAGES/django.po +3 -3
  223. wagtail/locale/nl/LC_MESSAGES/django.mo +0 -0
  224. wagtail/locale/nl/LC_MESSAGES/django.po +11 -2
  225. wagtail/locale/ru/LC_MESSAGES/django.mo +0 -0
  226. wagtail/locale/ru/LC_MESSAGES/django.po +11 -1
  227. wagtail/locales/locale/en/LC_MESSAGES/django.po +1 -1
  228. wagtail/locales/locale/nl/LC_MESSAGES/django.mo +0 -0
  229. wagtail/locales/locale/nl/LC_MESSAGES/django.po +12 -1
  230. wagtail/locales/locale/ru/LC_MESSAGES/django.mo +0 -0
  231. wagtail/locales/locale/ru/LC_MESSAGES/django.po +10 -1
  232. wagtail/locales/views.py +2 -2
  233. wagtail/models/orderable.py +10 -0
  234. wagtail/models/pages.py +9 -11
  235. wagtail/models/sites.py +1 -1
  236. wagtail/models/workflows.py +8 -5
  237. wagtail/project_template/home/tests.py +6 -7
  238. wagtail/project_template/project_name/settings/base.py +9 -9
  239. wagtail/project_template/requirements.txt +1 -1
  240. wagtail/query.py +7 -2
  241. wagtail/rich_text/rewriters.py +1 -1
  242. wagtail/search/apps.py +4 -49
  243. wagtail/search/backends/__init__.py +1 -113
  244. wagtail/search/backends/base.py +1 -547
  245. wagtail/search/backends/database/__init__.py +1 -50
  246. wagtail/search/backends/database/fallback.py +1 -253
  247. wagtail/search/backends/database/mysql/mysql.py +1 -700
  248. wagtail/search/backends/database/mysql/query.py +1 -258
  249. wagtail/search/backends/database/postgres/postgres.py +1 -749
  250. wagtail/search/backends/database/postgres/query.py +1 -83
  251. wagtail/search/backends/database/postgres/weights.py +1 -63
  252. wagtail/search/backends/database/sqlite/query.py +1 -294
  253. wagtail/search/backends/database/sqlite/sqlite.py +1 -719
  254. wagtail/search/backends/database/sqlite/utils.py +1 -35
  255. wagtail/search/backends/deprecation.py +45 -0
  256. wagtail/search/backends/elasticsearch7.py +18 -1260
  257. wagtail/search/backends/elasticsearch8.py +21 -96
  258. wagtail/search/backends/elasticsearch9.py +35 -0
  259. wagtail/search/backends/opensearch2.py +35 -0
  260. wagtail/search/backends/opensearch3.py +35 -0
  261. wagtail/search/index.py +1 -358
  262. wagtail/search/locale/en/LC_MESSAGES/django.po +2 -10
  263. wagtail/search/management/commands/update_index.py +1 -205
  264. wagtail/search/management/commands/wagtail_update_index.py +1 -4
  265. wagtail/search/models.py +32 -158
  266. wagtail/search/query.py +1 -114
  267. wagtail/search/queryset.py +1 -43
  268. wagtail/search/signal_handlers.py +1 -24
  269. wagtail/search/tasks.py +1 -10
  270. wagtail/search/tests/test_elasticsearch.py +22 -0
  271. wagtail/search/utils.py +1 -206
  272. wagtail/sites/locale/en/LC_MESSAGES/django.po +1 -1
  273. wagtail/snippets/locale/en/LC_MESSAGES/django.po +3 -3
  274. wagtail/snippets/locale/ru/LC_MESSAGES/django.mo +0 -0
  275. wagtail/snippets/locale/ru/LC_MESSAGES/django.po +8 -1
  276. wagtail/snippets/locale/tr/LC_MESSAGES/django.mo +0 -0
  277. wagtail/snippets/locale/tr/LC_MESSAGES/django.po +8 -1
  278. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser-telepath.js +1 -1
  279. wagtail/snippets/static/wagtailsnippets/js/snippet-chooser.js +1 -1
  280. wagtail/snippets/tests/test_preview.py +5 -6
  281. wagtail/snippets/tests/test_reordering.py +319 -0
  282. wagtail/snippets/tests/test_snippets.py +65 -12
  283. wagtail/snippets/views/snippets.py +16 -0
  284. wagtail/test/numberformat.py +30 -0
  285. wagtail/test/settings.py +35 -12
  286. wagtail/test/testapp/fields.py +12 -0
  287. wagtail/test/testapp/migrations/0056_commentablejsonpage.py +50 -0
  288. wagtail/test/testapp/migrations/0057_featurecompletetoy_sort_order.py +23 -0
  289. wagtail/test/testapp/migrations/0058_customlocktask.py +31 -0
  290. wagtail/test/testapp/models.py +27 -0
  291. wagtail/test/testapp/urls.py +1 -0
  292. wagtail/test/testapp/views.py +18 -2
  293. wagtail/test/utils/page_tests.py +17 -17
  294. wagtail/test/utils/template_tests.py +4 -6
  295. wagtail/test/utils/wagtail_tests.py +1 -2
  296. wagtail/tests/test_blocks.py +15 -0
  297. wagtail/tests/test_page_model.py +15 -0
  298. wagtail/{search/tests → tests}/test_page_search.py +29 -2
  299. wagtail/tests/test_search_fields.py +69 -0
  300. wagtail/tests/test_tests.py +62 -6
  301. wagtail/tests/test_workflow.py +25 -1
  302. wagtail/users/locale/cs/LC_MESSAGES/django.mo +0 -0
  303. wagtail/users/locale/cs/LC_MESSAGES/django.po +3 -0
  304. wagtail/users/locale/en/LC_MESSAGES/django.po +2 -2
  305. wagtail/users/locale/nl/LC_MESSAGES/django.mo +0 -0
  306. wagtail/users/locale/nl/LC_MESSAGES/django.po +6 -3
  307. wagtail/users/locale/ru/LC_MESSAGES/django.mo +0 -0
  308. wagtail/users/locale/ru/LC_MESSAGES/django.po +5 -1
  309. wagtail/users/locale/tr/LC_MESSAGES/django.mo +0 -0
  310. wagtail/users/locale/tr/LC_MESSAGES/django.po +78 -4
  311. wagtail/users/templates/wagtailusers/users/create.html +2 -0
  312. wagtail/users/templates/wagtailusers/users/edit.html +2 -0
  313. wagtail/users/tests/test_admin_views.py +4 -0
  314. wagtail/users/views/users.py +1 -1
  315. {wagtail-7.1.1.dist-info → wagtail-7.2rc1.dist-info}/METADATA +7 -6
  316. {wagtail-7.1.1.dist-info → wagtail-7.2rc1.dist-info}/RECORD +322 -328
  317. wagtail/admin/templates/wagtailadmin/collection_privacy/set_privacy.html +0 -13
  318. wagtail/admin/templates/wagtailadmin/page_privacy/set_privacy.html +0 -13
  319. wagtail/search/tests/__init__.py +0 -0
  320. wagtail/search/tests/elasticsearch_common_tests.py +0 -251
  321. wagtail/search/tests/test_backends.py +0 -1215
  322. wagtail/search/tests/test_db_backend.py +0 -62
  323. wagtail/search/tests/test_elasticsearch7_backend.py +0 -1452
  324. wagtail/search/tests/test_elasticsearch8_backend.py +0 -15
  325. wagtail/search/tests/test_index_functions.py +0 -256
  326. wagtail/search/tests/test_indexed_class.py +0 -157
  327. wagtail/search/tests/test_mysql_backend.py +0 -192
  328. wagtail/search/tests/test_postgres_backend.py +0 -210
  329. wagtail/search/tests/test_queries.py +0 -332
  330. wagtail/search/tests/test_related_fields.py +0 -102
  331. wagtail/search/tests/test_sqlite_backend.py +0 -52
  332. wagtail/test/search/__init__.py +0 -0
  333. wagtail/test/search/apps.py +0 -9
  334. wagtail/test/search/fixtures/search.json +0 -545
  335. wagtail/test/search/migrations/0001_initial.py +0 -146
  336. wagtail/test/search/migrations/0002_bookunindexed.py +0 -43
  337. wagtail/test/search/migrations/0003_book_summary.py +0 -18
  338. wagtail/test/search/migrations/__init__.py +0 -0
  339. wagtail/test/search/models.py +0 -137
  340. /wagtail/admin/templates/wagtailadmin/{pages/listing/_ordering_cell.html → tables/ordering_cell.html} +0 -0
  341. /wagtail/{search/checks.py → checks.py} +0 -0
  342. {wagtail-7.1.1.dist-info → wagtail-7.2rc1.dist-info}/WHEEL +0 -0
  343. {wagtail-7.1.1.dist-info → wagtail-7.2rc1.dist-info}/entry_points.txt +0 -0
  344. {wagtail-7.1.1.dist-info → wagtail-7.2rc1.dist-info}/licenses/LICENSE +0 -0
  345. {wagtail-7.1.1.dist-info → wagtail-7.2rc1.dist-info}/top_level.txt +0 -0
@@ -451,13 +451,13 @@
451
451
  {% include 'wagtailadmin/shared/tabs/tab_nav_link.html' with tab_id='basic-tab-3' title='Tab 3' %}
452
452
  </div>
453
453
  <div class="tab-content">
454
- <section class="w-min-h-24 w-tabs__panel" id="tab-basic-tab-1" role="tabpanel" aria-labelledby="tab-label-basic-tab-1" data-w-tabs-target="panel">
454
+ <section class="w-min-h-24 w-tabs__panel" id="tab-basic-tab-1" role="tabpanel" aria-labelledby="tab-label-basic-tab-1" data-w-tabs-target="panel" data-action="w-focus:focus->w-tabs#selectInside">
455
455
  Tab 1 content
456
456
  </section>
457
- <section class="w-min-h-24 w-tabs__panel" id="tab-basic-tab-2" role="tabpanel" aria-labelledby="tab-label-basic-tab-2" data-w-tabs-target="panel">
457
+ <section class="w-min-h-24 w-tabs__panel" id="tab-basic-tab-2" role="tabpanel" aria-labelledby="tab-label-basic-tab-2" data-w-tabs-target="panel" data-action="w-focus:focus->w-tabs#selectInside">
458
458
  Tab 2 content
459
459
  </section>
460
- <section class="w-min-h-24 w-tabs__panel" id="tab-basic-tab-3" role="tabpanel" aria-labelledby="tab-label-basic-tab-3" data-w-tabs-target="panel">
460
+ <section class="w-min-h-24 w-tabs__panel" id="tab-basic-tab-3" role="tabpanel" aria-labelledby="tab-label-basic-tab-3" data-w-tabs-target="panel" data-action="w-focus:focus->w-tabs#selectInside">
461
461
  Tab 3 content
462
462
  </section>
463
463
  </div>
@@ -471,12 +471,12 @@
471
471
  {% include 'wagtailadmin/shared/tabs/tab_nav_link.html' with tab_id='errors-tab-2' title='Tab 2' %}
472
472
  </div>
473
473
  <div class="tab-content">
474
- <section class="w-min-h-24" id="tab-errors-tab-1" role="tabpanel" aria-labelledby="tab-label-errors-tab-1" data-w-tabs-target="panel">
474
+ <section class="w-min-h-24" id="tab-errors-tab-1" role="tabpanel" aria-labelledby="tab-label-errors-tab-1" data-w-tabs-target="panel" data-action="w-focus:focus->w-tabs#selectInside">
475
475
  <p>Tabs can also indicate errors:</p>
476
476
  Tab 1 content
477
477
  <ul><li class="error-message">Single error</li></ul>
478
478
  </section>
479
- <section class="w-min-h-24" id="tab-errors-tab-2" role="tabpanel" aria-labelledby="tab-label-errors-tab-2" data-w-tabs-target="panel">
479
+ <section class="w-min-h-24" id="tab-errors-tab-2" role="tabpanel" aria-labelledby="tab-label-errors-tab-2" data-w-tabs-target="panel" data-action="w-focus:focus->w-tabs#selectInside">
480
480
  <p>Tabs can also indicate errors:</p>
481
481
  Tab 2 content
482
482
  <ul>
@@ -89,6 +89,7 @@ class TableInputAdapter(WidgetAdapter):
89
89
  "A heading that identifies the overall topic of the table, and is useful for screen reader users."
90
90
  ),
91
91
  "Table": _("Table"),
92
+ "Select a header option": _("Select a header option"),
92
93
  }
93
94
 
94
95
  return [
@@ -8,7 +8,7 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2025-07-24 16:20+0200\n"
11
+ "POT-Creation-Date: 2025-10-23 16:45+0100\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -67,3 +67,7 @@ msgstr ""
67
67
  #: blocks.py:91
68
68
  msgid "Table"
69
69
  msgstr ""
70
+
71
+ #: blocks.py:92
72
+ msgid "Select a header option"
73
+ msgstr ""
@@ -1 +1 @@
1
- (()=>{"use strict";var e,t={6865:(e,t,n)=>{var a=n(1669),l=n.n(a),i=n(4188);const o={contenteditable:"true","plaintext-only":"true",tabindex:"0"};function r(e,t){const n=e+"-handsontable-container";var a=e+"-handsontable-header",r=e+"-handsontable-col-header",s=e+"-table-header-choice";const d=e+"-handsontable-col-caption",c=l()("#"+e);var h=l()("#"+a),p=l()("#"+r),f=l()("#"+s);const u=l()("#"+d),b={};let g=null,v=null,w=!1;const m=l()("#"+e).parent(),_=function(){let e=0;return m.find(".htCore").each((function(){e+=l()(this).height()})),e+m.find("[data-field]").first().height()},y=[`#${n}`,".wtHider",".wtHolder"],$=function(t){const n=l()("#"+e);l().each(y,(function(){n.closest("[data-field]").find(this).height(t)}))};try{v=JSON.parse(c.val())}catch(e){}null!==v&&((0,i.$)(v,"table_caption")&&u.prop("value",v.table_caption),(0,i.$)(v,"table_header_choice")&&f.prop("value",v.table_header_choice)),(0,i.$)(t,"width")&&(0,i.$)(t,"height")||l()(window).on("resize",(()=>{var e;g.updateSettings({width:l()(".w-field--table_input").closest(".w-panel").width(),height:_()}),e="100%",l().each(y,(function(){l()(this).width(e)})),l()(".w-field--table_input").width(e)}));const C=function(){const e=[],t=[];g.getCellsMeta().forEach((t=>{let n,a;(0,i.$)(t,"className")&&(n=t.className),(0,i.$)(t,"hidden")&&(a=!0),(void 0!==n||a)&&e.push({row:t.row,col:t.col,className:n,hidden:a})})),g.getPlugin("mergeCells").isEnabled()&&g.getPlugin("mergeCells").mergedCellsCollection.mergedCells.forEach((e=>{t.push({row:e.row,col:e.col,rowspan:e.rowspan,colspan:e.colspan})})),c.val(JSON.stringify({data:g.getData(),cell:e,mergeCells:t,first_row_is_table_header:h.val(),first_col_is_header:p.val(),table_header_choice:f.val(),table_caption:u.val()}))},O=function(e,t){$(_()),C(),l()((()=>{l()(m).find("td, th").attr(o)}))};f.on("change",(()=>{C()})),u.on("change",(()=>{C()}));const S={afterChange:function(e,t){w&&"loadData"!==t&&"MergeCells"!==t&&C()},afterCreateCol:O,afterCreateRow:O,afterRemoveCol:O,afterRemoveRow:O,afterSetCellMeta:function(e,t,n,a){w&&"className"===n&&C()},afterMergeCells:function(e,t,n){w&&C()},afterUnmergeCells:function(e,t){w&&C()},afterInit:function(){w=!0}};null!==v&&((0,i.$)(v,"data")&&(S.data=v.data),(0,i.$)(v,"cell")&&(S.cell=v.cell)),Object.keys(S).forEach((e=>{b[e]=S[e]})),Object.keys(t).forEach((e=>{b[e]=t[e]})),(0,i.$)(b,"mergeCells")&&!0===b.mergeCells&&null!==v&&(0,i.$)(v,"mergeCells")&&(b.mergeCells=v.mergeCells),g=new Handsontable(document.getElementById(n),b),window.addEventListener("load",(()=>{g.render(),$(_()),m.find("td, th").attr(o),window.dispatchEvent(new Event("resize"))}))}window.initTable=r,window.telepath.register("wagtail.widgets.TableInput",class{constructor(e,t){this.options=e,this.strings=t}render(e,t,n,a){const i=document.createElement("div");i.innerHTML=`\n <div class="w-field__wrapper" data-field-wrapper>\n <label class="w-field__label" for="${n}-table-header-choice">${this.strings["Table headers"]}</label>\n <select id="${n}-table-header-choice" name="table-header-choice">\n <option value="">Select a header option</option>\n <option value="row">\n ${this.strings["Display the first row as a header"]}\n </option>\n <option value="column">\n ${this.strings["Display the first column as a header"]}\n </option>\n <option value="both">\n ${this.strings["Display the first row AND first column as headers"]}\n </option>\n <option value="neither">\n ${this.strings["No headers"]}\n </option>\n </select>\n <p class="help">${this.strings["Which cells should be displayed as headers?"]}</p>\n </div>\n <div class="w-field__wrapper" data-field-wrapper>\n <label class="w-field__label" for="${n}-handsontable-col-caption">${this.strings["Table caption"]}</label>\n <div class="w-field w-field--char_field w-field--text_input" data-field>\n <div class="w-field__help" id="${n}-handsontable-col-caption-helptext" data-field-help>\n <div class="help">${this.strings["A heading that identifies the overall topic of the table, and is useful for screen reader users."]}</div>\n </div>\n <div class="w-field__input" data-field-input>\n <input type="text" id="${n}-handsontable-col-caption" name="handsontable-col-caption" aria-describedby="${n}-handsontable-col-caption-helptext" />\n </div>\n </div>\n </div>\n <div id="${n}-handsontable-container"></div>\n <input type="hidden" name="${t}" id="${n}" placeholder="${this.strings.Table}">\n `,l()((()=>{const e=document.getElementById(`${n}-handsontable-container`);l()(e).find("td, th").attr(o)})),e.replaceWith(i);const s=i.querySelector(`input[name="${t}"]`),d=this.options,c={getValue:()=>JSON.parse(s.value),getState:()=>JSON.parse(s.value),setState(e){s.value=JSON.stringify(e),r(n,d)},focus(){}};return c.setState(a),c}})},1669:e=>{e.exports=jQuery}},n={};function a(e){var l=n[e];if(void 0!==l)return l.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,a),i.exports}a.m=t,e=[],a.O=(t,n,l,i)=>{if(!n){var o=1/0;for(c=0;c<e.length;c++){for(var[n,l,i]=e[c],r=!0,s=0;s<n.length;s++)(!1&i||o>=i)&&Object.keys(a.O).every((e=>a.O[e](n[s])))?n.splice(s--,1):(r=!1,i<o&&(o=i));if(r){e.splice(c--,1);var d=l();void 0!==d&&(t=d)}}return t}i=i||0;for(var c=e.length;c>0&&e[c-1][2]>i;c--)e[c]=e[c-1];e[c]=[n,l,i]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.j=853,(()=>{var e={853:0};a.O.j=t=>0===e[t];var t=(t,n)=>{var l,i,[o,r,s]=n,d=0;if(o.some((t=>0!==e[t]))){for(l in r)a.o(r,l)&&(a.m[l]=r[l]);if(s)var c=s(a)}for(t&&t(n);d<o.length;d++)i=o[d],a.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return a.O(c)},n=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();var l=a.O(void 0,[321],(()=>a(6865)));l=a.O(l)})();
1
+ (()=>{"use strict";var e,t={1669:e=>{e.exports=jQuery},6865:(e,t,n)=>{var a=n(1669),l=n.n(a),i=n(4188);const o={contenteditable:"true","plaintext-only":"true",tabindex:"0"};function r(e,t){const n=e+"-handsontable-container";var a=e+"-handsontable-header",r=e+"-handsontable-col-header",s=e+"-table-header-choice";const d=e+"-handsontable-col-caption",c=l()("#"+e);var h=l()("#"+a),p=l()("#"+r),f=l()("#"+s);const u=l()("#"+d),b={};let g=null,v=null,w=!1;const m=l()("#"+e).parent(),_=function(){let e=0;return m.find(".htCore").each(function(){e+=l()(this).height()}),e+m.find("[data-field]").first().height()},$=[`#${n}`,".wtHider",".wtHolder"],y=function(t){const n=l()("#"+e);l().each($,function(){n.closest("[data-field]").find(this).height(t)})};try{v=JSON.parse(c.val())}catch(e){}null!==v&&((0,i.$)(v,"table_caption")&&u.prop("value",v.table_caption),(0,i.$)(v,"table_header_choice")&&f.prop("value",v.table_header_choice)),(0,i.$)(t,"width")&&(0,i.$)(t,"height")||l()(window).on("resize",()=>{var e;g.updateSettings({width:l()(".w-field--table_input").closest(".w-panel").width(),height:_()}),e="100%",l().each($,function(){l()(this).width(e)}),l()(".w-field--table_input").width(e)});const C=function(){const e=[],t=[];g.getCellsMeta().forEach(t=>{let n,a;(0,i.$)(t,"className")&&(n=t.className),(0,i.$)(t,"hidden")&&(a=!0),(void 0!==n||a)&&e.push({row:t.row,col:t.col,className:n,hidden:a})}),g.getPlugin("mergeCells").isEnabled()&&g.getPlugin("mergeCells").mergedCellsCollection.mergedCells.forEach(e=>{t.push({row:e.row,col:e.col,rowspan:e.rowspan,colspan:e.colspan})}),c.val(JSON.stringify({data:g.getData(),cell:e,mergeCells:t,first_row_is_table_header:h.val(),first_col_is_header:p.val(),table_header_choice:f.val(),table_caption:u.val()}))},O=function(e,t){y(_()),C(),l()(()=>{l()(m).find("td, th").attr(o)})};f.on("change",()=>{C()}),u.on("change",()=>{C()});const S={afterChange:function(e,t){w&&"loadData"!==t&&"MergeCells"!==t&&C()},afterCreateCol:O,afterCreateRow:O,afterRemoveCol:O,afterRemoveRow:O,afterSetCellMeta:function(e,t,n,a){w&&"className"===n&&C()},afterMergeCells:function(e,t,n){w&&C()},afterUnmergeCells:function(e,t){w&&C()},afterInit:function(){w=!0}};null!==v&&((0,i.$)(v,"data")&&(S.data=v.data),(0,i.$)(v,"cell")&&(S.cell=v.cell)),Object.keys(S).forEach(e=>{b[e]=S[e]}),Object.keys(t).forEach(e=>{b[e]=t[e]}),(0,i.$)(b,"mergeCells")&&!0===b.mergeCells&&null!==v&&(0,i.$)(v,"mergeCells")&&(b.mergeCells=v.mergeCells),g=new Handsontable(document.getElementById(n),b),window.addEventListener("load",()=>{g.render(),y(_()),m.find("td, th").attr(o),window.dispatchEvent(new Event("resize"))})}window.initTable=r,window.telepath.register("wagtail.widgets.TableInput",class{constructor(e,t){this.options=e,this.strings=t}render(e,t,n,a){const i=document.createElement("div");i.innerHTML=`\n <div class="w-field__wrapper" data-field-wrapper>\n <label class="w-field__label" for="${n}-table-header-choice">${this.strings["Table headers"]}</label>\n <select id="${n}-table-header-choice" name="table-header-choice">\n <option value="">${this.strings["Select a header option"]}</option>\n <option value="row">\n ${this.strings["Display the first row as a header"]}\n </option>\n <option value="column">\n ${this.strings["Display the first column as a header"]}\n </option>\n <option value="both">\n ${this.strings["Display the first row AND first column as headers"]}\n </option>\n <option value="neither">\n ${this.strings["No headers"]}\n </option>\n </select>\n <p class="help">${this.strings["Which cells should be displayed as headers?"]}</p>\n </div>\n <div class="w-field__wrapper" data-field-wrapper>\n <label class="w-field__label" for="${n}-handsontable-col-caption">${this.strings["Table caption"]}</label>\n <div class="w-field w-field--char_field w-field--text_input" data-field>\n <div class="w-field__help" id="${n}-handsontable-col-caption-helptext" data-field-help>\n <div class="help">${this.strings["A heading that identifies the overall topic of the table, and is useful for screen reader users."]}</div>\n </div>\n <div class="w-field__input" data-field-input>\n <input type="text" id="${n}-handsontable-col-caption" name="handsontable-col-caption" aria-describedby="${n}-handsontable-col-caption-helptext" />\n </div>\n </div>\n </div>\n <div id="${n}-handsontable-container"></div>\n <input type="hidden" name="${t}" id="${n}" placeholder="${this.strings.Table}">\n `,l()(()=>{const e=document.getElementById(`${n}-handsontable-container`);l()(e).find("td, th").attr(o)}),e.replaceWith(i);const s=i.querySelector(`input[name="${t}"]`),d=this.options,c={getValue:()=>JSON.parse(s.value),getState:()=>JSON.parse(s.value),setState(e){s.value=JSON.stringify(e),r(n,d)},focus(){}};return c.setState(a),c}})}},n={};function a(e){var l=n[e];if(void 0!==l)return l.exports;var i=n[e]={exports:{}};return t[e](i,i.exports,a),i.exports}a.m=t,e=[],a.O=(t,n,l,i)=>{if(!n){var o=1/0;for(c=0;c<e.length;c++){for(var[n,l,i]=e[c],r=!0,s=0;s<n.length;s++)(!1&i||o>=i)&&Object.keys(a.O).every(e=>a.O[e](n[s]))?n.splice(s--,1):(r=!1,i<o&&(o=i));if(r){e.splice(c--,1);var d=l();void 0!==d&&(t=d)}}return t}i=i||0;for(var c=e.length;c>0&&e[c-1][2]>i;c--)e[c]=e[c-1];e[c]=[n,l,i]},a.n=e=>{var t=e&&e.__esModule?()=>e.default:()=>e;return a.d(t,{a:t}),t},a.d=(e,t)=>{for(var n in t)a.o(t,n)&&!a.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},a.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),a.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),a.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},a.j=853,(()=>{var e={853:0};a.O.j=t=>0===e[t];var t=(t,n)=>{var l,i,[o,r,s]=n,d=0;if(o.some(t=>0!==e[t])){for(l in r)a.o(r,l)&&(a.m[l]=r[l]);if(s)var c=s(a)}for(t&&t(n);d<o.length;d++)i=o[d],a.o(e,i)&&e[i]&&e[i][0](),e[i]=0;return a.O(c)},n=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];n.forEach(t.bind(null,0)),n.push=t.bind(null,n.push.bind(n))})();var l=a.O(void 0,[321],()=>a(6865));l=a.O(l)})();
@@ -8,7 +8,7 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2025-07-24 16:20+0200\n"
11
+ "POT-Creation-Date: 2025-10-23 16:45+0100\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -1 +1 @@
1
- (()=>{"use strict";var t,e={7595:(t,e,n)=>{var i=n(4327),o=n(9675),s=n(4545);class l{constructor(t,e,n,o,s){this.blockDef=t,this.type=t.name,this.caption="",this.columns=[],this.rows=[],this.columnCountIncludingDeleted=0,this.rowCountIncludingDeleted=0,this.prefix=n,this.childBlockDefsByName={},this.blockDef.childBlockDefs.forEach((t=>{this.childBlockDefsByName[t.name]=t}));const l=this.blockDef.meta.strings,a=`${(0,i.Z)(n)}-caption`,d=$(`\n <div class="typed-table-block ${(0,i.Z)(this.blockDef.meta.classname||"")}">\n <div class="w-field__wrapper" data-field-wrapper>\n <label class="w-field__label" for="${a}">\n ${l.CAPTION}\n </label>\n <div class="w-field w-field--char_field w-field--text_input" data-field>\n <div class="w-field__help" data-field-help>\n <div class="help">\n ${l.CAPTION_HELP_TEXT}\n </div>\n </div>\n <div class="w-field__input" data-field-input>\n <input type="text" id="${a}" name="${a}" value="" />\n <span></span>\n </div>\n </div>\n </div>\n <input type="hidden" name="${(0,i.Z)(n)}-column-count" data-column-count value="0">\n <input type="hidden" name="${(0,i.Z)(n)}-row-count" data-row-count value="0">\n <div data-deleted-fields></div>\n <div class="typed-table-block__wrapper">\n <table>\n <thead>\n <tr>\n <th aria-hidden="true"></th>\n <th class="control-cell">\n <button type="button" class="button button-small button-secondary append-column" aria-expanded="false" data-append-column>\n ${(0,i.Z)(l.ADD_COLUMN)}\n </button>\n </th>\n </tr>\n </thead>\n <tbody>\n </tbody>\n <tfoot>\n <tr>\n <td class="control-cell">\n <button\n type="button"\n class="button button-small button-secondary button--icon text-replace prepend-row"\n data-add-row\n aria-label="${(0,i.Z)(l.ADD_ROW)}"\n title="${(0,i.Z)(l.ADD_ROW)}"\n >\n <svg class="icon icon-plus icon" aria-hidden="true">\n <use href="#icon-plus"></use>\n </svg>\n </button></td>\n </tr>\n </tfoot>\n </table>\n </div>\n </div>\n `);$(e).replaceWith(d),this.container=d,this.captionInput=d.find(`#${a}`).get(0),this.thead=d.find("table > thead").get(0),this.tbody=d.find("table > tbody").get(0),this.columnCountInput=d.find("input[data-column-count]").get(0),this.rowCountInput=d.find("input[data-row-count]").get(0),this.deletedFieldsContainer=d.find("[data-deleted-fields]").get(0),this.appendColumnButton=d.find("button[data-append-column]"),this.addRowButton=d.find("button[data-add-row]"),this.addRowButton.hide(),this.blockDef.meta.helpText&&d.append(`\n <div class="c-sf-help">\n <div class="help">\n ${this.blockDef.meta.helpText}\n </div>\n </div>\n `),this.addColumnCallback=null,this.addColumnMenu=$('<ul class="add-column-menu"></ul>'),this.blockDef.childBlockDefs.forEach((t=>{const e=$('<button type="button" class="button button-small"></button>').text(t.meta.label);e.on("click",(()=>{this.addColumnCallback&&this.addColumnCallback(t),this.hideAddColumnMenu(this.addColumnMenuTrigger)}));const n=$("<li></li>").append(e);this.addColumnMenu.append(n)})),this.addColumnMenuTrigger=null,this.appendColumnButton.on("click",(()=>{this.toggleAddColumnMenu(this.appendColumnButton,(t=>{this.insertColumn(this.columns.length,t,{addInitialRow:!0})}))})),this.addRowButton.on("click",(()=>{this.insertRow(this.rows.length)})),this.setState(o),s&&this.setError(s)}showAddColumnMenu(t,e){this.addColumnMenuTrigger?.attr("aria-expanded","false"),this.addColumnMenuTrigger=t,t.after(this.addColumnMenu),t.attr("aria-expanded","true"),this.addColumnMenu.show(),this.addColumnCallback=e}hideAddColumnMenu(t){t.attr("aria-expanded","false"),this.addColumnMenu.hide(),this.addColumnMenuTrigger=null}toggleAddColumnMenu(t,e){this.addColumnMenuTrigger===t?this.hideAddColumnMenu(t):this.showAddColumnMenu(t,e)}clear(){this.setCaption(""),this.columns=[],this.rows=[],this.columnCountIncludingDeleted=0,this.columnCountInput.value=0,this.rowCountIncludingDeleted=0,this.rowCountInput.value=0,this.deletedFieldsContainer.replaceChildren();const t=this.thead.children[0];t.replaceChildren(t.firstElementChild,t.lastElementChild),this.appendColumnButton.text(this.blockDef.meta.strings.ADD_COLUMN).removeClass("button--icon text-replace white").removeAttr("aria-label").removeAttr("title"),this.tbody.replaceChildren(),this.addRowButton.hide()}setCaption(t){this.caption=t,this.captionInput.value=t}insertColumn(t,e,n){const s={blockDef:e,position:t,id:this.columnCountIncludingDeleted};this.columnCountIncludingDeleted+=1,(0,o.y)(t,this.columns.length).forEach((t=>{this.columns[t].position+=1,this.columns[t].positionInput.value=this.columns[t].position})),this.columns.splice(t,0,s),this.columnCountInput.value=this.columnCountIncludingDeleted;const l=this.thead.children[0],a=l.children,d=document.createElement("th");l.insertBefore(d,a[t+1]),s.typeInput=document.createElement("input"),s.typeInput.type="hidden",s.typeInput.name=this.prefix+"-column-"+s.id+"-type",s.typeInput.value=e.name,d.appendChild(s.typeInput),s.positionInput=document.createElement("input"),s.positionInput.type="hidden",s.positionInput.name=this.prefix+"-column-"+s.id+"-order",s.positionInput.value=t,d.appendChild(s.positionInput),s.deletedInput=document.createElement("input"),s.deletedInput.type="hidden",s.deletedInput.name=this.prefix+"-column-"+s.id+"-deleted",s.deletedInput.value="",this.deletedFieldsContainer.appendChild(s.deletedInput);const u=$(`<button type="button"\n class="button button-secondary button-small button--icon text-replace prepend-column"\n aria-label="${(0,i.Z)(this.blockDef.meta.strings.INSERT_COLUMN)}"\n aria-expanded="false"\n title="${(0,i.Z)(this.blockDef.meta.strings.INSERT_COLUMN)}">\n <svg class="icon icon-plus icon" aria-hidden="true"><use href="#icon-plus"></use></svg>\n </button>`);$(d).append(u),u.on("click",(()=>{this.toggleAddColumnMenu(u,(t=>{this.insertColumn(s.position,t,{addInitialRow:!0})}))})),s.headingInput=document.createElement("input"),s.headingInput.type="text",s.headingInput.name=this.prefix+"-column-"+s.id+"-heading",s.headingInput.className="column-heading",s.headingInput.placeholder=this.blockDef.meta.strings.COLUMN_HEADING,d.appendChild(s.headingInput);const c=$(`<button type="button"\n class="button button-secondary button-small button--icon text-replace no delete-column"\n aria-label="${(0,i.Z)(this.blockDef.meta.strings.DELETE_COLUMN)}"\n title="${(0,i.Z)(this.blockDef.meta.strings.DELETE_COLUMN)}">\n <svg class="icon icon-bin icon" aria-hidden="true"><use href="#icon-bin"></use></svg>\n </button>`);$(d).append(c),c.on("click",(()=>{this.deleteColumn(s.position)}));const r=this.blockDef.childBlockDefaultStates[e.name];return Array.from(this.tbody.children).forEach(((e,n)=>{const i=this.rows[n],o=e.children,l=document.createElement("td");e.insertBefore(l,o[t+1]);const a=this.initCell(l,s,i,r);i.blocks.splice(t,0,a)})),this.addRowButton.show(),this.appendColumnButton.html('<svg class="icon icon-plus icon" aria-hidden="true"><use href="#icon-plus"></use></svg>').addClass("button--icon text-replace white").attr("aria-label",this.blockDef.meta.strings.ADD_COLUMN).attr("aria-expanded","false").attr("title",this.blockDef.meta.strings.ADD_COLUMN),n&&n.addInitialRow&&0===this.tbody.children.length&&this.insertRow(0),s}deleteColumn(t){this.columns[t].deletedInput.value="1";const e=this.thead.children[0],n=e.children;e.removeChild(n[t+1]),Array.from(this.tbody.children).forEach(((e,n)=>{const i=e.children;e.removeChild(i[t+1]),this.rows[n].blocks.splice(t,1)})),this.columns.splice(t,1),(0,o.y)(t,this.columns.length).forEach((t=>{this.columns[t].position-=1,this.columns[t].positionInput.value=this.columns[t].position})),0===this.columns.length&&this.clear()}insertRow(t,e){const n=document.createElement("tr"),s={blocks:[],position:t,id:this.rowCountIncludingDeleted};if(t<this.rows.length){const e=this.tbody.children[t];this.tbody.insertBefore(n,e)}else this.tbody.appendChild(n);this.rows.splice(t,0,s),this.rowCountIncludingDeleted+=1,this.rowCountInput.value=this.rowCountIncludingDeleted;const l=document.createElement("td");l.className="control-cell",n.appendChild(l);const a=$(`<button type="button"\n class="button button-secondary button-small button--icon text-replace prepend-row"\n aria-label="${(0,i.Z)(this.blockDef.meta.strings.INSERT_ROW)}"\n title="${(0,i.Z)(this.blockDef.meta.strings.INSERT_ROW)}">\n <svg class="icon icon-plus icon" aria-hidden="true"><use href="#icon-plus"></use></svg>\n </button>`);$(l).append(a),a.on("click",(()=>{this.insertRow(s.position)})),this.columns.forEach(((t,i)=>{let o;o=e?e[i]:this.blockDef.childBlockDefaultStates[t.blockDef.name];const l=document.createElement("td");n.appendChild(l),s.blocks[i]=this.initCell(l,t,s,o)}));const d=document.createElement("td");d.className="control-cell",n.appendChild(d),s.positionInput=document.createElement("input"),s.positionInput.type="hidden",s.positionInput.name=this.prefix+"-row-"+s.id+"-order",s.positionInput.value=s.position,d.appendChild(s.positionInput);const u=$(`<button type="button"\n class="button button-secondary button-small button--icon text-replace no delete-row"\n aria-label="${(0,i.Z)(this.blockDef.meta.strings.DELETE_ROW)}"\n title="${(0,i.Z)(this.blockDef.meta.strings.DELETE_ROW)}">\n <svg class="icon icon-bin icon" aria-hidden="true"><use href="#icon-bin"></use></svg>\n </button>`);return $(d).append(u),u.on("click",(()=>{this.deleteRow(s.position)})),s.deletedInput=document.createElement("input"),s.deletedInput.type="hidden",s.deletedInput.name=this.prefix+"-row-"+s.id+"-deleted",s.deletedInput.value="",this.deletedFieldsContainer.appendChild(s.deletedInput),(0,o.y)(t+1,this.rows.length).forEach((t=>{this.rows[t].position+=1,this.rows[t].positionInput.value=this.rows[t].position})),s}deleteRow(t){this.rows[t].deletedInput.value="1";const e=this.tbody.children[t];this.tbody.removeChild(e),this.rows.splice(t,1),(0,o.y)(t,this.rows.length).forEach((t=>{this.rows[t].position-=1,this.rows[t].positionInput.value=this.rows[t].position}))}initCell(t,e,n,i){const o=document.createElement("div");t.appendChild(o);const s=this.prefix+"-cell-"+n.id+"-"+e.id;return e.blockDef.render(o,s,i,null)}setState(t){this.clear(),t&&(t.columns.forEach(((t,e)=>{const n=this.childBlockDefsByName[t.type];this.insertColumn(e,n).headingInput.value=t.heading})),t.rows.forEach(((t,e)=>{this.insertRow(e,t.values)})),this.setCaption(t.caption))}setError(t){if(!t)return;const e=this.container[0];if((0,s.$)(e),t.messages&&(0,s.U)(e,t.messages),t.blockErrors)for(const[e,n]of Object.entries(t.blockErrors))for(const[t,i]of Object.entries(n))this.rows[e].blocks[t].setError(i)}getState(){return{columns:this.getColumnStates(),rows:this.rows.map((t=>({values:t.blocks.map((t=>t.getState()))}))),caption:this.caption}}getDuplicatedState(){return{columns:this.getColumnStates(),rows:this.rows.map((t=>({values:t.blocks.map((t=>void 0===t.getDuplicatedState?t.getState():t.getDuplicatedState()))})))}}getValue(){return{columns:this.getColumnStates(),rows:this.rows.map((t=>({values:t.blocks.map((t=>t.getValue()))}))),caption:this.caption}}getColumnStates(){return this.columns.map((t=>({type:t.blockDef.name,heading:t.headingInput.value})))}getTextLabel(t){const e=t&&t.maxLength;let n="";for(const t of this.rows)for(const i of t.blocks)if(i.getTextLabel){const t=i.getTextLabel({maxLength:e});if(t)if(n){const i=n+", "+t;if(e&&i.length>e-1)return n.endsWith("…")||(n+="…"),n;n=i}else n=t}return n}focus(t){this.columns.length?this.rows.length?this.rows[0].blocks[0].focus(t):this.addRowButton.focus():this.appendColumnButton.focus()}}window.telepath.register("wagtail.contrib.typed_table_block.blocks.TypedTableBlock",class{constructor(t,e,n,i){this.name=t,this.childBlockDefs=e,this.childBlockDefaultStates=n,this.meta=i}render(t,e,n,i){return new l(this,t,e,n,i)}})}},n={};function i(t){var o=n[t];if(void 0!==o)return o.exports;var s=n[t]={exports:{}};return e[t](s,s.exports,i),s.exports}i.m=e,t=[],i.O=(e,n,o,s)=>{if(!n){var l=1/0;for(c=0;c<t.length;c++){for(var[n,o,s]=t[c],a=!0,d=0;d<n.length;d++)(!1&s||l>=s)&&Object.keys(i.O).every((t=>i.O[t](n[d])))?n.splice(d--,1):(a=!1,s<l&&(l=s));if(a){t.splice(c--,1);var u=o();void 0!==u&&(e=u)}}return e}s=s||0;for(var c=t.length;c>0&&t[c-1][2]>s;c--)t[c]=t[c-1];t[c]=[n,o,s]},i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.j=702,(()=>{var t={702:0};i.O.j=e=>0===t[e];var e=(e,n)=>{var o,s,[l,a,d]=n,u=0;if(l.some((e=>0!==t[e]))){for(o in a)i.o(a,o)&&(i.m[o]=a[o]);if(d)var c=d(i)}for(e&&e(n);u<l.length;u++)s=l[u],i.o(t,s)&&t[s]&&t[s][0](),t[s]=0;return i.O(c)},n=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})();var o=i.O(void 0,[321],(()=>i(7595)));o=i.O(o)})();
1
+ (()=>{"use strict";var t,e={7595:(t,e,n)=>{var i=n(4327),o=n(9675),s=n(4545);class l{constructor(t,e,n,o,s){this.blockDef=t,this.type=t.name,this.caption="",this.columns=[],this.rows=[],this.columnCountIncludingDeleted=0,this.rowCountIncludingDeleted=0,this.prefix=n,this.childBlockDefsByName={},this.blockDef.childBlockDefs.forEach(t=>{this.childBlockDefsByName[t.name]=t});const l=this.blockDef.meta.strings,a=`${(0,i.Z)(n)}-caption`,d=$(`\n <div class="typed-table-block ${(0,i.Z)(this.blockDef.meta.classname||"")}">\n <div class="w-field__wrapper" data-field-wrapper>\n <label class="w-field__label" for="${a}">\n ${l.CAPTION}\n </label>\n <div class="w-field w-field--char_field w-field--text_input" data-field>\n <div class="w-field__help" data-field-help>\n <div class="help">\n ${l.CAPTION_HELP_TEXT}\n </div>\n </div>\n <div class="w-field__input" data-field-input>\n <input type="text" id="${a}" name="${a}" value="" />\n <span></span>\n </div>\n </div>\n </div>\n <input type="hidden" name="${(0,i.Z)(n)}-column-count" data-column-count value="0">\n <input type="hidden" name="${(0,i.Z)(n)}-row-count" data-row-count value="0">\n <div data-deleted-fields></div>\n <div class="typed-table-block__wrapper">\n <table>\n <thead>\n <tr>\n <th aria-hidden="true"></th>\n <th class="control-cell">\n <button type="button" class="button button-small button-secondary append-column" aria-expanded="false" data-append-column>\n ${(0,i.Z)(l.ADD_COLUMN)}\n </button>\n </th>\n </tr>\n </thead>\n <tbody>\n </tbody>\n <tfoot>\n <tr>\n <td class="control-cell">\n <button\n type="button"\n class="button button-small button-secondary button--icon text-replace prepend-row"\n data-add-row\n aria-label="${(0,i.Z)(l.ADD_ROW)}"\n title="${(0,i.Z)(l.ADD_ROW)}"\n >\n <svg class="icon icon-plus icon" aria-hidden="true">\n <use href="#icon-plus"></use>\n </svg>\n </button></td>\n </tr>\n </tfoot>\n </table>\n </div>\n </div>\n `);$(e).replaceWith(d),this.container=d,this.captionInput=d.find(`#${a}`).get(0),this.thead=d.find("table > thead").get(0),this.tbody=d.find("table > tbody").get(0),this.columnCountInput=d.find("input[data-column-count]").get(0),this.rowCountInput=d.find("input[data-row-count]").get(0),this.deletedFieldsContainer=d.find("[data-deleted-fields]").get(0),this.appendColumnButton=d.find("button[data-append-column]"),this.addRowButton=d.find("button[data-add-row]"),this.addRowButton.hide(),this.blockDef.meta.helpText&&d.append(`\n <div class="c-sf-help">\n <div class="help">\n ${this.blockDef.meta.helpText}\n </div>\n </div>\n `),this.addColumnCallback=null,this.addColumnMenu=$('<ul class="add-column-menu"></ul>'),this.blockDef.childBlockDefs.forEach(t=>{const e=$('<button type="button" class="button button-small"></button>').text(t.meta.label);e.on("click",()=>{this.addColumnCallback&&this.addColumnCallback(t),this.hideAddColumnMenu(this.addColumnMenuTrigger)});const n=$("<li></li>").append(e);this.addColumnMenu.append(n)}),this.addColumnMenuTrigger=null,this.appendColumnButton.on("click",()=>{this.toggleAddColumnMenu(this.appendColumnButton,t=>{this.insertColumn(this.columns.length,t,{addInitialRow:!0})})}),this.addRowButton.on("click",()=>{this.insertRow(this.rows.length)}),this.setState(o),s&&this.setError(s)}showAddColumnMenu(t,e){this.addColumnMenuTrigger?.attr("aria-expanded","false"),this.addColumnMenuTrigger=t,t.after(this.addColumnMenu),t.attr("aria-expanded","true"),this.addColumnMenu.show(),this.addColumnCallback=e}hideAddColumnMenu(t){t.attr("aria-expanded","false"),this.addColumnMenu.hide(),this.addColumnMenuTrigger=null}toggleAddColumnMenu(t,e){this.addColumnMenuTrigger===t?this.hideAddColumnMenu(t):this.showAddColumnMenu(t,e)}clear(){this.setCaption(""),this.columns=[],this.rows=[],this.columnCountIncludingDeleted=0,this.columnCountInput.value=0,this.rowCountIncludingDeleted=0,this.rowCountInput.value=0,this.deletedFieldsContainer.replaceChildren();const t=this.thead.children[0];t.replaceChildren(t.firstElementChild,t.lastElementChild),this.appendColumnButton.text(this.blockDef.meta.strings.ADD_COLUMN).removeClass("button--icon text-replace white").removeAttr("aria-label").removeAttr("title"),this.tbody.replaceChildren(),this.addRowButton.hide()}setCaption(t){this.caption=t,this.captionInput.value=t}insertColumn(t,e,n){const s={blockDef:e,position:t,id:this.columnCountIncludingDeleted};this.columnCountIncludingDeleted+=1,(0,o.y)(t,this.columns.length).forEach(t=>{this.columns[t].position+=1,this.columns[t].positionInput.value=this.columns[t].position}),this.columns.splice(t,0,s),this.columnCountInput.value=this.columnCountIncludingDeleted;const l=this.thead.children[0],a=l.children,d=document.createElement("th");l.insertBefore(d,a[t+1]),s.typeInput=document.createElement("input"),s.typeInput.type="hidden",s.typeInput.name=this.prefix+"-column-"+s.id+"-type",s.typeInput.value=e.name,d.appendChild(s.typeInput),s.positionInput=document.createElement("input"),s.positionInput.type="hidden",s.positionInput.name=this.prefix+"-column-"+s.id+"-order",s.positionInput.value=t,d.appendChild(s.positionInput),s.deletedInput=document.createElement("input"),s.deletedInput.type="hidden",s.deletedInput.name=this.prefix+"-column-"+s.id+"-deleted",s.deletedInput.value="",this.deletedFieldsContainer.appendChild(s.deletedInput);const u=$(`<button type="button"\n class="button button-secondary button-small button--icon text-replace prepend-column"\n aria-label="${(0,i.Z)(this.blockDef.meta.strings.INSERT_COLUMN)}"\n aria-expanded="false"\n title="${(0,i.Z)(this.blockDef.meta.strings.INSERT_COLUMN)}">\n <svg class="icon icon-plus icon" aria-hidden="true"><use href="#icon-plus"></use></svg>\n </button>`);$(d).append(u),u.on("click",()=>{this.toggleAddColumnMenu(u,t=>{this.insertColumn(s.position,t,{addInitialRow:!0})})}),s.headingInput=document.createElement("input"),s.headingInput.type="text",s.headingInput.name=this.prefix+"-column-"+s.id+"-heading",s.headingInput.className="column-heading",s.headingInput.placeholder=this.blockDef.meta.strings.COLUMN_HEADING,d.appendChild(s.headingInput);const c=$(`<button type="button"\n class="button button-secondary button-small button--icon text-replace no delete-column"\n aria-label="${(0,i.Z)(this.blockDef.meta.strings.DELETE_COLUMN)}"\n title="${(0,i.Z)(this.blockDef.meta.strings.DELETE_COLUMN)}">\n <svg class="icon icon-bin icon" aria-hidden="true"><use href="#icon-bin"></use></svg>\n </button>`);$(d).append(c),c.on("click",()=>{this.deleteColumn(s.position)});const r=this.blockDef.childBlockDefaultStates[e.name];return Array.from(this.tbody.children).forEach((e,n)=>{const i=this.rows[n],o=e.children,l=document.createElement("td");e.insertBefore(l,o[t+1]);const a=this.initCell(l,s,i,r);i.blocks.splice(t,0,a)}),this.addRowButton.show(),this.appendColumnButton.html('<svg class="icon icon-plus icon" aria-hidden="true"><use href="#icon-plus"></use></svg>').addClass("button--icon text-replace white").attr("aria-label",this.blockDef.meta.strings.ADD_COLUMN).attr("aria-expanded","false").attr("title",this.blockDef.meta.strings.ADD_COLUMN),n&&n.addInitialRow&&0===this.tbody.children.length&&this.insertRow(0),s}deleteColumn(t){this.columns[t].deletedInput.value="1";const e=this.thead.children[0],n=e.children;e.removeChild(n[t+1]),Array.from(this.tbody.children).forEach((e,n)=>{const i=e.children;e.removeChild(i[t+1]),this.rows[n].blocks.splice(t,1)}),this.columns.splice(t,1),(0,o.y)(t,this.columns.length).forEach(t=>{this.columns[t].position-=1,this.columns[t].positionInput.value=this.columns[t].position}),0===this.columns.length&&this.clear()}insertRow(t,e){const n=document.createElement("tr"),s={blocks:[],position:t,id:this.rowCountIncludingDeleted};if(t<this.rows.length){const e=this.tbody.children[t];this.tbody.insertBefore(n,e)}else this.tbody.appendChild(n);this.rows.splice(t,0,s),this.rowCountIncludingDeleted+=1,this.rowCountInput.value=this.rowCountIncludingDeleted;const l=document.createElement("td");l.className="control-cell",n.appendChild(l);const a=$(`<button type="button"\n class="button button-secondary button-small button--icon text-replace prepend-row"\n aria-label="${(0,i.Z)(this.blockDef.meta.strings.INSERT_ROW)}"\n title="${(0,i.Z)(this.blockDef.meta.strings.INSERT_ROW)}">\n <svg class="icon icon-plus icon" aria-hidden="true"><use href="#icon-plus"></use></svg>\n </button>`);$(l).append(a),a.on("click",()=>{this.insertRow(s.position)}),this.columns.forEach((t,i)=>{let o;o=e?e[i]:this.blockDef.childBlockDefaultStates[t.blockDef.name];const l=document.createElement("td");n.appendChild(l),s.blocks[i]=this.initCell(l,t,s,o)});const d=document.createElement("td");d.className="control-cell",n.appendChild(d),s.positionInput=document.createElement("input"),s.positionInput.type="hidden",s.positionInput.name=this.prefix+"-row-"+s.id+"-order",s.positionInput.value=s.position,d.appendChild(s.positionInput);const u=$(`<button type="button"\n class="button button-secondary button-small button--icon text-replace no delete-row"\n aria-label="${(0,i.Z)(this.blockDef.meta.strings.DELETE_ROW)}"\n title="${(0,i.Z)(this.blockDef.meta.strings.DELETE_ROW)}">\n <svg class="icon icon-bin icon" aria-hidden="true"><use href="#icon-bin"></use></svg>\n </button>`);return $(d).append(u),u.on("click",()=>{this.deleteRow(s.position)}),s.deletedInput=document.createElement("input"),s.deletedInput.type="hidden",s.deletedInput.name=this.prefix+"-row-"+s.id+"-deleted",s.deletedInput.value="",this.deletedFieldsContainer.appendChild(s.deletedInput),(0,o.y)(t+1,this.rows.length).forEach(t=>{this.rows[t].position+=1,this.rows[t].positionInput.value=this.rows[t].position}),s}deleteRow(t){this.rows[t].deletedInput.value="1";const e=this.tbody.children[t];this.tbody.removeChild(e),this.rows.splice(t,1),(0,o.y)(t,this.rows.length).forEach(t=>{this.rows[t].position-=1,this.rows[t].positionInput.value=this.rows[t].position})}initCell(t,e,n,i){const o=document.createElement("div");t.appendChild(o);const s=this.prefix+"-cell-"+n.id+"-"+e.id;return e.blockDef.render(o,s,i,null)}setState(t){this.clear(),t&&(t.columns.forEach((t,e)=>{const n=this.childBlockDefsByName[t.type];this.insertColumn(e,n).headingInput.value=t.heading}),t.rows.forEach((t,e)=>{this.insertRow(e,t.values)}),this.setCaption(t.caption))}setError(t){if(!t)return;const e=this.container[0];if((0,s.$)(e),t.messages&&(0,s.U)(e,t.messages),t.blockErrors)for(const[e,n]of Object.entries(t.blockErrors))for(const[t,i]of Object.entries(n))this.rows[e].blocks[t].setError(i)}getState(){return{columns:this.getColumnStates(),rows:this.rows.map(t=>({values:t.blocks.map(t=>t.getState())})),caption:this.caption}}getDuplicatedState(){return{columns:this.getColumnStates(),rows:this.rows.map(t=>({values:t.blocks.map(t=>void 0===t.getDuplicatedState?t.getState():t.getDuplicatedState())}))}}getValue(){return{columns:this.getColumnStates(),rows:this.rows.map(t=>({values:t.blocks.map(t=>t.getValue())})),caption:this.caption}}getColumnStates(){return this.columns.map(t=>({type:t.blockDef.name,heading:t.headingInput.value}))}getTextLabel(t){const e=t&&t.maxLength;let n="";for(const t of this.rows)for(const i of t.blocks)if(i.getTextLabel){const t=i.getTextLabel({maxLength:e});if(t)if(n){const i=n+", "+t;if(e&&i.length>e-1)return n.endsWith("…")||(n+="…"),n;n=i}else n=t}return n}focus(t){this.columns.length?this.rows.length?this.rows[0].blocks[0].focus(t):this.addRowButton.focus():this.appendColumnButton.focus()}}window.telepath.register("wagtail.contrib.typed_table_block.blocks.TypedTableBlock",class{constructor(t,e,n,i){this.name=t,this.childBlockDefs=e,this.childBlockDefaultStates=n,this.meta=i}render(t,e,n,i){return new l(this,t,e,n,i)}})}},n={};function i(t){var o=n[t];if(void 0!==o)return o.exports;var s=n[t]={exports:{}};return e[t](s,s.exports,i),s.exports}i.m=e,t=[],i.O=(e,n,o,s)=>{if(!n){var l=1/0;for(c=0;c<t.length;c++){for(var[n,o,s]=t[c],a=!0,d=0;d<n.length;d++)(!1&s||l>=s)&&Object.keys(i.O).every(t=>i.O[t](n[d]))?n.splice(d--,1):(a=!1,s<l&&(l=s));if(a){t.splice(c--,1);var u=o();void 0!==u&&(e=u)}}return e}s=s||0;for(var c=t.length;c>0&&t[c-1][2]>s;c--)t[c]=t[c-1];t[c]=[n,o,s]},i.n=t=>{var e=t&&t.__esModule?()=>t.default:()=>t;return i.d(e,{a:e}),e},i.d=(t,e)=>{for(var n in e)i.o(e,n)&&!i.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:e[n]})},i.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),i.o=(t,e)=>Object.prototype.hasOwnProperty.call(t,e),i.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},i.j=702,(()=>{var t={702:0};i.O.j=e=>0===t[e];var e=(e,n)=>{var o,s,[l,a,d]=n,u=0;if(l.some(e=>0!==t[e])){for(o in a)i.o(a,o)&&(i.m[o]=a[o]);if(d)var c=d(i)}for(e&&e(n);u<l.length;u++)s=l[u],i.o(t,s)&&t[s]&&t[s][0](),t[s]=0;return i.O(c)},n=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];n.forEach(e.bind(null,0)),n.push=e.bind(null,n.push.bind(n))})();var o=i.O(void 0,[321],()=>i(7595));o=i.O(o)})();
wagtail/coreutils.py CHANGED
@@ -5,7 +5,7 @@ import re
5
5
  import unicodedata
6
6
  from collections.abc import Iterable
7
7
  from hashlib import md5
8
- from typing import TYPE_CHECKING, Any, List, Optional, Union
8
+ from typing import TYPE_CHECKING, Any
9
9
 
10
10
  from anyascii import anyascii
11
11
  from django.apps import apps
@@ -527,7 +527,7 @@ class BatchCreator(BatchProcessor):
527
527
  if self.max_size and len(self.items) == self.max_size:
528
528
  self.process()
529
529
 
530
- def extend(self, iterable: Iterable[Union[Model, dict[str, Any]]]) -> None:
530
+ def extend(self, iterable: Iterable[Model | dict[str, Any]]) -> None:
531
531
  for value in iterable:
532
532
  if isinstance(value, self.model):
533
533
  self.add(instance=value)
@@ -563,9 +563,9 @@ def make_wagtail_template_fragment_key(fragment_name, page, site, vary_on=None):
563
563
 
564
564
 
565
565
  def get_js_regex(
566
- regex: Optional[Union[re.Pattern, str, bytes]] = None,
567
- base_js_flags: Optional[str] = "gu",
568
- ) -> List[str]:
566
+ regex: re.Pattern | str | bytes | None = None,
567
+ base_js_flags: str | None = "gu",
568
+ ) -> list[str]:
569
569
  """
570
570
  Converts a Python regex (or pattern string) to an array of
571
571
  JavaScript regex params list, that can be used for ``new RegExp(..._)``.
@@ -38,6 +38,12 @@ class BaseDocumentForm(BaseCollectionMemberForm):
38
38
  def __init__(self, *args, **kwargs):
39
39
  super().__init__(*args, **kwargs)
40
40
  self.original_file = self.instance.file
41
+ # Dynamically set sync value target to the id of the file input rather
42
+ # than hardcoding it
43
+ if "title" in self.fields and "file" in self.fields:
44
+ self.fields["file"].widget.attrs["data-w-sync-target-value"] = (
45
+ f"#{self['title'].id_for_label}"
46
+ )
41
47
 
42
48
  def save(self, commit=True):
43
49
  if "file" in self.changed_data:
@@ -60,7 +66,18 @@ class BaseDocumentForm(BaseCollectionMemberForm):
60
66
  return self.instance
61
67
 
62
68
  class Meta:
63
- widgets = {"tags": AdminTagWidget, "file": forms.FileInput()}
69
+ widgets = {
70
+ "tags": AdminTagWidget,
71
+ "file": forms.FileInput(
72
+ attrs={
73
+ "data-controller": "w-sync",
74
+ "data-action": "change->w-sync#apply",
75
+ "data-w-sync-bubbles-param": "true",
76
+ "data-w-sync-name-value": "wagtail:documents-upload",
77
+ "data-w-sync-normalize-value": "true",
78
+ }
79
+ ),
80
+ }
64
81
 
65
82
  def clean_tags(self):
66
83
  tags = self.cleaned_data["tags"]
@@ -8,7 +8,7 @@ msgid ""
8
8
  msgstr ""
9
9
  "Project-Id-Version: PACKAGE VERSION\n"
10
10
  "Report-Msgid-Bugs-To: \n"
11
- "POT-Creation-Date: 2025-07-24 16:20+0200\n"
11
+ "POT-Creation-Date: 2025-10-23 16:45+0100\n"
12
12
  "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
13
  "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
14
  "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -27,27 +27,27 @@ msgstr ""
27
27
  msgid "Collection"
28
28
  msgstr ""
29
29
 
30
- #: forms.py:144
30
+ #: forms.py:161
31
31
  msgid "Add"
32
32
  msgstr ""
33
33
 
34
- #: forms.py:144
34
+ #: forms.py:161
35
35
  msgid "Add/edit documents you own"
36
36
  msgstr ""
37
37
 
38
- #: forms.py:145
38
+ #: forms.py:162
39
39
  msgid "Edit"
40
40
  msgstr ""
41
41
 
42
- #: forms.py:145
42
+ #: forms.py:162
43
43
  msgid "Edit any document"
44
44
  msgstr ""
45
45
 
46
- #: forms.py:146
46
+ #: forms.py:163
47
47
  msgid "Choose"
48
48
  msgstr ""
49
49
 
50
- #: forms.py:146
50
+ #: forms.py:163
51
51
  msgid "Select documents in choosers"
52
52
  msgstr ""
53
53
 
@@ -203,11 +203,11 @@ msgstr ""
203
203
  msgid "Add a document"
204
204
  msgstr ""
205
205
 
206
- #: templates/wagtaildocs/documents/add.html:45 views/chooser.py:187
206
+ #: templates/wagtaildocs/documents/add.html:11 views/chooser.py:187
207
207
  msgid "Uploading…"
208
208
  msgstr ""
209
209
 
210
- #: templates/wagtaildocs/documents/add.html:48 views/chooser.py:186
210
+ #: templates/wagtaildocs/documents/add.html:14 views/chooser.py:186
211
211
  msgid "Upload"
212
212
  msgstr ""
213
213
 
@@ -403,7 +403,7 @@ msgstr ""
403
403
 
404
404
  #: views/documents.py:259
405
405
  msgid ""
406
- "The file could not be found. Please change the source or delete the document"
406
+ "The file could not be found. Please change the source or delete the document."
407
407
  msgstr ""
408
408
 
409
409
  #: views/documents.py:283
@@ -165,6 +165,15 @@ msgstr "Je hebt nog geen documenten aan deze collectie toegevoegd."
165
165
  msgid "You haven't uploaded any documents."
166
166
  msgstr "Je hebt nog geen documenten geüpload."
167
167
 
168
+ msgid ""
169
+ "Why not <a class=\"upload-one-now\" href=\"#tab-upload\" data-action=\"w-"
170
+ "tabs#select:prevent\" data-w-tabs-target=\"trigger\" data-w-tabs-focus-"
171
+ "param=\"true\">upload one now</a>?"
172
+ msgstr ""
173
+ "Waarom <a class=\"upload-one-now\" href=\"#tab-upload\" data-action=\"w-"
174
+ "tabs#select:prevent\" data-w-tabs-target=\"trigger\" data-w-tabs-focus-"
175
+ "param=\"true\">upload je er niet eentje</a>?"
176
+
168
177
  msgid "Change document:"
169
178
  msgstr "Wijzig document:"
170
179
 
@@ -200,6 +200,15 @@ msgstr "Вы не загрузили документы в эту коллекц
200
200
  msgid "You haven't uploaded any documents."
201
201
  msgstr "Вы не загрузили каких-либо документов."
202
202
 
203
+ msgid ""
204
+ "Why not <a class=\"upload-one-now\" href=\"#tab-upload\" data-action=\"w-"
205
+ "tabs#select:prevent\" data-w-tabs-target=\"trigger\" data-w-tabs-focus-"
206
+ "param=\"true\">upload one now</a>?"
207
+ msgstr ""
208
+ "Почему бы не <a class=\"upload-one-now\" href=\"#tab-upload\" data-"
209
+ "action=\"w-tabs#select:prevent\" data-w-tabs-target=\"trigger\" data-w-tabs-"
210
+ "focus-param=\"true\">загрузить один сейчас</a>?"
211
+
203
212
  msgid "Change document:"
204
213
  msgstr "Изменить документ:"
205
214
 
@@ -102,7 +102,7 @@ class AbstractDocument(CollectionMember, index.Indexed, models.Model):
102
102
  else:
103
103
  # Some external storage backends don't allow reopening
104
104
  # the file. Get a fresh file instance. #1397
105
- storage = self._meta.get_field("file").storage
105
+ storage = self.file.storage
106
106
  f = storage.open(f.name, "rb")
107
107
 
108
108
  close_file = True
@@ -1 +1 @@
1
- $((function(){$("#fileupload").fileupload({dataType:"html",sequentialUploads:!0,dropZone:$(".drop-zone"),add:function(e,a){var t=$(this),s=t.data("blueimp-fileupload")||t.data("fileupload"),o=$($("#upload-list-item").html()).addClass("upload-uploading"),l=s.options;$("#upload-list").append(o),a.context=o,a.process((function(){return t.fileupload("process",a)})).always((function(){a.context.removeClass("processing"),a.context.find(".left").each((function(e,t){$(t).append(escapeHtml(a.files[e].name))}))})).done((function(){a.context.find(".start").prop("disabled",!1),!1!==s._trigger("added",e,a)&&(l.autoUpload||a.autoUpload)&&!1!==a.autoUpload&&a.submit()})).fail((function(){a.files.error&&a.context.each((function(e){var t=a.files[e].error;t&&$(this).find(".error_messages").text(t)}))}))},processfail:function(e,a){$(a.context).removeClass("upload-uploading").addClass("upload-failure")},progress:function(e,a){if(e.isDefaultPrevented())return!1;var t=Math.floor(a.loaded/a.total*100);a.context.each((function(){$(this).find(".progress").addClass("active").attr("aria-valuenow",t).find(".bar").css("width",t+"%").html(t+"%")}))},progressall:function(e,a){var t=parseInt(a.loaded/a.total*100,10);$("#overall-progress").addClass("active").attr("aria-valuenow",t).find(".bar").css("width",t+"%").html(t+"%"),t>=100&&$("#overall-progress").removeClass("active").find(".bar").css("width","0%")},formData:function(e){var a=this.files[0].name,t={title:a.replace(/\.[^.]+$/,"")};return e.get(0).dispatchEvent(new CustomEvent("wagtail:documents-upload",{bubbles:!0,cancelable:!0,detail:{data:t,filename:a,maxTitleLength:this.maxTitleLength}}))?e.serializeArray().concat({name:"title",value:t.title}):e.serializeArray()},done:function(e,a){var t=$(a.context),s=JSON.parse(a.result);s.success?(t.addClass("upload-success"),$(".right",t).append(s.form)):(t.addClass("upload-failure"),$(".right .error_messages",t).append(s.error_message))},fail:function(e,a){$(a.context).addClass("upload-failure")},always:function(e,a){$(a.context).removeClass("upload-uploading").addClass("upload-complete")}}),$("#upload-list").on("submit","form",(function(e){var a=$(this),t=new FormData(this),s=a.closest("#upload-list > li");e.preventDefault(),$.ajax({contentType:!1,data:t,processData:!1,type:"POST",url:this.action}).done((function(e){if(e.success){var t=$(".status-msg.update-success").first().text();document.dispatchEvent(new CustomEvent("w-messages:add",{detail:{clear:!0,text:t,type:"success"}})),s.slideUp((function(){$(this).remove()}))}else a.replaceWith(e.form)}))})),$("#upload-list").on("click",".delete",(function(e){var a=$(this).closest("form"),t=a.closest("#upload-list > li");e.preventDefault();var s=$('input[name="csrfmiddlewaretoken"]',a).val();$.post(this.href,{csrfmiddlewaretoken:s},(function(e){e.success&&t.slideUp((function(){$(this).remove()}))}))}))}));
1
+ $(function(){$("#fileupload").fileupload({dataType:"html",sequentialUploads:!0,dropZone:$(".drop-zone"),add:function(e,a){var t=$(this),s=t.data("blueimp-fileupload")||t.data("fileupload"),o=$($("#upload-list-item").html()).addClass("upload-uploading"),l=s.options;$("#upload-list").append(o),a.context=o,a.process(function(){return t.fileupload("process",a)}).always(function(){a.context.removeClass("processing"),a.context.find(".left").each(function(e,t){$(t).append(escapeHtml(a.files[e].name))})}).done(function(){a.context.find(".start").prop("disabled",!1),!1!==s._trigger("added",e,a)&&(l.autoUpload||a.autoUpload)&&!1!==a.autoUpload&&a.submit()}).fail(function(){a.files.error&&a.context.each(function(e){var t=a.files[e].error;t&&$(this).find(".error_messages").text(t)})})},processfail:function(e,a){$(a.context).removeClass("upload-uploading").addClass("upload-failure")},progress:function(e,a){if(e.isDefaultPrevented())return!1;var t=Math.floor(a.loaded/a.total*100);a.context.each(function(){$(this).find(".progress").addClass("active").attr("aria-valuenow",t).find(".bar").css("width",t+"%").html(t+"%")})},progressall:function(e,a){var t=parseInt(a.loaded/a.total*100,10);$("#overall-progress").addClass("active").attr("aria-valuenow",t).find(".bar").css("width",t+"%").html(t+"%"),t>=100&&$("#overall-progress").removeClass("active").find(".bar").css("width","0%")},formData:function(e){var a=this.files[0].name,t={title:a.replace(/\.[^.]+$/,"")};return e.get(0).dispatchEvent(new CustomEvent("wagtail:documents-upload",{bubbles:!0,cancelable:!0,detail:{data:t,filename:a,maxTitleLength:this.maxTitleLength}}))?e.serializeArray().concat({name:"title",value:t.title}):e.serializeArray()},done:function(e,a){var t=$(a.context),s=JSON.parse(a.result);s.success?(t.addClass("upload-success"),$(".right",t).append(s.form)):(t.addClass("upload-failure"),$(".right .error_messages",t).append(s.error_message))},fail:function(e,a){$(a.context).addClass("upload-failure")},always:function(e,a){$(a.context).removeClass("upload-uploading").addClass("upload-complete")}}),$("#upload-list").on("submit","form",function(e){var a=$(this),t=new FormData(this),s=a.closest("#upload-list > li");e.preventDefault(),$.ajax({contentType:!1,data:t,processData:!1,type:"POST",url:this.action}).done(function(e){if(e.success){var t=$(".status-msg.update-success").first().text();document.dispatchEvent(new CustomEvent("w-messages:add",{detail:{clear:!0,text:t,type:"success"}})),s.slideUp(function(){$(this).remove()})}else a.replaceWith(e.form)})}),$("#upload-list").on("click",".delete",function(e){var a=$(this).closest("form"),t=a.closest("#upload-list > li");e.preventDefault();var s=$('input[name="csrfmiddlewaretoken"]',a).val();$.post(this.href,{csrfmiddlewaretoken:s},function(e){e.success&&t.slideUp(function(){$(this).remove()})})})});
@@ -1 +1 @@
1
- (()=>{"use strict";var e,o={4186:(e,o,r)=>{var t=r(1669),n=r.n(t),a=r(2614);class i extends a.C4{ajaxifyLinks(e,o){super.ajaxifyLinks(e,o),n()("a.upload-one-now").on("click",(e=>{const o=n()("#id_collection_id").val();o&&n()("#id_document-chooser-upload-collection").val(o),e.preventDefault()}))}}window.DOCUMENT_CHOOSER_MODAL_ONLOAD_HANDLERS=new i({searchInputDelay:50,creationFormFileFieldSelector:"#id_document-chooser-upload-file",creationFormTitleFieldSelector:"#id_document-chooser-upload-title",creationFormTabSelector:"#tab-upload",creationFormEventName:"wagtail:documents-upload"}).getOnLoadHandlers();class l extends a.ZZ{onloadHandlers=window.DOCUMENT_CHOOSER_MODAL_ONLOAD_HANDLERS}window.DocumentChooserModal=l},1669:e=>{e.exports=jQuery}},r={};function t(e){var n=r[e];if(void 0!==n)return n.exports;var a=r[e]={exports:{}};return o[e](a,a.exports,t),a.exports}t.m=o,e=[],t.O=(o,r,n,a)=>{if(!r){var i=1/0;for(u=0;u<e.length;u++){for(var[r,n,a]=e[u],l=!0,d=0;d<r.length;d++)(!1&a||i>=a)&&Object.keys(t.O).every((e=>t.O[e](r[d])))?r.splice(d--,1):(l=!1,a<i&&(i=a));if(l){e.splice(u--,1);var c=n();void 0!==c&&(o=c)}}return o}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[r,n,a]},t.n=e=>{var o=e&&e.__esModule?()=>e.default:()=>e;return t.d(o,{a:o}),o},t.d=(e,o)=>{for(var r in o)t.o(o,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:o[r]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.j=884,(()=>{var e={884:0};t.O.j=o=>0===e[o];var o=(o,r)=>{var n,a,[i,l,d]=r,c=0;if(i.some((o=>0!==e[o]))){for(n in l)t.o(l,n)&&(t.m[n]=l[n]);if(d)var u=d(t)}for(o&&o(r);c<i.length;c++)a=i[c],t.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return t.O(u)},r=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];r.forEach(o.bind(null,0)),r.push=o.bind(null,r.push.bind(r))})();var n=t.O(void 0,[321],(()=>t(4186)));n=t.O(n)})();
1
+ (()=>{"use strict";var e,o={1669:e=>{e.exports=jQuery},4186:(e,o,r)=>{var n=r(1669),t=r.n(n),a=r(2614);class i extends a.C4{ajaxifyLinks(e,o){super.ajaxifyLinks(e,o),t()("a.upload-one-now").on("click",e=>{const o=t()("#id_collection_id").val();o&&t()("#id_document-chooser-upload-collection").val(o),e.preventDefault()})}}window.DOCUMENT_CHOOSER_MODAL_ONLOAD_HANDLERS=new i({searchInputDelay:50,creationFormTabSelector:"#tab-upload"}).getOnLoadHandlers();class l extends a.ZZ{onloadHandlers=window.DOCUMENT_CHOOSER_MODAL_ONLOAD_HANDLERS}window.DocumentChooserModal=l}},r={};function n(e){var t=r[e];if(void 0!==t)return t.exports;var a=r[e]={exports:{}};return o[e](a,a.exports,n),a.exports}n.m=o,e=[],n.O=(o,r,t,a)=>{if(!r){var i=1/0;for(u=0;u<e.length;u++){for(var[r,t,a]=e[u],l=!0,s=0;s<r.length;s++)(!1&a||i>=a)&&Object.keys(n.O).every(e=>n.O[e](r[s]))?r.splice(s--,1):(l=!1,a<i&&(i=a));if(l){e.splice(u--,1);var d=t();void 0!==d&&(o=d)}}return o}a=a||0;for(var u=e.length;u>0&&e[u-1][2]>a;u--)e[u]=e[u-1];e[u]=[r,t,a]},n.n=e=>{var o=e&&e.__esModule?()=>e.default:()=>e;return n.d(o,{a:o}),o},n.d=(e,o)=>{for(var r in o)n.o(o,r)&&!n.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:o[r]})},n.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),n.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),n.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},n.j=884,(()=>{var e={884:0};n.O.j=o=>0===e[o];var o=(o,r)=>{var t,a,[i,l,s]=r,d=0;if(i.some(o=>0!==e[o])){for(t in l)n.o(l,t)&&(n.m[t]=l[t]);if(s)var u=s(n)}for(o&&o(r);d<i.length;d++)a=i[d],n.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return n.O(u)},r=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];r.forEach(o.bind(null,0)),r.push=o.bind(null,r.push.bind(r))})();var t=n.O(void 0,[321],()=>n(4186));t=n.O(t)})();
@@ -1 +1 @@
1
- (()=>{"use strict";var e,o={3819:(e,o,r)=>{var t=r(9465);class n extends t.y{chooserModalClass=DocumentChooserModal}window.DocumentChooser=n;class a extends t._{widgetClass=n;chooserModalClass=DocumentChooserModal}window.telepath.register("wagtail.documents.widgets.DocumentChooser",a)},1669:e=>{e.exports=jQuery}},r={};function t(e){var n=r[e];if(void 0!==n)return n.exports;var a=r[e]={exports:{}};return o[e](a,a.exports,t),a.exports}t.m=o,e=[],t.O=(o,r,n,a)=>{if(!r){var i=1/0;for(d=0;d<e.length;d++){for(var[r,n,a]=e[d],l=!0,s=0;s<r.length;s++)(!1&a||i>=a)&&Object.keys(t.O).every((e=>t.O[e](r[s])))?r.splice(s--,1):(l=!1,a<i&&(i=a));if(l){e.splice(d--,1);var u=n();void 0!==u&&(o=u)}}return o}a=a||0;for(var d=e.length;d>0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[r,n,a]},t.n=e=>{var o=e&&e.__esModule?()=>e.default:()=>e;return t.d(o,{a:o}),o},t.d=(e,o)=>{for(var r in o)t.o(o,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:o[r]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.j=556,(()=>{var e={556:0};t.O.j=o=>0===e[o];var o=(o,r)=>{var n,a,[i,l,s]=r,u=0;if(i.some((o=>0!==e[o]))){for(n in l)t.o(l,n)&&(t.m[n]=l[n]);if(s)var d=s(t)}for(o&&o(r);u<i.length;u++)a=i[u],t.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return t.O(d)},r=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];r.forEach(o.bind(null,0)),r.push=o.bind(null,r.push.bind(r))})();var n=t.O(void 0,[321],(()=>t(3819)));n=t.O(n)})();
1
+ (()=>{"use strict";var e,o={1669:e=>{e.exports=jQuery},3819:(e,o,r)=>{var t=r(9465);class n extends t.y{chooserModalClass=DocumentChooserModal}window.DocumentChooser=n;class a extends t._{widgetClass=n;chooserModalClass=DocumentChooserModal}window.telepath.register("wagtail.documents.widgets.DocumentChooser",a)}},r={};function t(e){var n=r[e];if(void 0!==n)return n.exports;var a=r[e]={exports:{}};return o[e](a,a.exports,t),a.exports}t.m=o,e=[],t.O=(o,r,n,a)=>{if(!r){var i=1/0;for(d=0;d<e.length;d++){for(var[r,n,a]=e[d],l=!0,s=0;s<r.length;s++)(!1&a||i>=a)&&Object.keys(t.O).every(e=>t.O[e](r[s]))?r.splice(s--,1):(l=!1,a<i&&(i=a));if(l){e.splice(d--,1);var u=n();void 0!==u&&(o=u)}}return o}a=a||0;for(var d=e.length;d>0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[r,n,a]},t.n=e=>{var o=e&&e.__esModule?()=>e.default:()=>e;return t.d(o,{a:o}),o},t.d=(e,o)=>{for(var r in o)t.o(o,r)&&!t.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:o[r]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,o)=>Object.prototype.hasOwnProperty.call(e,o),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.j=556,(()=>{var e={556:0};t.O.j=o=>0===e[o];var o=(o,r)=>{var n,a,[i,l,s]=r,u=0;if(i.some(o=>0!==e[o])){for(n in l)t.o(l,n)&&(t.m[n]=l[n]);if(s)var d=s(t)}for(o&&o(r);u<i.length;u++)a=i[u],t.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return t.O(d)},r=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];r.forEach(o.bind(null,0)),r.push=o.bind(null,r.push.bind(r))})();var n=t.O(void 0,[321],()=>t(3819));n=t.O(n)})();
@@ -1 +1 @@
1
- (()=>{"use strict";var e,r={7023:(e,r,o)=>{var t=o(9465);class n extends t.y{chooserModalClass=DocumentChooserModal}window.DocumentChooser=n,window.DocumentChooser=n},1669:e=>{e.exports=jQuery}},o={};function t(e){var n=o[e];if(void 0!==n)return n.exports;var a=o[e]={exports:{}};return r[e](a,a.exports,t),a.exports}t.m=r,e=[],t.O=(r,o,n,a)=>{if(!o){var i=1/0;for(c=0;c<e.length;c++){for(var[o,n,a]=e[c],l=!0,s=0;s<o.length;s++)(!1&a||i>=a)&&Object.keys(t.O).every((e=>t.O[e](o[s])))?o.splice(s--,1):(l=!1,a<i&&(i=a));if(l){e.splice(c--,1);var u=n();void 0!==u&&(r=u)}}return r}a=a||0;for(var c=e.length;c>0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[o,n,a]},t.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return t.d(r,{a:r}),r},t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.j=844,(()=>{var e={844:0};t.O.j=r=>0===e[r];var r=(r,o)=>{var n,a,[i,l,s]=o,u=0;if(i.some((r=>0!==e[r]))){for(n in l)t.o(l,n)&&(t.m[n]=l[n]);if(s)var c=s(t)}for(r&&r(o);u<i.length;u++)a=i[u],t.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return t.O(c)},o=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];o.forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o))})();var n=t.O(void 0,[321],(()=>t(7023)));n=t.O(n)})();
1
+ (()=>{"use strict";var e,r={1669:e=>{e.exports=jQuery},7023:(e,r,o)=>{var t=o(9465);class n extends t.y{chooserModalClass=DocumentChooserModal}window.DocumentChooser=n,window.DocumentChooser=n}},o={};function t(e){var n=o[e];if(void 0!==n)return n.exports;var a=o[e]={exports:{}};return r[e](a,a.exports,t),a.exports}t.m=r,e=[],t.O=(r,o,n,a)=>{if(!o){var i=1/0;for(c=0;c<e.length;c++){for(var[o,n,a]=e[c],l=!0,s=0;s<o.length;s++)(!1&a||i>=a)&&Object.keys(t.O).every(e=>t.O[e](o[s]))?o.splice(s--,1):(l=!1,a<i&&(i=a));if(l){e.splice(c--,1);var u=n();void 0!==u&&(r=u)}}return r}a=a||0;for(var c=e.length;c>0&&e[c-1][2]>a;c--)e[c]=e[c-1];e[c]=[o,n,a]},t.n=e=>{var r=e&&e.__esModule?()=>e.default:()=>e;return t.d(r,{a:r}),r},t.d=(e,r)=>{for(var o in r)t.o(r,o)&&!t.o(e,o)&&Object.defineProperty(e,o,{enumerable:!0,get:r[o]})},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,r)=>Object.prototype.hasOwnProperty.call(e,r),t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.j=844,(()=>{var e={844:0};t.O.j=r=>0===e[r];var r=(r,o)=>{var n,a,[i,l,s]=o,u=0;if(i.some(r=>0!==e[r])){for(n in l)t.o(l,n)&&(t.m[n]=l[n]);if(s)var c=s(t)}for(r&&r(o);u<i.length;u++)a=i[u],t.o(e,a)&&e[a]&&e[a][0](),e[a]=0;return t.O(c)},o=globalThis.webpackChunkwagtail=globalThis.webpackChunkwagtail||[];o.forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o))})();var n=t.O(void 0,[321],()=>t(7023));n=t.O(n)})();
@@ -2,40 +2,6 @@
2
2
  {% load i18n wagtailadmin_tags %}
3
3
  {% block titletag %}{% trans "Add a document" %}{% endblock %}
4
4
 
5
- {% block extra_js %}
6
- {{ block.super }}
7
-
8
- <script>
9
- $(function() {
10
- $('#id_file').on(
11
- 'change',
12
- function() {
13
- var $titleField = $('#id_title');
14
-
15
- // do not override a title that already exists (from manual editing or previous upload)
16
- if ($titleField.val()) return;
17
-
18
- // file widget value example: `C:\fakepath\image.jpg` - convert to just the filename part
19
- var filename = $(this).val().split('\\').slice(-1)[0];
20
- var data = { title: filename.replace(/\.[^.]+$/, '') };
21
- var maxTitleLength = parseInt($titleField.attr('maxLength') || '0', 10) || null;
22
-
23
- // allow an event handler to customise data or call event.preventDefault to stop any title pre-filling
24
- var form = $(this).closest('form').get(0);
25
- var event = form.dispatchEvent(new CustomEvent(
26
- 'wagtail:documents-upload',
27
- { bubbles: true, cancelable: true, detail: { data: data, filename: filename, maxTitleLength: maxTitleLength } }
28
- ));
29
-
30
- if (!event) return; // do not set a title if event.preventDefault(); is called by handler
31
-
32
- $titleField.val(data.title);
33
- }
34
- );
35
- });
36
- </script>
37
- {% endblock %}
38
-
39
5
  {% block actions %}
40
6
  <button
41
7
  type="submit"