1var mainLanguage = ditrData.mainLanguage || 'en' 2var defaultLanguage = ditrData.defaultLanguage || 'en' 3var custom_strings = ditrData.custom_strings || [] 4var auto_translate_to = ditrData.auto_translate_to || null 5var selectedLanguages = ditrData.selectedLanguages || [] 6var blacklist = ditrData.blacklist || [] 7var autoDetect = ditrData.autoDetect || false 8var autoTranslateAll = ditrData.autoTranslateAll || false 9 10jQuery($ => { 11 if ($("#wp-admin-bar-et-disable-visual-builder").length == 0 && $("#poststuff #post-body #post-body-content #titlediv input#title").length == 0) {//disable on builder 12 $("body").append(`<div id="ditr_translate_element" class="skiptranslate"></div>`); 13 if (ditrData.translate_title == '0') { 14 $("title").addClass('notranslate') 15 } 16 $("#wpadminbar,.et-pb-icon").addClass('skiptranslate'); 17 $("[data-text_orientation]").each(function () { 18 let text_orientation = $(this).data('text_orientation') 19 if (text_orientation) { 20 $(this).parent().parent().css('text-align', text_orientation) 21 } 22 }); 23 $(".ditr-switch-language").change(function () { 24 let lang = $(this).val().replace('-uk', ''); 25 switchLanguage(lang) 26 }); 27 $(".ditr-abbr-lang-switcher,.ditr-flag-lang-switcher").click(function () { 28 let lang = $(this).data('lang').replace('-uk', ''); 29 switchLanguage(lang, $(this).data('link')) 30 }); 31 setTimeout(function () { 32 if (auto_translate_to) { 33 switchLanguage(auto_translate_to) 34 } else { 35 let selected = $(".goog-te-combo").val(); 36 let lang = selected ? selected.split('-')[0] : mainLanguage 37 if (!selected && autoDetect) { 38 let browserLangauge = navigator.language.split('-')[0] 39 if (selectedLanguages[browserLangauge] || autoTranslateAll) { 40 lang = browserLangauge 41 } 42 } 43 setUiLanguage(lang); 44 setCustomStrings(lang) 45 } 46 }, 2000); 47 jQuery.expr[':'].icontains = function (a, i, m) { 48 return jQuery(a).text().toUpperCase() 49 .indexOf(m[3].toUpperCase()) >= 0; 50 }; 51 $('a[href^="mailto:"]').addClass("skiptranslate") 52 if (blacklist) { 53 for (let blacklistString of blacklist) { 54 let textToFind = blacklistString.string.replace("'", 'â') 55 let caseSensitive = blacklistString.is_case_sensitive; 56 if (textToFind) { 57 let searchBy = caseSensitive ? 'contains' : 'icontains' 58 $(`body :${searchBy}('${textToFind}')`).each(function () { 59 let tagName = $(this).prop("tagName").toLowerCase() 60 if (tagName != 'script' && tagName != 'style' && $(this).children().length == 0 && $(this).parents('script').length == 0) { 61 if ($(this).text().toLowerCase() == textToFind.toLowerCase()) { 62 $(this).addClass("skiptranslate") 63 } else { 64 let replace = new RegExp(`\b(${textToFind})\b`, 'g' + (caseSensitive ? '' : 'i')); 65 // $(this).html($(this).text().replace(replace, `<span class="skiptranslate">${replace}</span>`)) 66 $(this).html($(this).text().replace(replace, `<span class="skiptranslate"> ${textToFind} </span>`)) 67 } 68 } 69 }); 70 } 71 } 72 } 73 // console.log(custom_strings) 74 if (custom_strings) { 75 // jQuery.expr[':'].icontains = function (a, i, m) { 76 // return jQuery(a).text().toUpperCase() 77 // .indexOf(m[3].toUpperCase()) >= 0; 78 // }; 79 for (let index in custom_strings) { 80 let customString = custom_strings[index] 81 let textToFind = customString.original 82 // alert(textToFind) 83 let caseSensitive = customString.is_case_sensitive; 84 if (textToFind) { 85 let searchBy = caseSensitive ? 'contains' : 'icontains' 86 $(`body :${searchBy}('${textToFind}')`).each(function () { 87 let tagName = $(this).prop("tagName").toLowerCase() 88 if (['style', 'script'].indexOf(tagName) >= 0) return; 89 // if (tagName == 'script') return; 90 if ($(this).parents('script').length) return; 91 let foundInText = false;
92 for (let content of $(this).contents()) { 93 if (content.nodeName == '#text' && content.data.toLowerCase().indexOf(textToFind.toLowerCase()) >= 0) { 94 foundInText = true 95 } 96 } 97 if ($(this).children().length == 0 || foundInText) { 98 if ($(this).text().toLowerCase() == textToFind.toLowerCase()) { 99 $(this).addClass("skiptranslate").attr("data-custom-string-index", index) 100 } else { 101 // let replace = new RegExp(`(${textToFind})`, 'g' + (caseSensitive ? '' : 'i')); 102 let replace = new RegExp(`\b(${textToFind})\b`, 'g' + (caseSensitive ? '' : 'i')); 103 $(this).html($(this).html().replace(replace, `<span data-custom-string-index="${index}" class="skiptranslate"> ${textToFind} </span>`)) 104 } 105 } 106 }); 107 } 108 $(`input[type="submit"][value="${textToFind}"]`).attr("data-custom-string-index", index).parent().addClass("skiptranslate") 109 } 110 } 111 112 function setUiLanguage(lang) { 113 $(".ditr-abbr-lang-switcher").removeClass("active") 114 $(".ditr-flag-lang-switcher").removeClass("active") 115 $(`.ditr-abbr-lang-switcher[data-lang=${lang}]`).addClass("active") 116 $(`.ditr-flag-lang-switcher[data-lang=${lang}]`).addClass("active") 117 if ($(`.ditr-switch-language option[value=${lang}]`).length) { 118 $(".ditr-switch-language").val(lang); 119 } 120 } 121 122 function setCustomStrings(lang) { 123 $('[data-custom-string-index]').each(function () { 124 let index = $(this).attr("data-custom-string-index") 125 if (custom_strings[index] && custom_strings[index].original) { 126 let translated = custom_strings[index].original 127 let translatedStrings = custom_strings[index].translated; 128 if (translatedStrings[lang]) { 129 translated = translatedStrings[lang] 130 } else if (translatedStrings[`${lang}-uk`]) { 131 translated = translatedStrings[`${lang}-uk`] 132 } 133 if ($(this).attr("type") == 'submit' && $(this).prop("tagName") == 'INPUT') { 134 $(this).val(translated); 135 } else { 136 if ($(this).prop("tagName") == 'SPAN') { 137 translated = ` ${translated} ` 138 } 139 $(this).text(translated); 140 } 141 } 142 }); 143 } 144 145 function switchLanguage(lang, link) { 146 setUiLanguage(lang) 147 setCustomStrings(lang) 148 let currentLang = $("select.goog-te-combo").val() 149 if (currentLang == lang) { //new language is same as before 150 return; 151 } 152 153 if ($(`.goog-te-combo option[value=${lang}]`).length == 0) { 154 return 155 } 156 157 $("select.goog-te-combo").val(lang) 158 triggerHtmlEvent($("select.goog-te-combo")[0], 'change'); 159 triggerHtmlEvent($("select.goog-te-combo")[0], 'change'); 160 if (link) { 161 setTimeout(() => { 162 location = link 163 }, 1000) 164 } 165 } 166 } 167}) 168 169function triggerHtmlEvent(element, eventName) { 170 var event; 171 event = document.createEvent('HTMLEvents'); 172 event.initEvent(eventName, true, true); 173 element.dispatchEvent(event); 174} 175 176function ditrTranslateElementInit() { 177 setTimeout(function () { 178 new google.translate.TranslateElement({pageLanguage: mainLanguage, autoDisplay: false}, 'ditr_translate_element'); 179 }, 1000); 180}
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.