From 7d24ba248506956dbadd8c9a7cf8380d453a7afa Mon Sep 17 00:00:00 2001 From: Shelane French Date: Wed, 18 Sep 2024 14:51:41 -0700 Subject: [PATCH] Backdrop 1.29.0 (#59) --- docroot/core/includes/bootstrap.inc | 2 +- .../core/includes/database/mysql/database.inc | 23 + docroot/core/includes/drupal.inc | 1 + docroot/core/includes/file.inc | 7 +- docroot/core/includes/install.core.inc | 549 +++++++++++++++--- docroot/core/includes/mail.inc | 20 +- docroot/core/includes/theme.inc | 22 +- docroot/core/layouts/boxton/boxton.info | 6 +- docroot/core/layouts/geary/geary.info | 6 +- docroot/core/layouts/harris/harris.info | 6 +- .../layouts/legacy/one_column/one_column.info | 6 +- .../three_three_four_column.info | 6 +- .../layouts/legacy/two_column/two_column.info | 6 +- .../two_column_flipped.info | 6 +- docroot/core/layouts/moscone/moscone.info | 6 +- .../moscone_flipped/moscone_flipped.info | 6 +- docroot/core/layouts/rolph/rolph.info | 6 +- docroot/core/layouts/simmons/simmons.info | 6 +- docroot/core/layouts/sutro/sutro.info | 6 +- docroot/core/layouts/taylor/taylor.info | 6 +- .../taylor_flipped/taylor_flipped.info | 6 +- docroot/core/misc/jquery-ui-compat.js | 10 + docroot/core/misc/jquery.color.js | 8 +- docroot/core/misc/jquery.ui.touch-punch.js | 61 +- docroot/core/misc/ui/i18n/datepicker-af.js | 2 +- docroot/core/misc/ui/i18n/datepicker-ar-DZ.js | 2 +- docroot/core/misc/ui/i18n/datepicker-ar.js | 2 +- docroot/core/misc/ui/i18n/datepicker-az.js | 2 +- docroot/core/misc/ui/i18n/datepicker-be.js | 2 +- docroot/core/misc/ui/i18n/datepicker-bg.js | 2 +- docroot/core/misc/ui/i18n/datepicker-bs.js | 2 +- docroot/core/misc/ui/i18n/datepicker-ca.js | 2 +- docroot/core/misc/ui/i18n/datepicker-cs.js | 2 +- docroot/core/misc/ui/i18n/datepicker-cy-GB.js | 2 +- docroot/core/misc/ui/i18n/datepicker-da.js | 2 +- docroot/core/misc/ui/i18n/datepicker-de-AT.js | 2 +- docroot/core/misc/ui/i18n/datepicker-de.js | 2 +- docroot/core/misc/ui/i18n/datepicker-el.js | 2 +- docroot/core/misc/ui/i18n/datepicker-en-AU.js | 2 +- docroot/core/misc/ui/i18n/datepicker-en-GB.js | 2 +- docroot/core/misc/ui/i18n/datepicker-en-NZ.js | 2 +- docroot/core/misc/ui/i18n/datepicker-eo.js | 2 +- docroot/core/misc/ui/i18n/datepicker-es.js | 2 +- docroot/core/misc/ui/i18n/datepicker-et.js | 2 +- docroot/core/misc/ui/i18n/datepicker-eu.js | 2 +- docroot/core/misc/ui/i18n/datepicker-fa.js | 2 +- docroot/core/misc/ui/i18n/datepicker-fi.js | 2 +- docroot/core/misc/ui/i18n/datepicker-fo.js | 2 +- docroot/core/misc/ui/i18n/datepicker-fr-CA.js | 2 +- docroot/core/misc/ui/i18n/datepicker-fr-CH.js | 2 +- docroot/core/misc/ui/i18n/datepicker-fr.js | 2 +- docroot/core/misc/ui/i18n/datepicker-gl.js | 2 +- docroot/core/misc/ui/i18n/datepicker-he.js | 2 +- docroot/core/misc/ui/i18n/datepicker-hi.js | 2 +- docroot/core/misc/ui/i18n/datepicker-hr.js | 2 +- docroot/core/misc/ui/i18n/datepicker-hu.js | 2 +- docroot/core/misc/ui/i18n/datepicker-hy.js | 2 +- docroot/core/misc/ui/i18n/datepicker-id.js | 2 +- docroot/core/misc/ui/i18n/datepicker-is.js | 2 +- docroot/core/misc/ui/i18n/datepicker-it-CH.js | 2 +- docroot/core/misc/ui/i18n/datepicker-it.js | 2 +- docroot/core/misc/ui/i18n/datepicker-ja.js | 2 +- docroot/core/misc/ui/i18n/datepicker-ka.js | 2 +- docroot/core/misc/ui/i18n/datepicker-kk.js | 2 +- docroot/core/misc/ui/i18n/datepicker-km.js | 2 +- docroot/core/misc/ui/i18n/datepicker-ko.js | 2 +- docroot/core/misc/ui/i18n/datepicker-ky.js | 2 +- docroot/core/misc/ui/i18n/datepicker-lb.js | 2 +- docroot/core/misc/ui/i18n/datepicker-lt.js | 2 +- docroot/core/misc/ui/i18n/datepicker-lv.js | 2 +- docroot/core/misc/ui/i18n/datepicker-mk.js | 2 +- docroot/core/misc/ui/i18n/datepicker-ml.js | 2 +- docroot/core/misc/ui/i18n/datepicker-ms.js | 2 +- docroot/core/misc/ui/i18n/datepicker-nb.js | 2 +- docroot/core/misc/ui/i18n/datepicker-nl-BE.js | 2 +- docroot/core/misc/ui/i18n/datepicker-nl.js | 2 +- docroot/core/misc/ui/i18n/datepicker-nn.js | 2 +- docroot/core/misc/ui/i18n/datepicker-no.js | 2 +- docroot/core/misc/ui/i18n/datepicker-pl.js | 2 +- docroot/core/misc/ui/i18n/datepicker-pt-BR.js | 2 +- docroot/core/misc/ui/i18n/datepicker-pt.js | 2 +- docroot/core/misc/ui/i18n/datepicker-rm.js | 2 +- docroot/core/misc/ui/i18n/datepicker-ro.js | 2 +- docroot/core/misc/ui/i18n/datepicker-ru.js | 2 +- docroot/core/misc/ui/i18n/datepicker-sk.js | 2 +- docroot/core/misc/ui/i18n/datepicker-sl.js | 2 +- docroot/core/misc/ui/i18n/datepicker-sq.js | 2 +- docroot/core/misc/ui/i18n/datepicker-sr-SR.js | 2 +- docroot/core/misc/ui/i18n/datepicker-sr.js | 2 +- docroot/core/misc/ui/i18n/datepicker-sv.js | 2 +- docroot/core/misc/ui/i18n/datepicker-ta.js | 2 +- docroot/core/misc/ui/i18n/datepicker-th.js | 2 +- docroot/core/misc/ui/i18n/datepicker-tj.js | 2 +- docroot/core/misc/ui/i18n/datepicker-tr.js | 2 +- docroot/core/misc/ui/i18n/datepicker-uk.js | 2 +- docroot/core/misc/ui/i18n/datepicker-vi.js | 2 +- docroot/core/misc/ui/i18n/datepicker-zh-CN.js | 2 +- docroot/core/misc/ui/i18n/datepicker-zh-HK.js | 2 +- docroot/core/misc/ui/i18n/datepicker-zh-TW.js | 2 +- docroot/core/misc/ui/jquery.ui.accordion.css | 10 +- .../core/misc/ui/jquery.ui.accordion.min.js | 10 +- docroot/core/misc/ui/jquery.ui.all.css | 10 +- .../core/misc/ui/jquery.ui.autocomplete.css | 10 +- .../misc/ui/jquery.ui.autocomplete.min.js | 10 +- docroot/core/misc/ui/jquery.ui.base.css | 10 +- docroot/core/misc/ui/jquery.ui.button.css | 17 +- docroot/core/misc/ui/jquery.ui.button.min.js | 10 +- .../core/misc/ui/jquery.ui.checkboxradio.css | 10 +- .../misc/ui/jquery.ui.checkboxradio.min.js | 10 +- .../core/misc/ui/jquery.ui.controlgroup.css | 13 +- .../misc/ui/jquery.ui.controlgroup.min.js | 10 +- docroot/core/misc/ui/jquery.ui.core.css | 11 +- docroot/core/misc/ui/jquery.ui.core.min.js | 1 - docroot/core/misc/ui/jquery.ui.data.min.js | 10 +- docroot/core/misc/ui/jquery.ui.datepicker.css | 10 +- .../core/misc/ui/jquery.ui.datepicker.min.js | 10 +- docroot/core/misc/ui/jquery.ui.dialog.css | 10 +- docroot/core/misc/ui/jquery.ui.dialog.min.js | 10 +- .../ui/jquery.ui.disable-selection.min.js | 10 +- docroot/core/misc/ui/jquery.ui.draggable.css | 9 +- .../core/misc/ui/jquery.ui.draggable.min.js | 10 +- .../core/misc/ui/jquery.ui.droppable.min.js | 10 +- .../misc/ui/jquery.ui.effect-blind.min.js | 10 +- .../misc/ui/jquery.ui.effect-bounce.min.js | 10 +- .../core/misc/ui/jquery.ui.effect-clip.min.js | 10 +- .../core/misc/ui/jquery.ui.effect-drop.min.js | 10 +- .../misc/ui/jquery.ui.effect-explode.min.js | 10 +- .../core/misc/ui/jquery.ui.effect-fade.min.js | 10 +- .../core/misc/ui/jquery.ui.effect-fold.min.js | 10 +- .../misc/ui/jquery.ui.effect-highlight.min.js | 10 +- .../core/misc/ui/jquery.ui.effect-puff.min.js | 10 +- .../misc/ui/jquery.ui.effect-pulsate.min.js | 10 +- .../misc/ui/jquery.ui.effect-scale.min.js | 10 +- .../misc/ui/jquery.ui.effect-shake.min.js | 10 +- .../core/misc/ui/jquery.ui.effect-size.min.js | 10 +- .../misc/ui/jquery.ui.effect-slide.min.js | 10 +- .../misc/ui/jquery.ui.effect-transfer.min.js | 10 +- docroot/core/misc/ui/jquery.ui.effect.min.js | 10 +- .../core/misc/ui/jquery.ui.focusable.min.js | 10 +- .../misc/ui/jquery.ui.form-reset-mixin.min.js | 10 +- docroot/core/misc/ui/jquery.ui.form.min.js | 1 - docroot/core/misc/ui/jquery.ui.ie.min.js | 1 - .../misc/ui/jquery.ui.jquery-patch.min.js | 10 +- .../ui/jquery.ui.jquery-var-for-color.min.js | 2 +- docroot/core/misc/ui/jquery.ui.keycode.min.js | 10 +- docroot/core/misc/ui/jquery.ui.labels.min.js | 10 +- docroot/core/misc/ui/jquery.ui.menu.css | 12 +- docroot/core/misc/ui/jquery.ui.menu.min.js | 10 +- docroot/core/misc/ui/jquery.ui.mouse.min.js | 10 +- docroot/core/misc/ui/jquery.ui.plugin.min.js | 2 +- .../core/misc/ui/jquery.ui.position.min.js | 12 +- .../core/misc/ui/jquery.ui.progressbar.css | 11 +- .../core/misc/ui/jquery.ui.progressbar.min.js | 10 +- docroot/core/misc/ui/jquery.ui.resizable.css | 9 +- .../core/misc/ui/jquery.ui.resizable.min.js | 10 +- .../ui/jquery.ui.safe-active-element.min.js | 1 - .../core/misc/ui/jquery.ui.safe-blur.min.js | 1 - .../misc/ui/jquery.ui.scroll-parent.min.js | 10 +- docroot/core/misc/ui/jquery.ui.selectable.css | 9 +- .../core/misc/ui/jquery.ui.selectable.min.js | 10 +- docroot/core/misc/ui/jquery.ui.selectmenu.css | 10 +- .../core/misc/ui/jquery.ui.selectmenu.min.js | 10 +- docroot/core/misc/ui/jquery.ui.slider.css | 17 +- docroot/core/misc/ui/jquery.ui.slider.min.js | 10 +- docroot/core/misc/ui/jquery.ui.sortable.css | 9 +- .../core/misc/ui/jquery.ui.sortable.min.js | 10 +- docroot/core/misc/ui/jquery.ui.spinner.css | 10 +- docroot/core/misc/ui/jquery.ui.spinner.min.js | 10 +- .../core/misc/ui/jquery.ui.tabbable.min.js | 10 +- docroot/core/misc/ui/jquery.ui.tabs.css | 10 +- docroot/core/misc/ui/jquery.ui.tabs.min.js | 10 +- docroot/core/misc/ui/jquery.ui.theme.css | 19 +- docroot/core/misc/ui/jquery.ui.tooltip.css | 10 +- docroot/core/misc/ui/jquery.ui.tooltip.min.js | 10 +- .../core/misc/ui/jquery.ui.unique-id.min.js | 10 +- docroot/core/misc/ui/jquery.ui.version.min.js | 2 +- docroot/core/misc/ui/jquery.ui.widget.min.js | 10 +- docroot/core/modules/admin_bar/admin_bar.info | 6 +- .../core/modules/admin_bar/css/admin_bar.css | 8 + .../core/modules/admin_bar/js/admin_bar.js | 6 +- .../admin_bar/tests/admin_bar.tests.info | 6 +- docroot/core/modules/block/block.info | 6 +- .../core/modules/block/tests/block.tests.info | 6 +- .../block/tests/block_test/block_test.info | 6 +- docroot/core/modules/book/book.info | 6 +- .../core/modules/book/tests/book.tests.info | 6 +- docroot/core/modules/ckeditor/ckeditor.info | 6 +- .../ckeditor/tests/ckeditor.tests.info | 6 +- docroot/core/modules/ckeditor5/ckeditor5.info | 6 +- .../core/modules/ckeditor5/ckeditor5.module | 14 +- .../modules/ckeditor5/ckeditor5.pages.inc | 2 +- .../plugins/backdrop-image/backdrop-image.js | 7 +- .../lib/ckeditor5/build/ckeditor5-dll.js | 95 +-- .../lib/ckeditor5/build/translations/af.js | 2 +- .../lib/ckeditor5/build/translations/ar.js | 2 +- .../lib/ckeditor5/build/translations/ast.js | 2 +- .../lib/ckeditor5/build/translations/az.js | 2 +- .../lib/ckeditor5/build/translations/bg.js | 2 +- .../lib/ckeditor5/build/translations/bn.js | 2 +- .../lib/ckeditor5/build/translations/bs.js | 2 +- .../lib/ckeditor5/build/translations/ca.js | 2 +- .../lib/ckeditor5/build/translations/cs.js | 2 +- .../lib/ckeditor5/build/translations/da.js | 2 +- .../lib/ckeditor5/build/translations/de-ch.js | 2 +- .../lib/ckeditor5/build/translations/de.js | 2 +- .../lib/ckeditor5/build/translations/el.js | 2 +- .../lib/ckeditor5/build/translations/en-au.js | 2 +- .../lib/ckeditor5/build/translations/en-gb.js | 2 +- .../lib/ckeditor5/build/translations/eo.js | 2 +- .../lib/ckeditor5/build/translations/es-co.js | 2 +- .../lib/ckeditor5/build/translations/es.js | 2 +- .../lib/ckeditor5/build/translations/et.js | 2 +- .../lib/ckeditor5/build/translations/eu.js | 2 +- .../lib/ckeditor5/build/translations/fa.js | 2 +- .../lib/ckeditor5/build/translations/fi.js | 2 +- .../lib/ckeditor5/build/translations/fr.js | 2 +- .../lib/ckeditor5/build/translations/gl.js | 2 +- .../lib/ckeditor5/build/translations/gu.js | 2 +- .../lib/ckeditor5/build/translations/he.js | 2 +- .../lib/ckeditor5/build/translations/hi.js | 2 +- .../lib/ckeditor5/build/translations/hr.js | 2 +- .../lib/ckeditor5/build/translations/hu.js | 2 +- .../lib/ckeditor5/build/translations/hy.js | 2 +- .../lib/ckeditor5/build/translations/id.js | 2 +- .../lib/ckeditor5/build/translations/it.js | 2 +- .../lib/ckeditor5/build/translations/ja.js | 2 +- .../lib/ckeditor5/build/translations/jv.js | 2 +- .../lib/ckeditor5/build/translations/km.js | 2 +- .../lib/ckeditor5/build/translations/kn.js | 2 +- .../lib/ckeditor5/build/translations/ko.js | 2 +- .../lib/ckeditor5/build/translations/ku.js | 2 +- .../lib/ckeditor5/build/translations/lt.js | 2 +- .../lib/ckeditor5/build/translations/lv.js | 2 +- .../lib/ckeditor5/build/translations/ms.js | 2 +- .../lib/ckeditor5/build/translations/nb.js | 2 +- .../lib/ckeditor5/build/translations/ne.js | 2 +- .../lib/ckeditor5/build/translations/nl.js | 2 +- .../lib/ckeditor5/build/translations/no.js | 2 +- .../lib/ckeditor5/build/translations/oc.js | 2 +- .../lib/ckeditor5/build/translations/pl.js | 2 +- .../lib/ckeditor5/build/translations/pt-br.js | 2 +- .../lib/ckeditor5/build/translations/pt.js | 2 +- .../lib/ckeditor5/build/translations/ro.js | 2 +- .../lib/ckeditor5/build/translations/ru.js | 2 +- .../lib/ckeditor5/build/translations/si.js | 2 +- .../lib/ckeditor5/build/translations/sk.js | 2 +- .../lib/ckeditor5/build/translations/sl.js | 2 +- .../lib/ckeditor5/build/translations/sq.js | 2 +- .../ckeditor5/build/translations/sr-latn.js | 2 +- .../lib/ckeditor5/build/translations/sr.js | 2 +- .../lib/ckeditor5/build/translations/sv.js | 2 +- .../lib/ckeditor5/build/translations/th.js | 2 +- .../lib/ckeditor5/build/translations/ti.js | 1 + .../lib/ckeditor5/build/translations/tk.js | 2 +- .../lib/ckeditor5/build/translations/tr.js | 2 +- .../lib/ckeditor5/build/translations/tt.js | 2 +- .../lib/ckeditor5/build/translations/ug.js | 2 +- .../lib/ckeditor5/build/translations/uk.js | 2 +- .../lib/ckeditor5/build/translations/ur.js | 2 +- .../lib/ckeditor5/build/translations/uz.js | 2 +- .../lib/ckeditor5/build/translations/vi.js | 2 +- .../lib/ckeditor5/build/translations/zh-cn.js | 2 +- .../lib/ckeditor5/build/translations/zh.js | 2 +- .../ckeditor5/lib/scripts/concat-build.sh | 76 ++- .../modules/ckeditor5/tests/ckeditor5.test | 4 +- .../ckeditor5/tests/ckeditor5.tests.info | 6 +- .../ckeditor5_upgrade_test.info | 6 +- docroot/core/modules/color/color.info | 6 +- .../core/modules/color/tests/color.tests.info | 6 +- docroot/core/modules/comment/comment.info | 6 +- .../core/modules/comment/comment.theme.inc | 4 +- .../modules/comment/tests/comment.tests.info | 6 +- docroot/core/modules/config/config.info | 6 +- .../modules/config/tests/config.tests.info | 6 +- .../config/tests/config_test/config_test.info | 6 +- .../config_test_hooks/config_test_hooks.info | 6 +- docroot/core/modules/contact/contact.info | 6 +- .../modules/contact/tests/contact.tests.info | 6 +- .../core/modules/contextual/contextual.info | 6 +- .../contextual/tests/contextual.tests.info | 6 +- docroot/core/modules/dashboard/dashboard.info | 6 +- .../dashboard/includes/block.menus.inc | 13 +- .../dashboard/includes/block.node_types.inc | 10 +- .../dashboard/tests/dashboard.tests.info | 6 +- docroot/core/modules/date/date.info | 6 +- docroot/core/modules/date/date.tokens.inc | 33 +- .../core/modules/date/tests/date.tests.info | 6 +- docroot/core/modules/dblog/dblog.info | 6 +- .../core/modules/dblog/tests/dblog.tests.info | 6 +- docroot/core/modules/email/email.info | 6 +- .../core/modules/email/tests/email.tests.info | 6 +- docroot/core/modules/entity/entity.info | 6 +- .../modules/entity/tests/entity.tests.info | 6 +- .../entity_cache_test/entity_cache_test.info | 6 +- .../entity_cache_test_dependency.info | 6 +- .../entity_caching_test.info | 6 +- .../entity_crud_hook_test.info | 6 +- .../entity_query_access_test.info | 6 +- .../entity/tests/entity_test/entity_test.info | 6 +- .../entityreference/entityreference.info | 6 +- .../tests/entityreference.tests.info | 6 +- .../entityreference_views_test.info | 6 +- .../views/entityreference.views.inc | 4 +- docroot/core/modules/field/field.info | 6 +- .../field_sql_storage/field_sql_storage.info | 6 +- .../tests/field_sql_storage.tests.info | 6 +- .../core/modules/field/modules/list/list.info | 6 +- .../modules/field/modules/list/list.module | 8 +- .../field/modules/list/tests/list.tests.info | 6 +- .../field/modules/list/tests/list_test.info | 6 +- .../modules/field/modules/number/number.info | 6 +- .../modules/number/tests/number.tests.info | 6 +- .../field/modules/options/options.info | 6 +- .../modules/options/tests/options.tests.info | 6 +- .../field/modules/text/tests/text.tests.info | 6 +- .../core/modules/field/modules/text/text.info | 6 +- .../core/modules/field/tests/field.tests.info | 6 +- .../field/tests/field_test/field_test.info | 6 +- .../field_test_schema_alter.info | 6 +- docroot/core/modules/field_ui/field_ui.info | 6 +- .../field_ui/tests/field_ui.tests.info | 6 +- .../tests/view_mode_test/view_mode_test.info | 6 +- docroot/core/modules/file/file.info | 6 +- docroot/core/modules/file/file.install | 2 +- docroot/core/modules/file/file.module | 1 + docroot/core/modules/file/file.pages.inc | 58 +- docroot/core/modules/file/tests/file.test | 58 +- .../core/modules/file/tests/file.tests.info | 12 +- .../config/views.view.file_icon_test.json | 359 ++++++++++++ .../file_module_test/file_module_test.info | 6 +- .../core/modules/file/tests/file_views.test | 129 ++++ .../core/modules/file/views/file.views.inc | 11 + .../views/views_handler_field_file_icon.inc | 170 ++++++ docroot/core/modules/filter/filter.info | 6 +- docroot/core/modules/filter/tests/filter.test | 9 +- .../modules/filter/tests/filter.tests.info | 6 +- .../modules/filter/tests/filter_formtest.info | 6 +- docroot/core/modules/image/image.info | 6 +- docroot/core/modules/image/image.theme.inc | 13 +- .../core/modules/image/tests/image.tests.info | 6 +- .../image_module_test/image_module_test.info | 6 +- docroot/core/modules/installer/installer.info | 6 +- .../aaa_installer_test.info | 6 +- .../bbb_installer_test.info | 6 +- .../ccc_installer_test.info | 6 +- .../installer/tests/installer.tests.info | 6 +- .../tests/installer_test/installer_test.info | 6 +- docroot/core/modules/language/language.info | 6 +- .../language/tests/language.tests.info | 6 +- .../core/modules/layout/css/layout.admin.css | 8 +- .../layout/css/layout.flexible.admin.css | 35 +- .../modules/layout/includes/layout.layout.inc | 5 + docroot/core/modules/layout/layout.admin.inc | 110 +++- docroot/core/modules/layout/layout.api.php | 2 +- .../modules/layout/layout.entity.admin.inc | 473 +++++++++++++++ docroot/core/modules/layout/layout.info | 6 +- docroot/core/modules/layout/layout.module | 113 +++- docroot/core/modules/layout/layout.theme.inc | 22 +- .../http_response_code_layout_access.inc | 90 +++ docroot/core/modules/layout/tests/layout.test | 147 ++++- .../modules/layout/tests/layout.tests.info | 12 +- .../modules/layout/tests/layout_entity.test | 163 ++++++ .../layout/tests/layout_test/layout_test.info | 6 +- docroot/core/modules/link/link.info | 6 +- .../core/modules/link/tests/link.tests.info | 6 +- docroot/core/modules/locale/locale.info | 6 +- .../modules/locale/tests/locale.tests.info | 6 +- .../locale/tests/locale_test/locale_test.info | 6 +- docroot/core/modules/menu/menu.info | 6 +- .../core/modules/menu/tests/menu.tests.info | 6 +- docroot/core/modules/node/node.entity.inc | 2 +- docroot/core/modules/node/node.info | 6 +- docroot/core/modules/node/node.theme.inc | 5 +- docroot/core/modules/node/node.types.inc | 7 + docroot/core/modules/node/tests/node.test | 4 +- .../core/modules/node/tests/node.tests.info | 6 +- .../node_access_test/node_access_test.info | 6 +- .../node_layout_preview_revision_test.info | 6 +- .../node/tests/node_test/node_test.info | 6 +- .../node_test_exception.info | 6 +- docroot/core/modules/path/path.info | 6 +- .../core/modules/path/tests/path.tests.info | 6 +- docroot/core/modules/redirect/redirect.info | 6 +- .../redirect/tests/redirect.tests.info | 6 +- docroot/core/modules/search/search.info | 6 +- .../modules/search/tests/search.tests.info | 6 +- .../search_embedded_form.info | 6 +- .../search_extra_type/search_extra_type.info | 6 +- .../core/modules/simpletest/simpletest.info | 6 +- .../modules/simpletest/simpletest.theme.inc | 12 +- .../simpletest/tests/actions_loop_test.info | 6 +- .../simpletest/tests/ajax_forms_test.info | 6 +- .../modules/simpletest/tests/ajax_test.info | 6 +- ...ckdrop_system_listing_compatible_test.info | 6 +- ...drop_system_listing_incompatible_test.info | 6 +- .../modules/simpletest/tests/batch_test.info | 6 +- .../modules/simpletest/tests/boot_test_1.info | 6 +- .../modules/simpletest/tests/boot_test_2.info | 6 +- .../modules/simpletest/tests/common_test.info | 6 +- .../tests/common_test_cron_helper.info | 6 +- .../config_obj_test/config_obj_test.info | 6 +- .../simpletest/tests/database_test.info | 6 +- .../simpletest/tests/dependency_test1.info | 6 +- .../simpletest/tests/dependency_test2.info | 6 +- .../simpletest/tests/dependency_test3.info | 6 +- .../modules/simpletest/tests/error_test.info | 6 +- .../core/modules/simpletest/tests/file.test | 10 +- .../modules/simpletest/tests/file_test.info | 6 +- .../modules/simpletest/tests/file_test.module | 6 +- .../modules/simpletest/tests/filter_test.info | 6 +- .../modules/simpletest/tests/form_test.info | 6 +- .../simpletest/tests/icon_test/icon_test.info | 6 +- .../modules/simpletest/tests/image_test.info | 6 +- .../core/modules/simpletest/tests/mail.test | 6 +- .../modules/simpletest/tests/menu_test.info | 6 +- .../modules/simpletest/tests/module_test.info | 6 +- .../modules/simpletest/tests/path_test.info | 6 +- .../simpletest/tests/requirements1_test.info | 6 +- .../simpletest/tests/requirements2_test.info | 6 +- .../simpletest/tests/session_test.info | 6 +- .../simpletest/tests/simpletest.tests.info | 6 +- .../tests/system_dependencies_test.info | 6 +- ...atible_core_version_dependencies_test.info | 6 +- ...system_incompatible_core_version_test.info | 6 +- ...ible_module_version_dependencies_test.info | 6 +- ...stem_incompatible_module_version_test.info | 6 +- .../tests/system_project_namespace_test.info | 6 +- .../modules/simpletest/tests/system_test.info | 6 +- .../simpletest/tests/taxonomy_test.info | 6 +- .../core/modules/simpletest/tests/theme.test | 185 +++++- .../modules/simpletest/tests/theme_test.info | 6 +- .../themes/test_basetheme/test_basetheme.info | 6 +- .../themes/test_subtheme/test_subtheme.info | 6 +- .../templates/taxonomy-term--1.tpl.php | 2 + .../templates/user-profile--2.tpl.php | 2 + .../tests/themes/test_theme/test_theme.info | 6 +- .../test_theme_config/test_theme_config.info | 6 +- .../modules/simpletest/tests/token_test.info | 6 +- .../simpletest/tests/update_d7_test_1.info | 6 +- .../simpletest/tests/update_d7_test_2.info | 6 +- .../simpletest/tests/update_script_test.info | 6 +- .../simpletest/tests/update_test_1.info | 6 +- .../simpletest/tests/update_test_2.info | 6 +- .../simpletest/tests/update_test_3.info | 6 +- .../simpletest/tests/url_alter_test.info | 6 +- docroot/core/modules/syslog/syslog.info | 6 +- .../modules/syslog/tests/syslog.tests.info | 6 +- docroot/core/modules/system/system.info | 6 +- docroot/core/modules/system/system.mail.inc | 6 +- docroot/core/modules/system/system.module | 22 +- .../cron_queue_test/cron_queue_test.info | 6 +- .../deprecated_redirect_test.info | 6 +- .../modules/system/tests/system.tests.info | 6 +- .../system_cron_test/system_cron_test.info | 6 +- .../core/modules/taxonomy/taxonomy.admin.inc | 10 +- .../core/modules/taxonomy/taxonomy.entity.inc | 2 +- docroot/core/modules/taxonomy/taxonomy.info | 6 +- .../core/modules/taxonomy/taxonomy.theme.inc | 19 +- .../taxonomy/tests/taxonomy.tests.info | 6 +- .../taxonomy_nodes_test.info | 6 +- .../taxonomy_vocab_load_test.info | 6 +- docroot/core/modules/telemetry/telemetry.info | 6 +- .../translation/tests/translation.tests.info | 6 +- .../translation_test/translation_test.info | 6 +- .../core/modules/translation/translation.info | 6 +- .../aaa_update_test/aaa_update_test.info | 6 +- .../bbb_update_test/bbb_update_test.info | 6 +- .../ccc_update_test/ccc_update_test.info | 6 +- .../modules/update/tests/update.tests.info | 6 +- .../update_test_admintheme.info | 6 +- .../update_test_basetheme.info | 6 +- .../update_test_subtheme.info | 6 +- .../update/tests/update_test/update_test.info | 6 +- docroot/core/modules/update/update.info | 6 +- .../core/modules/user/tests/user.tests.info | 6 +- .../user_flood_test/user_flood_test.info | 6 +- .../tests/user_form_test/user_form_test.info | 6 +- .../user/tests/user_password_reset.test | 52 ++ .../user_session_test/user_session_test.info | 6 +- docroot/core/modules/user/user.admin.inc | 2 +- docroot/core/modules/user/user.entity.inc | 2 +- docroot/core/modules/user/user.info | 6 +- docroot/core/modules/user/user.module | 10 +- docroot/core/modules/user/user.pages.inc | 35 +- docroot/core/modules/user/user.theme.inc | 7 +- .../core/modules/views/tests/views.tests.info | 6 +- .../views/tests/views_test/views_test.info | 6 +- .../views_test_entity/views_test_entity.info | 6 +- docroot/core/modules/views/views.info | 6 +- .../views_ui/css/views_ui.admin.theme.css | 4 +- .../core/modules/views_ui/js/views-admin.js | 4 +- docroot/core/modules/views_ui/views_ui.info | 6 +- .../core/modules/views_ui/views_ui.theme.inc | 23 +- docroot/core/profiles/minimal/minimal.info | 6 +- docroot/core/profiles/standard/standard.info | 6 +- ...ckdrop_system_listing_compatible_test.info | 6 +- ..._system_listing_compatible_test.tests.info | 6 +- ...drop_system_listing_incompatible_test.info | 6 +- docroot/core/profiles/testing/testing.info | 6 +- docroot/core/scripts/backdrop.sh | 0 docroot/core/scripts/dump-database-d7.sh | 0 docroot/core/scripts/generate-d7-content.sh | 0 docroot/core/scripts/install.sh | 0 docroot/core/scripts/password-hash.sh | 0 docroot/core/scripts/run-tests.sh | 0 docroot/core/scripts/test.script | 0 docroot/core/themes/bartik/bartik.info | 6 +- docroot/core/themes/basis/basis.info | 6 +- docroot/core/themes/seven/css/style.css | 12 +- docroot/core/themes/seven/seven.info | 6 +- docroot/core/themes/stark/stark.info | 6 +- 511 files changed, 4068 insertions(+), 1648 deletions(-) create mode 100644 docroot/core/misc/jquery-ui-compat.js delete mode 100644 docroot/core/misc/ui/jquery.ui.core.min.js delete mode 100644 docroot/core/misc/ui/jquery.ui.form.min.js delete mode 100644 docroot/core/misc/ui/jquery.ui.ie.min.js delete mode 100644 docroot/core/misc/ui/jquery.ui.safe-active-element.min.js delete mode 100644 docroot/core/misc/ui/jquery.ui.safe-blur.min.js create mode 100644 docroot/core/modules/ckeditor5/lib/ckeditor5/build/translations/ti.js create mode 100644 docroot/core/modules/file/tests/file_module_test/config/views.view.file_icon_test.json create mode 100644 docroot/core/modules/file/tests/file_views.test create mode 100644 docroot/core/modules/file/views/views_handler_field_file_icon.inc create mode 100644 docroot/core/modules/layout/layout.entity.admin.inc create mode 100644 docroot/core/modules/layout/plugins/access/http_response_code_layout_access.inc create mode 100644 docroot/core/modules/layout/tests/layout_entity.test create mode 100644 docroot/core/modules/simpletest/tests/themes/test_theme/templates/taxonomy-term--1.tpl.php create mode 100644 docroot/core/modules/simpletest/tests/themes/test_theme/templates/user-profile--2.tpl.php mode change 100755 => 100644 docroot/core/scripts/backdrop.sh mode change 100755 => 100644 docroot/core/scripts/dump-database-d7.sh mode change 100755 => 100644 docroot/core/scripts/generate-d7-content.sh mode change 100755 => 100644 docroot/core/scripts/install.sh mode change 100755 => 100644 docroot/core/scripts/password-hash.sh mode change 100755 => 100644 docroot/core/scripts/run-tests.sh mode change 100755 => 100644 docroot/core/scripts/test.script diff --git a/docroot/core/includes/bootstrap.inc b/docroot/core/includes/bootstrap.inc index d762c43a..e2f69c75 100644 --- a/docroot/core/includes/bootstrap.inc +++ b/docroot/core/includes/bootstrap.inc @@ -7,7 +7,7 @@ /** * The current system version. */ -define('BACKDROP_VERSION', '1.28.2'); +define('BACKDROP_VERSION', '1.29.0'); /** * Core API compatibility. diff --git a/docroot/core/includes/database/mysql/database.inc b/docroot/core/includes/database/mysql/database.inc index 4a3fc993..9a478ebe 100644 --- a/docroot/core/includes/database/mysql/database.inc +++ b/docroot/core/includes/database/mysql/database.inc @@ -199,6 +199,29 @@ class DatabaseConnection_mysql extends DatabaseConnection { return 'mysql'; } + /** + * Returns the version of the database server. + */ + public function version() { + $version = parent::version(); + + // Some MariaDB version strings prepend a fake MySQL version to the front, + // which is always "5.5.5-". This was done to so that old MySQL clients + // could connect to newer MariaDB servers. + // For example, 5.5.5-10.5.11-MariaDB: + // - 5.5.5 is a fake MySQL version. + // - 10.5.11 would be the actual MariaDB version. + // See https://github.com/MariaDB/server/blob/f6633bf058802ad7da8196d01fd19d75c53f7274/include/mysql_com.h#L42 + // Remove any leading MySQL 5.5.5- prefixes: + $regex = '/^(?:5\.5\.5-)?(\d+\.\d+\.\d+.*-mariadb.*)/i'; + preg_match($regex, $version, $matches); + if (!empty($matches[1])) { + $version = $matches[1]; + } + + return $version; + } + public function databaseType() { return 'mysql'; } diff --git a/docroot/core/includes/drupal.inc b/docroot/core/includes/drupal.inc index 9f1f5693..3289f22d 100644 --- a/docroot/core/includes/drupal.inc +++ b/docroot/core/includes/drupal.inc @@ -1711,6 +1711,7 @@ function drupal_tempnam($directory, $prefix) { * Creates a .htaccess file in the given directory. * * @deprecated since 1.0.0 + * @see file_save_htaccess() */ function file_create_htaccess($directory, $private = TRUE, $force_overwrite = FALSE) { watchdog_deprecated_function('drupal', __FUNCTION__); diff --git a/docroot/core/includes/file.inc b/docroot/core/includes/file.inc index d863e864..fd82d649 100644 --- a/docroot/core/includes/file.inc +++ b/docroot/core/includes/file.inc @@ -514,8 +514,8 @@ function file_save_htaccess($directory, $private = TRUE, $force_overwrite = FALS $htaccess_lines = file_htaccess_lines($private); - // Write the .htaccess file. - if (file_put_contents($htaccess_path, $htaccess_lines)) { + // Write the .htaccess file. Suppress any PHP error and write to watchdog. + if (@file_put_contents($htaccess_path, $htaccess_lines)) { backdrop_chmod($htaccess_path, 0444); } else { @@ -2372,7 +2372,8 @@ function file_scan_directory($dir, $mask, $options = array(), $depth = 0) { $uri = "$dir/$filename"; $uri = file_stream_wrapper_uri_normalize($uri); if (is_dir($uri) && $options['recurse']) { - // Give priority to files in this folder by merging them in after any subdirectory files. + // Give priority to files in this folder by merging them in after any + // subdirectory files. $files = array_merge(file_scan_directory($uri, $mask, $options, $depth + 1), $files); } elseif ($depth >= $options['min_depth'] && preg_match($mask, $filename)) { diff --git a/docroot/core/includes/install.core.inc b/docroot/core/includes/install.core.inc index aad986d3..78a3d873 100644 --- a/docroot/core/includes/install.core.inc +++ b/docroot/core/includes/install.core.inc @@ -38,6 +38,19 @@ define('INSTALL_TASK_RUN_IF_REACHED', 2); */ define('INSTALL_TASK_RUN_IF_NOT_COMPLETED', 3); +/** + * The URI used to fetch the list of available translations from the + * localization server. + */ +define('INSTALL_AVAILABLE_TRANSLATIONS_URI', 'https://localize.backdropcms.org/translate/available-languages'); + +/** + * The server URL where the interface translation files can be downloaded. + * Tokens in the pattern will be replaced by appropriate values for the + * required translation file. + */ +define('INSTALL_LOCALIZATION_SERVER_PATTERN', 'https://localize.backdropcms.org/files/l10n_packager/%core/%project/%project-%version.%language.po'); + /** * Installs Backdrop either interactively or via an array of passed-in settings. * @@ -204,7 +217,7 @@ function install_state_defaults() { * This function performs commands that must run at the beginning of every page * request. It throws an exception if the installation should not proceed. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. This is * modified with information gleaned from the beginning of the page request. * @@ -318,7 +331,7 @@ function install_begin_request(&$install_state) { * user, or until a page redirect is required. Otherwise, tasks will be * attempted until the installation is finished. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. This is * passed along to each task, so it can be modified if necessary. * @@ -367,7 +380,7 @@ function install_run_tasks(&$install_state) { * @param $task * An array of information about the task to be run as returned by * hook_install_tasks(). - * @param $install_state + * @param array $install_state * An array of information about the current installation state. This is * passed in by reference so that it can be modified by the task. * @@ -491,7 +504,7 @@ function install_run_task($task, &$install_state) { * You can override this using hook_install_tasks() or * hook_install_tasks_alter(). * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. * * @return @@ -525,7 +538,7 @@ function install_tasks_to_perform($install_state) { * hasn't been selected yet, we don't yet know which profile tasks will be * available). * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. * * @return @@ -543,6 +556,23 @@ function install_tasks($install_state) { } $display_select_profile = $hidden_profile_count > 1 && count($install_state['profiles']) != 1; + // Determine whether a translation file must be downloaded during the + // 'install_download_translation' task. Download when a non-English language + // is selected, but no translation is yet in the translations directory. + $needs_download = FALSE; + if (isset($install_state['parameters']['langcode']) && $install_state['parameters']['langcode'] != 'en') { + if (isset($install_state['translations'])) { + $local_file_found = FALSE; + foreach($install_state['translations'] as $translation_file) { + if ($translation_file->langcode == $install_state['parameters']['langcode']) { + $local_file_found = TRUE; + break; + } + } + $needs_download = !$local_file_found; + } + } + // Start with the core installation tasks that run before handing control // to the installation profile. $tasks = array( @@ -550,6 +580,9 @@ function install_tasks($install_state) { 'display_name' => st('Choose language'), 'run' => INSTALL_TASK_RUN_IF_REACHED, ), + 'install_download_translation' => array( + 'run' => $needs_download ? INSTALL_TASK_RUN_IF_REACHED : INSTALL_TASK_SKIP, + ), 'install_select_profile' => array( 'display_name' => st('Choose profile'), 'display' => $display_select_profile, @@ -652,7 +685,7 @@ function install_tasks($install_state) { * The output of this function is a list suitable for sending to * theme_task_list(). * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. * * @return @@ -676,7 +709,7 @@ function install_tasks_to_display($install_state) { * * The output of this function is suitable for sending to install_goto(). * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. * * @return @@ -691,7 +724,7 @@ function install_redirect_url($install_state) { /** * Returns the complete URL redirected to during an installation request. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. * * @return @@ -713,7 +746,7 @@ function install_full_redirect_url($install_state) { * * @param $output * The content to display on the main part of the page. - * @param $install_state + * @param array $install_state * An array of information about the current installation state. */ function install_display_output($output, $install_state) { @@ -752,17 +785,11 @@ function install_display_output($output, $install_state) { /** * Verifies the requirements for installing Backdrop. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. * * @return string|NULL * A themed status report, or an exception if there are requirement errors. - * If there are only requirement warnings, a themed status report is shown - * initially, but the user is allowed to bypass it by providing 'continue=1' - * in the URL. Otherwise, no output is returned, so that the next task can be - * run in the same page request. - * - * @throws Exception */ function install_verify_requirements(&$install_state) { // Check the installation requirements for Backdrop and this profile. @@ -771,46 +798,13 @@ function install_verify_requirements(&$install_state) { // Verify existence of all required modules. $requirements += backdrop_verify_profile($install_state); - // Check the severity of the requirements reported. - $severity = backdrop_requirements_severity($requirements); - - // If there are errors, always display them. If there are only warnings, skip - // them if the user has provided a URL parameter acknowledging the warnings - // and indicating a desire to continue anyway. - // @see backdrop_requirements_url(). - if ($severity == REQUIREMENT_ERROR || ($severity == REQUIREMENT_WARNING && empty($install_state['parameters']['continue']))) { - if ($install_state['interactive']) { - backdrop_set_title(st('Requirements problem')); - $status_report = st('Resolve the problems and try again.', array('!url' => check_url(backdrop_requirements_url($severity)))); - $status_report .= '

'; - $status_report .= theme('status_report', array('requirements' => $requirements, 'phase' => 'install')); - return $status_report; - } - else { - // Throw an exception showing any unmet requirements. - $failures = array(); - foreach ($requirements as $requirement) { - // Skip warnings altogether for non-interactive installations; these - // proceed in a single request so there is no good opportunity (and no - // good method) to warn the user anyway. - if (isset($requirement['severity']) && $requirement['severity'] == REQUIREMENT_ERROR) { - $failures[] = $requirement['title'] . ': ' . $requirement['value'] . "\n\n" . $requirement['description']; - } - } - if (!empty($failures)) { - throw new Exception(implode("\n\n", $failures)); - } - } - } - - // Non-interactive requirements check. - return NULL; + return install_display_requirements($install_state, $requirements); } /** * Installation task; install the Backdrop system module. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. */ function install_system_module(&$install_state) { @@ -955,7 +949,7 @@ function install_config_location(&$install_state) { /** * Form constructor for a form to configure and rewrite settings.php. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. * * @see install_settings_form_validate() @@ -1115,7 +1109,7 @@ function install_find_profiles() { /** * Selects which profile to install. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. The chosen * profile will be added here, if it was not already selected previously, as * will a list of all available profiles. @@ -1306,15 +1300,16 @@ function install_find_translations() { function install_find_translation_files($langcode = NULL) { $directory = settings_get('locale_translate_file_directory', conf_path() . '/files/translations'); // @todo: Remove the "drupal" check in 2.x (assuming we have a localization - // server by then). - $files = file_scan_directory($directory, '!(install|drupal|backdrop(cms)?)(-[\d\.]+)?\.' . (!empty($langcode) ? preg_quote($langcode, '!') : '[^\.]+') . '\.po$!', array('recurse' => FALSE)); + // server by then). + $files = file_scan_directory($directory, '!(install|drupal|backdrop(cms)?)(-[\d\.x]+)?\.' . (!empty($langcode) ? preg_quote($langcode, '!') : '[^\.]+') . '\.po$!', array('recurse' => FALSE)); + return $files; } /** * Installation task; select which language to use. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. The chosen * langcode will be added here, if it was not already selected previously, as * will a list of all available languages. @@ -1332,13 +1327,15 @@ function install_select_language(&$install_state) { // Find all available translations. $files = install_find_translations(); $install_state['translations'] += $files; + include_once BACKDROP_ROOT . '/core/includes/standard.inc'; + + $standard_languages = install_get_available_translations($files); if (!empty($_POST['langcode'])) { - foreach ($files as $file) { - if ($_POST['langcode'] == $file->langcode) { - $install_state['parameters']['langcode'] = $file->langcode; - return NULL; - } + $langcode = $_POST['langcode']; + if ($langcode == 'en' || isset($standard_languages[$langcode])) { + $install_state['parameters']['langcode'] = $langcode; + return; } } @@ -1347,7 +1344,7 @@ function install_select_language(&$install_state) { // performing an interactive installation, inform the user that the // installer can be translated. Otherwise we assume the user knows what he // is doing. - if (count($files) == 1) { + if (count($standard_languages) == 1) { if ($install_state['interactive']) { $directory = settings_get('locale_translate_file_directory', conf_path() . '/files/translations'); @@ -1355,6 +1352,9 @@ function install_select_language(&$install_state) { if (!empty($install_state['parameters']['translate'])) { $output = '

Follow these steps to translate Backdrop into your language:

'; $output .= '
    '; + if (!install_check_localization_server(INSTALL_AVAILABLE_TRANSLATIONS_URI)) { + $output .= '
  1. Ensure that you are connected to the internet, since Backdrop is able to automatically download new translations. Alternatively,
  2. '; + } $output .= '
  3. Download a translation from the translation server.
  4. '; $output .= '
  5. Place it into the following directory:
    ' . $directory . '
  6. '; $output .= '
'; @@ -1370,15 +1370,15 @@ function install_select_language(&$install_state) { } else { include_once BACKDROP_ROOT . '/core/includes/form.inc'; - $elements = backdrop_get_form('install_select_language_form', $files); + $elements = backdrop_get_form('install_select_language_form', $files, $standard_languages); $output = backdrop_render($elements); } return $output; } // One language, but not an interactive installation. Assume the user // knows what he is doing. - $file = current($files); - $install_state['parameters']['langcode'] = $file->langcode; + $single_language = reset($standard_languages); + $install_state['parameters']['langcode'] = key($single_language); return NULL; } else { @@ -1390,7 +1390,7 @@ function install_select_language(&$install_state) { if ($install_state['interactive']) { backdrop_set_title(st('Choose language')); include_once BACKDROP_ROOT . '/core/includes/form.inc'; - $elements = backdrop_get_form('install_select_language_form', $files); + $elements = backdrop_get_form('install_select_language_form', $files, $standard_languages); return backdrop_render($elements); } else { @@ -1409,30 +1409,29 @@ function install_select_language(&$install_state) { * * @ingroup forms */ -function install_select_language_form($form, &$form_state, $files) { +function install_select_language_form($form, &$form_state, $files, $standard_languages) { include_once BACKDROP_ROOT . '/core/includes/standard.inc'; include_once BACKDROP_ROOT . '/core/includes/locale.inc'; - $standard_languages = standard_language_list(); $select_options = array(); - $languages = array(); + $browser_options = array(); - foreach ($files as $file) { - if (isset($standard_languages[$file->langcode])) { - // Build a list of select list options based on files we found. - $select_options[$file->langcode] = $standard_languages[$file->langcode][1]; - } - else { - // If the language was not found in standard.inc, display its langcode. - $select_options[$file->langcode] = $file->langcode; - } + $form['#title'] = st('Choose language'); + + // Build a select list with language names in native language for the user + // to choose from. And build a list of available languages for the browser + // to select the language default from. + // Select lists based on all standard languages. + foreach ($standard_languages as $langcode => $language_names) { + $select_options[$langcode] = isset($language_names[1]) ? $language_names[1] : $language_names[0]; // Build a list of languages simulated for browser detection. - $languages[$file->langcode] = (object) array( - 'langcode' => $file->langcode, + $browser_options[$langcode] = (object) array( + 'langcode' => $langcode, ); } + asort($select_options); - $browser_langcode = locale_language_from_browser($languages); + $browser_langcode = locale_language_from_browser($browser_options); $form['langcode'] = array( '#type' => 'select', '#options' => $select_options, @@ -1440,7 +1439,7 @@ function install_select_language_form($form, &$form_state, $files) { '#default_value' => !empty($browser_langcode) ? $browser_langcode : 'en', ); - if (count($files) == 1) { + if (count($standard_languages) == 1) { $form['help'] = array( '#type' => 'help', '#markup' => '' . st('Learn how to install Backdrop in other languages') . '', @@ -1454,6 +1453,378 @@ function install_select_language_form($form, &$form_state, $files) { return $form; } +/** + * Provide a list of available translation files. + * + * @return array + * An array of language codes. + */ +function install_get_available_translations($files) { + $available_translations = array(); + $response = backdrop_http_request(INSTALL_AVAILABLE_TRANSLATIONS_URI, array( + 'timeout' => 5, + )); + $data = array(); + if ($response->code === '200') { + $data = json_decode($response->data, TRUE); + } + + if ($data) { + $available_translations = array_keys($data); + } + elseif (count($files) > 1) { + foreach($files as $translation_file) { + $available_translations[] = $translation_file->langcode; + } + } + + // English is always available. + $available_translations[] = 'en'; + $standard_languages = standard_language_list(); + return array_intersect_key($standard_languages, array_flip(array_unique($available_translations))); +} + +/** + * Download a translation file for the selected language. + * + * @param array $install_state + * An array of information about the current installation state. + * + * @return string + * A themed status report, or an exception if there are requirement errors. + * Upon successful download the page is reloaded and no output is returned. + */ +function install_download_translation(array &$install_state) { + // Check whether all conditions are met to download. Download the translation + // if possible. + $requirements = install_check_translation_download($install_state['parameters']['langcode']); + // Render requirements if any warnings or errors returned. + if ($output = install_display_requirements($install_state, $requirements)) { + return $output; + } + + // The download was successful, reload the page in the new language. + $install_state['translations'][$install_state['parameters']['langcode']] = TRUE; +} + +/** + * Attempts to get a file using a HTTP request and to store it locally. + * + * @param string $uri + * The URI of the file to grab. + * @param string $destination + * Stream wrapper URI specifying where the file should be placed. If a + * directory path is provided, the file is saved into that directory under its + * original name. If the path contains a filename as well, that one will be + * used instead. + * + * @return bool + * TRUE on success, FALSE on failure. + */ +function install_retrieve_file($uri, $destination) { + $parsed_url = parse_url($uri); + + if (is_dir(backdrop_realpath($destination))) { + // Prevent URIs with triple slashes when gluing parts together. + $path = str_replace('///', '//', "$destination/") . backdrop_basename($parsed_url['path']); + } + else { + $path = $destination; + } + + $response = backdrop_http_request($uri, array('timeout' => 5)); + if ($response->code != 200) { + return FALSE; + } + + $data = $response->data; + if (empty($data)) { + return FALSE; + } + + return file_put_contents($path, $data) !== FALSE; +} + +/** + * Checks if the localization server can be contacted. + * + * @param string $uri + * The URI to contact. + * + * @return string + * TRUE if the URI was contacted successfully, FALSE if not. + */ +function install_check_localization_server($uri) { + // Check only if a previous check in this page request returned TRUE. + $online = &backdrop_static(__FUNCTION__, TRUE); + if (!$online) { + return FALSE; + } + + $options = array( + 'method' => 'HEAD', + 'timeout' => 5, + ); + $response = backdrop_http_request($uri, $options); + if ($response->code != 200) { + $online = FALSE; + return $online; + } + return TRUE; +} + +/** + * Checks installation requirements, downloads a translation, and reports any + * errors. + * + * This function is only called if the user selects a translation that is not + * English and for which there is no local translation file. + * + * @param string $langcode + * Language code to check for download. + * + * @return array + * Requirements compliance array. If the translation cannot be downloaded this + * will contain a requirements error with detailed information. + * + * @see install_state_defaults() + * @see install_download_translation() + */ +function install_check_translation_download($langcode) { + $requirements = array(); + + $readable = FALSE; + $writable = FALSE; + $translation_available = FALSE; + + $files_directory = conf_path() . '/files'; + $translations_directory = settings_get('locale_translate_file_directory', conf_path() . '/files/translations'); + $translations_directory_exists = FALSE; + $online = FALSE; + + // First attempt to create or make writable the files directory. + file_prepare_directory($files_directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS); + + // Then, attempt to create or make writable the translations directory. + file_prepare_directory($translations_directory, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS); + + // Get values so the requirements errors can be specific. + if (backdrop_verify_install_file($translations_directory, FILE_EXIST, 'dir')) { + $readable = is_readable($translations_directory); + $writable = is_writable($translations_directory); + $translations_directory_exists = TRUE; + } + + $version = BACKDROP_VERSION; + + // For dev releases, remove the '-dev' part and trust the translation server + // to fall back to the latest stable release for that branch. + // @see locale_translation_build_projects() + if (preg_match("/^(\d+\.).*-(dev|preview)$/", $version, $matches)) { + // Example match: 1.28-dev => 1.x (Backdrop core). + $version = $matches[1] . 'x'; + } + + // Build URL for the translation file and the translation server. + $variables = array( + '%project' => 'backdropcms', + '%version' => $version, + '%core' => 'all', + '%language' => $langcode, + ); + $translation_url = strtr(INSTALL_LOCALIZATION_SERVER_PATTERN, $variables); + + $elements = parse_url($translation_url); + $server_url = $elements['scheme'] . '://' . $elements['host']; + + // Build the language name for display. + include_once BACKDROP_ROOT . '/core/includes/standard.inc'; + + $languages = standard_language_list(); + $language = isset($languages[$langcode]) ? $languages[$langcode][0] : $langcode; + + // Check if any of the desired translation files are available or if the + // translation server can be reached. In other words, check if we are online + // and have an internet connection. + if (install_check_localization_server($server_url)) { + $online = TRUE; + } + if ($online) { + $translation_available = install_check_localization_server($translation_url); + } + + // If the translations directory does not exist, throw an error. + if (!$translations_directory_exists) { + $requirements['translations directory exists'] = array( + 'title' => st('Translations directory'), + 'value' => st('The translations directory does not exist.'), + 'severity' => REQUIREMENT_ERROR, + 'description' => st('The installation process requires a translations directory to be created under %translations_directory. The How to install Backdrop CMS documentation page offers help on this and other topics.', array( + '%translations_directory' => $translations_directory, + '!install_docs' => 'https://docs.backdropcms.org/documentation/installation-instructions', + )), + ); + } + else { + $requirements['translations directory exists'] = array( + 'title' => st('Translations directory'), + 'value' => st('The directory %translations_directory exists.', array( + '%translations_directory' => $translations_directory, + )), + ); + // If the translations directory is not readable, throw an error. + if (!$readable) { + $requirements['translations directory readable'] = array( + 'title' => st('Translations directory'), + 'value' => st('The translations directory is not readable.'), + 'severity' => REQUIREMENT_ERROR, + 'description' => st('The installer requires read permissions to %translations_directory at all times. The File permissions and ownership documentation section offers help on this and other topics.', array( + '%translations_directory' => $translations_directory, + '!handbook_url' => 'https://docs.backdropcms.org/documentation/file-permissions-and-ownership', + )), + ); + } + // If translations directory is not writable, throw an error. + if (!$writable) { + $requirements['translations directory writable'] = array( + 'title' => st('Translations directory'), + 'value' => st('The translations directory is not writable.'), + 'severity' => REQUIREMENT_ERROR, + 'description' => st('The installer requires write permissions to the %translations_directory directory during the installation process. The File permissions and ownership documentation section offers help on this and other topics.', array( + '%translations_directory' => $translations_directory, + '!handbook_url' => 'https://docs.backdropcms.org/documentation/file-permissions-and-ownership', + )), + ); + } + else { + $requirements['translations directory writable'] = array( + 'title' => st('Translations directory'), + 'value' => st('The translations directory is writable.'), + ); + } + } + + // If the translations server can not be contacted, throw an error. + if (!$online) { + $requirements['online'] = array( + 'title' => st('Internet'), + 'value' => st('The translation server is offline or cannot be reached.'), + 'severity' => REQUIREMENT_ERROR, + 'description' => st('The installer was unable to contact the translation server to download a translation file. Check your internet connection and verify that your website can reach the translation server at @server_url , or continue in English and translate your website later.', array( + '!server_url' => $server_url, + '@server_url' => $server_url, + '!url' => $_SERVER['SCRIPT_NAME'], + )), + ); + } + else { + $requirements['online'] = array( + 'title' => st('Internet'), + 'value' => st('The translation server is online.'), + ); + // If translation file is not found at the translation server, throw an + // error. + if (!$translation_available) { + $requirements['translation available'] = array( + 'title' => st('Translation'), + 'value' => st('The %language translation is not available.', array( + '%language' => $language, + )), + 'severity' => REQUIREMENT_ERROR, + 'description' => st('The %language translation file is not available at the translation server. Choose a different language or select English and translate your website later.', array( + '%language' => $language, + '!url' => $_SERVER['SCRIPT_NAME'], + )), + ); + } + else { + $requirements['translation available'] = array( + 'title' => st('Translation'), + 'value' => st('The %language translation is available.', array( + '%language' => $language, + )), + ); + } + } + + if ($translations_directory_exists && $readable && $writable && $translation_available) { + $translation_downloaded = install_retrieve_file($translation_url, $translations_directory); + + if (!$translation_downloaded) { + $requirements['translation downloaded'] = array( + 'title' => st('Translation'), + 'value' => st('The %language translation could not be downloaded.', array( + '%language' => $language, + )), + 'severity' => REQUIREMENT_ERROR, + 'description' => st('The %language translation file could not be downloaded. Choose a different language or select English and translate your website later.', array( + '%language' => $language, + '!url' => $_SERVER['SCRIPT_NAME'], + )), + ); + } + } + + return $requirements; +} + +/** + * Verifies the requirements for installing Backdrop. + * + * @param array $install_state + * An array of information about the current installation state. + * + * @return string|NULL + * A themed status report, or an exception if there are requirement errors. + * If there are only requirement warnings, a themed status report is shown + * initially, but the user is allowed to bypass it by providing 'continue=1' + * in the URL. Otherwise, no output is returned, so that the next task can be + * run in the same page request. + * + * @throws Exception + */ +function install_display_requirements($install_state, $requirements) { + // Check the severity of the requirements reported. + $severity = backdrop_requirements_severity($requirements); + + // If there are errors, always display them. If there are only warnings, skip + // them if the user has provided a URL parameter acknowledging the warnings + // and indicating a desire to continue anyway. + // @see backdrop_requirements_url(). + if ($severity == REQUIREMENT_ERROR || ($severity == REQUIREMENT_WARNING && empty($install_state['parameters']['continue']))) { + if ($install_state['interactive']) { + backdrop_set_title(st('Requirements problem')); + $status_report = st('Resolve the problems and try again.', array('!url' => check_url(backdrop_requirements_url($severity)))); + $status_report .= '

'; + $status_report .= theme( + 'status_report', array( + 'requirements' => $requirements, + 'phase' => 'install', + ) + ); + return $status_report; + } + else { + // Throw an exception showing any unmet requirements. + $failures = array(); + foreach ($requirements as $requirement) { + // Skip warnings altogether for non-interactive installations; these + // proceed in a single request so there is no good opportunity (and no + // good method) to warn the user anyway. + if (isset($requirement['severity']) && $requirement['severity'] == REQUIREMENT_ERROR) { + $failures[] = $requirement['title'] . ': ' . $requirement['value'] . "\n\n" . $requirement['description']; + } + } + if (!empty($failures)) { + throw new Exception(implode("\n\n", $failures)); + } + } + } + + // Non-interactive requirements check. + return NULL; +} + /** * Indicates that there are no profiles available. */ @@ -1509,7 +1880,7 @@ function install_load_profile(&$install_state) { /** * Performs a full bootstrap of Backdrop during installation. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. */ function install_bootstrap_full(&$install_state) { @@ -1519,7 +1890,7 @@ function install_bootstrap_full(&$install_state) { /** * Installs required modules via a batch process. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. * * @return @@ -1572,7 +1943,7 @@ function install_profile_modules(&$install_state) { /** * Imports languages via a batch process during installation. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. * * @return array|NULL @@ -1619,7 +1990,7 @@ function install_import_translations(&$install_state) { /** * Form constructor for a form to configure the new site. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. * * @see install_configure_form_validate() @@ -1656,7 +2027,7 @@ function install_configure_form($form, &$form_state, &$install_state) { /** * Installation task; finish importing files at end of installation. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. * * @return @@ -1675,7 +2046,7 @@ function install_import_translations_remaining(&$install_state) { /** * Finishes importing files at end of installation. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. * * @return @@ -1823,7 +2194,7 @@ function install_check_requirements($install_state) { /** * Form constructor for a site configuration form. * - * @param $install_state + * @param array $install_state * An array of information about the current installation state. * * @see install_configure_form() diff --git a/docroot/core/includes/mail.inc b/docroot/core/includes/mail.inc index 45badfb2..5f210cc4 100644 --- a/docroot/core/includes/mail.inc +++ b/docroot/core/includes/mail.inc @@ -201,20 +201,20 @@ function backdrop_mail($module, $key, $to, $language, $params = array(), $reply * composed using backdrop_mail(). * * An implementation needs to implement the following methods: - * - format: Allows to preprocess, format, and postprocess a mail - * message before it is passed to the sending system. By default, all messages - * may contain HTML and are converted to plain-text by the DefaultMailSystem + * - format: Allows to preprocess, format, and post-process a mail message + * before it is passed to the sending system. By default, all messages may + * contain HTML and are converted to plain-text by the DefaultMailSystem * implementation. For example, an alternative implementation could override * the default implementation and additionally sanitize the HTML for usage in * a MIME-encoded email, but still invoking the DefaultMailSystem * implementation to generate an alternate plain-text version for sending. - * - mail: Sends a message through a custom mail sending engine. - * By default, all messages are sent via PHP's mail() function by the - * DefaultMailSystem implementation. + * - mail: Sends a message through a custom mail sending engine. By default, all + * messages are sent via PHP's mail() function by the DefaultMailSystem + * implementation. * * The selection of a particular implementation is controlled via the config - * 'system.mail', which contains a keyed array. The default implementation - * is the class whose name is the value of 'default-system' key. A more specific + * 'system.mail', which contains a keyed array. The default implementation is + * the class whose name is the value of 'default-system' key. A more specific * match first to key and then to module will be used in preference to the * default. To specify a different class for all mail sent by one module, set * the class name as the value for the key corresponding to the module name. To @@ -569,7 +569,7 @@ function backdrop_html_to_text($string, $allowed_tags = NULL) { */ function _backdrop_wrap_mail_line(&$line, $key, $values) { // Use soft-breaks only for purely quoted or unindented text. - $line = wordwrap($line, 77 - $values['length'], $values['soft'] ? " \n" : "\n"); + $line = wordwrap($line, 77 - $values['length'], $values['soft'] ? " \n" : "\n"); // Break really long words at the maximum width allowed. $line = wordwrap($line, 996 - $values['length'], $values['soft'] ? " \n" : "\n", TRUE); } @@ -623,6 +623,6 @@ function _backdrop_html_to_text_pad($text, $pad, $prefix = '') { $p = -1; } $n = max(0, 79 - (strlen($text) - $p) - strlen($prefix)); - // Add prefix and padding, and restore linebreak. + // Add prefix and padding, and restore line break. return $text . $prefix . str_repeat($pad, $n) . "\n"; } diff --git a/docroot/core/includes/theme.inc b/docroot/core/includes/theme.inc index 47355bab..84eb2c58 100644 --- a/docroot/core/includes/theme.inc +++ b/docroot/core/includes/theme.inc @@ -931,10 +931,10 @@ function backdrop_find_base_themes($themes, $key, $used_keys = array()) { * @subsection sub_preprocess_templates Preprocessing for Template Files * If the implementation is a template file, several functions are called * before the template file is invoked, to modify the $variables array. These - * fall into the "preprocessing" phase and the "processing" phase, and are - * executed (if they exist), in the following order (note that in the following - * list, HOOK indicates the theme hook name, MODULE indicates a module name, - * THEME indicates a theme name, and ENGINE indicates a theme engine name): + * fall into the "preprocessing" phase, and are executed (if they exist) in the + * following order (note that in the following list, HOOK indicates the theme + * hook name, MODULE indicates a module name, THEME indicates a theme name, and + * ENGINE indicates a theme engine name): * - template_preprocess(&$variables, $hook): Creates a default set of * variables for all theme hooks with template implementations. * - template_preprocess_HOOK(&$variables): Should be implemented by the module @@ -952,11 +952,6 @@ function backdrop_find_base_themes($themes, $key, $used_keys = array()) { * variables for all theme hooks with template implementations. * - THEME_preprocess_HOOK(&$variables): Allows the theme to set necessary * variables specific to the particular theme hook. - * - MODULE_process(&$variables, $hook): hook_process() is invoked on all - * implementing modules. - * - MODULE_process_HOOK(&$variables): hook_process_HOOK() is invoked on - * on all implementing modules, so that modules that didn't define the theme - * hook can alter the variables. * * @subsection sub_preprocess_theme_funcs Preprocessing for Theme Functions * If the implementation is a function, only the theme-hook-specific preprocess @@ -1012,11 +1007,16 @@ function backdrop_find_base_themes($themes, $key, $used_keys = array()) { * @see themeable * @see hook_theme() * @see template_preprocess() + * + * @since 1.0.0 The template process layer and process functions (e.g. + * template_process_HOOK(), MODULE_process_HOOK(), THEME_process_HOOK()) have + * been removed. + * See https://docs.backdropcms.org/change-records/removed-the-theme-process-layer */ function theme($hook, $variables = array()) { // If called before all modules are loaded, we do not necessarily have a full - // theme registry to work with, and therefore cannot process the theme - // request properly. See also _theme_load_registry(). + // theme registry to work with, and therefore cannot process the theme request + // properly. See also _theme_load_registry(). if (!module_load_all(NULL) && !defined('MAINTENANCE_MODE')) { throw new Exception(t('theme() may not be called until all modules are loaded.')); } diff --git a/docroot/core/layouts/boxton/boxton.info b/docroot/core/layouts/boxton/boxton.info index 52e7e283..40ee5bf9 100644 --- a/docroot/core/layouts/boxton/boxton.info +++ b/docroot/core/layouts/boxton/boxton.info @@ -25,7 +25,7 @@ preview = boxton.png ; Include the Bootstrap4 Grid System libraries[] = bootstrap4-gs -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/layouts/geary/geary.info b/docroot/core/layouts/geary/geary.info index 347c9b7b..8e5bfd82 100644 --- a/docroot/core/layouts/geary/geary.info +++ b/docroot/core/layouts/geary/geary.info @@ -27,7 +27,7 @@ preview = geary.png ; Include the Bootstrap4 Grid System libraries[] = bootstrap4-gs -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/layouts/harris/harris.info b/docroot/core/layouts/harris/harris.info index 17a29a07..a3736dbb 100644 --- a/docroot/core/layouts/harris/harris.info +++ b/docroot/core/layouts/harris/harris.info @@ -27,7 +27,7 @@ preview = harris.png ; Include the Bootstrap4 Grid System libraries[] = bootstrap4-gs -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/layouts/legacy/one_column/one_column.info b/docroot/core/layouts/legacy/one_column/one_column.info index 47bc75f9..859bb41c 100644 --- a/docroot/core/layouts/legacy/one_column/one_column.info +++ b/docroot/core/layouts/legacy/one_column/one_column.info @@ -18,7 +18,7 @@ regions[footer] = Footer ; Modify this line if you would like to change the default in this layout. default region = content -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/layouts/legacy/three_three_four_column/three_three_four_column.info b/docroot/core/layouts/legacy/three_three_four_column/three_three_four_column.info index 9a5c320a..57b67ba6 100644 --- a/docroot/core/layouts/legacy/three_three_four_column/three_three_four_column.info +++ b/docroot/core/layouts/legacy/three_three_four_column/three_three_four_column.info @@ -26,7 +26,7 @@ regions[footer] = Footer bottom ; Modify this line if you would like to change the default in this layout. default region = content -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/layouts/legacy/two_column/two_column.info b/docroot/core/layouts/legacy/two_column/two_column.info index 59d20f75..18a85b87 100644 --- a/docroot/core/layouts/legacy/two_column/two_column.info +++ b/docroot/core/layouts/legacy/two_column/two_column.info @@ -15,7 +15,7 @@ regions[footer] = Footer ; Modify this line if you would like to change the default in this layout. default region = content -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/layouts/legacy/two_column_flipped/two_column_flipped.info b/docroot/core/layouts/legacy/two_column_flipped/two_column_flipped.info index a2a43ebb..1650a37e 100644 --- a/docroot/core/layouts/legacy/two_column_flipped/two_column_flipped.info +++ b/docroot/core/layouts/legacy/two_column_flipped/two_column_flipped.info @@ -15,7 +15,7 @@ regions[footer] = Footer ; Modify this line if you would like to change the default in this layout. default region = content -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/layouts/moscone/moscone.info b/docroot/core/layouts/moscone/moscone.info index f66ed5af..2e41289f 100644 --- a/docroot/core/layouts/moscone/moscone.info +++ b/docroot/core/layouts/moscone/moscone.info @@ -26,7 +26,7 @@ preview = moscone.png ; Include the Bootstrap4 Grid System libraries[] = bootstrap4-gs -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/layouts/moscone_flipped/moscone_flipped.info b/docroot/core/layouts/moscone_flipped/moscone_flipped.info index 76322355..85085c16 100644 --- a/docroot/core/layouts/moscone_flipped/moscone_flipped.info +++ b/docroot/core/layouts/moscone_flipped/moscone_flipped.info @@ -26,7 +26,7 @@ preview = moscone-flipped.png ; Include the Bootstrap4 Grid System libraries[] = bootstrap4-gs -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/layouts/rolph/rolph.info b/docroot/core/layouts/rolph/rolph.info index 449ec6d9..e18e6aab 100644 --- a/docroot/core/layouts/rolph/rolph.info +++ b/docroot/core/layouts/rolph/rolph.info @@ -28,7 +28,7 @@ preview = rolph.png ; Include the Bootstrap4 Grid System libraries[] = bootstrap4-gs -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/layouts/simmons/simmons.info b/docroot/core/layouts/simmons/simmons.info index 036087db..8a75f470 100644 --- a/docroot/core/layouts/simmons/simmons.info +++ b/docroot/core/layouts/simmons/simmons.info @@ -34,7 +34,7 @@ file = simmons.php ; Default stylesheets for this layout ; stylesheets[all][] = simmons.css -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/layouts/sutro/sutro.info b/docroot/core/layouts/sutro/sutro.info index b7b0599e..98581514 100644 --- a/docroot/core/layouts/sutro/sutro.info +++ b/docroot/core/layouts/sutro/sutro.info @@ -27,7 +27,7 @@ preview = sutro.png ; Include the Bootstrap4 Grid System libraries[] = bootstrap4-gs -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/layouts/taylor/taylor.info b/docroot/core/layouts/taylor/taylor.info index 954a25fd..f8dd6ab1 100644 --- a/docroot/core/layouts/taylor/taylor.info +++ b/docroot/core/layouts/taylor/taylor.info @@ -27,7 +27,7 @@ preview = taylor.png ; Include the Bootstrap4 Grid System libraries[] = bootstrap4-gs -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/layouts/taylor_flipped/taylor_flipped.info b/docroot/core/layouts/taylor_flipped/taylor_flipped.info index cdc482b0..65f9cbac 100644 --- a/docroot/core/layouts/taylor_flipped/taylor_flipped.info +++ b/docroot/core/layouts/taylor_flipped/taylor_flipped.info @@ -27,7 +27,7 @@ preview = taylor-flipped.png ; Include the Bootstrap4 Grid System libraries[] = bootstrap4-gs -; Added by Backdrop CMS packaging script on 2024-07-03 +; Added by Backdrop CMS packaging script on 2024-09-15 project = backdrop -version = 1.28.2 -timestamp = 1720046843 +version = 1.29.0 +timestamp = 1726467067 diff --git a/docroot/core/misc/jquery-ui-compat.js b/docroot/core/misc/jquery-ui-compat.js new file mode 100644 index 00000000..64af42bd --- /dev/null +++ b/docroot/core/misc/jquery-ui-compat.js @@ -0,0 +1,10 @@ +/** + * @file + * Sets the compatibility flag for jQuery UI back to true. + * + * Core still uses "dialogClass" option, which is deprecated and since jQuery UI + * version 1.14.0 this flag defaults to false. + */ +(function ($) { + $.uiBackCompat = true; +})(jQuery); diff --git a/docroot/core/misc/jquery.color.js b/docroot/core/misc/jquery.color.js index 5fecb6a6..befbca2a 100644 --- a/docroot/core/misc/jquery.color.js +++ b/docroot/core/misc/jquery.color.js @@ -1,11 +1,11 @@ /*! - * jQuery Color Animations v2.2.0 + * jQuery Color Animations v3.0.0 * https://github.com/jquery/jquery-color * * Copyright OpenJS Foundation and other contributors * Released under the MIT license. - * http://jquery.org/license + * https://jquery.org/license * - * Date: Sun May 10 09:02:36 2020 +0200 + * Date: Wed May 15 16:49:44 2024 +0200 */ -!function(r,t){"function"==typeof define&&define.amd?define(["jquery"],t):"object"==typeof exports?module.exports=t(require("jquery")):t(r.jQuery)}(this,function(s,f){var u,n={},t=n.toString,c=/^([\-+])=\s*(\d+\.?\d*)/,r=[{re:/rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(r){return[r[1],r[2],r[3],r[4]]}},{re:/rgba?\(\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,parse:function(r){return[2.55*r[1],2.55*r[2],2.55*r[3],r[4]]}},{re:/#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})?/,parse:function(r){return[parseInt(r[1],16),parseInt(r[2],16),parseInt(r[3],16),r[4]?(parseInt(r[4],16)/255).toFixed(2):1]}},{re:/#([a-f0-9])([a-f0-9])([a-f0-9])([a-f0-9])?/,parse:function(r){return[parseInt(r[1]+r[1],16),parseInt(r[2]+r[2],16),parseInt(r[3]+r[3],16),r[4]?(parseInt(r[4]+r[4],16)/255).toFixed(2):1]}},{re:/hsla?\(\s*(\d+(?:\.\d+)?)\s*,\s*(\d+(?:\.\d+)?)\%\s*,\s*(\d+(?:\.\d+)?)\%\s*(?:,\s*(\d?(?:\.\d+)?)\s*)?\)/,space:"hsla",parse:function(r){return[r[1],r[2]/100,r[3]/100,r[4]]}}],p=s.Color=function(r,t,n,e){return new s.Color.fn.parse(r,t,n,e)},d={rgba:{props:{red:{idx:0,type:"byte"},green:{idx:1,type:"byte"},blue:{idx:2,type:"byte"}}},hsla:{props:{hue:{idx:0,type:"degrees"},saturation:{idx:1,type:"percent"},lightness:{idx:2,type:"percent"}}}},h={byte:{floor:!0,max:255},percent:{max:1},degrees:{mod:360,floor:!0}},i=p.support={},e=s("

")[0],b=s.each;function g(r){return null==r?r+"":"object"==typeof r?n[t.call(r)]||"object":typeof r}function x(r,t,n){var e=h[t.type]||{};return null==r?n||!t.def?null:t.def:(r=e.floor?~~r:parseFloat(r),isNaN(r)?t.def:e.mod?(r+e.mod)%e.mod:Math.min(e.max,Math.max(0,r)))}function l(e){var o=p(),a=o._rgba=[];return e=e.toLowerCase(),b(r,function(r,t){var n=t.re.exec(e),n=n&&t.parse(n),t=t.space||"rgba";if(n)return n=o[t](n),o[d[t].cache]=n[d[t].cache],a=o._rgba=n._rgba,!1}),a.length?("0,0,0,0"===a.join()&&s.extend(a,u.transparent),o):u[e]}function o(r,t,n){return 6*(n=(n+1)%1)<1?r+(t-r)*n*6:2*n<1?t:3*n<2?r+(t-r)*(2/3-n)*6:r}e.style.cssText="background-color:rgba(1,1,1,.5)",i.rgba=-1a.mod/2?e+=a.mod:e-o>a.mod/2&&(e-=a.mod)),u[n]=x((o-e)*i+e,t)))}),this[r](u)},blend:function(r){if(1===this._rgba[3])return this;var t=this._rgba.slice(),n=t.pop(),e=p(r)._rgba;return p(s.map(t,function(r,t){return(1-n)*e[t]+n*r}))},toRgbaString:function(){var r="rgba(",t=s.map(this._rgba,function(r,t){return null!=r?r:2 li > :first-child").add(e.find("> :not(li)").even())},heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=o(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||!1!==e.active&&null!=e.active||(e.active=0),this._processPanels(),e.active<0&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():o()}},_createIcons:function(){var e,t=this.options.icons;t&&(e=o(""),this._addClass(e,"ui-accordion-header-icon","ui-icon "+t.header),e.prependTo(this.headers),e=this.active.children(".ui-accordion-header-icon"),this._removeClass(e,t.header)._addClass(e,null,t.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){"active"===e?this._activate(t):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||!1!==this.options.active||this._activate(0),"icons"===e&&(this._destroyIcons(),t&&this._createIcons()))},_setOptionDisabled:function(e){this._super(e),this.element.attr("aria-disabled",e),this._toggleClass(null,"ui-state-disabled",!!e),this._toggleClass(this.headers.add(this.headers.next()),null,"ui-state-disabled",!!e)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var t=o.ui.keyCode,i=this.headers.length,a=this.headers.index(e.target),s=!1;switch(e.keyCode){case t.RIGHT:case t.DOWN:s=this.headers[(a+1)%i];break;case t.LEFT:case t.UP:s=this.headers[(a-1+i)%i];break;case t.SPACE:case t.ENTER:this._eventHandler(e);break;case t.HOME:s=this.headers[0];break;case t.END:s=this.headers[i-1]}s&&(o(e.target).attr("tabIndex",-1),o(s).attr("tabIndex",0),o(s).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===o.ui.keyCode.UP&&e.ctrlKey&&o(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),!1===e.active&&!0===e.collapsible||!this.headers.length?(e.active=!1,this.active=o()):!1===e.active?this._activate(0):this.active.length&&!o.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=o()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;"function"==typeof this.options.header?this.headers=this.options.header(this.element):this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var i,e=this.options,t=e.heightStyle,a=this.element.parent();this.active=this._findActive(e.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=o(this),t=e.uniqueId().attr("id"),i=e.next(),a=i.uniqueId().attr("id");e.attr("aria-controls",a),i.attr("aria-labelledby",t)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(e.event),"fill"===t?(i=a.height(),this.element.siblings(":visible").each(function(){var e=o(this),t=e.css("position");"absolute"!==t&&"fixed"!==t&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=o(this).outerHeight(!0)}),this.headers.next().each(function(){o(this).height(Math.max(0,i-o(this).innerHeight()+o(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.headers.next().each(function(){var e=o(this).is(":visible");e||o(this).show(),i=Math.max(i,o(this).css("height","").height()),e||o(this).hide()}).height(i))},_activate:function(e){e=this._findActive(e)[0];e!==this.active[0]&&(e=e||this.active[0],this._eventHandler({target:e,currentTarget:e,preventDefault:o.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):o()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&o.each(e.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var t=this.options,i=this.active,a=o(e.currentTarget),s=a[0]===i[0],n=s&&t.collapsible,h=n?o():a.next(),r=i.next(),r={oldHeader:i,oldPanel:r,newHeader:n?o():a,newPanel:h};e.preventDefault(),s&&!t.collapsible||!1===this._trigger("beforeActivate",e,r)||(t.active=!n&&this.headers.index(a),this.active=s?o():a,this._toggle(r),this._removeClass(i,"ui-accordion-header-active","ui-state-active"),t.icons&&(h=i.children(".ui-accordion-header-icon"),this._removeClass(h,null,t.icons.activeHeader)._addClass(h,null,t.icons.header)),s||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),t.icons&&(e=a.children(".ui-accordion-header-icon"),this._removeClass(e,null,t.icons.header)._addClass(e,null,t.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active")))},_toggle:function(e){var t=e.newPanel,i=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=t,this.prevHide=i,this.options.animate?this._animate(t,i,e):(i.hide(),t.show(),this._toggleComplete(e)),i.attr({"aria-hidden":"true"}),i.prev().attr({"aria-selected":"false","aria-expanded":"false"}),t.length&&i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):t.length&&this.headers.filter(function(){return 0===parseInt(o(this).attr("tabIndex"),10)}).attr("tabIndex",-1),t.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(e,i,t){function a(){n._toggleComplete(t)}var s,n=this,h=0,r=e.css("box-sizing"),o=e.length&&(!i.length||e.index() li > :first-child").add(e.find("> :not(li)").filter(function(e){return e%2==0}))},heightStyle:"auto",icons:{activeHeader:"ui-icon-triangle-1-s",header:"ui-icon-triangle-1-e"},activate:null,beforeActivate:null},hideProps:{borderTopWidth:"hide",borderBottomWidth:"hide",paddingTop:"hide",paddingBottom:"hide",height:"hide"},showProps:{borderTopWidth:"show",borderBottomWidth:"show",paddingTop:"show",paddingBottom:"show",height:"show"},_create:function(){var e=this.options;this.prevShow=this.prevHide=o(),this._addClass("ui-accordion","ui-widget ui-helper-reset"),this.element.attr("role","tablist"),e.collapsible||!1!==e.active&&null!=e.active||(e.active=0),this._processPanels(),e.active<0&&(e.active+=this.headers.length),this._refresh()},_getCreateEventData:function(){return{header:this.active,panel:this.active.length?this.active.next():o()}},_createIcons:function(){var e,t=this.options.icons;t&&(e=o(""),this._addClass(e,"ui-accordion-header-icon","ui-icon "+t.header),e.prependTo(this.headers),e=this.active.children(".ui-accordion-header-icon"),this._removeClass(e,t.header)._addClass(e,null,t.activeHeader)._addClass(this.headers,"ui-accordion-icons"))},_destroyIcons:function(){this._removeClass(this.headers,"ui-accordion-icons"),this.headers.children(".ui-accordion-header-icon").remove()},_destroy:function(){var e;this.element.removeAttr("role"),this.headers.removeAttr("role aria-expanded aria-selected aria-controls tabIndex").removeUniqueId(),this._destroyIcons(),e=this.headers.next().css("display","").removeAttr("role aria-hidden aria-labelledby").removeUniqueId(),"content"!==this.options.heightStyle&&e.css("height","")},_setOption:function(e,t){"active"===e?this._activate(t):("event"===e&&(this.options.event&&this._off(this.headers,this.options.event),this._setupEvents(t)),this._super(e,t),"collapsible"!==e||t||!1!==this.options.active||this._activate(0),"icons"===e&&(this._destroyIcons(),t)&&this._createIcons())},_setOptionDisabled:function(e){this._super(e),this.element.attr("aria-disabled",e),this._toggleClass(null,"ui-state-disabled",!!e)},_keydown:function(e){if(!e.altKey&&!e.ctrlKey){var t=o.ui.keyCode,i=this.headers.length,a=this.headers.index(e.target),s=!1;switch(e.keyCode){case t.RIGHT:case t.DOWN:s=this.headers[(a+1)%i];break;case t.LEFT:case t.UP:s=this.headers[(a-1+i)%i];break;case t.SPACE:case t.ENTER:this._eventHandler(e);break;case t.HOME:s=this.headers[0];break;case t.END:s=this.headers[i-1]}s&&(o(e.target).attr("tabIndex",-1),o(s).attr("tabIndex",0),o(s).trigger("focus"),e.preventDefault())}},_panelKeyDown:function(e){e.keyCode===o.ui.keyCode.UP&&e.ctrlKey&&o(e.currentTarget).prev().trigger("focus")},refresh:function(){var e=this.options;this._processPanels(),!1===e.active&&!0===e.collapsible||!this.headers.length?(e.active=!1,this.active=o()):!1===e.active?this._activate(0):this.active.length&&!o.contains(this.element[0],this.active[0])?this.headers.length===this.headers.find(".ui-state-disabled").length?(e.active=!1,this.active=o()):this._activate(Math.max(0,e.active-1)):e.active=this.headers.index(this.active),this._destroyIcons(),this._refresh()},_processPanels:function(){var e=this.headers,t=this.panels;"function"==typeof this.options.header?this.headers=this.options.header(this.element):this.headers=this.element.find(this.options.header),this._addClass(this.headers,"ui-accordion-header ui-accordion-header-collapsed","ui-state-default"),this.panels=this.headers.next().filter(":not(.ui-accordion-content-active)").hide(),this._addClass(this.panels,"ui-accordion-content","ui-helper-reset ui-widget-content"),t&&(this._off(e.not(this.headers)),this._off(t.not(this.panels)))},_refresh:function(){var i,e=this.options,t=e.heightStyle,a=this.element.parent();this.active=this._findActive(e.active),this._addClass(this.active,"ui-accordion-header-active","ui-state-active")._removeClass(this.active,"ui-accordion-header-collapsed"),this._addClass(this.active.next(),"ui-accordion-content-active"),this.active.next().show(),this.headers.attr("role","tab").each(function(){var e=o(this),t=e.uniqueId().attr("id"),i=e.next(),a=i.uniqueId().attr("id");e.attr("aria-controls",a),i.attr("aria-labelledby",t)}).next().attr("role","tabpanel"),this.headers.not(this.active).attr({"aria-selected":"false","aria-expanded":"false",tabIndex:-1}).next().attr({"aria-hidden":"true"}).hide(),this.active.length?this.active.attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0}).next().attr({"aria-hidden":"false"}):this.headers.eq(0).attr("tabIndex",0),this._createIcons(),this._setupEvents(e.event),"fill"===t?(i=a.height(),this.element.siblings(":visible").each(function(){var e=o(this),t=e.css("position");"absolute"!==t&&"fixed"!==t&&(i-=e.outerHeight(!0))}),this.headers.each(function(){i-=o(this).outerHeight(!0)}),this.headers.next().each(function(){o(this).height(Math.max(0,i-o(this).innerHeight()+o(this).height()))}).css("overflow","auto")):"auto"===t&&(i=0,this.headers.next().each(function(){var e=o(this).is(":visible");e||o(this).show(),i=Math.max(i,o(this).css("height","").height()),e||o(this).hide()}).height(i))},_activate:function(e){e=this._findActive(e)[0];e!==this.active[0]&&(e=e||this.active[0],this._eventHandler({target:e,currentTarget:e,preventDefault:o.noop}))},_findActive:function(e){return"number"==typeof e?this.headers.eq(e):o()},_setupEvents:function(e){var i={keydown:"_keydown"};e&&o.each(e.split(" "),function(e,t){i[t]="_eventHandler"}),this._off(this.headers.add(this.headers.next())),this._on(this.headers,i),this._on(this.headers.next(),{keydown:"_panelKeyDown"}),this._hoverable(this.headers),this._focusable(this.headers)},_eventHandler:function(e){var t=this.options,i=this.active,a=o(e.currentTarget),s=a[0]===i[0],n=s&&t.collapsible,h=n?o():a.next(),r=i.next(),r={oldHeader:i,oldPanel:r,newHeader:n?o():a,newPanel:h};e.preventDefault(),s&&!t.collapsible||!1===this._trigger("beforeActivate",e,r)||(t.active=!n&&this.headers.index(a),this.active=s?o():a,this._toggle(r),this._removeClass(i,"ui-accordion-header-active","ui-state-active"),t.icons&&(h=i.children(".ui-accordion-header-icon"),this._removeClass(h,null,t.icons.activeHeader)._addClass(h,null,t.icons.header)),s)||(this._removeClass(a,"ui-accordion-header-collapsed")._addClass(a,"ui-accordion-header-active","ui-state-active"),t.icons&&(e=a.children(".ui-accordion-header-icon"),this._removeClass(e,null,t.icons.header)._addClass(e,null,t.icons.activeHeader)),this._addClass(a.next(),"ui-accordion-content-active"))},_toggle:function(e){var t=e.newPanel,i=this.prevShow.length?this.prevShow:e.oldPanel;this.prevShow.add(this.prevHide).stop(!0,!0),this.prevShow=t,this.prevHide=i,this.options.animate?this._animate(t,i,e):(i.hide(),t.show(),this._toggleComplete(e)),i.attr({"aria-hidden":"true"}),i.prev().attr({"aria-selected":"false","aria-expanded":"false"}),t.length&&i.length?i.prev().attr({tabIndex:-1,"aria-expanded":"false"}):t.length&&this.headers.filter(function(){return 0===parseInt(o(this).attr("tabIndex"),10)}).attr("tabIndex",-1),t.attr("aria-hidden","false").prev().attr({"aria-selected":"true","aria-expanded":"true",tabIndex:0})},_animate:function(e,i,t){function a(){n._toggleComplete(t)}var s,n=this,h=0,r=e.css("box-sizing"),o=e.length&&(!i.length||e.index()",options:{appendTo:null,autoFocus:!1,delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null,change:null,close:null,focus:null,open:null,response:null,search:null,select:null},requestIndex:0,pending:0,liveRegionTimer:null,_create:function(){var i,s,n,e=this.element[0].nodeName.toLowerCase(),t="textarea"===e,e="input"===e;this.isMultiLine=t||!e&&this._isContentEditable(this.element),this.valueMethod=this.element[t||e?"val":"text"],this.isNewMenu=!0,this._addClass("ui-autocomplete-input"),this.element.attr("autocomplete","off"),this._on(this.element,{keydown:function(e){if(this.element.prop("readOnly"))s=n=i=!0;else{s=n=i=!1;var t=o.ui.keyCode;switch(e.keyCode){case t.PAGE_UP:i=!0,this._move("previousPage",e);break;case t.PAGE_DOWN:i=!0,this._move("nextPage",e);break;case t.UP:i=!0,this._keyEvent("previous",e);break;case t.DOWN:i=!0,this._keyEvent("next",e);break;case t.ENTER:this.menu.active&&(i=!0,e.preventDefault(),this.menu.select(e));break;case t.TAB:this.menu.active&&this.menu.select(e);break;case t.ESCAPE:this.menu.element.is(":visible")&&(this.isMultiLine||this._value(this.term),this.close(e),e.preventDefault());break;default:s=!0,this._searchTimeout(e)}}},keypress:function(e){if(i)i=!1,this.isMultiLine&&!this.menu.element.is(":visible")||e.preventDefault();else if(!s){var t=o.ui.keyCode;switch(e.keyCode){case t.PAGE_UP:this._move("previousPage",e);break;case t.PAGE_DOWN:this._move("nextPage",e);break;case t.UP:this._keyEvent("previous",e);break;case t.DOWN:this._keyEvent("next",e)}}},input:function(e){n?(n=!1,e.preventDefault()):this._searchTimeout(e)},focus:function(){this.selectedItem=null,this.previous=this._value()},blur:function(e){clearTimeout(this.searching),this.close(e),this._change(e)}}),this._initSource(),this.menu=o("