130 lines
3.7 KiB
JavaScript
130 lines
3.7 KiB
JavaScript
/**
|
|
* @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);
|