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 .= '' . $directory . '
%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("").appendTo(this._appendTo()).menu({role:null}).hide().attr({unselectable:"on"}).menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault()},menufocus:function(e,t){var i,s;this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent&&/^mouse/.test(e.originalEvent.type))?(this.menu.blur(),this.document.one("mousemove",function(){o(e.target).trigger(e.originalEvent)})):(s=t.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:s})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value),(i=t.item.attr("aria-label")||s.value)&&String.prototype.trim.call(i).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(o("").text(i))},100)))},menuselect:function(e,t){var i=t.item.data("ui-autocomplete-item"),s=this.previous;this.element[0]!==o.ui.safeActiveElement(this.document[0])&&(this.element.trigger("focus"),this.previous=s,this._delay(function(){this.previous=s,this.selectedItem=i})),!1!==this._trigger("select",e,{item:i})&&this._value(i.value),this.term=this._value(),this.close(e),this.selectedItem=i}}),this.liveRegion=o("",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var t=this.menu.element[0];return e.target===this.element[0]||e.target===t||o.contains(t,e.target)},_closeOnClickOutside:function(e){this._isEventTargetInWidget(e)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e=(e=(e=e&&(e.jquery||e.nodeType?o(e):this.document.find(e).eq(0)))&&e[0]?e:this.element.closest(".ui-front, dialog")).length?e:this.document[0].body},_initSource:function(){var i,s,n=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(e,t){t(o.ui.autocomplete.filter(i,e.term))}):"string"==typeof this.options.source?(s=this.options.source,this.source=function(e,t){n.xhr&&n.xhr.abort(),n.xhr=o.ajax({url:s,data:e,dataType:"json",success:function(e){t(e)},error:function(){t([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),t=this.menu.element.is(":visible"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;e&&(t||i)||(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length").append(o("").text(t.label)).appendTo(e)},_move:function(e,t){this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur()):this.menu[e](t):this.search(null,t)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(e,t),t.preventDefault())},_isContentEditable:function(e){if(!e.length)return!1;var t=e.prop("contentEditable");return"inherit"===t?this._isContentEditable(e.parent()):"true"===t}}),o.extend(o.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,t){var i=new RegExp(o.ui.autocomplete.escapeRegex(t),"i");return o.grep(e,function(e){return i.test(e.label||e.value||e)})}}),o.widget("ui.autocomplete",o.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(1").text(t))},100))}}),o.ui.autocomplete});
\ No newline at end of file
+!function(e){"function"==typeof define&&define.amd?define(["jquery","./menu","../keycode","../position","../version","../widget"],e):e(jQuery)}(function(o){return o.widget("ui.autocomplete",{version:"1.14.0",defaultElement:"",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&&"true"===this.element.prop("contentEditable"),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("").appendTo(this._appendTo()).menu({role:null}).hide().menu("instance"),this._addClass(this.menu.element,"ui-autocomplete","ui-front"),this._on(this.menu.element,{mousedown:function(e){e.preventDefault()},menufocus:function(e,t){var i,s;this.isNewMenu&&(this.isNewMenu=!1,e.originalEvent)&&/^mouse/.test(e.originalEvent.type)?(this.menu.blur(),this.document.one("mousemove",function(){o(e.target).trigger(e.originalEvent)})):(s=t.item.data("ui-autocomplete-item"),!1!==this._trigger("focus",e,{item:s})&&e.originalEvent&&/^key/.test(e.originalEvent.type)&&this._value(s.value),(i=t.item.attr("aria-label")||s.value)&&String.prototype.trim.call(i).length&&(clearTimeout(this.liveRegionTimer),this.liveRegionTimer=this._delay(function(){this.liveRegion.html(o("").text(i))},100)))},menuselect:function(e,t){var t=t.item.data("ui-autocomplete-item"),i=this.previous;this.element[0]!==this.document[0].activeElement&&(this.element.trigger("focus"),this.previous=i),!1!==this._trigger("select",e,{item:t})&&this._value(t.value),this.term=this._value(),this.close(e),this.selectedItem=t}}),this.liveRegion=o("",{role:"status","aria-live":"assertive","aria-relevant":"additions"}).appendTo(this.document[0].body),this._addClass(this.liveRegion,null,"ui-helper-hidden-accessible"),this._on(this.window,{beforeunload:function(){this.element.removeAttr("autocomplete")}})},_destroy:function(){clearTimeout(this.searching),this.element.removeAttr("autocomplete"),this.menu.element.remove(),this.liveRegion.remove()},_setOption:function(e,t){this._super(e,t),"source"===e&&this._initSource(),"appendTo"===e&&this.menu.element.appendTo(this._appendTo()),"disabled"===e&&t&&this.xhr&&this.xhr.abort()},_isEventTargetInWidget:function(e){var t=this.menu.element[0];return e.target===this.element[0]||e.target===t||o.contains(t,e.target)},_closeOnClickOutside:function(e){this._isEventTargetInWidget(e)||this.close()},_appendTo:function(){var e=this.options.appendTo;return e=(e=(e=e&&(e.jquery||e.nodeType?o(e):this.document.find(e).eq(0)))&&e[0]?e:this.element.closest(".ui-front, dialog")).length?e:this.document[0].body},_initSource:function(){var i,s,n=this;Array.isArray(this.options.source)?(i=this.options.source,this.source=function(e,t){t(o.ui.autocomplete.filter(i,e.term))}):"string"==typeof this.options.source?(s=this.options.source,this.source=function(e,t){n.xhr&&n.xhr.abort(),n.xhr=o.ajax({url:s,data:e,dataType:"json",success:function(e){t(e)},error:function(){t([])}})}):this.source=this.options.source},_searchTimeout:function(s){clearTimeout(this.searching),this.searching=this._delay(function(){var e=this.term===this._value(),t=this.menu.element.is(":visible"),i=s.altKey||s.ctrlKey||s.metaKey||s.shiftKey;e&&(t||i)||(this.selectedItem=null,this.search(null,s))},this.options.delay)},search:function(e,t){return e=null!=e?e:this._value(),this.term=this._value(),e.length").append(o("").text(t.label)).appendTo(e)},_move:function(e,t){this.menu.element.is(":visible")?this.menu.isFirstItem()&&/^previous/.test(e)||this.menu.isLastItem()&&/^next/.test(e)?(this.isMultiLine||this._value(this.term),this.menu.blur()):this.menu[e](t):this.search(null,t)},widget:function(){return this.menu.element},_value:function(){return this.valueMethod.apply(this.element,arguments)},_keyEvent:function(e,t){this.isMultiLine&&!this.menu.element.is(":visible")||(this._move(e,t),t.preventDefault())}}),o.extend(o.ui.autocomplete,{escapeRegex:function(e){return e.replace(/[\-\[\]{}()*+?.,\\\^$|#\s]/g,"\\$&")},filter:function(e,t){var i=new RegExp(o.ui.autocomplete.escapeRegex(t),"i");return o.grep(e,function(e){return i.test(e.label||e.value||e)})}}),o.widget("ui.autocomplete",o.ui.autocomplete,{options:{messages:{noResults:"No search results.",results:function(e){return e+(1").text(t))},100))}}),o.ui.autocomplete});
\ No newline at end of file
diff --git a/docroot/core/misc/ui/jquery.ui.base.css b/docroot/core/misc/ui/jquery.ui.base.css
index 5799dc3a..a7977558 100644
--- a/docroot/core/misc/ui/jquery.ui.base.css
+++ b/docroot/core/misc/ui/jquery.ui.base.css
@@ -1,12 +1,12 @@
/*!
- * jQuery UI CSS Framework 1.13.2
- * http://jqueryui.com
+ * jQuery UI CSS Framework 1.14.0
+ * https://jqueryui.com
*
- * Copyright jQuery Foundation and other contributors
+ * Copyright OpenJS Foundation and other contributors
* Released under the MIT license.
- * http://jquery.org/license
+ * https://jquery.org/license
*
- * http://api.jqueryui.com/category/theming/
+ * https://api.jqueryui.com/category/theming/
*/
@import url("jquery.ui.core.css");
diff --git a/docroot/core/misc/ui/jquery.ui.button.css b/docroot/core/misc/ui/jquery.ui.button.css
index f670b799..c9031411 100644
--- a/docroot/core/misc/ui/jquery.ui.button.css
+++ b/docroot/core/misc/ui/jquery.ui.button.css
@@ -1,12 +1,12 @@
/*!
- * jQuery UI Button 1.13.2
- * http://jqueryui.com
+ * jQuery UI Button 1.14.0
+ * https://jqueryui.com
*
- * Copyright jQuery Foundation and other contributors
+ * Copyright OpenJS Foundation and other contributors
* Released under the MIT license.
- * http://jquery.org/license
+ * https://jquery.org/license
*
- * http://api.jqueryui.com/button/#theming
+ * https://api.jqueryui.com/button/#theming
*/
.ui-button {
padding: .4em 1em;
@@ -18,12 +18,7 @@
vertical-align: middle;
text-align: center;
-webkit-user-select: none;
- -moz-user-select: none;
- -ms-user-select: none;
user-select: none;
-
- /* Support: IE <= 11 */
- overflow: visible;
}
.ui-button,
@@ -74,7 +69,7 @@ input.ui-button.ui-icon-notext .ui-icon {
}
/* workarounds */
-/* Support: Firefox 5 - 40 */
+/* Support: Firefox 5 - 125+ */
input.ui-button::-moz-focus-inner,
button.ui-button::-moz-focus-inner {
border: 0;
diff --git a/docroot/core/misc/ui/jquery.ui.button.min.js b/docroot/core/misc/ui/jquery.ui.button.min.js
index 3e534d9d..366ae469 100644
--- a/docroot/core/misc/ui/jquery.ui.button.min.js
+++ b/docroot/core/misc/ui/jquery.ui.button.min.js
@@ -1,9 +1,9 @@
/*!
- * jQuery UI Button 1.13.2
- * http://jqueryui.com
+ * jQuery UI Button 1.14.0
+ * https://jqueryui.com
*
- * Copyright jQuery Foundation and other contributors
+ * Copyright OpenJS Foundation and other contributors
* Released under the MIT license.
- * http://jquery.org/license
+ * https://jquery.org/license
*/
-!function(t){"use strict";"function"==typeof define&&define.amd?define(["jquery","./controlgroup","./checkboxradio","../keycode","../widget"],t):t(jQuery)}(function(e){"use strict";var h;return e.widget("ui.button",{version:"1.13.2",defaultElement:"