Mercurial > hg > isophonics-drupal-site
diff core/modules/locale/locale.admin.es6.js @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/locale/locale.admin.es6.js Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,111 @@ +/** + * @file + * Locale admin behavior. + */ + +(function ($, Drupal) { + /** + * Marks changes of translations. + * + * @type {Drupal~behavior} + * + * @prop {Drupal~behaviorAttach} attach + * Attaches behavior to show the user if translations has changed. + * @prop {Drupal~behaviorDetach} detach + * Detach behavior to show the user if translations has changed. + */ + Drupal.behaviors.localeTranslateDirty = { + attach() { + const $form = $('#locale-translate-edit-form').once('localetranslatedirty'); + if ($form.length) { + // Display a notice if any row changed. + $form.one('formUpdated.localeTranslateDirty', 'table', function () { + const $marker = $(Drupal.theme('localeTranslateChangedWarning')).hide(); + $(this).addClass('changed').before($marker); + $marker.fadeIn('slow'); + }); + // Highlight changed row. + $form.on('formUpdated.localeTranslateDirty', 'tr', function () { + const $row = $(this); + const $rowToMark = $row.once('localemark'); + const marker = Drupal.theme('localeTranslateChangedMarker'); + + $row.addClass('changed'); + // Add an asterisk only once if row changed. + if ($rowToMark.length) { + $rowToMark.find('td:first-child .js-form-item').append(marker); + } + }); + } + }, + detach(context, settings, trigger) { + if (trigger === 'unload') { + const $form = $('#locale-translate-edit-form').removeOnce('localetranslatedirty'); + if ($form.length) { + $form.off('formUpdated.localeTranslateDirty'); + } + } + }, + }; + + /** + * Show/hide the description details on Available translation updates page. + * + * @type {Drupal~behavior} + * + * @prop {Drupal~behaviorAttach} attach + * Attaches behavior for toggling details on the translation update page. + */ + Drupal.behaviors.hideUpdateInformation = { + attach(context, settings) { + const $table = $('#locale-translation-status-form').once('expand-updates'); + if ($table.length) { + const $tbodies = $table.find('tbody'); + + // Open/close the description details by toggling a tr class. + $tbodies.on('click keydown', '.description', function (e) { + if (e.keyCode && (e.keyCode !== 13 && e.keyCode !== 32)) { + return; + } + e.preventDefault(); + const $tr = $(this).closest('tr'); + + $tr.toggleClass('expanded'); + + // Change screen reader text. + $tr.find('.locale-translation-update__prefix').text(() => { + if ($tr.hasClass('expanded')) { + return Drupal.t('Hide description'); + } + + return Drupal.t('Show description'); + }); + }); + $table.find('.requirements, .links').hide(); + } + }, + }; + + $.extend(Drupal.theme, /** @lends Drupal.theme */{ + + /** + * Creates markup for a changed translation marker. + * + * @return {string} + * Markup for the marker. + */ + localeTranslateChangedMarker() { + return `<abbr class="warning ajax-changed" title="${Drupal.t('Changed')}">*</abbr>`; + }, + + /** + * Creates markup for the translation changed warning. + * + * @return {string} + * Markup for the warning. + */ + localeTranslateChangedWarning() { + return `<div class="clearfix messages messages--warning">${Drupal.theme('localeTranslateChangedMarker')} ${Drupal.t('Changes made in this table will not be saved until the form is submitted.')}</div>`; + }, + }); +}(jQuery, Drupal));