diff --git a/dt-core/admin/admin-settings-endpoints.php b/dt-core/admin/admin-settings-endpoints.php
index 45d399ef7..264733adf 100644
--- a/dt-core/admin/admin-settings-endpoints.php
+++ b/dt-core/admin/admin-settings-endpoints.php
@@ -215,6 +215,64 @@ public function add_api_routes() {
'permission_callback' => [ $this, 'default_permission_check' ],
]
);
+
+ register_rest_route(
+ $this->namespace, '/languages', [
+ 'methods' => 'POST',
+ 'callback' => [ $this, 'update_languages' ],
+ 'permission_callback' => [ $this, 'default_permission_check' ],
+ ]
+ );
+ }
+
+ public function update_languages( WP_REST_REQUEST $request ) {
+ /**
+ * @todo:
+ * only save user provided customizations to the dt_working_languages options
+ * this includes labels, the iso code, the enabled status and translations
+ * does not include: the key, default labels etc
+ */
+ $params = $request->get_params();
+ $languages = dt_get_option( 'dt_working_languages' );
+
+ $langs = dt_get_available_languages();
+ foreach ( $languages as $language_key => $language_options ){
+
+ if ( isset( $params[$language_key]['label'] ) ){
+ $label = sanitize_text_field( wp_unslash( $params[$language_key]['label'] ) );
+ if ( ( $language_options['label'] ?? '' ) != $label ){
+ $languages[$language_key]['label'] = $label;
+ }
+ }
+ if ( isset( $params[$language_key]['iso_639-3'] ) ){
+ $code = sanitize_text_field( wp_unslash( $params[$language_key]['iso_639-3'] ) );
+ if ( ( $language_options['iso_639-3'] ?? '' ) != $code ) {
+ $languages[$language_key]['iso_639-3'] = $code;
+ }
+ }
+ if ( isset( $params[$language_key]['enabled'] ) ){
+ $enabled = sanitize_text_field( wp_unslash( $params[$language_key]['enabled'] ) );
+ if ( ( $language_options['enabled'] ?? '' ) != $enabled ) {
+ $languages[$language_key]['enabled'] = $enabled;
+ }
+ }
+ if ( isset( $params[$language_key]['translations'] ) ) {
+ foreach ( $langs as $lang => $val ){
+ $langcode = $val['language'];
+ $translations = sanitize_text_field( wp_unslash( $params[$language_key]['translations'][$langcode] ) );
+ if ( isset( $params[$language_key]['translations'][$langcode] ) ) {
+ $translated_label = sanitize_text_field( wp_unslash( $params[$language_key]['translations'][$langcode] ) );
+ if ( ( empty( $translated_label ) && !empty( $languages[$language_key]['translations'][$langcode] ) ) || !empty( $translated_label ) ){
+ $languages[$language_key]['translations'][$langcode] = $translated_label;
+ }
+ }
+ }
+ }
+ $languages[$language_key]['deleted'] = !isset( $params[$language_key]['deleted'] );
+ }
+
+ update_option( 'dt_working_languages', $languages, false );
+ return true;
}
public static function get_post_fields() {
diff --git a/dt-core/admin/js/dt-options.js b/dt-core/admin/js/dt-options.js
index 38e6c8dd3..a9f187b10 100644
--- a/dt-core/admin/js/dt-options.js
+++ b/dt-core/admin/js/dt-options.js
@@ -1,20 +1,105 @@
jQuery(document).ready(function ($) {
- $('.expand_translations').click(function (e) {
+ $(".expand_translations").click(function (e) {
e.preventDefault();
display_translation_dialog(
$(this).siblings(),
- $(this).data('form_name'),
- $(this).data('source'),
+ $(this).data("form_name"),
+ $(this).data("source"),
+ $(this).data("value"),
+ $(this).data("callback")
);
});
- $('.change-icon-button').click(function (e) {
+ // Handle label language translations on a language
+ window.update_language_translations = function (source, value) {
+ let translations_list = {};
+ $(
+ `#language_table .language_label_translations[data-field="${value}"]`
+ ).each(function (index, element) {
+ const language = $(element).data("field");
+ if (!translations_list[language]) {
+ translations_list[language] = {};
+ }
+ if (!translations_list[language].translations) {
+ translations_list[language].translations = {};
+ }
+ const translation_key = $(element).data("value");
+ translations_list[language].translations[translation_key] =
+ $(element).val();
+ });
+
+ $.ajax({
+ type: "POST",
+ dataType: "json",
+ data: JSON.stringify(translations_list),
+ contentType: "application/json; charset=utf-8",
+ url: `${window.dt_admin_scripts.rest_root}dt-admin-settings/languages/`,
+ beforeSend: (xhr) => {
+ xhr.setRequestHeader("X-WP-Nonce", window.dt_admin_scripts.nonce);
+ },
+ success: function (response) {
+ var languages = JSON.parse(response);
+ console.log(languages);
+ },
+ error: function (xhr, status, error) {
+ console.log(error);
+ console.log(status);
+ console.error(xhr.responseText);
+ },
+ });
+ };
+
+ // Handle languages tables
+ $("#save_lang_button").click(function (e) {
+ e.preventDefault();
+ let tableLangs = {};
+ $("#language_table .language-row").each(function (index, element) {
+ const lang = $(element).data("lang");
+ const label = $(element).find(".custom_label input").val();
+ const iso_code = $(element).find(".iso_code input").val();
+ const enabled = $(element).find(".enabled input").prop("checked");
+
+ if (!tableLangs[lang]) {
+ tableLangs[lang] = {
+ label: "",
+ "iso_639-3": "",
+ enabled: "",
+ };
+ }
+
+ tableLangs[lang]["label"] = label;
+ tableLangs[lang]["iso_639-3"] = iso_code;
+ tableLangs[lang]["enabled"] = enabled;
+ });
+
+ $.ajax({
+ type: "POST",
+ dataType: "json",
+ data: JSON.stringify(tableLangs),
+ contentType: "application/json; charset=utf-8",
+ url: `${window.dt_admin_scripts.rest_root}dt-admin-settings/languages/`,
+ beforeSend: (xhr) => {
+ xhr.setRequestHeader("X-WP-Nonce", window.dt_admin_scripts.nonce);
+ },
+ success: function (response) {
+ var languages = JSON.parse(response);
+ console.log(languages, "success");
+ },
+ error: function (xhr, status, error) {
+ console.log(error);
+ console.log(status);
+ console.error(xhr.responseText);
+ },
+ });
+ });
+
+ $(".change-icon-button").click(function (e) {
e.preventDefault();
// Fetch handle to key workflow elements
- let parent_form = $("form[name='" + $(e.currentTarget).data('form') + "']");
+ let parent_form = $("form[name='" + $(e.currentTarget).data("form") + "']");
let icon_input = $(
- "input[name='" + $(e.currentTarget).data('icon-input') + "']",
+ "input[name='" + $(e.currentTarget).data("icon-input") + "']"
);
// Display icon selector dialog
@@ -22,11 +107,11 @@ jQuery(document).ready(function ($) {
});
// Support DT customization icon picker requests.
- $('.dt-admin-modal-box').on('click', '.change-icon-button', function (e) {
+ $(".dt-admin-modal-box").on("click", ".change-icon-button", function (e) {
let icon_input = $(
- "input[name='" + $(e.currentTarget).data('icon-input') + "']",
+ "input[name='" + $(e.currentTarget).data("icon-input") + "']"
);
- let dialog = $('#dt_icon_selector_dialog');
+ let dialog = $("#dt_icon_selector_dialog");
if (dialog) {
dialog.dialog({
@@ -34,31 +119,31 @@ jQuery(document).ready(function ($) {
autoOpen: false,
hide: 0,
show: 0,
- height: 'auto',
- width: 'auto',
+ height: "auto",
+ width: "auto",
resizable: false,
- title: 'Icon Selector Dialog',
+ title: "Icon Selector Dialog",
buttons: [
{
- text: 'Cancel',
- icon: 'ui-icon-close',
+ text: "Cancel",
+ icon: "ui-icon-close",
click: function () {
- $(this).dialog('close');
+ $(this).dialog("close");
},
},
{
- text: 'Save',
- icon: 'ui-icon-copy',
+ text: "Save",
+ icon: "ui-icon-copy",
click: function () {},
},
{
- text: 'Upload Custom Icon',
- icon: 'ui-icon-circle-zoomout',
+ text: "Upload Custom Icon",
+ icon: "ui-icon-circle-zoomout",
click: function () {},
},
],
open: function (event, ui) {
- let ui_dialog = $(document).find('.ui-dialog')[0];
+ let ui_dialog = $(document).find(".ui-dialog")[0];
// Fetch and set font icon picker dialog contents.
if (ui_dialog) {
@@ -68,19 +153,19 @@ jQuery(document).ready(function ($) {
- ${$(cloned).find('.ui-dialog-titlebar').html()}
+ ${$(cloned).find(".ui-dialog-titlebar").html()}
|
- ${$(cloned).find('.ui-dialog-content').html()}
+ ${$(cloned).find(".ui-dialog-content").html()}
|
- ${$(cloned).find('.ui-dialog-buttonpane').html()}
+ ${$(cloned).find(".ui-dialog-buttonpane").html()}
|
@@ -88,17 +173,17 @@ jQuery(document).ready(function ($) {
`;
// Set some initial defaults to aid downstream processing.
- let content = $('.dt-admin-modal-icon-picker-box-content');
+ let content = $(".dt-admin-modal-icon-picker-box-content");
content.html(html);
- content.find('button.ui-dialog-titlebar-close').hide();
- content.find('span.ui-dialog-title').css('font-weight', 'bold');
+ content.find("button.ui-dialog-titlebar-close").hide();
+ content.find("span.ui-dialog-title").css("font-weight", "bold");
content
- .find('button.ui-button')
- .data('icon-input', icon_input.attr('name'));
+ .find("button.ui-button")
+ .data("icon-input", icon_input.attr("name"));
}
// Force an immediate close, to draw attention to flipped content!
- $(this).dialog('close');
+ $(this).dialog("close");
// Display some initial icons
execute_icon_selection_filter_query(false);
@@ -107,65 +192,65 @@ jQuery(document).ready(function ($) {
});
// Insert selection area div, within dialog button footer
- let ui_dialog_buttonset = $('.ui-dialog-buttonset');
- ui_dialog_buttonset.css('margin', '1.5em');
+ let ui_dialog_buttonset = $(".ui-dialog-buttonset");
+ ui_dialog_buttonset.css("margin", "1.5em");
ui_dialog_buttonset.prepend(
- $('')
- .attr('id', 'dialog_icon_selector_icon_selection_div')
- .css('display', 'inline-block')
- .css('vertical-align', 'middle')
- .css('padding', '0')
- .css('margin-right', '175px'),
+ $("")
+ .attr("id", "dialog_icon_selector_icon_selection_div")
+ .css("display", "inline-block")
+ .css("vertical-align", "middle")
+ .css("padding", "0")
+ .css("margin-right", "175px")
);
// Display updated dialog
- dialog.dialog('open');
+ dialog.dialog("open");
}
});
- $('.dt-admin-modal-box').on('click', '.ui-button', function (e) {
+ $(".dt-admin-modal-box").on("click", ".ui-button", function (e) {
// Determine action to be taken.
let button = $(e.currentTarget);
- let icon_input = $("input[name='" + $(button).data('icon-input') + "']");
- let close_button = button.find('span.ui-icon-close');
- let save_button = button.find('span.ui-icon-copy');
- let upload_button = button.find('span.ui-icon-circle-zoomout');
+ let icon_input = $("input[name='" + $(button).data("icon-input") + "']");
+ let close_button = button.find("span.ui-icon-close");
+ let save_button = button.find("span.ui-icon-copy");
+ let upload_button = button.find("span.ui-icon-circle-zoomout");
if (close_button && close_button.length > 0) {
- $('.dt-admin-modal-icon-picker-box-close-button').click();
+ $(".dt-admin-modal-icon-picker-box-close-button").click();
} else if (save_button && save_button.length > 0) {
handle_icon_save(null, null, icon_input, function (source) {
// Refresh icon image accordingly, to capture any changes.
let icon_img_wrapper = $(icon_input)
.parent()
- .find('.field-icon-wrapper');
+ .find(".field-icon-wrapper");
if (icon_img_wrapper) {
let icon = $(icon_input).val();
$(icon_img_wrapper).html(
- icon && icon.trim().toLowerCase().startsWith('mdi')
+ icon && icon.trim().toLowerCase().startsWith("mdi")
? ``
- : `
`,
+ : `
`
);
}
- $('.dt-admin-modal-icon-picker-box-close-button').click();
+ $(".dt-admin-modal-icon-picker-box-close-button").click();
});
} else if (upload_button && upload_button.length > 0) {
handle_icon_upload(null, null, icon_input, function (source) {
// Refresh icon image accordingly, to capture any changes.
let icon_img_wrapper = $(icon_input)
.parent()
- .find('.field-icon-wrapper');
+ .find(".field-icon-wrapper");
if (icon_img_wrapper) {
let icon = $(icon_input).val();
$(icon_img_wrapper).html(
- icon && icon.trim().toLowerCase().startsWith('mdi')
+ icon && icon.trim().toLowerCase().startsWith("mdi")
? ``
- : `
`,
+ : `
`
);
}
- $('.dt-admin-modal-icon-picker-box-close-button').click();
+ $(".dt-admin-modal-icon-picker-box-close-button").click();
});
}
});
@@ -174,7 +259,7 @@ jQuery(document).ready(function ($) {
* Icon selector modal dialog - Process icon selection filter queries & selections
*/
- $(document).on('keyup', '#dialog_icon_selector_filter_input', function (e) {
+ $(document).on("keyup", "#dialog_icon_selector_filter_input", function (e) {
let code = e.keyCode || e.which;
// Only get excited over specific key codes.
@@ -183,7 +268,7 @@ jQuery(document).ready(function ($) {
}
});
- $(document).on('click', '.dialog-icon-selector-icon', function (e) {
+ $(document).on("click", ".dialog-icon-selector-icon", function (e) {
handle_icon_selection($(e.currentTarget));
});
@@ -194,40 +279,48 @@ jQuery(document).ready(function ($) {
* Translation modal dialog
*/
- function display_translation_dialog(container, form_name, source = '') {
- let dialog = $('#dt_translation_dialog');
- if (container && form_name && dialog) {
+ function display_translation_dialog(
+ container,
+ form_name,
+ source = "",
+ value = "",
+ callback = ""
+ ) {
+ let dialog = $("#dt_translation_dialog");
+ if (container && dialog) {
// Update dialog div
$(dialog)
.empty()
- .append($($(container).find('table')[0]).clone());
+ .append($($(container).find("table")[0]).clone());
// Refresh dialog config
dialog.dialog({
modal: true,
autoOpen: false,
- hide: 'fade',
- show: 'fade',
- height: 'auto',
- width: 'auto',
+ hide: "fade",
+ show: "fade",
+ height: "auto",
+ width: "auto",
resizable: true,
- title: 'Translation Dialog',
+ title: "Translation Dialog",
buttons: {
Update: function () {
// Update source translation container
$(container).empty().append($(this).children());
// Close dialog
- $(this).dialog('close');
+ $(this).dialog("close");
// Finally, auto save changes, accordingly, based on source.
- if (window.lodash.includes(['fields'], source)) {
+ if (window.lodash.includes(["fields"], source)) {
handle_custom_field_save_request(
null,
- $('.dt-custom-fields-save-button')[0],
- true,
+ $(".dt-custom-fields-save-button")[0],
+ true
);
- } else {
+ } else if (callback) {
+ window[callback](source, value);
+ } else if (form_name) {
$('form[name="' + form_name + '"]').submit();
}
},
@@ -235,11 +328,7 @@ jQuery(document).ready(function ($) {
});
// Display updated dialog
- dialog.dialog('open');
- } else {
- console.log(
- 'Unable to reference a valid: [container, form-name, dialog]',
- );
+ dialog.dialog("open");
}
}
@@ -250,39 +339,39 @@ jQuery(document).ready(function ($) {
function display_icon_selector_dialog(
parent_form,
icon_input,
- callback = function (source) {},
+ callback = function (source) {}
) {
- let dialog = $('#dt_icon_selector_dialog');
+ let dialog = $("#dt_icon_selector_dialog");
if (dialog) {
// Refresh dialog config
dialog.dialog({
modal: true,
autoOpen: false,
- hide: 'fade',
- show: 'fade',
- height: 'auto',
- width: 'auto',
+ hide: "fade",
+ show: "fade",
+ height: "auto",
+ width: "auto",
resizable: false,
- title: 'Icon Selector Dialog',
+ title: "Icon Selector Dialog",
buttons: [
{
- text: 'Cancel',
- icon: 'ui-icon-close',
+ text: "Cancel",
+ icon: "ui-icon-close",
click: function () {
- $(this).dialog('close');
- callback('cancel');
+ $(this).dialog("close");
+ callback("cancel");
},
},
{
- text: 'Save',
- icon: 'ui-icon-copy',
+ text: "Save",
+ icon: "ui-icon-copy",
click: function () {
handle_icon_save(this, parent_form, icon_input, callback);
},
},
{
- text: 'Upload Custom Icon',
- icon: 'ui-icon-circle-zoomout',
+ text: "Upload Custom Icon",
+ icon: "ui-icon-circle-zoomout",
click: function () {
handle_icon_upload(this, parent_form, icon_input, callback);
},
@@ -293,24 +382,24 @@ jQuery(document).ready(function ($) {
execute_icon_selection_filter_query();
},
close: function (event, ui) {
- callback('dialogclose');
+ callback("dialogclose");
},
});
// Insert selection area div, within dialog button footer
- $('.ui-dialog-buttonset').prepend(
- $('')
- .attr('id', 'dialog_icon_selector_icon_selection_div')
- .css('display', 'inline-block')
- .css('vertical-align', 'middle')
- .css('padding', '0')
- .css('margin-right', '175px'),
+ $(".ui-dialog-buttonset").prepend(
+ $("")
+ .attr("id", "dialog_icon_selector_icon_selection_div")
+ .css("display", "inline-block")
+ .css("vertical-align", "middle")
+ .css("padding", "0")
+ .css("margin-right", "175px")
);
// Display updated dialog
- dialog.dialog('open');
+ dialog.dialog("open");
} else {
- console.log('Unable to reference a valid: [dialog]');
+ console.log("Unable to reference a valid: [dialog]");
}
}
@@ -324,15 +413,15 @@ jQuery(document).ready(function ($) {
if (
window.lodash.includes(
style_sheet.href,
- 'dt-core/dependencies/mdi/css/materialdesignicons.min.css',
+ "dt-core/dependencies/mdi/css/materialdesignicons.min.css"
)
) {
$.each(style_sheet.cssRules, function (key, rule) {
- if (rule.constructor.name === 'CSSStyleRule') {
+ if (rule.constructor.name === "CSSStyleRule") {
icon_class_names.push({
class: rule.selectorText.substring(
1,
- rule.selectorText.indexOf(':'),
+ rule.selectorText.indexOf(":")
),
});
}
@@ -365,22 +454,22 @@ jQuery(document).ready(function ($) {
function execute_icon_selection_filter_query(enable_tooltips = true) {
// Always default to a somewhat wildcard search if input text is blank
- let query = $('#dialog_icon_selector_filter_input').val().trim();
- query = window.lodash.isEmpty(query) ? 'a' : query;
+ let query = $("#dialog_icon_selector_filter_input").val().trim();
+ query = window.lodash.isEmpty(query) ? "a" : query;
// Proceed with icon display refresh
- $('#dialog_icon_selector_icons_div').fadeOut('fast', function () {
- $('#dialog_icon_selector_icons_search_msg').text('').fadeOut('fast');
- $('#dialog_icon_selector_icons_search_spinner')
- .addClass('active')
- .fadeIn('fast', function () {
+ $("#dialog_icon_selector_icons_div").fadeOut("fast", function () {
+ $("#dialog_icon_selector_icons_search_msg").text("").fadeOut("fast");
+ $("#dialog_icon_selector_icons_search_spinner")
+ .addClass("active")
+ .fadeIn("fast", function () {
// Clear currently displayed icons
- $('#dialog_icon_selector_icons_table > tbody > tr').remove();
+ $("#dialog_icon_selector_icons_table > tbody > tr").remove();
// Obtain filtered icon list
let filtered_icons = window.lodash.filter(icons, function (icon) {
return (
- icon['class'] && window.lodash.includes(icon['class'], query)
+ icon["class"] && window.lodash.includes(icon["class"], query)
);
});
@@ -390,12 +479,12 @@ jQuery(document).ready(function ($) {
// Populate icons table
let loop_counter = 0;
let icon_counter = 0;
- let tds = '';
+ let tds = "";
$.each(filtered_icons, function (idx, filtered_icon) {
loop_counter++;
- let icon_class_name = filtered_icon['class'];
+ let icon_class_name = filtered_icon["class"];
if (icon_class_name && is_icon_valid(icon_class_name)) {
tds +=
' | ';
if (++icon_counter > 5 || loop_counter >= filtered_icons.length) {
- $('#dialog_icon_selector_icons_table > tbody').append(
- '' + tds + '
',
+ $("#dialog_icon_selector_icons_table > tbody").append(
+ "" + tds + "
"
);
icon_counter = 0;
- tds = '';
+ tds = "";
}
}
});
// If requested, activate icon tooltips
if (enable_tooltips) {
- $('#dialog_icon_selector_icons_table > tbody')
- .find('.mdi')
+ $("#dialog_icon_selector_icons_table > tbody")
+ .find(".mdi")
.each(function (idx, icon) {
$(icon).tooltip({
- show: { effect: 'fade', duration: 100 },
+ show: { effect: "fade", duration: 100 },
});
});
}
- $('#dialog_icon_selector_icons_search_spinner')
- .removeClass('active')
- .fadeOut('fast', function () {
+ $("#dialog_icon_selector_icons_search_spinner")
+ .removeClass("active")
+ .fadeOut("fast", function () {
// Display results or no icons found message
if (filtered_icons.length > 0) {
- $('#dialog_icon_selector_icons_div').fadeIn('fast');
+ $("#dialog_icon_selector_icons_div").fadeIn("fast");
} else {
- $('#dialog_icon_selector_icons_search_msg')
- .text('No Icons Found')
- .fadeIn('fast');
+ $("#dialog_icon_selector_icons_search_msg")
+ .text("No Icons Found")
+ .fadeIn("fast");
}
});
});
@@ -449,19 +538,19 @@ jQuery(document).ready(function ($) {
function is_icon_valid(icon_class_name) {
// Firstly, empty sandbox...
- $('#dialog_icon_selector_icons_sandbox_div').empty();
+ $("#dialog_icon_selector_icons_sandbox_div").empty();
// Add corresponding icon
- let icon = $('')
- .addClass('mdi ' + icon_class_name)
- .appendTo('#dialog_icon_selector_icons_sandbox_div');
+ let icon = $("")
+ .addClass("mdi " + icon_class_name)
+ .appendTo("#dialog_icon_selector_icons_sandbox_div");
// Determine icon validity
let valid =
- window.getComputedStyle(icon[0], ':before')['content'] !== 'none';
+ window.getComputedStyle(icon[0], ":before")["content"] !== "none";
// Clear down sandbox and return findings
- $('#dialog_icon_selector_icons_sandbox_div').empty();
+ $("#dialog_icon_selector_icons_sandbox_div").empty();
return valid;
}
@@ -476,21 +565,21 @@ jQuery(document).ready(function ($) {
let cloned_icon = $(icon).clone(true);
// Using some fancy transitions, assign new cloned selection
- $('#dialog_icon_selector_icon_selection_div').fadeOut(
- 'fast',
+ $("#dialog_icon_selector_icon_selection_div").fadeOut(
+ "fast",
function () {
// Clear out previous selections
- $('#dialog_icon_selector_icon_selection_div').empty();
+ $("#dialog_icon_selector_icon_selection_div").empty();
// Make use of selection css class
- $(cloned_icon).removeClass('dialog-icon-selector-icon');
- $(cloned_icon).addClass('dialog-icon-selector-icon-selected');
- $(cloned_icon).attr('title', $(icon).data('icon_class'));
+ $(cloned_icon).removeClass("dialog-icon-selector-icon");
+ $(cloned_icon).addClass("dialog-icon-selector-icon-selected");
+ $(cloned_icon).attr("title", $(icon).data("icon_class"));
// Append and display selection
- $('#dialog_icon_selector_icon_selection_div').append($(cloned_icon));
- $('#dialog_icon_selector_icon_selection_div').fadeIn('fast');
- },
+ $("#dialog_icon_selector_icon_selection_div").append($(cloned_icon));
+ $("#dialog_icon_selector_icon_selection_div").fadeIn("fast");
+ }
);
}
}
@@ -503,19 +592,19 @@ jQuery(document).ready(function ($) {
dialog,
parent_form,
icon_input,
- callback = function (source) {},
+ callback = function (source) {}
) {
// Determine if there is a valid selection
- let selected_icon = $('#dialog_icon_selector_icon_selection_div').find(
- '.dialog-icon-selector-icon-selected',
+ let selected_icon = $("#dialog_icon_selector_icon_selection_div").find(
+ ".dialog-icon-selector-icon-selected"
);
if ($(selected_icon).length) {
// Update form icon class input
- icon_input.val('mdi ' + $(selected_icon).data('icon_class'));
+ icon_input.val("mdi " + $(selected_icon).data("icon_class"));
// If present, close dialog
if (dialog) {
- $(dialog).dialog('close');
+ $(dialog).dialog("close");
}
// If present, auto-submit; to refresh changes
@@ -524,7 +613,7 @@ jQuery(document).ready(function ($) {
}
// Execute callback with relevant source flag.
- callback('save');
+ callback("save");
}
}
@@ -536,17 +625,17 @@ jQuery(document).ready(function ($) {
dialog,
parent_form,
icon_input,
- callback = function (source) {},
+ callback = function (source) {}
) {
// Build media uploader modal
let mediaFrame = window.wp.media({
// Accepts [ 'select', 'post', 'image', 'audio', 'video' ]
// Determines what kind of library should be rendered.
- frame: 'select',
+ frame: "select",
// Modal title.
title: window.dt_admin_shared.escape(
- window.dt_admin_scripts.upload.title,
+ window.dt_admin_scripts.upload.title
),
// Enable/disable multiple select
@@ -554,13 +643,13 @@ jQuery(document).ready(function ($) {
// Library wordpress query arguments.
library: {
- order: 'DESC',
+ order: "DESC",
// [ 'name', 'author', 'date', 'title', 'modified', 'uploadedTo', 'id', 'post__in', 'menuOrder' ]
- orderby: 'date',
+ orderby: "date",
// mime type. e.g. 'image', 'image/jpeg'
- type: ['image'],
+ type: ["image"],
// Searches the attachment title.
search: null,
@@ -571,22 +660,22 @@ jQuery(document).ready(function ($) {
button: {
text: window.dt_admin_shared.escape(
- window.dt_admin_scripts.upload.button_txt,
+ window.dt_admin_scripts.upload.button_txt
),
},
});
// Handle selected files
- mediaFrame.on('select', function () {
+ mediaFrame.on("select", function () {
// Fetch and convert selected into json object
- let selected = mediaFrame.state().get('selection').first().toJSON();
+ let selected = mediaFrame.state().get("selection").first().toJSON();
// Update form icon link
icon_input.val(selected.url);
// If present, close dialog
if (dialog) {
- $(dialog).dialog('close');
+ $(dialog).dialog("close");
}
// If present, auto-submit; to refresh changes
@@ -595,7 +684,7 @@ jQuery(document).ready(function ($) {
}
// Execute callback with relevant source flag.
- callback('upload');
+ callback("upload");
});
// Open the media uploader.
@@ -605,39 +694,39 @@ jQuery(document).ready(function ($) {
/**
* Sorting code for tiles
*/
- $('.connectedSortable')
+ $(".connectedSortable")
.sortable({
- connectWith: '.connectedSortable',
- placeholder: 'ui-state-highlight',
+ connectWith: ".connectedSortable",
+ placeholder: "ui-state-highlight",
})
.disableSelection();
- $('#sort-tiles')
+ $("#sort-tiles")
.sortable({
- items: 'div.sort-tile:not(.disabled-drag)',
- placeholder: 'ui-state-highlight',
- cancel: '.connectedSortable',
+ items: "div.sort-tile:not(.disabled-drag)",
+ placeholder: "ui-state-highlight",
+ cancel: ".connectedSortable",
})
.disableSelection();
- $('.save-drag-changes').on('click', function () {
+ $(".save-drag-changes").on("click", function () {
let order = [];
- $('.sort-tile').each((a, b) => {
- let tile_key = $(b).attr('id');
+ $(".sort-tile").each((a, b) => {
+ let tile_key = $(b).attr("id");
let tile = {
key: tile_key,
fields: [],
};
$(`#${tile_key} .connectedSortable li`).each((field_index, field) => {
- tile.fields.push($(field).attr('id'));
+ tile.fields.push($(field).attr("id"));
});
order.push(tile);
});
- let input = $('')
- .attr('type', 'hidden')
- .attr('name', 'order')
+ let input = $("")
+ .attr("type", "hidden")
+ .attr("name", "order")
.val(JSON.stringify(order));
- $('#tile-order-form').append(input).submit();
+ $("#tile-order-form").append(input).submit();
});
/**
@@ -645,74 +734,74 @@ jQuery(document).ready(function ($) {
*/
//show more fields when connection option selected
- $('#new_field_type_select').on('change', function () {
- if (this.value === 'connection') {
- $('.connection_field_target_row').show();
- $('#private_field_row').hide();
- $('#connection_field_target').prop('required', true);
+ $("#new_field_type_select").on("change", function () {
+ if (this.value === "connection") {
+ $(".connection_field_target_row").show();
+ $("#private_field_row").hide();
+ $("#connection_field_target").prop("required", true);
} else {
- $('.connection_field_reverse_row').hide();
- $('.connection_field_target_row').hide();
- $('#private_field_row').show();
- $('#connection_field_target').prop('required', false);
+ $(".connection_field_reverse_row").hide();
+ $(".connection_field_target_row").hide();
+ $("#private_field_row").show();
+ $("#connection_field_target").prop("required", false);
}
});
//show the reverse connection field name row if the post type is not "self"
- $('#connection_field_target').on('change', function () {
- let post_type_label = $('#connection_field_target option:selected').text();
- $('.connected_post_type').html(post_type_label);
- if (this.value === $('#current_post_type').val()) {
- $('.same_post_type_other_field_name').toggle(
- !$('#multidirectional_checkbox').is(':checked'),
+ $("#connection_field_target").on("change", function () {
+ let post_type_label = $("#connection_field_target option:selected").text();
+ $(".connected_post_type").html(post_type_label);
+ if (this.value === $("#current_post_type").val()) {
+ $(".same_post_type_other_field_name").toggle(
+ !$("#multidirectional_checkbox").is(":checked")
);
- $('.connection_field_reverse_row').hide();
- $('.same_post_type_row').show();
+ $(".connection_field_reverse_row").hide();
+ $(".same_post_type_row").show();
} else {
- $('.same_post_type_other_field_name').hide();
- $('.connection_field_reverse_row').show();
- $('.same_post_type_row').hide();
+ $(".same_post_type_other_field_name").hide();
+ $(".connection_field_reverse_row").show();
+ $(".same_post_type_row").hide();
}
});
- $('#multidirectional_checkbox').on('change', function () {
- $('.same_post_type_other_field_name').toggle(!this.checked);
+ $("#multidirectional_checkbox").on("change", function () {
+ $(".same_post_type_other_field_name").toggle(!this.checked);
});
/**
* Sorting code for field options
*/
- $('.sortable-field-options')
+ $(".sortable-field-options")
.sortable({
- connectWith: '.sortable-field-options',
- placeholder: 'ui-state-highlight',
+ connectWith: ".sortable-field-options",
+ placeholder: "ui-state-highlight",
update: function (evt, ui) {
let updated_field_options_ordering = [];
// Snapshot updated field options ordering by key.
- $('.sortable-field-options')
- .find('.sortable-field-options-key')
+ $(".sortable-field-options")
+ .find(".sortable-field-options-key")
.each(function (idx, key_div) {
let key = $(key_div).text().trim();
if (key) {
updated_field_options_ordering.push(
- encode_field_key_special_characters(key),
+ encode_field_key_special_characters(key)
);
}
});
// Persist updated field options ordering.
- $('#sortable_field_options_ordering').val(
- JSON.stringify(updated_field_options_ordering),
+ $("#sortable_field_options_ordering").val(
+ JSON.stringify(updated_field_options_ordering)
);
},
})
.disableSelection();
function encode_field_key_special_characters(key) {
- key = window.lodash.replace(key, '<', '_less_than_');
- key = window.lodash.replace(key, '>', '_more_than_');
+ key = window.lodash.replace(key, "<", "_less_than_");
+ key = window.lodash.replace(key, ">", "_more_than_");
return key;
}
@@ -722,20 +811,20 @@ jQuery(document).ready(function ($) {
*/
$(document).on(
- 'click',
+ "click",
'input:radio[name="tile_display_option"]',
function (e) {
handle_tile_display_condition_selection($(e.currentTarget));
- },
+ }
);
function handle_tile_display_condition_selection(display_condition) {
let show_custom =
- display_condition && $(display_condition).val() == 'custom';
- let custom_elements = $('#tile_display_custom_elements');
+ display_condition && $(display_condition).val() == "custom";
+ let custom_elements = $("#tile_display_custom_elements");
show_custom
- ? $(custom_elements).slideDown('slow')
- : $(custom_elements).slideUp('slow');
+ ? $(custom_elements).slideDown("slow")
+ : $(custom_elements).slideUp("slow");
}
/**
@@ -746,29 +835,29 @@ jQuery(document).ready(function ($) {
* Tile Display Help Modal - [START]
*/
- $(document).on('click', '.help-button', function (e) {
+ $(document).on("click", ".help-button", function (e) {
handle_tile_display_help_modal($(e.currentTarget));
});
function handle_tile_display_help_modal(help_button) {
- let dialog = $('#' + $(help_button).data('dialog_id'));
+ let dialog = $("#" + $(help_button).data("dialog_id"));
if (dialog) {
// Refresh help dialog config
dialog.dialog({
modal: true,
autoOpen: false,
- hide: 'fade',
- show: 'fade',
+ hide: "fade",
+ show: "fade",
height: 600,
width: 450,
resizable: true,
- title: 'Help Dialog',
+ title: "Help Dialog",
buttons: [
{
- text: 'OK',
- icon: 'ui-icon-check',
+ text: "OK",
+ icon: "ui-icon-check",
click: function () {
- $(this).dialog('close');
+ $(this).dialog("close");
},
},
],
@@ -776,9 +865,9 @@ jQuery(document).ready(function ($) {
});
// Display help dialog
- dialog.dialog('open');
+ dialog.dialog("open");
} else {
- console.log('Unable to reference a valid: [dialog]');
+ console.log("Unable to reference a valid: [dialog]");
}
}
@@ -790,14 +879,14 @@ jQuery(document).ready(function ($) {
* Alternative Save Flow - [START]
*/
- $(document).on('click', '.dt-custom-fields-save-button', function (e) {
+ $(document).on("click", ".dt-custom-fields-save-button", function (e) {
handle_custom_field_save_request(e, $(e.currentTarget), false);
});
function handle_custom_field_save_request(
event,
save_button,
- translate_update_only,
+ translate_update_only
) {
// If defined, short-circuit default save flow and adopt ajax approach if needed.
if (event) {
@@ -806,19 +895,19 @@ jQuery(document).ready(function ($) {
// Determine which save path is to be taken.
if (!translate_update_only) {
- $('form[name="' + $(save_button).data('form_id') + '"]').submit();
+ $('form[name="' + $(save_button).data("form_id") + '"]').submit();
} else {
// Always capture field parent level name & description translations; which is present across all fields.
let payload = {
- post_type: $(save_button).data('post_type'),
- field_id: $(save_button).data('field_id'),
- field_type: $(save_button).data('field_type'),
+ post_type: $(save_button).data("post_type"),
+ field_id: $(save_button).data("field_id"),
+ field_type: $(save_button).data("field_type"),
translations: package_custom_field_translations(
- $(save_button).data('field_id'),
+ $(save_button).data("field_id")
),
option_translations: window.lodash.includes(
- ['key_select', 'multi_select', 'link'],
- $(save_button).data('field_type'),
+ ["key_select", "multi_select", "link"],
+ $(save_button).data("field_type")
)
? package_custom_field_option_translations()
: [],
@@ -826,72 +915,72 @@ jQuery(document).ready(function ($) {
// Have core endpoint process field translations accordingly.
$.ajax({
- type: 'POST',
- contentType: 'application/json; charset=utf-8',
- dataType: 'json',
+ type: "POST",
+ contentType: "application/json; charset=utf-8",
+ dataType: "json",
data: JSON.stringify(payload),
url: `${window.dt_admin_scripts.rest_root}dt-admin/scripts/update_custom_field_translations`,
beforeSend: (xhr) => {
- xhr.setRequestHeader('X-WP-Nonce', window.dt_admin_scripts.nonce);
+ xhr.setRequestHeader("X-WP-Nonce", window.dt_admin_scripts.nonce);
},
})
.done(function (response) {
// Update translation counts.
- $('#custom_name_translation_count').html(
- response['translations']
- ? Object.keys(response['translations']).length
- : 0,
+ $("#custom_name_translation_count").html(
+ response["translations"]
+ ? Object.keys(response["translations"]).length
+ : 0
);
- $('#custom_description_translation_count').html(
- response['description_translations']
- ? Object.keys(response['description_translations']).length
- : 0,
+ $("#custom_description_translation_count").html(
+ response["description_translations"]
+ ? Object.keys(response["description_translations"]).length
+ : 0
);
if (
- response['defaults'] &&
+ response["defaults"] &&
window.lodash.includes(
- ['key_select', 'multi_select', 'link'],
- $(save_button).data('field_type'),
+ ["key_select", "multi_select", "link"],
+ $(save_button).data("field_type")
)
) {
- $('.sortable-field-options')
- .find('tr.ui-sortable-handle')
+ $(".sortable-field-options")
+ .find("tr.ui-sortable-handle")
.each(function (idx, tr) {
let option_key = $(tr)
- .find('.sortable-field-options-key')
+ .find(".sortable-field-options-key")
.text()
.trim();
$(tr)
- .find('#option_name_translation_count')
+ .find("#option_name_translation_count")
.html(
- response['defaults'] &&
- response['defaults'][option_key] &&
- response['defaults'][option_key]['translations']
+ response["defaults"] &&
+ response["defaults"][option_key] &&
+ response["defaults"][option_key]["translations"]
? Object.keys(
- response['defaults'][option_key]['translations'],
+ response["defaults"][option_key]["translations"]
).length
- : 0,
+ : 0
);
$(tr)
- .find('#option_description_translation_count')
+ .find("#option_description_translation_count")
.html(
- response['defaults'] &&
- response['defaults'][option_key] &&
- response['defaults'][option_key][
- 'description_translations'
+ response["defaults"] &&
+ response["defaults"][option_key] &&
+ response["defaults"][option_key][
+ "description_translations"
]
? Object.keys(
- response['defaults'][option_key][
- 'description_translations'
- ],
+ response["defaults"][option_key][
+ "description_translations"
+ ]
).length
- : 0,
+ : 0
);
});
}
})
.fail(function (error) {
- console.log('error');
+ console.log("error");
console.log(error);
});
}
@@ -904,12 +993,12 @@ jQuery(document).ready(function ($) {
};
// Locate field name translations.
- let field_name_prefix = 'field_key_' + field_id + '_translation-';
+ let field_name_prefix = "field_key_" + field_id + "_translation-";
$("input[id^='" + field_name_prefix + "']").each(function (idx, input) {
- let locale = window.lodash.split($(input).attr('id'), '-')[1];
+ let locale = window.lodash.split($(input).attr("id"), "-")[1];
let value = $(input).val();
if (locale && value) {
- packaged_translations['translations'].push({
+ packaged_translations["translations"].push({
locale: locale,
value: value,
});
@@ -917,19 +1006,20 @@ jQuery(document).ready(function ($) {
});
// Locate field description translations.
- let field_description_prefix = 'field_description_translation-';
- $("input[id^='" + field_description_prefix + "']").each(
- function (idx, input) {
- let locale = window.lodash.split($(input).attr('id'), '-')[1];
- let value = $(input).val();
- if (locale && value) {
- packaged_translations['description_translations'].push({
- locale: locale,
- value: value,
- });
- }
- },
- );
+ let field_description_prefix = "field_description_translation-";
+ $("input[id^='" + field_description_prefix + "']").each(function (
+ idx,
+ input
+ ) {
+ let locale = window.lodash.split($(input).attr("id"), "-")[1];
+ let value = $(input).val();
+ if (locale && value) {
+ packaged_translations["description_translations"].push({
+ locale: locale,
+ value: value,
+ });
+ }
+ });
return packaged_translations;
}
@@ -937,33 +1027,33 @@ jQuery(document).ready(function ($) {
function package_custom_field_option_translations() {
let packaged_translations = [];
- $('.sortable-field-options')
- .find('tr.ui-sortable-handle')
+ $(".sortable-field-options")
+ .find("tr.ui-sortable-handle")
.each(function (idx, tr) {
let translations = {
- option_key: '',
+ option_key: "",
option_translations: [],
option_description_translations: [],
};
// Determine option key.
let option_key = $(tr)
- .find('.sortable-field-options-key')
+ .find(".sortable-field-options-key")
.text()
.trim();
if (option_key) {
- translations['option_key'] = option_key;
+ translations["option_key"] = option_key;
// Locate option key translations.
let option_key_prefix =
- 'field_option_' + option_key + '_translation-';
+ "field_option_" + option_key + "_translation-";
$(tr)
.find("input[id^='" + option_key_prefix + "']")
.each(function (okt_idx, okt_input) {
- let locale = window.lodash.split($(okt_input).attr('id'), '-')[1];
+ let locale = window.lodash.split($(okt_input).attr("id"), "-")[1];
let value = $(okt_input).val();
if (locale && value) {
- translations['option_translations'].push({
+ translations["option_translations"].push({
locale: locale,
value: $(okt_input).val(),
});
@@ -972,17 +1062,17 @@ jQuery(document).ready(function ($) {
// Locate option key description translations.
let option_key_description_prefix =
- 'option_description_' + option_key + '_translation-';
+ "option_description_" + option_key + "_translation-";
$(tr)
.find("input[id^='" + option_key_description_prefix + "']")
.each(function (okdt_idx, okdt_input) {
let locale = window.lodash.split(
- $(okdt_input).attr('id'),
- '-',
+ $(okdt_input).attr("id"),
+ "-"
)[1];
let value = $(okdt_input).val();
if (locale && value) {
- translations['option_description_translations'].push({
+ translations["option_description_translations"].push({
locale: locale,
value: $(okdt_input).val(),
});
diff --git a/dt-core/admin/menu/tabs/tab-custom-lists.php b/dt-core/admin/menu/tabs/tab-custom-lists.php
index baee73025..ea8c3a4d8 100644
--- a/dt-core/admin/menu/tabs/tab-custom-lists.php
+++ b/dt-core/admin/menu/tabs/tab-custom-lists.php
@@ -624,9 +624,7 @@ private function languages_box(){
});
$form_name = 'languages_box';
?>
-