j1-template 2021.2.4 → 2021.2.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/_includes/themes/j1/modules/connectors/ad/google-adsense.html +7 -0
- data/_includes/themes/j1/modules/connectors/translators/google-translator.html +2 -1
- data/_layouts/default.html +0 -1
- data/assets/data/iso-639-language-codes-flags.json +224 -0
- data/assets/data/{translator_languages.json → iso-639-language-codes.json} +111 -142
- data/assets/data/translator.html +24 -20
- data/assets/themes/j1/adapter/js/translator.1.js +525 -0
- data/assets/themes/j1/adapter/js/translator.js +104 -181
- data/assets/themes/j1/core/css/themes/bootstrap/bootstrap.css +27 -12
- data/assets/themes/j1/core/css/themes/bootstrap/bootstrap.min.css +1 -1
- data/assets/themes/j1/core/css/themes/uno-dark/bootstrap.css +27 -12
- data/assets/themes/j1/core/css/themes/uno-dark/bootstrap.min.css +1 -1
- data/assets/themes/j1/core/css/themes/uno-light/bootstrap.css +59 -22
- data/assets/themes/j1/core/css/themes/uno-light/bootstrap.min.css +1 -1
- data/assets/themes/j1/modules/lightGallery/js/modules/lg-thumbnail.js +16 -8
- data/assets/themes/j1/modules/translator/js/translator.js +208 -236
- data/assets/themes/j1/modules/translator/js/translator.min.js +2 -2
- data/lib/j1/version.rb +1 -1
- data/lib/starter_web/Gemfile +1 -1
- data/lib/starter_web/_config.yml +1 -1
- data/lib/starter_web/_data/j1_config.yml +2 -22
- data/lib/starter_web/_data/modules/defaults/translator.yml +77 -64
- data/lib/starter_web/_data/modules/translator.yml +1 -0
- data/lib/starter_web/_includes/attributes.asciidoc +1 -1
- data/lib/starter_web/_plugins/lunr_index.rb +1 -1
- data/lib/starter_web/package.json +1 -1
- data/lib/starter_web/pages/public/learn/roundtrip/400_asciidoc_extensions.adoc +3 -3
- data/lib/starter_web/utilsrv/_defaults/package.json +1 -1
- data/lib/starter_web/utilsrv/package.json +1 -1
- metadata +5 -7
- data/assets/data/msdropdown.json +0 -155
- data/assets/themes/j1/modules/lightGallery/js/modules/lg-video.js +0 -342
- data/assets/themes/j1/modules/lightGallery/js/modules/lg-video.min.js +0 -5
- data/lib/starter_web/assets/images/pages/features/percentage_global_mobile_tr.jpg +0 -0
@@ -157,29 +157,37 @@
|
|
157
157
|
if (isVideo.youtube || isVideo.vimeo || isVideo.dailymotion) {
|
158
158
|
if (isVideo.youtube) {
|
159
159
|
if (_this.core.s.loadYoutubeThumbnail) {
|
160
|
-
|
160
|
+
// jadams, 2021-10-27: disabled, loading always configured thumbImg
|
161
|
+
// thumbImg = '//img.youtube.com/vi/' + isVideo.youtube[1] + '/' + _this.core.s.youtubeThumbSize + '.jpg';
|
162
|
+
thumbImg = thumb;
|
161
163
|
} else {
|
162
|
-
|
164
|
+
thumbImg = thumb;
|
163
165
|
}
|
164
166
|
} else if (isVideo.vimeo) {
|
165
167
|
if (_this.core.s.loadVimeoThumbnail) {
|
166
|
-
|
167
|
-
|
168
|
+
// jadams, 2021-10-27: disabled, loading thumbImg this ways fails
|
169
|
+
// thumbImg = '//i.vimeocdn.com/video/error_' + vimeoErrorThumbSize + '.jpg';
|
170
|
+
// vimeoId = isVideo.vimeo[1];
|
171
|
+
thumbImg = thumb;
|
168
172
|
} else {
|
169
|
-
|
173
|
+
thumbImg = thumb;
|
170
174
|
}
|
171
175
|
} else if (isVideo.dailymotion) {
|
172
176
|
if (_this.core.s.loadDailymotionThumbnail) {
|
173
|
-
|
177
|
+
// jadams, 2021-10-27: disabled, loading always configured thumbImg
|
178
|
+
// thumbImg = '//www.dailymotion.com/thumbnail/video/' + isVideo.dailymotion[1];
|
179
|
+
thumbImg = thumb;
|
174
180
|
} else {
|
175
|
-
|
181
|
+
thumbImg = thumb;
|
176
182
|
}
|
177
183
|
}
|
178
184
|
} else {
|
179
185
|
thumbImg = thumb;
|
180
186
|
}
|
181
187
|
|
182
|
-
|
188
|
+
// jadams, 2021-10-27: removed unclear data-vimeo-id
|
189
|
+
// thumbList += '<div ="' + vimeoId + '" class="lg-thumb-item" style="width:' + _this.core.s.thumbWidth + 'px; height: ' + _this.core.s.thumbHeight + '; margin-right: ' + _this.core.s.thumbMargin + 'px"><img src="' + thumbImg + '" /></div>';
|
190
|
+
thumbList += '<div class="lg-thumb-item" style="width:' + _this.core.s.thumbWidth + 'px; height: ' + _this.core.s.thumbHeight + '; margin-right: ' + _this.core.s.thumbMargin + 'px"><img src="' + thumbImg + '" /></div>';
|
183
191
|
vimeoId = '';
|
184
192
|
}
|
185
193
|
|
@@ -26,153 +26,50 @@
|
|
26
26
|
// -----------------------------------------------------------------------------
|
27
27
|
|
28
28
|
function Translator(props) {
|
29
|
-
|
30
|
-
|
29
|
+
|
30
|
+
// ---------------------------------------------------------------------------
|
31
|
+
// global vars
|
32
|
+
// ---------------------------------------------------------------------------
|
31
33
|
var self = this;
|
34
|
+
var logger = log4javascript.getLogger('j1.core.translator');
|
35
|
+
var pageURL = new liteURL(window.location.href);
|
36
|
+
var cookieSecure = (pageURL.protocol.includes('https')) ? true : false;
|
32
37
|
var detailedSettingsShown = false;
|
33
|
-
var url = new liteURL(window.location.href);
|
34
|
-
var cookieSecure = (url.protocol.includes('https')) ? true : false;
|
35
|
-
var logText;
|
36
|
-
var current_page;
|
37
|
-
var whitelisted;
|
38
|
-
var ddTranslationSourceLanguage;
|
39
38
|
var navigator_language;
|
40
39
|
var translation_language;
|
41
40
|
|
42
41
|
// ---------------------------------------------------------------------------
|
43
|
-
//
|
42
|
+
// default property settings
|
44
43
|
// ---------------------------------------------------------------------------
|
45
|
-
|
46
44
|
this.props = {
|
47
|
-
contentURL:
|
48
|
-
cookieName:
|
49
|
-
cookieConsentName:
|
50
|
-
cookieStorageDays:
|
51
|
-
cookieSameSite:
|
52
|
-
cookieSecure:
|
53
|
-
translationEnabled:
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
// supported languages by Google Translate
|
68
|
-
this.googleTranslatorLanguages = {
|
69
|
-
'af': { 'name': 'Afrikaans' },
|
70
|
-
'sq': { 'name': 'Albanian' },
|
71
|
-
'ar': { 'name': 'Arabic' },
|
72
|
-
'hy': { 'name': 'Armenian' },
|
73
|
-
'az': { 'name': 'Azerbaijani' },
|
74
|
-
'eu': { 'name': 'Basque' },
|
75
|
-
'be': { 'name': 'Belarusian' },
|
76
|
-
'bn': { 'name': 'Bengali' },
|
77
|
-
'bg': { 'name': 'Bulgarian' },
|
78
|
-
'ca': { 'name': 'Catalan' },
|
79
|
-
'zh-CN': { 'name': 'Chinese (Simplified)' },
|
80
|
-
'zh-TW': { 'name': 'Chinese (Traditional)' },
|
81
|
-
'hr': { 'name': 'Croatian' },
|
82
|
-
'cs': { 'name': 'Czech' },
|
83
|
-
'da': { 'name': 'Danish' },
|
84
|
-
'nl': { 'name': 'Dutch' },
|
85
|
-
'eo': { 'name': 'Esperanto' },
|
86
|
-
'et': { 'name': 'Estonian' },
|
87
|
-
'tl': { 'name': 'Filipino' },
|
88
|
-
'fi': { 'name': 'Finnish' },
|
89
|
-
'fr': { 'name': 'French' },
|
90
|
-
'gl': { 'name': 'Galician' },
|
91
|
-
'ka': { 'name': 'Georgian' },
|
92
|
-
'de': { 'name': 'German' },
|
93
|
-
'el': { 'name': 'Greek' },
|
94
|
-
'gu': { 'name': 'Gujarati' },
|
95
|
-
'ht': { 'name': 'Haitian Creole' },
|
96
|
-
'iw': { 'name': 'Hebrew' },
|
97
|
-
'hi': { 'name': 'Hindi' },
|
98
|
-
'hu': { 'name': 'Hungarian' },
|
99
|
-
'is': { 'name': 'Icelandic' },
|
100
|
-
'id': { 'name': 'Indonesian' },
|
101
|
-
'ga': { 'name': 'Irish' },
|
102
|
-
'it': { 'name': 'Italian' },
|
103
|
-
'ja': { 'name': 'Japanese' },
|
104
|
-
'kn': { 'name': 'Kannada' },
|
105
|
-
'ko': { 'name': 'Korean' },
|
106
|
-
'la': { 'name': 'Latin' },
|
107
|
-
'lv': { 'name': 'Latvian' },
|
108
|
-
'lt': { 'name': 'Lithuanian' },
|
109
|
-
'mk': { 'name': 'Macedonian' },
|
110
|
-
'ms': { 'name': 'Malay' },
|
111
|
-
'mt': { 'name': 'Maltese' },
|
112
|
-
'no': { 'name': 'Norwegian' },
|
113
|
-
'fa': { 'name': 'Persian' },
|
114
|
-
'pl': { 'name': 'Polish' },
|
115
|
-
'pt': { 'name': 'Portuguese' },
|
116
|
-
'ro': { 'name': 'Romanian' },
|
117
|
-
'ru': { 'name': 'Russian' },
|
118
|
-
'sr': { 'name': 'Serbian' },
|
119
|
-
'sk': { 'name': 'Slovak' },
|
120
|
-
'sl': { 'name': 'Slovenian' },
|
121
|
-
'es': { 'name': 'Spanish' },
|
122
|
-
'sw': { 'name': 'Swahili' },
|
123
|
-
'sv': { 'name': 'Swedish' },
|
124
|
-
'ta': { 'name': 'Tamil' },
|
125
|
-
'te': { 'name': 'Telugu' },
|
126
|
-
'th': { 'name': 'Thai' },
|
127
|
-
'tr': { 'name': 'Turkish' },
|
128
|
-
'uk': { 'name': 'Ukrainian' },
|
129
|
-
'ur': { 'name': 'Urdu' },
|
130
|
-
'vi': { 'name': 'Vietnamese' },
|
131
|
-
'cy': { 'name': 'Welsh' },
|
132
|
-
'yi': { 'name': 'Yiddish' }
|
133
|
-
};
|
134
|
-
|
135
|
-
// supported languages by Deepl Translate
|
136
|
-
this.deeplTranslatorLanguages = {
|
137
|
-
'bg': { 'name': 'Bulgarian' },
|
138
|
-
'cs': { 'name': 'Czech' },
|
139
|
-
'da': { 'name': 'Danish' },
|
140
|
-
'de': { 'name': 'German' },
|
141
|
-
'el': { 'name': 'Greek' },
|
142
|
-
'es': { 'name': 'Spanish' },
|
143
|
-
'en': { 'name': 'English' },
|
144
|
-
'en-us': { 'name': 'English (American)' },
|
145
|
-
'en-uk': { 'name': 'English (British)' },
|
146
|
-
'et': { 'name': 'Estonian' },
|
147
|
-
'ft': { 'name': 'Finnish' },
|
148
|
-
'fr': { 'name': 'French' },
|
149
|
-
'hu': { 'name': 'Hungarian' },
|
150
|
-
'it': { 'name': 'Italian' },
|
151
|
-
'ja': { 'name': 'Japanese' },
|
152
|
-
'lv': { 'name': 'Latvian' },
|
153
|
-
'lt': { 'name': 'Lithuanian' },
|
154
|
-
'nl': { 'name': 'Dutch' },
|
155
|
-
'af': { 'name': 'Polish' },
|
156
|
-
'pt': { 'name': 'Portuguese' },
|
157
|
-
'pt-pt': { 'name': 'Portuguese (Portugal)' },
|
158
|
-
'pt-br': { 'name': 'Portuguese (Brazilian)' },
|
159
|
-
'ro': { 'name': 'Romanian' },
|
160
|
-
'ru': { 'name': 'Russian' },
|
161
|
-
'sk': { 'name': 'Slovak' },
|
162
|
-
'sl': { 'name': 'Slovenian' },
|
163
|
-
'sv': { 'name': 'Swedish' },
|
164
|
-
'zh': { 'name': 'Chinese' },
|
45
|
+
contentURL: '/assets/data/translator', // this URL must contain the dialog content (modals) in the needed languages
|
46
|
+
cookieName: 'j1.user.state', // the name of the User State Cookie (primary data)
|
47
|
+
cookieConsentName: 'j1.user.consent', // the name of the Cookie Consent Cookie (secondary data)
|
48
|
+
cookieStorageDays: 365, // the duration the cookie is stored on the client
|
49
|
+
cookieSameSite: 'Strict', // restrict consent cookie to first-party, do NOT send cookie to other domains
|
50
|
+
cookieSecure: cookieSecure, // secure flag on cookies
|
51
|
+
translationEnabled: false, // enable|disable translation on first page view
|
52
|
+
disableLanguageSelector: false, // disable language dropdown for translation in dialog (modal)
|
53
|
+
translatorName: 'google', // name of the default translator
|
54
|
+
translationLanguages: 'all', // supported languages for translation
|
55
|
+
translationLanguage: 'auto', // language used for translation
|
56
|
+
translateAllPages: true, // enable tranlation on all pages
|
57
|
+
hideSuggestionBox: true, // disable suggestions on translated text
|
58
|
+
hidePoweredBy: true, // disable label "Powered by Google"
|
59
|
+
hideTopFrame: true, // disable the (google) translator frame
|
60
|
+
dialogLanguage: 'content', // language used for the consent dialog (modal)
|
61
|
+
dialogLanguages: ['en','de'], // supported languages for the consent dialog (modal), defaults to first in array//
|
62
|
+
dialogContainerID: 'translator-modal', // container, the dialog modal is (dynamically) loaded
|
63
|
+
xhrDataElement: '', // container for the language-specific consent modal taken from /assets/data/cookieconsent.html
|
64
|
+
postSelectionCallback: '', // callback function, called after the user has made his selection
|
165
65
|
};
|
166
66
|
|
67
|
+
// merge properties from default|module
|
167
68
|
for (var property in props) {
|
168
69
|
this.props[property] = props[property];
|
169
70
|
}
|
170
71
|
|
171
|
-
//
|
172
|
-
for (var property in props) {
|
173
|
-
this.props[property] = props[property];
|
174
|
-
}
|
175
|
-
|
72
|
+
// extract the language portion (e.g. "en" for English)
|
176
73
|
if (this.props.dialogLanguage.indexOf("-") !== -1) {
|
177
74
|
this.props.dialogLanguage = this.props.dialogLanguage.split("-")[0];
|
178
75
|
}
|
@@ -182,12 +79,9 @@ function Translator(props) {
|
|
182
79
|
this.props.dialogLanguage = this.props.dialogLanguages[0];
|
183
80
|
}
|
184
81
|
|
185
|
-
// set
|
82
|
+
// set the xhrDataElement of the modal loadad based on dialogLanguage
|
186
83
|
this.props.xhrDataElement = this.props.xhrDataElement + '-' + this.props.dialogLanguage;
|
187
84
|
|
188
|
-
// set modal by dialogLanguage that is loadad
|
189
|
-
this.props.cookieSecure = cookieSecure;
|
190
|
-
|
191
85
|
logger.info('\n' + 'initializing core module: started');
|
192
86
|
logger.info('\n' + 'state: started');
|
193
87
|
|
@@ -196,6 +90,7 @@ function Translator(props) {
|
|
196
90
|
// ---------------------------------------------------------------------------
|
197
91
|
|
198
92
|
// ---------------------------------------------------------------------------
|
93
|
+
// Cookie()
|
199
94
|
// manage cookies
|
200
95
|
// ---------------------------------------------------------------------------
|
201
96
|
var Cookie = {
|
@@ -232,7 +127,7 @@ function Translator(props) {
|
|
232
127
|
};
|
233
128
|
|
234
129
|
// ---------------------------------------------------------------------------
|
235
|
-
//
|
130
|
+
// global event handler
|
236
131
|
// ---------------------------------------------------------------------------
|
237
132
|
var Events = {
|
238
133
|
documentReady: function (onDocumentReady) {
|
@@ -245,45 +140,127 @@ function Translator(props) {
|
|
245
140
|
};
|
246
141
|
|
247
142
|
// ---------------------------------------------------------------------------
|
248
|
-
//
|
143
|
+
// extend()
|
144
|
+
// deep merge of two objects
|
145
|
+
// ---------------------------------------------------------------------------
|
146
|
+
function extend () {
|
147
|
+
var extended = {};
|
148
|
+
var deep = false;
|
149
|
+
var i = 0;
|
150
|
+
var length = arguments.length;
|
151
|
+
|
152
|
+
// Check if a deep merge
|
153
|
+
if ( Object.prototype.toString.call( arguments[0] ) === '[object Boolean]' ) {
|
154
|
+
deep = arguments[0];
|
155
|
+
i++;
|
156
|
+
}
|
157
|
+
|
158
|
+
// Merge the object into the extended object
|
159
|
+
var merge = function (obj) {
|
160
|
+
for ( var prop in obj ) {
|
161
|
+
if ( Object.prototype.hasOwnProperty.call( obj, prop ) ) {
|
162
|
+
// If deep merge and property is an object, merge properties
|
163
|
+
if ( deep && Object.prototype.toString.call(obj[prop]) === '[object Object]' ) {
|
164
|
+
extended[prop] = extend( true, extended[prop], obj[prop] );
|
165
|
+
} else {
|
166
|
+
extended[prop] = obj[prop];
|
167
|
+
}
|
168
|
+
}
|
169
|
+
}
|
170
|
+
};
|
171
|
+
|
172
|
+
// Loop through each object and conduct a merge
|
173
|
+
for ( ; i < length; i++ ) {
|
174
|
+
var obj = arguments[i];
|
175
|
+
merge(obj);
|
176
|
+
}
|
177
|
+
return extended;
|
178
|
+
}
|
179
|
+
|
180
|
+
// ---------------------------------------------------------------------------
|
181
|
+
// executeFunctionByName()
|
182
|
+
// execute a function by NAME (functionName) in a browser context
|
183
|
+
// (e.g. window) the function is published
|
184
|
+
// ---------------------------------------------------------------------------
|
185
|
+
function executeFunctionByName (functionName, context /*, args */) {
|
186
|
+
var args = Array.prototype.slice.call(arguments, 2);
|
187
|
+
var namespaces = functionName.split('.');
|
188
|
+
var func = namespaces.pop();
|
189
|
+
for(var i = 0; i < namespaces.length; i++) {
|
190
|
+
context = context[namespaces[i]];
|
191
|
+
}
|
192
|
+
return context[func].apply(context, args);
|
193
|
+
}
|
194
|
+
|
195
|
+
// ---------------------------------------------------------------------------
|
196
|
+
// createMsDropdownFromJSON()
|
249
197
|
// Create a msDropdown select DYNAMICALLY from JSON data located in a file
|
250
198
|
// specified by "url". The JSON file contaians mutiple msDropdown elements
|
251
199
|
// selected by "elm". The base (empty) <div> container the msDropdown will
|
252
200
|
// be created is specified by theID given by "selector".
|
253
201
|
// ---------------------------------------------------------------------------
|
254
202
|
function createMsDropdownFromJSON (options /* url, elm, selector */) {
|
255
|
-
var
|
256
|
-
|
203
|
+
var selectorID;
|
204
|
+
|
205
|
+
// -----------------------------------------------------------------------
|
206
|
+
// Merge values from defaults|options
|
207
|
+
// -----------------------------------------------------------------------
|
208
|
+
var settings = extend ({
|
209
|
+
size: 0,
|
210
|
+
width: 250,
|
211
|
+
multiple: false,
|
212
|
+
selectedIndex: 1,
|
213
|
+
enableAutoFilter: false,
|
214
|
+
visibleRows: null,
|
215
|
+
}, options);
|
216
|
+
|
217
|
+
selectorID = '#' + settings.selector;
|
257
218
|
|
258
219
|
$.ajax({
|
259
|
-
url:
|
220
|
+
url: settings.url,
|
260
221
|
dataType: 'json',
|
261
222
|
success: function (data) {
|
223
|
+
var dropdownLanguages = [];
|
224
|
+
|
225
|
+
// collect translation languages
|
226
|
+
if (self.props.translationLanguages.includes('all')) {
|
227
|
+
dropdownLanguages = data[settings.elm];
|
228
|
+
} else {
|
229
|
+
for (var i = 0; i < data[settings.elm].length; i++) {
|
230
|
+
if(self.props.translationLanguages.includes(data[settings.elm][i].value)) {
|
231
|
+
dropdownLanguages.push(data[settings.elm][i]);
|
232
|
+
}
|
233
|
+
}
|
234
|
+
}
|
235
|
+
|
236
|
+
// correct rows of the dropdown if required
|
237
|
+
if (settings.visibleRows > dropdownLanguages.length) {
|
238
|
+
settings.visibleRows = dropdownLanguages.length;
|
239
|
+
}
|
240
|
+
|
241
|
+
// create the dropdown
|
262
242
|
MsDropdown.make(selectorID, {
|
263
243
|
byJson: {
|
264
|
-
data:
|
265
|
-
name:
|
266
|
-
|
267
|
-
|
268
|
-
|
269
|
-
// multiple: false
|
244
|
+
data: dropdownLanguages,
|
245
|
+
name: settings.name,
|
246
|
+
size: settings.size,
|
247
|
+
width: settings.width,
|
248
|
+
multiple: settings.multiple,
|
270
249
|
},
|
271
|
-
enableAutoFilter:
|
250
|
+
enableAutoFilter: settings.enableAutoFilter,
|
251
|
+
visibleRows: settings.visibleRows,
|
272
252
|
});
|
273
|
-
|
274
|
-
// msDropdown = document.getElementById(options.selector).msDropdown;
|
275
|
-
// msDropdown.selectedIndex = 1;
|
276
|
-
// $(selectorID).show();
|
277
|
-
// msDropdown.on('close', function() {
|
278
|
-
// console.log(msDropdown.value)
|
279
|
-
// });
|
280
253
|
},
|
281
254
|
error: function (jqXHR, textStatus, errorThrown) {
|
282
|
-
logger.error('\n' + 'failed to retrieve JSON data from: ' + url);
|
255
|
+
logger.error('\n' + 'failed to retrieve JSON data from: ' + settings.url);
|
283
256
|
}
|
284
257
|
});
|
285
258
|
}
|
286
259
|
|
260
|
+
// ---------------------------------------------------------------------------
|
261
|
+
// showDialog
|
262
|
+
// Show|Create the translation dialog (modal)
|
263
|
+
// ---------------------------------------------------------------------------
|
287
264
|
function showDialog() {
|
288
265
|
Events.documentReady(function () {
|
289
266
|
|
@@ -295,101 +272,85 @@ function Translator(props) {
|
|
295
272
|
self.modal.setAttribute('class', 'modal fade');
|
296
273
|
self.modal.setAttribute('tabindex', '-1');
|
297
274
|
self.modal.setAttribute('role', 'dialog');
|
298
|
-
self.modal.setAttribute('aria-labelledby', dialogContainerID);
|
275
|
+
self.modal.setAttribute('aria-labelledby', self.props.dialogContainerID);
|
299
276
|
document.body.append(self.modal);
|
300
277
|
self.$modal = $(self.modal);
|
301
278
|
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
});
|
306
|
-
}
|
279
|
+
// ---------------------------------------------------------------------
|
280
|
+
// register events for the dialog (modal)
|
281
|
+
// ---------------------------------------------------------------------
|
307
282
|
|
308
283
|
// ---------------------------------------------------------------------
|
309
|
-
//
|
284
|
+
// on 'show'
|
310
285
|
// ---------------------------------------------------------------------
|
286
|
+
self.$modal.on('show.bs.modal', function () {
|
287
|
+
var msDropdownJSON;
|
288
|
+
var index;
|
289
|
+
|
290
|
+
logger.info('\n' + 'show.bs.modal: entered');
|
291
|
+
|
292
|
+
// create msDropdown from JSON data
|
293
|
+
$.when (
|
294
|
+
createMsDropdownFromJSON({
|
295
|
+
url: '/assets/data/iso-639-language-codes-flags.json',
|
296
|
+
elm: 'iso-639-languages',
|
297
|
+
selector: 'dropdownJSON',
|
298
|
+
width: 400,
|
299
|
+
visibleRows: 8,
|
300
|
+
})
|
301
|
+
)
|
302
|
+
.then(function(data) {
|
303
|
+
logger.info('\n' + 'creating msDropdown from JSON data: finished');
|
304
|
+
});
|
305
|
+
}); // END modal on 'show'
|
311
306
|
|
312
307
|
// ---------------------------------------------------------------------
|
313
308
|
// on 'shown'
|
309
|
+
// ---------------------------------------------------------------------
|
314
310
|
self.$modal.on('shown.bs.modal', function () {
|
315
|
-
|
316
|
-
navigator_language = navigator.language || navigator.userLanguage;
|
317
|
-
translation_language = navigator_language.split('-')[0];
|
318
|
-
}
|
311
|
+
var msDropdownJSON = document.getElementById('dropdownJSON').msDropdown;
|
319
312
|
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
|
327
|
-
|
328
|
-
|
329
|
-
|
330
|
-
// msDropdown.selectedIndex = 1;
|
331
|
-
//
|
332
|
-
// msDropdown.on('close', function() {
|
333
|
-
// console.log(msDropdown.value)
|
334
|
-
// });
|
335
|
-
// });
|
336
|
-
|
337
|
-
var msDropdownSourceLanguage = document.getElementById("translate-source-language").msDropdown;
|
338
|
-
|
339
|
-
// msDropdownSourceLanguage.on('close', function() {
|
340
|
-
// var selectedLanguage = msDropdownSourceLanguage.value.toLowerCase();
|
341
|
-
//
|
342
|
-
// if (translation_language !== selectedLanguage) {
|
343
|
-
// settings = JSON.parse(Cookie.get(self.props.cookieName));
|
344
|
-
// settings.translationLanguage = selectedLanguage;
|
345
|
-
// Cookie.set(self.props.cookieName, JSON.stringify(settings), self.props.cookieStorageDays, self.props.sameSite, self.props.secure);
|
346
|
-
//
|
347
|
-
// logger.info('\n' + 'selected language: ' + selectedLanguage);
|
348
|
-
// return false;
|
349
|
-
// }
|
350
|
-
// });
|
351
|
-
|
352
|
-
// workaround: limit the height of the resulting list (UL)
|
353
|
-
// of the 'dd' select
|
354
|
-
// $('.ms-options').css('max-height', '10.5937rem');
|
355
|
-
|
356
|
-
// jadams, 2021-10-18: added stop scrolling on the body,
|
357
|
-
// if modal is OPEN
|
358
|
-
$('body').addClass('stop-scrolling');
|
359
|
-
|
360
|
-
// jadams, 2021-10-18: disable source language selection
|
361
|
-
if (self.props.translationLanguage === 'auto') {
|
362
|
-
msDropdownSourceLanguage.disabled = true;
|
363
|
-
// msDropdownSourceLanguage.disabled = false;
|
364
|
-
}
|
313
|
+
if (!msDropdownJSON.length) {
|
314
|
+
// critical error
|
315
|
+
logger.error('\n' + 'no msDropdown found in translation dialog');
|
316
|
+
self.$modal.hide();
|
317
|
+
} else {
|
318
|
+
// set translation language for auto detection
|
319
|
+
if (self.props.translationLanguage === 'auto') {
|
320
|
+
navigator_language = navigator.language || navigator.userLanguage;
|
321
|
+
translation_language = navigator_language.split('-')[0];
|
322
|
+
}
|
365
323
|
|
366
|
-
|
367
|
-
|
368
|
-
// set the size to limit the list
|
369
|
-
// msDropdownSourceLanguage.size = 1;
|
324
|
+
// set translation language for the dropdown
|
325
|
+
msDropdownJSON.selectedIndex = $('#dropdownJSON option[value=' + translation_language + ']').index();;
|
370
326
|
|
371
|
-
|
327
|
+
// disable translation language selection
|
328
|
+
if (self.props.disableLanguageSelector) {
|
329
|
+
msDropdownJSON.disabled = true;
|
330
|
+
}
|
372
331
|
|
373
|
-
|
374
|
-
// on 'hidden'
|
375
|
-
self.$modal.on('hidden.bs.modal', function () {
|
376
|
-
var msDropdownSourceLanguage = document.getElementById("translate-source-language").msDropdown;
|
377
|
-
var selectedLanguage = msDropdownSourceLanguage.value.toLowerCase();
|
378
|
-
var settings;
|
332
|
+
$('#dropdownJSON').show();
|
379
333
|
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
Cookie.set(self.props.cookieName, JSON.stringify(settings), self.props.cookieStorageDays, self.props.sameSite, self.props.secure);
|
334
|
+
// jadams, 2021-10-18: added stop scrolling on the body,
|
335
|
+
// if modal is OPEN
|
336
|
+
$('body').addClass('stop-scrolling');
|
384
337
|
|
385
|
-
logger.info('\n' + 'selected language: ' + selectedLanguage);
|
386
|
-
return false;
|
387
338
|
}
|
339
|
+
|
340
|
+
}); // END modal on 'shown'
|
341
|
+
|
342
|
+
// ---------------------------------------------------------------------
|
343
|
+
// on 'hidden'
|
344
|
+
// ---------------------------------------------------------------------
|
345
|
+
self.$modal.on('hidden.bs.modal', function () {
|
388
346
|
$('body').removeClass('stop-scrolling');
|
389
|
-
|
347
|
+
// run the postSelectionCallback for (final) translation
|
348
|
+
executeFunctionByName (self.props.postSelectionCallback, window);
|
349
|
+
}); // END modal on 'hidden'
|
390
350
|
|
391
|
-
//
|
392
|
-
//
|
351
|
+
// ---------------------------------------------------------------------
|
352
|
+
// load the dialog (modal content)
|
353
|
+
// ---------------------------------------------------------------------
|
393
354
|
var templateUrl = self.props.contentURL + '/' + 'index.html';
|
394
355
|
$.get(templateUrl)
|
395
356
|
.done(function (data) {
|
@@ -411,6 +372,9 @@ function Translator(props) {
|
|
411
372
|
updateButtons();
|
412
373
|
updateOptionsFromCookie();
|
413
374
|
|
375
|
+
// -------------------------------------------------------------------
|
376
|
+
// register button events for the dialog (modal)
|
377
|
+
// -------------------------------------------------------------------
|
414
378
|
$('#google-options').on('hide.bs.collapse', function () {
|
415
379
|
detailedSettingsShown = false;
|
416
380
|
updateButtons();
|
@@ -448,6 +412,7 @@ function Translator(props) {
|
|
448
412
|
}
|
449
413
|
|
450
414
|
// ---------------------------------------------------------------------------
|
415
|
+
// updateOptionsFromCookie()
|
451
416
|
// update all checkboxes in dialog (modal) from current cookie settings
|
452
417
|
// ---------------------------------------------------------------------------
|
453
418
|
function updateOptionsFromCookie() {
|
@@ -461,6 +426,7 @@ function Translator(props) {
|
|
461
426
|
}
|
462
427
|
|
463
428
|
// ---------------------------------------------------------------------------
|
429
|
+
// updateButtons()
|
464
430
|
// toggle dialog (modal) buttons
|
465
431
|
// ---------------------------------------------------------------------------
|
466
432
|
function updateButtons() {
|
@@ -478,7 +444,8 @@ function Translator(props) {
|
|
478
444
|
}
|
479
445
|
|
480
446
|
// ---------------------------------------------------------------------------
|
481
|
-
//
|
447
|
+
// gatherOptions()
|
448
|
+
// collect current settings from all checkboxes in dialog (modal)
|
482
449
|
// ---------------------------------------------------------------------------
|
483
450
|
function gatherOptions(setAllExceptNecessary) {
|
484
451
|
var $options = self.$modal.find('#google-options .translator-option');
|
@@ -499,7 +466,8 @@ function Translator(props) {
|
|
499
466
|
}
|
500
467
|
|
501
468
|
// ---------------------------------------------------------------------------
|
502
|
-
//
|
469
|
+
// agreeAll()
|
470
|
+
// process current settings from checkboxes for button `agreeAll`
|
503
471
|
// ---------------------------------------------------------------------------
|
504
472
|
function agreeAll() {
|
505
473
|
var settings;
|
@@ -529,7 +497,8 @@ function Translator(props) {
|
|
529
497
|
}
|
530
498
|
|
531
499
|
// ---------------------------------------------------------------------------
|
532
|
-
//
|
500
|
+
// doNotAgree()
|
501
|
+
// process current settings from checkboxes for button `doNotAgree`
|
533
502
|
// ---------------------------------------------------------------------------
|
534
503
|
function doNotAgree() {
|
535
504
|
var settings = gatherOptions();
|
@@ -546,6 +515,7 @@ function Translator(props) {
|
|
546
515
|
}
|
547
516
|
|
548
517
|
// ---------------------------------------------------------------------------
|
518
|
+
// saveSettings()
|
549
519
|
// write current settings from checkboxes to cookie
|
550
520
|
// ---------------------------------------------------------------------------
|
551
521
|
function saveSettings() {
|
@@ -581,6 +551,7 @@ function Translator(props) {
|
|
581
551
|
// ===========================================================================
|
582
552
|
|
583
553
|
// ---------------------------------------------------------------------------
|
554
|
+
// showDialog()
|
584
555
|
// show the translator dialog (modal)
|
585
556
|
// ---------------------------------------------------------------------------
|
586
557
|
this.showDialog = function () {
|
@@ -588,6 +559,7 @@ function Translator(props) {
|
|
588
559
|
}; // END showDialog
|
589
560
|
|
590
561
|
// ---------------------------------------------------------------------------
|
562
|
+
// getSettings()
|
591
563
|
// collect settings from cookie
|
592
564
|
// ---------------------------------------------------------------------------
|
593
565
|
this.getSettings = function (optionName) {
|