]> git.immae.eu Git - perso/Immae/Projets/packagist/connexionswing-ckeditor-component.git/blame - sources/plugins/wsc/dialogs/wsc.js
Initial commit
[perso/Immae/Projets/packagist/connexionswing-ckeditor-component.git] / sources / plugins / wsc / dialogs / wsc.js
CommitLineData
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
1304function __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
1361CKEDITOR.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
2749var activeElement = null;\r
2750\r
2751// Options dialog\r
2752CKEDITOR.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
3109CKEDITOR.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
3131CKEDITOR.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