]>
Commit | Line | Data |
---|---|---|
7adcb81e IB |
1 | /**\r |
2 | * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.\r | |
3 | * For licensing, see LICENSE.html or http://ckeditor.com/license\r | |
4 | */\r | |
5 | (function() {\r | |
6 | // Create support tools\r | |
7 | var appTools = (function(){\r | |
8 | var inited = {};\r | |
9 | \r | |
10 | var _init = function(handler) {\r | |
11 | if (window.addEventListener) {\r | |
12 | window.addEventListener('message', handler, false);\r | |
13 | } else {\r | |
14 | window.attachEvent("onmessage", handler);\r | |
15 | }\r | |
16 | };\r | |
17 | \r | |
18 | var unbindHandler = function(handler) {\r | |
19 | if (window.removeEventListener) {\r | |
20 | window.removeEventListener('message', handler, false);\r | |
21 | } else {\r | |
22 | window.detachEvent('onmessage', handler);\r | |
23 | }\r | |
24 | };\r | |
25 | \r | |
26 | var _sendCmd = function(o) {\r | |
27 | var str,\r | |
28 | type = Object.prototype.toString,\r | |
29 | objObject = "[object Object]",\r | |
30 | fn = o.fn || null,\r | |
31 | id = o.id || '',\r | |
32 | target = o.target || window,\r | |
33 | message = o.message || {\r | |
34 | 'id': id\r | |
35 | };\r | |
36 | \r | |
37 | if (o.message && type.call(o.message) == objObject) {\r | |
38 | (o.message.id) ? o.message.id : o.message.id = id;\r | |
39 | message = o.message;\r | |
40 | }\r | |
41 | \r | |
42 | str = window.JSON.stringify(message, fn);\r | |
43 | target.postMessage(str, '*');\r | |
44 | };\r | |
45 | \r | |
46 | var _hashCreate = function(o, fn) {\r | |
47 | fn = fn || null;\r | |
48 | var str = window.JSON.stringify(o, fn);\r | |
49 | return str;\r | |
50 | };\r | |
51 | \r | |
52 | var _hashParse = function(str, fn) {\r | |
53 | fn = fn || null;\r | |
54 | return window.JSON.parse(str, fn);\r | |
55 | };\r | |
56 | \r | |
57 | var setCookie = function(name, value, options) {\r | |
58 | options = options || {};\r | |
59 | \r | |
60 | var expires = options.expires;\r | |
61 | \r | |
62 | if (typeof expires == "number" && expires) {\r | |
63 | var d = new Date();\r | |
64 | d.setTime(d.getTime() + expires*1000);\r | |
65 | expires = options.expires = d;\r | |
66 | }\r | |
67 | if (expires && expires.toUTCString) {\r | |
68 | options.expires = expires.toUTCString();\r | |
69 | }\r | |
70 | \r | |
71 | value = encodeURIComponent(value);\r | |
72 | var updatedCookie = name + "=" + value;\r | |
73 | \r | |
74 | for(var propName in options) {\r | |
75 | var propValue = options[propName];\r | |
76 | updatedCookie += "; " + propName;\r | |
77 | if (propValue !== true) {\r | |
78 | updatedCookie += "=" + propValue;\r | |
79 | }\r | |
80 | }\r | |
81 | document.cookie = updatedCookie;\r | |
82 | };\r | |
83 | \r | |
84 | var getCookie = function(name) {\r | |
85 | var matches = document.cookie.match(new RegExp(\r | |
86 | "(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"\r | |
87 | ));\r | |
88 | return matches ? decodeURIComponent(matches[1]) : undefined;\r | |
89 | };\r | |
90 | \r | |
91 | var deleteCookie = function(name) {\r | |
92 | setCookie(name, "", { expires: -1 });\r | |
93 | };\r | |
94 | \r | |
95 | var findFocusable = function(ckEl) {\r | |
96 | var result = null,\r | |
97 | focusableSelectors = 'a[href], area[href], input, select, textarea, button, *[tabindex], *[contenteditable]';\r | |
98 | \r | |
99 | if(ckEl) {\r | |
100 | result = ckEl.find(focusableSelectors);\r | |
101 | }\r | |
102 | \r | |
103 | return result;\r | |
104 | };\r | |
105 | \r | |
106 | var getStyle = function(el, prop) {\r | |
107 | if(document.defaultView && document.defaultView.getComputedStyle) {\r | |
108 | return document.defaultView.getComputedStyle(el, null)[prop];\r | |
109 | } else if(el.currentStyle) {\r | |
110 | return el.currentStyle[prop];\r | |
111 | } else {\r | |
112 | return el.style[prop];\r | |
113 | }\r | |
114 | };\r | |
115 | \r | |
116 | var isHidden = function(el) {\r | |
117 | return el.offsetWidth === 0 || el.offsetHeight == 0 || getStyle(el, 'display') === 'none';\r | |
118 | };\r | |
119 | \r | |
120 | var isVisible = function(el) {\r | |
121 | return !isHidden(el);\r | |
122 | };\r | |
123 | \r | |
124 | var hasClass = function (obj, cname) {\r | |
125 | return !!(obj.className ? obj.className.match(new RegExp('(\\s|^)'+cname+'(\\s|$)')) : false);\r | |
126 | };\r | |
127 | \r | |
128 | return {\r | |
129 | postMessage: {\r | |
130 | init: _init,\r | |
131 | send: _sendCmd,\r | |
132 | unbindHandler: unbindHandler\r | |
133 | },\r | |
134 | hash: {\r | |
135 | create: function() {\r | |
136 | \r | |
137 | },\r | |
138 | \r | |
139 | parse: function() {\r | |
140 | \r | |
141 | }\r | |
142 | },\r | |
143 | cookie: {\r | |
144 | set: setCookie,\r | |
145 | get: getCookie,\r | |
146 | remove: deleteCookie\r | |
147 | },\r | |
148 | misc: {\r | |
149 | findFocusable: findFocusable,\r | |
150 | isVisible: isVisible,\r | |
151 | hasClass: hasClass\r | |
152 | }\r | |
153 | };\r | |
154 | })();\r | |
155 | \r | |
156 | var NS = NS || {};\r | |
157 | NS.TextAreaNumber = null;\r | |
158 | NS.load = true;\r | |
159 | NS.cmd = {\r | |
160 | "SpellTab": 'spell',\r | |
161 | "Thesaurus": 'thes',\r | |
162 | "GrammTab": 'grammar'\r | |
163 | };\r | |
164 | NS.dialog = null;\r | |
165 | NS.optionNode = null;\r | |
166 | NS.selectNode = null;\r | |
167 | NS.grammerSuggest = null;\r | |
168 | NS.textNode = {};\r | |
169 | NS.iframeMain = null;\r | |
170 | NS.dataTemp = '';\r | |
171 | NS.div_overlay = null;\r | |
172 | NS.textNodeInfo = {};\r | |
173 | NS.selectNode = {};\r | |
174 | NS.selectNodeResponce = {};\r | |
175 | NS.langList = null;\r | |
176 | NS.langSelectbox = null;\r | |
177 | NS.banner = '';\r | |
178 | NS.show_grammar = null;\r | |
179 | NS.div_overlay_no_check = null;\r | |
180 | NS.targetFromFrame = {};\r | |
181 | NS.onLoadOverlay = null;\r | |
182 | NS.LocalizationComing = {};\r | |
183 | NS.OverlayPlace = null;\r | |
184 | NS.sessionid = '';\r | |
185 | NS.LocalizationButton = {\r | |
186 | 'ChangeTo_button': {\r | |
187 | 'instance' : null,\r | |
188 | 'text' : 'Change to',\r | |
189 | 'localizationID': 'ChangeTo'\r | |
190 | },\r | |
191 | \r | |
192 | 'ChangeAll': {\r | |
193 | 'instance' : null,\r | |
194 | 'text' : 'Change All'\r | |
195 | },\r | |
196 | \r | |
197 | 'IgnoreWord': {\r | |
198 | 'instance' : null,\r | |
199 | 'text' : 'Ignore word'\r | |
200 | },\r | |
201 | \r | |
202 | 'IgnoreAllWords': {\r | |
203 | 'instance' : null,\r | |
204 | 'text' : 'Ignore all words'\r | |
205 | },\r | |
206 | \r | |
207 | 'Options': {\r | |
208 | 'instance' : null,\r | |
209 | 'text' : 'Options',\r | |
210 | 'optionsDialog': {\r | |
211 | 'instance' : null\r | |
212 | }\r | |
213 | },\r | |
214 | \r | |
215 | 'AddWord': {\r | |
216 | 'instance' : null,\r | |
217 | 'text' : 'Add word'\r | |
218 | },\r | |
219 | \r | |
220 | 'FinishChecking_button': {\r | |
221 | 'instance' : null,\r | |
222 | 'text' : 'Finish Checking',\r | |
223 | 'localizationID': 'FinishChecking'\r | |
224 | },\r | |
225 | \r | |
226 | 'FinishChecking_button_block': {\r | |
227 | 'instance' : null,\r | |
228 | 'text' : 'Finish Checking',\r | |
229 | 'localizationID': 'FinishChecking'\r | |
230 | }\r | |
231 | };\r | |
232 | \r | |
233 | NS.LocalizationLabel = {\r | |
234 | 'ChangeTo_label': {\r | |
235 | 'instance' : null,\r | |
236 | 'text' : 'Change to',\r | |
237 | 'localizationID': 'ChangeTo'\r | |
238 | },\r | |
239 | \r | |
240 | 'Suggestions': {\r | |
241 | 'instance' : null,\r | |
242 | 'text' : 'Suggestions'\r | |
243 | },\r | |
244 | \r | |
245 | 'Categories': {\r | |
246 | 'instance' : null,\r | |
247 | 'text' : 'Categories'\r | |
248 | },\r | |
249 | \r | |
250 | 'Synonyms': {\r | |
251 | 'instance' : null,\r | |
252 | 'text' : 'Synonyms'\r | |
253 | }\r | |
254 | };\r | |
255 | \r | |
256 | var SetLocalizationButton = function(obj) {\r | |
257 | var el, localizationID;\r | |
258 | \r | |
259 | for(var i in obj) {\r | |
260 | el = NS.dialog.getContentElement(NS.dialog._.currentTabId, i);\r | |
261 | \r | |
262 | if(el) {\r | |
263 | el = el.getElement();\r | |
264 | } else {\r | |
265 | el = obj[i].instance.getElement().getFirst() || obj[i].instance.getElement();\r | |
266 | }\r | |
267 | \r | |
268 | localizationID = obj[i].localizationID || i;\r | |
269 | el.setText(NS.LocalizationComing[localizationID]);\r | |
270 | }\r | |
271 | };\r | |
272 | \r | |
273 | var SetLocalizationLabel = function(obj) {\r | |
274 | var el, localizationID;\r | |
275 | \r | |
276 | for(var i in obj) {\r | |
277 | el = NS.dialog.getContentElement(NS.dialog._.currentTabId, i);\r | |
278 | \r | |
279 | if(!el) {\r | |
280 | el = obj[i].instance;\r | |
281 | }\r | |
282 | \r | |
283 | if(el.setLabel) {\r | |
284 | localizationID = obj[i].localizationID || i;\r | |
285 | el.setLabel(NS.LocalizationComing[localizationID] + ':');\r | |
286 | }\r | |
287 | }\r | |
288 | };\r | |
289 | var OptionsConfirm = function(state) {\r | |
290 | if (state) {\r | |
291 | nameNode.setValue('');\r | |
292 | }\r | |
293 | };\r | |
294 | \r | |
295 | var iframeOnload = false;\r | |
296 | var nameNode, selectNode, frameId;\r | |
297 | \r | |
298 | NS.framesetHtml = function(tab) {\r | |
299 | var str = '<iframe id=' + NS.iframeNumber + '_' + tab + ' frameborder="0" allowtransparency="1" style="width:100%;border: 1px solid #AEB3B9;overflow: auto;background:#fff; border-radius: 3px;"></iframe>';\r | |
300 | return str;\r | |
301 | };\r | |
302 | \r | |
303 | NS.setIframe = function(that, nameTab) {\r | |
304 | var iframe,\r | |
305 | str = NS.framesetHtml(nameTab),\r | |
306 | iframeId = NS.iframeNumber + '_' + nameTab,\r | |
307 | // tmp.html from wsc/dialogs\r | |
308 | iframeInnerHtml =\r | |
309 | '<!DOCTYPE html>' +\r | |
310 | '<html>' +\r | |
311 | '<head>' +\r | |
312 | '<meta charset="UTF-8">' +\r | |
313 | '<title>iframe</title>' +\r | |
314 | \r | |
315 | '<style>' +\r | |
316 | 'html,body{' +\r | |
317 | 'margin: 0;' +\r | |
318 | 'height: 100%;' +\r | |
319 | 'font: 13px/1.555 "Trebuchet MS", sans-serif;' +\r | |
320 | '}' +\r | |
321 | 'a{' +\r | |
322 | 'color: #888;' +\r | |
323 | 'font-weight: bold;' +\r | |
324 | 'text-decoration: none;' +\r | |
325 | 'border-bottom: 1px solid #888;' +\r | |
326 | '}' +\r | |
327 | '.main-box {' +\r | |
328 | 'color:#252525;' +\r | |
329 | 'padding: 3px 5px;' +\r | |
330 | 'text-align: justify;' +\r | |
331 | '}' +\r | |
332 | '.main-box p{margin: 0 0 14px;}' +\r | |
333 | '.main-box .cerr{' +\r | |
334 | 'color: #f00000;' +\r | |
335 | 'border-bottom-color: #f00000;' +\r | |
336 | '}' +\r | |
337 | '</style>' +\r | |
338 | '</head>' +\r | |
339 | '<body>' +\r | |
340 | '<div id="content" class="main-box"></div>' +\r | |
341 | '<iframe src="" frameborder="0" id="spelltext" name="spelltext" style="display:none; width: 100%" ></iframe>' +\r | |
342 | '<iframe src="" frameborder="0" id="loadsuggestfirst" name="loadsuggestfirst" style="display:none; width: 100%" ></iframe>' +\r | |
343 | '<iframe src="" frameborder="0" id="loadspellsuggestall" name="loadspellsuggestall" style="display:none; width: 100%" ></iframe>' +\r | |
344 | '<iframe src="" frameborder="0" id="loadOptionsForm" name="loadOptionsForm" style="display:none; width: 100%" ></iframe>' +\r | |
345 | '<script>' +\r | |
346 | '(function(window) {' +\r | |
347 | // Constructor Manager PostMessage\r | |
348 | \r | |
349 | 'var ManagerPostMessage = function() {' +\r | |
350 | 'var _init = function(handler) {' +\r | |
351 | 'if (document.addEventListener) {' +\r | |
352 | 'window.addEventListener("message", handler, false);' +\r | |
353 | '} else {' +\r | |
354 | 'window.attachEvent("onmessage", handler);' +\r | |
355 | '};' +\r | |
356 | '};' +\r | |
357 | 'var _sendCmd = function(o) {' +\r | |
358 | 'var str,' +\r | |
359 | 'type = Object.prototype.toString,' +\r | |
360 | 'fn = o.fn || null,' +\r | |
361 | 'id = o.id || "",' +\r | |
362 | 'target = o.target || window,' +\r | |
363 | 'message = o.message || { "id": id };' +\r | |
364 | \r | |
365 | 'if (o.message && type.call(o.message) == "[object Object]") {' +\r | |
366 | '(o.message["id"]) ? o.message["id"] : o.message["id"] = id;' +\r | |
367 | 'message = o.message;' +\r | |
368 | '};' +\r | |
369 | \r | |
370 | 'str = JSON.stringify(message, fn);' +\r | |
371 | 'target.postMessage(str, "*");' +\r | |
372 | '};' +\r | |
373 | \r | |
374 | 'return {' +\r | |
375 | 'init: _init,' +\r | |
376 | 'send: _sendCmd' +\r | |
377 | '};' +\r | |
378 | '};' +\r | |
379 | \r | |
380 | 'var manageMessageTmp = new ManagerPostMessage;' +\r | |
381 | \r | |
382 | \r | |
383 | 'var appString = (function(){' +\r | |
384 | 'var spell = parent.CKEDITOR.config.wsc.DefaultParams.scriptPath;' +\r | |
385 | 'var serverUrl = parent.CKEDITOR.config.wsc.DefaultParams.serviceHost;' +\r | |
386 | 'return serverUrl + spell;' +\r | |
387 | '})();' +\r | |
388 | \r | |
389 | 'function loadScript(src, callback) {' +\r | |
390 | 'var scriptTag = document.createElement("script");' +\r | |
391 | 'scriptTag.type = "text/javascript";' +\r | |
392 | 'callback ? callback : callback = function() {};' +\r | |
393 | 'if(scriptTag.readyState) {' +\r | |
394 | //IE\r | |
395 | 'scriptTag.onreadystatechange = function() {' +\r | |
396 | 'if (scriptTag.readyState == "loaded" ||' +\r | |
397 | 'scriptTag.readyState == "complete") {' +\r | |
398 | 'scriptTag.onreadystatechange = null;' +\r | |
399 | 'setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);' +\r | |
400 | 'callback();' +\r | |
401 | '}' +\r | |
402 | '};' +\r | |
403 | '}else{' +\r | |
404 | //Others\r | |
405 | 'scriptTag.onload = function() {' +\r | |
406 | 'setTimeout(function(){scriptTag.parentNode.removeChild(scriptTag)},1);' +\r | |
407 | 'callback();' +\r | |
408 | '};' +\r | |
409 | '};' +\r | |
410 | 'scriptTag.src = src;' +\r | |
411 | 'document.getElementsByTagName("head")[0].appendChild(scriptTag);' +\r | |
412 | '};' +\r | |
413 | \r | |
414 | \r | |
415 | 'window.onload = function(){' +\r | |
416 | 'loadScript(appString, function(){' +\r | |
417 | 'manageMessageTmp.send({' +\r | |
418 | '"id": "iframeOnload",' +\r | |
419 | '"target": window.parent' +\r | |
420 | '});' +\r | |
421 | '});' +\r | |
422 | '}' +\r | |
423 | '})(this);' +\r | |
424 | '</script>' +\r | |
425 | '</body>' +\r | |
426 | '</html>';\r | |
427 | \r | |
428 | that.getElement().setHtml(str);\r | |
429 | iframe = document.getElementById(iframeId);\r | |
430 | iframe = (iframe.contentWindow) ? iframe.contentWindow : (iframe.contentDocument.document) ? iframe.contentDocument.document : iframe.contentDocument;\r | |
431 | iframe.document.open();\r | |
432 | iframe.document.write(iframeInnerHtml);\r | |
433 | iframe.document.close();\r | |
434 | };\r | |
435 | \r | |
436 | NS.setCurrentIframe = function(currentTab) {\r | |
437 | var that = NS.dialog._.contents[currentTab].Content,\r | |
438 | tabID, iframe;\r | |
439 | \r | |
440 | NS.setIframe(that, currentTab);\r | |
441 | \r | |
442 | };\r | |
443 | \r | |
444 | NS.setHeightBannerFrame = function() {\r | |
445 | var height = "90px",\r | |
446 | bannerPlaceSpellTab = NS.dialog.getContentElement('SpellTab', 'banner').getElement(),\r | |
447 | bannerPlaceGrammTab = NS.dialog.getContentElement('GrammTab', 'banner').getElement(),\r | |
448 | bannerPlaceThesaurus = NS.dialog.getContentElement('Thesaurus', 'banner').getElement();\r | |
449 | \r | |
450 | bannerPlaceSpellTab.setStyle('height', height);\r | |
451 | bannerPlaceGrammTab.setStyle('height', height);\r | |
452 | bannerPlaceThesaurus.setStyle('height', height);\r | |
453 | };\r | |
454 | \r | |
455 | NS.setHeightFrame = function() {\r | |
456 | var currentTab = NS.dialog._.currentTabId,\r | |
457 | tabID = NS.iframeNumber + '_' + currentTab,\r | |
458 | iframe = document.getElementById(tabID);\r | |
459 | \r | |
460 | iframe.style.height = '240px';\r | |
461 | };\r | |
462 | \r | |
463 | NS.sendData = function(scope) {\r | |
464 | var currentTab = scope._.currentTabId,\r | |
465 | that = scope._.contents[currentTab].Content,\r | |
466 | tabID, iframe;\r | |
467 | \r | |
468 | NS.previousTab = currentTab;\r | |
469 | NS.setIframe(that, currentTab);\r | |
470 | \r | |
471 | var loadNewTab = function(event) {\r | |
472 | currentTab = scope._.currentTabId;\r | |
473 | event = event || window.event;\r | |
474 | \r | |
475 | if (!event.data.getTarget().is('a')) {\r | |
476 | return;\r | |
477 | }\r | |
478 | \r | |
479 | if(currentTab === NS.previousTab) return;\r | |
480 | NS.previousTab = currentTab;\r | |
481 | \r | |
482 | that = scope._.contents[currentTab].Content;\r | |
483 | tabID = NS.iframeNumber + '_' + currentTab;\r | |
484 | NS.div_overlay.setEnable();\r | |
485 | \r | |
486 | if (!that.getElement().getChildCount()) {\r | |
487 | NS.setIframe(that, currentTab);\r | |
488 | iframe = document.getElementById(tabID);\r | |
489 | NS.targetFromFrame[tabID] = iframe.contentWindow;\r | |
490 | } else {\r | |
491 | sendData(NS.targetFromFrame[tabID], NS.cmd[currentTab]);\r | |
492 | }\r | |
493 | };\r | |
494 | \r | |
495 | scope.parts.tabs.removeListener('click', loadNewTab);\r | |
496 | scope.parts.tabs.on('click', loadNewTab);\r | |
497 | };\r | |
498 | \r | |
499 | NS.buildSelectLang = function(aId) {\r | |
500 | var divContainer = new CKEDITOR.dom.element('div'),\r | |
501 | selectContainer = new CKEDITOR.dom.element('select'),\r | |
502 | id = "wscLang" + aId;\r | |
503 | \r | |
504 | divContainer.addClass("cke_dialog_ui_input_select");\r | |
505 | divContainer.setAttribute("role", "presentation");\r | |
506 | divContainer.setStyles({\r | |
507 | 'height': 'auto',\r | |
508 | 'position': 'absolute',\r | |
509 | 'right': '0',\r | |
510 | 'top': '-1px',\r | |
511 | 'width': '160px',\r | |
512 | 'white-space': 'normal'\r | |
513 | });\r | |
514 | \r | |
515 | selectContainer.setAttribute('id', id);\r | |
516 | selectContainer.addClass("cke_dialog_ui_input_select");\r | |
517 | selectContainer.setStyles({\r | |
518 | 'width': '160px'\r | |
519 | });\r | |
520 | var currentTabId = NS.dialog._.currentTabId,\r | |
521 | frameId = NS.iframeNumber + '_' + currentTabId;\r | |
522 | \r | |
523 | divContainer.append(selectContainer);\r | |
524 | \r | |
525 | return divContainer;\r | |
526 | \r | |
527 | };\r | |
528 | \r | |
529 | NS.buildOptionLang = function(key, aId) {\r | |
530 | var id = "wscLang" + aId;\r | |
531 | var select = document.getElementById(id),\r | |
532 | fragment = document.createDocumentFragment(),\r | |
533 | create_option, txt_option,\r | |
534 | sort = [];\r | |
535 | \r | |
536 | if(select.options.length === 0) {\r | |
537 | for (var lang in key) {\r | |
538 | sort.push([lang, key[lang]]);\r | |
539 | }\r | |
540 | sort.sort();\r | |
541 | \r | |
542 | for (var i = 0; i < sort.length; i++) {\r | |
543 | create_option=document.createElement("option");\r | |
544 | create_option.setAttribute("value", sort[i][1]);\r | |
545 | txt_option = document.createTextNode(sort[i][0]);\r | |
546 | create_option.appendChild(txt_option);\r | |
547 | \r | |
548 | fragment.appendChild(create_option);\r | |
549 | }\r | |
550 | select.appendChild(fragment);\r | |
551 | }\r | |
552 | \r | |
553 | // make appropriate option selected according to current selected language\r | |
554 | for (var j = 0; j < select.options.length; j++) {\r | |
555 | if (select.options[j].value == NS.selectingLang) {\r | |
556 | select.options[j].selected = "selected";\r | |
557 | }\r | |
558 | }\r | |
559 | };\r | |
560 | \r | |
561 | NS.buildOptionSynonyms = function(key) {\r | |
562 | var syn = NS.selectNodeResponce[key];\r | |
563 | \r | |
564 | var select = getSelect( NS.selectNode['Synonyms'] );\r | |
565 | \r | |
566 | NS.selectNode['Synonyms'].clear();\r | |
567 | \r | |
568 | for (var i = 0; i < syn.length; i++) {\r | |
569 | var option = document.createElement('option');\r | |
570 | option.text = syn[i];\r | |
571 | option.value = syn[i];\r | |
572 | \r | |
573 | select.$.add(option, i);\r | |
574 | }\r | |
575 | \r | |
576 | NS.selectNode['Synonyms'].getInputElement().$.firstChild.selected = true;\r | |
577 | NS.textNode['Thesaurus'].setValue(NS.selectNode['Synonyms'].getInputElement().getValue());\r | |
578 | };\r | |
579 | \r | |
580 | var setBannerInPlace = function(htmlBanner) {\r | |
581 | var findBannerPlace = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'banner').getElement();\r | |
582 | findBannerPlace.setHtml(htmlBanner);\r | |
583 | \r | |
584 | };\r | |
585 | \r | |
586 | var overlayBlock = function overlayBlock(opt) {\r | |
587 | var progress = opt.progress || "",\r | |
588 | doc = document,\r | |
589 | target = opt.target || doc.body,\r | |
590 | overlayId = opt.id || "overlayBlock",\r | |
591 | opacity = opt.opacity || "0.9",\r | |
592 | background = opt.background || "#f1f1f1",\r | |
593 | getOverlay = doc.getElementById(overlayId),\r | |
594 | thisOverlay = getOverlay || doc.createElement("div");\r | |
595 | \r | |
596 | thisOverlay.style.cssText = "position: absolute;" +\r | |
597 | "top:30px;" +\r | |
598 | "bottom:41px;" +\r | |
599 | "left:1px;" +\r | |
600 | "right:1px;" +\r | |
601 | "z-index: 10020;" +\r | |
602 | "padding:0;" +\r | |
603 | "margin:0;" +\r | |
604 | "background:" + background + ";" +\r | |
605 | "opacity: " + opacity + ";" +\r | |
606 | "filter: alpha(opacity=" + opacity * 100 + ");" +\r | |
607 | "display: none;";\r | |
608 | thisOverlay.id = overlayId;\r | |
609 | \r | |
610 | if (!getOverlay) {\r | |
611 | target.appendChild(thisOverlay);\r | |
612 | }\r | |
613 | \r | |
614 | return {\r | |
615 | setDisable: function() {\r | |
616 | thisOverlay.style.display = "none";\r | |
617 | },\r | |
618 | setEnable: function() {\r | |
619 | thisOverlay.style.display = "block";\r | |
620 | }\r | |
621 | };\r | |
622 | };\r | |
623 | \r | |
624 | var buildRadioInputs = function(key, value, check) {\r | |
625 | var divContainer = new CKEDITOR.dom.element('div'),\r | |
626 | radioButton = new CKEDITOR.dom.element('input'),\r | |
627 | radioLabel = new CKEDITOR.dom.element('label'),\r | |
628 | id = "wscGrammerSuggest" + key + "_" + value;\r | |
629 | \r | |
630 | divContainer.addClass("cke_dialog_ui_input_radio");\r | |
631 | divContainer.setAttribute("role", "presentation");\r | |
632 | divContainer.setStyles({\r | |
633 | width: "97%",\r | |
634 | padding: "5px",\r | |
635 | 'white-space': 'normal'\r | |
636 | });\r | |
637 | \r | |
638 | radioButton.setAttributes({\r | |
639 | type: "radio",\r | |
640 | value: value,\r | |
641 | name: 'wscGrammerSuggest',\r | |
642 | id: id\r | |
643 | });\r | |
644 | radioButton.setStyles({\r | |
645 | "float":"left"\r | |
646 | });\r | |
647 | \r | |
648 | radioButton.on("click", function(data) {\r | |
649 | NS.textNode['GrammTab'].setValue(data.sender.getValue());\r | |
650 | });\r | |
651 | \r | |
652 | (check) ? radioButton.setAttribute("checked", true) : false;\r | |
653 | \r | |
654 | radioButton.addClass("cke_dialog_ui_radio_input");\r | |
655 | \r | |
656 | radioLabel.appendText(key);\r | |
657 | radioLabel.setAttribute("for", id);\r | |
658 | radioLabel.setStyles({\r | |
659 | 'display': "block",\r | |
660 | 'line-height': '16px',\r | |
661 | 'margin-left': '18px',\r | |
662 | 'white-space': 'normal'\r | |
663 | });\r | |
664 | \r | |
665 | divContainer.append(radioButton);\r | |
666 | divContainer.append(radioLabel);\r | |
667 | \r | |
668 | return divContainer;\r | |
669 | };\r | |
670 | \r | |
671 | var statusGrammarTab = function(aState) { //#19221\r | |
672 | aState = aState || 'true';\r | |
673 | if(aState !== null && aState == 'false'){\r | |
674 | hideGrammTab();\r | |
675 | }\r | |
676 | };\r | |
677 | \r | |
678 | var langConstructor = function(lang) {\r | |
679 | var langSelectBox = new __constructLangSelectbox(lang),\r | |
680 | selectId = "wscLang" + NS.dialog.getParentEditor().name,\r | |
681 | selectContainer = document.getElementById(selectId),\r | |
682 | currentTabId = NS.dialog._.currentTabId,\r | |
683 | frameId = NS.iframeNumber + '_' + currentTabId;\r | |
684 | \r | |
685 | NS.buildOptionLang(langSelectBox.setLangList, NS.dialog.getParentEditor().name);\r | |
686 | tabView[langSelectBox.getCurrentLangGroup(NS.selectingLang)].onShow();\r | |
687 | statusGrammarTab(NS.show_grammar);\r | |
688 | \r | |
689 | selectContainer.onchange = function(e) {\r | |
690 | var langGroup = langSelectBox.getCurrentLangGroup(this.value),\r | |
691 | currentTabId = NS.dialog._.currentTabId,\r | |
692 | cmd;\r | |
693 | \r | |
694 | e = e || window.event;\r | |
695 | \r | |
696 | tabView[langGroup].onShow();\r | |
697 | statusGrammarTab(NS.show_grammar);\r | |
698 | NS.div_overlay.setEnable();\r | |
699 | NS.selectingLang = this.value;\r | |
700 | \r | |
701 | // get command for current opened tan\r | |
702 | cmd = NS.cmd[currentTabId];\r | |
703 | // check whether current tab can be opened after language switching\r | |
704 | if(!langGroup || !tabView[langGroup] || !tabView[langGroup].allowedTabCommands[cmd]) {\r | |
705 | // if not so - set default tab to open after reload\r | |
706 | cmd = tabView[langGroup].defaultTabCommand;\r | |
707 | }\r | |
708 | \r | |
709 | for(var key in NS.cmd) {\r | |
710 | if(NS.cmd[key] == cmd) {\r | |
711 | NS.previousTab = key;\r | |
712 | break;\r | |
713 | }\r | |
714 | }\r | |
715 | \r | |
716 | appTools.postMessage.send({\r | |
717 | 'message': {\r | |
718 | 'changeLang': NS.selectingLang,\r | |
719 | 'text': NS.dataTemp,\r | |
720 | 'cmd': cmd\r | |
721 | },\r | |
722 | 'target': NS.targetFromFrame[frameId],\r | |
723 | 'id': 'selectionLang_outer__page'\r | |
724 | });\r | |
725 | };\r | |
726 | \r | |
727 | };\r | |
728 | \r | |
729 | var disableButtonSuggest = function(word) {\r | |
730 | var changeToButton, changeAllButton,\r | |
731 | styleDisable = function(instanceButton) {\r | |
732 | var button = NS.dialog.getContentElement(NS.dialog._.currentTabId, instanceButton) || NS.LocalizationButton[instanceButton].instance;\r | |
733 | button.getElement().hasClass('cke_disabled') ? button.getElement().setStyle('color', '#a0a0a0') : button.disable();\r | |
734 | },\r | |
735 | styleEnable = function(instanceButton) {\r | |
736 | var button = NS.dialog.getContentElement(NS.dialog._.currentTabId, instanceButton) || NS.LocalizationButton[instanceButton].instance;\r | |
737 | button.enable();\r | |
738 | button.getElement().setStyle('color', '#333');\r | |
739 | };\r | |
740 | \r | |
741 | if (word == 'no_any_suggestions') {\r | |
742 | word = 'No suggestions';\r | |
743 | \r | |
744 | changeToButton = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'ChangeTo_button') || NS.LocalizationButton['ChangeTo_button'].instance;\r | |
745 | changeToButton.disable();\r | |
746 | changeAllButton = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'ChangeAll') || NS.LocalizationButton['ChangeAll'].instance;\r | |
747 | changeAllButton.disable();\r | |
748 | \r | |
749 | styleDisable('ChangeTo_button');\r | |
750 | styleDisable('ChangeAll');\r | |
751 | \r | |
752 | return word;\r | |
753 | } else {\r | |
754 | styleEnable('ChangeTo_button');\r | |
755 | styleEnable('ChangeAll');\r | |
756 | \r | |
757 | return word;\r | |
758 | }\r | |
759 | };\r | |
760 | \r | |
761 | function getSelect( obj ) {\r | |
762 | if ( obj && obj.domId && obj.getInputElement().$ )\r | |
763 | return obj.getInputElement();\r | |
764 | else if ( obj && obj.$ )\r | |
765 | return obj;\r | |
766 | return false;\r | |
767 | }\r | |
768 | \r | |
769 | var handlerId = {\r | |
770 | iframeOnload: function(response) {\r | |
771 | NS.div_overlay.setEnable();\r | |
772 | iframeOnload = true;\r | |
773 | var currentTab = NS.dialog._.currentTabId,\r | |
774 | tabId = NS.iframeNumber + '_' + currentTab;\r | |
775 | sendData(NS.targetFromFrame[tabId], NS.cmd[currentTab]);\r | |
776 | },\r | |
777 | \r | |
778 | suggestlist: function(response) {\r | |
779 | delete response.id;\r | |
780 | NS.div_overlay_no_check.setDisable();\r | |
781 | hideCurrentFinishChecking();\r | |
782 | langConstructor(NS.langList);\r | |
783 | \r | |
784 | var word = disableButtonSuggest(response.word),\r | |
785 | suggestionsList = '';\r | |
786 | \r | |
787 | if (word instanceof Array) {\r | |
788 | word = response.word[0];\r | |
789 | }\r | |
790 | \r | |
791 | word = word.split(',');\r | |
792 | suggestionsList = word;\r | |
793 | \r | |
794 | NS.textNode['SpellTab'].setValue(suggestionsList[0]);\r | |
795 | \r | |
796 | var select = getSelect( selectNode );\r | |
797 | \r | |
798 | selectNode.clear();\r | |
799 | \r | |
800 | for (var i = 0; i < suggestionsList.length; i++) {\r | |
801 | var option = document.createElement('option');\r | |
802 | option.text = suggestionsList[i];\r | |
803 | option.value = suggestionsList[i];\r | |
804 | \r | |
805 | select.$.add(option, i);\r | |
806 | }\r | |
807 | \r | |
808 | showCurrentTabs();\r | |
809 | NS.div_overlay.setDisable();\r | |
810 | \r | |
811 | },\r | |
812 | \r | |
813 | grammerSuggest: function(response) {\r | |
814 | delete response.id;\r | |
815 | delete response.mocklangs;\r | |
816 | \r | |
817 | hideCurrentFinishChecking();\r | |
818 | langConstructor(NS.langList); // Show select language for this command CKEDITOR.config.wsc_cmd\r | |
819 | var firstSuggestValue = response.grammSuggest[0];// ? firstSuggestValue = response.grammSuggest[0] : firstSuggestValue = 'No suggestion for this words';\r | |
820 | NS.grammerSuggest.getElement().setHtml('');\r | |
821 | \r | |
822 | NS.textNode['GrammTab'].reset();\r | |
823 | NS.textNode['GrammTab'].setValue(firstSuggestValue);\r | |
824 | \r | |
825 | NS.textNodeInfo['GrammTab'].getElement().setHtml('');\r | |
826 | NS.textNodeInfo['GrammTab'].getElement().setText(response.info);\r | |
827 | \r | |
828 | var arr = response.grammSuggest,\r | |
829 | len = arr.length,\r | |
830 | check = true;\r | |
831 | \r | |
832 | for (var i = 0; i < len; i++) {\r | |
833 | NS.grammerSuggest.getElement().append(buildRadioInputs(arr[i], arr[i], check));\r | |
834 | check = false;\r | |
835 | }\r | |
836 | \r | |
837 | showCurrentTabs();\r | |
838 | NS.div_overlay.setDisable();\r | |
839 | },\r | |
840 | \r | |
841 | thesaurusSuggest: function(response) {\r | |
842 | delete response.id;\r | |
843 | delete response.mocklangs;\r | |
844 | \r | |
845 | hideCurrentFinishChecking();\r | |
846 | langConstructor(NS.langList); // Show select language for this command CKEDITOR.config.wsc_cmd\r | |
847 | NS.selectNodeResponce = response;\r | |
848 | \r | |
849 | NS.textNode['Thesaurus'].reset();\r | |
850 | \r | |
851 | var select = getSelect( NS.selectNode['Categories'] ),\r | |
852 | count = 0;\r | |
853 | \r | |
854 | NS.selectNode['Categories'].clear();\r | |
855 | \r | |
856 | for (var i in response) {\r | |
857 | \r | |
858 | var option = document.createElement('option');\r | |
859 | option.text = i;\r | |
860 | option.value = i;\r | |
861 | \r | |
862 | select.$.add(option, count);\r | |
863 | count++\r | |
864 | }\r | |
865 | \r | |
866 | var synKey = NS.selectNode['Categories'].getInputElement().getChildren().$[0].value;\r | |
867 | NS.selectNode['Categories'].getInputElement().getChildren().$[0].selected = true;\r | |
868 | NS.buildOptionSynonyms(synKey);\r | |
869 | \r | |
870 | showCurrentTabs();\r | |
871 | NS.div_overlay.setDisable();\r | |
872 | count = 0;\r | |
873 | },\r | |
874 | finish: function(response) {\r | |
875 | delete response.id;\r | |
876 | \r | |
877 | hideCurrentTabs();\r | |
878 | showCurrentFinishChecking();\r | |
879 | NS.div_overlay.setDisable();\r | |
880 | },\r | |
881 | settext: function(response) {\r | |
882 | delete response.id;\r | |
883 | \r | |
884 | var command = NS.dialog.getParentEditor().getCommand( 'checkspell' ),\r | |
885 | editor = NS.dialog.getParentEditor();\r | |
886 | \r | |
887 | //set local storage for synchronization before scayt reinit\r | |
888 | if (editor.scayt && editor.wsc.isSsrvSame) {\r | |
889 | var wscUDN = editor.wsc.udn;\r | |
890 | \r | |
891 | if (!wscUDN) {\r | |
892 | editor.wsc.DataStorage.setData('scayt_user_dictionary_name', '');\r | |
893 | } else {\r | |
894 | editor.wsc.DataStorage.setData('scayt_user_dictionary_name', wscUDN);\r | |
895 | }\r | |
896 | }\r | |
897 | \r | |
898 | \r | |
899 | try {\r | |
900 | editor.focus();\r | |
901 | } catch(e) {}\r | |
902 | \r | |
903 | editor.setData(response.text, function(){\r | |
904 | NS.dataTemp = '';\r | |
905 | editor.unlockSelection();\r | |
906 | editor.fire('saveSnapshot');\r | |
907 | NS.dialog.hide();\r | |
908 | });\r | |
909 | \r | |
910 | },\r | |
911 | ReplaceText: function(response) {\r | |
912 | \r | |
913 | delete response.id;\r | |
914 | NS.div_overlay.setEnable();\r | |
915 | \r | |
916 | NS.dataTemp = response.text;\r | |
917 | NS.selectingLang = response.currentLang;\r | |
918 | \r | |
919 | if (response.cmd = 'spell' && response.len !== '0' && response.len) {\r | |
920 | NS.div_overlay.setDisable();\r | |
921 | } else {\r | |
922 | window.setTimeout(function() {\r | |
923 | try {\r | |
924 | NS.div_overlay.setDisable();\r | |
925 | } catch(e) {}\r | |
926 | }, 500);\r | |
927 | }\r | |
928 | \r | |
929 | SetLocalizationButton(NS.LocalizationButton);\r | |
930 | SetLocalizationLabel(NS.LocalizationLabel);\r | |
931 | \r | |
932 | },\r | |
933 | options_checkbox_send: function(response) {\r | |
934 | delete response.id;\r | |
935 | \r | |
936 | var obj = {\r | |
937 | 'osp': appTools.cookie.get('osp'),\r | |
938 | 'udn': appTools.cookie.get('udn'),\r | |
939 | 'cust_dic_ids': NS.cust_dic_ids\r | |
940 | };\r | |
941 | \r | |
942 | var currentTabId = NS.dialog._.currentTabId,\r | |
943 | frameId = NS.iframeNumber + '_' + currentTabId;\r | |
944 | \r | |
945 | appTools.postMessage.send({\r | |
946 | 'message': obj,\r | |
947 | 'target': NS.targetFromFrame[frameId],\r | |
948 | 'id': 'options_outer__page'\r | |
949 | });\r | |
950 | },\r | |
951 | \r | |
952 | getOptions: function(response) {\r | |
953 | var udn = response.DefOptions.udn;\r | |
954 | NS.LocalizationComing = response.DefOptions.localizationButtonsAndText;\r | |
955 | NS.show_grammar = response.show_grammar;\r | |
956 | NS.langList = response.lang;\r | |
957 | NS.bnr = response.bannerId;\r | |
958 | NS.sessionid = response.sessionid;\r | |
959 | if (response.bannerId) {\r | |
960 | NS.setHeightBannerFrame();\r | |
961 | setBannerInPlace(response.banner);\r | |
962 | } else {\r | |
963 | NS.setHeightFrame();\r | |
964 | }\r | |
965 | \r | |
966 | if (udn == 'undefined') {\r | |
967 | if (NS.userDictionaryName) {\r | |
968 | udn = NS.userDictionaryName;\r | |
969 | \r | |
970 | var obj = {\r | |
971 | 'osp': appTools.cookie.get('osp'),\r | |
972 | 'udn': NS.userDictionaryName,\r | |
973 | 'cust_dic_ids': NS.cust_dic_ids,\r | |
974 | 'id': 'options_dic_send',\r | |
975 | 'udnCmd': 'create'\r | |
976 | };\r | |
977 | \r | |
978 | appTools.postMessage.send({\r | |
979 | 'message': obj,\r | |
980 | 'target': NS.targetFromFrame[frameId]\r | |
981 | });\r | |
982 | \r | |
983 | } else{\r | |
984 | udn = '';\r | |
985 | }\r | |
986 | }\r | |
987 | \r | |
988 | appTools.cookie.set('osp', response.DefOptions.osp);\r | |
989 | appTools.cookie.set('udn', udn);\r | |
990 | appTools.cookie.set('cust_dic_ids', response.DefOptions.cust_dic_ids);\r | |
991 | \r | |
992 | appTools.postMessage.send({\r | |
993 | 'id': 'giveOptions'\r | |
994 | });\r | |
995 | },\r | |
996 | \r | |
997 | options_dic_send: function(response) {\r | |
998 | \r | |
999 | var obj = {\r | |
1000 | 'osp': appTools.cookie.get('osp'),\r | |
1001 | 'udn': appTools.cookie.get('udn'),\r | |
1002 | 'cust_dic_ids': NS.cust_dic_ids,\r | |
1003 | 'id': 'options_dic_send',\r | |
1004 | 'udnCmd': appTools.cookie.get('udnCmd')\r | |
1005 | };\r | |
1006 | \r | |
1007 | var currentTabId = NS.dialog._.currentTabId,\r | |
1008 | frameId = NS.iframeNumber + '_' + currentTabId;\r | |
1009 | \r | |
1010 | appTools.postMessage.send({\r | |
1011 | 'message': obj,\r | |
1012 | 'target': NS.targetFromFrame[frameId]\r | |
1013 | });\r | |
1014 | },\r | |
1015 | data: function(response) {\r | |
1016 | delete response.id;\r | |
1017 | },\r | |
1018 | \r | |
1019 | giveOptions: function() {\r | |
1020 | \r | |
1021 | },\r | |
1022 | \r | |
1023 | setOptionsConfirmF:function() {\r | |
1024 | OptionsConfirm(false);\r | |
1025 | },\r | |
1026 | \r | |
1027 | setOptionsConfirmT:function() {\r | |
1028 | OptionsConfirm(true);\r | |
1029 | },\r | |
1030 | \r | |
1031 | clickBusy: function() {\r | |
1032 | NS.div_overlay.setEnable();\r | |
1033 | },\r | |
1034 | \r | |
1035 | suggestAllCame: function() {\r | |
1036 | NS.div_overlay.setDisable();\r | |
1037 | NS.div_overlay_no_check.setDisable();\r | |
1038 | },\r | |
1039 | \r | |
1040 | TextCorrect: function() {\r | |
1041 | langConstructor(NS.langList);\r | |
1042 | }\r | |
1043 | \r | |
1044 | };\r | |
1045 | \r | |
1046 | var handlerIncomingData = function(event) {\r | |
1047 | event = event || window.event;\r | |
1048 | var response = window.JSON.parse(event.data);\r | |
1049 | \r | |
1050 | if(response && response.id) {\r | |
1051 | handlerId[response.id](response);\r | |
1052 | }\r | |
1053 | };\r | |
1054 | \r | |
1055 | var handlerButtonOptions = function(event) {\r | |
1056 | event = event || window.event;\r | |
1057 | \r | |
1058 | var currentTabId = NS.dialog._.currentTabId,\r | |
1059 | frameId = NS.iframeNumber + '_' + currentTabId;\r | |
1060 | \r | |
1061 | appTools.postMessage.send({\r | |
1062 | 'message': {\r | |
1063 | 'cmd': 'Options'\r | |
1064 | },\r | |
1065 | 'target': NS.targetFromFrame[frameId],\r | |
1066 | 'id': 'cmd'\r | |
1067 | });\r | |
1068 | \r | |
1069 | };\r | |
1070 | \r | |
1071 | var sendData = function(frameTarget, cmd, sendText, reset_suggest) {\r | |
1072 | cmd = cmd || CKEDITOR.config.wsc_cmd;\r | |
1073 | reset_suggest = reset_suggest || false;\r | |
1074 | sendText = sendText || NS.dataTemp;\r | |
1075 | \r | |
1076 | appTools.postMessage.send({\r | |
1077 | 'message': {\r | |
1078 | 'customerId': NS.wsc_customerId,\r | |
1079 | 'text': sendText,\r | |
1080 | 'txt_ctrl': NS.TextAreaNumber,\r | |
1081 | 'cmd': cmd,\r | |
1082 | 'cust_dic_ids': NS.cust_dic_ids,\r | |
1083 | 'udn': NS.userDictionaryName,\r | |
1084 | 'slang': NS.selectingLang,\r | |
1085 | 'reset_suggest': reset_suggest,\r | |
1086 | 'sessionid': NS.sessionid\r | |
1087 | },\r | |
1088 | 'target': frameTarget,\r | |
1089 | 'id': 'data_outer__page'\r | |
1090 | });\r | |
1091 | \r | |
1092 | NS.div_overlay.setEnable();\r | |
1093 | };\r | |
1094 | \r | |
1095 | var tabView = {\r | |
1096 | "superset": {\r | |
1097 | onShow: function() {\r | |
1098 | showThesaurusTab();\r | |
1099 | showGrammTab();\r | |
1100 | showSpellTab();\r | |
1101 | },\r | |
1102 | allowedTabCommands: {\r | |
1103 | "spell": true,\r | |
1104 | "grammar": true,\r | |
1105 | "thes": true\r | |
1106 | },\r | |
1107 | defaultTabCommand: "spell"\r | |
1108 | },\r | |
1109 | "usual": {\r | |
1110 | onShow: function() {\r | |
1111 | hideThesaurusTab();\r | |
1112 | hideGrammTab();\r | |
1113 | showSpellTab();\r | |
1114 | },\r | |
1115 | allowedTabCommands: {\r | |
1116 | "spell": true\r | |
1117 | },\r | |
1118 | defaultTabCommand: "spell"\r | |
1119 | },\r | |
1120 | "rtl": {\r | |
1121 | onShow: function() {\r | |
1122 | hideThesaurusTab();\r | |
1123 | hideGrammTab();\r | |
1124 | showSpellTab();\r | |
1125 | },\r | |
1126 | allowedTabCommands: {\r | |
1127 | "spell": true\r | |
1128 | },\r | |
1129 | defaultTabCommand: "spell"\r | |
1130 | },\r | |
1131 | "spellgrammar": {\r | |
1132 | onShow: function() {\r | |
1133 | hideThesaurusTab();\r | |
1134 | showGrammTab();\r | |
1135 | showSpellTab();\r | |
1136 | },\r | |
1137 | allowedTabCommands: {\r | |
1138 | "spell": true,\r | |
1139 | "grammar": true\r | |
1140 | },\r | |
1141 | defaultTabCommand: "spell"\r | |
1142 | },\r | |
1143 | "spellthes": {\r | |
1144 | onShow: function() {\r | |
1145 | showThesaurusTab();\r | |
1146 | hideGrammTab();\r | |
1147 | showSpellTab();\r | |
1148 | },\r | |
1149 | allowedTabCommands: {\r | |
1150 | "spell": true,\r | |
1151 | "thes": true\r | |
1152 | },\r | |
1153 | defaultTabCommand: "spell"\r | |
1154 | }\r | |
1155 | };\r | |
1156 | \r | |
1157 | var showFirstTab = function(scope) {\r | |
1158 | var cmdManger = function(cmdView) {\r | |
1159 | var obj = {};\r | |
1160 | var _getCmd = function(cmd) {\r | |
1161 | for (var tabId in cmdView) {\r | |
1162 | obj[cmdView[tabId]] = tabId;\r | |
1163 | }\r | |
1164 | return obj[cmd];\r | |
1165 | };\r | |
1166 | return {\r | |
1167 | getCmdByTab: _getCmd\r | |
1168 | };\r | |
1169 | };\r | |
1170 | \r | |
1171 | var cmdM = new cmdManger(NS.cmd),\r | |
1172 | tabToOpen = cmdM.getCmdByTab(CKEDITOR.config.wsc_cmd);\r | |
1173 | \r | |
1174 | scope.selectPage(tabToOpen);\r | |
1175 | NS.sendData(scope);\r | |
1176 | };\r | |
1177 | \r | |
1178 | var showThesaurusTab = function() {\r | |
1179 | NS.dialog.showPage('Thesaurus');\r | |
1180 | };\r | |
1181 | \r | |
1182 | var hideThesaurusTab = function() {\r | |
1183 | NS.dialog.hidePage('Thesaurus');\r | |
1184 | };\r | |
1185 | \r | |
1186 | var showGrammTab = function() {\r | |
1187 | NS.dialog.showPage('GrammTab');\r | |
1188 | };\r | |
1189 | \r | |
1190 | var hideGrammTab = function() {\r | |
1191 | NS.dialog.hidePage('GrammTab');\r | |
1192 | };\r | |
1193 | \r | |
1194 | var showSpellTab = function() {\r | |
1195 | NS.dialog.showPage('SpellTab');\r | |
1196 | };\r | |
1197 | \r | |
1198 | var hideSpellTab = function() {\r | |
1199 | NS.dialog.hidePage('SpellTab');\r | |
1200 | };\r | |
1201 | \r | |
1202 | var showCurrentTabs = function() {\r | |
1203 | var target = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'bottomGroup').getElement();\r | |
1204 | \r | |
1205 | target.removeStyle('display');\r | |
1206 | target.removeStyle('position');\r | |
1207 | target.removeStyle('left');\r | |
1208 | \r | |
1209 | target.show();\r | |
1210 | };\r | |
1211 | \r | |
1212 | var hideCurrentTabs = function() {\r | |
1213 | var target = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'bottomGroup').getElement(),\r | |
1214 | activeElement = document.activeElement,\r | |
1215 | focusableElements;\r | |
1216 | \r | |
1217 | target.setStyles({\r | |
1218 | display: 'block',\r | |
1219 | position: 'absolute',\r | |
1220 | left: '-9999px'\r | |
1221 | });\r | |
1222 | \r | |
1223 | setTimeout(function() {\r | |
1224 | target.removeStyle('display');\r | |
1225 | target.removeStyle('position');\r | |
1226 | target.removeStyle('left');\r | |
1227 | \r | |
1228 | target.hide();\r | |
1229 | \r | |
1230 | NS.dialog._.editor.focusManager.currentActive.focusNext();\r | |
1231 | \r | |
1232 | focusableElements = appTools.misc.findFocusable(NS.dialog.parts.contents);\r | |
1233 | if(!appTools.misc.hasClass(activeElement, 'cke_dialog_tab') && !appTools.misc.hasClass(activeElement, 'cke_dialog_contents_body') && appTools.misc.isVisible(activeElement)) {\r | |
1234 | try {\r | |
1235 | activeElement.focus();\r | |
1236 | } catch(e) {}\r | |
1237 | } else {\r | |
1238 | for(var i = 0, tmpCkEl; i < focusableElements.count(); i++) {\r | |
1239 | tmpCkEl = focusableElements.getItem(i);\r | |
1240 | if(appTools.misc.isVisible(tmpCkEl.$)) {\r | |
1241 | try {\r | |
1242 | tmpCkEl.$.focus();\r | |
1243 | } catch(e) {}\r | |
1244 | \r | |
1245 | break;\r | |
1246 | }\r | |
1247 | }\r | |
1248 | }\r | |
1249 | }, 0);\r | |
1250 | };\r | |
1251 | \r | |
1252 | var showCurrentFinishChecking = function() {\r | |
1253 | var target = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'BlockFinishChecking').getElement();\r | |
1254 | \r | |
1255 | target.removeStyle('display');\r | |
1256 | target.removeStyle('position');\r | |
1257 | target.removeStyle('left');\r | |
1258 | \r | |
1259 | target.show();\r | |
1260 | };\r | |
1261 | \r | |
1262 | var hideCurrentFinishChecking = function() {\r | |
1263 | var target = NS.dialog.getContentElement(NS.dialog._.currentTabId, 'BlockFinishChecking').getElement(),\r | |
1264 | activeElement = document.activeElement,\r | |
1265 | focusableElements;\r | |
1266 | \r | |
1267 | target.setStyles({\r | |
1268 | display: 'block',\r | |
1269 | position: 'absolute',\r | |
1270 | left: '-9999px'\r | |
1271 | });\r | |
1272 | \r | |
1273 | setTimeout(function() {\r | |
1274 | target.removeStyle('display');\r | |
1275 | target.removeStyle('position');\r | |
1276 | target.removeStyle('left');\r | |
1277 | \r | |
1278 | target.hide();\r | |
1279 | \r | |
1280 | NS.dialog._.editor.focusManager.currentActive.focusNext();\r | |
1281 | \r | |
1282 | focusableElements = appTools.misc.findFocusable(NS.dialog.parts.contents);\r | |
1283 | if(!appTools.misc.hasClass(activeElement, 'cke_dialog_tab') && !appTools.misc.hasClass(activeElement, 'cke_dialog_contents_body') && appTools.misc.isVisible(activeElement)) {\r | |
1284 | try {\r | |
1285 | activeElement.focus();\r | |
1286 | } catch(e) {}\r | |
1287 | } else {\r | |
1288 | for(var i = 0, tmpCkEl; i < focusableElements.count(); i++) {\r | |
1289 | tmpCkEl = focusableElements.getItem(i);\r | |
1290 | if(appTools.misc.isVisible(tmpCkEl.$)) {\r | |
1291 | try {\r | |
1292 | tmpCkEl.$.focus();\r | |
1293 | } catch(e) {}\r | |
1294 | \r | |
1295 | break;\r | |
1296 | }\r | |
1297 | }\r | |
1298 | }\r | |
1299 | }, 0);\r | |
1300 | };\r | |
1301 | \r | |
1302 | \r | |
1303 | \r | |
1304 | function __constructLangSelectbox(languageGroup) {\r | |
1305 | if( !languageGroup ) { throw "Languages-by-groups list are required for construct selectbox"; }\r | |
1306 | \r | |
1307 | var that = this,\r | |
1308 | o_arr = [],\r | |
1309 | priorLang ="en_US",\r | |
1310 | priorLangTitle = "",\r | |
1311 | currLang = NS.selectingLang;\r | |
1312 | \r | |
1313 | for ( var group in languageGroup){\r | |
1314 | for ( var langCode in languageGroup[group]){\r | |
1315 | var langName = languageGroup[group][langCode];\r | |
1316 | if ( langName == priorLang ) {\r | |
1317 | priorLangTitle = langName;\r | |
1318 | } else {\r | |
1319 | o_arr.push( langName );\r | |
1320 | }\r | |
1321 | }\r | |
1322 | }\r | |
1323 | \r | |
1324 | o_arr.sort();\r | |
1325 | if(priorLangTitle) {\r | |
1326 | o_arr.unshift( priorLangTitle );\r | |
1327 | }\r | |
1328 | \r | |
1329 | var searchGroup = function ( code ){\r | |
1330 | for ( var group in languageGroup){\r | |
1331 | for ( var langCode in languageGroup[group]){\r | |
1332 | if ( langCode.toUpperCase() === code.toUpperCase() ) {\r | |
1333 | return group;\r | |
1334 | }\r | |
1335 | }\r | |
1336 | }\r | |
1337 | return "";\r | |
1338 | };\r | |
1339 | \r | |
1340 | var _setLangList = function() {\r | |
1341 | var langList = {},\r | |
1342 | langArray = [];\r | |
1343 | for (var group in languageGroup) {\r | |
1344 | for ( var langCode in languageGroup[group]){\r | |
1345 | langList[languageGroup[group][langCode]] = langCode;\r | |
1346 | }\r | |
1347 | }\r | |
1348 | return langList;\r | |
1349 | };\r | |
1350 | \r | |
1351 | var _return = {\r | |
1352 | getCurrentLangGroup: function(code) {\r | |
1353 | return searchGroup(code);\r | |
1354 | },\r | |
1355 | setLangList: _setLangList()\r | |
1356 | };\r | |
1357 | \r | |
1358 | return _return;\r | |
1359 | }\r | |
1360 | \r | |
1361 | CKEDITOR.dialog.add('checkspell', function(editor) {\r | |
1362 | var handlerButtons = function(event) {\r | |
1363 | event = event || window.event;\r | |
1364 | \r | |
1365 | // because in chrome and safary document.activeElement returns <body> tag. We need to signal that clicked element is active\r | |
1366 | this.getElement().focus();\r | |
1367 | \r | |
1368 | NS.div_overlay.setEnable();\r | |
1369 | var currentTabId = NS.dialog._.currentTabId,\r | |
1370 | frameId = NS.iframeNumber + '_' + currentTabId,\r | |
1371 | new_word = NS.textNode[currentTabId].getValue(),\r | |
1372 | cmd = this.getElement().getAttribute("title-cmd");\r | |
1373 | \r | |
1374 | appTools.postMessage.send({\r | |
1375 | 'message': {\r | |
1376 | 'cmd': cmd,\r | |
1377 | 'tabId': currentTabId,\r | |
1378 | 'new_word': new_word\r | |
1379 | },\r | |
1380 | 'target': NS.targetFromFrame[frameId],\r | |
1381 | 'id': 'cmd_outer__page'\r | |
1382 | });\r | |
1383 | \r | |
1384 | if (cmd == 'ChangeTo' || cmd == 'ChangeAll') {\r | |
1385 | editor.fire('saveSnapshot');\r | |
1386 | }\r | |
1387 | \r | |
1388 | if (cmd == 'FinishChecking') {\r | |
1389 | editor.config.wsc_onFinish.call(CKEDITOR.document.getWindow().getFrame());\r | |
1390 | }\r | |
1391 | \r | |
1392 | },\r | |
1393 | constraints = {\r | |
1394 | minWidth: 560,\r | |
1395 | minHeight: 444\r | |
1396 | };\r | |
1397 | \r | |
1398 | function initView(dialog) {\r | |
1399 | var newViewSettings = {\r | |
1400 | left: parseInt(editor.config.wsc_left, 10),\r | |
1401 | top: parseInt(editor.config.wsc_top, 10),\r | |
1402 | width: parseInt(editor.config.wsc_width, 10),\r | |
1403 | height: parseInt(editor.config.wsc_height, 10)\r | |
1404 | },\r | |
1405 | viewSize = CKEDITOR.document.getWindow().getViewPaneSize(),\r | |
1406 | currentPosition = dialog.getPosition(),\r | |
1407 | currentSize = dialog.getSize(),\r | |
1408 | savePosition = 0;\r | |
1409 | \r | |
1410 | if(!dialog._.resized) {\r | |
1411 | var wrapperHeight = currentSize.height - dialog.parts.contents.getSize('height', !(CKEDITOR.env.gecko || CKEDITOR.env.opera || CKEDITOR.env.ie && CKEDITOR.env.quirks)),\r | |
1412 | wrapperWidth = currentSize.width - dialog.parts.contents.getSize('width', 1);\r | |
1413 | \r | |
1414 | if(newViewSettings.width < constraints.minWidth || isNaN(newViewSettings.width)) {\r | |
1415 | newViewSettings.width = constraints.minWidth;\r | |
1416 | }\r | |
1417 | if(newViewSettings.width > viewSize.width - wrapperWidth) {\r | |
1418 | newViewSettings.width = viewSize.width - wrapperWidth;\r | |
1419 | }\r | |
1420 | \r | |
1421 | if(newViewSettings.height < constraints.minHeight || isNaN(newViewSettings.height)) {\r | |
1422 | newViewSettings.height = constraints.minHeight;\r | |
1423 | }\r | |
1424 | if(newViewSettings.height > viewSize.height - wrapperHeight) {\r | |
1425 | newViewSettings.height = viewSize.height - wrapperHeight;\r | |
1426 | }\r | |
1427 | \r | |
1428 | currentSize.width = newViewSettings.width + wrapperWidth;\r | |
1429 | currentSize.height = newViewSettings.height + wrapperHeight;\r | |
1430 | \r | |
1431 | dialog._.fromResizeEvent = false;\r | |
1432 | dialog.resize(newViewSettings.width, newViewSettings.height);\r | |
1433 | setTimeout(function() {\r | |
1434 | dialog._.fromResizeEvent = false;\r | |
1435 | CKEDITOR.dialog.fire('resize', {\r | |
1436 | dialog: dialog,\r | |
1437 | width: newViewSettings.width,\r | |
1438 | height: newViewSettings.height\r | |
1439 | }, editor);\r | |
1440 | }, 300);\r | |
1441 | }\r | |
1442 | \r | |
1443 | if(!dialog._.moved) {\r | |
1444 | savePosition = isNaN(newViewSettings.left) && isNaN(newViewSettings.top) ? 0 : 1;\r | |
1445 | \r | |
1446 | if(isNaN(newViewSettings.left)) {\r | |
1447 | newViewSettings.left = (viewSize.width - currentSize.width) / 2;\r | |
1448 | }\r | |
1449 | if(newViewSettings.left < 0) {\r | |
1450 | newViewSettings.left = 0;\r | |
1451 | }\r | |
1452 | if(newViewSettings.left > viewSize.width - currentSize.width) {\r | |
1453 | newViewSettings.left = viewSize.width - currentSize.width;\r | |
1454 | }\r | |
1455 | \r | |
1456 | if(isNaN(newViewSettings.top)) {\r | |
1457 | newViewSettings.top = (viewSize.height - currentSize.height) / 2;\r | |
1458 | }\r | |
1459 | if(newViewSettings.top < 0) {\r | |
1460 | newViewSettings.top = 0;\r | |
1461 | }\r | |
1462 | if(newViewSettings.top > viewSize.height - currentSize.height) {\r | |
1463 | newViewSettings.top = viewSize.height - currentSize.height;\r | |
1464 | }\r | |
1465 | \r | |
1466 | dialog.move(newViewSettings.left, newViewSettings.top, savePosition);\r | |
1467 | }\r | |
1468 | }\r | |
1469 | \r | |
1470 | function createWscObjectForUdAndUdnSyncrhonization() {\r | |
1471 | editor.wsc = {};\r | |
1472 | \r | |
1473 | //DataStorage object for cookies and localStorage manipulation\r | |
1474 | (function( object ) {\r | |
1475 | 'use strict';\r | |
1476 | \r | |
1477 | var DataTypeManager = {\r | |
1478 | separator: '<$>',\r | |
1479 | getDataType: function(value) {\r | |
1480 | var type;\r | |
1481 | \r | |
1482 | if(typeof value === 'undefined') {\r | |
1483 | type = 'undefined';\r | |
1484 | } else if(value === null) {\r | |
1485 | type = 'null';\r | |
1486 | } else {\r | |
1487 | type = Object.prototype.toString.call(value).slice(8, -1);\r | |
1488 | }\r | |
1489 | return type;\r | |
1490 | },\r | |
1491 | convertDataToString: function(value) {\r | |
1492 | var str,\r | |
1493 | type = this.getDataType(value).toLowerCase();\r | |
1494 | \r | |
1495 | str = type + this.separator + value;\r | |
1496 | return str;\r | |
1497 | },\r | |
1498 | // get value type and convert value due to type, since all stored values are String\r | |
1499 | restoreDataFromString: function(str) {\r | |
1500 | var value = str,\r | |
1501 | type,\r | |
1502 | separatorStartIndex;\r | |
1503 | \r | |
1504 | // @TODO: remove this line much later. Support of old format for options\r | |
1505 | str = this.backCompatibility(str);\r | |
1506 | \r | |
1507 | if(typeof str === 'string') {\r | |
1508 | separatorStartIndex = str.indexOf(this.separator);\r | |
1509 | type = str.substring(0, separatorStartIndex);\r | |
1510 | value = str.substring(separatorStartIndex + this.separator.length);\r | |
1511 | \r | |
1512 | switch(type) {\r | |
1513 | case 'boolean':\r | |
1514 | value = value === 'true';\r | |
1515 | break;\r | |
1516 | case 'number':\r | |
1517 | value = parseFloat(value);\r | |
1518 | break;\r | |
1519 | // we assume that we will store string values only, due to performance\r | |
1520 | case 'array':\r | |
1521 | value = value === '' ? [] : value.split(',');\r | |
1522 | break;\r | |
1523 | case 'null':\r | |
1524 | value = null;\r | |
1525 | break;\r | |
1526 | case 'undefined':\r | |
1527 | value = undefined;\r | |
1528 | break;\r | |
1529 | }\r | |
1530 | }\r | |
1531 | return value;\r | |
1532 | },\r | |
1533 | // old data type support\r | |
1534 | // here we trying to convert data from old format into new\r | |
1535 | // @TODO: remove this function much later\r | |
1536 | backCompatibility: function(str) {\r | |
1537 | var convertedStr = str,\r | |
1538 | value,\r | |
1539 | separatorStartIndex;\r | |
1540 | \r | |
1541 | if(typeof str === 'string') {\r | |
1542 | separatorStartIndex = str.indexOf(this.separator);\r | |
1543 | // is it old format?\r | |
1544 | if(separatorStartIndex < 0) {\r | |
1545 | // try to get number from string\r | |
1546 | value = parseFloat(str);\r | |
1547 | // is it not a number?\r | |
1548 | if(isNaN(value)) {\r | |
1549 | // yes, this is not a number. Lets check is this is an array "[comma,separated,values]"\r | |
1550 | if((str[0] === '[') && (str[str.length - 1] === ']')) {\r | |
1551 | // this is an array. Lets remove brackets symbols and extract the words\r | |
1552 | str = str.replace('[', '');\r | |
1553 | str = str.replace(']', '');\r | |
1554 | if(str === '') {\r | |
1555 | value = [];\r | |
1556 | } else {\r | |
1557 | value = str.split(',');\r | |
1558 | }\r | |
1559 | // value = str === '[]' ? [] : str.split(',');\r | |
1560 | } else if(str === 'true' || str === 'false') {\r | |
1561 | // this is boolean value\r | |
1562 | value = str === 'true';\r | |
1563 | } else {\r | |
1564 | // this is string\r | |
1565 | value = str;\r | |
1566 | }\r | |
1567 | }\r | |
1568 | \r | |
1569 | convertedStr = this.convertDataToString(value);\r | |
1570 | }\r | |
1571 | }\r | |
1572 | \r | |
1573 | return convertedStr;\r | |
1574 | }\r | |
1575 | };\r | |
1576 | \r | |
1577 | var LocalStorage = {\r | |
1578 | \r | |
1579 | get: function( key ) {\r | |
1580 | var value = DataTypeManager.restoreDataFromString( window.localStorage.getItem(key) );\r | |
1581 | return value;\r | |
1582 | },\r | |
1583 | \r | |
1584 | set: function( key, value ) {\r | |
1585 | var _value = DataTypeManager.convertDataToString( value );\r | |
1586 | window.localStorage.setItem( key, _value );\r | |
1587 | },\r | |
1588 | \r | |
1589 | del: function( key ) {\r | |
1590 | window.localStorage.removeItem( key );\r | |
1591 | },\r | |
1592 | \r | |
1593 | clear: function() {\r | |
1594 | window.localStorage.clear();\r | |
1595 | }\r | |
1596 | };\r | |
1597 | \r | |
1598 | var CookiesStorage = {\r | |
1599 | \r | |
1600 | expiration: (function() {\r | |
1601 | return 60 * 60 * 24 * 366;\r | |
1602 | }()),\r | |
1603 | \r | |
1604 | get: function(key) {\r | |
1605 | var value = DataTypeManager.restoreDataFromString(this.getCookie(key));\r | |
1606 | return value;\r | |
1607 | },\r | |
1608 | \r | |
1609 | set: function(key, value) {\r | |
1610 | var _value = DataTypeManager.convertDataToString(value);\r | |
1611 | this.setCookie(key, _value, {expires: this.expiration});\r | |
1612 | },\r | |
1613 | \r | |
1614 | del: function(key) {\r | |
1615 | this.deleteCookie(key);\r | |
1616 | },\r | |
1617 | \r | |
1618 | getCookie: function(name) {\r | |
1619 | var matches = document.cookie.match(new RegExp("(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"));\r | |
1620 | return matches ? decodeURIComponent(matches[1]) : undefined;\r | |
1621 | },\r | |
1622 | \r | |
1623 | setCookie: function(name, value, props) {\r | |
1624 | props = props || {};\r | |
1625 | var exp = props.expires;\r | |
1626 | \r | |
1627 | if (typeof exp === "number" && exp) {\r | |
1628 | var d = new Date();\r | |
1629 | \r | |
1630 | d.setTime(d.getTime() + exp * 1000);\r | |
1631 | exp = props.expires = d;\r | |
1632 | }\r | |
1633 | \r | |
1634 | if(exp && exp.toUTCString) {\r | |
1635 | props.expires = exp.toUTCString();\r | |
1636 | }\r | |
1637 | \r | |
1638 | value = encodeURIComponent(value);\r | |
1639 | var updatedCookie = name + "=" + value;\r | |
1640 | \r | |
1641 | for(var propName in props) {\r | |
1642 | var propValue = props[propName];\r | |
1643 | \r | |
1644 | updatedCookie += "; " + propName;\r | |
1645 | \r | |
1646 | if(propValue !== true) {\r | |
1647 | updatedCookie += "=" + propValue;\r | |
1648 | }\r | |
1649 | }\r | |
1650 | \r | |
1651 | document.cookie = updatedCookie;\r | |
1652 | },\r | |
1653 | \r | |
1654 | deleteCookie: function(name) {\r | |
1655 | this.setCookie(name, null, {expires: -1});\r | |
1656 | },\r | |
1657 | \r | |
1658 | // delete all cookies\r | |
1659 | clear: function() {\r | |
1660 | var cookies = document.cookie.split(";");\r | |
1661 | \r | |
1662 | for (var i = 0; i < cookies.length; i++) {\r | |
1663 | var cookie = cookies[i];\r | |
1664 | var eqPos = cookie.indexOf("=");\r | |
1665 | var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;\r | |
1666 | \r | |
1667 | this.deleteCookie(name);\r | |
1668 | }\r | |
1669 | }\r | |
1670 | };\r | |
1671 | \r | |
1672 | var strategy = window.localStorage ? LocalStorage : CookiesStorage;\r | |
1673 | \r | |
1674 | var DataStorage = {\r | |
1675 | // Get data within storage for key\r | |
1676 | getData: function( key ) {\r | |
1677 | return strategy.get( key );\r | |
1678 | },\r | |
1679 | \r | |
1680 | // Set data within storage\r | |
1681 | setData: function( key, value ) {\r | |
1682 | strategy.set( key, value );\r | |
1683 | },\r | |
1684 | \r | |
1685 | // Delete data within storage for key\r | |
1686 | deleteData: function( key ) {\r | |
1687 | strategy.del( key );\r | |
1688 | },\r | |
1689 | \r | |
1690 | // Clear storage\r | |
1691 | clear: function() {\r | |
1692 | strategy.clear();\r | |
1693 | }\r | |
1694 | };\r | |
1695 | \r | |
1696 | // Static Module of Storage Data in the localStorage.\r | |
1697 | object.DataStorage = DataStorage;\r | |
1698 | }( editor.wsc ));\r | |
1699 | \r | |
1700 | editor.wsc.operationWithUDN = function(command, UDName) {\r | |
1701 | var obj = {\r | |
1702 | 'udn': UDName,\r | |
1703 | 'id': 'operationWithUDN',\r | |
1704 | 'udnCmd': command\r | |
1705 | };\r | |
1706 | var currentTabId = NS.dialog._.currentTabId,\r | |
1707 | frameId = NS.iframeNumber + '_' + currentTabId;\r | |
1708 | \r | |
1709 | appTools.postMessage.send({\r | |
1710 | 'message': obj,\r | |
1711 | 'target': NS.targetFromFrame[frameId]\r | |
1712 | });\r | |
1713 | };\r | |
1714 | editor.wsc.getLocalStorageUDN = function() {\r | |
1715 | var udn = editor.wsc.DataStorage.getData('scayt_user_dictionary_name');\r | |
1716 | \r | |
1717 | if (!udn) {\r | |
1718 | return;\r | |
1719 | }\r | |
1720 | \r | |
1721 | return udn;\r | |
1722 | };\r | |
1723 | editor.wsc.getLocalStorageUD = function() {\r | |
1724 | var ud = editor.wsc.DataStorage.getData('scayt_user_dictionary');\r | |
1725 | \r | |
1726 | if (!ud) {\r | |
1727 | return;\r | |
1728 | }\r | |
1729 | \r | |
1730 | return ud;\r | |
1731 | };\r | |
1732 | editor.wsc.addWords = function(words, callback) {\r | |
1733 | var url = editor.config.wsc.DefaultParams.serviceHost + editor.config.wsc.DefaultParams.ssrvHost +\r | |
1734 | '?cmd=dictionary&format=json&' +\r | |
1735 | 'customerid=1%3AncttD3-fIoSf2-huzwE4-Y5muI2-mD0Tt-kG9Wz-UEDFC-tYu243-1Uq474-d9Z2l3&' +\r | |
1736 | 'action=addword&word='+ words + '&callback=toString&synchronization=true',\r | |
1737 | script = document.createElement('script');\r | |
1738 | \r | |
1739 | script['type'] = 'text/javascript';\r | |
1740 | script['src'] = url;\r | |
1741 | document.getElementsByTagName("head")[0].appendChild(script);\r | |
1742 | \r | |
1743 | //chrome, firefox, safari\r | |
1744 | script.onload = callback;\r | |
1745 | \r | |
1746 | //IE\r | |
1747 | script.onreadystatechange = function() {\r | |
1748 | if (this.readyState === 'loaded') {\r | |
1749 | callback();\r | |
1750 | }\r | |
1751 | };\r | |
1752 | };\r | |
1753 | editor.wsc.cgiOrigin = function() {\r | |
1754 | var wscServiceHostString = editor.config.wsc.DefaultParams.serviceHost,\r | |
1755 | wscServiceHostArray = wscServiceHostString.split('/'),\r | |
1756 | cgiOrigin = wscServiceHostArray[0] + '//' + wscServiceHostArray[2];\r | |
1757 | \r | |
1758 | return cgiOrigin;\r | |
1759 | };\r | |
1760 | editor.wsc.isSsrvSame = false;\r | |
1761 | }\r | |
1762 | \r | |
1763 | return {\r | |
1764 | title: editor.config.wsc_dialogTitle || editor.lang.wsc.title,\r | |
1765 | minWidth: constraints.minWidth,\r | |
1766 | minHeight: constraints.minHeight,\r | |
1767 | buttons: [CKEDITOR.dialog.cancelButton],\r | |
1768 | onLoad: function() {\r | |
1769 | NS.dialog = this;\r | |
1770 | hideThesaurusTab();\r | |
1771 | hideGrammTab();\r | |
1772 | showSpellTab();\r | |
1773 | \r | |
1774 | //creating wsc object for UD synchronization between wsc and scayt\r | |
1775 | if (editor.plugins.scayt) {\r | |
1776 | createWscObjectForUdAndUdnSyncrhonization();\r | |
1777 | }\r | |
1778 | },\r | |
1779 | onShow: function() {\r | |
1780 | NS.dialog = this;\r | |
1781 | \r | |
1782 | editor.lockSelection(editor.getSelection());\r | |
1783 | \r | |
1784 | NS.TextAreaNumber = 'cke_textarea_' + editor.name;\r | |
1785 | appTools.postMessage.init(handlerIncomingData);\r | |
1786 | NS.dataTemp = editor.getData();\r | |
1787 | //NS.div_overlay.setDisable();\r | |
1788 | NS.OverlayPlace = NS.dialog.parts.tabs.getParent().$;\r | |
1789 | if(CKEDITOR && CKEDITOR.config){\r | |
1790 | NS.wsc_customerId = editor.config.wsc_customerId;\r | |
1791 | NS.cust_dic_ids = editor.config.wsc_customDictionaryIds;\r | |
1792 | NS.userDictionaryName = editor.config.wsc_userDictionaryName;\r | |
1793 | NS.defaultLanguage = CKEDITOR.config.defaultLanguage;\r | |
1794 | var protocol = document.location.protocol == "file:" ? "http:" : document.location.protocol;\r | |
1795 | var wscCoreUrl = editor.config.wsc_customLoaderScript || ( protocol + '//loader.webspellchecker.net/sproxy_fck/sproxy.php?plugin=fck2&customerid=' + NS.wsc_customerId + '&cmd=script&doc=wsc&schema=22');\r | |
1796 | } else {\r | |
1797 | NS.dialog.hide();\r | |
1798 | return;\r | |
1799 | }\r | |
1800 | \r | |
1801 | initView(this);\r | |
1802 | \r | |
1803 | CKEDITOR.scriptLoader.load(wscCoreUrl, function(success) {\r | |
1804 | if(CKEDITOR.config && CKEDITOR.config.wsc && CKEDITOR.config.wsc.DefaultParams){\r | |
1805 | NS.serverLocationHash = CKEDITOR.config.wsc.DefaultParams.serviceHost;\r | |
1806 | NS.logotype = CKEDITOR.config.wsc.DefaultParams.logoPath;\r | |
1807 | NS.loadIcon = CKEDITOR.config.wsc.DefaultParams.iconPath;\r | |
1808 | NS.loadIconEmptyEditor = CKEDITOR.config.wsc.DefaultParams.iconPathEmptyEditor;\r | |
1809 | NS.LangComparer = new CKEDITOR.config.wsc.DefaultParams._SP_FCK_LangCompare();\r | |
1810 | }else{\r | |
1811 | NS.serverLocationHash = DefaultParams.serviceHost;\r | |
1812 | NS.logotype = DefaultParams.logoPath;\r | |
1813 | NS.loadIcon = DefaultParams.iconPath;\r | |
1814 | NS.loadIconEmptyEditor = DefaultParams.iconPathEmptyEditor;\r | |
1815 | NS.LangComparer = new _SP_FCK_LangCompare();\r | |
1816 | }\r | |
1817 | \r | |
1818 | NS.pluginPath = CKEDITOR.getUrl(editor.plugins.wsc.path);\r | |
1819 | NS.iframeNumber = NS.TextAreaNumber;\r | |
1820 | NS.templatePath = NS.pluginPath + 'dialogs/tmp.html';\r | |
1821 | NS.LangComparer.setDefaulLangCode( NS.defaultLanguage );\r | |
1822 | NS.currentLang = editor.config.wsc_lang || NS.LangComparer.getSPLangCode( editor.langCode ) || 'en_US';\r | |
1823 | NS.selectingLang = NS.currentLang;\r | |
1824 | NS.div_overlay = new overlayBlock({\r | |
1825 | opacity: "1",\r | |
1826 | background: "#fff url(" + NS.loadIcon + ") no-repeat 50% 50%",\r | |
1827 | target: NS.OverlayPlace\r | |
1828 | \r | |
1829 | });\r | |
1830 | \r | |
1831 | var number_ck = NS.dialog.parts.tabs.getId(),\r | |
1832 | dialogPartsTab = CKEDITOR.document.getById(number_ck);\r | |
1833 | \r | |
1834 | dialogPartsTab.setStyle('width', '97%');\r | |
1835 | if (!dialogPartsTab.getElementsByTag('DIV').count()){\r | |
1836 | dialogPartsTab.append(NS.buildSelectLang(NS.dialog.getParentEditor().name));\r | |
1837 | }\r | |
1838 | \r | |
1839 | NS.div_overlay_no_check = new overlayBlock({\r | |
1840 | opacity: "1",\r | |
1841 | id: 'no_check_over',\r | |
1842 | background: "#fff url(" + NS.loadIconEmptyEditor + ") no-repeat 50% 50%",\r | |
1843 | target: NS.OverlayPlace\r | |
1844 | });\r | |
1845 | \r | |
1846 | if (success) {\r | |
1847 | showFirstTab(NS.dialog);\r | |
1848 | NS.dialog.setupContent(NS.dialog);\r | |
1849 | }\r | |
1850 | \r | |
1851 | if (editor.plugins.scayt) {\r | |
1852 | //is ssrv.cgi path for WSC and scayt same\r | |
1853 | editor.wsc.isSsrvSame = (function() {\r | |
1854 | var wscSsrvWholePath,\r | |
1855 | wscServiceHost = CKEDITOR.config.wsc.DefaultParams.serviceHost.replace('lf/22/js/../../../', '').split('//')[1],\r | |
1856 | wscSsrvHost = CKEDITOR.config.wsc.DefaultParams.ssrvHost,\r | |
1857 | scaytSsrvWholePath,\r | |
1858 | scaytSsrvProtocol,\r | |
1859 | scaytSsrvHost,\r | |
1860 | scaytSsrvPath,\r | |
1861 | \r | |
1862 | scaytSrcUrl = editor.config.scayt_srcUrl,\r | |
1863 | scaytSsrvSrcUrlSsrvProtocol,\r | |
1864 | scaytSsrvSrcUrlSsrvHost,\r | |
1865 | scaytSsrvSrcUrlSsrvPath,\r | |
1866 | \r | |
1867 | scaytBasePath,\r | |
1868 | scaytBasePathSsrvProtocol,\r | |
1869 | scaytBasePathSsrvHost,\r | |
1870 | scaytBasePathSsrvPath;\r | |
1871 | \r | |
1872 | if (window.SCAYT && window.SCAYT.CKSCAYT) {\r | |
1873 | scaytBasePath = SCAYT.CKSCAYT.prototype.basePath;\r | |
1874 | scaytBasePathSsrvProtocol = scaytBasePath.split('//')[0];\r | |
1875 | scaytBasePathSsrvHost = scaytBasePath.split('//')[1].split('/')[0];\r | |
1876 | scaytBasePathSsrvPath = scaytBasePath.split(scaytBasePathSsrvHost + '/')[1].replace('/lf/scayt3/ckscayt/', '') + '/script/ssrv.cgi';\r | |
1877 | }\r | |
1878 | \r | |
1879 | if (scaytSrcUrl && !scaytBasePath && !editor.config.scayt_servicePath) {\r | |
1880 | scaytSsrvSrcUrlSsrvProtocol = scaytSrcUrl.split('//')[0];\r | |
1881 | scaytSsrvSrcUrlSsrvHost = scaytSrcUrl.split('//')[1].split('/')[0];\r | |
1882 | scaytSsrvSrcUrlSsrvPath = scaytSrcUrl.split(scaytSsrvSrcUrlSsrvHost + '/')[1].replace('/lf/scayt3/ckscayt/ckscayt.js', '') + '/script/ssrv.cgi';\r | |
1883 | }\r | |
1884 | \r | |
1885 | scaytSsrvProtocol = editor.config.scayt_serviceProtocol || scaytBasePathSsrvProtocol || scaytSsrvSrcUrlSsrvProtocol;\r | |
1886 | scaytSsrvHost = editor.config.scayt_serviceHost || scaytBasePathSsrvHost || scaytSsrvSrcUrlSsrvHost;\r | |
1887 | scaytSsrvPath = editor.config.scayt_servicePath || scaytBasePathSsrvPath || scaytSsrvSrcUrlSsrvPath;\r | |
1888 | \r | |
1889 | wscSsrvWholePath = '//' + wscServiceHost + wscSsrvHost;\r | |
1890 | scaytSsrvWholePath = '//' + scaytSsrvHost + '/' + scaytSsrvPath;\r | |
1891 | \r | |
1892 | return wscSsrvWholePath === scaytSsrvWholePath;\r | |
1893 | })();\r | |
1894 | }\r | |
1895 | \r | |
1896 | //wsc on scayt UserDictionary and UserDictionaryName synchronization\r | |
1897 | if (window.SCAYT && editor.wsc && editor.wsc.isSsrvSame) {\r | |
1898 | var cgiOrigin = editor.wsc.cgiOrigin();\r | |
1899 | editor.wsc.syncIsDone = false;\r | |
1900 | \r | |
1901 | var getUdOrUdn = function (e) {\r | |
1902 | if (e.origin === cgiOrigin) {\r | |
1903 | var data = JSON.parse(e.data);\r | |
1904 | \r | |
1905 | if (data.ud && data.ud !== 'undefined') {\r | |
1906 | editor.wsc.ud = data.ud;\r | |
1907 | } else if (data.ud === 'undefined') {\r | |
1908 | editor.wsc.ud = undefined;\r | |
1909 | }\r | |
1910 | \r | |
1911 | if (data.udn && data.udn !== 'undefined') {\r | |
1912 | editor.wsc.udn = data.udn;\r | |
1913 | } else if (data.udn === 'undefined') {\r | |
1914 | editor.wsc.udn = undefined;\r | |
1915 | }\r | |
1916 | \r | |
1917 | if (!editor.wsc.syncIsDone) {\r | |
1918 | udSynchronization(editor.wsc.ud);\r | |
1919 | editor.wsc.syncIsDone = true;\r | |
1920 | }\r | |
1921 | }\r | |
1922 | };\r | |
1923 | \r | |
1924 | var udSynchronization = function(cookieUd) {\r | |
1925 | var localStorageUdArray = editor.wsc.getLocalStorageUD(),\r | |
1926 | newUd;\r | |
1927 | \r | |
1928 | if (localStorageUdArray instanceof Array) {\r | |
1929 | newUd = localStorageUdArray.toString();\r | |
1930 | }\r | |
1931 | \r | |
1932 | if (newUd !== undefined && newUd !== '') {\r | |
1933 | setTimeout(function() {\r | |
1934 | editor.wsc.addWords(newUd, function() {\r | |
1935 | showFirstTab(NS.dialog);\r | |
1936 | NS.dialog.setupContent(NS.dialog);\r | |
1937 | });\r | |
1938 | }, 400);\r | |
1939 | }\r | |
1940 | };\r | |
1941 | \r | |
1942 | if (window.addEventListener){\r | |
1943 | addEventListener("message", getUdOrUdn, false);\r | |
1944 | } else {\r | |
1945 | window.attachEvent("onmessage", getUdOrUdn);\r | |
1946 | }\r | |
1947 | \r | |
1948 | //wsc on scayt UserDictionaryName synchronization\r | |
1949 | setTimeout(\r | |
1950 | function() {\r | |
1951 | var udn = editor.wsc.getLocalStorageUDN();\r | |
1952 | \r | |
1953 | if (udn !== undefined) {\r | |
1954 | editor.wsc.operationWithUDN('restore', udn);\r | |
1955 | }\r | |
1956 | \r | |
1957 | },\r | |
1958 | 500); //need to wait spell.js file to load\r | |
1959 | \r | |
1960 | }\r | |
1961 | });\r | |
1962 | \r | |
1963 | },\r | |
1964 | onHide: function() {\r | |
1965 | var scaytPlugin = CKEDITOR.plugins.scayt,\r | |
1966 | scaytInstance = editor.scayt;\r | |
1967 | \r | |
1968 | editor.unlockSelection();\r | |
1969 | \r | |
1970 | if(scaytPlugin && scaytInstance && scaytPlugin.state[editor.name]) {\r | |
1971 | scaytInstance.setMarkupPaused(false);\r | |
1972 | }\r | |
1973 | \r | |
1974 | NS.dataTemp = '';\r | |
1975 | NS.sessionid = '';\r | |
1976 | appTools.postMessage.unbindHandler(handlerIncomingData);\r | |
1977 | \r | |
1978 | //scayt on wsc UserDictionary and UserDictionaryName synchronization\r | |
1979 | if (editor.plugins.scayt && editor.wsc && editor.wsc.isSsrvSame) {\r | |
1980 | var wscUDN = editor.wsc.udn,\r | |
1981 | wscUD = editor.wsc.ud,\r | |
1982 | wscUDarray,\r | |
1983 | i;\r | |
1984 | \r | |
1985 | if (editor.scayt) { // if SCAYT active\r | |
1986 | if (!wscUDN) {\r | |
1987 | editor.wsc.DataStorage.setData('scayt_user_dictionary_name', '');\r | |
1988 | editor.scayt.removeUserDictionary();\r | |
1989 | } else {\r | |
1990 | editor.wsc.DataStorage.setData('scayt_user_dictionary_name', wscUDN);\r | |
1991 | editor.scayt.restoreUserDictionary(wscUDN);\r | |
1992 | }\r | |
1993 | \r | |
1994 | if (wscUD) {\r | |
1995 | setTimeout(function() {\r | |
1996 | wscUDarray = wscUD.split(',');\r | |
1997 | for (i = 0; i < wscUDarray.length; i += 1) {\r | |
1998 | editor.scayt.addWordToUserDictionary(wscUDarray[i]);\r | |
1999 | }\r | |
2000 | }, 200); //wait for 'removeUserDictionary' command response\r | |
2001 | }\r | |
2002 | \r | |
2003 | if (!wscUD) {\r | |
2004 | editor.wsc.DataStorage.setData('scayt_user_dictionary', []);\r | |
2005 | }\r | |
2006 | \r | |
2007 | } else { //if SCAYT not active\r | |
2008 | \r | |
2009 | if (!wscUDN) {\r | |
2010 | editor.wsc.DataStorage.setData('scayt_user_dictionary_name', '');\r | |
2011 | } else {\r | |
2012 | editor.wsc.DataStorage.setData('scayt_user_dictionary_name', wscUDN);\r | |
2013 | }\r | |
2014 | \r | |
2015 | if (wscUD) {\r | |
2016 | wscUDarray = wscUD.split(',');\r | |
2017 | editor.wsc.DataStorage.setData('scayt_user_dictionary', wscUDarray);\r | |
2018 | }\r | |
2019 | }\r | |
2020 | }\r | |
2021 | },\r | |
2022 | contents: [\r | |
2023 | {\r | |
2024 | id: 'SpellTab',\r | |
2025 | label: 'SpellChecker',\r | |
2026 | accessKey: 'S',\r | |
2027 | elements: [\r | |
2028 | {\r | |
2029 | type: 'html',\r | |
2030 | id: 'banner',\r | |
2031 | label: 'banner',\r | |
2032 | style: '', //TODO\r | |
2033 | html: '<div></div>'\r | |
2034 | },\r | |
2035 | {\r | |
2036 | type: 'html',\r | |
2037 | id: 'Content',\r | |
2038 | label: 'spellContent',\r | |
2039 | html: '',\r | |
2040 | setup: function(dialog) {\r | |
2041 | var tabId = NS.iframeNumber + '_' + dialog._.currentTabId;\r | |
2042 | var iframe = document.getElementById(tabId);\r | |
2043 | NS.targetFromFrame[tabId] = iframe.contentWindow;\r | |
2044 | }\r | |
2045 | },\r | |
2046 | {\r | |
2047 | type: 'hbox',\r | |
2048 | id: 'bottomGroup',\r | |
2049 | style: 'width:560px; margin: 0 auto;',\r | |
2050 | widths: ['50%', '50%'],\r | |
2051 | children: [\r | |
2052 | {\r | |
2053 | type: 'hbox',\r | |
2054 | id: 'leftCol',\r | |
2055 | align: 'left',\r | |
2056 | width: '50%',\r | |
2057 | children: [\r | |
2058 | {\r | |
2059 | type: 'vbox',\r | |
2060 | id: 'rightCol1',\r | |
2061 | widths: ['50%', '50%'],\r | |
2062 | children: [\r | |
2063 | {\r | |
2064 | type: 'text',\r | |
2065 | id: 'ChangeTo_label',\r | |
2066 | label: NS.LocalizationLabel['ChangeTo_label'].text + ':',\r | |
2067 | labelLayout: 'horizontal',\r | |
2068 | labelStyle: 'font: 12px/25px arial, sans-serif;',\r | |
2069 | width: '140px',\r | |
2070 | 'default': '',\r | |
2071 | onShow: function() {\r | |
2072 | NS.textNode['SpellTab'] = this;\r | |
2073 | NS.LocalizationLabel['ChangeTo_label'].instance = this;\r | |
2074 | },\r | |
2075 | onHide: function() {\r | |
2076 | this.reset();\r | |
2077 | }\r | |
2078 | },\r | |
2079 | {\r | |
2080 | type: 'hbox',\r | |
2081 | id: 'rightCol',\r | |
2082 | align: 'right',\r | |
2083 | width: '30%',\r | |
2084 | children: [\r | |
2085 | {\r | |
2086 | type: 'vbox',\r | |
2087 | id: 'rightCol_col__left',\r | |
2088 | children: [\r | |
2089 | {\r | |
2090 | type: 'text',\r | |
2091 | id: 'labelSuggestions',\r | |
2092 | label: NS.LocalizationLabel['Suggestions'].text + ':',\r | |
2093 | onShow: function() {\r | |
2094 | NS.LocalizationLabel['Suggestions'].instance = this;\r | |
2095 | this.getInputElement().setStyles({\r | |
2096 | display: 'none'\r | |
2097 | });\r | |
2098 | }\r | |
2099 | },\r | |
2100 | {\r | |
2101 | type: 'html',\r | |
2102 | id: 'logo',\r | |
2103 | html: '<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',\r | |
2104 | setup: function(dialog) {\r | |
2105 | this.getElement().$.src = NS.logotype;\r | |
2106 | this.getElement().getParent().setStyles({\r | |
2107 | "text-align": "left"\r | |
2108 | });\r | |
2109 | }\r | |
2110 | }\r | |
2111 | ]\r | |
2112 | },\r | |
2113 | {\r | |
2114 | type: 'select',\r | |
2115 | id: 'list_of_suggestions',\r | |
2116 | labelStyle: 'font: 12px/25px arial, sans-serif;',\r | |
2117 | size: '6',\r | |
2118 | inputStyle: 'width: 140px; height: auto;',\r | |
2119 | items: [['loading...']],\r | |
2120 | onShow: function() {\r | |
2121 | selectNode = this;\r | |
2122 | },\r | |
2123 | onChange: function() {\r | |
2124 | NS.textNode['SpellTab'].setValue(this.getValue());\r | |
2125 | }\r | |
2126 | }\r | |
2127 | ]\r | |
2128 | }\r | |
2129 | ]\r | |
2130 | }\r | |
2131 | ]\r | |
2132 | },\r | |
2133 | {\r | |
2134 | type: 'hbox',\r | |
2135 | id: 'rightCol',\r | |
2136 | align: 'right',\r | |
2137 | width: '50%',\r | |
2138 | children: [\r | |
2139 | {\r | |
2140 | type: 'vbox',\r | |
2141 | id: 'rightCol_col__left',\r | |
2142 | widths: ['50%', '50%', '50%', '50%'],\r | |
2143 | children: [\r | |
2144 | {\r | |
2145 | type: 'button',\r | |
2146 | id: 'ChangeTo_button',\r | |
2147 | label: NS.LocalizationButton['ChangeTo_button'].text,\r | |
2148 | title: 'Change to',\r | |
2149 | style: 'width: 100%;',\r | |
2150 | onLoad: function() {\r | |
2151 | this.getElement().setAttribute("title-cmd", 'ChangeTo');\r | |
2152 | NS.LocalizationButton['ChangeTo_button'].instance = this;\r | |
2153 | },\r | |
2154 | onClick: handlerButtons\r | |
2155 | },\r | |
2156 | {\r | |
2157 | type: 'button',\r | |
2158 | id: 'ChangeAll',\r | |
2159 | label: NS.LocalizationButton['ChangeAll'].text,\r | |
2160 | title: 'Change All',\r | |
2161 | style: 'width: 100%;',\r | |
2162 | onLoad: function() {\r | |
2163 | this.getElement().setAttribute("title-cmd", this.id);\r | |
2164 | NS.LocalizationButton['ChangeAll'].instance = this;\r | |
2165 | },\r | |
2166 | onClick: handlerButtons\r | |
2167 | },\r | |
2168 | {\r | |
2169 | type: 'button',\r | |
2170 | id: 'AddWord',\r | |
2171 | label: NS.LocalizationButton['AddWord'].text,\r | |
2172 | title: 'Add word',\r | |
2173 | style: 'width: 100%;',\r | |
2174 | onLoad: function() {\r | |
2175 | this.getElement().setAttribute("title-cmd", this.id);\r | |
2176 | NS.LocalizationButton['AddWord'].instance = this;\r | |
2177 | },\r | |
2178 | onClick: handlerButtons\r | |
2179 | },\r | |
2180 | {\r | |
2181 | type: 'button',\r | |
2182 | id: 'FinishChecking_button',\r | |
2183 | label: NS.LocalizationButton['FinishChecking_button'].text,\r | |
2184 | title: 'Finish Checking',\r | |
2185 | style: 'width: 100%;margin-top: 9px;',\r | |
2186 | onLoad: function() {\r | |
2187 | this.getElement().setAttribute("title-cmd", 'FinishChecking');\r | |
2188 | NS.LocalizationButton['FinishChecking_button'].instance = this;\r | |
2189 | },\r | |
2190 | onClick: handlerButtons\r | |
2191 | }\r | |
2192 | ]\r | |
2193 | },\r | |
2194 | {\r | |
2195 | type: 'vbox',\r | |
2196 | id: 'rightCol_col__right',\r | |
2197 | widths: ['50%', '50%', '50%'],\r | |
2198 | children: [\r | |
2199 | {\r | |
2200 | type: 'button',\r | |
2201 | id: 'IgnoreWord',\r | |
2202 | label: NS.LocalizationButton['IgnoreWord'].text,\r | |
2203 | title: 'Ignore word',\r | |
2204 | style: 'width: 100%;',\r | |
2205 | onLoad: function() {\r | |
2206 | this.getElement().setAttribute("title-cmd", this.id);\r | |
2207 | NS.LocalizationButton['IgnoreWord'].instance = this;\r | |
2208 | },\r | |
2209 | onClick: handlerButtons\r | |
2210 | },\r | |
2211 | {\r | |
2212 | type: 'button',\r | |
2213 | id: 'IgnoreAllWords',\r | |
2214 | label: NS.LocalizationButton['IgnoreAllWords'].text,\r | |
2215 | title: 'Ignore all words',\r | |
2216 | style: 'width: 100%;',\r | |
2217 | onLoad: function() {\r | |
2218 | this.getElement().setAttribute("title-cmd", this.id);\r | |
2219 | NS.LocalizationButton['IgnoreAllWords'].instance = this;\r | |
2220 | },\r | |
2221 | onClick: handlerButtons\r | |
2222 | },\r | |
2223 | {\r | |
2224 | type: 'button',\r | |
2225 | id: 'Options',\r | |
2226 | label: NS.LocalizationButton['Options'].text,\r | |
2227 | title: 'Option',\r | |
2228 | style: 'width: 100%;',\r | |
2229 | onLoad: function() {\r | |
2230 | NS.LocalizationButton['Options'].instance = this;\r | |
2231 | if (document.location.protocol == "file:") {\r | |
2232 | this.disable();\r | |
2233 | }\r | |
2234 | },\r | |
2235 | onClick: function() {\r | |
2236 | // because in chrome and safary document.activeElement returns <body> tag. We need to signal that clicked element is active\r | |
2237 | this.getElement().focus();\r | |
2238 | \r | |
2239 | if (document.location.protocol == "file:") {\r | |
2240 | alert('WSC: Options functionality is disabled when runing from file system');\r | |
2241 | } else {\r | |
2242 | activeElement = document.activeElement;\r | |
2243 | editor.openDialog('options');\r | |
2244 | }\r | |
2245 | }\r | |
2246 | }\r | |
2247 | ]\r | |
2248 | }\r | |
2249 | ]\r | |
2250 | }\r | |
2251 | ]\r | |
2252 | },\r | |
2253 | {\r | |
2254 | type: 'hbox',\r | |
2255 | id: 'BlockFinishChecking',\r | |
2256 | style: 'width:560px; margin: 0 auto;',\r | |
2257 | widths: ['70%', '30%'],\r | |
2258 | onShow: function() {\r | |
2259 | this.getElement().setStyles({\r | |
2260 | display: 'block',\r | |
2261 | position: 'absolute',\r | |
2262 | left: '-9999px'\r | |
2263 | });\r | |
2264 | },\r | |
2265 | onHide: showCurrentTabs,\r | |
2266 | children: [\r | |
2267 | {\r | |
2268 | type: 'hbox',\r | |
2269 | id: 'leftCol',\r | |
2270 | align: 'left',\r | |
2271 | width: '70%',\r | |
2272 | children: [\r | |
2273 | {\r | |
2274 | type: 'vbox',\r | |
2275 | id: 'rightCol1',\r | |
2276 | setup: function() {\r | |
2277 | this.getChild()[0].getElement().$.src = NS.logotype;\r | |
2278 | this.getChild()[0].getElement().getParent().setStyles({\r | |
2279 | "text-align": "center"\r | |
2280 | });\r | |
2281 | },\r | |
2282 | children: [\r | |
2283 | {\r | |
2284 | type: 'html',\r | |
2285 | id: 'logo',\r | |
2286 | html: '<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">'\r | |
2287 | }\r | |
2288 | ]\r | |
2289 | }\r | |
2290 | ]\r | |
2291 | },\r | |
2292 | {\r | |
2293 | type: 'hbox',\r | |
2294 | id: 'rightCol',\r | |
2295 | align: 'right',\r | |
2296 | width: '30%',\r | |
2297 | children: [\r | |
2298 | {\r | |
2299 | type: 'vbox',\r | |
2300 | id: 'rightCol_col__left',\r | |
2301 | children: [\r | |
2302 | {\r | |
2303 | type: 'button',\r | |
2304 | id: 'Option_button',\r | |
2305 | label: NS.LocalizationButton['Options'].text,\r | |
2306 | title: 'Option',\r | |
2307 | style: 'width: 100%;',\r | |
2308 | onLoad: function() {\r | |
2309 | this.getElement().setAttribute("title-cmd", this.id);\r | |
2310 | if (document.location.protocol == "file:") {\r | |
2311 | this.disable();\r | |
2312 | }\r | |
2313 | },\r | |
2314 | onClick: function() {\r | |
2315 | // because in chrome and safary document.activeElement returns <body> tag. We need to signal that clicked element is active\r | |
2316 | this.getElement().focus();\r | |
2317 | \r | |
2318 | if (document.location.protocol == "file:") {\r | |
2319 | alert('WSC: Options functionality is disabled when runing from file system');\r | |
2320 | } else {\r | |
2321 | activeElement = document.activeElement;\r | |
2322 | editor.openDialog('options');\r | |
2323 | }\r | |
2324 | }\r | |
2325 | },\r | |
2326 | {\r | |
2327 | type: 'button',\r | |
2328 | id: 'FinishChecking_button_block',\r | |
2329 | label: NS.LocalizationButton['FinishChecking_button_block'].text,\r | |
2330 | title: 'Finish Checking',\r | |
2331 | style: 'width: 100%;',\r | |
2332 | onLoad: function() {\r | |
2333 | this.getElement().setAttribute("title-cmd", 'FinishChecking');\r | |
2334 | },\r | |
2335 | onClick: handlerButtons\r | |
2336 | }\r | |
2337 | ]\r | |
2338 | }\r | |
2339 | ]\r | |
2340 | }\r | |
2341 | ]\r | |
2342 | }\r | |
2343 | ]\r | |
2344 | },\r | |
2345 | {\r | |
2346 | id: 'GrammTab',\r | |
2347 | label: 'Grammar',\r | |
2348 | accessKey: 'G',\r | |
2349 | elements: [\r | |
2350 | {\r | |
2351 | type: 'html',\r | |
2352 | id: 'banner',\r | |
2353 | label: 'banner',\r | |
2354 | style: '', //TODO\r | |
2355 | html: '<div></div>'\r | |
2356 | },\r | |
2357 | {\r | |
2358 | type: 'html',\r | |
2359 | id: 'Content',\r | |
2360 | label: 'GrammarContent',\r | |
2361 | html: '',\r | |
2362 | setup: function() {\r | |
2363 | var tabId = NS.iframeNumber + '_' + NS.dialog._.currentTabId;\r | |
2364 | var iframe = document.getElementById(tabId);\r | |
2365 | NS.targetFromFrame[tabId] = iframe.contentWindow;\r | |
2366 | }\r | |
2367 | },\r | |
2368 | {\r | |
2369 | type: 'vbox',\r | |
2370 | id: 'bottomGroup',\r | |
2371 | style: 'width:560px; margin: 0 auto;',\r | |
2372 | children: [\r | |
2373 | {\r | |
2374 | type: 'hbox',\r | |
2375 | id: 'leftCol',\r | |
2376 | widths: ['66%', '34%'],\r | |
2377 | children: [\r | |
2378 | {\r | |
2379 | type: 'vbox',\r | |
2380 | children: [\r | |
2381 | {\r | |
2382 | type: 'text',\r | |
2383 | id: 'text',\r | |
2384 | label: "Change to:",\r | |
2385 | labelLayout: 'horizontal',\r | |
2386 | labelStyle: 'font: 12px/25px arial, sans-serif;',\r | |
2387 | inputStyle: 'float: right; width: 200px;',\r | |
2388 | 'default': '',\r | |
2389 | onShow: function() {\r | |
2390 | NS.textNode['GrammTab'] = this;\r | |
2391 | },\r | |
2392 | onHide: function() {\r | |
2393 | this.reset();\r | |
2394 | }\r | |
2395 | },\r | |
2396 | {\r | |
2397 | type: 'html',\r | |
2398 | id: 'html_text',\r | |
2399 | html: "<div style='min-height: 17px; line-height: 17px; padding: 5px; text-align: left;background: #F1F1F1;color: #595959; white-space: normal!important;'></div>",\r | |
2400 | onShow: function(e) {\r | |
2401 | NS.textNodeInfo['GrammTab'] = this;\r | |
2402 | }\r | |
2403 | },\r | |
2404 | {\r | |
2405 | type: 'html',\r | |
2406 | id: 'radio',\r | |
2407 | html: "",\r | |
2408 | onShow: function() {\r | |
2409 | NS.grammerSuggest = this;\r | |
2410 | }\r | |
2411 | }\r | |
2412 | ]\r | |
2413 | },\r | |
2414 | {\r | |
2415 | type: 'vbox',\r | |
2416 | children: [\r | |
2417 | {\r | |
2418 | type: 'button',\r | |
2419 | id: 'ChangeTo_button',\r | |
2420 | label: 'Change to',\r | |
2421 | title: 'Change to',\r | |
2422 | style: 'width: 133px; float: right;',\r | |
2423 | onLoad: function() {\r | |
2424 | this.getElement().setAttribute("title-cmd", 'ChangeTo');\r | |
2425 | },\r | |
2426 | onClick: handlerButtons\r | |
2427 | },\r | |
2428 | {\r | |
2429 | type: 'button',\r | |
2430 | id: 'IgnoreWord',\r | |
2431 | label: 'Ignore word',\r | |
2432 | title: 'Ignore word',\r | |
2433 | style: 'width: 133px; float: right;',\r | |
2434 | onLoad: function() {\r | |
2435 | this.getElement().setAttribute("title-cmd", this.id);\r | |
2436 | },\r | |
2437 | onClick: handlerButtons\r | |
2438 | },\r | |
2439 | {\r | |
2440 | type: 'button',\r | |
2441 | id: 'IgnoreAllWords',\r | |
2442 | label: 'Ignore Problem',\r | |
2443 | title: 'Ignore Problem',\r | |
2444 | style: 'width: 133px; float: right;',\r | |
2445 | onLoad: function() {\r | |
2446 | this.getElement().setAttribute("title-cmd", this.id);\r | |
2447 | },\r | |
2448 | onClick: handlerButtons\r | |
2449 | },\r | |
2450 | {\r | |
2451 | type: 'button',\r | |
2452 | id: 'FinishChecking_button',\r | |
2453 | label: NS.LocalizationButton['FinishChecking_button'].text,\r | |
2454 | title: 'Finish Checking',\r | |
2455 | style: 'width: 133px; float: right; margin-top: 9px;',\r | |
2456 | onLoad: function() {\r | |
2457 | this.getElement().setAttribute("title-cmd", 'FinishChecking');\r | |
2458 | },\r | |
2459 | onClick: handlerButtons\r | |
2460 | }\r | |
2461 | ]\r | |
2462 | }\r | |
2463 | ]\r | |
2464 | }\r | |
2465 | ]\r | |
2466 | },\r | |
2467 | {\r | |
2468 | type: 'hbox',\r | |
2469 | id: 'BlockFinishChecking',\r | |
2470 | style: 'width:560px; margin: 0 auto;',\r | |
2471 | widths: ['70%', '30%'],\r | |
2472 | onShow: function() {\r | |
2473 | this.getElement().setStyles({\r | |
2474 | display: 'block',\r | |
2475 | position: 'absolute',\r | |
2476 | left: '-9999px'\r | |
2477 | });\r | |
2478 | },\r | |
2479 | onHide: showCurrentTabs,\r | |
2480 | children: [\r | |
2481 | {\r | |
2482 | type: 'hbox',\r | |
2483 | id: 'leftCol',\r | |
2484 | align: 'left',\r | |
2485 | width: '70%',\r | |
2486 | children: [\r | |
2487 | {\r | |
2488 | type: 'vbox',\r | |
2489 | id: 'rightCol1',\r | |
2490 | children: [\r | |
2491 | {\r | |
2492 | type: 'html',\r | |
2493 | id: 'logo',\r | |
2494 | html: '<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',\r | |
2495 | setup: function() {\r | |
2496 | this.getElement().$.src = NS.logotype;\r | |
2497 | this.getElement().getParent().setStyles({\r | |
2498 | "text-align": "center"\r | |
2499 | });\r | |
2500 | }\r | |
2501 | }\r | |
2502 | ]\r | |
2503 | }\r | |
2504 | ]\r | |
2505 | },\r | |
2506 | {\r | |
2507 | type: 'hbox',\r | |
2508 | id: 'rightCol',\r | |
2509 | align: 'right',\r | |
2510 | width: '30%',\r | |
2511 | children: [\r | |
2512 | {\r | |
2513 | type: 'vbox',\r | |
2514 | id: 'rightCol_col__left',\r | |
2515 | children: [\r | |
2516 | {\r | |
2517 | type: 'button',\r | |
2518 | id: 'FinishChecking_button_block',\r | |
2519 | label: NS.LocalizationButton['FinishChecking_button_block'].text,\r | |
2520 | title: 'Finish Checking',\r | |
2521 | style: 'width: 100%;',\r | |
2522 | onLoad: function() {\r | |
2523 | this.getElement().setAttribute("title-cmd", 'FinishChecking');\r | |
2524 | },\r | |
2525 | onClick: handlerButtons\r | |
2526 | }\r | |
2527 | ]\r | |
2528 | }\r | |
2529 | ]\r | |
2530 | }\r | |
2531 | ]\r | |
2532 | }\r | |
2533 | ]\r | |
2534 | },\r | |
2535 | {\r | |
2536 | id: 'Thesaurus',\r | |
2537 | label: 'Thesaurus',\r | |
2538 | accessKey: 'T',\r | |
2539 | elements: [\r | |
2540 | {\r | |
2541 | type: 'html',\r | |
2542 | id: 'banner',\r | |
2543 | label: 'banner',\r | |
2544 | style: '', //TODO\r | |
2545 | html: '<div></div>'\r | |
2546 | },\r | |
2547 | {\r | |
2548 | type: 'html',\r | |
2549 | id: 'Content',\r | |
2550 | label: 'spellContent',\r | |
2551 | html: '',\r | |
2552 | setup: function() {\r | |
2553 | var tabId = NS.iframeNumber + '_' + NS.dialog._.currentTabId;\r | |
2554 | var iframe = document.getElementById(tabId);\r | |
2555 | NS.targetFromFrame[tabId] = iframe.contentWindow;\r | |
2556 | }\r | |
2557 | },\r | |
2558 | {\r | |
2559 | type: 'vbox',\r | |
2560 | id: 'bottomGroup',\r | |
2561 | style: 'width:560px; margin: -10px auto; overflow: hidden;',\r | |
2562 | children: [\r | |
2563 | {\r | |
2564 | type: 'hbox',\r | |
2565 | widths: ['75%', '25%'],\r | |
2566 | children: [\r | |
2567 | {\r | |
2568 | type: 'vbox',\r | |
2569 | children: [\r | |
2570 | {\r | |
2571 | type: 'hbox',\r | |
2572 | widths: ['65%', '35%'],\r | |
2573 | children: [\r | |
2574 | {\r | |
2575 | type: 'text',\r | |
2576 | id: 'ChangeTo_label',\r | |
2577 | label: NS.LocalizationLabel['ChangeTo_label'].text + ':',\r | |
2578 | labelLayout: 'horizontal',\r | |
2579 | inputStyle: 'width: 160px;',\r | |
2580 | labelStyle: 'font: 12px/25px arial, sans-serif;',\r | |
2581 | 'default': '',\r | |
2582 | onShow: function(e) {\r | |
2583 | NS.textNode['Thesaurus'] = this;\r | |
2584 | NS.LocalizationLabel['ChangeTo_label'].instance = this;\r | |
2585 | },\r | |
2586 | onHide: function() {\r | |
2587 | this.reset();\r | |
2588 | }\r | |
2589 | },\r | |
2590 | {\r | |
2591 | type: 'button',\r | |
2592 | id: 'ChangeTo_button',\r | |
2593 | label: NS.LocalizationButton['ChangeTo_button'].text,\r | |
2594 | title: 'Change to',\r | |
2595 | style: 'width: 121px; margin-top: 1px;',\r | |
2596 | onLoad: function() {\r | |
2597 | this.getElement().setAttribute("title-cmd", 'ChangeTo');\r | |
2598 | NS.LocalizationButton['ChangeTo_button'].instance = this;\r | |
2599 | },\r | |
2600 | onClick: handlerButtons\r | |
2601 | }\r | |
2602 | ]\r | |
2603 | },\r | |
2604 | {\r | |
2605 | type: 'hbox',\r | |
2606 | children: [\r | |
2607 | {\r | |
2608 | type: 'select',\r | |
2609 | id: 'Categories',\r | |
2610 | label: NS.LocalizationLabel['Categories'].text + ':',\r | |
2611 | labelStyle: 'font: 12px/25px arial, sans-serif;',\r | |
2612 | size: '5',\r | |
2613 | inputStyle: 'width: 180px; height: auto;',\r | |
2614 | items: [],\r | |
2615 | onShow: function() {\r | |
2616 | NS.selectNode['Categories'] = this;\r | |
2617 | NS.LocalizationLabel['Categories'].instance = this;\r | |
2618 | },\r | |
2619 | onChange: function() {\r | |
2620 | NS.buildOptionSynonyms(this.getValue());\r | |
2621 | }\r | |
2622 | },\r | |
2623 | {\r | |
2624 | type: 'select',\r | |
2625 | id: 'Synonyms',\r | |
2626 | label: NS.LocalizationLabel['Synonyms'].text + ':',\r | |
2627 | labelStyle: 'font: 12px/25px arial, sans-serif;',\r | |
2628 | size: '5',\r | |
2629 | inputStyle: 'width: 180px; height: auto;',\r | |
2630 | items: [],\r | |
2631 | onShow: function() {\r | |
2632 | NS.selectNode['Synonyms'] = this;\r | |
2633 | NS.textNode['Thesaurus'].setValue(this.getValue());\r | |
2634 | NS.LocalizationLabel['Synonyms'].instance = this;\r | |
2635 | },\r | |
2636 | onChange: function(e) {\r | |
2637 | NS.textNode['Thesaurus'].setValue(this.getValue());\r | |
2638 | }\r | |
2639 | }\r | |
2640 | ]\r | |
2641 | }\r | |
2642 | ]\r | |
2643 | },\r | |
2644 | {\r | |
2645 | type: 'vbox',\r | |
2646 | width: '120px',\r | |
2647 | style: "margin-top:46px;",\r | |
2648 | children: [\r | |
2649 | {\r | |
2650 | type: 'html',\r | |
2651 | id: 'logotype',\r | |
2652 | label: 'WebSpellChecker.net',\r | |
2653 | html: '<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',\r | |
2654 | setup: function() {\r | |
2655 | this.getElement().$.src = NS.logotype;\r | |
2656 | this.getElement().getParent().setStyles({\r | |
2657 | "text-align": "center"\r | |
2658 | });\r | |
2659 | }\r | |
2660 | },\r | |
2661 | {\r | |
2662 | type: 'button',\r | |
2663 | id: 'FinishChecking_button',\r | |
2664 | label: NS.LocalizationButton['FinishChecking_button'].text,\r | |
2665 | title: 'Finish Checking',\r | |
2666 | style: 'width: 100%; float: right; margin-top: 9px;',\r | |
2667 | onLoad: function() {\r | |
2668 | this.getElement().setAttribute("title-cmd", 'FinishChecking');\r | |
2669 | },\r | |
2670 | onClick: handlerButtons\r | |
2671 | }\r | |
2672 | ]\r | |
2673 | }\r | |
2674 | ]\r | |
2675 | }\r | |
2676 | ]\r | |
2677 | },\r | |
2678 | {\r | |
2679 | type: 'hbox',\r | |
2680 | id: 'BlockFinishChecking',\r | |
2681 | style: 'width:560px; margin: 0 auto;',\r | |
2682 | widths: ['70%', '30%'],\r | |
2683 | onShow: function() {\r | |
2684 | this.getElement().setStyles({\r | |
2685 | display: 'block',\r | |
2686 | position: 'absolute',\r | |
2687 | left: '-9999px'\r | |
2688 | });\r | |
2689 | },\r | |
2690 | children: [\r | |
2691 | {\r | |
2692 | type: 'hbox',\r | |
2693 | id: 'leftCol',\r | |
2694 | align: 'left',\r | |
2695 | width: '70%',\r | |
2696 | children: [\r | |
2697 | {\r | |
2698 | type: 'vbox',\r | |
2699 | id: 'rightCol1',\r | |
2700 | children: [\r | |
2701 | {\r | |
2702 | type: 'html',\r | |
2703 | id: 'logo',\r | |
2704 | html: '<img width="99" height="68" border="0" src="" title="WebSpellChecker.net" alt="WebSpellChecker.net" style="display: inline-block;">',\r | |
2705 | setup: function() {\r | |
2706 | this.getElement().$.src = NS.logotype;\r | |
2707 | this.getElement().getParent().setStyles({\r | |
2708 | "text-align": "center"\r | |
2709 | });\r | |
2710 | }\r | |
2711 | }\r | |
2712 | ]\r | |
2713 | }\r | |
2714 | ]\r | |
2715 | },\r | |
2716 | {\r | |
2717 | type: 'hbox',\r | |
2718 | id: 'rightCol',\r | |
2719 | align: 'right',\r | |
2720 | width: '30%',\r | |
2721 | children: [\r | |
2722 | {\r | |
2723 | type: 'vbox',\r | |
2724 | id: 'rightCol_col__left',\r | |
2725 | children: [\r | |
2726 | {\r | |
2727 | type: 'button',\r | |
2728 | id: 'FinishChecking_button_block',\r | |
2729 | label: NS.LocalizationButton['FinishChecking_button_block'].text,\r | |
2730 | title: 'Finish Checking',\r | |
2731 | style: 'width: 100%;',\r | |
2732 | onLoad: function() {\r | |
2733 | this.getElement().setAttribute("title-cmd", 'FinishChecking');\r | |
2734 | },\r | |
2735 | onClick: handlerButtons\r | |
2736 | }\r | |
2737 | ]\r | |
2738 | }\r | |
2739 | ]\r | |
2740 | }\r | |
2741 | ]\r | |
2742 | }\r | |
2743 | ]\r | |
2744 | }\r | |
2745 | ]\r | |
2746 | };\r | |
2747 | });\r | |
2748 | \r | |
2749 | var activeElement = null;\r | |
2750 | \r | |
2751 | // Options dialog\r | |
2752 | CKEDITOR.dialog.add('options', function(editor) {\r | |
2753 | var dialog = null;\r | |
2754 | var linkOnCheckbox = {};\r | |
2755 | var checkboxState = {};\r | |
2756 | var ospString = null;\r | |
2757 | var OptionsTextError = null;\r | |
2758 | var cmd = null;\r | |
2759 | \r | |
2760 | var set_osp = [];\r | |
2761 | var dictionaryState = {\r | |
2762 | 'udn': appTools.cookie.get('udn'),\r | |
2763 | 'osp': appTools.cookie.get('osp')\r | |
2764 | };\r | |
2765 | \r | |
2766 | var setHandlerOptions = function() {\r | |
2767 | var osp = appTools.cookie.get('osp'),\r | |
2768 | strToArr = osp.split("");\r | |
2769 | \r | |
2770 | checkboxState['IgnoreAllCapsWords'] = strToArr[0];\r | |
2771 | checkboxState['IgnoreWordsNumbers'] = strToArr[1];\r | |
2772 | checkboxState['IgnoreMixedCaseWords'] = strToArr[2];\r | |
2773 | checkboxState['IgnoreDomainNames'] = strToArr[3];\r | |
2774 | };\r | |
2775 | \r | |
2776 | var sendDicOptions = function(event) {\r | |
2777 | event = event || window.event;\r | |
2778 | cmd = this.getElement().getAttribute("title-cmd");\r | |
2779 | var osp = [];\r | |
2780 | \r | |
2781 | osp[0] = checkboxState['IgnoreAllCapsWords'];\r | |
2782 | osp[1] = checkboxState['IgnoreWordsNumbers'];\r | |
2783 | osp[2] = checkboxState['IgnoreMixedCaseWords'];\r | |
2784 | osp[3] = checkboxState['IgnoreDomainNames'];\r | |
2785 | \r | |
2786 | osp = osp.toString().replace(/,/g, "");\r | |
2787 | \r | |
2788 | \r | |
2789 | appTools.cookie.set('osp', osp);\r | |
2790 | appTools.cookie.set('udnCmd', cmd ? cmd : 'ignore');\r | |
2791 | if (cmd == "delete") {\r | |
2792 | \r | |
2793 | appTools.postMessage.send({\r | |
2794 | 'id': 'options_dic_send'\r | |
2795 | });\r | |
2796 | } else {\r | |
2797 | var udn = '';\r | |
2798 | if(nameNode.getValue() !== ''){\r | |
2799 | udn = nameNode.getValue();\r | |
2800 | }\r | |
2801 | appTools.cookie.set('udn', udn);\r | |
2802 | appTools.postMessage.send({\r | |
2803 | 'id': 'options_dic_send'\r | |
2804 | });\r | |
2805 | }\r | |
2806 | \r | |
2807 | };\r | |
2808 | \r | |
2809 | \r | |
2810 | var sendAllOptions = function() {\r | |
2811 | var osp = [];\r | |
2812 | \r | |
2813 | osp[0] = checkboxState['IgnoreAllCapsWords'];\r | |
2814 | osp[1] = checkboxState['IgnoreWordsNumbers'];\r | |
2815 | osp[2] = checkboxState['IgnoreMixedCaseWords'];\r | |
2816 | osp[3] = checkboxState['IgnoreDomainNames'];\r | |
2817 | \r | |
2818 | osp = osp.toString().replace(/,/g, "");\r | |
2819 | \r | |
2820 | appTools.cookie.set('osp', osp);\r | |
2821 | \r | |
2822 | appTools.postMessage.send({\r | |
2823 | 'id': 'options_checkbox_send'\r | |
2824 | });\r | |
2825 | \r | |
2826 | \r | |
2827 | };\r | |
2828 | \r | |
2829 | var cameOptions = function() {\r | |
2830 | OptionsTextError.getElement().setHtml(NS.LocalizationComing['error']);\r | |
2831 | OptionsTextError.getElement().show();\r | |
2832 | };\r | |
2833 | \r | |
2834 | return {\r | |
2835 | title: NS.LocalizationComing['Options'],\r | |
2836 | minWidth: 430,\r | |
2837 | minHeight: 130,\r | |
2838 | resizable: CKEDITOR.DIALOG_RESIZE_NONE,\r | |
2839 | contents: [\r | |
2840 | {\r | |
2841 | id: 'OptionsTab',\r | |
2842 | label: 'Options',\r | |
2843 | accessKey: 'O',\r | |
2844 | elements: [\r | |
2845 | {\r | |
2846 | type: 'hbox',\r | |
2847 | id: 'options_error',\r | |
2848 | children: [\r | |
2849 | {\r | |
2850 | type: 'html',\r | |
2851 | style: "display: block;text-align: center;white-space: normal!important; font-size: 12px;color:red",\r | |
2852 | html: '<div></div>',\r | |
2853 | onShow: function() {\r | |
2854 | OptionsTextError = this;\r | |
2855 | }\r | |
2856 | }\r | |
2857 | ]\r | |
2858 | },\r | |
2859 | {\r | |
2860 | type: 'vbox',\r | |
2861 | id: 'Options_content',\r | |
2862 | children: [\r | |
2863 | {\r | |
2864 | type: 'hbox',\r | |
2865 | id: 'Options_manager',\r | |
2866 | widths: ['52%', '48%'],\r | |
2867 | children: [\r | |
2868 | {\r | |
2869 | type: 'fieldset',\r | |
2870 | label: 'Spell Checking Options',\r | |
2871 | style: 'border: none;margin-top: 13px;padding: 10px 0 10px 10px',\r | |
2872 | onShow: function() {\r | |
2873 | this.getInputElement().$.children[0].innerHTML = NS.LocalizationComing['SpellCheckingOptions'];\r | |
2874 | },\r | |
2875 | children: [\r | |
2876 | {\r | |
2877 | type: 'vbox',\r | |
2878 | id: 'Options_checkbox',\r | |
2879 | children: [\r | |
2880 | {\r | |
2881 | type: 'checkbox',\r | |
2882 | id: 'IgnoreAllCapsWords',\r | |
2883 | label: 'Ignore All-Caps Words',\r | |
2884 | labelStyle: 'margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;',\r | |
2885 | style: "float:left; min-height: 16px;",\r | |
2886 | 'default': '',\r | |
2887 | onClick: function() {\r | |
2888 | checkboxState[this.id] = (!this.getValue()) ? 0 : 1;\r | |
2889 | }\r | |
2890 | },\r | |
2891 | {\r | |
2892 | type: 'checkbox',\r | |
2893 | id: 'IgnoreWordsNumbers',\r | |
2894 | label: 'Ignore Words with Numbers',\r | |
2895 | labelStyle: 'margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;',\r | |
2896 | style: "float:left; min-height: 16px;",\r | |
2897 | 'default': '',\r | |
2898 | onClick: function() {\r | |
2899 | checkboxState[this.id] = (!this.getValue()) ? 0 : 1;\r | |
2900 | }\r | |
2901 | },\r | |
2902 | {\r | |
2903 | type: 'checkbox',\r | |
2904 | id: 'IgnoreMixedCaseWords',\r | |
2905 | label: 'Ignore Mixed-Case Words',\r | |
2906 | labelStyle: 'margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;',\r | |
2907 | style: "float:left; min-height: 16px;",\r | |
2908 | 'default': '',\r | |
2909 | onClick: function() {\r | |
2910 | checkboxState[this.id] = (!this.getValue()) ? 0 : 1;\r | |
2911 | }\r | |
2912 | },\r | |
2913 | {\r | |
2914 | type: 'checkbox',\r | |
2915 | id: 'IgnoreDomainNames',\r | |
2916 | label: 'Ignore Domain Names',\r | |
2917 | labelStyle: 'margin-left: 5px; font: 12px/16px arial, sans-serif;display: inline-block;white-space: normal;',\r | |
2918 | style: "float:left; min-height: 16px;",\r | |
2919 | 'default': '',\r | |
2920 | onClick: function() {\r | |
2921 | checkboxState[this.id] = (!this.getValue()) ? 0 : 1;\r | |
2922 | }\r | |
2923 | }\r | |
2924 | ]\r | |
2925 | }\r | |
2926 | ]\r | |
2927 | },\r | |
2928 | {\r | |
2929 | type: 'vbox',\r | |
2930 | id: 'Options_DictionaryName',\r | |
2931 | children: [\r | |
2932 | {\r | |
2933 | type: 'text',\r | |
2934 | id: 'DictionaryName',\r | |
2935 | style: 'margin-bottom: 10px',\r | |
2936 | label: 'Dictionary Name:',\r | |
2937 | labelLayout: 'vertical',\r | |
2938 | labelStyle: 'font: 12px/25px arial, sans-serif;',\r | |
2939 | 'default': '',\r | |
2940 | onLoad: function() {\r | |
2941 | nameNode = this;\r | |
2942 | var udn = NS.userDictionaryName ? NS.userDictionaryName : appTools.cookie.get('udn') && undefined ? ' ' : this.getValue();\r | |
2943 | this.setValue(udn);\r | |
2944 | },\r | |
2945 | onShow: function() {\r | |
2946 | nameNode = this;\r | |
2947 | var udn = !appTools.cookie.get('udn') ? this.getValue() : appTools.cookie.get('udn');\r | |
2948 | this.setValue(udn);\r | |
2949 | this.setLabel(NS.LocalizationComing['DictionaryName']);\r | |
2950 | },\r | |
2951 | onHide: function() {\r | |
2952 | this.reset();\r | |
2953 | }\r | |
2954 | },\r | |
2955 | {\r | |
2956 | type: 'hbox',\r | |
2957 | id: 'Options_buttons',\r | |
2958 | children: [\r | |
2959 | {\r | |
2960 | type: 'vbox',\r | |
2961 | id: 'Options_leftCol_col',\r | |
2962 | widths: ['50%', '50%'],\r | |
2963 | children: [\r | |
2964 | {\r | |
2965 | type: 'button',\r | |
2966 | id: 'create',\r | |
2967 | label: 'Create',\r | |
2968 | title: 'Create',\r | |
2969 | style: 'width: 100%;',\r | |
2970 | onLoad: function() {\r | |
2971 | this.getElement().setAttribute("title-cmd", this.id);\r | |
2972 | },\r | |
2973 | onShow: function() {\r | |
2974 | var el = this.getElement().getFirst() || this.getElement();\r | |
2975 | \r | |
2976 | el.setText(NS.LocalizationComing['Create']);\r | |
2977 | },\r | |
2978 | onClick: sendDicOptions\r | |
2979 | },\r | |
2980 | {\r | |
2981 | type: 'button',\r | |
2982 | id: 'restore',\r | |
2983 | label: 'Restore',\r | |
2984 | title: 'Restore',\r | |
2985 | style: 'width: 100%;',\r | |
2986 | onLoad: function() {\r | |
2987 | this.getElement().setAttribute("title-cmd", this.id);\r | |
2988 | },\r | |
2989 | onShow: function() {\r | |
2990 | var el = this.getElement().getFirst() || this.getElement();\r | |
2991 | \r | |
2992 | el.setText(NS.LocalizationComing['Restore']);\r | |
2993 | },\r | |
2994 | onClick: sendDicOptions\r | |
2995 | }\r | |
2996 | ]\r | |
2997 | },\r | |
2998 | {\r | |
2999 | type: 'vbox',\r | |
3000 | id: 'Options_rightCol_col',\r | |
3001 | widths: ['50%', '50%'],\r | |
3002 | children: [\r | |
3003 | {\r | |
3004 | type: 'button',\r | |
3005 | id: 'rename',\r | |
3006 | label: 'Rename',\r | |
3007 | title: 'Rename',\r | |
3008 | style: 'width: 100%;',\r | |
3009 | onLoad: function() {\r | |
3010 | this.getElement().setAttribute("title-cmd", this.id);\r | |
3011 | },\r | |
3012 | onShow: function() {\r | |
3013 | var el = this.getElement().getFirst() || this.getElement();\r | |
3014 | \r | |
3015 | el.setText(NS.LocalizationComing['Rename']);\r | |
3016 | },\r | |
3017 | onClick: sendDicOptions\r | |
3018 | },\r | |
3019 | {\r | |
3020 | type: 'button',\r | |
3021 | id: 'delete',\r | |
3022 | label: 'Remove',\r | |
3023 | title: 'Remove',\r | |
3024 | style: 'width: 100%;',\r | |
3025 | onLoad: function() {\r | |
3026 | this.getElement().setAttribute("title-cmd", this.id);\r | |
3027 | },\r | |
3028 | onShow: function() {\r | |
3029 | var el = this.getElement().getFirst() || this.getElement();\r | |
3030 | \r | |
3031 | el.setText(NS.LocalizationComing['Remove']);\r | |
3032 | },\r | |
3033 | onClick: sendDicOptions\r | |
3034 | }\r | |
3035 | ]\r | |
3036 | }\r | |
3037 | ]\r | |
3038 | }\r | |
3039 | ]\r | |
3040 | }\r | |
3041 | ]\r | |
3042 | },\r | |
3043 | {\r | |
3044 | type: 'hbox',\r | |
3045 | id: 'Options_text',\r | |
3046 | children: [\r | |
3047 | {\r | |
3048 | type: 'html',\r | |
3049 | style: "text-align: justify;margin-top: 15px;white-space: normal!important; font-size: 12px;color:#777;",\r | |
3050 | html: "<div>" + NS.LocalizationComing['OptionsTextIntro'] + "</div>",\r | |
3051 | onShow: function() {\r | |
3052 | this.getElement().setText(NS.LocalizationComing['OptionsTextIntro']);\r | |
3053 | }\r | |
3054 | }\r | |
3055 | ]\r | |
3056 | }\r | |
3057 | ]\r | |
3058 | }\r | |
3059 | ]\r | |
3060 | }\r | |
3061 | ],\r | |
3062 | buttons: [CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton],\r | |
3063 | onOk: function() {\r | |
3064 | sendAllOptions();\r | |
3065 | OptionsTextError.getElement().hide();\r | |
3066 | OptionsTextError.getElement().setHtml(' ');\r | |
3067 | },\r | |
3068 | onLoad: function() {\r | |
3069 | dialog = this;\r | |
3070 | // appTools.postMessage.init(cameOptions);\r | |
3071 | \r | |
3072 | linkOnCheckbox['IgnoreAllCapsWords'] = dialog.getContentElement('OptionsTab', 'IgnoreAllCapsWords');\r | |
3073 | linkOnCheckbox['IgnoreWordsNumbers'] = dialog.getContentElement('OptionsTab', 'IgnoreWordsNumbers');\r | |
3074 | linkOnCheckbox['IgnoreMixedCaseWords'] = dialog.getContentElement('OptionsTab', 'IgnoreMixedCaseWords');\r | |
3075 | linkOnCheckbox['IgnoreDomainNames'] = dialog.getContentElement('OptionsTab', 'IgnoreDomainNames');\r | |
3076 | \r | |
3077 | },\r | |
3078 | onShow: function() {\r | |
3079 | appTools.postMessage.init(cameOptions);\r | |
3080 | setHandlerOptions();\r | |
3081 | \r | |
3082 | (!parseInt(checkboxState['IgnoreAllCapsWords'], 10)) ? linkOnCheckbox['IgnoreAllCapsWords'].setValue('', false) : linkOnCheckbox['IgnoreAllCapsWords'].setValue('checked', false);\r | |
3083 | (!parseInt(checkboxState['IgnoreWordsNumbers'], 10)) ? linkOnCheckbox['IgnoreWordsNumbers'].setValue('', false) : linkOnCheckbox['IgnoreWordsNumbers'].setValue('checked', false);\r | |
3084 | (!parseInt(checkboxState['IgnoreMixedCaseWords'], 10)) ? linkOnCheckbox['IgnoreMixedCaseWords'].setValue('', false) : linkOnCheckbox['IgnoreMixedCaseWords'].setValue('checked', false);\r | |
3085 | (!parseInt(checkboxState['IgnoreDomainNames'], 10)) ? linkOnCheckbox['IgnoreDomainNames'].setValue('', false) : linkOnCheckbox['IgnoreDomainNames'].setValue('checked', false);\r | |
3086 | \r | |
3087 | checkboxState['IgnoreAllCapsWords'] = (!linkOnCheckbox['IgnoreAllCapsWords'].getValue()) ? 0 : 1;\r | |
3088 | checkboxState['IgnoreWordsNumbers'] = (!linkOnCheckbox['IgnoreWordsNumbers'].getValue()) ? 0 : 1;\r | |
3089 | checkboxState['IgnoreMixedCaseWords'] = (!linkOnCheckbox['IgnoreMixedCaseWords'].getValue()) ? 0 : 1;\r | |
3090 | checkboxState['IgnoreDomainNames'] = (!linkOnCheckbox['IgnoreDomainNames'].getValue()) ? 0 : 1;\r | |
3091 | \r | |
3092 | linkOnCheckbox['IgnoreAllCapsWords'].getElement().$.lastChild.innerHTML = NS.LocalizationComing['IgnoreAllCapsWords'];\r | |
3093 | linkOnCheckbox['IgnoreWordsNumbers'].getElement().$.lastChild.innerHTML = NS.LocalizationComing['IgnoreWordsWithNumbers'];\r | |
3094 | linkOnCheckbox['IgnoreMixedCaseWords'].getElement().$.lastChild.innerHTML = NS.LocalizationComing['IgnoreMixedCaseWords'];\r | |
3095 | linkOnCheckbox['IgnoreDomainNames'].getElement().$.lastChild.innerHTML = NS.LocalizationComing['IgnoreDomainNames'];\r | |
3096 | },\r | |
3097 | onHide: function() {\r | |
3098 | appTools.postMessage.unbindHandler(cameOptions);\r | |
3099 | if(activeElement) {\r | |
3100 | try {\r | |
3101 | activeElement.focus();\r | |
3102 | } catch(e) {}\r | |
3103 | }\r | |
3104 | }\r | |
3105 | };\r | |
3106 | });\r | |
3107 | \r | |
3108 | // Expand the spell-check frame when dialog resized. (#6829)\r | |
3109 | CKEDITOR.dialog.on( 'resize', function( evt ) {\r | |
3110 | var data = evt.data,\r | |
3111 | dialog = data.dialog,\r | |
3112 | currentTabId = dialog._.currentTabId,\r | |
3113 | tabID = NS.iframeNumber + '_' + currentTabId,\r | |
3114 | iframe = CKEDITOR.document.getById(tabID);\r | |
3115 | \r | |
3116 | if ( dialog._.name == 'checkspell' ) {\r | |
3117 | if (NS.bnr) {\r | |
3118 | iframe && iframe.setSize( 'height', data.height - '310' );\r | |
3119 | } else {\r | |
3120 | iframe && iframe.setSize( 'height', data.height - '220' );\r | |
3121 | }\r | |
3122 | \r | |
3123 | // add flag that indicate whether dialog has been resized by user\r | |
3124 | if(dialog._.fromResizeEvent && !dialog._.resized) {\r | |
3125 | dialog._.resized = true;\r | |
3126 | }\r | |
3127 | dialog._.fromResizeEvent = true;\r | |
3128 | }\r | |
3129 | });\r | |
3130 | \r | |
3131 | CKEDITOR.on('dialogDefinition', function(dialogDefinitionEvent) {\r | |
3132 | \r | |
3133 | if(dialogDefinitionEvent.data.name === 'checkspell') {\r | |
3134 | var dialogDefinition = dialogDefinitionEvent.data.definition;\r | |
3135 | \r | |
3136 | NS.onLoadOverlay = new overlayBlock({\r | |
3137 | opacity: "1",\r | |
3138 | background: "#fff",\r | |
3139 | target: dialogDefinition.dialog.parts.tabs.getParent().$\r | |
3140 | });\r | |
3141 | \r | |
3142 | NS.onLoadOverlay.setEnable();\r | |
3143 | \r | |
3144 | dialogDefinition.dialog.on('cancel', function(cancelEvent) {\r | |
3145 | dialogDefinition.dialog.getParentEditor().config.wsc_onClose.call(this.document.getWindow().getFrame());\r | |
3146 | NS.div_overlay.setDisable();\r | |
3147 | NS.onLoadOverlay.setDisable();\r | |
3148 | return false;\r | |
3149 | }, this, null, -1);\r | |
3150 | }\r | |
3151 | });\r | |
3152 | })();\r |