/* Copyright (c) 2003-2016, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.md or http://ckeditor.com/license */ (function() { window.CKEDITOR && window.CKEDITOR.dom || (window.CKEDITOR || (window.CKEDITOR = function() { var a = /(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i, f = { timestamp: "GB8C", version: "4.6.1 (Standard)", revision: "580bcaf", rnd: Math.floor(900 * Math.random()) + 100, _: { pending: [], basePathSrcPattern: a }, status: "unloaded", basePath: function() { var b = window.CKEDITOR_BASEPATH || ""; if (!b) for (var c = document.getElementsByTagName("script"), f = 0; f < c.length; f++) { var d = c[f].src.match(a); if (d) { b = d[1]; break } } - 1 == b.indexOf(":/") && "//" != b.slice(0, 2) && (b = 0 === b.indexOf("/") ? location.href.match(/^.*?:\/\/[^\/]*/)[0] + b : location.href.match(/^[^\?]*\/(?:)/)[0] + b); if (!b) throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.'; return b }(), getUrl: function(a) { -1 == a.indexOf(":/") && 0 !== a.indexOf("/") && (a = this.basePath + a); this.timestamp && "/" != a.charAt(a.length - 1) && !/[&?]t=/.test(a) && (a += (0 <= a.indexOf("?") ? "\x26" : "?") + "t\x3d" + this.timestamp); return a }, domReady: function() { function a() { try { document.addEventListener ? (document.removeEventListener("DOMContentLoaded", a, !1), b()) : document.attachEvent && "complete" === document.readyState && (document.detachEvent("onreadystatechange", a), b()) } catch (d) {} } function b() { for (var a; a = c.shift();) a() } var c = []; return function(d) { function b() { try { document.documentElement.doScroll("left") } catch (g) { setTimeout(b, 1); return } a() } c.push(d); "complete" === document.readyState && setTimeout(a, 1); if (1 == c.length) if (document.addEventListener) document.addEventListener("DOMContentLoaded", a, !1), window.addEventListener("load", a, !1); else if (document.attachEvent) { document.attachEvent("onreadystatechange", a); window.attachEvent("onload", a); d = !1; try { d = !window.frameElement } catch (k) {} document.documentElement.doScroll && d && b() } } }() }, b = window.CKEDITOR_GETURL; if (b) { var c = f.getUrl; f.getUrl = function(a) { return b.call(f, a) || c.call(f, a) } } return f }()), CKEDITOR.event || (CKEDITOR.event = function() {}, CKEDITOR.event.implementOn = function(a) { var f = CKEDITOR.event.prototype, b; for (b in f) null == a[b] && (a[b] = f[b]) }, CKEDITOR.event.prototype = function() { function a(a) { var e = f(this); return e[a] || (e[a] = new b(a)) } var f = function(a) { a = a.getPrivate && a.getPrivate() || a._ || (a._ = {}); return a.events || (a.events = {}) }, b = function(a) { this.name = a; this.listeners = [] }; b.prototype = { getListenerIndex: function(a) { for (var b = 0, f = this.listeners; b < f.length; b++) if (f[b].fn == a) return b; return -1 } }; return { define: function(b, e) { var f = a.call(this, b); CKEDITOR.tools.extend(f, e, !0) }, on: function(b, e, f, l, d) { function h(a, g, d, h) { a = { name: b, sender: this, editor: a, data: g, listenerData: l, stop: d, cancel: h, removeListener: k }; return !1 === e.call(f, a) ? !1 : a.data } function k() { n.removeListener(b, e) } var g = a.call(this, b); if (0 > g.getListenerIndex(e)) { g = g.listeners; f || (f = this); isNaN(d) && (d = 10); var n = this; h.fn = e; h.priority = d; for (var w = g.length - 1; 0 <= w; w--) if (g[w].priority <= d) return g.splice(w + 1, 0, h), { removeListener: k }; g.unshift(h) } return { removeListener: k } }, once: function() { var a = Array.prototype.slice.call(arguments), b = a[1]; a[1] = function(a) { a.removeListener(); return b.apply(this, arguments) }; return this.on.apply(this, a) }, capture: function() { CKEDITOR.event.useCapture = 1; var a = this.on.apply(this, arguments); CKEDITOR.event.useCapture = 0; return a }, fire: function() { var a = 0, b = function() { a = 1 }, m = 0, l = function() { m = 1 }; return function(d, h, k) { var g = f(this)[d]; d = a; var n = m; a = m = 0; if (g) { var w = g.listeners; if (w.length) for (var w = w.slice(0), q, v = 0; v < w.length; v++) { if (g.errorProof) try { q = w[v].call(this, k, h, b, l) } catch (u) {} else q = w[v].call(this, k, h, b, l); !1 === q ? m = 1 : "undefined" != typeof q && (h = q); if (a || m) break } } h = m ? !1 : "undefined" == typeof h ? !0 : h; a = d; m = n; return h } }(), fireOnce: function(a, b, m) { b = this.fire(a, b, m); delete f(this)[a]; return b }, removeListener: function(a, b) { var m = f(this)[a]; if (m) { var l = m.getListenerIndex(b); 0 <= l && m.listeners.splice(l, 1) } }, removeAllListeners: function() { var a = f(this), b; for (b in a) delete a[b] }, hasListeners: function(a) { return (a = f(this)[a]) && 0 < a.listeners.length } } }()), CKEDITOR.editor || (CKEDITOR.editor = function() { CKEDITOR._.pending.push([this, arguments]); CKEDITOR.event.call(this) }, CKEDITOR.editor.prototype.fire = function(a, f) { a in { instanceReady: 1, loaded: 1 } && (this[a] = !0); return CKEDITOR.event.prototype.fire.call(this, a, f, this) }, CKEDITOR.editor.prototype.fireOnce = function(a, f) { a in { instanceReady: 1, loaded: 1 } && (this[a] = !0); return CKEDITOR.event.prototype.fireOnce.call(this, a, f, this) }, CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)), CKEDITOR.env || (CKEDITOR.env = function() { var a = navigator.userAgent.toLowerCase(), f = a.match(/edge[ \/](\d+.?\d*)/), b = -1 < a.indexOf("trident/"), b = !(!f && !b), b = { ie: b, edge: !!f, webkit: !b && -1 < a.indexOf(" applewebkit/"), air: -1 < a.indexOf(" adobeair/"), mac: -1 < a.indexOf("macintosh"), quirks: "BackCompat" == document.compatMode && (!document.documentMode || 10 > document.documentMode), mobile: -1 < a.indexOf("mobile"), iOS: /(ipad|iphone|ipod)/.test(a), isCustomDomain: function() { if (!this.ie) return !1; var a = document.domain, b = window.location.hostname; return a != b && a != "[" + b + "]" }, secure: "https:" == location.protocol }; b.gecko = "Gecko" == navigator.product && !b.webkit && !b.ie; b.webkit && (-1 < a.indexOf("chrome") ? b.chrome = !0 : b.safari = !0); var c = 0; b.ie && (c = f ? parseFloat(f[1]) : b.quirks || !document.documentMode ? parseFloat(a.match(/msie (\d+)/)[1]) : document.documentMode, b.ie9Compat = 9 == c, b.ie8Compat = 8 == c, b.ie7Compat = 7 == c, b.ie6Compat = 7 > c || b.quirks); b.gecko && (f = a.match(/rv:([\d\.]+)/)) && (f = f[1].split("."), c = 1E4 * f[0] + 100 * (f[1] || 0) + 1 * (f[2] || 0)); b.air && (c = parseFloat(a.match(/ adobeair\/(\d+)/)[1])); b.webkit && (c = parseFloat(a.match(/ applewebkit\/(\d+)/)[1])); b.version = c; b.isCompatible = !(b.ie && 7 > c) && !(b.gecko && 4E4 > c) && !(b.webkit && 534 > c); b.hidpi = 2 <= window.devicePixelRatio; b.needsBrFiller = b.gecko || b.webkit || b.ie && 10 < c; b.needsNbspFiller = b.ie && 11 > c; b.cssClass = "cke_browser_" + (b.ie ? "ie" : b.gecko ? "gecko" : b.webkit ? "webkit" : "unknown"); b.quirks && (b.cssClass += " cke_browser_quirks"); b.ie && (b.cssClass += " cke_browser_ie" + (b.quirks ? "6 cke_browser_iequirks" : b.version)); b.air && (b.cssClass += " cke_browser_air"); b.iOS && (b.cssClass += " cke_browser_ios"); b.hidpi && (b.cssClass += " cke_hidpi"); return b }()), "unloaded" == CKEDITOR.status && function() { CKEDITOR.event.implementOn(CKEDITOR); CKEDITOR.loadFullCore = function() { if ("basic_ready" != CKEDITOR.status) CKEDITOR.loadFullCore._load = 1; else { delete CKEDITOR.loadFullCore; var a = document.createElement("script"); a.type = "text/javascript"; a.src = CKEDITOR.basePath + "ckeditor.js"; document.getElementsByTagName("head")[0].appendChild(a) } }; CKEDITOR.loadFullCoreTimeout = 0; CKEDITOR.add = function(a) { (this._.pending || (this._.pending = [])).push(a) }; (function() { CKEDITOR.domReady(function() { var a = CKEDITOR.loadFullCore, f = CKEDITOR.loadFullCoreTimeout; a && (CKEDITOR.status = "basic_ready", a && a._load ? a() : f && setTimeout(function() { CKEDITOR.loadFullCore && CKEDITOR.loadFullCore() }, 1E3 * f)) }) })(); CKEDITOR.status = "basic_loaded" }(), "use strict", CKEDITOR.VERBOSITY_WARN = 1, CKEDITOR.VERBOSITY_ERROR = 2, CKEDITOR.verbosity = CKEDITOR.VERBOSITY_WARN | CKEDITOR.VERBOSITY_ERROR, CKEDITOR.warn = function(a, f) { CKEDITOR.verbosity & CKEDITOR.VERBOSITY_WARN && CKEDITOR.fire("log", { type: "warn", errorCode: a, additionalData: f }) }, CKEDITOR.error = function(a, f) { CKEDITOR.verbosity & CKEDITOR.VERBOSITY_ERROR && CKEDITOR.fire("log", { type: "error", errorCode: a, additionalData: f }) }, CKEDITOR.on("log", function(a) { if (window.console && window.console.log) { var f = console[a.data.type] ? a.data.type : "log", b = a.data.errorCode; if (a = a.data.additionalData) console[f]("[CKEDITOR] Error code: " + b + ".", a); else console[f]("[CKEDITOR] Error code: " + b + "."); console[f]("[CKEDITOR] For more information about this error go to http://docs.ckeditor.com/#!/guide/dev_errors-section-" + b) } }, null, null, 999), CKEDITOR.dom = {}, function() { var a = [], f = CKEDITOR.env.gecko ? "-moz-" : CKEDITOR.env.webkit ? "-webkit-" : CKEDITOR.env.ie ? "-ms-" : "", b = /&/g, c = />/g, e = /|\s) /g, function(a, g) { return g + "\x26nbsp;" }).replace(/ (?=<)/g, "\x26nbsp;") }, getNextNumber: function() { var a = 0; return function() { return ++a } }(), getNextId: function() { return "cke_" + this.getNextNumber() }, getUniqueId: function() { for (var a = "e", g = 0; 8 > g; g++) a += Math.floor(65536 * (1 + Math.random())).toString(16).substring(1); return a }, override: function(a, g) { var d = g(a); d.prototype = a.prototype; return d }, setTimeout: function(a, g, d, b, h) { h || (h = window); d || (d = h); return h.setTimeout(function() { b ? a.apply(d, [].concat(b)) : a.apply(d) }, g || 0) }, trim: function() { var a = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g; return function(g) { return g.replace(a, "") } }(), ltrim: function() { var a = /^[ \t\n\r]+/g; return function(g) { return g.replace(a, "") } }(), rtrim: function() { var a = /[ \t\n\r]+$/g; return function(g) { return g.replace(a, "") } }(), indexOf: function(a, g) { if ("function" == typeof g) for (var d = 0, b = a.length; d < b; d++) { if (g(a[d])) return d } else { if (a.indexOf) return a.indexOf(g); d = 0; for (b = a.length; d < b; d++) if (a[d] === g) return d } return -1 }, search: function(a, g) { var d = CKEDITOR.tools.indexOf(a, g); return 0 <= d ? a[d] : null }, bind: function(a, g) { return function() { return a.apply(g, arguments) } }, createClass: function(a) { var g = a.$, d = a.base, b = a.privates || a._, h = a.proto; a = a.statics; !g && (g = function() { d && this.base.apply(this, arguments) }); if (b) var c = g, g = function() { var a = this._ || (this._ = {}), g; for (g in b) { var d = b[g]; a[g] = "function" == typeof d ? CKEDITOR.tools.bind(d, this) : d } c.apply(this, arguments) }; d && (g.prototype = this.prototypedCopy(d.prototype), g.prototype.constructor = g, g.base = d, g.baseProto = d.prototype, g.prototype.base = function() { this.base = d.prototype.base; d.apply(this, arguments); this.base = arguments.callee }); h && this.extend(g.prototype, h, !0); a && this.extend(g, a, !0); return g }, addFunction: function(d, g) { return a.push(function() { return d.apply(g || this, arguments) }) - 1 }, removeFunction: function(d) { a[d] = null }, callFunction: function(d) { var g = a[d]; return g && g.apply(window, Array.prototype.slice.call(arguments, 1)) }, cssLength: function() { var a = /^-?\d+\.?\d*px$/, g; return function(d) { g = CKEDITOR.tools.trim(d + "") + "px"; return a.test(g) ? g : d || "" } }(), convertToPx: function() { var a; return function(g) { a || (a = CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"\x3e\x3c/div\x3e', CKEDITOR.document), CKEDITOR.document.getBody().append(a)); return /%$/.test(g) ? g : (a.setStyle("width", g), a.$.clientWidth) } }(), repeat: function(a, g) { return Array(g + 1).join(a) }, tryThese: function() { for (var a, g = 0, d = arguments.length; g < d; g++) { var b = arguments[g]; try { a = b(); break } catch (h) {} } return a }, genKey: function() { return Array.prototype.slice.call(arguments).join("-") }, defer: function(a) { return function() { var g = arguments, d = this; window.setTimeout(function() { a.apply(d, g) }, 0) } }, normalizeCssText: function(a, g) { var d = [], b, h = CKEDITOR.tools.parseCssText(a, !0, g); for (b in h) d.push(b + ":" + h[b]); d.sort(); return d.length ? d.join(";") + ";" : "" }, convertRgbToHex: function(a) { return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi, function(a, d, b, k) { a = [d, b, k]; for (d = 0; 3 > d; d++) a[d] = ("0" + parseInt(a[d], 10).toString(16)).slice(-2); return "#" + a.join("") }) }, normalizeHex: function(a) { return a.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi, function(a, d, b, k) { a = d.toLowerCase(); 3 == a.length && (a = a.split(""), a = [a[0], a[0], a[1], a[1], a[2], a[2]].join("")); return "#" + a + k }) }, parseCssText: function(a, g, d) { var b = {}; d && (a = (new CKEDITOR.dom.element("span")).setAttribute("style", a).getAttribute("style") || ""); a && (a = CKEDITOR.tools.normalizeHex(CKEDITOR.tools.convertRgbToHex(a))); if (!a || ";" == a) return b; a.replace(/"/g, '"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g, function(a, d, k) { g && (d = d.toLowerCase(), "font-family" == d && (k = k.replace(/\s*,\s*/g, ",")), k = CKEDITOR.tools.trim(k)); b[d] = k }); return b }, writeCssText: function(a, g) { var d, b = []; for (d in a) b.push(d + ":" + a[d]); g && b.sort(); return b.join("; ") }, objectCompare: function(a, g, d) { var b; if (!a && !g) return !0; if (!a || !g) return !1; for (b in a) if (a[b] != g[b]) return !1; if (!d) for (b in g) if (a[b] != g[b]) return !1; return !0 }, objectKeys: function(a) { var g = [], d; for (d in a) g.push(d); return g }, convertArrayToObject: function(a, g) { var d = {}; 1 == arguments.length && (g = !0); for (var b = 0, h = a.length; b < h; ++b) d[a[b]] = g; return d }, fixDomain: function() { for (var a;;) try { a = window.parent.document.domain; break } catch (g) { a = a ? a.replace(/.+?(?:\.|$)/, "") : document.domain; if (!a) break; document.domain = a } return !!a }, eventsBuffer: function(a, g, d) { function b() { c = (new Date).getTime(); h = !1; d ? g.call(d) : g() } var h, c = 0; return { input: function() { if (!h) { var g = (new Date).getTime() - c; g < a ? h = setTimeout(b, a - g) : b() } }, reset: function() { h && clearTimeout(h); h = c = 0 } } }, enableHtml5Elements: function(a, g) { for (var d = "abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup main mark meter nav output progress section summary time video".split(" "), b = d.length, h; b--;) h = a.createElement(d[b]), g && a.appendChild(h) }, checkIfAnyArrayItemMatches: function(a, g) { for (var d = 0, b = a.length; d < b; ++d) if (a[d].match(g)) return !0; return !1 }, checkIfAnyObjectPropertyMatches: function(a, g) { for (var d in a) if (d.match(g)) return !0; return !1 }, keystrokeToString: function(a, g) { var d = g & 16711680, b = g & 65535, h = CKEDITOR.env.mac, c = [], e = []; d & CKEDITOR.CTRL && (c.push(h ? "⌘" : a[17]), e.push(h ? a[224] : a[17])); d & CKEDITOR.ALT && (c.push(h ? "⌥" : a[18]), e.push(a[18])); d & CKEDITOR.SHIFT && (c.push(h ? "⇧" : a[16]), e.push(a[16])); b && (a[b] ? (c.push(a[b]), e.push(a[b])) : (c.push(String.fromCharCode(b)), e.push(String.fromCharCode(b)))); return { display: c.join("+"), aria: e.join("+") } }, transparentImageData: "data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d", getCookie: function(a) { a = a.toLowerCase(); for (var g = document.cookie.split(";"), d, b, h = 0; h < g.length; h++) if (d = g[h].split("\x3d"), b = decodeURIComponent(CKEDITOR.tools.trim(d[0]).toLowerCase()), b === a) return decodeURIComponent(1 < d.length ? d[1] : ""); return null }, setCookie: function(a, g) { document.cookie = encodeURIComponent(a) + "\x3d" + encodeURIComponent(g) + ";path\x3d/" }, getCsrfToken: function() { var a = CKEDITOR.tools.getCookie("ckCsrfToken"); if (!a || 40 != a.length) { var a = [], g = ""; if (window.crypto && window.crypto.getRandomValues) a = new Uint8Array(40), window.crypto.getRandomValues(a); else for (var d = 0; 40 > d; d++) a.push(Math.floor(256 * Math.random())); for (d = 0; d < a.length; d++) var b = "abcdefghijklmnopqrstuvwxyz0123456789".charAt(a[d] % 36), g = g + (.5 < Math.random() ? b.toUpperCase() : b); a = g; CKEDITOR.tools.setCookie("ckCsrfToken", a) } return a }, escapeCss: function(a) { return a ? window.CSS && CSS.escape ? CSS.escape(a) : isNaN(parseInt(a.charAt(0), 10)) ? a : "\\3" + a.charAt(0) + " " + a.substring(1, a.length) : "" }, style: { parse: { _colors: { aliceblue: "#F0F8FF", antiquewhite: "#FAEBD7", aqua: "#00FFFF", aquamarine: "#7FFFD4", azure: "#F0FFFF", beige: "#F5F5DC", bisque: "#FFE4C4", black: "#000000", blanchedalmond: "#FFEBCD", blue: "#0000FF", blueviolet: "#8A2BE2", brown: "#A52A2A", burlywood: "#DEB887", cadetblue: "#5F9EA0", chartreuse: "#7FFF00", chocolate: "#D2691E", coral: "#FF7F50", cornflowerblue: "#6495ED", cornsilk: "#FFF8DC", crimson: "#DC143C", cyan: "#00FFFF", darkblue: "#00008B", darkcyan: "#008B8B", darkgoldenrod: "#B8860B", darkgray: "#A9A9A9", darkgreen: "#006400", darkgrey: "#A9A9A9", darkkhaki: "#BDB76B", darkmagenta: "#8B008B", darkolivegreen: "#556B2F", darkorange: "#FF8C00", darkorchid: "#9932CC", darkred: "#8B0000", darksalmon: "#E9967A", darkseagreen: "#8FBC8F", darkslateblue: "#483D8B", darkslategray: "#2F4F4F", darkslategrey: "#2F4F4F", darkturquoise: "#00CED1", darkviolet: "#9400D3", deeppink: "#FF1493", deepskyblue: "#00BFFF", dimgray: "#696969", dimgrey: "#696969", dodgerblue: "#1E90FF", firebrick: "#B22222", floralwhite: "#FFFAF0", forestgreen: "#228B22", fuchsia: "#FF00FF", gainsboro: "#DCDCDC", ghostwhite: "#F8F8FF", gold: "#FFD700", goldenrod: "#DAA520", gray: "#808080", green: "#008000", greenyellow: "#ADFF2F", grey: "#808080", honeydew: "#F0FFF0", hotpink: "#FF69B4", indianred: "#CD5C5C", indigo: "#4B0082", ivory: "#FFFFF0", khaki: "#F0E68C", lavender: "#E6E6FA", lavenderblush: "#FFF0F5", lawngreen: "#7CFC00", lemonchiffon: "#FFFACD", lightblue: "#ADD8E6", lightcoral: "#F08080", lightcyan: "#E0FFFF", lightgoldenrodyellow: "#FAFAD2", lightgray: "#D3D3D3", lightgreen: "#90EE90", lightgrey: "#D3D3D3", lightpink: "#FFB6C1", lightsalmon: "#FFA07A", lightseagreen: "#20B2AA", lightskyblue: "#87CEFA", lightslategray: "#778899", lightslategrey: "#778899", lightsteelblue: "#B0C4DE", lightyellow: "#FFFFE0", lime: "#00FF00", limegreen: "#32CD32", linen: "#FAF0E6", magenta: "#FF00FF", maroon: "#800000", mediumaquamarine: "#66CDAA", mediumblue: "#0000CD", mediumorchid: "#BA55D3", mediumpurple: "#9370DB", mediumseagreen: "#3CB371", mediumslateblue: "#7B68EE", mediumspringgreen: "#00FA9A", mediumturquoise: "#48D1CC", mediumvioletred: "#C71585", midnightblue: "#191970", mintcream: "#F5FFFA", mistyrose: "#FFE4E1", moccasin: "#FFE4B5", navajowhite: "#FFDEAD", navy: "#000080", oldlace: "#FDF5E6", olive: "#808000", olivedrab: "#6B8E23", orange: "#FFA500", orangered: "#FF4500", orchid: "#DA70D6", palegoldenrod: "#EEE8AA", palegreen: "#98FB98", paleturquoise: "#AFEEEE", palevioletred: "#DB7093", papayawhip: "#FFEFD5", peachpuff: "#FFDAB9", peru: "#CD853F", pink: "#FFC0CB", plum: "#DDA0DD", powderblue: "#B0E0E6", purple: "#800080", rebeccapurple: "#663399", red: "#FF0000", rosybrown: "#BC8F8F", royalblue: "#4169E1", saddlebrown: "#8B4513", salmon: "#FA8072", sandybrown: "#F4A460", seagreen: "#2E8B57", seashell: "#FFF5EE", sienna: "#A0522D", silver: "#C0C0C0", skyblue: "#87CEEB", slateblue: "#6A5ACD", slategray: "#708090", slategrey: "#708090", snow: "#FFFAFA", springgreen: "#00FF7F", steelblue: "#4682B4", tan: "#D2B48C", teal: "#008080", thistle: "#D8BFD8", tomato: "#FF6347", turquoise: "#40E0D0", violet: "#EE82EE", wheat: "#F5DEB3", white: "#FFFFFF", whitesmoke: "#F5F5F5", yellow: "#FFFF00", yellowgreen: "#9ACD32" }, _rgbaRegExp: /rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi, _hslaRegExp: /hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi, background: function(a) { var g = [], d = [], d = this._findColor(a); d.length && (g.color = d[0], CKEDITOR.tools.array.forEach(d, function(g) { a = a.replace(g, "") })); if (a = CKEDITOR.tools.trim(a)) g.unprocessed = a; return g }, margin: function(a) { function g(a) { d.top = b[a[0]]; d.right = b[a[1]]; d.bottom = b[a[2]]; d.left = b[a[3]] } var d = {}, b = a.match(/(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset)/g) || ["0px"]; switch (b.length) { case 1: g([0, 0, 0, 0]); break; case 2: g([0, 1, 0, 1]); break; case 3: g([0, 1, 2, 1]); break; case 4: g([0, 1, 2, 3]) } return d }, _findColor: function(a) { var g = [], d = CKEDITOR.tools.array, g = g.concat(a.match(this._rgbaRegExp) || []), g = g.concat(a.match(this._hslaRegExp) || []); return g = g.concat(d.filter(a.split(/\s+/), function(a) { return a.match(/^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi) ? !0 : a.toLowerCase() in CKEDITOR.tools.style.parse._colors })) } } }, array: { filter: function(a, g, d) { var b = []; this.forEach(a, function(h, c) { g.call(d, h, c, a) && b.push(h) }); return b }, forEach: function(a, g, d) { var b = a.length, h; for (h = 0; h < b; h++) g.call(d, a[h], h, a) } } }; CKEDITOR.tools.array.indexOf = CKEDITOR.tools.indexOf; CKEDITOR.tools.array.isArray = CKEDITOR.tools.isArray }(), CKEDITOR.dtd = function() { var a = CKEDITOR.tools.extend, f = function(a, g) { for (var d = CKEDITOR.tools.clone(a), b = 1; b < arguments.length; b++) { g = arguments[b]; for (var h in g) delete d[h] } return d }, b = {}, c = {}, e = { address: 1, article: 1, aside: 1, blockquote: 1, details: 1, div: 1, dl: 1, fieldset: 1, figure: 1, footer: 1, form: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, header: 1, hgroup: 1, hr: 1, main: 1, menu: 1, nav: 1, ol: 1, p: 1, pre: 1, section: 1, table: 1, ul: 1 }, m = { command: 1, link: 1, meta: 1, noscript: 1, script: 1, style: 1 }, l = {}, d = { "#": 1 }, h = { center: 1, dir: 1, noframes: 1 }; a(b, { a: 1, abbr: 1, area: 1, audio: 1, b: 1, bdi: 1, bdo: 1, br: 1, button: 1, canvas: 1, cite: 1, code: 1, command: 1, datalist: 1, del: 1, dfn: 1, em: 1, embed: 1, i: 1, iframe: 1, img: 1, input: 1, ins: 1, kbd: 1, keygen: 1, label: 1, map: 1, mark: 1, meter: 1, noscript: 1, object: 1, output: 1, progress: 1, q: 1, ruby: 1, s: 1, samp: 1, script: 1, select: 1, small: 1, span: 1, strong: 1, sub: 1, sup: 1, textarea: 1, time: 1, u: 1, "var": 1, video: 1, wbr: 1 }, d, { acronym: 1, applet: 1, basefont: 1, big: 1, font: 1, isindex: 1, strike: 1, style: 1, tt: 1 }); a(c, e, b, h); f = { a: f(b, { a: 1, button: 1 }), abbr: b, address: c, area: l, article: c, aside: c, audio: a({ source: 1, track: 1 }, c), b: b, base: l, bdi: b, bdo: b, blockquote: c, body: c, br: l, button: f(b, { a: 1, button: 1 }), canvas: b, caption: c, cite: b, code: b, col: l, colgroup: { col: 1 }, command: l, datalist: a({ option: 1 }, b), dd: c, del: b, details: a({ summary: 1 }, c), dfn: b, div: c, dl: { dt: 1, dd: 1 }, dt: c, em: b, embed: l, fieldset: a({ legend: 1 }, c), figcaption: c, figure: a({ figcaption: 1 }, c), footer: c, form: c, h1: b, h2: b, h3: b, h4: b, h5: b, h6: b, head: a({ title: 1, base: 1 }, m), header: c, hgroup: { h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1 }, hr: l, html: a({ head: 1, body: 1 }, c, m), i: b, iframe: d, img: l, input: l, ins: b, kbd: b, keygen: l, label: b, legend: b, li: c, link: l, main: c, map: c, mark: b, menu: a({ li: 1 }, c), meta: l, meter: f(b, { meter: 1 }), nav: c, noscript: a({ link: 1, meta: 1, style: 1 }, b), object: a({ param: 1 }, b), ol: { li: 1 }, optgroup: { option: 1 }, option: d, output: b, p: b, param: l, pre: b, progress: f(b, { progress: 1 }), q: b, rp: b, rt: b, ruby: a({ rp: 1, rt: 1 }, b), s: b, samp: b, script: d, section: c, select: { optgroup: 1, option: 1 }, small: b, source: l, span: b, strong: b, style: d, sub: b, summary: a({ h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1 }, b), sup: b, table: { caption: 1, colgroup: 1, thead: 1, tfoot: 1, tbody: 1, tr: 1 }, tbody: { tr: 1 }, td: c, textarea: d, tfoot: { tr: 1 }, th: c, thead: { tr: 1 }, time: f(b, { time: 1 }), title: d, tr: { th: 1, td: 1 }, track: l, u: b, ul: { li: 1 }, "var": b, video: a({ source: 1, track: 1 }, c), wbr: l, acronym: b, applet: a({ param: 1 }, c), basefont: l, big: b, center: c, dialog: l, dir: { li: 1 }, font: b, isindex: l, noframes: c, strike: b, tt: b }; a(f, { $block: a({ audio: 1, dd: 1, dt: 1, figcaption: 1, li: 1, video: 1 }, e, h), $blockLimit: { article: 1, aside: 1, audio: 1, body: 1, caption: 1, details: 1, dir: 1, div: 1, dl: 1, fieldset: 1, figcaption: 1, figure: 1, footer: 1, form: 1, header: 1, hgroup: 1, main: 1, menu: 1, nav: 1, ol: 1, section: 1, table: 1, td: 1, th: 1, tr: 1, ul: 1, video: 1 }, $cdata: { script: 1, style: 1 }, $editable: { address: 1, article: 1, aside: 1, blockquote: 1, body: 1, details: 1, div: 1, fieldset: 1, figcaption: 1, footer: 1, form: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, header: 1, hgroup: 1, main: 1, nav: 1, p: 1, pre: 1, section: 1 }, $empty: { area: 1, base: 1, basefont: 1, br: 1, col: 1, command: 1, dialog: 1, embed: 1, hr: 1, img: 1, input: 1, isindex: 1, keygen: 1, link: 1, meta: 1, param: 1, source: 1, track: 1, wbr: 1 }, $inline: b, $list: { dl: 1, ol: 1, ul: 1 }, $listItem: { dd: 1, dt: 1, li: 1 }, $nonBodyContent: a({ body: 1, head: 1, html: 1 }, f.head), $nonEditable: { applet: 1, audio: 1, button: 1, embed: 1, iframe: 1, map: 1, object: 1, option: 1, param: 1, script: 1, textarea: 1, video: 1 }, $object: { applet: 1, audio: 1, button: 1, hr: 1, iframe: 1, img: 1, input: 1, object: 1, select: 1, table: 1, textarea: 1, video: 1 }, $removeEmpty: { abbr: 1, acronym: 1, b: 1, bdi: 1, bdo: 1, big: 1, cite: 1, code: 1, del: 1, dfn: 1, em: 1, font: 1, i: 1, ins: 1, label: 1, kbd: 1, mark: 1, meter: 1, output: 1, q: 1, ruby: 1, s: 1, samp: 1, small: 1, span: 1, strike: 1, strong: 1, sub: 1, sup: 1, time: 1, tt: 1, u: 1, "var": 1 }, $tabIndex: { a: 1, area: 1, button: 1, input: 1, object: 1, select: 1, textarea: 1 }, $tableContent: { caption: 1, col: 1, colgroup: 1, tbody: 1, td: 1, tfoot: 1, th: 1, thead: 1, tr: 1 }, $transparent: { a: 1, audio: 1, canvas: 1, del: 1, ins: 1, map: 1, noscript: 1, object: 1, video: 1 }, $intermediate: { caption: 1, colgroup: 1, dd: 1, dt: 1, figcaption: 1, legend: 1, li: 1, optgroup: 1, option: 1, rp: 1, rt: 1, summary: 1, tbody: 1, td: 1, tfoot: 1, th: 1, thead: 1, tr: 1 } }); return f }(), CKEDITOR.dom.event = function(a) { this.$ = a }, CKEDITOR.dom.event.prototype = { getKey: function() { return this.$.keyCode || this.$.which }, getKeystroke: function() { var a = this.getKey(); if (this.$.ctrlKey || this.$.metaKey) a += CKEDITOR.CTRL; this.$.shiftKey && (a += CKEDITOR.SHIFT); this.$.altKey && (a += CKEDITOR.ALT); return a }, preventDefault: function(a) { var f = this.$; f.preventDefault ? f.preventDefault() : f.returnValue = !1; a && this.stopPropagation() }, stopPropagation: function() { var a = this.$; a.stopPropagation ? a.stopPropagation() : a.cancelBubble = !0 }, getTarget: function() { var a = this.$.target || this.$.srcElement; return a ? new CKEDITOR.dom.node(a) : null }, getPhase: function() { return this.$.eventPhase || 2 }, getPageOffset: function() { var a = this.getTarget().getDocument().$; return { x: this.$.pageX || this.$.clientX + (a.documentElement.scrollLeft || a.body.scrollLeft), y: this.$.pageY || this.$.clientY + (a.documentElement.scrollTop || a.body.scrollTop) } } }, CKEDITOR.CTRL = 1114112, CKEDITOR.SHIFT = 2228224, CKEDITOR.ALT = 4456448, CKEDITOR.EVENT_PHASE_CAPTURING = 1, CKEDITOR.EVENT_PHASE_AT_TARGET = 2, CKEDITOR.EVENT_PHASE_BUBBLING = 3, CKEDITOR.dom.domObject = function(a) { a && (this.$ = a) }, CKEDITOR.dom.domObject.prototype = function() { var a = function(a, b) { return function(c) { "undefined" != typeof CKEDITOR && a.fire(b, new CKEDITOR.dom.event(c)) } }; return { getPrivate: function() { var a; (a = this.getCustomData("_")) || this.setCustomData("_", a = {}); return a }, on: function(f) { var b = this.getCustomData("_cke_nativeListeners"); b || (b = {}, this.setCustomData("_cke_nativeListeners", b)); b[f] || (b = b[f] = a(this, f), this.$.addEventListener ? this.$.addEventListener(f, b, !!CKEDITOR.event.useCapture) : this.$.attachEvent && this.$.attachEvent("on" + f, b)); return CKEDITOR.event.prototype.on.apply(this, arguments) }, removeListener: function(a) { CKEDITOR.event.prototype.removeListener.apply(this, arguments); if (!this.hasListeners(a)) { var b = this.getCustomData("_cke_nativeListeners"), c = b && b[a]; c && (this.$.removeEventListener ? this.$.removeEventListener(a, c, !1) : this.$.detachEvent && this.$.detachEvent("on" + a, c), delete b[a]) } }, removeAllListeners: function() { var a = this.getCustomData("_cke_nativeListeners"), b; for (b in a) { var c = a[b]; this.$.detachEvent ? this.$.detachEvent("on" + b, c) : this.$.removeEventListener && this.$.removeEventListener(b, c, !1); delete a[b] } CKEDITOR.event.prototype.removeAllListeners.call(this) } } }(), function(a) { var f = {}; CKEDITOR.on("reset", function() { f = {} }); a.equals = function(a) { try { return a && a.$ === this.$ } catch (c) { return !1 } }; a.setCustomData = function(a, c) { var e = this.getUniqueId(); (f[e] || (f[e] = {}))[a] = c; return this }; a.getCustomData = function(a) { var c = this.$["data-cke-expando"]; return (c = c && f[c]) && a in c ? c[a] : null }; a.removeCustomData = function(a) { var c = this.$["data-cke-expando"], c = c && f[c], e, m; c && (e = c[a], m = a in c, delete c[a]); return m ? e : null }; a.clearCustomData = function() { this.removeAllListeners(); var a = this.$["data-cke-expando"]; a && delete f[a] }; a.getUniqueId = function() { return this.$["data-cke-expando"] || (this.$["data-cke-expando"] = CKEDITOR.tools.getNextNumber()) }; CKEDITOR.event.implementOn(a) }(CKEDITOR.dom.domObject.prototype), CKEDITOR.dom.node = function(a) { return a ? new CKEDITOR.dom[a.nodeType == CKEDITOR.NODE_DOCUMENT ? "document" : a.nodeType == CKEDITOR.NODE_ELEMENT ? "element" : a.nodeType == CKEDITOR.NODE_TEXT ? "text" : a.nodeType == CKEDITOR.NODE_COMMENT ? "comment" : a.nodeType == CKEDITOR.NODE_DOCUMENT_FRAGMENT ? "documentFragment" : "domObject"](a) : this }, CKEDITOR.dom.node.prototype = new CKEDITOR.dom.domObject, CKEDITOR.NODE_ELEMENT = 1, CKEDITOR.NODE_DOCUMENT = 9, CKEDITOR.NODE_TEXT = 3, CKEDITOR.NODE_COMMENT = 8, CKEDITOR.NODE_DOCUMENT_FRAGMENT = 11, CKEDITOR.POSITION_IDENTICAL = 0, CKEDITOR.POSITION_DISCONNECTED = 1, CKEDITOR.POSITION_FOLLOWING = 2, CKEDITOR.POSITION_PRECEDING = 4, CKEDITOR.POSITION_IS_CONTAINED = 8, CKEDITOR.POSITION_CONTAINS = 16, CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype, { appendTo: function(a, f) { a.append(this, f); return a }, clone: function(a, f) { function b(c) { c["data-cke-expando"] && (c["data-cke-expando"] = !1); if (c.nodeType == CKEDITOR.NODE_ELEMENT || c.nodeType == CKEDITOR.NODE_DOCUMENT_FRAGMENT) if (f || c.nodeType != CKEDITOR.NODE_ELEMENT || c.removeAttribute("id", !1), a) { c = c.childNodes; for (var e = 0; e < c.length; e++) b(c[e]) } } function c(b) { if (b.type == CKEDITOR.NODE_ELEMENT || b.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT) { if (b.type != CKEDITOR.NODE_DOCUMENT_FRAGMENT) { var e = b.getName(); ":" == e[0] && b.renameNode(e.substring(1)) } if (a) for (e = 0; e < b.getChildCount(); e++) c(b.getChild(e)) } } var e = this.$.cloneNode(a); b(e); e = new CKEDITOR.dom.node(e); CKEDITOR.env.ie && 9 > CKEDITOR.env.version && (this.type == CKEDITOR.NODE_ELEMENT || this.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT) && c(e); return e }, hasPrevious: function() { return !!this.$.previousSibling }, hasNext: function() { return !!this.$.nextSibling }, insertAfter: function(a) { a.$.parentNode.insertBefore(this.$, a.$.nextSibling); return a }, insertBefore: function(a) { a.$.parentNode.insertBefore(this.$, a.$); return a }, insertBeforeMe: function(a) { this.$.parentNode.insertBefore(a.$, this.$); return a }, getAddress: function(a) { for (var f = [], b = this.getDocument().$.documentElement, c = this.$; c && c != b;) { var e = c.parentNode; e && f.unshift(this.getIndex.call({ $: c }, a)); c = e } return f }, getDocument: function() { return new CKEDITOR.dom.document(this.$.ownerDocument || this.$.parentNode.ownerDocument) }, getIndex: function(a) { function f(a, d) { var h = d ? a.nextSibling : a.previousSibling; return h && h.nodeType == CKEDITOR.NODE_TEXT ? b(h) ? f(h, d) : h : null } function b(a) { return !a.nodeValue || a.nodeValue == CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE } var c = this.$, e = -1, m; if (!this.$.parentNode || a && c.nodeType == CKEDITOR.NODE_TEXT && b(c) && !f(c) && !f(c, !0)) return -1; do a && c != this.$ && c.nodeType == CKEDITOR.NODE_TEXT && (m || b(c)) || (e++, m = c.nodeType == CKEDITOR.NODE_TEXT); while (c = c.previousSibling); return e }, getNextSourceNode: function(a, f, b) { if (b && !b.call) { var c = b; b = function(a) { return !a.equals(c) } } a = !a && this.getFirst && this.getFirst(); var e; if (!a) { if (this.type == CKEDITOR.NODE_ELEMENT && b && !1 === b(this, !0)) return null; a = this.getNext() } for (; !a && (e = (e || this).getParent());) { if (b && !1 === b(e, !0)) return null; a = e.getNext() } return !a || b && !1 === b(a) ? null : f && f != a.type ? a.getNextSourceNode(!1, f, b) : a }, getPreviousSourceNode: function(a, f, b) { if (b && !b.call) { var c = b; b = function(a) { return !a.equals(c) } } a = !a && this.getLast && this.getLast(); var e; if (!a) { if (this.type == CKEDITOR.NODE_ELEMENT && b && !1 === b(this, !0)) return null; a = this.getPrevious() } for (; !a && (e = (e || this).getParent());) { if (b && !1 === b(e, !0)) return null; a = e.getPrevious() } return !a || b && !1 === b(a) ? null : f && a.type != f ? a.getPreviousSourceNode(!1, f, b) : a }, getPrevious: function(a) { var f = this.$, b; do b = (f = f.previousSibling) && 10 != f.nodeType && new CKEDITOR.dom.node(f); while (b && a && !a(b)); return b }, getNext: function(a) { var f = this.$, b; do b = (f = f.nextSibling) && new CKEDITOR.dom.node(f); while (b && a && !a(b)); return b }, getParent: function(a) { var f = this.$.parentNode; return f && (f.nodeType == CKEDITOR.NODE_ELEMENT || a && f.nodeType == CKEDITOR.NODE_DOCUMENT_FRAGMENT) ? new CKEDITOR.dom.node(f) : null }, getParents: function(a) { var f = this, b = []; do b[a ? "push" : "unshift"](f); while (f = f.getParent()); return b }, getCommonAncestor: function(a) { if (a.equals(this)) return this; if (a.contains && a.contains(this)) return a; var f = this.contains ? this : this.getParent(); do if (f.contains(a)) return f; while (f = f.getParent()); return null }, getPosition: function(a) { var f = this.$, b = a.$; if (f.compareDocumentPosition) return f.compareDocumentPosition(b); if (f == b) return CKEDITOR.POSITION_IDENTICAL; if (this.type == CKEDITOR.NODE_ELEMENT && a.type == CKEDITOR.NODE_ELEMENT) { if (f.contains) { if (f.contains(b)) return CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING; if (b.contains(f)) return CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING } if ("sourceIndex" in f) return 0 > f.sourceIndex || 0 > b.sourceIndex ? CKEDITOR.POSITION_DISCONNECTED : f.sourceIndex < b.sourceIndex ? CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_FOLLOWING } f = this.getAddress(); a = a.getAddress(); for (var b = Math.min(f.length, a.length), c = 0; c < b; c++) if (f[c] != a[c]) return f[c] < a[c] ? CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_FOLLOWING; return f.length < a.length ? CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING }, getAscendant: function(a, f) { var b = this.$, c, e; f || (b = b.parentNode); "function" == typeof a ? (e = !0, c = a) : (e = !1, c = function(b) { b = "string" == typeof b.nodeName ? b.nodeName.toLowerCase() : ""; return "string" == typeof a ? b == a : b in a }); for (; b;) { if (c(e ? new CKEDITOR.dom.node(b) : b)) return new CKEDITOR.dom.node(b); try { b = b.parentNode } catch (m) { b = null } } return null }, hasAscendant: function(a, f) { var b = this.$; f || (b = b.parentNode); for (; b;) { if (b.nodeName && b.nodeName.toLowerCase() == a) return !0; b = b.parentNode } return !1 }, move: function(a, f) { a.append(this.remove(), f) }, remove: function(a) { var f = this.$, b = f.parentNode; if (b) { if (a) for (; a = f.firstChild;) b.insertBefore(f.removeChild(a), f); b.removeChild(f) } return this }, replace: function(a) { this.insertBefore(a); a.remove() }, trim: function() { this.ltrim(); this.rtrim() }, ltrim: function() { for (var a; this.getFirst && (a = this.getFirst());) { if (a.type == CKEDITOR.NODE_TEXT) { var f = CKEDITOR.tools.ltrim(a.getText()), b = a.getLength(); if (f) f.length < b && (a.split(b - f.length), this.$.removeChild(this.$.firstChild)); else { a.remove(); continue } } break } }, rtrim: function() { for (var a; this.getLast && (a = this.getLast());) { if (a.type == CKEDITOR.NODE_TEXT) { var f = CKEDITOR.tools.rtrim(a.getText()), b = a.getLength(); if (f) f.length < b && (a.split(f.length), this.$.lastChild.parentNode.removeChild(this.$.lastChild)); else { a.remove(); continue } } break } CKEDITOR.env.needsBrFiller && (a = this.$.lastChild) && 1 == a.type && "br" == a.nodeName.toLowerCase() && a.parentNode.removeChild(a) }, isReadOnly: function(a) { var f = this; this.type != CKEDITOR.NODE_ELEMENT && (f = this.getParent()); CKEDITOR.env.edge && f && f.is("textarea", "input") && (a = !0); if (!a && f && "undefined" != typeof f.$.isContentEditable) return !(f.$.isContentEditable || f.data("cke-editable")); for (; f;) { if (f.data("cke-editable")) return !1; if (f.hasAttribute("contenteditable")) return "false" == f.getAttribute("contenteditable"); f = f.getParent() } return !0 } }), CKEDITOR.dom.window = function(a) { CKEDITOR.dom.domObject.call(this, a) }, CKEDITOR.dom.window.prototype = new CKEDITOR.dom.domObject, CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype, { focus: function() { this.$.focus() }, getViewPaneSize: function() { var a = this.$.document, f = "CSS1Compat" == a.compatMode; return { width: (f ? a.documentElement.clientWidth : a.body.clientWidth) || 0, height: (f ? a.documentElement.clientHeight : a.body.clientHeight) || 0 } }, getScrollPosition: function() { var a = this.$; if ("pageXOffset" in a) return { x: a.pageXOffset || 0, y: a.pageYOffset || 0 }; a = a.document; return { x: a.documentElement.scrollLeft || a.body.scrollLeft || 0, y: a.documentElement.scrollTop || a.body.scrollTop || 0 } }, getFrame: function() { var a = this.$.frameElement; return a ? new CKEDITOR.dom.element.get(a) : null } }), CKEDITOR.dom.document = function(a) { CKEDITOR.dom.domObject.call(this, a) }, CKEDITOR.dom.document.prototype = new CKEDITOR.dom.domObject, CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype, { type: CKEDITOR.NODE_DOCUMENT, appendStyleSheet: function(a) { if (this.$.createStyleSheet) this.$.createStyleSheet(a); else { var f = new CKEDITOR.dom.element("link"); f.setAttributes({ rel: "stylesheet", type: "text/css", href: a }); this.getHead().append(f) } }, appendStyleText: function(a) { if (this.$.createStyleSheet) { var f = this.$.createStyleSheet(""); f.cssText = a } else { var b = new CKEDITOR.dom.element("style", this); b.append(new CKEDITOR.dom.text(a, this)); this.getHead().append(b) } return f || b.$.sheet }, createElement: function(a, f) { var b = new CKEDITOR.dom.element(a, this); f && (f.attributes && b.setAttributes(f.attributes), f.styles && b.setStyles(f.styles)); return b }, createText: function(a) { return new CKEDITOR.dom.text(a, this) }, focus: function() { this.getWindow().focus() }, getActive: function() { var a; try { a = this.$.activeElement } catch (f) { return null } return new CKEDITOR.dom.element(a) }, getById: function(a) { return (a = this.$.getElementById(a)) ? new CKEDITOR.dom.element(a) : null }, getByAddress: function(a, f) { for (var b = this.$.documentElement, c = 0; b && c < a.length; c++) { var e = a[c]; if (f) for (var m = -1, l = 0; l < b.childNodes.length; l++) { var d = b.childNodes[l]; if (!0 !== f || 3 != d.nodeType || !d.previousSibling || 3 != d.previousSibling.nodeType) if (m++, m == e) { b = d; break } } else b = b.childNodes[e] } return b ? new CKEDITOR.dom.node(b) : null }, getElementsByTag: function(a, f) { CKEDITOR.env.ie && 8 >= document.documentMode || !f || (a = f + ":" + a); return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a)) }, getHead: function() { var a = this.$.getElementsByTagName("head")[0]; return a = a ? new CKEDITOR.dom.element(a) : this.getDocumentElement().append(new CKEDITOR.dom.element("head"), !0) }, getBody: function() { return new CKEDITOR.dom.element(this.$.body) }, getDocumentElement: function() { return new CKEDITOR.dom.element(this.$.documentElement) }, getWindow: function() { return new CKEDITOR.dom.window(this.$.parentWindow || this.$.defaultView) }, write: function(a) { this.$.open("text/html", "replace"); CKEDITOR.env.ie && (a = a.replace(/(?:^\s*]*?>)|^/i, '$\x26\n\x3cscript data-cke-temp\x3d"1"\x3e(' + CKEDITOR.tools.fixDomain + ")();\x3c/script\x3e")); this.$.write(a); this.$.close() }, find: function(a) { return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a)) }, findOne: function(a) { return (a = this.$.querySelector(a)) ? new CKEDITOR.dom.element(a) : null }, _getHtml5ShivFrag: function() { var a = this.getCustomData("html5ShivFrag"); a || (a = this.$.createDocumentFragment(), CKEDITOR.tools.enableHtml5Elements(a, !0), this.setCustomData("html5ShivFrag", a)); return a } }), CKEDITOR.dom.nodeList = function(a) { this.$ = a }, CKEDITOR.dom.nodeList.prototype = { count: function() { return this.$.length }, getItem: function(a) { return 0 > a || a >= this.$.length ? null : (a = this.$[a]) ? new CKEDITOR.dom.node(a) : null } }, CKEDITOR.dom.element = function(a, f) { "string" == typeof a && (a = (f ? f.$ : document).createElement(a)); CKEDITOR.dom.domObject.call(this, a) }, CKEDITOR.dom.element.get = function(a) { return (a = "string" == typeof a ? document.getElementById(a) || document.getElementsByName(a)[0] : a) && (a.$ ? a : new CKEDITOR.dom.element(a)) }, CKEDITOR.dom.element.prototype = new CKEDITOR.dom.node, CKEDITOR.dom.element.createFromHtml = function(a, f) { var b = new CKEDITOR.dom.element("div", f); b.setHtml(a); return b.getFirst().remove() }, CKEDITOR.dom.element.setMarker = function(a, f, b, c) { var e = f.getCustomData("list_marker_id") || f.setCustomData("list_marker_id", CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"), m = f.getCustomData("list_marker_names") || f.setCustomData("list_marker_names", {}).getCustomData("list_marker_names"); a[e] = f; m[b] = 1; return f.setCustomData(b, c) }, CKEDITOR.dom.element.clearAllMarkers = function(a) { for (var f in a) CKEDITOR.dom.element.clearMarkers(a, a[f], 1) }, CKEDITOR.dom.element.clearMarkers = function(a, f, b) { var c = f.getCustomData("list_marker_names"), e = f.getCustomData("list_marker_id"), m; for (m in c) f.removeCustomData(m); f.removeCustomData("list_marker_names"); b && (f.removeCustomData("list_marker_id"), delete a[e]) }, function() { function a(a, b) { return -1 < (" " + a + " ").replace(m, " ").indexOf(" " + b + " ") } function f(a) { var b = !0; a.$.id || (a.$.id = "cke_tmp_" + CKEDITOR.tools.getNextNumber(), b = !1); return function() { b || a.removeAttribute("id") } } function b(a, b) { var c = CKEDITOR.tools.escapeCss(a.$.id); return "#" + c + " " + b.split(/,\s*/).join(", #" + c + " ") } function c(a) { for (var b = 0, c = 0, g = l[a].length; c < g; c++) b += parseInt(this.getComputedStyle(l[a][c]) || 0, 10) || 0; return b } var e = document.createElement("_").classList, e = "undefined" !== typeof e && null !== String(e.add).match(/\[Native code\]/gi), m = /[\n\t\r]/g; CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype, { type: CKEDITOR.NODE_ELEMENT, addClass: e ? function(a) { this.$.classList.add(a); return this } : function(d) { var b = this.$.className; b && (a(b, d) || (b += " " + d)); this.$.className = b || d; return this }, removeClass: e ? function(a) { var b = this.$; b.classList.remove(a); b.className || b.removeAttribute("class"); return this } : function(d) { var b = this.getAttribute("class"); b && a(b, d) && ((b = b.replace(new RegExp("(?:^|\\s+)" + d + "(?\x3d\\s|$)"), "").replace(/^\s+/, "")) ? this.setAttribute("class", b) : this.removeAttribute("class")); return this }, hasClass: function(d) { return a(this.$.className, d) }, append: function(a, b) { "string" == typeof a && (a = this.getDocument().createElement(a)); b ? this.$.insertBefore(a.$, this.$.firstChild) : this.$.appendChild(a.$); return a }, appendHtml: function(a) { if (this.$.childNodes.length) { var b = new CKEDITOR.dom.element("div", this.getDocument()); b.setHtml(a); b.moveChildren(this) } else this.setHtml(a) }, appendText: function(a) { null != this.$.text && CKEDITOR.env.ie && 9 > CKEDITOR.env.version ? this.$.text += a : this.append(new CKEDITOR.dom.text(a)) }, appendBogus: function(a) { if (a || CKEDITOR.env.needsBrFiller) { for (a = this.getLast(); a && a.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.rtrim(a.getText());) a = a.getPrevious(); a && a.is && a.is("br") || (a = this.getDocument().createElement("br"), CKEDITOR.env.gecko && a.setAttribute("type", "_moz"), this.append(a)) } }, breakParent: function(a, b) { var c = new CKEDITOR.dom.range(this.getDocument()); c.setStartAfter(this); c.setEndAfter(a); var g = c.extractContents(!1, b || !1), e; c.insertNode(this.remove()); if (CKEDITOR.env.ie && !CKEDITOR.env.edge) { for (c = new CKEDITOR.dom.element("div"); e = g.getFirst();) e.$.style.backgroundColor && (e.$.style.backgroundColor = e.$.style.backgroundColor), c.append(e); c.insertAfter(this); c.remove(!0) } else g.insertAfterNode(this) }, contains: document.compareDocumentPosition ? function(a) { return !!(this.$.compareDocumentPosition(a.$) & 16) } : function(a) { var b = this.$; return a.type != CKEDITOR.NODE_ELEMENT ? b.contains(a.getParent().$) : b != a.$ && b.contains(a.$) }, focus: function() { function a() { try { this.$.focus() } catch (b) {} } return function(b) { b ? CKEDITOR.tools.setTimeout(a, 100, this) : a.call(this) } }(), getHtml: function() { var a = this.$.innerHTML; return CKEDITOR.env.ie ? a.replace(/<\?[^>]*>/g, "") : a }, getOuterHtml: function() { if (this.$.outerHTML) return this.$.outerHTML.replace(/<\?[^>]*>/, ""); var a = this.$.ownerDocument.createElement("div"); a.appendChild(this.$.cloneNode(!0)); return a.innerHTML }, getClientRect: function() { var a = CKEDITOR.tools.extend({}, this.$.getBoundingClientRect()); !a.width && (a.width = a.right - a.left); !a.height && (a.height = a.bottom - a.top); return a }, setHtml: CKEDITOR.env.ie && 9 > CKEDITOR.env.version ? function(a) { try { var b = this.$; if (this.getParent()) return b.innerHTML = a; var c = this.getDocument()._getHtml5ShivFrag(); c.appendChild(b); b.innerHTML = a; c.removeChild(b); return a } catch (g) { this.$.innerHTML = ""; b = new CKEDITOR.dom.element("body", this.getDocument()); b.$.innerHTML = a; for (b = b.getChildren(); b.count();) this.append(b.getItem(0)); return a } } : function(a) { return this.$.innerHTML = a }, setText: function() { var a = document.createElement("p"); a.innerHTML = "x"; a = a.textContent; return function(b) { this.$[a ? "textContent" : "innerText"] = b } }(), getAttribute: function() { var a = function(a) { return this.$.getAttribute(a, 2) }; return CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks) ? function(a) { switch (a) { case "class": a = "className"; break; case "http-equiv": a = "httpEquiv"; break; case "name": return this.$.name; case "tabindex": return a = this.$.getAttribute(a, 2), 0 !== a && 0 === this.$.tabIndex && (a = null), a; case "checked": return a = this.$.attributes.getNamedItem(a), (a.specified ? a.nodeValue : this.$.checked) ? "checked" : null; case "hspace": case "value": return this.$[a]; case "style": return this.$.style.cssText; case "contenteditable": case "contentEditable": return this.$.attributes.getNamedItem("contentEditable").specified ? this.$.getAttribute("contentEditable") : null } return this.$.getAttribute(a, 2) } : a }(), getAttributes: function(a) { var b = {}, c = this.$.attributes, g; a = CKEDITOR.tools.isArray(a) ? a : []; for (g = 0; g < c.length; g++) - 1 === CKEDITOR.tools.indexOf(a, c[g].name) && (b[c[g].name] = c[g].value); return b }, getChildren: function() { return new CKEDITOR.dom.nodeList(this.$.childNodes) }, getComputedStyle: document.defaultView && document.defaultView.getComputedStyle ? function(a) { var b = this.getWindow().$.getComputedStyle(this.$, null); return b ? b.getPropertyValue(a) : "" } : function(a) { return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)] }, getDtd: function() { var a = CKEDITOR.dtd[this.getName()]; this.getDtd = function() { return a }; return a }, getElementsByTag: CKEDITOR.dom.document.prototype.getElementsByTag, getTabIndex: function() { var a = this.$.tabIndex; return 0 !== a || CKEDITOR.dtd.$tabIndex[this.getName()] || 0 === parseInt(this.getAttribute("tabindex"), 10) ? a : -1 }, getText: function() { return this.$.textContent || this.$.innerText || "" }, getWindow: function() { return this.getDocument().getWindow() }, getId: function() { return this.$.id || null }, getNameAtt: function() { return this.$.name || null }, getName: function() { var a = this.$.nodeName.toLowerCase(); if (CKEDITOR.env.ie && 8 >= document.documentMode) { var b = this.$.scopeName; "HTML" != b && (a = b.toLowerCase() + ":" + a) } this.getName = function() { return a }; return this.getName() }, getValue: function() { return this.$.value }, getFirst: function(a) { var b = this.$.firstChild; (b = b && new CKEDITOR.dom.node(b)) && a && !a(b) && (b = b.getNext(a)); return b }, getLast: function(a) { var b = this.$.lastChild; (b = b && new CKEDITOR.dom.node(b)) && a && !a(b) && (b = b.getPrevious(a)); return b }, getStyle: function(a) { return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)] }, is: function() { var a = this.getName(); if ("object" == typeof arguments[0]) return !!arguments[0][a]; for (var b = 0; b < arguments.length; b++) if (arguments[b] == a) return !0; return !1 }, isEditable: function(a) { var b = this.getName(); return this.isReadOnly() || "none" == this.getComputedStyle("display") || "hidden" == this.getComputedStyle("visibility") || CKEDITOR.dtd.$nonEditable[b] || CKEDITOR.dtd.$empty[b] || this.is("a") && (this.data("cke-saved-name") || this.hasAttribute("name")) && !this.getChildCount() ? !1 : !1 !== a ? (a = CKEDITOR.dtd[b] || CKEDITOR.dtd.span, !(!a || !a["#"])) : !0 }, isIdentical: function(a) { var b = this.clone(0, 1); a = a.clone(0, 1); b.removeAttributes(["_moz_dirty", "data-cke-expando", "data-cke-saved-href", "data-cke-saved-name"]); a.removeAttributes(["_moz_dirty", "data-cke-expando", "data-cke-saved-href", "data-cke-saved-name"]); if (b.$.isEqualNode) return b.$.style.cssText = CKEDITOR.tools.normalizeCssText(b.$.style.cssText), a.$.style.cssText = CKEDITOR.tools.normalizeCssText(a.$.style.cssText), b.$.isEqualNode(a.$); b = b.getOuterHtml(); a = a.getOuterHtml(); if (CKEDITOR.env.ie && 9 > CKEDITOR.env.version && this.is("a")) { var c = this.getParent(); c.type == CKEDITOR.NODE_ELEMENT && (c = c.clone(), c.setHtml(b), b = c.getHtml(), c.setHtml(a), a = c.getHtml()) } return b == a }, isVisible: function() { var a = (this.$.offsetHeight || this.$.offsetWidth) && "hidden" != this.getComputedStyle("visibility"), b, c; a && CKEDITOR.env.webkit && (b = this.getWindow(), !b.equals(CKEDITOR.document.getWindow()) && (c = b.$.frameElement) && (a = (new CKEDITOR.dom.element(c)).isVisible())); return !!a }, isEmptyInlineRemoveable: function() { if (!CKEDITOR.dtd.$removeEmpty[this.getName()]) return !1; for (var a = this.getChildren(), b = 0, c = a.count(); b < c; b++) { var g = a.getItem(b); if (g.type != CKEDITOR.NODE_ELEMENT || !g.data("cke-bookmark")) if (g.type == CKEDITOR.NODE_ELEMENT && !g.isEmptyInlineRemoveable() || g.type == CKEDITOR.NODE_TEXT && CKEDITOR.tools.trim(g.getText())) return !1 } return !0 }, hasAttributes: CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks) ? function() { for (var a = this.$.attributes, b = 0; b < a.length; b++) { var c = a[b]; switch (c.nodeName) { case "class": if (this.getAttribute("class")) return !0; case "data-cke-expando": continue; default: if (c.specified) return !0 } } return !1 } : function() { var a = this.$.attributes, b = a.length, c = { "data-cke-expando": 1, _moz_dirty: 1 }; return 0 < b && (2 < b || !c[a[0].nodeName] || 2 == b && !c[a[1].nodeName]) }, hasAttribute: function() { function a(b) { var d = this.$.attributes.getNamedItem(b); if ("input" == this.getName()) switch (b) { case "class": return 0 < this.$.className.length; case "checked": return !!this.$.checked; case "value": return b = this.getAttribute("type"), "checkbox" == b || "radio" == b ? "on" != this.$.value : !!this.$.value } return d ? d.specified : !1 } return CKEDITOR.env.ie ? 8 > CKEDITOR.env.version ? function(b) { return "name" == b ? !!this.$.name : a.call(this, b) } : a : function(a) { return !!this.$.attributes.getNamedItem(a) } }(), hide: function() { this.setStyle("display", "none") }, moveChildren: function(a, b) { var c = this.$; a = a.$; if (c != a) { var g; if (b) for (; g = c.lastChild;) a.insertBefore(c.removeChild(g), a.firstChild); else for (; g = c.firstChild;) a.appendChild(c.removeChild(g)) } }, mergeSiblings: function() { function a(b, d, g) { if (d && d.type == CKEDITOR.NODE_ELEMENT) { for (var c = []; d.data("cke-bookmark") || d.isEmptyInlineRemoveable();) if (c.push(d), d = g ? d.getNext() : d.getPrevious(), !d || d.type != CKEDITOR.NODE_ELEMENT) return; if (b.isIdentical(d)) { for (var e = g ? b.getLast() : b.getFirst(); c.length;) c.shift().move(b, !g); d.moveChildren(b, !g); d.remove(); e && e.type == CKEDITOR.NODE_ELEMENT && e.mergeSiblings() } } } return function(b) { if (!1 === b || CKEDITOR.dtd.$removeEmpty[this.getName()] || this.is("a")) a(this, this.getNext(), !0), a(this, this.getPrevious()) } }(), show: function() { this.setStyles({ display: "", visibility: "" }) }, setAttribute: function() { var a = function(a, b) { this.$.setAttribute(a, b); return this }; return CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks) ? function(b, c) { "class" == b ? this.$.className = c : "style" == b ? this.$.style.cssText = c : "tabindex" == b ? this.$.tabIndex = c : "checked" == b ? this.$.checked = c : "contenteditable" == b ? a.call(this, "contentEditable", c) : a.apply(this, arguments); return this } : CKEDITOR.env.ie8Compat && CKEDITOR.env.secure ? function(b, c) { if ("src" == b && c.match(/^http:\/\//)) try { a.apply(this, arguments) } catch (g) {} else a.apply(this, arguments); return this } : a }(), setAttributes: function(a) { for (var b in a) this.setAttribute(b, a[b]); return this }, setValue: function(a) { this.$.value = a; return this }, removeAttribute: function() { var a = function(a) { this.$.removeAttribute(a) }; return CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks) ? function(a) { "class" == a ? a = "className" : "tabindex" == a ? a = "tabIndex" : "contenteditable" == a && (a = "contentEditable"); this.$.removeAttribute(a) } : a }(), removeAttributes: function(a) { if (CKEDITOR.tools.isArray(a)) for (var b = 0; b < a.length; b++) this.removeAttribute(a[b]); else for (b in a = a || this.getAttributes(), a) a.hasOwnProperty(b) && this.removeAttribute(b) }, removeStyle: function(a) { var b = this.$.style; if (b.removeProperty || "border" != a && "margin" != a && "padding" != a) b.removeProperty ? b.removeProperty(a) : b.removeAttribute(CKEDITOR.tools.cssStyleToDomStyle(a)), this.$.style.cssText || this.removeAttribute("style"); else { var c = ["top", "left", "right", "bottom"], g; "border" == a && (g = ["color", "style", "width"]); for (var b = [], e = 0; e < c.length; e++) if (g) for (var f = 0; f < g.length; f++) b.push([a, c[e], g[f]].join("-")); else b.push([a, c[e]].join("-")); for (a = 0; a < b.length; a++) this.removeStyle(b[a]) } }, setStyle: function(a, b) { this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)] = b; return this }, setStyles: function(a) { for (var b in a) this.setStyle(b, a[b]); return this }, setOpacity: function(a) { CKEDITOR.env.ie && 9 > CKEDITOR.env.version ? (a = Math.round(100 * a), this.setStyle("filter", 100 <= a ? "" : "progid:DXImageTransform.Microsoft.Alpha(opacity\x3d" + a + ")")) : this.setStyle("opacity", a) }, unselectable: function() { this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", "none")); if (CKEDITOR.env.ie) { this.setAttribute("unselectable", "on"); for (var a, b = this.getElementsByTag("*"), c = 0, g = b.count(); c < g; c++) a = b.getItem(c), a.setAttribute("unselectable", "on") } }, getPositionedAncestor: function() { for (var a = this; "html" != a.getName();) { if ("static" != a.getComputedStyle("position")) return a; a = a.getParent() } return null }, getDocumentPosition: function(a) { var b = 0, c = 0, g = this.getDocument(), e = g.getBody(), f = "BackCompat" == g.$.compatMode; if (document.documentElement.getBoundingClientRect && (CKEDITOR.env.ie ? 8 !== CKEDITOR.env.version : 1)) { var m = this.$.getBoundingClientRect(), l = g.$.documentElement, u = l.clientTop || e.$.clientTop || 0, r = l.clientLeft || e.$.clientLeft || 0, p = !0; CKEDITOR.env.ie && (p = g.getDocumentElement().contains(this), g = g.getBody().contains(this), p = f && g || !f && p); p && (CKEDITOR.env.webkit || CKEDITOR.env.ie && 12 <= CKEDITOR.env.version ? (b = e.$.scrollLeft || l.scrollLeft, c = e.$.scrollTop || l.scrollTop) : (c = f ? e.$ : l, b = c.scrollLeft, c = c.scrollTop), b = m.left + b - r, c = m.top + c - u) } else for (u = this, r = null; u && "body" != u.getName() && "html" != u.getName();) { b += u.$.offsetLeft - u.$.scrollLeft; c += u.$.offsetTop - u.$.scrollTop; u.equals(this) || (b += u.$.clientLeft || 0, c += u.$.clientTop || 0); for (; r && !r.equals(u);) b -= r.$.scrollLeft, c -= r.$.scrollTop, r = r.getParent(); r = u; u = (m = u.$.offsetParent) ? new CKEDITOR.dom.element(m) : null } a && (m = this.getWindow(), u = a.getWindow(), !m.equals(u) && m.$.frameElement && (a = (new CKEDITOR.dom.element(m.$.frameElement)).getDocumentPosition(a), b += a.x, c += a.y)); document.documentElement.getBoundingClientRect || !CKEDITOR.env.gecko || f || (b += this.$.clientLeft ? 1 : 0, c += this.$.clientTop ? 1 : 0); return { x: b, y: c } }, scrollIntoView: function(a) { var b = this.getParent(); if (b) { do if ((b.$.clientWidth && b.$.clientWidth < b.$.scrollWidth || b.$.clientHeight && b.$.clientHeight < b.$.scrollHeight) && !b.is("body") && this.scrollIntoParent(b, a, 1), b.is("html")) { var c = b.getWindow(); try { var g = c.$.frameElement; g && (b = new CKEDITOR.dom.element(g)) } catch (e) {} } while (b = b.getParent()) } }, scrollIntoParent: function(a, b, c) { var g, e, f, m; function l(b, g) { /body|html/.test(a.getName()) ? a.getWindow().$.scrollBy(b, g) : (a.$.scrollLeft += b, a.$.scrollTop += g) } function u(a, b) { var g = { x: 0, y: 0 }; if (!a.is(p ? "body" : "html")) { var c = a.$.getBoundingClientRect(); g.x = c.left; g.y = c.top } c = a.getWindow(); c.equals(b) || (c = u(CKEDITOR.dom.element.get(c.$.frameElement), b), g.x += c.x, g.y += c.y); return g } function r(a, b) { return parseInt(a.getComputedStyle("margin-" + b) || 0, 10) || 0 }!a && (a = this.getWindow()); f = a.getDocument(); var p = "BackCompat" == f.$.compatMode; a instanceof CKEDITOR.dom.window && (a = p ? f.getBody() : f.getDocumentElement()); CKEDITOR.env.webkit && (f = this.getEditor(!1)) && (f._.previousScrollTop = null); f = a.getWindow(); e = u(this, f); var z = u(a, f), B = this.$.offsetHeight; g = this.$.offsetWidth; var t = a.$.clientHeight, y = a.$.clientWidth; f = e.x - r(this, "left") - z.x || 0; m = e.y - r(this, "top") - z.y || 0; g = e.x + g + r(this, "right") - (z.x + y) || 0; e = e.y + B + r(this, "bottom") - (z.y + t) || 0; (0 > m || 0 < e) && l(0, !0 === b ? m : !1 === b ? e : 0 > m ? m : e); c && (0 > f || 0 < g) && l(0 > f ? f : g, 0) }, setState: function(a, b, c) { b = b || "cke"; switch (a) { case CKEDITOR.TRISTATE_ON: this.addClass(b + "_on"); this.removeClass(b + "_off"); this.removeClass(b + "_disabled"); c && this.setAttribute("aria-pressed", !0); c && this.removeAttribute("aria-disabled"); break; case CKEDITOR.TRISTATE_DISABLED: this.addClass(b + "_disabled"); this.removeClass(b + "_off"); this.removeClass(b + "_on"); c && this.setAttribute("aria-disabled", !0); c && this.removeAttribute("aria-pressed"); break; default: this.addClass(b + "_off"), this.removeClass(b + "_on"), this.removeClass(b + "_disabled"), c && this.removeAttribute("aria-pressed"), c && this.removeAttribute("aria-disabled") } }, getFrameDocument: function() { var a = this.$; try { a.contentWindow.document } catch (b) { a.src = a.src } return a && new CKEDITOR.dom.document(a.contentWindow.document) }, copyAttributes: function(a, b) { var c = this.$.attributes; b = b || {}; for (var g = 0; g < c.length; g++) { var e = c[g], f = e.nodeName.toLowerCase(), m; if (!(f in b)) if ("checked" == f && (m = this.getAttribute(f))) a.setAttribute(f, m); else if (!CKEDITOR.env.ie || this.hasAttribute(f)) m = this.getAttribute(f), null === m && (m = e.nodeValue), a.setAttribute(f, m) } "" !== this.$.style.cssText && (a.$.style.cssText = this.$.style.cssText) }, renameNode: function(a) { if (this.getName() != a) { var b = this.getDocument(); a = new CKEDITOR.dom.element(a, b); this.copyAttributes(a); this.moveChildren(a); this.getParent(!0) && this.$.parentNode.replaceChild(a.$, this.$); a.$["data-cke-expando"] = this.$["data-cke-expando"]; this.$ = a.$; delete this.getName } }, getChild: function() { function a(b, c) { var g = b.childNodes; if (0 <= c && c < g.length) return g[c] } return function(b) { var c = this.$; if (b.slice) for (b = b.slice(); 0 < b.length && c;) c = a(c, b.shift()); else c = a(c, b); return c ? new CKEDITOR.dom.node(c) : null } }(), getChildCount: function() { return this.$.childNodes.length }, disableContextMenu: function() { function a(b) { return b.type == CKEDITOR.NODE_ELEMENT && b.hasClass("cke_enable_context_menu") } this.on("contextmenu", function(b) { b.data.getTarget().getAscendant(a, !0) || b.data.preventDefault() }) }, getDirection: function(a) { return a ? this.getComputedStyle("direction") || this.getDirection() || this.getParent() && this.getParent().getDirection(1) || this.getDocument().$.dir || "ltr" : this.getStyle("direction") || this.getAttribute("dir") }, data: function(a, b) { a = "data-" + a; if (void 0 === b) return this.getAttribute(a); !1 === b ? this.removeAttribute(a) : this.setAttribute(a, b); return null }, getEditor: function(a) { var b = CKEDITOR.instances, c, g, e; a = a || void 0 === a; for (c in b) if (g = b[c], g.element.equals(this) && g.elementMode != CKEDITOR.ELEMENT_MODE_APPENDTO || !a && (e = g.editable()) && (e.equals(this) || e.contains(this))) return g; return null }, find: function(a) { var c = f(this); a = new CKEDITOR.dom.nodeList(this.$.querySelectorAll(b(this, a))); c(); return a }, findOne: function(a) { var c = f(this); a = this.$.querySelector(b(this, a)); c(); return a ? new CKEDITOR.dom.element(a) : null }, forEach: function(a, b, c) { if (!(c || b && this.type != b)) var g = a(this); if (!1 !== g) { c = this.getChildren(); for (var e = 0; e < c.count(); e++) g = c.getItem(e), g.type == CKEDITOR.NODE_ELEMENT ? g.forEach(a, b) : b && g.type != b || a(g) } } }); var l = { width: ["border-left-width", "border-right-width", "padding-left", "padding-right"], height: ["border-top-width", "border-bottom-width", "padding-top", "padding-bottom"] }; CKEDITOR.dom.element.prototype.setSize = function(a, b, e) { "number" == typeof b && (!e || CKEDITOR.env.ie && CKEDITOR.env.quirks || (b -= c.call(this, a)), this.setStyle(a, b + "px")) }; CKEDITOR.dom.element.prototype.getSize = function(a, b) { var e = Math.max(this.$["offset" + CKEDITOR.tools.capitalize(a)], this.$["client" + CKEDITOR.tools.capitalize(a)]) || 0; b && (e -= c.call(this, a)); return e } }(), CKEDITOR.dom.documentFragment = function(a) { a = a || CKEDITOR.document; this.$ = a.type == CKEDITOR.NODE_DOCUMENT ? a.$.createDocumentFragment() : a }, CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype, CKEDITOR.dom.element.prototype, { type: CKEDITOR.NODE_DOCUMENT_FRAGMENT, insertAfterNode: function(a) { a = a.$; a.parentNode.insertBefore(this.$, a.nextSibling) }, getHtml: function() { var a = new CKEDITOR.dom.element("div"); this.clone(1, 1).appendTo(a); return a.getHtml().replace(/\s*data-cke-expando=".*?"/g, "") } }, !0, { append: 1, appendBogus: 1, clone: 1, getFirst: 1, getHtml: 1, getLast: 1, getParent: 1, getNext: 1, getPrevious: 1, appendTo: 1, moveChildren: 1, insertBefore: 1, insertAfterNode: 1, replace: 1, trim: 1, type: 1, ltrim: 1, rtrim: 1, getDocument: 1, getChildCount: 1, getChild: 1, getChildren: 1 }), function() { function a(a, b) { var g = this.range; if (this._.end) return null; if (!this._.start) { this._.start = 1; if (g.collapsed) return this.end(), null; g.optimize() } var c, d = g.startContainer; c = g.endContainer; var e = g.startOffset, k = g.endOffset, f, t = this.guard, h = this.type, n = a ? "getPreviousSourceNode" : "getNextSourceNode"; if (!a && !this._.guardLTR) { var m = c.type == CKEDITOR.NODE_ELEMENT ? c : c.getParent(), l = c.type == CKEDITOR.NODE_ELEMENT ? c.getChild(k) : c.getNext(); this._.guardLTR = function(a, b) { return (!b || !m.equals(a)) && (!l || !a.equals(l)) && (a.type != CKEDITOR.NODE_ELEMENT || !b || !a.equals(g.root)) } } if (a && !this._.guardRTL) { var C = d.type == CKEDITOR.NODE_ELEMENT ? d : d.getParent(), F = d.type == CKEDITOR.NODE_ELEMENT ? e ? d.getChild(e - 1) : null : d.getPrevious(); this._.guardRTL = function(a, b) { return (!b || !C.equals(a)) && (!F || !a.equals(F)) && (a.type != CKEDITOR.NODE_ELEMENT || !b || !a.equals(g.root)) } } var G = a ? this._.guardRTL : this._.guardLTR; f = t ? function(a, b) { return !1 === G(a, b) ? !1 : t(a, b) } : G; this.current ? c = this.current[n](!1, h, f) : (a ? c.type == CKEDITOR.NODE_ELEMENT && (c = 0 < k ? c.getChild(k - 1) : !1 === f(c, !0) ? null : c.getPreviousSourceNode(!0, h, f)) : (c = d, c.type == CKEDITOR.NODE_ELEMENT && ((c = c.getChild(e)) || (c = !1 === f(d, !0) ? null : d.getNextSourceNode(!0, h, f)))), c && !1 === f(c) && (c = null)); for (; c && !this._.end;) { this.current = c; if (!this.evaluator || !1 !== this.evaluator(c)) { if (!b) return c } else if (b && this.evaluator) return !1; c = c[n](!1, h, f) } this.end(); return this.current = null } function f(b) { for (var g, c = null; g = a.call(this, b);) c = g; return c } CKEDITOR.dom.walker = CKEDITOR.tools.createClass({ $: function(a) { this.range = a; this._ = {} }, proto: { end: function() { this._.end = 1 }, next: function() { return a.call(this) }, previous: function() { return a.call(this, 1) }, checkForward: function() { return !1 !== a.call(this, 0, 1) }, checkBackward: function() { return !1 !== a.call(this, 1, 1) }, lastForward: function() { return f.call(this) }, lastBackward: function() { return f.call(this, 1) }, reset: function() { delete this.current; this._ = {} } } }); var b = { block: 1, "list-item": 1, table: 1, "table-row-group": 1, "table-header-group": 1, "table-footer-group": 1, "table-row": 1, "table-column-group": 1, "table-column": 1, "table-cell": 1, "table-caption": 1 }, c = { absolute: 1, fixed: 1 }; CKEDITOR.dom.element.prototype.isBlockBoundary = function(a) { return "none" != this.getComputedStyle("float") || this.getComputedStyle("position") in c || !b[this.getComputedStyle("display")] ? !!(this.is(CKEDITOR.dtd.$block) || a && this.is(a)) : !0 }; CKEDITOR.dom.walker.blockBoundary = function(a) { return function(b) { return !(b.type == CKEDITOR.NODE_ELEMENT && b.isBlockBoundary(a)) } }; CKEDITOR.dom.walker.listItemBoundary = function() { return this.blockBoundary({ br: 1 }) }; CKEDITOR.dom.walker.bookmark = function(a, b) { function g(a) { return a && a.getName && "span" == a.getName() && a.data("cke-bookmark") } return function(c) { var d, e; d = c && c.type != CKEDITOR.NODE_ELEMENT && (e = c.getParent()) && g(e); d = a ? d : d || g(c); return !!(b ^ d) } }; CKEDITOR.dom.walker.whitespaces = function(a) { return function(b) { var g; b && b.type == CKEDITOR.NODE_TEXT && (g = !CKEDITOR.tools.trim(b.getText()) || CKEDITOR.env.webkit && b.getText() == CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE); return !!(a ^ g) } }; CKEDITOR.dom.walker.invisible = function(a) { var b = CKEDITOR.dom.walker.whitespaces(), g = CKEDITOR.env.webkit ? 1 : 0; return function(c) { b(c) ? c = 1 : (c.type == CKEDITOR.NODE_TEXT && (c = c.getParent()), c = c.$.offsetWidth <= g); return !!(a ^ c) } }; CKEDITOR.dom.walker.nodeType = function(a, b) { return function(g) { return !!(b ^ g.type == a) } }; CKEDITOR.dom.walker.bogus = function(a) { function b(a) { return !m(a) && !l(a) } return function(g) { var c = CKEDITOR.env.needsBrFiller ? g.is && g.is("br") : g.getText && e.test(g.getText()); c && (c = g.getParent(), g = g.getNext(b), c = c.isBlockBoundary() && (!g || g.type == CKEDITOR.NODE_ELEMENT && g.isBlockBoundary())); return !!(a ^ c) } }; CKEDITOR.dom.walker.temp = function(a) { return function(b) { b.type != CKEDITOR.NODE_ELEMENT && (b = b.getParent()); b = b && b.hasAttribute("data-cke-temp"); return !!(a ^ b) } }; var e = /^[\t\r\n ]*(?: |\xa0)$/, m = CKEDITOR.dom.walker.whitespaces(), l = CKEDITOR.dom.walker.bookmark(), d = CKEDITOR.dom.walker.temp(), h = function(a) { return l(a) || m(a) || a.type == CKEDITOR.NODE_ELEMENT && a.is(CKEDITOR.dtd.$inline) && !a.is(CKEDITOR.dtd.$empty) }; CKEDITOR.dom.walker.ignored = function(a) { return function(b) { b = m(b) || l(b) || d(b); return !!(a ^ b) } }; var k = CKEDITOR.dom.walker.ignored(); CKEDITOR.dom.walker.empty = function(a) { return function(b) { for (var g = 0, c = b.getChildCount(); g < c; ++g) if (!k(b.getChild(g))) return !!a; return !a } }; var g = CKEDITOR.dom.walker.empty(), n = CKEDITOR.dom.walker.validEmptyBlockContainers = CKEDITOR.tools.extend(function(a) { var b = {}, g; for (g in a) CKEDITOR.dtd[g]["#"] && (b[g] = 1); return b }(CKEDITOR.dtd.$block), { caption: 1, td: 1, th: 1 }); CKEDITOR.dom.walker.editable = function(a) { return function(b) { b = k(b) ? !1 : b.type == CKEDITOR.NODE_TEXT || b.type == CKEDITOR.NODE_ELEMENT && (b.is(CKEDITOR.dtd.$inline) || b.is("hr") || "false" == b.getAttribute("contenteditable") || !CKEDITOR.env.needsBrFiller && b.is(n) && g(b)) ? !0 : !1; return !!(a ^ b) } }; CKEDITOR.dom.element.prototype.getBogus = function() { var a = this; do a = a.getPreviousSourceNode(); while (h(a)); return a && (CKEDITOR.env.needsBrFiller ? a.is && a.is("br") : a.getText && e.test(a.getText())) ? a : !1 } }(), CKEDITOR.dom.range = function(a) { this.endOffset = this.endContainer = this.startOffset = this.startContainer = null; this.collapsed = !0; var f = a instanceof CKEDITOR.dom.document; this.document = f ? a : a.getDocument(); this.root = f ? a.getBody() : a }, function() { function a(a) { a.collapsed = a.startContainer && a.endContainer && a.startContainer.equals(a.endContainer) && a.startOffset == a.endOffset } function f(a, b, c, d, e) { function k(a, b, g, c) { var d = g ? a.getPrevious() : a.getNext(); if (c && m) return d; t || c ? b.append(a.clone(!0, e), g) : (a.remove(), l && b.append(a)); return d } function f() { var a, b, g, c = Math.min(J.length, E.length); for (a = 0; a < c; a++) if (b = J[a], g = E[a], !b.equals(g)) return a; return a - 1 } function h() { var b = S - 1, c = G && I && !y.equals(D); b < O - 1 || b < T - 1 || c ? (c ? a.moveToPosition(D, CKEDITOR.POSITION_BEFORE_START) : T == b + 1 && F ? a.moveToPosition(E[b], CKEDITOR.POSITION_BEFORE_END) : a.moveToPosition(E[b + 1], CKEDITOR.POSITION_BEFORE_START), d && (b = J[b + 1]) && b.type == CKEDITOR.NODE_ELEMENT && (c = CKEDITOR.dom.element.createFromHtml('\x3cspan data-cke-bookmark\x3d"1" style\x3d"display:none"\x3e\x26nbsp;\x3c/span\x3e', a.document), c.insertAfter(b), b.mergeSiblings(!1), a.moveToBookmark({ startNode: c }))) : a.collapse(!0) } a.optimizeBookmark(); var m = 0 === b, l = 1 == b, t = 2 == b; b = t || l; var y = a.startContainer, D = a.endContainer, x = a.startOffset, A = a.endOffset, C, F, G, I, H, K; if (t && D.type == CKEDITOR.NODE_TEXT && y.equals(D)) y = a.document.createText(y.substring(x, A)), c.append(y); else { D.type == CKEDITOR.NODE_TEXT ? t ? K = !0 : D = D.split(A) : 0 < D.getChildCount() ? A >= D.getChildCount() ? (D = D.getChild(A - 1), F = !0) : D = D.getChild(A) : I = F = !0; y.type == CKEDITOR.NODE_TEXT ? t ? H = !0 : y.split(x) : 0 < y.getChildCount() ? 0 === x ? (y = y.getChild(x), C = !0) : y = y.getChild(x - 1) : G = C = !0; for (var J = y.getParents(), E = D.getParents(), S = f(), O = J.length - 1, T = E.length - 1, M = c, V, da, ca, ga = -1, N = S; N <= O; N++) { da = J[N]; ca = da.getNext(); for (N != O || da.equals(E[N]) && O < T ? b && (V = M.append(da.clone(0, e))) : C ? k(da, M, !1, G) : H && M.append(a.document.createText(da.substring(x))); ca;) { if (ca.equals(E[N])) { ga = N; break } ca = k(ca, M) } M = V } M = c; for (N = S; N <= T; N++) if (c = E[N], ca = c.getPrevious(), c.equals(J[N])) b && (M = M.getChild(0)); else { N != T || c.equals(J[N]) && T < O ? b && (V = M.append(c.clone(0, e))) : F ? k(c, M, !1, I) : K && M.append(a.document.createText(c.substring(0, A))); if (N > ga) for (; ca;) ca = k(ca, M, !0); M = V } t || h() } } function b() { var a = !1, b = CKEDITOR.dom.walker.whitespaces(), c = CKEDITOR.dom.walker.bookmark(!0), d = CKEDITOR.dom.walker.bogus(); return function(e) { return c(e) || b(e) ? !0 : d(e) && !a ? a = !0 : e.type == CKEDITOR.NODE_TEXT && (e.hasAscendant("pre") || CKEDITOR.tools.trim(e.getText()).length) || e.type == CKEDITOR.NODE_ELEMENT && !e.is(m) ? !1 : !0 } } function c(a) { var b = CKEDITOR.dom.walker.whitespaces(), c = CKEDITOR.dom.walker.bookmark(1); return function(d) { return c(d) || b(d) ? !0 : !a && l(d) || d.type == CKEDITOR.NODE_ELEMENT && d.is(CKEDITOR.dtd.$removeEmpty) } } function e(a) { return function() { var b; return this[a ? "getPreviousNode" : "getNextNode"](function(a) { !b && k(a) && (b = a); return h(a) && !(l(a) && a.equals(b)) }) } } var m = { abbr: 1, acronym: 1, b: 1, bdo: 1, big: 1, cite: 1, code: 1, del: 1, dfn: 1, em: 1, font: 1, i: 1, ins: 1, label: 1, kbd: 1, q: 1, samp: 1, small: 1, span: 1, strike: 1, strong: 1, sub: 1, sup: 1, tt: 1, u: 1, "var": 1 }, l = CKEDITOR.dom.walker.bogus(), d = /^[\t\r\n ]*(?: |\xa0)$/, h = CKEDITOR.dom.walker.editable(), k = CKEDITOR.dom.walker.ignored(!0); CKEDITOR.dom.range.prototype = { clone: function() { var a = new CKEDITOR.dom.range(this.root); a._setStartContainer(this.startContainer); a.startOffset = this.startOffset; a._setEndContainer(this.endContainer); a.endOffset = this.endOffset; a.collapsed = this.collapsed; return a }, collapse: function(a) { a ? (this._setEndContainer(this.startContainer), this.endOffset = this.startOffset) : (this._setStartContainer(this.endContainer), this.startOffset = this.endOffset); this.collapsed = !0 }, cloneContents: function(a) { var b = new CKEDITOR.dom.documentFragment(this.document); this.collapsed || f(this, 2, b, !1, "undefined" == typeof a ? !0 : a); return b }, deleteContents: function(a) { this.collapsed || f(this, 0, null, a) }, extractContents: function(a, b) { var c = new CKEDITOR.dom.documentFragment(this.document); this.collapsed || f(this, 1, c, a, "undefined" == typeof b ? !0 : b); return c }, createBookmark: function(a) { var b, c, d, e, k = this.collapsed; b = this.document.createElement("span"); b.data("cke-bookmark", 1); b.setStyle("display", "none"); b.setHtml("\x26nbsp;"); a && (d = "cke_bm_" + CKEDITOR.tools.getNextNumber(), b.setAttribute("id", d + (k ? "C" : "S"))); k || (c = b.clone(), c.setHtml("\x26nbsp;"), a && c.setAttribute("id", d + "E"), e = this.clone(), e.collapse(), e.insertNode(c)); e = this.clone(); e.collapse(!0); e.insertNode(b); c ? (this.setStartAfter(b), this.setEndBefore(c)) : this.moveToPosition(b, CKEDITOR.POSITION_AFTER_END); return { startNode: a ? d + (k ? "C" : "S") : b, endNode: a ? d + "E" : c, serializable: a, collapsed: k } }, createBookmark2: function() { function a(b) { var g = b.container, d = b.offset, e; e = g; var k = d; e = e.type != CKEDITOR.NODE_ELEMENT || 0 === k || k == e.getChildCount() ? 0 : e.getChild(k - 1).type == CKEDITOR.NODE_TEXT && e.getChild(k).type == CKEDITOR.NODE_TEXT; e && (g = g.getChild(d - 1), d = g.getLength()); if (g.type == CKEDITOR.NODE_ELEMENT && 0 < d) { a: { for (e = g; d--;) if (k = e.getChild(d).getIndex(!0), 0 <= k) { d = k; break a } d = -1 } d += 1 } if (g.type == CKEDITOR.NODE_TEXT) { e = g; for (k = 0; (e = e.getPrevious()) && e.type == CKEDITOR.NODE_TEXT;) k += e.getText().replace(CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE, "").length; e = k; g.getText() ? d += e : (k = g.getPrevious(c), e ? (d = e, g = k ? k.getNext() : g.getParent().getFirst()) : (g = g.getParent(), d = k ? k.getIndex(!0) + 1 : 0)) } b.container = g; b.offset = d } function b(a, g) { var c = g.getCustomData("cke-fillingChar"); if (c) { var d = a.container; c.equals(d) && (a.offset -= CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE.length, 0 >= a.offset && (a.offset = d.getIndex(), a.container = d.getParent())) } } var c = CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT, !0); return function(c) { var d = this.collapsed, e = { container: this.startContainer, offset: this.startOffset }, k = { container: this.endContainer, offset: this.endOffset }; c && (a(e), b(e, this.root), d || (a(k), b(k, this.root))); return { start: e.container.getAddress(c), end: d ? null : k.container.getAddress(c), startOffset: e.offset, endOffset: k.offset, normalized: c, collapsed: d, is2: !0 } } }(), moveToBookmark: function(a) { if (a.is2) { var b = this.document.getByAddress(a.start, a.normalized), c = a.startOffset, d = a.end && this.document.getByAddress(a.end, a.normalized); a = a.endOffset; this.setStart(b, c); d ? this.setEnd(d, a) : this.collapse(!0) } else b = (c = a.serializable) ? this.document.getById(a.startNode) : a.startNode, a = c ? this.document.getById(a.endNode) : a.endNode, this.setStartBefore(b), b.remove(), a ? (this.setEndBefore(a), a.remove()) : this.collapse(!0) }, getBoundaryNodes: function() { var a = this.startContainer, b = this.endContainer, c = this.startOffset, d = this.endOffset, e; if (a.type == CKEDITOR.NODE_ELEMENT) if (e = a.getChildCount(), e > c) a = a.getChild(c); else if (1 > e) a = a.getPreviousSourceNode(); else { for (a = a.$; a.lastChild;) a = a.lastChild; a = new CKEDITOR.dom.node(a); a = a.getNextSourceNode() || a } if (b.type == CKEDITOR.NODE_ELEMENT) if (e = b.getChildCount(), e > d) b = b.getChild(d).getPreviousSourceNode(!0); else if (1 > e) b = b.getPreviousSourceNode(); else { for (b = b.$; b.lastChild;) b = b.lastChild; b = new CKEDITOR.dom.node(b) } a.getPosition(b) & CKEDITOR.POSITION_FOLLOWING && (a = b); return { startNode: a, endNode: b } }, getCommonAncestor: function(a, b) { var c = this.startContainer, d = this.endContainer, c = c.equals(d) ? a && c.type == CKEDITOR.NODE_ELEMENT && this.startOffset == this.endOffset - 1 ? c.getChild(this.startOffset) : c : c.getCommonAncestor(d); return b && !c.is ? c.getParent() : c }, optimize: function() { var a = this.startContainer, b = this.startOffset; a.type != CKEDITOR.NODE_ELEMENT && (b ? b >= a.getLength() && this.setStartAfter(a) : this.setStartBefore(a)); a = this.endContainer; b = this.endOffset; a.type != CKEDITOR.NODE_ELEMENT && (b ? b >= a.getLength() && this.setEndAfter(a) : this.setEndBefore(a)) }, optimizeBookmark: function() { var a = this.startContainer, b = this.endContainer; a.is && a.is("span") && a.data("cke-bookmark") && this.setStartAt(a, CKEDITOR.POSITION_BEFORE_START); b && b.is && b.is("span") && b.data("cke-bookmark") && this.setEndAt(b, CKEDITOR.POSITION_AFTER_END) }, trim: function(a, b) { var c = this.startContainer, d = this.startOffset, e = this.collapsed; if ((!a || e) && c && c.type == CKEDITOR.NODE_TEXT) { if (d) if (d >= c.getLength()) d = c.getIndex() + 1, c = c.getParent(); else { var k = c.split(d), d = c.getIndex() + 1, c = c.getParent(); this.startContainer.equals(this.endContainer) ? this.setEnd(k, this.endOffset - this.startOffset) : c.equals(this.endContainer) && (this.endOffset += 1) } else d = c.getIndex(), c = c.getParent(); this.setStart(c, d); if (e) { this.collapse(!0); return } } c = this.endContainer; d = this.endOffset; b || e || !c || c.type != CKEDITOR.NODE_TEXT || (d ? (d >= c.getLength() || c.split(d), d = c.getIndex() + 1) : d = c.getIndex(), c = c.getParent(), this.setEnd(c, d)) }, enlarge: function(a, b) { function c(a) { return a && a.type == CKEDITOR.NODE_ELEMENT && a.hasAttribute("contenteditable") ? null : a } var d = new RegExp(/[^\s\ufeff]/); switch (a) { case CKEDITOR.ENLARGE_INLINE: var e = 1; case CKEDITOR.ENLARGE_ELEMENT: var k = function(a, b) { var c = new CKEDITOR.dom.range(h); c.setStart(a, b); c.setEndAt(h, CKEDITOR.POSITION_BEFORE_END); var c = new CKEDITOR.dom.walker(c), g; for (c.guard = function(a) { return !(a.type == CKEDITOR.NODE_ELEMENT && a.isBlockBoundary()) }; g = c.next();) { if (g.type != CKEDITOR.NODE_TEXT) return !1; C = g != a ? g.getText() : g.substring(b); if (d.test(C)) return !1 } return !0 }; if (this.collapsed) break; var f = this.getCommonAncestor(), h = this.root, m, l, t, y, D, x = !1, A, C; A = this.startContainer; var F = this.startOffset; A.type == CKEDITOR.NODE_TEXT ? (F && (A = !CKEDITOR.tools.trim(A.substring(0, F)).length && A, x = !!A), A && ((y = A.getPrevious()) || (t = A.getParent()))) : (F && (y = A.getChild(F - 1) || A.getLast()), y || (t = A)); for (t = c(t); t || y;) { if (t && !y) { !D && t.equals(f) && (D = !0); if (e ? t.isBlockBoundary() : !h.contains(t)) break; x && "inline" == t.getComputedStyle("display") || (x = !1, D ? m = t : this.setStartBefore(t)); y = t.getPrevious() } for (; y;) if (A = !1, y.type == CKEDITOR.NODE_COMMENT) y = y.getPrevious(); else { if (y.type == CKEDITOR.NODE_TEXT) C = y.getText(), d.test(C) && (y = null), A = /[\s\ufeff]$/.test(C); else if ((y.$.offsetWidth > (CKEDITOR.env.webkit ? 1 : 0) || b && y.is("br")) && !y.data("cke-bookmark")) if (x && CKEDITOR.dtd.$removeEmpty[y.getName()]) { C = y.getText(); if (d.test(C)) y = null; else for (var F = y.$.getElementsByTagName("*"), G = 0, I; I = F[G++];) if (!CKEDITOR.dtd.$removeEmpty[I.nodeName.toLowerCase()]) { y = null; break } y && (A = !!C.length) } else y = null; A && (x ? D ? m = t : t && this.setStartBefore(t) : x = !0); if (y) { A = y.getPrevious(); if (!t && !A) { t = y; y = null; break } y = A } else t = null } t && (t = c(t.getParent())) } A = this.endContainer; F = this.endOffset; t = y = null; D = x = !1; A.type == CKEDITOR.NODE_TEXT ? CKEDITOR.tools.trim(A.substring(F)).length ? x = !0 : (x = !A.getLength(), F == A.getLength() ? (y = A.getNext()) || (t = A.getParent()) : k(A, F) && (t = A.getParent())) : (y = A.getChild(F)) || (t = A); for (; t || y;) { if (t && !y) { !D && t.equals(f) && (D = !0); if (e ? t.isBlockBoundary() : !h.contains(t)) break; x && "inline" == t.getComputedStyle("display") || (x = !1, D ? l = t : t && this.setEndAfter(t)); y = t.getNext() } for (; y;) { A = !1; if (y.type == CKEDITOR.NODE_TEXT) C = y.getText(), k(y, 0) || (y = null), A = /^[\s\ufeff]/.test(C); else if (y.type == CKEDITOR.NODE_ELEMENT) { if ((0 < y.$.offsetWidth || b && y.is("br")) && !y.data("cke-bookmark")) if (x && CKEDITOR.dtd.$removeEmpty[y.getName()]) { C = y.getText(); if (d.test(C)) y = null; else for (F = y.$.getElementsByTagName("*"), G = 0; I = F[G++];) if (!CKEDITOR.dtd.$removeEmpty[I.nodeName.toLowerCase()]) { y = null; break } y && (A = !!C.length) } else y = null } else A = 1; A && x && (D ? l = t : this.setEndAfter(t)); if (y) { A = y.getNext(); if (!t && !A) { t = y; y = null; break } y = A } else t = null } t && (t = c(t.getParent())) } m && l && (f = m.contains(l) ? l : m, this.setStartBefore(f), this.setEndAfter(f)); break; case CKEDITOR.ENLARGE_BLOCK_CONTENTS: case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS: t = new CKEDITOR.dom.range(this.root); h = this.root; t.setStartAt(h, CKEDITOR.POSITION_AFTER_START); t.setEnd(this.startContainer, this.startOffset); t = new CKEDITOR.dom.walker(t); var H, K, J = CKEDITOR.dom.walker.blockBoundary(a == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ? { br: 1 } : null), E = null, S = function(a) { if (a.type == CKEDITOR.NODE_ELEMENT && "false" == a.getAttribute("contenteditable")) if (E) { if (E.equals(a)) { E = null; return } } else E = a; else if (E) return; var b = J(a); b || (H = a); return b }, e = function(a) { var b = S(a); !b && a.is && a.is("br") && (K = a); return b }; t.guard = S; t = t.lastBackward(); H = H || h; this.setStartAt(H, !H.is("br") && (!t && this.checkStartOfBlock() || t && H.contains(t)) ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_AFTER_END); if (a == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS) { t = this.clone(); t = new CKEDITOR.dom.walker(t); var O = CKEDITOR.dom.walker.whitespaces(), T = CKEDITOR.dom.walker.bookmark(); t.evaluator = function(a) { return !O(a) && !T(a) }; if ((t = t.previous()) && t.type == CKEDITOR.NODE_ELEMENT && t.is("br")) break } t = this.clone(); t.collapse(); t.setEndAt(h, CKEDITOR.POSITION_BEFORE_END); t = new CKEDITOR.dom.walker(t); t.guard = a == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ? e : S; H = E = K = null; t = t.lastForward(); H = H || h; this.setEndAt(H, !t && this.checkEndOfBlock() || t && H.contains(t) ? CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_BEFORE_START); K && this.setEndAfter(K) } }, shrink: function(a, b, c) { if (!this.collapsed) { a = a || CKEDITOR.SHRINK_TEXT; var d = this.clone(), e = this.startContainer, k = this.endContainer, f = this.startOffset, h = this.endOffset, m = 1, l = 1; e && e.type == CKEDITOR.NODE_TEXT && (f ? f >= e.getLength() ? d.setStartAfter(e) : (d.setStartBefore(e), m = 0) : d.setStartBefore(e)); k && k.type == CKEDITOR.NODE_TEXT && (h ? h >= k.getLength() ? d.setEndAfter(k) : (d.setEndAfter(k), l = 0) : d.setEndBefore(k)); var d = new CKEDITOR.dom.walker(d), t = CKEDITOR.dom.walker.bookmark(); d.evaluator = function(b) { return b.type == (a == CKEDITOR.SHRINK_ELEMENT ? CKEDITOR.NODE_ELEMENT : CKEDITOR.NODE_TEXT) }; var y; d.guard = function(b, d) { if (t(b)) return !0; if (a == CKEDITOR.SHRINK_ELEMENT && b.type == CKEDITOR.NODE_TEXT || d && b.equals(y) || !1 === c && b.type == CKEDITOR.NODE_ELEMENT && b.isBlockBoundary() || b.type == CKEDITOR.NODE_ELEMENT && b.hasAttribute("contenteditable")) return !1; d || b.type != CKEDITOR.NODE_ELEMENT || (y = b); return !0 }; m && (e = d[a == CKEDITOR.SHRINK_ELEMENT ? "lastForward" : "next"]()) && this.setStartAt(e, b ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_BEFORE_START); l && (d.reset(), (d = d[a == CKEDITOR.SHRINK_ELEMENT ? "lastBackward" : "previous"]()) && this.setEndAt(d, b ? CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_AFTER_END)); return !(!m && !l) } }, insertNode: function(a) { this.optimizeBookmark(); this.trim(!1, !0); var b = this.startContainer, c = b.getChild(this.startOffset); c ? a.insertBefore(c) : b.append(a); a.getParent() && a.getParent().equals(this.endContainer) && this.endOffset++; this.setStartBefore(a) }, moveToPosition: function(a, b) { this.setStartAt(a, b); this.collapse(!0) }, moveToRange: function(a) { this.setStart(a.startContainer, a.startOffset); this.setEnd(a.endContainer, a.endOffset) }, selectNodeContents: function(a) { this.setStart(a, 0); this.setEnd(a, a.type == CKEDITOR.NODE_TEXT ? a.getLength() : a.getChildCount()) }, setStart: function(b, c) { b.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$empty[b.getName()] && (c = b.getIndex(), b = b.getParent()); this._setStartContainer(b); this.startOffset = c; this.endContainer || (this._setEndContainer(b), this.endOffset = c); a(this) }, setEnd: function(b, c) { b.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$empty[b.getName()] && (c = b.getIndex() + 1, b = b.getParent()); this._setEndContainer(b); this.endOffset = c; this.startContainer || (this._setStartContainer(b), this.startOffset = c); a(this) }, setStartAfter: function(a) { this.setStart(a.getParent(), a.getIndex() + 1) }, setStartBefore: function(a) { this.setStart(a.getParent(), a.getIndex()) }, setEndAfter: function(a) { this.setEnd(a.getParent(), a.getIndex() + 1) }, setEndBefore: function(a) { this.setEnd(a.getParent(), a.getIndex()) }, setStartAt: function(b, c) { switch (c) { case CKEDITOR.POSITION_AFTER_START: this.setStart(b, 0); break; case CKEDITOR.POSITION_BEFORE_END: b.type == CKEDITOR.NODE_TEXT ? this.setStart(b, b.getLength()) : this.setStart(b, b.getChildCount()); break; case CKEDITOR.POSITION_BEFORE_START: this.setStartBefore(b); break; case CKEDITOR.POSITION_AFTER_END: this.setStartAfter(b) } a(this) }, setEndAt: function(b, c) { switch (c) { case CKEDITOR.POSITION_AFTER_START: this.setEnd(b, 0); break; case CKEDITOR.POSITION_BEFORE_END: b.type == CKEDITOR.NODE_TEXT ? this.setEnd(b, b.getLength()) : this.setEnd(b, b.getChildCount()); break; case CKEDITOR.POSITION_BEFORE_START: this.setEndBefore(b); break; case CKEDITOR.POSITION_AFTER_END: this.setEndAfter(b) } a(this) }, fixBlock: function(a, b) { var c = this.createBookmark(), d = this.document.createElement(b); this.collapse(a); this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS); this.extractContents().appendTo(d); d.trim(); this.insertNode(d); var e = d.getBogus(); e && e.remove(); d.appendBogus(); this.moveToBookmark(c); return d }, splitBlock: function(a, b) { var c = new CKEDITOR.dom.elementPath(this.startContainer, this.root), d = new CKEDITOR.dom.elementPath(this.endContainer, this.root), e = c.block, k = d.block, f = null; if (!c.blockLimit.equals(d.blockLimit)) return null; "br" != a && (e || (e = this.fixBlock(!0, a), k = (new CKEDITOR.dom.elementPath(this.endContainer, this.root)).block), k || (k = this.fixBlock(!1, a))); c = e && this.checkStartOfBlock(); d = k && this.checkEndOfBlock(); this.deleteContents(); e && e.equals(k) && (d ? (f = new CKEDITOR.dom.elementPath(this.startContainer, this.root), this.moveToPosition(k, CKEDITOR.POSITION_AFTER_END), k = null) : c ? (f = new CKEDITOR.dom.elementPath(this.startContainer, this.root), this.moveToPosition(e, CKEDITOR.POSITION_BEFORE_START), e = null) : (k = this.splitElement(e, b || !1), e.is("ul", "ol") || e.appendBogus())); return { previousBlock: e, nextBlock: k, wasStartOfBlock: c, wasEndOfBlock: d, elementPath: f } }, splitElement: function(a, b) { if (!this.collapsed) return null; this.setEndAt(a, CKEDITOR.POSITION_BEFORE_END); var c = this.extractContents(!1, b || !1), d = a.clone(!1, b || !1); c.appendTo(d); d.insertAfter(a); this.moveToPosition(a, CKEDITOR.POSITION_AFTER_END); return d }, removeEmptyBlocksAtEnd: function() { function a(g) { return function(a) { return b(a) || c(a) || a.type == CKEDITOR.NODE_ELEMENT && a.isEmptyInlineRemoveable() || g.is("table") && a.is("caption") ? !1 : !0 } } var b = CKEDITOR.dom.walker.whitespaces(), c = CKEDITOR.dom.walker.bookmark(!1); return function(b) { for (var c = this.createBookmark(), d = this[b ? "endPath" : "startPath"](), e = d.block || d.blockLimit, k; e && !e.equals(d.root) && !e.getFirst(a(e));) k = e.getParent(), this[b ? "setEndAt" : "setStartAt"](e, CKEDITOR.POSITION_AFTER_END), e.remove(1), e = k; this.moveToBookmark(c) } }(), startPath: function() { return new CKEDITOR.dom.elementPath(this.startContainer, this.root) }, endPath: function() { return new CKEDITOR.dom.elementPath(this.endContainer, this.root) }, checkBoundaryOfElement: function(a, b) { var d = b == CKEDITOR.START, e = this.clone(); e.collapse(d); e[d ? "setStartAt" : "setEndAt"](a, d ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_BEFORE_END); e = new CKEDITOR.dom.walker(e); e.evaluator = c(d); return e[d ? "checkBackward" : "checkForward"]() }, checkStartOfBlock: function() { var a = this.startContainer, c = this.startOffset; CKEDITOR.env.ie && c && a.type == CKEDITOR.NODE_TEXT && (a = CKEDITOR.tools.ltrim(a.substring(0, c)), d.test(a) && this.trim(0, 1)); this.trim(); a = new CKEDITOR.dom.elementPath(this.startContainer, this.root); c = this.clone(); c.collapse(!0); c.setStartAt(a.block || a.blockLimit, CKEDITOR.POSITION_AFTER_START); a = new CKEDITOR.dom.walker(c); a.evaluator = b(); return a.checkBackward() }, checkEndOfBlock: function() { var a = this.endContainer, c = this.endOffset; CKEDITOR.env.ie && a.type == CKEDITOR.NODE_TEXT && (a = CKEDITOR.tools.rtrim(a.substring(c)), d.test(a) && this.trim(1, 0)); this.trim(); a = new CKEDITOR.dom.elementPath(this.endContainer, this.root); c = this.clone(); c.collapse(!1); c.setEndAt(a.block || a.blockLimit, CKEDITOR.POSITION_BEFORE_END); a = new CKEDITOR.dom.walker(c); a.evaluator = b(); return a.checkForward() }, getPreviousNode: function(a, b, c) { var d = this.clone(); d.collapse(1); d.setStartAt(c || this.root, CKEDITOR.POSITION_AFTER_START); c = new CKEDITOR.dom.walker(d); c.evaluator = a; c.guard = b; return c.previous() }, getNextNode: function(a, b, c) { var d = this.clone(); d.collapse(); d.setEndAt(c || this.root, CKEDITOR.POSITION_BEFORE_END); c = new CKEDITOR.dom.walker(d); c.evaluator = a; c.guard = b; return c.next() }, checkReadOnly: function() { function a(b, c) { for (; b;) { if (b.type == CKEDITOR.NODE_ELEMENT) { if ("false" == b.getAttribute("contentEditable") && !b.data("cke-editable")) return 0; if (b.is("html") || "true" == b.getAttribute("contentEditable") && (b.contains(c) || b.equals(c))) break } b = b.getParent() } return 1 } return function() { var b = this.startContainer, c = this.endContainer; return !(a(b, c) && a(c, b)) } }(), moveToElementEditablePosition: function(a, b) { if (a.type == CKEDITOR.NODE_ELEMENT && !a.isEditable(!1)) return this.moveToPosition(a, b ? CKEDITOR.POSITION_AFTER_END : CKEDITOR.POSITION_BEFORE_START), !0; for (var c = 0; a;) { if (a.type == CKEDITOR.NODE_TEXT) { b && this.endContainer && this.checkEndOfBlock() && d.test(a.getText()) ? this.moveToPosition(a, CKEDITOR.POSITION_BEFORE_START) : this.moveToPosition(a, b ? CKEDITOR.POSITION_AFTER_END : CKEDITOR.POSITION_BEFORE_START); c = 1; break } if (a.type == CKEDITOR.NODE_ELEMENT) if (a.isEditable()) this.moveToPosition(a, b ? CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_AFTER_START), c = 1; else if (b && a.is("br") && this.endContainer && this.checkEndOfBlock()) this.moveToPosition(a, CKEDITOR.POSITION_BEFORE_START); else if ("false" == a.getAttribute("contenteditable") && a.is(CKEDITOR.dtd.$block)) return this.setStartBefore(a), this.setEndAfter(a), !0; var e = a, f = c, h = void 0; e.type == CKEDITOR.NODE_ELEMENT && e.isEditable(!1) && (h = e[b ? "getLast" : "getFirst"](k)); f || h || (h = e[b ? "getPrevious" : "getNext"](k)); a = h } return !!c }, moveToClosestEditablePosition: function(a, b) { var c, d = 0, e, k, f = [CKEDITOR.POSITION_AFTER_END, CKEDITOR.POSITION_BEFORE_START]; a ? (c = new CKEDITOR.dom.range(this.root), c.moveToPosition(a, f[b ? 0 : 1])) : c = this.clone(); if (a && !a.is(CKEDITOR.dtd.$block)) d = 1; else if (e = c[b ? "getNextEditableNode" : "getPreviousEditableNode"]()) d = 1, (k = e.type == CKEDITOR.NODE_ELEMENT) && e.is(CKEDITOR.dtd.$block) && "false" == e.getAttribute("contenteditable") ? (c.setStartAt(e, CKEDITOR.POSITION_BEFORE_START), c.setEndAt(e, CKEDITOR.POSITION_AFTER_END)) : !CKEDITOR.env.needsBrFiller && k && e.is(CKEDITOR.dom.walker.validEmptyBlockContainers) ? (c.setEnd(e, 0), c.collapse()) : c.moveToPosition(e, f[b ? 1 : 0]); d && this.moveToRange(c); return !!d }, moveToElementEditStart: function(a) { return this.moveToElementEditablePosition(a) }, moveToElementEditEnd: function(a) { return this.moveToElementEditablePosition(a, !0) }, getEnclosedNode: function() { var a = this.clone(); a.optimize(); if (a.startContainer.type != CKEDITOR.NODE_ELEMENT || a.endContainer.type != CKEDITOR.NODE_ELEMENT) return null; var a = new CKEDITOR.dom.walker(a), b = CKEDITOR.dom.walker.bookmark(!1, !0), c = CKEDITOR.dom.walker.whitespaces(!0); a.evaluator = function(a) { return c(a) && b(a) }; var d = a.next(); a.reset(); return d && d.equals(a.previous()) ? d : null }, getTouchedStartNode: function() { var a = this.startContainer; return this.collapsed || a.type != CKEDITOR.NODE_ELEMENT ? a : a.getChild(this.startOffset) || a }, getTouchedEndNode: function() { var a = this.endContainer; return this.collapsed || a.type != CKEDITOR.NODE_ELEMENT ? a : a.getChild(this.endOffset - 1) || a }, getNextEditableNode: e(), getPreviousEditableNode: e(1), scrollIntoView: function() { var a = new CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e", this.document), b, c, d, e = this.clone(); e.optimize(); (d = e.startContainer.type == CKEDITOR.NODE_TEXT) ? (c = e.startContainer.getText(), b = e.startContainer.split(e.startOffset), a.insertAfter(e.startContainer)) : e.insertNode(a); a.scrollIntoView(); d && (e.startContainer.setText(c), b.remove()); a.remove() }, _setStartContainer: function(a) { this.startContainer = a }, _setEndContainer: function(a) { this.endContainer = a }, _find: function(a, b) { var c = this.getCommonAncestor(), d = this.getBoundaryNodes(), e = [], k, f, h, m; if (c && c.find) for (f = c.find(a), k = 0; k < f.count(); k++) if (c = f.getItem(k), b || !c.isReadOnly()) h = c.getPosition(d.startNode) & CKEDITOR.POSITION_FOLLOWING || d.startNode.equals(c), m = c.getPosition(d.endNode) & CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IS_CONTAINED, h && m && e.push(c); return e } } }(), CKEDITOR.POSITION_AFTER_START = 1, CKEDITOR.POSITION_BEFORE_END = 2, CKEDITOR.POSITION_BEFORE_START = 3, CKEDITOR.POSITION_AFTER_END = 4, CKEDITOR.ENLARGE_ELEMENT = 1, CKEDITOR.ENLARGE_BLOCK_CONTENTS = 2, CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS = 3, CKEDITOR.ENLARGE_INLINE = 4, CKEDITOR.START = 1, CKEDITOR.END = 2, CKEDITOR.SHRINK_ELEMENT = 1, CKEDITOR.SHRINK_TEXT = 2, "use strict", function() { function a(a) { 1 > arguments.length || (this.range = a, this.forceBrBreak = 0, this.enlargeBr = 1, this.enforceRealBlocks = 0, this._ || (this._ = {})) } function f(a) { var b = []; a.forEach(function(a) { if ("true" == a.getAttribute("contenteditable")) return b.push(a), !1 }, CKEDITOR.NODE_ELEMENT, !0); return b } function b(a, c, d, e) { a: { null == e && (e = f(d)); for (var h; h = e.shift();) if (h.getDtd().p) { e = { element: h, remaining: e }; break a } e = null } if (!e) return 0; if ((h = CKEDITOR.filter.instances[e.element.data("cke-filter")]) && !h.check(c)) return b(a, c, d, e.remaining); c = new CKEDITOR.dom.range(e.element);c.selectNodeContents(e.element);c = c.createIterator();c.enlargeBr = a.enlargeBr;c.enforceRealBlocks = a.enforceRealBlocks;c.activeFilter = c.filter = h;a._.nestedEditable = { element: e.element, container: d, remaining: e.remaining, iterator: c }; return 1 } function c(a, b, c) { if (!b) return !1; a = a.clone(); a.collapse(!c); return a.checkBoundaryOfElement(b, c ? CKEDITOR.START : CKEDITOR.END) } var e = /^[\r\n\t ]+$/, m = CKEDITOR.dom.walker.bookmark(!1, !0), l = CKEDITOR.dom.walker.whitespaces(!0), d = function(a) { return m(a) && l(a) }, h = { dd: 1, dt: 1, li: 1 }; a.prototype = { getNextParagraph: function(a) { var g, f, l, q, v; a = a || "p"; if (this._.nestedEditable) { if (g = this._.nestedEditable.iterator.getNextParagraph(a)) return this.activeFilter = this._.nestedEditable.iterator.activeFilter, g; this.activeFilter = this.filter; if (b(this, a, this._.nestedEditable.container, this._.nestedEditable.remaining)) return this.activeFilter = this._.nestedEditable.iterator.activeFilter, this._.nestedEditable.iterator.getNextParagraph(a); this._.nestedEditable = null } if (!this.range.root.getDtd()[a]) return null; if (!this._.started) { var u = this.range.clone(); f = u.startPath(); var r = u.endPath(), p = !u.collapsed && c(u, f.block), z = !u.collapsed && c(u, r.block, 1); u.shrink(CKEDITOR.SHRINK_ELEMENT, !0); p && u.setStartAt(f.block, CKEDITOR.POSITION_BEFORE_END); z && u.setEndAt(r.block, CKEDITOR.POSITION_AFTER_START); f = u.endContainer.hasAscendant("pre", !0) || u.startContainer.hasAscendant("pre", !0); u.enlarge(this.forceBrBreak && !f || !this.enlargeBr ? CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS : CKEDITOR.ENLARGE_BLOCK_CONTENTS); u.collapsed || (f = new CKEDITOR.dom.walker(u.clone()), r = CKEDITOR.dom.walker.bookmark(!0, !0), f.evaluator = r, this._.nextNode = f.next(), f = new CKEDITOR.dom.walker(u.clone()), f.evaluator = r, f = f.previous(), this._.lastNode = f.getNextSourceNode(!0, null, u.root), this._.lastNode && this._.lastNode.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.trim(this._.lastNode.getText()) && this._.lastNode.getParent().isBlockBoundary() && (r = this.range.clone(), r.moveToPosition(this._.lastNode, CKEDITOR.POSITION_AFTER_END), r.checkEndOfBlock() && (r = new CKEDITOR.dom.elementPath(r.endContainer, r.root), this._.lastNode = (r.block || r.blockLimit).getNextSourceNode(!0))), this._.lastNode && u.root.contains(this._.lastNode) || (this._.lastNode = this._.docEndMarker = u.document.createText(""), this._.lastNode.insertAfter(f)), u = null); this._.started = 1; f = u } r = this._.nextNode; u = this._.lastNode; for (this._.nextNode = null; r;) { var p = 0, z = r.hasAscendant("pre"), B = r.type != CKEDITOR.NODE_ELEMENT, t = 0; if (B) r.type == CKEDITOR.NODE_TEXT && e.test(r.getText()) && (B = 0); else { var y = r.getName(); if (CKEDITOR.dtd.$block[y] && "false" == r.getAttribute("contenteditable")) { g = r; b(this, a, g); break } else if (r.isBlockBoundary(this.forceBrBreak && !z && { br: 1 })) { if ("br" == y) B = 1; else if (!f && !r.getChildCount() && "hr" != y) { g = r; l = r.equals(u); break } f && (f.setEndAt(r, CKEDITOR.POSITION_BEFORE_START), "br" != y && (this._.nextNode = r)); p = 1 } else { if (r.getFirst()) { f || (f = this.range.clone(), f.setStartAt(r, CKEDITOR.POSITION_BEFORE_START)); r = r.getFirst(); continue } B = 1 } } B && !f && (f = this.range.clone(), f.setStartAt(r, CKEDITOR.POSITION_BEFORE_START)); l = (!p || B) && r.equals(u); if (f && !p) for (; !r.getNext(d) && !l;) { y = r.getParent(); if (y.isBlockBoundary(this.forceBrBreak && !z && { br: 1 })) { p = 1; B = 0; l || y.equals(u); f.setEndAt(y, CKEDITOR.POSITION_BEFORE_END); break } r = y; B = 1; l = r.equals(u); t = 1 } B && f.setEndAt(r, CKEDITOR.POSITION_AFTER_END); r = this._getNextSourceNode(r, t, u); if ((l = !r) || p && f) break } if (!g) { if (!f) return this._.docEndMarker && this._.docEndMarker.remove(), this._.nextNode = null; g = new CKEDITOR.dom.elementPath(f.startContainer, f.root); r = g.blockLimit; p = { div: 1, th: 1, td: 1 }; g = g.block; !g && r && !this.enforceRealBlocks && p[r.getName()] && f.checkStartOfBlock() && f.checkEndOfBlock() && !r.equals(f.root) ? g = r : !g || this.enforceRealBlocks && g.is(h) ? (g = this.range.document.createElement(a), f.extractContents().appendTo(g), g.trim(), f.insertNode(g), q = v = !0) : "li" != g.getName() ? f.checkStartOfBlock() && f.checkEndOfBlock() || (g = g.clone(!1), f.extractContents().appendTo(g), g.trim(), v = f.splitBlock(), q = !v.wasStartOfBlock, v = !v.wasEndOfBlock, f.insertNode(g)) : l || (this._.nextNode = g.equals(u) ? null : this._getNextSourceNode(f.getBoundaryNodes().endNode, 1, u)) } q && (q = g.getPrevious()) && q.type == CKEDITOR.NODE_ELEMENT && ("br" == q.getName() ? q.remove() : q.getLast() && "br" == q.getLast().$.nodeName.toLowerCase() && q.getLast().remove()); v && (q = g.getLast()) && q.type == CKEDITOR.NODE_ELEMENT && "br" == q.getName() && (!CKEDITOR.env.needsBrFiller || q.getPrevious(m) || q.getNext(m)) && q.remove(); this._.nextNode || (this._.nextNode = l || g.equals(u) || !u ? null : this._getNextSourceNode(g, 1, u)); return g }, _getNextSourceNode: function(a, b, c) { function d(a) { return !(a.equals(c) || a.equals(e)) } var e = this.range.root; for (a = a.getNextSourceNode(b, null, d); !m(a);) a = a.getNextSourceNode(b, null, d); return a } }; CKEDITOR.dom.range.prototype.createIterator = function() { return new a(this) } }(), CKEDITOR.command = function(a, f) { this.uiItems = []; this.exec = function(b) { if (this.state == CKEDITOR.TRISTATE_DISABLED || !this.checkAllowed()) return !1; this.editorFocus && a.focus(); return !1 === this.fire("exec") ? !0 : !1 !== f.exec.call(this, a, b) }; this.refresh = function(a, b) { if (!this.readOnly && a.readOnly) return !0; if (this.context && !b.isContextFor(this.context) || !this.checkAllowed(!0)) return this.disable(), !0; this.startDisabled || this.enable(); this.modes && !this.modes[a.mode] && this.disable(); return !1 === this.fire("refresh", { editor: a, path: b }) ? !0 : f.refresh && !1 !== f.refresh.apply(this, arguments) }; var b; this.checkAllowed = function(c) { return c || "boolean" != typeof b ? b = a.activeFilter.checkFeature(this) : b }; CKEDITOR.tools.extend(this, f, { modes: { wysiwyg: 1 }, editorFocus: 1, contextSensitive: !!f.context, state: CKEDITOR.TRISTATE_DISABLED }); CKEDITOR.event.call(this) }, CKEDITOR.command.prototype = { enable: function() { this.state == CKEDITOR.TRISTATE_DISABLED && this.checkAllowed() && this.setState(this.preserveState && "undefined" != typeof this.previousState ? this.previousState : CKEDITOR.TRISTATE_OFF) }, disable: function() { this.setState(CKEDITOR.TRISTATE_DISABLED) }, setState: function(a) { if (this.state == a || a != CKEDITOR.TRISTATE_DISABLED && !this.checkAllowed()) return !1; this.previousState = this.state; this.state = a; this.fire("state"); return !0 }, toggleState: function() { this.state == CKEDITOR.TRISTATE_OFF ? this.setState(CKEDITOR.TRISTATE_ON) : this.state == CKEDITOR.TRISTATE_ON && this.setState(CKEDITOR.TRISTATE_OFF) } }, CKEDITOR.event.implementOn(CKEDITOR.command.prototype), CKEDITOR.ENTER_P = 1, CKEDITOR.ENTER_BR = 2, CKEDITOR.ENTER_DIV = 3, CKEDITOR.config = { customConfig: "config.js", autoUpdateElement: !0, language: "", defaultLanguage: "en", contentsLangDirection: "", enterMode: CKEDITOR.ENTER_P, forceEnterMode: !1, shiftEnterMode: CKEDITOR.ENTER_BR, docType: "\x3c!DOCTYPE html\x3e", bodyId: "", bodyClass: "", fullPage: !1, height: 200, contentsCss: CKEDITOR.getUrl("contents.css"), extraPlugins: "", removePlugins: "", protectedSource: [], tabIndex: 0, width: "", baseFloatZIndex: 1E4, blockedKeystrokes: [CKEDITOR.CTRL + 66, CKEDITOR.CTRL + 73, CKEDITOR.CTRL + 85] }, function() { function a(a, b, c, d, e) { var g, f; a = []; for (g in b) { f = b[g]; f = "boolean" == typeof f ? {} : "function" == typeof f ? { match: f } : G(f); "$" != g.charAt(0) && (f.elements = g); c && (f.featureName = c.toLowerCase()); var k = f; k.elements = l(k.elements, /\s+/) || null; k.propertiesOnly = k.propertiesOnly || !0 === k.elements; var h = /\s*,\s*/, t = void 0; for (t in K) { k[t] = l(k[t], h) || null; var m = k, y = J[t], u = l(k[J[t]], h), r = k[t], n = [], D = !0, E = void 0; u ? D = !1 : u = {}; for (E in r) "!" == E.charAt(0) && (E = E.slice(1), n.push(E), u[E] = !0, D = !1); for (; E = n.pop();) r[E] = r["!" + E], delete r["!" + E]; m[y] = (D ? !1 : u) || null } k.match = k.match || null; d.push(f); a.push(f) } b = e.elements; e = e.generic; var x; c = 0; for (d = a.length; c < d; ++c) { g = G(a[c]); f = !0 === g.classes || !0 === g.styles || !0 === g.attributes; k = g; t = y = h = void 0; for (h in K) k[h] = p(k[h]); m = !0; for (t in J) { h = J[t]; y = k[h]; u = []; r = void 0; for (r in y) - 1 < r.indexOf("*") ? u.push(new RegExp("^" + r.replace(/\*/g, ".*") + "$")) : u.push(r); y = u; y.length && (k[h] = y, m = !1) } k.nothingRequired = m; k.noProperties = !(k.attributes || k.classes || k.styles); if (!0 === g.elements || null === g.elements) e[f ? "unshift" : "push"](g); else for (x in k = g.elements, delete g.elements, k) if (b[x]) b[x][f ? "unshift" : "push"](g); else b[x] = [g] } } function f(a, c, e, g) { if (!a.match || a.match(c)) if (g || d(a, c)) if (a.propertiesOnly || (e.valid = !0), e.allAttributes || (e.allAttributes = b(a.attributes, c.attributes, e.validAttributes)), e.allStyles || (e.allStyles = b(a.styles, c.styles, e.validStyles)), !e.allClasses) { a = a.classes; c = c.classes; g = e.validClasses; if (a) if (!0 === a) a = !0; else { for (var f = 0, k = c.length, h; f < k; ++f) h = c[f], g[h] || (g[h] = a(h)); a = !1 } else a = !1; e.allClasses = a } } function b(a, b, c) { if (!a) return !1; if (!0 === a) return !0; for (var d in b) c[d] || (c[d] = a(d)); return !1 } function c(a, b, c) { if (!a.match || a.match(b)) { if (a.noProperties) return !1; c.hadInvalidAttribute = e(a.attributes, b.attributes) || c.hadInvalidAttribute; c.hadInvalidStyle = e(a.styles, b.styles) || c.hadInvalidStyle; a = a.classes; b = b.classes; if (a) { for (var d = !1, g = !0 === a, f = b.length; f--;) if (g || a(b[f])) b.splice(f, 1), d = !0; a = d } else a = !1; c.hadInvalidClass = a || c.hadInvalidClass } } function e(a, b) { if (!a) return !1; var c = !1, d = !0 === a, e; for (e in b) if (d || a(e)) delete b[e], c = !0; return c } function m(a, b, c) { if (a.disabled || a.customConfig && !c || !b) return !1; a._.cachedChecks = {}; return !0 } function l(a, b) { if (!a) return !1; if (!0 === a) return a; if ("string" == typeof a) return a = I(a), "*" == a ? !0 : CKEDITOR.tools.convertArrayToObject(a.split(b)); if (CKEDITOR.tools.isArray(a)) return a.length ? CKEDITOR.tools.convertArrayToObject(a) : !1; var c = {}, d = 0, e; for (e in a) c[e] = a[e], d++; return d ? c : !1 } function d(a, b) { if (a.nothingRequired) return !0; var c, d, e, g; if (e = a.requiredClasses) for (g = b.classes, c = 0; c < e.length; ++c) if (d = e[c], "string" == typeof d) { if (-1 == CKEDITOR.tools.indexOf(g, d)) return !1 } else if (!CKEDITOR.tools.checkIfAnyArrayItemMatches(g, d)) return !1; return h(b.styles, a.requiredStyles) && h(b.attributes, a.requiredAttributes) } function h(a, b) { if (!b) return !0; for (var c = 0, d; c < b.length; ++c) if (d = b[c], "string" == typeof d) { if (!(d in a)) return !1 } else if (!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a, d)) return !1; return !0 } function k(a) { if (!a) return {}; a = a.split(/\s*,\s*/).sort(); for (var b = {}; a.length;) b[a.shift()] = "cke-test"; return b } function g(a) { var b, c, d, e, g = {}, f = 1; for (a = I(a); b = a.match(E);)(c = b[2]) ? (d = n(c, "styles"), e = n(c, "attrs"), c = n(c, "classes")) : d = e = c = null, g["$" + f++] = { elements: b[1], classes: c, styles: d, attributes: e }, a = a.slice(b[0].length); return g } function n(a, b) { var c = a.match(S[b]); return c ? I(c[1]) : null } function w(a) { var b = a.styleBackup = a.attributes.style, c = a.classBackup = a.attributes["class"]; a.styles || (a.styles = CKEDITOR.tools.parseCssText(b || "", 1)); a.classes || (a.classes = c ? c.split(/\s+/) : []) } function q(a, b, d, e) { var g = 0, k; e.toHtml && (b.name = b.name.replace(O, "$1")); if (e.doCallbacks && a.elementCallbacks) { a: { k = a.elementCallbacks; for (var h = 0, t = k.length, m; h < t; ++h) if (m = k[h](b)) { k = m; break a } k = void 0 } if (k) return k } if (e.doTransform && (k = a._.transformations[b.name])) { w(b); for (h = 0; h < k.length; ++h) y(a, b, k[h]); u(b) } if (e.doFilter) { a: { h = b.name; t = a._; a = t.allowedRules.elements[h]; k = t.allowedRules.generic; h = t.disallowedRules.elements[h]; t = t.disallowedRules.generic; m = e.skipRequired; var l = { valid: !1, validAttributes: {}, validClasses: {}, validStyles: {}, allAttributes: !1, allClasses: !1, allStyles: !1, hadInvalidAttribute: !1, hadInvalidClass: !1, hadInvalidStyle: !1 }, p, n; if (a || k) { w(b); if (h) for (p = 0, n = h.length; p < n; ++p) if (!1 === c(h[p], b, l)) { a = null; break a } if (t) for (p = 0, n = t.length; p < n; ++p) c(t[p], b, l); if (a) for (p = 0, n = a.length; p < n; ++p) f(a[p], b, l, m); if (k) for (p = 0, n = k.length; p < n; ++p) f(k[p], b, l, m); a = l } else a = null } if (!a || !a.valid) return d.push(b), 1;n = a.validAttributes; var D = a.validStyles;k = a.validClasses; var h = b.attributes, E = b.styles, t = b.classes;m = b.classBackup; var x = b.styleBackup, J, v, q = [], l = [], z = /^data-cke-/;p = !1;delete h.style;delete h["class"];delete b.classBackup;delete b.styleBackup; if (!a.allAttributes) for (J in h) n[J] || (z.test(J) ? J == (v = J.replace(/^data-cke-saved-/, "")) || n[v] || (delete h[J], p = !0) : (delete h[J], p = !0)); if (!a.allStyles || a.hadInvalidStyle) { for (J in E) a.allStyles || D[J] ? q.push(J + ":" + E[J]) : p = !0; q.length && (h.style = q.sort().join("; ")) } else x && (h.style = x); if (!a.allClasses || a.hadInvalidClass) { for (J = 0; J < t.length; ++J)(a.allClasses || k[t[J]]) && l.push(t[J]); l.length && (h["class"] = l.sort().join(" ")); m && l.length < m.split(/\s+/).length && (p = !0) } else m && (h["class"] = m);p && (g = 1); if (!e.skipFinalValidation && !r(b)) return d.push(b), 1 } e.toHtml && (b.name = b.name.replace(T, "cke:$1")); return g } function v(a) { var b = [], c; for (c in a) - 1 < c.indexOf("*") && b.push(c.replace(/\*/g, ".*")); return b.length ? new RegExp("^(?:" + b.join("|") + ")$") : null } function u(a) { var b = a.attributes, c; delete b.style; delete b["class"]; if (c = CKEDITOR.tools.writeCssText(a.styles, !0)) b.style = c; a.classes.length && (b["class"] = a.classes.sort().join(" ")) } function r(a) { switch (a.name) { case "a": if (!(a.children.length || a.attributes.name || a.attributes.id)) return !1; break; case "img": if (!a.attributes.src) return !1 } return !0 } function p(a) { if (!a) return !1; if (!0 === a) return !0; var b = v(a); return function(c) { return c in a || b && c.match(b) } } function z() { return new CKEDITOR.htmlParser.element("br") } function B(a) { return a.type == CKEDITOR.NODE_ELEMENT && ("br" == a.name || F.$block[a.name]) } function t(a, b, c) { var d = a.name; if (F.$empty[d] || !a.children.length) "hr" == d && "br" == b ? a.replaceWith(z()) : (a.parent && c.push({ check: "it", el: a.parent }), a.remove()); else if (F.$block[d] || "tr" == d) if ("br" == b) a.previous && !B(a.previous) && (b = z(), b.insertBefore(a)), a.next && !B(a.next) && (b = z(), b.insertAfter(a)), a.replaceWithChildren(); else { var d = a.children, e; b: { e = F[b]; for (var g = 0, k = d.length, f; g < k; ++g) if (f = d[g], f.type == CKEDITOR.NODE_ELEMENT && !e[f.name]) { e = !1; break b } e = !0 } if (e) a.name = b, a.attributes = {}, c.push({ check: "parent-down", el: a }); else { e = a.parent; for (var g = e.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT || "body" == e.name, h, t, k = d.length; 0 < k;) f = d[--k], g && (f.type == CKEDITOR.NODE_TEXT || f.type == CKEDITOR.NODE_ELEMENT && F.$inline[f.name]) ? (h || (h = new CKEDITOR.htmlParser.element(b), h.insertAfter(a), c.push({ check: "parent-down", el: h })), h.add(f, 0)) : (h = null, t = F[e.name] || F.span, f.insertAfter(a), e.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT || f.type != CKEDITOR.NODE_ELEMENT || t[f.name] || c.push({ check: "el-up", el: f })); a.remove() } } else d in { style: 1, script: 1 } ? a.remove() : (a.parent && c.push({ check: "it", el: a.parent }), a.replaceWithChildren()) } function y(a, b, c) { var d, e; for (d = 0; d < c.length; ++d) if (e = c[d], !(e.check && !a.check(e.check, !1) || e.left && !e.left(b))) { e.right(b, M); break } } function D(a, b) { var c = b.getDefinition(), d = c.attributes, e = c.styles, g, k, f, h; if (a.name != c.element) return !1; for (g in d) if ("class" == g) for (c = d[g].split(/\s+/), f = a.classes.join("|"); h = c.pop();) { if (-1 == f.indexOf(h)) return !1 } else if (a.attributes[g] != d[g]) return !1; for (k in e) if (a.styles[k] != e[k]) return !1; return !0 } function x(a, b) { var c, d; "string" == typeof a ? c = a : a instanceof CKEDITOR.style ? d = a : (c = a[0], d = a[1]); return [{ element: c, left: d, right: function(a, c) { c.transform(a, b) } }] } function A(a) { return function(b) { return D(b, a) } } function C(a) { return function(b, c) { c[a](b) } } var F = CKEDITOR.dtd, G = CKEDITOR.tools.copy, I = CKEDITOR.tools.trim, H = ["", "p", "br", "div"]; CKEDITOR.FILTER_SKIP_TREE = 2; CKEDITOR.filter = function(a) { this.allowedContent = []; this.disallowedContent = []; this.elementCallbacks = null; this.disabled = !1; this.editor = null; this.id = CKEDITOR.tools.getNextNumber(); this._ = { allowedRules: { elements: {}, generic: [] }, disallowedRules: { elements: {}, generic: [] }, transformations: {}, cachedTests: {} }; CKEDITOR.filter.instances[this.id] = this; if (a instanceof CKEDITOR.editor) { a = this.editor = a; this.customConfig = !0; var b = a.config.allowedContent; !0 === b ? this.disabled = !0 : (b || (this.customConfig = !1), this.allow(b, "config", 1), this.allow(a.config.extraAllowedContent, "extra", 1), this.allow(H[a.enterMode] + " " + H[a.shiftEnterMode], "default", 1), this.disallow(a.config.disallowedContent)) } else this.customConfig = !1, this.allow(a, "default", 1) }; CKEDITOR.filter.instances = {}; CKEDITOR.filter.prototype = { allow: function(b, c, d) { if (!m(this, b, d)) return !1; var e, k; if ("string" == typeof b) b = g(b); else if (b instanceof CKEDITOR.style) { if (b.toAllowedContentRules) return this.allow(b.toAllowedContentRules(this.editor), c, d); e = b.getDefinition(); b = {}; d = e.attributes; b[e.element] = e = { styles: e.styles, requiredStyles: e.styles && CKEDITOR.tools.objectKeys(e.styles) }; d && (d = G(d), e.classes = d["class"] ? d["class"].split(/\s+/) : null, e.requiredClasses = e.classes, delete d["class"], e.attributes = d, e.requiredAttributes = d && CKEDITOR.tools.objectKeys(d)) } else if (CKEDITOR.tools.isArray(b)) { for (e = 0; e < b.length; ++e) k = this.allow(b[e], c, d); return k } a(this, b, c, this.allowedContent, this._.allowedRules); return !0 }, applyTo: function(a, b, c, d) { if (this.disabled) return !1; var e = this, g = [], k = this.editor && this.editor.config.protectedSource, f, h = !1, m = { doFilter: !c, doTransform: !0, doCallbacks: !0, toHtml: b }; a.forEach(function(a) { if (a.type == CKEDITOR.NODE_ELEMENT) { if ("off" == a.attributes["data-cke-filter"]) return !1; if (!b || "span" != a.name || !~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-")) if (f = q(e, a, g, m), f & 1) h = !0; else if (f & 2) return !1 } else if (a.type == CKEDITOR.NODE_COMMENT && a.value.match(/^\{cke_protected\}(?!\{C\})/)) { var c; a: { var d = decodeURIComponent(a.value.replace(/^\{cke_protected\}/, "")); c = []; var t, l, y; if (k) for (l = 0; l < k.length; ++l) if ((y = d.match(k[l])) && y[0].length == d.length) { c = !0; break a } d = CKEDITOR.htmlParser.fragment.fromHtml(d); 1 == d.children.length && (t = d.children[0]).type == CKEDITOR.NODE_ELEMENT && q(e, t, c, m); c = !c.length } c || g.push(a) } }, null, !0); g.length && (h = !0); var l; a = []; d = H[d || (this.editor ? this.editor.enterMode : CKEDITOR.ENTER_P)]; for (var y; c = g.pop();) c.type == CKEDITOR.NODE_ELEMENT ? t(c, d, a) : c.remove(); for (; l = a.pop();) if (c = l.el, c.parent) switch (y = F[c.parent.name] || F.span, l.check) { case "it": F.$removeEmpty[c.name] && !c.children.length ? t(c, d, a) : r(c) || t(c, d, a); break; case "el-up": c.parent.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT || y[c.name] || t(c, d, a); break; case "parent-down": c.parent.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT || y[c.name] || t(c.parent, d, a) } return h }, checkFeature: function(a) { if (this.disabled || !a) return !0; a.toFeature && (a = a.toFeature(this.editor)); return !a.requiredContent || this.check(a.requiredContent) }, disable: function() { this.disabled = !0 }, disallow: function(b) { if (!m(this, b, !0)) return !1; "string" == typeof b && (b = g(b)); a(this, b, null, this.disallowedContent, this._.disallowedRules); return !0 }, addContentForms: function(a) { if (!this.disabled && a) { var b, c, d = [], e; for (b = 0; b < a.length && !e; ++b) c = a[b], ("string" == typeof c || c instanceof CKEDITOR.style) && this.check(c) && (e = c); if (e) { for (b = 0; b < a.length; ++b) d.push(x(a[b], e)); this.addTransformations(d) } } }, addElementCallback: function(a) { this.elementCallbacks || (this.elementCallbacks = []); this.elementCallbacks.push(a) }, addFeature: function(a) { if (this.disabled || !a) return !0; a.toFeature && (a = a.toFeature(this.editor)); this.allow(a.allowedContent, a.name); this.addTransformations(a.contentTransformations); this.addContentForms(a.contentForms); return a.requiredContent && (this.customConfig || this.disallowedContent.length) ? this.check(a.requiredContent) : !0 }, addTransformations: function(a) { var b, c; if (!this.disabled && a) { var d = this._.transformations, e; for (e = 0; e < a.length; ++e) { b = a[e]; var g = void 0, k = void 0, f = void 0, h = void 0, t = void 0, m = void 0; c = []; for (k = 0; k < b.length; ++k) f = b[k], "string" == typeof f ? (f = f.split(/\s*:\s*/), h = f[0], t = null, m = f[1]) : (h = f.check, t = f.left, m = f.right), g || (g = f, g = g.element ? g.element : h ? h.match(/^([a-z0-9]+)/i)[0] : g.left.getDefinition().element), t instanceof CKEDITOR.style && (t = A(t)), c.push({ check: h == g ? null : h, left: t, right: "string" == typeof m ? C(m) : m }); b = g; d[b] || (d[b] = []); d[b].push(c) } } }, check: function(a, b, c) { if (this.disabled) return !0; if (CKEDITOR.tools.isArray(a)) { for (var d = a.length; d--;) if (this.check(a[d], b, c)) return !0; return !1 } var e, f; if ("string" == typeof a) { f = a + "\x3c" + (!1 === b ? "0" : "1") + (c ? "1" : "0") + "\x3e"; if (f in this._.cachedChecks) return this._.cachedChecks[f]; d = g(a).$1; e = d.styles; var h = d.classes; d.name = d.elements; d.classes = h = h ? h.split(/\s*,\s*/) : []; d.styles = k(e); d.attributes = k(d.attributes); d.children = []; h.length && (d.attributes["class"] = h.join(" ")); e && (d.attributes.style = CKEDITOR.tools.writeCssText(d.styles)); e = d } else d = a.getDefinition(), e = d.styles, h = d.attributes || {}, e && !CKEDITOR.tools.isEmpty(e) ? (e = G(e), h.style = CKEDITOR.tools.writeCssText(e, !0)) : e = {}, e = { name: d.element, attributes: h, classes: h["class"] ? h["class"].split(/\s+/) : [], styles: e, children: [] }; var h = CKEDITOR.tools.clone(e), t = [], m; if (!1 !== b && (m = this._.transformations[e.name])) { for (d = 0; d < m.length; ++d) y(this, e, m[d]); u(e) } q(this, h, t, { doFilter: !0, doTransform: !1 !== b, skipRequired: !c, skipFinalValidation: !c }); b = 0 < t.length ? !1 : CKEDITOR.tools.objectCompare(e.attributes, h.attributes, !0) ? !0 : !1; "string" == typeof a && (this._.cachedChecks[f] = b); return b }, getAllowedEnterMode: function() { var a = ["p", "div", "br"], b = { p: CKEDITOR.ENTER_P, div: CKEDITOR.ENTER_DIV, br: CKEDITOR.ENTER_BR }; return function(c, d) { var e = a.slice(), g; if (this.check(H[c])) return c; for (d || (e = e.reverse()); g = e.pop();) if (this.check(g)) return b[g]; return CKEDITOR.ENTER_BR } }(), destroy: function() { delete CKEDITOR.filter.instances[this.id]; delete this._; delete this.allowedContent; delete this.disallowedContent } }; var K = { styles: 1, attributes: 1, classes: 1 }, J = { styles: "requiredStyles", attributes: "requiredAttributes", classes: "requiredClasses" }, E = /^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i, S = { styles: /{([^}]+)}/, attrs: /\[([^\]]+)\]/, classes: /\(([^\)]+)\)/ }, O = /^cke:(object|embed|param)$/, T = /^(object|embed|param)$/, M; M = CKEDITOR.filter.transformationsTools = { sizeToStyle: function(a) { this.lengthToStyle(a, "width"); this.lengthToStyle(a, "height") }, sizeToAttribute: function(a) { this.lengthToAttribute(a, "width"); this.lengthToAttribute(a, "height") }, lengthToStyle: function(a, b, c) { c = c || b; if (!(c in a.styles)) { var d = a.attributes[b]; d && (/^\d+$/.test(d) && (d += "px"), a.styles[c] = d) } delete a.attributes[b] }, lengthToAttribute: function(a, b, c) { c = c || b; if (!(c in a.attributes)) { var d = a.styles[b], e = d && d.match(/^(\d+)(?:\.\d*)?px$/); e ? a.attributes[c] = e[1] : "cke-test" == d && (a.attributes[c] = "cke-test") } delete a.styles[b] }, alignmentToStyle: function(a) { if (!("float" in a.styles)) { var b = a.attributes.align; if ("left" == b || "right" == b) a.styles["float"] = b } delete a.attributes.align }, alignmentToAttribute: function(a) { if (!("align" in a.attributes)) { var b = a.styles["float"]; if ("left" == b || "right" == b) a.attributes.align = b } delete a.styles["float"] }, splitBorderShorthand: function(a) { function b(d) { a.styles["border-top-width"] = c[d[0]]; a.styles["border-right-width"] = c[d[1]]; a.styles["border-bottom-width"] = c[d[2]]; a.styles["border-left-width"] = c[d[3]] } if (a.styles.border) { var c = a.styles.border.match(/([\.\d]+\w+)/g) || ["0px"]; switch (c.length) { case 1: a.styles["border-width"] = c[0]; break; case 2: b([0, 1, 0, 1]); break; case 3: b([0, 1, 2, 1]); break; case 4: b([0, 1, 2, 3]) } a.styles["border-style"] = a.styles["border-style"] || (a.styles.border.match(/(none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset|initial|inherit)/) || [])[0]; a.styles["border-style"] || delete a.styles["border-style"]; delete a.styles.border } }, listTypeToStyle: function(a) { if (a.attributes.type) switch (a.attributes.type) { case "a": a.styles["list-style-type"] = "lower-alpha"; break; case "A": a.styles["list-style-type"] = "upper-alpha"; break; case "i": a.styles["list-style-type"] = "lower-roman"; break; case "I": a.styles["list-style-type"] = "upper-roman"; break; case "1": a.styles["list-style-type"] = "decimal"; break; default: a.styles["list-style-type"] = a.attributes.type } }, splitMarginShorthand: function(a) { function b(d) { a.styles["margin-top"] = c[d[0]]; a.styles["margin-right"] = c[d[1]]; a.styles["margin-bottom"] = c[d[2]]; a.styles["margin-left"] = c[d[3]] } if (a.styles.margin) { var c = a.styles.margin.match(/(\-?[\.\d]+\w+)/g) || ["0px"]; switch (c.length) { case 1: a.styles.margin = c[0]; break; case 2: b([0, 1, 0, 1]); break; case 3: b([0, 1, 2, 1]); break; case 4: b([0, 1, 2, 3]) } delete a.styles.margin } }, matchesStyle: D, transform: function(a, b) { if ("string" == typeof b) a.name = b; else { var c = b.getDefinition(), d = c.styles, e = c.attributes, g, f, k, h; a.name = c.element; for (g in e) if ("class" == g) for (c = a.classes.join("|"), k = e[g].split(/\s+/); h = k.pop();) - 1 == c.indexOf(h) && a.classes.push(h); else a.attributes[g] = e[g]; for (f in d) a.styles[f] = d[f] } } } }(), function() { CKEDITOR.focusManager = function(a) { if (a.focusManager) return a.focusManager; this.hasFocus = !1; this.currentActive = null; this._ = { editor: a }; return this }; CKEDITOR.focusManager._ = { blurDelay: 200 }; CKEDITOR.focusManager.prototype = { focus: function(a) { this._.timer && clearTimeout(this._.timer); a && (this.currentActive = a); this.hasFocus || this._.locked || ((a = CKEDITOR.currentInstance) && a.focusManager.blur(1), this.hasFocus = !0, (a = this._.editor.container) && a.addClass("cke_focus"), this._.editor.fire("focus")) }, lock: function() { this._.locked = 1 }, unlock: function() { delete this._.locked }, blur: function(a) { function f() { if (this.hasFocus) { this.hasFocus = !1; var a = this._.editor.container; a && a.removeClass("cke_focus"); this._.editor.fire("blur") } } if (!this._.locked) { this._.timer && clearTimeout(this._.timer); var b = CKEDITOR.focusManager._.blurDelay; a || !b ? f.call(this) : this._.timer = CKEDITOR.tools.setTimeout(function() { delete this._.timer; f.call(this) }, b, this) } }, add: function(a, f) { var b = a.getCustomData("focusmanager"); if (!b || b != this) { b && b.remove(a); var b = "focus", c = "blur"; f && (CKEDITOR.env.ie ? (b = "focusin", c = "focusout") : CKEDITOR.event.useCapture = 1); var e = { blur: function() { a.equals(this.currentActive) && this.blur() }, focus: function() { this.focus(a) } }; a.on(b, e.focus, this); a.on(c, e.blur, this); f && (CKEDITOR.event.useCapture = 0); a.setCustomData("focusmanager", this); a.setCustomData("focusmanager_handlers", e) } }, remove: function(a) { a.removeCustomData("focusmanager"); var f = a.removeCustomData("focusmanager_handlers"); a.removeListener("blur", f.blur); a.removeListener("focus", f.focus) } } }(), CKEDITOR.keystrokeHandler = function(a) { if (a.keystrokeHandler) return a.keystrokeHandler; this.keystrokes = {}; this.blockedKeystrokes = {}; this._ = { editor: a }; return this }, function() { var a, f = function(b) { b = b.data; var e = b.getKeystroke(), f = this.keystrokes[e], l = this._.editor; a = !1 === l.fire("key", { keyCode: e, domEvent: b }); a || (f && (a = !1 !== l.execCommand(f, { from: "keystrokeHandler" })), a || (a = !!this.blockedKeystrokes[e])); a && b.preventDefault(!0); return !a }, b = function(b) { a && (a = !1, b.data.preventDefault(!0)) }; CKEDITOR.keystrokeHandler.prototype = { attach: function(a) { a.on("keydown", f, this); if (CKEDITOR.env.gecko && CKEDITOR.env.mac) a.on("keypress", b, this) } } }(), function() { CKEDITOR.lang = { languages: { af: 1, ar: 1, bg: 1, bn: 1, bs: 1, ca: 1, cs: 1, cy: 1, da: 1, de: 1, "de-ch": 1, el: 1, "en-au": 1, "en-ca": 1, "en-gb": 1, en: 1, eo: 1, es: 1, et: 1, eu: 1, fa: 1, fi: 1, fo: 1, "fr-ca": 1, fr: 1, gl: 1, gu: 1, he: 1, hi: 1, hr: 1, hu: 1, id: 1, is: 1, it: 1, ja: 1, ka: 1, km: 1, ko: 1, ku: 1, lt: 1, lv: 1, mk: 1, mn: 1, ms: 1, nb: 1, nl: 1, no: 1, oc: 1, pl: 1, "pt-br": 1, pt: 1, ro: 1, ru: 1, si: 1, sk: 1, sl: 1, sq: 1, "sr-latn": 1, sr: 1, sv: 1, th: 1, tr: 1, tt: 1, ug: 1, uk: 1, vi: 1, "zh-cn": 1, zh: 1 }, rtl: { ar: 1, fa: 1, he: 1, ku: 1, ug: 1 }, load: function(a, f, b) { a && CKEDITOR.lang.languages[a] || (a = this.detect(f, a)); var c = this; f = function() { c[a].dir = c.rtl[a] ? "rtl" : "ltr"; b(a, c[a]) }; this[a] ? f() : CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/" + a + ".js"), f, this) }, detect: function(a, f) { var b = this.languages; f = f || navigator.userLanguage || navigator.language || a; var c = f.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/), e = c[1], c = c[2]; b[e + "-" + c] ? e = e + "-" + c : b[e] || (e = null); CKEDITOR.lang.detect = e ? function() { return e } : function(a) { return a }; return e || a } } }(), CKEDITOR.scriptLoader = function() { var a = {}, f = {}; return { load: function(b, c, e, m) { var l = "string" == typeof b; l && (b = [b]); e || (e = CKEDITOR); var d = b.length, h = [], k = [], g = function(a) { c && (l ? c.call(e, a) : c.call(e, h, k)) }; if (0 === d) g(!0); else { var n = function(a, b) { (b ? h : k).push(a); 0 >= --d && (m && CKEDITOR.document.getDocumentElement().removeStyle("cursor"), g(b)) }, w = function(b, c) { a[b] = 1; var d = f[b]; delete f[b]; for (var e = 0; e < d.length; e++) d[e](b, c) }, q = function(b) { if (a[b]) n(b, !0); else { var d = f[b] || (f[b] = []); d.push(n); if (!(1 < d.length)) { var e = new CKEDITOR.dom.element("script"); e.setAttributes({ type: "text/javascript", src: b }); c && (CKEDITOR.env.ie && (8 >= CKEDITOR.env.version || CKEDITOR.env.ie9Compat) ? e.$.onreadystatechange = function() { if ("loaded" == e.$.readyState || "complete" == e.$.readyState) e.$.onreadystatechange = null, w(b, !0) } : (e.$.onload = function() { setTimeout(function() { w(b, !0) }, 0) }, e.$.onerror = function() { w(b, !1) })); e.appendTo(CKEDITOR.document.getHead()) } } }; m && CKEDITOR.document.getDocumentElement().setStyle("cursor", "wait"); for (var v = 0; v < d; v++) q(b[v]) } }, queue: function() { function a() { var b; (b = c[0]) && this.load(b.scriptUrl, b.callback, CKEDITOR, 0) } var c = []; return function(e, f) { var l = this; c.push({ scriptUrl: e, callback: function() { f && f.apply(this, arguments); c.shift(); a.call(l) } }); 1 == c.length && a.call(this) } }() } }(), CKEDITOR.resourceManager = function(a, f) { this.basePath = a; this.fileName = f; this.registered = {}; this.loaded = {}; this.externals = {}; this._ = { waitingList: {} } }, CKEDITOR.resourceManager.prototype = { add: function(a, f) { if (this.registered[a]) throw Error('[CKEDITOR.resourceManager.add] The resource name "' + a + '" is already registered.'); var b = this.registered[a] = f || {}; b.name = a; b.path = this.getPath(a); CKEDITOR.fire(a + CKEDITOR.tools.capitalize(this.fileName) + "Ready", b); return this.get(a) }, get: function(a) { return this.registered[a] || null }, getPath: function(a) { var f = this.externals[a]; return CKEDITOR.getUrl(f && f.dir || this.basePath + a + "/") }, getFilePath: function(a) { var f = this.externals[a]; return CKEDITOR.getUrl(this.getPath(a) + (f ? f.file : this.fileName + ".js")) }, addExternal: function(a, f, b) { a = a.split(","); for (var c = 0; c < a.length; c++) { var e = a[c]; b || (f = f.replace(/[^\/]+$/, function(a) { b = a; return "" })); this.externals[e] = { dir: f, file: b || this.fileName + ".js" } } }, load: function(a, f, b) { CKEDITOR.tools.isArray(a) || (a = a ? [a] : []); for (var c = this.loaded, e = this.registered, m = [], l = {}, d = {}, h = 0; h < a.length; h++) { var k = a[h]; if (k) if (c[k] || e[k]) d[k] = this.get(k); else { var g = this.getFilePath(k); m.push(g); g in l || (l[g] = []); l[g].push(k) } } CKEDITOR.scriptLoader.load(m, function(a, e) { if (e.length) throw Error('[CKEDITOR.resourceManager.load] Resource name "' + l[e[0]].join(",") + '" was not found at "' + e[0] + '".'); for (var g = 0; g < a.length; g++) for (var k = l[a[g]], h = 0; h < k.length; h++) { var m = k[h]; d[m] = this.get(m); c[m] = 1 } f.call(b, d) }, this) } }, CKEDITOR.plugins = new CKEDITOR.resourceManager("plugins/", "plugin"), CKEDITOR.plugins.load = CKEDITOR.tools.override(CKEDITOR.plugins.load, function(a) { var f = {}; return function(b, c, e) { var m = {}, l = function(b) { a.call(this, b, function(a) { CKEDITOR.tools.extend(m, a); var b = [], d; for (d in a) { var n = a[d], w = n && n.requires; if (!f[d]) { if (n.icons) for (var q = n.icons.split(","), v = q.length; v--;) CKEDITOR.skin.addIcon(q[v], n.path + "icons/" + (CKEDITOR.env.hidpi && n.hidpi ? "hidpi/" : "") + q[v] + ".png"); f[d] = 1 } if (w) for (w.split && (w = w.split(",")), n = 0; n < w.length; n++) m[w[n]] || b.push(w[n]) } if (b.length) l.call(this, b); else { for (d in m) n = m[d], n.onLoad && !n.onLoad._called && (!1 === n.onLoad() && delete m[d], n.onLoad._called = 1); c && c.call(e || window, m) } }, this) }; l.call(this, b) } }), CKEDITOR.plugins.setLang = function(a, f, b) { var c = this.get(a); a = c.langEntries || (c.langEntries = {}); c = c.lang || (c.lang = []); c.split && (c = c.split(",")); - 1 == CKEDITOR.tools.indexOf(c, f) && c.push(f); a[f] = b }, CKEDITOR.ui = function(a) { if (a.ui) return a.ui; this.items = {}; this.instances = {}; this.editor = a; this._ = { handlers: {} }; return this }, CKEDITOR.ui.prototype = { add: function(a, f, b) { b.name = a.toLowerCase(); var c = this.items[a] = { type: f, command: b.command || null, args: Array.prototype.slice.call(arguments, 2) }; CKEDITOR.tools.extend(c, b) }, get: function(a) { return this.instances[a] }, create: function(a) { var f = this.items[a], b = f && this._.handlers[f.type], c = f && f.command && this.editor.getCommand(f.command), b = b && b.create.apply(this, f.args); this.instances[a] = b; c && c.uiItems.push(b); b && !b.type && (b.type = f.type); return b }, addHandler: function(a, f) { this._.handlers[a] = f }, space: function(a) { return CKEDITOR.document.getById(this.spaceId(a)) }, spaceId: function(a) { return this.editor.id + "_" + a } }, CKEDITOR.event.implementOn(CKEDITOR.ui), function() { function a(a, e, g) { CKEDITOR.event.call(this); a = a && CKEDITOR.tools.clone(a); if (void 0 !== e) { if (!(e instanceof CKEDITOR.dom.element)) throw Error("Expect element of type CKEDITOR.dom.element."); if (!g) throw Error("One of the element modes must be specified."); if (CKEDITOR.env.ie && CKEDITOR.env.quirks && g == CKEDITOR.ELEMENT_MODE_INLINE) throw Error("Inline element mode is not supported on IE quirks."); if (!b(e, g)) throw Error('The specified element mode is not supported on element: "' + e.getName() + '".'); this.element = e; this.elementMode = g; this.name = this.elementMode != CKEDITOR.ELEMENT_MODE_APPENDTO && (e.getId() || e.getNameAtt()) } else this.elementMode = CKEDITOR.ELEMENT_MODE_NONE; this._ = {}; this.commands = {}; this.templates = {}; this.name = this.name || f(); this.id = CKEDITOR.tools.getNextId(); this.status = "unloaded"; this.config = CKEDITOR.tools.prototypedCopy(CKEDITOR.config); this.ui = new CKEDITOR.ui(this); this.focusManager = new CKEDITOR.focusManager(this); this.keystrokeHandler = new CKEDITOR.keystrokeHandler(this); this.on("readOnly", c); this.on("selectionChange", function(a) { m(this, a.data.path) }); this.on("activeFilterChange", function() { m(this, this.elementPath(), !0) }); this.on("mode", c); this.on("instanceReady", function() { this.config.startupFocus && this.focus() }); CKEDITOR.fire("instanceCreated", null, this); CKEDITOR.add(this); CKEDITOR.tools.setTimeout(function() { "destroyed" !== this.status ? d(this, a) : CKEDITOR.warn("editor-incorrect-destroy") }, 0, this) } function f() { do var a = "editor" + ++q; while (CKEDITOR.instances[a]); return a } function b(a, b) { return b == CKEDITOR.ELEMENT_MODE_INLINE ? a.is(CKEDITOR.dtd.$editable) || a.is("textarea") : b == CKEDITOR.ELEMENT_MODE_REPLACE ? !a.is(CKEDITOR.dtd.$nonBodyContent) : 1 } function c() { var a = this.commands, b; for (b in a) e(this, a[b]) } function e(a, b) { b[b.startDisabled ? "disable" : a.readOnly && !b.readOnly ? "disable" : b.modes[a.mode] ? "enable" : "disable"]() } function m(a, b, c) { if (b) { var d, e, g = a.commands; for (e in g) d = g[e], (c || d.contextSensitive) && d.refresh(a, b) } } function l(a) { var b = a.config.customConfig; if (!b) return !1; var b = CKEDITOR.getUrl(b), c = v[b] || (v[b] = {}); c.fn ? (c.fn.call(a, a.config), CKEDITOR.getUrl(a.config.customConfig) != b && l(a) || a.fireOnce("customConfigLoaded")) : CKEDITOR.scriptLoader.queue(b, function() { c.fn = CKEDITOR.editorConfig ? CKEDITOR.editorConfig : function() {}; l(a) }); return !0 } function d(a, b) { a.on("customConfigLoaded", function() { if (b) { if (b.on) for (var c in b.on) a.on(c, b.on[c]); CKEDITOR.tools.extend(a.config, b, !0); delete a.config.on } c = a.config; a.readOnly = c.readOnly ? !0 : a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? a.element.is("textarea") ? a.element.hasAttribute("disabled") || a.element.hasAttribute("readonly") : a.element.isReadOnly() : a.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE ? a.element.hasAttribute("disabled") || a.element.hasAttribute("readonly") : !1; a.blockless = a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? !(a.element.is("textarea") || CKEDITOR.dtd[a.element.getName()].p) : !1; a.tabIndex = c.tabIndex || a.element && a.element.getAttribute("tabindex") || 0; a.activeEnterMode = a.enterMode = a.blockless ? CKEDITOR.ENTER_BR : c.enterMode; a.activeShiftEnterMode = a.shiftEnterMode = a.blockless ? CKEDITOR.ENTER_BR : c.shiftEnterMode; c.skin && (CKEDITOR.skinName = c.skin); a.fireOnce("configLoaded"); a.dataProcessor = new CKEDITOR.htmlDataProcessor(a); a.filter = a.activeFilter = new CKEDITOR.filter(a); h(a) }); b && null != b.customConfig && (a.config.customConfig = b.customConfig); l(a) || a.fireOnce("customConfigLoaded") } function h(a) { CKEDITOR.skin.loadPart("editor", function() { k(a) }) } function k(a) { CKEDITOR.lang.load(a.config.language, a.config.defaultLanguage, function(b, c) { var d = a.config.title; a.langCode = b; a.lang = CKEDITOR.tools.prototypedCopy(c); a.title = "string" == typeof d || !1 === d ? d : [a.lang.editor, a.name].join(", "); a.config.contentsLangDirection || (a.config.contentsLangDirection = a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? a.element.getDirection(1) : a.lang.dir); a.fire("langLoaded"); g(a) }) } function g(a) { a.getStylesSet(function(b) { a.once("loaded", function() { a.fire("stylesSet", { styles: b }) }, null, null, 1); n(a) }) } function n(a) { var b = a.config, c = b.plugins, d = b.extraPlugins, e = b.removePlugins; if (d) var g = new RegExp("(?:^|,)(?:" + d.replace(/\s*,\s*/g, "|") + ")(?\x3d,|$)", "g"), c = c.replace(g, ""), c = c + ("," + d); if (e) var f = new RegExp("(?:^|,)(?:" + e.replace(/\s*,\s*/g, "|") + ")(?\x3d,|$)", "g"), c = c.replace(f, ""); CKEDITOR.env.air && (c += ",adobeair"); CKEDITOR.plugins.load(c.split(","), function(c) { var d = [], e = [], g = []; a.plugins = c; for (var k in c) { var h = c[k], t = h.lang, m = null, l = h.requires, n; CKEDITOR.tools.isArray(l) && (l = l.join(",")); if (l && (n = l.match(f))) for (; l = n.pop();) CKEDITOR.error("editor-plugin-required", { plugin: l.replace(",", ""), requiredBy: k }); t && !a.lang[k] && (t.split && (t = t.split(",")), 0 <= CKEDITOR.tools.indexOf(t, a.langCode) ? m = a.langCode : (m = a.langCode.replace(/-.*/, ""), m = m != a.langCode && 0 <= CKEDITOR.tools.indexOf(t, m) ? m : 0 <= CKEDITOR.tools.indexOf(t, "en") ? "en" : t[0]), h.langEntries && h.langEntries[m] ? (a.lang[k] = h.langEntries[m], m = null) : g.push(CKEDITOR.getUrl(h.path + "lang/" + m + ".js"))); e.push(m); d.push(h) } CKEDITOR.scriptLoader.load(g, function() { for (var c = ["beforeInit", "init", "afterInit"], g = 0; g < c.length; g++) for (var f = 0; f < d.length; f++) { var k = d[f]; 0 === g && e[f] && k.lang && k.langEntries && (a.lang[k.name] = k.langEntries[e[f]]); if (k[c[g]]) k[c[g]](a) } a.fireOnce("pluginsLoaded"); b.keystrokes && a.setKeystroke(a.config.keystrokes); for (f = 0; f < a.config.blockedKeystrokes.length; f++) a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[f]] = 1; a.status = "loaded"; a.fireOnce("loaded"); CKEDITOR.fire("instanceLoaded", null, a) }) }) } function w() { var a = this.element; if (a && this.elementMode != CKEDITOR.ELEMENT_MODE_APPENDTO) { var b = this.getData(); this.config.htmlEncodeOutput && (b = CKEDITOR.tools.htmlEncode(b)); a.is("textarea") ? a.setValue(b) : a.setHtml(b); return !0 } return !1 } a.prototype = CKEDITOR.editor.prototype; CKEDITOR.editor = a; var q = 0, v = {}; CKEDITOR.tools.extend(CKEDITOR.editor.prototype, { addCommand: function(a, b) { b.name = a.toLowerCase(); var c = new CKEDITOR.command(this, b); this.mode && e(this, c); return this.commands[a] = c }, _attachToForm: function() { function a(b) { c.updateElement(); c._.required && !d.getValue() && !1 === c.fire("required") && b.data.preventDefault() } function b(a) { return !!(a && a.call && a.apply) } var c = this, d = c.element, e = new CKEDITOR.dom.element(d.$.form); d.is("textarea") && e && (e.on("submit", a), b(e.$.submit) && (e.$.submit = CKEDITOR.tools.override(e.$.submit, function(b) { return function() { a(); b.apply ? b.apply(this) : b() } })), c.on("destroy", function() { e.removeListener("submit", a) })) }, destroy: function(a) { this.fire("beforeDestroy"); !a && w.call(this); this.editable(null); this.filter && (this.filter.destroy(), delete this.filter); delete this.activeFilter; this.status = "destroyed"; this.fire("destroy"); this.removeAllListeners(); CKEDITOR.remove(this); CKEDITOR.fire("instanceDestroyed", null, this) }, elementPath: function(a) { if (!a) { a = this.getSelection(); if (!a) return null; a = a.getStartElement() } return a ? new CKEDITOR.dom.elementPath(a, this.editable()) : null }, createRange: function() { var a = this.editable(); return a ? new CKEDITOR.dom.range(a) : null }, execCommand: function(a, b) { var c = this.getCommand(a), d = { name: a, commandData: b, command: c }; return c && c.state != CKEDITOR.TRISTATE_DISABLED && !1 !== this.fire("beforeCommandExec", d) && (d.returnValue = c.exec(d.commandData), !c.async && !1 !== this.fire("afterCommandExec", d)) ? d.returnValue : !1 }, getCommand: function(a) { return this.commands[a] }, getData: function(a) { !a && this.fire("beforeGetData"); var b = this._.data; "string" != typeof b && (b = (b = this.element) && this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE ? b.is("textarea") ? b.getValue() : b.getHtml() : ""); b = { dataValue: b }; !a && this.fire("getData", b); return b.dataValue }, getSnapshot: function() { var a = this.fire("getSnapshot"); "string" != typeof a && (a = (a = this.element) && this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE ? a.is("textarea") ? a.getValue() : a.getHtml() : ""); return a }, loadSnapshot: function(a) { this.fire("loadSnapshot", a) }, setData: function(a, b, c) { var d = !0, e = b; b && "object" == typeof b && (c = b.internal, e = b.callback, d = !b.noSnapshot); !c && d && this.fire("saveSnapshot"); if (e || !c) this.once("dataReady", function(a) { !c && d && this.fire("saveSnapshot"); e && e.call(a.editor) }); a = { dataValue: a }; !c && this.fire("setData", a); this._.data = a.dataValue; !c && this.fire("afterSetData", a) }, setReadOnly: function(a) { a = null == a || a; this.readOnly != a && (this.readOnly = a, this.keystrokeHandler.blockedKeystrokes[8] = +a, this.editable().setReadOnly(a), this.fire("readOnly")) }, insertHtml: function(a, b, c) { this.fire("insertHtml", { dataValue: a, mode: b, range: c }) }, insertText: function(a) { this.fire("insertText", a) }, insertElement: function(a) { this.fire("insertElement", a) }, getSelectedHtml: function(a) { var b = this.editable(), c = this.getSelection(), c = c && c.getRanges(); if (!b || !c || 0 === c.length) return null; for (var d = new CKEDITOR.dom.documentFragment, e, g, f, k = 0; k < c.length; k++) { var h = c[k], m = h.startContainer; m.getName && "tr" == m.getName() ? (e || (e = m.getAscendant("table").clone(), e.append(m.getAscendant("tbody").clone()), d.append(e), e = e.findOne("tbody")), g && g.equals(m) || (g = m, f = m.clone(), e.append(f)), f.append(h.cloneContents())) : d.append(h.cloneContents()) } b = e ? d : b.getHtmlFromRange(c[0]); return a ? b.getHtml() : b }, extractSelectedHtml: function(a, b) { var c = this.editable(), d = this.getSelection().getRanges(); if (!c || 0 === d.length) return null; d = d[0]; c = c.extractHtmlFromRange(d, b); b || this.getSelection().selectRanges([d]); return a ? c.getHtml() : c }, focus: function() { this.fire("beforeFocus") }, checkDirty: function() { return "ready" == this.status && this._.previousValue !== this.getSnapshot() }, resetDirty: function() { this._.previousValue = this.getSnapshot() }, updateElement: function() { return w.call(this) }, setKeystroke: function() { for (var a = this.keystrokeHandler.keystrokes, b = CKEDITOR.tools.isArray(arguments[0]) ? arguments[0] : [ [].slice.call(arguments, 0) ], c, d, e = b.length; e--;) c = b[e], d = 0, CKEDITOR.tools.isArray(c) && (d = c[1], c = c[0]), d ? a[c] = d : delete a[c] }, getCommandKeystroke: function(a) { var b = a.name, c = this.keystrokeHandler.keystrokes, d; if (a.fakeKeystroke) return a.fakeKeystroke; for (d in c) if (c.hasOwnProperty(d) && c[d] == b) return d; return null }, addFeature: function(a) { return this.filter.addFeature(a) }, setActiveFilter: function(a) { a || (a = this.filter); this.activeFilter !== a && (this.activeFilter = a, this.fire("activeFilterChange"), a === this.filter ? this.setActiveEnterMode(null, null) : this.setActiveEnterMode(a.getAllowedEnterMode(this.enterMode), a.getAllowedEnterMode(this.shiftEnterMode, !0))) }, setActiveEnterMode: function(a, b) { a = a ? this.blockless ? CKEDITOR.ENTER_BR : a : this.enterMode; b = b ? this.blockless ? CKEDITOR.ENTER_BR : b : this.shiftEnterMode; if (this.activeEnterMode != a || this.activeShiftEnterMode != b) this.activeEnterMode = a, this.activeShiftEnterMode = b, this.fire("activeEnterModeChange") }, showNotification: function(a) { alert(a) } }) }(), CKEDITOR.ELEMENT_MODE_NONE = 0, CKEDITOR.ELEMENT_MODE_REPLACE = 1, CKEDITOR.ELEMENT_MODE_APPENDTO = 2, CKEDITOR.ELEMENT_MODE_INLINE = 3, CKEDITOR.htmlParser = function() { this._ = { htmlPartsRegex: /<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--\x3e)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g } }, function() { var a = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g, f = { checked: 1, compact: 1, declare: 1, defer: 1, disabled: 1, ismap: 1, multiple: 1, nohref: 1, noresize: 1, noshade: 1, nowrap: 1, readonly: 1, selected: 1 }; CKEDITOR.htmlParser.prototype = { onTagOpen: function() {}, onTagClose: function() {}, onText: function() {}, onCDATA: function() {}, onComment: function() {}, parse: function(b) { for (var c, e, m = 0, l; c = this._.htmlPartsRegex.exec(b);) { e = c.index; if (e > m) if (m = b.substring(m, e), l) l.push(m); else this.onText(m); m = this._.htmlPartsRegex.lastIndex; if (e = c[1]) if (e = e.toLowerCase(), l && CKEDITOR.dtd.$cdata[e] && (this.onCDATA(l.join("")), l = null), !l) { this.onTagClose(e); continue } if (l) l.push(c[0]); else if (e = c[3]) { if (e = e.toLowerCase(), !/="/.test(e)) { var d = {}, h, k = c[4]; c = !!c[5]; if (k) for (; h = a.exec(k);) { var g = h[1].toLowerCase(); h = h[2] || h[3] || h[4] || ""; d[g] = !h && f[g] ? g : CKEDITOR.tools.htmlDecodeAttr(h) } this.onTagOpen(e, d, c); !l && CKEDITOR.dtd.$cdata[e] && (l = []) } } else if (e = c[2]) this.onComment(e) } if (b.length > m) this.onText(b.substring(m, b.length)) } } }(), CKEDITOR.htmlParser.basicWriter = CKEDITOR.tools.createClass({ $: function() { this._ = { output: [] } }, proto: { openTag: function(a) { this._.output.push("\x3c", a) }, openTagClose: function(a, f) { f ? this._.output.push(" /\x3e") : this._.output.push("\x3e") }, attribute: function(a, f) { "string" == typeof f && (f = CKEDITOR.tools.htmlEncodeAttr(f)); this._.output.push(" ", a, '\x3d"', f, '"') }, closeTag: function(a) { this._.output.push("\x3c/", a, "\x3e") }, text: function(a) { this._.output.push(a) }, comment: function(a) { this._.output.push("\x3c!--", a, "--\x3e") }, write: function(a) { this._.output.push(a) }, reset: function() { this._.output = []; this._.indent = !1 }, getHtml: function(a) { var f = this._.output.join(""); a && this.reset(); return f } } }), "use strict", function() { CKEDITOR.htmlParser.node = function() {}; CKEDITOR.htmlParser.node.prototype = { remove: function() { var a = this.parent.children, f = CKEDITOR.tools.indexOf(a, this), b = this.previous, c = this.next; b && (b.next = c); c && (c.previous = b); a.splice(f, 1); this.parent = null }, replaceWith: function(a) { var f = this.parent.children, b = CKEDITOR.tools.indexOf(f, this), c = a.previous = this.previous, e = a.next = this.next; c && (c.next = a); e && (e.previous = a); f[b] = a; a.parent = this.parent; this.parent = null }, insertAfter: function(a) { var f = a.parent.children, b = CKEDITOR.tools.indexOf(f, a), c = a.next; f.splice(b + 1, 0, this); this.next = a.next; this.previous = a; a.next = this; c && (c.previous = this); this.parent = a.parent }, insertBefore: function(a) { var f = a.parent.children, b = CKEDITOR.tools.indexOf(f, a); f.splice(b, 0, this); this.next = a; (this.previous = a.previous) && (a.previous.next = this); a.previous = this; this.parent = a.parent }, getAscendant: function(a) { var f = "function" == typeof a ? a : "string" == typeof a ? function(b) { return b.name == a } : function(b) { return b.name in a }, b = this.parent; for (; b && b.type == CKEDITOR.NODE_ELEMENT;) { if (f(b)) return b; b = b.parent } return null }, wrapWith: function(a) { this.replaceWith(a); a.add(this); return a }, getIndex: function() { return CKEDITOR.tools.indexOf(this.parent.children, this) }, getFilterContext: function(a) { return a || {} } } }(), "use strict", CKEDITOR.htmlParser.comment = function(a) { this.value = a; this._ = { isBlockLike: !1 } }, CKEDITOR.htmlParser.comment.prototype = CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node, { type: CKEDITOR.NODE_COMMENT, filter: function(a, f) { var b = this.value; if (!(b = a.onComment(f, b, this))) return this.remove(), !1; if ("string" != typeof b) return this.replaceWith(b), !1; this.value = b; return !0 }, writeHtml: function(a, f) { f && this.filter(f); a.comment(this.value) } }), "use strict", function() { CKEDITOR.htmlParser.text = function(a) { this.value = a; this._ = { isBlockLike: !1 } }; CKEDITOR.htmlParser.text.prototype = CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node, { type: CKEDITOR.NODE_TEXT, filter: function(a, f) { if (!(this.value = a.onText(f, this.value, this))) return this.remove(), !1 }, writeHtml: function(a, f) { f && this.filter(f); a.text(this.value) } }) }(), "use strict", function() { CKEDITOR.htmlParser.cdata = function(a) { this.value = a }; CKEDITOR.htmlParser.cdata.prototype = CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node, { type: CKEDITOR.NODE_TEXT, filter: function() {}, writeHtml: function(a) { a.write(this.value) } }) }(), "use strict", CKEDITOR.htmlParser.fragment = function() { this.children = []; this.parent = null; this._ = { isBlockLike: !0, hasInlineStarted: !1 } }, function() { function a(a) { return a.attributes["data-cke-survive"] ? !1 : "a" == a.name && a.attributes.href || CKEDITOR.dtd.$removeEmpty[a.name] } var f = CKEDITOR.tools.extend({ table: 1, ul: 1, ol: 1, dl: 1 }, CKEDITOR.dtd.table, CKEDITOR.dtd.ul, CKEDITOR.dtd.ol, CKEDITOR.dtd.dl), b = { ol: 1, ul: 1 }, c = CKEDITOR.tools.extend({}, { html: 1 }, CKEDITOR.dtd.html, CKEDITOR.dtd.body, CKEDITOR.dtd.head, { style: 1, script: 1 }), e = { ul: "li", ol: "li", dl: "dd", table: "tbody", tbody: "tr", thead: "tr", tfoot: "tr", tr: "td" }; CKEDITOR.htmlParser.fragment.fromHtml = function(m, l, d) { function h(a) { var b; if (0 < r.length) for (var c = 0; c < r.length; c++) { var d = r[c], e = d.name, g = CKEDITOR.dtd[e], f = z.name && CKEDITOR.dtd[z.name]; f && !f[e] || a && g && !g[a] && CKEDITOR.dtd[a] ? e == z.name && (n(z, z.parent, 1), c--) : (b || (k(), b = 1), d = d.clone(), d.parent = z, z = d, r.splice(c, 1), c--) } } function k() { for (; p.length;) n(p.shift(), z) } function g(a) { if (a._.isBlockLike && "pre" != a.name && "textarea" != a.name) { var b = a.children.length, c = a.children[b - 1], d; c && c.type == CKEDITOR.NODE_TEXT && ((d = CKEDITOR.tools.rtrim(c.value)) ? c.value = d : a.children.length = b - 1) } } function n(b, c, e) { c = c || z || u; var f = z; void 0 === b.previous && (w(c, b) && (z = c, v.onTagOpen(d, {}), b.returnPoint = c = z), g(b), a(b) && !b.children.length || c.add(b), "pre" == b.name && (t = !1), "textarea" == b.name && (B = !1)); b.returnPoint ? (z = b.returnPoint, delete b.returnPoint) : z = e ? c : f } function w(a, b) { if ((a == u || "body" == a.name) && d && (!a.name || CKEDITOR.dtd[a.name][d])) { var c, e; return (c = b.attributes && (e = b.attributes["data-cke-real-element-type"]) ? e : b.name) && c in CKEDITOR.dtd.$inline && !(c in CKEDITOR.dtd.head) && !b.isOrphan || b.type == CKEDITOR.NODE_TEXT } } function q(a, b) { return a in CKEDITOR.dtd.$listItem || a in CKEDITOR.dtd.$tableContent ? a == b || "dt" == a && "dd" == b || "dd" == a && "dt" == b : !1 } var v = new CKEDITOR.htmlParser, u = l instanceof CKEDITOR.htmlParser.element ? l : "string" == typeof l ? new CKEDITOR.htmlParser.element(l) : new CKEDITOR.htmlParser.fragment, r = [], p = [], z = u, B = "textarea" == u.name, t = "pre" == u.name; v.onTagOpen = function(d, e, g, m) { e = new CKEDITOR.htmlParser.element(d, e); e.isUnknown && g && (e.isEmpty = !0); e.isOptionalClose = m; if (a(e)) r.push(e); else { if ("pre" == d) t = !0; else { if ("br" == d && t) { z.add(new CKEDITOR.htmlParser.text("\n")); return } "textarea" == d && (B = !0) } if ("br" == d) p.push(e); else { for (; !(m = (g = z.name) ? CKEDITOR.dtd[g] || (z._.isBlockLike ? CKEDITOR.dtd.div : CKEDITOR.dtd.span) : c, e.isUnknown || z.isUnknown || m[d]);) if (z.isOptionalClose) v.onTagClose(g); else if (d in b && g in b) g = z.children, (g = g[g.length - 1]) && "li" == g.name || n(g = new CKEDITOR.htmlParser.element("li"), z), !e.returnPoint && (e.returnPoint = z), z = g; else if (d in CKEDITOR.dtd.$listItem && !q(d, g)) v.onTagOpen("li" == d ? "ul" : "dl", {}, 0, 1); else if (g in f && !q(d, g)) !e.returnPoint && (e.returnPoint = z), z = z.parent; else if (g in CKEDITOR.dtd.$inline && r.unshift(z), z.parent) n(z, z.parent, 1); else { e.isOrphan = 1; break } h(d); k(); e.parent = z; e.isEmpty ? n(e) : z = e } } }; v.onTagClose = function(a) { for (var b = r.length - 1; 0 <= b; b--) if (a == r[b].name) { r.splice(b, 1); return } for (var c = [], e = [], g = z; g != u && g.name != a;) g._.isBlockLike || e.unshift(g), c.push(g), g = g.returnPoint || g.parent; if (g != u) { for (b = 0; b < c.length; b++) { var f = c[b]; n(f, f.parent) } z = g; g._.isBlockLike && k(); n(g, g.parent); g == z && (z = z.parent); r = r.concat(e) } "body" == a && (d = !1) }; v.onText = function(a) { if (!(z._.hasInlineStarted && !p.length || t || B) && (a = CKEDITOR.tools.ltrim(a), 0 === a.length)) return; var b = z.name, g = b ? CKEDITOR.dtd[b] || (z._.isBlockLike ? CKEDITOR.dtd.div : CKEDITOR.dtd.span) : c; if (!B && !g["#"] && b in f) v.onTagOpen(e[b] || ""), v.onText(a); else { k(); h(); t || B || (a = a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g, " ")); a = new CKEDITOR.htmlParser.text(a); if (w(z, a)) this.onTagOpen(d, {}, 0, 1); z.add(a) } }; v.onCDATA = function(a) { z.add(new CKEDITOR.htmlParser.cdata(a)) }; v.onComment = function(a) { k(); h(); z.add(new CKEDITOR.htmlParser.comment(a)) }; v.parse(m); for (k(); z != u;) n(z, z.parent, 1); g(u); return u }; CKEDITOR.htmlParser.fragment.prototype = { type: CKEDITOR.NODE_DOCUMENT_FRAGMENT, add: function(a, b) { isNaN(b) && (b = this.children.length); var c = 0 < b ? this.children[b - 1] : null; if (c) { if (a._.isBlockLike && c.type == CKEDITOR.NODE_TEXT && (c.value = CKEDITOR.tools.rtrim(c.value), 0 === c.value.length)) { this.children.pop(); this.add(a); return } c.next = a } a.previous = c; a.parent = this; this.children.splice(b, 0, a); this._.hasInlineStarted || (this._.hasInlineStarted = a.type == CKEDITOR.NODE_TEXT || a.type == CKEDITOR.NODE_ELEMENT && !a._.isBlockLike) }, filter: function(a, b) { b = this.getFilterContext(b); a.onRoot(b, this); this.filterChildren(a, !1, b) }, filterChildren: function(a, b, c) { if (this.childrenFilteredBy != a.id) { c = this.getFilterContext(c); if (b && !this.parent) a.onRoot(c, this); this.childrenFilteredBy = a.id; for (b = 0; b < this.children.length; b++) !1 === this.children[b].filter(a, c) && b-- } }, writeHtml: function(a, b) { b && this.filter(b); this.writeChildrenHtml(a) }, writeChildrenHtml: function(a, b, c) { var e = this.getFilterContext(); if (c && !this.parent && b) b.onRoot(e, this); b && this.filterChildren(b, !1, e); b = 0; c = this.children; for (e = c.length; b < e; b++) c[b].writeHtml(a) }, forEach: function(a, b, c) { if (!(c || b && this.type != b)) var e = a(this); if (!1 !== e) { c = this.children; for (var f = 0; f < c.length; f++) e = c[f], e.type == CKEDITOR.NODE_ELEMENT ? e.forEach(a, b) : b && e.type != b || a(e) } }, getFilterContext: function(a) { return a || {} } } }(), "use strict", function() { function a() { this.rules = [] } function f(b, c, e, f) { var l, d; for (l in c)(d = b[l]) || (d = b[l] = new a), d.add(c[l], e, f) } CKEDITOR.htmlParser.filter = CKEDITOR.tools.createClass({ $: function(b) { this.id = CKEDITOR.tools.getNextNumber(); this.elementNameRules = new a; this.attributeNameRules = new a; this.elementsRules = {}; this.attributesRules = {}; this.textRules = new a; this.commentRules = new a; this.rootRules = new a; b && this.addRules(b, 10) }, proto: { addRules: function(a, c) { var e; "number" == typeof c ? e = c : c && "priority" in c && (e = c.priority); "number" != typeof e && (e = 10); "object" != typeof c && (c = {}); a.elementNames && this.elementNameRules.addMany(a.elementNames, e, c); a.attributeNames && this.attributeNameRules.addMany(a.attributeNames, e, c); a.elements && f(this.elementsRules, a.elements, e, c); a.attributes && f(this.attributesRules, a.attributes, e, c); a.text && this.textRules.add(a.text, e, c); a.comment && this.commentRules.add(a.comment, e, c); a.root && this.rootRules.add(a.root, e, c) }, applyTo: function(a) { a.filter(this) }, onElementName: function(a, c) { return this.elementNameRules.execOnName(a, c) }, onAttributeName: function(a, c) { return this.attributeNameRules.execOnName(a, c) }, onText: function(a, c, e) { return this.textRules.exec(a, c, e) }, onComment: function(a, c, e) { return this.commentRules.exec(a, c, e) }, onRoot: function(a, c) { return this.rootRules.exec(a, c) }, onElement: function(a, c) { for (var e = [this.elementsRules["^"], this.elementsRules[c.name], this.elementsRules.$], f, l = 0; 3 > l; l++) if (f = e[l]) { f = f.exec(a, c, this); if (!1 === f) return null; if (f && f != c) return this.onNode(a, f); if (c.parent && !c.name) break } return c }, onNode: function(a, c) { var e = c.type; return e == CKEDITOR.NODE_ELEMENT ? this.onElement(a, c) : e == CKEDITOR.NODE_TEXT ? new CKEDITOR.htmlParser.text(this.onText(a, c.value)) : e == CKEDITOR.NODE_COMMENT ? new CKEDITOR.htmlParser.comment(this.onComment(a, c.value)) : null }, onAttribute: function(a, c, e, f) { return (e = this.attributesRules[e]) ? e.exec(a, f, c, this) : f } } }); CKEDITOR.htmlParser.filterRulesGroup = a; a.prototype = { add: function(a, c, e) { this.rules.splice(this.findIndex(c), 0, { value: a, priority: c, options: e }) }, addMany: function(a, c, e) { for (var f = [this.findIndex(c), 0], l = 0, d = a.length; l < d; l++) f.push({ value: a[l], priority: c, options: e }); this.rules.splice.apply(this.rules, f) }, findIndex: function(a) { for (var c = this.rules, e = c.length - 1; 0 <= e && a < c[e].priority;) e--; return e + 1 }, exec: function(a, c) { var e = c instanceof CKEDITOR.htmlParser.node || c instanceof CKEDITOR.htmlParser.fragment, f = Array.prototype.slice.call(arguments, 1), l = this.rules, d = l.length, h, k, g, n; for (n = 0; n < d; n++) if (e && (h = c.type, k = c.name), g = l[n], !(a.nonEditable && !g.options.applyToAll || a.nestedEditable && g.options.excludeNestedEditable)) { g = g.value.apply(null, f); if (!1 === g || e && g && (g.name != k || g.type != h)) return g; null != g && (f[0] = c = g) } return c }, execOnName: function(a, c) { for (var e = 0, f = this.rules, l = f.length, d; c && e < l; e++) d = f[e], a.nonEditable && !d.options.applyToAll || a.nestedEditable && d.options.excludeNestedEditable || (c = c.replace(d.value[0], d.value[1])); return c } } }(), function() { function a(a, d) { function g(a) { return a || CKEDITOR.env.needsNbspFiller ? new CKEDITOR.htmlParser.text(" ") : new CKEDITOR.htmlParser.element("br", { "data-cke-bogus": 1 }) } function f(a, d) { return function(e) { if (e.type != CKEDITOR.NODE_DOCUMENT_FRAGMENT) { var f = [], h = b(e), t, l; if (h) for (k(h, 1) && f.push(h); h;) m(h) && (t = c(h)) && k(t) && ((l = c(t)) && !m(l) ? f.push(t) : (g(y).insertAfter(t), t.remove())), h = h.previous; for (h = 0; h < f.length; h++) f[h].remove(); if (f = !a || !1 !== ("function" == typeof d ? d(e) : d)) y || CKEDITOR.env.needsBrFiller || e.type != CKEDITOR.NODE_DOCUMENT_FRAGMENT ? y || CKEDITOR.env.needsBrFiller || !(7 < document.documentMode || e.name in CKEDITOR.dtd.tr || e.name in CKEDITOR.dtd.$listItem) ? (f = b(e), f = !f || "form" == e.name && "input" == f.name) : f = !1 : f = !1; f && e.add(g(a)) } } } function k(a, b) { if ((!y || CKEDITOR.env.needsBrFiller) && a.type == CKEDITOR.NODE_ELEMENT && "br" == a.name && !a.attributes["data-cke-eol"]) return !0; var c; return a.type == CKEDITOR.NODE_TEXT && (c = a.value.match(r)) && (c.index && ((new CKEDITOR.htmlParser.text(a.value.substring(0, c.index))).insertBefore(a), a.value = c[0]), !CKEDITOR.env.needsBrFiller && y && (!b || a.parent.name in n) || !y && ((c = a.previous) && "br" == c.name || !c || m(c))) ? !0 : !1 } var h = { elements: {} }, y = "html" == d, n = CKEDITOR.tools.extend({}, t), E; for (E in n) "#" in z[E] || delete n[E]; for (E in n) h.elements[E] = f(y, a.config.fillEmptyBlocks); h.root = f(y, !1); h.elements.br = function(a) { return function(b) { if (b.parent.type != CKEDITOR.NODE_DOCUMENT_FRAGMENT) { var d = b.attributes; if ("data-cke-bogus" in d || "data-cke-eol" in d) delete d["data-cke-bogus"]; else { for (d = b.next; d && e(d);) d = d.next; var f = c(b); !d && m(b.parent) ? l(b.parent, g(a)) : m(d) && f && !m(f) && g(a).insertBefore(d) } } } }(y); return h } function f(a, b) { return a != CKEDITOR.ENTER_BR && !1 !== b ? a == CKEDITOR.ENTER_DIV ? "div" : "p" : !1 } function b(a) { for (a = a.children[a.children.length - 1]; a && e(a);) a = a.previous; return a } function c(a) { for (a = a.previous; a && e(a);) a = a.previous; return a } function e(a) { return a.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.trim(a.value) || a.type == CKEDITOR.NODE_ELEMENT && a.attributes["data-cke-bookmark"] } function m(a) { return a && (a.type == CKEDITOR.NODE_ELEMENT && a.name in t || a.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT) } function l(a, b) { var c = a.children[a.children.length - 1]; a.children.push(b); b.parent = a; c && (c.next = b, b.previous = c) } function d(a) { a = a.attributes; "false" != a.contenteditable && (a["data-cke-editable"] = a.contenteditable ? "true" : 1); a.contenteditable = "false" } function h(a) { a = a.attributes; switch (a["data-cke-editable"]) { case "true": a.contenteditable = "true"; break; case "1": delete a.contenteditable } } function k(a) { return a.replace(C, function(a, b, c) { return "\x3c" + b + c.replace(F, function(a, b) { return G.test(b) && -1 == c.indexOf("data-cke-saved-" + b) ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR.rnd + "-" + a : a }) + "\x3e" }) } function g(a, b) { return a.replace(b, function(a, b, c) { 0 === a.indexOf("\x3ctextarea") && (a = b + q(c).replace(//g, "\x26gt;") + "\x3c/textarea\x3e"); return "\x3ccke:encoded\x3e" + encodeURIComponent(a) + "\x3c/cke:encoded\x3e" }) } function n(a) { return a.replace(K, function(a, b) { return decodeURIComponent(b) }) } function w(a) { return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g, function(a) { return "\x3c!--" + p + "{C}" + encodeURIComponent(a).replace(/--/g, "%2D%2D") + "--\x3e" }) } function q(a) { return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g, function(a, b) { return decodeURIComponent(b) }) } function v(a, b) { var c = b._.dataStore; return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g, function(a, b) { return decodeURIComponent(b) }).replace(/\{cke_protected_(\d+)\}/g, function(a, b) { return c && c[b] || "" }) } function u(a, b) { var c = [], d = b.config.protectedSource, e = b._.dataStore || (b._.dataStore = { id: 1 }), g = /<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g, d = [/|$)/gi, //gi, //gi].concat(d); a = a.replace(/\x3c!--[\s\S]*?--\x3e/g, function(a) { return "\x3c!--{cke_tempcomment}" + (c.push(a) - 1) + "--\x3e" }); for (var f = 0; f < d.length; f++) a = a.replace(d[f], function(a) { a = a.replace(g, function(a, b, d) { return c[d] }); return /cke_temp(comment)?/.test(a) ? a : "\x3c!--{cke_temp}" + (c.push(a) - 1) + "--\x3e" }); a = a.replace(g, function(a, b, d) { return "\x3c!--" + p + (b ? "{C}" : "") + encodeURIComponent(c[d]).replace(/--/g, "%2D%2D") + "--\x3e" }); a = a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g, function(a) { return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g, function(a, b) { e[e.id] = decodeURIComponent(b); return "{cke_protected_" + e.id++ + "}" }) }); return a = a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g, function(a, c, d, e) { return "\x3c" + c + d + "\x3e" + v(q(e), b) + "\x3c/" + c + "\x3e" }) } CKEDITOR.htmlDataProcessor = function(b) { var c, d, e = this; this.editor = b; this.dataFilter = c = new CKEDITOR.htmlParser.filter; this.htmlFilter = d = new CKEDITOR.htmlParser.filter; this.writer = new CKEDITOR.htmlParser.basicWriter; c.addRules(y); c.addRules(D, { applyToAll: !0 }); c.addRules(a(b, "data"), { applyToAll: !0 }); d.addRules(x); d.addRules(A, { applyToAll: !0 }); d.addRules(a(b, "html"), { applyToAll: !0 }); b.on("toHtml", function(a) { a = a.data; var c = a.dataValue, d, c = u(c, b), c = g(c, H), c = k(c), c = g(c, I), c = c.replace(J, "$1cke:$2"), c = c.replace(S, "\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"), c = c.replace(/(]*>)(\r\n|\n)/g, "$1$2$2"), c = c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi, "$1data-cke-" + CKEDITOR.rnd + "-$2"); d = a.context || b.editable().getName(); var e; CKEDITOR.env.ie && 9 > CKEDITOR.env.version && "pre" == d && (d = "div", c = "\x3cpre\x3e" + c + "\x3c/pre\x3e", e = 1); d = b.document.createElement(d); d.setHtml("a" + c); c = d.getHtml().substr(1); c = c.replace(new RegExp("data-cke-" + CKEDITOR.rnd + "-", "ig"), ""); e && (c = c.replace(/^
|<\/pre>$/gi, ""));
                    c = c.replace(E, "$1$2");
                    c = n(c);
                    c = q(c);
                    d = !1 === a.fixForBody ? !1 : f(a.enterMode, b.config.autoParagraph);
                    c = CKEDITOR.htmlParser.fragment.fromHtml(c, a.context, d);
                    d && (e = c, !e.children.length && CKEDITOR.dtd[e.name][d] && (d = new CKEDITOR.htmlParser.element(d), e.add(d)));
                    a.dataValue = c
                }, null, null, 5);
                b.on("toHtml", function(a) {
                    a.data.filter.applyTo(a.data.dataValue, !0, a.data.dontFilter, a.data.enterMode) && b.fire("dataFiltered")
                }, null, null, 6);
                b.on("toHtml", function(a) {
                    a.data.dataValue.filterChildren(e.dataFilter, !0)
                }, null, null, 10);
                b.on("toHtml", function(a) {
                    a = a.data;
                    var b = a.dataValue,
                        c = new CKEDITOR.htmlParser.basicWriter;
                    b.writeChildrenHtml(c);
                    b = c.getHtml(!0);
                    a.dataValue = w(b)
                }, null, null, 15);
                b.on("toDataFormat", function(a) {
                    var c = a.data.dataValue;
                    a.data.enterMode != CKEDITOR.ENTER_BR && (c = c.replace(/^
/i, "")); a.data.dataValue = CKEDITOR.htmlParser.fragment.fromHtml(c, a.data.context, f(a.data.enterMode, b.config.autoParagraph)) }, null, null, 5); b.on("toDataFormat", function(a) { a.data.dataValue.filterChildren(e.htmlFilter, !0) }, null, null, 10); b.on("toDataFormat", function(a) { a.data.filter.applyTo(a.data.dataValue, !1, !0) }, null, null, 11); b.on("toDataFormat", function(a) { var c = a.data.dataValue, d = e.writer; d.reset(); c.writeChildrenHtml(d); c = d.getHtml(!0); c = q(c); c = v(c, b); a.data.dataValue = c }, null, null, 15) }; CKEDITOR.htmlDataProcessor.prototype = { toHtml: function(a, b, c, d) { var e = this.editor, g, f, k, h; b && "object" == typeof b ? (g = b.context, c = b.fixForBody, d = b.dontFilter, f = b.filter, k = b.enterMode, h = b.protectedWhitespaces) : g = b; g || null === g || (g = e.editable().getName()); return e.fire("toHtml", { dataValue: a, context: g, fixForBody: c, dontFilter: d, filter: f || e.filter, enterMode: k || e.enterMode, protectedWhitespaces: h }).dataValue }, toDataFormat: function(a, b) { var c, d, e; b && (c = b.context, d = b.filter, e = b.enterMode); c || null === c || (c = this.editor.editable().getName()); return this.editor.fire("toDataFormat", { dataValue: a, filter: d || this.editor.filter, context: c, enterMode: e || this.editor.enterMode }).dataValue } }; var r = /(?: |\xa0)$/, p = "{cke_protected}", z = CKEDITOR.dtd, B = "caption colgroup col thead tfoot tbody".split(" "), t = CKEDITOR.tools.extend({}, z.$blockLimit, z.$block), y = { elements: { input: d, textarea: d } }, D = { attributeNames: [ [/^on/, "data-cke-pa-on"], [/^data-cke-expando$/, ""] ] }, x = { elements: { embed: function(a) { var b = a.parent; if (b && "object" == b.name) { var c = b.attributes.width, b = b.attributes.height; c && (a.attributes.width = c); b && (a.attributes.height = b) } }, a: function(a) { var b = a.attributes; if (!(a.children.length || b.name || b.id || a.attributes["data-cke-saved-name"])) return !1 } } }, A = { elementNames: [ [/^cke:/, ""], [/^\?xml:namespace$/, ""] ], attributeNames: [ [/^data-cke-(saved|pa)-/, ""], [/^data-cke-.*/, ""], ["hidefocus", ""] ], elements: { $: function(a) { var b = a.attributes; if (b) { if (b["data-cke-temp"]) return !1; for (var c = ["name", "href", "src"], d, e = 0; e < c.length; e++) d = "data-cke-saved-" + c[e], d in b && delete b[c[e]] } return a }, table: function(a) { a.children.slice(0).sort(function(a, b) { var c, d; a.type == CKEDITOR.NODE_ELEMENT && b.type == a.type && (c = CKEDITOR.tools.indexOf(B, a.name), d = CKEDITOR.tools.indexOf(B, b.name)); - 1 < c && -1 < d && c != d || (c = a.parent ? a.getIndex() : -1, d = b.parent ? b.getIndex() : -1); return c > d ? 1 : -1 }) }, param: function(a) { a.children = []; a.isEmpty = !0; return a }, span: function(a) { "Apple-style-span" == a.attributes["class"] && delete a.name }, html: function(a) { delete a.attributes.contenteditable; delete a.attributes["class"] }, body: function(a) { delete a.attributes.spellcheck; delete a.attributes.contenteditable }, style: function(a) { var b = a.children[0]; b && b.value && (b.value = CKEDITOR.tools.trim(b.value)); a.attributes.type || (a.attributes.type = "text/css") }, title: function(a) { var b = a.children[0]; !b && l(a, b = new CKEDITOR.htmlParser.text); b.value = a.attributes["data-cke-title"] || "" }, input: h, textarea: h }, attributes: { "class": function(a) { return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g, "")) || !1 } } }; CKEDITOR.env.ie && (A.attributes.style = function(a) { return a.replace(/(^|;)([^\:]+)/g, function(a) { return a.toLowerCase() }) }); var C = /<(a|area|img|input|source)\b([^>]*)>/gi, F = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi, G = /^(href|src|name)$/i, I = /(?:])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi, H = /(])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi, K = /([^<]*)<\/cke:encoded>/gi, J = /(<\/?)((?:object|embed|param|html|body|head|title)[^>]*>)/gi, E = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi, S = /]*?)\/?>(?!\s*<\/cke:\1)/gi }(), "use strict", CKEDITOR.htmlParser.element = function(a, f) { this.name = a; this.attributes = f || {}; this.children = []; var b = a || "", c = b.match(/^cke:(.*)/); c && (b = c[1]); b = !!(CKEDITOR.dtd.$nonBodyContent[b] || CKEDITOR.dtd.$block[b] || CKEDITOR.dtd.$listItem[b] || CKEDITOR.dtd.$tableContent[b] || CKEDITOR.dtd.$nonEditable[b] || "br" == b); this.isEmpty = !!CKEDITOR.dtd.$empty[a]; this.isUnknown = !CKEDITOR.dtd[a]; this._ = { isBlockLike: b, hasInlineStarted: this.isEmpty || !b } }, CKEDITOR.htmlParser.cssStyle = function(a) { var f = {}; ((a instanceof CKEDITOR.htmlParser.element ? a.attributes.style : a) || "").replace(/"/g, '"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g, function(a, c, e) { "font-family" == c && (e = e.replace(/["']/g, "")); f[c.toLowerCase()] = e }); return { rules: f, populate: function(a) { var c = this.toString(); c && (a instanceof CKEDITOR.dom.element ? a.setAttribute("style", c) : a instanceof CKEDITOR.htmlParser.element ? a.attributes.style = c : a.style = c) }, toString: function() { var a = [], c; for (c in f) f[c] && a.push(c, ":", f[c], ";"); return a.join("") } } }, function() { function a(a) { return function(b) { return b.type == CKEDITOR.NODE_ELEMENT && ("string" == typeof a ? b.name == a : b.name in a) } } var f = function(a, b) { a = a[0]; b = b[0]; return a < b ? -1 : a > b ? 1 : 0 }, b = CKEDITOR.htmlParser.fragment.prototype; CKEDITOR.htmlParser.element.prototype = CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node, { type: CKEDITOR.NODE_ELEMENT, add: b.add, clone: function() { return new CKEDITOR.htmlParser.element(this.name, this.attributes) }, filter: function(a, b) { var f = this, l, d; b = f.getFilterContext(b); if (b.off) return !0; if (!f.parent) a.onRoot(b, f); for (;;) { l = f.name; if (!(d = a.onElementName(b, l))) return this.remove(), !1; f.name = d; if (!(f = a.onElement(b, f))) return this.remove(), !1; if (f !== this) return this.replaceWith(f), !1; if (f.name == l) break; if (f.type != CKEDITOR.NODE_ELEMENT) return this.replaceWith(f), !1; if (!f.name) return this.replaceWithChildren(), !1 } l = f.attributes; var h, k; for (h in l) { for (d = l[h];;) if (k = a.onAttributeName(b, h)) if (k != h) delete l[h], h = k; else break; else { delete l[h]; break } k && (!1 === (d = a.onAttribute(b, f, k, d)) ? delete l[k] : l[k] = d) } f.isEmpty || this.filterChildren(a, !1, b); return !0 }, filterChildren: b.filterChildren, writeHtml: function(a, b) { b && this.filter(b); var m = this.name, l = [], d = this.attributes, h, k; a.openTag(m, d); for (h in d) l.push([h, d[h]]); a.sortAttributes && l.sort(f); h = 0; for (k = l.length; h < k; h++) d = l[h], a.attribute(d[0], d[1]); a.openTagClose(m, this.isEmpty); this.writeChildrenHtml(a); this.isEmpty || a.closeTag(m) }, writeChildrenHtml: b.writeChildrenHtml, replaceWithChildren: function() { for (var a = this.children, b = a.length; b;) a[--b].insertAfter(this); this.remove() }, forEach: b.forEach, getFirst: function(b) { if (!b) return this.children.length ? this.children[0] : null; "function" != typeof b && (b = a(b)); for (var e = 0, f = this.children.length; e < f; ++e) if (b(this.children[e])) return this.children[e]; return null }, getHtml: function() { var a = new CKEDITOR.htmlParser.basicWriter; this.writeChildrenHtml(a); return a.getHtml() }, setHtml: function(a) { a = this.children = CKEDITOR.htmlParser.fragment.fromHtml(a).children; for (var b = 0, f = a.length; b < f; ++b) a[b].parent = this }, getOuterHtml: function() { var a = new CKEDITOR.htmlParser.basicWriter; this.writeHtml(a); return a.getHtml() }, split: function(a) { for (var b = this.children.splice(a, this.children.length - a), f = this.clone(), l = 0; l < b.length; ++l) b[l].parent = f; f.children = b; b[0] && (b[0].previous = null); 0 < a && (this.children[a - 1].next = null); this.parent.add(f, this.getIndex() + 1); return f }, find: function(a, b) { void 0 === b && (b = !1); var f = [], l; for (l = 0; l < this.children.length; l++) { var d = this.children[l]; "function" == typeof a && a(d) ? f.push(d) : "string" == typeof a && d.name === a && f.push(d); b && d.find && (f = f.concat(d.find(a, b))) } return f }, addClass: function(a) { if (!this.hasClass(a)) { var b = this.attributes["class"] || ""; this.attributes["class"] = b + (b ? " " : "") + a } }, removeClass: function(a) { var b = this.attributes["class"]; b && ((b = CKEDITOR.tools.trim(b.replace(new RegExp("(?:\\s+|^)" + a + "(?:\\s+|$)"), " "))) ? this.attributes["class"] = b : delete this.attributes["class"]) }, hasClass: function(a) { var b = this.attributes["class"]; return b ? (new RegExp("(?:^|\\s)" + a + "(?\x3d\\s|$)")).test(b) : !1 }, getFilterContext: function(a) { var b = []; a || (a = { off: !1, nonEditable: !1, nestedEditable: !1 }); a.off || "off" != this.attributes["data-cke-processor"] || b.push("off", !0); a.nonEditable || "false" != this.attributes.contenteditable ? a.nonEditable && !a.nestedEditable && "true" == this.attributes.contenteditable && b.push("nestedEditable", !0) : b.push("nonEditable", !0); if (b.length) { a = CKEDITOR.tools.copy(a); for (var f = 0; f < b.length; f += 2) a[b[f]] = b[f + 1] } return a } }, !0) }(), function() { var a = {}, f = /{([^}]+)}/g, b = /([\\'])/g, c = /\n/g, e = /\r/g; CKEDITOR.template = function(m) { if (a[m]) this.output = a[m]; else { var l = m.replace(b, "\\$1").replace(c, "\\n").replace(e, "\\r").replace(f, function(a, b) { return "',data['" + b + "']\x3d\x3dundefined?'{" + b + "}':data['" + b + "'],'" }); this.output = a[m] = Function("data", "buffer", "return buffer?buffer.push('" + l + "'):['" + l + "'].join('');") } } }(), delete CKEDITOR.loadFullCore, CKEDITOR.instances = {}, CKEDITOR.document = new CKEDITOR.dom.document(document), CKEDITOR.add = function(a) { CKEDITOR.instances[a.name] = a; a.on("focus", function() { CKEDITOR.currentInstance != a && (CKEDITOR.currentInstance = a, CKEDITOR.fire("currentInstance")) }); a.on("blur", function() { CKEDITOR.currentInstance == a && (CKEDITOR.currentInstance = null, CKEDITOR.fire("currentInstance")) }); CKEDITOR.fire("instance", null, a) }, CKEDITOR.remove = function(a) { delete CKEDITOR.instances[a.name] }, function() { var a = {}; CKEDITOR.addTemplate = function(f, b) { var c = a[f]; if (c) return c; c = { name: f, source: b }; CKEDITOR.fire("template", c); return a[f] = new CKEDITOR.template(c.source) }; CKEDITOR.getTemplate = function(f) { return a[f] } }(), function() { var a = []; CKEDITOR.addCss = function(f) { a.push(f) }; CKEDITOR.getCss = function() { return a.join("\n") } }(), CKEDITOR.on("instanceDestroyed", function() { CKEDITOR.tools.isEmpty(this.instances) && CKEDITOR.fire("reset") }), CKEDITOR.TRISTATE_ON = 1, CKEDITOR.TRISTATE_OFF = 2, CKEDITOR.TRISTATE_DISABLED = 0, function() { CKEDITOR.inline = function(a, f) { if (!CKEDITOR.env.isCompatible) return null; a = CKEDITOR.dom.element.get(a); if (a.getEditor()) throw 'The editor instance "' + a.getEditor().name + '" is already attached to the provided element.'; var b = new CKEDITOR.editor(f, a, CKEDITOR.ELEMENT_MODE_INLINE), c = a.is("textarea") ? a : null; c ? (b.setData(c.getValue(), null, !0), a = CKEDITOR.dom.element.createFromHtml('\x3cdiv contenteditable\x3d"' + !!b.readOnly + '" class\x3d"cke_textarea_inline"\x3e' + c.getValue() + "\x3c/div\x3e", CKEDITOR.document), a.insertAfter(c), c.hide(), c.$.form && b._attachToForm()) : b.setData(a.getHtml(), null, !0); b.on("loaded", function() { b.fire("uiReady"); b.editable(a); b.container = a; b.ui.contentsElement = a; b.setData(b.getData(1)); b.resetDirty(); b.fire("contentDom"); b.mode = "wysiwyg"; b.fire("mode"); b.status = "ready"; b.fireOnce("instanceReady"); CKEDITOR.fire("instanceReady", null, b) }, null, null, 1E4); b.on("destroy", function() { c && (b.container.clearCustomData(), b.container.remove(), c.show()); b.element.clearCustomData(); delete b.element }); return b }; CKEDITOR.inlineAll = function() { var a, f, b; for (b in CKEDITOR.dtd.$editable) for (var c = CKEDITOR.document.getElementsByTag(b), e = 0, m = c.count(); e < m; e++) a = c.getItem(e), "true" == a.getAttribute("contenteditable") && (f = { element: a, config: {} }, !1 !== CKEDITOR.fire("inline", f) && CKEDITOR.inline(a, f.config)) }; CKEDITOR.domReady(function() { !CKEDITOR.disableAutoInline && CKEDITOR.inlineAll() }) }(), CKEDITOR.replaceClass = "ckeditor", function() { function a(a, e, m, l) { if (!CKEDITOR.env.isCompatible) return null; a = CKEDITOR.dom.element.get(a); if (a.getEditor()) throw 'The editor instance "' + a.getEditor().name + '" is already attached to the provided element.'; var d = new CKEDITOR.editor(e, a, l); l == CKEDITOR.ELEMENT_MODE_REPLACE && (a.setStyle("visibility", "hidden"), d._.required = a.hasAttribute("required"), a.removeAttribute("required")); m && d.setData(m, null, !0); d.on("loaded", function() { b(d); l == CKEDITOR.ELEMENT_MODE_REPLACE && d.config.autoUpdateElement && a.$.form && d._attachToForm(); d.setMode(d.config.startupMode, function() { d.resetDirty(); d.status = "ready"; d.fireOnce("instanceReady"); CKEDITOR.fire("instanceReady", null, d) }) }); d.on("destroy", f); return d } function f() { var a = this.container, b = this.element; a && (a.clearCustomData(), a.remove()); b && (b.clearCustomData(), this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE && (b.show(), this._.required && b.setAttribute("required", "required")), delete this.element) } function b(a) { var b = a.name, f = a.element, l = a.elementMode, d = a.fire("uiSpace", { space: "top", html: "" }).html, h = a.fire("uiSpace", { space: "bottom", html: "" }).html, k = new CKEDITOR.template('\x3c{outerEl} id\x3d"cke_{name}" class\x3d"{id} cke cke_reset cke_chrome cke_editor_{name} cke_{langDir} ' + CKEDITOR.env.cssClass + '" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"application"' + (a.title ? ' aria-labelledby\x3d"cke_{name}_arialbl"' : "") + "\x3e" + (a.title ? '\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e' : "") + '\x3c{outerEl} class\x3d"cke_inner cke_reset" role\x3d"presentation"\x3e{topHtml}\x3c{outerEl} id\x3d"{contentId}" class\x3d"cke_contents cke_reset" role\x3d"presentation"\x3e\x3c/{outerEl}\x3e{bottomHtml}\x3c/{outerEl}\x3e\x3c/{outerEl}\x3e'), b = CKEDITOR.dom.element.createFromHtml(k.output({ id: a.id, name: b, langDir: a.lang.dir, langCode: a.langCode, voiceLabel: a.title, topHtml: d ? '\x3cspan id\x3d"' + a.ui.spaceId("top") + '" class\x3d"cke_top cke_reset_all" role\x3d"presentation" style\x3d"height:auto"\x3e' + d + "\x3c/span\x3e" : "", contentId: a.ui.spaceId("contents"), bottomHtml: h ? '\x3cspan id\x3d"' + a.ui.spaceId("bottom") + '" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e' + h + "\x3c/span\x3e" : "", outerEl: CKEDITOR.env.ie ? "span" : "div" })); l == CKEDITOR.ELEMENT_MODE_REPLACE ? (f.hide(), b.insertAfter(f)) : f.append(b); a.container = b; a.ui.contentsElement = a.ui.space("contents"); d && a.ui.space("top").unselectable(); h && a.ui.space("bottom").unselectable(); f = a.config.width; l = a.config.height; f && b.setStyle("width", CKEDITOR.tools.cssLength(f)); l && a.ui.space("contents").setStyle("height", CKEDITOR.tools.cssLength(l)); b.disableContextMenu(); CKEDITOR.env.webkit && b.on("focus", function() { a.focus() }); a.fireOnce("uiReady") } CKEDITOR.replace = function(b, e) { return a(b, e, null, CKEDITOR.ELEMENT_MODE_REPLACE) }; CKEDITOR.appendTo = function(b, e, f) { return a(b, e, f, CKEDITOR.ELEMENT_MODE_APPENDTO) }; CKEDITOR.replaceAll = function() { for (var a = document.getElementsByTagName("textarea"), b = 0; b < a.length; b++) { var f = null, l = a[b]; if (l.name || l.id) { if ("string" == typeof arguments[0]) { if (!(new RegExp("(?:^|\\s)" + arguments[0] + "(?:$|\\s)")).test(l.className)) continue } else if ("function" == typeof arguments[0] && (f = {}, !1 === arguments[0](l, f))) continue; this.replace(l, f) } } }; CKEDITOR.editor.prototype.addMode = function(a, b) { (this._.modes || (this._.modes = {}))[a] = b }; CKEDITOR.editor.prototype.setMode = function(a, b) { var f = this, l = this._.modes; if (a != f.mode && l && l[a]) { f.fire("beforeSetMode", a); if (f.mode) { var d = f.checkDirty(), l = f._.previousModeData, h, k = 0; f.fire("beforeModeUnload"); f.editable(0); f._.previousMode = f.mode; f._.previousModeData = h = f.getData(1); "source" == f.mode && l == h && (f.fire("lockSnapshot", { forceUpdate: !0 }), k = 1); f.ui.space("contents").setHtml(""); f.mode = "" } else f._.previousModeData = f.getData(1); this._.modes[a](function() { f.mode = a; void 0 !== d && !d && f.resetDirty(); k ? f.fire("unlockSnapshot") : "wysiwyg" == a && f.fire("saveSnapshot"); setTimeout(function() { f.fire("mode"); b && b.call(f) }, 0) }) } }; CKEDITOR.editor.prototype.resize = function(a, b, f, l) { var d = this.container, h = this.ui.space("contents"), k = CKEDITOR.env.webkit && this.document && this.document.getWindow().$.frameElement; l = l ? this.container.getFirst(function(a) { return a.type == CKEDITOR.NODE_ELEMENT && a.hasClass("cke_inner") }) : d; l.setSize("width", a, !0); k && (k.style.width = "1%"); var g = (l.$.offsetHeight || 0) - (h.$.clientHeight || 0), d = Math.max(b - (f ? 0 : g), 0); b = f ? b + g : b; h.setStyle("height", d + "px"); k && (k.style.width = "100%"); this.fire("resize", { outerHeight: b, contentsHeight: d, outerWidth: a || l.getSize("width") }) }; CKEDITOR.editor.prototype.getResizable = function(a) { return a ? this.ui.space("contents") : this.container }; CKEDITOR.domReady(function() { CKEDITOR.replaceClass && CKEDITOR.replaceAll(CKEDITOR.replaceClass) }) }(), CKEDITOR.config.startupMode = "wysiwyg", function() { function a(a) { var b = a.editor, d = a.data.path, e = d.blockLimit, g = a.data.selection, k = g.getRanges()[0], h; if (CKEDITOR.env.gecko || CKEDITOR.env.ie && CKEDITOR.env.needsBrFiller) if (g = f(g, d)) g.appendBogus(), h = CKEDITOR.env.ie; l(b, d.block, e) && k.collapsed && !k.getCommonAncestor().isReadOnly() && (d = k.clone(), d.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS), e = new CKEDITOR.dom.walker(d), e.guard = function(a) { return !c(a) || a.type == CKEDITOR.NODE_COMMENT || a.isReadOnly() }, !e.checkForward() || d.checkStartOfBlock() && d.checkEndOfBlock()) && (b = k.fixBlock(!0, b.activeEnterMode == CKEDITOR.ENTER_DIV ? "div" : "p"), CKEDITOR.env.needsBrFiller || (b = b.getFirst(c)) && b.type == CKEDITOR.NODE_TEXT && CKEDITOR.tools.trim(b.getText()).match(/^(?: |\xa0)$/) && b.remove(), h = 1, a.cancel()); h && k.select() } function f(a, b) { if (a.isFake) return 0; var d = b.block || b.blockLimit, e = d && d.getLast(c); if (!(!d || !d.isBlockBoundary() || e && e.type == CKEDITOR.NODE_ELEMENT && e.isBlockBoundary() || d.is("pre") || d.getBogus())) return d } function b(a) { var b = a.data.getTarget(); b.is("input") && (b = b.getAttribute("type"), "submit" != b && "reset" != b || a.data.preventDefault()) } function c(a) { return g(a) && n(a) } function e(a, b) { return function(c) { var d = c.data.$.toElement || c.data.$.fromElement || c.data.$.relatedTarget; (d = d && d.nodeType == CKEDITOR.NODE_ELEMENT ? new CKEDITOR.dom.element(d) : null) && (b.equals(d) || b.contains(d)) || a.call(this, c) } } function m(a) { function b(a) { return function(b, e) { e && b.type == CKEDITOR.NODE_ELEMENT && b.is(g) && (d = b); if (!(e || !c(b) || a && q(b))) return !1 } } var d, e = a.getRanges()[0]; a = a.root; var g = { table: 1, ul: 1, ol: 1, dl: 1 }; if (e.startPath().contains(g)) { var f = e.clone(); f.collapse(1); f.setStartAt(a, CKEDITOR.POSITION_AFTER_START); a = new CKEDITOR.dom.walker(f); a.guard = b(); a.checkBackward(); if (d) return f = e.clone(), f.collapse(), f.setEndAt(d, CKEDITOR.POSITION_AFTER_END), a = new CKEDITOR.dom.walker(f), a.guard = b(!0), d = !1, a.checkForward(), d } return null } function l(a, b, c) { return !1 !== a.config.autoParagraph && a.activeEnterMode != CKEDITOR.ENTER_BR && (a.editable().equals(c) && !b || b && "true" == b.getAttribute("contenteditable")) } function d(a) { return a.activeEnterMode != CKEDITOR.ENTER_BR && !1 !== a.config.autoParagraph ? a.activeEnterMode == CKEDITOR.ENTER_DIV ? "div" : "p" : !1 } function h(a) { var b = a.editor; b.getSelection().scrollIntoView(); setTimeout(function() { b.fire("saveSnapshot") }, 0) } function k(a, b, c) { var d = a.getCommonAncestor(b); for (b = a = c ? b : a; (a = a.getParent()) && !d.equals(a) && 1 == a.getChildCount();) b = a; b.remove() } var g, n, w, q, v, u, r, p, z, B; CKEDITOR.editable = CKEDITOR.tools.createClass({ base: CKEDITOR.dom.element, $: function(a, b) { this.base(b.$ || b); this.editor = a; this.status = "unloaded"; this.hasFocus = !1; this.setup() }, proto: { focus: function() { var a; if (CKEDITOR.env.webkit && !this.hasFocus && (a = this.editor._.previousActive || this.getDocument().getActive(), this.contains(a))) { a.focus(); return } CKEDITOR.env.edge && 14 < CKEDITOR.env.version && !this.hasFocus && this.getDocument().equals(CKEDITOR.document) && (this.editor._.previousScrollTop = this.$.scrollTop); try { !CKEDITOR.env.ie || CKEDITOR.env.edge && 14 < CKEDITOR.env.version || !this.getDocument().equals(CKEDITOR.document) ? this.$.focus() : this.$.setActive() } catch (b) { if (!CKEDITOR.env.ie) throw b; } CKEDITOR.env.safari && !this.isInline() && (a = CKEDITOR.document.getActive(), a.equals(this.getWindow().getFrame()) || this.getWindow().focus()) }, on: function(a, b) { var c = Array.prototype.slice.call(arguments, 0); CKEDITOR.env.ie && /^focus|blur$/.exec(a) && (a = "focus" == a ? "focusin" : "focusout", b = e(b, this), c[0] = a, c[1] = b); return CKEDITOR.dom.element.prototype.on.apply(this, c) }, attachListener: function(a) { !this._.listeners && (this._.listeners = []); var b = Array.prototype.slice.call(arguments, 1), b = a.on.apply(a, b); this._.listeners.push(b); return b }, clearListeners: function() { var a = this._.listeners; try { for (; a.length;) a.pop().removeListener() } catch (b) {} }, restoreAttrs: function() { var a = this._.attrChanges, b, c; for (c in a) a.hasOwnProperty(c) && (b = a[c], null !== b ? this.setAttribute(c, b) : this.removeAttribute(c)) }, attachClass: function(a) { var b = this.getCustomData("classes"); this.hasClass(a) || (!b && (b = []), b.push(a), this.setCustomData("classes", b), this.addClass(a)) }, changeAttr: function(a, b) { var c = this.getAttribute(a); b !== c && (!this._.attrChanges && (this._.attrChanges = {}), a in this._.attrChanges || (this._.attrChanges[a] = c), this.setAttribute(a, b)) }, insertText: function(a) { this.editor.focus(); this.insertHtml(this.transformPlainTextToHtml(a), "text") }, transformPlainTextToHtml: function(a) { var b = this.editor.getSelection().getStartElement().hasAscendant("pre", !0) ? CKEDITOR.ENTER_BR : this.editor.activeEnterMode; return CKEDITOR.tools.transformPlainTextToHtml(a, b) }, insertHtml: function(a, b, c) { var d = this.editor; d.focus(); d.fire("saveSnapshot"); c || (c = d.getSelection().getRanges()[0]); u(this, b || "html", a, c); c.select(); h(this); this.editor.fire("afterInsertHtml", {}) }, insertHtmlIntoRange: function(a, b, c) { u(this, c || "html", a, b); this.editor.fire("afterInsertHtml", { intoRange: b }) }, insertElement: function(a, b) { var d = this.editor; d.focus(); d.fire("saveSnapshot"); var e = d.activeEnterMode, d = d.getSelection(), g = a.getName(), g = CKEDITOR.dtd.$block[g]; b || (b = d.getRanges()[0]); this.insertElementIntoRange(a, b) && (b.moveToPosition(a, CKEDITOR.POSITION_AFTER_END), g && ((g = a.getNext(function(a) { return c(a) && !q(a) })) && g.type == CKEDITOR.NODE_ELEMENT && g.is(CKEDITOR.dtd.$block) ? g.getDtd()["#"] ? b.moveToElementEditStart(g) : b.moveToElementEditEnd(a) : g || e == CKEDITOR.ENTER_BR || (g = b.fixBlock(!0, e == CKEDITOR.ENTER_DIV ? "div" : "p"), b.moveToElementEditStart(g)))); d.selectRanges([b]); h(this) }, insertElementIntoSelection: function(a) { this.insertElement(a) }, insertElementIntoRange: function(a, b) { var c = this.editor, d = c.config.enterMode, e = a.getName(), g = CKEDITOR.dtd.$block[e]; if (b.checkReadOnly()) return !1; b.deleteContents(1); b.startContainer.type == CKEDITOR.NODE_ELEMENT && (b.startContainer.is({ tr: 1, table: 1, tbody: 1, thead: 1, tfoot: 1 }) ? r(b) : b.startContainer.is(CKEDITOR.dtd.$list) && p(b)); var f, k; if (g) for (; (f = b.getCommonAncestor(0, 1)) && (k = CKEDITOR.dtd[f.getName()]) && (!k || !k[e]);) f.getName() in CKEDITOR.dtd.span ? b.splitElement(f) : b.checkStartOfBlock() && b.checkEndOfBlock() ? (b.setStartBefore(f), b.collapse(!0), f.remove()) : b.splitBlock(d == CKEDITOR.ENTER_DIV ? "div" : "p", c.editable()); b.insertNode(a); return !0 }, setData: function(a, b) { b || (a = this.editor.dataProcessor.toHtml(a)); this.setHtml(a); this.fixInitialSelection(); "unloaded" == this.status && (this.status = "ready"); this.editor.fire("dataReady") }, getData: function(a) { var b = this.getHtml(); a || (b = this.editor.dataProcessor.toDataFormat(b)); return b }, setReadOnly: function(a) { this.setAttribute("contenteditable", !a) }, detach: function() { this.removeClass("cke_editable"); this.status = "detached"; var a = this.editor; this._.detach(); delete a.document; delete a.window }, isInline: function() { return this.getDocument().equals(CKEDITOR.document) }, fixInitialSelection: function() { function a() { var b = c.getDocument().$, d = b.getSelection(), e; a: if (d.anchorNode && d.anchorNode == c.$) e = !0; else { if (CKEDITOR.env.webkit && (e = c.getDocument().getActive()) && e.equals(c) && !d.anchorNode) { e = !0; break a } e = void 0 } e && (e = new CKEDITOR.dom.range(c), e.moveToElementEditStart(c), b = b.createRange(), b.setStart(e.startContainer.$, e.startOffset), b.collapse(!0), d.removeAllRanges(), d.addRange(b)) } function b() { var a = c.getDocument().$, d = a.selection, e = c.getDocument().getActive(); "None" == d.type && e.equals(c) && (d = new CKEDITOR.dom.range(c), a = a.body.createTextRange(), d.moveToElementEditStart(c), d = d.startContainer, d.type != CKEDITOR.NODE_ELEMENT && (d = d.getParent()), a.moveToElementText(d.$), a.collapse(!0), a.select()) } var c = this; if (CKEDITOR.env.ie && (9 > CKEDITOR.env.version || CKEDITOR.env.quirks)) this.hasFocus && (this.focus(), b()); else if (this.hasFocus) this.focus(), a(); else this.once("focus", function() { a() }, null, null, -999) }, getHtmlFromRange: function(a) { if (a.collapsed) return new CKEDITOR.dom.documentFragment(a.document); a = { doc: this.getDocument(), range: a.clone() }; z.eol.detect(a, this); z.bogus.exclude(a); z.cell.shrink(a); a.fragment = a.range.cloneContents(); z.tree.rebuild(a, this); z.eol.fix(a, this); return new CKEDITOR.dom.documentFragment(a.fragment.$) }, extractHtmlFromRange: function(a, b) { var c = B, d = { range: a, doc: a.document }, e = this.getHtmlFromRange(a); if (a.collapsed) return a.optimize(), e; a.enlarge(CKEDITOR.ENLARGE_INLINE, 1); c.table.detectPurge(d); d.bookmark = a.createBookmark(); delete d.range; var g = this.editor.createRange(); g.moveToPosition(d.bookmark.startNode, CKEDITOR.POSITION_BEFORE_START); d.targetBookmark = g.createBookmark(); c.list.detectMerge(d, this); c.table.detectRanges(d, this); c.block.detectMerge(d, this); d.tableContentsRanges ? (c.table.deleteRanges(d), a.moveToBookmark(d.bookmark), d.range = a) : (a.moveToBookmark(d.bookmark), d.range = a, a.extractContents(c.detectExtractMerge(d))); a.moveToBookmark(d.targetBookmark); a.optimize(); c.fixUneditableRangePosition(a); c.list.merge(d, this); c.table.purge(d, this); c.block.merge(d, this); if (b) { c = a.startPath(); if (d = a.checkStartOfBlock() && a.checkEndOfBlock() && c.block && !a.root.equals(c.block)) { a: { var d = c.block.getElementsByTag("span"), g = 0, f; if (d) for (; f = d.getItem(g++);) if (!n(f)) { d = !0; break a } d = !1 } d = !d } d && (a.moveToPosition(c.block, CKEDITOR.POSITION_BEFORE_START), c.block.remove()) } else c.autoParagraph(this.editor, a), w(a.startContainer) && a.startContainer.appendBogus(); a.startContainer.mergeSiblings(); return e }, setup: function() { var a = this.editor; this.attachListener(a, "beforeGetData", function() { var b = this.getData(); this.is("textarea") || !1 !== a.config.ignoreEmptyParagraph && (b = b.replace(v, function(a, b) { return b })); a.setData(b, null, 1) }, this); this.attachListener(a, "getSnapshot", function(a) { a.data = this.getData(1) }, this); this.attachListener(a, "afterSetData", function() { this.setData(a.getData(1)) }, this); this.attachListener(a, "loadSnapshot", function(a) { this.setData(a.data, 1) }, this); this.attachListener(a, "beforeFocus", function() { var b = a.getSelection(); (b = b && b.getNative()) && "Control" == b.type || this.focus() }, this); this.attachListener(a, "insertHtml", function(a) { this.insertHtml(a.data.dataValue, a.data.mode, a.data.range) }, this); this.attachListener(a, "insertElement", function(a) { this.insertElement(a.data) }, this); this.attachListener(a, "insertText", function(a) { this.insertText(a.data) }, this); this.setReadOnly(a.readOnly); this.attachClass("cke_editable"); a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? this.attachClass("cke_editable_inline") : a.elementMode != CKEDITOR.ELEMENT_MODE_REPLACE && a.elementMode != CKEDITOR.ELEMENT_MODE_APPENDTO || this.attachClass("cke_editable_themed"); this.attachClass("cke_contents_" + a.config.contentsLangDirection); a.keystrokeHandler.blockedKeystrokes[8] = +a.readOnly; a.keystrokeHandler.attach(this); this.on("blur", function() { this.hasFocus = !1 }, null, null, -1); this.on("focus", function() { this.hasFocus = !0 }, null, null, -1); if (CKEDITOR.env.webkit) this.on("scroll", function() { a._.previousScrollTop = a.editable().$.scrollTop }, null, null, -1); if (CKEDITOR.env.edge && 14 < CKEDITOR.env.version) { var d = function() { var b = a.editable(); null != a._.previousScrollTop && b.getDocument().equals(CKEDITOR.document) && (b.$.scrollTop = a._.previousScrollTop, a._.previousScrollTop = null, this.removeListener("scroll", d)) }; this.on("scroll", d) } a.focusManager.add(this); this.equals(CKEDITOR.document.getActive()) && (this.hasFocus = !0, a.once("contentDom", function() { a.focusManager.focus(this) }, this)); this.isInline() && this.changeAttr("tabindex", a.tabIndex); if (!this.is("textarea")) { a.document = this.getDocument(); a.window = this.getWindow(); var e = a.document; this.changeAttr("spellcheck", !a.config.disableNativeSpellChecker); var f = a.config.contentsLangDirection; this.getDirection(1) != f && this.changeAttr("dir", f); var h = CKEDITOR.getCss(); if (h) { var f = e.getHead(), l = f.getCustomData("stylesheet"); l ? h != l.getText() && (CKEDITOR.env.ie && 9 > CKEDITOR.env.version ? l.$.styleSheet.cssText = h : l.setText(h)) : (h = e.appendStyleText(h), h = new CKEDITOR.dom.element(h.ownerNode || h.owningElement), f.setCustomData("stylesheet", h), h.data("cke-temp", 1)) } f = e.getCustomData("stylesheet_ref") || 0; e.setCustomData("stylesheet_ref", f + 1); this.setCustomData("cke_includeReadonly", !a.config.disableReadonlyStyling); this.attachListener(this, "click", function(a) { a = a.data; var b = (new CKEDITOR.dom.elementPath(a.getTarget(), this)).contains("a"); b && 2 != a.$.button && b.isReadOnly() && a.preventDefault() }); var n = { 8: 1, 46: 1 }; this.attachListener(a, "key", function(b) { if (a.readOnly) return !0; var c = b.data.domEvent.getKey(), d; if (c in n) { b = a.getSelection(); var e, f = b.getRanges()[0], k = f.startPath(), h, l, p, c = 8 == c; CKEDITOR.env.ie && 11 > CKEDITOR.env.version && (e = b.getSelectedElement()) || (e = m(b)) ? (a.fire("saveSnapshot"), f.moveToPosition(e, CKEDITOR.POSITION_BEFORE_START), e.remove(), f.select(), a.fire("saveSnapshot"), d = 1) : f.collapsed && ((h = k.block) && (p = h[c ? "getPrevious" : "getNext"](g)) && p.type == CKEDITOR.NODE_ELEMENT && p.is("table") && f[c ? "checkStartOfBlock" : "checkEndOfBlock"]() ? (a.fire("saveSnapshot"), f[c ? "checkEndOfBlock" : "checkStartOfBlock"]() && h.remove(), f["moveToElementEdit" + (c ? "End" : "Start")](p), f.select(), a.fire("saveSnapshot"), d = 1) : k.blockLimit && k.blockLimit.is("td") && (l = k.blockLimit.getAscendant("table")) && f.checkBoundaryOfElement(l, c ? CKEDITOR.START : CKEDITOR.END) && (p = l[c ? "getPrevious" : "getNext"](g)) ? (a.fire("saveSnapshot"), f["moveToElementEdit" + (c ? "End" : "Start")](p), f.checkStartOfBlock() && f.checkEndOfBlock() ? p.remove() : f.select(), a.fire("saveSnapshot"), d = 1) : (l = k.contains(["td", "th", "caption"])) && f.checkBoundaryOfElement(l, c ? CKEDITOR.START : CKEDITOR.END) && (d = 1)) } return !d }); a.blockless && CKEDITOR.env.ie && CKEDITOR.env.needsBrFiller && this.attachListener(this, "keyup", function(b) { b.data.getKeystroke() in n && !this.getFirst(c) && (this.appendBogus(), b = a.createRange(), b.moveToPosition(this, CKEDITOR.POSITION_AFTER_START), b.select()) }); this.attachListener(this, "dblclick", function(b) { if (a.readOnly) return !1; b = { element: b.data.getTarget() }; a.fire("doubleclick", b) }); CKEDITOR.env.ie && this.attachListener(this, "click", b); CKEDITOR.env.ie && !CKEDITOR.env.edge || this.attachListener(this, "mousedown", function(b) { var c = b.data.getTarget(); c.is("img", "hr", "input", "textarea", "select") && !c.isReadOnly() && (a.getSelection().selectElement(c), c.is("input", "textarea", "select") && b.data.preventDefault()) }); CKEDITOR.env.edge && this.attachListener(this, "mouseup", function(b) { (b = b.data.getTarget()) && b.is("img") && a.getSelection().selectElement(b) }); CKEDITOR.env.gecko && this.attachListener(this, "mouseup", function(b) { if (2 == b.data.$.button && (b = b.data.getTarget(), !b.getOuterHtml().replace(v, ""))) { var c = a.createRange(); c.moveToElementEditStart(b); c.select(!0) } }); CKEDITOR.env.webkit && (this.attachListener(this, "click", function(a) { a.data.getTarget().is("input", "select") && a.data.preventDefault() }), this.attachListener(this, "mouseup", function(a) { a.data.getTarget().is("input", "textarea") && a.data.preventDefault() })); CKEDITOR.env.webkit && this.attachListener(a, "key", function(b) { if (a.readOnly) return !0; b = b.data.domEvent.getKey(); if (b in n) { var c = 8 == b, d = a.getSelection().getRanges()[0]; b = d.startPath(); if (d.collapsed) a: { var e = b.block; if (e && d[c ? "checkStartOfBlock" : "checkEndOfBlock"]() && d.moveToClosestEditablePosition(e, !c) && d.collapsed) { if (d.startContainer.type == CKEDITOR.NODE_ELEMENT) { var g = d.startContainer.getChild(d.startOffset - (c ? 1 : 0)); if (g && g.type == CKEDITOR.NODE_ELEMENT && g.is("hr")) { a.fire("saveSnapshot"); g.remove(); b = !0; break a } } d = d.startPath().block; if (!d || d && d.contains(e)) b = void 0; else { a.fire("saveSnapshot"); var f; (f = (c ? d : e).getBogus()) && f.remove(); f = a.getSelection(); g = f.createBookmarks(); (c ? e : d).moveChildren(c ? d : e, !1); b.lastElement.mergeSiblings(); k(e, d, !c); f.selectBookmarks(g); b = !0 } } else b = !1 } else c = d, f = b.block, d = c.endPath().block, f && d && !f.equals(d) ? (a.fire("saveSnapshot"), (e = f.getBogus()) && e.remove(), c.enlarge(CKEDITOR.ENLARGE_INLINE), c.deleteContents(), d.getParent() && (d.moveChildren(f, !1), b.lastElement.mergeSiblings(), k(f, d, !0)), c = a.getSelection().getRanges()[0], c.collapse(1), c.optimize(), "" === c.startContainer.getHtml() && c.startContainer.appendBogus(), c.select(), b = !0) : b = !1; if (!b) return; a.getSelection().scrollIntoView(); a.fire("saveSnapshot"); return !1 } }, this, null, 100) } } }, _: { detach: function() { this.editor.setData(this.editor.getData(), 0, 1); this.clearListeners(); this.restoreAttrs(); var a; if (a = this.removeCustomData("classes")) for (; a.length;) this.removeClass(a.pop()); if (!this.is("textarea")) { a = this.getDocument(); var b = a.getHead(); if (b.getCustomData("stylesheet")) { var c = a.getCustomData("stylesheet_ref"); --c ? a.setCustomData("stylesheet_ref", c) : (a.removeCustomData("stylesheet_ref"), b.removeCustomData("stylesheet").remove()) } } this.editor.fire("contentDomUnload"); delete this.editor } } }); CKEDITOR.editor.prototype.editable = function(a) { var b = this._.editable; if (b && a) return 0; arguments.length && (b = this._.editable = a ? a instanceof CKEDITOR.editable ? a : new CKEDITOR.editable(this, a) : (b && b.detach(), null)); return b }; CKEDITOR.on("instanceLoaded", function(b) { var c = b.editor; c.on("insertElement", function(a) { a = a.data; a.type == CKEDITOR.NODE_ELEMENT && (a.is("input") || a.is("textarea")) && ("false" != a.getAttribute("contentEditable") && a.data("cke-editable", a.hasAttribute("contenteditable") ? "true" : "1"), a.setAttribute("contentEditable", !1)) }); c.on("selectionChange", function(b) { if (!c.readOnly) { var d = c.getSelection(); d && !d.isLocked && (d = c.checkDirty(), c.fire("lockSnapshot"), a(b), c.fire("unlockSnapshot"), !d && c.resetDirty()) } }) }); CKEDITOR.on("instanceCreated", function(a) { var b = a.editor; b.on("mode", function() { var a = b.editable(); if (a && a.isInline()) { var c = b.title; a.changeAttr("role", "textbox"); a.changeAttr("aria-label", c); c && a.changeAttr("title", c); var d = b.fire("ariaEditorHelpLabel", {}).label; if (d && (c = this.ui.space(this.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? "top" : "contents"))) { var e = CKEDITOR.tools.getNextId(), d = CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"' + e + '" class\x3d"cke_voice_label"\x3e' + d + "\x3c/span\x3e"); c.append(d); a.changeAttr("aria-describedby", e) } } }) }); CKEDITOR.addCss(".cke_editable{cursor:text}.cke_editable img,.cke_editable input,.cke_editable textarea{cursor:default}"); g = CKEDITOR.dom.walker.whitespaces(!0); n = CKEDITOR.dom.walker.bookmark(!1, !0); w = CKEDITOR.dom.walker.empty(); q = CKEDITOR.dom.walker.bogus(); v = /(^|]*>)\s*<(p|div|address|h\d|center|pre)[^>]*>\s*(?:]*>| |\u00A0| )?\s*(:?<\/\2>)?\s*(?=$|<\/body>)/gi; u = function() { function a(b) { return b.type == CKEDITOR.NODE_ELEMENT } function b(c, d) { var e, g, f, k, h = [], l = d.range.startContainer; e = d.range.startPath(); for (var l = m[l.getName()], n = 0, p = c.getChildren(), r = p.count(), v = -1, q = -1, u = 0, D = e.contains(m.$list); n < r; ++n) e = p.getItem(n), a(e) ? (f = e.getName(), D && f in CKEDITOR.dtd.$list ? h = h.concat(b(e, d)) : (k = !!l[f], "br" != f || !e.data("cke-eol") || n && n != r - 1 || (u = (g = n ? h[n - 1].node : p.getItem(n + 1)) && (!a(g) || !g.is("br")), g = g && a(g) && m.$block[g.getName()]), -1 != v || k || (v = n), k || (q = n), h.push({ isElement: 1, isLineBreak: u, isBlock: e.isBlockBoundary(), hasBlockSibling: g, node: e, name: f, allowed: k }), g = u = 0)) : h.push({ isElement: 0, node: e, allowed: 1 }); - 1 < v && (h[v].firstNotAllowed = 1); - 1 < q && (h[q].lastNotAllowed = 1); return h } function e(b, c) { var d = [], g = b.getChildren(), f = g.count(), k, h = 0, l = m[c], n = !b.is(m.$inline) || b.is("br"); for (n && d.push(" "); h < f; h++) k = g.getItem(h), a(k) && !k.is(l) ? d = d.concat(e(k, c)) : d.push(k); n && d.push(" "); return d } function g(b) { return a(b.startContainer) && b.startContainer.getChild(b.startOffset - 1) } function f(b) { return b && a(b) && (b.is(m.$removeEmpty) || b.is("a") && !b.isBlockBoundary()) } function k(b, c, d, e) { var g = b.clone(), f, h; g.setEndAt(c, CKEDITOR.POSITION_BEFORE_END); (f = (new CKEDITOR.dom.walker(g)).next()) && a(f) && n[f.getName()] && (h = f.getPrevious()) && a(h) && !h.getParent().equals(b.startContainer) && d.contains(h) && e.contains(f) && f.isIdentical(h) && (f.moveChildren(h), f.remove(), k(b, c, d, e)) } function h(b, c) { function d(b, c) { if (c.isBlock && c.isElement && !c.node.is("br") && a(b) && b.is("br")) return b.remove(), 1 } var e = c.endContainer.getChild(c.endOffset), g = c.endContainer.getChild(c.endOffset - 1); e && d(e, b[b.length - 1]); g && d(g, b[0]) && (c.setEnd(c.endContainer, c.endOffset - 1), c.collapse()) } var m = CKEDITOR.dtd, n = { p: 1, div: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, ul: 1, ol: 1, li: 1, pre: 1, dl: 1, blockquote: 1 }, p = { p: 1, div: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1 }, r = CKEDITOR.tools.extend({}, m.$inline); delete r.br; return function(n, E, v, q) { var u = n.editor, z = !1; "unfiltered_html" == E && (E = "html", z = !0); if (!q.checkReadOnly()) { var w = (new CKEDITOR.dom.elementPath(q.startContainer, q.root)).blockLimit || q.root; n = { type: E, dontFilter: z, editable: n, editor: u, range: q, blockLimit: w, mergeCandidates: [], zombies: [] }; E = n.range; q = n.mergeCandidates; var B, I; "text" == n.type && E.shrink(CKEDITOR.SHRINK_ELEMENT, !0, !1) && (B = CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e", E.document), E.insertNode(B), E.setStartAfter(B)); z = new CKEDITOR.dom.elementPath(E.startContainer); n.endPath = w = new CKEDITOR.dom.elementPath(E.endContainer); if (!E.collapsed) { var u = w.block || w.blockLimit, ga = E.getCommonAncestor(); u && !u.equals(ga) && !u.contains(ga) && E.checkEndOfBlock() && n.zombies.push(u); E.deleteContents() } for (; (I = g(E)) && a(I) && I.isBlockBoundary() && z.contains(I);) E.moveToPosition(I, CKEDITOR.POSITION_BEFORE_END); k(E, n.blockLimit, z, w); B && (E.setEndBefore(B), E.collapse(), B.remove()); B = E.startPath(); if (u = B.contains(f, !1, 1)) E.splitElement(u), n.inlineStylesRoot = u, n.inlineStylesPeak = B.lastElement; B = E.createBookmark(); (u = B.startNode.getPrevious(c)) && a(u) && f(u) && q.push(u); (u = B.startNode.getNext(c)) && a(u) && f(u) && q.push(u); for (u = B.startNode; (u = u.getParent()) && f(u);) q.push(u); E.moveToBookmark(B); if (B = v) { B = n.range; if ("text" == n.type && n.inlineStylesRoot) { I = n.inlineStylesPeak; E = I.getDocument().createText("{cke-peak}"); for (q = n.inlineStylesRoot.getParent(); !I.equals(q);) E = E.appendTo(I.clone()), I = I.getParent(); v = E.getOuterHtml().split("{cke-peak}").join(v) } I = n.blockLimit.getName(); if (/^\s+|\s+$/.test(v) && "span" in CKEDITOR.dtd[I]) { var N = '\x3cspan data-cke-marker\x3d"1"\x3e\x26nbsp;\x3c/span\x3e'; v = N + v + N } v = n.editor.dataProcessor.toHtml(v, { context: null, fixForBody: !1, protectedWhitespaces: !!N, dontFilter: n.dontFilter, filter: n.editor.activeFilter, enterMode: n.editor.activeEnterMode }); I = B.document.createElement("body"); I.setHtml(v); N && (I.getFirst().remove(), I.getLast().remove()); if ((N = B.startPath().block) && (1 != N.getChildCount() || !N.getBogus())) a: { var P; if (1 == I.getChildCount() && a(P = I.getFirst()) && P.is(p) && !P.hasAttribute("contenteditable")) { N = P.getElementsByTag("*"); B = 0; for (q = N.count(); B < q; B++) if (E = N.getItem(B), !E.is(r)) break a; P.moveChildren(P.getParent(1)); P.remove() } } n.dataWrapper = I; B = v } if (B) { P = n.range; B = P.document; var L; I = n.blockLimit; q = 0; var R, N = [], Q, Y; v = u = 0; var U, Z; E = P.startContainer; var z = n.endPath.elements[0], aa, w = z.getPosition(E), ga = !!z.getCommonAncestor(E) && w != CKEDITOR.POSITION_IDENTICAL && !(w & CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_IS_CONTAINED); E = b(n.dataWrapper, n); for (h(E, P); q < E.length; q++) { w = E[q]; if (L = w.isLineBreak) { L = P; U = I; var X = void 0, ba = void 0; w.hasBlockSibling ? L = 1 : (X = L.startContainer.getAscendant(m.$block, 1)) && X.is({ div: 1, p: 1 }) ? (ba = X.getPosition(U), ba == CKEDITOR.POSITION_IDENTICAL || ba == CKEDITOR.POSITION_CONTAINS ? L = 0 : (U = L.splitElement(X), L.moveToPosition(U, CKEDITOR.POSITION_AFTER_START), L = 1)) : L = 0 } if (L) v = 0 < q; else { L = P.startPath(); !w.isBlock && l(n.editor, L.block, L.blockLimit) && (Y = d(n.editor)) && (Y = B.createElement(Y), Y.appendBogus(), P.insertNode(Y), CKEDITOR.env.needsBrFiller && (R = Y.getBogus()) && R.remove(), P.moveToPosition(Y, CKEDITOR.POSITION_BEFORE_END)); if ((L = P.startPath().block) && !L.equals(Q)) { if (R = L.getBogus()) R.remove(), N.push(L); Q = L } w.firstNotAllowed && (u = 1); if (u && w.isElement) { L = P.startContainer; for (U = null; L && !m[L.getName()][w.name];) { if (L.equals(I)) { L = null; break } U = L; L = L.getParent() } if (L) U && (Z = P.splitElement(U), n.zombies.push(Z), n.zombies.push(U)); else { U = I.getName(); aa = !q; L = q == E.length - 1; U = e(w.node, U); for (var X = [], ba = U.length, ea = 0, ha = void 0, ia = 0, fa = -1; ea < ba; ea++) ha = U[ea], " " == ha ? (ia || aa && !ea || (X.push(new CKEDITOR.dom.text(" ")), fa = X.length), ia = 1) : (X.push(ha), ia = 0); L && fa == X.length && X.pop(); aa = X } } if (aa) { for (; L = aa.pop();) P.insertNode(L); aa = 0 } else P.insertNode(w.node); w.lastNotAllowed && q < E.length - 1 && ((Z = ga ? z : Z) && P.setEndAt(Z, CKEDITOR.POSITION_AFTER_START), u = 0); P.collapse() } } 1 != E.length ? R = !1 : (R = E[0], R = R.isElement && "false" == R.node.getAttribute("contenteditable")); R && (v = !0, L = E[0].node, P.setStartAt(L, CKEDITOR.POSITION_BEFORE_START), P.setEndAt(L, CKEDITOR.POSITION_AFTER_END)); n.dontMoveCaret = v; n.bogusNeededBlocks = N } R = n.range; var W; Z = n.bogusNeededBlocks; for (aa = R.createBookmark(); Q = n.zombies.pop();) Q.getParent() && (Y = R.clone(), Y.moveToElementEditStart(Q), Y.removeEmptyBlocksAtEnd()); if (Z) for (; Q = Z.pop();) CKEDITOR.env.needsBrFiller ? Q.appendBogus() : Q.append(R.document.createText(" ")); for (; Q = n.mergeCandidates.pop();) Q.mergeSiblings(); R.moveToBookmark(aa); if (!n.dontMoveCaret) { for (Q = g(R); Q && a(Q) && !Q.is(m.$empty);) { if (Q.isBlockBoundary()) R.moveToPosition(Q, CKEDITOR.POSITION_BEFORE_END); else { if (f(Q) && Q.getHtml().match(/(\s| )$/g)) { W = null; break } W = R.clone(); W.moveToPosition(Q, CKEDITOR.POSITION_BEFORE_END) } Q = Q.getLast(c) } W && R.moveToRange(W) } } } }(); r = function() { function a(b) { b = new CKEDITOR.dom.walker(b); b.guard = function(a, b) { if (b) return !1; if (a.type == CKEDITOR.NODE_ELEMENT) return a.is(CKEDITOR.dtd.$tableContent) }; b.evaluator = function(a) { return a.type == CKEDITOR.NODE_ELEMENT }; return b } function b(a, c, d) { c = a.getDocument().createElement(c); a.append(c, d); return c } function c(a) { var b = a.count(), d; for (b; 0 < b--;) d = a.getItem(b), CKEDITOR.tools.trim(d.getHtml()) || (d.appendBogus(), CKEDITOR.env.ie && 9 > CKEDITOR.env.version && d.getChildCount() && d.getFirst().remove()) } return function(d) { var e = d.startContainer, g = e.getAscendant("table", 1), f = !1; c(g.getElementsByTag("td")); c(g.getElementsByTag("th")); g = d.clone(); g.setStart(e, 0); g = a(g).lastBackward(); g || (g = d.clone(), g.setEndAt(e, CKEDITOR.POSITION_BEFORE_END), g = a(g).lastForward(), f = !0); g || (g = e); g.is("table") ? (d.setStartAt(g, CKEDITOR.POSITION_BEFORE_START), d.collapse(!0), g.remove()) : (g.is({ tbody: 1, thead: 1, tfoot: 1 }) && (g = b(g, "tr", f)), g.is("tr") && (g = b(g, g.getParent().is("thead") ? "th" : "td", f)), (e = g.getBogus()) && e.remove(), d.moveToPosition(g, f ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_BEFORE_END)) } }(); p = function() { function a(b) { b = new CKEDITOR.dom.walker(b); b.guard = function(a, b) { if (b) return !1; if (a.type == CKEDITOR.NODE_ELEMENT) return a.is(CKEDITOR.dtd.$list) || a.is(CKEDITOR.dtd.$listItem) }; b.evaluator = function(a) { return a.type == CKEDITOR.NODE_ELEMENT && a.is(CKEDITOR.dtd.$listItem) }; return b } return function(b) { var c = b.startContainer, d = !1, e; e = b.clone(); e.setStart(c, 0); e = a(e).lastBackward(); e || (e = b.clone(), e.setEndAt(c, CKEDITOR.POSITION_BEFORE_END), e = a(e).lastForward(), d = !0); e || (e = c); e.is(CKEDITOR.dtd.$list) ? (b.setStartAt(e, CKEDITOR.POSITION_BEFORE_START), b.collapse(!0), e.remove()) : ((c = e.getBogus()) && c.remove(), b.moveToPosition(e, d ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_BEFORE_END), b.select()) } }(); z = { eol: { detect: function(a, b) { var c = a.range, d = c.clone(), e = c.clone(), g = new CKEDITOR.dom.elementPath(c.startContainer, b), f = new CKEDITOR.dom.elementPath(c.endContainer, b); d.collapse(1); e.collapse(); g.block && d.checkBoundaryOfElement(g.block, CKEDITOR.END) && (c.setStartAfter(g.block), a.prependEolBr = 1); f.block && e.checkBoundaryOfElement(f.block, CKEDITOR.START) && (c.setEndBefore(f.block), a.appendEolBr = 1) }, fix: function(a, b) { var c = b.getDocument(), d; a.appendEolBr && (d = this.createEolBr(c), a.fragment.append(d)); !a.prependEolBr || d && !d.getPrevious() || a.fragment.append(this.createEolBr(c), 1) }, createEolBr: function(a) { return a.createElement("br", { attributes: { "data-cke-eol": 1 } }) } }, bogus: { exclude: function(a) { var b = a.range.getBoundaryNodes(), c = b.startNode, b = b.endNode; !b || !q(b) || c && c.equals(b) || a.range.setEndBefore(b) } }, tree: { rebuild: function(a, b) { var c = a.range, d = c.getCommonAncestor(), e = new CKEDITOR.dom.elementPath(d, b), g = new CKEDITOR.dom.elementPath(c.startContainer, b), c = new CKEDITOR.dom.elementPath(c.endContainer, b), f; d.type == CKEDITOR.NODE_TEXT && (d = d.getParent()); if (e.blockLimit.is({ tr: 1, table: 1 })) { var k = e.contains("table").getParent(); f = function(a) { return !a.equals(k) } } else if (e.block && e.block.is(CKEDITOR.dtd.$listItem) && (g = g.contains(CKEDITOR.dtd.$list), c = c.contains(CKEDITOR.dtd.$list), !g.equals(c))) { var h = e.contains(CKEDITOR.dtd.$list).getParent(); f = function(a) { return !a.equals(h) } } f || (f = function(a) { return !a.equals(e.block) && !a.equals(e.blockLimit) }); this.rebuildFragment(a, b, d, f) }, rebuildFragment: function(a, b, c, d) { for (var e; c && !c.equals(b) && d(c);) e = c.clone(0, 1), a.fragment.appendTo(e), a.fragment = e, c = c.getParent() } }, cell: { shrink: function(a) { a = a.range; var b = a.startContainer, c = a.endContainer, d = a.startOffset, e = a.endOffset; b.type == CKEDITOR.NODE_ELEMENT && b.equals(c) && b.is("tr") && ++d == e && a.shrink(CKEDITOR.SHRINK_TEXT) } } }; B = function() { function a(b, c) { var d = b.getParent(); if (d.is(CKEDITOR.dtd.$inline)) b[c ? "insertBefore" : "insertAfter"](d) } function b(c, d, e) { a(d); a(e, 1); for (var g; g = e.getNext();) g.insertAfter(d), d = g; w(c) && c.remove() } function c(a, b) { var d = new CKEDITOR.dom.range(a); d.setStartAfter(b.startNode); d.setEndBefore(b.endNode); return d } return { list: { detectMerge: function(a, b) { var d = c(b, a.bookmark), e = d.startPath(), g = d.endPath(), f = e.contains(CKEDITOR.dtd.$list), k = g.contains(CKEDITOR.dtd.$list); a.mergeList = f && k && f.getParent().equals(k.getParent()) && !f.equals(k); a.mergeListItems = e.block && g.block && e.block.is(CKEDITOR.dtd.$listItem) && g.block.is(CKEDITOR.dtd.$listItem); if (a.mergeList || a.mergeListItems) d = d.clone(), d.setStartBefore(a.bookmark.startNode), d.setEndAfter(a.bookmark.endNode), a.mergeListBookmark = d.createBookmark() }, merge: function(a, c) { if (a.mergeListBookmark) { var d = a.mergeListBookmark.startNode, e = a.mergeListBookmark.endNode, g = new CKEDITOR.dom.elementPath(d, c), f = new CKEDITOR.dom.elementPath(e, c); if (a.mergeList) { var k = g.contains(CKEDITOR.dtd.$list), h = f.contains(CKEDITOR.dtd.$list); k.equals(h) || (h.moveChildren(k), h.remove()) } a.mergeListItems && (g = g.contains(CKEDITOR.dtd.$listItem), f = f.contains(CKEDITOR.dtd.$listItem), g.equals(f) || b(f, d, e)); d.remove(); e.remove() } } }, block: { detectMerge: function(a, b) { if (!a.tableContentsRanges && !a.mergeListBookmark) { var c = new CKEDITOR.dom.range(b); c.setStartBefore(a.bookmark.startNode); c.setEndAfter(a.bookmark.endNode); a.mergeBlockBookmark = c.createBookmark() } }, merge: function(a, c) { if (a.mergeBlockBookmark && !a.purgeTableBookmark) { var d = a.mergeBlockBookmark.startNode, e = a.mergeBlockBookmark.endNode, g = new CKEDITOR.dom.elementPath(d, c), f = new CKEDITOR.dom.elementPath(e, c), g = g.block, f = f.block; g && f && !g.equals(f) && b(f, d, e); d.remove(); e.remove() } } }, table: function() { function a(c) { var e = [], g, f = new CKEDITOR.dom.walker(c), k = c.startPath().contains(d), h = c.endPath().contains(d), l = {}; f.guard = function(a, f) { if (a.type == CKEDITOR.NODE_ELEMENT) { var m = "visited_" + (f ? "out" : "in"); if (a.getCustomData(m)) return; CKEDITOR.dom.element.setMarker(l, a, m, 1) } if (f && k && a.equals(k)) g = c.clone(), g.setEndAt(k, CKEDITOR.POSITION_BEFORE_END), e.push(g); else if (!f && h && a.equals(h)) g = c.clone(), g.setStartAt(h, CKEDITOR.POSITION_AFTER_START), e.push(g); else { if (m = !f) m = a.type == CKEDITOR.NODE_ELEMENT && a.is(d) && (!k || b(a, k)) && (!h || b(a, h)); m && (g = c.clone(), g.selectNodeContents(a), e.push(g)) } }; f.lastForward(); CKEDITOR.dom.element.clearAllMarkers(l); return e } function b(a, c) { var d = CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_IS_CONTAINED, e = a.getPosition(c); return e === CKEDITOR.POSITION_IDENTICAL ? !1 : 0 === (e & d) } var d = { td: 1, th: 1, caption: 1 }; return { detectPurge: function(a) { var b = a.range, c = b.clone(); c.enlarge(CKEDITOR.ENLARGE_ELEMENT); var c = new CKEDITOR.dom.walker(c), e = 0; c.evaluator = function(a) { a.type == CKEDITOR.NODE_ELEMENT && a.is(d) && ++e }; c.checkForward(); if (1 < e) { var c = b.startPath().contains("table"), g = b.endPath().contains("table"); c && g && b.checkBoundaryOfElement(c, CKEDITOR.START) && b.checkBoundaryOfElement(g, CKEDITOR.END) && (b = a.range.clone(), b.setStartBefore(c), b.setEndAfter(g), a.purgeTableBookmark = b.createBookmark()) } }, detectRanges: function(e, g) { var f = c(g, e.bookmark), k = f.clone(), h, l, m = f.getCommonAncestor(); m.is(CKEDITOR.dtd.$tableContent) && !m.is(d) && (m = m.getAscendant("table", !0)); l = m; m = new CKEDITOR.dom.elementPath(f.startContainer, l); l = new CKEDITOR.dom.elementPath(f.endContainer, l); m = m.contains("table"); l = l.contains("table"); if (m || l) m && l && b(m, l) ? (e.tableSurroundingRange = k, k.setStartAt(m, CKEDITOR.POSITION_AFTER_END), k.setEndAt(l, CKEDITOR.POSITION_BEFORE_START), k = f.clone(), k.setEndAt(m, CKEDITOR.POSITION_AFTER_END), h = f.clone(), h.setStartAt(l, CKEDITOR.POSITION_BEFORE_START), h = a(k).concat(a(h))) : m ? l || (e.tableSurroundingRange = k, k.setStartAt(m, CKEDITOR.POSITION_AFTER_END), f.setEndAt(m, CKEDITOR.POSITION_AFTER_END)) : (e.tableSurroundingRange = k, k.setEndAt(l, CKEDITOR.POSITION_BEFORE_START), f.setStartAt(l, CKEDITOR.POSITION_AFTER_START)), e.tableContentsRanges = h ? h : a(f) }, deleteRanges: function(a) { for (var b; b = a.tableContentsRanges.pop();) b.extractContents(), w(b.startContainer) && b.startContainer.appendBogus(); a.tableSurroundingRange && a.tableSurroundingRange.extractContents() }, purge: function(a) { if (a.purgeTableBookmark) { var b = a.doc, c = a.range.clone(), b = b.createElement("p"); b.insertBefore(a.purgeTableBookmark.startNode); c.moveToBookmark(a.purgeTableBookmark); c.deleteContents(); a.range.moveToPosition(b, CKEDITOR.POSITION_AFTER_START) } } } }(), detectExtractMerge: function(a) { return !(a.range.startPath().contains(CKEDITOR.dtd.$listItem) && a.range.endPath().contains(CKEDITOR.dtd.$listItem)) }, fixUneditableRangePosition: function(a) { a.startContainer.getDtd()["#"] || a.moveToClosestEditablePosition(null, !0) }, autoParagraph: function(a, b) { var c = b.startPath(), e; l(a, c.block, c.blockLimit) && (e = d(a)) && (e = b.document.createElement(e), e.appendBogus(), b.insertNode(e), b.moveToPosition(e, CKEDITOR.POSITION_AFTER_START)) } } }() }(), function() { function a() { var a = this._.fakeSelection, b; a && (b = this.getSelection(1), b && b.isHidden() || (a.reset(), a = 0)); if (!a && (a = b || this.getSelection(1), !a || a.getType() == CKEDITOR.SELECTION_NONE)) return; this.fire("selectionCheck", a); b = this.elementPath(); if (!b.compare(this._.selectionPreviousPath)) { var c = this._.selectionPreviousPath && this._.selectionPreviousPath.blockLimit.equals(b.blockLimit); CKEDITOR.env.webkit && !c && (this._.previousActive = this.document.getActive()); this._.selectionPreviousPath = b; this.fire("selectionChange", { selection: a, path: b }) } } function f() { r = !0; u || (b.call(this), u = CKEDITOR.tools.setTimeout(b, 200, this)) } function b() { u = null; r && (CKEDITOR.tools.setTimeout(a, 0, this), r = !1) } function c(a) { return p(a) || a.type == CKEDITOR.NODE_ELEMENT && !a.is(CKEDITOR.dtd.$empty) ? !0 : !1 } function e(a) { function b(c, d) { return c && c.type != CKEDITOR.NODE_TEXT ? a.clone()["moveToElementEdit" + (d ? "End" : "Start")](c) : !1 } if (!(a.root instanceof CKEDITOR.editable)) return !1; var d = a.startContainer, e = a.getPreviousNode(c, null, d), g = a.getNextNode(c, null, d); return b(e) || b(g, 1) || !(e || g || d.type == CKEDITOR.NODE_ELEMENT && d.isBlockBoundary() && d.getBogus()) ? !0 : !1 } function m(a) { l(a, !1); var b = a.getDocument().createText(q); a.setCustomData("cke-fillingChar", b); return b } function l(a, b) { var c = a && a.removeCustomData("cke-fillingChar"); if (c) { if (!1 !== b) { var e = a.getDocument().getSelection().getNative(), g = e && "None" != e.type && e.getRangeAt(0), f = q.length; if (c.getLength() > f && g && g.intersectsNode(c.$)) { var k = [{ node: e.anchorNode, offset: e.anchorOffset }, { node: e.focusNode, offset: e.focusOffset }]; e.anchorNode == c.$ && e.anchorOffset > f && (k[0].offset -= f); e.focusNode == c.$ && e.focusOffset > f && (k[1].offset -= f) } } c.setText(d(c.getText(), 1)); k && (c = a.getDocument().$, e = c.getSelection(), c = c.createRange(), c.setStart(k[0].node, k[0].offset), c.collapse(!0), e.removeAllRanges(), e.addRange(c), e.extend(k[1].node, k[1].offset)) } } function d(a, b) { return b ? a.replace(v, function(a, b) { return b ? " " : "" }) : a.replace(q, "") } function h(a, b) { var c = CKEDITOR.dom.element.createFromHtml('\x3cdiv data-cke-hidden-sel\x3d"1" data-cke-temp\x3d"1" style\x3d"' + (CKEDITOR.env.ie && 14 > CKEDITOR.env.version ? "display:none" : "position:fixed;top:0;left:-1000px") + '"\x3e' + (b || "\x26nbsp;") + "\x3c/div\x3e", a.document); a.fire("lockSnapshot"); a.editable().append(c); var d = a.getSelection(1), e = a.createRange(), g = d.root.on("selectionchange", function(a) { a.cancel() }, null, null, 0); e.setStartAt(c, CKEDITOR.POSITION_AFTER_START); e.setEndAt(c, CKEDITOR.POSITION_BEFORE_END); d.selectRanges([e]); g.removeListener(); a.fire("unlockSnapshot"); a._.hiddenSelectionContainer = c } function k(a) { var b = { 37: 1, 39: 1, 8: 1, 46: 1 }; return function(c) { var d = c.data.getKeystroke(); if (b[d]) { var e = a.getSelection().getRanges(), g = e[0]; 1 == e.length && g.collapsed && (d = g[38 > d ? "getPreviousEditableNode" : "getNextEditableNode"]()) && d.type == CKEDITOR.NODE_ELEMENT && "false" == d.getAttribute("contenteditable") && (a.getSelection().fake(d), c.data.preventDefault(), c.cancel()) } } } function g(a) { for (var b = 0; b < a.length; b++) { var c = a[b]; c.getCommonAncestor().isReadOnly() && a.splice(b, 1); if (!c.collapsed) { if (c.startContainer.isReadOnly()) for (var d = c.startContainer, e; d && !((e = d.type == CKEDITOR.NODE_ELEMENT) && d.is("body") || !d.isReadOnly());) e && "false" == d.getAttribute("contentEditable") && c.setStartAfter(d), d = d.getParent(); d = c.startContainer; e = c.endContainer; var g = c.startOffset, f = c.endOffset, k = c.clone(); d && d.type == CKEDITOR.NODE_TEXT && (g >= d.getLength() ? k.setStartAfter(d) : k.setStartBefore(d)); e && e.type == CKEDITOR.NODE_TEXT && (f ? k.setEndAfter(e) : k.setEndBefore(e)); d = new CKEDITOR.dom.walker(k); d.evaluator = function(d) { if (d.type == CKEDITOR.NODE_ELEMENT && d.isReadOnly()) { var e = c.clone(); c.setEndBefore(d); c.collapsed && a.splice(b--, 1); d.getPosition(k.endContainer) & CKEDITOR.POSITION_CONTAINS || (e.setStartAfter(d), e.collapsed || a.splice(b + 1, 0, e)); return !0 } return !1 }; d.next() } } return a } var n = "function" != typeof window.getSelection, w = 1, q = CKEDITOR.tools.repeat("​", 7), v = new RegExp(q + "( )?", "g"), u, r, p = CKEDITOR.dom.walker.invisible(1), z = function() { function a(b) { return function(a) { var c = a.editor.createRange(); c.moveToClosestEditablePosition(a.selected, b) && a.editor.getSelection().selectRanges([c]); return !1 } } function b(a) { return function(b) { var c = b.editor, d = c.createRange(), e; (e = d.moveToClosestEditablePosition(b.selected, a)) || (e = d.moveToClosestEditablePosition(b.selected, !a)); e && c.getSelection().selectRanges([d]); c.fire("saveSnapshot"); b.selected.remove(); e || (d.moveToElementEditablePosition(c.editable()), c.getSelection().selectRanges([d])); c.fire("saveSnapshot"); return !1 } } var c = a(), d = a(1); return { 37: c, 38: c, 39: d, 40: d, 8: b(), 46: b(1) } }(); CKEDITOR.on("instanceCreated", function(b) { function c() { var a = d.getSelection(); a && a.removeAllRanges() } var d = b.editor; d.on("contentDom", function() { function b() { E = new CKEDITOR.dom.selection(d.getSelection()); E.lock() } function c() { g.removeListener("mouseup", c); p.removeListener("mouseup", c); var a = CKEDITOR.document.$.selection, b = a.createRange(); "None" != a.type && b.parentElement().ownerDocument == e.$ && b.select() } var e = d.document, g = CKEDITOR.document, h = d.editable(), m = e.getBody(), p = e.getDocumentElement(), t = h.isInline(), r, E; CKEDITOR.env.gecko && h.attachListener(h, "focus", function(a) { a.removeListener(); 0 !== r && (a = d.getSelection().getNative()) && a.isCollapsed && a.anchorNode == h.$ && (a = d.createRange(), a.moveToElementEditStart(h), a.select()) }, null, null, -2); h.attachListener(h, CKEDITOR.env.webkit ? "DOMFocusIn" : "focus", function() { r && CKEDITOR.env.webkit && (r = d._.previousActive && d._.previousActive.equals(e.getActive())) && null != d._.previousScrollTop && d._.previousScrollTop != h.$.scrollTop && (h.$.scrollTop = d._.previousScrollTop); d.unlockSelection(r); r = 0 }, null, null, -1); h.attachListener(h, "mousedown", function() { r = 0 }); if (CKEDITOR.env.ie || t) n ? h.attachListener(h, "beforedeactivate", b, null, null, -1) : h.attachListener(d, "selectionCheck", b, null, null, -1), h.attachListener(h, CKEDITOR.env.webkit ? "DOMFocusOut" : "blur", function() { d.lockSelection(E); r = 1 }, null, null, -1), h.attachListener(h, "mousedown", function() { r = 0 }); if (CKEDITOR.env.ie && !t) { var v; h.attachListener(h, "mousedown", function(a) { 2 == a.data.$.button && ((a = d.document.getSelection()) && a.getType() != CKEDITOR.SELECTION_NONE || (v = d.window.getScrollPosition())) }); h.attachListener(h, "mouseup", function(a) { 2 == a.data.$.button && v && (d.document.$.documentElement.scrollLeft = v.x, d.document.$.documentElement.scrollTop = v.y); v = null }); if ("BackCompat" != e.$.compatMode) { if (CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat) { var q, u; p.on("mousedown", function(a) { function b(a) { a = a.data.$; if (q) { var c = m.$.createTextRange(); try { c.moveToPoint(a.clientX, a.clientY) } catch (d) {} q.setEndPoint(0 > u.compareEndPoints("StartToStart", c) ? "EndToEnd" : "StartToStart", c); q.select() } } function c() { p.removeListener("mousemove", b); g.removeListener("mouseup", c); p.removeListener("mouseup", c); q.select() } a = a.data; if (a.getTarget().is("html") && a.$.y < p.$.clientHeight && a.$.x < p.$.clientWidth) { q = m.$.createTextRange(); try { q.moveToPoint(a.$.clientX, a.$.clientY) } catch (d) {} u = q.duplicate(); p.on("mousemove", b); g.on("mouseup", c); p.on("mouseup", c) } }) } if (7 < CKEDITOR.env.version && 11 > CKEDITOR.env.version) p.on("mousedown", function(a) { a.data.getTarget().is("html") && (g.on("mouseup", c), p.on("mouseup", c)) }) } } h.attachListener(h, "selectionchange", a, d); h.attachListener(h, "keyup", f, d); h.attachListener(h, CKEDITOR.env.webkit ? "DOMFocusIn" : "focus", function() { d.forceNextSelectionCheck(); d.selectionChange(1) }); if (t && (CKEDITOR.env.webkit || CKEDITOR.env.gecko)) { var y; h.attachListener(h, "mousedown", function() { y = 1 }); h.attachListener(e.getDocumentElement(), "mouseup", function() { y && f.call(d); y = 0 }) } else h.attachListener(CKEDITOR.env.ie ? h : e.getDocumentElement(), "mouseup", f, d); CKEDITOR.env.webkit && h.attachListener(e, "keydown", function(a) { switch (a.data.getKey()) { case 13: case 33: case 34: case 35: case 36: case 37: case 39: case 8: case 45: case 46: l(h) } }, null, null, -1); h.attachListener(h, "keydown", k(d), null, null, -1) }); d.on("setData", function() { d.unlockSelection(); CKEDITOR.env.webkit && c() }); d.on("contentDomUnload", function() { d.unlockSelection() }); if (CKEDITOR.env.ie9Compat) d.on("beforeDestroy", c, null, null, 9); d.on("dataReady", function() { delete d._.fakeSelection; delete d._.hiddenSelectionContainer; d.selectionChange(1) }); d.on("loadSnapshot", function() { var a = CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT), b = d.editable().getLast(a); b && b.hasAttribute("data-cke-hidden-sel") && (b.remove(), CKEDITOR.env.gecko && (a = d.editable().getFirst(a)) && a.is("br") && a.getAttribute("_moz_editor_bogus_node") && a.remove()) }, null, null, 100); d.on("key", function(a) { if ("wysiwyg" == d.mode) { var b = d.getSelection(); if (b.isFake) { var c = z[a.data.keyCode]; if (c) return c({ editor: d, selected: b.getSelectedElement(), selection: b, keyEvent: a }) } } }) }); if (CKEDITOR.env.webkit) CKEDITOR.on("instanceReady", function(a) { var b = a.editor; b.on("selectionChange", function() { var a = b.editable(), c = a.getCustomData("cke-fillingChar"); c && (c.getCustomData("ready") ? l(a) : c.setCustomData("ready", 1)) }, null, null, -1); b.on("beforeSetMode", function() { l(b.editable()) }, null, null, -1); b.on("getSnapshot", function(a) { a.data && (a.data = d(a.data)) }, b, null, 20); b.on("toDataFormat", function(a) { a.data.dataValue = d(a.data.dataValue) }, null, null, 0) }); CKEDITOR.editor.prototype.selectionChange = function(b) { (b ? a : f).call(this) }; CKEDITOR.editor.prototype.getSelection = function(a) { return !this._.savedSelection && !this._.fakeSelection || a ? (a = this.editable()) && "wysiwyg" == this.mode ? new CKEDITOR.dom.selection(a) : null : this._.savedSelection || this._.fakeSelection }; CKEDITOR.editor.prototype.lockSelection = function(a) { a = a || this.getSelection(1); return a.getType() != CKEDITOR.SELECTION_NONE ? (!a.isLocked && a.lock(), this._.savedSelection = a, !0) : !1 }; CKEDITOR.editor.prototype.unlockSelection = function(a) { var b = this._.savedSelection; return b ? (b.unlock(a), delete this._.savedSelection, !0) : !1 }; CKEDITOR.editor.prototype.forceNextSelectionCheck = function() { delete this._.selectionPreviousPath }; CKEDITOR.dom.document.prototype.getSelection = function() { return new CKEDITOR.dom.selection(this) }; CKEDITOR.dom.range.prototype.select = function() { var a = this.root instanceof CKEDITOR.editable ? this.root.editor.getSelection() : new CKEDITOR.dom.selection(this.root); a.selectRanges([this]); return a }; CKEDITOR.SELECTION_NONE = 1; CKEDITOR.SELECTION_TEXT = 2; CKEDITOR.SELECTION_ELEMENT = 3; CKEDITOR.dom.selection = function(a) { if (a instanceof CKEDITOR.dom.selection) { var b = a; a = a.root } var c = a instanceof CKEDITOR.dom.element; this.rev = b ? b.rev : w++; this.document = a instanceof CKEDITOR.dom.document ? a : a.getDocument(); this.root = c ? a : this.document.getBody(); this.isLocked = 0; this._ = { cache: {} }; if (b) return CKEDITOR.tools.extend(this._.cache, b._.cache), this.isFake = b.isFake, this.isLocked = b.isLocked, this; a = this.getNative(); var d, e; if (a) if (a.getRangeAt) d = (e = a.rangeCount && a.getRangeAt(0)) && new CKEDITOR.dom.node(e.commonAncestorContainer); else { try { e = a.createRange() } catch (g) {} d = e && CKEDITOR.dom.element.get(e.item && e.item(0) || e.parentElement()) } if (!d || d.type != CKEDITOR.NODE_ELEMENT && d.type != CKEDITOR.NODE_TEXT || !this.root.equals(d) && !this.root.contains(d)) this._.cache.type = CKEDITOR.SELECTION_NONE, this._.cache.startElement = null, this._.cache.selectedElement = null, this._.cache.selectedText = "", this._.cache.ranges = new CKEDITOR.dom.rangeList; return this }; var B = { img: 1, hr: 1, li: 1, table: 1, tr: 1, td: 1, th: 1, embed: 1, object: 1, ol: 1, ul: 1, a: 1, input: 1, form: 1, select: 1, textarea: 1, button: 1, fieldset: 1, thead: 1, tfoot: 1 }; CKEDITOR.tools.extend(CKEDITOR.dom.selection, { _removeFillingCharSequenceString: d, _createFillingCharSequenceNode: m, FILLING_CHAR_SEQUENCE: q }); CKEDITOR.dom.selection.prototype = { getNative: function() { return void 0 !== this._.cache.nativeSel ? this._.cache.nativeSel : this._.cache.nativeSel = n ? this.document.$.selection : this.document.getWindow().$.getSelection() }, getType: n ? function() { var a = this._.cache; if (a.type) return a.type; var b = CKEDITOR.SELECTION_NONE; try { var c = this.getNative(), d = c.type; "Text" == d && (b = CKEDITOR.SELECTION_TEXT); "Control" == d && (b = CKEDITOR.SELECTION_ELEMENT); c.createRange().parentElement() && (b = CKEDITOR.SELECTION_TEXT) } catch (e) {} return a.type = b } : function() { var a = this._.cache; if (a.type) return a.type; var b = CKEDITOR.SELECTION_TEXT, c = this.getNative(); if (!c || !c.rangeCount) b = CKEDITOR.SELECTION_NONE; else if (1 == c.rangeCount) { var c = c.getRangeAt(0), d = c.startContainer; d == c.endContainer && 1 == d.nodeType && 1 == c.endOffset - c.startOffset && B[d.childNodes[c.startOffset].nodeName.toLowerCase()] && (b = CKEDITOR.SELECTION_ELEMENT) } return a.type = b }, getRanges: function() { var a = n ? function() { function a(b) { return (new CKEDITOR.dom.node(b)).getIndex() } var b = function(b, c) { b = b.duplicate(); b.collapse(c); var d = b.parentElement(); if (!d.hasChildNodes()) return { container: d, offset: 0 }; for (var e = d.children, g, f, k = b.duplicate(), h = 0, l = e.length - 1, m = -1, n, p; h <= l;) if (m = Math.floor((h + l) / 2), g = e[m], k.moveToElementText(g), n = k.compareEndPoints("StartToStart", b), 0 < n) l = m - 1; else if (0 > n) h = m + 1; else return { container: d, offset: a(g) }; if (-1 == m || m == e.length - 1 && 0 > n) { k.moveToElementText(d); k.setEndPoint("StartToStart", b); k = k.text.replace(/(\r\n|\r)/g, "\n").length; e = d.childNodes; if (!k) return g = e[e.length - 1], g.nodeType != CKEDITOR.NODE_TEXT ? { container: d, offset: e.length } : { container: g, offset: g.nodeValue.length }; for (d = e.length; 0 < k && 0 < d;) f = e[--d], f.nodeType == CKEDITOR.NODE_TEXT && (p = f, k -= f.nodeValue.length); return { container: p, offset: -k } } k.collapse(0 < n ? !0 : !1); k.setEndPoint(0 < n ? "StartToStart" : "EndToStart", b); k = k.text.replace(/(\r\n|\r)/g, "\n").length; if (!k) return { container: d, offset: a(g) + (0 < n ? 0 : 1) }; for (; 0 < k;) try { f = g[0 < n ? "previousSibling" : "nextSibling"], f.nodeType == CKEDITOR.NODE_TEXT && (k -= f.nodeValue.length, p = f), g = f } catch (r) { return { container: d, offset: a(g) } } return { container: p, offset: 0 < n ? -k : p.nodeValue.length + k } }; return function() { var a = this.getNative(), c = a && a.createRange(), d = this.getType(); if (!a) return []; if (d == CKEDITOR.SELECTION_TEXT) return a = new CKEDITOR.dom.range(this.root), d = b(c, !0), a.setStart(new CKEDITOR.dom.node(d.container), d.offset), d = b(c), a.setEnd(new CKEDITOR.dom.node(d.container), d.offset), a.endContainer.getPosition(a.startContainer) & CKEDITOR.POSITION_PRECEDING && a.endOffset <= a.startContainer.getIndex() && a.collapse(), [a]; if (d == CKEDITOR.SELECTION_ELEMENT) { for (var d = [], e = 0; e < c.length; e++) { for (var g = c.item(e), f = g.parentNode, k = 0, a = new CKEDITOR.dom.range(this.root); k < f.childNodes.length && f.childNodes[k] != g; k++); a.setStart(new CKEDITOR.dom.node(f), k); a.setEnd(new CKEDITOR.dom.node(f), k + 1); d.push(a) } return d } return [] } }() : function() { var a = [], b, c = this.getNative(); if (!c) return a; for (var d = 0; d < c.rangeCount; d++) { var e = c.getRangeAt(d); b = new CKEDITOR.dom.range(this.root); b.setStart(new CKEDITOR.dom.node(e.startContainer), e.startOffset); b.setEnd(new CKEDITOR.dom.node(e.endContainer), e.endOffset); a.push(b) } return a }; return function(b) { var c = this._.cache, d = c.ranges; d || (c.ranges = d = new CKEDITOR.dom.rangeList(a.call(this))); return b ? g(new CKEDITOR.dom.rangeList(d.slice())) : d } }(), getStartElement: function() { var a = this._.cache; if (void 0 !== a.startElement) return a.startElement; var b; switch (this.getType()) { case CKEDITOR.SELECTION_ELEMENT: return this.getSelectedElement(); case CKEDITOR.SELECTION_TEXT: var c = this.getRanges()[0]; if (c) { if (c.collapsed) b = c.startContainer, b.type != CKEDITOR.NODE_ELEMENT && (b = b.getParent()); else { for (c.optimize(); b = c.startContainer, c.startOffset == (b.getChildCount ? b.getChildCount() : b.getLength()) && !b.isBlockBoundary();) c.setStartAfter(b); b = c.startContainer; if (b.type != CKEDITOR.NODE_ELEMENT) return b.getParent(); if ((b = b.getChild(c.startOffset)) && b.type == CKEDITOR.NODE_ELEMENT) for (c = b.getFirst(); c && c.type == CKEDITOR.NODE_ELEMENT;) b = c, c = c.getFirst(); else b = c.startContainer } b = b.$ } } return a.startElement = b ? new CKEDITOR.dom.element(b) : null }, getSelectedElement: function() { var a = this._.cache; if (void 0 !== a.selectedElement) return a.selectedElement; var b = this, c = CKEDITOR.tools.tryThese(function() { return b.getNative().createRange().item(0) }, function() { for (var a = b.getRanges()[0].clone(), c, d, e = 2; e && !((c = a.getEnclosedNode()) && c.type == CKEDITOR.NODE_ELEMENT && B[c.getName()] && (d = c)); e--) a.shrink(CKEDITOR.SHRINK_ELEMENT); return d && d.$ }); return a.selectedElement = c ? new CKEDITOR.dom.element(c) : null }, getSelectedText: function() { var a = this._.cache; if (void 0 !== a.selectedText) return a.selectedText; var b = this.getNative(), b = n ? "Control" == b.type ? "" : b.createRange().text : b.toString(); return a.selectedText = b }, lock: function() { this.getRanges(); this.getStartElement(); this.getSelectedElement(); this.getSelectedText(); this._.cache.nativeSel = null; this.isLocked = 1 }, unlock: function(a) { if (this.isLocked) { if (a) var b = this.getSelectedElement(), c = !b && this.getRanges(), d = this.isFake; this.isLocked = 0; this.reset(); a && (a = b || c[0] && c[0].getCommonAncestor()) && a.getAscendant("body", 1) && (d ? this.fake(b) : b ? this.selectElement(b) : this.selectRanges(c)) } }, reset: function() { this._.cache = {}; this.isFake = 0; var a = this.root.editor; if (a && a._.fakeSelection) if (this.rev == a._.fakeSelection.rev) { delete a._.fakeSelection; var b = a._.hiddenSelectionContainer; if (b) { var c = a.checkDirty(); a.fire("lockSnapshot"); b.remove(); a.fire("unlockSnapshot"); !c && a.resetDirty() } delete a._.hiddenSelectionContainer } else CKEDITOR.warn("selection-fake-reset"); this.rev = w++ }, selectElement: function(a) { var b = new CKEDITOR.dom.range(this.root); b.setStartBefore(a); b.setEndAfter(a); this.selectRanges([b]) }, selectRanges: function(a) { var b = this.root.editor, b = b && b._.hiddenSelectionContainer; this.reset(); if (b) for (var b = this.root, c, d = 0; d < a.length; ++d) c = a[d], c.endContainer.equals(b) && (c.endOffset = Math.min(c.endOffset, b.getChildCount())); if (a.length) if (this.isLocked) { var g = CKEDITOR.document.getActive(); this.unlock(); this.selectRanges(a); this.lock(); g && !g.equals(this.root) && g.focus() } else { var f; a: { var k, h; if (1 == a.length && !(h = a[0]).collapsed && (f = h.getEnclosedNode()) && f.type == CKEDITOR.NODE_ELEMENT && (h = h.clone(), h.shrink(CKEDITOR.SHRINK_ELEMENT, !0), (k = h.getEnclosedNode()) && k.type == CKEDITOR.NODE_ELEMENT && (f = k), "false" == f.getAttribute("contenteditable"))) break a; f = void 0 } if (f) this.fake(f); else { if (n) { h = CKEDITOR.dom.walker.whitespaces(!0); k = /\ufeff|\u00a0/; b = { table: 1, tbody: 1, tr: 1 }; 1 < a.length && (f = a[a.length - 1], a[0].setEnd(f.endContainer, f.endOffset)); f = a[0]; a = f.collapsed; var p, r, v; if ((c = f.getEnclosedNode()) && c.type == CKEDITOR.NODE_ELEMENT && c.getName() in B && (!c.is("a") || !c.getText())) try { v = c.$.createControlRange(); v.addElement(c.$); v.select(); return } catch (q) {} if (f.startContainer.type == CKEDITOR.NODE_ELEMENT && f.startContainer.getName() in b || f.endContainer.type == CKEDITOR.NODE_ELEMENT && f.endContainer.getName() in b) f.shrink(CKEDITOR.NODE_ELEMENT, !0), a = f.collapsed; v = f.createBookmark(); b = v.startNode; a || (g = v.endNode); v = f.document.$.body.createTextRange(); v.moveToElementText(b.$); v.moveStart("character", 1); g ? (k = f.document.$.body.createTextRange(), k.moveToElementText(g.$), v.setEndPoint("EndToEnd", k), v.moveEnd("character", -1)) : (p = b.getNext(h), r = b.hasAscendant("pre"), p = !(p && p.getText && p.getText().match(k)) && (r || !b.hasPrevious() || b.getPrevious().is && b.getPrevious().is("br")), r = f.document.createElement("span"), r.setHtml("\x26#65279;"), r.insertBefore(b), p && f.document.createText("").insertBefore(b)); f.setStartBefore(b); b.remove(); a ? (p ? (v.moveStart("character", -1), v.select(), f.document.$.selection.clear()) : v.select(), f.moveToPosition(r, CKEDITOR.POSITION_BEFORE_START), r.remove()) : (f.setEndBefore(g), g.remove(), v.select()) } else { g = this.getNative(); if (!g) return; this.removeAllRanges(); for (v = 0; v < a.length; v++) { if (v < a.length - 1 && (p = a[v], r = a[v + 1], k = p.clone(), k.setStart(p.endContainer, p.endOffset), k.setEnd(r.startContainer, r.startOffset), !k.collapsed && (k.shrink(CKEDITOR.NODE_ELEMENT, !0), f = k.getCommonAncestor(), k = k.getEnclosedNode(), f.isReadOnly() || k && k.isReadOnly()))) { r.setStart(p.startContainer, p.startOffset); a.splice(v--, 1); continue } f = a[v]; r = this.document.$.createRange(); f.collapsed && CKEDITOR.env.webkit && e(f) && (k = m(this.root), f.insertNode(k), (p = k.getNext()) && !k.getPrevious() && p.type == CKEDITOR.NODE_ELEMENT && "br" == p.getName() ? (l(this.root), f.moveToPosition(p, CKEDITOR.POSITION_BEFORE_START)) : f.moveToPosition(k, CKEDITOR.POSITION_AFTER_END)); r.setStart(f.startContainer.$, f.startOffset); try { r.setEnd(f.endContainer.$, f.endOffset) } catch (E) { if (0 <= E.toString().indexOf("NS_ERROR_ILLEGAL_VALUE")) f.collapse(1), r.setEnd(f.endContainer.$, f.endOffset); else throw E; } g.addRange(r) } } this.reset(); this.root.fire("selectionchange") } } }, fake: function(a, b) { var c = this.root.editor; void 0 === b && a.hasAttribute("aria-label") && (b = a.getAttribute("aria-label")); this.reset(); h(c, b); var d = this._.cache, e = new CKEDITOR.dom.range(this.root); e.setStartBefore(a); e.setEndAfter(a); d.ranges = new CKEDITOR.dom.rangeList(e); d.selectedElement = d.startElement = a; d.type = CKEDITOR.SELECTION_ELEMENT; d.selectedText = d.nativeSel = null; this.isFake = 1; this.rev = w++; c._.fakeSelection = this; this.root.fire("selectionchange") }, isHidden: function() { var a = this.getCommonAncestor(); a && a.type == CKEDITOR.NODE_TEXT && (a = a.getParent()); return !(!a || !a.data("cke-hidden-sel")) }, createBookmarks: function(a) { a = this.getRanges().createBookmarks(a); this.isFake && (a.isFake = 1); return a }, createBookmarks2: function(a) { a = this.getRanges().createBookmarks2(a); this.isFake && (a.isFake = 1); return a }, selectBookmarks: function(a) { for (var b = [], c, d = 0; d < a.length; d++) { var e = new CKEDITOR.dom.range(this.root); e.moveToBookmark(a[d]); b.push(e) } a.isFake && (c = b[0].getEnclosedNode(), c && c.type == CKEDITOR.NODE_ELEMENT || (CKEDITOR.warn("selection-not-fake"), a.isFake = 0)); a.isFake ? this.fake(c) : this.selectRanges(b); return this }, getCommonAncestor: function() { var a = this.getRanges(); return a.length ? a[0].startContainer.getCommonAncestor(a[a.length - 1].endContainer) : null }, scrollIntoView: function() { this.type != CKEDITOR.SELECTION_NONE && this.getRanges()[0].scrollIntoView() }, removeAllRanges: function() { if (this.getType() != CKEDITOR.SELECTION_NONE) { var a = this.getNative(); try { a && a[n ? "empty" : "removeAllRanges"]() } catch (b) {} this.reset() } } } }(), "use strict", CKEDITOR.STYLE_BLOCK = 1, CKEDITOR.STYLE_INLINE = 2, CKEDITOR.STYLE_OBJECT = 3, function() { function a(a, b) { for (var c, d; (a = a.getParent()) && !a.equals(b);) if (a.getAttribute("data-nostyle")) c = a; else if (!d) { var e = a.getAttribute("contentEditable"); "false" == e ? c = a : "true" == e && (d = 1) } return c } function f(a, b, c, d) { return (a.getPosition(b) | d) == d && (!c.childRule || c.childRule(a)) } function b(c) { var d = c.document; if (c.collapsed) d = p(this, d), c.insertNode(d), c.moveToPosition(d, CKEDITOR.POSITION_BEFORE_END); else { var g = this.element, k = this._.definition, h, l = k.ignoreReadonly, m = l || k.includeReadonly; null == m && (m = c.root.getCustomData("cke_includeReadonly")); var n = CKEDITOR.dtd[g]; n || (h = !0, n = CKEDITOR.dtd.span); c.enlarge(CKEDITOR.ENLARGE_INLINE, 1); c.trim(); var r = c.createBookmark(), q = r.startNode, u = r.endNode, t = q, z; if (!l) { var w = c.getCommonAncestor(), l = a(q, w), w = a(u, w); l && (t = l.getNextSourceNode(!0)); w && (u = w) } for (t.getPosition(u) == CKEDITOR.POSITION_FOLLOWING && (t = 0); t;) { l = !1; if (t.equals(u)) t = null, l = !0; else { var B = t.type == CKEDITOR.NODE_ELEMENT ? t.getName() : null, w = B && "false" == t.getAttribute("contentEditable"), y = B && t.getAttribute("data-nostyle"); if (B && t.data("cke-bookmark")) { t = t.getNextSourceNode(!0); continue } if (w && m && CKEDITOR.dtd.$block[B]) for (var D = t, x = e(D), A = void 0, C = x.length, ea = 0, D = C && new CKEDITOR.dom.range(D.getDocument()); ea < C; ++ea) { var A = x[ea], ha = CKEDITOR.filter.instances[A.data("cke-filter")]; if (ha ? ha.check(this) : 1) D.selectNodeContents(A), b.call(this, D) } x = B ? !n[B] || y ? 0 : w && !m ? 0 : f(t, u, k, K) : 1; if (x) if (A = t.getParent(), x = k, C = g, ea = h, !A || !(A.getDtd() || CKEDITOR.dtd.span)[C] && !ea || x.parentRule && !x.parentRule(A)) l = !0; else { if (z || B && CKEDITOR.dtd.$removeEmpty[B] && (t.getPosition(u) | K) != K || (z = c.clone(), z.setStartBefore(t)), B = t.type, B == CKEDITOR.NODE_TEXT || w || B == CKEDITOR.NODE_ELEMENT && !t.getChildCount()) { for (var B = t, H; (l = !B.getNext(I)) && (H = B.getParent(), n[H.getName()]) && f(H, q, k, J);) B = H; z.setEndAfter(B) } } else l = !0; t = t.getNextSourceNode(y || w) } if (l && z && !z.collapsed) { for (var l = p(this, d), w = l.hasAttributes(), y = z.getCommonAncestor(), B = {}, x = {}, A = {}, C = {}, fa, W, F; l && y;) { if (y.getName() == g) { for (fa in k.attributes) !C[fa] && (F = y.getAttribute(W)) && (l.getAttribute(fa) == F ? x[fa] = 1 : C[fa] = 1); for (W in k.styles) !A[W] && (F = y.getStyle(W)) && (l.getStyle(W) == F ? B[W] = 1 : A[W] = 1) } y = y.getParent() } for (fa in x) l.removeAttribute(fa); for (W in B) l.removeStyle(W); w && !l.hasAttributes() && (l = null); l ? (z.extractContents().appendTo(l), z.insertNode(l), v.call(this, l), l.mergeSiblings(), CKEDITOR.env.ie || l.$.normalize()) : (l = new CKEDITOR.dom.element("span"), z.extractContents().appendTo(l), z.insertNode(l), v.call(this, l), l.remove(!0)); z = null } } c.moveToBookmark(r); c.shrink(CKEDITOR.SHRINK_TEXT); c.shrink(CKEDITOR.NODE_ELEMENT, !0) } } function c(a) { function b() { for (var a = new CKEDITOR.dom.elementPath(d.getParent()), c = new CKEDITOR.dom.elementPath(l.getParent()), e = null, g = null, f = 0; f < a.elements.length; f++) { var k = a.elements[f]; if (k == a.block || k == a.blockLimit) break; m.checkElementRemovable(k, !0) && (e = k) } for (f = 0; f < c.elements.length; f++) { k = c.elements[f]; if (k == c.block || k == c.blockLimit) break; m.checkElementRemovable(k, !0) && (g = k) } g && l.breakParent(g); e && d.breakParent(e) } a.enlarge(CKEDITOR.ENLARGE_INLINE, 1); var c = a.createBookmark(), d = c.startNode; if (a.collapsed) { for (var e = new CKEDITOR.dom.elementPath(d.getParent(), a.root), g, f = 0, k; f < e.elements.length && (k = e.elements[f]) && k != e.block && k != e.blockLimit; f++) if (this.checkElementRemovable(k)) { var h; a.collapsed && (a.checkBoundaryOfElement(k, CKEDITOR.END) || (h = a.checkBoundaryOfElement(k, CKEDITOR.START))) ? (g = k, g.match = h ? "start" : "end") : (k.mergeSiblings(), k.is(this.element) ? q.call(this, k) : u(k, t(this)[k.getName()])) } if (g) { k = d; for (f = 0;; f++) { h = e.elements[f]; if (h.equals(g)) break; else if (h.match) continue; else h = h.clone(); h.append(k); k = h } k["start" == g.match ? "insertBefore" : "insertAfter"](g) } } else { var l = c.endNode, m = this; b(); for (e = d; !e.equals(l);) g = e.getNextSourceNode(), e.type == CKEDITOR.NODE_ELEMENT && this.checkElementRemovable(e) && (e.getName() == this.element ? q.call(this, e) : u(e, t(this)[e.getName()]), g.type == CKEDITOR.NODE_ELEMENT && g.contains(d) && (b(), g = d.getNext())), e = g } a.moveToBookmark(c); a.shrink(CKEDITOR.NODE_ELEMENT, !0) } function e(a) { var b = []; a.forEach(function(a) { if ("true" == a.getAttribute("contenteditable")) return b.push(a), !1 }, CKEDITOR.NODE_ELEMENT, !0); return b } function m(a) { var b = a.getEnclosedNode() || a.getCommonAncestor(!1, !0); (a = (new CKEDITOR.dom.elementPath(b, a.root)).contains(this.element, 1)) && !a.isReadOnly() && z(a, this) } function l(a) { var b = a.getCommonAncestor(!0, !0); if (a = (new CKEDITOR.dom.elementPath(b, a.root)).contains(this.element, 1)) { var b = this._.definition, c = b.attributes; if (c) for (var d in c) a.removeAttribute(d, c[d]); if (b.styles) for (var e in b.styles) b.styles.hasOwnProperty(e) && a.removeStyle(e) } } function d(a) { var b = a.createBookmark(!0), c = a.createIterator(); c.enforceRealBlocks = !0; this._.enterMode && (c.enlargeBr = this._.enterMode != CKEDITOR.ENTER_BR); for (var d, e = a.document, g; d = c.getNextParagraph();) !d.isReadOnly() && (c.activeFilter ? c.activeFilter.check(this) : 1) && (g = p(this, e, d), k(d, g)); a.moveToBookmark(b) } function h(a) { var b = a.createBookmark(1), c = a.createIterator(); c.enforceRealBlocks = !0; c.enlargeBr = this._.enterMode != CKEDITOR.ENTER_BR; for (var d, e; d = c.getNextParagraph();) this.checkElementRemovable(d) && (d.is("pre") ? ((e = this._.enterMode == CKEDITOR.ENTER_BR ? null : a.document.createElement(this._.enterMode == CKEDITOR.ENTER_P ? "p" : "div")) && d.copyAttributes(e), k(d, e)) : q.call(this, d)); a.moveToBookmark(b) } function k(a, b) { var c = !b; c && (b = a.getDocument().createElement("div"), a.copyAttributes(b)); var d = b && b.is("pre"), e = a.is("pre"), f = !d && e; if (d && !e) { e = b; (f = a.getBogus()) && f.remove(); f = a.getHtml(); f = n(f, /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g, ""); f = f.replace(/[ \t\r\n]*(]*>)[ \t\r\n]*/gi, "$1"); f = f.replace(/([ \t\n\r]+| )/g, " "); f = f.replace(/]*>/gi, "\n"); if (CKEDITOR.env.ie) { var k = a.getDocument().createElement("div"); k.append(e); e.$.outerHTML = "\x3cpre\x3e" + f + "\x3c/pre\x3e"; e.copyAttributes(k.getFirst()); e = k.getFirst().remove() } else e.setHtml(f); b = e } else f ? b = w(c ? [a.getHtml()] : g(a), b) : a.moveChildren(b); b.replace(a); if (d) { var c = b, h; (h = c.getPrevious(H)) && h.type == CKEDITOR.NODE_ELEMENT && h.is("pre") && (d = n(h.getHtml(), /\n$/, "") + "\n\n" + n(c.getHtml(), /^\n/, ""), CKEDITOR.env.ie ? c.$.outerHTML = "\x3cpre\x3e" + d + "\x3c/pre\x3e" : c.setHtml(d), h.remove()) } else c && r(b) } function g(a) { var b = []; n(a.getOuterHtml(), /(\S\s*)\n(?:\s|(]+data-cke-bookmark.*?\/span>))*\n(?!$)/gi, function(a, b, c) { return b + "\x3c/pre\x3e" + c + "\x3cpre\x3e" }).replace(/([\s\S]*?)<\/pre>/gi, function(a, c) { b.push(c) }); return b } function n(a, b, c) { var d = "", e = ""; a = a.replace(/(^]+data-cke-bookmark.*?\/span>)|(]+data-cke-bookmark.*?\/span>$)/gi, function(a, b, c) { b && (d = b); c && (e = c); return "" }); return d + a.replace(b, c) + e } function w(a, b) { var c; 1 < a.length && (c = new CKEDITOR.dom.documentFragment(b.getDocument())); for (var d = 0; d < a.length; d++) { var e = a[d], e = e.replace(/(\r\n|\r)/g, "\n"), e = n(e, /^[ \t]*\n/, ""), e = n(e, /\n$/, ""), e = n(e, /^[ \t]+|[ \t]+$/g, function(a, b) { return 1 == a.length ? "\x26nbsp;" : b ? " " + CKEDITOR.tools.repeat("\x26nbsp;", a.length - 1) : CKEDITOR.tools.repeat("\x26nbsp;", a.length - 1) + " " }), e = e.replace(/\n/g, "\x3cbr\x3e"), e = e.replace(/[ \t]{2,}/g, function(a) { return CKEDITOR.tools.repeat("\x26nbsp;", a.length - 1) + " " }); if (c) { var g = b.clone(); g.setHtml(e); c.append(g) } else b.setHtml(e) } return c || b } function q(a, b) { var c = this._.definition, d = c.attributes, c = c.styles, e = t(this)[a.getName()], g = CKEDITOR.tools.isEmpty(d) && CKEDITOR.tools.isEmpty(c), f; for (f in d) if ("class" != f && !this._.definition.fullMatch || a.getAttribute(f) == y(f, d[f])) b && "data-" == f.slice(0, 5) || (g = a.hasAttribute(f), a.removeAttribute(f)); for (var k in c) this._.definition.fullMatch && a.getStyle(k) != y(k, c[k], !0) || (g = g || !!a.getStyle(k), a.removeStyle(k)); u(a, e, A[a.getName()]); g && (this._.definition.alwaysRemoveElement ? r(a, 1) : !CKEDITOR.dtd.$block[a.getName()] || this._.enterMode == CKEDITOR.ENTER_BR && !a.hasAttributes() ? r(a) : a.renameNode(this._.enterMode == CKEDITOR.ENTER_P ? "p" : "div")) } function v(a) { for (var b = t(this), c = a.getElementsByTag(this.element), d, e = c.count(); 0 <= --e;) d = c.getItem(e), d.isReadOnly() || q.call(this, d, !0); for (var g in b) if (g != this.element) for (c = a.getElementsByTag(g), e = c.count() - 1; 0 <= e; e--) d = c.getItem(e), d.isReadOnly() || u(d, b[g]) } function u(a, b, c) { if (b = b && b.attributes) for (var d = 0; d < b.length; d++) { var e = b[d][0], g; if (g = a.getAttribute(e)) { var f = b[d][1]; (null === f || f.test && f.test(g) || "string" == typeof f && g == f) && a.removeAttribute(e) } } c || r(a) } function r(a, b) { if (!a.hasAttributes() || b) if (CKEDITOR.dtd.$block[a.getName()]) { var c = a.getPrevious(H), d = a.getNext(H); !c || c.type != CKEDITOR.NODE_TEXT && c.isBlockBoundary({ br: 1 }) || a.append("br", 1); !d || d.type != CKEDITOR.NODE_TEXT && d.isBlockBoundary({ br: 1 }) || a.append("br"); a.remove(!0) } else c = a.getFirst(), d = a.getLast(), a.remove(!0), c && (c.type == CKEDITOR.NODE_ELEMENT && c.mergeSiblings(), d && !c.equals(d) && d.type == CKEDITOR.NODE_ELEMENT && d.mergeSiblings()) } function p(a, b, c) { var d; d = a.element; "*" == d && (d = "span"); d = new CKEDITOR.dom.element(d, b); c && c.copyAttributes(d); d = z(d, a); b.getCustomData("doc_processing_style") && d.hasAttribute("id") ? d.removeAttribute("id") : b.setCustomData("doc_processing_style", 1); return d } function z(a, b) { var c = b._.definition, d = c.attributes, c = CKEDITOR.style.getStyleText(c); if (d) for (var e in d) a.setAttribute(e, d[e]); c && a.setAttribute("style", c); return a } function B(a, b) { for (var c in a) a[c] = a[c].replace(G, function(a, c) { return b[c] }) } function t(a) { if (a._.overrides) return a._.overrides; var b = a._.overrides = {}, c = a._.definition.overrides; if (c) { CKEDITOR.tools.isArray(c) || (c = [c]); for (var d = 0; d < c.length; d++) { var e = c[d], g, f; "string" == typeof e ? g = e.toLowerCase() : (g = e.element ? e.element.toLowerCase() : a.element, f = e.attributes); e = b[g] || (b[g] = {}); if (f) { var e = e.attributes = e.attributes || [], k; for (k in f) e.push([k.toLowerCase(), f[k]]) } } } return b } function y(a, b, c) { var d = new CKEDITOR.dom.element("span"); d[c ? "setStyle" : "setAttribute"](a, b); return d[c ? "getStyle" : "getAttribute"](a) } function D(a, b) { function c(a, b) { return "font-family" == b.toLowerCase() ? a.replace(/["']/g, "") : a } "string" == typeof a && (a = CKEDITOR.tools.parseCssText(a)); "string" == typeof b && (b = CKEDITOR.tools.parseCssText(b, !0)); for (var d in a) if (!(d in b) || c(b[d], d) != c(a[d], d) && "inherit" != a[d] && "inherit" != b[d]) return !1; return !0 } function x(a, b, c) { var d = a.document, e = a.getRanges(); b = b ? this.removeFromRange : this.applyToRange; for (var g, f = e.createIterator(); g = f.getNextRange();) b.call(this, g, c); a.selectRanges(e); d.removeCustomData("doc_processing_style") } var A = { address: 1, div: 1, h1: 1, h2: 1, h3: 1, h4: 1, h5: 1, h6: 1, p: 1, pre: 1, section: 1, header: 1, footer: 1, nav: 1, article: 1, aside: 1, figure: 1, dialog: 1, hgroup: 1, time: 1, meter: 1, menu: 1, command: 1, keygen: 1, output: 1, progress: 1, details: 1, datagrid: 1, datalist: 1 }, C = { a: 1, blockquote: 1, embed: 1, hr: 1, img: 1, li: 1, object: 1, ol: 1, table: 1, td: 1, tr: 1, th: 1, ul: 1, dl: 1, dt: 1, dd: 1, form: 1, audio: 1, video: 1 }, F = /\s*(?:;\s*|$)/, G = /#\((.+?)\)/g, I = CKEDITOR.dom.walker.bookmark(0, 1), H = CKEDITOR.dom.walker.whitespaces(1); CKEDITOR.style = function(a, b) { if ("string" == typeof a.type) return new CKEDITOR.style.customHandlers[a.type](a); var c = a.attributes; c && c.style && (a.styles = CKEDITOR.tools.extend({}, a.styles, CKEDITOR.tools.parseCssText(c.style)), delete c.style); b && (a = CKEDITOR.tools.clone(a), B(a.attributes, b), B(a.styles, b)); c = this.element = a.element ? "string" == typeof a.element ? a.element.toLowerCase() : a.element : "*"; this.type = a.type || (A[c] ? CKEDITOR.STYLE_BLOCK : C[c] ? CKEDITOR.STYLE_OBJECT : CKEDITOR.STYLE_INLINE); "object" == typeof this.element && (this.type = CKEDITOR.STYLE_OBJECT); this._ = { definition: a } }; CKEDITOR.style.prototype = { apply: function(a) { if (a instanceof CKEDITOR.dom.document) return x.call(this, a.getSelection()); if (this.checkApplicable(a.elementPath(), a)) { var b = this._.enterMode; b || (this._.enterMode = a.activeEnterMode); x.call(this, a.getSelection(), 0, a); this._.enterMode = b } }, remove: function(a) { if (a instanceof CKEDITOR.dom.document) return x.call(this, a.getSelection(), 1); if (this.checkApplicable(a.elementPath(), a)) { var b = this._.enterMode; b || (this._.enterMode = a.activeEnterMode); x.call(this, a.getSelection(), 1, a); this._.enterMode = b } }, applyToRange: function(a) { this.applyToRange = this.type == CKEDITOR.STYLE_INLINE ? b : this.type == CKEDITOR.STYLE_BLOCK ? d : this.type == CKEDITOR.STYLE_OBJECT ? m : null; return this.applyToRange(a) }, removeFromRange: function(a) { this.removeFromRange = this.type == CKEDITOR.STYLE_INLINE ? c : this.type == CKEDITOR.STYLE_BLOCK ? h : this.type == CKEDITOR.STYLE_OBJECT ? l : null; return this.removeFromRange(a) }, applyToObject: function(a) { z(a, this) }, checkActive: function(a, b) { switch (this.type) { case CKEDITOR.STYLE_BLOCK: return this.checkElementRemovable(a.block || a.blockLimit, !0, b); case CKEDITOR.STYLE_OBJECT: case CKEDITOR.STYLE_INLINE: for (var c = a.elements, d = 0, e; d < c.length; d++) if (e = c[d], this.type != CKEDITOR.STYLE_INLINE || e != a.block && e != a.blockLimit) { if (this.type == CKEDITOR.STYLE_OBJECT) { var g = e.getName(); if (!("string" == typeof this.element ? g == this.element : g in this.element)) continue } if (this.checkElementRemovable(e, !0, b)) return !0 } } return !1 }, checkApplicable: function(a, b, c) { b && b instanceof CKEDITOR.filter && (c = b); if (c && !c.check(this)) return !1; switch (this.type) { case CKEDITOR.STYLE_OBJECT: return !!a.contains(this.element); case CKEDITOR.STYLE_BLOCK: return !!a.blockLimit.getDtd()[this.element] } return !0 }, checkElementMatch: function(a, b) { var c = this._.definition; if (!a || !c.ignoreReadonly && a.isReadOnly()) return !1; var d = a.getName(); if ("string" == typeof this.element ? d == this.element : d in this.element) { if (!b && !a.hasAttributes()) return !0; if (d = c._AC) c = d; else { var d = {}, e = 0, g = c.attributes; if (g) for (var f in g) e++, d[f] = g[f]; if (f = CKEDITOR.style.getStyleText(c)) d.style || e++, d.style = f; d._length = e; c = c._AC = d } if (c._length) { for (var k in c) if ("_length" != k) if (d = a.getAttribute(k) || "", "style" == k ? D(c[k], d) : c[k] == d) { if (!b) return !0 } else if (b) return !1; if (b) return !0 } else return !0 } return !1 }, checkElementRemovable: function(a, b, c) { if (this.checkElementMatch(a, b, c)) return !0; if (b = t(this)[a.getName()]) { var d; if (!(b = b.attributes)) return !0; for (c = 0; c < b.length; c++) if (d = b[c][0], d = a.getAttribute(d)) { var e = b[c][1]; if (null === e) return !0; if ("string" == typeof e) { if (d == e) return !0 } else if (e.test(d)) return !0 } } return !1 }, buildPreview: function(a) { var b = this._.definition, c = [], d = b.element; "bdo" == d && (d = "span"); var c = ["\x3c", d], e = b.attributes; if (e) for (var g in e) c.push(" ", g, '\x3d"', e[g], '"'); (e = CKEDITOR.style.getStyleText(b)) && c.push(' style\x3d"', e, '"'); c.push("\x3e", a || b.name, "\x3c/", d, "\x3e"); return c.join("") }, getDefinition: function() { return this._.definition } }; CKEDITOR.style.getStyleText = function(a) { var b = a._ST; if (b) return b; var b = a.styles, c = a.attributes && a.attributes.style || "", d = ""; c.length && (c = c.replace(F, ";")); for (var e in b) { var g = b[e], f = (e + ":" + g).replace(F, ";"); "inherit" == g ? d += f : c += f } c.length && (c = CKEDITOR.tools.normalizeCssText(c, !0)); return a._ST = c + d }; CKEDITOR.style.customHandlers = {}; CKEDITOR.style.addCustomHandler = function(a) { var b = function(a) { this._ = { definition: a }; this.setup && this.setup(a) }; b.prototype = CKEDITOR.tools.extend(CKEDITOR.tools.prototypedCopy(CKEDITOR.style.prototype), { assignedTo: CKEDITOR.STYLE_OBJECT }, a, !0); return this.customHandlers[a.type] = b }; var K = CKEDITOR.POSITION_PRECEDING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED, J = CKEDITOR.POSITION_FOLLOWING | CKEDITOR.POSITION_IDENTICAL | CKEDITOR.POSITION_IS_CONTAINED }(), CKEDITOR.styleCommand = function(a, f) { this.requiredContent = this.allowedContent = this.style = a; CKEDITOR.tools.extend(this, f, !0) }, CKEDITOR.styleCommand.prototype.exec = function(a) { a.focus(); this.state == CKEDITOR.TRISTATE_OFF ? a.applyStyle(this.style) : this.state == CKEDITOR.TRISTATE_ON && a.removeStyle(this.style) }, CKEDITOR.stylesSet = new CKEDITOR.resourceManager("", "stylesSet"), CKEDITOR.addStylesSet = CKEDITOR.tools.bind(CKEDITOR.stylesSet.add, CKEDITOR.stylesSet), CKEDITOR.loadStylesSet = function(a, f, b) { CKEDITOR.stylesSet.addExternal(a, f, ""); CKEDITOR.stylesSet.load(a, b) }, CKEDITOR.tools.extend(CKEDITOR.editor.prototype, { attachStyleStateChange: function(a, f) { var b = this._.styleStateChangeCallbacks; b || (b = this._.styleStateChangeCallbacks = [], this.on("selectionChange", function(a) { for (var e = 0; e < b.length; e++) { var f = b[e], l = f.style.checkActive(a.data.path, this) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF; f.fn.call(this, l) } })); b.push({ style: a, fn: f }) }, applyStyle: function(a) { a.apply(this) }, removeStyle: function(a) { a.remove(this) }, getStylesSet: function(a) { if (this._.stylesDefinitions) a(this._.stylesDefinitions); else { var f = this, b = f.config.stylesCombo_stylesSet || f.config.stylesSet; if (!1 === b) a(null); else if (b instanceof Array) f._.stylesDefinitions = b, a(b); else { b || (b = "default"); var b = b.split(":"), c = b[0]; CKEDITOR.stylesSet.addExternal(c, b[1] ? b.slice(1).join(":") : CKEDITOR.getUrl("styles.js"), ""); CKEDITOR.stylesSet.load(c, function(b) { f._.stylesDefinitions = b[c]; a(f._.stylesDefinitions) }) } } } }), CKEDITOR.dom.comment = function(a, f) { "string" == typeof a && (a = (f ? f.$ : document).createComment(a)); CKEDITOR.dom.domObject.call(this, a) }, CKEDITOR.dom.comment.prototype = new CKEDITOR.dom.node, CKEDITOR.tools.extend(CKEDITOR.dom.comment.prototype, { type: CKEDITOR.NODE_COMMENT, getOuterHtml: function() { return "\x3c!--" + this.$.nodeValue + "--\x3e" } }), "use strict", function() { var a = {}, f = {}, b; for (b in CKEDITOR.dtd.$blockLimit) b in CKEDITOR.dtd.$list || (a[b] = 1); for (b in CKEDITOR.dtd.$block) b in CKEDITOR.dtd.$blockLimit || b in CKEDITOR.dtd.$empty || (f[b] = 1); CKEDITOR.dom.elementPath = function(b, e) { var m = null, l = null, d = [], h = b, k; e = e || b.getDocument().getBody(); do if (h.type == CKEDITOR.NODE_ELEMENT) { d.push(h); if (!this.lastElement && (this.lastElement = h, h.is(CKEDITOR.dtd.$object) || "false" == h.getAttribute("contenteditable"))) continue; if (h.equals(e)) break; if (!l && (k = h.getName(), "true" == h.getAttribute("contenteditable") ? l = h : !m && f[k] && (m = h), a[k])) { if (k = !m && "div" == k) { a: { k = h.getChildren(); for (var g = 0, n = k.count(); g < n; g++) { var w = k.getItem(g); if (w.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$block[w.getName()]) { k = !0; break a } } k = !1 } k = !k } k ? m = h : l = h } } while (h = h.getParent()); l || (l = e); this.block = m; this.blockLimit = l; this.root = e; this.elements = d } }(), CKEDITOR.dom.elementPath.prototype = { compare: function(a) { var f = this.elements; a = a && a.elements; if (!a || f.length != a.length) return !1; for (var b = 0; b < f.length; b++) if (!f[b].equals(a[b])) return !1; return !0 }, contains: function(a, f, b) { var c; "string" == typeof a && (c = function(b) { return b.getName() == a }); a instanceof CKEDITOR.dom.element ? c = function(b) { return b.equals(a) } : CKEDITOR.tools.isArray(a) ? c = function(b) { return -1 < CKEDITOR.tools.indexOf(a, b.getName()) } : "function" == typeof a ? c = a : "object" == typeof a && (c = function(b) { return b.getName() in a }); var e = this.elements, m = e.length; f && m--; b && (e = Array.prototype.slice.call(e, 0), e.reverse()); for (f = 0; f < m; f++) if (c(e[f])) return e[f]; return null }, isContextFor: function(a) { var f; return a in CKEDITOR.dtd.$block ? (f = this.contains(CKEDITOR.dtd.$intermediate) || this.root.equals(this.block) && this.block || this.blockLimit, !!f.getDtd()[a]) : !0 }, direction: function() { return (this.block || this.blockLimit || this.root).getDirection(1) } }, CKEDITOR.dom.text = function(a, f) { "string" == typeof a && (a = (f ? f.$ : document).createTextNode(a)); this.$ = a }, CKEDITOR.dom.text.prototype = new CKEDITOR.dom.node, CKEDITOR.tools.extend(CKEDITOR.dom.text.prototype, { type: CKEDITOR.NODE_TEXT, getLength: function() { return this.$.nodeValue.length }, getText: function() { return this.$.nodeValue }, setText: function(a) { this.$.nodeValue = a }, split: function(a) { var f = this.$.parentNode, b = f.childNodes.length, c = this.getLength(), e = this.getDocument(), m = new CKEDITOR.dom.text(this.$.splitText(a), e); f.childNodes.length == b && (a >= c ? (m = e.createText(""), m.insertAfter(this)) : (a = e.createText(""), a.insertAfter(m), a.remove())); return m }, substring: function(a, f) { return "number" != typeof f ? this.$.nodeValue.substr(a) : this.$.nodeValue.substring(a, f) } }), function() { function a(a, c, e) { var f = a.serializable, l = c[e ? "endContainer" : "startContainer"], d = e ? "endOffset" : "startOffset", h = f ? c.document.getById(a.startNode) : a.startNode; a = f ? c.document.getById(a.endNode) : a.endNode; l.equals(h.getPrevious()) ? (c.startOffset = c.startOffset - l.getLength() - a.getPrevious().getLength(), l = a.getNext()) : l.equals(a.getPrevious()) && (c.startOffset -= l.getLength(), l = a.getNext()); l.equals(h.getParent()) && c[d]++; l.equals(a.getParent()) && c[d]++; c[e ? "endContainer" : "startContainer"] = l; return c } CKEDITOR.dom.rangeList = function(a) { if (a instanceof CKEDITOR.dom.rangeList) return a; a ? a instanceof CKEDITOR.dom.range && (a = [a]) : a = []; return CKEDITOR.tools.extend(a, f) }; var f = { createIterator: function() { var a = this, c = CKEDITOR.dom.walker.bookmark(), e = [], f; return { getNextRange: function(l) { f = void 0 === f ? 0 : f + 1; var d = a[f]; if (d && 1 < a.length) { if (!f) for (var h = a.length - 1; 0 <= h; h--) e.unshift(a[h].createBookmark(!0)); if (l) for (var k = 0; a[f + k + 1];) { var g = d.document; l = 0; h = g.getById(e[k].endNode); for (g = g.getById(e[k + 1].startNode);;) { h = h.getNextSourceNode(!1); if (g.equals(h)) l = 1; else if (c(h) || h.type == CKEDITOR.NODE_ELEMENT && h.isBlockBoundary()) continue; break } if (!l) break; k++ } for (d.moveToBookmark(e.shift()); k--;) h = a[++f], h.moveToBookmark(e.shift()), d.setEnd(h.endContainer, h.endOffset) } return d } } }, createBookmarks: function(b) { for (var c = [], e, f = 0; f < this.length; f++) { c.push(e = this[f].createBookmark(b, !0)); for (var l = f + 1; l < this.length; l++) this[l] = a(e, this[l]), this[l] = a(e, this[l], !0) } return c }, createBookmarks2: function(a) { for (var c = [], e = 0; e < this.length; e++) c.push(this[e].createBookmark2(a)); return c }, moveToBookmarks: function(a) { for (var c = 0; c < this.length; c++) this[c].moveToBookmark(a[c]) } } }(), function() { function a() { return CKEDITOR.getUrl(CKEDITOR.skinName.split(",")[1] || "skins/" + CKEDITOR.skinName.split(",")[0] + "/") } function f(b) { var c = CKEDITOR.skin["ua_" + b], d = CKEDITOR.env; if (c) for (var c = c.split(",").sort(function(a, b) { return a > b ? -1 : 1 }), e = 0, f; e < c.length; e++) if (f = c[e], d.ie && (f.replace(/^ie/, "") == d.version || d.quirks && "iequirks" == f) && (f = "ie"), d[f]) { b += "_" + c[e]; break } return CKEDITOR.getUrl(a() + b + ".css") } function b(a, b) { m[a] || (CKEDITOR.document.appendStyleSheet(f(a)), m[a] = 1); b && b() } function c(a) { var b = a.getById(l); b || (b = a.getHead().append("style"), b.setAttribute("id", l), b.setAttribute("type", "text/css")); return b } function e(a, b, c) { var d, e, f; if (CKEDITOR.env.webkit) for (b = b.split("}").slice(0, -1), e = 0; e < b.length; e++) b[e] = b[e].split("{"); for (var h = 0; h < a.length; h++) if (CKEDITOR.env.webkit) for (e = 0; e < b.length; e++) { f = b[e][1]; for (d = 0; d < c.length; d++) f = f.replace(c[d][0], c[d][1]); a[h].$.sheet.addRule(b[e][0], f) } else { f = b; for (d = 0; d < c.length; d++) f = f.replace(c[d][0], c[d][1]); CKEDITOR.env.ie && 11 > CKEDITOR.env.version ? a[h].$.styleSheet.cssText += f : a[h].$.innerHTML += f } } var m = {}; CKEDITOR.skin = { path: a, loadPart: function(c, d) { CKEDITOR.skin.name != CKEDITOR.skinName.split(",")[0] ? CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(a() + "skin.js"), function() { b(c, d) }) : b(c, d) }, getPath: function(a) { return CKEDITOR.getUrl(f(a)) }, icons: {}, addIcon: function(a, b, c, d) { a = a.toLowerCase(); this.icons[a] || (this.icons[a] = { path: b, offset: c || 0, bgsize: d || "16px" }) }, getIconStyle: function(a, b, c, d, e) { var f; a && (a = a.toLowerCase(), b && (f = this.icons[a + "-rtl"]), f || (f = this.icons[a])); a = c || f && f.path || ""; d = d || f && f.offset; e = e || f && f.bgsize || "16px"; a && (a = a.replace(/'/g, "\\'")); return a && "background-image:url('" + CKEDITOR.getUrl(a) + "');background-position:0 " + d + "px;background-size:" + e + ";" } }; CKEDITOR.tools.extend(CKEDITOR.editor.prototype, { getUiColor: function() { return this.uiColor }, setUiColor: function(a) { var b = c(CKEDITOR.document); return (this.setUiColor = function(a) { this.uiColor = a; var c = CKEDITOR.skin.chameleon, f = "", k = ""; "function" == typeof c && (f = c(this, "editor"), k = c(this, "panel")); a = [ [h, a] ]; e([b], f, a); e(d, k, a) }).call(this, a) } }); var l = "cke_ui_color", d = [], h = /\$color/g; CKEDITOR.on("instanceLoaded", function(a) { if (!CKEDITOR.env.ie || !CKEDITOR.env.quirks) { var b = a.editor; a = function(a) { a = (a.data[0] || a.data).element.getElementsByTag("iframe").getItem(0).getFrameDocument(); if (!a.getById("cke_ui_color")) { a = c(a); d.push(a); var f = b.getUiColor(); f && e([a], CKEDITOR.skin.chameleon(b, "panel"), [ [h, f] ]) } }; b.on("panelShow", a); b.on("menuShow", a); b.config.uiColor && b.setUiColor(b.config.uiColor) } }) }(), function() { if (CKEDITOR.env.webkit) CKEDITOR.env.hc = !1; else { var a = CKEDITOR.dom.element.createFromHtml('\x3cdiv style\x3d"width:0;height:0;position:absolute;left:-10000px;border:1px solid;border-color:red blue"\x3e\x3c/div\x3e', CKEDITOR.document); a.appendTo(CKEDITOR.document.getHead()); try { var f = a.getComputedStyle("border-top-color"), b = a.getComputedStyle("border-right-color"); CKEDITOR.env.hc = !(!f || f != b) } catch (c) { CKEDITOR.env.hc = !1 } a.remove() } CKEDITOR.env.hc && (CKEDITOR.env.cssClass += " cke_hc"); CKEDITOR.document.appendStyleText(".cke{visibility:hidden;}"); CKEDITOR.status = "loaded"; CKEDITOR.fireOnce("loaded"); if (a = CKEDITOR._.pending) for (delete CKEDITOR._.pending, f = 0; f < a.length; f++) CKEDITOR.editor.prototype.constructor.apply(a[f][0], a[f][1]), CKEDITOR.add(a[f][0]) }(), CKEDITOR.skin.name = "moono-lisa", CKEDITOR.skin.ua_editor = "ie,iequirks,ie8,gecko", CKEDITOR.skin.ua_dialog = "ie,iequirks,ie8", CKEDITOR.skin.chameleon = function() { var a = function() { return function(a, c) { for (var e = a.match(/[^#]./g), f = 0; 3 > f; f++) { var l = f, d; d = parseInt(e[f], 16); d = ("0" + (0 > c ? 0 | d * (1 + c) : 0 | d + (255 - d) * c).toString(16)).slice(-2); e[l] = d } return "#" + e.join("") } }(), f = { editor: new CKEDITOR.template("{id}.cke_chrome [border-color:{defaultBorder};] {id} .cke_top [ background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_bottom [background-color:{defaultBackground};border-top-color:{defaultBorder};] {id} .cke_resizer [border-right-color:{ckeResizer}] {id} .cke_dialog_title [background-color:{defaultBackground};border-bottom-color:{defaultBorder};] {id} .cke_dialog_footer [background-color:{defaultBackground};outline-color:{defaultBorder};] {id} .cke_dialog_tab [background-color:{dialogTab};border-color:{defaultBorder};] {id} .cke_dialog_tab:hover [background-color:{lightBackground};] {id} .cke_dialog_contents [border-top-color:{defaultBorder};] {id} .cke_dialog_tab_selected, {id} .cke_dialog_tab_selected:hover [background:{dialogTabSelected};border-bottom-color:{dialogTabSelectedBorder};] {id} .cke_dialog_body [background:{dialogBody};border-color:{defaultBorder};] {id} a.cke_button_off:hover,{id} a.cke_button_off:focus,{id} a.cke_button_off:active [background-color:{darkBackground};border-color:{toolbarElementsBorder};] {id} .cke_button_on [background-color:{ckeButtonOn};border-color:{toolbarElementsBorder};] {id} .cke_toolbar_separator,{id} .cke_toolgroup a.cke_button:last-child:after,{id} .cke_toolgroup a.cke_button.cke_button_disabled:hover:last-child:after [background-color: {toolbarElementsBorder};border-color: {toolbarElementsBorder};] {id} a.cke_combo_button:hover,{id} a.cke_combo_button:focus,{id} .cke_combo_on a.cke_combo_button [border-color:{toolbarElementsBorder};background-color:{darkBackground};] {id} .cke_combo:after [border-color:{toolbarElementsBorder};] {id} .cke_path_item [color:{elementsPathColor};] {id} a.cke_path_item:hover,{id} a.cke_path_item:focus,{id} a.cke_path_item:active [background-color:{darkBackground};] {id}.cke_panel [border-color:{defaultBorder};] "), panel: new CKEDITOR.template(".cke_panel_grouptitle [background-color:{lightBackground};border-color:{defaultBorder};] .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menubutton:hover,.cke_menubutton:focus,.cke_menubutton:active [background-color:{menubuttonHover};] .cke_menubutton:hover .cke_menubutton_icon, .cke_menubutton:focus .cke_menubutton_icon, .cke_menubutton:active .cke_menubutton_icon [background-color:{menubuttonIconHover};] .cke_menubutton_disabled:hover .cke_menubutton_icon,.cke_menubutton_disabled:focus .cke_menubutton_icon,.cke_menubutton_disabled:active .cke_menubutton_icon [background-color:{menubuttonIcon};] .cke_menuseparator [background-color:{menubuttonIcon};] a:hover.cke_colorbox, a:active.cke_colorbox [border-color:{defaultBorder};] a:hover.cke_colorauto, a:hover.cke_colormore, a:active.cke_colorauto, a:active.cke_colormore [background-color:{ckeColorauto};border-color:{defaultBorder};] ") }; return function(b, c) { var e = a(b.uiColor, .4), e = { id: "." + b.id, defaultBorder: a(e, -.2), toolbarElementsBorder: a(e, -.25), defaultBackground: e, lightBackground: a(e, .8), darkBackground: a(e, -.15), ckeButtonOn: a(e, .4), ckeResizer: a(e, -.4), ckeColorauto: a(e, .8), dialogBody: a(e, .7), dialogTab: a(e, .65), dialogTabSelected: "#FFF", dialogTabSelectedBorder: "#FFF", elementsPathColor: a(e, -.6), menubuttonHover: a(e, .1), menubuttonIcon: a(e, .5), menubuttonIconHover: a(e, .3) }; return f[c].output(e).replace(/\[/g, "{").replace(/\]/g, "}") } }(), CKEDITOR.plugins.add("dialogui", { onLoad: function() { var a = function(a) { this._ || (this._ = {}); this._["default"] = this._.initValue = a["default"] || ""; this._.required = a.required || !1; for (var b = [this._], c = 1; c < arguments.length; c++) b.push(arguments[c]); b.push(!0); CKEDITOR.tools.extend.apply(CKEDITOR.tools, b); return this._ }, f = { build: function(a, b, c) { return new CKEDITOR.ui.dialog.textInput(a, b, c) } }, b = { build: function(a, b, c) { return new CKEDITOR.ui.dialog[b.type](a, b, c) } }, c = { isChanged: function() { return this.getValue() != this.getInitValue() }, reset: function(a) { this.setValue(this.getInitValue(), a) }, setInitValue: function() { this._.initValue = this.getValue() }, resetInitValue: function() { this._.initValue = this._["default"] }, getInitValue: function() { return this._.initValue } }, e = CKEDITOR.tools.extend({}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, { onChange: function(a, b) { this._.domOnChangeRegistered || (a.on("load", function() { this.getInputElement().on("change", function() { a.parts.dialog.isVisible() && this.fire("change", { value: this.getValue() }) }, this) }, this), this._.domOnChangeRegistered = !0); this.on("change", b) } }, !0), m = /^on([A-Z]\w+)/, l = function(a) { for (var b in a)(m.test(b) || "title" == b || "type" == b) && delete a[b]; return a }, d = function(a) { a = a.data.getKeystroke(); a == CKEDITOR.SHIFT + CKEDITOR.ALT + 36 ? this.setDirectionMarker("ltr") : a == CKEDITOR.SHIFT + CKEDITOR.ALT + 35 && this.setDirectionMarker("rtl") }; CKEDITOR.tools.extend(CKEDITOR.ui.dialog, { labeledElement: function(b, c, d, e) { if (!(4 > arguments.length)) { var f = a.call(this, c); f.labelId = CKEDITOR.tools.getNextId() + "_label"; this._.children = []; var l = { role: c.role || "presentation" }; c.includeLabel && (l["aria-labelledby"] = f.labelId); CKEDITOR.ui.dialog.uiElement.call(this, b, c, d, "div", null, l, function() { var a = [], d = c.required ? " cke_required" : ""; "horizontal" != c.labelLayout ? a.push('\x3clabel class\x3d"cke_dialog_ui_labeled_label' + d + '" ', ' id\x3d"' + f.labelId + '"', f.inputId ? ' for\x3d"' + f.inputId + '"' : "", (c.labelStyle ? ' style\x3d"' + c.labelStyle + '"' : "") + "\x3e", c.label, "\x3c/label\x3e", '\x3cdiv class\x3d"cke_dialog_ui_labeled_content"', c.controlStyle ? ' style\x3d"' + c.controlStyle + '"' : "", ' role\x3d"presentation"\x3e', e.call(this, b, c), "\x3c/div\x3e") : (d = { type: "hbox", widths: c.widths, padding: 0, children: [{ type: "html", html: '\x3clabel class\x3d"cke_dialog_ui_labeled_label' + d + '" id\x3d"' + f.labelId + '" for\x3d"' + f.inputId + '"' + (c.labelStyle ? ' style\x3d"' + c.labelStyle + '"' : "") + "\x3e" + CKEDITOR.tools.htmlEncode(c.label) + "\x3c/label\x3e" }, { type: "html", html: '\x3cspan class\x3d"cke_dialog_ui_labeled_content"' + (c.controlStyle ? ' style\x3d"' + c.controlStyle + '"' : "") + "\x3e" + e.call(this, b, c) + "\x3c/span\x3e" }] }, CKEDITOR.dialog._.uiElementBuilders.hbox.build(b, d, a)); return a.join("") }) } }, textInput: function(b, c, e) { if (!(3 > arguments.length)) { a.call(this, c); var f = this._.inputId = CKEDITOR.tools.getNextId() + "_textInput", l = { "class": "cke_dialog_ui_input_" + c.type, id: f, type: c.type }; c.validate && (this.validate = c.validate); c.maxLength && (l.maxlength = c.maxLength); c.size && (l.size = c.size); c.inputStyle && (l.style = c.inputStyle); var m = this, v = !1; b.on("load", function() { m.getInputElement().on("keydown", function(a) { 13 == a.data.getKeystroke() && (v = !0) }); m.getInputElement().on("keyup", function(a) { 13 == a.data.getKeystroke() && v && (b.getButton("ok") && setTimeout(function() { b.getButton("ok").click() }, 0), v = !1); m.bidi && d.call(m, a) }, null, null, 1E3) }); CKEDITOR.ui.dialog.labeledElement.call(this, b, c, e, function() { var a = ['\x3cdiv class\x3d"cke_dialog_ui_input_', c.type, '" role\x3d"presentation"']; c.width && a.push('style\x3d"width:' + c.width + '" '); a.push("\x3e\x3cinput "); l["aria-labelledby"] = this._.labelId; this._.required && (l["aria-required"] = this._.required); for (var b in l) a.push(b + '\x3d"' + l[b] + '" '); a.push(" /\x3e\x3c/div\x3e"); return a.join("") }) } }, textarea: function(b, c, e) { if (!(3 > arguments.length)) { a.call(this, c); var f = this, l = this._.inputId = CKEDITOR.tools.getNextId() + "_textarea", m = {}; c.validate && (this.validate = c.validate); m.rows = c.rows || 5; m.cols = c.cols || 20; m["class"] = "cke_dialog_ui_input_textarea " + (c["class"] || ""); "undefined" != typeof c.inputStyle && (m.style = c.inputStyle); c.dir && (m.dir = c.dir); if (f.bidi) b.on("load", function() { f.getInputElement().on("keyup", d) }, f); CKEDITOR.ui.dialog.labeledElement.call(this, b, c, e, function() { m["aria-labelledby"] = this._.labelId; this._.required && (m["aria-required"] = this._.required); var a = ['\x3cdiv class\x3d"cke_dialog_ui_input_textarea" role\x3d"presentation"\x3e\x3ctextarea id\x3d"', l, '" '], b; for (b in m) a.push(b + '\x3d"' + CKEDITOR.tools.htmlEncode(m[b]) + '" '); a.push("\x3e", CKEDITOR.tools.htmlEncode(f._["default"]), "\x3c/textarea\x3e\x3c/div\x3e"); return a.join("") }) } }, checkbox: function(b, c, d) { if (!(3 > arguments.length)) { var e = a.call(this, c, { "default": !!c["default"] }); c.validate && (this.validate = c.validate); CKEDITOR.ui.dialog.uiElement.call(this, b, c, d, "span", null, null, function() { var a = CKEDITOR.tools.extend({}, c, { id: c.id ? c.id + "_checkbox" : CKEDITOR.tools.getNextId() + "_checkbox" }, !0), d = [], f = CKEDITOR.tools.getNextId() + "_label", g = { "class": "cke_dialog_ui_checkbox_input", type: "checkbox", "aria-labelledby": f }; l(a); c["default"] && (g.checked = "checked"); "undefined" != typeof a.inputStyle && (a.style = a.inputStyle); e.checkbox = new CKEDITOR.ui.dialog.uiElement(b, a, d, "input", null, g); d.push(' \x3clabel id\x3d"', f, '" for\x3d"', g.id, '"' + (c.labelStyle ? ' style\x3d"' + c.labelStyle + '"' : "") + "\x3e", CKEDITOR.tools.htmlEncode(c.label), "\x3c/label\x3e"); return d.join("") }) } }, radio: function(b, c, d) { if (!(3 > arguments.length)) { a.call(this, c); this._["default"] || (this._["default"] = this._.initValue = c.items[0][1]); c.validate && (this.validate = c.validate); var e = [], f = this; c.role = "radiogroup"; c.includeLabel = !0; CKEDITOR.ui.dialog.labeledElement.call(this, b, c, d, function() { for (var a = [], d = [], g = (c.id ? c.id : CKEDITOR.tools.getNextId()) + "_radio", m = 0; m < c.items.length; m++) { var p = c.items[m], z = void 0 !== p[2] ? p[2] : p[0], B = void 0 !== p[1] ? p[1] : p[0], t = CKEDITOR.tools.getNextId() + "_radio_input", y = t + "_label", t = CKEDITOR.tools.extend({}, c, { id: t, title: null, type: null }, !0), z = CKEDITOR.tools.extend({}, t, { title: z }, !0), D = { type: "radio", "class": "cke_dialog_ui_radio_input", name: g, value: B, "aria-labelledby": y }, x = []; f._["default"] == B && (D.checked = "checked"); l(t); l(z); "undefined" != typeof t.inputStyle && (t.style = t.inputStyle); t.keyboardFocusable = !0; e.push(new CKEDITOR.ui.dialog.uiElement(b, t, x, "input", null, D)); x.push(" "); new CKEDITOR.ui.dialog.uiElement(b, z, x, "label", null, { id: y, "for": D.id }, p[0]); a.push(x.join("")) } new CKEDITOR.ui.dialog.hbox(b, e, a, d); return d.join("") }); this._.children = e } }, button: function(b, c, d) { if (arguments.length) { "function" == typeof c && (c = c(b.getParentEditor())); a.call(this, c, { disabled: c.disabled || !1 }); CKEDITOR.event.implementOn(this); var e = this; b.on("load", function() { var a = this.getElement(); (function() { a.on("click", function(a) { e.click(); a.data.preventDefault() }); a.on("keydown", function(a) { a.data.getKeystroke() in { 32: 1 } && (e.click(), a.data.preventDefault()) }) })(); a.unselectable() }, this); var f = CKEDITOR.tools.extend({}, c); delete f.style; var l = CKEDITOR.tools.getNextId() + "_label"; CKEDITOR.ui.dialog.uiElement.call(this, b, f, d, "a", null, { style: c.style, href: "javascript:void(0)", title: c.label, hidefocus: "true", "class": c["class"], role: "button", "aria-labelledby": l }, '\x3cspan id\x3d"' + l + '" class\x3d"cke_dialog_ui_button"\x3e' + CKEDITOR.tools.htmlEncode(c.label) + "\x3c/span\x3e") } }, select: function(b, c, d) { if (!(3 > arguments.length)) { var e = a.call(this, c); c.validate && (this.validate = c.validate); e.inputId = CKEDITOR.tools.getNextId() + "_select"; CKEDITOR.ui.dialog.labeledElement.call(this, b, c, d, function() { var a = CKEDITOR.tools.extend({}, c, { id: c.id ? c.id + "_select" : CKEDITOR.tools.getNextId() + "_select" }, !0), d = [], f = [], g = { id: e.inputId, "class": "cke_dialog_ui_input_select", "aria-labelledby": this._.labelId }; d.push('\x3cdiv class\x3d"cke_dialog_ui_input_', c.type, '" role\x3d"presentation"'); c.width && d.push('style\x3d"width:' + c.width + '" '); d.push("\x3e"); void 0 !== c.size && (g.size = c.size); void 0 !== c.multiple && (g.multiple = c.multiple); l(a); for (var m = 0, p; m < c.items.length && (p = c.items[m]); m++) f.push('\x3coption value\x3d"', CKEDITOR.tools.htmlEncode(void 0 !== p[1] ? p[1] : p[0]).replace(/"/g, "\x26quot;"), '" /\x3e ', CKEDITOR.tools.htmlEncode(p[0])); "undefined" != typeof a.inputStyle && (a.style = a.inputStyle); e.select = new CKEDITOR.ui.dialog.uiElement(b, a, d, "select", null, g, f.join("")); d.push("\x3c/div\x3e"); return d.join("") }) } }, file: function(b, c, d) { if (!(3 > arguments.length)) { void 0 === c["default"] && (c["default"] = ""); var e = CKEDITOR.tools.extend(a.call(this, c), { definition: c, buttons: [] }); c.validate && (this.validate = c.validate); b.on("load", function() { CKEDITOR.document.getById(e.frameId).getParent().addClass("cke_dialog_ui_input_file") }); CKEDITOR.ui.dialog.labeledElement.call(this, b, c, d, function() { e.frameId = CKEDITOR.tools.getNextId() + "_fileInput"; var a = ['\x3ciframe frameborder\x3d"0" allowtransparency\x3d"0" class\x3d"cke_dialog_ui_input_file" role\x3d"presentation" id\x3d"', e.frameId, '" title\x3d"', c.label, '" src\x3d"javascript:void(' ]; a.push(CKEDITOR.env.ie ? "(function(){" + encodeURIComponent("document.open();(" + CKEDITOR.tools.fixDomain + ")();document.close();") + "})()" : "0"); a.push(')"\x3e\x3c/iframe\x3e'); return a.join("") }) } }, fileButton: function(b, c, d) { var e = this; if (!(3 > arguments.length)) { a.call(this, c); c.validate && (this.validate = c.validate); var f = CKEDITOR.tools.extend({}, c), l = f.onClick; f.className = (f.className ? f.className + " " : "") + "cke_dialog_ui_button"; f.onClick = function(a) { var d = c["for"]; l && !1 === l.call(this, a) || (b.getContentElement(d[0], d[1]).submit(), this.disable()) }; b.on("load", function() { b.getContentElement(c["for"][0], c["for"][1])._.buttons.push(e) }); CKEDITOR.ui.dialog.button.call(this, b, f, d) } }, html: function() { var a = /^\s*<[\w:]+\s+([^>]*)?>/, b = /^(\s*<[\w:]+(?:\s+[^>]*)?)((?:.|\r|\n)+)$/, c = /\/$/; return function(d, e, f) { if (!(3 > arguments.length)) { var l = [], m = e.html; "\x3c" != m.charAt(0) && (m = "\x3cspan\x3e" + m + "\x3c/span\x3e"); var r = e.focus; if (r) { var p = this.focus; this.focus = function() { ("function" == typeof r ? r : p).call(this); this.fire("focus") }; e.isFocusable && (this.isFocusable = this.isFocusable); this.keyboardFocusable = !0 } CKEDITOR.ui.dialog.uiElement.call(this, d, e, l, "span", null, null, ""); l = l.join("").match(a); m = m.match(b) || ["", "", ""]; c.test(m[1]) && (m[1] = m[1].slice(0, -1), m[2] = "/" + m[2]); f.push([m[1], " ", l[1] || "", m[2]].join("")) } } }(), fieldset: function(a, b, c, d, e) { var f = e.label; this._ = { children: b }; CKEDITOR.ui.dialog.uiElement.call(this, a, e, d, "fieldset", null, null, function() { var a = []; f && a.push("\x3clegend" + (e.labelStyle ? ' style\x3d"' + e.labelStyle + '"' : "") + "\x3e" + f + "\x3c/legend\x3e"); for (var b = 0; b < c.length; b++) a.push(c[b]); return a.join("") }) } }, !0); CKEDITOR.ui.dialog.html.prototype = new CKEDITOR.ui.dialog.uiElement; CKEDITOR.ui.dialog.labeledElement.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, { setLabel: function(a) { var b = CKEDITOR.document.getById(this._.labelId); 1 > b.getChildCount() ? (new CKEDITOR.dom.text(a, CKEDITOR.document)).appendTo(b) : b.getChild(0).$.nodeValue = a; return this }, getLabel: function() { var a = CKEDITOR.document.getById(this._.labelId); return !a || 1 > a.getChildCount() ? "" : a.getChild(0).getText() }, eventProcessors: e }, !0); CKEDITOR.ui.dialog.button.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, { click: function() { return this._.disabled ? !1 : this.fire("click", { dialog: this._.dialog }) }, enable: function() { this._.disabled = !1; var a = this.getElement(); a && a.removeClass("cke_disabled") }, disable: function() { this._.disabled = !0; this.getElement().addClass("cke_disabled") }, isVisible: function() { return this.getElement().getFirst().isVisible() }, isEnabled: function() { return !this._.disabled }, eventProcessors: CKEDITOR.tools.extend({}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, { onClick: function(a, b) { this.on("click", function() { b.apply(this, arguments) }) } }, !0), accessKeyUp: function() { this.click() }, accessKeyDown: function() { this.focus() }, keyboardFocusable: !0 }, !0); CKEDITOR.ui.dialog.textInput.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement, { getInputElement: function() { return CKEDITOR.document.getById(this._.inputId) }, focus: function() { var a = this.selectParentTab(); setTimeout(function() { var b = a.getInputElement(); b && b.$.focus() }, 0) }, select: function() { var a = this.selectParentTab(); setTimeout(function() { var b = a.getInputElement(); b && (b.$.focus(), b.$.select()) }, 0) }, accessKeyUp: function() { this.select() }, setValue: function(a) { if (this.bidi) { var b = a && a.charAt(0); (b = "‪" == b ? "ltr" : "‫" == b ? "rtl" : null) && (a = a.slice(1)); this.setDirectionMarker(b) } a || (a = ""); return CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply(this, arguments) }, getValue: function() { var a = CKEDITOR.ui.dialog.uiElement.prototype.getValue.call(this); if (this.bidi && a) { var b = this.getDirectionMarker(); b && (a = ("ltr" == b ? "‪" : "‫") + a) } return a }, setDirectionMarker: function(a) { var b = this.getInputElement(); a ? b.setAttributes({ dir: a, "data-cke-dir-marker": a }) : this.getDirectionMarker() && b.removeAttributes(["dir", "data-cke-dir-marker"]) }, getDirectionMarker: function() { return this.getInputElement().data("cke-dir-marker") }, keyboardFocusable: !0 }, c, !0); CKEDITOR.ui.dialog.textarea.prototype = new CKEDITOR.ui.dialog.textInput; CKEDITOR.ui.dialog.select.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement, { getInputElement: function() { return this._.select.getElement() }, add: function(a, b, c) { var d = new CKEDITOR.dom.element("option", this.getDialog().getParentEditor().document), e = this.getInputElement().$; d.$.text = a; d.$.value = void 0 === b || null === b ? a : b; void 0 === c || null === c ? CKEDITOR.env.ie ? e.add(d.$) : e.add(d.$, null) : e.add(d.$, c); return this }, remove: function(a) { this.getInputElement().$.remove(a); return this }, clear: function() { for (var a = this.getInputElement().$; 0 < a.length;) a.remove(0); return this }, keyboardFocusable: !0 }, c, !0); CKEDITOR.ui.dialog.checkbox.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, { getInputElement: function() { return this._.checkbox.getElement() }, setValue: function(a, b) { this.getInputElement().$.checked = a; !b && this.fire("change", { value: a }) }, getValue: function() { return this.getInputElement().$.checked }, accessKeyUp: function() { this.setValue(!this.getValue()) }, eventProcessors: { onChange: function(a, b) { if (!CKEDITOR.env.ie || 8 < CKEDITOR.env.version) return e.onChange.apply(this, arguments); a.on("load", function() { var a = this._.checkbox.getElement(); a.on("propertychange", function(b) { b = b.data.$; "checked" == b.propertyName && this.fire("change", { value: a.$.checked }) }, this) }, this); this.on("change", b); return null } }, keyboardFocusable: !0 }, c, !0); CKEDITOR.ui.dialog.radio.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, { setValue: function(a, b) { for (var c = this._.children, d, e = 0; e < c.length && (d = c[e]); e++) d.getElement().$.checked = d.getValue() == a; !b && this.fire("change", { value: a }) }, getValue: function() { for (var a = this._.children, b = 0; b < a.length; b++) if (a[b].getElement().$.checked) return a[b].getValue(); return null }, accessKeyUp: function() { var a = this._.children, b; for (b = 0; b < a.length; b++) if (a[b].getElement().$.checked) { a[b].getElement().focus(); return } a[0].getElement().focus() }, eventProcessors: { onChange: function(a, b) { if (!CKEDITOR.env.ie || 8 < CKEDITOR.env.version) return e.onChange.apply(this, arguments); a.on("load", function() { for (var a = this._.children, b = this, c = 0; c < a.length; c++) a[c].getElement().on("propertychange", function(a) { a = a.data.$; "checked" == a.propertyName && this.$.checked && b.fire("change", { value: this.getAttribute("value") }) }) }, this); this.on("change", b); return null } } }, c, !0); CKEDITOR.ui.dialog.file.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.labeledElement, c, { getInputElement: function() { var a = CKEDITOR.document.getById(this._.frameId).getFrameDocument(); return 0 < a.$.forms.length ? new CKEDITOR.dom.element(a.$.forms[0].elements[0]) : this.getElement() }, submit: function() { this.getInputElement().getParent().$.submit(); return this }, getAction: function() { return this.getInputElement().getParent().$.action }, registerEvents: function(a) { var b = /^on([A-Z]\w+)/, c, d = function(a, b, c, d) { a.on("formLoaded", function() { a.getInputElement().on(c, d, a) }) }, e; for (e in a) if (c = e.match(b)) this.eventProcessors[e] ? this.eventProcessors[e].call(this, this._.dialog, a[e]) : d(this, this._.dialog, c[1].toLowerCase(), a[e]); return this }, reset: function() { function a() { c.$.open(); var h = ""; d.size && (h = d.size - (CKEDITOR.env.ie ? 7 : 0)); var z = b.frameId + "_input"; c.$.write(['\x3chtml dir\x3d"' + m + '" lang\x3d"' + r + '"\x3e\x3chead\x3e\x3ctitle\x3e\x3c/title\x3e\x3c/head\x3e\x3cbody style\x3d"margin: 0; overflow: hidden; background: transparent;"\x3e', '\x3cform enctype\x3d"multipart/form-data" method\x3d"POST" dir\x3d"' + m + '" lang\x3d"' + r + '" action\x3d"', CKEDITOR.tools.htmlEncode(d.action), '"\x3e\x3clabel id\x3d"', b.labelId, '" for\x3d"', z, '" style\x3d"display:none"\x3e', CKEDITOR.tools.htmlEncode(d.label), '\x3c/label\x3e\x3cinput style\x3d"width:100%" id\x3d"', z, '" aria-labelledby\x3d"', b.labelId, '" type\x3d"file" name\x3d"', CKEDITOR.tools.htmlEncode(d.id || "cke_upload"), '" size\x3d"', CKEDITOR.tools.htmlEncode(0 < h ? h : ""), '" /\x3e\x3c/form\x3e\x3c/body\x3e\x3c/html\x3e\x3cscript\x3e', CKEDITOR.env.ie ? "(" + CKEDITOR.tools.fixDomain + ")();" : "", "window.parent.CKEDITOR.tools.callFunction(" + f + ");", "window.onbeforeunload \x3d function() {window.parent.CKEDITOR.tools.callFunction(" + l + ")}", "\x3c/script\x3e" ].join("")); c.$.close(); for (h = 0; h < e.length; h++) e[h].enable() } var b = this._, c = CKEDITOR.document.getById(b.frameId).getFrameDocument(), d = b.definition, e = b.buttons, f = this.formLoadedNumber, l = this.formUnloadNumber, m = b.dialog._.editor.lang.dir, r = b.dialog._.editor.langCode; f || (f = this.formLoadedNumber = CKEDITOR.tools.addFunction(function() { this.fire("formLoaded") }, this), l = this.formUnloadNumber = CKEDITOR.tools.addFunction(function() { this.getInputElement().clearCustomData() }, this), this.getDialog()._.editor.on("destroy", function() { CKEDITOR.tools.removeFunction(f); CKEDITOR.tools.removeFunction(l) })); CKEDITOR.env.gecko ? setTimeout(a, 500) : a() }, getValue: function() { return this.getInputElement().$.value || "" }, setInitValue: function() { this._.initValue = "" }, eventProcessors: { onChange: function(a, b) { this._.domOnChangeRegistered || (this.on("formLoaded", function() { this.getInputElement().on("change", function() { this.fire("change", { value: this.getValue() }) }, this) }, this), this._.domOnChangeRegistered = !0); this.on("change", b) } }, keyboardFocusable: !0 }, !0); CKEDITOR.ui.dialog.fileButton.prototype = new CKEDITOR.ui.dialog.button; CKEDITOR.ui.dialog.fieldset.prototype = CKEDITOR.tools.clone(CKEDITOR.ui.dialog.hbox.prototype); CKEDITOR.dialog.addUIElement("text", f); CKEDITOR.dialog.addUIElement("password", f); CKEDITOR.dialog.addUIElement("textarea", b); CKEDITOR.dialog.addUIElement("checkbox", b); CKEDITOR.dialog.addUIElement("radio", b); CKEDITOR.dialog.addUIElement("button", b); CKEDITOR.dialog.addUIElement("select", b); CKEDITOR.dialog.addUIElement("file", b); CKEDITOR.dialog.addUIElement("fileButton", b); CKEDITOR.dialog.addUIElement("html", b); CKEDITOR.dialog.addUIElement("fieldset", { build: function(a, b, c) { for (var d = b.children, e, f = [], l = [], m = 0; m < d.length && (e = d[m]); m++) { var r = []; f.push(r); l.push(CKEDITOR.dialog._.uiElementBuilders[e.type].build(a, e, r)) } return new CKEDITOR.ui.dialog[b.type](a, l, f, c, b) } }) } }), CKEDITOR.DIALOG_RESIZE_NONE = 0, CKEDITOR.DIALOG_RESIZE_WIDTH = 1, CKEDITOR.DIALOG_RESIZE_HEIGHT = 2, CKEDITOR.DIALOG_RESIZE_BOTH = 3, CKEDITOR.DIALOG_STATE_IDLE = 1, CKEDITOR.DIALOG_STATE_BUSY = 2, function() { function a() { for (var a = this._.tabIdList.length, b = CKEDITOR.tools.indexOf(this._.tabIdList, this._.currentTabId) + a, c = b - 1; c > b - a; c--) if (this._.tabs[this._.tabIdList[c % a]][0].$.offsetHeight) return this._.tabIdList[c % a]; return null } function f() { for (var a = this._.tabIdList.length, b = CKEDITOR.tools.indexOf(this._.tabIdList, this._.currentTabId), c = b + 1; c < b + a; c++) if (this._.tabs[this._.tabIdList[c % a]][0].$.offsetHeight) return this._.tabIdList[c % a]; return null } function b(a, b) { for (var c = a.$.getElementsByTagName("input"), d = 0, e = c.length; d < e; d++) { var f = new CKEDITOR.dom.element(c[d]); "text" == f.getAttribute("type").toLowerCase() && (b ? (f.setAttribute("value", f.getCustomData("fake_value") || ""), f.removeCustomData("fake_value")) : (f.setCustomData("fake_value", f.getAttribute("value")), f.setAttribute("value", ""))) } } function c(a, b) { var c = this.getInputElement(); c && (a ? c.removeAttribute("aria-invalid") : c.setAttribute("aria-invalid", !0)); a || (this.select ? this.select() : this.focus()); b && alert(b); this.fire("validated", { valid: a, msg: b }) } function e() { var a = this.getInputElement(); a && a.removeAttribute("aria-invalid") } function m(a) { var b = CKEDITOR.dom.element.createFromHtml(CKEDITOR.addTemplate("dialog", u).output({ id: CKEDITOR.tools.getNextNumber(), editorId: a.id, langDir: a.lang.dir, langCode: a.langCode, editorDialogClass: "cke_editor_" + a.name.replace(/\./g, "\\.") + "_dialog", closeTitle: a.lang.common.close, hidpi: CKEDITOR.env.hidpi ? "cke_hidpi" : "" })), c = b.getChild([0, 0, 0, 0, 0]), d = c.getChild(0), e = c.getChild(1); a.plugins.clipboard && CKEDITOR.plugins.clipboard.preventDefaultDropOnElement(c); !CKEDITOR.env.ie || CKEDITOR.env.quirks || CKEDITOR.env.edge || (a = "javascript:void(function(){" + encodeURIComponent("document.open();(" + CKEDITOR.tools.fixDomain + ")();document.close();") + "}())", CKEDITOR.dom.element.createFromHtml('\x3ciframe frameBorder\x3d"0" class\x3d"cke_iframe_shim" src\x3d"' + a + '" tabIndex\x3d"-1"\x3e\x3c/iframe\x3e').appendTo(c.getParent())); d.unselectable(); e.unselectable(); return { element: b, parts: { dialog: b.getChild(0), title: d, close: e, tabs: c.getChild(2), contents: c.getChild([3, 0, 0, 0]), footer: c.getChild([3, 0, 1, 0]) } } } function l(a, b, c) { this.element = b; this.focusIndex = c; this.tabIndex = 0; this.isFocusable = function() { return !b.getAttribute("disabled") && b.isVisible() }; this.focus = function() { a._.currentFocusIndex = this.focusIndex; this.element.focus() }; b.on("keydown", function(a) { a.data.getKeystroke() in { 32: 1, 13: 1 } && this.fire("click") }); b.on("focus", function() { this.fire("mouseover") }); b.on("blur", function() { this.fire("mouseout") }) } function d(a) { function b() { a.layout() } var c = CKEDITOR.document.getWindow(); c.on("resize", b); a.on("hide", function() { c.removeListener("resize", b) }) } function h(a, b) { this._ = { dialog: a }; CKEDITOR.tools.extend(this, b) } function k(a) { function b(c) { var k = a.getSize(), l = CKEDITOR.document.getWindow().getViewPaneSize(), m = c.data.$.screenX, n = c.data.$.screenY, p = m - d.x, r = n - d.y; d = { x: m, y: n }; e.x += p; e.y += r; a.move(e.x + h[3] < g ? -h[3] : e.x - h[1] > l.width - k.width - g ? l.width - k.width + ("rtl" == f.lang.dir ? 0 : h[1]) : e.x, e.y + h[0] < g ? -h[0] : e.y - h[2] > l.height - k.height - g ? l.height - k.height + h[2] : e.y, 1); c.data.preventDefault() } function c() { CKEDITOR.document.removeListener("mousemove", b); CKEDITOR.document.removeListener("mouseup", c); if (CKEDITOR.env.ie6Compat) { var a = x.getChild(0).getFrameDocument(); a.removeListener("mousemove", b); a.removeListener("mouseup", c) } } var d = null, e = null, f = a.getParentEditor(), g = f.config.dialog_magnetDistance, h = CKEDITOR.skin.margins || [0, 0, 0, 0]; "undefined" == typeof g && (g = 20); a.parts.title.on("mousedown", function(f) { d = { x: f.data.$.screenX, y: f.data.$.screenY }; CKEDITOR.document.on("mousemove", b); CKEDITOR.document.on("mouseup", c); e = a.getPosition(); if (CKEDITOR.env.ie6Compat) { var g = x.getChild(0).getFrameDocument(); g.on("mousemove", b); g.on("mouseup", c) } f.data.preventDefault() }, a) } function g(a) { function b(c) { var n = "rtl" == f.lang.dir, p = m.width, r = m.height, v = p + (c.data.$.screenX - l.x) * (n ? -1 : 1) * (a._.moved ? 1 : 2), t = r + (c.data.$.screenY - l.y) * (a._.moved ? 1 : 2), z = a._.element.getFirst(), z = n && z.getComputedStyle("right"), q = a.getPosition(); q.y + t > k.height && (t = k.height - q.y); (n ? z : q.x) + v > k.width && (v = k.width - (n ? z : q.x)); if (e == CKEDITOR.DIALOG_RESIZE_WIDTH || e == CKEDITOR.DIALOG_RESIZE_BOTH) p = Math.max(d.minWidth || 0, v - g); if (e == CKEDITOR.DIALOG_RESIZE_HEIGHT || e == CKEDITOR.DIALOG_RESIZE_BOTH) r = Math.max(d.minHeight || 0, t - h); a.resize(p, r); a._.moved || a.layout(); c.data.preventDefault() } function c() { CKEDITOR.document.removeListener("mouseup", c); CKEDITOR.document.removeListener("mousemove", b); n && (n.remove(), n = null); if (CKEDITOR.env.ie6Compat) { var a = x.getChild(0).getFrameDocument(); a.removeListener("mouseup", c); a.removeListener("mousemove", b) } } var d = a.definition, e = d.resizable; if (e != CKEDITOR.DIALOG_RESIZE_NONE) { var f = a.getParentEditor(), g, h, k, l, m, n, p = CKEDITOR.tools.addFunction(function(d) { m = a.getSize(); var e = a.parts.contents; e.$.getElementsByTagName("iframe").length && (n = CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_dialog_resize_cover" style\x3d"height: 100%; position: absolute; width: 100%;"\x3e\x3c/div\x3e'), e.append(n)); h = m.height - a.parts.contents.getSize("height", !(CKEDITOR.env.gecko || CKEDITOR.env.ie && CKEDITOR.env.quirks)); g = m.width - a.parts.contents.getSize("width", 1); l = { x: d.screenX, y: d.screenY }; k = CKEDITOR.document.getWindow().getViewPaneSize(); CKEDITOR.document.on("mousemove", b); CKEDITOR.document.on("mouseup", c); CKEDITOR.env.ie6Compat && (e = x.getChild(0).getFrameDocument(), e.on("mousemove", b), e.on("mouseup", c)); d.preventDefault && d.preventDefault() }); a.on("load", function() { var b = ""; e == CKEDITOR.DIALOG_RESIZE_WIDTH ? b = " cke_resizer_horizontal" : e == CKEDITOR.DIALOG_RESIZE_HEIGHT && (b = " cke_resizer_vertical"); b = CKEDITOR.dom.element.createFromHtml('\x3cdiv class\x3d"cke_resizer' + b + " cke_resizer_" + f.lang.dir + '" title\x3d"' + CKEDITOR.tools.htmlEncode(f.lang.common.resize) + '" onmousedown\x3d"CKEDITOR.tools.callFunction(' + p + ', event )"\x3e' + ("ltr" == f.lang.dir ? "◢" : "◣") + "\x3c/div\x3e"); a.parts.footer.append(b, 1) }); f.on("destroy", function() { CKEDITOR.tools.removeFunction(p) }) } } function n(a) { a.data.preventDefault(1) } function w(a) { var b = CKEDITOR.document.getWindow(), c = a.config, d = CKEDITOR.skinName || a.config.skin, e = c.dialog_backgroundCoverColor || ("moono-lisa" == d ? "black" : "white"), d = c.dialog_backgroundCoverOpacity, f = c.baseFloatZIndex, c = CKEDITOR.tools.genKey(e, d, f), g = D[c]; g ? g.show() : (f = ['\x3cdiv tabIndex\x3d"-1" style\x3d"position: ', CKEDITOR.env.ie6Compat ? "absolute" : "fixed", "; z-index: ", f, "; top: 0px; left: 0px; ", CKEDITOR.env.ie6Compat ? "" : "background-color: " + e, '" class\x3d"cke_dialog_background_cover"\x3e'], CKEDITOR.env.ie6Compat && (e = "\x3chtml\x3e\x3cbody style\x3d\\'background-color:" + e + ";\\'\x3e\x3c/body\x3e\x3c/html\x3e", f.push('\x3ciframe hidefocus\x3d"true" frameborder\x3d"0" id\x3d"cke_dialog_background_iframe" src\x3d"javascript:'), f.push("void((function(){" + encodeURIComponent("document.open();(" + CKEDITOR.tools.fixDomain + ")();document.write( '" + e + "' );document.close();") + "})())"), f.push('" style\x3d"position:absolute;left:0;top:0;width:100%;height: 100%;filter: progid:DXImageTransform.Microsoft.Alpha(opacity\x3d0)"\x3e\x3c/iframe\x3e')), f.push("\x3c/div\x3e"), g = CKEDITOR.dom.element.createFromHtml(f.join("")), g.setOpacity(void 0 !== d ? d : .5), g.on("keydown", n), g.on("keypress", n), g.on("keyup", n), g.appendTo(CKEDITOR.document.getBody()), D[c] = g); a.focusManager.add(g); x = g; a = function() { var a = b.getViewPaneSize(); g.setStyles({ width: a.width + "px", height: a.height + "px" }) }; var h = function() { var a = b.getScrollPosition(), c = CKEDITOR.dialog._.currentTop; g.setStyles({ left: a.x + "px", top: a.y + "px" }); if (c) { do a = c.getPosition(), c.move(a.x, a.y); while (c = c._.parentDialog) } }; y = a; b.on("resize", a); a(); CKEDITOR.env.mac && CKEDITOR.env.webkit || g.focus(); if (CKEDITOR.env.ie6Compat) { var k = function() { h(); arguments.callee.prevScrollHandler.apply(this, arguments) }; b.$.setTimeout(function() { k.prevScrollHandler = window.onscroll || function() {}; window.onscroll = k }, 0); h() } } function q(a) { x && (a.focusManager.remove(x), a = CKEDITOR.document.getWindow(), x.hide(), a.removeListener("resize", y), CKEDITOR.env.ie6Compat && a.$.setTimeout(function() { window.onscroll = window.onscroll && window.onscroll.prevScrollHandler || null }, 0), y = null) } var v = CKEDITOR.tools.cssLength, u = '\x3cdiv class\x3d"cke_reset_all {editorId} {editorDialogClass} {hidpi}" dir\x3d"{langDir}" lang\x3d"{langCode}" role\x3d"dialog" aria-labelledby\x3d"cke_dialog_title_{id}"\x3e\x3ctable class\x3d"cke_dialog ' + CKEDITOR.env.cssClass + ' cke_{langDir}" style\x3d"position:absolute" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd role\x3d"presentation"\x3e\x3cdiv class\x3d"cke_dialog_body" role\x3d"presentation"\x3e\x3cdiv id\x3d"cke_dialog_title_{id}" class\x3d"cke_dialog_title" role\x3d"presentation"\x3e\x3c/div\x3e\x3ca id\x3d"cke_dialog_close_button_{id}" class\x3d"cke_dialog_close_button" href\x3d"javascript:void(0)" title\x3d"{closeTitle}" role\x3d"button"\x3e\x3cspan class\x3d"cke_label"\x3eX\x3c/span\x3e\x3c/a\x3e\x3cdiv id\x3d"cke_dialog_tabs_{id}" class\x3d"cke_dialog_tabs" role\x3d"tablist"\x3e\x3c/div\x3e\x3ctable class\x3d"cke_dialog_contents" role\x3d"presentation"\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_contents_{id}" class\x3d"cke_dialog_contents_body" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3ctr\x3e\x3ctd id\x3d"cke_dialog_footer_{id}" class\x3d"cke_dialog_footer" role\x3d"presentation"\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e\x3c/td\x3e\x3c/tr\x3e\x3c/table\x3e\x3c/div\x3e'; CKEDITOR.dialog = function(b, d) { function h() { var a = x._.focusList; a.sort(function(a, b) { return a.tabIndex != b.tabIndex ? b.tabIndex - a.tabIndex : a.focusIndex - b.focusIndex }); for (var b = a.length, c = 0; c < b; c++) a[c].focusIndex = c } function l(a) { var b = x._.focusList; a = a || 0; if (!(1 > b.length)) { var c = x._.currentFocusIndex; x._.tabBarMode && 0 > a && (c = 0); try { b[c].getInputElement().$.blur() } catch (d) {} var e = c, f = 1 < x._.pageCount; do { e += a; if (f && !x._.tabBarMode && (e == b.length || -1 == e)) { x._.tabBarMode = !0; x._.tabs[x._.currentTabId][0].focus(); x._.currentFocusIndex = -1; return } e = (e + b.length) % b.length; if (e == c) break } while (a && !b[e].isFocusable()); b[e].focus(); "text" == b[e].type && b[e].select() } } function n(c) { if (x == CKEDITOR.dialog._.currentTop) { var d = c.data.getKeystroke(), e = "rtl" == b.lang.dir, g = [37, 38, 39, 40]; y = w = 0; if (9 == d || d == CKEDITOR.SHIFT + 9) l(d == CKEDITOR.SHIFT + 9 ? -1 : 1), y = 1; else if (d == CKEDITOR.ALT + 121 && !x._.tabBarMode && 1 < x.getPageCount()) x._.tabBarMode = !0, x._.tabs[x._.currentTabId][0].focus(), x._.currentFocusIndex = -1, y = 1; else if (-1 != CKEDITOR.tools.indexOf(g, d) && x._.tabBarMode) d = -1 != CKEDITOR.tools.indexOf([e ? 39 : 37, 38], d) ? a.call(x) : f.call(x), x.selectPage(d), x._.tabs[d][0].focus(), y = 1; else if (13 != d && 32 != d || !x._.tabBarMode) if (13 == d) d = c.data.getTarget(), d.is("a", "button", "select", "textarea") || d.is("input") && "button" == d.$.type || ((d = this.getButton("ok")) && CKEDITOR.tools.setTimeout(d.click, 0, d), y = 1), w = 1; else if (27 == d)(d = this.getButton("cancel")) ? CKEDITOR.tools.setTimeout(d.click, 0, d) : !1 !== this.fire("cancel", { hide: !0 }).hide && this.hide(), w = 1; else return; else this.selectPage(this._.currentTabId), this._.tabBarMode = !1, this._.currentFocusIndex = -1, l(1), y = 1; p(c) } } function p(a) { y ? a.data.preventDefault(1) : w && a.data.stopPropagation() } var v = CKEDITOR.dialog._.dialogDefinitions[d], z = CKEDITOR.tools.clone(r), q = b.config.dialog_buttonsOrder || "OS", u = b.lang.dir, B = {}, y, w; ("OS" == q && CKEDITOR.env.mac || "rtl" == q && "ltr" == u || "ltr" == q && "rtl" == u) && z.buttons.reverse(); v = CKEDITOR.tools.extend(v(b), z); v = CKEDITOR.tools.clone(v); v = new t(this, v); z = m(b); this._ = { editor: b, element: z.element, name: d, contentSize: { width: 0, height: 0 }, size: { width: 0, height: 0 }, contents: {}, buttons: {}, accessKeyMap: {}, tabs: {}, tabIdList: [], currentTabId: null, currentTabIndex: null, pageCount: 0, lastTab: null, tabBarMode: !1, focusList: [], currentFocusIndex: 0, hasFocus: !1 }; this.parts = z.parts; CKEDITOR.tools.setTimeout(function() { b.fire("ariaWidget", this.parts.contents) }, 0, this); z = { position: CKEDITOR.env.ie6Compat ? "absolute" : "fixed", top: 0, visibility: "hidden" }; z["rtl" == u ? "right" : "left"] = 0; this.parts.dialog.setStyles(z); CKEDITOR.event.call(this); this.definition = v = CKEDITOR.fire("dialogDefinition", { name: d, definition: v }, b).definition; if (!("removeDialogTabs" in b._) && b.config.removeDialogTabs) { z = b.config.removeDialogTabs.split(";"); for (u = 0; u < z.length; u++) if (q = z[u].split(":"), 2 == q.length) { var D = q[0]; B[D] || (B[D] = []); B[D].push(q[1]) } b._.removeDialogTabs = B } if (b._.removeDialogTabs && (B = b._.removeDialogTabs[d])) for (u = 0; u < B.length; u++) v.removeContents(B[u]); if (v.onLoad) this.on("load", v.onLoad); if (v.onShow) this.on("show", v.onShow); if (v.onHide) this.on("hide", v.onHide); if (v.onOk) this.on("ok", function(a) { b.fire("saveSnapshot"); setTimeout(function() { b.fire("saveSnapshot") }, 0); !1 === v.onOk.call(this, a) && (a.data.hide = !1) }); this.state = CKEDITOR.DIALOG_STATE_IDLE; if (v.onCancel) this.on("cancel", function(a) { !1 === v.onCancel.call(this, a) && (a.data.hide = !1) }); var x = this, A = function(a) { var b = x._.contents, c = !1, d; for (d in b) for (var e in b[d]) if (c = a.call(this, b[d][e])) return }; this.on("ok", function(a) { A(function(b) { if (b.validate) { var d = b.validate(this), e = "string" == typeof d || !1 === d; e && (a.data.hide = !1, a.stop()); c.call(b, !e, "string" == typeof d ? d : void 0); return e } }) }, this, null, 0); this.on("cancel", function(a) { A(function(c) { if (c.isChanged()) return b.config.dialog_noConfirmCancel || confirm(b.lang.common.confirmCancel) || (a.data.hide = !1), !0 }) }, this, null, 0); this.parts.close.on("click", function(a) { !1 !== this.fire("cancel", { hide: !0 }).hide && this.hide(); a.data.preventDefault() }, this); this.changeFocus = l; var C = this._.element; b.focusManager.add(C, 1); this.on("show", function() { C.on("keydown", n, this); if (CKEDITOR.env.gecko) C.on("keypress", p, this) }); this.on("hide", function() { C.removeListener("keydown", n); CKEDITOR.env.gecko && C.removeListener("keypress", p); A(function(a) { e.apply(a) }) }); this.on("iframeAdded", function(a) { (new CKEDITOR.dom.document(a.data.iframe.$.contentWindow.document)).on("keydown", n, this, null, 0) }); this.on("show", function() { h(); var a = 1 < x._.pageCount; b.config.dialog_startupFocusTab && a ? (x._.tabBarMode = !0, x._.tabs[x._.currentTabId][0].focus(), x._.currentFocusIndex = -1) : this._.hasFocus || (this._.currentFocusIndex = a ? -1 : this._.focusList.length - 1, v.onFocus ? (a = v.onFocus.call(this)) && a.focus() : l(1)) }, this, null, 4294967295); if (CKEDITOR.env.ie6Compat) this.on("load", function() { var a = this.getElement(), b = a.getFirst(); b.remove(); b.appendTo(a) }, this); k(this); g(this); (new CKEDITOR.dom.text(v.title, CKEDITOR.document)).appendTo(this.parts.title); for (u = 0; u < v.contents.length; u++)(B = v.contents[u]) && this.addPage(B); this.parts.tabs.on("click", function(a) { var b = a.data.getTarget(); b.hasClass("cke_dialog_tab") && (b = b.$.id, this.selectPage(b.substring(4, b.lastIndexOf("_"))), this._.tabBarMode && (this._.tabBarMode = !1, this._.currentFocusIndex = -1, l(1)), a.data.preventDefault()) }, this); u = []; B = CKEDITOR.dialog._.uiElementBuilders.hbox.build(this, { type: "hbox", className: "cke_dialog_footer_buttons", widths: [], children: v.buttons }, u).getChild(); this.parts.footer.setHtml(u.join("")); for (u = 0; u < B.length; u++) this._.buttons[B[u].id] = B[u] }; CKEDITOR.dialog.prototype = { destroy: function() { this.hide(); this._.element.remove() }, resize: function() { return function(a, b) { this._.contentSize && this._.contentSize.width == a && this._.contentSize.height == b || (CKEDITOR.dialog.fire("resize", { dialog: this, width: a, height: b }, this._.editor), this.fire("resize", { width: a, height: b }, this._.editor), this.parts.contents.setStyles({ width: a + "px", height: b + "px" }), "rtl" == this._.editor.lang.dir && this._.position && (this._.position.x = CKEDITOR.document.getWindow().getViewPaneSize().width - this._.contentSize.width - parseInt(this._.element.getFirst().getStyle("right"), 10)), this._.contentSize = { width: a, height: b }) } }(), getSize: function() { var a = this._.element.getFirst(); return { width: a.$.offsetWidth || 0, height: a.$.offsetHeight || 0 } }, move: function(a, b, c) { var d = this._.element.getFirst(), e = "rtl" == this._.editor.lang.dir, f = "fixed" == d.getComputedStyle("position"); CKEDITOR.env.ie && d.setStyle("zoom", "100%"); f && this._.position && this._.position.x == a && this._.position.y == b || (this._.position = { x: a, y: b }, f || (f = CKEDITOR.document.getWindow().getScrollPosition(), a += f.x, b += f.y), e && (f = this.getSize(), a = CKEDITOR.document.getWindow().getViewPaneSize().width - f.width - a), b = { top: (0 < b ? b : 0) + "px" }, b[e ? "right" : "left"] = (0 < a ? a : 0) + "px", d.setStyles(b), c && (this._.moved = 1)) }, getPosition: function() { return CKEDITOR.tools.extend({}, this._.position) }, show: function() { var a = this._.element, b = this.definition; a.getParent() && a.getParent().equals(CKEDITOR.document.getBody()) ? a.setStyle("display", "block") : a.appendTo(CKEDITOR.document.getBody()); this.resize(this._.contentSize && this._.contentSize.width || b.width || b.minWidth, this._.contentSize && this._.contentSize.height || b.height || b.minHeight); this.reset(); this.selectPage(this.definition.contents[0].id); null === CKEDITOR.dialog._.currentZIndex && (CKEDITOR.dialog._.currentZIndex = this._.editor.config.baseFloatZIndex); this._.element.getFirst().setStyle("z-index", CKEDITOR.dialog._.currentZIndex += 10); null === CKEDITOR.dialog._.currentTop ? (CKEDITOR.dialog._.currentTop = this, this._.parentDialog = null, w(this._.editor)) : (this._.parentDialog = CKEDITOR.dialog._.currentTop, this._.parentDialog.getElement().getFirst().$.style.zIndex -= Math.floor(this._.editor.config.baseFloatZIndex / 2), CKEDITOR.dialog._.currentTop = this); a.on("keydown", C); a.on("keyup", F); this._.hasFocus = !1; for (var c in b.contents) if (b.contents[c]) { var a = b.contents[c], e = this._.tabs[a.id], f = a.requiredContent, g = 0; if (e) { for (var h in this._.contents[a.id]) { var k = this._.contents[a.id][h]; "hbox" != k.type && "vbox" != k.type && k.getInputElement() && (k.requiredContent && !this._.editor.activeFilter.check(k.requiredContent) ? k.disable() : (k.enable(), g++)) }!g || f && !this._.editor.activeFilter.check(f) ? e[0].addClass("cke_dialog_tab_disabled") : e[0].removeClass("cke_dialog_tab_disabled") } } CKEDITOR.tools.setTimeout(function() { this.layout(); d(this); this.parts.dialog.setStyle("visibility", ""); this.fireOnce("load", {}); CKEDITOR.ui.fire("ready", this); this.fire("show", {}); this._.editor.fire("dialogShow", this); this._.parentDialog || this._.editor.focusManager.lock(); this.foreach(function(a) { a.setInitValue && a.setInitValue() }) }, 100, this) }, layout: function() { var a = this.parts.dialog, b = this.getSize(), c = CKEDITOR.document.getWindow().getViewPaneSize(), d = (c.width - b.width) / 2, e = (c.height - b.height) / 2; CKEDITOR.env.ie6Compat || (b.height + (0 < e ? e : 0) > c.height || b.width + (0 < d ? d : 0) > c.width ? a.setStyle("position", "absolute") : a.setStyle("position", "fixed")); this.move(this._.moved ? this._.position.x : d, this._.moved ? this._.position.y : e) }, foreach: function(a) { for (var b in this._.contents) for (var c in this._.contents[b]) a.call(this, this._.contents[b][c]); return this }, reset: function() { var a = function(a) { a.reset && a.reset(1) }; return function() { this.foreach(a); return this } }(), setupContent: function() { var a = arguments; this.foreach(function(b) { b.setup && b.setup.apply(b, a) }) }, commitContent: function() { var a = arguments; this.foreach(function(b) { CKEDITOR.env.ie && this._.currentFocusIndex == b.focusIndex && b.getInputElement().$.blur(); b.commit && b.commit.apply(b, a) }) }, hide: function() { if (this.parts.dialog.isVisible()) { this.fire("hide", {}); this._.editor.fire("dialogHide", this); this.selectPage(this._.tabIdList[0]); var a = this._.element; a.setStyle("display", "none"); this.parts.dialog.setStyle("visibility", "hidden"); for (I(this); CKEDITOR.dialog._.currentTop != this;) CKEDITOR.dialog._.currentTop.hide(); if (this._.parentDialog) { var b = this._.parentDialog.getElement().getFirst(); b.setStyle("z-index", parseInt(b.$.style.zIndex, 10) + Math.floor(this._.editor.config.baseFloatZIndex / 2)) } else q(this._.editor); if (CKEDITOR.dialog._.currentTop = this._.parentDialog) CKEDITOR.dialog._.currentZIndex -= 10; else { CKEDITOR.dialog._.currentZIndex = null; a.removeListener("keydown", C); a.removeListener("keyup", F); var c = this._.editor; c.focus(); setTimeout(function() { c.focusManager.unlock(); CKEDITOR.env.iOS && c.window.focus() }, 0) } delete this._.parentDialog; this.foreach(function(a) { a.resetInitValue && a.resetInitValue() }); this.setState(CKEDITOR.DIALOG_STATE_IDLE) } }, addPage: function(a) { if (!a.requiredContent || this._.editor.filter.check(a.requiredContent)) { for (var b = [], c = a.label ? ' title\x3d"' + CKEDITOR.tools.htmlEncode(a.label) + '"' : "", d = CKEDITOR.dialog._.uiElementBuilders.vbox.build(this, { type: "vbox", className: "cke_dialog_page_contents", children: a.elements, expand: !!a.expand, padding: a.padding, style: a.style || "width: 100%;" }, b), e = this._.contents[a.id] = {}, f = d.getChild(), g = 0; d = f.shift();) d.notAllowed || "hbox" == d.type || "vbox" == d.type || g++, e[d.id] = d, "function" == typeof d.getChild && f.push.apply(f, d.getChild()); g || (a.hidden = !0); b = CKEDITOR.dom.element.createFromHtml(b.join("")); b.setAttribute("role", "tabpanel"); d = CKEDITOR.env; e = "cke_" + a.id + "_" + CKEDITOR.tools.getNextNumber(); c = CKEDITOR.dom.element.createFromHtml(['\x3ca class\x3d"cke_dialog_tab"', 0 < this._.pageCount ? " cke_last" : "cke_first", c, a.hidden ? ' style\x3d"display:none"' : "", ' id\x3d"', e, '"', d.gecko && !d.hc ? "" : ' href\x3d"javascript:void(0)"', ' tabIndex\x3d"-1" hidefocus\x3d"true" role\x3d"tab"\x3e', a.label, "\x3c/a\x3e" ].join("")); b.setAttribute("aria-labelledby", e); this._.tabs[a.id] = [c, b]; this._.tabIdList.push(a.id); !a.hidden && this._.pageCount++; this._.lastTab = c; this.updateStyle(); b.setAttribute("name", a.id); b.appendTo(this.parts.contents); c.unselectable(); this.parts.tabs.append(c); a.accessKey && (G(this, this, "CTRL+" + a.accessKey, K, H), this._.accessKeyMap["CTRL+" + a.accessKey] = a.id) } }, selectPage: function(a) { if (this._.currentTabId != a && !this._.tabs[a][0].hasClass("cke_dialog_tab_disabled") && !1 !== this.fire("selectPage", { page: a, currentPage: this._.currentTabId })) { for (var c in this._.tabs) { var d = this._.tabs[c][0], e = this._.tabs[c][1]; c != a && (d.removeClass("cke_dialog_tab_selected"), e.hide()); e.setAttribute("aria-hidden", c != a) } var f = this._.tabs[a]; f[0].addClass("cke_dialog_tab_selected"); CKEDITOR.env.ie6Compat || CKEDITOR.env.ie7Compat ? (b(f[1]), f[1].show(), setTimeout(function() { b(f[1], 1) }, 0)) : f[1].show(); this._.currentTabId = a; this._.currentTabIndex = CKEDITOR.tools.indexOf(this._.tabIdList, a) } }, updateStyle: function() { this.parts.dialog[(1 === this._.pageCount ? "add" : "remove") + "Class"]("cke_single_page") }, hidePage: function(b) { var c = this._.tabs[b] && this._.tabs[b][0]; c && 1 != this._.pageCount && c.isVisible() && (b == this._.currentTabId && this.selectPage(a.call(this)), c.hide(), this._.pageCount--, this.updateStyle()) }, showPage: function(a) { if (a = this._.tabs[a] && this._.tabs[a][0]) a.show(), this._.pageCount++, this.updateStyle() }, getElement: function() { return this._.element }, getName: function() { return this._.name }, getContentElement: function(a, b) { var c = this._.contents[a]; return c && c[b] }, getValueOf: function(a, b) { return this.getContentElement(a, b).getValue() }, setValueOf: function(a, b, c) { return this.getContentElement(a, b).setValue(c) }, getButton: function(a) { return this._.buttons[a] }, click: function(a) { return this._.buttons[a].click() }, disableButton: function(a) { return this._.buttons[a].disable() }, enableButton: function(a) { return this._.buttons[a].enable() }, getPageCount: function() { return this._.pageCount }, getParentEditor: function() { return this._.editor }, getSelectedElement: function() { return this.getParentEditor().getSelection().getSelectedElement() }, addFocusable: function(a, b) { if ("undefined" == typeof b) b = this._.focusList.length, this._.focusList.push(new l(this, a, b)); else { this._.focusList.splice(b, 0, new l(this, a, b)); for (var c = b + 1; c < this._.focusList.length; c++) this._.focusList[c].focusIndex++ } }, setState: function(a) { if (this.state != a) { this.state = a; if (a == CKEDITOR.DIALOG_STATE_BUSY) { if (!this.parts.spinner) { var b = this.getParentEditor().lang.dir, c = { attributes: { "class": "cke_dialog_spinner" }, styles: { "float": "rtl" == b ? "right" : "left" } }; c.styles["margin-" + ("rtl" == b ? "left" : "right")] = "8px"; this.parts.spinner = CKEDITOR.document.createElement("div", c); this.parts.spinner.setHtml("\x26#8987;"); this.parts.spinner.appendTo(this.parts.title, 1) } this.parts.spinner.show(); this.getButton("ok").disable() } else a == CKEDITOR.DIALOG_STATE_IDLE && (this.parts.spinner && this.parts.spinner.hide(), this.getButton("ok").enable()); this.fire("state", a) } } }; CKEDITOR.tools.extend(CKEDITOR.dialog, { add: function(a, b) { this._.dialogDefinitions[a] && "function" != typeof b || (this._.dialogDefinitions[a] = b) }, exists: function(a) { return !!this._.dialogDefinitions[a] }, getCurrent: function() { return CKEDITOR.dialog._.currentTop }, isTabEnabled: function(a, b, c) { a = a.config.removeDialogTabs; return !(a && a.match(new RegExp("(?:^|;)" + b + ":" + c + "(?:$|;)", "i"))) }, okButton: function() { var a = function(a, b) { b = b || {}; return CKEDITOR.tools.extend({ id: "ok", type: "button", label: a.lang.common.ok, "class": "cke_dialog_ui_button_ok", onClick: function(a) { a = a.data.dialog; !1 !== a.fire("ok", { hide: !0 }).hide && a.hide() } }, b, !0) }; a.type = "button"; a.override = function(b) { return CKEDITOR.tools.extend(function(c) { return a(c, b) }, { type: "button" }, !0) }; return a }(), cancelButton: function() { var a = function(a, b) { b = b || {}; return CKEDITOR.tools.extend({ id: "cancel", type: "button", label: a.lang.common.cancel, "class": "cke_dialog_ui_button_cancel", onClick: function(a) { a = a.data.dialog; !1 !== a.fire("cancel", { hide: !0 }).hide && a.hide() } }, b, !0) }; a.type = "button"; a.override = function(b) { return CKEDITOR.tools.extend(function(c) { return a(c, b) }, { type: "button" }, !0) }; return a }(), addUIElement: function(a, b) { this._.uiElementBuilders[a] = b } }); CKEDITOR.dialog._ = { uiElementBuilders: {}, dialogDefinitions: {}, currentTop: null, currentZIndex: null }; CKEDITOR.event.implementOn(CKEDITOR.dialog); CKEDITOR.event.implementOn(CKEDITOR.dialog.prototype); var r = { resizable: CKEDITOR.DIALOG_RESIZE_BOTH, minWidth: 600, minHeight: 400, buttons: [CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton] }, p = function(a, b, c) { for (var d = 0, e; e = a[d]; d++) if (e.id == b || c && e[c] && (e = p(e[c], b, c))) return e; return null }, z = function(a, b, c, d, e) { if (c) { for (var f = 0, g; g = a[f]; f++) { if (g.id == c) return a.splice(f, 0, b), b; if (d && g[d] && (g = z(g[d], b, c, d, !0))) return g } if (e) return null } a.push(b); return b }, B = function(a, b, c) { for (var d = 0, e; e = a[d]; d++) { if (e.id == b) return a.splice(d, 1); if (c && e[c] && (e = B(e[c], b, c))) return e } return null }, t = function(a, b) { this.dialog = a; for (var c = b.contents, d = 0, e; e = c[d]; d++) c[d] = e && new h(a, e); CKEDITOR.tools.extend(this, b) }; t.prototype = { getContents: function(a) { return p(this.contents, a) }, getButton: function(a) { return p(this.buttons, a) }, addContents: function(a, b) { return z(this.contents, a, b) }, addButton: function(a, b) { return z(this.buttons, a, b) }, removeContents: function(a) { B(this.contents, a) }, removeButton: function(a) { B(this.buttons, a) } }; h.prototype = { get: function(a) { return p(this.elements, a, "children") }, add: function(a, b) { return z(this.elements, a, b, "children") }, remove: function(a) { B(this.elements, a, "children") } }; var y, D = {}, x, A = {}, C = function(a) { var b = a.data.$.ctrlKey || a.data.$.metaKey, c = a.data.$.altKey, d = a.data.$.shiftKey, e = String.fromCharCode(a.data.$.keyCode); (b = A[(b ? "CTRL+" : "") + (c ? "ALT+" : "") + (d ? "SHIFT+" : "") + e]) && b.length && (b = b[b.length - 1], b.keydown && b.keydown.call(b.uiElement, b.dialog, b.key), a.data.preventDefault()) }, F = function(a) { var b = a.data.$.ctrlKey || a.data.$.metaKey, c = a.data.$.altKey, d = a.data.$.shiftKey, e = String.fromCharCode(a.data.$.keyCode); (b = A[(b ? "CTRL+" : "") + (c ? "ALT+" : "") + (d ? "SHIFT+" : "") + e]) && b.length && (b = b[b.length - 1], b.keyup && (b.keyup.call(b.uiElement, b.dialog, b.key), a.data.preventDefault())) }, G = function(a, b, c, d, e) { (A[c] || (A[c] = [])).push({ uiElement: a, dialog: b, key: c, keyup: e || a.accessKeyUp, keydown: d || a.accessKeyDown }) }, I = function(a) { for (var b in A) { for (var c = A[b], d = c.length - 1; 0 <= d; d--) c[d].dialog != a && c[d].uiElement != a || c.splice(d, 1); 0 === c.length && delete A[b] } }, H = function(a, b) { a._.accessKeyMap[b] && a.selectPage(a._.accessKeyMap[b]) }, K = function() {}; (function() { CKEDITOR.ui.dialog = { uiElement: function(a, b, c, d, e, f, g) { if (!(4 > arguments.length)) { var h = (d.call ? d(b) : d) || "div", k = ["\x3c", h, " "], l = (e && e.call ? e(b) : e) || {}, m = (f && f.call ? f(b) : f) || {}, n = (g && g.call ? g.call(this, a, b) : g) || "", p = this.domId = m.id || CKEDITOR.tools.getNextId() + "_uiElement"; b.requiredContent && !a.getParentEditor().filter.check(b.requiredContent) && (l.display = "none", this.notAllowed = !0); m.id = p; var r = {}; b.type && (r["cke_dialog_ui_" + b.type] = 1); b.className && (r[b.className] = 1); b.disabled && (r.cke_disabled = 1); for (var v = m["class"] && m["class"].split ? m["class"].split(" ") : [], p = 0; p < v.length; p++) v[p] && (r[v[p]] = 1); v = []; for (p in r) v.push(p); m["class"] = v.join(" "); b.title && (m.title = b.title); r = (b.style || "").split(";"); b.align && (v = b.align, l["margin-left"] = "left" == v ? 0 : "auto", l["margin-right"] = "right" == v ? 0 : "auto"); for (p in l) r.push(p + ":" + l[p]); b.hidden && r.push("display:none"); for (p = r.length - 1; 0 <= p; p--) "" === r[p] && r.splice(p, 1); 0 < r.length && (m.style = (m.style ? m.style + "; " : "") + r.join("; ")); for (p in m) k.push(p + '\x3d"' + CKEDITOR.tools.htmlEncode(m[p]) + '" '); k.push("\x3e", n, "\x3c/", h, "\x3e"); c.push(k.join("")); (this._ || (this._ = {})).dialog = a; "boolean" == typeof b.isChanged && (this.isChanged = function() { return b.isChanged }); "function" == typeof b.isChanged && (this.isChanged = b.isChanged); "function" == typeof b.setValue && (this.setValue = CKEDITOR.tools.override(this.setValue, function(a) { return function(c) { a.call(this, b.setValue.call(this, c)) } })); "function" == typeof b.getValue && (this.getValue = CKEDITOR.tools.override(this.getValue, function(a) { return function() { return b.getValue.call(this, a.call(this)) } })); CKEDITOR.event.implementOn(this); this.registerEvents(b); this.accessKeyUp && this.accessKeyDown && b.accessKey && G(this, a, "CTRL+" + b.accessKey); var t = this; a.on("load", function() { var b = t.getInputElement(); if (b) { var c = t.type in { checkbox: 1, ratio: 1 } && CKEDITOR.env.ie && 8 > CKEDITOR.env.version ? "cke_dialog_ui_focused" : ""; b.on("focus", function() { a._.tabBarMode = !1; a._.hasFocus = !0; t.fire("focus"); c && this.addClass(c) }); b.on("blur", function() { t.fire("blur"); c && this.removeClass(c) }) } }); CKEDITOR.tools.extend(this, b); this.keyboardFocusable && (this.tabIndex = b.tabIndex || 0, this.focusIndex = a._.focusList.push(this) - 1, this.on("focus", function() { a._.currentFocusIndex = t.focusIndex })) } }, hbox: function(a, b, c, d, e) { if (!(4 > arguments.length)) { this._ || (this._ = {}); var f = this._.children = b, g = e && e.widths || null, h = e && e.height || null, k, l = { role: "presentation" }; e && e.align && (l.align = e.align); CKEDITOR.ui.dialog.uiElement.call(this, a, e || { type: "hbox" }, d, "table", {}, l, function() { var a = ['\x3ctbody\x3e\x3ctr class\x3d"cke_dialog_ui_hbox"\x3e']; for (k = 0; k < c.length; k++) { var b = "cke_dialog_ui_hbox_child", d = []; 0 === k && (b = "cke_dialog_ui_hbox_first"); k == c.length - 1 && (b = "cke_dialog_ui_hbox_last"); a.push('\x3ctd class\x3d"', b, '" role\x3d"presentation" '); g ? g[k] && d.push("width:" + v(g[k])) : d.push("width:" + Math.floor(100 / c.length) + "%"); h && d.push("height:" + v(h)); e && void 0 !== e.padding && d.push("padding:" + v(e.padding)); CKEDITOR.env.ie && CKEDITOR.env.quirks && f[k].align && d.push("text-align:" + f[k].align); 0 < d.length && a.push('style\x3d"' + d.join("; ") + '" '); a.push("\x3e", c[k], "\x3c/td\x3e") } a.push("\x3c/tr\x3e\x3c/tbody\x3e"); return a.join("") }) } }, vbox: function(a, b, c, d, e) { if (!(3 > arguments.length)) { this._ || (this._ = {}); var f = this._.children = b, g = e && e.width || null, h = e && e.heights || null; CKEDITOR.ui.dialog.uiElement.call(this, a, e || { type: "vbox" }, d, "div", null, { role: "presentation" }, function() { var b = ['\x3ctable role\x3d"presentation" cellspacing\x3d"0" border\x3d"0" ']; b.push('style\x3d"'); e && e.expand && b.push("height:100%;"); b.push("width:" + v(g || "100%"), ";"); CKEDITOR.env.webkit && b.push("float:none;"); b.push('"'); b.push('align\x3d"', CKEDITOR.tools.htmlEncode(e && e.align || ("ltr" == a.getParentEditor().lang.dir ? "left" : "right")), '" '); b.push("\x3e\x3ctbody\x3e"); for (var d = 0; d < c.length; d++) { var k = []; b.push('\x3ctr\x3e\x3ctd role\x3d"presentation" '); g && k.push("width:" + v(g || "100%")); h ? k.push("height:" + v(h[d])) : e && e.expand && k.push("height:" + Math.floor(100 / c.length) + "%"); e && void 0 !== e.padding && k.push("padding:" + v(e.padding)); CKEDITOR.env.ie && CKEDITOR.env.quirks && f[d].align && k.push("text-align:" + f[d].align); 0 < k.length && b.push('style\x3d"', k.join("; "), '" '); b.push(' class\x3d"cke_dialog_ui_vbox_child"\x3e', c[d], "\x3c/td\x3e\x3c/tr\x3e") } b.push("\x3c/tbody\x3e\x3c/table\x3e"); return b.join("") }) } } } })(); CKEDITOR.ui.dialog.uiElement.prototype = { getElement: function() { return CKEDITOR.document.getById(this.domId) }, getInputElement: function() { return this.getElement() }, getDialog: function() { return this._.dialog }, setValue: function(a, b) { this.getInputElement().setValue(a); !b && this.fire("change", { value: a }); return this }, getValue: function() { return this.getInputElement().getValue() }, isChanged: function() { return !1 }, selectParentTab: function() { for (var a = this.getInputElement(); (a = a.getParent()) && -1 == a.$.className.search("cke_dialog_page_contents");); if (!a) return this; a = a.getAttribute("name"); this._.dialog._.currentTabId != a && this._.dialog.selectPage(a); return this }, focus: function() { this.selectParentTab().getInputElement().focus(); return this }, registerEvents: function(a) { var b = /^on([A-Z]\w+)/, c, d = function(a, b, c, d) { b.on("load", function() { a.getInputElement().on(c, d, a) }) }, e; for (e in a) if (c = e.match(b)) this.eventProcessors[e] ? this.eventProcessors[e].call(this, this._.dialog, a[e]) : d(this, this._.dialog, c[1].toLowerCase(), a[e]); return this }, eventProcessors: { onLoad: function(a, b) { a.on("load", b, this) }, onShow: function(a, b) { a.on("show", b, this) }, onHide: function(a, b) { a.on("hide", b, this) } }, accessKeyDown: function() { this.focus() }, accessKeyUp: function() {}, disable: function() { var a = this.getElement(); this.getInputElement().setAttribute("disabled", "true"); a.addClass("cke_disabled") }, enable: function() { var a = this.getElement(); this.getInputElement().removeAttribute("disabled"); a.removeClass("cke_disabled") }, isEnabled: function() { return !this.getElement().hasClass("cke_disabled") }, isVisible: function() { return this.getInputElement().isVisible() }, isFocusable: function() { return this.isEnabled() && this.isVisible() ? !0 : !1 } }; CKEDITOR.ui.dialog.hbox.prototype = CKEDITOR.tools.extend(new CKEDITOR.ui.dialog.uiElement, { getChild: function(a) { if (1 > arguments.length) return this._.children.concat(); a.splice || (a = [a]); return 2 > a.length ? this._.children[a[0]] : this._.children[a[0]] && this._.children[a[0]].getChild ? this._.children[a[0]].getChild(a.slice(1, a.length)) : null } }, !0); CKEDITOR.ui.dialog.vbox.prototype = new CKEDITOR.ui.dialog.hbox; (function() { var a = { build: function(a, b, c) { for (var d = b.children, e, f = [], g = [], h = 0; h < d.length && (e = d[h]); h++) { var k = []; f.push(k); g.push(CKEDITOR.dialog._.uiElementBuilders[e.type].build(a, e, k)) } return new CKEDITOR.ui.dialog[b.type](a, g, f, c, b) } }; CKEDITOR.dialog.addUIElement("hbox", a); CKEDITOR.dialog.addUIElement("vbox", a) })(); CKEDITOR.dialogCommand = function(a, b) { this.dialogName = a; CKEDITOR.tools.extend(this, b, !0) }; CKEDITOR.dialogCommand.prototype = { exec: function(a) { a.openDialog(this.dialogName) }, canUndo: !1, editorFocus: 1 }; (function() { var a = /^([a]|[^a])+$/, b = /^\d*$/, c = /^\d*(?:\.\d+)?$/, d = /^(((\d*(\.\d+))|(\d*))(px|\%)?)?$/, e = /^(((\d*(\.\d+))|(\d*))(px|em|ex|in|cm|mm|pt|pc|\%)?)?$/i, f = /^(\s*[\w-]+\s*:\s*[^:;]+(?:;|$))*$/; CKEDITOR.VALIDATE_OR = 1; CKEDITOR.VALIDATE_AND = 2; CKEDITOR.dialog.validate = { functions: function() { var a = arguments; return function() { var b = this && this.getValue ? this.getValue() : a[0], c, d = CKEDITOR.VALIDATE_AND, e = [], f; for (f = 0; f < a.length; f++) if ("function" == typeof a[f]) e.push(a[f]); else break; f < a.length && "string" == typeof a[f] && (c = a[f], f++); f < a.length && "number" == typeof a[f] && (d = a[f]); var g = d == CKEDITOR.VALIDATE_AND ? !0 : !1; for (f = 0; f < e.length; f++) g = d == CKEDITOR.VALIDATE_AND ? g && e[f](b) : g || e[f](b); return g ? !0 : c } }, regex: function(a, b) { return function(c) { c = this && this.getValue ? this.getValue() : c; return a.test(c) ? !0 : b } }, notEmpty: function(b) { return this.regex(a, b) }, integer: function(a) { return this.regex(b, a) }, number: function(a) { return this.regex(c, a) }, cssLength: function(a) { return this.functions(function(a) { return e.test(CKEDITOR.tools.trim(a)) }, a) }, htmlLength: function(a) { return this.functions(function(a) { return d.test(CKEDITOR.tools.trim(a)) }, a) }, inlineStyle: function(a) { return this.functions(function(a) { return f.test(CKEDITOR.tools.trim(a)) }, a) }, equals: function(a, b) { return this.functions(function(b) { return b == a }, b) }, notEqual: function(a, b) { return this.functions(function(b) { return b != a }, b) } }; CKEDITOR.on("instanceDestroyed", function(a) { if (CKEDITOR.tools.isEmpty(CKEDITOR.instances)) { for (var b; b = CKEDITOR.dialog._.currentTop;) b.hide(); for (var c in D) D[c].remove(); D = {} } a = a.editor._.storedDialogs; for (var d in a) a[d].destroy() }) })(); CKEDITOR.tools.extend(CKEDITOR.editor.prototype, { openDialog: function(a, b) { var c = null, d = CKEDITOR.dialog._.dialogDefinitions[a]; null === CKEDITOR.dialog._.currentTop && w(this); if ("function" == typeof d) c = this._.storedDialogs || (this._.storedDialogs = {}), c = c[a] || (c[a] = new CKEDITOR.dialog(this, a)), b && b.call(c, c), c.show(); else { if ("failed" == d) throw q(this), Error('[CKEDITOR.dialog.openDialog] Dialog "' + a + '" failed when loading definition.'); "string" == typeof d && CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(d), function() { "function" != typeof CKEDITOR.dialog._.dialogDefinitions[a] && (CKEDITOR.dialog._.dialogDefinitions[a] = "failed"); this.openDialog(a, b) }, this, 0, 1) } CKEDITOR.skin.loadPart("dialog"); return c } }) }(), CKEDITOR.plugins.add("dialog", { requires: "dialogui", init: function(a) { a.on("doubleclick", function(f) { f.data.dialog && a.openDialog(f.data.dialog) }, null, null, 999) } }), function() { CKEDITOR.plugins.add("a11yhelp", { requires: "dialog", availableLangs: { af: 1, ar: 1, bg: 1, ca: 1, cs: 1, cy: 1, da: 1, de: 1, "de-ch": 1, el: 1, en: 1, "en-gb": 1, eo: 1, es: 1, et: 1, eu: 1, fa: 1, fi: 1, fo: 1, fr: 1, "fr-ca": 1, gl: 1, gu: 1, he: 1, hi: 1, hr: 1, hu: 1, id: 1, it: 1, ja: 1, km: 1, ko: 1, ku: 1, lt: 1, lv: 1, mk: 1, mn: 1, nb: 1, nl: 1, no: 1, oc: 1, pl: 1, pt: 1, "pt-br": 1, ro: 1, ru: 1, si: 1, sk: 1, sl: 1, sq: 1, sr: 1, "sr-latn": 1, sv: 1, th: 1, tr: 1, tt: 1, ug: 1, uk: 1, vi: 1, zh: 1, "zh-cn": 1 }, init: function(a) { var f = this; a.addCommand("a11yHelp", { exec: function() { var b = a.langCode, b = f.availableLangs[b] ? b : f.availableLangs[b.replace(/-.*/, "")] ? b.replace(/-.*/, "") : "en"; CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(f.path + "dialogs/lang/" + b + ".js"), function() { a.lang.a11yhelp = f.langEntries[b]; a.openDialog("a11yHelp") }) }, modes: { wysiwyg: 1, source: 1 }, readOnly: 1, canUndo: !1 }); a.setKeystroke(CKEDITOR.ALT + 48, "a11yHelp"); CKEDITOR.dialog.add("a11yHelp", this.path + "dialogs/a11yhelp.js"); a.on("ariaEditorHelpLabel", function(b) { b.data.label = a.lang.common.editorHelp }) } }) }(), CKEDITOR.plugins.add("about", { requires: "dialog", init: function(a) { var f = a.addCommand("about", new CKEDITOR.dialogCommand("about")); f.modes = { wysiwyg: 1, source: 1 }; f.canUndo = !1; f.readOnly = 1; a.ui.addButton && a.ui.addButton("About", { label: a.lang.about.title, command: "about", toolbar: "about" }); CKEDITOR.dialog.add("about", this.path + "dialogs/about.js") } }), CKEDITOR.plugins.add("basicstyles", { init: function(a) { var f = 0, b = function(b, d, e, k) { if (k) { k = new CKEDITOR.style(k); var g = c[e]; g.unshift(k); a.attachStyleStateChange(k, function(b) { !a.readOnly && a.getCommand(e).setState(b) }); a.addCommand(e, new CKEDITOR.styleCommand(k, { contentForms: g })); a.ui.addButton && a.ui.addButton(b, { label: d, command: e, toolbar: "basicstyles," + (f += 10) }) } }, c = { bold: ["strong", "b", ["span", function(a) { a = a.styles["font-weight"]; return "bold" == a || 700 <= +a }]], italic: ["em", "i", ["span", function(a) { return "italic" == a.styles["font-style"] }]], underline: ["u", ["span", function(a) { return "underline" == a.styles["text-decoration"] }]], strike: ["s", "strike", ["span", function(a) { return "line-through" == a.styles["text-decoration"] }]], subscript: ["sub"], superscript: ["sup"] }, e = a.config, m = a.lang.basicstyles; b("Bold", m.bold, "bold", e.coreStyles_bold); b("Italic", m.italic, "italic", e.coreStyles_italic); b("Underline", m.underline, "underline", e.coreStyles_underline); b("Strike", m.strike, "strike", e.coreStyles_strike); b("Subscript", m.subscript, "subscript", e.coreStyles_subscript); b("Superscript", m.superscript, "superscript", e.coreStyles_superscript); a.setKeystroke([ [CKEDITOR.CTRL + 66, "bold"], [CKEDITOR.CTRL + 73, "italic"], [CKEDITOR.CTRL + 85, "underline"] ]) } }), CKEDITOR.config.coreStyles_bold = { element: "strong", overrides: "b" }, CKEDITOR.config.coreStyles_italic = { element: "em", overrides: "i" }, CKEDITOR.config.coreStyles_underline = { element: "u" }, CKEDITOR.config.coreStyles_strike = { element: "s", overrides: "strike" }, CKEDITOR.config.coreStyles_subscript = { element: "sub" }, CKEDITOR.config.coreStyles_superscript = { element: "sup" }, function() { var a = { exec: function(a) { var b = a.getCommand("blockquote").state, c = a.getSelection(), e = c && c.getRanges()[0]; if (e) { var m = c.createBookmarks(); if (CKEDITOR.env.ie) { var l = m[0].startNode, d = m[0].endNode, h; if (l && "blockquote" == l.getParent().getName()) for (h = l; h = h.getNext();) if (h.type == CKEDITOR.NODE_ELEMENT && h.isBlockBoundary()) { l.move(h, !0); break } if (d && "blockquote" == d.getParent().getName()) for (h = d; h = h.getPrevious();) if (h.type == CKEDITOR.NODE_ELEMENT && h.isBlockBoundary()) { d.move(h); break } } var k = e.createIterator(); k.enlargeBr = a.config.enterMode != CKEDITOR.ENTER_BR; if (b == CKEDITOR.TRISTATE_OFF) { for (l = []; b = k.getNextParagraph();) l.push(b); 1 > l.length && (b = a.document.createElement(a.config.enterMode == CKEDITOR.ENTER_P ? "p" : "div"), d = m.shift(), e.insertNode(b), b.append(new CKEDITOR.dom.text("", a.document)), e.moveToBookmark(d), e.selectNodeContents(b), e.collapse(!0), d = e.createBookmark(), l.push(b), m.unshift(d)); h = l[0].getParent(); e = []; for (d = 0; d < l.length; d++) b = l[d], h = h.getCommonAncestor(b.getParent()); for (b = { table: 1, tbody: 1, tr: 1, ol: 1, ul: 1 }; b[h.getName()];) h = h.getParent(); for (d = null; 0 < l.length;) { for (b = l.shift(); !b.getParent().equals(h);) b = b.getParent(); b.equals(d) || e.push(b); d = b } for (; 0 < e.length;) if (b = e.shift(), "blockquote" == b.getName()) { for (d = new CKEDITOR.dom.documentFragment(a.document); b.getFirst();) d.append(b.getFirst().remove()), l.push(d.getLast()); d.replace(b) } else l.push(b); e = a.document.createElement("blockquote"); for (e.insertBefore(l[0]); 0 < l.length;) b = l.shift(), e.append(b) } else if (b == CKEDITOR.TRISTATE_ON) { d = []; for (h = {}; b = k.getNextParagraph();) { for (l = e = null; b.getParent();) { if ("blockquote" == b.getParent().getName()) { e = b.getParent(); l = b; break } b = b.getParent() } e && l && !l.getCustomData("blockquote_moveout") && (d.push(l), CKEDITOR.dom.element.setMarker(h, l, "blockquote_moveout", !0)) } CKEDITOR.dom.element.clearAllMarkers(h); b = []; l = []; for (h = {}; 0 < d.length;) k = d.shift(), e = k.getParent(), k.getPrevious() ? k.getNext() ? (k.breakParent(k.getParent()), l.push(k.getNext())) : k.remove().insertAfter(e) : k.remove().insertBefore(e), e.getCustomData("blockquote_processed") || (l.push(e), CKEDITOR.dom.element.setMarker(h, e, "blockquote_processed", !0)), b.push(k); CKEDITOR.dom.element.clearAllMarkers(h); for (d = l.length - 1; 0 <= d; d--) { e = l[d]; a: { h = e; for (var k = 0, g = h.getChildCount(), n = void 0; k < g && (n = h.getChild(k)); k++) if (n.type == CKEDITOR.NODE_ELEMENT && n.isBlockBoundary()) { h = !1; break a } h = !0 } h && e.remove() } if (a.config.enterMode == CKEDITOR.ENTER_BR) for (e = !0; b.length;) if (k = b.shift(), "div" == k.getName()) { d = new CKEDITOR.dom.documentFragment(a.document); !e || !k.getPrevious() || k.getPrevious().type == CKEDITOR.NODE_ELEMENT && k.getPrevious().isBlockBoundary() || d.append(a.document.createElement("br")); for (e = k.getNext() && !(k.getNext().type == CKEDITOR.NODE_ELEMENT && k.getNext().isBlockBoundary()); k.getFirst();) k.getFirst().remove().appendTo(d); e && d.append(a.document.createElement("br")); d.replace(k); e = !1 } } c.selectBookmarks(m); a.focus() } }, refresh: function(a, b) { this.setState(a.elementPath(b.block || b.blockLimit).contains("blockquote", 1) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF) }, context: "blockquote", allowedContent: "blockquote", requiredContent: "blockquote" }; CKEDITOR.plugins.add("blockquote", { init: function(f) { f.blockless || (f.addCommand("blockquote", a), f.ui.addButton && f.ui.addButton("Blockquote", { label: f.lang.blockquote.toolbar, command: "blockquote", toolbar: "blocks,10" })) } }) }(), "use strict", function() { function a(a, b, c) { b.type || (b.type = "auto"); if (c && !1 === a.fire("beforePaste", b) || !b.dataValue && b.dataTransfer.isEmpty()) return !1; b.dataValue || (b.dataValue = ""); if (CKEDITOR.env.gecko && "drop" == b.method && a.toolbox) a.once("afterPaste", function() { a.toolbox.focus() }); return a.fire("paste", b) } function f(b) { function c() { var a = b.editable(); if (CKEDITOR.plugins.clipboard.isCustomCopyCutSupported) { var d = function(a) { b.readOnly && "cut" == a.name || A.initPasteDataTransfer(a, b); a.data.preventDefault() }; a.on("copy", d); a.on("cut", d); a.on("cut", function() { b.readOnly || b.extractSelectedHtml() }, null, null, 999) } a.on(A.mainPasteEvent, function(a) { "beforepaste" == A.mainPasteEvent && C || y(a) }); "beforepaste" == A.mainPasteEvent && (a.on("paste", function(a) { F || (f(), a.data.preventDefault(), y(a), k("paste") || b.openDialog("paste")) }), a.on("contextmenu", h, null, null, 0), a.on("beforepaste", function(a) { !a.data || a.data.$.ctrlKey || a.data.$.shiftKey || h() }, null, null, 0)); a.on("beforecut", function() { !C && l(b) }); var e; a.attachListener(CKEDITOR.env.ie ? a : b.document.getDocumentElement(), "mouseup", function() { e = setTimeout(function() { D() }, 0) }); b.on("destroy", function() { clearTimeout(e) }); a.on("keyup", D) } function d(a) { return { type: a, canUndo: "cut" == a, startDisabled: !0, fakeKeystroke: "cut" == a ? CKEDITOR.CTRL + 88 : CKEDITOR.CTRL + 67, exec: function() { "cut" == this.type && l(); var a; var c = this.type; if (CKEDITOR.env.ie) a = k(c); else try { a = b.document.$.execCommand(c, !1, null) } catch (d) { a = !1 } a || b.showNotification(b.lang.clipboard[this.type + "Error"]); return a } } } function e() { return { canUndo: !1, async: !0, fakeKeystroke: CKEDITOR.CTRL + 86, exec: function(b, c) { var d = this, e = function(c, e) { c && a(b, c, !!e); b.fire("afterCommandExec", { name: "paste", command: d, returnValue: !!c }) }; "string" == typeof c ? e({ dataValue: c, method: "paste", dataTransfer: A.initPasteDataTransfer() }, 1) : b.getClipboardData(e) } } } function f() { F = 1; setTimeout(function() { F = 0 }, 100) } function h() { C = 1; setTimeout(function() { C = 0 }, 10) } function k(a) { var c = b.document, d = c.getBody(), e = !1, f = function() { e = !0 }; d.on(a, f); 7 < CKEDITOR.env.version ? c.$.execCommand(a) : c.$.selection.createRange().execCommand(a); d.removeListener(a, f); return e } function l() { if (CKEDITOR.env.ie && !CKEDITOR.env.quirks) { var a = b.getSelection(), c, d, e; a.getType() == CKEDITOR.SELECTION_ELEMENT && (c = a.getSelectedElement()) && (d = a.getRanges()[0], e = b.document.createText(""), e.insertBefore(c), d.setStartBefore(e), d.setEndAfter(c), a.selectRanges([d]), setTimeout(function() { c.getParent() && (e.remove(), a.selectElement(c)) }, 0)) } } function m(a, c) { var d = b.document, e = b.editable(), f = function(a) { a.cancel() }, h; if (!d.getById("cke_pastebin")) { var k = b.getSelection(), l = k.createBookmarks(); CKEDITOR.env.ie && k.root.fire("selectionchange"); var p = new CKEDITOR.dom.element(!CKEDITOR.env.webkit && !e.is("body") || CKEDITOR.env.ie ? "div" : "body", d); p.setAttributes({ id: "cke_pastebin", "data-cke-temp": "1" }); var n = 0, d = d.getWindow(); CKEDITOR.env.webkit ? (e.append(p), p.addClass("cke_editable"), e.is("body") || (n = "static" != e.getComputedStyle("position") ? e : CKEDITOR.dom.element.get(e.$.offsetParent), n = n.getDocumentPosition().y)) : e.getAscendant(CKEDITOR.env.ie ? "body" : "html", 1).append(p); p.setStyles({ position: "absolute", top: d.getScrollPosition().y - n + 10 + "px", width: "1px", height: Math.max(1, d.getViewPaneSize().height - 20) + "px", overflow: "hidden", margin: 0, padding: 0 }); CKEDITOR.env.safari && p.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", "text")); (n = p.getParent().isReadOnly()) ? (p.setOpacity(0), p.setAttribute("contenteditable", !0)) : p.setStyle("ltr" == b.config.contentsLangDirection ? "left" : "right", "-10000px"); b.on("selectionChange", f, null, null, 0); if (CKEDITOR.env.webkit || CKEDITOR.env.gecko) h = e.once("blur", f, null, null, -100); n && p.focus(); n = new CKEDITOR.dom.range(p); n.selectNodeContents(p); var r = n.select(); CKEDITOR.env.ie && (h = e.once("blur", function() { b.lockSelection(r) })); var v = CKEDITOR.document.getWindow().getScrollPosition().y; setTimeout(function() { CKEDITOR.env.webkit && (CKEDITOR.document.getBody().$.scrollTop = v); h && h.removeListener(); CKEDITOR.env.ie && e.focus(); k.selectBookmarks(l); p.remove(); var a; CKEDITOR.env.webkit && (a = p.getFirst()) && a.is && a.hasClass("Apple-style-span") && (p = a); b.removeListener("selectionChange", f); c(p.getHtml()) }, 0) } } function B() { if ("paste" == A.mainPasteEvent) return b.fire("beforePaste", { type: "auto", method: "paste" }), !1; b.focus(); f(); var a = b.focusManager; a.lock(); if (b.editable().fire(A.mainPasteEvent) && !k("paste")) return a.unlock(), !1; a.unlock(); return !0 } function t(a) { if ("wysiwyg" == b.mode) switch (a.data.keyCode) { case CKEDITOR.CTRL + 86: case CKEDITOR.SHIFT + 45: a = b.editable(); f(); "paste" == A.mainPasteEvent && a.fire("beforepaste"); break; case CKEDITOR.CTRL + 88: case CKEDITOR.SHIFT + 46: b.fire("saveSnapshot"), setTimeout(function() { b.fire("saveSnapshot") }, 50) } } function y(c) { var d = { type: "auto", method: "paste", dataTransfer: A.initPasteDataTransfer(c) }; d.dataTransfer.cacheData(); var e = !1 !== b.fire("beforePaste", d); e && A.canClipboardApiBeTrusted(d.dataTransfer, b) ? (c.data.preventDefault(), setTimeout(function() { a(b, d) }, 0)) : m(c, function(c) { d.dataValue = c.replace(/]+data-cke-bookmark[^<]*?<\/span>/ig, ""); e && a(b, d) }) } function D() { if ("wysiwyg" == b.mode) { var a = x("paste"); b.getCommand("cut").setState(x("cut")); b.getCommand("copy").setState(x("copy")); b.getCommand("paste").setState(a); b.fire("pasteState", a) } } function x(a) { if (G && a in { paste: 1, cut: 1 }) return CKEDITOR.TRISTATE_DISABLED; if ("paste" == a) return CKEDITOR.TRISTATE_OFF; a = b.getSelection(); var c = a.getRanges(); return a.getType() == CKEDITOR.SELECTION_NONE || 1 == c.length && c[0].collapsed ? CKEDITOR.TRISTATE_DISABLED : CKEDITOR.TRISTATE_OFF } var A = CKEDITOR.plugins.clipboard, C = 0, F = 0, G = 0; (function() { b.on("key", t); b.on("contentDom", c); b.on("selectionChange", function(a) { G = a.data.selection.getRanges()[0].checkReadOnly(); D() }); b.contextMenu && b.contextMenu.addListener(function(a, b) { G = b.getRanges()[0].checkReadOnly(); return { cut: x("cut"), copy: x("copy"), paste: x("paste") } }) })(); (function() { function a(c, d, e, f, h) { var k = b.lang.clipboard[d]; b.addCommand(d, e); b.ui.addButton && b.ui.addButton(c, { label: k, command: d, toolbar: "clipboard," + f }); b.addMenuItems && b.addMenuItem(d, { label: k, command: d, group: "clipboard", order: h }) } a("Cut", "cut", d("cut"), 10, 1); a("Copy", "copy", d("copy"), 20, 4); a("Paste", "paste", e(), 30, 8) })(); b.getClipboardData = function(a, c) { function d(a) { a.removeListener(); a.cancel(); c(a.data) } function e(a) { a.removeListener(); a.cancel(); l = !0; c({ type: k, dataValue: a.data.dataValue, dataTransfer: a.data.dataTransfer, method: "paste" }) } function f() { this.customTitle = a && a.title } var h = !1, k = "auto", l = !1; c || (c = a, a = null); b.on("paste", d, null, null, 0); b.on("beforePaste", function(a) { a.removeListener(); h = !0; k = a.data.type }, null, null, 1E3); !1 === B() && (b.removeListener("paste", d), h && b.fire("pasteDialog", f) ? (b.on("pasteDialogCommit", e), b.on("dialogHide", function(a) { a.removeListener(); a.data.removeListener("pasteDialogCommit", e); setTimeout(function() { l || c(null) }, 10) })) : c(null)) } } function b(a) { if (CKEDITOR.env.webkit) { if (!a.match(/^[^<]*$/g) && !a.match(/^(
<\/div>|
[^<]*<\/div>)*$/gi)) return "html" } else if (CKEDITOR.env.ie) { if (!a.match(/^([^<]|)*$/gi) && !a.match(/^(

([^<]|)*<\/p>|(\r\n))*$/gi)) return "html" } else if (CKEDITOR.env.gecko) { if (!a.match(/^([^<]|)*$/gi)) return "html" } else return "html"; return "htmlifiedtext" } function c(a, b) { function c(a) { return CKEDITOR.tools.repeat("\x3c/p\x3e\x3cp\x3e", ~~(a / 2)) + (1 == a % 2 ? "\x3cbr\x3e" : "") } b = b.replace(/\s+/g, " ").replace(/> +/gi, "\x3cbr\x3e"); b = b.replace(/<\/?[A-Z]+>/g, function(a) { return a.toLowerCase() }); if (b.match(/^[^<]$/)) return b; CKEDITOR.env.webkit && -1 < b.indexOf("\x3cdiv\x3e") && (b = b.replace(/^(

(
|)<\/div>)(?!$|(
(
|)<\/div>))/g, "\x3cbr\x3e").replace(/^(
(
|)<\/div>){2}(?!$)/g, "\x3cdiv\x3e\x3c/div\x3e"), b.match(/
(
|)<\/div>/) && (b = "\x3cp\x3e" + b.replace(/(
(
|)<\/div>)+/g, function(a) { return c(a.split("\x3c/div\x3e\x3cdiv\x3e").length + 1) }) + "\x3c/p\x3e"), b = b.replace(/<\/div>
/g, "\x3cbr\x3e"), b = b.replace(/<\/?div>/g, "")); CKEDITOR.env.gecko && a.enterMode != CKEDITOR.ENTER_BR && (CKEDITOR.env.gecko && (b = b.replace(/^

$/, "\x3cbr\x3e")), -1 < b.indexOf("\x3cbr\x3e\x3cbr\x3e") && (b = "\x3cp\x3e" + b.replace(/(
){2,}/g, function(a) { return c(a.length / 4) }) + "\x3c/p\x3e")); return l(a, b) } function e() { function a() { var b = {}, c; for (c in CKEDITOR.dtd) "$" != c.charAt(0) && "div" != c && "span" != c && (b[c] = 1); return b } var b = {}; return { get: function(c) { return "plain-text" == c ? b.plainText || (b.plainText = new CKEDITOR.filter("br")) : "semantic-content" == c ? ((c = b.semanticContent) || (c = new CKEDITOR.filter, c.allow({ $1: { elements: a(), attributes: !0, styles: !1, classes: !1 } }), c = b.semanticContent = c), c) : c ? new CKEDITOR.filter(c) : null } } } function m(a, b, c) { b = CKEDITOR.htmlParser.fragment.fromHtml(b); var d = new CKEDITOR.htmlParser.basicWriter; c.applyTo(b, !0, !1, a.activeEnterMode); b.writeHtml(d); return d.getHtml() } function l(a, b) { a.enterMode == CKEDITOR.ENTER_BR ? b = b.replace(/(<\/p>

)+/g, function(a) { return CKEDITOR.tools.repeat("\x3cbr\x3e", a.length / 7 * 2) }).replace(/<\/?p>/g, "") : a.enterMode == CKEDITOR.ENTER_DIV && (b = b.replace(/<(\/)?p>/g, "\x3c$1div\x3e")); return b } function d(a) { a.data.preventDefault(); a.data.$.dataTransfer.dropEffect = "none" } function h(b) { var c = CKEDITOR.plugins.clipboard; b.on("contentDom", function() { function d(c, e, f) { e.select(); a(b, { dataTransfer: f, method: "drop" }, 1); f.sourceEditor.fire("saveSnapshot"); f.sourceEditor.editable().extractHtmlFromRange(c); f.sourceEditor.getSelection().selectRanges([c]); f.sourceEditor.fire("saveSnapshot") } function e(d, f) { d.select(); a(b, { dataTransfer: f, method: "drop" }, 1); c.resetDragDataTransfer() } function f(a, c, d) { var e = { $: a.data.$, target: a.data.getTarget() }; c && (e.dragRange = c); d && (e.dropRange = d); !1 === b.fire(a.name, e) && a.data.preventDefault() } function h(a) { a.type != CKEDITOR.NODE_ELEMENT && (a = a.getParent()); return a.getChildCount() } var k = b.editable(), l = CKEDITOR.plugins.clipboard.getDropTarget(b), m = b.ui.space("top"), B = b.ui.space("bottom"); c.preventDefaultDropOnElement(m); c.preventDefaultDropOnElement(B); k.attachListener(l, "dragstart", f); k.attachListener(b, "dragstart", c.resetDragDataTransfer, c, null, 1); k.attachListener(b, "dragstart", function(a) { c.initDragDataTransfer(a, b) }, null, null, 2); k.attachListener(b, "dragstart", function() { var a = c.dragRange = b.getSelection().getRanges()[0]; CKEDITOR.env.ie && 10 > CKEDITOR.env.version && (c.dragStartContainerChildCount = a ? h(a.startContainer) : null, c.dragEndContainerChildCount = a ? h(a.endContainer) : null) }, null, null, 100); k.attachListener(l, "dragend", f); k.attachListener(b, "dragend", c.initDragDataTransfer, c, null, 1); k.attachListener(b, "dragend", c.resetDragDataTransfer, c, null, 100); k.attachListener(l, "dragover", function(a) { var b = a.data.getTarget(); b && b.is && b.is("html") ? a.data.preventDefault() : CKEDITOR.env.ie && CKEDITOR.plugins.clipboard.isFileApiSupported && a.data.$.dataTransfer.types.contains("Files") && a.data.preventDefault() }); k.attachListener(l, "drop", function(a) { if (!a.data.$.defaultPrevented) { a.data.preventDefault(); var d = a.data.getTarget(); if (!d.isReadOnly() || d.type == CKEDITOR.NODE_ELEMENT && d.is("html")) { var d = c.getRangeAtDropPosition(a, b), e = c.dragRange; d && f(a, e, d) } } }, null, null, 9999); k.attachListener(b, "drop", c.initDragDataTransfer, c, null, 1); k.attachListener(b, "drop", function(a) { if (a = a.data) { var f = a.dropRange, h = a.dragRange, k = a.dataTransfer; k.getTransferType(b) == CKEDITOR.DATA_TRANSFER_INTERNAL ? setTimeout(function() { c.internalDrop(h, f, k, b) }, 0) : k.getTransferType(b) == CKEDITOR.DATA_TRANSFER_CROSS_EDITORS ? d(h, f, k) : e(f, k) } }, null, null, 9999) }) } CKEDITOR.plugins.add("clipboard", { requires: "dialog", init: function(a) { var d, k = e(); a.config.forcePasteAsPlainText ? d = "plain-text" : a.config.pasteFilter ? d = a.config.pasteFilter : !CKEDITOR.env.webkit || "pasteFilter" in a.config || (d = "semantic-content"); a.pasteFilter = k.get(d); f(a); h(a); CKEDITOR.dialog.add("paste", CKEDITOR.getUrl(this.path + "dialogs/paste.js")); a.on("paste", function(b) { b.data.dataTransfer || (b.data.dataTransfer = new CKEDITOR.plugins.clipboard.dataTransfer); if (!b.data.dataValue) { var c = b.data.dataTransfer, d = c.getData("text/html"); if (d) b.data.dataValue = d, b.data.type = "html"; else if (d = c.getData("text/plain")) b.data.dataValue = a.editable().transformPlainTextToHtml(d), b.data.type = "text" } }, null, null, 1); a.on("paste", function(a) { var b = a.data.dataValue, c = CKEDITOR.dtd.$block; - 1 < b.indexOf("Apple-") && (b = b.replace(/ <\/span>/gi, " "), "html" != a.data.type && (b = b.replace(/]*>([^<]*)<\/span>/gi, function(a, b) { return b.replace(/\t/g, "\x26nbsp;\x26nbsp; \x26nbsp;") })), -1 < b.indexOf('\x3cbr class\x3d"Apple-interchange-newline"\x3e') && (a.data.startsWithEOL = 1, a.data.preSniffing = "html", b = b.replace(/
/, "")), b = b.replace(/(<[^>]+) class="Apple-[^"]*"/gi, "$1")); if (b.match(/^<[^<]+cke_(editable|contents)/i)) { var d, e, f = new CKEDITOR.dom.element("div"); for (f.setHtml(b); 1 == f.getChildCount() && (d = f.getFirst()) && d.type == CKEDITOR.NODE_ELEMENT && (d.hasClass("cke_editable") || d.hasClass("cke_contents"));) f = e = d; e && (b = e.getHtml().replace(/
$/i, "")) } CKEDITOR.env.ie ? b = b.replace(/^ (?: |\r\n)?<(\w+)/g, function(b, d) { return d.toLowerCase() in c ? (a.data.preSniffing = "html", "\x3c" + d) : b }) : CKEDITOR.env.webkit ? b = b.replace(/<\/(\w+)>


<\/div>$/, function(b, d) { return d in c ? (a.data.endsWithEOL = 1, "\x3c/" + d + "\x3e") : b }) : CKEDITOR.env.gecko && (b = b.replace(/(\s)
$/, "$1")); a.data.dataValue = b }, null, null, 3); a.on("paste", function(d) { d = d.data; var e = d.type, f = d.dataValue, h, l = a.config.clipboard_defaultContentType || "html", n = d.dataTransfer.getTransferType(a); h = "html" == e || "html" == d.preSniffing ? "html" : b(f); "htmlifiedtext" == h && (f = c(a.config, f)); "text" == e && "html" == h ? f = m(a, f, k.get("plain-text")) : n == CKEDITOR.DATA_TRANSFER_EXTERNAL && a.pasteFilter && !d.dontFilter && (f = m(a, f, a.pasteFilter)); d.startsWithEOL && (f = '\x3cbr data-cke-eol\x3d"1"\x3e' + f); d.endsWithEOL && (f += '\x3cbr data-cke-eol\x3d"1"\x3e'); "auto" == e && (e = "html" == h || "html" == l ? "html" : "text"); d.type = e; d.dataValue = f; delete d.preSniffing; delete d.startsWithEOL; delete d.endsWithEOL }, null, null, 6); a.on("paste", function(b) { b = b.data; b.dataValue && (a.insertHtml(b.dataValue, b.type, b.range), setTimeout(function() { a.fire("afterPaste") }, 0)) }, null, null, 1E3); a.on("pasteDialog", function(b) { setTimeout(function() { a.openDialog("paste", b.data) }, 0) }) } }); CKEDITOR.plugins.clipboard = { isCustomCopyCutSupported: !CKEDITOR.env.ie && !CKEDITOR.env.iOS, isCustomDataTypesSupported: !CKEDITOR.env.ie, isFileApiSupported: !CKEDITOR.env.ie || 9 < CKEDITOR.env.version, mainPasteEvent: CKEDITOR.env.ie && !CKEDITOR.env.edge ? "beforepaste" : "paste", canClipboardApiBeTrusted: function(a, b) { return a.getTransferType(b) != CKEDITOR.DATA_TRANSFER_EXTERNAL || CKEDITOR.env.chrome && !a.isEmpty() || CKEDITOR.env.gecko && (a.getData("text/html") || a.getFilesCount()) ? !0 : !1 }, getDropTarget: function(a) { var b = a.editable(); return CKEDITOR.env.ie && 9 > CKEDITOR.env.version || b.isInline() ? b : a.document }, fixSplitNodesAfterDrop: function(a, b, c, d) { function e(a, c, d) { var f = a; f.type == CKEDITOR.NODE_TEXT && (f = a.getParent()); if (f.equals(c) && d != c.getChildCount()) return a = b.startContainer.getChild(b.startOffset - 1), c = b.startContainer.getChild(b.startOffset), a && a.type == CKEDITOR.NODE_TEXT && c && c.type == CKEDITOR.NODE_TEXT && (d = a.getLength(), a.setText(a.getText() + c.getText()), c.remove(), b.setStart(a, d), b.collapse(!0)), !0 } var f = b.startContainer; "number" == typeof d && "number" == typeof c && f.type == CKEDITOR.NODE_ELEMENT && (e(a.startContainer, f, c) || e(a.endContainer, f, d)) }, isDropRangeAffectedByDragRange: function(a, b) { var c = b.startContainer, d = b.endOffset; return a.endContainer.equals(c) && a.endOffset <= d || a.startContainer.getParent().equals(c) && a.startContainer.getIndex() < d || a.endContainer.getParent().equals(c) && a.endContainer.getIndex() < d ? !0 : !1 }, internalDrop: function(b, c, d, e) { var f = CKEDITOR.plugins.clipboard, h = e.editable(), k, l; e.fire("saveSnapshot"); e.fire("lockSnapshot", { dontUpdate: 1 }); CKEDITOR.env.ie && 10 > CKEDITOR.env.version && this.fixSplitNodesAfterDrop(b, c, f.dragStartContainerChildCount, f.dragEndContainerChildCount); (l = this.isDropRangeAffectedByDragRange(b, c)) || (k = b.createBookmark(!1)); f = c.clone().createBookmark(!1); l && (k = b.createBookmark(!1)); b = k.startNode; c = k.endNode; l = f.startNode; c && b.getPosition(l) & CKEDITOR.POSITION_PRECEDING && c.getPosition(l) & CKEDITOR.POSITION_FOLLOWING && l.insertBefore(b); b = e.createRange(); b.moveToBookmark(k); h.extractHtmlFromRange(b, 1); c = e.createRange(); c.moveToBookmark(f); a(e, { dataTransfer: d, method: "drop", range: c }, 1); e.fire("unlockSnapshot") }, getRangeAtDropPosition: function(a, b) { var c = a.data.$, d = c.clientX, e = c.clientY, f = b.getSelection(!0).getRanges()[0], h = b.createRange(); if (a.data.testRange) return a.data.testRange; if (document.caretRangeFromPoint) c = b.document.$.caretRangeFromPoint(d, e), h.setStart(CKEDITOR.dom.node(c.startContainer), c.startOffset), h.collapse(!0); else if (c.rangeParent) h.setStart(CKEDITOR.dom.node(c.rangeParent), c.rangeOffset), h.collapse(!0); else { if (CKEDITOR.env.ie && 8 < CKEDITOR.env.version && f && b.editable().hasFocus) return f; if (document.body.createTextRange) { b.focus(); c = b.document.getBody().$.createTextRange(); try { for (var k = !1, l = 0; 20 > l && !k; l++) { if (!k) try { c.moveToPoint(d, e - l), k = !0 } catch (m) {} if (!k) try { c.moveToPoint(d, e + l), k = !0 } catch (t) {} } if (k) { var y = "cke-temp-" + (new Date).getTime(); c.pasteHTML('\x3cspan id\x3d"' + y + '"\x3e​\x3c/span\x3e'); var D = b.document.getById(y); h.moveToPosition(D, CKEDITOR.POSITION_BEFORE_START); D.remove() } else { var x = b.document.$.elementFromPoint(d, e), A = new CKEDITOR.dom.element(x), C; if (A.equals(b.editable()) || "html" == A.getName()) return f && f.startContainer && !f.startContainer.equals(b.editable()) ? f : null; C = A.getClientRect(); d < C.left ? h.setStartAt(A, CKEDITOR.POSITION_AFTER_START) : h.setStartAt(A, CKEDITOR.POSITION_BEFORE_END); h.collapse(!0) } } catch (F) { return null } } else return null } return h }, initDragDataTransfer: function(a, b) { var c = a.data.$ ? a.data.$.dataTransfer : null, d = new this.dataTransfer(c, b); c ? this.dragData && d.id == this.dragData.id ? d = this.dragData : this.dragData = d : this.dragData ? d = this.dragData : this.dragData = d; a.data.dataTransfer = d }, resetDragDataTransfer: function() { this.dragData = null }, initPasteDataTransfer: function(a, b) { if (this.isCustomCopyCutSupported) { if (a && a.data && a.data.$) { var c = new this.dataTransfer(a.data.$.clipboardData, b); this.copyCutData && c.id == this.copyCutData.id ? (c = this.copyCutData, c.$ = a.data.$.clipboardData) : this.copyCutData = c; return c } return new this.dataTransfer(null, b) } return new this.dataTransfer(CKEDITOR.env.edge && a && a.data.$ && a.data.$.clipboardData || null, b) }, preventDefaultDropOnElement: function(a) { a && a.on("dragover", d) } }; var k = CKEDITOR.plugins.clipboard.isCustomDataTypesSupported ? "cke/id" : "Text"; CKEDITOR.plugins.clipboard.dataTransfer = function(a, b) { a && (this.$ = a); this._ = { metaRegExp: /^/i, bodyRegExp: /([\s\S]*)<\/body>/i, fragmentRegExp: /\x3c!--(?:Start|End)Fragment--\x3e/g, data: {}, files: [], normalizeType: function(a) { a = a.toLowerCase(); return "text" == a || "text/plain" == a ? "Text" : "url" == a ? "URL" : a } }; this.id = this.getData(k); this.id || (this.id = "Text" == k ? "" : "cke-" + CKEDITOR.tools.getUniqueId()); if ("Text" != k) try { this.$.setData(k, this.id) } catch (c) {} b && (this.sourceEditor = b, this.setData("text/html", b.getSelectedHtml(1)), "Text" == k || this.getData("text/plain") || this.setData("text/plain", b.getSelection().getSelectedText())) }; CKEDITOR.DATA_TRANSFER_INTERNAL = 1; CKEDITOR.DATA_TRANSFER_CROSS_EDITORS = 2; CKEDITOR.DATA_TRANSFER_EXTERNAL = 3; CKEDITOR.plugins.clipboard.dataTransfer.prototype = { getData: function(a) { a = this._.normalizeType(a); var b = this._.data[a]; if (void 0 === b || null === b || "" === b) try { b = this.$.getData(a) } catch (c) {} if (void 0 === b || null === b || "" === b) b = ""; "text/html" == a ? (b = b.replace(this._.metaRegExp, ""), (a = this._.bodyRegExp.exec(b)) && a.length && (b = a[1], b = b.replace(this._.fragmentRegExp, ""))) : "Text" == a && CKEDITOR.env.gecko && this.getFilesCount() && "file://" == b.substring(0, 7) && (b = ""); return b }, setData: function(a, b) { a = this._.normalizeType(a); this._.data[a] = b; if (CKEDITOR.plugins.clipboard.isCustomDataTypesSupported || "URL" == a || "Text" == a) { "Text" == k && "Text" == a && (this.id = b); try { this.$.setData(a, b) } catch (c) {} } }, getTransferType: function(a) { return this.sourceEditor ? this.sourceEditor == a ? CKEDITOR.DATA_TRANSFER_INTERNAL : CKEDITOR.DATA_TRANSFER_CROSS_EDITORS : CKEDITOR.DATA_TRANSFER_EXTERNAL }, cacheData: function() { function a(c) { c = b._.normalizeType(c); var d = b.getData(c); d && (b._.data[c] = d) } if (this.$) { var b = this, c, d; if (CKEDITOR.plugins.clipboard.isCustomDataTypesSupported) { if (this.$.types) for (c = 0; c < this.$.types.length; c++) a(this.$.types[c]) } else a("Text"), a("URL"); d = this._getImageFromClipboard(); if (this.$ && this.$.files || d) { this._.files = []; if (this.$.files && this.$.files.length) for (c = 0; c < this.$.files.length; c++) this._.files.push(this.$.files[c]); 0 === this._.files.length && d && this._.files.push(d) } } }, getFilesCount: function() { return this._.files.length ? this._.files.length : this.$ && this.$.files && this.$.files.length ? this.$.files.length : this._getImageFromClipboard() ? 1 : 0 }, getFile: function(a) { return this._.files.length ? this._.files[a] : this.$ && this.$.files && this.$.files.length ? this.$.files[a] : 0 === a ? this._getImageFromClipboard() : void 0 }, isEmpty: function() { var a = {}, b; if (this.getFilesCount()) return !1; for (b in this._.data) a[b] = 1; if (this.$) if (CKEDITOR.plugins.clipboard.isCustomDataTypesSupported) { if (this.$.types) for (var c = 0; c < this.$.types.length; c++) a[this.$.types[c]] = 1 } else a.Text = 1, a.URL = 1; "Text" != k && (a[k] = 0); for (b in a) if (a[b] && "" !== this.getData(b)) return !1; return !0 }, _getImageFromClipboard: function() { var a; if (this.$ && this.$.items && this.$.items[0]) try { if ((a = this.$.items[0].getAsFile()) && a.type) return a } catch (b) {} } } }(), function() { CKEDITOR.plugins.add("panel", { beforeInit: function(a) { a.ui.addHandler(CKEDITOR.UI_PANEL, CKEDITOR.ui.panel.handler) } }); CKEDITOR.UI_PANEL = "panel"; CKEDITOR.ui.panel = function(a, b) { b && CKEDITOR.tools.extend(this, b); CKEDITOR.tools.extend(this, { className: "", css: [] }); this.id = CKEDITOR.tools.getNextId(); this.document = a; this.isFramed = this.forceIFrame || this.css.length; this._ = { blocks: {} } }; CKEDITOR.ui.panel.handler = { create: function(a) { return new CKEDITOR.ui.panel(a) } }; var a = CKEDITOR.addTemplate("panel", '\x3cdiv lang\x3d"{langCode}" id\x3d"{id}" dir\x3d{dir} class\x3d"cke cke_reset_all {editorId} cke_panel cke_panel {cls} cke_{dir}" style\x3d"z-index:{z-index}" role\x3d"presentation"\x3e{frame}\x3c/div\x3e'), f = CKEDITOR.addTemplate("panel-frame", '\x3ciframe id\x3d"{id}" class\x3d"cke_panel_frame" role\x3d"presentation" frameborder\x3d"0" src\x3d"{src}"\x3e\x3c/iframe\x3e'), b = CKEDITOR.addTemplate("panel-frame-inner", '\x3c!DOCTYPE html\x3e\x3chtml class\x3d"cke_panel_container {env}" dir\x3d"{dir}" lang\x3d"{langCode}"\x3e\x3chead\x3e{css}\x3c/head\x3e\x3cbody class\x3d"cke_{dir}" style\x3d"margin:0;padding:0" onload\x3d"{onload}"\x3e\x3c/body\x3e\x3c/html\x3e'); CKEDITOR.ui.panel.prototype = { render: function(c, e) { this.getHolderElement = function() { var a = this._.holder; if (!a) { if (this.isFramed) { var a = this.document.getById(this.id + "_frame"), c = a.getParent(), a = a.getFrameDocument(); CKEDITOR.env.iOS && c.setStyles({ overflow: "scroll", "-webkit-overflow-scrolling": "touch" }); c = CKEDITOR.tools.addFunction(CKEDITOR.tools.bind(function() { this.isLoaded = !0; if (this.onLoad) this.onLoad() }, this)); a.write(b.output(CKEDITOR.tools.extend({ css: CKEDITOR.tools.buildStyleHtml(this.css), onload: "window.parent.CKEDITOR.tools.callFunction(" + c + ");" }, m))); a.getWindow().$.CKEDITOR = CKEDITOR; a.on("keydown", function(a) { var b = a.data.getKeystroke(), c = this.document.getById(this.id).getAttribute("dir"); this._.onKeyDown && !1 === this._.onKeyDown(b) ? a.data.preventDefault() : (27 == b || b == ("rtl" == c ? 39 : 37)) && this.onEscape && !1 === this.onEscape(b) && a.data.preventDefault() }, this); a = a.getBody(); a.unselectable(); CKEDITOR.env.air && CKEDITOR.tools.callFunction(c) } else a = this.document.getById(this.id); this._.holder = a } return a }; var m = { editorId: c.id, id: this.id, langCode: c.langCode, dir: c.lang.dir, cls: this.className, frame: "", env: CKEDITOR.env.cssClass, "z-index": c.config.baseFloatZIndex + 1 }; if (this.isFramed) { var l = CKEDITOR.env.air ? "javascript:void(0)" : CKEDITOR.env.ie ? "javascript:void(function(){" + encodeURIComponent("document.open();(" + CKEDITOR.tools.fixDomain + ")();document.close();") + "}())" : ""; m.frame = f.output({ id: this.id + "_frame", src: l }) } l = a.output(m); e && e.push(l); return l }, addBlock: function(a, b) { b = this._.blocks[a] = b instanceof CKEDITOR.ui.panel.block ? b : new CKEDITOR.ui.panel.block(this.getHolderElement(), b); this._.currentBlock || this.showBlock(a); return b }, getBlock: function(a) { return this._.blocks[a] }, showBlock: function(a) { a = this._.blocks[a]; var b = this._.currentBlock, f = !this.forceIFrame || CKEDITOR.env.ie ? this._.holder : this.document.getById(this.id + "_frame"); b && b.hide(); this._.currentBlock = a; CKEDITOR.fire("ariaWidget", f); a._.focusIndex = -1; this._.onKeyDown = a.onKeyDown && CKEDITOR.tools.bind(a.onKeyDown, a); a.show(); return a }, destroy: function() { this.element && this.element.remove() } }; CKEDITOR.ui.panel.block = CKEDITOR.tools.createClass({ $: function(a, b) { this.element = a.append(a.getDocument().createElement("div", { attributes: { tabindex: -1, "class": "cke_panel_block" }, styles: { display: "none" } })); b && CKEDITOR.tools.extend(this, b); this.element.setAttributes({ role: this.attributes.role || "presentation", "aria-label": this.attributes["aria-label"], title: this.attributes.title || this.attributes["aria-label"] }); this.keys = {}; this._.focusIndex = -1; this.element.disableContextMenu() }, _: { markItem: function(a) { -1 != a && (a = this.element.getElementsByTag("a").getItem(this._.focusIndex = a), CKEDITOR.env.webkit && a.getDocument().getWindow().focus(), a.focus(), this.onMark && this.onMark(a)) } }, proto: { show: function() { this.element.setStyle("display", "") }, hide: function() { this.onHide && !0 === this.onHide.call(this) || this.element.setStyle("display", "none") }, onKeyDown: function(a, b) { var f = this.keys[a]; switch (f) { case "next": for (var l = this._.focusIndex, f = this.element.getElementsByTag("a"), d; d = f.getItem(++l);) if (d.getAttribute("_cke_focus") && d.$.offsetWidth) { this._.focusIndex = l; d.focus(); break } return d || b ? !1 : (this._.focusIndex = -1, this.onKeyDown(a, 1)); case "prev": l = this._.focusIndex; for (f = this.element.getElementsByTag("a"); 0 < l && (d = f.getItem(--l));) { if (d.getAttribute("_cke_focus") && d.$.offsetWidth) { this._.focusIndex = l; d.focus(); break } d = null } return d || b ? !1 : (this._.focusIndex = f.count(), this.onKeyDown(a, 1)); case "click": case "mouseup": return l = this._.focusIndex, (d = 0 <= l && this.element.getElementsByTag("a").getItem(l)) && (d.$[f] ? d.$[f]() : d.$["on" + f]()), !1 } return !0 } } }) }(), CKEDITOR.plugins.add("floatpanel", { requires: "panel" }), function() { function a(a, c, e, m, l) { l = CKEDITOR.tools.genKey(c.getUniqueId(), e.getUniqueId(), a.lang.dir, a.uiColor || "", m.css || "", l || ""); var d = f[l]; d || (d = f[l] = new CKEDITOR.ui.panel(c, m), d.element = e.append(CKEDITOR.dom.element.createFromHtml(d.render(a), c)), d.element.setStyles({ display: "none", position: "absolute" })); return d } var f = {}; CKEDITOR.ui.floatPanel = CKEDITOR.tools.createClass({ $: function(b, c, e, f) { function l() { g.hide() } e.forceIFrame = 1; e.toolbarRelated && b.elementMode == CKEDITOR.ELEMENT_MODE_INLINE && (c = CKEDITOR.document.getById("cke_" + b.name)); var d = c.getDocument(); f = a(b, d, c, e, f || 0); var h = f.element, k = h.getFirst(), g = this; h.disableContextMenu(); this.element = h; this._ = { editor: b, panel: f, parentElement: c, definition: e, document: d, iframe: k, children: [], dir: b.lang.dir, showBlockParams: null }; b.on("mode", l); b.on("resize", l); d.getWindow().on("resize", function() { this.reposition() }, this) }, proto: { addBlock: function(a, c) { return this._.panel.addBlock(a, c) }, addListBlock: function(a, c) { return this._.panel.addListBlock(a, c) }, getBlock: function(a) { return this._.panel.getBlock(a) }, showBlock: function(a, c, e, f, l, d) { var h = this._.panel, k = h.showBlock(a); this._.showBlockParams = [].slice.call(arguments); this.allowBlur(!1); var g = this._.editor.editable(); this._.returnFocus = g.hasFocus ? g : new CKEDITOR.dom.element(CKEDITOR.document.$.activeElement); this._.hideTimeout = 0; var n = this.element, g = this._.iframe, g = CKEDITOR.env.ie && !CKEDITOR.env.edge ? g : new CKEDITOR.dom.window(g.$.contentWindow), w = n.getDocument(), q = this._.parentElement.getPositionedAncestor(), v = c.getDocumentPosition(w), w = q ? q.getDocumentPosition(w) : { x: 0, y: 0 }, u = "rtl" == this._.dir, r = v.x + (f || 0) - w.x, p = v.y + (l || 0) - w.y; !u || 1 != e && 4 != e ? u || 2 != e && 3 != e || (r += c.$.offsetWidth - 1) : r += c.$.offsetWidth; if (3 == e || 4 == e) p += c.$.offsetHeight - 1; this._.panel._.offsetParentId = c.getId(); n.setStyles({ top: p + "px", left: 0, display: "" }); n.setOpacity(0); n.getFirst().removeStyle("width"); this._.editor.focusManager.add(g); this._.blurSet || (CKEDITOR.event.useCapture = !0, g.on("blur", function(a) { function b() { delete this._.returnFocus; this.hide() } this.allowBlur() && a.data.getPhase() == CKEDITOR.EVENT_PHASE_AT_TARGET && this.visible && !this._.activeChild && (CKEDITOR.env.iOS ? this._.hideTimeout || (this._.hideTimeout = CKEDITOR.tools.setTimeout(b, 0, this)) : b.call(this)) }, this), g.on("focus", function() { this._.focused = !0; this.hideChild(); this.allowBlur(!0) }, this), CKEDITOR.env.iOS && (g.on("touchstart", function() { clearTimeout(this._.hideTimeout) }, this), g.on("touchend", function() { this._.hideTimeout = 0; this.focus() }, this)), CKEDITOR.event.useCapture = !1, this._.blurSet = 1); h.onEscape = CKEDITOR.tools.bind(function(a) { if (this.onEscape && !1 === this.onEscape(a)) return !1 }, this); CKEDITOR.tools.setTimeout(function() { var a = CKEDITOR.tools.bind(function() { var a = n; a.removeStyle("width"); if (k.autoSize) { var b = k.element.getDocument(), b = (CKEDITOR.env.webkit || CKEDITOR.env.edge ? k.element : b.getBody()).$.scrollWidth; CKEDITOR.env.ie && CKEDITOR.env.quirks && 0 < b && (b += (a.$.offsetWidth || 0) - (a.$.clientWidth || 0) + 3); a.setStyle("width", b + 10 + "px"); b = k.element.$.scrollHeight; CKEDITOR.env.ie && CKEDITOR.env.quirks && 0 < b && (b += (a.$.offsetHeight || 0) - (a.$.clientHeight || 0) + 3); a.setStyle("height", b + "px"); h._.currentBlock.element.setStyle("display", "none").removeStyle("display") } else a.removeStyle("height"); u && (r -= n.$.offsetWidth); n.setStyle("left", r + "px"); var b = h.element.getWindow(), a = n.$.getBoundingClientRect(), b = b.getViewPaneSize(), c = a.width || a.right - a.left, e = a.height || a.bottom - a.top, f = u ? a.right : b.width - a.left, g = u ? b.width - a.right : a.left; u ? f < c && (r = g > c ? r + c : b.width > c ? r - a.left : r - a.right + b.width) : f < c && (r = g > c ? r - c : b.width > c ? r - a.right + b.width : r - a.left); c = a.top; b.height - a.top < e && (p = c > e ? p - e : b.height > e ? p - a.bottom + b.height : p - a.top); CKEDITOR.env.ie && (b = a = new CKEDITOR.dom.element(n.$.offsetParent), "html" == b.getName() && (b = b.getDocument().getBody()), "rtl" == b.getComputedStyle("direction") && (r = CKEDITOR.env.ie8Compat ? r - 2 * n.getDocument().getDocumentElement().$.scrollLeft : r - (a.$.scrollWidth - a.$.clientWidth))); var a = n.getFirst(), l; (l = a.getCustomData("activePanel")) && l.onHide && l.onHide.call(this, 1); a.setCustomData("activePanel", this); n.setStyles({ top: p + "px", left: r + "px" }); n.setOpacity(1); d && d() }, this); h.isLoaded ? a() : h.onLoad = a; CKEDITOR.tools.setTimeout(function() { var a = CKEDITOR.env.webkit && CKEDITOR.document.getWindow().getScrollPosition().y; this.focus(); k.element.focus(); CKEDITOR.env.webkit && (CKEDITOR.document.getBody().$.scrollTop = a); this.allowBlur(!0); this._.editor.fire("panelShow", this) }, 0, this) }, CKEDITOR.env.air ? 200 : 0, this); this.visible = 1; this.onShow && this.onShow.call(this) }, reposition: function() { var a = this._.showBlockParams; this.visible && this._.showBlockParams && (this.hide(), this.showBlock.apply(this, a)) }, focus: function() { if (CKEDITOR.env.webkit) { var a = CKEDITOR.document.getActive(); a && !a.equals(this._.iframe) && a.$.blur() }(this._.lastFocused || this._.iframe.getFrameDocument().getWindow()).focus() }, blur: function() { var a = this._.iframe.getFrameDocument().getActive(); a && a.is("a") && (this._.lastFocused = a) }, hide: function(a) { if (this.visible && (!this.onHide || !0 !== this.onHide.call(this))) { this.hideChild(); CKEDITOR.env.gecko && this._.iframe.getFrameDocument().$.activeElement.blur(); this.element.setStyle("display", "none"); this.visible = 0; this.element.getFirst().removeCustomData("activePanel"); if (a = a && this._.returnFocus) CKEDITOR.env.webkit && a.type && a.getWindow().$.focus(), a.focus(); delete this._.lastFocused; this._.showBlockParams = null; this._.editor.fire("panelHide", this) } }, allowBlur: function(a) { var c = this._.panel; void 0 !== a && (c.allowBlur = a); return c.allowBlur }, showAsChild: function(a, c, e, f, l, d) { if (this._.activeChild != a || a._.panel._.offsetParentId != e.getId()) this.hideChild(), a.onHide = CKEDITOR.tools.bind(function() { CKEDITOR.tools.setTimeout(function() { this._.focused || this.hide() }, 0, this) }, this), this._.activeChild = a, this._.focused = !1, a.showBlock(c, e, f, l, d), this.blur(), (CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat) && setTimeout(function() { a.element.getChild(0).$.style.cssText += "" }, 100) }, hideChild: function(a) { var c = this._.activeChild; c && (delete c.onHide, delete this._.activeChild, c.hide(), a && this.focus()) } } }); CKEDITOR.on("instanceDestroyed", function() { var a = CKEDITOR.tools.isEmpty(CKEDITOR.instances), c; for (c in f) { var e = f[c]; a ? e.destroy() : e.element.hide() } a && (f = {}) }) }(), CKEDITOR.plugins.add("menu", { requires: "floatpanel", beforeInit: function(a) { for (var f = a.config.menu_groups.split(","), b = a._.menuGroups = {}, c = a._.menuItems = {}, e = 0; e < f.length; e++) b[f[e]] = e + 1; a.addMenuGroup = function(a, c) { b[a] = c || 100 }; a.addMenuItem = function(a, e) { b[e.group] && (c[a] = new CKEDITOR.menuItem(this, a, e)) }; a.addMenuItems = function(a) { for (var b in a) this.addMenuItem(b, a[b]) }; a.getMenuItem = function(a) { return c[a] }; a.removeMenuItem = function(a) { delete c[a] } } }), function() { function a(a) { a.sort(function(a, b) { return a.group < b.group ? -1 : a.group > b.group ? 1 : a.order < b.order ? -1 : a.order > b.order ? 1 : 0 }) } var f = '\x3cspan class\x3d"cke_menuitem"\x3e\x3ca id\x3d"{id}" class\x3d"cke_menubutton cke_menubutton__{name} cke_menubutton_{state} {cls}" href\x3d"{href}" title\x3d"{title}" tabindex\x3d"-1" _cke_focus\x3d1 hidefocus\x3d"true" role\x3d"{role}" aria-label\x3d"{label}" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasPopup}" aria-disabled\x3d"{disabled}" {ariaChecked}'; CKEDITOR.env.gecko && CKEDITOR.env.mac && (f += ' onkeypress\x3d"return false;"'); CKEDITOR.env.gecko && (f += ' onblur\x3d"this.style.cssText \x3d this.style.cssText;"'); var f = f + (' onmouseover\x3d"CKEDITOR.tools.callFunction({hoverFn},{index});" onmouseout\x3d"CKEDITOR.tools.callFunction({moveOutFn},{index});" ' + (CKEDITOR.env.ie ? 'onclick\x3d"return false;" onmouseup' : "onclick") + '\x3d"CKEDITOR.tools.callFunction({clickFn},{index}); return false;"\x3e'), b = CKEDITOR.addTemplate("menuItem", f + '\x3cspan class\x3d"cke_menubutton_inner"\x3e\x3cspan class\x3d"cke_menubutton_icon"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{iconStyle}"\x3e\x3c/span\x3e\x3c/span\x3e\x3cspan class\x3d"cke_menubutton_label"\x3e{label}\x3c/span\x3e{shortcutHtml}{arrowHtml}\x3c/span\x3e\x3c/a\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_voice_label" aria-hidden\x3d"false"\x3e{ariaShortcut}\x3c/span\x3e\x3c/span\x3e'), c = CKEDITOR.addTemplate("menuArrow", '\x3cspan class\x3d"cke_menuarrow"\x3e\x3cspan\x3e{label}\x3c/span\x3e\x3c/span\x3e'), e = CKEDITOR.addTemplate("menuShortcut", '\x3cspan class\x3d"cke_menubutton_label cke_menubutton_shortcut"\x3e{shortcut}\x3c/span\x3e'); CKEDITOR.menu = CKEDITOR.tools.createClass({ $: function(a, b) { b = this._.definition = b || {}; this.id = CKEDITOR.tools.getNextId(); this.editor = a; this.items = []; this._.listeners = []; this._.level = b.level || 1; var c = CKEDITOR.tools.extend({}, b.panel, { css: [CKEDITOR.skin.getPath("editor")], level: this._.level - 1, block: {} }), e = c.block.attributes = c.attributes || {}; !e.role && (e.role = "menu"); this._.panelDefinition = c }, _: { onShow: function() { var a = this.editor.getSelection(), b = a && a.getStartElement(), c = this.editor.elementPath(), e = this._.listeners; this.removeAll(); for (var f = 0; f < e.length; f++) { var g = e[f](b, a, c); if (g) for (var n in g) { var w = this.editor.getMenuItem(n); !w || w.command && !this.editor.getCommand(w.command).state || (w.state = g[n], this.add(w)) } } }, onClick: function(a) { this.hide(); if (a.onClick) a.onClick(); else a.command && this.editor.execCommand(a.command) }, onEscape: function(a) { var b = this.parent; b ? b._.panel.hideChild(1) : 27 == a && this.hide(1); return !1 }, onHide: function() { this.onHide && this.onHide() }, showSubMenu: function(a) { var b = this._.subMenu, c = this.items[a]; if (c = c.getItems && c.getItems()) { b ? b.removeAll() : (b = this._.subMenu = new CKEDITOR.menu(this.editor, CKEDITOR.tools.extend({}, this._.definition, { level: this._.level + 1 }, !0)), b.parent = this, b._.onClick = CKEDITOR.tools.bind(this._.onClick, this)); for (var e in c) { var f = this.editor.getMenuItem(e); f && (f.state = c[e], b.add(f)) } var g = this._.panel.getBlock(this.id).element.getDocument().getById(this.id + String(a)); setTimeout(function() { b.show(g, 2) }, 0) } else this._.panel.hideChild(1) } }, proto: { add: function(a) { a.order || (a.order = this.items.length); this.items.push(a) }, removeAll: function() { this.items = [] }, show: function(b, c, d, e) { if (!this.parent && (this._.onShow(), !this.items.length)) return; c = c || ("rtl" == this.editor.lang.dir ? 2 : 1); var f = this.items, g = this.editor, n = this._.panel, w = this._.element; if (!n) { n = this._.panel = new CKEDITOR.ui.floatPanel(this.editor, CKEDITOR.document.getBody(), this._.panelDefinition, this._.level); n.onEscape = CKEDITOR.tools.bind(function(a) { if (!1 === this._.onEscape(a)) return !1 }, this); n.onShow = function() { n._.panel.getHolderElement().getParent().addClass("cke").addClass("cke_reset_all") }; n.onHide = CKEDITOR.tools.bind(function() { this._.onHide && this._.onHide() }, this); w = n.addBlock(this.id, this._.panelDefinition.block); w.autoSize = !0; var q = w.keys; q[40] = "next"; q[9] = "next"; q[38] = "prev"; q[CKEDITOR.SHIFT + 9] = "prev"; q["rtl" == g.lang.dir ? 37 : 39] = CKEDITOR.env.ie ? "mouseup" : "click"; q[32] = CKEDITOR.env.ie ? "mouseup" : "click"; CKEDITOR.env.ie && (q[13] = "mouseup"); w = this._.element = w.element; q = w.getDocument(); q.getBody().setStyle("overflow", "hidden"); q.getElementsByTag("html").getItem(0).setStyle("overflow", "hidden"); this._.itemOverFn = CKEDITOR.tools.addFunction(function(a) { clearTimeout(this._.showSubTimeout); this._.showSubTimeout = CKEDITOR.tools.setTimeout(this._.showSubMenu, g.config.menu_subMenuDelay || 400, this, [a]) }, this); this._.itemOutFn = CKEDITOR.tools.addFunction(function() { clearTimeout(this._.showSubTimeout) }, this); this._.itemClickFn = CKEDITOR.tools.addFunction(function(a) { var b = this.items[a]; if (b.state == CKEDITOR.TRISTATE_DISABLED) this.hide(1); else if (b.getItems) this._.showSubMenu(a); else this._.onClick(b) }, this) } a(f); for (var q = g.elementPath(), q = ['\x3cdiv class\x3d"cke_menu' + (q && q.direction() != g.lang.dir ? " cke_mixed_dir_content" : "") + '" role\x3d"presentation"\x3e'], v = f.length, u = v && f[0].group, r = 0; r < v; r++) { var p = f[r]; u != p.group && (q.push('\x3cdiv class\x3d"cke_menuseparator" role\x3d"separator"\x3e\x3c/div\x3e'), u = p.group); p.render(this, r, q) } q.push("\x3c/div\x3e"); w.setHtml(q.join("")); CKEDITOR.ui.fire("ready", this); this.parent ? this.parent._.panel.showAsChild(n, this.id, b, c, d, e) : n.showBlock(this.id, b, c, d, e); g.fire("menuShow", [n]) }, addListener: function(a) { this._.listeners.push(a) }, hide: function(a) { this._.onHide && this._.onHide(); this._.panel && this._.panel.hide(a) } } }); CKEDITOR.menuItem = CKEDITOR.tools.createClass({ $: function(a, b, c) { CKEDITOR.tools.extend(this, c, { order: 0, className: "cke_menubutton__" + b }); this.group = a._.menuGroups[this.group]; this.editor = a; this.name = b }, proto: { render: function(a, f, d) { var h = a.id + String(f), k = "undefined" == typeof this.state ? CKEDITOR.TRISTATE_OFF : this.state, g = "", n = this.editor, w, q, v = k == CKEDITOR.TRISTATE_ON ? "on" : k == CKEDITOR.TRISTATE_DISABLED ? "disabled" : "off"; this.role in { menuitemcheckbox: 1, menuitemradio: 1 } && (g = ' aria-checked\x3d"' + (k == CKEDITOR.TRISTATE_ON ? "true" : "false") + '"'); var u = this.getItems, r = "\x26#" + ("rtl" == this.editor.lang.dir ? "9668" : "9658") + ";", p = this.name; this.icon && !/\./.test(this.icon) && (p = this.icon); this.command && (w = n.getCommand(this.command), (w = n.getCommandKeystroke(w)) && (q = CKEDITOR.tools.keystrokeToString(n.lang.common.keyboard, w))); a = { id: h, name: this.name, iconName: p, label: this.label, cls: this.className || "", state: v, hasPopup: u ? "true" : "false", disabled: k == CKEDITOR.TRISTATE_DISABLED, title: this.label + (q ? " (" + q.display + ")" : ""), ariaShortcut: q ? n.lang.common.keyboardShortcut + " " + q.aria : "", href: "javascript:void('" + (this.label || "").replace("'") + "')", hoverFn: a._.itemOverFn, moveOutFn: a._.itemOutFn, clickFn: a._.itemClickFn, index: f, iconStyle: CKEDITOR.skin.getIconStyle(p, "rtl" == this.editor.lang.dir, p == this.icon ? null : this.icon, this.iconOffset), shortcutHtml: q ? e.output({ shortcut: q.display }) : "", arrowHtml: u ? c.output({ label: r }) : "", role: this.role ? this.role : "menuitem", ariaChecked: g }; b.output(a, d) } } }) }(), CKEDITOR.config.menu_groups = "clipboard,form,tablecell,tablecellproperties,tablerow,tablecolumn,table,anchor,link,image,flash,checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div", CKEDITOR.plugins.add("contextmenu", { requires: "menu", onLoad: function() { CKEDITOR.plugins.contextMenu = CKEDITOR.tools.createClass({ base: CKEDITOR.menu, $: function(a) { this.base.call(this, a, { panel: { className: "cke_menu_panel", attributes: { "aria-label": a.lang.contextmenu.options } } }) }, proto: { addTarget: function(a, f) { a.on("contextmenu", function(a) { a = a.data; var c = CKEDITOR.env.webkit ? b : CKEDITOR.env.mac ? a.$.metaKey : a.$.ctrlKey; if (!f || !c) { a.preventDefault(); if (CKEDITOR.env.mac && CKEDITOR.env.webkit) { var c = this.editor, l = (new CKEDITOR.dom.elementPath(a.getTarget(), c.editable())).contains(function(a) { return a.hasAttribute("contenteditable") }, !0); l && "false" == l.getAttribute("contenteditable") && c.getSelection().fake(l) } var l = a.getTarget().getDocument(), d = a.getTarget().getDocument().getDocumentElement(), c = !l.equals(CKEDITOR.document), l = l.getWindow().getScrollPosition(), h = c ? a.$.clientX : a.$.pageX || l.x + a.$.clientX, k = c ? a.$.clientY : a.$.pageY || l.y + a.$.clientY; CKEDITOR.tools.setTimeout(function() { this.open(d, null, h, k) }, CKEDITOR.env.ie ? 200 : 0, this) } }, this); if (CKEDITOR.env.webkit) { var b, c = function() { b = 0 }; a.on("keydown", function(a) { b = CKEDITOR.env.mac ? a.data.$.metaKey : a.data.$.ctrlKey }); a.on("keyup", c); a.on("contextmenu", c) } }, open: function(a, f, b, c) { this.editor.focus(); a = a || CKEDITOR.document.getDocumentElement(); this.editor.selectionChange(1); this.show(a, f, b, c) } } }) }, beforeInit: function(a) { var f = a.contextMenu = new CKEDITOR.plugins.contextMenu(a); a.on("contentDom", function() { f.addTarget(a.editable(), !1 !== a.config.browserContextMenuOnCtrl) }); a.addCommand("contextMenu", { exec: function() { a.contextMenu.open(a.document.getBody()) } }); a.setKeystroke(CKEDITOR.SHIFT + 121, "contextMenu"); a.setKeystroke(CKEDITOR.CTRL + CKEDITOR.SHIFT + 121, "contextMenu") } }), function() { function a(a, b) { function l(b) { b = g.list[b]; var c; b.equals(a.editable()) || "true" == b.getAttribute("contenteditable") ? (c = a.createRange(), c.selectNodeContents(b), c = c.select()) : (c = a.getSelection(), c.selectElement(b)); CKEDITOR.env.ie && a.fire("selectionChange", { selection: c, path: new CKEDITOR.dom.elementPath(b) }); a.focus() } function d() { k && k.setHtml('\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e'); delete g.list } var h = a.ui.spaceId("path"), k, g = a._.elementsPath, n = g.idBase; b.html += '\x3cspan id\x3d"' + h + '_label" class\x3d"cke_voice_label"\x3e' + a.lang.elementspath.eleLabel + '\x3c/span\x3e\x3cspan id\x3d"' + h + '" class\x3d"cke_path" role\x3d"group" aria-labelledby\x3d"' + h + '_label"\x3e\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e\x3c/span\x3e'; a.on("uiReady", function() { var b = a.ui.space("path"); b && a.focusManager.add(b, 1) }); g.onClick = l; var w = CKEDITOR.tools.addFunction(l), q = CKEDITOR.tools.addFunction(function(b, c) { var d = g.idBase, f; c = new CKEDITOR.dom.event(c); f = "rtl" == a.lang.dir; switch (c.getKeystroke()) { case f ? 39: 37: case 9: return (f = CKEDITOR.document.getById(d + (b + 1))) || (f = CKEDITOR.document.getById(d + "0")), f.focus(), !1; case f ? 37: 39: case CKEDITOR.SHIFT + 9: return (f = CKEDITOR.document.getById(d + (b - 1))) || (f = CKEDITOR.document.getById(d + (g.list.length - 1))), f.focus(), !1; case 27: return a.focus(), !1; case 13: case 32: return l(b), !1 } return !0 }); a.on("selectionChange", function() { for (var b = [], d = g.list = [], f = [], l = g.filters, m = !0, B = a.elementPath().elements, t, y = B.length; y--;) { var D = B[y], x = 0; t = D.data("cke-display-name") ? D.data("cke-display-name") : D.data("cke-real-element-type") ? D.data("cke-real-element-type") : D.getName(); (m = D.hasAttribute("contenteditable") ? "true" == D.getAttribute("contenteditable") : m) || D.hasAttribute("contenteditable") || (x = 1); for (var A = 0; A < l.length; A++) { var C = l[A](D, t); if (!1 === C) { x = 1; break } t = C || t } x || (d.unshift(D), f.unshift(t)) } d = d.length; for (l = 0; l < d; l++) t = f[l], m = a.lang.elementspath.eleTitle.replace(/%1/, t), t = c.output({ id: n + l, label: m, text: t, jsTitle: "javascript:void('" + t + "')", index: l, keyDownFn: q, clickFn: w }), b.unshift(t); k || (k = CKEDITOR.document.getById(h)); f = k; f.setHtml(b.join("") + '\x3cspan class\x3d"cke_path_empty"\x3e\x26nbsp;\x3c/span\x3e'); a.fire("elementsPathUpdate", { space: f }) }); a.on("readOnly", d); a.on("contentDomUnload", d); a.addCommand("elementsPathFocus", f.toolbarFocus); a.setKeystroke(CKEDITOR.ALT + 122, "elementsPathFocus") } var f = { toolbarFocus: { editorFocus: !1, readOnly: 1, exec: function(a) { (a = CKEDITOR.document.getById(a._.elementsPath.idBase + "0")) && a.focus(CKEDITOR.env.ie || CKEDITOR.env.air) } } }, b = ""; CKEDITOR.env.gecko && CKEDITOR.env.mac && (b += ' onkeypress\x3d"return false;"'); CKEDITOR.env.gecko && (b += ' onblur\x3d"this.style.cssText \x3d this.style.cssText;"'); var c = CKEDITOR.addTemplate("pathItem", '\x3ca id\x3d"{id}" href\x3d"{jsTitle}" tabindex\x3d"-1" class\x3d"cke_path_item" title\x3d"{label}"' + b + ' hidefocus\x3d"true" onkeydown\x3d"return CKEDITOR.tools.callFunction({keyDownFn},{index}, event );" onclick\x3d"CKEDITOR.tools.callFunction({clickFn},{index}); return false;" role\x3d"button" aria-label\x3d"{label}"\x3e{text}\x3c/a\x3e'); CKEDITOR.plugins.add("elementspath", { init: function(b) { b._.elementsPath = { idBase: "cke_elementspath_" + CKEDITOR.tools.getNextNumber() + "_", filters: [] }; b.on("uiSpace", function(c) { "bottom" == c.data.space && a(b, c.data) }) } }) }(), function() { function a(a, e) { var m, l; e.on("refresh", function(a) { var c = [f], e; for (e in a.data.states) c.push(a.data.states[e]); this.setState(CKEDITOR.tools.search(c, b) ? b : f) }, e, null, 100); e.on("exec", function(b) { m = a.getSelection(); l = m.createBookmarks(1); b.data || (b.data = {}); b.data.done = !1 }, e, null, 0); e.on("exec", function() { a.forceNextSelectionCheck(); m.selectBookmarks(l) }, e, null, 100) } var f = CKEDITOR.TRISTATE_DISABLED, b = CKEDITOR.TRISTATE_OFF; CKEDITOR.plugins.add("indent", { init: function(b) { var e = CKEDITOR.plugins.indent.genericDefinition; a(b, b.addCommand("indent", new e(!0))); a(b, b.addCommand("outdent", new e)); b.ui.addButton && (b.ui.addButton("Indent", { label: b.lang.indent.indent, command: "indent", directional: !0, toolbar: "indent,20" }), b.ui.addButton("Outdent", { label: b.lang.indent.outdent, command: "outdent", directional: !0, toolbar: "indent,10" })); b.on("dirChanged", function(a) { var e = b.createRange(), d = a.data.node; e.setStartBefore(d); e.setEndAfter(d); for (var f = new CKEDITOR.dom.walker(e), k; k = f.next();) if (k.type == CKEDITOR.NODE_ELEMENT) if (!k.equals(d) && k.getDirection()) e.setStartAfter(k), f = new CKEDITOR.dom.walker(e); else { var g = b.config.indentClasses; if (g) for (var n = "ltr" == a.data.dir ? ["_rtl", ""] : ["", "_rtl"], w = 0; w < g.length; w++) k.hasClass(g[w] + n[0]) && (k.removeClass(g[w] + n[0]), k.addClass(g[w] + n[1])); g = k.getStyle("margin-right"); n = k.getStyle("margin-left"); g ? k.setStyle("margin-left", g) : k.removeStyle("margin-left"); n ? k.setStyle("margin-right", n) : k.removeStyle("margin-right") } }) } }); CKEDITOR.plugins.indent = { genericDefinition: function(a) { this.isIndent = !!a; this.startDisabled = !this.isIndent }, specificDefinition: function(a, b, f) { this.name = b; this.editor = a; this.jobs = {}; this.enterBr = a.config.enterMode == CKEDITOR.ENTER_BR; this.isIndent = !!f; this.relatedGlobal = f ? "indent" : "outdent"; this.indentKey = f ? 9 : CKEDITOR.SHIFT + 9; this.database = {} }, registerCommands: function(a, b) { a.on("pluginsLoaded", function() { for (var a in b)(function(a, b) { var c = a.getCommand(b.relatedGlobal), e; for (e in b.jobs) c.on("exec", function(c) { c.data.done || (a.fire("lockSnapshot"), b.execJob(a, e) && (c.data.done = !0), a.fire("unlockSnapshot"), CKEDITOR.dom.element.clearAllMarkers(b.database)) }, this, null, e), c.on("refresh", function(c) { c.data.states || (c.data.states = {}); c.data.states[b.name + "@" + e] = b.refreshJob(a, e, c.data.path) }, this, null, e); a.addFeature(b) })(this, b[a]) }) } }; CKEDITOR.plugins.indent.genericDefinition.prototype = { context: "p", exec: function() {} }; CKEDITOR.plugins.indent.specificDefinition.prototype = { execJob: function(a, b) { var m = this.jobs[b]; if (m.state != f) return m.exec.call(this, a) }, refreshJob: function(a, b, m) { b = this.jobs[b]; a.activeFilter.checkFeature(this) ? b.state = b.refresh.call(this, a, m) : b.state = f; return b.state }, getContext: function(a) { return a.contains(this.context) } } }(), function() { function a(a) { function c(f) { for (var h = q.startContainer, m = q.endContainer; h && !h.getParent().equals(f);) h = h.getParent(); for (; m && !m.getParent().equals(f);) m = m.getParent(); if (!h || !m) return !1; for (var v = h, h = [], u = !1; !u;) v.equals(m) && (u = !0), h.push(v), v = v.getNext(); if (1 > h.length) return !1; v = f.getParents(!0); for (m = 0; m < v.length; m++) if (v[m].getName && l[v[m].getName()]) { f = v[m]; break } for (var v = e.isIndent ? 1 : -1, m = h[0], h = h[h.length - 1], u = CKEDITOR.plugins.list.listToArray(f, g), y = u[h.getCustomData("listarray_index")].indent, m = m.getCustomData("listarray_index"); m <= h.getCustomData("listarray_index"); m++) if (u[m].indent += v, 0 < v) { var w = u[m].parent; u[m].parent = new CKEDITOR.dom.element(w.getName(), w.getDocument()) } for (m = h.getCustomData("listarray_index") + 1; m < u.length && u[m].indent > y; m++) u[m].indent += v; h = CKEDITOR.plugins.list.arrayToList(u, g, null, a.config.enterMode, f.getDirection()); if (!e.isIndent) { var x; if ((x = f.getParent()) && x.is("li")) for (var v = h.listNode.getChildren(), A = [], C, m = v.count() - 1; 0 <= m; m--)(C = v.getItem(m)) && C.is && C.is("li") && A.push(C) } h && h.listNode.replace(f); if (A && A.length) for (m = 0; m < A.length; m++) { for (C = f = A[m]; (C = C.getNext()) && C.is && C.getName() in l;) CKEDITOR.env.needsNbspFiller && !f.getFirst(b) && f.append(q.document.createText(" ")), f.append(C); f.insertAfter(x) } h && a.fire("contentDomInvalidated"); return !0 } for (var e = this, g = this.database, l = this.context, m = a.getSelection(), m = (m && m.getRanges()).createIterator(), q; q = m.getNextRange();) { for (var v = q.getCommonAncestor(); v && (v.type != CKEDITOR.NODE_ELEMENT || !l[v.getName()]);) { if (a.editable().equals(v)) { v = !1; break } v = v.getParent() } v || (v = q.startPath().contains(l)) && q.setEndAt(v, CKEDITOR.POSITION_BEFORE_END); if (!v) { var u = q.getEnclosedNode(); u && u.type == CKEDITOR.NODE_ELEMENT && u.getName() in l && (q.setStartAt(u, CKEDITOR.POSITION_AFTER_START), q.setEndAt(u, CKEDITOR.POSITION_BEFORE_END), v = u) } v && q.startContainer.type == CKEDITOR.NODE_ELEMENT && q.startContainer.getName() in l && (u = new CKEDITOR.dom.walker(q), u.evaluator = f, q.startContainer = u.next()); v && q.endContainer.type == CKEDITOR.NODE_ELEMENT && q.endContainer.getName() in l && (u = new CKEDITOR.dom.walker(q), u.evaluator = f, q.endContainer = u.previous()); if (v) return c(v) } return 0 } function f(a) { return a.type == CKEDITOR.NODE_ELEMENT && a.is("li") } function b(a) { return c(a) && e(a) } var c = CKEDITOR.dom.walker.whitespaces(!0), e = CKEDITOR.dom.walker.bookmark(!1, !0), m = CKEDITOR.TRISTATE_DISABLED, l = CKEDITOR.TRISTATE_OFF; CKEDITOR.plugins.add("indentlist", { requires: "indent", init: function(b) { function c(b) { e.specificDefinition.apply(this, arguments); this.requiredContent = ["ul", "ol"]; b.on("key", function(a) { if ("wysiwyg" == b.mode && a.data.keyCode == this.indentKey) { var c = this.getContext(b.elementPath()); !c || this.isIndent && CKEDITOR.plugins.indentList.firstItemInPath(this.context, b.elementPath(), c) || (b.execCommand(this.relatedGlobal), a.cancel()) } }, this); this.jobs[this.isIndent ? 10 : 30] = { refresh: this.isIndent ? function(a, b) { var c = this.getContext(b), d = CKEDITOR.plugins.indentList.firstItemInPath(this.context, b, c); return c && this.isIndent && !d ? l : m } : function(a, b) { return !this.getContext(b) || this.isIndent ? m : l }, exec: CKEDITOR.tools.bind(a, this) } } var e = CKEDITOR.plugins.indent; e.registerCommands(b, { indentlist: new c(b, "indentlist", !0), outdentlist: new c(b, "outdentlist") }); CKEDITOR.tools.extend(c.prototype, e.specificDefinition.prototype, { context: { ol: 1, ul: 1 } }) } }); CKEDITOR.plugins.indentList = {}; CKEDITOR.plugins.indentList.firstItemInPath = function(a, b, c) { var e = b.contains(f); c || (c = b.contains(a)); return c && e && e.equals(c.getFirst(f)) } }(), function() { function a(a, b, c) { function d(c) { if (!(!(l = k[c ? "getFirst" : "getLast"]()) || l.is && l.isBlockBoundary() || !(m = b.root[c ? "getPrevious" : "getNext"](CKEDITOR.dom.walker.invisible(!0))) || m.is && m.isBlockBoundary({ br: 1 }))) a.document.createElement("br")[c ? "insertBefore" : "insertAfter"](l) } for (var e = CKEDITOR.plugins.list.listToArray(b.root, c), f = [], g = 0; g < b.contents.length; g++) { var h = b.contents[g]; (h = h.getAscendant("li", !0)) && !h.getCustomData("list_item_processed") && (f.push(h), CKEDITOR.dom.element.setMarker(c, h, "list_item_processed", !0)) } h = null; for (g = 0; g < f.length; g++) h = f[g].getCustomData("listarray_index"), e[h].indent = -1; for (g = h + 1; g < e.length; g++) if (e[g].indent > e[g - 1].indent + 1) { f = e[g - 1].indent + 1 - e[g].indent; for (h = e[g].indent; e[g] && e[g].indent >= h;) e[g].indent += f, g++; g-- } var k = CKEDITOR.plugins.list.arrayToList(e, c, null, a.config.enterMode, b.root.getAttribute("dir")).listNode, l, m; d(!0); d(); k.replace(b.root); a.fire("contentDomInvalidated") } function f(a, b) { this.name = a; this.context = this.type = b; this.allowedContent = b + " li"; this.requiredContent = b } function b(a, b, c, d) { for (var e, f; e = a[d ? "getLast" : "getFirst"](q);)(f = e.getDirection(1)) !== b.getDirection(1) && e.setAttribute("dir", f), e.remove(), c ? e[d ? "insertBefore" : "insertAfter"](c) : b.append(e, d) } function c(a) { function c(d) { var e = a[d ? "getPrevious" : "getNext"](g); e && e.type == CKEDITOR.NODE_ELEMENT && e.is(a.getName()) && (b(a, e, null, !d), a.remove(), a = e) } c(); c(1) } function e(a) { return a.type == CKEDITOR.NODE_ELEMENT && (a.getName() in CKEDITOR.dtd.$block || a.getName() in CKEDITOR.dtd.$listItem) && CKEDITOR.dtd[a.getName()]["#"] } function m(a, d, e) { a.fire("saveSnapshot"); e.enlarge(CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS); var f = e.extractContents(); d.trim(!1, !0); var h = d.createBookmark(), k = new CKEDITOR.dom.elementPath(d.startContainer), m = k.block, k = k.lastElement.getAscendant("li", 1) || m, q = new CKEDITOR.dom.elementPath(e.startContainer), w = q.contains(CKEDITOR.dtd.$listItem), q = q.contains(CKEDITOR.dtd.$list); m ? (m = m.getBogus()) && m.remove() : q && (m = q.getPrevious(g)) && n(m) && m.remove(); (m = f.getLast()) && m.type == CKEDITOR.NODE_ELEMENT && m.is("br") && m.remove(); (m = d.startContainer.getChild(d.startOffset)) ? f.insertBefore(m): d.startContainer.append(f); w && (f = l(w)) && (k.contains(w) ? (b(f, w.getParent(), w), f.remove()) : k.append(f)); for (; e.checkStartOfBlock() && e.checkEndOfBlock();) { q = e.startPath(); f = q.block; if (!f) break; f.is("li") && (k = f.getParent(), f.equals(k.getLast(g)) && f.equals(k.getFirst(g)) && (f = k)); e.moveToPosition(f, CKEDITOR.POSITION_BEFORE_START); f.remove() } e = e.clone(); f = a.editable(); e.setEndAt(f, CKEDITOR.POSITION_BEFORE_END); e = new CKEDITOR.dom.walker(e); e.evaluator = function(a) { return g(a) && !n(a) }; (e = e.next()) && e.type == CKEDITOR.NODE_ELEMENT && e.getName() in CKEDITOR.dtd.$list && c(e); d.moveToBookmark(h); d.select(); a.fire("saveSnapshot") } function l(a) { return (a = a.getLast(g)) && a.type == CKEDITOR.NODE_ELEMENT && a.getName() in d ? a : null } var d = { ol: 1, ul: 1 }, h = CKEDITOR.dom.walker.whitespaces(), k = CKEDITOR.dom.walker.bookmark(), g = function(a) { return !(h(a) || k(a)) }, n = CKEDITOR.dom.walker.bogus(); CKEDITOR.plugins.list = { listToArray: function(a, b, c, e, f) { if (!d[a.getName()]) return []; e || (e = 0); c || (c = []); for (var g = 0, h = a.getChildCount(); g < h; g++) { var k = a.getChild(g); k.type == CKEDITOR.NODE_ELEMENT && k.getName() in CKEDITOR.dtd.$list && CKEDITOR.plugins.list.listToArray(k, b, c, e + 1); if ("li" == k.$.nodeName.toLowerCase()) { var l = { parent: a, indent: e, element: k, contents: [] }; f ? l.grandparent = f : (l.grandparent = a.getParent(), l.grandparent && "li" == l.grandparent.$.nodeName.toLowerCase() && (l.grandparent = l.grandparent.getParent())); b && CKEDITOR.dom.element.setMarker(b, k, "listarray_index", c.length); c.push(l); for (var m = 0, n = k.getChildCount(), q; m < n; m++) q = k.getChild(m), q.type == CKEDITOR.NODE_ELEMENT && d[q.getName()] ? CKEDITOR.plugins.list.listToArray(q, b, c, e + 1, l.grandparent) : l.contents.push(q) } } return c }, arrayToList: function(a, b, c, e, f) { c || (c = 0); if (!a || a.length < c + 1) return null; for (var h, l = a[c].parent.getDocument(), m = new CKEDITOR.dom.documentFragment(l), n = null, q = c, w = Math.max(a[c].indent, 0), C = null, F, G, I = e == CKEDITOR.ENTER_P ? "p" : "div";;) { var H = a[q]; h = H.grandparent; F = H.element.getDirection(1); if (H.indent == w) { n && a[q].parent.getName() == n.getName() || (n = a[q].parent.clone(!1, 1), f && n.setAttribute("dir", f), m.append(n)); C = n.append(H.element.clone(0, 1)); F != n.getDirection(1) && C.setAttribute("dir", F); for (h = 0; h < H.contents.length; h++) C.append(H.contents[h].clone(1, 1)); q++ } else if (H.indent == Math.max(w, 0) + 1) H = a[q - 1].element.getDirection(1), q = CKEDITOR.plugins.list.arrayToList(a, null, q, e, H != F ? F : null), !C.getChildCount() && CKEDITOR.env.needsNbspFiller && 7 >= l.$.documentMode && C.append(l.createText(" ")), C.append(q.listNode), q = q.nextIndex; else if (-1 == H.indent && !c && h) { d[h.getName()] ? (C = H.element.clone(!1, !0), F != h.getDirection(1) && C.setAttribute("dir", F)) : C = new CKEDITOR.dom.documentFragment(l); var n = h.getDirection(1) != F, K = H.element, J = K.getAttribute("class"), E = K.getAttribute("style"), S = C.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT && (e != CKEDITOR.ENTER_BR || n || E || J), O, T = H.contents.length, M; for (h = 0; h < T; h++) if (O = H.contents[h], k(O) && 1 < T) S ? M = O.clone(1, 1) : C.append(O.clone(1, 1)); else if (O.type == CKEDITOR.NODE_ELEMENT && O.isBlockBoundary()) { n && !O.getDirection() && O.setAttribute("dir", F); G = O; var V = K.getAttribute("style"); V && G.setAttribute("style", V.replace(/([^;])$/, "$1;") + (G.getAttribute("style") || "")); J && O.addClass(J); G = null; M && (C.append(M), M = null); C.append(O.clone(1, 1)) } else S ? (G || (G = l.createElement(I), C.append(G), n && G.setAttribute("dir", F)), E && G.setAttribute("style", E), J && G.setAttribute("class", J), M && (G.append(M), M = null), G.append(O.clone(1, 1))) : C.append(O.clone(1, 1)); M && ((G || C).append(M), M = null); C.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT && q != a.length - 1 && (CKEDITOR.env.needsBrFiller && (F = C.getLast()) && F.type == CKEDITOR.NODE_ELEMENT && F.is("br") && F.remove(), (F = C.getLast(g)) && F.type == CKEDITOR.NODE_ELEMENT && F.is(CKEDITOR.dtd.$block) || C.append(l.createElement("br"))); F = C.$.nodeName.toLowerCase(); "div" != F && "p" != F || C.appendBogus(); m.append(C); n = null; q++ } else return null; G = null; if (a.length <= q || Math.max(a[q].indent, 0) < w) break } if (b) for (a = m.getFirst(); a;) { if (a.type == CKEDITOR.NODE_ELEMENT && (CKEDITOR.dom.element.clearMarkers(b, a), a.getName() in CKEDITOR.dtd.$listItem && (c = a, l = f = e = void 0, e = c.getDirection()))) { for (f = c.getParent(); f && !(l = f.getDirection());) f = f.getParent(); e == l && c.removeAttribute("dir") } a = a.getNextSourceNode() } return { listNode: m, nextIndex: q } } }; var w = /^h[1-6]$/, q = CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_ELEMENT); f.prototype = { exec: function(b) { this.refresh(b, b.elementPath()); var e = b.config, f = b.getSelection(), h = f && f.getRanges(); if (this.state == CKEDITOR.TRISTATE_OFF) { var k = b.editable(); if (k.getFirst(g)) { var l = 1 == h.length && h[0]; (e = l && l.getEnclosedNode()) && e.is && this.type == e.getName() && this.setState(CKEDITOR.TRISTATE_ON) } else e.enterMode == CKEDITOR.ENTER_BR ? k.appendBogus() : h[0].fixBlock(1, e.enterMode == CKEDITOR.ENTER_P ? "p" : "div"), f.selectRanges(h) } for (var e = f.createBookmarks(!0), k = [], m = {}, h = h.createIterator(), n = 0; (l = h.getNextRange()) && ++n;) { var q = l.getBoundaryNodes(), x = q.startNode, A = q.endNode; x.type == CKEDITOR.NODE_ELEMENT && "td" == x.getName() && l.setStartAt(q.startNode, CKEDITOR.POSITION_AFTER_START); A.type == CKEDITOR.NODE_ELEMENT && "td" == A.getName() && l.setEndAt(q.endNode, CKEDITOR.POSITION_BEFORE_END); l = l.createIterator(); for (l.forceBrBreak = this.state == CKEDITOR.TRISTATE_OFF; q = l.getNextParagraph();) if (!q.getCustomData("list_block")) { CKEDITOR.dom.element.setMarker(m, q, "list_block", 1); for (var C = b.elementPath(q), x = C.elements, A = 0, C = C.blockLimit, F, G = x.length - 1; 0 <= G && (F = x[G]); G--) if (d[F.getName()] && C.contains(F)) { C.removeCustomData("list_group_object_" + n); (x = F.getCustomData("list_group_object")) ? x.contents.push(q): (x = { root: F, contents: [q] }, k.push(x), CKEDITOR.dom.element.setMarker(m, F, "list_group_object", x)); A = 1; break } A || (A = C, A.getCustomData("list_group_object_" + n) ? A.getCustomData("list_group_object_" + n).contents.push(q) : (x = { root: A, contents: [q] }, CKEDITOR.dom.element.setMarker(m, A, "list_group_object_" + n, x), k.push(x))) } } for (F = []; 0 < k.length;) if (x = k.shift(), this.state == CKEDITOR.TRISTATE_OFF) if (d[x.root.getName()]) { h = b; n = x; x = m; l = F; A = CKEDITOR.plugins.list.listToArray(n.root, x); C = []; for (q = 0; q < n.contents.length; q++) G = n.contents[q], (G = G.getAscendant("li", !0)) && !G.getCustomData("list_item_processed") && (C.push(G), CKEDITOR.dom.element.setMarker(x, G, "list_item_processed", !0)); for (var G = n.root.getDocument(), I = void 0, H = void 0, q = 0; q < C.length; q++) { var K = C[q].getCustomData("listarray_index"), I = A[K].parent; I.is(this.type) || (H = G.createElement(this.type), I.copyAttributes(H, { start: 1, type: 1 }), H.removeStyle("list-style-type"), A[K].parent = H) } x = CKEDITOR.plugins.list.arrayToList(A, x, null, h.config.enterMode); A = void 0; C = x.listNode.getChildCount(); for (q = 0; q < C && (A = x.listNode.getChild(q)); q++) A.getName() == this.type && l.push(A); x.listNode.replace(n.root); h.fire("contentDomInvalidated") } else { A = b; l = x; q = F; C = l.contents; h = l.root.getDocument(); n = []; 1 == C.length && C[0].equals(l.root) && (x = h.createElement("div"), C[0].moveChildren && C[0].moveChildren(x), C[0].append(x), C[0] = x); l = l.contents[0].getParent(); for (G = 0; G < C.length; G++) l = l.getCommonAncestor(C[G].getParent()); I = A.config.useComputedState; A = x = void 0; I = void 0 === I || I; for (G = 0; G < C.length; G++) for (H = C[G]; K = H.getParent();) { if (K.equals(l)) { n.push(H); !A && H.getDirection() && (A = 1); H = H.getDirection(I); null !== x && (x = x && x != H ? null : H); break } H = K } if (!(1 > n.length)) { C = n[n.length - 1].getNext(); G = h.createElement(this.type); q.push(G); for (I = q = void 0; n.length;) q = n.shift(), I = h.createElement("li"), H = q, H.is("pre") || w.test(H.getName()) || "false" == H.getAttribute("contenteditable") ? q.appendTo(I) : (q.copyAttributes(I), x && q.getDirection() && (I.removeStyle("direction"), I.removeAttribute("dir")), q.moveChildren(I), q.remove()), I.appendTo(G); x && A && G.setAttribute("dir", x); C ? G.insertBefore(C) : G.appendTo(l) } } else this.state == CKEDITOR.TRISTATE_ON && d[x.root.getName()] && a.call(this, b, x, m); for (G = 0; G < F.length; G++) c(F[G]); CKEDITOR.dom.element.clearAllMarkers(m); f.selectBookmarks(e); b.focus() }, refresh: function(a, b) { var c = b.contains(d, 1), e = b.blockLimit || b.root; c && e.contains(c) ? this.setState(c.is(this.type) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF) : this.setState(CKEDITOR.TRISTATE_OFF) } }; CKEDITOR.plugins.add("list", { requires: "indentlist", init: function(a) { a.blockless || (a.addCommand("numberedlist", new f("numberedlist", "ol")), a.addCommand("bulletedlist", new f("bulletedlist", "ul")), a.ui.addButton && (a.ui.addButton("NumberedList", { label: a.lang.list.numberedlist, command: "numberedlist", directional: !0, toolbar: "list,10" }), a.ui.addButton("BulletedList", { label: a.lang.list.bulletedlist, command: "bulletedlist", directional: !0, toolbar: "list,20" })), a.on("key", function(b) { var c = b.data.domEvent.getKey(), f; if ("wysiwyg" == a.mode && c in { 8: 1, 46: 1 }) { var h = a.getSelection().getRanges()[0], k = h && h.startPath(); if (h && h.collapsed) { var q = 8 == c, w = a.editable(), D = new CKEDITOR.dom.walker(h.clone()); D.evaluator = function(a) { return g(a) && !n(a) }; D.guard = function(a, b) { return !(b && a.type == CKEDITOR.NODE_ELEMENT && a.is("table")) }; c = h.clone(); if (q) { var x; (x = k.contains(d)) && h.checkBoundaryOfElement(x, CKEDITOR.START) && (x = x.getParent()) && x.is("li") && (x = l(x)) ? (f = x, x = x.getPrevious(g), c.moveToPosition(x && n(x) ? x : f, CKEDITOR.POSITION_BEFORE_START)) : (D.range.setStartAt(w, CKEDITOR.POSITION_AFTER_START), D.range.setEnd(h.startContainer, h.startOffset), (x = D.previous()) && x.type == CKEDITOR.NODE_ELEMENT && (x.getName() in d || x.is("li")) && (x.is("li") || (D.range.selectNodeContents(x), D.reset(), D.evaluator = e, x = D.previous()), f = x, c.moveToElementEditEnd(f), c.moveToPosition(c.endPath().block, CKEDITOR.POSITION_BEFORE_END))); if (f) m(a, c, h), b.cancel(); else { var A = k.contains(d); A && h.checkBoundaryOfElement(A, CKEDITOR.START) && (f = A.getFirst(g), h.checkBoundaryOfElement(f, CKEDITOR.START) && (x = A.getPrevious(g), l(f) ? x && (h.moveToElementEditEnd(x), h.select()) : a.execCommand("outdent"), b.cancel())) } } else if (f = k.contains("li")) { if (D.range.setEndAt(w, CKEDITOR.POSITION_BEFORE_END), q = (w = f.getLast(g)) && e(w) ? w : f, k = 0, (x = D.next()) && x.type == CKEDITOR.NODE_ELEMENT && x.getName() in d && x.equals(w) ? (k = 1, x = D.next()) : h.checkBoundaryOfElement(q, CKEDITOR.END) && (k = 2), k && x) { h = h.clone(); h.moveToElementEditStart(x); if (1 == k && (c.optimize(), !c.startContainer.equals(f))) { for (f = c.startContainer; f.is(CKEDITOR.dtd.$inline);) A = f, f = f.getParent(); A && c.moveToPosition(A, CKEDITOR.POSITION_AFTER_END) } 2 == k && (c.moveToPosition(c.endPath().block, CKEDITOR.POSITION_BEFORE_END), h.endPath().block && h.moveToPosition(h.endPath().block, CKEDITOR.POSITION_AFTER_START)); m(a, c, h); b.cancel() } } else D.range.setEndAt(w, CKEDITOR.POSITION_BEFORE_END), (x = D.next()) && x.type == CKEDITOR.NODE_ELEMENT && x.is(d) && (x = x.getFirst(g), k.block && h.checkStartOfBlock() && h.checkEndOfBlock() ? (k.block.remove(), h.moveToElementEditStart(x), h.select()) : l(x) ? (h.moveToElementEditStart(x), h.select()) : (h = h.clone(), h.moveToElementEditStart(x), m(a, c, h)), b.cancel()); setTimeout(function() { a.selectionChange(1) }) } } })) } }) }(), function() { function a(a, b, c) { c = a.config.forceEnterMode || c; "wysiwyg" == a.mode && (b || (b = a.activeEnterMode), a.elementPath().isContextFor("p") || (b = CKEDITOR.ENTER_BR, c = 1), a.fire("saveSnapshot"), b == CKEDITOR.ENTER_BR ? l(a, b, null, c) : d(a, b, null, c), a.fire("saveSnapshot")) } function f(a) { a = a.getSelection().getRanges(!0); for (var b = a.length - 1; 0 < b; b--) a[b].deleteContents(); return a[0] } function b(a) { var b = a.startContainer.getAscendant(function(a) { return a.type == CKEDITOR.NODE_ELEMENT && "true" == a.getAttribute("contenteditable") }, !0); if (a.root.equals(b)) return a; b = new CKEDITOR.dom.range(b); b.moveToRange(a); return b } CKEDITOR.plugins.add("enterkey", { init: function(b) { b.addCommand("enter", { modes: { wysiwyg: 1 }, editorFocus: !1, exec: function(b) { a(b) } }); b.addCommand("shiftEnter", { modes: { wysiwyg: 1 }, editorFocus: !1, exec: function(b) { a(b, b.activeShiftEnterMode, 1) } }); b.setKeystroke([ [13, "enter"], [CKEDITOR.SHIFT + 13, "shiftEnter"] ]) } }); var c = CKEDITOR.dom.walker.whitespaces(), e = CKEDITOR.dom.walker.bookmark(); CKEDITOR.plugins.enterkey = { enterBlock: function(a, d, m, w) { if (m = m || f(a)) { m = b(m); var q = m.document, v = m.checkStartOfBlock(), u = m.checkEndOfBlock(), r = a.elementPath(m.startContainer), p = r.block, z = d == CKEDITOR.ENTER_DIV ? "div" : "p", B; if (v && u) { if (p && (p.is("li") || p.getParent().is("li"))) { p.is("li") || (p = p.getParent()); m = p.getParent(); B = m.getParent(); w = !p.hasPrevious(); var t = !p.hasNext(), z = a.getSelection(), y = z.createBookmarks(), v = p.getDirection(1), u = p.getAttribute("class"), D = p.getAttribute("style"), x = B.getDirection(1) != v; a = a.enterMode != CKEDITOR.ENTER_BR || x || D || u; if (B.is("li")) w || t ? (w && t && m.remove(), p[t ? "insertAfter" : "insertBefore"](B)) : p.breakParent(B); else { if (a) if (r.block.is("li") ? (B = q.createElement(d == CKEDITOR.ENTER_P ? "p" : "div"), x && B.setAttribute("dir", v), D && B.setAttribute("style", D), u && B.setAttribute("class", u), p.moveChildren(B)) : B = r.block, w || t) B[w ? "insertBefore" : "insertAfter"](m); else p.breakParent(m), B.insertAfter(m); else if (p.appendBogus(!0), w || t) for (; q = p[w ? "getFirst" : "getLast"]();) q[w ? "insertBefore" : "insertAfter"](m); else for (p.breakParent(m); q = p.getLast();) q.insertAfter(m); p.remove() } z.selectBookmarks(y); return } if (p && p.getParent().is("blockquote")) { p.breakParent(p.getParent()); p.getPrevious().getFirst(CKEDITOR.dom.walker.invisible(1)) || p.getPrevious().remove(); p.getNext().getFirst(CKEDITOR.dom.walker.invisible(1)) || p.getNext().remove(); m.moveToElementEditStart(p); m.select(); return } } else if (p && p.is("pre") && !u) { l(a, d, m, w); return } if (v = m.splitBlock(z)) { d = v.previousBlock; p = v.nextBlock; r = v.wasStartOfBlock; a = v.wasEndOfBlock; p ? (y = p.getParent(), y.is("li") && (p.breakParent(y), p.move(p.getNext(), 1))) : d && (y = d.getParent()) && y.is("li") && (d.breakParent(y), y = d.getNext(), m.moveToElementEditStart(y), d.move(d.getPrevious())); if (r || a) { if (d) { if (d.is("li") || !h.test(d.getName()) && !d.is("pre")) B = d.clone() } else p && (B = p.clone()); B ? w && !B.is("li") && B.renameNode(z) : y && y.is("li") ? B = y : (B = q.createElement(z), d && (t = d.getDirection()) && B.setAttribute("dir", t)); if (q = v.elementPath) for (w = 0, z = q.elements.length; w < z; w++) { y = q.elements[w]; if (y.equals(q.block) || y.equals(q.blockLimit)) break; CKEDITOR.dtd.$removeEmpty[y.getName()] && (y = y.clone(), B.moveChildren(y), B.append(y)) } B.appendBogus(); B.getParent() || m.insertNode(B); B.is("li") && B.removeAttribute("value"); !CKEDITOR.env.ie || !r || a && d.getChildCount() || (m.moveToElementEditStart(a ? d : B), m.select()); m.moveToElementEditStart(r && !a ? p : B) } else p.is("li") && (B = m.clone(), B.selectNodeContents(p), B = new CKEDITOR.dom.walker(B), B.evaluator = function(a) { return !(e(a) || c(a) || a.type == CKEDITOR.NODE_ELEMENT && a.getName() in CKEDITOR.dtd.$inline && !(a.getName() in CKEDITOR.dtd.$empty)) }, (y = B.next()) && y.type == CKEDITOR.NODE_ELEMENT && y.is("ul", "ol") && (CKEDITOR.env.needsBrFiller ? q.createElement("br") : q.createText(" ")).insertBefore(y)), p && m.moveToElementEditStart(p); m.select(); m.scrollIntoView() } } }, enterBr: function(a, b, c, e) { if (c = c || f(a)) { var l = c.document, m = c.checkEndOfBlock(), u = new CKEDITOR.dom.elementPath(a.getSelection().getStartElement()), r = u.block, p = r && u.block.getName(); e || "li" != p ? (!e && m && h.test(p) ? (m = r.getDirection()) ? (l = l.createElement("div"), l.setAttribute("dir", m), l.insertAfter(r), c.setStart(l, 0)) : (l.createElement("br").insertAfter(r), CKEDITOR.env.gecko && l.createText("").insertAfter(r), c.setStartAt(r.getNext(), CKEDITOR.env.ie ? CKEDITOR.POSITION_BEFORE_START : CKEDITOR.POSITION_AFTER_START)) : (a = "pre" == p && CKEDITOR.env.ie && 8 > CKEDITOR.env.version ? l.createText("\r") : l.createElement("br"), c.deleteContents(), c.insertNode(a), CKEDITOR.env.needsBrFiller ? (l.createText("").insertAfter(a), m && (r || u.blockLimit).appendBogus(), a.getNext().$.nodeValue = "", c.setStartAt(a.getNext(), CKEDITOR.POSITION_AFTER_START)) : c.setStartAt(a, CKEDITOR.POSITION_AFTER_END)), c.collapse(!0), c.select(), c.scrollIntoView()) : d(a, b, c, e) } } }; var m = CKEDITOR.plugins.enterkey, l = m.enterBr, d = m.enterBlock, h = /^h[1-6]$/ }(), function() { function a(a, b) { var c = {}, e = [], m = { nbsp: " ", shy: "­", gt: "\x3e", lt: "\x3c", amp: "\x26", apos: "'", quot: '"' }; a = a.replace(/\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g, function(a, d) { var f = b ? "\x26" + d + ";" : m[d]; c[f] = b ? m[d] : "\x26" + d + ";"; e.push(f); return "" }); if (!b && a) { a = a.split(","); var l = document.createElement("div"), d; l.innerHTML = "\x26" + a.join(";\x26") + ";"; d = l.innerHTML; l = null; for (l = 0; l < d.length; l++) { var h = d.charAt(l); c[h] = "\x26" + a[l] + ";"; e.push(h) } } c.regex = e.join(b ? "|" : ""); return c } CKEDITOR.plugins.add("entities", { afterInit: function(f) { function b(a) { return h[a] } function c(a) { return "force" != e.entities_processNumerical && l[a] ? l[a] : "\x26#" + a.charCodeAt(0) + ";" } var e = f.config; if (f = (f = f.dataProcessor) && f.htmlFilter) { var m = []; !1 !== e.basicEntities && m.push("nbsp,gt,lt,amp"); e.entities && (m.length && m.push("quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,euro"), e.entities_latin && m.push("Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,OElig,oelig,Scaron,scaron,Yuml"), e.entities_greek && m.push("Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,upsih,piv"), e.entities_additional && m.push(e.entities_additional)); var l = a(m.join(",")), d = l.regex ? "[" + l.regex + "]" : "a^"; delete l.regex; e.entities && e.entities_processNumerical && (d = "[^ -~]|" + d); var d = new RegExp(d, "g"), h = a("nbsp,gt,lt,amp,shy", !0), k = new RegExp(h.regex, "g"); f.addRules({ text: function(a) { return a.replace(k, b).replace(d, c) } }, { applyToAll: !0, excludeNestedEditable: !0 }) } } }) }(), CKEDITOR.config.basicEntities = !0, CKEDITOR.config.entities = !0, CKEDITOR.config.entities_latin = !0, CKEDITOR.config.entities_greek = !0, CKEDITOR.config.entities_additional = "#39", CKEDITOR.plugins.add("popup"), CKEDITOR.tools.extend(CKEDITOR.editor.prototype, { popup: function(a, f, b, c) { f = f || "80%"; b = b || "70%"; "string" == typeof f && 1 < f.length && "%" == f.substr(f.length - 1, 1) && (f = parseInt(window.screen.width * parseInt(f, 10) / 100, 10)); "string" == typeof b && 1 < b.length && "%" == b.substr(b.length - 1, 1) && (b = parseInt(window.screen.height * parseInt(b, 10) / 100, 10)); 640 > f && (f = 640); 420 > b && (b = 420); var e = parseInt((window.screen.height - b) / 2, 10), m = parseInt((window.screen.width - f) / 2, 10); c = (c || "location\x3dno,menubar\x3dno,toolbar\x3dno,dependent\x3dyes,minimizable\x3dno,modal\x3dyes,alwaysRaised\x3dyes,resizable\x3dyes,scrollbars\x3dyes") + ",width\x3d" + f + ",height\x3d" + b + ",top\x3d" + e + ",left\x3d" + m; var l = window.open("", null, c, !0); if (!l) return !1; try { -1 == navigator.userAgent.toLowerCase().indexOf(" chrome/") && (l.moveTo(m, e), l.resizeTo(f, b)), l.focus(), l.location.href = a } catch (d) { window.open(a, null, c, !0) } return !0 } }), function() { function a(a, b) { var c = []; if (b) for (var d in b) c.push(d + "\x3d" + encodeURIComponent(b[d])); else return a; return a + (-1 != a.indexOf("?") ? "\x26" : "?") + c.join("\x26") } function f(a) { a += ""; return a.charAt(0).toUpperCase() + a.substr(1) } function b() { var b = this.getDialog(), c = b.getParentEditor(); c._.filebrowserSe = this; var d = c.config["filebrowser" + f(b.getName()) + "WindowWidth"] || c.config.filebrowserWindowWidth || "80%", b = c.config["filebrowser" + f(b.getName()) + "WindowHeight"] || c.config.filebrowserWindowHeight || "70%", e = this.filebrowser.params || {}; e.CKEditor = c.name; e.CKEditorFuncNum = c._.filebrowserFn; e.langCode || (e.langCode = c.langCode); e = a(this.filebrowser.url, e); c.popup(e, d, b, c.config.filebrowserWindowFeatures || c.config.fileBrowserWindowFeatures) } function c() { var a = this.getDialog(); a.getParentEditor()._.filebrowserSe = this; return a.getContentElement(this["for"][0], this["for"][1]).getInputElement().$.value && a.getContentElement(this["for"][0], this["for"][1]).getAction() ? !0 : !1 } function e(b, c, d) { var e = d.params || {}; e.CKEditor = b.name; e.CKEditorFuncNum = b._.filebrowserFn; e.langCode || (e.langCode = b.langCode); c.action = a(d.url, e); c.filebrowser = d } function m(a, d, g, l) { if (l && l.length) for (var w, q = l.length; q--;) if (w = l[q], "hbox" != w.type && "vbox" != w.type && "fieldset" != w.type || m(a, d, g, w.children), w.filebrowser) if ("string" == typeof w.filebrowser && (w.filebrowser = { action: "fileButton" == w.type ? "QuickUpload" : "Browse", target: w.filebrowser }), "Browse" == w.filebrowser.action) { var v = w.filebrowser.url; void 0 === v && (v = a.config["filebrowser" + f(d) + "BrowseUrl"], void 0 === v && (v = a.config.filebrowserBrowseUrl)); v && (w.onClick = b, w.filebrowser.url = v, w.hidden = !1) } else if ("QuickUpload" == w.filebrowser.action && w["for"] && (v = w.filebrowser.url, void 0 === v && (v = a.config["filebrowser" + f(d) + "UploadUrl"], void 0 === v && (v = a.config.filebrowserUploadUrl)), v)) { var u = w.onClick; w.onClick = function(a) { var b = a.sender; if (u && !1 === u.call(b, a)) return !1; if (c.call(b, a)) { a = b.getDialog().getContentElement(this["for"][0], this["for"][1]).getInputElement(); if (b = new CKEDITOR.dom.element(a.$.form))(a = b.$.elements.ckCsrfToken) ? a = new CKEDITOR.dom.element(a) : (a = new CKEDITOR.dom.element("input"), a.setAttributes({ name: "ckCsrfToken", type: "hidden" }), b.append(a)), a.setAttribute("value", CKEDITOR.tools.getCsrfToken()); return !0 } return !1 }; w.filebrowser.url = v; w.hidden = !1; e(a, g.getContents(w["for"][0]).get(w["for"][1]), w.filebrowser) } } function l(a, b, c) { if (-1 !== c.indexOf(";")) { c = c.split(";"); for (var d = 0; d < c.length; d++) if (l(a, b, c[d])) return !0; return !1 } return (a = a.getContents(b).get(c).filebrowser) && a.url } function d(a, b) { var c = this._.filebrowserSe.getDialog(), d = this._.filebrowserSe["for"], e = this._.filebrowserSe.filebrowser.onSelect; d && c.getContentElement(d[0], d[1]).reset(); if ("function" != typeof b || !1 !== b.call(this._.filebrowserSe)) if (!e || !1 !== e.call(this._.filebrowserSe, a, b)) if ("string" == typeof b && b && alert(b), a && (d = this._.filebrowserSe, c = d.getDialog(), d = d.filebrowser.target || null)) if (d = d.split(":"), e = c.getContentElement(d[0], d[1])) e.setValue(a), c.selectPage(d[0]) } CKEDITOR.plugins.add("filebrowser", { requires: "popup", init: function(a) { a._.filebrowserFn = CKEDITOR.tools.addFunction(d, a); a.on("destroy", function() { CKEDITOR.tools.removeFunction(this._.filebrowserFn) }) } }); CKEDITOR.on("dialogDefinition", function(a) { if (a.editor.plugins.filebrowser) for (var b = a.data.definition, c, d = 0; d < b.contents.length; ++d) if (c = b.contents[d]) m(a.editor, a.data.name, b, c.elements), c.hidden && c.filebrowser && (c.hidden = !l(b, c.id, c.filebrowser)) }) }(), function() { function a(a) { var e = a.config, m = a.fire("uiSpace", { space: "top", html: "" }).html, l = function() { function d(a, c, e) { h.setStyle(c, b(e)); h.setStyle("position", a) } function g(a) { var b = m.getDocumentPosition(); switch (a) { case "top": d("absolute", "top", b.y - z - y); break; case "pin": d("fixed", "top", x); break; case "bottom": d("absolute", "top", b.y + (r.height || r.bottom - r.top) + y) } k = a } var k, m, u, r, p, z, B, t = e.floatSpaceDockedOffsetX || 0, y = e.floatSpaceDockedOffsetY || 0, D = e.floatSpacePinnedOffsetX || 0, x = e.floatSpacePinnedOffsetY || 0; return function(d) { if (m = a.editable()) { var n = d && "focus" == d.name; n && h.show(); a.fire("floatingSpaceLayout", { show: n }); h.removeStyle("left"); h.removeStyle("right"); u = h.getClientRect(); r = m.getClientRect(); p = f.getViewPaneSize(); z = u.height; B = "pageXOffset" in f.$ ? f.$.pageXOffset : CKEDITOR.document.$.documentElement.scrollLeft; k ? (z + y <= r.top ? g("top") : z + y > p.height - r.bottom ? g("pin") : g("bottom"), d = p.width / 2, d = e.floatSpacePreferRight ? "right" : 0 < r.left && r.right < p.width && r.width > u.width ? "rtl" == e.contentsLangDirection ? "right" : "left" : d - r.left > r.right - d ? "left" : "right", u.width > p.width ? (d = "left", n = 0) : (n = "left" == d ? 0 < r.left ? r.left : 0 : r.right < p.width ? p.width - r.right : 0, n + u.width > p.width && (d = "left" == d ? "right" : "left", n = 0)), h.setStyle(d, b(("pin" == k ? D : t) + n + ("pin" == k ? 0 : "left" == d ? B : -B)))) : (k = "pin", g("pin"), l(d)) } } }(); if (m) { var d = new CKEDITOR.template('\x3cdiv id\x3d"cke_{name}" class\x3d"cke {id} cke_reset_all cke_chrome cke_editor_{name} cke_float cke_{langDir} ' + CKEDITOR.env.cssClass + '" dir\x3d"{langDir}" title\x3d"' + (CKEDITOR.env.gecko ? " " : "") + '" lang\x3d"{langCode}" role\x3d"application" style\x3d"{style}"' + (a.title ? ' aria-labelledby\x3d"cke_{name}_arialbl"' : " ") + "\x3e" + (a.title ? '\x3cspan id\x3d"cke_{name}_arialbl" class\x3d"cke_voice_label"\x3e{voiceLabel}\x3c/span\x3e' : " ") + '\x3cdiv class\x3d"cke_inner"\x3e\x3cdiv id\x3d"{topId}" class\x3d"cke_top" role\x3d"presentation"\x3e{content}\x3c/div\x3e\x3c/div\x3e\x3c/div\x3e'), h = CKEDITOR.document.getBody().append(CKEDITOR.dom.element.createFromHtml(d.output({ content: m, id: a.id, langDir: a.lang.dir, langCode: a.langCode, name: a.name, style: "display:none;z-index:" + (e.baseFloatZIndex - 1), topId: a.ui.spaceId("top"), voiceLabel: a.title }))), k = CKEDITOR.tools.eventsBuffer(500, l), g = CKEDITOR.tools.eventsBuffer(100, l); h.unselectable(); h.on("mousedown", function(a) { a = a.data; a.getTarget().hasAscendant("a", 1) || a.preventDefault() }); a.on("focus", function(b) { l(b); a.on("change", k.input); f.on("scroll", g.input); f.on("resize", g.input) }); a.on("blur", function() { h.hide(); a.removeListener("change", k.input); f.removeListener("scroll", g.input); f.removeListener("resize", g.input) }); a.on("destroy", function() { f.removeListener("scroll", g.input); f.removeListener("resize", g.input); h.clearCustomData(); h.remove() }); a.focusManager.hasFocus && h.show(); a.focusManager.add(h, 1) } } var f = CKEDITOR.document.getWindow(), b = CKEDITOR.tools.cssLength; CKEDITOR.plugins.add("floatingspace", { init: function(b) { b.on("loaded", function() { a(this) }, null, null, 20) } }) }(), CKEDITOR.plugins.add("listblock", { requires: "panel", onLoad: function() { var a = CKEDITOR.addTemplate("panel-list", '\x3cul role\x3d"presentation" class\x3d"cke_panel_list"\x3e{items}\x3c/ul\x3e'), f = CKEDITOR.addTemplate("panel-list-item", '\x3cli id\x3d"{id}" class\x3d"cke_panel_listItem" role\x3dpresentation\x3e\x3ca id\x3d"{id}_option" _cke_focus\x3d1 hidefocus\x3dtrue title\x3d"{title}" href\x3d"javascript:void(\'{val}\')" {onclick}\x3d"CKEDITOR.tools.callFunction({clickFn},\'{val}\'); return false;" role\x3d"option"\x3e{text}\x3c/a\x3e\x3c/li\x3e'), b = CKEDITOR.addTemplate("panel-list-group", '\x3ch1 id\x3d"{id}" class\x3d"cke_panel_grouptitle" role\x3d"presentation" \x3e{label}\x3c/h1\x3e'), c = /\'/g; CKEDITOR.ui.panel.prototype.addListBlock = function(a, b) { return this.addBlock(a, new CKEDITOR.ui.listBlock(this.getHolderElement(), b)) }; CKEDITOR.ui.listBlock = CKEDITOR.tools.createClass({ base: CKEDITOR.ui.panel.block, $: function(a, b) { b = b || {}; var c = b.attributes || (b.attributes = {}); (this.multiSelect = !!b.multiSelect) && (c["aria-multiselectable"] = !0); !c.role && (c.role = "listbox"); this.base.apply(this, arguments); this.element.setAttribute("role", c.role); c = this.keys; c[40] = "next"; c[9] = "next"; c[38] = "prev"; c[CKEDITOR.SHIFT + 9] = "prev"; c[32] = CKEDITOR.env.ie ? "mouseup" : "click"; CKEDITOR.env.ie && (c[13] = "mouseup"); this._.pendingHtml = []; this._.pendingList = []; this._.items = {}; this._.groups = {} }, _: { close: function() { if (this._.started) { var b = a.output({ items: this._.pendingList.join("") }); this._.pendingList = []; this._.pendingHtml.push(b); delete this._.started } }, getClick: function() { this._.click || (this._.click = CKEDITOR.tools.addFunction(function(a) { var b = this.toggle(a); if (this.onClick) this.onClick(a, b) }, this)); return this._.click } }, proto: { add: function(a, b, l) { var d = CKEDITOR.tools.getNextId(); this._.started || (this._.started = 1, this._.size = this._.size || 0); this._.items[a] = d; var h; h = CKEDITOR.tools.htmlEncodeAttr(a).replace(c, "\\'"); a = { id: d, val: h, onclick: CKEDITOR.env.ie ? 'onclick\x3d"return false;" onmouseup' : "onclick", clickFn: this._.getClick(), title: CKEDITOR.tools.htmlEncodeAttr(l || a), text: b || a }; this._.pendingList.push(f.output(a)) }, startGroup: function(a) { this._.close(); var c = CKEDITOR.tools.getNextId(); this._.groups[a] = c; this._.pendingHtml.push(b.output({ id: c, label: a })) }, commit: function() { this._.close(); this.element.appendHtml(this._.pendingHtml.join("")); delete this._.size; this._.pendingHtml = [] }, toggle: function(a) { var b = this.isMarked(a); b ? this.unmark(a) : this.mark(a); return !b }, hideGroup: function(a) { var b = (a = this.element.getDocument().getById(this._.groups[a])) && a.getNext(); a && (a.setStyle("display", "none"), b && "ul" == b.getName() && b.setStyle("display", "none")) }, hideItem: function(a) { this.element.getDocument().getById(this._.items[a]).setStyle("display", "none") }, showAll: function() { var a = this._.items, b = this._.groups, c = this.element.getDocument(), d; for (d in a) c.getById(a[d]).setStyle("display", ""); for (var f in b) a = c.getById(b[f]), d = a.getNext(), a.setStyle("display", ""), d && "ul" == d.getName() && d.setStyle("display", "") }, mark: function(a) { this.multiSelect || this.unmarkAll(); a = this._.items[a]; var b = this.element.getDocument().getById(a); b.addClass("cke_selected"); this.element.getDocument().getById(a + "_option").setAttribute("aria-selected", !0); this.onMark && this.onMark(b) }, unmark: function(a) { var b = this.element.getDocument(); a = this._.items[a]; var c = b.getById(a); c.removeClass("cke_selected"); b.getById(a + "_option").removeAttribute("aria-selected"); this.onUnmark && this.onUnmark(c) }, unmarkAll: function() { var a = this._.items, b = this.element.getDocument(), c; for (c in a) { var d = a[c]; b.getById(d).removeClass("cke_selected"); b.getById(d + "_option").removeAttribute("aria-selected") } this.onUnmark && this.onUnmark() }, isMarked: function(a) { return this.element.getDocument().getById(this._.items[a]).hasClass("cke_selected") }, focus: function(a) { this._.focusIndex = -1; var b = this.element.getElementsByTag("a"), c, d = -1; if (a) for (c = this.element.getDocument().getById(this._.items[a]).getFirst(); a = b.getItem(++d);) { if (a.equals(c)) { this._.focusIndex = d; break } } else this.element.focus(); c && setTimeout(function() { c.focus() }, 0) } } }) } }), function() { var a = '\x3ca id\x3d"{id}" class\x3d"cke_button cke_button__{name} cke_button_{state} {cls}"' + (CKEDITOR.env.gecko && !CKEDITOR.env.hc ? "" : " href\x3d\"javascript:void('{titleJs}')\"") + ' title\x3d"{title}" tabindex\x3d"-1" hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-describedby\x3d"{id}_description" aria-haspopup\x3d"{hasArrow}" aria-disabled\x3d"{ariaDisabled}"'; CKEDITOR.env.gecko && CKEDITOR.env.mac && (a += ' onkeypress\x3d"return false;"'); CKEDITOR.env.gecko && (a += ' onblur\x3d"this.style.cssText \x3d this.style.cssText;"'); var a = a + (' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" ' + (CKEDITOR.env.ie ? 'onclick\x3d"return false;" onmouseup' : "onclick") + '\x3d"CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan class\x3d"cke_button_icon cke_button__{iconName}_icon" style\x3d"{style}"'), a = a + '\x3e\x26nbsp;\x3c/span\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_button_label cke_button__{name}_label" aria-hidden\x3d"false"\x3e{label}\x3c/span\x3e\x3cspan id\x3d"{id}_description" class\x3d"cke_button_label" aria-hidden\x3d"false"\x3e{ariaShortcut}\x3c/span\x3e{arrowHtml}\x3c/a\x3e', f = CKEDITOR.addTemplate("buttonArrow", '\x3cspan class\x3d"cke_button_arrow"\x3e' + (CKEDITOR.env.hc ? "\x26#9660;" : "") + "\x3c/span\x3e"), b = CKEDITOR.addTemplate("button", a); CKEDITOR.plugins.add("button", { beforeInit: function(a) { a.ui.addHandler(CKEDITOR.UI_BUTTON, CKEDITOR.ui.button.handler) } }); CKEDITOR.UI_BUTTON = "button"; CKEDITOR.ui.button = function(a) { CKEDITOR.tools.extend(this, a, { title: a.label, click: a.click || function(b) { b.execCommand(a.command) } }); this._ = {} }; CKEDITOR.ui.button.handler = { create: function(a) { return new CKEDITOR.ui.button(a) } }; CKEDITOR.ui.button.prototype = { render: function(a, e) { function m() { var b = a.mode; b && (b = this.modes[b] ? void 0 !== p[b] ? p[b] : CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, b = a.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : b, this.setState(b), this.refresh && this.refresh()) } var l = CKEDITOR.env, d = this._.id = CKEDITOR.tools.getNextId(), h = "", k = this.command, g, n, w; this._.editor = a; var q = { id: d, button: this, editor: a, focus: function() { CKEDITOR.document.getById(d).focus() }, execute: function() { this.button.click(a) }, attach: function(a) { this.button.attach(a) } }, v = CKEDITOR.tools.addFunction(function(a) { if (q.onkey) return a = new CKEDITOR.dom.event(a), !1 !== q.onkey(q, a.getKeystroke()) }), u = CKEDITOR.tools.addFunction(function(a) { var b; q.onfocus && (b = !1 !== q.onfocus(q, new CKEDITOR.dom.event(a))); return b }), r = 0; q.clickFn = g = CKEDITOR.tools.addFunction(function() { r && (a.unlockSelection(1), r = 0); q.execute(); l.iOS && a.focus() }); if (this.modes) { var p = {}; a.on("beforeModeUnload", function() { a.mode && this._.state != CKEDITOR.TRISTATE_DISABLED && (p[a.mode] = this._.state) }, this); a.on("activeFilterChange", m, this); a.on("mode", m, this); !this.readOnly && a.on("readOnly", m, this) } else k && (k = a.getCommand(k)) && (k.on("state", function() { this.setState(k.state) }, this), h += k.state == CKEDITOR.TRISTATE_ON ? "on" : k.state == CKEDITOR.TRISTATE_DISABLED ? "disabled" : "off"); if (this.directional) a.on("contentDirChanged", function(b) { var d = CKEDITOR.document.getById(this._.id), e = d.getFirst(); b = b.data; b != a.lang.dir ? d.addClass("cke_" + b) : d.removeClass("cke_ltr").removeClass("cke_rtl"); e.setAttribute("style", CKEDITOR.skin.getIconStyle(z, "rtl" == b, this.icon, this.iconOffset)) }, this); k ? (n = a.getCommandKeystroke(k)) && (w = CKEDITOR.tools.keystrokeToString(a.lang.common.keyboard, n)) : h += "off"; var z = n = this.name || this.command; this.icon && !/\./.test(this.icon) && (z = this.icon, this.icon = null); h = { id: d, name: n, iconName: z, label: this.label, cls: this.className || "", state: h, ariaDisabled: "disabled" == h ? "true" : "false", title: this.title + (w ? " (" + w.display + ")" : ""), ariaShortcut: w ? a.lang.common.keyboardShortcut + " " + w.aria : "", titleJs: l.gecko && !l.hc ? "" : (this.title || "").replace("'", ""), hasArrow: this.hasArrow ? "true" : "false", keydownFn: v, focusFn: u, clickFn: g, style: CKEDITOR.skin.getIconStyle(z, "rtl" == a.lang.dir, this.icon, this.iconOffset), arrowHtml: this.hasArrow ? f.output() : "" }; b.output(h, e); if (this.onRender) this.onRender(); return q }, setState: function(a) { if (this._.state == a) return !1; this._.state = a; var b = CKEDITOR.document.getById(this._.id); return b ? (b.setState(a, "cke_button"), a == CKEDITOR.TRISTATE_DISABLED ? b.setAttribute("aria-disabled", !0) : b.removeAttribute("aria-disabled"), this.hasArrow ? (a = a == CKEDITOR.TRISTATE_ON ? this._.editor.lang.button.selectedLabel.replace(/%1/g, this.label) : this.label, CKEDITOR.document.getById(this._.id + "_label").setText(a)) : a == CKEDITOR.TRISTATE_ON ? b.setAttribute("aria-pressed", !0) : b.removeAttribute("aria-pressed"), !0) : !1 }, getState: function() { return this._.state }, toFeature: function(a) { if (this._.feature) return this._.feature; var b = this; this.allowedContent || this.requiredContent || !this.command || (b = a.getCommand(this.command) || b); return this._.feature = b } }; CKEDITOR.ui.prototype.addButton = function(a, b) { this.add(a, CKEDITOR.UI_BUTTON, b) } }(), CKEDITOR.plugins.add("richcombo", { requires: "floatpanel,listblock,button", beforeInit: function(a) { a.ui.addHandler(CKEDITOR.UI_RICHCOMBO, CKEDITOR.ui.richCombo.handler) } }), function() { var a = '\x3cspan id\x3d"{id}" class\x3d"cke_combo cke_combo__{name} {cls}" role\x3d"presentation"\x3e\x3cspan id\x3d"{id}_label" class\x3d"cke_combo_label"\x3e{label}\x3c/span\x3e\x3ca class\x3d"cke_combo_button" title\x3d"{title}" tabindex\x3d"-1"' + (CKEDITOR.env.gecko && !CKEDITOR.env.hc ? "" : " href\x3d\"javascript:void('{titleJs}')\"") + ' hidefocus\x3d"true" role\x3d"button" aria-labelledby\x3d"{id}_label" aria-haspopup\x3d"true"'; CKEDITOR.env.gecko && CKEDITOR.env.mac && (a += ' onkeypress\x3d"return false;"'); CKEDITOR.env.gecko && (a += ' onblur\x3d"this.style.cssText \x3d this.style.cssText;"'); var a = a + (' onkeydown\x3d"return CKEDITOR.tools.callFunction({keydownFn},event,this);" onfocus\x3d"return CKEDITOR.tools.callFunction({focusFn},event);" ' + (CKEDITOR.env.ie ? 'onclick\x3d"return false;" onmouseup' : "onclick") + '\x3d"CKEDITOR.tools.callFunction({clickFn},this);return false;"\x3e\x3cspan id\x3d"{id}_text" class\x3d"cke_combo_text cke_combo_inlinelabel"\x3e{label}\x3c/span\x3e\x3cspan class\x3d"cke_combo_open"\x3e\x3cspan class\x3d"cke_combo_arrow"\x3e' + (CKEDITOR.env.hc ? "\x26#9660;" : CKEDITOR.env.air ? "\x26nbsp;" : "") + "\x3c/span\x3e\x3c/span\x3e\x3c/a\x3e\x3c/span\x3e"), f = CKEDITOR.addTemplate("combo", a); CKEDITOR.UI_RICHCOMBO = "richcombo"; CKEDITOR.ui.richCombo = CKEDITOR.tools.createClass({ $: function(a) { CKEDITOR.tools.extend(this, a, { canGroup: !1, title: a.label, modes: { wysiwyg: 1 }, editorFocus: 1 }); a = this.panel || {}; delete this.panel; this.id = CKEDITOR.tools.getNextNumber(); this.document = a.parent && a.parent.getDocument() || CKEDITOR.document; a.className = "cke_combopanel"; a.block = { multiSelect: a.multiSelect, attributes: a.attributes }; a.toolbarRelated = !0; this._ = { panelDefinition: a, items: {} } }, proto: { renderHtml: function(a) { var c = []; this.render(a, c); return c.join("") }, render: function(a, c) { function e() { if (this.getState() != CKEDITOR.TRISTATE_ON) { var c = this.modes[a.mode] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED; a.readOnly && !this.readOnly && (c = CKEDITOR.TRISTATE_DISABLED); this.setState(c); this.setValue(""); c != CKEDITOR.TRISTATE_DISABLED && this.refresh && this.refresh() } } var m = CKEDITOR.env, l = "cke_" + this.id, d = CKEDITOR.tools.addFunction(function(c) { w && (a.unlockSelection(1), w = 0); k.execute(c) }, this), h = this, k = { id: l, combo: this, focus: function() { CKEDITOR.document.getById(l).getChild(1).focus() }, execute: function(c) { var d = h._; if (d.state != CKEDITOR.TRISTATE_DISABLED) if (h.createPanel(a), d.on) d.panel.hide(); else { h.commit(); var e = h.getValue(); e ? d.list.mark(e) : d.list.unmarkAll(); d.panel.showBlock(h.id, new CKEDITOR.dom.element(c), 4) } }, clickFn: d }; a.on("activeFilterChange", e, this); a.on("mode", e, this); a.on("selectionChange", e, this); !this.readOnly && a.on("readOnly", e, this); var g = CKEDITOR.tools.addFunction(function(c, e) { c = new CKEDITOR.dom.event(c); var f = c.getKeystroke(); if (40 == f) a.once("panelShow", function(a) { a.data._.panel._.currentBlock.onKeyDown(40) }); switch (f) { case 13: case 32: case 40: CKEDITOR.tools.callFunction(d, e); break; default: k.onkey(k, f) } c.preventDefault() }), n = CKEDITOR.tools.addFunction(function() { k.onfocus && k.onfocus() }), w = 0; k.keyDownFn = g; m = { id: l, name: this.name || this.command, label: this.label, title: this.title, cls: this.className || "", titleJs: m.gecko && !m.hc ? "" : (this.title || "").replace("'", ""), keydownFn: g, focusFn: n, clickFn: d }; f.output(m, c); if (this.onRender) this.onRender(); return k }, createPanel: function(a) { if (!this._.panel) { var c = this._.panelDefinition, e = this._.panelDefinition.block, f = c.parent || CKEDITOR.document.getBody(), l = "cke_combopanel__" + this.name, d = new CKEDITOR.ui.floatPanel(a, f, c), h = d.addListBlock(this.id, e), k = this; d.onShow = function() { this.element.addClass(l); k.setState(CKEDITOR.TRISTATE_ON); k._.on = 1; k.editorFocus && !a.focusManager.hasFocus && a.focus(); if (k.onOpen) k.onOpen(); a.once("panelShow", function() { h.focus(!h.multiSelect && k.getValue()) }) }; d.onHide = function(c) { this.element.removeClass(l); k.setState(k.modes && k.modes[a.mode] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED); k._.on = 0; if (!c && k.onClose) k.onClose() }; d.onEscape = function() { d.hide(1) }; h.onClick = function(a, b) { k.onClick && k.onClick.call(k, a, b); d.hide() }; this._.panel = d; this._.list = h; d.getBlock(this.id).onHide = function() { k._.on = 0; k.setState(CKEDITOR.TRISTATE_OFF) }; this.init && this.init() } }, setValue: function(a, c) { this._.value = a; var e = this.document.getById("cke_" + this.id + "_text"); e && (a || c ? e.removeClass("cke_combo_inlinelabel") : (c = this.label, e.addClass("cke_combo_inlinelabel")), e.setText("undefined" != typeof c ? c : a)) }, getValue: function() { return this._.value || "" }, unmarkAll: function() { this._.list.unmarkAll() }, mark: function(a) { this._.list.mark(a) }, hideItem: function(a) { this._.list.hideItem(a) }, hideGroup: function(a) { this._.list.hideGroup(a) }, showAll: function() { this._.list.showAll() }, add: function(a, c, e) { this._.items[a] = e || a; this._.list.add(a, c, e) }, startGroup: function(a) { this._.list.startGroup(a) }, commit: function() { this._.committed || (this._.list.commit(), this._.committed = 1, CKEDITOR.ui.fire("ready", this)); this._.committed = 1 }, setState: function(a) { if (this._.state != a) { var c = this.document.getById("cke_" + this.id); c.setState(a, "cke_combo"); a == CKEDITOR.TRISTATE_DISABLED ? c.setAttribute("aria-disabled", !0) : c.removeAttribute("aria-disabled"); this._.state = a } }, getState: function() { return this._.state }, enable: function() { this._.state == CKEDITOR.TRISTATE_DISABLED && this.setState(this._.lastState) }, disable: function() { this._.state != CKEDITOR.TRISTATE_DISABLED && (this._.lastState = this._.state, this.setState(CKEDITOR.TRISTATE_DISABLED)) } }, statics: { handler: { create: function(a) { return new CKEDITOR.ui.richCombo(a) } } } }); CKEDITOR.ui.prototype.addRichCombo = function(a, c) { this.add(a, CKEDITOR.UI_RICHCOMBO, c) } }(), CKEDITOR.plugins.add("format", { requires: "richcombo", init: function(a) { if (!a.blockless) { for (var f = a.config, b = a.lang.format, c = f.format_tags.split(";"), e = {}, m = 0, l = [], d = 0; d < c.length; d++) { var h = c[d], k = new CKEDITOR.style(f["format_" + h]); if (!a.filter.customConfig || a.filter.check(k)) m++, e[h] = k, e[h]._.enterMode = a.config.enterMode, l.push(k) } 0 !== m && a.ui.addRichCombo("Format", { label: b.label, title: b.panelTitle, toolbar: "styles,20", allowedContent: l, panel: { css: [CKEDITOR.skin.getPath("editor")].concat(f.contentsCss), multiSelect: !1, attributes: { "aria-label": b.panelTitle } }, init: function() { this.startGroup(b.panelTitle); for (var a in e) { var c = b["tag_" + a]; this.add(a, e[a].buildPreview(c), c) } }, onClick: function(b) { a.focus(); a.fire("saveSnapshot"); b = e[b]; var c = a.elementPath(); a[b.checkActive(c, a) ? "removeStyle" : "applyStyle"](b); setTimeout(function() { a.fire("saveSnapshot") }, 0) }, onRender: function() { a.on("selectionChange", function(b) { var c = this.getValue(); b = b.data.path; this.refresh(); for (var d in e) if (e[d].checkActive(b, a)) { d != c && this.setValue(d, a.lang.format["tag_" + d]); return } this.setValue("") }, this) }, onOpen: function() { this.showAll(); for (var b in e) a.activeFilter.check(e[b]) || this.hideItem(b) }, refresh: function() { var b = a.elementPath(); if (b) { if (b.isContextFor("p")) for (var c in e) if (a.activeFilter.check(e[c])) return; this.setState(CKEDITOR.TRISTATE_DISABLED) } } }) } } }), CKEDITOR.config.format_tags = "p;h1;h2;h3;h4;h5;h6;pre;address;div", CKEDITOR.config.format_p = { element: "p" }, CKEDITOR.config.format_div = { element: "div" }, CKEDITOR.config.format_pre = { element: "pre" }, CKEDITOR.config.format_address = { element: "address" }, CKEDITOR.config.format_h1 = { element: "h1" }, CKEDITOR.config.format_h2 = { element: "h2" }, CKEDITOR.config.format_h3 = { element: "h3" }, CKEDITOR.config.format_h4 = { element: "h4" }, CKEDITOR.config.format_h5 = { element: "h5" }, CKEDITOR.config.format_h6 = { element: "h6" }, function() { var a = { canUndo: !1, exec: function(a) { var b = a.document.createElement("hr"); a.insertElement(b) }, allowedContent: "hr", requiredContent: "hr" }; CKEDITOR.plugins.add("horizontalrule", { init: function(f) { f.blockless || (f.addCommand("horizontalrule", a), f.ui.addButton && f.ui.addButton("HorizontalRule", { label: f.lang.horizontalrule.toolbar, command: "horizontalrule", toolbar: "insert,40" })) } }) }(), CKEDITOR.plugins.add("htmlwriter", { init: function(a) { var f = new CKEDITOR.htmlWriter; f.forceSimpleAmpersand = a.config.forceSimpleAmpersand; f.indentationChars = a.config.dataIndentationChars || "\t"; a.dataProcessor.writer = f } }), CKEDITOR.htmlWriter = CKEDITOR.tools.createClass({ base: CKEDITOR.htmlParser.basicWriter, $: function() { this.base(); this.indentationChars = "\t"; this.selfClosingEnd = " /\x3e"; this.lineBreakChars = "\n"; this.sortAttributes = 1; this._.indent = 0; this._.indentation = ""; this._.inPre = 0; this._.rules = {}; var a = CKEDITOR.dtd, f; for (f in CKEDITOR.tools.extend({}, a.$nonBodyContent, a.$block, a.$listItem, a.$tableContent)) this.setRules(f, { indent: !a[f]["#"], breakBeforeOpen: 1, breakBeforeClose: !a[f]["#"], breakAfterClose: 1, needsSpace: f in a.$block && !(f in { li: 1, dt: 1, dd: 1 }) }); this.setRules("br", { breakAfterOpen: 1 }); this.setRules("title", { indent: 0, breakAfterOpen: 0 }); this.setRules("style", { indent: 0, breakBeforeClose: 1 }); this.setRules("pre", { breakAfterOpen: 1, indent: 0 }) }, proto: { openTag: function(a) { var f = this._.rules[a]; this._.afterCloser && f && f.needsSpace && this._.needsSpace && this._.output.push("\n"); this._.indent ? this.indentation() : f && f.breakBeforeOpen && (this.lineBreak(), this.indentation()); this._.output.push("\x3c", a); this._.afterCloser = 0 }, openTagClose: function(a, f) { var b = this._.rules[a]; f ? (this._.output.push(this.selfClosingEnd), b && b.breakAfterClose && (this._.needsSpace = b.needsSpace)) : (this._.output.push("\x3e"), b && b.indent && (this._.indentation += this.indentationChars)); b && b.breakAfterOpen && this.lineBreak(); "pre" == a && (this._.inPre = 1) }, attribute: function(a, f) { "string" == typeof f && (this.forceSimpleAmpersand && (f = f.replace(/&/g, "\x26")), f = CKEDITOR.tools.htmlEncodeAttr(f)); this._.output.push(" ", a, '\x3d"', f, '"') }, closeTag: function(a) { var f = this._.rules[a]; f && f.indent && (this._.indentation = this._.indentation.substr(this.indentationChars.length)); this._.indent ? this.indentation() : f && f.breakBeforeClose && (this.lineBreak(), this.indentation()); this._.output.push("\x3c/", a, "\x3e"); "pre" == a && (this._.inPre = 0); f && f.breakAfterClose && (this.lineBreak(), this._.needsSpace = f.needsSpace); this._.afterCloser = 1 }, text: function(a) { this._.indent && (this.indentation(), !this._.inPre && (a = CKEDITOR.tools.ltrim(a))); this._.output.push(a) }, comment: function(a) { this._.indent && this.indentation(); this._.output.push("\x3c!--", a, "--\x3e") }, lineBreak: function() { !this._.inPre && 0 < this._.output.length && this._.output.push(this.lineBreakChars); this._.indent = 1 }, indentation: function() { !this._.inPre && this._.indentation && this._.output.push(this._.indentation); this._.indent = 0 }, reset: function() { this._.output = []; this._.indent = 0; this._.indentation = ""; this._.afterCloser = 0; this._.inPre = 0; this._.needsSpace = 0 }, setRules: function(a, f) { var b = this._.rules[a]; b ? CKEDITOR.tools.extend(b, f, !0) : this._.rules[a] = f } } }), function() { function a(a, c) { c || (c = a.getSelection().getSelectedElement()); if (c && c.is("img") && !c.data("cke-realelement") && !c.isReadOnly()) return c } function f(a) { var c = a.getStyle("float"); if ("inherit" == c || "none" == c) c = 0; c || (c = a.getAttribute("align")); return c } CKEDITOR.plugins.add("image", { requires: "dialog", init: function(b) { if (!b.plugins.image2) { CKEDITOR.dialog.add("image", this.path + "dialogs/image.js"); var c = "img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}"; CKEDITOR.dialog.isTabEnabled(b, "image", "advanced") && (c = "img[alt,dir,id,lang,longdesc,!src,title]{*}(*)"); b.addCommand("image", new CKEDITOR.dialogCommand("image", { allowedContent: c, requiredContent: "img[alt,src]", contentTransformations: [ ["img{width}: sizeToStyle", "img[width]: sizeToAttribute"], ["img{float}: alignmentToStyle", "img[align]: alignmentToAttribute"] ] })); b.ui.addButton && b.ui.addButton("Image", { label: b.lang.common.image, command: "image", toolbar: "insert,10" }); b.on("doubleclick", function(a) { var b = a.data.element; !b.is("img") || b.data("cke-realelement") || b.isReadOnly() || (a.data.dialog = "image") }); b.addMenuItems && b.addMenuItems({ image: { label: b.lang.image.menu, command: "image", group: "image" } }); b.contextMenu && b.contextMenu.addListener(function(c) { if (a(b, c)) return { image: CKEDITOR.TRISTATE_OFF } }) } }, afterInit: function(b) { function c(c) { var m = b.getCommand("justify" + c); if (m) { if ("left" == c || "right" == c) m.on("exec", function(l) { var d = a(b), h; d && (h = f(d), h == c ? (d.removeStyle("float"), c == f(d) && d.removeAttribute("align")) : d.setStyle("float", c), l.cancel()) }); m.on("refresh", function(l) { var d = a(b); d && (d = f(d), this.setState(d == c ? CKEDITOR.TRISTATE_ON : "right" == c || "left" == c ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED), l.cancel()) }) } } b.plugins.image2 || (c("left"), c("right"), c("center"), c("block")) } }) }(), CKEDITOR.config.image_removeLinkByEmptyURL = !0, function() { function a(a, b) { var d = c.exec(a), e = c.exec(b); if (d) { if (!d[2] && "px" == e[2]) return e[1]; if ("px" == d[2] && !e[2]) return e[1] + "px" } return b } var f = CKEDITOR.htmlParser.cssStyle, b = CKEDITOR.tools.cssLength, c = /^((?:\d*(?:\.\d+))|(?:\d+))(.*)?$/i, e = { elements: { $: function(b) { var c = b.attributes; if ((c = (c = (c = c && c["data-cke-realelement"]) && new CKEDITOR.htmlParser.fragment.fromHtml(decodeURIComponent(c))) && c.children[0]) && b.attributes["data-cke-resizable"]) { var d = (new f(b)).rules; b = c.attributes; var e = d.width, d = d.height; e && (b.width = a(b.width, e)); d && (b.height = a(b.height, d)) } return c } } }; CKEDITOR.plugins.add("fakeobjects", { init: function(a) { a.filter.allow("img[!data-cke-realelement,src,alt,title](*){*}", "fakeobjects") }, afterInit: function(a) { (a = (a = a.dataProcessor) && a.htmlFilter) && a.addRules(e, { applyToAll: !0 }) } }); CKEDITOR.editor.prototype.createFakeElement = function(a, c, d, e) { var k = this.lang.fakeobjects, k = k[d] || k.unknown; c = { "class": c, "data-cke-realelement": encodeURIComponent(a.getOuterHtml()), "data-cke-real-node-type": a.type, alt: k, title: k, align: a.getAttribute("align") || "" }; CKEDITOR.env.hc || (c.src = CKEDITOR.tools.transparentImageData); d && (c["data-cke-real-element-type"] = d); e && (c["data-cke-resizable"] = e, d = new f, e = a.getAttribute("width"), a = a.getAttribute("height"), e && (d.rules.width = b(e)), a && (d.rules.height = b(a)), d.populate(c)); return this.document.createElement("img", { attributes: c }) }; CKEDITOR.editor.prototype.createFakeParserElement = function(a, c, d, e) { var k = this.lang.fakeobjects, k = k[d] || k.unknown, g; g = new CKEDITOR.htmlParser.basicWriter; a.writeHtml(g); g = g.getHtml(); c = { "class": c, "data-cke-realelement": encodeURIComponent(g), "data-cke-real-node-type": a.type, alt: k, title: k, align: a.attributes.align || "" }; CKEDITOR.env.hc || (c.src = CKEDITOR.tools.transparentImageData); d && (c["data-cke-real-element-type"] = d); e && (c["data-cke-resizable"] = e, e = a.attributes, a = new f, d = e.width, e = e.height, void 0 !== d && (a.rules.width = b(d)), void 0 !== e && (a.rules.height = b(e)), a.populate(c)); return new CKEDITOR.htmlParser.element("img", c) }; CKEDITOR.editor.prototype.restoreRealElement = function(b) { if (b.data("cke-real-node-type") != CKEDITOR.NODE_ELEMENT) return null; var c = CKEDITOR.dom.element.createFromHtml(decodeURIComponent(b.data("cke-realelement")), this.document); if (b.data("cke-resizable")) { var d = b.getStyle("width"); b = b.getStyle("height"); d && c.setAttribute("width", a(c.getAttribute("width"), d)); b && c.setAttribute("height", a(c.getAttribute("height"), b)) } return c } }(), "use strict", function() { function a(a) { return a.replace(/'/g, "\\$\x26") } function f(a) { for (var b, c = a.length, d = [], e = 0; e < c; e++) b = a.charCodeAt(e), d.push(b); return "String.fromCharCode(" + d.join(",") + ")" } function b(b, c) { var d = b.plugins.link, e = d.compiledProtectionFunction.params, f, g; g = [d.compiledProtectionFunction.name, "(" ]; for (var h = 0; h < e.length; h++) d = e[h].toLowerCase(), f = c[d], 0 < h && g.push(","), g.push("'", f ? a(encodeURIComponent(c[d])) : "", "'"); g.push(")"); return g.join("") } function c(a) { a = a.config.emailProtection || ""; var b; a && "encode" != a && (b = {}, a.replace(/^([^(]+)\(([^)]+)\)$/, function(a, c, d) { b.name = c; b.params = []; d.replace(/[^,\s]+/g, function(a) { b.params.push(a) }) })); return b } CKEDITOR.plugins.add("link", { requires: "dialog,fakeobjects", onLoad: function() { function a(b) { return c.replace(/%1/g, "rtl" == b ? "right" : "left").replace(/%2/g, "cke_contents_" + b) } var b = "background:url(" + CKEDITOR.getUrl(this.path + "images" + (CKEDITOR.env.hidpi ? "/hidpi" : "") + "/anchor.png") + ") no-repeat %1 center;border:1px dotted #00f;background-size:16px;", c = ".%2 a.cke_anchor,.%2 a.cke_anchor_empty,.cke_editable.%2 a[name],.cke_editable.%2 a[data-cke-saved-name]{" + b + "padding-%1:18px;cursor:auto;}.%2 img.cke_anchor{" + b + "width:16px;min-height:15px;height:1.15em;vertical-align:text-bottom;}"; CKEDITOR.addCss(a("ltr") + a("rtl")) }, init: function(a) { var b = "a[!href]"; CKEDITOR.dialog.isTabEnabled(a, "link", "advanced") && (b = b.replace("]", ",accesskey,charset,dir,id,lang,name,rel,tabindex,title,type,download]{*}(*)")); CKEDITOR.dialog.isTabEnabled(a, "link", "target") && (b = b.replace("]", ",target,onclick]")); a.addCommand("link", new CKEDITOR.dialogCommand("link", { allowedContent: b, requiredContent: "a[href]" })); a.addCommand("anchor", new CKEDITOR.dialogCommand("anchor", { allowedContent: "a[!name,id]", requiredContent: "a[name]" })); a.addCommand("unlink", new CKEDITOR.unlinkCommand); a.addCommand("removeAnchor", new CKEDITOR.removeAnchorCommand); a.setKeystroke(CKEDITOR.CTRL + 76, "link"); a.ui.addButton && (a.ui.addButton("Link", { label: a.lang.link.toolbar, command: "link", toolbar: "links,10" }), a.ui.addButton("Unlink", { label: a.lang.link.unlink, command: "unlink", toolbar: "links,20" }), a.ui.addButton("Anchor", { label: a.lang.link.anchor.toolbar, command: "anchor", toolbar: "links,30" })); CKEDITOR.dialog.add("link", this.path + "dialogs/link.js"); CKEDITOR.dialog.add("anchor", this.path + "dialogs/anchor.js"); a.on("doubleclick", function(b) { var c = CKEDITOR.plugins.link.getSelectedLink(a) || b.data.element; c.isReadOnly() || (c.is("a") ? (b.data.dialog = !c.getAttribute("name") || c.getAttribute("href") && c.getChildCount() ? "link" : "anchor", b.data.link = c) : CKEDITOR.plugins.link.tryRestoreFakeAnchor(a, c) && (b.data.dialog = "anchor")) }, null, null, 0); a.on("doubleclick", function(b) { b.data.dialog in { link: 1, anchor: 1 } && b.data.link && a.getSelection().selectElement(b.data.link) }, null, null, 20); a.addMenuItems && a.addMenuItems({ anchor: { label: a.lang.link.anchor.menu, command: "anchor", group: "anchor", order: 1 }, removeAnchor: { label: a.lang.link.anchor.remove, command: "removeAnchor", group: "anchor", order: 5 }, link: { label: a.lang.link.menu, command: "link", group: "link", order: 1 }, unlink: { label: a.lang.link.unlink, command: "unlink", group: "link", order: 5 } }); a.contextMenu && a.contextMenu.addListener(function(b) { if (!b || b.isReadOnly()) return null; b = CKEDITOR.plugins.link.tryRestoreFakeAnchor(a, b); if (!b && !(b = CKEDITOR.plugins.link.getSelectedLink(a))) return null; var c = {}; b.getAttribute("href") && b.getChildCount() && (c = { link: CKEDITOR.TRISTATE_OFF, unlink: CKEDITOR.TRISTATE_OFF }); b && b.hasAttribute("name") && (c.anchor = c.removeAnchor = CKEDITOR.TRISTATE_OFF); return c }); this.compiledProtectionFunction = c(a) }, afterInit: function(a) { a.dataProcessor.dataFilter.addRules({ elements: { a: function(b) { return b.attributes.name ? b.children.length ? null : a.createFakeParserElement(b, "cke_anchor", "anchor") : null } } }); var b = a._.elementsPath && a._.elementsPath.filters; b && b.push(function(b, c) { if ("a" == c && (CKEDITOR.plugins.link.tryRestoreFakeAnchor(a, b) || b.getAttribute("name") && (!b.getAttribute("href") || !b.getChildCount()))) return "anchor" }) } }); var e = /^javascript:/, m = /^mailto:([^?]+)(?:\?(.+))?$/, l = /subject=([^;?:@&=$,\/]*)/i, d = /body=([^;?:@&=$,\/]*)/i, h = /^#(.*)$/, k = /^((?:http|https|ftp|news):\/\/)?(.*)$/, g = /^(_(?:self|top|parent|blank))$/, n = /^javascript:void\(location\.href='mailto:'\+String\.fromCharCode\(([^)]+)\)(?:\+'(.*)')?\)$/, w = /^javascript:([^(]+)\(([^)]+)\)$/, q = /\s*window.open\(\s*this\.href\s*,\s*(?:'([^']*)'|null)\s*,\s*'([^']*)'\s*\)\s*;\s*return\s*false;*\s*/, v = /(?:^|,)([^=]+)=(\d+|yes|no)/gi, u = { id: "advId", dir: "advLangDir", accessKey: "advAccessKey", name: "advName", lang: "advLangCode", tabindex: "advTabIndex", title: "advTitle", type: "advContentType", "class": "advCSSClasses", charset: "advCharset", style: "advStyles", rel: "advRel" }; CKEDITOR.plugins.link = { getSelectedLink: function(a) { var b = a.getSelection(), c = b.getSelectedElement(); return c && c.is("a") ? c : (b = b.getRanges()[0]) ? (b.shrink(CKEDITOR.SHRINK_TEXT), a.elementPath(b.getCommonAncestor()).contains("a", 1)) : null }, getEditorAnchors: function(a) { for (var b = a.editable(), c = b.isInline() && !a.plugins.divarea ? a.document : b, b = c.getElementsByTag("a"), c = c.getElementsByTag("img"), d = [], e = 0, f; f = b.getItem(e++);)(f.data("cke-saved-name") || f.hasAttribute("name")) && d.push({ name: f.data("cke-saved-name") || f.getAttribute("name"), id: f.getAttribute("id") }); for (e = 0; f = c.getItem(e++);)(f = this.tryRestoreFakeAnchor(a, f)) && d.push({ name: f.getAttribute("name"), id: f.getAttribute("id") }); return d }, fakeAnchor: !0, tryRestoreFakeAnchor: function(a, b) { if (b && b.data("cke-real-element-type") && "anchor" == b.data("cke-real-element-type")) { var c = a.restoreRealElement(b); if (c.data("cke-saved-name")) return c } }, parseLinkAttributes: function(a, b) { var c = b && (b.data("cke-saved-href") || b.getAttribute("href")) || "", f = a.plugins.link.compiledProtectionFunction, t = a.config.emailProtection, y, D = {}; c.match(e) && ("encode" == t ? c = c.replace(n, function(a, b, c) { c = c || ""; return "mailto:" + String.fromCharCode.apply(String, b.split(",")) + c.replace(/\\'/g, "'") }) : t && c.replace(w, function(a, b, c) { if (b == f.name) { D.type = "email"; a = D.email = {}; b = /(^')|('$)/g; c = c.match(/[^,\s]+/g); for (var d = c.length, e, g, h = 0; h < d; h++) e = decodeURIComponent, g = c[h].replace(b, "").replace(/\\'/g, "'"), g = e(g), e = f.params[h].toLowerCase(), a[e] = g; a.address = [a.name, a.domain].join("@") } })); if (!D.type) if (t = c.match(h)) D.type = "anchor", D.anchor = {}, D.anchor.name = D.anchor.id = t[1]; else if (t = c.match(m)) { y = c.match(l); c = c.match(d); D.type = "email"; var x = D.email = {}; x.address = t[1]; y && (x.subject = decodeURIComponent(y[1])); c && (x.body = decodeURIComponent(c[1])) } else c && (y = c.match(k)) && (D.type = "url", D.url = {}, D.url.protocol = y[1], D.url.url = y[2]); if (b) { if (c = b.getAttribute("target")) D.target = { type: c.match(g) ? c : "frame", name: c }; else if (c = (c = b.data("cke-pa-onclick") || b.getAttribute("onclick")) && c.match(q)) for (D.target = { type: "popup", name: c[1] }; t = v.exec(c[2]);) "yes" != t[2] && "1" != t[2] || t[1] in { height: 1, width: 1, top: 1, left: 1 } ? isFinite(t[2]) && (D.target[t[1]] = t[2]) : D.target[t[1]] = !0; null !== b.getAttribute("download") && (D.download = !0); var c = {}, A; for (A in u)(t = b.getAttribute(A)) && (c[u[A]] = t); if (A = b.data("cke-saved-name") || c.advName) c.advName = A; CKEDITOR.tools.isEmpty(c) || (D.advanced = c) } return D }, getLinkAttributes: function(c, d) { var e = c.config.emailProtection || "", g = {}; switch (d.type) { case "url": var e = d.url && void 0 !== d.url.protocol ? d.url.protocol : "http://", h = d.url && CKEDITOR.tools.trim(d.url.url) || ""; g["data-cke-saved-href"] = 0 === h.indexOf("/") ? h : e + h; break; case "anchor": e = d.anchor && d.anchor.id; g["data-cke-saved-href"] = "#" + (d.anchor && d.anchor.name || e || ""); break; case "email": var k = d.email, h = k.address; switch (e) { case "": case "encode": var l = encodeURIComponent(k.subject || ""), m = encodeURIComponent(k.body || ""), k = []; l && k.push("subject\x3d" + l); m && k.push("body\x3d" + m); k = k.length ? "?" + k.join("\x26") : ""; "encode" == e ? (e = ["javascript:void(location.href\x3d'mailto:'+", f(h)], k && e.push("+'", a(k), "'"), e.push(")")) : e = ["mailto:", h, k]; break; default: e = h.split("@", 2), k.name = e[0], k.domain = e[1], e = ["javascript:", b(c, k)] } g["data-cke-saved-href"] = e.join("") } if (d.target) if ("popup" == d.target.type) { for (var e = ["window.open(this.href, '", d.target.name || "", "', '" ], n = "resizable status location toolbar menubar fullscreen scrollbars dependent".split(" "), h = n.length, l = function(a) { d.target[a] && n.push(a + "\x3d" + d.target[a]) }, k = 0; k < h; k++) n[k] += d.target[n[k]] ? "\x3dyes" : "\x3dno"; l("width"); l("left"); l("height"); l("top"); e.push(n.join(","), "'); return false;"); g["data-cke-pa-onclick"] = e.join("") } else "notSet" != d.target.type && d.target.name && (g.target = d.target.name); d.download && (g.download = ""); if (d.advanced) { for (var q in u)(e = d.advanced[u[q]]) && (g[q] = e); g.name && (g["data-cke-saved-name"] = g.name) } g["data-cke-saved-href"] && (g.href = g["data-cke-saved-href"]); q = { target: 1, onclick: 1, "data-cke-pa-onclick": 1, "data-cke-saved-name": 1, download: 1 }; d.advanced && CKEDITOR.tools.extend(q, u); for (var v in g) delete q[v]; return { set: g, removed: CKEDITOR.tools.objectKeys(q) } }, showDisplayTextForElement: function(a, b) { var c = { img: 1, table: 1, tbody: 1, thead: 1, tfoot: 1, input: 1, select: 1, textarea: 1 }; return b.widgets && b.widgets.focused ? !1 : !a || !a.getName || !a.is(c) } }; CKEDITOR.unlinkCommand = function() {}; CKEDITOR.unlinkCommand.prototype = { exec: function(a) { var b = new CKEDITOR.style({ element: "a", type: CKEDITOR.STYLE_INLINE, alwaysRemoveElement: 1 }); a.removeStyle(b) }, refresh: function(a, b) { var c = b.lastElement && b.lastElement.getAscendant("a", !0); c && "a" == c.getName() && c.getAttribute("href") && c.getChildCount() ? this.setState(CKEDITOR.TRISTATE_OFF) : this.setState(CKEDITOR.TRISTATE_DISABLED) }, contextSensitive: 1, startDisabled: 1, requiredContent: "a[href]" }; CKEDITOR.removeAnchorCommand = function() {}; CKEDITOR.removeAnchorCommand.prototype = { exec: function(a) { var b = a.getSelection(), c = b.createBookmarks(), d; if (b && (d = b.getSelectedElement()) && (d.getChildCount() ? d.is("a") : CKEDITOR.plugins.link.tryRestoreFakeAnchor(a, d))) d.remove(1); else if (d = CKEDITOR.plugins.link.getSelectedLink(a)) d.hasAttribute("href") ? (d.removeAttributes({ name: 1, "data-cke-saved-name": 1 }), d.removeClass("cke_anchor")) : d.remove(1); b.selectBookmarks(c) }, requiredContent: "a[name]" }; CKEDITOR.tools.extend(CKEDITOR.config, { linkShowAdvancedTab: !0, linkShowTargetTab: !0 }) }(), "use strict", function() { function a(a, b, c) { return n(b) && n(c) && c.equals(b.getNext(function(a) { return !(Z(a) || aa(a) || w(a)) })) } function f(a) { this.upper = a[0]; this.lower = a[1]; this.set.apply(this, a.slice(2)) } function b(a) { var b = a.element; if (b && n(b) && (b = b.getAscendant(a.triggers, !0)) && a.editable.contains(b)) { var c = l(b); if ("true" == c.getAttribute("contenteditable")) return b; if (c.is(a.triggers)) return c } return null } function c(a, b, c) { t(a, b); t(a, c); a = b.size.bottom; c = c.size.top; return a && c ? 0 | (a + c) / 2 : a || c } function e(a, b, c) { return b = b[c ? "getPrevious" : "getNext"](function(b) { return b && b.type == CKEDITOR.NODE_TEXT && !Z(b) || n(b) && !w(b) && !g(a, b) }) } function m(a, b, c) { return a > b && a < c } function l(a, b) { if (a.data("cke-editable")) return null; for (b || (a = a.getParent()); a && !a.data("cke-editable");) { if (a.hasAttribute("contenteditable")) return a; a = a.getParent() } return null } function d(a) { var b = a.doc, c = F('\x3cspan contenteditable\x3d"false" style\x3d"' + R + "position:absolute;border-top:1px dashed " + a.boxColor + '"\x3e\x3c/span\x3e', b), d = CKEDITOR.getUrl(this.path + "images/" + (G.hidpi ? "hidpi/" : "") + "icon" + (a.rtl ? "-rtl" : "") + ".png"); A(c, { attach: function() { this.wrap.getParent() || this.wrap.appendTo(a.editable, !0); return this }, lineChildren: [A(F('\x3cspan title\x3d"' + a.editor.lang.magicline.title + '" contenteditable\x3d"false"\x3e\x26#8629;\x3c/span\x3e', b), { base: R + "height:17px;width:17px;" + (a.rtl ? "left" : "right") + ":17px;background:url(" + d + ") center no-repeat " + a.boxColor + ";cursor:pointer;" + (G.hc ? "font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;" : "") + (G.hidpi ? "background-size: 9px 10px;" : ""), looks: ["top:-8px; border-radius: 2px;", "top:-17px; border-radius: 2px 2px 0px 0px;", "top:-1px; border-radius: 0px 0px 2px 2px;"] }), A(F(Y, b), { base: Q + "left:0px;border-left-color:" + a.boxColor + ";", looks: ["border-width:8px 0 8px 8px;top:-8px", "border-width:8px 0 0 8px;top:-8px", "border-width:0 0 8px 8px;top:0px"] }), A(F(Y, b), { base: Q + "right:0px;border-right-color:" + a.boxColor + ";", looks: ["border-width:8px 8px 8px 0;top:-8px", "border-width:8px 8px 0 0;top:-8px", "border-width:0 8px 8px 0;top:0px" ] })], detach: function() { this.wrap.getParent() && this.wrap.remove(); return this }, mouseNear: function() { t(a, this); var b = a.holdDistance, c = this.size; return c && m(a.mouse.y, c.top - b, c.bottom + b) && m(a.mouse.x, c.left - b, c.right + b) ? !0 : !1 }, place: function() { var b = a.view, c = a.editable, d = a.trigger, e = d.upper, f = d.lower, g = e || f, h = g.getParent(), k = {}; this.trigger = d; e && t(a, e, !0); f && t(a, f, !0); t(a, h, !0); a.inInlineMode && y(a, !0); h.equals(c) ? (k.left = b.scroll.x, k.right = -b.scroll.x, k.width = "") : (k.left = g.size.left - g.size.margin.left + b.scroll.x - (a.inInlineMode ? b.editable.left + b.editable.border.left : 0), k.width = g.size.outerWidth + g.size.margin.left + g.size.margin.right + b.scroll.x, k.right = ""); e && f ? k.top = e.size.margin.bottom === f.size.margin.top ? 0 | e.size.bottom + e.size.margin.bottom / 2 : e.size.margin.bottom < f.size.margin.top ? e.size.bottom + e.size.margin.bottom : e.size.bottom + e.size.margin.bottom - f.size.margin.top : e ? f || (k.top = e.size.bottom + e.size.margin.bottom) : k.top = f.size.top - f.size.margin.top; d.is(T) || m(k.top, b.scroll.y - 15, b.scroll.y + 5) ? (k.top = a.inInlineMode ? 0 : b.scroll.y, this.look(T)) : d.is(M) || m(k.top, b.pane.bottom - 5, b.pane.bottom + 15) ? (k.top = a.inInlineMode ? b.editable.height + b.editable.padding.top + b.editable.padding.bottom : b.pane.bottom - 1, this.look(M)) : (a.inInlineMode && (k.top -= b.editable.top + b.editable.border.top), this.look(V)); a.inInlineMode && (k.top--, k.top += b.editable.scroll.top, k.left += b.editable.scroll.left); for (var l in k) k[l] = CKEDITOR.tools.cssLength(k[l]); this.setStyles(k) }, look: function(a) { if (this.oldLook != a) { for (var b = this.lineChildren.length, c; b--;)(c = this.lineChildren[b]).setAttribute("style", c.base + c.looks[0 | a / 2]); this.oldLook = a } }, wrap: new C("span", a.doc) }); for (b = c.lineChildren.length; b--;) c.lineChildren[b].appendTo(c); c.look(V); c.appendTo(c.wrap); c.unselectable(); c.lineChildren[0].on("mouseup", function(b) { c.detach(); h(a, function(b) { var c = a.line.trigger; b[c.is(J) ? "insertBefore" : "insertAfter"](c.is(J) ? c.lower : c.upper) }, !0); a.editor.focus(); G.ie || a.enterMode == CKEDITOR.ENTER_BR || a.hotNode.scrollIntoView(); b.data.preventDefault(!0) }); c.on("mousedown", function(a) { a.data.preventDefault(!0) }); a.line = c } function h(a, b, c) { var d = new CKEDITOR.dom.range(a.doc), e = a.editor, f; G.ie && a.enterMode == CKEDITOR.ENTER_BR ? f = a.doc.createText(da) : (f = (f = l(a.element, !0)) && f.data("cke-enter-mode") || a.enterMode, f = new C(K[f], a.doc), f.is("br") || a.doc.createText(da).appendTo(f)); c && e.fire("saveSnapshot"); b(f); d.moveToPosition(f, CKEDITOR.POSITION_AFTER_START); e.getSelection().selectRanges([d]); a.hotNode = f; c && e.fire("saveSnapshot") } function k(a, c) { return { canUndo: !0, modes: { wysiwyg: 1 }, exec: function() { function d(b) { var e = G.ie && 9 > G.version ? " " : da, f = a.hotNode && a.hotNode.getText() == e && a.element.equals(a.hotNode) && a.lastCmdDirection === !!c; h(a, function(d) { f && a.hotNode && a.hotNode.remove(); d[c ? "insertAfter" : "insertBefore"](b); d.setAttributes({ "data-cke-magicline-hot": 1, "data-cke-magicline-dir": !!c }); a.lastCmdDirection = !!c }); G.ie || a.enterMode == CKEDITOR.ENTER_BR || a.hotNode.scrollIntoView(); a.line.detach() } return function(f) { f = f.getSelection().getStartElement(); var g; f = f.getAscendant(P, 1); if (!u(a, f) && f && !f.equals(a.editable) && !f.contains(a.editable)) { (g = l(f)) && "false" == g.getAttribute("contenteditable") && (f = g); a.element = f; g = e(a, f, !c); var h; n(g) && g.is(a.triggers) && g.is(N) && (!e(a, g, !c) || (h = e(a, g, !c)) && n(h) && h.is(a.triggers)) ? d(g) : (h = b(a, f), n(h) && (e(a, h, !c) ? (f = e(a, h, !c)) && n(f) && f.is(a.triggers) && d(h) : d(h))) } } }() } } function g(a, b) { if (!b || b.type != CKEDITOR.NODE_ELEMENT || !b.$) return !1; var c = a.line; return c.wrap.equals(b) || c.wrap.contains(b) } function n(a) { return a && a.type == CKEDITOR.NODE_ELEMENT && a.$ } function w(a) { if (!n(a)) return !1; var b; (b = q(a)) || (n(a) ? (b = { left: 1, right: 1, center: 1 }, b = !(!b[a.getComputedStyle("float")] && !b[a.getAttribute("align")])) : b = !1); return b } function q(a) { return !!{ absolute: 1, fixed: 1 }[a.getComputedStyle("position")] } function v(a, b) { return n(b) ? b.is(a.triggers) : null } function u(a, b) { if (!b) return !1; for (var c = b.getParents(1), d = c.length; d--;) for (var e = a.tabuList.length; e--;) if (c[d].hasAttribute(a.tabuList[e])) return !0; return !1 } function r(a, b, c) { b = b[c ? "getLast" : "getFirst"](function(b) { return a.isRelevant(b) && !b.is(ga) }); if (!b) return !1; t(a, b); return c ? b.size.top > a.mouse.y : b.size.bottom < a.mouse.y } function p(a) { var b = a.editable, c = a.mouse, d = a.view, e = a.triggerOffset; y(a); var h = c.y > (a.inInlineMode ? d.editable.top + d.editable.height / 2 : Math.min(d.editable.height, d.pane.height) / 2), b = b[h ? "getLast" : "getFirst"](function(a) { return !(Z(a) || aa(a)) }); if (!b) return null; g(a, b) && (b = a.line.wrap[h ? "getPrevious" : "getNext"](function(a) { return !(Z(a) || aa(a)) })); if (!n(b) || w(b) || !v(a, b)) return null; t(a, b); return !h && 0 <= b.size.top && m(c.y, 0, b.size.top + e) ? (a = a.inInlineMode || 0 === d.scroll.y ? T : V, new f([null, b, J, O, a])) : h && b.size.bottom <= d.pane.height && m(c.y, b.size.bottom - e, d.pane.height) ? (a = a.inInlineMode || m(b.size.bottom, d.pane.height - e, d.pane.height) ? M : V, new f([b, null, E, O, a])) : null } function z(a) { var c = a.mouse, d = a.view, g = a.triggerOffset, h = b(a); if (!h) return null; t(a, h); var g = Math.min(g, 0 | h.size.outerHeight / 2), k = [], l, p; if (m(c.y, h.size.top - 1, h.size.top + g)) p = !1; else if (m(c.y, h.size.bottom - g, h.size.bottom + 1)) p = !0; else return null; if (w(h) || r(a, h, p) || h.getParent().is(ca)) return null; var q = e(a, h, !p); if (q) { if (q && q.type == CKEDITOR.NODE_TEXT) return null; if (n(q)) { if (w(q) || !v(a, q) || q.getParent().is(ca)) return null; k = [q, h][p ? "reverse" : "concat"]().concat([S, O]) } } else h.equals(a.editable[p ? "getLast" : "getFirst"](a.isRelevant)) ? (y(a), p && m(c.y, h.size.bottom - g, d.pane.height) && m(h.size.bottom, d.pane.height - g, d.pane.height) ? l = M : m(c.y, 0, h.size.top + g) && (l = T)) : l = V, k = [null, h][p ? "reverse" : "concat"]().concat([p ? E : J, O, l, h.equals(a.editable[p ? "getLast" : "getFirst"](a.isRelevant)) ? p ? M : T : V ]); return 0 in k ? new f(k) : null } function B(a, b, c, d) { for (var e = b.getDocumentPosition(), f = {}, g = {}, h = {}, k = {}, l = ba.length; l--;) f[ba[l]] = parseInt(b.getComputedStyle.call(b, "border-" + ba[l] + "-width"), 10) || 0, h[ba[l]] = parseInt(b.getComputedStyle.call(b, "padding-" + ba[l]), 10) || 0, g[ba[l]] = parseInt(b.getComputedStyle.call(b, "margin-" + ba[l]), 10) || 0; c && !d || D(a, d); k.top = e.y - (c ? 0 : a.view.scroll.y); k.left = e.x - (c ? 0 : a.view.scroll.x); k.outerWidth = b.$.offsetWidth; k.outerHeight = b.$.offsetHeight; k.height = k.outerHeight - (h.top + h.bottom + f.top + f.bottom); k.width = k.outerWidth - (h.left + h.right + f.left + f.right); k.bottom = k.top + k.outerHeight; k.right = k.left + k.outerWidth; a.inInlineMode && (k.scroll = { top: b.$.scrollTop, left: b.$.scrollLeft }); return A({ border: f, padding: h, margin: g, ignoreScroll: c }, k, !0) } function t(a, b, c) { if (!n(b)) return b.size = null; if (!b.size) b.size = {}; else if (b.size.ignoreScroll == c && b.size.date > new Date - L) return null; return A(b.size, B(a, b, c), { date: +new Date }, !0) } function y(a, b) { a.view.editable = B(a, a.editable, b, !0) } function D(a, b) { a.view || (a.view = {}); var c = a.view; if (!(!b && c && c.date > new Date - L)) { var d = a.win, c = d.getScrollPosition(), d = d.getViewPaneSize(); A(a.view, { scroll: { x: c.x, y: c.y, width: a.doc.$.documentElement.scrollWidth - d.width, height: a.doc.$.documentElement.scrollHeight - d.height }, pane: { width: d.width, height: d.height, bottom: d.height + c.y }, date: +new Date }, !0) } } function x(a, b, c, d) { for (var e = d, g = d, h = 0, k = !1, l = !1, m = a.view.pane.height, p = a.mouse; p.y + h < m && 0 < p.y - h;) { k || (k = b(e, d)); l || (l = b(g, d)); !k && 0 < p.y - h && (e = c(a, { x: p.x, y: p.y - h })); !l && p.y + h < m && (g = c(a, { x: p.x, y: p.y + h })); if (k && l) break; h += 2 } return new f([e, g, null, null]) } CKEDITOR.plugins.add("magicline", { init: function(a) { var c = a.config, l = c.magicline_triggerOffset || 30, m = { editor: a, enterMode: c.enterMode, triggerOffset: l, holdDistance: 0 | l * (c.magicline_holdDistance || .5), boxColor: c.magicline_color || "#ff0000", rtl: "rtl" == c.contentsLangDirection, tabuList: ["data-cke-hidden-sel"].concat(c.magicline_tabuList || []), triggers: c.magicline_everywhere ? P : { table: 1, hr: 1, div: 1, ul: 1, ol: 1, dl: 1, form: 1, blockquote: 1 } }, v, r, t; m.isRelevant = function(a) { return n(a) && !g(m, a) && !w(a) }; a.on("contentDom", function() { var l = a.editable(), n = a.document, w = a.window; A(m, { editable: l, inInlineMode: l.isInline(), doc: n, win: w, hotNode: null }, !0); m.boundary = m.inInlineMode ? m.editable : m.doc.getDocumentElement(); l.is(H.$inline) || (m.inInlineMode && !q(l) && l.setStyles({ position: "relative", top: null, left: null }), d.call(this, m), D(m), l.attachListener(a, "beforeUndoImage", function() { m.line.detach() }), l.attachListener(a, "beforeGetData", function() { m.line.wrap.getParent() && (m.line.detach(), a.once("getData", function() { m.line.attach() }, null, null, 1E3)) }, null, null, 0), l.attachListener(m.inInlineMode ? n : n.getWindow().getFrame(), "mouseout", function(b) { if ("wysiwyg" == a.mode) if (m.inInlineMode) { var c = b.data.$.clientX; b = b.data.$.clientY; D(m); y(m, !0); var d = m.view.editable, e = m.view.scroll; c > d.left - e.x && c < d.right - e.x && b > d.top - e.y && b < d.bottom - e.y || (clearTimeout(t), t = null, m.line.detach()) } else clearTimeout(t), t = null, m.line.detach() }), l.attachListener(l, "keyup", function() { m.hiddenMode = 0 }), l.attachListener(l, "keydown", function(b) { if ("wysiwyg" == a.mode) switch (b.data.getKeystroke()) { case 2228240: case 16: m.hiddenMode = 1, m.line.detach() } }), l.attachListener(m.inInlineMode ? l : n, "mousemove", function(b) { r = !0; if ("wysiwyg" == a.mode && !a.readOnly && !t) { var c = { x: b.data.$.clientX, y: b.data.$.clientY }; t = setTimeout(function() { m.mouse = c; t = m.trigger = null; D(m); r && !m.hiddenMode && a.focusManager.hasFocus && !m.line.mouseNear() && (m.element = U(m, !0)) && ((m.trigger = p(m) || z(m) || X(m)) && !u(m, m.trigger.upper || m.trigger.lower) ? m.line.attach().place() : (m.trigger = null, m.line.detach()), r = !1) }, 30) } }), l.attachListener(w, "scroll", function() { "wysiwyg" == a.mode && (m.line.detach(), G.webkit && (m.hiddenMode = 1, clearTimeout(v), v = setTimeout(function() { m.mouseDown || (m.hiddenMode = 0) }, 50))) }), l.attachListener(I ? n : w, "mousedown", function() { "wysiwyg" == a.mode && (m.line.detach(), m.hiddenMode = 1, m.mouseDown = 1) }), l.attachListener(I ? n : w, "mouseup", function() { m.hiddenMode = 0; m.mouseDown = 0 }), a.addCommand("accessPreviousSpace", k(m)), a.addCommand("accessNextSpace", k(m, !0)), a.setKeystroke([ [c.magicline_keystrokePrevious, "accessPreviousSpace"], [c.magicline_keystrokeNext, "accessNextSpace"] ]), a.on("loadSnapshot", function() { var b, c, d, e; for (e in { p: 1, br: 1, div: 1 }) for (b = a.document.getElementsByTag(e), d = b.count(); d--;) if ((c = b.getItem(d)).data("cke-magicline-hot")) { m.hotNode = c; m.lastCmdDirection = "true" === c.data("cke-magicline-dir") ? !0 : !1; return } }), this.backdoor = { accessFocusSpace: h, boxTrigger: f, isLine: g, getAscendantTrigger: b, getNonEmptyNeighbour: e, getSize: B, that: m, triggerEdge: z, triggerEditable: p, triggerExpand: X }) }, this) } }); var A = CKEDITOR.tools.extend, C = CKEDITOR.dom.element, F = C.createFromHtml, G = CKEDITOR.env, I = CKEDITOR.env.ie && 9 > CKEDITOR.env.version, H = CKEDITOR.dtd, K = {}, J = 128, E = 64, S = 32, O = 16, T = 4, M = 2, V = 1, da = " ", ca = H.$listItem, ga = H.$tableContent, N = A({}, H.$nonEditable, H.$empty), P = H.$block, L = 100, R = "width:0px;height:0px;padding:0px;margin:0px;display:block;z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;", Q = R + "border-color:transparent;display:block;border-style:solid;", Y = "\x3cspan\x3e" + da + "\x3c/span\x3e"; K[CKEDITOR.ENTER_BR] = "br"; K[CKEDITOR.ENTER_P] = "p"; K[CKEDITOR.ENTER_DIV] = "div"; f.prototype = { set: function(a, b, c) { this.properties = a + b + (c || V); return this }, is: function(a) { return (this.properties & a) == a } }; var U = function() { function a(b, c) { var d = b.$.elementFromPoint(c.x, c.y); return d && d.nodeType ? new CKEDITOR.dom.element(d) : null } return function(b, c, d) { if (!b.mouse) return null; var e = b.doc, f = b.line.wrap; d = d || b.mouse; var h = a(e, d); c && g(b, h) && (f.hide(), h = a(e, d), f.show()); return !h || h.type != CKEDITOR.NODE_ELEMENT || !h.$ || G.ie && 9 > G.version && !b.boundary.equals(h) && !b.boundary.contains(h) ? null : h } }(), Z = CKEDITOR.dom.walker.whitespaces(), aa = CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_COMMENT), X = function() { function b(e) { var f = e.element, g, h, k; if (!n(f) || f.contains(e.editable) || f.isReadOnly()) return null; k = x(e, function(a, b) { return !b.equals(a) }, function(a, b) { return U(a, !0, b) }, f); g = k.upper; h = k.lower; if (a(e, g, h)) return k.set(S, 8); if (g && f.contains(g)) for (; !g.getParent().equals(f);) g = g.getParent(); else g = f.getFirst(function(a) { return d(e, a) }); if (h && f.contains(h)) for (; !h.getParent().equals(f);) h = h.getParent(); else h = f.getLast(function(a) { return d(e, a) }); if (!g || !h) return null; t(e, g); t(e, h); if (!m(e.mouse.y, g.size.top, h.size.bottom)) return null; for (var f = Number.MAX_VALUE, l, p, q, v; h && !h.equals(g) && (p = g.getNext(e.isRelevant));) l = Math.abs(c(e, g, p) - e.mouse.y), l < f && (f = l, q = g, v = p), g = p, t(e, g); if (!q || !v || !m(e.mouse.y, q.size.top, v.size.bottom)) return null; k.upper = q; k.lower = v; return k.set(S, 8) } function d(a, b) { return !(b && b.type == CKEDITOR.NODE_TEXT || aa(b) || w(b) || g(a, b) || b.type == CKEDITOR.NODE_ELEMENT && b.$ && b.is("br")) } return function(c) { var d = b(c), e; if (e = d) { e = d.upper; var f = d.lower; e = !e || !f || w(f) || w(e) || f.equals(e) || e.equals(f) || f.contains(e) || e.contains(f) ? !1 : v(c, e) && v(c, f) && a(c, e, f) ? !0 : !1 } return e ? d : null } }(), ba = ["top", "left", "right", "bottom"] }(), CKEDITOR.config.magicline_keystrokePrevious = CKEDITOR.CTRL + CKEDITOR.SHIFT + 51, CKEDITOR.config.magicline_keystrokeNext = CKEDITOR.CTRL + CKEDITOR.SHIFT + 52, function() { function a(a) { if (!a || a.type != CKEDITOR.NODE_ELEMENT || "form" != a.getName()) return []; for (var b = [], c = ["style", "className"], e = 0; e < c.length; e++) { var f = a.$.elements.namedItem(c[e]); f && (f = new CKEDITOR.dom.element(f), b.push([f, f.nextSibling]), f.remove()) } return b } function f(a, b) { if (a && a.type == CKEDITOR.NODE_ELEMENT && "form" == a.getName() && 0 < b.length) for (var c = b.length - 1; 0 <= c; c--) { var e = b[c][0], f = b[c][1]; f ? e.insertBefore(f) : e.appendTo(a) } } function b(b, c) { var d = a(b), e = {}, k = b.$; c || (e["class"] = k.className || "", k.className = ""); e.inline = k.style.cssText || ""; c || (k.style.cssText = "position: static; overflow: visible"); f(d); return e } function c(b, c) { var d = a(b), e = b.$; "class" in c && (e.className = c["class"]); "inline" in c && (e.style.cssText = c.inline); f(d) } function e(a) { if (!a.editable().isInline()) { var b = CKEDITOR.instances, c; for (c in b) { var e = b[c]; "wysiwyg" != e.mode || e.readOnly || (e = e.document.getBody(), e.setAttribute("contentEditable", !1), e.setAttribute("contentEditable", !0)) } a.editable().hasFocus && (a.toolbox.focus(), a.focus()) } } CKEDITOR.plugins.add("maximize", { init: function(a) { function f() { var b = k.getViewPaneSize(); a.resize(b.width, b.height, null, !0) } if (a.elementMode != CKEDITOR.ELEMENT_MODE_INLINE) { var d = a.lang, h = CKEDITOR.document, k = h.getWindow(), g, n, w, q = CKEDITOR.TRISTATE_OFF; a.addCommand("maximize", { modes: { wysiwyg: !CKEDITOR.env.iOS, source: !CKEDITOR.env.iOS }, readOnly: 1, editorFocus: !1, exec: function() { var v = a.container.getFirst(function(a) { return a.type == CKEDITOR.NODE_ELEMENT && a.hasClass("cke_inner") }), u = a.ui.space("contents"); if ("wysiwyg" == a.mode) { var r = a.getSelection(); g = r && r.getRanges(); n = k.getScrollPosition() } else { var p = a.editable().$; g = !CKEDITOR.env.ie && [p.selectionStart, p.selectionEnd]; n = [p.scrollLeft, p.scrollTop] } if (this.state == CKEDITOR.TRISTATE_OFF) { k.on("resize", f); w = k.getScrollPosition(); for (r = a.container; r = r.getParent();) r.setCustomData("maximize_saved_styles", b(r)), r.setStyle("z-index", a.config.baseFloatZIndex - 5); u.setCustomData("maximize_saved_styles", b(u, !0)); v.setCustomData("maximize_saved_styles", b(v, !0)); u = { overflow: CKEDITOR.env.webkit ? "" : "hidden", width: 0, height: 0 }; h.getDocumentElement().setStyles(u); !CKEDITOR.env.gecko && h.getDocumentElement().setStyle("position", "fixed"); CKEDITOR.env.gecko && CKEDITOR.env.quirks || h.getBody().setStyles(u); CKEDITOR.env.ie ? setTimeout(function() { k.$.scrollTo(0, 0) }, 0) : k.$.scrollTo(0, 0); v.setStyle("position", CKEDITOR.env.gecko && CKEDITOR.env.quirks ? "fixed" : "absolute"); v.$.offsetLeft; v.setStyles({ "z-index": a.config.baseFloatZIndex - 5, left: "0px", top: "0px" }); v.addClass("cke_maximized"); f(); u = v.getDocumentPosition(); v.setStyles({ left: -1 * u.x + "px", top: -1 * u.y + "px" }); CKEDITOR.env.gecko && e(a) } else if (this.state == CKEDITOR.TRISTATE_ON) { k.removeListener("resize", f); for (var r = [u, v], z = 0; z < r.length; z++) c(r[z], r[z].getCustomData("maximize_saved_styles")), r[z].removeCustomData("maximize_saved_styles"); for (r = a.container; r = r.getParent();) c(r, r.getCustomData("maximize_saved_styles")), r.removeCustomData("maximize_saved_styles"); CKEDITOR.env.ie ? setTimeout(function() { k.$.scrollTo(w.x, w.y) }, 0) : k.$.scrollTo(w.x, w.y); v.removeClass("cke_maximized"); CKEDITOR.env.webkit && (v.setStyle("display", "inline"), setTimeout(function() { v.setStyle("display", "block") }, 0)); a.fire("resize", { outerHeight: a.container.$.offsetHeight, contentsHeight: u.$.offsetHeight, outerWidth: a.container.$.offsetWidth }) } this.toggleState(); if (r = this.uiItems[0]) u = this.state == CKEDITOR.TRISTATE_OFF ? d.maximize.maximize : d.maximize.minimize, r = CKEDITOR.document.getById(r._.id), r.getChild(1).setHtml(u), r.setAttribute("title", u), r.setAttribute("href", 'javascript:void("' + u + '");'); "wysiwyg" == a.mode ? g ? (CKEDITOR.env.gecko && e(a), a.getSelection().selectRanges(g), (p = a.getSelection().getStartElement()) && p.scrollIntoView(!0)) : k.$.scrollTo(n.x, n.y) : (g && (p.selectionStart = g[0], p.selectionEnd = g[1]), p.scrollLeft = n[0], p.scrollTop = n[1]); g = n = null; q = this.state; a.fire("maximize", this.state) }, canUndo: !1 }); a.ui.addButton && a.ui.addButton("Maximize", { label: d.maximize.maximize, command: "maximize", toolbar: "tools,10" }); a.on("mode", function() { var b = a.getCommand("maximize"); b.setState(b.state == CKEDITOR.TRISTATE_DISABLED ? CKEDITOR.TRISTATE_DISABLED : q) }, null, null, 100) } } }) }(), function() { function a(a, c, e) { var f = CKEDITOR.cleanWord; f ? e() : (a = CKEDITOR.getUrl(a.config.pasteFromWordCleanupFile || c + "filter/default.js"), CKEDITOR.scriptLoader.load(a, e, null, !0)); return !f } function f(a) { a.data.type = "html" } CKEDITOR.plugins.add("pastefromword", { requires: "clipboard", init: function(b) { var c = 0, e = this.path; b.addCommand("pastefromword", { canUndo: !1, async: !0, exec: function(a) { var b = this; c = 1; a.once("beforePaste", f); a.getClipboardData({ title: a.lang.pastefromword.title }, function(c) { c && a.fire("paste", { type: "html", dataValue: c.dataValue, method: "paste", dataTransfer: CKEDITOR.plugins.clipboard.initPasteDataTransfer() }); a.fire("afterCommandExec", { name: "pastefromword", command: b, returnValue: !!c }) }) } }); b.ui.addButton && b.ui.addButton("PasteFromWord", { label: b.lang.pastefromword.toolbar, command: "pastefromword", toolbar: "clipboard,50" }); b.on("pasteState", function(a) { b.getCommand("pastefromword").setState(a.data) }); b.on("paste", function(f) { var l = f.data, d = l.dataValue, h = /(class=\"?Mso|style=\"[^\"]*\bmso\-|w:WordDocument||<\/font>)/, k = { dataValue: d }; if (d && (c || h.test(d)) && (!1 !== b.fire("pasteFromWord", k) || c)) { l.dontFilter = !0; var g = a(b, e, function() { if (g) b.fire("paste", l); else if (!b.config.pasteFromWordPromptCleanup || c || confirm(b.lang.pastefromword.confirmCleanup)) k.dataValue = CKEDITOR.cleanWord(k.dataValue, b), b.fire("afterPasteFromWord", k), l.dataValue = k.dataValue; c = 0 }); g && f.cancel() } }, null, null, 3) } }) }(), function() { var a = { canUndo: !1, async: !0, exec: function(f) { f.getClipboardData({ title: f.lang.pastetext.title }, function(b) { b && f.fire("paste", { type: "text", dataValue: b.dataValue, method: "paste", dataTransfer: CKEDITOR.plugins.clipboard.initPasteDataTransfer() }); f.fire("afterCommandExec", { name: "pastetext", command: a, returnValue: !!b }) }) } }; CKEDITOR.plugins.add("pastetext", { requires: "clipboard", init: function(f) { f.addCommand("pastetext", a); f.ui.addButton && f.ui.addButton("PasteText", { label: f.lang.pastetext.button, command: "pastetext", toolbar: "clipboard,40" }); if (f.config.forcePasteAsPlainText) f.on("beforePaste", function(a) { "html" != a.data.type && (a.data.type = "text") }); f.on("pasteState", function(a) { f.getCommand("pastetext").setState(a.data) }) } }) }(), CKEDITOR.plugins.add("removeformat", { init: function(a) { a.addCommand("removeFormat", CKEDITOR.plugins.removeformat.commands.removeformat); a.ui.addButton && a.ui.addButton("RemoveFormat", { label: a.lang.removeformat.toolbar, command: "removeFormat", toolbar: "cleanup,10" }) } }), CKEDITOR.plugins.removeformat = { commands: { removeformat: { exec: function(a) { for (var f = a._.removeFormatRegex || (a._.removeFormatRegex = new RegExp("^(?:" + a.config.removeFormatTags.replace(/,/g, "|") + ")$", "i")), b = a._.removeAttributes || (a._.removeAttributes = a.config.removeFormatAttributes.split(",")), c = CKEDITOR.plugins.removeformat.filter, e = a.getSelection().getRanges(), m = e.createIterator(), l = function(a) { return a.type == CKEDITOR.NODE_ELEMENT }, d; d = m.getNextRange();) { d.collapsed || d.enlarge(CKEDITOR.ENLARGE_ELEMENT); var h = d.createBookmark(), k = h.startNode, g = h.endNode, n = function(b) { for (var d = a.elementPath(b), e = d.elements, g = 1, h; (h = e[g]) && !h.equals(d.block) && !h.equals(d.blockLimit); g++) f.test(h.getName()) && c(a, h) && b.breakParent(h) }; n(k); if (g) for (n(g), k = k.getNextSourceNode(!0, CKEDITOR.NODE_ELEMENT); k && !k.equals(g);) if (k.isReadOnly()) { if (k.getPosition(g) & CKEDITOR.POSITION_CONTAINS) break; k = k.getNext(l) } else n = k.getNextSourceNode(!1, CKEDITOR.NODE_ELEMENT), "img" == k.getName() && k.data("cke-realelement") || !c(a, k) || (f.test(k.getName()) ? k.remove(1) : (k.removeAttributes(b), a.fire("removeFormatCleanup", k))), k = n; d.moveToBookmark(h) } a.forceNextSelectionCheck(); a.getSelection().selectRanges(e) } } }, filter: function(a, f) { for (var b = a._.removeFormatFilters || [], c = 0; c < b.length; c++) if (!1 === b[c](f)) return !1; return !0 } }, CKEDITOR.editor.prototype.addRemoveFormatFilter = function(a) { this._.removeFormatFilters || (this._.removeFormatFilters = []); this._.removeFormatFilters.push(a) }, CKEDITOR.config.removeFormatTags = "b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var", CKEDITOR.config.removeFormatAttributes = "class,style,lang,width,height,align,hspace,valign", CKEDITOR.plugins.add("resize", { init: function(a) { function f(b) { var e = h.width, f = h.height, l = e + (b.data.$.screenX - d.x) * ("rtl" == m ? -1 : 1); b = f + (b.data.$.screenY - d.y); k && (e = Math.max(c.resize_minWidth, Math.min(l, c.resize_maxWidth))); g && (f = Math.max(c.resize_minHeight, Math.min(b, c.resize_maxHeight))); a.resize(k ? e : null, f) } function b() { CKEDITOR.document.removeListener("mousemove", f); CKEDITOR.document.removeListener("mouseup", b); a.document && (a.document.removeListener("mousemove", f), a.document.removeListener("mouseup", b)) } var c = a.config, e = a.ui.spaceId("resizer"), m = a.element ? a.element.getDirection(1) : "ltr"; !c.resize_dir && (c.resize_dir = "vertical"); void 0 === c.resize_maxWidth && (c.resize_maxWidth = 3E3); void 0 === c.resize_maxHeight && (c.resize_maxHeight = 3E3); void 0 === c.resize_minWidth && (c.resize_minWidth = 750); void 0 === c.resize_minHeight && (c.resize_minHeight = 250); if (!1 !== c.resize_enabled) { var l = null, d, h, k = ("both" == c.resize_dir || "horizontal" == c.resize_dir) && c.resize_minWidth != c.resize_maxWidth, g = ("both" == c.resize_dir || "vertical" == c.resize_dir) && c.resize_minHeight != c.resize_maxHeight, n = CKEDITOR.tools.addFunction(function(e) { l || (l = a.getResizable()); h = { width: l.$.offsetWidth || 0, height: l.$.offsetHeight || 0 }; d = { x: e.screenX, y: e.screenY }; c.resize_minWidth > h.width && (c.resize_minWidth = h.width); c.resize_minHeight > h.height && (c.resize_minHeight = h.height); CKEDITOR.document.on("mousemove", f); CKEDITOR.document.on("mouseup", b); a.document && (a.document.on("mousemove", f), a.document.on("mouseup", b)); e.preventDefault && e.preventDefault() }); a.on("destroy", function() { CKEDITOR.tools.removeFunction(n) }); a.on("uiSpace", function(b) { if ("bottom" == b.data.space) { var c = ""; k && !g && (c = " cke_resizer_horizontal"); !k && g && (c = " cke_resizer_vertical"); var d = '\x3cspan id\x3d"' + e + '" class\x3d"cke_resizer' + c + " cke_resizer_" + m + '" title\x3d"' + CKEDITOR.tools.htmlEncode(a.lang.common.resize) + '" onmousedown\x3d"CKEDITOR.tools.callFunction(' + n + ', event)"\x3e' + ("ltr" == m ? "◢" : "◣") + "\x3c/span\x3e"; "ltr" == m && "ltr" == c ? b.data.html += d : b.data.html = d + b.data.html } }, a, null, 100); a.on("maximize", function(b) { a.ui.space("resizer")[b.data == CKEDITOR.TRISTATE_ON ? "hide" : "show"]() }) } } }), CKEDITOR.plugins.add("menubutton", { requires: "button,menu", onLoad: function() { var a = function(a) { var b = this._, c = b.menu; b.state !== CKEDITOR.TRISTATE_DISABLED && (b.on && c ? c.hide() : (b.previousState = b.state, c || (c = b.menu = new CKEDITOR.menu(a, { panel: { className: "cke_menu_panel", attributes: { "aria-label": a.lang.common.options } } }), c.onHide = CKEDITOR.tools.bind(function() { var c = this.command ? a.getCommand(this.command).modes : this.modes; this.setState(!c || c[a.mode] ? b.previousState : CKEDITOR.TRISTATE_DISABLED); b.on = 0 }, this), this.onMenu && c.addListener(this.onMenu)), this.setState(CKEDITOR.TRISTATE_ON), b.on = 1, setTimeout(function() { c.show(CKEDITOR.document.getById(b.id), 4) }, 0))) }; CKEDITOR.ui.menuButton = CKEDITOR.tools.createClass({ base: CKEDITOR.ui.button, $: function(f) { delete f.panel; this.base(f); this.hasArrow = !0; this.click = a }, statics: { handler: { create: function(a) { return new CKEDITOR.ui.menuButton(a) } } } }) }, beforeInit: function(a) { a.ui.addHandler(CKEDITOR.UI_MENUBUTTON, CKEDITOR.ui.menuButton.handler) } }), CKEDITOR.UI_MENUBUTTON = "menubutton", "use strict", CKEDITOR.plugins.add("scayt", { requires: "menubutton,dialog", tabToOpen: null, dialogName: "scaytDialog", onLoad: function(a) { CKEDITOR.plugins.scayt.onLoadTimestamp = (new Date).getTime(); "moono-lisa" == (CKEDITOR.skinName || a.config.skin) && CKEDITOR.document.appendStyleSheet(this.path + "skins/" + CKEDITOR.skin.name + "/scayt.css") }, init: function(a) { var f = this, b = CKEDITOR.plugins.scayt; this.bindEvents(a); this.parseConfig(a); this.addRule(a); CKEDITOR.dialog.add(this.dialogName, CKEDITOR.getUrl(this.path + "dialogs/options.js")); this.addMenuItems(a); var c = a.lang.scayt, e = CKEDITOR.env; a.ui.add("Scayt", CKEDITOR.UI_MENUBUTTON, { label: c.text_title, title: a.plugins.wsc ? a.lang.wsc.title : c.text_title, modes: { wysiwyg: !(e.ie && (8 > e.version || e.quirks)) }, toolbar: "spellchecker,20", refresh: function() { var c = a.ui.instances.Scayt.getState(); a.scayt && (c = b.state.scayt[a.name] ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF); a.fire("scaytButtonState", c) }, onRender: function() { var b = this; a.on("scaytButtonState", function(a) { void 0 !== typeof a.data && b.setState(a.data) }) }, onMenu: function() { var c = a.scayt; a.getMenuItem("scaytToggle").label = a.lang.scayt[c && b.state.scayt[a.name] ? "btn_disable" : "btn_enable"]; c = { scaytToggle: CKEDITOR.TRISTATE_OFF, scaytOptions: c ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, scaytLangs: c ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, scaytDict: c ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, scaytAbout: c ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, WSC: a.plugins.wsc ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED }; a.config.scayt_uiTabs[0] || delete c.scaytOptions; a.config.scayt_uiTabs[1] || delete c.scaytLangs; a.config.scayt_uiTabs[2] || delete c.scaytDict; return c } }); a.contextMenu && a.addMenuItems && (a.contextMenu.addListener(function(b, c) { var d = a.scayt, e, k; d && (k = d.getSelectionNode()) && (e = f.menuGenerator(a, k), d.showBanner("." + a.contextMenu._.definition.panel.className.split(" ").join(" ."))); return e }), a.contextMenu._.onHide = CKEDITOR.tools.override(a.contextMenu._.onHide, function(b) { return function() { var c = a.scayt; c && c.hideBanner(); return b.apply(this) } })) }, addMenuItems: function(a) { var f = this, b = CKEDITOR.plugins.scayt; a.addMenuGroup("scaytButton"); for (var c = a.config.scayt_contextMenuItemsOrder.split("|"), e = 0; e < c.length; e++) c[e] = "scayt_" + c[e]; if ((c = ["grayt_description", "grayt_suggest", "grayt_control"].concat(c)) && c.length) for (e = 0; e < c.length; e++) a.addMenuGroup(c[e], e - 10); a.addCommand("scaytToggle", { exec: function(a) { var c = a.scayt; b.state.scayt[a.name] = !b.state.scayt[a.name]; !0 === b.state.scayt[a.name] ? c || b.createScayt(a) : c && b.destroy(a) } }); a.addCommand("scaytAbout", { exec: function(a) { a.scayt.tabToOpen = "about"; a.lockSelection(); a.openDialog(f.dialogName) } }); a.addCommand("scaytOptions", { exec: function(a) { a.scayt.tabToOpen = "options"; a.lockSelection(); a.openDialog(f.dialogName) } }); a.addCommand("scaytLangs", { exec: function(a) { a.scayt.tabToOpen = "langs"; a.lockSelection(); a.openDialog(f.dialogName) } }); a.addCommand("scaytDict", { exec: function(a) { a.scayt.tabToOpen = "dictionaries"; a.lockSelection(); a.openDialog(f.dialogName) } }); c = { scaytToggle: { label: a.lang.scayt.btn_enable, group: "scaytButton", command: "scaytToggle" }, scaytAbout: { label: a.lang.scayt.btn_about, group: "scaytButton", command: "scaytAbout" }, scaytOptions: { label: a.lang.scayt.btn_options, group: "scaytButton", command: "scaytOptions" }, scaytLangs: { label: a.lang.scayt.btn_langs, group: "scaytButton", command: "scaytLangs" }, scaytDict: { label: a.lang.scayt.btn_dictionaries, group: "scaytButton", command: "scaytDict" } }; a.plugins.wsc && (c.WSC = { label: a.lang.wsc.toolbar, group: "scaytButton", onClick: function() { var b = CKEDITOR.plugins.scayt, c = a.scayt, d = a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? a.container.getText() : a.document.getBody().getText(); (d = d.replace(/\s/g, "")) ? (c && b.state.scayt[a.name] && c.setMarkupPaused && c.setMarkupPaused(!0), a.lockSelection(), a.execCommand("checkspell")) : alert("Nothing to check!") } }); a.addMenuItems(c) }, bindEvents: function(a) { var f = CKEDITOR.plugins.scayt, b = a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE, c = function() { f.destroy(a) }, e = function() { !f.state.scayt[a.name] || a.readOnly || a.scayt || f.createScayt(a) }, m = function() { var c = a.editable(); c.attachListener(c, "focus", function(c) { CKEDITOR.plugins.scayt && !a.scayt && setTimeout(e, 0); c = CKEDITOR.plugins.scayt && CKEDITOR.plugins.scayt.state.scayt[a.name] && a.scayt; var d, f; if ((b || c) && a._.savedSelection) { c = a._.savedSelection.getSelectedElement(); c = !c && a._.savedSelection.getRanges(); for (var l = 0; l < c.length; l++) f = c[l], "string" === typeof f.startContainer.$.nodeValue && (d = f.startContainer.getText().length, (d < f.startOffset || d < f.endOffset) && a.unlockSelection(!1)) } }, this, null, -10) }, l = function() { b ? a.config.scayt_inlineModeImmediateMarkup ? e() : (a.on("blur", function() { setTimeout(c, 0) }), a.on("focus", e), a.focusManager.hasFocus && e()) : e(); m(); var d = a.editable(); d.attachListener(d, "mousedown", function(b) { b = b.data.getTarget(); var c = a.widgets && a.widgets.getByElement(b); c && (c.wrapper = b.getAscendant(function(a) { return a.hasAttribute("data-cke-widget-wrapper") }, !0)) }, this, null, -10) }; a.on("contentDom", l); a.on("beforeCommandExec", function(b) { var c = a.scayt, e = null, g = !1, l = !0; b.data.name in f.options.disablingCommandExec && "wysiwyg" == a.mode ? c && (f.destroy(a), a.fire("scaytButtonState", CKEDITOR.TRISTATE_DISABLED)) : "bold" !== b.data.name && "italic" !== b.data.name && "underline" !== b.data.name && "strike" !== b.data.name && "subscript" !== b.data.name && "superscript" !== b.data.name && "enter" !== b.data.name && "cut" !== b.data.name && "language" !== b.data.name || !c || ("cut" === b.data.name && (l = !1, g = !0), "language" === b.data.name && (e = (e = a.plugins.language.getCurrentLangElement(a)) && e.$, g = !0), a.fire("reloadMarkupScayt", { removeOptions: { removeInside: l, forceBookmark: g, selectionNode: e }, timeout: 0 })) }); a.on("beforeSetMode", function(b) { if ("source" == b.data) { if (b = a.scayt) f.destroy(a), a.fire("scaytButtonState", CKEDITOR.TRISTATE_DISABLED); a.document && a.document.getBody().removeAttribute("_jquid") } }); a.on("afterCommandExec", function(b) { "wysiwyg" != a.mode || "undo" != b.data.name && "redo" != b.data.name || setTimeout(function() { f.reloadMarkup(a.scayt) }, 250) }); a.on("readOnly", function(b) { var c; b && (c = a.scayt, !0 === b.editor.readOnly ? c && c.fire("removeMarkupInDocument", {}) : c ? f.reloadMarkup(c) : "wysiwyg" == b.editor.mode && !0 === f.state.scayt[b.editor.name] && (f.createScayt(a), b.editor.fire("scaytButtonState", CKEDITOR.TRISTATE_ON))) }); a.on("beforeDestroy", c); a.on("setData", function() { c(); (a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE || a.plugins.divarea) && l() }, this, null, 50); a.on("reloadMarkupScayt", function(b) { var c = b.data && b.data.removeOptions; b = b.data && b.data.timeout; var e = a.scayt; e && setTimeout(function() { e.removeMarkupInSelectionNode(c); f.reloadMarkup(e) }, b || 0) }); a.on("insertElement", function() { a.fire("reloadMarkupScayt", { removeOptions: { forceBookmark: !0 } }) }, this, null, 50); a.on("insertHtml", function() { a.fire("reloadMarkupScayt") }, this, null, 50); a.on("insertText", function() { a.fire("reloadMarkupScayt") }, this, null, 50); a.on("scaytDialogShown", function(b) { b.data.selectPage(a.scayt.tabToOpen) }) }, parseConfig: function(a) { var f = CKEDITOR.plugins.scayt; f.replaceOldOptionsNames(a.config); "boolean" !== typeof a.config.scayt_autoStartup && (a.config.scayt_autoStartup = !1); f.state.scayt[a.name] = a.config.scayt_autoStartup; "boolean" !== typeof a.config.grayt_autoStartup && (a.config.grayt_autoStartup = !1); "boolean" !== typeof a.config.scayt_inlineModeImmediateMarkup && (a.config.scayt_inlineModeImmediateMarkup = !1); f.state.grayt[a.name] = a.config.grayt_autoStartup; a.config.scayt_contextCommands || (a.config.scayt_contextCommands = "ignore|ignoreall|add"); a.config.scayt_contextMenuItemsOrder || (a.config.scayt_contextMenuItemsOrder = "suggest|moresuggest|control"); a.config.scayt_sLang || (a.config.scayt_sLang = "en_US"); if (void 0 === a.config.scayt_maxSuggestions || "number" != typeof a.config.scayt_maxSuggestions || 0 > a.config.scayt_maxSuggestions) a.config.scayt_maxSuggestions = 5; if (void 0 === a.config.scayt_minWordLength || "number" != typeof a.config.scayt_minWordLength || 1 > a.config.scayt_minWordLength) a.config.scayt_minWordLength = 4; if (void 0 === a.config.scayt_customDictionaryIds || "string" !== typeof a.config.scayt_customDictionaryIds) a.config.scayt_customDictionaryIds = ""; if (void 0 === a.config.scayt_userDictionaryName || "string" !== typeof a.config.scayt_userDictionaryName) a.config.scayt_userDictionaryName = null; if ("string" === typeof a.config.scayt_uiTabs && 3 === a.config.scayt_uiTabs.split(",").length) { var b = [], c = []; a.config.scayt_uiTabs = a.config.scayt_uiTabs.split(","); CKEDITOR.tools.search(a.config.scayt_uiTabs, function(a) { 1 === Number(a) || 0 === Number(a) ? (c.push(!0), b.push(Number(a))) : c.push(!1) }); null === CKEDITOR.tools.search(c, !1) ? a.config.scayt_uiTabs = b : a.config.scayt_uiTabs = [1, 1, 1] } else a.config.scayt_uiTabs = [1, 1, 1]; "string" != typeof a.config.scayt_serviceProtocol && (a.config.scayt_serviceProtocol = null); "string" != typeof a.config.scayt_serviceHost && (a.config.scayt_serviceHost = null); "string" != typeof a.config.scayt_servicePort && (a.config.scayt_servicePort = null); "string" != typeof a.config.scayt_servicePath && (a.config.scayt_servicePath = null); a.config.scayt_moreSuggestions || (a.config.scayt_moreSuggestions = "on"); "string" !== typeof a.config.scayt_customerId && (a.config.scayt_customerId = "1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2"); "string" !== typeof a.config.scayt_srcUrl && (f = document.location.protocol, f = -1 != f.search(/https?:/) ? f : "http:", a.config.scayt_srcUrl = f + "//svc.webspellchecker.net/spellcheck31/lf/scayt3/ckscayt/ckscayt.js"); "boolean" !== typeof CKEDITOR.config.scayt_handleCheckDirty && (CKEDITOR.config.scayt_handleCheckDirty = !0); "boolean" !== typeof CKEDITOR.config.scayt_handleUndoRedo && (CKEDITOR.config.scayt_handleUndoRedo = !0); CKEDITOR.config.scayt_handleUndoRedo = CKEDITOR.plugins.undo ? CKEDITOR.config.scayt_handleUndoRedo : !1; "boolean" !== typeof a.config.scayt_multiLanguageMode && (a.config.scayt_multiLanguageMode = !1); "object" !== typeof a.config.scayt_multiLanguageStyles && (a.config.scayt_multiLanguageStyles = {}); a.config.scayt_ignoreAllCapsWords && "boolean" !== typeof a.config.scayt_ignoreAllCapsWords && (a.config.scayt_ignoreAllCapsWords = !1); a.config.scayt_ignoreDomainNames && "boolean" !== typeof a.config.scayt_ignoreDomainNames && (a.config.scayt_ignoreDomainNames = !1); a.config.scayt_ignoreWordsWithMixedCases && "boolean" !== typeof a.config.scayt_ignoreWordsWithMixedCases && (a.config.scayt_ignoreWordsWithMixedCases = !1); a.config.scayt_ignoreWordsWithNumbers && "boolean" !== typeof a.config.scayt_ignoreWordsWithNumbers && (a.config.scayt_ignoreWordsWithNumbers = !1); if (a.config.scayt_disableOptionsStorage) { var f = CKEDITOR.tools.isArray(a.config.scayt_disableOptionsStorage) ? a.config.scayt_disableOptionsStorage : "string" === typeof a.config.scayt_disableOptionsStorage ? [a.config.scayt_disableOptionsStorage] : void 0, e = "all options lang ignore-all-caps-words ignore-domain-names ignore-words-with-mixed-cases ignore-words-with-numbers".split(" "), m = ["lang", "ignore-all-caps-words", "ignore-domain-names", "ignore-words-with-mixed-cases", "ignore-words-with-numbers"], l = CKEDITOR.tools.search, d = CKEDITOR.tools.indexOf; a.config.scayt_disableOptionsStorage = function(a) { for (var b = [], c = 0; c < a.length; c++) { var f = a[c], w = !!l(a, "options"); if (!l(e, f) || w && l(m, function(a) { if ("lang" === a) return !1 })) return; l(m, f) && m.splice(d(m, f), 1); if ("all" === f || w && l(a, "lang")) return []; "options" === f && (m = ["lang"]) } return b = b.concat(m) }(f) } }, addRule: function(a) { var f = CKEDITOR.plugins.scayt, b = a.dataProcessor, c = b && b.htmlFilter, e = a._.elementsPath && a._.elementsPath.filters, b = b && b.dataFilter, m = a.addRemoveFormatFilter, l = function(b) { if (a.scayt && (b.hasAttribute(f.options.data_attribute_name) || b.hasAttribute(f.options.problem_grammar_data_attribute))) return !1 }, d = function(b) { var c = !0; a.scayt && (b.hasAttribute(f.options.data_attribute_name) || b.hasAttribute(f.options.problem_grammar_data_attribute)) && (c = !1); return c }; e && e.push(l); b && b.addRules({ elements: { span: function(a) { var b = a.hasClass(f.options.misspelled_word_class) && a.attributes[f.options.data_attribute_name], c = a.hasClass(f.options.problem_grammar_class) && a.attributes[f.options.problem_grammar_data_attribute]; f && (b || c) && delete a.name; return a } } }); c && c.addRules({ elements: { span: function(a) { var b = a.hasClass(f.options.misspelled_word_class) && a.attributes[f.options.data_attribute_name], c = a.hasClass(f.options.problem_grammar_class) && a.attributes[f.options.problem_grammar_data_attribute]; f && (b || c) && delete a.name; return a } } }); m && m.call(a, d) }, scaytMenuDefinition: function(a) { var f = this; a = a.scayt; return { scayt: { scayt_ignore: { label: a.getLocal("btn_ignore"), group: "scayt_control", order: 1, exec: function(a) { a.scayt.ignoreWord() } }, scayt_ignoreall: { label: a.getLocal("btn_ignoreAll"), group: "scayt_control", order: 2, exec: function(a) { a.scayt.ignoreAllWords() } }, scayt_add: { label: a.getLocal("btn_addWord"), group: "scayt_control", order: 3, exec: function(a) { var c = a.scayt; setTimeout(function() { c.addWordToUserDictionary() }, 10) } }, scayt_option: { label: a.getLocal("btn_options"), group: "scayt_control", order: 4, exec: function(a) { a.scayt.tabToOpen = "options"; a.lockSelection(); a.openDialog(f.dialogName) }, verification: function(a) { return 1 == a.config.scayt_uiTabs[0] ? !0 : !1 } }, scayt_language: { label: a.getLocal("btn_langs"), group: "scayt_control", order: 5, exec: function(a) { a.scayt.tabToOpen = "langs"; a.lockSelection(); a.openDialog(f.dialogName) }, verification: function(a) { return 1 == a.config.scayt_uiTabs[1] ? !0 : !1 } }, scayt_dictionary: { label: a.getLocal("btn_dictionaries"), group: "scayt_control", order: 6, exec: function(a) { a.scayt.tabToOpen = "dictionaries"; a.lockSelection(); a.openDialog(f.dialogName) }, verification: function(a) { return 1 == a.config.scayt_uiTabs[2] ? !0 : !1 } }, scayt_about: { label: a.getLocal("btn_about"), group: "scayt_control", order: 7, exec: function(a) { a.scayt.tabToOpen = "about"; a.lockSelection(); a.openDialog(f.dialogName) } } }, grayt: { grayt_problemdescription: { label: "Grammar problem description", group: "grayt_description", order: 1, state: CKEDITOR.TRISTATE_DISABLED, exec: function(a) {} }, grayt_ignore: { label: a.getLocal("btn_ignore"), group: "grayt_control", order: 2, exec: function(a) { a.scayt.ignorePhrase() } } } } }, buildSuggestionMenuItems: function(a, f, b) { var c = {}, e = {}, m = b ? "word" : "phrase", l = b ? "startGrammarCheck" : "startSpellCheck", d = a.scayt; if (0 < f.length && "no_any_suggestions" !== f[0]) if (b) for (b = 0; b < f.length; b++) { var h = "scayt_suggest_" + CKEDITOR.plugins.scayt.suggestions[b].replace(" ", "_"); a.addCommand(h, this.createCommand(CKEDITOR.plugins.scayt.suggestions[b], m, l)); b < a.config.scayt_maxSuggestions ? (a.addMenuItem(h, { label: f[b], command: h, group: "scayt_suggest", order: b + 1 }), c[h] = CKEDITOR.TRISTATE_OFF) : (a.addMenuItem(h, { label: f[b], command: h, group: "scayt_moresuggest", order: b + 1 }), e[h] = CKEDITOR.TRISTATE_OFF, "on" === a.config.scayt_moreSuggestions && (a.addMenuItem("scayt_moresuggest", { label: d.getLocal("btn_moreSuggestions"), group: "scayt_moresuggest", order: 10, getItems: function() { return e } }), c.scayt_moresuggest = CKEDITOR.TRISTATE_OFF)) } else for (b = 0; b < f.length; b++) h = "grayt_suggest_" + CKEDITOR.plugins.scayt.suggestions[b].replace(" ", "_"), a.addCommand(h, this.createCommand(CKEDITOR.plugins.scayt.suggestions[b], m, l)), a.addMenuItem(h, { label: f[b], command: h, group: "grayt_suggest", order: b + 1 }), c[h] = CKEDITOR.TRISTATE_OFF; else c.no_scayt_suggest = CKEDITOR.TRISTATE_DISABLED, a.addCommand("no_scayt_suggest", { exec: function() {} }), a.addMenuItem("no_scayt_suggest", { label: d.getLocal("btn_noSuggestions") || "no_scayt_suggest", command: "no_scayt_suggest", group: "scayt_suggest", order: 0 }); return c }, menuGenerator: function(a, f) { var b = a.scayt, c = this.scaytMenuDefinition(a), e = {}, m = a.config.scayt_contextCommands.split("|"), l = f.getAttribute(b.getLangAttribute()) || b.getLang(), d, h; d = b.isScaytNode(f); h = b.isGraytNode(f); d ? (c = c.scayt, e = f.getAttribute(b.getScaytNodeAttributeName()), b.fire("getSuggestionsList", { lang: l, word: e }), e = this.buildSuggestionMenuItems(a, CKEDITOR.plugins.scayt.suggestions, d)) : h && (c = c.grayt, e = f.getAttribute(b.getGraytNodeAttributeName()), h = b.getProblemDescriptionText(e, l), c.grayt_problemdescription && h && (c.grayt_problemdescription.label = h), b.fire("getGrammarSuggestionsList", { lang: l, phrase: e }), e = this.buildSuggestionMenuItems(a, CKEDITOR.plugins.scayt.suggestions, d)); if (d && "off" == a.config.scayt_contextCommands) return e; for (var k in c) d && -1 == CKEDITOR.tools.indexOf(m, k.replace("scayt_", "")) && "all" != a.config.scayt_contextCommands || (e[k] = "undefined" != typeof c[k].state ? c[k].state : CKEDITOR.TRISTATE_OFF, "function" !== typeof c[k].verification || c[k].verification(a) || delete e[k], a.addCommand(k, { exec: c[k].exec }), a.addMenuItem(k, { label: a.lang.scayt[c[k].label] || c[k].label, command: k, group: c[k].group, order: c[k].order })); return e }, createCommand: function(a, f, b) { return { exec: function(c) { c = c.scayt; var e = {}; e[f] = a; c.replaceSelectionNode(e); "startGrammarCheck" === b && c.removeMarkupInSelectionNode({ grammarOnly: !0 }); c.fire(b) } } } }), CKEDITOR.plugins.scayt = { charsToObserve: [{ charName: "cke-fillingChar", charCode: function() { var a = CKEDITOR.version.match(/^\d(\.\d*)*/), a = a && a[0], f; if (a) { f = "4.5.7"; var b, a = a.replace(/\./g, ""); f = f.replace(/\./g, ""); b = a.length - f.length; b = 0 <= b ? b : 0; f = parseInt(a) >= parseInt(f) * Math.pow(10, b) } return f ? Array(7).join(String.fromCharCode(8203)) : String.fromCharCode(8203) }() }], onLoadTimestamp: "", state: { scayt: {}, grayt: {} }, warningCounter: 0, suggestions: [], options: { disablingCommandExec: { source: !0, newpage: !0, templates: !0 }, data_attribute_name: "data-scayt-word", misspelled_word_class: "scayt-misspell-word", problem_grammar_data_attribute: "data-grayt-phrase", problem_grammar_class: "gramm-problem" }, backCompatibilityMap: { scayt_service_protocol: "scayt_serviceProtocol", scayt_service_host: "scayt_serviceHost", scayt_service_port: "scayt_servicePort", scayt_service_path: "scayt_servicePath", scayt_customerid: "scayt_customerId" }, alarmCompatibilityMessage: function() { 5 > this.warningCounter && (console.warn("Note: You are using latest version of SCAYT plug-in. It is recommended to upgrade WebSpellChecker.net application to version v4.8.3.Contact us by e-mail at support@webspellchecker.net."), this.warningCounter += 1) }, reloadMarkup: function(a) { var f; a && (f = a.getScaytLangList(), a.reloadMarkup ? a.reloadMarkup() : (this.alarmCompatibilityMessage(), f && f.ltr && f.rtl && a.fire("startSpellCheck, startGrammarCheck"))) }, replaceOldOptionsNames: function(a) { for (var f in a) f in this.backCompatibilityMap && (a[this.backCompatibilityMap[f]] = a[f], delete a[f]) }, createScayt: function(a) { var f = this, b = CKEDITOR.plugins.scayt; this.loadScaytLibrary(a, function(a) { function e(a) { return new SCAYT.CKSCAYT(a, function() {}, function() {}) } var m = a.window && a.window.getFrame() || a.editable(); if (m) { m = { lang: a.config.scayt_sLang, container: m.$, customDictionary: a.config.scayt_customDictionaryIds, userDictionaryName: a.config.scayt_userDictionaryName, localization: a.langCode, customer_id: a.config.scayt_customerId, debug: a.config.scayt_debug, data_attribute_name: f.options.data_attribute_name, misspelled_word_class: f.options.misspelled_word_class, problem_grammar_data_attribute: f.options.problem_grammar_data_attribute, problem_grammar_class: f.options.problem_grammar_class, "options-to-restore": a.config.scayt_disableOptionsStorage, focused: a.editable().hasFocus, ignoreElementsRegex: a.config.scayt_elementsToIgnore, minWordLength: a.config.scayt_minWordLength, multiLanguageMode: a.config.scayt_multiLanguageMode, multiLanguageStyles: a.config.scayt_multiLanguageStyles, graytAutoStartup: b.state.grayt[a.name], charsToObserve: b.charsToObserve }; a.config.scayt_serviceProtocol && (m.service_protocol = a.config.scayt_serviceProtocol); a.config.scayt_serviceHost && (m.service_host = a.config.scayt_serviceHost); a.config.scayt_servicePort && (m.service_port = a.config.scayt_servicePort); a.config.scayt_servicePath && (m.service_path = a.config.scayt_servicePath); "boolean" === typeof a.config.scayt_ignoreAllCapsWords && (m["ignore-all-caps-words"] = a.config.scayt_ignoreAllCapsWords); "boolean" === typeof a.config.scayt_ignoreDomainNames && (m["ignore-domain-names"] = a.config.scayt_ignoreDomainNames); "boolean" === typeof a.config.scayt_ignoreWordsWithMixedCases && (m["ignore-words-with-mixed-cases"] = a.config.scayt_ignoreWordsWithMixedCases); "boolean" === typeof a.config.scayt_ignoreWordsWithNumbers && (m["ignore-words-with-numbers"] = a.config.scayt_ignoreWordsWithNumbers); var l; try { l = e(m) } catch (d) { f.alarmCompatibilityMessage(), delete m.charsToObserve, l = e(m) } l.subscribe("suggestionListSend", function(a) { for (var b = {}, c = [], d = 0; d < a.suggestionList.length; d++) b["word_" + a.suggestionList[d]] || (b["word_" + a.suggestionList[d]] = a.suggestionList[d], c.push(a.suggestionList[d])); CKEDITOR.plugins.scayt.suggestions = c }); l.subscribe("selectionIsChanged", function(b) { a.getSelection().isLocked && a.lockSelection() }); l.subscribe("graytStateChanged", function(d) { b.state.grayt[a.name] = d.state }); l.addMarkupHandler && l.addMarkupHandler(function(b) { var d = a.editable(), e = d.getCustomData(b.charName); e && (e.$ = b.node, d.setCustomData(b.charName, e)) }); a.scayt = l; a.fire("scaytButtonState", a.readOnly ? CKEDITOR.TRISTATE_DISABLED : CKEDITOR.TRISTATE_ON) } else b.state.scayt[a.name] = !1 }) }, destroy: function(a) { a.scayt && a.scayt.destroy(); delete a.scayt; a.fire("scaytButtonState", CKEDITOR.TRISTATE_OFF) }, loadScaytLibrary: function(a, f) { var b, c = function() { CKEDITOR.fireOnce("scaytReady"); a.scayt || "function" === typeof f && f(a) }; "undefined" === typeof window.SCAYT || "function" !== typeof window.SCAYT.CKSCAYT ? (b = a.config.scayt_srcUrl + "?" + this.onLoadTimestamp, CKEDITOR.scriptLoader.load(b, function(a) { a && c() })) : window.SCAYT && "function" === typeof window.SCAYT.CKSCAYT && c() } }, CKEDITOR.on("dialogDefinition", function(a) { var f = a.data.name; a = a.data.definition.dialog; if ("scaytDialog" === f) a.on("cancel", function(a) { return !1 }, this, null, -1); if ("checkspell" === f) a.on("cancel", function(a) { a = a.sender && a.sender.getParentEditor(); var c = CKEDITOR.plugins.scayt, e = a.scayt; e && c.state.scayt[a.name] && e.setMarkupPaused && e.setMarkupPaused(!1); a.unlockSelection() }, this, null, -2); if ("link" === f) a.on("ok", function(a) { var c = a.sender && a.sender.getParentEditor(); c && setTimeout(function() { c.fire("reloadMarkupScayt", { removeOptions: { removeInside: !0, forceBookmark: !0 }, timeout: 0 }) }, 0) }) }), CKEDITOR.on("scaytReady", function() { if (!0 === CKEDITOR.config.scayt_handleCheckDirty) { var a = CKEDITOR.editor.prototype; a.checkDirty = CKEDITOR.tools.override(a.checkDirty, function(a) { return function() { var c = null, e = this.scayt; if (CKEDITOR.plugins.scayt && CKEDITOR.plugins.scayt.state.scayt[this.name] && this.scayt) { if (c = "ready" == this.status) var f = e.removeMarkupFromString(this.getSnapshot()), e = e.removeMarkupFromString(this._.previousValue), c = c && e !== f } else c = a.call(this); return c } }); a.resetDirty = CKEDITOR.tools.override(a.resetDirty, function(a) { return function() { var c = this.scayt; CKEDITOR.plugins.scayt && CKEDITOR.plugins.scayt.state.scayt[this.name] && this.scayt ? this._.previousValue = c.removeMarkupFromString(this.getSnapshot()) : a.call(this) } }) } if (!0 === CKEDITOR.config.scayt_handleUndoRedo) { var a = CKEDITOR.plugins.undo.Image.prototype, f = "function" == typeof a.equalsContent ? "equalsContent" : "equals"; a[f] = CKEDITOR.tools.override(a[f], function(a) { return function(c) { var e = c.editor.scayt, f = this.contents, l = c.contents, d = null; CKEDITOR.plugins.scayt && CKEDITOR.plugins.scayt.state.scayt[c.editor.name] && c.editor.scayt && (this.contents = e.removeMarkupFromString(f) || "", c.contents = e.removeMarkupFromString(l) || ""); d = a.apply(this, arguments); this.contents = f; c.contents = l; return d } }) } }), function() { var a = { preserveState: !0, editorFocus: !1, readOnly: 1, exec: function(a) { this.toggleState(); this.refresh(a) }, refresh: function(a) { if (a.document) { var b = this.state == CKEDITOR.TRISTATE_ON ? "attachClass" : "removeClass"; a.editable()[b]("cke_show_borders") } } }; CKEDITOR.plugins.add("showborders", { modes: { wysiwyg: 1 }, onLoad: function() { var a; a = (CKEDITOR.env.ie6Compat ? [".%1 table.%2,", ".%1 table.%2 td, .%1 table.%2 th", "{", "border : #d3d3d3 1px dotted", "}"] : ".%1 table.%2,;.%1 table.%2 \x3e tr \x3e td, .%1 table.%2 \x3e tr \x3e th,;.%1 table.%2 \x3e tbody \x3e tr \x3e td, .%1 table.%2 \x3e tbody \x3e tr \x3e th,;.%1 table.%2 \x3e thead \x3e tr \x3e td, .%1 table.%2 \x3e thead \x3e tr \x3e th,;.%1 table.%2 \x3e tfoot \x3e tr \x3e td, .%1 table.%2 \x3e tfoot \x3e tr \x3e th;{;border : #d3d3d3 1px dotted;}".split(";")).join("").replace(/%2/g, "cke_show_border").replace(/%1/g, "cke_show_borders "); CKEDITOR.addCss(a) }, init: function(f) { var b = f.addCommand("showborders", a); b.canUndo = !1; !1 !== f.config.startupShowBorders && b.setState(CKEDITOR.TRISTATE_ON); f.on("mode", function() { b.state != CKEDITOR.TRISTATE_DISABLED && b.refresh(f) }, null, null, 100); f.on("contentDom", function() { b.state != CKEDITOR.TRISTATE_DISABLED && b.refresh(f) }); f.on("removeFormatCleanup", function(a) { a = a.data; f.getCommand("showborders").state == CKEDITOR.TRISTATE_ON && a.is("table") && (!a.hasAttribute("border") || 0 >= parseInt(a.getAttribute("border"), 10)) && a.addClass("cke_show_border") }) }, afterInit: function(a) { var b = a.dataProcessor; a = b && b.dataFilter; b = b && b.htmlFilter; a && a.addRules({ elements: { table: function(a) { a = a.attributes; var b = a["class"], f = parseInt(a.border, 10); f && !(0 >= f) || b && -1 != b.indexOf("cke_show_border") || (a["class"] = (b || "") + " cke_show_border") } } }); b && b.addRules({ elements: { table: function(a) { a = a.attributes; var b = a["class"]; b && (a["class"] = b.replace("cke_show_border", "").replace(/\s{2}/, " ").replace(/^\s+|\s+$/, "")) } } }) } }); CKEDITOR.on("dialogDefinition", function(a) { var b = a.data.name; if ("table" == b || "tableProperties" == b) if (a = a.data.definition, b = a.getContents("info").get("txtBorder"), b.commit = CKEDITOR.tools.override(b.commit, function(a) { return function(b, f) { a.apply(this, arguments); var l = parseInt(this.getValue(), 10); f[!l || 0 >= l ? "addClass" : "removeClass"]("cke_show_border") } }), a = (a = a.getContents("advanced")) && a.get("advCSSClasses")) a.setup = CKEDITOR.tools.override(a.setup, function(a) { return function() { a.apply(this, arguments); this.setValue(this.getValue().replace(/cke_show_border/, "")) } }), a.commit = CKEDITOR.tools.override(a.commit, function(a) { return function(b, f) { a.apply(this, arguments); parseInt(f.getAttribute("border"), 10) || f.addClass("cke_show_border") } }) }) }(), function() { CKEDITOR.plugins.add("sourcearea", { init: function(f) { function b() { var a = e && this.equals(CKEDITOR.document.getActive()); this.hide(); this.setStyle("height", this.getParent().$.clientHeight + "px"); this.setStyle("width", this.getParent().$.clientWidth + "px"); this.show(); a && this.focus() } if (f.elementMode != CKEDITOR.ELEMENT_MODE_INLINE) { var c = CKEDITOR.plugins.sourcearea; f.addMode("source", function(c) { var e = f.ui.space("contents").getDocument().createElement("textarea"); e.setStyles(CKEDITOR.tools.extend({ width: CKEDITOR.env.ie7Compat ? "99%" : "100%", height: "100%", resize: "none", outline: "none", "text-align": "left" }, CKEDITOR.tools.cssVendorPrefix("tab-size", f.config.sourceAreaTabSize || 4))); e.setAttribute("dir", "ltr"); e.addClass("cke_source").addClass("cke_reset").addClass("cke_enable_context_menu"); f.ui.space("contents").append(e); e = f.editable(new a(f, e)); e.setData(f.getData(1)); CKEDITOR.env.ie && (e.attachListener(f, "resize", b, e), e.attachListener(CKEDITOR.document.getWindow(), "resize", b, e), CKEDITOR.tools.setTimeout(b, 0, e)); f.fire("ariaWidget", this); c() }); f.addCommand("source", c.commands.source); f.ui.addButton && f.ui.addButton("Source", { label: f.lang.sourcearea.toolbar, command: "source", toolbar: "mode,10" }); f.on("mode", function() { f.getCommand("source").setState("source" == f.mode ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF) }); var e = CKEDITOR.env.ie && 9 == CKEDITOR.env.version } } }); var a = CKEDITOR.tools.createClass({ base: CKEDITOR.editable, proto: { setData: function(a) { this.setValue(a); this.status = "ready"; this.editor.fire("dataReady") }, getData: function() { return this.getValue() }, insertHtml: function() {}, insertElement: function() {}, insertText: function() {}, setReadOnly: function(a) { this[(a ? "set" : "remove") + "Attribute"]("readOnly", "readonly") }, detach: function() { a.baseProto.detach.call(this); this.clearCustomData(); this.remove() } } }) }(), CKEDITOR.plugins.sourcearea = { commands: { source: { modes: { wysiwyg: 1, source: 1 }, editorFocus: !1, readOnly: 1, exec: function(a) { "wysiwyg" == a.mode && a.fire("saveSnapshot"); a.getCommand("source").setState(CKEDITOR.TRISTATE_DISABLED); a.setMode("source" == a.mode ? "wysiwyg" : "source") }, canUndo: !1 } } }, CKEDITOR.plugins.add("specialchar", { availableLangs: { af: 1, ar: 1, bg: 1, ca: 1, cs: 1, cy: 1, da: 1, de: 1, "de-ch": 1, el: 1, en: 1, "en-gb": 1, eo: 1, es: 1, et: 1, eu: 1, fa: 1, fi: 1, fr: 1, "fr-ca": 1, gl: 1, he: 1, hr: 1, hu: 1, id: 1, it: 1, ja: 1, km: 1, ko: 1, ku: 1, lt: 1, lv: 1, nb: 1, nl: 1, no: 1, oc: 1, pl: 1, pt: 1, "pt-br": 1, ru: 1, si: 1, sk: 1, sl: 1, sq: 1, sv: 1, th: 1, tr: 1, tt: 1, ug: 1, uk: 1, vi: 1, zh: 1, "zh-cn": 1 }, requires: "dialog", init: function(a) { var f = this; CKEDITOR.dialog.add("specialchar", this.path + "dialogs/specialchar.js"); a.addCommand("specialchar", { exec: function() { var b = a.langCode, b = f.availableLangs[b] ? b : f.availableLangs[b.replace(/-.*/, "")] ? b.replace(/-.*/, "") : "en"; CKEDITOR.scriptLoader.load(CKEDITOR.getUrl(f.path + "dialogs/lang/" + b + ".js"), function() { CKEDITOR.tools.extend(a.lang.specialchar, f.langEntries[b]); a.openDialog("specialchar") }) }, modes: { wysiwyg: 1 }, canUndo: !1 }); a.ui.addButton && a.ui.addButton("SpecialChar", { label: a.lang.specialchar.toolbar, command: "specialchar", toolbar: "insert,50" }) } }), CKEDITOR.config.specialChars = "! \x26quot; # $ % \x26amp; ' ( ) * + - . / 0 1 2 3 4 5 6 7 8 9 : ; \x26lt; \x3d \x26gt; ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ \x26euro; \x26lsquo; \x26rsquo; \x26ldquo; \x26rdquo; \x26ndash; \x26mdash; \x26iexcl; \x26cent; \x26pound; \x26curren; \x26yen; \x26brvbar; \x26sect; \x26uml; \x26copy; \x26ordf; \x26laquo; \x26not; \x26reg; \x26macr; \x26deg; \x26sup2; \x26sup3; \x26acute; \x26micro; \x26para; \x26middot; \x26cedil; \x26sup1; \x26ordm; \x26raquo; \x26frac14; \x26frac12; \x26frac34; \x26iquest; \x26Agrave; \x26Aacute; \x26Acirc; \x26Atilde; \x26Auml; \x26Aring; \x26AElig; \x26Ccedil; \x26Egrave; \x26Eacute; \x26Ecirc; \x26Euml; \x26Igrave; \x26Iacute; \x26Icirc; \x26Iuml; \x26ETH; \x26Ntilde; \x26Ograve; \x26Oacute; \x26Ocirc; \x26Otilde; \x26Ouml; \x26times; \x26Oslash; \x26Ugrave; \x26Uacute; \x26Ucirc; \x26Uuml; \x26Yacute; \x26THORN; \x26szlig; \x26agrave; \x26aacute; \x26acirc; \x26atilde; \x26auml; \x26aring; \x26aelig; \x26ccedil; \x26egrave; \x26eacute; \x26ecirc; \x26euml; \x26igrave; \x26iacute; \x26icirc; \x26iuml; \x26eth; \x26ntilde; \x26ograve; \x26oacute; \x26ocirc; \x26otilde; \x26ouml; \x26divide; \x26oslash; \x26ugrave; \x26uacute; \x26ucirc; \x26uuml; \x26yacute; \x26thorn; \x26yuml; \x26OElig; \x26oelig; \x26#372; \x26#374 \x26#373 \x26#375; \x26sbquo; \x26#8219; \x26bdquo; \x26hellip; \x26trade; \x26#9658; \x26bull; \x26rarr; \x26rArr; \x26hArr; \x26diams; \x26asymp;".split(" "), function() { CKEDITOR.plugins.add("stylescombo", { requires: "richcombo", init: function(a) { var f = a.config, b = a.lang.stylescombo, c = {}, e = [], m = []; a.on("stylesSet", function(b) { if (b = b.data.styles) { for (var d, h, k, g = 0, n = b.length; g < n; g++)(d = b[g], a.blockless && d.element in CKEDITOR.dtd.$block || "string" == typeof d.type && !CKEDITOR.style.customHandlers[d.type] || (h = d.name, d = new CKEDITOR.style(d), a.filter.customConfig && !a.filter.check(d))) || (d._name = h, d._.enterMode = f.enterMode, d._.type = k = d.assignedTo || d.type, d._.weight = g + 1E3 * (k == CKEDITOR.STYLE_OBJECT ? 1 : k == CKEDITOR.STYLE_BLOCK ? 2 : 3), c[h] = d, e.push(d), m.push(d)); e.sort(function(a, b) { return a._.weight - b._.weight }) } }); a.ui.addRichCombo("Styles", { label: b.label, title: b.panelTitle, toolbar: "styles,10", allowedContent: m, panel: { css: [CKEDITOR.skin.getPath("editor")].concat(f.contentsCss), multiSelect: !0, attributes: { "aria-label": b.panelTitle } }, init: function() { var a, c, f, k, g, m; g = 0; for (m = e.length; g < m; g++) a = e[g], c = a._name, k = a._.type, k != f && (this.startGroup(b["panelTitle" + String(k)]), f = k), this.add(c, a.type == CKEDITOR.STYLE_OBJECT ? c : a.buildPreview(), c); this.commit() }, onClick: function(b) { a.focus(); a.fire("saveSnapshot"); b = c[b]; var d = a.elementPath(); a[b.checkActive(d, a) ? "removeStyle" : "applyStyle"](b); a.fire("saveSnapshot") }, onRender: function() { a.on("selectionChange", function(b) { var d = this.getValue(); b = b.data.path.elements; for (var e = 0, f = b.length, g; e < f; e++) { g = b[e]; for (var m in c) if (c[m].checkElementRemovable(g, !0, a)) { m != d && this.setValue(m); return } } this.setValue("") }, this) }, onOpen: function() { var e = a.getSelection().getSelectedElement(), e = a.elementPath(e), d = [0, 0, 0, 0]; this.showAll(); this.unmarkAll(); for (var f in c) { var k = c[f], g = k._.type; k.checkApplicable(e, a, a.activeFilter) ? d[g]++ : this.hideItem(f); k.checkActive(e, a) && this.mark(f) } d[CKEDITOR.STYLE_BLOCK] || this.hideGroup(b["panelTitle" + String(CKEDITOR.STYLE_BLOCK)]); d[CKEDITOR.STYLE_INLINE] || this.hideGroup(b["panelTitle" + String(CKEDITOR.STYLE_INLINE)]); d[CKEDITOR.STYLE_OBJECT] || this.hideGroup(b["panelTitle" + String(CKEDITOR.STYLE_OBJECT)]) }, refresh: function() { var b = a.elementPath(); if (b) { for (var d in c) if (c[d].checkApplicable(b, a, a.activeFilter)) return; this.setState(CKEDITOR.TRISTATE_DISABLED) } }, reset: function() { c = {}; e = [] } }) } }) }(), function() { function a(a) { return { editorFocus: !1, canUndo: !1, modes: { wysiwyg: 1 }, exec: function(b) { if (b.editable().hasFocus) { var c = b.getSelection(), d; if (d = (new CKEDITOR.dom.elementPath(c.getCommonAncestor(), c.root)).contains({ td: 1, th: 1 }, 1)) { var c = b.createRange(), f = CKEDITOR.tools.tryThese(function() { var b = d.getParent().$.cells[d.$.cellIndex + (a ? -1 : 1)]; b.parentNode.parentNode; return b }, function() { var b = d.getParent(), b = b.getAscendant("table").$.rows[b.$.rowIndex + (a ? -1 : 1)]; return b.cells[a ? b.cells.length - 1 : 0] }); if (f || a) if (f) f = new CKEDITOR.dom.element(f), c.moveToElementEditStart(f), c.checkStartOfBlock() && c.checkEndOfBlock() || c.selectNodeContents(f); else return !0; else { for (var k = d.getAscendant("table").$, f = d.getParent().$.cells, k = new CKEDITOR.dom.element(k.insertRow(-1), b.document), g = 0, n = f.length; g < n; g++) k.append((new CKEDITOR.dom.element(f[g], b.document)).clone(!1, !1)).appendBogus(); c.moveToElementEditStart(k) } c.select(!0); return !0 } } return !1 } } } var f = { editorFocus: !1, modes: { wysiwyg: 1, source: 1 } }, b = { exec: function(a) { a.container.focusNext(!0, a.tabIndex) } }, c = { exec: function(a) { a.container.focusPrevious(!0, a.tabIndex) } }; CKEDITOR.plugins.add("tab", { init: function(e) { for (var m = !1 !== e.config.enableTabKeyTools, l = e.config.tabSpaces || 0, d = ""; l--;) d += " "; if (d) e.on("key", function(a) { 9 == a.data.keyCode && (e.insertText(d), a.cancel()) }); if (m) e.on("key", function(a) { (9 == a.data.keyCode && e.execCommand("selectNextCell") || a.data.keyCode == CKEDITOR.SHIFT + 9 && e.execCommand("selectPreviousCell")) && a.cancel() }); e.addCommand("blur", CKEDITOR.tools.extend(b, f)); e.addCommand("blurBack", CKEDITOR.tools.extend(c, f)); e.addCommand("selectNextCell", a()); e.addCommand("selectPreviousCell", a(!0)) } }) }(), CKEDITOR.dom.element.prototype.focusNext = function(a, f) { var b = void 0 === f ? this.getTabIndex() : f, c, e, m, l, d, h; if (0 >= b) for (d = this.getNextSourceNode(a, CKEDITOR.NODE_ELEMENT); d;) { if (d.isVisible() && 0 === d.getTabIndex()) { m = d; break } d = d.getNextSourceNode(!1, CKEDITOR.NODE_ELEMENT) } else for (d = this.getDocument().getBody().getFirst(); d = d.getNextSourceNode(!1, CKEDITOR.NODE_ELEMENT);) { if (!c) if (!e && d.equals(this)) { if (e = !0, a) { if (!(d = d.getNextSourceNode(!0, CKEDITOR.NODE_ELEMENT))) break; c = 1 } } else e && !this.contains(d) && (c = 1); if (d.isVisible() && !(0 > (h = d.getTabIndex()))) { if (c && h == b) { m = d; break } h > b && (!m || !l || h < l) ? (m = d, l = h) : m || 0 !== h || (m = d, l = h) } } m && m.focus() }, CKEDITOR.dom.element.prototype.focusPrevious = function(a, f) { for (var b = void 0 === f ? this.getTabIndex() : f, c, e, m, l = 0, d, h = this.getDocument().getBody().getLast(); h = h.getPreviousSourceNode(!1, CKEDITOR.NODE_ELEMENT);) { if (!c) if (!e && h.equals(this)) { if (e = !0, a) { if (!(h = h.getPreviousSourceNode(!0, CKEDITOR.NODE_ELEMENT))) break; c = 1 } } else e && !this.contains(h) && (c = 1); if (h.isVisible() && !(0 > (d = h.getTabIndex()))) if (0 >= b) { if (c && 0 === d) { m = h; break } d > l && (m = h, l = d) } else { if (c && d == b) { m = h; break } d < b && (!m || d > l) && (m = h, l = d) } } m && m.focus() }, CKEDITOR.plugins.add("table", { requires: "dialog", init: function(a) { function f(a) { return CKEDITOR.tools.extend(a || {}, { contextSensitive: 1, refresh: function(a, b) { this.setState(b.contains("table", 1) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED) } }) } if (!a.blockless) { var b = a.lang.table; a.addCommand("table", new CKEDITOR.dialogCommand("table", { context: "table", allowedContent: "table{width,height}[align,border,cellpadding,cellspacing,summary];caption tbody thead tfoot;th td tr[scope];" + (a.plugins.dialogadvtab ? "table" + a.plugins.dialogadvtab.allowedContent() : ""), requiredContent: "table", contentTransformations: [ ["table{width}: sizeToStyle", "table[width]: sizeToAttribute" ], ["td: splitBorderShorthand"], [{ element: "table", right: function(a) { a.styles && (a.styles.border && a.styles.border.match(/solid/) && (a.attributes.border = 1), "collapse" == a.styles["border-collapse"] && (a.attributes.cellspacing = 0)) } }] ] })); a.addCommand("tableProperties", new CKEDITOR.dialogCommand("tableProperties", f())); a.addCommand("tableDelete", f({ exec: function(a) { var b = a.elementPath().contains("table", 1); if (b) { var f = b.getParent(), l = a.editable(); 1 != f.getChildCount() || f.is("td", "th") || f.equals(l) || (b = f); a = a.createRange(); a.moveToPosition(b, CKEDITOR.POSITION_BEFORE_START); b.remove(); a.select() } } })); a.ui.addButton && a.ui.addButton("Table", { label: b.toolbar, command: "table", toolbar: "insert,30" }); CKEDITOR.dialog.add("table", this.path + "dialogs/table.js"); CKEDITOR.dialog.add("tableProperties", this.path + "dialogs/table.js"); a.addMenuItems && a.addMenuItems({ table: { label: b.menu, command: "tableProperties", group: "table", order: 5 }, tabledelete: { label: b.deleteTable, command: "tableDelete", group: "table", order: 1 } }); a.on("doubleclick", function(a) { a.data.element.is("table") && (a.data.dialog = "tableProperties") }); a.contextMenu && a.contextMenu.addListener(function() { return { tabledelete: CKEDITOR.TRISTATE_OFF, table: CKEDITOR.TRISTATE_OFF } }) } } }), function() { function a(a) { function b(a) { 0 < c.length || a.type != CKEDITOR.NODE_ELEMENT || !w.test(a.getName()) || a.getCustomData("selected_cell") || (CKEDITOR.dom.element.setMarker(d, a, "selected_cell", !0), c.push(a)) } a = a.getRanges(); for (var c = [], d = {}, e = 0; e < a.length; e++) { var f = a[e]; if (f.collapsed) f = f.getCommonAncestor(), (f = f.getAscendant("td", !0) || f.getAscendant("th", !0)) && c.push(f); else { var f = new CKEDITOR.dom.walker(f), g; for (f.guard = b; g = f.next();) g.type == CKEDITOR.NODE_ELEMENT && g.is(CKEDITOR.dtd.table) || (g = g.getAscendant("td", !0) || g.getAscendant("th", !0)) && !g.getCustomData("selected_cell") && (CKEDITOR.dom.element.setMarker(d, g, "selected_cell", !0), c.push(g)) } } CKEDITOR.dom.element.clearAllMarkers(d); return c } function f(b, c) { for (var d = a(b), e = d[0], f = e.getAscendant("table"), e = e.getDocument(), g = d[0].getParent(), h = g.$.rowIndex, d = d[d.length - 1], k = d.getParent().$.rowIndex + d.$.rowSpan - 1, d = new CKEDITOR.dom.element(f.$.rows[k]), h = c ? h : k, g = c ? g : d, d = CKEDITOR.tools.buildTableMap(f), f = d[h], h = c ? d[h - 1] : d[h + 1], d = d[0].length, e = e.createElement("tr"), k = 0; f[k] && k < d; k++) { var l; 1 < f[k].rowSpan && h && f[k] == h[k] ? (l = f[k], l.rowSpan += 1) : (l = (new CKEDITOR.dom.element(f[k])).clone(), l.removeAttribute("rowSpan"), l.appendBogus(), e.append(l), l = l.$); k += l.colSpan - 1 } c ? e.insertBefore(g) : e.insertAfter(g) } function b(c) { if (c instanceof CKEDITOR.dom.selection) { var d = a(c), e = d[0].getAscendant("table"), f = CKEDITOR.tools.buildTableMap(e); c = d[0].getParent().$.rowIndex; for (var d = d[d.length - 1], g = d.getParent().$.rowIndex + d.$.rowSpan - 1, d = [], h = c; h <= g; h++) { for (var k = f[h], l = new CKEDITOR.dom.element(e.$.rows[h]), m = 0; m < k.length; m++) { var n = new CKEDITOR.dom.element(k[m]), w = n.getParent().$.rowIndex; 1 == n.$.rowSpan ? n.remove() : (--n.$.rowSpan, w == h && (w = f[h + 1], w[m - 1] ? n.insertAfter(new CKEDITOR.dom.element(w[m - 1])) : (new CKEDITOR.dom.element(e.$.rows[h + 1])).append(n, 1))); m += n.$.colSpan - 1 } d.push(l) } f = e.$.rows; e = new CKEDITOR.dom.element(f[g + 1] || (0 < c ? f[c - 1] : null) || e.$.parentNode); for (h = d.length; 0 <= h; h--) b(d[h]); return e } c instanceof CKEDITOR.dom.element && (e = c.getAscendant("table"), 1 == e.$.rows.length ? e.remove() : c.remove()); return null } function c(a, b) { for (var c = b ? Infinity : 0, d = 0; d < a.length; d++) { var e; e = a[d]; for (var f = b, g = e.getParent().$.cells, h = 0, k = 0; k < g.length; k++) { var l = g[k], h = h + (f ? 1 : l.colSpan); if (l == e.$) break } e = h - 1; if (b ? e < c : e > c) c = e } return c } function e(b, d) { for (var e = a(b), f = e[0].getAscendant("table"), g = c(e, 1), e = c(e), g = d ? g : e, h = CKEDITOR.tools.buildTableMap(f), f = [], e = [], k = h.length, l = 0; l < k; l++) f.push(h[l][g]), e.push(d ? h[l][g - 1] : h[l][g + 1]); for (l = 0; l < k; l++) f[l] && (1 < f[l].colSpan && e[l] == f[l] ? (g = f[l], g.colSpan += 1) : (g = (new CKEDITOR.dom.element(f[l])).clone(), g.removeAttribute("colSpan"), g.appendBogus(), g[d ? "insertBefore" : "insertAfter"].call(g, new CKEDITOR.dom.element(f[l])), g = g.$), l += g.rowSpan - 1) } function m(a, b) { var c = a.getStartElement(); if (c = c.getAscendant("td", 1) || c.getAscendant("th", 1)) { var d = c.clone(); d.appendBogus(); b ? d.insertBefore(c) : d.insertAfter(c) } } function l(b) { if (b instanceof CKEDITOR.dom.selection) { b = a(b); var c = b[0] && b[0].getAscendant("table"), e; a: { var f = 0; e = b.length - 1; for (var g = {}, h, k; h = b[f++];) CKEDITOR.dom.element.setMarker(g, h, "delete_cell", !0); for (f = 0; h = b[f++];) if ((k = h.getPrevious()) && !k.getCustomData("delete_cell") || (k = h.getNext()) && !k.getCustomData("delete_cell")) { CKEDITOR.dom.element.clearAllMarkers(g); e = k; break a } CKEDITOR.dom.element.clearAllMarkers(g); k = b[0].getParent(); (k = k.getPrevious()) ? e = k.getLast(): (k = b[e].getParent(), e = (k = k.getNext()) ? k.getChild(0) : null) } for (k = b.length - 1; 0 <= k; k--) l(b[k]); e ? d(e, !0) : c && c.remove() } else b instanceof CKEDITOR.dom.element && (c = b.getParent(), 1 == c.getChildCount() ? c.remove() : b.remove()) } function d(a, b) { var c = a.getDocument(), d = CKEDITOR.document; CKEDITOR.env.ie && 10 == CKEDITOR.env.version && (d.focus(), c.focus()); c = new CKEDITOR.dom.range(c); c["moveToElementEdit" + (b ? "End" : "Start")](a) || (c.selectNodeContents(a), c.collapse(b ? !1 : !0)); c.select(!0) } function h(a, b, c) { a = a[b]; if ("undefined" == typeof c) return a; for (b = 0; a && b < a.length; b++) { if (c.is && a[b] == c.$) return b; if (b == c) return new CKEDITOR.dom.element(a[b]) } return c.is ? -1 : null } function k(b, c, d) { var e = a(b), f; if ((c ? 1 != e.length : 2 > e.length) || (f = b.getCommonAncestor()) && f.type == CKEDITOR.NODE_ELEMENT && f.is("table")) return !1; var g; b = e[0]; f = b.getAscendant("table"); var k = CKEDITOR.tools.buildTableMap(f), l = k.length, m = k[0].length, n = b.getParent().$.rowIndex, w = h(k, n, b); if (c) { var A; try { var C = parseInt(b.getAttribute("rowspan"), 10) || 1; g = parseInt(b.getAttribute("colspan"), 10) || 1; A = k["up" == c ? n - C : "down" == c ? n + C : n]["left" == c ? w - g : "right" == c ? w + g : w] } catch (F) { return !1 } if (!A || b.$ == A) return !1; e["up" == c || "left" == c ? "unshift" : "push"](new CKEDITOR.dom.element(A)) } c = b.getDocument(); var G = n, C = A = 0, I = !d && new CKEDITOR.dom.documentFragment(c), H = 0; for (c = 0; c < e.length; c++) { g = e[c]; var K = g.getParent(), J = g.getFirst(), E = g.$.colSpan, S = g.$.rowSpan, K = K.$.rowIndex, O = h(k, K, g), H = H + E * S, C = Math.max(C, O - w + E); A = Math.max(A, K - n + S); d || (E = g, (S = E.getBogus()) && S.remove(), E.trim(), g.getChildren().count() && (K == G || !J || J.isBlockBoundary && J.isBlockBoundary({ br: 1 }) || (G = I.getLast(CKEDITOR.dom.walker.whitespaces(!0)), !G || G.is && G.is("br") || I.append("br")), g.moveChildren(I)), c ? g.remove() : g.setHtml("")); G = K } if (d) return A * C == H; I.moveChildren(b); b.appendBogus(); C >= m ? b.removeAttribute("rowSpan") : b.$.rowSpan = A; A >= l ? b.removeAttribute("colSpan") : b.$.colSpan = C; d = new CKEDITOR.dom.nodeList(f.$.rows); e = d.count(); for (c = e - 1; 0 <= c; c--) f = d.getItem(c), f.$.cells.length || (f.remove(), e++); return b } function g(b, c) { var d = a(b); if (1 < d.length) return !1; if (c) return !0; var d = d[0], e = d.getParent(), f = e.getAscendant("table"), g = CKEDITOR.tools.buildTableMap(f), k = e.$.rowIndex, l = h(g, k, d), m = d.$.rowSpan, n; if (1 < m) { n = Math.ceil(m / 2); for (var m = Math.floor(m / 2), e = k + n, f = new CKEDITOR.dom.element(f.$.rows[e]), g = h(g, e), w, e = d.clone(), k = 0; k < g.length; k++) if (w = g[k], w.parentNode == f.$ && k > l) { e.insertBefore(new CKEDITOR.dom.element(w)); break } else w = null; w || f.append(e) } else for (m = n = 1, f = e.clone(), f.insertAfter(e), f.append(e = d.clone()), w = h(g, k), l = 0; l < w.length; l++) w[l].rowSpan++; e.appendBogus(); d.$.rowSpan = n; e.$.rowSpan = m; 1 == n && d.removeAttribute("rowSpan"); 1 == m && e.removeAttribute("rowSpan"); return e } function n(b, c) { var d = a(b); if (1 < d.length) return !1; if (c) return !0; var d = d[0], e = d.getParent(), f = e.getAscendant("table"), f = CKEDITOR.tools.buildTableMap(f), g = h(f, e.$.rowIndex, d), k = d.$.colSpan; if (1 < k) e = Math.ceil(k / 2), k = Math.floor(k / 2); else { for (var k = e = 1, l = [], m = 0; m < f.length; m++) { var n = f[m]; l.push(n[g]); 1 < n[g].rowSpan && (m += n[g].rowSpan - 1) } for (f = 0; f < l.length; f++) l[f].colSpan++ } f = d.clone(); f.insertAfter(d); f.appendBogus(); d.$.colSpan = e; f.$.colSpan = k; 1 == e && d.removeAttribute("colSpan"); 1 == k && f.removeAttribute("colSpan"); return f } var w = /^(?:td|th)$/; CKEDITOR.plugins.tabletools = { requires: "table,dialog,contextmenu", init: function(c) { function h(a) { return CKEDITOR.tools.extend(a || {}, { contextSensitive: 1, refresh: function(a, b) { this.setState(b.contains({ td: 1, th: 1 }, 1) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED) } }) } function u(a, b) { var d = c.addCommand(a, b); c.addFeature(d) } var r = c.lang.table; u("cellProperties", new CKEDITOR.dialogCommand("cellProperties", h({ allowedContent: "td th{width,height,border-color,background-color,white-space,vertical-align,text-align}[colspan,rowspan]", requiredContent: "table", contentTransformations: [ [{ element: "td", left: function(a) { return a.styles.background && a.styles.background.match(/^(#[a-fA-F0-9]{3,6}|rgb\([\d, ]+\)|\w+)$/) }, right: function(a) { a.styles["background-color"] = a.styles.background } }] ] }))); CKEDITOR.dialog.add("cellProperties", this.path + "dialogs/tableCell.js"); u("rowDelete", h({ requiredContent: "table", exec: function(a) { a = a.getSelection(); d(b(a)) } })); u("rowInsertBefore", h({ requiredContent: "table", exec: function(a) { a = a.getSelection(); f(a, !0) } })); u("rowInsertAfter", h({ requiredContent: "table", exec: function(a) { a = a.getSelection(); f(a) } })); u("columnDelete", h({ requiredContent: "table", exec: function(b) { b = b.getSelection(); b = a(b); var c = b[0], e = b[b.length - 1]; b = c.getAscendant("table"); for (var f = CKEDITOR.tools.buildTableMap(b), g, h, k = [], l = 0, m = f.length; l < m; l++) for (var n = 0, q = f[l].length; n < q; n++) f[l][n] == c.$ && (g = n), f[l][n] == e.$ && (h = n); for (l = g; l <= h; l++) for (n = 0; n < f.length; n++) e = f[n], c = new CKEDITOR.dom.element(b.$.rows[n]), e = new CKEDITOR.dom.element(e[l]), e.$ && (1 == e.$.colSpan ? e.remove() : --e.$.colSpan, n += e.$.rowSpan - 1, c.$.cells.length || k.push(c)); h = b.$.rows[0] && b.$.rows[0].cells; g = new CKEDITOR.dom.element(h[g] || (g ? h[g - 1] : b.$.parentNode)); k.length == m && b.remove(); g && d(g, !0) } })); u("columnInsertBefore", h({ requiredContent: "table", exec: function(a) { a = a.getSelection(); e(a, !0) } })); u("columnInsertAfter", h({ requiredContent: "table", exec: function(a) { a = a.getSelection(); e(a) } })); u("cellDelete", h({ requiredContent: "table", exec: function(a) { a = a.getSelection(); l(a) } })); u("cellMerge", h({ allowedContent: "td[colspan,rowspan]", requiredContent: "td[colspan,rowspan]", exec: function(a) { d(k(a.getSelection()), !0) } })); u("cellMergeRight", h({ allowedContent: "td[colspan]", requiredContent: "td[colspan]", exec: function(a) { d(k(a.getSelection(), "right"), !0) } })); u("cellMergeDown", h({ allowedContent: "td[rowspan]", requiredContent: "td[rowspan]", exec: function(a) { d(k(a.getSelection(), "down"), !0) } })); u("cellVerticalSplit", h({ allowedContent: "td[rowspan]", requiredContent: "td[rowspan]", exec: function(a) { d(n(a.getSelection())) } })); u("cellHorizontalSplit", h({ allowedContent: "td[colspan]", requiredContent: "td[colspan]", exec: function(a) { d(g(a.getSelection())) } })); u("cellInsertBefore", h({ requiredContent: "table", exec: function(a) { a = a.getSelection(); m(a, !0) } })); u("cellInsertAfter", h({ requiredContent: "table", exec: function(a) { a = a.getSelection(); m(a) } })); c.addMenuItems && c.addMenuItems({ tablecell: { label: r.cell.menu, group: "tablecell", order: 1, getItems: function() { var b = c.getSelection(), d = a(b); return { tablecell_insertBefore: CKEDITOR.TRISTATE_OFF, tablecell_insertAfter: CKEDITOR.TRISTATE_OFF, tablecell_delete: CKEDITOR.TRISTATE_OFF, tablecell_merge: k(b, null, !0) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_merge_right: k(b, "right", !0) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_merge_down: k(b, "down", !0) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_split_vertical: n(b, !0) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_split_horizontal: g(b, !0) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, tablecell_properties: 0 < d.length ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED } } }, tablecell_insertBefore: { label: r.cell.insertBefore, group: "tablecell", command: "cellInsertBefore", order: 5 }, tablecell_insertAfter: { label: r.cell.insertAfter, group: "tablecell", command: "cellInsertAfter", order: 10 }, tablecell_delete: { label: r.cell.deleteCell, group: "tablecell", command: "cellDelete", order: 15 }, tablecell_merge: { label: r.cell.merge, group: "tablecell", command: "cellMerge", order: 16 }, tablecell_merge_right: { label: r.cell.mergeRight, group: "tablecell", command: "cellMergeRight", order: 17 }, tablecell_merge_down: { label: r.cell.mergeDown, group: "tablecell", command: "cellMergeDown", order: 18 }, tablecell_split_horizontal: { label: r.cell.splitHorizontal, group: "tablecell", command: "cellHorizontalSplit", order: 19 }, tablecell_split_vertical: { label: r.cell.splitVertical, group: "tablecell", command: "cellVerticalSplit", order: 20 }, tablecell_properties: { label: r.cell.title, group: "tablecellproperties", command: "cellProperties", order: 21 }, tablerow: { label: r.row.menu, group: "tablerow", order: 1, getItems: function() { return { tablerow_insertBefore: CKEDITOR.TRISTATE_OFF, tablerow_insertAfter: CKEDITOR.TRISTATE_OFF, tablerow_delete: CKEDITOR.TRISTATE_OFF } } }, tablerow_insertBefore: { label: r.row.insertBefore, group: "tablerow", command: "rowInsertBefore", order: 5 }, tablerow_insertAfter: { label: r.row.insertAfter, group: "tablerow", command: "rowInsertAfter", order: 10 }, tablerow_delete: { label: r.row.deleteRow, group: "tablerow", command: "rowDelete", order: 15 }, tablecolumn: { label: r.column.menu, group: "tablecolumn", order: 1, getItems: function() { return { tablecolumn_insertBefore: CKEDITOR.TRISTATE_OFF, tablecolumn_insertAfter: CKEDITOR.TRISTATE_OFF, tablecolumn_delete: CKEDITOR.TRISTATE_OFF } } }, tablecolumn_insertBefore: { label: r.column.insertBefore, group: "tablecolumn", command: "columnInsertBefore", order: 5 }, tablecolumn_insertAfter: { label: r.column.insertAfter, group: "tablecolumn", command: "columnInsertAfter", order: 10 }, tablecolumn_delete: { label: r.column.deleteColumn, group: "tablecolumn", command: "columnDelete", order: 15 } }); c.contextMenu && c.contextMenu.addListener(function(a, b, c) { return (a = c.contains({ td: 1, th: 1 }, 1)) && !a.isReadOnly() ? { tablecell: CKEDITOR.TRISTATE_OFF, tablerow: CKEDITOR.TRISTATE_OFF, tablecolumn: CKEDITOR.TRISTATE_OFF } : null }) }, getSelectedCells: a }; CKEDITOR.plugins.add("tabletools", CKEDITOR.plugins.tabletools) }(), CKEDITOR.tools.buildTableMap = function(a) { a = a.$.rows; for (var f = -1, b = [], c = 0; c < a.length; c++) { f++; !b[f] && (b[f] = []); for (var e = -1, m = 0; m < a[c].cells.length; m++) { var l = a[c].cells[m]; for (e++; b[f][e];) e++; for (var d = isNaN(l.colSpan) ? 1 : l.colSpan, l = isNaN(l.rowSpan) ? 1 : l.rowSpan, h = 0; h < l; h++) { b[f + h] || (b[f + h] = []); for (var k = 0; k < d; k++) b[f + h][e + k] = a[c].cells[m] } e += d - 1 } } return b }, function() { function a(a) { function b() { for (var g = c(), h = CKEDITOR.tools.clone(a.config.toolbarGroups) || f(a), k = 0; k < h.length; k++) { var m = h[k]; if ("/" != m) { "string" == typeof m && (m = h[k] = { name: m }); var u, r = m.groups; if (r) for (var p = 0; p < r.length; p++) u = r[p], (u = g[u]) && d(m, u); (u = g[m.name]) && d(m, u) } } return h } function c() { var b = {}, d, f, g; for (d in a.ui.items) f = a.ui.items[d], g = f.toolbar || "others", g = g.split(","), f = g[0], g = parseInt(g[1] || -1, 10), b[f] || (b[f] = []), b[f].push({ name: d, order: g }); for (f in b) b[f] = b[f].sort(function(a, b) { return a.order == b.order ? 0 : 0 > b.order ? -1 : 0 > a.order ? 1 : a.order < b.order ? -1 : 1 }); return b } function d(b, c) { if (c.length) { b.items ? b.items.push(a.ui.create("-")) : b.items = []; for (var d; d = c.shift();) d = "string" == typeof d ? d : d.name, k && -1 != CKEDITOR.tools.indexOf(k, d) || (d = a.ui.create(d)) && a.addFeature(d) && b.items.push(d) } } function h(a) { var b = [], c, e, f; for (c = 0; c < a.length; ++c) e = a[c], f = {}, "/" == e ? b.push(e) : CKEDITOR.tools.isArray(e) ? (d(f, CKEDITOR.tools.clone(e)), b.push(f)) : e.items && (d(f, CKEDITOR.tools.clone(e.items)), f.name = e.name, b.push(f)); return b } var k = a.config.removeButtons, k = k && k.split(","), g = a.config.toolbar; "string" == typeof g && (g = a.config["toolbar_" + g]); return a.toolbar = g ? h(g) : b() } function f(a) { return a._.toolbarGroups || (a._.toolbarGroups = [{ name: "document", groups: ["mode", "document", "doctools"] }, { name: "clipboard", groups: ["clipboard", "undo"] }, { name: "editing", groups: ["find", "selection", "spellchecker"] }, { name: "forms" }, "/", { name: "basicstyles", groups: ["basicstyles", "cleanup"] }, { name: "paragraph", groups: ["list", "indent", "blocks", "align", "bidi"] }, { name: "links" }, { name: "insert" }, "/", { name: "styles" }, { name: "colors" }, { name: "tools" }, { name: "others" }, { name: "about" }]) } var b = function() { this.toolbars = []; this.focusCommandExecuted = !1 }; b.prototype.focus = function() { for (var a = 0, b; b = this.toolbars[a++];) for (var c = 0, d; d = b.items[c++];) if (d.focus) { d.focus(); return } }; var c = { modes: { wysiwyg: 1, source: 1 }, readOnly: 1, exec: function(a) { a.toolbox && (a.toolbox.focusCommandExecuted = !0, CKEDITOR.env.ie || CKEDITOR.env.air ? setTimeout(function() { a.toolbox.focus() }, 100) : a.toolbox.focus()) } }; CKEDITOR.plugins.add("toolbar", { requires: "button", init: function(e) { var f, l = function(a, b) { var c, g = "rtl" == e.lang.dir, n = e.config.toolbarGroupCycling, w = g ? 37 : 39, g = g ? 39 : 37, n = void 0 === n || n; switch (b) { case 9: case CKEDITOR.SHIFT + 9: for (; !c || !c.items.length;) if (c = 9 == b ? (c ? c.next : a.toolbar.next) || e.toolbox.toolbars[0] : (c ? c.previous : a.toolbar.previous) || e.toolbox.toolbars[e.toolbox.toolbars.length - 1], c.items.length) for (a = c.items[f ? c.items.length - 1 : 0]; a && !a.focus;)(a = f ? a.previous : a.next) || (c = 0); a && a.focus(); return !1; case w: c = a; do c = c.next, !c && n && (c = a.toolbar.items[0]); while (c && !c.focus); c ? c.focus() : l(a, 9); return !1; case 40: return a.button && a.button.hasArrow ? (e.once("panelShow", function(a) { a.data._.panel._.currentBlock.onKeyDown(40) }), a.execute()) : l(a, 40 == b ? w : g), !1; case g: case 38: c = a; do c = c.previous, !c && n && (c = a.toolbar.items[a.toolbar.items.length - 1]); while (c && !c.focus); c ? c.focus() : (f = 1, l(a, CKEDITOR.SHIFT + 9), f = 0); return !1; case 27: return e.focus(), !1; case 13: case 32: return a.execute(), !1 } return !0 }; e.on("uiSpace", function(c) { if (c.data.space == e.config.toolbarLocation) { c.removeListener(); e.toolbox = new b; var f = CKEDITOR.tools.getNextId(), k = ['\x3cspan id\x3d"', f, '" class\x3d"cke_voice_label"\x3e', e.lang.toolbar.toolbars, "\x3c/span\x3e", '\x3cspan id\x3d"' + e.ui.spaceId("toolbox") + '" class\x3d"cke_toolbox" role\x3d"group" aria-labelledby\x3d"', f, '" onmousedown\x3d"return false;"\x3e' ], f = !1 !== e.config.toolbarStartupExpanded, g, m; e.config.toolbarCanCollapse && e.elementMode != CKEDITOR.ELEMENT_MODE_INLINE && k.push('\x3cspan class\x3d"cke_toolbox_main"' + (f ? "\x3e" : ' style\x3d"display:none"\x3e')); for (var w = e.toolbox.toolbars, q = a(e), v = q.length, u = 0; u < v; u++) { var r, p = 0, z, B = q[u], t = "/" !== B && ("/" === q[u + 1] || u == v - 1), y; if (B) if (g && (k.push("\x3c/span\x3e"), m = g = 0), "/" === B) k.push('\x3cspan class\x3d"cke_toolbar_break"\x3e\x3c/span\x3e'); else { y = B.items || B; for (var D = 0; D < y.length; D++) { var x = y[D], A; if (x) { var C = function(a) { a = a.render(e, k); F = p.items.push(a) - 1; 0 < F && (a.previous = p.items[F - 1], a.previous.next = a); a.toolbar = p; a.onkey = l; a.onfocus = function() { e.toolbox.focusCommandExecuted || e.focus() } }; if (x.type == CKEDITOR.UI_SEPARATOR) m = g && x; else { A = !1 !== x.canGroup; if (!p) { r = CKEDITOR.tools.getNextId(); p = { id: r, items: [] }; z = B.name && (e.lang.toolbar.toolbarGroups[B.name] || B.name); k.push('\x3cspan id\x3d"', r, '" class\x3d"cke_toolbar' + (t ? ' cke_toolbar_last"' : '"'), z ? ' aria-labelledby\x3d"' + r + '_label"' : "", ' role\x3d"toolbar"\x3e'); z && k.push('\x3cspan id\x3d"', r, '_label" class\x3d"cke_voice_label"\x3e', z, "\x3c/span\x3e"); k.push('\x3cspan class\x3d"cke_toolbar_start"\x3e\x3c/span\x3e'); var F = w.push(p) - 1; 0 < F && (p.previous = w[F - 1], p.previous.next = p) } A ? g || (k.push('\x3cspan class\x3d"cke_toolgroup" role\x3d"presentation"\x3e'), g = 1) : g && (k.push("\x3c/span\x3e"), g = 0); m && (C(m), m = 0); C(x) } } } g && (k.push("\x3c/span\x3e"), m = g = 0); p && k.push('\x3cspan class\x3d"cke_toolbar_end"\x3e\x3c/span\x3e\x3c/span\x3e') } } e.config.toolbarCanCollapse && k.push("\x3c/span\x3e"); if (e.config.toolbarCanCollapse && e.elementMode != CKEDITOR.ELEMENT_MODE_INLINE) { var G = CKEDITOR.tools.addFunction(function() { e.execCommand("toolbarCollapse") }); e.on("destroy", function() { CKEDITOR.tools.removeFunction(G) }); e.addCommand("toolbarCollapse", { readOnly: 1, exec: function(a) { var b = a.ui.space("toolbar_collapser"), c = b.getPrevious(), d = a.ui.space("contents"), e = c.getParent(), f = parseInt(d.$.style.height, 10), g = e.$.offsetHeight, h = b.hasClass("cke_toolbox_collapser_min"); h ? (c.show(), b.removeClass("cke_toolbox_collapser_min"), b.setAttribute("title", a.lang.toolbar.toolbarCollapse)) : (c.hide(), b.addClass("cke_toolbox_collapser_min"), b.setAttribute("title", a.lang.toolbar.toolbarExpand)); b.getFirst().setText(h ? "▲" : "◀"); d.setStyle("height", f - (e.$.offsetHeight - g) + "px"); a.fire("resize", { outerHeight: a.container.$.offsetHeight, contentsHeight: d.$.offsetHeight, outerWidth: a.container.$.offsetWidth }) }, modes: { wysiwyg: 1, source: 1 } }); e.setKeystroke(CKEDITOR.ALT + (CKEDITOR.env.ie || CKEDITOR.env.webkit ? 189 : 109), "toolbarCollapse"); k.push('\x3ca title\x3d"' + (f ? e.lang.toolbar.toolbarCollapse : e.lang.toolbar.toolbarExpand) + '" id\x3d"' + e.ui.spaceId("toolbar_collapser") + '" tabIndex\x3d"-1" class\x3d"cke_toolbox_collapser'); f || k.push(" cke_toolbox_collapser_min"); k.push('" onclick\x3d"CKEDITOR.tools.callFunction(' + G + ')"\x3e', '\x3cspan class\x3d"cke_arrow"\x3e\x26#9650;\x3c/span\x3e', "\x3c/a\x3e") } k.push("\x3c/span\x3e"); c.data.html += k.join("") } }); e.on("destroy", function() { if (this.toolbox) { var a, b = 0, c, e, f; for (a = this.toolbox.toolbars; b < a.length; b++) for (e = a[b].items, c = 0; c < e.length; c++) f = e[c], f.clickFn && CKEDITOR.tools.removeFunction(f.clickFn), f.keyDownFn && CKEDITOR.tools.removeFunction(f.keyDownFn) } }); e.on("uiReady", function() { var a = e.ui.space("toolbox"); a && e.focusManager.add(a, 1) }); e.addCommand("toolbarFocus", c); e.setKeystroke(CKEDITOR.ALT + 121, "toolbarFocus"); e.ui.add("-", CKEDITOR.UI_SEPARATOR, {}); e.ui.addHandler(CKEDITOR.UI_SEPARATOR, { create: function() { return { render: function(a, b) { b.push('\x3cspan class\x3d"cke_toolbar_separator" role\x3d"separator"\x3e\x3c/span\x3e'); return {} } } } }) } }); CKEDITOR.ui.prototype.addToolbarGroup = function(a, b, c) { var d = f(this.editor), h = 0 === b, k = { name: a }; if (c) { if (c = CKEDITOR.tools.search(d, function(a) { return a.name == c })) { !c.groups && (c.groups = []); if (b && (b = CKEDITOR.tools.indexOf(c.groups, b), 0 <= b)) { c.groups.splice(b + 1, 0, a); return } h ? c.groups.splice(0, 0, a) : c.groups.push(a); return } b = null } b && (b = CKEDITOR.tools.indexOf(d, function(a) { return a.name == b })); h ? d.splice(0, 0, a) : "number" == typeof b ? d.splice(b + 1, 0, k) : d.push(a) } }(), CKEDITOR.UI_SEPARATOR = "separator", CKEDITOR.config.toolbarLocation = "top", "use strict", function() { var a = [CKEDITOR.CTRL + 90, CKEDITOR.CTRL + 89, CKEDITOR.CTRL + CKEDITOR.SHIFT + 90], f = { 8: 1, 46: 1 }; CKEDITOR.plugins.add("undo", { init: function(c) { function e(a) { g.enabled && !1 !== a.data.command.canUndo && g.save() } function f() { g.enabled = c.readOnly ? !1 : "wysiwyg" == c.mode; g.onChange() } var g = c.undoManager = new b(c), l = g.editingHandler = new m(g), w = c.addCommand("undo", { exec: function() { g.undo() && (c.selectionChange(), this.fire("afterUndo")) }, startDisabled: !0, canUndo: !1 }), q = c.addCommand("redo", { exec: function() { g.redo() && (c.selectionChange(), this.fire("afterRedo")) }, startDisabled: !0, canUndo: !1 }); c.setKeystroke([ [a[0], "undo"], [a[1], "redo"], [a[2], "redo"] ]); g.onChange = function() { w.setState(g.undoable() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED); q.setState(g.redoable() ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED) }; c.on("beforeCommandExec", e); c.on("afterCommandExec", e); c.on("saveSnapshot", function(a) { g.save(a.data && a.data.contentOnly) }); c.on("contentDom", l.attachListeners, l); c.on("instanceReady", function() { c.fire("saveSnapshot") }); c.on("beforeModeUnload", function() { "wysiwyg" == c.mode && g.save(!0) }); c.on("mode", f); c.on("readOnly", f); c.ui.addButton && (c.ui.addButton("Undo", { label: c.lang.undo.undo, command: "undo", toolbar: "undo,10" }), c.ui.addButton("Redo", { label: c.lang.undo.redo, command: "redo", toolbar: "undo,20" })); c.resetUndo = function() { g.reset(); c.fire("saveSnapshot") }; c.on("updateSnapshot", function() { g.currentImage && g.update() }); c.on("lockSnapshot", function(a) { a = a.data; g.lock(a && a.dontUpdate, a && a.forceUpdate) }); c.on("unlockSnapshot", g.unlock, g) } }); CKEDITOR.plugins.undo = {}; var b = CKEDITOR.plugins.undo.UndoManager = function(a) { this.strokesRecorded = [0, 0]; this.locked = null; this.previousKeyGroup = -1; this.limit = a.config.undoStackSize || 20; this.strokesLimit = 25; this.editor = a; this.reset() }; b.prototype = { type: function(a, c) { var e = b.getKeyGroup(a), f = this.strokesRecorded[e] + 1; c = c || f >= this.strokesLimit; this.typing || (this.hasUndo = this.typing = !0, this.hasRedo = !1, this.onChange()); c ? (f = 0, this.editor.fire("saveSnapshot")) : this.editor.fire("change"); this.strokesRecorded[e] = f; this.previousKeyGroup = e }, keyGroupChanged: function(a) { return b.getKeyGroup(a) != this.previousKeyGroup }, reset: function() { this.snapshots = []; this.index = -1; this.currentImage = null; this.hasRedo = this.hasUndo = !1; this.locked = null; this.resetType() }, resetType: function() { this.strokesRecorded = [0, 0]; this.typing = !1; this.previousKeyGroup = -1 }, refreshState: function() { this.hasUndo = !!this.getNextImage(!0); this.hasRedo = !!this.getNextImage(!1); this.resetType(); this.onChange() }, save: function(a, b, e) { var f = this.editor; if (this.locked || "ready" != f.status || "wysiwyg" != f.mode) return !1; var l = f.editable(); if (!l || "ready" != l.status) return !1; l = this.snapshots; b || (b = new c(f)); if (!1 === b.contents) return !1; if (this.currentImage) if (b.equalsContent(this.currentImage)) { if (a || b.equalsSelection(this.currentImage)) return !1 } else !1 !== e && f.fire("change"); l.splice(this.index + 1, l.length - this.index - 1); l.length == this.limit && l.shift(); this.index = l.push(b) - 1; this.currentImage = b; !1 !== e && this.refreshState(); return !0 }, restoreImage: function(a) { var b = this.editor, c; a.bookmarks && (b.focus(), c = b.getSelection()); this.locked = { level: 999 }; this.editor.loadSnapshot(a.contents); a.bookmarks ? c.selectBookmarks(a.bookmarks) : CKEDITOR.env.ie && (c = this.editor.document.getBody().$.createTextRange(), c.collapse(!0), c.select()); this.locked = null; this.index = a.index; this.currentImage = this.snapshots[this.index]; this.update(); this.refreshState(); b.fire("change") }, getNextImage: function(a) { var b = this.snapshots, c = this.currentImage, e; if (c) if (a) for (e = this.index - 1; 0 <= e; e--) { if (a = b[e], !c.equalsContent(a)) return a.index = e, a } else for (e = this.index + 1; e < b.length; e++) if (a = b[e], !c.equalsContent(a)) return a.index = e, a; return null }, redoable: function() { return this.enabled && this.hasRedo }, undoable: function() { return this.enabled && this.hasUndo }, undo: function() { if (this.undoable()) { this.save(!0); var a = this.getNextImage(!0); if (a) return this.restoreImage(a), !0 } return !1 }, redo: function() { if (this.redoable() && (this.save(!0), this.redoable())) { var a = this.getNextImage(!1); if (a) return this.restoreImage(a), !0 } return !1 }, update: function(a) { if (!this.locked) { a || (a = new c(this.editor)); for (var b = this.index, e = this.snapshots; 0 < b && this.currentImage.equalsContent(e[b - 1]);) --b; e.splice(b, this.index - b + 1, a); this.index = b; this.currentImage = a } }, updateSelection: function(a) { if (!this.snapshots.length) return !1; var b = this.snapshots, c = b[b.length - 1]; return c.equalsContent(a) && !c.equalsSelection(a) ? (this.currentImage = b[b.length - 1] = a, !0) : !1 }, lock: function(a, b) { if (this.locked) this.locked.level++; else if (a) this.locked = { level: 1 }; else { var e = null; if (b) e = !0; else { var f = new c(this.editor, !0); this.currentImage && this.currentImage.equalsContent(f) && (e = f) } this.locked = { update: e, level: 1 } } }, unlock: function() { if (this.locked && !--this.locked.level) { var a = this.locked.update; this.locked = null; if (!0 === a) this.update(); else if (a) { var b = new c(this.editor, !0); a.equalsContent(b) || this.update() } } } }; b.navigationKeyCodes = { 37: 1, 38: 1, 39: 1, 40: 1, 36: 1, 35: 1, 33: 1, 34: 1 }; b.keyGroups = { PRINTABLE: 0, FUNCTIONAL: 1 }; b.isNavigationKey = function(a) { return !!b.navigationKeyCodes[a] }; b.getKeyGroup = function(a) { var c = b.keyGroups; return f[a] ? c.FUNCTIONAL : c.PRINTABLE }; b.getOppositeKeyGroup = function(a) { var c = b.keyGroups; return a == c.FUNCTIONAL ? c.PRINTABLE : c.FUNCTIONAL }; b.ieFunctionalKeysBug = function(a) { return CKEDITOR.env.ie && b.getKeyGroup(a) == b.keyGroups.FUNCTIONAL }; var c = CKEDITOR.plugins.undo.Image = function(a, b) { this.editor = a; a.fire("beforeUndoImage"); var c = a.getSnapshot(); CKEDITOR.env.ie && c && (c = c.replace(/\s+data-cke-expando=".*?"/g, "")); this.contents = c; b || (this.bookmarks = (c = c && a.getSelection()) && c.createBookmarks2(!0)); a.fire("afterUndoImage") }, e = /\b(?:href|src|name)="[^"]*?"/gi; c.prototype = { equalsContent: function(a) { var b = this.contents; a = a.contents; CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks) && (b = b.replace(e, ""), a = a.replace(e, "")); return b != a ? !1 : !0 }, equalsSelection: function(a) { var b = this.bookmarks; a = a.bookmarks; if (b || a) { if (!b || !a || b.length != a.length) return !1; for (var c = 0; c < b.length; c++) { var e = b[c], f = a[c]; if (e.startOffset != f.startOffset || e.endOffset != f.endOffset || !CKEDITOR.tools.arrayCompare(e.start, f.start) || !CKEDITOR.tools.arrayCompare(e.end, f.end)) return !1 } } return !0 } }; var m = CKEDITOR.plugins.undo.NativeEditingHandler = function(a) { this.undoManager = a; this.ignoreInputEvent = !1; this.keyEventsStack = new l; this.lastKeydownImage = null }; m.prototype = { onKeydown: function(d) { var e = d.data.getKey(); if (229 !== e) if (-1 < CKEDITOR.tools.indexOf(a, d.data.getKeystroke())) d.data.preventDefault(); else if (this.keyEventsStack.cleanUp(d), d = this.undoManager, this.keyEventsStack.getLast(e) || this.keyEventsStack.push(e), this.lastKeydownImage = new c(d.editor), b.isNavigationKey(e) || this.undoManager.keyGroupChanged(e)) if (d.strokesRecorded[0] || d.strokesRecorded[1]) d.save(!1, this.lastKeydownImage, !1), d.resetType() }, onInput: function() { if (this.ignoreInputEvent) this.ignoreInputEvent = !1; else { var a = this.keyEventsStack.getLast(); a || (a = this.keyEventsStack.push(0)); this.keyEventsStack.increment(a.keyCode); this.keyEventsStack.getTotalInputs() >= this.undoManager.strokesLimit && (this.undoManager.type(a.keyCode, !0), this.keyEventsStack.resetInputs()) } }, onKeyup: function(a) { var e = this.undoManager; a = a.data.getKey(); var f = this.keyEventsStack.getTotalInputs(); this.keyEventsStack.remove(a); if (!(b.ieFunctionalKeysBug(a) && this.lastKeydownImage && this.lastKeydownImage.equalsContent(new c(e.editor, !0)))) if (0 < f) e.type(a); else if (b.isNavigationKey(a)) this.onNavigationKey(!0) }, onNavigationKey: function(a) { var b = this.undoManager; !a && b.save(!0, null, !1) || b.updateSelection(new c(b.editor)); b.resetType() }, ignoreInputEventListener: function() { this.ignoreInputEvent = !0 }, attachListeners: function() { var a = this.undoManager.editor, c = a.editable(), e = this; c.attachListener(c, "keydown", function(a) { e.onKeydown(a); if (b.ieFunctionalKeysBug(a.data.getKey())) e.onInput() }, null, null, 999); c.attachListener(c, CKEDITOR.env.ie ? "keypress" : "input", e.onInput, e, null, 999); c.attachListener(c, "keyup", e.onKeyup, e, null, 999); c.attachListener(c, "paste", e.ignoreInputEventListener, e, null, 999); c.attachListener(c, "drop", e.ignoreInputEventListener, e, null, 999); c.attachListener(c.isInline() ? c : a.document.getDocumentElement(), "click", function() { e.onNavigationKey() }, null, null, 999); c.attachListener(this.undoManager.editor, "blur", function() { e.keyEventsStack.remove(9) }, null, null, 999) } }; var l = CKEDITOR.plugins.undo.KeyEventsStack = function() { this.stack = [] }; l.prototype = { push: function(a) { a = this.stack.push({ keyCode: a, inputs: 0 }); return this.stack[a - 1] }, getLastIndex: function(a) { if ("number" != typeof a) return this.stack.length - 1; for (var b = this.stack.length; b--;) if (this.stack[b].keyCode == a) return b; return -1 }, getLast: function(a) { a = this.getLastIndex(a); return -1 != a ? this.stack[a] : null }, increment: function(a) { this.getLast(a).inputs++ }, remove: function(a) { a = this.getLastIndex(a); - 1 != a && this.stack.splice(a, 1) }, resetInputs: function(a) { if ("number" == typeof a) this.getLast(a).inputs = 0; else for (a = this.stack.length; a--;) this.stack[a].inputs = 0 }, getTotalInputs: function() { for (var a = this.stack.length, b = 0; a--;) b += this.stack[a].inputs; return b }, cleanUp: function(a) { a = a.data.$; a.ctrlKey || a.metaKey || this.remove(17); a.shiftKey || this.remove(16); a.altKey || this.remove(18) } } }(), CKEDITOR.plugins.add("wsc", { requires: "dialog", parseApi: function(a) { a.config.wsc_onFinish = "function" === typeof a.config.wsc_onFinish ? a.config.wsc_onFinish : function() {}; a.config.wsc_onClose = "function" === typeof a.config.wsc_onClose ? a.config.wsc_onClose : function() {} }, parseConfig: function(a) { a.config.wsc_customerId = a.config.wsc_customerId || CKEDITOR.config.wsc_customerId || "1:ua3xw1-2XyGJ3-GWruD3-6OFNT1-oXcuB1-nR6Bp4-hgQHc-EcYng3-sdRXG3-NOfFk"; a.config.wsc_customDictionaryIds = a.config.wsc_customDictionaryIds || CKEDITOR.config.wsc_customDictionaryIds || ""; a.config.wsc_userDictionaryName = a.config.wsc_userDictionaryName || CKEDITOR.config.wsc_userDictionaryName || ""; a.config.wsc_customLoaderScript = a.config.wsc_customLoaderScript || CKEDITOR.config.wsc_customLoaderScript; a.config.wsc_interfaceLang = a.config.wsc_interfaceLang; CKEDITOR.config.wsc_cmd = a.config.wsc_cmd || CKEDITOR.config.wsc_cmd || "spell"; CKEDITOR.config.wsc_version = "v4.3.0-master-d769233"; CKEDITOR.config.wsc_removeGlobalVariable = !0 }, onLoad: function(a) { "moono-lisa" == (CKEDITOR.skinName || a.config.skin) && CKEDITOR.document.appendStyleSheet(this.path + "skins/" + CKEDITOR.skin.name + "/wsc.css") }, init: function(a) { var f = CKEDITOR.env; this.parseConfig(a); this.parseApi(a); a.addCommand("checkspell", new CKEDITOR.dialogCommand("checkspell")).modes = { wysiwyg: !CKEDITOR.env.opera && !CKEDITOR.env.air && document.domain == window.location.hostname && !(f.ie && (8 > f.version || f.quirks)) }; "undefined" == typeof a.plugins.scayt && a.ui.addButton && a.ui.addButton("SpellChecker", { label: a.lang.wsc.toolbar, click: function(a) { var c = a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? a.container.getText() : a.document.getBody().getText(); (c = c.replace(/\s/g, "")) ? a.execCommand("checkspell"): alert("Nothing to check!") }, toolbar: "spellchecker,10" }); CKEDITOR.dialog.add("checkspell", this.path + (CKEDITOR.env.ie && 7 >= CKEDITOR.env.version ? "dialogs/wsc_ie.js" : window.postMessage ? "dialogs/wsc.js" : "dialogs/wsc_ie.js")) } }), function() { function a(a) { function b(a) { var c = !1; g.attachListener(g, "keydown", function() { var b = d.getBody().getElementsByTag(a); if (!c) { for (var e = 0; e < b.count(); e++) b.getItem(e).setCustomData("retain", !0); c = !0 } }, null, null, 1); g.attachListener(g, "keyup", function() { var b = d.getElementsByTag(a); c && (1 != b.count() || b.getItem(0).getCustomData("retain") || b.getItem(0).hasAttribute("data-cke-temp") || b.getItem(0).remove(1), c = !1) }) } var c = this.editor, d = a.document, h = d.body, k = d.getElementById("cke_actscrpt"); k && k.parentNode.removeChild(k); (k = d.getElementById("cke_shimscrpt")) && k.parentNode.removeChild(k); (k = d.getElementById("cke_basetagscrpt")) && k.parentNode.removeChild(k); h.contentEditable = !0; CKEDITOR.env.ie && (h.hideFocus = !0, h.disabled = !0, h.removeAttribute("disabled")); delete this._.isLoadingData; this.$ = h; d = new CKEDITOR.dom.document(d); this.setup(); this.fixInitialSelection(); var g = this; CKEDITOR.env.ie && !CKEDITOR.env.edge && d.getDocumentElement().addClass(d.$.compatMode); CKEDITOR.env.ie && !CKEDITOR.env.edge && c.enterMode != CKEDITOR.ENTER_P ? b("p") : CKEDITOR.env.edge && c.enterMode != CKEDITOR.ENTER_DIV && b("div"); if (CKEDITOR.env.webkit || CKEDITOR.env.ie && 10 < CKEDITOR.env.version) d.getDocumentElement().on("mousedown", function(a) { a.data.getTarget().is("html") && setTimeout(function() { c.editable().focus() }) }); f(c); try { c.document.$.execCommand("2D-position", !1, !0) } catch (n) {}(CKEDITOR.env.gecko || CKEDITOR.env.ie && "CSS1Compat" == c.document.$.compatMode) && this.attachListener(this, "keydown", function(a) { var b = a.data.getKeystroke(); if (33 == b || 34 == b) if (CKEDITOR.env.ie) setTimeout(function() { c.getSelection().scrollIntoView() }, 0); else if (c.window.$.innerHeight > this.$.offsetHeight) { var d = c.createRange(); d[33 == b ? "moveToElementEditStart" : "moveToElementEditEnd"](this); d.select(); a.data.preventDefault() } }); CKEDITOR.env.ie && this.attachListener(d, "blur", function() { try { d.$.selection.empty() } catch (a) {} }); CKEDITOR.env.iOS && this.attachListener(d, "touchend", function() { a.focus() }); h = c.document.getElementsByTag("title").getItem(0); h.data("cke-title", h.getText()); CKEDITOR.env.ie && (c.document.$.title = this._.docTitle); CKEDITOR.tools.setTimeout(function() { "unloaded" == this.status && (this.status = "ready"); c.fire("contentDom"); this._.isPendingFocus && (c.focus(), this._.isPendingFocus = !1); setTimeout(function() { c.fire("dataReady") }, 0) }, 0, this) } function f(a) { function b() { var d; a.editable().attachListener(a, "selectionChange", function() { var b = a.getSelection().getSelectedElement(); b && (d && (d.detachEvent("onresizestart", c), d = null), b.$.attachEvent("onresizestart", c), d = b.$) }) } function c(a) { a.returnValue = !1 } if (CKEDITOR.env.gecko) try { var d = a.document.$; d.execCommand("enableObjectResizing", !1, !a.config.disableObjectResizing); d.execCommand("enableInlineTableEditing", !1, !a.config.disableNativeTableHandles) } catch (f) {} else CKEDITOR.env.ie && 11 > CKEDITOR.env.version && a.config.disableObjectResizing && b(a) } function b() { var a = []; if (8 <= CKEDITOR.document.$.documentMode) { a.push("html.CSS1Compat [contenteditable\x3dfalse]{min-height:0 !important}"); var b = [], c; for (c in CKEDITOR.dtd.$removeEmpty) b.push("html.CSS1Compat " + c + "[contenteditable\x3dfalse]"); a.push(b.join(",") + "{display:inline-block}") } else CKEDITOR.env.gecko && (a.push("html{height:100% !important}"), a.push("img:-moz-broken{-moz-force-broken-image-icon:1;min-width:24px;min-height:24px}")); a.push("html{cursor:text;*cursor:auto}"); a.push("img,input,textarea{cursor:default}"); return a.join("\n") } var c; CKEDITOR.plugins.add("wysiwygarea", { init: function(a) { a.config.fullPage && a.addFeature({ allowedContent: "html head title; style [media,type]; body (*)[id]; meta link [*]", requiredContent: "body" }); a.addMode("wysiwyg", function(b) { function f(d) { d && d.removeListener(); a.editable(new c(a, h.$.contentWindow.document.body)); a.setData(a.getData(1), b) } var d = "document.open();" + (CKEDITOR.env.ie ? "(" + CKEDITOR.tools.fixDomain + ")();" : "") + "document.close();", d = CKEDITOR.env.air ? "javascript:void(0)" : CKEDITOR.env.ie && !CKEDITOR.env.edge ? "javascript:void(function(){" + encodeURIComponent(d) + "}())" : "", h = CKEDITOR.dom.element.createFromHtml('\x3ciframe src\x3d"' + d + '" frameBorder\x3d"0"\x3e\x3c/iframe\x3e'); h.setStyles({ width: "100%", height: "100%" }); h.addClass("cke_wysiwyg_frame").addClass("cke_reset"); d = a.ui.space("contents"); d.append(h); var k = CKEDITOR.env.ie && !CKEDITOR.env.edge || CKEDITOR.env.gecko; if (k) h.on("load", f); var g = a.title, n = a.fire("ariaEditorHelpLabel", {}).label; g && (CKEDITOR.env.ie && n && (g += ", " + n), h.setAttribute("title", g)); if (n) { var g = CKEDITOR.tools.getNextId(), w = CKEDITOR.dom.element.createFromHtml('\x3cspan id\x3d"' + g + '" class\x3d"cke_voice_label"\x3e' + n + "\x3c/span\x3e"); d.append(w, 1); h.setAttribute("aria-describedby", g) } a.on("beforeModeUnload", function(a) { a.removeListener(); w && w.remove() }); h.setAttributes({ tabIndex: a.tabIndex, allowTransparency: "true" }); !k && f(); a.fire("ariaWidget", h) }) } }); CKEDITOR.editor.prototype.addContentsCss = function(a) { var b = this.config, c = b.contentsCss; CKEDITOR.tools.isArray(c) || (b.contentsCss = c ? [c] : []); b.contentsCss.push(a) }; c = CKEDITOR.tools.createClass({ $: function() { this.base.apply(this, arguments); this._.frameLoadedHandler = CKEDITOR.tools.addFunction(function(b) { CKEDITOR.tools.setTimeout(a, 0, this, b) }, this); this._.docTitle = this.getWindow().getFrame().getAttribute("title") }, base: CKEDITOR.editable, proto: { setData: function(a, c) { var f = this.editor; if (c) this.setHtml(a), this.fixInitialSelection(), f.fire("dataReady"); else { this._.isLoadingData = !0; f._.dataStore = { id: 1 }; var d = f.config, h = d.fullPage, k = d.docType, g = CKEDITOR.tools.buildStyleHtml(b()).replace(/