1/* 2Copyright (c) 2003-2018, CKSource - Frederico Knabben. All rights reserved. 3For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license 4*/ 5(function() { 6 if (window.CKEDITOR && window.CKEDITOR.dom) return; 7 window.CKEDITOR || (window.CKEDITOR = function() { 8 var a = /(^|.*[\\\/])ckeditor\.js(?:\?.*|;.*)?$/i, 9 d = { 10 timestamp: "I8BG", 11 version: "4.10.1", 12 revision: "59246e9", 13 rnd: Math.floor(900 * Math.random()) + 100, 14 _: { 15 pending: [], 16 basePathSrcPattern: a 17 }, 18 status: "unloaded", 19 basePath: function() { 20 var b = window.CKEDITOR_BASEPATH || ""; 21 if (!b) 22 for (var c = document.getElementsByTagName("script"), d = 0; d < c.length; d++) { 23 var g = c[d].src.match(a); 24 if (g) { 25 b = g[1]; 26 break 27 } 28 } - 1 == b.indexOf(":/") && "//" != b.slice(0, 2) && (b = 0 === b.indexOf("/") ? location.href.match(/^.*?:\/\/[^\/]*/)[0] + 29 b : location.href.match(/^[^\?]*\/(?:)/)[0] + b); 30 if (!b) throw 'The CKEditor installation path could not be automatically detected. Please set the global variable "CKEDITOR_BASEPATH" before creating editor instances.'; 31 return b 32 }(), 33 getUrl: function(a) { 34 -1 == a.indexOf(":/") && 0 !== a.indexOf("/") && (a = this.basePath + a); 35 this.timestamp && "/" != a.charAt(a.length - 1) && !/[&?]t=/.test(a) && (a += (0 <= a.indexOf("?") ? "\x26" : "?") + "t\x3d" + this.timestamp); 36 return a 37 }, 38 domReady: function() { 39 function a() { 40 try { 41 document.addEventListener ? (document.removeEventListener("DOMContentLoaded", 42 a, !1), b()) : document.attachEvent && "complete" === document.readyState && (document.detachEvent("onreadystatechange", a), b()) 43 } catch (c) {} 44 } 45 46 function b() { 47 for (var a; a = c.shift();) a() 48 } 49 var c = []; 50 return function(b) { 51 function n() { 52 try { 53 document.documentElement.doScroll("left") 54 } catch (e) { 55 setTimeout(n, 1); 56 return 57 } 58 a() 59 } 60 c.push(b); 61 "complete" === document.readyState && setTimeout(a, 1); 62 if (1 == c.length) 63 if (document.addEventListener) document.addEventListener("DOMContentLoaded", a, !1), window.addEventListener("load", a, !1); 64 else if (document.attachEvent) { 65 document.attachEvent("onreadystatechange", 66 a); 67 window.attachEvent("onload", a); 68 b = !1; 69 try { 70 b = !window.frameElement 71 } catch (r) {} 72 document.documentElement.doScroll && b && n() 73 } 74 } 75 }() 76 }, 77 b = window.CKEDITOR_GETURL; 78 if (b) { 79 var c = d.getUrl; 80 d.getUrl = function(a) { 81 return b.call(d, a) || c.call(d, a) 82 } 83 } 84 return d 85 }()); 86 CKEDITOR.event || (CKEDITOR.event = function() {}, CKEDITOR.event.implementOn = function(a) { 87 var d = CKEDITOR.event.prototype, 88 b; 89 for (b in d) null == a[b] && (a[b] = d[b]) 90 }, CKEDITOR.event.prototype = function() { 91 function a(a) { 92 var f = d(this); 93 return f[a] || (f[a] = new b(a)) 94 } 95 var d = function(a) { 96 a = a.getPrivate && a.getPrivate() || a._ || (a._ = {}); 97 return a.events || (a.events = {}) 98 }, 99 b = function(a) { 100 this.name = a; 101 this.listeners = [] 102 }; 103 b.prototype = { 104 getListenerIndex: function(a) { 105 for (var b = 0, d = this.listeners; b < d.length; b++) 106 if (d[b].fn == a) return b; 107 return -1 108 } 109 }; 110 return { 111 define: function(b, d) { 112 var h = a.call(this, b); 113 CKEDITOR.tools.extend(h, d, !0) 114 }, 115 on: function(b, d, h, k, g) { 116 function n(e, a, y, v) { 117 e = { 118 name: b, 119 sender: this, 120 editor: e, 121 data: a, 122 listenerData: k, 123 stop: y, 124 cancel: v, 125 removeListener: r 126 }; 127 return !1 === d.call(h, e) ? !1 : e.data 128 } 129 130 function r() { 131 y.removeListener(b, d) 132 } 133 var e = a.call(this, b); 134 if (0 > e.getListenerIndex(d)) { 135 e = e.listeners; 136 h || (h = this); 137 isNaN(g) && (g = 10); 138 var y = this; 139 n.fn = d; 140 n.priority = g; 141 for (var v = e.length - 1; 0 <= v; v--) 142 if (e[v].priority <= g) return e.splice(v + 1, 0, n), { 143 removeListener: r 144 }; 145 e.unshift(n) 146 } 147 return { 148 removeListener: r 149 } 150 }, 151 once: function() { 152 var a = Array.prototype.slice.call(arguments), 153 b = a[1]; 154 a[1] = function(a) { 155 a.removeListener(); 156 return b.apply(this, arguments) 157 }; 158 return this.on.apply(this, a) 159 }, 160 capture: function() { 161 CKEDITOR.event.useCapture = 1; 162 var a = this.on.apply(this, arguments); 163 CKEDITOR.event.useCapture = 0; 164 return a 165 }, 166 fire: function() { 167 var a = 0, 168 b = function() { 169 a = 1 170 }, 171 h = 0, 172 k = function() { 173 h = 1 174 }; 175 return function(g, n, r) { 176 var e = d(this)[g]; 177 g = a; 178 var y = h; 179 a = h = 0; 180 if (e) { 181 var v = e.listeners; 182 if (v.length) 183 for (var v = v.slice(0), B, D = 0; D < v.length; D++) { 184 if (e.errorProof) try { 185 B = 186 v[D].call(this, r, n, b, k) 187 } catch (x) {} else B = v[D].call(this, r, n, b, k); 188 !1 === B ? h = 1 : "undefined" != typeof B && (n = B); 189 if (a || h) break 190 } 191 } 192 n = h ? !1 : "undefined" == typeof n ? !0 : n; 193 a = g; 194 h = y; 195 return n 196 } 197 }(), 198 fireOnce: function(a, b, h) { 199 b = this.fire(a, b, h); 200 delete d(this)[a]; 201 return b 202 }, 203 removeListener: function(a, b) { 204 var h = d(this)[a]; 205 if (h) { 206 var k = h.getListenerIndex(b); 207 0 <= k && h.listeners.splice(k, 1) 208 } 209 }, 210 removeAllListeners: function() { 211 var a = d(this), 212 b; 213 for (b in a) delete a[b] 214 }, 215 hasListeners: function(a) { 216 return (a = d(this)[a]) && 0 < a.listeners.length 217 } 218 } 219 }()); 220 CKEDITOR.editor || (CKEDITOR.editor = function() { 221 CKEDITOR._.pending.push([this, arguments]); 222 CKEDITOR.event.call(this) 223 }, CKEDITOR.editor.prototype.fire = function(a, d) { 224 a in { 225 instanceReady: 1, 226 loaded: 1 227 } && (this[a] = !0); 228 return CKEDITOR.event.prototype.fire.call(this, a, d, this) 229 }, CKEDITOR.editor.prototype.fireOnce = function(a, d) { 230 a in { 231 instanceReady: 1, 232 loaded: 1 233 } && (this[a] = !0); 234 return CKEDITOR.event.prototype.fireOnce.call(this, a, d, this) 235 }, CKEDITOR.event.implementOn(CKEDITOR.editor.prototype)); 236 CKEDITOR.env || (CKEDITOR.env = function() { 237 var a = navigator.userAgent.toLowerCase(), 238 d = a.match(/edge[ \/](\d+.?\d*)/), 239 b = -1 < a.indexOf("trident/"), 240 b = !(!d && !b), 241 b = { 242 ie: b, 243 edge: !!d, 244 webkit: !b && -1 < a.indexOf(" applewebkit/"), 245 air: -1 < a.indexOf(" adobeair/"), 246 mac: -1 < a.indexOf("macintosh"), 247 quirks: "BackCompat" == document.compatMode && (!document.documentMode || 10 > document.documentMode), 248 mobile: -1 < a.indexOf("mobile"), 249 iOS: /(ipad|iphone|ipod)/.test(a), 250 isCustomDomain: function() { 251 if (!this.ie) return !1; 252 var a = document.domain, 253 b = window.location.hostname; 254 return a != b && a != "[" + b + "]" 255 }, 256 secure: "https:" == location.protocol 257 }; 258 b.gecko = "Gecko" == navigator.product && !b.webkit && !b.ie; 259 b.webkit && (-1 < a.indexOf("chrome") ? b.chrome = !0 : b.safari = !0); 260 var c = 0; 261 b.ie && (c = d ? parseFloat(d[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); 262 b.gecko && (d = a.match(/rv:([\d\.]+)/)) && (d = d[1].split("."), c = 1E4 * d[0] + 100 * (d[1] || 0) + 1 * (d[2] || 0)); 263 b.air && (c = parseFloat(a.match(/ adobeair\/(\d+)/)[1])); 264 b.webkit && (c = parseFloat(a.match(/ applewebkit\/(\d+)/)[1])); 265 b.version = c; 266 b.isCompatible = !(b.ie && 7 > c) && !(b.gecko && 4E4 > c) && !(b.webkit && 534 > c); 267 b.hidpi = 2 <= window.devicePixelRatio; 268 b.needsBrFiller = b.gecko || b.webkit || b.ie && 10 < c; 269 b.needsNbspFiller = b.ie && 11 > c; 270 b.cssClass = "cke_browser_" + (b.ie ? "ie" : b.gecko ? "gecko" : b.webkit ? "webkit" : "unknown"); 271 b.quirks && (b.cssClass += " cke_browser_quirks"); 272 b.ie && (b.cssClass += " cke_browser_ie" + (b.quirks ? "6 cke_browser_iequirks" : b.version)); 273 b.air && (b.cssClass += " cke_browser_air"); 274 b.iOS && (b.cssClass += " cke_browser_ios"); 275 b.hidpi && (b.cssClass += " cke_hidpi"); 276 return b 277 }()); 278 "unloaded" == CKEDITOR.status && function() { 279 CKEDITOR.event.implementOn(CKEDITOR); 280 CKEDITOR.loadFullCore = function() { 281 if ("basic_ready" != CKEDITOR.status) CKEDITOR.loadFullCore._load = 1; 282 else { 283 delete CKEDITOR.loadFullCore; 284 var a = document.createElement("script"); 285 a.type = "text/javascript"; 286 a.src = CKEDITOR.basePath + "ckeditor.js"; 287 document.getElementsByTagName("head")[0].appendChild(a) 288 } 289 }; 290 CKEDITOR.loadFullCoreTimeout = 0; 291 CKEDITOR.add = function(a) { 292 (this._.pending || (this._.pending = [])).push(a) 293 }; 294 (function() { 295 CKEDITOR.domReady(function() { 296 var a = 297 CKEDITOR.loadFullCore, 298 d = CKEDITOR.loadFullCoreTimeout; 299 a && (CKEDITOR.status = "basic_ready", a && a._load ? a() : d && setTimeout(function() { 300 CKEDITOR.loadFullCore && CKEDITOR.loadFullCore() 301 }, 1E3 * d)) 302 }) 303 })(); 304 CKEDITOR.status = "basic_loaded" 305 }(); 306 "use strict"; 307 CKEDITOR.VERBOSITY_WARN = 1; 308 CKEDITOR.VERBOSITY_ERROR = 2; 309 CKEDITOR.verbosity = CKEDITOR.VERBOSITY_WARN | CKEDITOR.VERBOSITY_ERROR; 310 CKEDITOR.warn = function(a, d) { 311 CKEDITOR.verbosity & CKEDITOR.VERBOSITY_WARN && CKEDITOR.fire("log", { 312 type: "warn", 313 errorCode: a, 314 additionalData: d 315 }) 316 }; 317 CKEDITOR.error = function(a, d) { 318 CKEDITOR.verbosity & CKEDITOR.VERBOSITY_ERROR && CKEDITOR.fire("log", { 319 type: "error", 320 errorCode: a, 321 additionalData: d 322 }) 323 }; 324 CKEDITOR.on("log", function(a) { 325 if (window.console && window.console.log) { 326 var d = console[a.data.type] ? a.data.type : "log", 327 b = a.data.errorCode; 328 if (a = a.data.additionalData) console[d]("[CKEDITOR] Error code: " + b + ".", a); 329 else console[d]("[CKEDITOR] Error code: " + b + "."); 330 console[d]("[CKEDITOR] For more information about this error go to https://ckeditor.com/docs/ckeditor4/latest/guide/dev_errors.html#" + b) 331 } 332 }, null, null, 999); 333 CKEDITOR.dom = {}; 334 (function() { 335 var a = [], 336 d = CKEDITOR.env.gecko ? "-moz-" : CKEDITOR.env.webkit ? "-webkit-" : CKEDITOR.env.ie ? "-ms-" : "", 337 b = /&/g, 338 c = />/g, 339 f = /</g, 340 h = /"/g, 341 k = /&(lt|gt|amp|quot|nbsp|shy|#\d{1,5});/g, 342 g = { 343 lt: "\x3c", 344 gt: "\x3e", 345 amp: "\x26", 346 quot: '"', 347 nbsp: " ", 348 shy: "" 349 }, 350 n = function(a, e) { 351 return "#" == e[0] ? String.fromCharCode(parseInt(e.slice(1), 10)) : g[e] 352 }; 353 CKEDITOR.on("reset", function() { 354 a = [] 355 }); 356 CKEDITOR.tools = { 357 arrayCompare: function(a, e) { 358 if (!a && !e) return !0; 359 if (!a || !e || a.length != e.length) return !1; 360 for (var b = 0; b < a.length; b++) 361 if (a[b] != e[b]) return !1; 362 return !0 363 }, 364 getIndex: function(a, e) { 365 for (var b = 0; b < a.length; ++b) 366 if (e(a[b])) return b; 367 return -1 368 }, 369 clone: function(a) { 370 var e; 371 if (a && a instanceof Array) { 372 e = []; 373 for (var b = 0; b < a.length; b++) e[b] = CKEDITOR.tools.clone(a[b]); 374 return e 375 } 376 if (null === a || "object" != typeof a || a instanceof String || a instanceof Number || a instanceof Boolean || a instanceof Date || a instanceof RegExp || a.nodeType || a.window === a) return a; 377 e = new a.constructor; 378 for (b in a) e[b] = CKEDITOR.tools.clone(a[b]); 379 return e 380 }, 381 capitalize: function(a, e) { 382 return a.charAt(0).toUpperCase() + 383 (e ? a.slice(1) : a.slice(1).toLowerCase()) 384 }, 385 extend: function(a) { 386 var e = arguments.length, 387 b, v; 388 "boolean" == typeof(b = arguments[e - 1]) ? e-- : "boolean" == typeof(b = arguments[e - 2]) && (v = arguments[e - 1], e -= 2); 389 for (var c = 1; c < e; c++) { 390 var g = arguments[c], 391 d; 392 for (d in g) 393 if (!0 === b || null == a[d]) 394 if (!v || d in v) a[d] = g[d] 395 } 396 return a 397 }, 398 prototypedCopy: function(a) { 399 var e = function() {}; 400 e.prototype = a; 401 return new e 402 }, 403 copy: function(a) { 404 var e = {}, 405 b; 406 for (b in a) e[b] = a[b]; 407 return e 408 }, 409 isArray: function(a) { 410 return "[object Array]" == Object.prototype.toString.call(a) 411 }, 412 isEmpty: function(a) { 413 for (var e in a) 414 if (a.hasOwnProperty(e)) return !1; 415 return !0 416 }, 417 cssVendorPrefix: function(a, e, b) { 418 if (b) return d + a + ":" + e + ";" + a + ":" + e; 419 b = {}; 420 b[a] = e; 421 b[d + a] = e; 422 return b 423 }, 424 cssStyleToDomStyle: function() { 425 var a = document.createElement("div").style, 426 e = "undefined" != typeof a.cssFloat ? "cssFloat" : "undefined" != typeof a.styleFloat ? "styleFloat" : "float"; 427 return function(a) { 428 return "float" == a ? e : a.replace(/-./g, function(a) { 429 return a.substr(1).toUpperCase() 430 }) 431 } 432 }(), 433 buildStyleHtml: function(a) { 434 a = [].concat(a); 435 for (var e, 436 b = [], v = 0; v < a.length; v++) 437 if (e = a[v]) /@import|[{}]/.test(e) ? b.push("\x3cstyle\x3e" + e + "\x3c/style\x3e") : b.push('\x3clink type\x3d"text/css" rel\x3dstylesheet href\x3d"' + e + '"\x3e'); 438 return b.join("") 439 }, 440 htmlEncode: function(a) { 441 return void 0 === a || null === a ? "" : String(a).replace(b, "\x26amp;").replace(c, "\x26gt;").replace(f, "\x26lt;") 442 }, 443 htmlDecode: function(a) { 444 return a.replace(k, n) 445 }, 446 htmlEncodeAttr: function(a) { 447 return CKEDITOR.tools.htmlEncode(a).replace(h, "\x26quot;") 448 }, 449 htmlDecodeAttr: function(a) { 450 return CKEDITOR.tools.htmlDecode(a) 451 }, 452 transformPlainTextToHtml: function(a, e) { 453 var b = e == CKEDITOR.ENTER_BR, 454 v = this.htmlEncode(a.replace(/\r\n/g, "\n")), 455 v = v.replace(/\t/g, "\x26nbsp;\x26nbsp; \x26nbsp;"), 456 c = e == CKEDITOR.ENTER_P ? "p" : "div"; 457 if (!b) { 458 var g = /\n{2}/g; 459 if (g.test(v)) var d = "\x3c" + c + "\x3e", 460 m = "\x3c/" + c + "\x3e", 461 v = d + v.replace(g, function() { 462 return m + d 463 }) + m 464 } 465 v = v.replace(/\n/g, "\x3cbr\x3e"); 466 b || (v = v.replace(new RegExp("\x3cbr\x3e(?\x3d\x3c/" + c + "\x3e)"), function(a) { 467 return CKEDITOR.tools.repeat(a, 2) 468 })); 469 v = v.replace(/^ | $/g, "\x26nbsp;"); 470 return v = v.replace(/(>|\s) /g, 471 function(a, e) { 472 return e + "\x26nbsp;" 473 }).replace(/ (?=<)/g, "\x26nbsp;") 474 }, 475 getNextNumber: function() { 476 var a = 0; 477 return function() { 478 return ++a 479 } 480 }(), 481 getNextId: function() { 482 return "cke_" + this.getNextNumber() 483 }, 484 getUniqueId: function() { 485 for (var a = "e", e = 0; 8 > e; e++) a += Math.floor(65536 * (1 + Math.random())).toString(16).substring(1); 486 return a 487 }, 488 override: function(a, e) { 489 var b = e(a); 490 b.prototype = a.prototype; 491 return b 492 }, 493 setTimeout: function(a, e, b, c, g) { 494 g || (g = window); 495 b || (b = g); 496 return g.setTimeout(function() { 497 c ? a.apply(b, [].concat(c)) : a.apply(b) 498 }, 499 e || 0) 500 }, 501 throttle: function(a, e, b) { 502 var c, g = 0; 503 b = b || {}; 504 return { 505 input: function() { 506 function d() { 507 g = (new Date).getTime(); 508 c = !1; 509 e.apply(b, n) 510 } 511 var n = Array.prototype.slice.call(arguments); 512 c && (clearTimeout(c), c = 0); 513 var m = (new Date).getTime() - g; 514 m < a ? c = setTimeout(d, a - m) : d() 515 }, 516 reset: function() { 517 c && (clearTimeout(c), c = g = 0) 518 } 519 } 520 }, 521 trim: function() { 522 var a = /(?:^[ \t\n\r]+)|(?:[ \t\n\r]+$)/g; 523 return function(e) { 524 return e.replace(a, "") 525 } 526 }(), 527 ltrim: function() { 528 var a = /^[ \t\n\r]+/g; 529 return function(e) { 530 return e.replace(a, "") 531 } 532 }(), 533 rtrim: function() { 534 var a = 535 /[ \t\n\r]+$/g; 536 return function(e) { 537 return e.replace(a, "") 538 } 539 }(), 540 indexOf: function(a, e) { 541 if ("function" == typeof e) 542 for (var b = 0, c = a.length; b < c; b++) { 543 if (e(a[b])) return b 544 } else { 545 if (a.indexOf) return a.indexOf(e); 546 b = 0; 547 for (c = a.length; b < c; b++) 548 if (a[b] === e) return b 549 } 550 return -1 551 }, 552 search: function(a, e) { 553 var b = CKEDITOR.tools.indexOf(a, e); 554 return 0 <= b ? a[b] : null 555 }, 556 bind: function(a, e) { 557 return function() { 558 return a.apply(e, arguments) 559 } 560 }, 561 createClass: function(a) { 562 var e = a.$, 563 b = a.base, 564 c = a.privates || a._, 565 g = a.proto; 566 a = a.statics; 567 !e && (e = function() { 568 b && 569 this.base.apply(this, arguments) 570 }); 571 if (c) var d = e, 572 e = function() { 573 var a = this._ || (this._ = {}), 574 e; 575 for (e in c) { 576 var b = c[e]; 577 a[e] = "function" == typeof b ? CKEDITOR.tools.bind(b, this) : b 578 } 579 d.apply(this, arguments) 580 }; 581 b && (e.prototype = this.prototypedCopy(b.prototype), e.prototype.constructor = e, e.base = b, e.baseProto = b.prototype, e.prototype.base = function() { 582 this.base = b.prototype.base; 583 b.apply(this, arguments); 584 this.base = arguments.callee 585 }); 586 g && this.extend(e.prototype, g, !0); 587 a && this.extend(e, a, !0); 588 return e 589 }, 590 addFunction: function(b, e) { 591 return a.push(function() { 592 return b.apply(e || 593 this, arguments) 594 }) - 1 595 }, 596 removeFunction: function(b) { 597 a[b] = null 598 }, 599 callFunction: function(b) { 600 var e = a[b]; 601 return e && e.apply(window, Array.prototype.slice.call(arguments, 1)) 602 }, 603 cssLength: function() { 604 var a = /^-?\d+\.?\d*px$/, 605 e; 606 return function(b) { 607 e = CKEDITOR.tools.trim(b + "") + "px"; 608 return a.test(e) ? e : b || "" 609 } 610 }(), 611 convertToPx: function() { 612 var a; 613 return function(e) { 614 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), 615 CKEDITOR.document.getBody().append(a)); 616 return /%$/.test(e) ? e : (a.setStyle("width", e), a.$.clientWidth) 617 } 618 }(), 619 repeat: function(a, e) { 620 return Array(e + 1).join(a) 621 }, 622 tryThese: function() { 623 for (var a, e = 0, b = arguments.length; e < b; e++) { 624 var c = arguments[e]; 625 try { 626 a = c(); 627 break 628 } catch (g) {} 629 } 630 return a 631 }, 632 genKey: function() { 633 return Array.prototype.slice.call(arguments).join("-") 634 }, 635 defer: function(a) { 636 return function() { 637 var e = arguments, 638 b = this; 639 window.setTimeout(function() { 640 a.apply(b, e) 641 }, 0) 642 } 643 }, 644 normalizeCssText: function(a, e) { 645 var b = [], 646 c, g = CKEDITOR.tools.parseCssText(a, 647 !0, e); 648 for (c in g) b.push(c + ":" + g[c]); 649 b.sort(); 650 return b.length ? b.join(";") + ";" : "" 651 }, 652 convertRgbToHex: function(a) { 653 return a.replace(/(?:rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\))/gi, function(a, b, c, g) { 654 a = [b, c, g]; 655 for (b = 0; 3 > b; b++) a[b] = ("0" + parseInt(a[b], 10).toString(16)).slice(-2); 656 return "#" + a.join("") 657 }) 658 }, 659 normalizeHex: function(a) { 660 return a.replace(/#(([0-9a-f]{3}){1,2})($|;|\s+)/gi, function(a, b, c, g) { 661 a = b.toLowerCase(); 662 3 == a.length && (a = a.split(""), a = [a[0], a[0], a[1], a[1], a[2], a[2]].join("")); 663 return "#" + a + g 664 }) 665 }, 666 parseCssText: function(a, 667 e, b) { 668 var c = {}; 669 b && (a = (new CKEDITOR.dom.element("span")).setAttribute("style", a).getAttribute("style") || ""); 670 a && (a = CKEDITOR.tools.normalizeHex(CKEDITOR.tools.convertRgbToHex(a))); 671 if (!a || ";" == a) return c; 672 a.replace(/"/g, '"').replace(/\s*([^:;\s]+)\s*:\s*([^;]+)\s*(?=;|$)/g, function(a, b, g) { 673 e && (b = b.toLowerCase(), "font-family" == b && (g = g.replace(/\s*,\s*/g, ",")), g = CKEDITOR.tools.trim(g)); 674 c[b] = g 675 }); 676 return c 677 }, 678 writeCssText: function(a, e) { 679 var b, c = []; 680 for (b in a) c.push(b + ":" + a[b]); 681 e && c.sort(); 682 return c.join("; ") 683 }, 684 objectCompare: function(a, e, b) { 685 var c; 686 if (!a && !e) return !0; 687 if (!a || !e) return !1; 688 for (c in a) 689 if (a[c] != e[c]) return !1; 690 if (!b) 691 for (c in e) 692 if (a[c] != e[c]) return !1; 693 return !0 694 }, 695 objectKeys: function(a) { 696 var e = [], 697 b; 698 for (b in a) e.push(b); 699 return e 700 }, 701 convertArrayToObject: function(a, e) { 702 var b = {}; 703 1 == arguments.length && (e = !0); 704 for (var c = 0, g = a.length; c < g; ++c) b[a[c]] = e; 705 return b 706 }, 707 fixDomain: function() { 708 for (var a;;) try { 709 a = window.parent.document.domain; 710 break 711 } catch (e) { 712 a = a ? a.replace(/.+?(?:\.|$)/, "") : document.domain; 713 if (!a) break; 714 document.domain = 715 a 716 } 717 return !!a 718 }, 719 eventsBuffer: function(a, e, b) { 720 function c() { 721 d = (new Date).getTime(); 722 g = !1; 723 b ? e.call(b) : e() 724 } 725 var g, d = 0; 726 return { 727 input: function() { 728 if (!g) { 729 var e = (new Date).getTime() - d; 730 e < a ? g = setTimeout(c, a - e) : c() 731 } 732 }, 733 reset: function() { 734 g && clearTimeout(g); 735 g = d = 0 736 } 737 } 738 }, 739 enableHtml5Elements: function(a, e) { 740 for (var b = "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(" "), c = b.length, g; c--;) g = a.createElement(b[c]), 741 e && a.appendChild(g) 742 }, 743 checkIfAnyArrayItemMatches: function(a, e) { 744 for (var b = 0, c = a.length; b < c; ++b) 745 if (a[b].match(e)) return !0; 746 return !1 747 }, 748 checkIfAnyObjectPropertyMatches: function(a, e) { 749 for (var b in a) 750 if (b.match(e)) return !0; 751 return !1 752 }, 753 keystrokeToString: function(a, e) { 754 var b = this.keystrokeToArray(a, e); 755 b.display = b.display.join("+"); 756 b.aria = b.aria.join("+"); 757 return b 758 }, 759 keystrokeToArray: function(a, e) { 760 var b = e & 16711680, 761 c = e & 65535, 762 g = CKEDITOR.env.mac, 763 d = [], 764 n = []; 765 b & CKEDITOR.CTRL && (d.push(g ? "⌘" : a[17]), n.push(g ? a[224] : a[17])); 766 b & CKEDITOR.ALT && (d.push(g ? "⌥" : a[18]), n.push(a[18])); 767 b & CKEDITOR.SHIFT && (d.push(g ? "⇧" : a[16]), n.push(a[16])); 768 c && (a[c] ? (d.push(a[c]), n.push(a[c])) : (d.push(String.fromCharCode(c)), n.push(String.fromCharCode(c)))); 769 return { 770 display: d, 771 aria: n 772 } 773 }, 774 transparentImageData: "data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw\x3d\x3d", 775 getCookie: function(a) { 776 a = a.toLowerCase(); 777 for (var e = document.cookie.split(";"), b, c, g = 0; g < e.length; g++) 778 if (b = e[g].split("\x3d"), c = decodeURIComponent(CKEDITOR.tools.trim(b[0]).toLowerCase()), 779 c === a) return decodeURIComponent(1 < b.length ? b[1] : ""); 780 return null 781 }, 782 setCookie: function(a, e) { 783 document.cookie = encodeURIComponent(a) + "\x3d" + encodeURIComponent(e) + ";path\x3d/" 784 }, 785 getCsrfToken: function() { 786 var a = CKEDITOR.tools.getCookie("ckCsrfToken"); 787 if (!a || 40 != a.length) { 788 var a = [], 789 e = ""; 790 if (window.crypto && window.crypto.getRandomValues) a = new Uint8Array(40), window.crypto.getRandomValues(a); 791 else 792 for (var b = 0; 40 > b; b++) a.push(Math.floor(256 * Math.random())); 793 for (b = 0; b < a.length; b++) var c = "abcdefghijklmnopqrstuvwxyz0123456789".charAt(a[b] % 794 36), 795 e = e + (.5 < Math.random() ? c.toUpperCase() : c); 796 a = e; 797 CKEDITOR.tools.setCookie("ckCsrfToken", a) 798 } 799 return a 800 }, 801 escapeCss: function(a) { 802 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) : "" 803 }, 804 getMouseButton: function(a) { 805 var b = (a = a.data) && a.$; 806 return a && b ? CKEDITOR.env.ie && 9 > CKEDITOR.env.version ? 4 === b.button ? CKEDITOR.MOUSE_BUTTON_MIDDLE : 1 === b.button ? CKEDITOR.MOUSE_BUTTON_LEFT : CKEDITOR.MOUSE_BUTTON_RIGHT : b.button : !1 807 }, 808 convertHexStringToBytes: function(a) { 809 var b = [], 810 c = a.length / 2, 811 g; 812 for (g = 0; g < c; g++) b.push(parseInt(a.substr(2 * g, 2), 16)); 813 return b 814 }, 815 convertBytesToBase64: function(a) { 816 var b = "", 817 c = a.length, 818 g; 819 for (g = 0; g < c; g += 3) { 820 var d = a.slice(g, g + 3), 821 n = d.length, 822 f = [], 823 m; 824 if (3 > n) 825 for (m = n; 3 > m; m++) d[m] = 0; 826 f[0] = (d[0] & 252) >> 2; 827 f[1] = (d[0] & 3) << 4 | d[1] >> 4; 828 f[2] = (d[1] & 15) << 2 | (d[2] & 192) >> 6; 829 f[3] = d[2] & 63; 830 for (m = 0; 4 > m; m++) b = m <= n ? b + "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(f[m]) : b + "\x3d" 831 } 832 return b 833 }, 834 style: { 835 parse: { 836 _colors: { 837 aliceblue: "#F0F8FF", 838 antiquewhite: "#FAEBD7", 839 aqua: "#00FFFF", 840 aquamarine: "#7FFFD4", 841 azure: "#F0FFFF", 842 beige: "#F5F5DC", 843 bisque: "#FFE4C4", 844 black: "#000000", 845 blanchedalmond: "#FFEBCD", 846 blue: "#0000FF", 847 blueviolet: "#8A2BE2", 848 brown: "#A52A2A", 849 burlywood: "#DEB887", 850 cadetblue: "#5F9EA0", 851 chartreuse: "#7FFF00", 852 chocolate: "#D2691E", 853 coral: "#FF7F50", 854 cornflowerblue: "#6495ED", 855 cornsilk: "#FFF8DC", 856 crimson: "#DC143C", 857 cyan: "#00FFFF", 858 darkblue: "#00008B", 859 darkcyan: "#008B8B", 860 darkgoldenrod: "#B8860B", 861 darkgray: "#A9A9A9", 862 darkgreen: "#006400", 863 darkgrey: "#A9A9A9", 864 darkkhaki: "#BDB76B", 865 darkmagenta: "#8B008B", 866 darkolivegreen: "#556B2F", 867 darkorange: "#FF8C00", 868 darkorchid: "#9932CC", 869 darkred: "#8B0000", 870 darksalmon: "#E9967A", 871 darkseagreen: "#8FBC8F", 872 darkslateblue: "#483D8B", 873 darkslategray: "#2F4F4F", 874 darkslategrey: "#2F4F4F", 875 darkturquoise: "#00CED1", 876 darkviolet: "#9400D3", 877 deeppink: "#FF1493", 878 deepskyblue: "#00BFFF", 879 dimgray: "#696969", 880 dimgrey: "#696969", 881 dodgerblue: "#1E90FF", 882 firebrick: "#B22222", 883 floralwhite: "#FFFAF0", 884 forestgreen: "#228B22", 885 fuchsia: "#FF00FF", 886 gainsboro: "#DCDCDC", 887 ghostwhite: "#F8F8FF", 888 gold: "#FFD700", 889 goldenrod: "#DAA520", 890 gray: "#808080", 891 green: "#008000", 892 greenyellow: "#ADFF2F", 893 grey: "#808080", 894 honeydew: "#F0FFF0", 895 hotpink: "#FF69B4", 896 indianred: "#CD5C5C", 897 indigo: "#4B0082", 898 ivory: "#FFFFF0", 899 khaki: "#F0E68C", 900 lavender: "#E6E6FA", 901 lavenderblush: "#FFF0F5", 902 lawngreen: "#7CFC00", 903 lemonchiffon: "#FFFACD", 904 lightblue: "#ADD8E6", 905 lightcoral: "#F08080", 906 lightcyan: "#E0FFFF", 907 lightgoldenrodyellow: "#FAFAD2", 908 lightgray: "#D3D3D3", 909 lightgreen: "#90EE90", 910 lightgrey: "#D3D3D3", 911 lightpink: "#FFB6C1", 912 lightsalmon: "#FFA07A", 913 lightseagreen: "#20B2AA", 914 lightskyblue: "#87CEFA", 915 lightslategray: "#778899", 916 lightslategrey: "#778899", 917 lightsteelblue: "#B0C4DE", 918 lightyellow: "#FFFFE0", 919 lime: "#00FF00", 920 limegreen: "#32CD32", 921 linen: "#FAF0E6", 922 magenta: "#FF00FF", 923 maroon: "#800000", 924 mediumaquamarine: "#66CDAA", 925 mediumblue: "#0000CD", 926 mediumorchid: "#BA55D3", 927 mediumpurple: "#9370DB", 928 mediumseagreen: "#3CB371", 929 mediumslateblue: "#7B68EE", 930 mediumspringgreen: "#00FA9A", 931 mediumturquoise: "#48D1CC", 932 mediumvioletred: "#C71585", 933 midnightblue: "#191970", 934 mintcream: "#F5FFFA", 935 mistyrose: "#FFE4E1", 936 moccasin: "#FFE4B5", 937 navajowhite: "#FFDEAD", 938 navy: "#000080", 939 oldlace: "#FDF5E6", 940 olive: "#808000", 941 olivedrab: "#6B8E23", 942 orange: "#FFA500", 943 orangered: "#FF4500", 944 orchid: "#DA70D6", 945 palegoldenrod: "#EEE8AA", 946 palegreen: "#98FB98", 947 paleturquoise: "#AFEEEE", 948 palevioletred: "#DB7093", 949 papayawhip: "#FFEFD5", 950 peachpuff: "#FFDAB9", 951 peru: "#CD853F", 952 pink: "#FFC0CB", 953 plum: "#DDA0DD", 954 powderblue: "#B0E0E6", 955 purple: "#800080", 956 rebeccapurple: "#663399", 957 red: "#FF0000", 958 rosybrown: "#BC8F8F", 959 royalblue: "#4169E1", 960 saddlebrown: "#8B4513", 961 salmon: "#FA8072", 962 sandybrown: "#F4A460", 963 seagreen: "#2E8B57", 964 seashell: "#FFF5EE", 965 sienna: "#A0522D", 966 silver: "#C0C0C0", 967 skyblue: "#87CEEB", 968 slateblue: "#6A5ACD", 969 slategray: "#708090", 970 slategrey: "#708090", 971 snow: "#FFFAFA", 972 springgreen: "#00FF7F", 973 steelblue: "#4682B4", 974 tan: "#D2B48C", 975 teal: "#008080", 976 thistle: "#D8BFD8", 977 tomato: "#FF6347", 978 turquoise: "#40E0D0", 979 violet: "#EE82EE", 980 wheat: "#F5DEB3", 981 white: "#FFFFFF", 982 whitesmoke: "#F5F5F5", 983 yellow: "#FFFF00", 984 yellowgreen: "#9ACD32" 985 }, 986 _borderStyle: "none hidden dotted dashed solid double groove ridge inset outset".split(" "), 987 _widthRegExp: /^(thin|medium|thick|[\+-]?\d+(\.\d+)?[a-z%]+|[\+-]?0+(\.0+)?|\.\d+[a-z%]+)$/, 988 _rgbaRegExp: /rgba?\(\s*\d+%?\s*,\s*\d+%?\s*,\s*\d+%?\s*(?:,\s*[0-9.]+\s*)?\)/gi, 989 _hslaRegExp: /hsla?\(\s*[0-9.]+\s*,\s*\d+%\s*,\s*\d+%\s*(?:,\s*[0-9.]+\s*)?\)/gi, 990 background: function(a) { 991 var b = {}, 992 c = this._findColor(a); 993 c.length && (b.color = c[0], CKEDITOR.tools.array.forEach(c, function(b) { 994 a = a.replace(b, "") 995 })); 996 if (a = CKEDITOR.tools.trim(a)) b.unprocessed = a; 997 return b 998 }, 999 margin: function(a) { 1000 function b(a) { 1001 c.top = g[a[0]]; 1002 c.right = g[a[1]]; 1003 c.bottom = g[a[2]]; 1004 c.left = g[a[3]] 1005 } 1006 var c = {}, 1007 g = a.match(/(?:\-?[\.\d]+(?:%|\w*)|auto|inherit|initial|unset)/g) || ["0px"]; 1008 switch (g.length) { 1009 case 1: 1010 b([0, 0, 0, 0]); 1011 break; 1012 case 2: 1013 b([0, 1, 0, 1]); 1014 break; 1015 case 3: 1016 b([0, 1, 2, 1]); 1017 break; 1018 case 4: 1019 b([0, 1, 2, 3]) 1020 } 1021 return c 1022 }, 1023 border: function(a) { 1024 var b = {}, 1025 c = a.split(/\s+/g); 1026 a = CKEDITOR.tools.style.parse._findColor(a); 1027 a.length && (b.color = a[0]); 1028 CKEDITOR.tools.array.forEach(c, function(a) { 1029 b.style || -1 === CKEDITOR.tools.indexOf(CKEDITOR.tools.style.parse._borderStyle, a) ? !b.width && CKEDITOR.tools.style.parse._widthRegExp.test(a) && (b.width = a) : b.style = a 1030 }); 1031 return b 1032 }, 1033 _findColor: function(a) { 1034 var b = [], 1035 c = CKEDITOR.tools.array, 1036 b = b.concat(a.match(this._rgbaRegExp) || []), 1037 b = b.concat(a.match(this._hslaRegExp) || []); 1038 return b = b.concat(c.filter(a.split(/\s+/), function(a) { 1039 return a.match(/^\#[a-f0-9]{3}(?:[a-f0-9]{3})?$/gi) ? !0 : a.toLowerCase() in CKEDITOR.tools.style.parse._colors 1040 })) 1041 } 1042 } 1043 }, 1044 array: { 1045 filter: function(a, b, c) { 1046 var g = []; 1047 this.forEach(a, function(d, n) { 1048 b.call(c, d, n, a) && g.push(d) 1049 }); 1050 return g 1051 }, 1052 forEach: function(a, b, c) { 1053 var g = a.length, 1054 d; 1055 for (d = 0; d < g; d++) b.call(c, a[d], d, a) 1056 }, 1057 map: function(a, b, c) { 1058 for (var g = [], d = 0; d < a.length; d++) g.push(b.call(c, 1059 a[d], d, a)); 1060 return g 1061 }, 1062 reduce: function(a, b, c, g) { 1063 for (var d = 0; d < a.length; d++) c = b.call(g, c, a[d], d, a); 1064 return c 1065 }, 1066 every: function(a, b, c) { 1067 if (!a.length) return !0; 1068 b = this.filter(a, b, c); 1069 return a.length === b.length 1070 } 1071 }, 1072 object: { 1073 findKey: function(a, b) { 1074 if ("object" !== typeof a) return null; 1075 for (var c in a) 1076 if (a[c] === b) return c; 1077 return null 1078 }, 1079 merge: function(a, b) { 1080 var c = CKEDITOR.tools, 1081 g = c.clone(a), 1082 d = c.clone(b); 1083 c.array.forEach(c.objectKeys(d), function(a) { 1084 g[a] = "object" === typeof d[a] && "object" === typeof g[a] ? c.object.merge(g[a], d[a]) : 1085 d[a] 1086 }); 1087 return g 1088 } 1089 }, 1090 getAbsoluteRectPosition: function(a, b) { 1091 function c(a) { 1092 if (a) { 1093 var b = a.getClientRect(); 1094 g.top += b.top; 1095 g.left += b.left; 1096 "x" in g && "y" in g && (g.x += b.x, g.y += b.y); 1097 c(a.getWindow().getFrame()) 1098 } 1099 } 1100 var g = CKEDITOR.tools.copy(b); 1101 c(a.getFrame()); 1102 var d = CKEDITOR.document.getWindow().getScrollPosition(); 1103 g.top += d.y; 1104 g.left += d.x; 1105 "x" in g && "y" in g && (g.y += d.y, g.x += d.x); 1106 g.right = g.left + g.width; 1107 g.bottom = g.top + g.height; 1108 return g 1109 } 1110 }; 1111 CKEDITOR.tools.array.indexOf = CKEDITOR.tools.indexOf; 1112 CKEDITOR.tools.array.isArray = CKEDITOR.tools.isArray; 1113 CKEDITOR.MOUSE_BUTTON_LEFT = 0; 1114 CKEDITOR.MOUSE_BUTTON_MIDDLE = 1; 1115 CKEDITOR.MOUSE_BUTTON_RIGHT = 2 1116 })(); 1117 CKEDITOR.dtd = function() { 1118 var a = CKEDITOR.tools.extend, 1119 d = function(a, b) { 1120 for (var c = CKEDITOR.tools.clone(a), g = 1; g < arguments.length; g++) { 1121 b = arguments[g]; 1122 for (var d in b) delete c[d] 1123 } 1124 return c 1125 }, 1126 b = {}, 1127 c = {}, 1128 f = { 1129 address: 1, 1130 article: 1, 1131 aside: 1, 1132 blockquote: 1, 1133 details: 1, 1134 div: 1, 1135 dl: 1, 1136 fieldset: 1, 1137 figure: 1, 1138 footer: 1, 1139 form: 1, 1140 h1: 1, 1141 h2: 1, 1142 h3: 1, 1143 h4: 1, 1144 h5: 1, 1145 h6: 1, 1146 header: 1, 1147 hgroup: 1, 1148 hr: 1, 1149 main: 1, 1150 menu: 1, 1151 nav: 1, 1152 ol: 1, 1153 p: 1, 1154 pre: 1, 1155 section: 1, 1156 table: 1, 1157 ul: 1 1158 }, 1159 h = { 1160 command: 1, 1161 link: 1, 1162 meta: 1, 1163 noscript: 1, 1164 script: 1, 1165 style: 1 1166 }, 1167 k = {}, 1168 g = { 1169 "#": 1 1170 }, 1171 n = { 1172 center: 1, 1173 dir: 1, 1174 noframes: 1 1175 }; 1176 a(b, { 1177 a: 1, 1178 abbr: 1, 1179 area: 1, 1180 audio: 1, 1181 b: 1, 1182 bdi: 1, 1183 bdo: 1, 1184 br: 1, 1185 button: 1, 1186 canvas: 1, 1187 cite: 1, 1188 code: 1, 1189 command: 1, 1190 datalist: 1, 1191 del: 1, 1192 dfn: 1, 1193 em: 1, 1194 embed: 1, 1195 i: 1, 1196 iframe: 1, 1197 img: 1, 1198 input: 1, 1199 ins: 1, 1200 kbd: 1, 1201 keygen: 1, 1202 label: 1, 1203 map: 1, 1204 mark: 1, 1205 meter: 1, 1206 noscript: 1, 1207 object: 1, 1208 output: 1, 1209 progress: 1, 1210 q: 1, 1211 ruby: 1, 1212 s: 1, 1213 samp: 1, 1214 script: 1, 1215 select: 1, 1216 small: 1, 1217 span: 1, 1218 strong: 1, 1219 sub: 1, 1220 sup: 1, 1221 textarea: 1, 1222 time: 1, 1223 u: 1, 1224 "var": 1, 1225 video: 1, 1226 wbr: 1 1227 }, g, { 1228 acronym: 1, 1229 applet: 1, 1230 basefont: 1, 1231 big: 1, 1232 font: 1, 1233 isindex: 1, 1234 strike: 1, 1235 style: 1, 1236 tt: 1 1237 }); 1238 a(c, f, b, n); 1239 d = { 1240 a: d(b, { 1241 a: 1, 1242 button: 1 1243 }), 1244 abbr: b, 1245 address: c, 1246 area: k, 1247 article: c, 1248 aside: c, 1249 audio: a({ 1250 source: 1, 1251 track: 1 1252 }, c), 1253 b: b, 1254 base: k, 1255 bdi: b, 1256 bdo: b, 1257 blockquote: c, 1258 body: c, 1259 br: k, 1260 button: d(b, { 1261 a: 1, 1262 button: 1 1263 }), 1264 canvas: b, 1265 caption: c, 1266 cite: b, 1267 code: b, 1268 col: k, 1269 colgroup: { 1270 col: 1 1271 }, 1272 command: k, 1273 datalist: a({ 1274 option: 1 1275 }, b), 1276 dd: c, 1277 del: b, 1278 details: a({ 1279 summary: 1 1280 }, c), 1281 dfn: b, 1282 div: c, 1283 dl: { 1284 dt: 1, 1285 dd: 1 1286 }, 1287 dt: c, 1288 em: b, 1289 embed: k, 1290 fieldset: a({ 1291 legend: 1 1292 }, c), 1293 figcaption: c, 1294 figure: a({ 1295 figcaption: 1 1296 }, c), 1297 footer: c, 1298 form: c, 1299 h1: b, 1300 h2: b, 1301 h3: b, 1302 h4: b, 1303 h5: b, 1304 h6: b, 1305 head: a({ 1306 title: 1, 1307 base: 1 1308 }, h), 1309 header: c, 1310 hgroup: { 1311 h1: 1, 1312 h2: 1, 1313 h3: 1, 1314 h4: 1, 1315 h5: 1, 1316 h6: 1 1317 }, 1318 hr: k, 1319 html: a({ 1320 head: 1, 1321 body: 1 1322 }, c, h), 1323 i: b, 1324 iframe: g, 1325 img: k, 1326 input: k, 1327 ins: b, 1328 kbd: b, 1329 keygen: k, 1330 label: b, 1331 legend: b, 1332 li: c, 1333 link: k, 1334 main: c, 1335 map: c, 1336 mark: b, 1337 menu: a({ 1338 li: 1 1339 }, c), 1340 meta: k, 1341 meter: d(b, { 1342 meter: 1 1343 }), 1344 nav: c, 1345 noscript: a({ 1346 link: 1, 1347 meta: 1, 1348 style: 1 1349 }, b), 1350 object: a({ 1351 param: 1 1352 }, b), 1353 ol: { 1354 li: 1 1355 }, 1356 optgroup: { 1357 option: 1 1358 }, 1359 option: g, 1360 output: b, 1361 p: b, 1362 param: k, 1363 pre: b, 1364 progress: d(b, { 1365 progress: 1 1366 }), 1367 q: b, 1368 rp: b, 1369 rt: b, 1370 ruby: a({ 1371 rp: 1, 1372 rt: 1 1373 }, b), 1374 s: b, 1375 samp: b, 1376 script: g, 1377 section: c, 1378 select: { 1379 optgroup: 1, 1380 option: 1 1381 }, 1382 small: b, 1383 source: k, 1384 span: b, 1385 strong: b, 1386 style: g, 1387 sub: b, 1388 summary: a({ 1389 h1: 1, 1390 h2: 1, 1391 h3: 1, 1392 h4: 1, 1393 h5: 1, 1394 h6: 1 1395 }, b), 1396 sup: b, 1397 table: { 1398 caption: 1, 1399 colgroup: 1, 1400 thead: 1, 1401 tfoot: 1, 1402 tbody: 1, 1403 tr: 1 1404 }, 1405 tbody: { 1406 tr: 1 1407 }, 1408 td: c, 1409 textarea: g, 1410 tfoot: { 1411 tr: 1 1412 }, 1413 th: c, 1414 thead: { 1415 tr: 1 1416 }, 1417 time: d(b, { 1418 time: 1 1419 }), 1420 title: g, 1421 tr: { 1422 th: 1, 1423 td: 1 1424 }, 1425 track: k, 1426 u: b, 1427 ul: { 1428 li: 1 1429 }, 1430 "var": b, 1431 video: a({ 1432 source: 1, 1433 track: 1 1434 }, c), 1435 wbr: k, 1436 acronym: b, 1437 applet: a({ 1438 param: 1 1439 }, c), 1440 basefont: k, 1441 big: b, 1442 center: c, 1443 dialog: k, 1444 dir: { 1445 li: 1 1446 }, 1447 font: b, 1448 isindex: k, 1449 noframes: c, 1450 strike: b, 1451 tt: b 1452 }; 1453 a(d, { 1454 $block: a({ 1455 audio: 1, 1456 dd: 1, 1457 dt: 1, 1458 figcaption: 1, 1459 li: 1, 1460 video: 1 1461 }, f, n), 1462 $blockLimit: { 1463 article: 1, 1464 aside: 1, 1465 audio: 1, 1466 body: 1, 1467 caption: 1, 1468 details: 1, 1469 dir: 1, 1470 div: 1, 1471 dl: 1, 1472 fieldset: 1, 1473 figcaption: 1, 1474 figure: 1, 1475 footer: 1, 1476 form: 1, 1477 header: 1, 1478 hgroup: 1, 1479 main: 1, 1480 menu: 1, 1481 nav: 1, 1482 ol: 1, 1483 section: 1, 1484 table: 1, 1485 td: 1, 1486 th: 1, 1487 tr: 1, 1488 ul: 1, 1489 video: 1 1490 }, 1491 $cdata: { 1492 script: 1, 1493 style: 1 1494 }, 1495 $editable: { 1496 address: 1, 1497 article: 1, 1498 aside: 1, 1499 blockquote: 1, 1500 body: 1, 1501 details: 1, 1502 div: 1, 1503 fieldset: 1, 1504 figcaption: 1, 1505 footer: 1, 1506 form: 1, 1507 h1: 1, 1508 h2: 1, 1509 h3: 1, 1510 h4: 1, 1511 h5: 1, 1512 h6: 1, 1513 header: 1, 1514 hgroup: 1, 1515 main: 1, 1516 nav: 1, 1517 p: 1, 1518 pre: 1, 1519 section: 1 1520 }, 1521 $empty: { 1522 area: 1, 1523 base: 1, 1524 basefont: 1, 1525 br: 1, 1526 col: 1, 1527 command: 1, 1528 dialog: 1, 1529 embed: 1, 1530 hr: 1, 1531 img: 1, 1532 input: 1, 1533 isindex: 1, 1534 keygen: 1, 1535 link: 1, 1536 meta: 1, 1537 param: 1, 1538 source: 1, 1539 track: 1, 1540 wbr: 1 1541 }, 1542 $inline: b, 1543 $list: { 1544 dl: 1, 1545 ol: 1, 1546 ul: 1 1547 }, 1548 $listItem: { 1549 dd: 1, 1550 dt: 1, 1551 li: 1 1552 }, 1553 $nonBodyContent: a({ 1554 body: 1, 1555 head: 1, 1556 html: 1 1557 }, d.head), 1558 $nonEditable: { 1559 applet: 1, 1560 audio: 1, 1561 button: 1, 1562 embed: 1, 1563 iframe: 1, 1564 map: 1, 1565 object: 1, 1566 option: 1, 1567 param: 1, 1568 script: 1, 1569 textarea: 1, 1570 video: 1 1571 }, 1572 $object: { 1573 applet: 1, 1574 audio: 1, 1575 button: 1, 1576 hr: 1, 1577 iframe: 1, 1578 img: 1, 1579 input: 1, 1580 object: 1, 1581 select: 1, 1582 table: 1, 1583 textarea: 1, 1584 video: 1 1585 }, 1586 $removeEmpty: { 1587 abbr: 1, 1588 acronym: 1, 1589 b: 1, 1590 bdi: 1, 1591 bdo: 1, 1592 big: 1, 1593 cite: 1, 1594 code: 1, 1595 del: 1, 1596 dfn: 1, 1597 em: 1, 1598 font: 1, 1599 i: 1, 1600 ins: 1, 1601 label: 1, 1602 kbd: 1, 1603 mark: 1, 1604 meter: 1, 1605 output: 1, 1606 q: 1, 1607 ruby: 1, 1608 s: 1, 1609 samp: 1, 1610 small: 1, 1611 span: 1, 1612 strike: 1, 1613 strong: 1, 1614 sub: 1, 1615 sup: 1, 1616 time: 1, 1617 tt: 1, 1618 u: 1, 1619 "var": 1 1620 }, 1621 $tabIndex: { 1622 a: 1, 1623 area: 1, 1624 button: 1, 1625 input: 1, 1626 object: 1, 1627 select: 1, 1628 textarea: 1 1629 }, 1630 $tableContent: { 1631 caption: 1, 1632 col: 1, 1633 colgroup: 1, 1634 tbody: 1, 1635 td: 1, 1636 tfoot: 1, 1637 th: 1, 1638 thead: 1, 1639 tr: 1 1640 }, 1641 $transparent: { 1642 a: 1, 1643 audio: 1, 1644 canvas: 1, 1645 del: 1, 1646 ins: 1, 1647 map: 1, 1648 noscript: 1, 1649 object: 1, 1650 video: 1 1651 }, 1652 $intermediate: { 1653 caption: 1, 1654 colgroup: 1, 1655 dd: 1, 1656 dt: 1, 1657 figcaption: 1, 1658 legend: 1, 1659 li: 1, 1660 optgroup: 1, 1661 option: 1, 1662 rp: 1, 1663 rt: 1, 1664 summary: 1, 1665 tbody: 1, 1666 td: 1, 1667 tfoot: 1, 1668 th: 1, 1669 thead: 1, 1670 tr: 1 1671 } 1672 }); 1673 return d 1674 }(); 1675 CKEDITOR.dom.event = function(a) { 1676 this.$ = a 1677 }; 1678 CKEDITOR.dom.event.prototype = { 1679 getKey: function() { 1680 return this.$.keyCode || this.$.which 1681 }, 1682 getKeystroke: function() { 1683 var a = this.getKey(); 1684 if (this.$.ctrlKey || this.$.metaKey) a += CKEDITOR.CTRL; 1685 this.$.shiftKey && (a += CKEDITOR.SHIFT); 1686 this.$.altKey && (a += CKEDITOR.ALT); 1687 return a 1688 }, 1689 preventDefault: function(a) { 1690 var d = this.$; 1691 d.preventDefault ? d.preventDefault() : d.returnValue = !1; 1692 a && this.stopPropagation() 1693 }, 1694 stopPropagation: function() { 1695 var a = this.$; 1696 a.stopPropagation ? a.stopPropagation() : a.cancelBubble = !0 1697 }, 1698 getTarget: function() { 1699 var a = 1700 this.$.target || this.$.srcElement; 1701 return a ? new CKEDITOR.dom.node(a) : null 1702 }, 1703 getPhase: function() { 1704 return this.$.eventPhase || 2 1705 }, 1706 getPageOffset: function() { 1707 var a = this.getTarget().getDocument().$; 1708 return { 1709 x: this.$.pageX || this.$.clientX + (a.documentElement.scrollLeft || a.body.scrollLeft), 1710 y: this.$.pageY || this.$.clientY + (a.documentElement.scrollTop || a.body.scrollTop) 1711 } 1712 } 1713 }; 1714 CKEDITOR.CTRL = 1114112; 1715 CKEDITOR.SHIFT = 2228224; 1716 CKEDITOR.ALT = 4456448; 1717 CKEDITOR.EVENT_PHASE_CAPTURING = 1; 1718 CKEDITOR.EVENT_PHASE_AT_TARGET = 2; 1719 CKEDITOR.EVENT_PHASE_BUBBLING = 3; 1720 CKEDITOR.dom.domObject = function(a) { 1721 a && (this.$ = a) 1722 }; 1723 CKEDITOR.dom.domObject.prototype = function() { 1724 var a = function(a, b) { 1725 return function(c) { 1726 "undefined" != typeof CKEDITOR && a.fire(b, new CKEDITOR.dom.event(c)) 1727 } 1728 }; 1729 return { 1730 getPrivate: function() { 1731 var a; 1732 (a = this.getCustomData("_")) || this.setCustomData("_", a = {}); 1733 return a 1734 }, 1735 on: function(d) { 1736 var b = this.getCustomData("_cke_nativeListeners"); 1737 b || (b = {}, this.setCustomData("_cke_nativeListeners", b)); 1738 b[d] || (b = b[d] = a(this, d), this.$.addEventListener ? this.$.addEventListener(d, b, !!CKEDITOR.event.useCapture) : this.$.attachEvent && this.$.attachEvent("on" + 1739 d, b)); 1740 return CKEDITOR.event.prototype.on.apply(this, arguments) 1741 }, 1742 removeListener: function(a) { 1743 CKEDITOR.event.prototype.removeListener.apply(this, arguments); 1744 if (!this.hasListeners(a)) { 1745 var b = this.getCustomData("_cke_nativeListeners"), 1746 c = b && b[a]; 1747 c && (this.$.removeEventListener ? this.$.removeEventListener(a, c, !1) : this.$.detachEvent && this.$.detachEvent("on" + a, c), delete b[a]) 1748 } 1749 }, 1750 removeAllListeners: function() { 1751 var a = this.getCustomData("_cke_nativeListeners"), 1752 b; 1753 for (b in a) { 1754 var c = a[b]; 1755 this.$.detachEvent ? this.$.detachEvent("on" + 1756 b, c) : this.$.removeEventListener && this.$.removeEventListener(b, c, !1); 1757 delete a[b] 1758 } 1759 CKEDITOR.event.prototype.removeAllListeners.call(this) 1760 } 1761 } 1762 }(); 1763 (function(a) { 1764 var d = {}; 1765 CKEDITOR.on("reset", function() { 1766 d = {} 1767 }); 1768 a.equals = function(a) { 1769 try { 1770 return a && a.$ === this.$ 1771 } catch (c) { 1772 return !1 1773 } 1774 }; 1775 a.setCustomData = function(a, c) { 1776 var f = this.getUniqueId(); 1777 (d[f] || (d[f] = {}))[a] = c; 1778 return this 1779 }; 1780 a.getCustomData = function(a) { 1781 var c = this.$["data-cke-expando"]; 1782 return (c = c && d[c]) && a in c ? c[a] : null 1783 }; 1784 a.removeCustomData = function(a) { 1785 var c = this.$["data-cke-expando"], 1786 c = c && d[c], 1787 f, h; 1788 c && (f = c[a], h = a in c, delete c[a]); 1789 return h ? f : null 1790 }; 1791 a.clearCustomData = function() { 1792 this.removeAllListeners(); 1793 var a = 1794 this.$["data-cke-expando"]; 1795 a && delete d[a] 1796 }; 1797 a.getUniqueId = function() { 1798 return this.$["data-cke-expando"] || (this.$["data-cke-expando"] = CKEDITOR.tools.getNextNumber()) 1799 }; 1800 CKEDITOR.event.implementOn(a) 1801 })(CKEDITOR.dom.domObject.prototype); 1802 CKEDITOR.dom.node = function(a) { 1803 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 1804 }; 1805 CKEDITOR.dom.node.prototype = new CKEDITOR.dom.domObject; 1806 CKEDITOR.NODE_ELEMENT = 1; 1807 CKEDITOR.NODE_DOCUMENT = 9; 1808 CKEDITOR.NODE_TEXT = 3; 1809 CKEDITOR.NODE_COMMENT = 8; 1810 CKEDITOR.NODE_DOCUMENT_FRAGMENT = 11; 1811 CKEDITOR.POSITION_IDENTICAL = 0; 1812 CKEDITOR.POSITION_DISCONNECTED = 1; 1813 CKEDITOR.POSITION_FOLLOWING = 2; 1814 CKEDITOR.POSITION_PRECEDING = 4; 1815 CKEDITOR.POSITION_IS_CONTAINED = 8; 1816 CKEDITOR.POSITION_CONTAINS = 16; 1817 CKEDITOR.tools.extend(CKEDITOR.dom.node.prototype, { 1818 appendTo: function(a, d) { 1819 a.append(this, d); 1820 return a 1821 }, 1822 clone: function(a, d) { 1823 function b(c) { 1824 c["data-cke-expando"] && (c["data-cke-expando"] = !1); 1825 if (c.nodeType == CKEDITOR.NODE_ELEMENT || c.nodeType == CKEDITOR.NODE_DOCUMENT_FRAGMENT) 1826 if (d || c.nodeType != CKEDITOR.NODE_ELEMENT || c.removeAttribute("id", !1), a) { 1827 c = c.childNodes; 1828 for (var f = 0; f < c.length; f++) b(c[f]) 1829 } 1830 } 1831 1832 function c(b) { 1833 if (b.type == CKEDITOR.NODE_ELEMENT || b.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT) { 1834 if (b.type != CKEDITOR.NODE_DOCUMENT_FRAGMENT) { 1835 var d = 1836 b.getName(); 1837 ":" == d[0] && b.renameNode(d.substring(1)) 1838 } 1839 if (a) 1840 for (d = 0; d < b.getChildCount(); d++) c(b.getChild(d)) 1841 } 1842 } 1843 var f = this.$.cloneNode(a); 1844 b(f); 1845 f = new CKEDITOR.dom.node(f); 1846 CKEDITOR.env.ie && 9 > CKEDITOR.env.version && (this.type == CKEDITOR.NODE_ELEMENT || this.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT) && c(f); 1847 return f 1848 }, 1849 hasPrevious: function() { 1850 return !!this.$.previousSibling 1851 }, 1852 hasNext: function() { 1853 return !!this.$.nextSibling 1854 }, 1855 insertAfter: function(a) { 1856 a.$.parentNode.insertBefore(this.$, a.$.nextSibling); 1857 return a 1858 }, 1859 insertBefore: function(a) { 1860 a.$.parentNode.insertBefore(this.$, 1861 a.$); 1862 return a 1863 }, 1864 insertBeforeMe: function(a) { 1865 this.$.parentNode.insertBefore(a.$, this.$); 1866 return a 1867 }, 1868 getAddress: function(a) { 1869 for (var d = [], b = this.getDocument().$.documentElement, c = this.$; c && c != b;) { 1870 var f = c.parentNode; 1871 f && d.unshift(this.getIndex.call({ 1872 $: c 1873 }, a)); 1874 c = f 1875 } 1876 return d 1877 }, 1878 getDocument: function() { 1879 return new CKEDITOR.dom.document(this.$.ownerDocument || this.$.parentNode.ownerDocument) 1880 }, 1881 getIndex: function(a) { 1882 function d(a, c) { 1883 var n = c ? a.nextSibling : a.previousSibling; 1884 return n && n.nodeType == CKEDITOR.NODE_TEXT ? b(n) ? d(n, 1885 c) : n : null 1886 } 1887 1888 function b(a) { 1889 return !a.nodeValue || a.nodeValue == CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE 1890 } 1891 var c = this.$, 1892 f = -1, 1893 h; 1894 if (!this.$.parentNode || a && c.nodeType == CKEDITOR.NODE_TEXT && b(c) && !d(c) && !d(c, !0)) return -1; 1895 do a && c != this.$ && c.nodeType == CKEDITOR.NODE_TEXT && (h || b(c)) || (f++, h = c.nodeType == CKEDITOR.NODE_TEXT); while (c = c.previousSibling); 1896 return f 1897 }, 1898 getNextSourceNode: function(a, d, b) { 1899 if (b && !b.call) { 1900 var c = b; 1901 b = function(a) { 1902 return !a.equals(c) 1903 } 1904 } 1905 a = !a && this.getFirst && this.getFirst(); 1906 var f; 1907 if (!a) { 1908 if (this.type == 1909 CKEDITOR.NODE_ELEMENT && b && !1 === b(this, !0)) return null; 1910 a = this.getNext() 1911 } 1912 for (; !a && (f = (f || this).getParent());) { 1913 if (b && !1 === b(f, !0)) return null; 1914 a = f.getNext() 1915 } 1916 return !a || b && !1 === b(a) ? null : d && d != a.type ? a.getNextSourceNode(!1, d, b) : a 1917 }, 1918 getPreviousSourceNode: function(a, d, b) { 1919 if (b && !b.call) { 1920 var c = b; 1921 b = function(a) { 1922 return !a.equals(c) 1923 } 1924 } 1925 a = !a && this.getLast && this.getLast(); 1926 var f; 1927 if (!a) { 1928 if (this.type == CKEDITOR.NODE_ELEMENT && b && !1 === b(this, !0)) return null; 1929 a = this.getPrevious() 1930 } 1931 for (; !a && (f = (f || this).getParent());) { 1932 if (b && !1 === 1933 b(f, !0)) return null; 1934 a = f.getPrevious() 1935 } 1936 return !a || b && !1 === b(a) ? null : d && a.type != d ? a.getPreviousSourceNode(!1, d, b) : a 1937 }, 1938 getPrevious: function(a) { 1939 var d = this.$, 1940 b; 1941 do b = (d = d.previousSibling) && 10 != d.nodeType && new CKEDITOR.dom.node(d); while (b && a && !a(b)); 1942 return b 1943 }, 1944 getNext: function(a) { 1945 var d = this.$, 1946 b; 1947 do b = (d = d.nextSibling) && new CKEDITOR.dom.node(d); while (b && a && !a(b)); 1948 return b 1949 }, 1950 getParent: function(a) { 1951 var d = this.$.parentNode; 1952 return d && (d.nodeType == CKEDITOR.NODE_ELEMENT || a && d.nodeType == CKEDITOR.NODE_DOCUMENT_FRAGMENT) ? 1953 new CKEDITOR.dom.node(d) : null 1954 }, 1955 getParents: function(a) { 1956 var d = this, 1957 b = []; 1958 do b[a ? "push" : "unshift"](d); while (d = d.getParent()); 1959 return b 1960 }, 1961 getCommonAncestor: function(a) { 1962 if (a.equals(this)) return this; 1963 if (a.contains && a.contains(this)) return a; 1964 var d = this.contains ? this : this.getParent(); 1965 do 1966 if (d.contains(a)) return d; while (d = d.getParent()); 1967 return null 1968 }, 1969 getPosition: function(a) { 1970 var d = this.$, 1971 b = a.$; 1972 if (d.compareDocumentPosition) return d.compareDocumentPosition(b); 1973 if (d == b) return CKEDITOR.POSITION_IDENTICAL; 1974 if (this.type == 1975 CKEDITOR.NODE_ELEMENT && a.type == CKEDITOR.NODE_ELEMENT) { 1976 if (d.contains) { 1977 if (d.contains(b)) return CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING; 1978 if (b.contains(d)) return CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING 1979 } 1980 if ("sourceIndex" in d) return 0 > d.sourceIndex || 0 > b.sourceIndex ? CKEDITOR.POSITION_DISCONNECTED : d.sourceIndex < b.sourceIndex ? CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_FOLLOWING 1981 } 1982 d = this.getAddress(); 1983 a = a.getAddress(); 1984 for (var b = Math.min(d.length, a.length), c = 0; c < b; c++) 1985 if (d[c] != 1986 a[c]) return d[c] < a[c] ? CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_FOLLOWING; 1987 return d.length < a.length ? CKEDITOR.POSITION_CONTAINS + CKEDITOR.POSITION_PRECEDING : CKEDITOR.POSITION_IS_CONTAINED + CKEDITOR.POSITION_FOLLOWING 1988 }, 1989 getAscendant: function(a, d) { 1990 var b = this.$, 1991 c, f; 1992 d || (b = b.parentNode); 1993 "function" == typeof a ? (f = !0, c = a) : (f = !1, c = function(b) { 1994 b = "string" == typeof b.nodeName ? b.nodeName.toLowerCase() : ""; 1995 return "string" == typeof a ? b == a : b in a 1996 }); 1997 for (; b;) { 1998 if (c(f ? new CKEDITOR.dom.node(b) : b)) return new CKEDITOR.dom.node(b); 1999 try { 2000 b = b.parentNode 2001 } catch (h) { 2002 b = null 2003 } 2004 } 2005 return null 2006 }, 2007 hasAscendant: function(a, d) { 2008 var b = this.$; 2009 d || (b = b.parentNode); 2010 for (; b;) { 2011 if (b.nodeName && b.nodeName.toLowerCase() == a) return !0; 2012 b = b.parentNode 2013 } 2014 return !1 2015 }, 2016 move: function(a, d) { 2017 a.append(this.remove(), d) 2018 }, 2019 remove: function(a) { 2020 var d = this.$, 2021 b = d.parentNode; 2022 if (b) { 2023 if (a) 2024 for (; a = d.firstChild;) b.insertBefore(d.removeChild(a), d); 2025 b.removeChild(d) 2026 } 2027 return this 2028 }, 2029 replace: function(a) { 2030 this.insertBefore(a); 2031 a.remove() 2032 }, 2033 trim: function() { 2034 this.ltrim(); 2035 this.rtrim() 2036 }, 2037 ltrim: function() { 2038 for (var a; this.getFirst && 2039 (a = this.getFirst());) { 2040 if (a.type == CKEDITOR.NODE_TEXT) { 2041 var d = CKEDITOR.tools.ltrim(a.getText()), 2042 b = a.getLength(); 2043 if (d) d.length < b && (a.split(b - d.length), this.$.removeChild(this.$.firstChild)); 2044 else { 2045 a.remove(); 2046 continue 2047 } 2048 } 2049 break 2050 } 2051 }, 2052 rtrim: function() { 2053 for (var a; this.getLast && (a = this.getLast());) { 2054 if (a.type == CKEDITOR.NODE_TEXT) { 2055 var d = CKEDITOR.tools.rtrim(a.getText()), 2056 b = a.getLength(); 2057 if (d) d.length < b && (a.split(d.length), this.$.lastChild.parentNode.removeChild(this.$.lastChild)); 2058 else { 2059 a.remove(); 2060 continue 2061 } 2062 } 2063 break 2064 } 2065 CKEDITOR.env.needsBrFiller && 2066 (a = this.$.lastChild) && 1 == a.type && "br" == a.nodeName.toLowerCase() && a.parentNode.removeChild(a) 2067 }, 2068 isReadOnly: function(a) { 2069 var d = this; 2070 this.type != CKEDITOR.NODE_ELEMENT && (d = this.getParent()); 2071 CKEDITOR.env.edge && d && d.is("textarea", "input") && (a = !0); 2072 if (!a && d && "undefined" != typeof d.$.isContentEditable) return !(d.$.isContentEditable || d.data("cke-editable")); 2073 for (; d;) { 2074 if (d.data("cke-editable")) return !1; 2075 if (d.hasAttribute("contenteditable")) return "false" == d.getAttribute("contenteditable"); 2076 d = d.getParent() 2077 } 2078 return !0 2079 } 2080 }); 2081 CKEDITOR.dom.window = function(a) { 2082 CKEDITOR.dom.domObject.call(this, a) 2083 }; 2084 CKEDITOR.dom.window.prototype = new CKEDITOR.dom.domObject; 2085 CKEDITOR.tools.extend(CKEDITOR.dom.window.prototype, { 2086 focus: function() { 2087 this.$.focus() 2088 }, 2089 getViewPaneSize: function() { 2090 var a = this.$.document, 2091 d = "CSS1Compat" == a.compatMode; 2092 return { 2093 width: (d ? a.documentElement.clientWidth : a.body.clientWidth) || 0, 2094 height: (d ? a.documentElement.clientHeight : a.body.clientHeight) || 0 2095 } 2096 }, 2097 getScrollPosition: function() { 2098 var a = this.$; 2099 if ("pageXOffset" in a) return { 2100 x: a.pageXOffset || 0, 2101 y: a.pageYOffset || 0 2102 }; 2103 a = a.document; 2104 return { 2105 x: a.documentElement.scrollLeft || a.body.scrollLeft || 0, 2106 y: a.documentElement.scrollTop || 2107 a.body.scrollTop || 0 2108 } 2109 }, 2110 getFrame: function() { 2111 var a = this.$.frameElement; 2112 return a ? new CKEDITOR.dom.element.get(a) : null 2113 } 2114 }); 2115 CKEDITOR.dom.document = function(a) { 2116 CKEDITOR.dom.domObject.call(this, a) 2117 }; 2118 CKEDITOR.dom.document.prototype = new CKEDITOR.dom.domObject; 2119 CKEDITOR.tools.extend(CKEDITOR.dom.document.prototype, { 2120 type: CKEDITOR.NODE_DOCUMENT, 2121 appendStyleSheet: function(a) { 2122 if (this.$.createStyleSheet) this.$.createStyleSheet(a); 2123 else { 2124 var d = new CKEDITOR.dom.element("link"); 2125 d.setAttributes({ 2126 rel: "stylesheet", 2127 type: "text/css", 2128 href: a 2129 }); 2130 this.getHead().append(d) 2131 } 2132 }, 2133 appendStyleText: function(a) { 2134 if (this.$.createStyleSheet) { 2135 var d = this.$.createStyleSheet(""); 2136 d.cssText = a 2137 } else { 2138 var b = new CKEDITOR.dom.element("style", this); 2139 b.append(new CKEDITOR.dom.text(a, this)); 2140 this.getHead().append(b) 2141 } 2142 return d || 2143 b.$.sheet 2144 }, 2145 createElement: function(a, d) { 2146 var b = new CKEDITOR.dom.element(a, this); 2147 d && (d.attributes && b.setAttributes(d.attributes), d.styles && b.setStyles(d.styles)); 2148 return b 2149 }, 2150 createText: function(a) { 2151 return new CKEDITOR.dom.text(a, this) 2152 }, 2153 focus: function() { 2154 this.getWindow().focus() 2155 }, 2156 getActive: function() { 2157 var a; 2158 try { 2159 a = this.$.activeElement 2160 } catch (d) { 2161 return null 2162 } 2163 return new CKEDITOR.dom.element(a) 2164 }, 2165 getById: function(a) { 2166 return (a = this.$.getElementById(a)) ? new CKEDITOR.dom.element(a) : null 2167 }, 2168 getByAddress: function(a, d) { 2169 for (var b = 2170 this.$.documentElement, c = 0; b && c < a.length; c++) { 2171 var f = a[c]; 2172 if (d) 2173 for (var h = -1, k = 0; k < b.childNodes.length; k++) { 2174 var g = b.childNodes[k]; 2175 if (!0 !== d || 3 != g.nodeType || !g.previousSibling || 3 != g.previousSibling.nodeType) 2176 if (h++, h == f) { 2177 b = g; 2178 break 2179 } 2180 } else b = b.childNodes[f] 2181 } 2182 return b ? new CKEDITOR.dom.node(b) : null 2183 }, 2184 getElementsByTag: function(a, d) { 2185 CKEDITOR.env.ie && 8 >= document.documentMode || !d || (a = d + ":" + a); 2186 return new CKEDITOR.dom.nodeList(this.$.getElementsByTagName(a)) 2187 }, 2188 getHead: function() { 2189 var a = this.$.getElementsByTagName("head")[0]; 2190 return a = a ? new CKEDITOR.dom.element(a) : this.getDocumentElement().append(new CKEDITOR.dom.element("head"), !0) 2191 }, 2192 getBody: function() { 2193 return new CKEDITOR.dom.element(this.$.body) 2194 }, 2195 getDocumentElement: function() { 2196 return new CKEDITOR.dom.element(this.$.documentElement) 2197 }, 2198 getWindow: function() { 2199 return new CKEDITOR.dom.window(this.$.parentWindow || this.$.defaultView) 2200 }, 2201 write: function(a) { 2202 this.$.open("text/html", "replace"); 2203 CKEDITOR.env.ie && (a = a.replace(/(?:^\s*<!DOCTYPE[^>]*?>)|^/i, '$\x26\n\x3cscript data-cke-temp\x3d"1"\x3e(' + 2204 CKEDITOR.tools.fixDomain + ")();\x3c/script\x3e")); 2205 this.$.write(a); 2206 this.$.close() 2207 }, 2208 find: function(a) { 2209 return new CKEDITOR.dom.nodeList(this.$.querySelectorAll(a)) 2210 }, 2211 findOne: function(a) { 2212 return (a = this.$.querySelector(a)) ? new CKEDITOR.dom.element(a) : null 2213 }, 2214 _getHtml5ShivFrag: function() { 2215 var a = this.getCustomData("html5ShivFrag"); 2216 a || (a = this.$.createDocumentFragment(), CKEDITOR.tools.enableHtml5Elements(a, !0), this.setCustomData("html5ShivFrag", a)); 2217 return a 2218 } 2219 }); 2220 CKEDITOR.dom.nodeList = function(a) { 2221 this.$ = a 2222 }; 2223 CKEDITOR.dom.nodeList.prototype = { 2224 count: function() { 2225 return this.$.length 2226 }, 2227 getItem: function(a) { 2228 return 0 > a || a >= this.$.length ? null : (a = this.$[a]) ? new CKEDITOR.dom.node(a) : null 2229 }, 2230 toArray: function() { 2231 return CKEDITOR.tools.array.map(this.$, function(a) { 2232 return new CKEDITOR.dom.node(a) 2233 }) 2234 } 2235 }; 2236 CKEDITOR.dom.element = function(a, d) { 2237 "string" == typeof a && (a = (d ? d.$ : document).createElement(a)); 2238 CKEDITOR.dom.domObject.call(this, a) 2239 }; 2240 CKEDITOR.dom.element.get = function(a) { 2241 return (a = "string" == typeof a ? document.getElementById(a) || document.getElementsByName(a)[0] : a) && (a.$ ? a : new CKEDITOR.dom.element(a)) 2242 }; 2243 CKEDITOR.dom.element.prototype = new CKEDITOR.dom.node; 2244 CKEDITOR.dom.element.createFromHtml = function(a, d) { 2245 var b = new CKEDITOR.dom.element("div", d); 2246 b.setHtml(a); 2247 return b.getFirst().remove() 2248 }; 2249 CKEDITOR.dom.element.setMarker = function(a, d, b, c) { 2250 var f = d.getCustomData("list_marker_id") || d.setCustomData("list_marker_id", CKEDITOR.tools.getNextNumber()).getCustomData("list_marker_id"), 2251 h = d.getCustomData("list_marker_names") || d.setCustomData("list_marker_names", {}).getCustomData("list_marker_names"); 2252 a[f] = d; 2253 h[b] = 1; 2254 return d.setCustomData(b, c) 2255 }; 2256 CKEDITOR.dom.element.clearAllMarkers = function(a) { 2257 for (var d in a) CKEDITOR.dom.element.clearMarkers(a, a[d], 1) 2258 }; 2259 CKEDITOR.dom.element.clearMarkers = function(a, d, b) { 2260 var c = d.getCustomData("list_marker_names"), 2261 f = d.getCustomData("list_marker_id"), 2262 h; 2263 for (h in c) d.removeCustomData(h); 2264 d.removeCustomData("list_marker_names"); 2265 b && (d.removeCustomData("list_marker_id"), delete a[f]) 2266 }; 2267 (function() { 2268 function a(a, b) { 2269 return -1 < (" " + a + " ").replace(h, " ").indexOf(" " + b + " ") 2270 } 2271 2272 function d(a) { 2273 var b = !0; 2274 a.$.id || (a.$.id = "cke_tmp_" + CKEDITOR.tools.getNextNumber(), b = !1); 2275 return function() { 2276 b || a.removeAttribute("id") 2277 } 2278 } 2279 2280 function b(a, b) { 2281 var c = CKEDITOR.tools.escapeCss(a.$.id); 2282 return "#" + c + " " + b.split(/,\s*/).join(", #" + c + " ") 2283 } 2284 2285 function c(a) { 2286 for (var b = 0, c = 0, e = k[a].length; c < e; c++) b += parseFloat(this.getComputedStyle(k[a][c]) || 0, 10) || 0; 2287 return b 2288 } 2289 var f = document.createElement("_").classList, 2290 f = "undefined" !== typeof f && 2291 null !== String(f.add).match(/\[Native code\]/gi), 2292 h = /[\n\t\r]/g; 2293 CKEDITOR.tools.extend(CKEDITOR.dom.element.prototype, { 2294 type: CKEDITOR.NODE_ELEMENT, 2295 addClass: f ? function(a) { 2296 this.$.classList.add(a); 2297 return this 2298 } : function(b) { 2299 var c = this.$.className; 2300 c && (a(c, b) || (c += " " + b)); 2301 this.$.className = c || b; 2302 return this 2303 }, 2304 removeClass: f ? function(a) { 2305 var b = this.$; 2306 b.classList.remove(a); 2307 b.className || b.removeAttribute("class"); 2308 return this 2309 } : function(b) { 2310 var c = this.getAttribute("class"); 2311 c && a(c, b) && ((c = c.replace(new RegExp("(?:^|\\s+)" + 2312 b + "(?\x3d\\s|$)"), "").replace(/^\s+/, "")) ? this.setAttribute("class", c) : this.removeAttribute("class")); 2313 return this 2314 }, 2315 hasClass: function(b) { 2316 return a(this.$.className, b) 2317 }, 2318 append: function(a, b) { 2319 "string" == typeof a && (a = this.getDocument().createElement(a)); 2320 b ? this.$.insertBefore(a.$, this.$.firstChild) : this.$.appendChild(a.$); 2321 return a 2322 }, 2323 appendHtml: function(a) { 2324 if (this.$.childNodes.length) { 2325 var b = new CKEDITOR.dom.element("div", this.getDocument()); 2326 b.setHtml(a); 2327 b.moveChildren(this) 2328 } else this.setHtml(a) 2329 }, 2330 appendText: function(a) { 2331 null != 2332 this.$.text && CKEDITOR.env.ie && 9 > CKEDITOR.env.version ? this.$.text += a : this.append(new CKEDITOR.dom.text(a)) 2333 }, 2334 appendBogus: function(a) { 2335 if (a || CKEDITOR.env.needsBrFiller) { 2336 for (a = this.getLast(); a && a.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.rtrim(a.getText());) a = a.getPrevious(); 2337 a && a.is && a.is("br") || (a = this.getDocument().createElement("br"), CKEDITOR.env.gecko && a.setAttribute("type", "_moz"), this.append(a)) 2338 } 2339 }, 2340 breakParent: function(a, b) { 2341 var c = new CKEDITOR.dom.range(this.getDocument()); 2342 c.setStartAfter(this); 2343 c.setEndAfter(a); 2344 var e = c.extractContents(!1, b || !1), 2345 d; 2346 c.insertNode(this.remove()); 2347 if (CKEDITOR.env.ie && !CKEDITOR.env.edge) { 2348 for (c = new CKEDITOR.dom.element("div"); d = e.getFirst();) d.$.style.backgroundColor && (d.$.style.backgroundColor = d.$.style.backgroundColor), c.append(d); 2349 c.insertAfter(this); 2350 c.remove(!0) 2351 } else e.insertAfterNode(this) 2352 }, 2353 contains: document.compareDocumentPosition ? function(a) { 2354 return !!(this.$.compareDocumentPosition(a.$) & 16) 2355 } : function(a) { 2356 var b = this.$; 2357 return a.type != CKEDITOR.NODE_ELEMENT ? b.contains(a.getParent().$) : 2358 b != a.$ && b.contains(a.$) 2359 }, 2360 focus: function() { 2361 function a() { 2362 try { 2363 this.$.focus() 2364 } catch (b) {} 2365 } 2366 return function(b) { 2367 b ? CKEDITOR.tools.setTimeout(a, 100, this) : a.call(this) 2368 } 2369 }(), 2370 getHtml: function() { 2371 var a = this.$.innerHTML; 2372 return CKEDITOR.env.ie ? a.replace(/<\?[^>]*>/g, "") : a 2373 }, 2374 getOuterHtml: function() { 2375 if (this.$.outerHTML) return this.$.outerHTML.replace(/<\?[^>]*>/, ""); 2376 var a = this.$.ownerDocument.createElement("div"); 2377 a.appendChild(this.$.cloneNode(!0)); 2378 return a.innerHTML 2379 }, 2380 getClientRect: function(a) { 2381 var b = CKEDITOR.tools.extend({}, 2382 this.$.getBoundingClientRect()); 2383 !b.width && (b.width = b.right - b.left); 2384 !b.height && (b.height = b.bottom - b.top); 2385 return a ? CKEDITOR.tools.getAbsoluteRectPosition(this.getWindow(), b) : b 2386 }, 2387 setHtml: CKEDITOR.env.ie && 9 > CKEDITOR.env.version ? function(a) { 2388 try { 2389 var b = this.$; 2390 if (this.getParent()) return b.innerHTML = a; 2391 var c = this.getDocument()._getHtml5ShivFrag(); 2392 c.appendChild(b); 2393 b.innerHTML = a; 2394 c.removeChild(b); 2395 return a 2396 } catch (e) { 2397 this.$.innerHTML = ""; 2398 b = new CKEDITOR.dom.element("body", this.getDocument()); 2399 b.$.innerHTML = a; 2400 for (b = b.getChildren(); b.count();) this.append(b.getItem(0)); 2401 return a 2402 } 2403 } : function(a) { 2404 return this.$.innerHTML = a 2405 }, 2406 setText: function() { 2407 var a = document.createElement("p"); 2408 a.innerHTML = "x"; 2409 a = a.textContent; 2410 return function(b) { 2411 this.$[a ? "textContent" : "innerText"] = b 2412 } 2413 }(), 2414 getAttribute: function() { 2415 var a = function(a) { 2416 return this.$.getAttribute(a, 2) 2417 }; 2418 return CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks) ? function(a) { 2419 switch (a) { 2420 case "class": 2421 a = "className"; 2422 break; 2423 case "http-equiv": 2424 a = "httpEquiv"; 2425 break; 2426 case "name": 2427 return this.$.name; 2428 case "tabindex": 2429 return a = this.$.getAttribute(a, 2430 2), 0 !== a && 0 === this.$.tabIndex && (a = null), a; 2431 case "checked": 2432 return a = this.$.attributes.getNamedItem(a), (a.specified ? a.nodeValue : this.$.checked) ? "checked" : null; 2433 case "hspace": 2434 case "value": 2435 return this.$[a]; 2436 case "style": 2437 return this.$.style.cssText; 2438 case "contenteditable": 2439 case "contentEditable": 2440 return this.$.attributes.getNamedItem("contentEditable").specified ? this.$.getAttribute("contentEditable") : null 2441 } 2442 return this.$.getAttribute(a, 2) 2443 } : a 2444 }(), 2445 getAttributes: function(a) { 2446 var b = {}, 2447 c = this.$.attributes, 2448 e; 2449 a = CKEDITOR.tools.isArray(a) ? 2450 a : []; 2451 for (e = 0; e < c.length; e++) - 1 === CKEDITOR.tools.indexOf(a, c[e].name) && (b[c[e].name] = c[e].value); 2452 return b 2453 }, 2454 getChildren: function() { 2455 return new CKEDITOR.dom.nodeList(this.$.childNodes) 2456 }, 2457 getComputedStyle: document.defaultView && document.defaultView.getComputedStyle ? function(a) { 2458 var b = this.getWindow().$.getComputedStyle(this.$, null); 2459 return b ? b.getPropertyValue(a) : "" 2460 } : function(a) { 2461 return this.$.currentStyle[CKEDITOR.tools.cssStyleToDomStyle(a)] 2462 }, 2463 getDtd: function() { 2464 var a = CKEDITOR.dtd[this.getName()]; 2465 this.getDtd = 2466 function() { 2467 return a 2468 }; 2469 return a 2470 }, 2471 getElementsByTag: CKEDITOR.dom.document.prototype.getElementsByTag, 2472 getTabIndex: function() { 2473 var a = this.$.tabIndex; 2474 return 0 !== a || CKEDITOR.dtd.$tabIndex[this.getName()] || 0 === parseInt(this.getAttribute("tabindex"), 10) ? a : -1 2475 }, 2476 getText: function() { 2477 return this.$.textContent || this.$.innerText || "" 2478 }, 2479 getWindow: function() { 2480 return this.getDocument().getWindow() 2481 }, 2482 getId: function() { 2483 return this.$.id || null 2484 }, 2485 getNameAtt: function() { 2486 return this.$.name || null 2487 }, 2488 getName: function() { 2489 var a = this.$.nodeName.toLowerCase(); 2490 if (CKEDITOR.env.ie && 8 >= document.documentMode) { 2491 var b = this.$.scopeName; 2492 "HTML" != b && (a = b.toLowerCase() + ":" + a) 2493 } 2494 this.getName = function() { 2495 return a 2496 }; 2497 return this.getName() 2498 }, 2499 getValue: function() { 2500 return this.$.value 2501 }, 2502 getFirst: function(a) { 2503 var b = this.$.firstChild; 2504 (b = b && new CKEDITOR.dom.node(b)) && a && !a(b) && (b = b.getNext(a)); 2505 return b 2506 }, 2507 getLast: function(a) { 2508 var b = this.$.lastChild; 2509 (b = b && new CKEDITOR.dom.node(b)) && a && !a(b) && (b = b.getPrevious(a)); 2510 return b 2511 }, 2512 getStyle: function(a) { 2513 return this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)] 2514 }, 2515 is: function() { 2516 var a = this.getName(); 2517 if ("object" == typeof arguments[0]) return !!arguments[0][a]; 2518 for (var b = 0; b < arguments.length; b++) 2519 if (arguments[b] == a) return !0; 2520 return !1 2521 }, 2522 isEditable: function(a) { 2523 var b = this.getName(); 2524 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] || 2525 CKEDITOR.dtd.span, !(!a || !a["#"])) : !0 2526 }, 2527 isIdentical: function(a) { 2528 var b = this.clone(0, 1); 2529 a = a.clone(0, 1); 2530 b.removeAttributes(["_moz_dirty", "data-cke-expando", "data-cke-saved-href", "data-cke-saved-name"]); 2531 a.removeAttributes(["_moz_dirty", "data-cke-expando", "data-cke-saved-href", "data-cke-saved-name"]); 2532 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.$); 2533 b = b.getOuterHtml(); 2534 a = 2535 a.getOuterHtml(); 2536 if (CKEDITOR.env.ie && 9 > CKEDITOR.env.version && this.is("a")) { 2537 var c = this.getParent(); 2538 c.type == CKEDITOR.NODE_ELEMENT && (c = c.clone(), c.setHtml(b), b = c.getHtml(), c.setHtml(a), a = c.getHtml()) 2539 } 2540 return b == a 2541 }, 2542 isVisible: function() { 2543 var a = (this.$.offsetHeight || this.$.offsetWidth) && "hidden" != this.getComputedStyle("visibility"), 2544 b, c; 2545 a && CKEDITOR.env.webkit && (b = this.getWindow(), !b.equals(CKEDITOR.document.getWindow()) && (c = b.$.frameElement) && (a = (new CKEDITOR.dom.element(c)).isVisible())); 2546 return !!a 2547 }, 2548 isEmptyInlineRemoveable: function() { 2549 if (!CKEDITOR.dtd.$removeEmpty[this.getName()]) return !1; 2550 for (var a = this.getChildren(), b = 0, c = a.count(); b < c; b++) { 2551 var e = a.getItem(b); 2552 if (e.type != CKEDITOR.NODE_ELEMENT || !e.data("cke-bookmark")) 2553 if (e.type == CKEDITOR.NODE_ELEMENT && !e.isEmptyInlineRemoveable() || e.type == CKEDITOR.NODE_TEXT && CKEDITOR.tools.trim(e.getText())) return !1 2554 } 2555 return !0 2556 }, 2557 hasAttributes: CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks) ? function() { 2558 for (var a = this.$.attributes, b = 0; b < a.length; b++) { 2559 var c = a[b]; 2560 switch (c.nodeName) { 2561 case "class": 2562 if (this.getAttribute("class")) return !0; 2563 case "data-cke-expando": 2564 continue; 2565 default: 2566 if (c.specified) return !0 2567 } 2568 } 2569 return !1 2570 } : function() { 2571 var a = this.$.attributes, 2572 b = a.length, 2573 c = { 2574 "data-cke-expando": 1, 2575 _moz_dirty: 1 2576 }; 2577 return 0 < b && (2 < b || !c[a[0].nodeName] || 2 == b && !c[a[1].nodeName]) 2578 }, 2579 hasAttribute: function() { 2580 function a(b) { 2581 var c = this.$.attributes.getNamedItem(b); 2582 if ("input" == this.getName()) switch (b) { 2583 case "class": 2584 return 0 < this.$.className.length; 2585 case "checked": 2586 return !!this.$.checked; 2587 case "value": 2588 return b = this.getAttribute("type"), "checkbox" == b || "radio" == b ? "on" != this.$.value : !!this.$.value 2589 } 2590 return c ? 2591 c.specified : !1 2592 } 2593 return CKEDITOR.env.ie ? 8 > CKEDITOR.env.version ? function(b) { 2594 return "name" == b ? !!this.$.name : a.call(this, b) 2595 } : a : function(a) { 2596 return !!this.$.attributes.getNamedItem(a) 2597 } 2598 }(), 2599 hide: function() { 2600 this.setStyle("display", "none") 2601 }, 2602 moveChildren: function(a, b) { 2603 var c = this.$; 2604 a = a.$; 2605 if (c != a) { 2606 var e; 2607 if (b) 2608 for (; e = c.lastChild;) a.insertBefore(c.removeChild(e), a.firstChild); 2609 else 2610 for (; e = c.firstChild;) a.appendChild(c.removeChild(e)) 2611 } 2612 }, 2613 mergeSiblings: function() { 2614 function a(b, c, e) { 2615 if (c && c.type == CKEDITOR.NODE_ELEMENT) { 2616 for (var d = []; c.data("cke-bookmark") || c.isEmptyInlineRemoveable();) 2617 if (d.push(c), c = e ? c.getNext() : c.getPrevious(), !c || c.type != CKEDITOR.NODE_ELEMENT) return; 2618 if (b.isIdentical(c)) { 2619 for (var g = e ? b.getLast() : b.getFirst(); d.length;) d.shift().move(b, !e); 2620 c.moveChildren(b, !e); 2621 c.remove(); 2622 g && g.type == CKEDITOR.NODE_ELEMENT && g.mergeSiblings() 2623 } 2624 } 2625 } 2626 return function(b) { 2627 if (!1 === b || CKEDITOR.dtd.$removeEmpty[this.getName()] || this.is("a")) a(this, this.getNext(), !0), a(this, this.getPrevious()) 2628 } 2629 }(), 2630 show: function() { 2631 this.setStyles({ 2632 display: "", 2633 visibility: "" 2634 }) 2635 }, 2636 setAttribute: function() { 2637 var a = function(a, b) { 2638 this.$.setAttribute(a, b); 2639 return this 2640 }; 2641 return CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks) ? function(b, c) { 2642 "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); 2643 return this 2644 } : CKEDITOR.env.ie8Compat && CKEDITOR.env.secure ? function(b, c) { 2645 if ("src" == b && c.match(/^http:\/\//)) try { 2646 a.apply(this, 2647 arguments) 2648 } catch (e) {} else a.apply(this, arguments); 2649 return this 2650 } : a 2651 }(), 2652 setAttributes: function(a) { 2653 for (var b in a) this.setAttribute(b, a[b]); 2654 return this 2655 }, 2656 setValue: function(a) { 2657 this.$.value = a; 2658 return this 2659 }, 2660 removeAttribute: function() { 2661 var a = function(a) { 2662 this.$.removeAttribute(a) 2663 }; 2664 return CKEDITOR.env.ie && (CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks) ? function(a) { 2665 "class" == a ? a = "className" : "tabindex" == a ? a = "tabIndex" : "contenteditable" == a && (a = "contentEditable"); 2666 this.$.removeAttribute(a) 2667 } : a 2668 }(), 2669 removeAttributes: function(a) { 2670 if (CKEDITOR.tools.isArray(a)) 2671 for (var b = 2672 0; b < a.length; b++) this.removeAttribute(a[b]); 2673 else 2674 for (b in a = a || this.getAttributes(), a) a.hasOwnProperty(b) && this.removeAttribute(b) 2675 }, 2676 removeStyle: function(a) { 2677 var b = this.$.style; 2678 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"); 2679 else { 2680 var c = ["top", "left", "right", "bottom"], 2681 e; 2682 "border" == a && (e = ["color", "style", "width"]); 2683 for (var b = [], d = 0; d < c.length; d++) 2684 if (e) 2685 for (var v = 2686 0; v < e.length; v++) b.push([a, c[d], e[v]].join("-")); 2687 else b.push([a, c[d]].join("-")); 2688 for (a = 0; a < b.length; a++) this.removeStyle(b[a]) 2689 } 2690 }, 2691 setStyle: function(a, b) { 2692 this.$.style[CKEDITOR.tools.cssStyleToDomStyle(a)] = b; 2693 return this 2694 }, 2695 setStyles: function(a) { 2696 for (var b in a) this.setStyle(b, a[b]); 2697 return this 2698 }, 2699 setOpacity: function(a) { 2700 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) 2701 }, 2702 unselectable: function() { 2703 this.setStyles(CKEDITOR.tools.cssVendorPrefix("user-select", 2704 "none")); 2705 if (CKEDITOR.env.ie) { 2706 this.setAttribute("unselectable", "on"); 2707 for (var a, b = this.getElementsByTag("*"), c = 0, e = b.count(); c < e; c++) a = b.getItem(c), a.setAttribute("unselectable", "on") 2708 } 2709 }, 2710 getPositionedAncestor: function() { 2711 for (var a = this; 2712 "html" != a.getName();) { 2713 if ("static" != a.getComputedStyle("position")) return a; 2714 a = a.getParent() 2715 } 2716 return null 2717 }, 2718 getDocumentPosition: function(a) { 2719 var b = 0, 2720 c = 0, 2721 e = this.getDocument(), 2722 d = e.getBody(), 2723 v = "BackCompat" == e.$.compatMode; 2724 if (document.documentElement.getBoundingClientRect && (CKEDITOR.env.ie ? 2725 8 !== CKEDITOR.env.version : 1)) { 2726 var f = this.$.getBoundingClientRect(), 2727 h = e.$.documentElement, 2728 x = h.clientTop || d.$.clientTop || 0, 2729 m = h.clientLeft || d.$.clientLeft || 0, 2730 k = !0; 2731 CKEDITOR.env.ie && (k = e.getDocumentElement().contains(this), e = e.getBody().contains(this), k = v && e || !v && k); 2732 k && (CKEDITOR.env.webkit || CKEDITOR.env.ie && 12 <= CKEDITOR.env.version ? (b = d.$.scrollLeft || h.scrollLeft, c = d.$.scrollTop || h.scrollTop) : (c = v ? d.$ : h, b = c.scrollLeft, c = c.scrollTop), b = f.left + b - m, c = f.top + c - x) 2733 } else 2734 for (x = this, m = null; x && "body" != x.getName() && 2735 "html" != x.getName();) { 2736 b += x.$.offsetLeft - x.$.scrollLeft; 2737 c += x.$.offsetTop - x.$.scrollTop; 2738 x.equals(this) || (b += x.$.clientLeft || 0, c += x.$.clientTop || 0); 2739 for (; m && !m.equals(x);) b -= m.$.scrollLeft, c -= m.$.scrollTop, m = m.getParent(); 2740 m = x; 2741 x = (f = x.$.offsetParent) ? new CKEDITOR.dom.element(f) : null 2742 } 2743 a && (f = this.getWindow(), x = a.getWindow(), !f.equals(x) && f.$.frameElement && (a = (new CKEDITOR.dom.element(f.$.frameElement)).getDocumentPosition(a), b += a.x, c += a.y)); 2744 document.documentElement.getBoundingClientRect || !CKEDITOR.env.gecko || 2745 v || (b += this.$.clientLeft ? 1 : 0, c += this.$.clientTop ? 1 : 0); 2746 return { 2747 x: b, 2748 y: c 2749 } 2750 }, 2751 scrollIntoView: function(a) { 2752 var b = this.getParent(); 2753 if (b) { 2754 do 2755 if ((b.$.clientWidth && b.$.clientWidth < b.$.scrollWidth || b.$.clientHeight && b.$.clientHeight < b.$.scrollHeight) && !b.is("body") && this.scrollIntoParent(b, a, 1), b.is("html")) { 2756 var c = b.getWindow(); 2757 try { 2758 var e = c.$.frameElement; 2759 e && (b = new CKEDITOR.dom.element(e)) 2760 } catch (d) {} 2761 } while (b = b.getParent()) 2762 } 2763 }, 2764 scrollIntoParent: function(a, b, c) { 2765 var e, d, v, f; 2766 2767 function h(b, c) { 2768 /body|html/.test(a.getName()) ? 2769 a.getWindow().$.scrollBy(b, c) : (a.$.scrollLeft += b, a.$.scrollTop += c) 2770 } 2771 2772 function x(a, b) { 2773 var c = { 2774 x: 0, 2775 y: 0 2776 }; 2777 if (!a.is(k ? "body" : "html")) { 2778 var e = a.$.getBoundingClientRect(); 2779 c.x = e.left; 2780 c.y = e.top 2781 } 2782 e = a.getWindow(); 2783 e.equals(b) || (e = x(CKEDITOR.dom.element.get(e.$.frameElement), b), c.x += e.x, c.y += e.y); 2784 return c 2785 } 2786 2787 function m(a, b) { 2788 return parseInt(a.getComputedStyle("margin-" + b) || 0, 10) || 0 2789 }!a && (a = this.getWindow()); 2790 v = a.getDocument(); 2791 var k = "BackCompat" == v.$.compatMode; 2792 a instanceof CKEDITOR.dom.window && (a = k ? v.getBody() : v.getDocumentElement()); 2793 CKEDITOR.env.webkit && (v = this.getEditor(!1)) && (v._.previousScrollTop = null); 2794 v = a.getWindow(); 2795 d = x(this, v); 2796 var u = x(a, v), 2797 K = this.$.offsetHeight; 2798 e = this.$.offsetWidth; 2799 var l = a.$.clientHeight, 2800 t = a.$.clientWidth; 2801 v = d.x - m(this, "left") - u.x || 0; 2802 f = d.y - m(this, "top") - u.y || 0; 2803 e = d.x + e + m(this, "right") - (u.x + t) || 0; 2804 d = d.y + K + m(this, "bottom") - (u.y + l) || 0; 2805 (0 > f || 0 < d) && h(0, !0 === b ? f : !1 === b ? d : 0 > f ? f : d); 2806 c && (0 > v || 0 < e) && h(0 > v ? v : e, 0) 2807 }, 2808 setState: function(a, b, c) { 2809 b = b || "cke"; 2810 switch (a) { 2811 case CKEDITOR.TRISTATE_ON: 2812 this.addClass(b + "_on"); 2813 this.removeClass(b + 2814 "_off"); 2815 this.removeClass(b + "_disabled"); 2816 c && this.setAttribute("aria-pressed", !0); 2817 c && this.removeAttribute("aria-disabled"); 2818 break; 2819 case CKEDITOR.TRISTATE_DISABLED: 2820 this.addClass(b + "_disabled"); 2821 this.removeClass(b + "_off"); 2822 this.removeClass(b + "_on"); 2823 c && this.setAttribute("aria-disabled", !0); 2824 c && this.removeAttribute("aria-pressed"); 2825 break; 2826 default: 2827 this.addClass(b + "_off"), this.removeClass(b + "_on"), this.removeClass(b + "_disabled"), c && this.removeAttribute("aria-pressed"), c && this.removeAttribute("aria-disabled") 2828 } 2829 }, 2830 getFrameDocument: function() { 2831 var a = this.$; 2832 try { 2833 a.contentWindow.document 2834 } catch (b) { 2835 a.src = a.src 2836 } 2837 return a && new CKEDITOR.dom.document(a.contentWindow.document) 2838 }, 2839 copyAttributes: function(a, b) { 2840 var c = this.$.attributes; 2841 b = b || {}; 2842 for (var e = 0; e < c.length; e++) { 2843 var d = c[e], 2844 v = d.nodeName.toLowerCase(), 2845 f; 2846 if (!(v in b)) 2847 if ("checked" == v && (f = this.getAttribute(v))) a.setAttribute(v, f); 2848 else if (!CKEDITOR.env.ie || this.hasAttribute(v)) f = this.getAttribute(v), null === f && (f = d.nodeValue), a.setAttribute(v, f) 2849 } 2850 "" !== this.$.style.cssText && 2851 (a.$.style.cssText = this.$.style.cssText) 2852 }, 2853 renameNode: function(a) { 2854 if (this.getName() != a) { 2855 var b = this.getDocument(); 2856 a = new CKEDITOR.dom.element(a, b); 2857 this.copyAttributes(a); 2858 this.moveChildren(a); 2859 this.getParent(!0) && this.$.parentNode.replaceChild(a.$, this.$); 2860 a.$["data-cke-expando"] = this.$["data-cke-expando"]; 2861 this.$ = a.$; 2862 delete this.getName 2863 } 2864 }, 2865 getChild: function() { 2866 function a(b, c) { 2867 var e = b.childNodes; 2868 if (0 <= c && c < e.length) return e[c] 2869 } 2870 return function(b) { 2871 var c = this.$; 2872 if (b.slice) 2873 for (b = b.slice(); 0 < b.length && c;) c = a(c, 2874 b.shift()); 2875 else c = a(c, b); 2876 return c ? new CKEDITOR.dom.node(c) : null 2877 } 2878 }(), 2879 getChildCount: function() { 2880 return this.$.childNodes.length 2881 }, 2882 disableContextMenu: function() { 2883 function a(b) { 2884 return b.type == CKEDITOR.NODE_ELEMENT && b.hasClass("cke_enable_context_menu") 2885 } 2886 this.on("contextmenu", function(b) { 2887 b.data.getTarget().getAscendant(a, !0) || b.data.preventDefault() 2888 }) 2889 }, 2890 getDirection: function(a) { 2891 return a ? this.getComputedStyle("direction") || this.getDirection() || this.getParent() && this.getParent().getDirection(1) || this.getDocument().$.dir || 2892 "ltr" : this.getStyle("direction") || this.getAttribute("dir") 2893 }, 2894 data: function(a, b) { 2895 a = "data-" + a; 2896 if (void 0 === b) return this.getAttribute(a); 2897 !1 === b ? this.removeAttribute(a) : this.setAttribute(a, b); 2898 return null 2899 }, 2900 getEditor: function(a) { 2901 var b = CKEDITOR.instances, 2902 c, e, d; 2903 a = a || void 0 === a; 2904 for (c in b) 2905 if (e = b[c], e.element.equals(this) && e.elementMode != CKEDITOR.ELEMENT_MODE_APPENDTO || !a && (d = e.editable()) && (d.equals(this) || d.contains(this))) return e; 2906 return null 2907 }, 2908 find: function(a) { 2909 var c = d(this); 2910 a = new CKEDITOR.dom.nodeList(this.$.querySelectorAll(b(this, 2911 a))); 2912 c(); 2913 return a 2914 }, 2915 findOne: function(a) { 2916 var c = d(this); 2917 a = this.$.querySelector(b(this, a)); 2918 c(); 2919 return a ? new CKEDITOR.dom.element(a) : null 2920 }, 2921 forEach: function(a, b, c) { 2922 if (!(c || b && this.type != b)) var e = a(this); 2923 if (!1 !== e) { 2924 c = this.getChildren(); 2925 for (var d = 0; d < c.count(); d++) e = c.getItem(d), e.type == CKEDITOR.NODE_ELEMENT ? e.forEach(a, b) : b && e.type != b || a(e) 2926 } 2927 } 2928 }); 2929 var k = { 2930 width: ["border-left-width", "border-right-width", "padding-left", "padding-right"], 2931 height: ["border-top-width", "border-bottom-width", "padding-top", "padding-bottom"] 2932 }; 2933 CKEDITOR.dom.element.prototype.setSize = function(a, b, d) { 2934 "number" == typeof b && (!d || CKEDITOR.env.ie && CKEDITOR.env.quirks || (b -= c.call(this, a)), this.setStyle(a, b + "px")) 2935 }; 2936 CKEDITOR.dom.element.prototype.getSize = function(a, b) { 2937 var d = Math.max(this.$["offset" + CKEDITOR.tools.capitalize(a)], this.$["client" + CKEDITOR.tools.capitalize(a)]) || 0; 2938 b && (d -= c.call(this, a)); 2939 return d 2940 } 2941 })(); 2942 CKEDITOR.dom.documentFragment = function(a) { 2943 a = a || CKEDITOR.document; 2944 this.$ = a.type == CKEDITOR.NODE_DOCUMENT ? a.$.createDocumentFragment() : a 2945 }; 2946 CKEDITOR.tools.extend(CKEDITOR.dom.documentFragment.prototype, CKEDITOR.dom.element.prototype, { 2947 type: CKEDITOR.NODE_DOCUMENT_FRAGMENT, 2948 insertAfterNode: function(a) { 2949 a = a.$; 2950 a.parentNode.insertBefore(this.$, a.nextSibling) 2951 }, 2952 getHtml: function() { 2953 var a = new CKEDITOR.dom.element("div"); 2954 this.clone(1, 1).appendTo(a); 2955 return a.getHtml().replace(/\s*data-cke-expando=".*?"/g, "") 2956 } 2957 }, !0, { 2958 append: 1, 2959 appendBogus: 1, 2960 clone: 1, 2961 getFirst: 1, 2962 getHtml: 1, 2963 getLast: 1, 2964 getParent: 1, 2965 getNext: 1, 2966 getPrevious: 1, 2967 appendTo: 1, 2968 moveChildren: 1, 2969 insertBefore: 1, 2970 insertAfterNode: 1, 2971 replace: 1, 2972 trim: 1, 2973 type: 1, 2974 ltrim: 1, 2975 rtrim: 1, 2976 getDocument: 1, 2977 getChildCount: 1, 2978 getChild: 1, 2979 getChildren: 1 2980 }); 2981 (function() { 2982 function a(a, b) { 2983 var c = this.range; 2984 if (this._.end) return null; 2985 if (!this._.start) { 2986 this._.start = 1; 2987 if (c.collapsed) return this.end(), null; 2988 c.optimize() 2989 } 2990 var e, d = c.startContainer; 2991 e = c.endContainer; 2992 var f = c.startOffset, 2993 y = c.endOffset, 2994 h, l = this.guard, 2995 t = this.type, 2996 g = a ? "getPreviousSourceNode" : "getNextSourceNode"; 2997 if (!a && !this._.guardLTR) { 2998 var L = e.type == CKEDITOR.NODE_ELEMENT ? e : e.getParent(), 2999 C = e.type == CKEDITOR.NODE_ELEMENT ? e.getChild(y) : e.getNext(); 3000 this._.guardLTR = function(a, b) { 3001 return (!b || !L.equals(a)) && (!C || 3002 !a.equals(C)) && (a.type != CKEDITOR.NODE_ELEMENT || !b || !a.equals(c.root)) 3003 } 3004 } 3005 if (a && !this._.guardRTL) { 3006 var k = d.type == CKEDITOR.NODE_ELEMENT ? d : d.getParent(), 3007 q = d.type == CKEDITOR.NODE_ELEMENT ? f ? d.getChild(f - 1) : null : d.getPrevious(); 3008 this._.guardRTL = function(a, b) { 3009 return (!b || !k.equals(a)) && (!q || !a.equals(q)) && (a.type != CKEDITOR.NODE_ELEMENT || !b || !a.equals(c.root)) 3010 } 3011 } 3012 var E = a ? this._.guardRTL : this._.guardLTR; 3013 h = l ? function(a, b) { 3014 return !1 === E(a, b) ? !1 : l(a, b) 3015 } : E; 3016 this.current ? e = this.current[g](!1, t, h) : (a ? e.type == CKEDITOR.NODE_ELEMENT && 3017 (e = 0 < y ? e.getChild(y - 1) : !1 === h(e, !0) ? null : e.getPreviousSourceNode(!0, t, h)) : (e = d, e.type == CKEDITOR.NODE_ELEMENT && ((e = e.getChild(f)) || (e = !1 === h(d, !0) ? null : d.getNextSourceNode(!0, t, h)))), e && !1 === h(e) && (e = null)); 3018 for (; e && !this._.end;) { 3019 this.current = e; 3020 if (!this.evaluator || !1 !== this.evaluator(e)) { 3021 if (!b) return e 3022 } else if (b && this.evaluator) return !1; 3023 e = e[g](!1, t, h) 3024 } 3025 this.end(); 3026 return this.current = null 3027 } 3028 3029 function d(b) { 3030 for (var c, e = null; c = a.call(this, b);) e = c; 3031 return e 3032 } 3033 CKEDITOR.dom.walker = CKEDITOR.tools.createClass({ 3034 $: function(a) { 3035 this.range = 3036 a; 3037 this._ = {} 3038 }, 3039 proto: { 3040 end: function() { 3041 this._.end = 1 3042 }, 3043 next: function() { 3044 return a.call(this) 3045 }, 3046 previous: function() { 3047 return a.call(this, 1) 3048 }, 3049 checkForward: function() { 3050 return !1 !== a.call(this, 0, 1) 3051 }, 3052 checkBackward: function() { 3053 return !1 !== a.call(this, 1, 1) 3054 }, 3055 lastForward: function() { 3056 return d.call(this) 3057 }, 3058 lastBackward: function() { 3059 return d.call(this, 1) 3060 }, 3061 reset: function() { 3062 delete this.current; 3063 this._ = {} 3064 } 3065 } 3066 }); 3067 var b = { 3068 block: 1, 3069 "list-item": 1, 3070 table: 1, 3071 "table-row-group": 1, 3072 "table-header-group": 1, 3073 "table-footer-group": 1, 3074 "table-row": 1, 3075 "table-column-group": 1, 3076 "table-column": 1, 3077 "table-cell": 1, 3078 "table-caption": 1 3079 }, 3080 c = { 3081 absolute: 1, 3082 fixed: 1 3083 }; 3084 CKEDITOR.dom.element.prototype.isBlockBoundary = function(a) { 3085 return "none" != this.getComputedStyle("float") || this.getComputedStyle("position") in c || !b[this.getComputedStyle("display")] ? !!(this.is(CKEDITOR.dtd.$block) || a && this.is(a)) : !0 3086 }; 3087 CKEDITOR.dom.walker.blockBoundary = function(a) { 3088 return function(b) { 3089 return !(b.type == CKEDITOR.NODE_ELEMENT && b.isBlockBoundary(a)) 3090 } 3091 }; 3092 CKEDITOR.dom.walker.listItemBoundary = function() { 3093 return this.blockBoundary({ 3094 br: 1 3095 }) 3096 }; 3097 CKEDITOR.dom.walker.bookmark = function(a, b) { 3098 function c(a) { 3099 return a && a.getName && "span" == a.getName() && a.data("cke-bookmark") 3100 } 3101 return function(e) { 3102 var d, f; 3103 d = e && e.type != CKEDITOR.NODE_ELEMENT && (f = e.getParent()) && c(f); 3104 d = a ? d : d || c(e); 3105 return !!(b ^ d) 3106 } 3107 }; 3108 CKEDITOR.dom.walker.whitespaces = function(a) { 3109 return function(b) { 3110 var c; 3111 b && b.type == CKEDITOR.NODE_TEXT && (c = !CKEDITOR.tools.trim(b.getText()) || CKEDITOR.env.webkit && b.getText() == CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE); 3112 return !!(a ^ c) 3113 } 3114 }; 3115 CKEDITOR.dom.walker.invisible = 3116 function(a) { 3117 var b = CKEDITOR.dom.walker.whitespaces(), 3118 c = CKEDITOR.env.webkit ? 1 : 0; 3119 return function(e) { 3120 b(e) ? e = 1 : (e.type == CKEDITOR.NODE_TEXT && (e = e.getParent()), e = e.$.offsetWidth <= c); 3121 return !!(a ^ e) 3122 } 3123 }; 3124 CKEDITOR.dom.walker.nodeType = function(a, b) { 3125 return function(c) { 3126 return !!(b ^ c.type == a) 3127 } 3128 }; 3129 CKEDITOR.dom.walker.bogus = function(a) { 3130 function b(a) { 3131 return !h(a) && !k(a) 3132 } 3133 return function(c) { 3134 var e = CKEDITOR.env.needsBrFiller ? c.is && c.is("br") : c.getText && f.test(c.getText()); 3135 e && (e = c.getParent(), c = c.getNext(b), e = e.isBlockBoundary() && 3136 (!c || c.type == CKEDITOR.NODE_ELEMENT && c.isBlockBoundary())); 3137 return !!(a ^ e) 3138 } 3139 }; 3140 CKEDITOR.dom.walker.temp = function(a) { 3141 return function(b) { 3142 b.type != CKEDITOR.NODE_ELEMENT && (b = b.getParent()); 3143 b = b && b.hasAttribute("data-cke-temp"); 3144 return !!(a ^ b) 3145 } 3146 }; 3147 var f = /^[\t\r\n ]*(?: |\xa0)$/, 3148 h = CKEDITOR.dom.walker.whitespaces(), 3149 k = CKEDITOR.dom.walker.bookmark(), 3150 g = CKEDITOR.dom.walker.temp(), 3151 n = function(a) { 3152 return k(a) || h(a) || a.type == CKEDITOR.NODE_ELEMENT && a.is(CKEDITOR.dtd.$inline) && !a.is(CKEDITOR.dtd.$empty) 3153 }; 3154 CKEDITOR.dom.walker.ignored = 3155 function(a) { 3156 return function(b) { 3157 b = h(b) || k(b) || g(b); 3158 return !!(a ^ b) 3159 } 3160 }; 3161 var r = CKEDITOR.dom.walker.ignored(); 3162 CKEDITOR.dom.walker.empty = function(a) { 3163 return function(b) { 3164 for (var c = 0, e = b.getChildCount(); c < e; ++c) 3165 if (!r(b.getChild(c))) return !!a; 3166 return !a 3167 } 3168 }; 3169 var e = CKEDITOR.dom.walker.empty(), 3170 y = CKEDITOR.dom.walker.validEmptyBlockContainers = CKEDITOR.tools.extend(function(a) { 3171 var b = {}, 3172 c; 3173 for (c in a) CKEDITOR.dtd[c]["#"] && (b[c] = 1); 3174 return b 3175 }(CKEDITOR.dtd.$block), { 3176 caption: 1, 3177 td: 1, 3178 th: 1 3179 }); 3180 CKEDITOR.dom.walker.editable = function(a) { 3181 return function(b) { 3182 b = 3183 r(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(y) && e(b)) ? !0 : !1; 3184 return !!(a ^ b) 3185 } 3186 }; 3187 CKEDITOR.dom.element.prototype.getBogus = function() { 3188 var a = this; 3189 do a = a.getPreviousSourceNode(); while (n(a)); 3190 return a && (CKEDITOR.env.needsBrFiller ? a.is && a.is("br") : a.getText && f.test(a.getText())) ? a : !1 3191 } 3192 })(); 3193 CKEDITOR.dom.range = function(a) { 3194 this.endOffset = this.endContainer = this.startOffset = this.startContainer = null; 3195 this.collapsed = !0; 3196 var d = a instanceof CKEDITOR.dom.document; 3197 this.document = d ? a : a.getDocument(); 3198 this.root = d ? a.getBody() : a 3199 }; 3200 (function() { 3201 function a(a) { 3202 a.collapsed = a.startContainer && a.endContainer && a.startContainer.equals(a.endContainer) && a.startOffset == a.endOffset 3203 } 3204 3205 function d(a, b, c, d, f) { 3206 function h(a, b, c, e) { 3207 var d = c ? a.getPrevious() : a.getNext(); 3208 if (e && k) return d; 3209 l || e ? b.append(a.clone(!0, f), c) : (a.remove(), r && b.append(a, c)); 3210 return d 3211 } 3212 3213 function m() { 3214 var a, b, c, e = Math.min(O.length, p.length); 3215 for (a = 0; a < e; a++) 3216 if (b = O[a], c = p[a], !b.equals(c)) return a; 3217 return a - 1 3218 } 3219 3220 function g() { 3221 var b = N - 1, 3222 c = E && z && !t.equals(F); 3223 b < w - 1 || b < A - 1 || c ? (c ? a.moveToPosition(F, 3224 CKEDITOR.POSITION_BEFORE_START) : A == b + 1 && q ? a.moveToPosition(p[b], CKEDITOR.POSITION_BEFORE_END) : a.moveToPosition(p[b + 1], CKEDITOR.POSITION_BEFORE_START), d && (b = O[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({ 3225 startNode: c 3226 }))) : a.collapse(!0) 3227 } 3228 a.optimizeBookmark(); 3229 var k = 0 === b, 3230 r = 1 == b, 3231 l = 2 == b; 3232 b = l || r; 3233 var t = a.startContainer, 3234 F = a.endContainer, 3235 L = a.startOffset, 3236 C = a.endOffset, 3237 M, q, E, z, H, P; 3238 if (l && F.type == CKEDITOR.NODE_TEXT && (t.equals(F) || t.type === CKEDITOR.NODE_ELEMENT && t.getFirst().equals(F))) c.append(a.document.createText(F.substring(L, C))); 3239 else { 3240 F.type == CKEDITOR.NODE_TEXT ? l ? P = !0 : F = F.split(C) : 0 < F.getChildCount() ? C >= F.getChildCount() ? (F = F.getChild(C - 1), q = !0) : F = F.getChild(C) : z = q = !0; 3241 t.type == CKEDITOR.NODE_TEXT ? l ? H = !0 : t.split(L) : 0 < t.getChildCount() ? 0 === L ? (t = t.getChild(L), M = !0) : t = t.getChild(L - 1) : E = M = !0; 3242 for (var O = t.getParents(), p = F.getParents(), N = m(), 3243 w = O.length - 1, A = p.length - 1, G = c, I, X, V, da = -1, Q = N; Q <= w; Q++) { 3244 X = O[Q]; 3245 V = X.getNext(); 3246 for (Q != w || X.equals(p[Q]) && w < A ? b && (I = G.append(X.clone(0, f))) : M ? h(X, G, !1, E) : H && G.append(a.document.createText(X.substring(L))); V;) { 3247 if (V.equals(p[Q])) { 3248 da = Q; 3249 break 3250 } 3251 V = h(V, G) 3252 } 3253 G = I 3254 } 3255 G = c; 3256 for (Q = N; Q <= A; Q++) 3257 if (c = p[Q], V = c.getPrevious(), c.equals(O[Q])) b && (G = G.getChild(0)); 3258 else { 3259 Q != A || c.equals(O[Q]) && A < w ? b && (I = G.append(c.clone(0, f))) : q ? h(c, G, !1, z) : P && G.append(a.document.createText(c.substring(0, C))); 3260 if (Q > da) 3261 for (; V;) V = h(V, G, !0); 3262 G = I 3263 } l || g() 3264 } 3265 } 3266 3267 function b() { 3268 var a = !1, 3269 b = CKEDITOR.dom.walker.whitespaces(), 3270 c = CKEDITOR.dom.walker.bookmark(!0), 3271 d = CKEDITOR.dom.walker.bogus(); 3272 return function(f) { 3273 return c(f) || b(f) ? !0 : d(f) && !a ? a = !0 : f.type == CKEDITOR.NODE_TEXT && (f.hasAscendant("pre") || CKEDITOR.tools.trim(f.getText()).length) || f.type == CKEDITOR.NODE_ELEMENT && !f.is(h) ? !1 : !0 3274 } 3275 } 3276 3277 function c(a) { 3278 var b = CKEDITOR.dom.walker.whitespaces(), 3279 c = CKEDITOR.dom.walker.bookmark(1); 3280 return function(d) { 3281 return c(d) || b(d) ? !0 : !a && k(d) || d.type == CKEDITOR.NODE_ELEMENT && d.is(CKEDITOR.dtd.$removeEmpty) 3282 } 3283 } 3284 3285 function f(a) { 3286 return function() { 3287 var b; 3288 return this[a ? "getPreviousNode" : "getNextNode"](function(a) { 3289 !b && r(a) && (b = a); 3290 return n(a) && !(k(a) && a.equals(b)) 3291 }) 3292 } 3293 } 3294 var h = { 3295 abbr: 1, 3296 acronym: 1, 3297 b: 1, 3298 bdo: 1, 3299 big: 1, 3300 cite: 1, 3301 code: 1, 3302 del: 1, 3303 dfn: 1, 3304 em: 1, 3305 font: 1, 3306 i: 1, 3307 ins: 1, 3308 label: 1, 3309 kbd: 1, 3310 q: 1, 3311 samp: 1, 3312 small: 1, 3313 span: 1, 3314 strike: 1, 3315 strong: 1, 3316 sub: 1, 3317 sup: 1, 3318 tt: 1, 3319 u: 1, 3320 "var": 1 3321 }, 3322 k = CKEDITOR.dom.walker.bogus(), 3323 g = /^[\t\r\n ]*(?: |\xa0)$/, 3324 n = CKEDITOR.dom.walker.editable(), 3325 r = CKEDITOR.dom.walker.ignored(!0); 3326 CKEDITOR.dom.range.prototype = { 3327 clone: function() { 3328 var a = 3329 new CKEDITOR.dom.range(this.root); 3330 a._setStartContainer(this.startContainer); 3331 a.startOffset = this.startOffset; 3332 a._setEndContainer(this.endContainer); 3333 a.endOffset = this.endOffset; 3334 a.collapsed = this.collapsed; 3335 return a 3336 }, 3337 collapse: function(a) { 3338 a ? (this._setEndContainer(this.startContainer), this.endOffset = this.startOffset) : (this._setStartContainer(this.endContainer), this.startOffset = this.endOffset); 3339 this.collapsed = !0 3340 }, 3341 cloneContents: function(a) { 3342 var b = new CKEDITOR.dom.documentFragment(this.document); 3343 this.collapsed || 3344 d(this, 2, b, !1, "undefined" == typeof a ? !0 : a); 3345 return b 3346 }, 3347 deleteContents: function(a) { 3348 this.collapsed || d(this, 0, null, a) 3349 }, 3350 extractContents: function(a, b) { 3351 var c = new CKEDITOR.dom.documentFragment(this.document); 3352 this.collapsed || d(this, 1, c, a, "undefined" == typeof b ? !0 : b); 3353 return c 3354 }, 3355 createBookmark: function(a) { 3356 var b, c, d, f, h = this.collapsed; 3357 b = this.document.createElement("span"); 3358 b.data("cke-bookmark", 1); 3359 b.setStyle("display", "none"); 3360 b.setHtml("\x26nbsp;"); 3361 a && (d = "cke_bm_" + CKEDITOR.tools.getNextNumber(), b.setAttribute("id", 3362 d + (h ? "C" : "S"))); 3363 h || (c = b.clone(), c.setHtml("\x26nbsp;"), a && c.setAttribute("id", d + "E"), f = this.clone(), f.collapse(), f.insertNode(c)); 3364 f = this.clone(); 3365 f.collapse(!0); 3366 f.insertNode(b); 3367 c ? (this.setStartAfter(b), this.setEndBefore(c)) : this.moveToPosition(b, CKEDITOR.POSITION_AFTER_END); 3368 return { 3369 startNode: a ? d + (h ? "C" : "S") : b, 3370 endNode: a ? d + "E" : c, 3371 serializable: a, 3372 collapsed: h 3373 } 3374 }, 3375 createBookmark2: function() { 3376 function a(b) { 3377 var e = b.container, 3378 d = b.offset, 3379 m; 3380 m = e; 3381 var f = d; 3382 m = m.type != CKEDITOR.NODE_ELEMENT || 0 === f || f == m.getChildCount() ? 3383 0 : m.getChild(f - 1).type == CKEDITOR.NODE_TEXT && m.getChild(f).type == CKEDITOR.NODE_TEXT; 3384 m && (e = e.getChild(d - 1), d = e.getLength()); 3385 if (e.type == CKEDITOR.NODE_ELEMENT && 0 < d) { 3386 a: { 3387 for (m = e; d--;) 3388 if (f = m.getChild(d).getIndex(!0), 0 <= f) { 3389 d = f; 3390 break a 3391 } d = -1 3392 } 3393 d += 1 3394 } 3395 if (e.type == CKEDITOR.NODE_TEXT) { 3396 m = e; 3397 for (f = 0; 3398 (m = m.getPrevious()) && m.type == CKEDITOR.NODE_TEXT;) f += m.getText().replace(CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE, "").length; 3399 m = f; 3400 e.getText() ? d += m : (f = e.getPrevious(c), m ? (d = m, e = f ? f.getNext() : e.getParent().getFirst()) : (e = 3401 e.getParent(), d = f ? f.getIndex(!0) + 1 : 0)) 3402 } 3403 b.container = e; 3404 b.offset = d 3405 } 3406 3407 function b(a, c) { 3408 var e = c.getCustomData("cke-fillingChar"); 3409 if (e) { 3410 var d = a.container; 3411 e.equals(d) && (a.offset -= CKEDITOR.dom.selection.FILLING_CHAR_SEQUENCE.length, 0 >= a.offset && (a.offset = d.getIndex(), a.container = d.getParent())) 3412 } 3413 } 3414 var c = CKEDITOR.dom.walker.nodeType(CKEDITOR.NODE_TEXT, !0); 3415 return function(c) { 3416 var d = this.collapsed, 3417 f = { 3418 container: this.startContainer, 3419 offset: this.startOffset 3420 }, 3421 m = { 3422 container: this.endContainer, 3423 offset: this.endOffset 3424 }; 3425 c && (a(f), 3426 b(f, this.root), d || (a(m), b(m, this.root))); 3427 return { 3428 start: f.container.getAddress(c), 3429 end: d ? null : m.container.getAddress(c), 3430 startOffset: f.offset, 3431 endOffset: m.offset, 3432 normalized: c, 3433 collapsed: d, 3434 is2: !0 3435 } 3436 } 3437 }(), 3438 moveToBookmark: function(a) { 3439 if (a.is2) { 3440 var b = this.document.getByAddress(a.start, a.normalized), 3441 c = a.startOffset, 3442 d = a.end && this.document.getByAddress(a.end, a.normalized); 3443 a = a.endOffset; 3444 this.setStart(b, c); 3445 d ? this.setEnd(d, a) : this.collapse(!0) 3446 } else b = (c = a.serializable) ? this.document.getById(a.startNode) : a.startNode, 3447 a = c ? this.document.getById(a.endNode) : a.endNode, this.setStartBefore(b), b.remove(), a ? (this.setEndBefore(a), a.remove()) : this.collapse(!0) 3448 }, 3449 getBoundaryNodes: function() { 3450 var a = this.startContainer, 3451 b = this.endContainer, 3452 c = this.startOffset, 3453 d = this.endOffset, 3454 f; 3455 if (a.type == CKEDITOR.NODE_ELEMENT) 3456 if (f = a.getChildCount(), f > c) a = a.getChild(c); 3457 else if (1 > f) a = a.getPreviousSourceNode(); 3458 else { 3459 for (a = a.$; a.lastChild;) a = a.lastChild; 3460 a = new CKEDITOR.dom.node(a); 3461 a = a.getNextSourceNode() || a 3462 } 3463 if (b.type == CKEDITOR.NODE_ELEMENT) 3464 if (f = b.getChildCount(), 3465 f > d) b = b.getChild(d).getPreviousSourceNode(!0); 3466 else if (1 > f) b = b.getPreviousSourceNode(); 3467 else { 3468 for (b = b.$; b.lastChild;) b = b.lastChild; 3469 b = new CKEDITOR.dom.node(b) 3470 } 3471 a.getPosition(b) & CKEDITOR.POSITION_FOLLOWING && (a = b); 3472 return { 3473 startNode: a, 3474 endNode: b 3475 } 3476 }, 3477 getCommonAncestor: function(a, b) { 3478 var c = this.startContainer, 3479 d = this.endContainer, 3480 c = c.equals(d) ? a && c.type == CKEDITOR.NODE_ELEMENT && this.startOffset == this.endOffset - 1 ? c.getChild(this.startOffset) : c : c.getCommonAncestor(d); 3481 return b && !c.is ? c.getParent() : c 3482 }, 3483 optimize: function() { 3484 var a = 3485 this.startContainer, 3486 b = this.startOffset; 3487 a.type != CKEDITOR.NODE_ELEMENT && (b ? b >= a.getLength() && this.setStartAfter(a) : this.setStartBefore(a)); 3488 a = this.endContainer; 3489 b = this.endOffset; 3490 a.type != CKEDITOR.NODE_ELEMENT && (b ? b >= a.getLength() && this.setEndAfter(a) : this.setEndBefore(a)) 3491 }, 3492 optimizeBookmark: function() { 3493 var a = this.startContainer, 3494 b = this.endContainer; 3495 a.is && a.is("span") && a.data("cke-bookmark") && this.setStartAt(a, CKEDITOR.POSITION_BEFORE_START); 3496 b && b.is && b.is("span") && b.data("cke-bookmark") && this.setEndAt(b, CKEDITOR.POSITION_AFTER_END) 3497 }, 3498 trim: function(a, b) { 3499 var c = this.startContainer, 3500 d = this.startOffset, 3501 f = this.collapsed; 3502 if ((!a || f) && c && c.type == CKEDITOR.NODE_TEXT) { 3503 if (d) 3504 if (d >= c.getLength()) d = c.getIndex() + 1, c = c.getParent(); 3505 else { 3506 var h = c.split(d), 3507 d = c.getIndex() + 1, 3508 c = c.getParent(); 3509 this.startContainer.equals(this.endContainer) ? this.setEnd(h, this.endOffset - this.startOffset) : c.equals(this.endContainer) && (this.endOffset += 1) 3510 } 3511 else d = c.getIndex(), c = c.getParent(); 3512 this.setStart(c, d); 3513 if (f) { 3514 this.collapse(!0); 3515 return 3516 } 3517 } 3518 c = this.endContainer; 3519 d = this.endOffset; 3520 b || f || !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)) 3521 }, 3522 enlarge: function(a, b) { 3523 function c(a) { 3524 return a && a.type == CKEDITOR.NODE_ELEMENT && a.hasAttribute("contenteditable") ? null : a 3525 } 3526 var d = new RegExp(/[^\s\ufeff]/); 3527 switch (a) { 3528 case CKEDITOR.ENLARGE_INLINE: 3529 var f = 1; 3530 case CKEDITOR.ENLARGE_ELEMENT: 3531 var h = function(a, b) { 3532 var c = new CKEDITOR.dom.range(g); 3533 c.setStart(a, b); 3534 c.setEndAt(g, CKEDITOR.POSITION_BEFORE_END); 3535 var c = new CKEDITOR.dom.walker(c), 3536 e; 3537 for (c.guard = function(a) { 3538 return !(a.type == CKEDITOR.NODE_ELEMENT && a.isBlockBoundary()) 3539 }; e = c.next();) { 3540 if (e.type != CKEDITOR.NODE_TEXT) return !1; 3541 M = e != a ? e.getText() : e.substring(b); 3542 if (d.test(M)) return !1 3543 } 3544 return !0 3545 }; 3546 if (this.collapsed) break; 3547 var m = this.getCommonAncestor(), 3548 g = this.root, 3549 k, r, l, t, F, L = !1, 3550 C, M; 3551 C = this.startContainer; 3552 var q = this.startOffset; 3553 C.type == CKEDITOR.NODE_TEXT ? (q && (C = !CKEDITOR.tools.trim(C.substring(0, q)).length && C, L = !!C), C && ((t = C.getPrevious()) || (l = C.getParent()))) : (q && (t = C.getChild(q - 1) || C.getLast()), 3554 t || (l = C)); 3555 for (l = c(l); l || t;) { 3556 if (l && !t) { 3557 !F && l.equals(m) && (F = !0); 3558 if (f ? l.isBlockBoundary() : !g.contains(l)) break; 3559 L && "inline" == l.getComputedStyle("display") || (L = !1, F ? k = l : this.setStartBefore(l)); 3560 t = l.getPrevious() 3561 } 3562 for (; t;) 3563 if (C = !1, t.type == CKEDITOR.NODE_COMMENT) t = t.getPrevious(); 3564 else { 3565 if (t.type == CKEDITOR.NODE_TEXT) M = t.getText(), d.test(M) && (t = null), C = /[\s\ufeff]$/.test(M); 3566 else if ((t.$.offsetWidth > (CKEDITOR.env.webkit ? 1 : 0) || b && t.is("br")) && !t.data("cke-bookmark")) 3567 if (L && CKEDITOR.dtd.$removeEmpty[t.getName()]) { 3568 M = 3569 t.getText(); 3570 if (d.test(M)) t = null; 3571 else 3572 for (var q = t.$.getElementsByTagName("*"), E = 0, z; z = q[E++];) 3573 if (!CKEDITOR.dtd.$removeEmpty[z.nodeName.toLowerCase()]) { 3574 t = null; 3575 break 3576 } t && (C = !!M.length) 3577 } else t = null; 3578 C && (L ? F ? k = l : l && this.setStartBefore(l) : L = !0); 3579 if (t) { 3580 C = t.getPrevious(); 3581 if (!l && !C) { 3582 l = t; 3583 t = null; 3584 break 3585 } 3586 t = C 3587 } else l = null 3588 } l && (l = c(l.getParent())) 3589 } 3590 C = this.endContainer; 3591 q = this.endOffset; 3592 l = t = null; 3593 F = L = !1; 3594 C.type == CKEDITOR.NODE_TEXT ? CKEDITOR.tools.trim(C.substring(q)).length ? L = !0 : (L = !C.getLength(), q == C.getLength() ? (t = C.getNext()) || 3595 (l = C.getParent()) : h(C, q) && (l = C.getParent())) : (t = C.getChild(q)) || (l = C); 3596 for (; l || t;) { 3597 if (l && !t) { 3598 !F && l.equals(m) && (F = !0); 3599 if (f ? l.isBlockBoundary() : !g.contains(l)) break; 3600 L && "inline" == l.getComputedStyle("display") || (L = !1, F ? r = l : l && this.setEndAfter(l)); 3601 t = l.getNext() 3602 } 3603 for (; t;) { 3604 C = !1; 3605 if (t.type == CKEDITOR.NODE_TEXT) M = t.getText(), h(t, 0) || (t = null), C = /^[\s\ufeff]/.test(M); 3606 else if (t.type == CKEDITOR.NODE_ELEMENT) { 3607 if ((0 < t.$.offsetWidth || b && t.is("br")) && !t.data("cke-bookmark")) 3608 if (L && CKEDITOR.dtd.$removeEmpty[t.getName()]) { 3609 M = 3610 t.getText(); 3611 if (d.test(M)) t = null; 3612 else 3613 for (q = t.$.getElementsByTagName("*"), E = 0; z = q[E++];) 3614 if (!CKEDITOR.dtd.$removeEmpty[z.nodeName.toLowerCase()]) { 3615 t = null; 3616 break 3617 } t && (C = !!M.length) 3618 } else t = null 3619 } else C = 1; 3620 C && L && (F ? r = l : this.setEndAfter(l)); 3621 if (t) { 3622 C = t.getNext(); 3623 if (!l && !C) { 3624 l = t; 3625 t = null; 3626 break 3627 } 3628 t = C 3629 } else l = null 3630 } 3631 l && (l = c(l.getParent())) 3632 } 3633 k && r && (m = k.contains(r) ? r : k, this.setStartBefore(m), this.setEndAfter(m)); 3634 break; 3635 case CKEDITOR.ENLARGE_BLOCK_CONTENTS: 3636 case CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS: 3637 l = new CKEDITOR.dom.range(this.root); 3638 g = this.root; 3639 l.setStartAt(g, CKEDITOR.POSITION_AFTER_START); 3640 l.setEnd(this.startContainer, this.startOffset); 3641 l = new CKEDITOR.dom.walker(l); 3642 var H, P, O = CKEDITOR.dom.walker.blockBoundary(a == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ? { 3643 br: 1 3644 } : null), 3645 p = null, 3646 N = function(a) { 3647 if (a.type == CKEDITOR.NODE_ELEMENT && "false" == a.getAttribute("contenteditable")) 3648 if (p) { 3649 if (p.equals(a)) { 3650 p = null; 3651 return 3652 } 3653 } else p = a; 3654 else if (p) return; 3655 var b = O(a); 3656 b || (H = a); 3657 return b 3658 }, 3659 f = function(a) { 3660 var b = N(a); 3661 !b && a.is && a.is("br") && (P = a); 3662 return b 3663 }; 3664 l.guard = N; 3665 l = l.lastBackward(); 3666 H = H || g; 3667 this.setStartAt(H, !H.is("br") && (!l && this.checkStartOfBlock() || l && H.contains(l)) ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_AFTER_END); 3668 if (a == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS) { 3669 l = this.clone(); 3670 l = new CKEDITOR.dom.walker(l); 3671 var w = CKEDITOR.dom.walker.whitespaces(), 3672 A = CKEDITOR.dom.walker.bookmark(); 3673 l.evaluator = function(a) { 3674 return !w(a) && !A(a) 3675 }; 3676 if ((l = l.previous()) && l.type == CKEDITOR.NODE_ELEMENT && l.is("br")) break 3677 } 3678 l = this.clone(); 3679 l.collapse(); 3680 l.setEndAt(g, CKEDITOR.POSITION_BEFORE_END); 3681 l = new CKEDITOR.dom.walker(l); 3682 l.guard = a == CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS ? f : N; 3683 H = p = P = null; 3684 l = l.lastForward(); 3685 H = H || g; 3686 this.setEndAt(H, !l && this.checkEndOfBlock() || l && H.contains(l) ? CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_BEFORE_START); 3687 P && this.setEndAfter(P) 3688 } 3689 }, 3690 shrink: function(a, b, c) { 3691 var d = "boolean" === typeof c ? c : c && "boolean" === typeof c.shrinkOnBlockBoundary ? c.shrinkOnBlockBoundary : !0, 3692 f = c && c.skipBogus; 3693 if (!this.collapsed) { 3694 a = a || CKEDITOR.SHRINK_TEXT; 3695 var h = this.clone(), 3696 m = this.startContainer, 3697 g = this.endContainer, 3698 k = this.startOffset, 3699 r = this.endOffset, 3700 l = c = 1; 3701 m && m.type == CKEDITOR.NODE_TEXT && (k ? k >= m.getLength() ? h.setStartAfter(m) : (h.setStartBefore(m), c = 0) : h.setStartBefore(m)); 3702 g && g.type == CKEDITOR.NODE_TEXT && (r ? r >= g.getLength() ? h.setEndAfter(g) : (h.setEndAfter(g), l = 0) : h.setEndBefore(g)); 3703 var h = new CKEDITOR.dom.walker(h), 3704 t = CKEDITOR.dom.walker.bookmark(), 3705 F = CKEDITOR.dom.walker.bogus(); 3706 h.evaluator = function(b) { 3707 return b.type == (a == CKEDITOR.SHRINK_ELEMENT ? CKEDITOR.NODE_ELEMENT : CKEDITOR.NODE_TEXT) 3708 }; 3709 var L; 3710 h.guard = function(b, c) { 3711 if (f && F(b) || t(b)) return !0; 3712 if (a == CKEDITOR.SHRINK_ELEMENT && b.type == CKEDITOR.NODE_TEXT || c && b.equals(L) || !1 === d && b.type == CKEDITOR.NODE_ELEMENT && b.isBlockBoundary() || b.type == CKEDITOR.NODE_ELEMENT && b.hasAttribute("contenteditable")) return !1; 3713 c || b.type != CKEDITOR.NODE_ELEMENT || (L = b); 3714 return !0 3715 }; 3716 c && (m = h[a == CKEDITOR.SHRINK_ELEMENT ? "lastForward" : "next"]()) && this.setStartAt(m, b ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_BEFORE_START); 3717 l && (h.reset(), (h = h[a == CKEDITOR.SHRINK_ELEMENT ? "lastBackward" : "previous"]()) && this.setEndAt(h, b ? CKEDITOR.POSITION_BEFORE_END : 3718 CKEDITOR.POSITION_AFTER_END)); 3719 return !(!c && !l) 3720 } 3721 }, 3722 insertNode: function(a) { 3723 this.optimizeBookmark(); 3724 this.trim(!1, !0); 3725 var b = this.startContainer, 3726 c = b.getChild(this.startOffset); 3727 c ? a.insertBefore(c) : b.append(a); 3728 a.getParent() && a.getParent().equals(this.endContainer) && this.endOffset++; 3729 this.setStartBefore(a) 3730 }, 3731 moveToPosition: function(a, b) { 3732 this.setStartAt(a, b); 3733 this.collapse(!0) 3734 }, 3735 moveToRange: function(a) { 3736 this.setStart(a.startContainer, a.startOffset); 3737 this.setEnd(a.endContainer, a.endOffset) 3738 }, 3739 selectNodeContents: function(a) { 3740 this.setStart(a, 3741 0); 3742 this.setEnd(a, a.type == CKEDITOR.NODE_TEXT ? a.getLength() : a.getChildCount()) 3743 }, 3744 setStart: function(b, c) { 3745 b.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$empty[b.getName()] && (c = b.getIndex(), b = b.getParent()); 3746 this._setStartContainer(b); 3747 this.startOffset = c; 3748 this.endContainer || (this._setEndContainer(b), this.endOffset = c); 3749 a(this) 3750 }, 3751 setEnd: function(b, c) { 3752 b.type == CKEDITOR.NODE_ELEMENT && CKEDITOR.dtd.$empty[b.getName()] && (c = b.getIndex() + 1, b = b.getParent()); 3753 this._setEndContainer(b); 3754 this.endOffset = c; 3755 this.startContainer || 3756 (this._setStartContainer(b), this.startOffset = c); 3757 a(this) 3758 }, 3759 setStartAfter: function(a) { 3760 this.setStart(a.getParent(), a.getIndex() + 1) 3761 }, 3762 setStartBefore: function(a) { 3763 this.setStart(a.getParent(), a.getIndex()) 3764 }, 3765 setEndAfter: function(a) { 3766 this.setEnd(a.getParent(), a.getIndex() + 1) 3767 }, 3768 setEndBefore: function(a) { 3769 this.setEnd(a.getParent(), a.getIndex()) 3770 }, 3771 setStartAt: function(b, c) { 3772 switch (c) { 3773 case CKEDITOR.POSITION_AFTER_START: 3774 this.setStart(b, 0); 3775 break; 3776 case CKEDITOR.POSITION_BEFORE_END: 3777 b.type == CKEDITOR.NODE_TEXT ? this.setStart(b, 3778 b.getLength()) : this.setStart(b, b.getChildCount()); 3779 break; 3780 case CKEDITOR.POSITION_BEFORE_START: 3781 this.setStartBefore(b); 3782 break; 3783 case CKEDITOR.POSITION_AFTER_END: 3784 this.setStartAfter(b) 3785 } 3786 a(this) 3787 }, 3788 setEndAt: function(b, c) { 3789 switch (c) { 3790 case CKEDITOR.POSITION_AFTER_START: 3791 this.setEnd(b, 0); 3792 break; 3793 case CKEDITOR.POSITION_BEFORE_END: 3794 b.type == CKEDITOR.NODE_TEXT ? this.setEnd(b, b.getLength()) : this.setEnd(b, b.getChildCount()); 3795 break; 3796 case CKEDITOR.POSITION_BEFORE_START: 3797 this.setEndBefore(b); 3798 break; 3799 case CKEDITOR.POSITION_AFTER_END: 3800 this.setEndAfter(b) 3801 } 3802 a(this) 3803 }, 3804 fixBlock: function(a, b) { 3805 var c = this.createBookmark(), 3806 d = this.document.createElement(b); 3807 this.collapse(a); 3808 this.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS); 3809 this.extractContents().appendTo(d); 3810 d.trim(); 3811 this.insertNode(d); 3812 var f = d.getBogus(); 3813 f && f.remove(); 3814 d.appendBogus(); 3815 this.moveToBookmark(c); 3816 return d 3817 }, 3818 splitBlock: function(a, b) { 3819 var c = new CKEDITOR.dom.elementPath(this.startContainer, this.root), 3820 d = new CKEDITOR.dom.elementPath(this.endContainer, this.root), 3821 f = c.block, 3822 h = d.block, 3823 m = null; 3824 if (!c.blockLimit.equals(d.blockLimit)) return null; 3825 "br" != a && (f || (f = this.fixBlock(!0, a), h = (new CKEDITOR.dom.elementPath(this.endContainer, this.root)).block), h || (h = this.fixBlock(!1, a))); 3826 c = f && this.checkStartOfBlock(); 3827 d = h && this.checkEndOfBlock(); 3828 this.deleteContents(); 3829 f && f.equals(h) && (d ? (m = new CKEDITOR.dom.elementPath(this.startContainer, this.root), this.moveToPosition(h, CKEDITOR.POSITION_AFTER_END), h = null) : c ? (m = new CKEDITOR.dom.elementPath(this.startContainer, this.root), this.moveToPosition(f, CKEDITOR.POSITION_BEFORE_START), f = null) : (h = this.splitElement(f, 3830 b || !1), f.is("ul", "ol") || f.appendBogus())); 3831 return { 3832 previousBlock: f, 3833 nextBlock: h, 3834 wasStartOfBlock: c, 3835 wasEndOfBlock: d, 3836 elementPath: m 3837 } 3838 }, 3839 splitElement: function(a, b) { 3840 if (!this.collapsed) return null; 3841 this.setEndAt(a, CKEDITOR.POSITION_BEFORE_END); 3842 var c = this.extractContents(!1, b || !1), 3843 d = a.clone(!1, b || !1); 3844 c.appendTo(d); 3845 d.insertAfter(a); 3846 this.moveToPosition(a, CKEDITOR.POSITION_AFTER_END); 3847 return d 3848 }, 3849 removeEmptyBlocksAtEnd: function() { 3850 function a(d) { 3851 return function(a) { 3852 return b(a) || c(a) || a.type == CKEDITOR.NODE_ELEMENT && a.isEmptyInlineRemoveable() || 3853 d.is("table") && a.is("caption") ? !1 : !0 3854 } 3855 } 3856 var b = CKEDITOR.dom.walker.whitespaces(), 3857 c = CKEDITOR.dom.walker.bookmark(!1); 3858 return function(b) { 3859 for (var c = this.createBookmark(), d = this[b ? "endPath" : "startPath"](), f = d.block || d.blockLimit, h; f && !f.equals(d.root) && !f.getFirst(a(f));) h = f.getParent(), this[b ? "setEndAt" : "setStartAt"](f, CKEDITOR.POSITION_AFTER_END), f.remove(1), f = h; 3860 this.moveToBookmark(c) 3861 } 3862 }(), 3863 startPath: function() { 3864 return new CKEDITOR.dom.elementPath(this.startContainer, this.root) 3865 }, 3866 endPath: function() { 3867 return new CKEDITOR.dom.elementPath(this.endContainer, 3868 this.root) 3869 }, 3870 checkBoundaryOfElement: function(a, b) { 3871 var d = b == CKEDITOR.START, 3872 f = this.clone(); 3873 f.collapse(d); 3874 f[d ? "setStartAt" : "setEndAt"](a, d ? CKEDITOR.POSITION_AFTER_START : CKEDITOR.POSITION_BEFORE_END); 3875 f = new CKEDITOR.dom.walker(f); 3876 f.evaluator = c(d); 3877 return f[d ? "checkBackward" : "checkForward"]() 3878 }, 3879 checkStartOfBlock: function() { 3880 var a = this.startContainer, 3881 c = this.startOffset; 3882 CKEDITOR.env.ie && c && a.type == CKEDITOR.NODE_TEXT && (a = CKEDITOR.tools.ltrim(a.substring(0, c)), g.test(a) && this.trim(0, 1)); 3883 this.trim(); 3884 a = new CKEDITOR.dom.elementPath(this.startContainer, 3885 this.root); 3886 c = this.clone(); 3887 c.collapse(!0); 3888 c.setStartAt(a.block || a.blockLimit, CKEDITOR.POSITION_AFTER_START); 3889 a = new CKEDITOR.dom.walker(c); 3890 a.evaluator = b(); 3891 return a.checkBackward() 3892 }, 3893 checkEndOfBlock: function() { 3894 var a = this.endContainer, 3895 c = this.endOffset; 3896 CKEDITOR.env.ie && a.type == CKEDITOR.NODE_TEXT && (a = CKEDITOR.tools.rtrim(a.substring(c)), g.test(a) && this.trim(1, 0)); 3897 this.trim(); 3898 a = new CKEDITOR.dom.elementPath(this.endContainer, this.root); 3899 c = this.clone(); 3900 c.collapse(!1); 3901 c.setEndAt(a.block || a.blockLimit, CKEDITOR.POSITION_BEFORE_END); 3902 a = new CKEDITOR.dom.walker(c); 3903 a.evaluator = b(); 3904 return a.checkForward() 3905 }, 3906 getPreviousNode: function(a, b, c) { 3907 var d = this.clone(); 3908 d.collapse(1); 3909 d.setStartAt(c || this.root, CKEDITOR.POSITION_AFTER_START); 3910 c = new CKEDITOR.dom.walker(d); 3911 c.evaluator = a; 3912 c.guard = b; 3913 return c.previous() 3914 }, 3915 getNextNode: function(a, b, c) { 3916 var d = this.clone(); 3917 d.collapse(); 3918 d.setEndAt(c || this.root, CKEDITOR.POSITION_BEFORE_END); 3919 c = new CKEDITOR.dom.walker(d); 3920 c.evaluator = a; 3921 c.guard = b; 3922 return c.next() 3923 }, 3924 checkReadOnly: function() { 3925 function a(b, c) { 3926 for (; b;) { 3927 if (b.type == 3928 CKEDITOR.NODE_ELEMENT) { 3929 if ("false" == b.getAttribute("contentEditable") && !b.data("cke-editable")) return 0; 3930 if (b.is("html") || "true" == b.getAttribute("contentEditable") && (b.contains(c) || b.equals(c))) break 3931 } 3932 b = b.getParent() 3933 } 3934 return 1 3935 } 3936 return function() { 3937 var b = this.startContainer, 3938 c = this.endContainer; 3939 return !(a(b, c) && a(c, b)) 3940 } 3941 }(), 3942 moveToElementEditablePosition: function(a, b) { 3943 if (a.type == CKEDITOR.NODE_ELEMENT && !a.isEditable(!1)) return this.moveToPosition(a, b ? CKEDITOR.POSITION_AFTER_END : CKEDITOR.POSITION_BEFORE_START), 3944 !0; 3945 for (var c = 0; a;) { 3946 if (a.type == CKEDITOR.NODE_TEXT) { 3947 b && this.endContainer && this.checkEndOfBlock() && g.test(a.getText()) ? this.moveToPosition(a, CKEDITOR.POSITION_BEFORE_START) : this.moveToPosition(a, b ? CKEDITOR.POSITION_AFTER_END : CKEDITOR.POSITION_BEFORE_START); 3948 c = 1; 3949 break 3950 } 3951 if (a.type == CKEDITOR.NODE_ELEMENT) 3952 if (a.isEditable()) this.moveToPosition(a, b ? CKEDITOR.POSITION_BEFORE_END : CKEDITOR.POSITION_AFTER_START), c = 1; 3953 else if (b && a.is("br") && this.endContainer && this.checkEndOfBlock()) this.moveToPosition(a, CKEDITOR.POSITION_BEFORE_START); 3954 else if ("false" == a.getAttribute("contenteditable") && a.is(CKEDITOR.dtd.$block)) return this.setStartBefore(a), this.setEndAfter(a), !0; 3955 var d = a, 3956 f = c, 3957 h = void 0; 3958 d.type == CKEDITOR.NODE_ELEMENT && d.isEditable(!1) && (h = d[b ? "getLast" : "getFirst"](r)); 3959 f || h || (h = d[b ? "getPrevious" : "getNext"](r)); 3960 a = h 3961 } 3962 return !!c 3963 }, 3964 moveToClosestEditablePosition: function(a, b) { 3965 var c, d = 0, 3966 f, h, m = [CKEDITOR.POSITION_AFTER_END, CKEDITOR.POSITION_BEFORE_START]; 3967 a ? (c = new CKEDITOR.dom.range(this.root), c.moveToPosition(a, m[b ? 0 : 1])) : c = this.clone(); 3968 if (a && 3969 !a.is(CKEDITOR.dtd.$block)) d = 1; 3970 else if (f = c[b ? "getNextEditableNode" : "getPreviousEditableNode"]()) d = 1, (h = f.type == CKEDITOR.NODE_ELEMENT) && f.is(CKEDITOR.dtd.$block) && "false" == f.getAttribute("contenteditable") ? (c.setStartAt(f, CKEDITOR.POSITION_BEFORE_START), c.setEndAt(f, CKEDITOR.POSITION_AFTER_END)) : !CKEDITOR.env.needsBrFiller && h && f.is(CKEDITOR.dom.walker.validEmptyBlockContainers) ? (c.setEnd(f, 0), c.collapse()) : c.moveToPosition(f, m[b ? 1 : 0]); 3971 d && this.moveToRange(c); 3972 return !!d 3973 }, 3974 moveToElementEditStart: function(a) { 3975 return this.moveToElementEditablePosition(a) 3976 }, 3977 moveToElementEditEnd: function(a) { 3978 return this.moveToElementEditablePosition(a, !0) 3979 }, 3980 getEnclosedNode: function() { 3981 var a = this.clone(); 3982 a.optimize(); 3983 if (a.startContainer.type != CKEDITOR.NODE_ELEMENT || a.endContainer.type != CKEDITOR.NODE_ELEMENT) return null; 3984 var a = new CKEDITOR.dom.walker(a), 3985 b = CKEDITOR.dom.walker.bookmark(!1, !0), 3986 c = CKEDITOR.dom.walker.whitespaces(!0); 3987 a.evaluator = function(a) { 3988 return c(a) && b(a) 3989 }; 3990 var d = a.next(); 3991 a.reset(); 3992 return d && d.equals(a.previous()) ? d : null 3993 }, 3994 getTouchedStartNode: function() { 3995 var a = this.startContainer; 3996 return this.collapsed || a.type != CKEDITOR.NODE_ELEMENT ? a : a.getChild(this.startOffset) || a 3997 }, 3998 getTouchedEndNode: function() { 3999 var a = this.endContainer; 4000 return this.collapsed || a.type != CKEDITOR.NODE_ELEMENT ? a : a.getChild(this.endOffset - 1) || a 4001 }, 4002 getNextEditableNode: f(), 4003 getPreviousEditableNode: f(1), 4004 _getTableElement: function(a) { 4005 a = a || { 4006 td: 1, 4007 th: 1, 4008 tr: 1, 4009 tbody: 1, 4010 thead: 1, 4011 tfoot: 1, 4012 table: 1 4013 }; 4014 var b = this.startContainer, 4015 c = this.endContainer, 4016 d = b.getAscendant("table", !0), 4017 f = c.getAscendant("table", !0); 4018 return CKEDITOR.env.safari && d && c.equals(this.root) ? 4019 b.getAscendant(a, !0) : this.getEnclosedNode() ? this.getEnclosedNode().getAscendant(a, !0) : d && f && (d.equals(f) || d.contains(f) || f.contains(d)) ? b.getAscendant(a, !0) : null 4020 }, 4021 scrollIntoView: function() { 4022 var a = new CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e\x26nbsp;\x3c/span\x3e", this.document), 4023 b, c, d, f = this.clone(); 4024 f.optimize(); 4025 (d = f.startContainer.type == CKEDITOR.NODE_TEXT) ? (c = f.startContainer.getText(), b = f.startContainer.split(f.startOffset), a.insertAfter(f.startContainer)) : f.insertNode(a); 4026 a.scrollIntoView(); 4027 d && (f.startContainer.setText(c), b.remove()); 4028 a.remove() 4029 }, 4030 getClientRects: function() { 4031 function a(b, c) { 4032 var d = CKEDITOR.tools.array.map(b, function(a) { 4033 return a 4034 }), 4035 e = new CKEDITOR.dom.range(c.root), 4036 f, h, l; 4037 c.startContainer instanceof CKEDITOR.dom.element && (h = 0 === c.startOffset && c.startContainer.hasAttribute("data-widget")); 4038 c.endContainer instanceof CKEDITOR.dom.element && (l = (l = c.endOffset === (c.endContainer.getChildCount ? c.endContainer.getChildCount() : c.endContainer.length)) && c.endContainer.hasAttribute("data-widget")); 4039 h && e.setStart(c.startContainer.getParent(), c.startContainer.getIndex()); 4040 l && e.setEnd(c.endContainer.getParent(), c.endContainer.getIndex() + 1); 4041 if (h || l) c = e; 4042 e = c.cloneContents(); 4043 e = CKEDITOR.dom.document.prototype.find.call(e, "[data-cke-widget-id]").toArray(); 4044 if (e = CKEDITOR.tools.array.map(e, function(a) { 4045 var b = c.root.editor; 4046 a = a.getAttribute("data-cke-widget-id"); 4047 return b.widgets.instances[a].element 4048 })) return e = CKEDITOR.tools.array.map(e, function(a) { 4049 var b; 4050 b = a.getParent().hasClass("cke_widget_wrapper") ? a.getParent() : 4051 a; 4052 f = this.root.getDocument().$.createRange(); 4053 f.setStart(b.getParent().$, b.getIndex()); 4054 f.setEnd(b.getParent().$, b.getIndex() + 1); 4055 b = f.getClientRects(); 4056 b.widgetRect = a.getClientRect(); 4057 return b 4058 }, c), CKEDITOR.tools.array.forEach(e, function(a) { 4059 function b(e) { 4060 CKEDITOR.tools.array.forEach(d, function(b, f) { 4061 var l = CKEDITOR.tools.objectCompare(a[e], b); 4062 l || (l = CKEDITOR.tools.objectCompare(a.widgetRect, b)); 4063 l && (Array.prototype.splice.call(d, f, a.length - e, a.widgetRect), c = !0) 4064 }); 4065 c || (e < d.length - 1 ? b(e + 1) : d.push(a.widgetRect)) 4066 } 4067 var c; 4068 b(0) 4069 }), d 4070 } 4071 4072 function b(a, c, e) { 4073 var f; 4074 c.collapsed ? e.startContainer instanceof CKEDITOR.dom.element ? (a = e.checkStartOfBlock(), f = new CKEDITOR.dom.text(""), a ? e.startContainer.append(f, !0) : 0 === e.startOffset ? f.insertBefore(e.startContainer.getFirst()) : (e = e.startContainer.getChildren().getItem(e.startOffset - 1), f.insertAfter(e)), c.setStart(f.$, 0), c.setEnd(f.$, 0), a = c.getClientRects(), f.remove()) : e.startContainer instanceof CKEDITOR.dom.text && ("" === e.startContainer.getText() ? (e.startContainer.setText(""), 4075 a = c.getClientRects(), e.startContainer.setText("")) : a = [d(e.createBookmark())]) : a = [d(e.createBookmark())]; 4076 return a 4077 } 4078 4079 function c(a, b, d) { 4080 a = CKEDITOR.tools.extend({}, a); 4081 b && (a = CKEDITOR.tools.getAbsoluteRectPosition(d.document.getWindow(), a)); 4082 !a.width && (a.width = a.right - a.left); 4083 !a.height && (a.height = a.bottom - a.top); 4084 return a 4085 } 4086 4087 function d(a) { 4088 var b = a.startNode; 4089 a = a.endNode; 4090 var c; 4091 b.setText(""); 4092 b.removeStyle("display"); 4093 a ? (a.setText(""), a.removeStyle("display"), c = [b.getClientRect(), a.getClientRect()], a.remove()) : c = [b.getClientRect(), b.getClientRect()]; 4094 b.remove(); 4095 return { 4096 right: Math.max(c[0].right, c[1].right), 4097 bottom: Math.max(c[0].bottom, c[1].bottom), 4098 left: Math.min(c[0].left, c[1].left), 4099 top: Math.min(c[0].top, c[1].top), 4100 width: Math.abs(c[0].left - c[1].left), 4101 height: Math.max(c[0].bottom, c[1].bottom) - Math.min(c[0].top, c[1].top) 4102 } 4103 } 4104 return void 0 !== this.document.getSelection ? function(d) { 4105 var f = this.root.getDocument().$.createRange(), 4106 m; 4107 f.setStart(this.startContainer.$, this.startOffset); 4108 f.setEnd(this.endContainer.$, this.endOffset); 4109 m = f.getClientRects(); 4110 m = a(m, this); 4111 m.length || (m = b(m, f, this)); 4112 return CKEDITOR.tools.array.map(m, function(a) { 4113 return c(a, d, this) 4114 }, this) 4115 } : function(a) { 4116 return [c(d(this.createBookmark()), a, this)] 4117 } 4118 }(), 4119 _setStartContainer: function(a) { 4120 this.startContainer = a 4121 }, 4122 _setEndContainer: function(a) { 4123 this.endContainer = a 4124 }, 4125 _find: function(a, b) { 4126 var c = this.getCommonAncestor(), 4127 d = this.getBoundaryNodes(), 4128 f = [], 4129 h, m, g, k; 4130 if (c && c.find) 4131 for (m = c.find(a), h = 0; h < m.count(); h++) 4132 if (c = m.getItem(h), b || !c.isReadOnly()) g = c.getPosition(d.startNode) & CKEDITOR.POSITION_FOLLOWING || 4133 d.startNode.equals(c), k = c.getPosition(d.endNode) & CKEDITOR.POSITION_PRECEDING + CKEDITOR.POSITION_IS_CONTAINED || d.endNode.equals(c), g && k && f.push(c); 4134 return f 4135 } 4136 }; 4137 CKEDITOR.dom.range.mergeRanges = function(a) { 4138 return CKEDITOR.tools.array.reduce(a, function(a, b) { 4139 var c = a[a.length - 1], 4140 d = !1; 4141 b = b.clone(); 4142 b.enlarge(CKEDITOR.ENLARGE_ELEMENT); 4143 if (c) { 4144 var e = new CKEDITOR.dom.range(b.root), 4145 d = new CKEDITOR.dom.walker(e), 4146 f = CKEDITOR.dom.walker.whitespaces(); 4147 e.setStart(c.endContainer, c.endOffset); 4148 e.setEnd(b.startContainer, b.startOffset); 4149 for (e = d.next(); f(e) || b.endContainer.equals(e);) e = d.next(); 4150 d = !e 4151 } 4152 d ? c.setEnd(b.endContainer, b.endOffset) : a.push(b); 4153 return a 4154 }, []) 4155 } 4156 })(); 4157 CKEDITOR.POSITION_AFTER_START = 1; 4158 CKEDITOR.POSITION_BEFORE_END = 2; 4159 CKEDITOR.POSITION_BEFORE_START = 3; 4160 CKEDITOR.POSITION_AFTER_END = 4; 4161 CKEDITOR.ENLARGE_ELEMENT = 1; 4162 CKEDITOR.ENLARGE_BLOCK_CONTENTS = 2; 4163 CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS = 3; 4164 CKEDITOR.ENLARGE_INLINE = 4; 4165 CKEDITOR.START = 1; 4166 CKEDITOR.END = 2; 4167 CKEDITOR.SHRINK_ELEMENT = 1; 4168 CKEDITOR.SHRINK_TEXT = 2; 4169 "use strict"; 4170 (function() { 4171 function a(a) { 4172 1 > arguments.length || (this.range = a, this.forceBrBreak = 0, this.enlargeBr = 1, this.enforceRealBlocks = 0, this._ || (this._ = {})) 4173 } 4174 4175 function d(a) { 4176 var b = []; 4177 a.forEach(function(a) { 4178 if ("true" == a.getAttribute("contenteditable")) return b.push(a), !1 4179 }, CKEDITOR.NODE_ELEMENT, !0); 4180 return b 4181 } 4182 4183 function b(a, c, f, h) { 4184 a: { 4185 null == h && (h = d(f)); 4186 for (var g; g = h.shift();) 4187 if (g.getDtd().p) { 4188 h = { 4189 element: g, 4190 remaining: h 4191 }; 4192 break a 4193 } h = null 4194 } 4195 if (!h) return 0; 4196 if ((g = CKEDITOR.filter.instances[h.element.data("cke-filter")]) && !g.check(c)) return b(a, 4197 c, f, h.remaining);c = new CKEDITOR.dom.range(h.element);c.selectNodeContents(h.element);c = c.createIterator();c.enlargeBr = a.enlargeBr;c.enforceRealBlocks = a.enforceRealBlocks;c.activeFilter = c.filter = g;a._.nestedEditable = { 4198 element: h.element, 4199 container: f, 4200 remaining: h.remaining, 4201 iterator: c 4202 }; 4203 return 1 4204 } 4205 4206 function c(a, b, c) { 4207 if (!b) return !1; 4208 a = a.clone(); 4209 a.collapse(!c); 4210 return a.checkBoundaryOfElement(b, c ? CKEDITOR.START : CKEDITOR.END) 4211 } 4212 var f = /^[\r\n\t ]+$/, 4213 h = CKEDITOR.dom.walker.bookmark(!1, !0), 4214 k = CKEDITOR.dom.walker.whitespaces(!0), 4215 g = function(a) { 4216 return h(a) && k(a) 4217 }, 4218 n = { 4219 dd: 1, 4220 dt: 1, 4221 li: 1 4222 }; 4223 a.prototype = { 4224 getNextParagraph: function(a) { 4225 var d, k, v, B, D; 4226 a = a || "p"; 4227 if (this._.nestedEditable) { 4228 if (d = this._.nestedEditable.iterator.getNextParagraph(a)) return this.activeFilter = this._.nestedEditable.iterator.activeFilter, d; 4229 this.activeFilter = this.filter; 4230 if (b(this, a, this._.nestedEditable.container, this._.nestedEditable.remaining)) return this.activeFilter = this._.nestedEditable.iterator.activeFilter, this._.nestedEditable.iterator.getNextParagraph(a); 4231 this._.nestedEditable = 4232 null 4233 } 4234 if (!this.range.root.getDtd()[a]) return null; 4235 if (!this._.started) { 4236 var x = this.range.clone(); 4237 k = x.startPath(); 4238 var m = x.endPath(), 4239 J = !x.collapsed && c(x, k.block), 4240 u = !x.collapsed && c(x, m.block, 1); 4241 x.shrink(CKEDITOR.SHRINK_ELEMENT, !0); 4242 J && x.setStartAt(k.block, CKEDITOR.POSITION_BEFORE_END); 4243 u && x.setEndAt(m.block, CKEDITOR.POSITION_AFTER_START); 4244 k = x.endContainer.hasAscendant("pre", !0) || x.startContainer.hasAscendant("pre", !0); 4245 x.enlarge(this.forceBrBreak && !k || !this.enlargeBr ? CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS : CKEDITOR.ENLARGE_BLOCK_CONTENTS); 4246 x.collapsed || (k = new CKEDITOR.dom.walker(x.clone()), m = CKEDITOR.dom.walker.bookmark(!0, !0), k.evaluator = m, this._.nextNode = k.next(), k = new CKEDITOR.dom.walker(x.clone()), k.evaluator = m, k = k.previous(), this._.lastNode = k.getNextSourceNode(!0, null, x.root), this._.lastNode && this._.lastNode.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.trim(this._.lastNode.getText()) && this._.lastNode.getParent().isBlockBoundary() && (m = this.range.clone(), m.moveToPosition(this._.lastNode, CKEDITOR.POSITION_AFTER_END), m.checkEndOfBlock() && 4247 (m = new CKEDITOR.dom.elementPath(m.endContainer, m.root), this._.lastNode = (m.block || m.blockLimit).getNextSourceNode(!0))), this._.lastNode && x.root.contains(this._.lastNode) || (this._.lastNode = this._.docEndMarker = x.document.createText(""), this._.lastNode.insertAfter(k)), x = null); 4248 this._.started = 1; 4249 k = x 4250 } 4251 m = this._.nextNode; 4252 x = this._.lastNode; 4253 for (this._.nextNode = null; m;) { 4254 var J = 0, 4255 u = m.hasAscendant("pre"), 4256 K = m.type != CKEDITOR.NODE_ELEMENT, 4257 l = 0; 4258 if (K) m.type == CKEDITOR.NODE_TEXT && f.test(m.getText()) && (K = 0); 4259 else { 4260 var t = m.getName(); 4261 if (CKEDITOR.dtd.$block[t] && "false" == m.getAttribute("contenteditable")) { 4262 d = m; 4263 b(this, a, d); 4264 break 4265 } else if (m.isBlockBoundary(this.forceBrBreak && !u && { 4266 br: 1 4267 })) { 4268 if ("br" == t) K = 1; 4269 else if (!k && !m.getChildCount() && "hr" != t) { 4270 d = m; 4271 v = m.equals(x); 4272 break 4273 } 4274 k && (k.setEndAt(m, CKEDITOR.POSITION_BEFORE_START), "br" != t && (this._.nextNode = m)); 4275 J = 1 4276 } else { 4277 if (m.getFirst()) { 4278 k || (k = this.range.clone(), k.setStartAt(m, CKEDITOR.POSITION_BEFORE_START)); 4279 m = m.getFirst(); 4280 continue 4281 } 4282 K = 1 4283 } 4284 } 4285 K && !k && (k = this.range.clone(), k.setStartAt(m, CKEDITOR.POSITION_BEFORE_START)); 4286 v = (!J || K) && m.equals(x); 4287 if (k && !J) 4288 for (; !m.getNext(g) && !v;) { 4289 t = m.getParent(); 4290 if (t.isBlockBoundary(this.forceBrBreak && !u && { 4291 br: 1 4292 })) { 4293 J = 1; 4294 K = 0; 4295 v || t.equals(x); 4296 k.setEndAt(t, CKEDITOR.POSITION_BEFORE_END); 4297 break 4298 } 4299 m = t; 4300 K = 1; 4301 v = m.equals(x); 4302 l = 1 4303 } 4304 K && k.setEndAt(m, CKEDITOR.POSITION_AFTER_END); 4305 m = this._getNextSourceNode(m, l, x); 4306 if ((v = !m) || J && k) break 4307 } 4308 if (!d) { 4309 if (!k) return this._.docEndMarker && this._.docEndMarker.remove(), this._.nextNode = null; 4310 d = new CKEDITOR.dom.elementPath(k.startContainer, k.root); 4311 m = d.blockLimit; 4312 J = { 4313 div: 1, 4314 th: 1, 4315 td: 1 4316 }; 4317 d = d.block; 4318 !d && m && !this.enforceRealBlocks && J[m.getName()] && k.checkStartOfBlock() && k.checkEndOfBlock() && !m.equals(k.root) ? d = m : !d || this.enforceRealBlocks && d.is(n) ? (d = this.range.document.createElement(a), k.extractContents().appendTo(d), d.trim(), k.insertNode(d), B = D = !0) : "li" != d.getName() ? k.checkStartOfBlock() && k.checkEndOfBlock() || (d = d.clone(!1), k.extractContents().appendTo(d), d.trim(), D = k.splitBlock(), B = !D.wasStartOfBlock, D = !D.wasEndOfBlock, k.insertNode(d)) : v || (this._.nextNode = d.equals(x) ? null : this._getNextSourceNode(k.getBoundaryNodes().endNode, 4319 1, x)) 4320 } 4321 B && (B = d.getPrevious()) && B.type == CKEDITOR.NODE_ELEMENT && ("br" == B.getName() ? B.remove() : B.getLast() && "br" == B.getLast().$.nodeName.toLowerCase() && B.getLast().remove()); 4322 D && (B = d.getLast()) && B.type == CKEDITOR.NODE_ELEMENT && "br" == B.getName() && (!CKEDITOR.env.needsBrFiller || B.getPrevious(h) || B.getNext(h)) && B.remove(); 4323 this._.nextNode || (this._.nextNode = v || d.equals(x) || !x ? null : this._getNextSourceNode(d, 1, x)); 4324 return d 4325 }, 4326 _getNextSourceNode: function(a, b, c) { 4327 function d(a) { 4328 return !(a.equals(c) || a.equals(f)) 4329 } 4330 var f = 4331 this.range.root; 4332 for (a = a.getNextSourceNode(b, null, d); !h(a);) a = a.getNextSourceNode(b, null, d); 4333 return a 4334 } 4335 }; 4336 CKEDITOR.dom.range.prototype.createIterator = function() { 4337 return new a(this) 4338 } 4339 })(); 4340 CKEDITOR.command = function(a, d) { 4341 this.uiItems = []; 4342 this.exec = function(b) { 4343 if (this.state == CKEDITOR.TRISTATE_DISABLED || !this.checkAllowed()) return !1; 4344 this.editorFocus && a.focus(); 4345 return !1 === this.fire("exec") ? !0 : !1 !== d.exec.call(this, a, b) 4346 }; 4347 this.refresh = function(a, b) { 4348 if (!this.readOnly && a.readOnly) return !0; 4349 if (this.context && !b.isContextFor(this.context) || !this.checkAllowed(!0)) return this.disable(), !0; 4350 this.startDisabled || this.enable(); 4351 this.modes && !this.modes[a.mode] && this.disable(); 4352 return !1 === this.fire("refresh", { 4353 editor: a, 4354 path: b 4355 }) ? !0 : d.refresh && !1 !== d.refresh.apply(this, arguments) 4356 }; 4357 var b; 4358 this.checkAllowed = function(c) { 4359 return c || "boolean" != typeof b ? b = a.activeFilter.checkFeature(this) : b 4360 }; 4361 CKEDITOR.tools.extend(this, d, { 4362 modes: { 4363 wysiwyg: 1 4364 }, 4365 editorFocus: 1, 4366 contextSensitive: !!d.context, 4367 state: CKEDITOR.TRISTATE_DISABLED 4368 }); 4369 CKEDITOR.event.call(this) 4370 }; 4371 CKEDITOR.command.prototype = { 4372 enable: function() { 4373 this.state == CKEDITOR.TRISTATE_DISABLED && this.checkAllowed() && this.setState(this.preserveState && "undefined" != typeof this.previousState ? this.previousState : CKEDITOR.TRISTATE_OFF) 4374 }, 4375 disable: function() { 4376 this.setState(CKEDITOR.TRISTATE_DISABLED) 4377 }, 4378 setState: function(a) { 4379 if (this.state == a || a != CKEDITOR.TRISTATE_DISABLED && !this.checkAllowed()) return !1; 4380 this.previousState = this.state; 4381 this.state = a; 4382 this.fire("state"); 4383 return !0 4384 }, 4385 toggleState: function() { 4386 this.state == CKEDITOR.TRISTATE_OFF ? 4387 this.setState(CKEDITOR.TRISTATE_ON) : this.state == CKEDITOR.TRISTATE_ON && this.setState(CKEDITOR.TRISTATE_OFF) 4388 } 4389 }; 4390 CKEDITOR.event.implementOn(CKEDITOR.command.prototype); 4391 CKEDITOR.ENTER_P = 1; 4392 CKEDITOR.ENTER_BR = 2; 4393 CKEDITOR.ENTER_DIV = 3; 4394 CKEDITOR.config = { 4395 customConfig: "config.js", 4396 autoUpdateElement: !0, 4397 language: "", 4398 defaultLanguage: "en", 4399 contentsLangDirection: "", 4400 enterMode: CKEDITOR.ENTER_P, 4401 forceEnterMode: !1, 4402 shiftEnterMode: CKEDITOR.ENTER_BR, 4403 docType: "\x3c!DOCTYPE html\x3e", 4404 bodyId: "", 4405 bodyClass: "", 4406 fullPage: !1, 4407 height: 200, 4408 contentsCss: CKEDITOR.getUrl("contents.css"), 4409 extraPlugins: "", 4410 removePlugins: "", 4411 protectedSource: [], 4412 tabIndex: 0, 4413 width: "", 4414 baseFloatZIndex: 1E4, 4415 blockedKeystrokes: [CKEDITOR.CTRL + 66, CKEDITOR.CTRL + 73, CKEDITOR.CTRL + 85] 4416 }; 4417 (function() { 4418 function a(a, b, c, d, f) { 4419 var e, w; 4420 a = []; 4421 for (e in b) { 4422 w = b[e]; 4423 w = "boolean" == typeof w ? {} : "function" == typeof w ? { 4424 match: w 4425 } : E(w); 4426 "$" != e.charAt(0) && (w.elements = e); 4427 c && (w.featureName = c.toLowerCase()); 4428 var l = w; 4429 l.elements = k(l.elements, /\s+/) || null; 4430 l.propertiesOnly = l.propertiesOnly || !0 === l.elements; 4431 var p = /\s*,\s*/, 4432 m = void 0; 4433 for (m in P) { 4434 l[m] = k(l[m], p) || null; 4435 var h = l, 4436 t = O[m], 4437 q = k(l[O[m]], p), 4438 A = l[m], 4439 z = [], 4440 g = !0, 4441 H = void 0; 4442 q ? g = !1 : q = {}; 4443 for (H in A) "!" == H.charAt(0) && (H = H.slice(1), z.push(H), q[H] = !0, g = !1); 4444 for (; H = z.pop();) A[H] = 4445 A["!" + H], delete A["!" + H]; 4446 h[t] = (g ? !1 : q) || null 4447 } 4448 l.match = l.match || null; 4449 d.push(w); 4450 a.push(w) 4451 } 4452 b = f.elements; 4453 f = f.generic; 4454 var F; 4455 c = 0; 4456 for (d = a.length; c < d; ++c) { 4457 e = E(a[c]); 4458 w = !0 === e.classes || !0 === e.styles || !0 === e.attributes; 4459 l = e; 4460 m = t = p = void 0; 4461 for (p in P) l[p] = J(l[p]); 4462 h = !0; 4463 for (m in O) { 4464 p = O[m]; 4465 t = l[p]; 4466 q = []; 4467 A = void 0; 4468 for (A in t) - 1 < A.indexOf("*") ? q.push(new RegExp("^" + A.replace(/\*/g, ".*") + "$")) : q.push(A); 4469 t = q; 4470 t.length && (l[p] = t, h = !1) 4471 } 4472 l.nothingRequired = h; 4473 l.noProperties = !(l.attributes || l.classes || l.styles); 4474 if (!0 === e.elements || 4475 null === e.elements) f[w ? "unshift" : "push"](e); 4476 else 4477 for (F in l = e.elements, delete e.elements, l) 4478 if (b[F]) b[F][w ? "unshift" : "push"](e); 4479 else b[F] = [e] 4480 } 4481 } 4482 4483 function d(a, c, d, f) { 4484 if (!a.match || a.match(c)) 4485 if (f || g(a, c)) 4486 if (a.propertiesOnly || (d.valid = !0), d.allAttributes || (d.allAttributes = b(a.attributes, c.attributes, d.validAttributes)), d.allStyles || (d.allStyles = b(a.styles, c.styles, d.validStyles)), !d.allClasses) { 4487 a = a.classes; 4488 c = c.classes; 4489 f = d.validClasses; 4490 if (a) 4491 if (!0 === a) a = !0; 4492 else { 4493 for (var e = 0, w = c.length, l; e < w; ++e) l = c[e], f[l] || 4494 (f[l] = a(l)); 4495 a = !1 4496 } 4497 else a = !1; 4498 d.allClasses = a 4499 } 4500 } 4501 4502 function b(a, b, c) { 4503 if (!a) return !1; 4504 if (!0 === a) return !0; 4505 for (var d in b) c[d] || (c[d] = a(d)); 4506 return !1 4507 } 4508 4509 function c(a, b, c) { 4510 if (!a.match || a.match(b)) { 4511 if (a.noProperties) return !1; 4512 c.hadInvalidAttribute = f(a.attributes, b.attributes) || c.hadInvalidAttribute; 4513 c.hadInvalidStyle = f(a.styles, b.styles) || c.hadInvalidStyle; 4514 a = a.classes; 4515 b = b.classes; 4516 if (a) { 4517 for (var d = !1, e = !0 === a, l = b.length; l--;) 4518 if (e || a(b[l])) b.splice(l, 1), d = !0; 4519 a = d 4520 } else a = !1; 4521 c.hadInvalidClass = a || c.hadInvalidClass 4522 } 4523 } 4524 4525 function f(a, 4526 b) { 4527 if (!a) return !1; 4528 var c = !1, 4529 d = !0 === a, 4530 f; 4531 for (f in b) 4532 if (d || a(f)) delete b[f], c = !0; 4533 return c 4534 } 4535 4536 function h(a, b, c) { 4537 if (a.disabled || a.customConfig && !c || !b) return !1; 4538 a._.cachedChecks = {}; 4539 return !0 4540 } 4541 4542 function k(a, b) { 4543 if (!a) return !1; 4544 if (!0 === a) return a; 4545 if ("string" == typeof a) return a = z(a), "*" == a ? !0 : CKEDITOR.tools.convertArrayToObject(a.split(b)); 4546 if (CKEDITOR.tools.isArray(a)) return a.length ? CKEDITOR.tools.convertArrayToObject(a) : !1; 4547 var c = {}, 4548 d = 0, 4549 f; 4550 for (f in a) c[f] = a[f], d++; 4551 return d ? c : !1 4552 } 4553 4554 function g(a, b) { 4555 if (a.nothingRequired) return !0; 4556 var c, d, f, e; 4557 if (f = a.requiredClasses) 4558 for (e = b.classes, c = 0; c < f.length; ++c) 4559 if (d = f[c], "string" == typeof d) { 4560 if (-1 == CKEDITOR.tools.indexOf(e, d)) return !1 4561 } else if (!CKEDITOR.tools.checkIfAnyArrayItemMatches(e, d)) return !1; 4562 return n(b.styles, a.requiredStyles) && n(b.attributes, a.requiredAttributes) 4563 } 4564 4565 function n(a, b) { 4566 if (!b) return !0; 4567 for (var c = 0, d; c < b.length; ++c) 4568 if (d = b[c], "string" == typeof d) { 4569 if (!(d in a)) return !1 4570 } else if (!CKEDITOR.tools.checkIfAnyObjectPropertyMatches(a, d)) return !1; 4571 return !0 4572 } 4573 4574 function r(a) { 4575 if (!a) return {}; 4576 a = a.split(/\s*,\s*/).sort(); 4577 for (var b = {}; a.length;) b[a.shift()] = "cke-test"; 4578 return b 4579 } 4580 4581 function e(a) { 4582 var b, c, d, f, e = {}, 4583 l = 1; 4584 for (a = z(a); b = a.match(p);)(c = b[2]) ? (d = y(c, "styles"), f = y(c, "attrs"), c = y(c, "classes")) : d = f = c = null, e["$" + l++] = { 4585 elements: b[1], 4586 classes: c, 4587 styles: d, 4588 attributes: f 4589 }, a = a.slice(b[0].length); 4590 return e 4591 } 4592 4593 function y(a, b) { 4594 var c = a.match(N[b]); 4595 return c ? z(c[1]) : null 4596 } 4597 4598 function v(a) { 4599 var b = a.styleBackup = a.attributes.style, 4600 c = a.classBackup = a.attributes["class"]; 4601 a.styles || (a.styles = CKEDITOR.tools.parseCssText(b || 4602 "", 1)); 4603 a.classes || (a.classes = c ? c.split(/\s+/) : []) 4604 } 4605 4606 function B(a, b, f, e) { 4607 var l = 0, 4608 p; 4609 e.toHtml && (b.name = b.name.replace(w, "$1")); 4610 if (e.doCallbacks && a.elementCallbacks) { 4611 a: { 4612 p = a.elementCallbacks; 4613 for (var h = 0, q = p.length, E; h < q; ++h) 4614 if (E = p[h](b)) { 4615 p = E; 4616 break a 4617 } p = void 0 4618 } 4619 if (p) return p 4620 } 4621 if (e.doTransform && (p = a._.transformations[b.name])) { 4622 v(b); 4623 for (h = 0; h < p.length; ++h) t(a, b, p[h]); 4624 x(b) 4625 } 4626 if (e.doFilter) { 4627 a: { 4628 h = b.name;q = a._;a = q.allowedRules.elements[h];p = q.allowedRules.generic;h = q.disallowedRules.elements[h];q = q.disallowedRules.generic; 4629 E = e.skipRequired; 4630 var z = { 4631 valid: !1, 4632 validAttributes: {}, 4633 validClasses: {}, 4634 validStyles: {}, 4635 allAttributes: !1, 4636 allClasses: !1, 4637 allStyles: !1, 4638 hadInvalidAttribute: !1, 4639 hadInvalidClass: !1, 4640 hadInvalidStyle: !1 4641 }, 4642 g, k; 4643 if (a || p) { 4644 v(b); 4645 if (h) 4646 for (g = 0, k = h.length; g < k; ++g) 4647 if (!1 === c(h[g], b, z)) { 4648 a = null; 4649 break a 4650 } if (q) 4651 for (g = 0, k = q.length; g < k; ++g) c(q[g], b, z); 4652 if (a) 4653 for (g = 0, k = a.length; g < k; ++g) d(a[g], b, z, E); 4654 if (p) 4655 for (g = 0, k = p.length; g < k; ++g) d(p[g], b, z, E); 4656 a = z 4657 } else a = null 4658 } 4659 if (!a || !a.valid) return f.push(b), 4660 1;k = a.validAttributes; 4661 var H = a.validStyles; 4662 p = a.validClasses; 4663 var h = b.attributes, 4664 F = b.styles, 4665 q = b.classes;E = b.classBackup; 4666 var L = b.styleBackup, 4667 G, N, C = [], 4668 z = [], 4669 O = /^data-cke-/;g = !1;delete h.style;delete h["class"];delete b.classBackup;delete b.styleBackup; 4670 if (!a.allAttributes) 4671 for (G in h) k[G] || (O.test(G) ? G == (N = G.replace(/^data-cke-saved-/, "")) || k[N] || (delete h[G], g = !0) : (delete h[G], g = !0)); 4672 if (!a.allStyles || a.hadInvalidStyle) { 4673 for (G in F) a.allStyles || H[G] ? C.push(G + ":" + F[G]) : g = !0; 4674 C.length && (h.style = C.sort().join("; ")) 4675 } else L && (h.style = L); 4676 if (!a.allClasses || 4677 a.hadInvalidClass) { 4678 for (G = 0; G < q.length; ++G)(a.allClasses || p[q[G]]) && z.push(q[G]); 4679 z.length && (h["class"] = z.sort().join(" ")); 4680 E && z.length < E.split(/\s+/).length && (g = !0) 4681 } else E && (h["class"] = E);g && (l = 1); 4682 if (!e.skipFinalValidation && !m(b)) return f.push(b), 4683 1 4684 } 4685 e.toHtml && (b.name = b.name.replace(A, "cke:$1")); 4686 return l 4687 } 4688 4689 function D(a) { 4690 var b = [], 4691 c; 4692 for (c in a) - 1 < c.indexOf("*") && b.push(c.replace(/\*/g, ".*")); 4693 return b.length ? new RegExp("^(?:" + b.join("|") + ")$") : null 4694 } 4695 4696 function x(a) { 4697 var b = a.attributes, 4698 c; 4699 delete b.style; 4700 delete b["class"]; 4701 if (c = CKEDITOR.tools.writeCssText(a.styles, !0)) b.style = c; 4702 a.classes.length && (b["class"] = a.classes.sort().join(" ")) 4703 } 4704 4705 function m(a) { 4706 switch (a.name) { 4707 case "a": 4708 if (!(a.children.length || a.attributes.name || a.attributes.id)) return !1; 4709 break; 4710 case "img": 4711 if (!a.attributes.src) return !1 4712 } 4713 return !0 4714 } 4715 4716 function J(a) { 4717 if (!a) return !1; 4718 if (!0 === a) return !0; 4719 var b = D(a); 4720 return function(c) { 4721 return c in a || b && c.match(b) 4722 } 4723 } 4724 4725 function u() { 4726 return new CKEDITOR.htmlParser.element("br") 4727 } 4728 4729 function K(a) { 4730 return a.type == CKEDITOR.NODE_ELEMENT && ("br" == 4731 a.name || q.$block[a.name]) 4732 } 4733 4734 function l(a, b, c) { 4735 var d = a.name; 4736 if (q.$empty[d] || !a.children.length) "hr" == d && "br" == b ? a.replaceWith(u()) : (a.parent && c.push({ 4737 check: "it", 4738 el: a.parent 4739 }), a.remove()); 4740 else if (q.$block[d] || "tr" == d) 4741 if ("br" == b) a.previous && !K(a.previous) && (b = u(), b.insertBefore(a)), a.next && !K(a.next) && (b = u(), b.insertAfter(a)), a.replaceWithChildren(); 4742 else { 4743 var d = a.children, 4744 f; 4745 b: { 4746 f = q[b]; 4747 for (var e = 0, l = d.length, w; e < l; ++e) 4748 if (w = d[e], w.type == CKEDITOR.NODE_ELEMENT && !f[w.name]) { 4749 f = !1; 4750 break b 4751 } f = !0 4752 } 4753 if (f) a.name = b, a.attributes = {}, c.push({ 4754 check: "parent-down", 4755 el: a 4756 }); 4757 else { 4758 f = a.parent; 4759 for (var e = f.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT || "body" == f.name, p, h, l = d.length; 0 < l;) w = d[--l], e && (w.type == CKEDITOR.NODE_TEXT || w.type == CKEDITOR.NODE_ELEMENT && q.$inline[w.name]) ? (p || (p = new CKEDITOR.htmlParser.element(b), p.insertAfter(a), c.push({ 4760 check: "parent-down", 4761 el: p 4762 })), p.add(w, 0)) : (p = null, h = q[f.name] || q.span, w.insertAfter(a), f.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT || w.type != CKEDITOR.NODE_ELEMENT || h[w.name] || c.push({ 4763 check: "el-up", 4764 el: w 4765 })); 4766 a.remove() 4767 } 4768 } 4769 else d in { 4770 style: 1, 4771 script: 1 4772 } ? a.remove() : (a.parent && c.push({ 4773 check: "it", 4774 el: a.parent 4775 }), a.replaceWithChildren()) 4776 } 4777 4778 function t(a, b, c) { 4779 var d, f; 4780 for (d = 0; d < c.length; ++d) 4781 if (f = c[d], !(f.check && !a.check(f.check, !1) || f.left && !f.left(b))) { 4782 f.right(b, G); 4783 break 4784 } 4785 } 4786 4787 function F(a, b) { 4788 var c = b.getDefinition(), 4789 d = c.attributes, 4790 f = c.styles, 4791 e, l, w, p; 4792 if (a.name != c.element) return !1; 4793 for (e in d) 4794 if ("class" == e) 4795 for (c = d[e].split(/\s+/), w = a.classes.join("|"); p = c.pop();) { 4796 if (-1 == w.indexOf(p)) return !1 4797 } else if (a.attributes[e] != d[e]) return !1; 4798 for (l in f) 4799 if (a.styles[l] != 4800 f[l]) return !1; 4801 return !0 4802 } 4803 4804 function L(a, b) { 4805 var c, d; 4806 "string" == typeof a ? c = a : a instanceof CKEDITOR.style ? d = a : (c = a[0], d = a[1]); 4807 return [{ 4808 element: c, 4809 left: d, 4810 right: function(a, c) { 4811 c.transform(a, b) 4812 } 4813 }] 4814 } 4815 4816 function C(a) { 4817 return function(b) { 4818 return F(b, a) 4819 } 4820 } 4821 4822 function M(a) { 4823 return function(b, c) { 4824 c[a](b) 4825 } 4826 } 4827 var q = CKEDITOR.dtd, 4828 E = CKEDITOR.tools.copy, 4829 z = CKEDITOR.tools.trim, 4830 H = ["", "p", "br", "div"]; 4831 CKEDITOR.FILTER_SKIP_TREE = 2; 4832 CKEDITOR.filter = function(a) { 4833 this.allowedContent = []; 4834 this.disallowedContent = []; 4835 this.elementCallbacks = null; 4836 this.disabled = !1; 4837 this.editor = null; 4838 this.id = CKEDITOR.tools.getNextNumber(); 4839 this._ = { 4840 allowedRules: { 4841 elements: {}, 4842 generic: [] 4843 }, 4844 disallowedRules: { 4845 elements: {}, 4846 generic: [] 4847 }, 4848 transformations: {}, 4849 cachedTests: {}, 4850 cachedChecks: {} 4851 }; 4852 CKEDITOR.filter.instances[this.id] = this; 4853 if (a instanceof CKEDITOR.editor) { 4854 a = this.editor = a; 4855 this.customConfig = !0; 4856 var b = a.config.allowedContent; 4857 !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], 4858 "default", 1), this.disallow(a.config.disallowedContent)) 4859 } else this.customConfig = !1, this.allow(a, "default", 1) 4860 }; 4861 CKEDITOR.filter.instances = {}; 4862 CKEDITOR.filter.prototype = { 4863 allow: function(b, c, d) { 4864 if (!h(this, b, d)) return !1; 4865 var f, l; 4866 if ("string" == typeof b) b = e(b); 4867 else if (b instanceof CKEDITOR.style) { 4868 if (b.toAllowedContentRules) return this.allow(b.toAllowedContentRules(this.editor), c, d); 4869 f = b.getDefinition(); 4870 b = {}; 4871 d = f.attributes; 4872 b[f.element] = f = { 4873 styles: f.styles, 4874 requiredStyles: f.styles && CKEDITOR.tools.objectKeys(f.styles) 4875 }; 4876 d && (d = E(d), f.classes = d["class"] ? d["class"].split(/\s+/) : null, f.requiredClasses = f.classes, delete d["class"], f.attributes = d, f.requiredAttributes = d && CKEDITOR.tools.objectKeys(d)) 4877 } else if (CKEDITOR.tools.isArray(b)) { 4878 for (f = 0; f < b.length; ++f) l = this.allow(b[f], c, d); 4879 return l 4880 } 4881 a(this, b, c, this.allowedContent, this._.allowedRules); 4882 return !0 4883 }, 4884 applyTo: function(a, b, c, d) { 4885 if (this.disabled) return !1; 4886 var f = this, 4887 e = [], 4888 w = this.editor && this.editor.config.protectedSource, 4889 p, h = !1, 4890 t = { 4891 doFilter: !c, 4892 doTransform: !0, 4893 doCallbacks: !0, 4894 toHtml: b 4895 }; 4896 a.forEach(function(a) { 4897 if (a.type == CKEDITOR.NODE_ELEMENT) { 4898 if ("off" == a.attributes["data-cke-filter"]) return !1; 4899 if (!b || "span" != a.name || !~CKEDITOR.tools.objectKeys(a.attributes).join("|").indexOf("data-cke-")) 4900 if (p = B(f, a, e, t), p & 1) h = !0; 4901 else if (p & 2) return !1 4902 } else if (a.type == CKEDITOR.NODE_COMMENT && a.value.match(/^\{cke_protected\}(?!\{C\})/)) { 4903 var c; 4904 a: { 4905 var d = decodeURIComponent(a.value.replace(/^\{cke_protected\}/, ""));c = []; 4906 var l, m, q; 4907 if (w) 4908 for (m = 0; m < w.length; ++m) 4909 if ((q = d.match(w[m])) && q[0].length == d.length) { 4910 c = !0; 4911 break a 4912 } d = CKEDITOR.htmlParser.fragment.fromHtml(d);1 == d.children.length && (l = d.children[0]).type == CKEDITOR.NODE_ELEMENT && B(f, l, c, t);c = !c.length 4913 } 4914 c || e.push(a) 4915 } 4916 }, null, !0); 4917 e.length && (h = !0); 4918 var E; 4919 a = []; 4920 d = H[d || (this.editor ? this.editor.enterMode : CKEDITOR.ENTER_P)]; 4921 for (var z; c = e.pop();) c.type == CKEDITOR.NODE_ELEMENT ? l(c, d, a) : c.remove(); 4922 for (; E = a.pop();) 4923 if (c = E.el, c.parent) switch (z = q[c.parent.name] || q.span, E.check) { 4924 case "it": 4925 q.$removeEmpty[c.name] && !c.children.length ? l(c, d, a) : m(c) || l(c, d, a); 4926 break; 4927 case "el-up": 4928 c.parent.type == 4929 CKEDITOR.NODE_DOCUMENT_FRAGMENT || z[c.name] || l(c, d, a); 4930 break; 4931 case "parent-down": 4932 c.parent.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT || z[c.name] || l(c.parent, d, a) 4933 } 4934 return h 4935 }, 4936 checkFeature: function(a) { 4937 if (this.disabled || !a) return !0; 4938 a.toFeature && (a = a.toFeature(this.editor)); 4939 return !a.requiredContent || this.check(a.requiredContent) 4940 }, 4941 disable: function() { 4942 this.disabled = !0 4943 }, 4944 disallow: function(b) { 4945 if (!h(this, b, !0)) return !1; 4946 "string" == typeof b && (b = e(b)); 4947 a(this, b, null, this.disallowedContent, this._.disallowedRules); 4948 return !0 4949 }, 4950 addContentForms: function(a) { 4951 if (!this.disabled && a) { 4952 var b, c, d = [], 4953 f; 4954 for (b = 0; b < a.length && !f; ++b) c = a[b], ("string" == typeof c || c instanceof CKEDITOR.style) && this.check(c) && (f = c); 4955 if (f) { 4956 for (b = 0; b < a.length; ++b) d.push(L(a[b], f)); 4957 this.addTransformations(d) 4958 } 4959 } 4960 }, 4961 addElementCallback: function(a) { 4962 this.elementCallbacks || (this.elementCallbacks = []); 4963 this.elementCallbacks.push(a) 4964 }, 4965 addFeature: function(a) { 4966 if (this.disabled || !a) return !0; 4967 a.toFeature && (a = a.toFeature(this.editor)); 4968 this.allow(a.allowedContent, a.name); 4969 this.addTransformations(a.contentTransformations); 4970 this.addContentForms(a.contentForms); 4971 return a.requiredContent && (this.customConfig || this.disallowedContent.length) ? this.check(a.requiredContent) : !0 4972 }, 4973 addTransformations: function(a) { 4974 var b, c; 4975 if (!this.disabled && a) { 4976 var d = this._.transformations, 4977 f; 4978 for (f = 0; f < a.length; ++f) { 4979 b = a[f]; 4980 var e = void 0, 4981 l = void 0, 4982 w = void 0, 4983 p = void 0, 4984 h = void 0, 4985 m = void 0; 4986 c = []; 4987 for (l = 0; l < b.length; ++l) w = b[l], "string" == typeof w ? (w = w.split(/\s*:\s*/), p = w[0], h = null, m = w[1]) : (p = w.check, h = w.left, m = w.right), e || (e = w, e = e.element ? e.element : p ? p.match(/^([a-z0-9]+)/i)[0] : 4988 e.left.getDefinition().element), h instanceof CKEDITOR.style && (h = C(h)), c.push({ 4989 check: p == e ? null : p, 4990 left: h, 4991 right: "string" == typeof m ? M(m) : m 4992 }); 4993 b = e; 4994 d[b] || (d[b] = []); 4995 d[b].push(c) 4996 } 4997 } 4998 }, 4999 check: function(a, b, c) { 5000 if (this.disabled) return !0; 5001 if (CKEDITOR.tools.isArray(a)) { 5002 for (var d = a.length; d--;) 5003 if (this.check(a[d], b, c)) return !0; 5004 return !1 5005 } 5006 var f, w; 5007 if ("string" == typeof a) { 5008 w = a + "\x3c" + (!1 === b ? "0" : "1") + (c ? "1" : "0") + "\x3e"; 5009 if (w in this._.cachedChecks) return this._.cachedChecks[w]; 5010 f = e(a).$1; 5011 var l = f.styles, 5012 d = f.classes; 5013 f.name = f.elements; 5014 f.classes = d = d ? d.split(/\s*,\s*/) : []; 5015 f.styles = r(l); 5016 f.attributes = r(f.attributes); 5017 f.children = []; 5018 d.length && (f.attributes["class"] = d.join(" ")); 5019 l && (f.attributes.style = CKEDITOR.tools.writeCssText(f.styles)) 5020 } else f = a.getDefinition(), l = f.styles, d = f.attributes || {}, l && !CKEDITOR.tools.isEmpty(l) ? (l = E(l), d.style = CKEDITOR.tools.writeCssText(l, !0)) : l = {}, f = { 5021 name: f.element, 5022 attributes: d, 5023 classes: d["class"] ? d["class"].split(/\s+/) : [], 5024 styles: l, 5025 children: [] 5026 }; 5027 var l = CKEDITOR.tools.clone(f), 5028 p = [], 5029 h; 5030 if (!1 !== b && (h = this._.transformations[f.name])) { 5031 for (d = 5032 0; d < h.length; ++d) t(this, f, h[d]); 5033 x(f) 5034 } 5035 B(this, l, p, { 5036 doFilter: !0, 5037 doTransform: !1 !== b, 5038 skipRequired: !c, 5039 skipFinalValidation: !c 5040 }); 5041 0 < p.length ? c = !1 : ((b = f.attributes["class"]) && (f.attributes["class"] = f.attributes["class"].split(" ").sort().join(" ")), c = CKEDITOR.tools.objectCompare(f.attributes, l.attributes, !0), b && (f.attributes["class"] = b)); 5042 "string" == typeof a && (this._.cachedChecks[w] = c); 5043 return c 5044 }, 5045 getAllowedEnterMode: function() { 5046 var a = ["p", "div", "br"], 5047 b = { 5048 p: CKEDITOR.ENTER_P, 5049 div: CKEDITOR.ENTER_DIV, 5050 br: CKEDITOR.ENTER_BR 5051 }; 5052 return function(c, d) { 5053 var f = a.slice(), 5054 e; 5055 if (this.check(H[c])) return c; 5056 for (d || (f = f.reverse()); e = f.pop();) 5057 if (this.check(e)) return b[e]; 5058 return CKEDITOR.ENTER_BR 5059 } 5060 }(), 5061 clone: function() { 5062 var a = new CKEDITOR.filter, 5063 b = CKEDITOR.tools.clone; 5064 a.allowedContent = b(this.allowedContent); 5065 a._.allowedRules = b(this._.allowedRules); 5066 a.disallowedContent = b(this.disallowedContent); 5067 a._.disallowedRules = b(this._.disallowedRules); 5068 a._.transformations = b(this._.transformations); 5069 a.disabled = this.disabled; 5070 a.editor = this.editor; 5071 return a 5072 }, 5073 destroy: function() { 5074 delete CKEDITOR.filter.instances[this.id]; 5075 delete this._; 5076 delete this.allowedContent; 5077 delete this.disallowedContent 5078 } 5079 }; 5080 var P = { 5081 styles: 1, 5082 attributes: 1, 5083 classes: 1 5084 }, 5085 O = { 5086 styles: "requiredStyles", 5087 attributes: "requiredAttributes", 5088 classes: "requiredClasses" 5089 }, 5090 p = /^([a-z0-9\-*\s]+)((?:\s*\{[!\w\-,\s\*]+\}\s*|\s*\[[!\w\-,\s\*]+\]\s*|\s*\([!\w\-,\s\*]+\)\s*){0,3})(?:;\s*|$)/i, 5091 N = { 5092 styles: /{([^}]+)}/, 5093 attrs: /\[([^\]]+)\]/, 5094 classes: /\(([^\)]+)\)/ 5095 }, 5096 w = /^cke:(object|embed|param)$/, 5097 A = /^(object|embed|param)$/, 5098 G; 5099 G = CKEDITOR.filter.transformationsTools = { 5100 sizeToStyle: function(a) { 5101 this.lengthToStyle(a, 5102 "width"); 5103 this.lengthToStyle(a, "height") 5104 }, 5105 sizeToAttribute: function(a) { 5106 this.lengthToAttribute(a, "width"); 5107 this.lengthToAttribute(a, "height") 5108 }, 5109 lengthToStyle: function(a, b, c) { 5110 c = c || b; 5111 if (!(c in a.styles)) { 5112 var d = a.attributes[b]; 5113 d && (/^\d+$/.test(d) && (d += "px"), a.styles[c] = d) 5114 } 5115 delete a.attributes[b] 5116 }, 5117 lengthToAttribute: function(a, b, c) { 5118 c = c || b; 5119 if (!(c in a.attributes)) { 5120 var d = a.styles[b], 5121 f = d && d.match(/^(\d+)(?:\.\d*)?px$/); 5122 f ? a.attributes[c] = f[1] : "cke-test" == d && (a.attributes[c] = "cke-test") 5123 } 5124 delete a.styles[b] 5125 }, 5126 alignmentToStyle: function(a) { 5127 if (!("float" in 5128 a.styles)) { 5129 var b = a.attributes.align; 5130 if ("left" == b || "right" == b) a.styles["float"] = b 5131 } 5132 delete a.attributes.align 5133 }, 5134 alignmentToAttribute: function(a) { 5135 if (!("align" in a.attributes)) { 5136 var b = a.styles["float"]; 5137 if ("left" == b || "right" == b) a.attributes.align = b 5138 } 5139 delete a.styles["float"] 5140 }, 5141 splitBorderShorthand: function(a) { 5142 if (a.styles.border) { 5143 var b = CKEDITOR.tools.style.parse.border(a.styles.border); 5144 b.color && (a.styles["border-color"] = b.color); 5145 b.style && (a.styles["border-style"] = b.style); 5146 b.width && (a.styles["border-width"] = b.width); 5147 delete a.styles.border 5148 } 5149 }, 5150 listTypeToStyle: function(a) { 5151 if (a.attributes.type) switch (a.attributes.type) { 5152 case "a": 5153 a.styles["list-style-type"] = "lower-alpha"; 5154 break; 5155 case "A": 5156 a.styles["list-style-type"] = "upper-alpha"; 5157 break; 5158 case "i": 5159 a.styles["list-style-type"] = "lower-roman"; 5160 break; 5161 case "I": 5162 a.styles["list-style-type"] = "upper-roman"; 5163 break; 5164 case "1": 5165 a.styles["list-style-type"] = "decimal"; 5166 break; 5167 default: 5168 a.styles["list-style-type"] = a.attributes.type 5169 } 5170 }, 5171 splitMarginShorthand: function(a) { 5172 function b(d) { 5173 a.styles["margin-top"] = 5174 c[d[0]]; 5175 a.styles["margin-right"] = c[d[1]]; 5176 a.styles["margin-bottom"] = c[d[2]]; 5177 a.styles["margin-left"] = c[d[3]] 5178 } 5179 if (a.styles.margin) { 5180 var c = a.styles.margin.match(/(\-?[\.\d]+\w+)/g) || ["0px"]; 5181 switch (c.length) { 5182 case 1: 5183 b([0, 0, 0, 0]); 5184 break; 5185 case 2: 5186 b([0, 1, 0, 1]); 5187 break; 5188 case 3: 5189 b([0, 1, 2, 1]); 5190 break; 5191 case 4: 5192 b([0, 1, 2, 3]) 5193 } 5194 delete a.styles.margin 5195 } 5196 }, 5197 matchesStyle: F, 5198 transform: function(a, b) { 5199 if ("string" == typeof b) a.name = b; 5200 else { 5201 var c = b.getDefinition(), 5202 d = c.styles, 5203 f = c.attributes, 5204 e, l, w, p; 5205 a.name = c.element; 5206 for (e in f) 5207 if ("class" == e) 5208 for (c = 5209 a.classes.join("|"), w = f[e].split(/\s+/); p = w.pop();) - 1 == c.indexOf(p) && a.classes.push(p); 5210 else a.attributes[e] = f[e]; 5211 for (l in d) a.styles[l] = d[l] 5212 } 5213 } 5214 } 5215 })(); 5216 (function() { 5217 CKEDITOR.focusManager = function(a) { 5218 if (a.focusManager) return a.focusManager; 5219 this.hasFocus = !1; 5220 this.currentActive = null; 5221 this._ = { 5222 editor: a 5223 }; 5224 return this 5225 }; 5226 CKEDITOR.focusManager._ = { 5227 blurDelay: 200 5228 }; 5229 CKEDITOR.focusManager.prototype = { 5230 focus: function(a) { 5231 this._.timer && clearTimeout(this._.timer); 5232 a && (this.currentActive = a); 5233 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")) 5234 }, 5235 lock: function() { 5236 this._.locked = 5237 1 5238 }, 5239 unlock: function() { 5240 delete this._.locked 5241 }, 5242 blur: function(a) { 5243 function d() { 5244 if (this.hasFocus) { 5245 this.hasFocus = !1; 5246 var a = this._.editor.container; 5247 a && a.removeClass("cke_focus"); 5248 this._.editor.fire("blur") 5249 } 5250 } 5251 if (!this._.locked) { 5252 this._.timer && clearTimeout(this._.timer); 5253 var b = CKEDITOR.focusManager._.blurDelay; 5254 a || !b ? d.call(this) : this._.timer = CKEDITOR.tools.setTimeout(function() { 5255 delete this._.timer; 5256 d.call(this) 5257 }, b, this) 5258 } 5259 }, 5260 add: function(a, d) { 5261 var b = a.getCustomData("focusmanager"); 5262 if (!b || b != this) { 5263 b && b.remove(a); 5264 var b = 5265 "focus", 5266 c = "blur"; 5267 d && (CKEDITOR.env.ie ? (b = "focusin", c = "focusout") : CKEDITOR.event.useCapture = 1); 5268 var f = { 5269 blur: function() { 5270 a.equals(this.currentActive) && this.blur() 5271 }, 5272 focus: function() { 5273 this.focus(a) 5274 } 5275 }; 5276 a.on(b, f.focus, this); 5277 a.on(c, f.blur, this); 5278 d && (CKEDITOR.event.useCapture = 0); 5279 a.setCustomData("focusmanager", this); 5280 a.setCustomData("focusmanager_handlers", f) 5281 } 5282 }, 5283 remove: function(a) { 5284 a.removeCustomData("focusmanager"); 5285 var d = a.removeCustomData("focusmanager_handlers"); 5286 a.removeListener("blur", d.blur); 5287 a.removeListener("focus", 5288 d.focus) 5289 } 5290 } 5291 })(); 5292 CKEDITOR.keystrokeHandler = function(a) { 5293 if (a.keystrokeHandler) return a.keystrokeHandler; 5294 this.keystrokes = {}; 5295 this.blockedKeystrokes = {}; 5296 this._ = { 5297 editor: a 5298 }; 5299 return this 5300 }; 5301 (function() { 5302 var a, d = function(b) { 5303 b = b.data; 5304 var d = b.getKeystroke(), 5305 h = this.keystrokes[d], 5306 k = this._.editor; 5307 a = !1 === k.fire("key", { 5308 keyCode: d, 5309 domEvent: b 5310 }); 5311 a || (h && (a = !1 !== k.execCommand(h, { 5312 from: "keystrokeHandler" 5313 })), a || (a = !!this.blockedKeystrokes[d])); 5314 a && b.preventDefault(!0); 5315 return !a 5316 }, 5317 b = function(b) { 5318 a && (a = !1, b.data.preventDefault(!0)) 5319 }; 5320 CKEDITOR.keystrokeHandler.prototype = { 5321 attach: function(a) { 5322 a.on("keydown", d, this); 5323 if (CKEDITOR.env.gecko && CKEDITOR.env.mac) a.on("keypress", b, this) 5324 } 5325 } 5326 })(); 5327 (function() { 5328 CKEDITOR.lang = { 5329 languages: { 5330 af: 1, 5331 ar: 1, 5332 az: 1, 5333 bg: 1, 5334 bn: 1, 5335 bs: 1, 5336 ca: 1, 5337 cs: 1, 5338 cy: 1, 5339 da: 1, 5340 de: 1, 5341 "de-ch": 1, 5342 el: 1, 5343 "en-au": 1, 5344 "en-ca": 1, 5345 "en-gb": 1, 5346 en: 1, 5347 eo: 1, 5348 es: 1, 5349 "es-mx": 1, 5350 et: 1, 5351 eu: 1, 5352 fa: 1, 5353 fi: 1, 5354 fo: 1, 5355 "fr-ca": 1, 5356 fr: 1, 5357 gl: 1, 5358 gu: 1, 5359 he: 1, 5360 hi: 1, 5361 hr: 1, 5362 hu: 1, 5363 id: 1, 5364 is: 1, 5365 it: 1, 5366 ja: 1, 5367 ka: 1, 5368 km: 1, 5369 ko: 1, 5370 ku: 1, 5371 lt: 1, 5372 lv: 1, 5373 mk: 1, 5374 mn: 1, 5375 ms: 1, 5376 nb: 1, 5377 nl: 1, 5378 no: 1, 5379 oc: 1, 5380 pl: 1, 5381 "pt-br": 1, 5382 pt: 1, 5383 ro: 1, 5384 ru: 1, 5385 si: 1, 5386 sk: 1, 5387 sl: 1, 5388 sq: 1, 5389 "sr-latn": 1, 5390 sr: 1, 5391 sv: 1, 5392 th: 1, 5393 tr: 1, 5394 tt: 1, 5395 ug: 1, 5396 uk: 1, 5397 vi: 1, 5398 "zh-cn": 1, 5399 zh: 1 5400 }, 5401 rtl: { 5402 ar: 1, 5403 fa: 1, 5404 he: 1, 5405 ku: 1, 5406 ug: 1 5407 }, 5408 load: function(a, d, b) { 5409 a && CKEDITOR.lang.languages[a] || 5410 (a = this.detect(d, a)); 5411 var c = this; 5412 d = function() { 5413 c[a].dir = c.rtl[a] ? "rtl" : "ltr"; 5414 b(a, c[a]) 5415 }; 5416 this[a] ? d() : CKEDITOR.scriptLoader.load(CKEDITOR.getUrl("lang/" + a + ".js"), d, this) 5417 }, 5418 detect: function(a, d) { 5419 var b = this.languages; 5420 d = d || navigator.userLanguage || navigator.language || a; 5421 var c = d.toLowerCase().match(/([a-z]+)(?:-([a-z]+))?/), 5422 f = c[1], 5423 c = c[2]; 5424 b[f + "-" + c] ? f = f + "-" + c : b[f] || (f = null); 5425 CKEDITOR.lang.detect = f ? function() { 5426 return f 5427 } : function(a) { 5428 return a 5429 }; 5430 return f || a 5431 } 5432 } 5433 })(); 5434 CKEDITOR.scriptLoader = function() { 5435 var a = {}, 5436 d = {}; 5437 return { 5438 load: function(b, c, f, h) { 5439 var k = "string" == typeof b; 5440 k && (b = [b]); 5441 f || (f = CKEDITOR); 5442 var g = b.length, 5443 n = [], 5444 r = [], 5445 e = function(a) { 5446 c && (k ? c.call(f, a) : c.call(f, n, r)) 5447 }; 5448 if (0 === g) e(!0); 5449 else { 5450 var y = function(a, b) { 5451 (b ? n : r).push(a); 5452 0 >= --g && (h && CKEDITOR.document.getDocumentElement().removeStyle("cursor"), e(b)) 5453 }, 5454 v = function(b, c) { 5455 a[b] = 1; 5456 var f = d[b]; 5457 delete d[b]; 5458 for (var e = 0; e < f.length; e++) f[e](b, c) 5459 }, 5460 B = function(b) { 5461 if (a[b]) y(b, !0); 5462 else { 5463 var f = d[b] || (d[b] = []); 5464 f.push(y); 5465 if (!(1 < f.length)) { 5466 var e = 5467 new CKEDITOR.dom.element("script"); 5468 e.setAttributes({ 5469 type: "text/javascript", 5470 src: b 5471 }); 5472 c && (CKEDITOR.env.ie && (8 >= CKEDITOR.env.version || CKEDITOR.env.ie9Compat) ? e.$.onreadystatechange = function() { 5473 if ("loaded" == e.$.readyState || "complete" == e.$.readyState) e.$.onreadystatechange = null, v(b, !0) 5474 } : (e.$.onload = function() { 5475 setTimeout(function() { 5476 v(b, !0) 5477 }, 0) 5478 }, e.$.onerror = function() { 5479 v(b, !1) 5480 })); 5481 e.appendTo(CKEDITOR.document.getHead()) 5482 } 5483 } 5484 }; 5485 h && CKEDITOR.document.getDocumentElement().setStyle("cursor", "wait"); 5486 for (var D = 0; D < g; D++) B(b[D]) 5487 } 5488 }, 5489 queue: function() { 5490 function a() { 5491 var b; 5492 (b = c[0]) && this.load(b.scriptUrl, b.callback, CKEDITOR, 0) 5493 } 5494 var c = []; 5495 return function(d, h) { 5496 var k = this; 5497 c.push({ 5498 scriptUrl: d, 5499 callback: function() { 5500 h && h.apply(this, arguments); 5501 c.shift(); 5502 a.call(k) 5503 } 5504 }); 5505 1 == c.length && a.call(this) 5506 } 5507 }() 5508 } 5509 }(); 5510 CKEDITOR.resourceManager = function(a, d) { 5511 this.basePath = a; 5512 this.fileName = d; 5513 this.registered = {}; 5514 this.loaded = {}; 5515 this.externals = {}; 5516 this._ = { 5517 waitingList: {} 5518 } 5519 }; 5520 CKEDITOR.resourceManager.prototype = { 5521 add: function(a, d) { 5522 if (this.registered[a]) throw Error('[CKEDITOR.resourceManager.add] The resource name "' + a + '" is already registered.'); 5523 var b = this.registered[a] = d || {}; 5524 b.name = a; 5525 b.path = this.getPath(a); 5526 CKEDITOR.fire(a + CKEDITOR.tools.capitalize(this.fileName) + "Ready", b); 5527 return this.get(a) 5528 }, 5529 get: function(a) { 5530 return this.registered[a] || null 5531 }, 5532 getPath: function(a) { 5533 var d = this.externals[a]; 5534 return CKEDITOR.getUrl(d && d.dir || this.basePath + a + "/") 5535 }, 5536 getFilePath: function(a) { 5537 var d = this.externals[a]; 5538 return CKEDITOR.getUrl(this.getPath(a) + (d ? d.file : this.fileName + ".js")) 5539 }, 5540 addExternal: function(a, d, b) { 5541 a = a.split(","); 5542 for (var c = 0; c < a.length; c++) { 5543 var f = a[c]; 5544 b || (d = d.replace(/[^\/]+$/, function(a) { 5545 b = a; 5546 return "" 5547 })); 5548 this.externals[f] = { 5549 dir: d, 5550 file: b || this.fileName + ".js" 5551 } 5552 } 5553 }, 5554 load: function(a, d, b) { 5555 CKEDITOR.tools.isArray(a) || (a = a ? [a] : []); 5556 for (var c = this.loaded, f = this.registered, h = [], k = {}, g = {}, n = 0; n < a.length; n++) { 5557 var r = a[n]; 5558 if (r) 5559 if (c[r] || f[r]) g[r] = this.get(r); 5560 else { 5561 var e = this.getFilePath(r); 5562 h.push(e); 5563 e in k || (k[e] = []); 5564 k[e].push(r) 5565 } 5566 } 5567 CKEDITOR.scriptLoader.load(h, function(a, f) { 5568 if (f.length) throw Error('[CKEDITOR.resourceManager.load] Resource name "' + k[f[0]].join(",") + '" was not found at "' + f[0] + '".'); 5569 for (var e = 0; e < a.length; e++) 5570 for (var h = k[a[e]], n = 0; n < h.length; n++) { 5571 var m = h[n]; 5572 g[m] = this.get(m); 5573 c[m] = 1 5574 } 5575 d.call(b, g) 5576 }, this) 5577 } 5578 }; 5579 CKEDITOR.plugins = new CKEDITOR.resourceManager("plugins/", "plugin"); 5580 CKEDITOR.plugins.load = CKEDITOR.tools.override(CKEDITOR.plugins.load, function(a) { 5581 var d = {}; 5582 return function(b, c, f) { 5583 var h = {}, 5584 k = function(b) { 5585 a.call(this, b, function(a) { 5586 CKEDITOR.tools.extend(h, a); 5587 var b = [], 5588 e; 5589 for (e in a) { 5590 var g = a[e], 5591 v = g && g.requires; 5592 if (!d[e]) { 5593 if (g.icons) 5594 for (var B = g.icons.split(","), D = B.length; D--;) CKEDITOR.skin.addIcon(B[D], g.path + "icons/" + (CKEDITOR.env.hidpi && g.hidpi ? "hidpi/" : "") + B[D] + ".png"); 5595 d[e] = 1 5596 } 5597 if (v) 5598 for (v.split && (v = v.split(",")), g = 0; g < v.length; g++) h[v[g]] || b.push(v[g]) 5599 } 5600 if (b.length) k.call(this, 5601 b); 5602 else { 5603 for (e in h) g = h[e], g.onLoad && !g.onLoad._called && (!1 === g.onLoad() && delete h[e], g.onLoad._called = 1); 5604 c && c.call(f || window, h) 5605 } 5606 }, this) 5607 }; 5608 k.call(this, b) 5609 } 5610 }); 5611 CKEDITOR.plugins.setLang = function(a, d, b) { 5612 var c = this.get(a); 5613 a = c.langEntries || (c.langEntries = {}); 5614 c = c.lang || (c.lang = []); 5615 c.split && (c = c.split(",")); - 1 == CKEDITOR.tools.indexOf(c, d) && c.push(d); 5616 a[d] = b 5617 }; 5618 CKEDITOR.ui = function(a) { 5619 if (a.ui) return a.ui; 5620 this.items = {}; 5621 this.instances = {}; 5622 this.editor = a; 5623 this._ = { 5624 handlers: {} 5625 }; 5626 return this 5627 }; 5628 CKEDITOR.ui.prototype = { 5629 add: function(a, d, b) { 5630 b.name = a.toLowerCase(); 5631 var c = this.items[a] = { 5632 type: d, 5633 command: b.command || null, 5634 args: Array.prototype.slice.call(arguments, 2) 5635 }; 5636 CKEDITOR.tools.extend(c, b) 5637 }, 5638 get: function(a) { 5639 return this.instances[a] 5640 }, 5641 create: function(a) { 5642 var d = this.items[a], 5643 b = d && this._.handlers[d.type], 5644 c = d && d.command && this.editor.getCommand(d.command), 5645 b = b && b.create.apply(this, d.args); 5646 this.instances[a] = b; 5647 c && c.uiItems.push(b); 5648 b && !b.type && (b.type = d.type); 5649 return b 5650 }, 5651 addHandler: function(a, d) { 5652 this._.handlers[a] = 5653 d 5654 }, 5655 space: function(a) { 5656 return CKEDITOR.document.getById(this.spaceId(a)) 5657 }, 5658 spaceId: function(a) { 5659 return this.editor.id + "_" + a 5660 } 5661 }; 5662 CKEDITOR.event.implementOn(CKEDITOR.ui); 5663 (function() { 5664 function a(a, f, e) { 5665 CKEDITOR.event.call(this); 5666 a = a && CKEDITOR.tools.clone(a); 5667 if (void 0 !== f) { 5668 if (!(f instanceof CKEDITOR.dom.element)) throw Error("Expect element of type CKEDITOR.dom.element."); 5669 if (!e) throw Error("One of the element modes must be specified."); 5670 if (CKEDITOR.env.ie && CKEDITOR.env.quirks && e == CKEDITOR.ELEMENT_MODE_INLINE) throw Error("Inline element mode is not supported on IE quirks."); 5671 if (!b(f, e)) throw Error('The specified element mode is not supported on element: "' + f.getName() + '".'); 5672 this.element = f; 5673 this.elementMode = e; 5674 this.name = this.elementMode != CKEDITOR.ELEMENT_MODE_APPENDTO && (f.getId() || f.getNameAtt()) 5675 } else this.elementMode = CKEDITOR.ELEMENT_MODE_NONE; 5676 this._ = {}; 5677 this.commands = {}; 5678 this.templates = {}; 5679 this.name = this.name || d(); 5680 this.id = CKEDITOR.tools.getNextId(); 5681 this.status = "unloaded"; 5682 this.config = CKEDITOR.tools.prototypedCopy(CKEDITOR.config); 5683 this.ui = new CKEDITOR.ui(this); 5684 this.focusManager = new CKEDITOR.focusManager(this); 5685 this.keystrokeHandler = new CKEDITOR.keystrokeHandler(this); 5686 this.on("readOnly", 5687 c); 5688 this.on("selectionChange", function(a) { 5689 h(this, a.data.path) 5690 }); 5691 this.on("activeFilterChange", function() { 5692 h(this, this.elementPath(), !0) 5693 }); 5694 this.on("mode", c); 5695 this.on("instanceReady", function() { 5696 if (this.config.startupFocus) { 5697 if ("end" === this.config.startupFocus) { 5698 var a = this.createRange(); 5699 a.selectNodeContents(this.editable()); 5700 a.shrink(CKEDITOR.SHRINK_ELEMENT, !0); 5701 a.collapse(); 5702 this.getSelection().selectRanges([a]) 5703 } 5704 this.focus() 5705 } 5706 }); 5707 CKEDITOR.fire("instanceCreated", null, this); 5708 CKEDITOR.add(this); 5709 CKEDITOR.tools.setTimeout(function() { 5710 "destroyed" !== 5711 this.status ? g(this, a) : CKEDITOR.warn("editor-incorrect-destroy") 5712 }, 0, this) 5713 } 5714 5715 function d() { 5716 do var a = "editor" + ++D; while (CKEDITOR.instances[a]); 5717 return a 5718 } 5719 5720 function b(a, b) { 5721 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 5722 } 5723 5724 function c() { 5725 var a = this.commands, 5726 b; 5727 for (b in a) f(this, a[b]) 5728 } 5729 5730 function f(a, b) { 5731 b[b.startDisabled ? "disable" : a.readOnly && !b.readOnly ? "disable" : b.modes[a.mode] ? "enable" : "disable"]() 5732 } 5733 5734 function h(a, 5735 b, c) { 5736 if (b) { 5737 var d, f, e = a.commands; 5738 for (f in e) d = e[f], (c || d.contextSensitive) && d.refresh(a, b) 5739 } 5740 } 5741 5742 function k(a) { 5743 var b = a.config.customConfig; 5744 if (!b) return !1; 5745 var b = CKEDITOR.getUrl(b), 5746 c = x[b] || (x[b] = {}); 5747 c.fn ? (c.fn.call(a, a.config), CKEDITOR.getUrl(a.config.customConfig) != b && k(a) || a.fireOnce("customConfigLoaded")) : CKEDITOR.scriptLoader.queue(b, function() { 5748 c.fn = CKEDITOR.editorConfig ? CKEDITOR.editorConfig : function() {}; 5749 k(a) 5750 }); 5751 return !0 5752 } 5753 5754 function g(a, b) { 5755 a.on("customConfigLoaded", function() { 5756 if (b) { 5757 if (b.on) 5758 for (var c in b.on) a.on(c, 5759 b.on[c]); 5760 CKEDITOR.tools.extend(a.config, b, !0); 5761 delete a.config.on 5762 } 5763 c = a.config; 5764 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; 5765 a.blockless = a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? !(a.element.is("textarea") || CKEDITOR.dtd[a.element.getName()].p) : 5766 !1; 5767 a.tabIndex = c.tabIndex || a.element && a.element.getAttribute("tabindex") || 0; 5768 a.activeEnterMode = a.enterMode = a.blockless ? CKEDITOR.ENTER_BR : c.enterMode; 5769 a.activeShiftEnterMode = a.shiftEnterMode = a.blockless ? CKEDITOR.ENTER_BR : c.shiftEnterMode; 5770 c.skin && (CKEDITOR.skinName = c.skin); 5771 a.fireOnce("configLoaded"); 5772 a.dataProcessor = new CKEDITOR.htmlDataProcessor(a); 5773 a.filter = a.activeFilter = new CKEDITOR.filter(a); 5774 n(a) 5775 }); 5776 b && null != b.customConfig && (a.config.customConfig = b.customConfig); 5777 k(a) || a.fireOnce("customConfigLoaded") 5778 } 5779 5780 function n(a) { 5781 CKEDITOR.skin.loadPart("editor", function() { 5782 r(a) 5783 }) 5784 } 5785 5786 function r(a) { 5787 CKEDITOR.lang.load(a.config.language, a.config.defaultLanguage, function(b, c) { 5788 var d = a.config.title; 5789 a.langCode = b; 5790 a.lang = CKEDITOR.tools.prototypedCopy(c); 5791 a.title = "string" == typeof d || !1 === d ? d : [a.lang.editor, a.name].join(", "); 5792 a.config.contentsLangDirection || (a.config.contentsLangDirection = a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? a.element.getDirection(1) : a.lang.dir); 5793 a.fire("langLoaded"); 5794 e(a) 5795 }) 5796 } 5797 5798 function e(a) { 5799 a.getStylesSet(function(b) { 5800 a.once("loaded", 5801 function() { 5802 a.fire("stylesSet", { 5803 styles: b 5804 }) 5805 }, null, null, 1); 5806 y(a) 5807 }) 5808 } 5809 5810 function y(a) { 5811 function b(a) { 5812 if (!a) return ""; 5813 CKEDITOR.tools.isArray(a) && (a = a.join(",")); 5814 return a.replace(/\s/g, "") 5815 } 5816 var c = a.config, 5817 d = b(c.plugins), 5818 f = b(c.extraPlugins), 5819 e = b(c.removePlugins); 5820 if (f) var h = new RegExp("(?:^|,)(?:" + f.replace(/,/g, "|") + ")(?\x3d,|$)", "g"), 5821 d = d.replace(h, ""), 5822 d = d + ("," + f); 5823 if (e) var g = new RegExp("(?:^|,)(?:" + e.replace(/,/g, "|") + ")(?\x3d,|$)", "g"), 5824 d = d.replace(g, ""); 5825 CKEDITOR.env.air && (d += ",adobeair"); 5826 CKEDITOR.plugins.load(d.split(","), 5827 function(b) { 5828 var d = [], 5829 f = [], 5830 e = []; 5831 a.plugins = CKEDITOR.tools.extend({}, a.plugins, b); 5832 for (var l in b) { 5833 var h = b[l], 5834 t = h.lang, 5835 k = null, 5836 p = h.requires, 5837 F; 5838 CKEDITOR.tools.isArray(p) && (p = p.join(",")); 5839 if (p && (F = p.match(g))) 5840 for (; p = F.pop();) CKEDITOR.error("editor-plugin-required", { 5841 plugin: p.replace(",", ""), 5842 requiredBy: l 5843 }); 5844 t && !a.lang[l] && (t.split && (t = t.split(",")), 0 <= CKEDITOR.tools.indexOf(t, a.langCode) ? k = a.langCode : (k = a.langCode.replace(/-.*/, ""), k = k != a.langCode && 0 <= CKEDITOR.tools.indexOf(t, k) ? k : 0 <= CKEDITOR.tools.indexOf(t, 5845 "en") ? "en" : t[0]), h.langEntries && h.langEntries[k] ? (a.lang[l] = h.langEntries[k], k = null) : e.push(CKEDITOR.getUrl(h.path + "lang/" + k + ".js"))); 5846 f.push(k); 5847 d.push(h) 5848 } 5849 CKEDITOR.scriptLoader.load(e, function() { 5850 for (var b = ["beforeInit", "init", "afterInit"], e = 0; e < b.length; e++) 5851 for (var l = 0; l < d.length; l++) { 5852 var p = d[l]; 5853 0 === e && f[l] && p.lang && p.langEntries && (a.lang[p.name] = p.langEntries[f[l]]); 5854 if (p[b[e]]) p[b[e]](a) 5855 } 5856 a.fireOnce("pluginsLoaded"); 5857 c.keystrokes && a.setKeystroke(a.config.keystrokes); 5858 for (l = 0; l < a.config.blockedKeystrokes.length; l++) a.keystrokeHandler.blockedKeystrokes[a.config.blockedKeystrokes[l]] = 5859 1; 5860 a.status = "loaded"; 5861 a.fireOnce("loaded"); 5862 CKEDITOR.fire("instanceLoaded", null, a) 5863 }) 5864 }) 5865 } 5866 5867 function v() { 5868 var a = this.element; 5869 if (a && this.elementMode != CKEDITOR.ELEMENT_MODE_APPENDTO) { 5870 var b = this.getData(); 5871 this.config.htmlEncodeOutput && (b = CKEDITOR.tools.htmlEncode(b)); 5872 a.is("textarea") ? a.setValue(b) : a.setHtml(b); 5873 return !0 5874 } 5875 return !1 5876 } 5877 5878 function B(a, b) { 5879 function c(a) { 5880 var b = a.startContainer, 5881 d = a.endContainer; 5882 return b.is && (b.is("tr") || b.is("td") && b.equals(d) && a.endOffset === b.getChildCount()) ? !0 : !1 5883 } 5884 5885 function d(a) { 5886 var b = a.startContainer; 5887 return b.is("tr") ? a.cloneContents() : b.clone(!0) 5888 } 5889 for (var f = new CKEDITOR.dom.documentFragment, e, h, g, k = 0; k < a.length; k++) { 5890 var M = a[k], 5891 q = M.startContainer.getAscendant("tr", !0); 5892 c(M) ? (e || (e = q.getAscendant("table").clone(), e.append(q.getAscendant({ 5893 thead: 1, 5894 tbody: 1, 5895 tfoot: 1 5896 }).clone()), f.append(e), e = e.findOne("thead, tbody, tfoot")), h && h.equals(q) || (h = q, g = q.clone(), e.append(g)), g.append(d(M))) : f.append(M.cloneContents()) 5897 } 5898 return e ? f : b.getHtmlFromRange(a[0]) 5899 } 5900 a.prototype = CKEDITOR.editor.prototype; 5901 CKEDITOR.editor = 5902 a; 5903 var D = 0, 5904 x = {}; 5905 CKEDITOR.tools.extend(CKEDITOR.editor.prototype, { 5906 plugins: { 5907 detectConflict: function(a, b) { 5908 for (var c = 0; c < b.length; c++) { 5909 var d = b[c]; 5910 if (this[d]) return CKEDITOR.warn("editor-plugin-conflict", { 5911 plugin: a, 5912 replacedWith: d 5913 }), !0 5914 } 5915 return !1 5916 } 5917 }, 5918 addCommand: function(a, b) { 5919 b.name = a.toLowerCase(); 5920 var c = b instanceof CKEDITOR.command ? b : new CKEDITOR.command(this, b); 5921 this.mode && f(this, c); 5922 return this.commands[a] = c 5923 }, 5924 _attachToForm: function() { 5925 function a(b) { 5926 c.updateElement(); 5927 c._.required && !d.getValue() && !1 === c.fire("required") && 5928 b.data.preventDefault() 5929 } 5930 5931 function b(a) { 5932 return !!(a && a.call && a.apply) 5933 } 5934 var c = this, 5935 d = c.element, 5936 f = new CKEDITOR.dom.element(d.$.form); 5937 d.is("textarea") && f && (f.on("submit", a), b(f.$.submit) && (f.$.submit = CKEDITOR.tools.override(f.$.submit, function(b) { 5938 return function() { 5939 a(); 5940 b.apply ? b.apply(this) : b() 5941 } 5942 })), c.on("destroy", function() { 5943 f.removeListener("submit", a) 5944 })) 5945 }, 5946 destroy: function(a) { 5947 this.fire("beforeDestroy"); 5948 !a && v.call(this); 5949 this.editable(null); 5950 this.filter && (this.filter.destroy(), delete this.filter); 5951 delete this.activeFilter; 5952 this.status = "destroyed"; 5953 this.fire("destroy"); 5954 this.removeAllListeners(); 5955 CKEDITOR.remove(this); 5956 CKEDITOR.fire("instanceDestroyed", null, this) 5957 }, 5958 elementPath: function(a) { 5959 if (!a) { 5960 a = this.getSelection(); 5961 if (!a) return null; 5962 a = a.getStartElement() 5963 } 5964 return a ? new CKEDITOR.dom.elementPath(a, this.editable()) : null 5965 }, 5966 createRange: function() { 5967 var a = this.editable(); 5968 return a ? new CKEDITOR.dom.range(a) : null 5969 }, 5970 execCommand: function(a, b) { 5971 var c = this.getCommand(a), 5972 d = { 5973 name: a, 5974 commandData: b || {}, 5975 command: c 5976 }; 5977 return c && c.state != CKEDITOR.TRISTATE_DISABLED && 5978 !1 !== this.fire("beforeCommandExec", d) && (d.returnValue = c.exec(d.commandData), !c.async && !1 !== this.fire("afterCommandExec", d)) ? d.returnValue : !1 5979 }, 5980 getCommand: function(a) { 5981 return this.commands[a] 5982 }, 5983 getData: function(a) { 5984 !a && this.fire("beforeGetData"); 5985 var b = this._.data; 5986 "string" != typeof b && (b = (b = this.element) && this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE ? b.is("textarea") ? b.getValue() : b.getHtml() : ""); 5987 b = { 5988 dataValue: b 5989 }; 5990 !a && this.fire("getData", b); 5991 return b.dataValue 5992 }, 5993 getSnapshot: function() { 5994 var a = this.fire("getSnapshot"); 5995 "string" != typeof a && (a = (a = this.element) && this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE ? a.is("textarea") ? a.getValue() : a.getHtml() : ""); 5996 return a 5997 }, 5998 loadSnapshot: function(a) { 5999 this.fire("loadSnapshot", a) 6000 }, 6001 setData: function(a, b, c) { 6002 var d = !0, 6003 f = b; 6004 b && "object" == typeof b && (c = b.internal, f = b.callback, d = !b.noSnapshot); 6005 !c && d && this.fire("saveSnapshot"); 6006 if (f || !c) this.once("dataReady", function(a) { 6007 !c && d && this.fire("saveSnapshot"); 6008 f && f.call(a.editor) 6009 }); 6010 a = { 6011 dataValue: a 6012 }; 6013 !c && this.fire("setData", a); 6014 this._.data = a.dataValue; 6015 !c && this.fire("afterSetData", a) 6016 }, 6017 setReadOnly: function(a) { 6018 a = null == a || a; 6019 this.readOnly != a && (this.readOnly = a, this.keystrokeHandler.blockedKeystrokes[8] = +a, this.editable().setReadOnly(a), this.fire("readOnly")) 6020 }, 6021 insertHtml: function(a, b, c) { 6022 this.fire("insertHtml", { 6023 dataValue: a, 6024 mode: b, 6025 range: c 6026 }) 6027 }, 6028 insertText: function(a) { 6029 this.fire("insertText", a) 6030 }, 6031 insertElement: function(a) { 6032 this.fire("insertElement", a) 6033 }, 6034 getSelectedHtml: function(a) { 6035 var b = this.editable(), 6036 c = this.getSelection(), 6037 c = c && c.getRanges(); 6038 if (!b || !c || 0 === c.length) return null; 6039 b = B(c, b); 6040 return a ? b.getHtml() : b 6041 }, 6042 extractSelectedHtml: function(a, b) { 6043 var c = this.editable(), 6044 d = this.getSelection().getRanges(), 6045 f = new CKEDITOR.dom.documentFragment, 6046 e; 6047 if (!c || 0 === d.length) return null; 6048 for (e = 0; e < d.length; e++) f.append(c.extractHtmlFromRange(d[e], b)); 6049 b || this.getSelection().selectRanges([d[0]]); 6050 return a ? f.getHtml() : f 6051 }, 6052 focus: function() { 6053 this.fire("beforeFocus") 6054 }, 6055 checkDirty: function() { 6056 return "ready" == this.status && this._.previousValue !== this.getSnapshot() 6057 }, 6058 resetDirty: function() { 6059 this._.previousValue = 6060 this.getSnapshot() 6061 }, 6062 updateElement: function() { 6063 return v.call(this) 6064 }, 6065 setKeystroke: function() { 6066 for (var a = this.keystrokeHandler.keystrokes, b = CKEDITOR.tools.isArray(arguments[0]) ? arguments[0] : [ 6067 [].slice.call(arguments, 0) 6068 ], c, d, f = b.length; f--;) c = b[f], d = 0, CKEDITOR.tools.isArray(c) && (d = c[1], c = c[0]), d ? a[c] = d : delete a[c] 6069 }, 6070 getCommandKeystroke: function(a) { 6071 if (a = "string" === typeof a ? this.getCommand(a) : a) { 6072 var b = CKEDITOR.tools.object.findKey(this.commands, a), 6073 c = this.keystrokeHandler.keystrokes, 6074 d; 6075 if (a.fakeKeystroke) return a.fakeKeystroke; 6076 for (d in c) 6077 if (c.hasOwnProperty(d) && c[d] == b) return d 6078 } 6079 return null 6080 }, 6081 addFeature: function(a) { 6082 return this.filter.addFeature(a) 6083 }, 6084 setActiveFilter: function(a) { 6085 a || (a = this.filter); 6086 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))) 6087 }, 6088 setActiveEnterMode: function(a, b) { 6089 a = a ? this.blockless ? CKEDITOR.ENTER_BR : a : this.enterMode; 6090 b = b ? this.blockless ? 6091 CKEDITOR.ENTER_BR : b : this.shiftEnterMode; 6092 if (this.activeEnterMode != a || this.activeShiftEnterMode != b) this.activeEnterMode = a, this.activeShiftEnterMode = b, this.fire("activeEnterModeChange") 6093 }, 6094 showNotification: function(a) { 6095 alert(a) 6096 } 6097 }) 6098 })(); 6099 CKEDITOR.ELEMENT_MODE_NONE = 0; 6100 CKEDITOR.ELEMENT_MODE_REPLACE = 1; 6101 CKEDITOR.ELEMENT_MODE_APPENDTO = 2; 6102 CKEDITOR.ELEMENT_MODE_INLINE = 3; 6103 CKEDITOR.htmlParser = function() { 6104 this._ = { 6105 htmlPartsRegex: /<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--\x3e)|(?:([^\/\s>]+)((?:\s+[\w\-:.]+(?:\s*=\s*?(?:(?:"[^"]*")|(?:'[^']*')|[^\s"'\/>]+))?)*)[\S\s]*?(\/?)>))/g 6106 } 6107 }; 6108 (function() { 6109 var a = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g, 6110 d = { 6111 checked: 1, 6112 compact: 1, 6113 declare: 1, 6114 defer: 1, 6115 disabled: 1, 6116 ismap: 1, 6117 multiple: 1, 6118 nohref: 1, 6119 noresize: 1, 6120 noshade: 1, 6121 nowrap: 1, 6122 readonly: 1, 6123 selected: 1 6124 }; 6125 CKEDITOR.htmlParser.prototype = { 6126 onTagOpen: function() {}, 6127 onTagClose: function() {}, 6128 onText: function() {}, 6129 onCDATA: function() {}, 6130 onComment: function() {}, 6131 parse: function(b) { 6132 for (var c, f, h = 0, k; c = this._.htmlPartsRegex.exec(b);) { 6133 f = c.index; 6134 if (f > h) 6135 if (h = b.substring(h, f), k) k.push(h); 6136 else this.onText(h); 6137 h = this._.htmlPartsRegex.lastIndex; 6138 if (f = c[1]) 6139 if (f = f.toLowerCase(), k && CKEDITOR.dtd.$cdata[f] && (this.onCDATA(k.join("")), k = null), !k) { 6140 this.onTagClose(f); 6141 continue 6142 } if (k) k.push(c[0]); 6143 else if (f = c[3]) { 6144 if (f = f.toLowerCase(), !/="/.test(f)) { 6145 var g = {}, 6146 n, r = c[4]; 6147 c = !!c[5]; 6148 if (r) 6149 for (; n = a.exec(r);) { 6150 var e = n[1].toLowerCase(); 6151 n = n[2] || n[3] || n[4] || ""; 6152 g[e] = !n && d[e] ? e : CKEDITOR.tools.htmlDecodeAttr(n) 6153 } 6154 this.onTagOpen(f, g, c); 6155 !k && CKEDITOR.dtd.$cdata[f] && (k = []) 6156 } 6157 } else if (f = c[2]) this.onComment(f) 6158 } 6159 if (b.length > h) this.onText(b.substring(h, 6160 b.length)) 6161 } 6162 } 6163 })(); 6164 CKEDITOR.htmlParser.basicWriter = CKEDITOR.tools.createClass({ 6165 $: function() { 6166 this._ = { 6167 output: [] 6168 } 6169 }, 6170 proto: { 6171 openTag: function(a) { 6172 this._.output.push("\x3c", a) 6173 }, 6174 openTagClose: function(a, d) { 6175 d ? this._.output.push(" /\x3e") : this._.output.push("\x3e") 6176 }, 6177 attribute: function(a, d) { 6178 "string" == typeof d && (d = CKEDITOR.tools.htmlEncodeAttr(d)); 6179 this._.output.push(" ", a, '\x3d"', d, '"') 6180 }, 6181 closeTag: function(a) { 6182 this._.output.push("\x3c/", a, "\x3e") 6183 }, 6184 text: function(a) { 6185 this._.output.push(a) 6186 }, 6187 comment: function(a) { 6188 this._.output.push("\x3c!--", a, 6189 "--\x3e") 6190 }, 6191 write: function(a) { 6192 this._.output.push(a) 6193 }, 6194 reset: function() { 6195 this._.output = []; 6196 this._.indent = !1 6197 }, 6198 getHtml: function(a) { 6199 var d = this._.output.join(""); 6200 a && this.reset(); 6201 return d 6202 } 6203 } 6204 }); 6205 "use strict"; 6206 (function() { 6207 CKEDITOR.htmlParser.node = function() {}; 6208 CKEDITOR.htmlParser.node.prototype = { 6209 remove: function() { 6210 var a = this.parent.children, 6211 d = CKEDITOR.tools.indexOf(a, this), 6212 b = this.previous, 6213 c = this.next; 6214 b && (b.next = c); 6215 c && (c.previous = b); 6216 a.splice(d, 1); 6217 this.parent = null 6218 }, 6219 replaceWith: function(a) { 6220 var d = this.parent.children, 6221 b = CKEDITOR.tools.indexOf(d, this), 6222 c = a.previous = this.previous, 6223 f = a.next = this.next; 6224 c && (c.next = a); 6225 f && (f.previous = a); 6226 d[b] = a; 6227 a.parent = this.parent; 6228 this.parent = null 6229 }, 6230 insertAfter: function(a) { 6231 var d = a.parent.children, 6232 b = CKEDITOR.tools.indexOf(d, a), 6233 c = a.next; 6234 d.splice(b + 1, 0, this); 6235 this.next = a.next; 6236 this.previous = a; 6237 a.next = this; 6238 c && (c.previous = this); 6239 this.parent = a.parent 6240 }, 6241 insertBefore: function(a) { 6242 var d = a.parent.children, 6243 b = CKEDITOR.tools.indexOf(d, a); 6244 d.splice(b, 0, this); 6245 this.next = a; 6246 (this.previous = a.previous) && (a.previous.next = this); 6247 a.previous = this; 6248 this.parent = a.parent 6249 }, 6250 getAscendant: function(a) { 6251 var d = "function" == typeof a ? a : "string" == typeof a ? function(b) { 6252 return b.name == a 6253 } : function(b) { 6254 return b.name in a 6255 }, 6256 b = this.parent; 6257 for (; b && 6258 b.type == CKEDITOR.NODE_ELEMENT;) { 6259 if (d(b)) return b; 6260 b = b.parent 6261 } 6262 return null 6263 }, 6264 wrapWith: function(a) { 6265 this.replaceWith(a); 6266 a.add(this); 6267 return a 6268 }, 6269 getIndex: function() { 6270 return CKEDITOR.tools.indexOf(this.parent.children, this) 6271 }, 6272 getFilterContext: function(a) { 6273 return a || {} 6274 } 6275 } 6276 })(); 6277 "use strict"; 6278 CKEDITOR.htmlParser.comment = function(a) { 6279 this.value = a; 6280 this._ = { 6281 isBlockLike: !1 6282 } 6283 }; 6284 CKEDITOR.htmlParser.comment.prototype = CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node, { 6285 type: CKEDITOR.NODE_COMMENT, 6286 filter: function(a, d) { 6287 var b = this.value; 6288 if (!(b = a.onComment(d, b, this))) return this.remove(), !1; 6289 if ("string" != typeof b) return this.replaceWith(b), !1; 6290 this.value = b; 6291 return !0 6292 }, 6293 writeHtml: function(a, d) { 6294 d && this.filter(d); 6295 a.comment(this.value) 6296 } 6297 }); 6298 "use strict"; 6299 (function() { 6300 CKEDITOR.htmlParser.text = function(a) { 6301 this.value = a; 6302 this._ = { 6303 isBlockLike: !1 6304 } 6305 }; 6306 CKEDITOR.htmlParser.text.prototype = CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node, { 6307 type: CKEDITOR.NODE_TEXT, 6308 filter: function(a, d) { 6309 if (!(this.value = a.onText(d, this.value, this))) return this.remove(), !1 6310 }, 6311 writeHtml: function(a, d) { 6312 d && this.filter(d); 6313 a.text(this.value) 6314 } 6315 }) 6316 })(); 6317 "use strict"; 6318 (function() { 6319 CKEDITOR.htmlParser.cdata = function(a) { 6320 this.value = a 6321 }; 6322 CKEDITOR.htmlParser.cdata.prototype = CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node, { 6323 type: CKEDITOR.NODE_TEXT, 6324 filter: function() {}, 6325 writeHtml: function(a) { 6326 a.write(this.value) 6327 } 6328 }) 6329 })(); 6330 "use strict"; 6331 CKEDITOR.htmlParser.fragment = function() { 6332 this.children = []; 6333 this.parent = null; 6334 this._ = { 6335 isBlockLike: !0, 6336 hasInlineStarted: !1 6337 } 6338 }; 6339 (function() { 6340 function a(a) { 6341 return a.attributes["data-cke-survive"] ? !1 : "a" == a.name && a.attributes.href || CKEDITOR.dtd.$removeEmpty[a.name] 6342 } 6343 var d = CKEDITOR.tools.extend({ 6344 table: 1, 6345 ul: 1, 6346 ol: 1, 6347 dl: 1 6348 }, CKEDITOR.dtd.table, CKEDITOR.dtd.ul, CKEDITOR.dtd.ol, CKEDITOR.dtd.dl), 6349 b = { 6350 ol: 1, 6351 ul: 1 6352 }, 6353 c = CKEDITOR.tools.extend({}, { 6354 html: 1 6355 }, CKEDITOR.dtd.html, CKEDITOR.dtd.body, CKEDITOR.dtd.head, { 6356 style: 1, 6357 script: 1 6358 }), 6359 f = { 6360 ul: "li", 6361 ol: "li", 6362 dl: "dd", 6363 table: "tbody", 6364 tbody: "tr", 6365 thead: "tr", 6366 tfoot: "tr", 6367 tr: "td" 6368 }; 6369 CKEDITOR.htmlParser.fragment.fromHtml = 6370 function(h, k, g) { 6371 function n(a) { 6372 var b; 6373 if (0 < m.length) 6374 for (var c = 0; c < m.length; c++) { 6375 var d = m[c], 6376 f = d.name, 6377 e = CKEDITOR.dtd[f], 6378 l = u.name && CKEDITOR.dtd[u.name]; 6379 l && !l[f] || a && e && !e[a] && CKEDITOR.dtd[a] ? f == u.name && (y(u, u.parent, 1), c--) : (b || (r(), b = 1), d = d.clone(), d.parent = u, u = d, m.splice(c, 1), c--) 6380 } 6381 } 6382 6383 function r() { 6384 for (; J.length;) y(J.shift(), u) 6385 } 6386 6387 function e(a) { 6388 if (a._.isBlockLike && "pre" != a.name && "textarea" != a.name) { 6389 var b = a.children.length, 6390 c = a.children[b - 1], 6391 d; 6392 c && c.type == CKEDITOR.NODE_TEXT && ((d = CKEDITOR.tools.rtrim(c.value)) ? 6393 c.value = d : a.children.length = b - 1) 6394 } 6395 } 6396 6397 function y(b, c, d) { 6398 c = c || u || x; 6399 var f = u; 6400 void 0 === b.previous && (v(c, b) && (u = c, D.onTagOpen(g, {}), b.returnPoint = c = u), e(b), a(b) && !b.children.length || c.add(b), "pre" == b.name && (l = !1), "textarea" == b.name && (K = !1)); 6401 b.returnPoint ? (u = b.returnPoint, delete b.returnPoint) : u = d ? c : f 6402 } 6403 6404 function v(a, b) { 6405 if ((a == x || "body" == a.name) && g && (!a.name || CKEDITOR.dtd[a.name][g])) { 6406 var c, d; 6407 return (c = b.attributes && (d = b.attributes["data-cke-real-element-type"]) ? d : b.name) && c in CKEDITOR.dtd.$inline && !(c in CKEDITOR.dtd.head) && 6408 !b.isOrphan || b.type == CKEDITOR.NODE_TEXT 6409 } 6410 } 6411 6412 function B(a, b) { 6413 return a in CKEDITOR.dtd.$listItem || a in CKEDITOR.dtd.$tableContent ? a == b || "dt" == a && "dd" == b || "dd" == a && "dt" == b : !1 6414 } 6415 var D = new CKEDITOR.htmlParser, 6416 x = k instanceof CKEDITOR.htmlParser.element ? k : "string" == typeof k ? new CKEDITOR.htmlParser.element(k) : new CKEDITOR.htmlParser.fragment, 6417 m = [], 6418 J = [], 6419 u = x, 6420 K = "textarea" == x.name, 6421 l = "pre" == x.name; 6422 D.onTagOpen = function(f, e, h, g) { 6423 e = new CKEDITOR.htmlParser.element(f, e); 6424 e.isUnknown && h && (e.isEmpty = !0); 6425 e.isOptionalClose = g; 6426 if (a(e)) m.push(e); 6427 else { 6428 if ("pre" == f) l = !0; 6429 else { 6430 if ("br" == f && l) { 6431 u.add(new CKEDITOR.htmlParser.text("\n")); 6432 return 6433 } 6434 "textarea" == f && (K = !0) 6435 } 6436 if ("br" == f) J.push(e); 6437 else { 6438 for (; !(g = (h = u.name) ? CKEDITOR.dtd[h] || (u._.isBlockLike ? CKEDITOR.dtd.div : CKEDITOR.dtd.span) : c, e.isUnknown || u.isUnknown || g[f]);) 6439 if (u.isOptionalClose) D.onTagClose(h); 6440 else if (f in b && h in b) h = u.children, (h = h[h.length - 1]) && "li" == h.name || y(h = new CKEDITOR.htmlParser.element("li"), u), !e.returnPoint && (e.returnPoint = u), u = h; 6441 else if (f in CKEDITOR.dtd.$listItem && 6442 !B(f, h)) D.onTagOpen("li" == f ? "ul" : "dl", {}, 0, 1); 6443 else if (h in d && !B(f, h)) !e.returnPoint && (e.returnPoint = u), u = u.parent; 6444 else if (h in CKEDITOR.dtd.$inline && m.unshift(u), u.parent) y(u, u.parent, 1); 6445 else { 6446 e.isOrphan = 1; 6447 break 6448 } 6449 n(f); 6450 r(); 6451 e.parent = u; 6452 e.isEmpty ? y(e) : u = e 6453 } 6454 } 6455 }; 6456 D.onTagClose = function(a) { 6457 for (var b = m.length - 1; 0 <= b; b--) 6458 if (a == m[b].name) { 6459 m.splice(b, 1); 6460 return 6461 } for (var c = [], d = [], f = u; f != x && f.name != a;) f._.isBlockLike || d.unshift(f), c.push(f), f = f.returnPoint || f.parent; 6462 if (f != x) { 6463 for (b = 0; b < c.length; b++) { 6464 var e = c[b]; 6465 y(e, e.parent) 6466 } 6467 u = 6468 f; 6469 f._.isBlockLike && r(); 6470 y(f, f.parent); 6471 f == u && (u = u.parent); 6472 m = m.concat(d) 6473 } 6474 "body" == a && (g = !1) 6475 }; 6476 D.onText = function(a) { 6477 if (!(u._.hasInlineStarted && !J.length || l || K) && (a = CKEDITOR.tools.ltrim(a), 0 === a.length)) return; 6478 var b = u.name, 6479 e = b ? CKEDITOR.dtd[b] || (u._.isBlockLike ? CKEDITOR.dtd.div : CKEDITOR.dtd.span) : c; 6480 if (!K && !e["#"] && b in d) D.onTagOpen(f[b] || ""), D.onText(a); 6481 else { 6482 r(); 6483 n(); 6484 l || K || (a = a.replace(/[\t\r\n ]{2,}|[\t\r\n]/g, " ")); 6485 a = new CKEDITOR.htmlParser.text(a); 6486 if (v(u, a)) this.onTagOpen(g, {}, 0, 1); 6487 u.add(a) 6488 } 6489 }; 6490 D.onCDATA = 6491 function(a) { 6492 u.add(new CKEDITOR.htmlParser.cdata(a)) 6493 }; 6494 D.onComment = function(a) { 6495 r(); 6496 n(); 6497 u.add(new CKEDITOR.htmlParser.comment(a)) 6498 }; 6499 D.parse(h); 6500 for (r(); u != x;) y(u, u.parent, 1); 6501 e(x); 6502 return x 6503 }; 6504 CKEDITOR.htmlParser.fragment.prototype = { 6505 type: CKEDITOR.NODE_DOCUMENT_FRAGMENT, 6506 add: function(a, b) { 6507 isNaN(b) && (b = this.children.length); 6508 var c = 0 < b ? this.children[b - 1] : null; 6509 if (c) { 6510 if (a._.isBlockLike && c.type == CKEDITOR.NODE_TEXT && (c.value = CKEDITOR.tools.rtrim(c.value), 0 === c.value.length)) { 6511 this.children.pop(); 6512 this.add(a); 6513 return 6514 } 6515 c.next = 6516 a 6517 } 6518 a.previous = c; 6519 a.parent = this; 6520 this.children.splice(b, 0, a); 6521 this._.hasInlineStarted || (this._.hasInlineStarted = a.type == CKEDITOR.NODE_TEXT || a.type == CKEDITOR.NODE_ELEMENT && !a._.isBlockLike) 6522 }, 6523 filter: function(a, b) { 6524 b = this.getFilterContext(b); 6525 a.onRoot(b, this); 6526 this.filterChildren(a, !1, b) 6527 }, 6528 filterChildren: function(a, b, c) { 6529 if (this.childrenFilteredBy != a.id) { 6530 c = this.getFilterContext(c); 6531 if (b && !this.parent) a.onRoot(c, this); 6532 this.childrenFilteredBy = a.id; 6533 for (b = 0; b < this.children.length; b++) !1 === this.children[b].filter(a, 6534 c) && b-- 6535 } 6536 }, 6537 writeHtml: function(a, b) { 6538 b && this.filter(b); 6539 this.writeChildrenHtml(a) 6540 }, 6541 writeChildrenHtml: function(a, b, c) { 6542 var d = this.getFilterContext(); 6543 if (c && !this.parent && b) b.onRoot(d, this); 6544 b && this.filterChildren(b, !1, d); 6545 b = 0; 6546 c = this.children; 6547 for (d = c.length; b < d; b++) c[b].writeHtml(a) 6548 }, 6549 forEach: function(a, b, c) { 6550 if (!(c || b && this.type != b)) var d = a(this); 6551 if (!1 !== d) { 6552 c = this.children; 6553 for (var f = 0; f < c.length; f++) d = c[f], d.type == CKEDITOR.NODE_ELEMENT ? d.forEach(a, b) : b && d.type != b || a(d) 6554 } 6555 }, 6556 getFilterContext: function(a) { 6557 return a || {} 6558 } 6559 } 6560 })(); 6561 "use strict"; 6562 (function() { 6563 function a() { 6564 this.rules = [] 6565 } 6566 6567 function d(b, c, d, h) { 6568 var k, g; 6569 for (k in c)(g = b[k]) || (g = b[k] = new a), g.add(c[k], d, h) 6570 } 6571 CKEDITOR.htmlParser.filter = CKEDITOR.tools.createClass({ 6572 $: function(b) { 6573 this.id = CKEDITOR.tools.getNextNumber(); 6574 this.elementNameRules = new a; 6575 this.attributeNameRules = new a; 6576 this.elementsRules = {}; 6577 this.attributesRules = {}; 6578 this.textRules = new a; 6579 this.commentRules = new a; 6580 this.rootRules = new a; 6581 b && this.addRules(b, 10) 6582 }, 6583 proto: { 6584 addRules: function(a, c) { 6585 var f; 6586 "number" == typeof c ? f = c : c && "priority" in c && (f = 6587 c.priority); 6588 "number" != typeof f && (f = 10); 6589 "object" != typeof c && (c = {}); 6590 a.elementNames && this.elementNameRules.addMany(a.elementNames, f, c); 6591 a.attributeNames && this.attributeNameRules.addMany(a.attributeNames, f, c); 6592 a.elements && d(this.elementsRules, a.elements, f, c); 6593 a.attributes && d(this.attributesRules, a.attributes, f, c); 6594 a.text && this.textRules.add(a.text, f, c); 6595 a.comment && this.commentRules.add(a.comment, f, c); 6596 a.root && this.rootRules.add(a.root, f, c) 6597 }, 6598 applyTo: function(a) { 6599 a.filter(this) 6600 }, 6601 onElementName: function(a, c) { 6602 return this.elementNameRules.execOnName(a, 6603 c) 6604 }, 6605 onAttributeName: function(a, c) { 6606 return this.attributeNameRules.execOnName(a, c) 6607 }, 6608 onText: function(a, c, d) { 6609 return this.textRules.exec(a, c, d) 6610 }, 6611 onComment: function(a, c, d) { 6612 return this.commentRules.exec(a, c, d) 6613 }, 6614 onRoot: function(a, c) { 6615 return this.rootRules.exec(a, c) 6616 }, 6617 onElement: function(a, c) { 6618 for (var d = [this.elementsRules["^"], this.elementsRules[c.name], this.elementsRules.$], h, k = 0; 3 > k; k++) 6619 if (h = d[k]) { 6620 h = h.exec(a, c, this); 6621 if (!1 === h) return null; 6622 if (h && h != c) return this.onNode(a, h); 6623 if (c.parent && !c.name) break 6624 } return c 6625 }, 6626 onNode: function(a, c) { 6627 var d = c.type; 6628 return d == CKEDITOR.NODE_ELEMENT ? this.onElement(a, c) : d == CKEDITOR.NODE_TEXT ? new CKEDITOR.htmlParser.text(this.onText(a, c.value)) : d == CKEDITOR.NODE_COMMENT ? new CKEDITOR.htmlParser.comment(this.onComment(a, c.value)) : null 6629 }, 6630 onAttribute: function(a, c, d, h) { 6631 return (d = this.attributesRules[d]) ? d.exec(a, h, c, this) : h 6632 } 6633 } 6634 }); 6635 CKEDITOR.htmlParser.filterRulesGroup = a; 6636 a.prototype = { 6637 add: function(a, c, d) { 6638 this.rules.splice(this.findIndex(c), 0, { 6639 value: a, 6640 priority: c, 6641 options: d 6642 }) 6643 }, 6644 addMany: function(a, 6645 c, d) { 6646 for (var h = [this.findIndex(c), 0], k = 0, g = a.length; k < g; k++) h.push({ 6647 value: a[k], 6648 priority: c, 6649 options: d 6650 }); 6651 this.rules.splice.apply(this.rules, h) 6652 }, 6653 findIndex: function(a) { 6654 for (var c = this.rules, d = c.length - 1; 0 <= d && a < c[d].priority;) d--; 6655 return d + 1 6656 }, 6657 exec: function(a, c) { 6658 var d = c instanceof CKEDITOR.htmlParser.node || c instanceof CKEDITOR.htmlParser.fragment, 6659 h = Array.prototype.slice.call(arguments, 1), 6660 k = this.rules, 6661 g = k.length, 6662 n, r, e, y; 6663 for (y = 0; y < g; y++) 6664 if (d && (n = c.type, r = c.name), e = k[y], !(a.nonEditable && !e.options.applyToAll || 6665 a.nestedEditable && e.options.excludeNestedEditable)) { 6666 e = e.value.apply(null, h); 6667 if (!1 === e || d && e && (e.name != r || e.type != n)) return e; 6668 null != e && (h[0] = c = e) 6669 } return c 6670 }, 6671 execOnName: function(a, c) { 6672 for (var d = 0, h = this.rules, k = h.length, g; c && d < k; d++) g = h[d], a.nonEditable && !g.options.applyToAll || a.nestedEditable && g.options.excludeNestedEditable || (c = c.replace(g.value[0], g.value[1])); 6673 return c 6674 } 6675 } 6676 })(); 6677 (function() { 6678 function a(a, d) { 6679 function e(a) { 6680 return a || CKEDITOR.env.needsNbspFiller ? new CKEDITOR.htmlParser.text(" ") : new CKEDITOR.htmlParser.element("br", { 6681 "data-cke-bogus": 1 6682 }) 6683 } 6684 6685 function p(a, d) { 6686 return function(f) { 6687 if (f.type != CKEDITOR.NODE_DOCUMENT_FRAGMENT) { 6688 var l = [], 6689 w = b(f), 6690 p, E; 6691 if (w) 6692 for (q(w, 1) && l.push(w); w;) h(w) && (p = c(w)) && q(p) && ((E = c(p)) && !h(E) ? l.push(p) : (e(z).insertAfter(p), p.remove())), w = w.previous; 6693 for (w = 0; w < l.length; w++) l[w].remove(); 6694 if (l = !a || !1 !== ("function" == typeof d ? d(f) : d)) z || CKEDITOR.env.needsBrFiller || 6695 f.type != CKEDITOR.NODE_DOCUMENT_FRAGMENT ? z || CKEDITOR.env.needsBrFiller || !(7 < document.documentMode || f.name in CKEDITOR.dtd.tr || f.name in CKEDITOR.dtd.$listItem) ? (l = b(f), l = !l || "form" == f.name && "input" == l.name) : l = !1 : l = !1; 6696 l && f.add(e(a)) 6697 } 6698 } 6699 } 6700 6701 function q(a, b) { 6702 if ((!z || CKEDITOR.env.needsBrFiller) && a.type == CKEDITOR.NODE_ELEMENT && "br" == a.name && !a.attributes["data-cke-eol"]) return !0; 6703 var c; 6704 return a.type == CKEDITOR.NODE_TEXT && (c = a.value.match(m)) && (c.index && ((new CKEDITOR.htmlParser.text(a.value.substring(0, c.index))).insertBefore(a), 6705 a.value = c[0]), !CKEDITOR.env.needsBrFiller && z && (!b || a.parent.name in g) || !z && ((c = a.previous) && "br" == c.name || !c || h(c))) ? !0 : !1 6706 } 6707 var E = { 6708 elements: {} 6709 }, 6710 z = "html" == d, 6711 g = CKEDITOR.tools.extend({}, l), 6712 t; 6713 for (t in g) "#" in u[t] || delete g[t]; 6714 for (t in g) E.elements[t] = p(z, a.config.fillEmptyBlocks); 6715 E.root = p(z, !1); 6716 E.elements.br = function(a) { 6717 return function(b) { 6718 if (b.parent.type != CKEDITOR.NODE_DOCUMENT_FRAGMENT) { 6719 var d = b.attributes; 6720 if ("data-cke-bogus" in d || "data-cke-eol" in d) delete d["data-cke-bogus"]; 6721 else { 6722 for (d = b.next; d && f(d);) d = 6723 d.next; 6724 var l = c(b); 6725 !d && h(b.parent) ? k(b.parent, e(a)) : h(d) && l && !h(l) && e(a).insertBefore(d) 6726 } 6727 } 6728 } 6729 }(z); 6730 return E 6731 } 6732 6733 function d(a, b) { 6734 return a != CKEDITOR.ENTER_BR && !1 !== b ? a == CKEDITOR.ENTER_DIV ? "div" : "p" : !1 6735 } 6736 6737 function b(a) { 6738 for (a = a.children[a.children.length - 1]; a && f(a);) a = a.previous; 6739 return a 6740 } 6741 6742 function c(a) { 6743 for (a = a.previous; a && f(a);) a = a.previous; 6744 return a 6745 } 6746 6747 function f(a) { 6748 return a.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.trim(a.value) || a.type == CKEDITOR.NODE_ELEMENT && a.attributes["data-cke-bookmark"] 6749 } 6750 6751 function h(a) { 6752 return a && 6753 (a.type == CKEDITOR.NODE_ELEMENT && a.name in l || a.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT) 6754 } 6755 6756 function k(a, b) { 6757 var c = a.children[a.children.length - 1]; 6758 a.children.push(b); 6759 b.parent = a; 6760 c && (c.next = b, b.previous = c) 6761 } 6762 6763 function g(a) { 6764 a = a.attributes; 6765 "false" != a.contenteditable && (a["data-cke-editable"] = a.contenteditable ? "true" : 1); 6766 a.contenteditable = "false" 6767 } 6768 6769 function n(a) { 6770 a = a.attributes; 6771 switch (a["data-cke-editable"]) { 6772 case "true": 6773 a.contenteditable = "true"; 6774 break; 6775 case "1": 6776 delete a.contenteditable 6777 } 6778 } 6779 6780 function r(a) { 6781 return a.replace(M, 6782 function(a, b, c) { 6783 return "\x3c" + b + c.replace(q, function(a, b) { 6784 return E.test(b) && -1 == c.indexOf("data-cke-saved-" + b) ? " data-cke-saved-" + a + " data-cke-" + CKEDITOR.rnd + "-" + a : a 6785 }) + "\x3e" 6786 }) 6787 } 6788 6789 function e(a, b) { 6790 return a.replace(b, function(a, b, c) { 6791 0 === a.indexOf("\x3ctextarea") && (a = b + B(c).replace(/</g, "\x26lt;").replace(/>/g, "\x26gt;") + "\x3c/textarea\x3e"); 6792 return "\x3ccke:encoded\x3e" + encodeURIComponent(a) + "\x3c/cke:encoded\x3e" 6793 }) 6794 } 6795 6796 function y(a) { 6797 return a.replace(P, function(a, b) { 6798 return decodeURIComponent(b) 6799 }) 6800 } 6801 6802 function v(a) { 6803 return a.replace(/\x3c!--(?!{cke_protected})[\s\S]+?--\x3e/g, 6804 function(a) { 6805 return "\x3c!--" + J + "{C}" + encodeURIComponent(a).replace(/--/g, "%2D%2D") + "--\x3e" 6806 }) 6807 } 6808 6809 function B(a) { 6810 return a.replace(/\x3c!--\{cke_protected\}\{C\}([\s\S]+?)--\x3e/g, function(a, b) { 6811 return decodeURIComponent(b) 6812 }) 6813 } 6814 6815 function D(a, b) { 6816 var c = b._.dataStore; 6817 return a.replace(/\x3c!--\{cke_protected\}([\s\S]+?)--\x3e/g, function(a, b) { 6818 return decodeURIComponent(b) 6819 }).replace(/\{cke_protected_(\d+)\}/g, function(a, b) { 6820 return c && c[b] || "" 6821 }) 6822 } 6823 6824 function x(a, b) { 6825 var c = [], 6826 d = b.config.protectedSource, 6827 f = b._.dataStore || (b._.dataStore = { 6828 id: 1 6829 }), 6830 e = /<\!--\{cke_temp(comment)?\}(\d*?)--\x3e/g, 6831 d = [/<script[\s\S]*?(<\/script>|$)/gi, /<noscript[\s\S]*?<\/noscript>/gi, /<meta[\s\S]*?\/?>/gi].concat(d); 6832 a = a.replace(/\x3c!--[\s\S]*?--\x3e/g, function(a) { 6833 return "\x3c!--{cke_tempcomment}" + (c.push(a) - 1) + "--\x3e" 6834 }); 6835 for (var l = 0; l < d.length; l++) a = a.replace(d[l], function(a) { 6836 a = a.replace(e, function(a, b, d) { 6837 return c[d] 6838 }); 6839 return /cke_temp(comment)?/.test(a) ? a : "\x3c!--{cke_temp}" + (c.push(a) - 1) + "--\x3e" 6840 }); 6841 a = a.replace(e, function(a, b, d) { 6842 return "\x3c!--" + J + (b ? "{C}" : 6843 "") + encodeURIComponent(c[d]).replace(/--/g, "%2D%2D") + "--\x3e" 6844 }); 6845 a = a.replace(/<\w+(?:\s+(?:(?:[^\s=>]+\s*=\s*(?:[^'"\s>]+|'[^']*'|"[^"]*"))|[^\s=\/>]+))+\s*\/?>/g, function(a) { 6846 return a.replace(/\x3c!--\{cke_protected\}([^>]*)--\x3e/g, function(a, b) { 6847 f[f.id] = decodeURIComponent(b); 6848 return "{cke_protected_" + f.id++ + "}" 6849 }) 6850 }); 6851 return a = a.replace(/<(title|iframe|textarea)([^>]*)>([\s\S]*?)<\/\1>/g, function(a, c, d, f) { 6852 return "\x3c" + c + d + "\x3e" + D(B(f), b) + "\x3c/" + c + "\x3e" 6853 }) 6854 } 6855 CKEDITOR.htmlDataProcessor = function(b) { 6856 var c, 6857 f, l = this; 6858 this.editor = b; 6859 this.dataFilter = c = new CKEDITOR.htmlParser.filter; 6860 this.htmlFilter = f = new CKEDITOR.htmlParser.filter; 6861 this.writer = new CKEDITOR.htmlParser.basicWriter; 6862 c.addRules(t); 6863 c.addRules(F, { 6864 applyToAll: !0 6865 }); 6866 c.addRules(a(b, "data"), { 6867 applyToAll: !0 6868 }); 6869 f.addRules(L); 6870 f.addRules(C, { 6871 applyToAll: !0 6872 }); 6873 f.addRules(a(b, "html"), { 6874 applyToAll: !0 6875 }); 6876 b.on("toHtml", function(a) { 6877 a = a.data; 6878 var c = a.dataValue, 6879 f, c = x(c, b), 6880 c = e(c, H), 6881 c = r(c), 6882 c = e(c, z), 6883 c = c.replace(O, "$1cke:$2"), 6884 c = c.replace(N, "\x3ccke:$1$2\x3e\x3c/cke:$1\x3e"), 6885 c = c.replace(/(<pre\b[^>]*>)(\r\n|\n)/g, "$1$2$2"), 6886 c = c.replace(/([^a-z0-9<\-])(on\w{3,})(?!>)/gi, "$1data-cke-" + CKEDITOR.rnd + "-$2"); 6887 f = a.context || b.editable().getName(); 6888 var l; 6889 CKEDITOR.env.ie && 9 > CKEDITOR.env.version && "pre" == f && (f = "div", c = "\x3cpre\x3e" + c + "\x3c/pre\x3e", l = 1); 6890 f = b.document.createElement(f); 6891 f.setHtml("a" + c); 6892 c = f.getHtml().substr(1); 6893 c = c.replace(new RegExp("data-cke-" + CKEDITOR.rnd + "-", "ig"), ""); 6894 l && (c = c.replace(/^<pre>|<\/pre>$/gi, "")); 6895 c = c.replace(p, "$1$2"); 6896 c = y(c); 6897 c = B(c); 6898 f = !1 === a.fixForBody ? !1 : 6899 d(a.enterMode, b.config.autoParagraph); 6900 c = CKEDITOR.htmlParser.fragment.fromHtml(c, a.context, f); 6901 f && (l = c, !l.children.length && CKEDITOR.dtd[l.name][f] && (f = new CKEDITOR.htmlParser.element(f), l.add(f))); 6902 a.dataValue = c 6903 }, null, null, 5); 6904 b.on("toHtml", function(a) { 6905 a.data.filter.applyTo(a.data.dataValue, !0, a.data.dontFilter, a.data.enterMode) && b.fire("dataFiltered") 6906 }, null, null, 6); 6907 b.on("toHtml", function(a) { 6908 a.data.dataValue.filterChildren(l.dataFilter, !0) 6909 }, null, null, 10); 6910 b.on("toHtml", function(a) { 6911 a = a.data; 6912 var b = a.dataValue, 6913 c = new CKEDITOR.htmlParser.basicWriter; 6914 b.writeChildrenHtml(c); 6915 b = c.getHtml(!0); 6916 a.dataValue = v(b) 6917 }, null, null, 15); 6918 b.on("toDataFormat", function(a) { 6919 var c = a.data.dataValue; 6920 a.data.enterMode != CKEDITOR.ENTER_BR && (c = c.replace(/^<br *\/?>/i, "")); 6921 a.data.dataValue = CKEDITOR.htmlParser.fragment.fromHtml(c, a.data.context, d(a.data.enterMode, b.config.autoParagraph)) 6922 }, null, null, 5); 6923 b.on("toDataFormat", function(a) { 6924 a.data.dataValue.filterChildren(l.htmlFilter, !0) 6925 }, null, null, 10); 6926 b.on("toDataFormat", function(a) { 6927 a.data.filter.applyTo(a.data.dataValue, 6928 !1, !0) 6929 }, null, null, 11); 6930 b.on("toDataFormat", function(a) { 6931 var c = a.data.dataValue, 6932 d = l.writer; 6933 d.reset(); 6934 c.writeChildrenHtml(d); 6935 c = d.getHtml(!0); 6936 c = B(c); 6937 c = D(c, b); 6938 a.data.dataValue = c 6939 }, null, null, 15) 6940 }; 6941 CKEDITOR.htmlDataProcessor.prototype = { 6942 toHtml: function(a, b, c, d) { 6943 var f = this.editor, 6944 e, l, p, h; 6945 b && "object" == typeof b ? (e = b.context, c = b.fixForBody, d = b.dontFilter, l = b.filter, p = b.enterMode, h = b.protectedWhitespaces) : e = b; 6946 e || null === e || (e = f.editable().getName()); 6947 return f.fire("toHtml", { 6948 dataValue: a, 6949 context: e, 6950 fixForBody: c, 6951 dontFilter: d, 6952 filter: l || f.filter, 6953 enterMode: p || f.enterMode, 6954 protectedWhitespaces: h 6955 }).dataValue 6956 }, 6957 toDataFormat: function(a, b) { 6958 var c, d, f; 6959 b && (c = b.context, d = b.filter, f = b.enterMode); 6960 c || null === c || (c = this.editor.editable().getName()); 6961 return this.editor.fire("toDataFormat", { 6962 dataValue: a, 6963 filter: d || this.editor.filter, 6964 context: c, 6965 enterMode: f || this.editor.enterMode 6966 }).dataValue 6967 } 6968 }; 6969 var m = /(?: |\xa0)$/, 6970 J = "{cke_protected}", 6971 u = CKEDITOR.dtd, 6972 K = "caption colgroup col thead tfoot tbody".split(" "), 6973 l = CKEDITOR.tools.extend({}, u.$blockLimit, 6974 u.$block), 6975 t = { 6976 elements: { 6977 input: g, 6978 textarea: g 6979 } 6980 }, 6981 F = { 6982 attributeNames: [ 6983 [/^on/, "data-cke-pa-on"], 6984 [/^srcdoc/, "data-cke-pa-srcdoc"], 6985 [/^data-cke-expando$/, ""] 6986 ], 6987 elements: { 6988 iframe: function(a) { 6989 if (a.attributes && a.attributes.src) { 6990 var b = a.attributes.src.toLowerCase().replace(/[^a-z]/gi, ""); 6991 if (0 === b.indexOf("javascript") || 0 === b.indexOf("data")) a.attributes["data-cke-pa-src"] = a.attributes.src, delete a.attributes.src 6992 } 6993 } 6994 } 6995 }, 6996 L = { 6997 elements: { 6998 embed: function(a) { 6999 var b = a.parent; 7000 if (b && "object" == b.name) { 7001 var c = b.attributes.width, 7002 b = b.attributes.height; 7003 c && (a.attributes.width = c); 7004 b && (a.attributes.height = b) 7005 } 7006 }, 7007 a: function(a) { 7008 var b = a.attributes; 7009 if (!(a.children.length || b.name || b.id || a.attributes["data-cke-saved-name"])) return !1 7010 } 7011 } 7012 }, 7013 C = { 7014 elementNames: [ 7015 [/^cke:/, ""], 7016 [/^\?xml:namespace$/, ""] 7017 ], 7018 attributeNames: [ 7019 [/^data-cke-(saved|pa)-/, ""], 7020 [/^data-cke-.*/, ""], 7021 ["hidefocus", ""] 7022 ], 7023 elements: { 7024 $: function(a) { 7025 var b = a.attributes; 7026 if (b) { 7027 if (b["data-cke-temp"]) return !1; 7028 for (var c = ["name", "href", "src"], d, f = 0; f < c.length; f++) d = "data-cke-saved-" + c[f], d in b && delete b[c[f]] 7029 } 7030 return a 7031 }, 7032 table: function(a) { 7033 a.children.slice(0).sort(function(a, b) { 7034 var c, d; 7035 a.type == CKEDITOR.NODE_ELEMENT && b.type == a.type && (c = CKEDITOR.tools.indexOf(K, a.name), d = CKEDITOR.tools.indexOf(K, b.name)); - 1 < c && -1 < d && c != d || (c = a.parent ? a.getIndex() : -1, d = b.parent ? b.getIndex() : -1); 7036 return c > d ? 1 : -1 7037 }) 7038 }, 7039 param: function(a) { 7040 a.children = []; 7041 a.isEmpty = !0; 7042 return a 7043 }, 7044 span: function(a) { 7045 "Apple-style-span" == a.attributes["class"] && delete a.name 7046 }, 7047 html: function(a) { 7048 delete a.attributes.contenteditable; 7049 delete a.attributes["class"] 7050 }, 7051 body: function(a) { 7052 delete a.attributes.spellcheck; 7053 delete a.attributes.contenteditable 7054 }, 7055 style: function(a) { 7056 var b = a.children[0]; 7057 b && b.value && (b.value = CKEDITOR.tools.trim(b.value)); 7058 a.attributes.type || (a.attributes.type = "text/css") 7059 }, 7060 title: function(a) { 7061 var b = a.children[0]; 7062 !b && k(a, b = new CKEDITOR.htmlParser.text); 7063 b.value = a.attributes["data-cke-title"] || "" 7064 }, 7065 input: n, 7066 textarea: n 7067 }, 7068 attributes: { 7069 "class": function(a) { 7070 return CKEDITOR.tools.ltrim(a.replace(/(?:^|\s+)cke_[^\s]*/g, "")) || !1 7071 } 7072 } 7073 }; 7074 CKEDITOR.env.ie && (C.attributes.style = function(a) { 7075 return a.replace(/(^|;)([^\:]+)/g, 7076 function(a) { 7077 return a.toLowerCase() 7078 }) 7079 }); 7080 var M = /<(a|area|img|input|source)\b([^>]*)>/gi, 7081 q = /([\w-:]+)\s*=\s*(?:(?:"[^"]*")|(?:'[^']*')|(?:[^ "'>]+))/gi, 7082 E = /^(href|src|name)$/i, 7083 z = /(?:<style(?=[ >])[^>]*>[\s\S]*?<\/style>)|(?:<(:?link|meta|base)[^>]*>)/gi, 7084 H = /(<textarea(?=[ >])[^>]*>)([\s\S]*?)(?:<\/textarea>)/gi, 7085 P = /<cke:encoded>([^<]*)<\/cke:encoded>/gi, 7086 O = /(<\/?)((?:object|embed|param|html|body|head|title)([\s][^>]*)?>)/gi, 7087 p = /(<\/?)cke:((?:html|body|head|title)[^>]*>)/gi, 7088 N = /<cke:(param|embed)([^>]*?)\/?>(?!\s*<\/cke:\1)/gi 7089 })(); 7090 "use strict"; 7091 CKEDITOR.htmlParser.element = function(a, d) { 7092 this.name = a; 7093 this.attributes = d || {}; 7094 this.children = []; 7095 var b = a || "", 7096 c = b.match(/^cke:(.*)/); 7097 c && (b = c[1]); 7098 b = !!(CKEDITOR.dtd.$nonBodyContent[b] || CKEDITOR.dtd.$block[b] || CKEDITOR.dtd.$listItem[b] || CKEDITOR.dtd.$tableContent[b] || CKEDITOR.dtd.$nonEditable[b] || "br" == b); 7099 this.isEmpty = !!CKEDITOR.dtd.$empty[a]; 7100 this.isUnknown = !CKEDITOR.dtd[a]; 7101 this._ = { 7102 isBlockLike: b, 7103 hasInlineStarted: this.isEmpty || !b 7104 } 7105 }; 7106 CKEDITOR.htmlParser.cssStyle = function(a) { 7107 var d = {}; 7108 ((a instanceof CKEDITOR.htmlParser.element ? a.attributes.style : a) || "").replace(/"/g, '"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g, function(a, c, f) { 7109 "font-family" == c && (f = f.replace(/["']/g, "")); 7110 d[c.toLowerCase()] = f 7111 }); 7112 return { 7113 rules: d, 7114 populate: function(a) { 7115 var c = this.toString(); 7116 c && (a instanceof CKEDITOR.dom.element ? a.setAttribute("style", c) : a instanceof CKEDITOR.htmlParser.element ? a.attributes.style = c : a.style = c) 7117 }, 7118 toString: function() { 7119 var a = [], 7120 c; 7121 for (c in d) d[c] && a.push(c, ":", d[c], ";"); 7122 return a.join("") 7123 } 7124 } 7125 }; 7126 (function() { 7127 function a(a) { 7128 return function(b) { 7129 return b.type == CKEDITOR.NODE_ELEMENT && ("string" == typeof a ? b.name == a : b.name in a) 7130 } 7131 } 7132 var d = function(a, b) { 7133 a = a[0]; 7134 b = b[0]; 7135 return a < b ? -1 : a > b ? 1 : 0 7136 }, 7137 b = CKEDITOR.htmlParser.fragment.prototype; 7138 CKEDITOR.htmlParser.element.prototype = CKEDITOR.tools.extend(new CKEDITOR.htmlParser.node, { 7139 type: CKEDITOR.NODE_ELEMENT, 7140 add: b.add, 7141 clone: function() { 7142 return new CKEDITOR.htmlParser.element(this.name, this.attributes) 7143 }, 7144 filter: function(a, b) { 7145 var d = this, 7146 k, g; 7147 b = d.getFilterContext(b); 7148 if (b.off) return !0; 7149 if (!d.parent) a.onRoot(b, d); 7150 for (;;) { 7151 k = d.name; 7152 if (!(g = a.onElementName(b, k))) return this.remove(), !1; 7153 d.name = g; 7154 if (!(d = a.onElement(b, d))) return this.remove(), !1; 7155 if (d !== this) return this.replaceWith(d), !1; 7156 if (d.name == k) break; 7157 if (d.type != CKEDITOR.NODE_ELEMENT) return this.replaceWith(d), !1; 7158 if (!d.name) return this.replaceWithChildren(), !1 7159 } 7160 k = d.attributes; 7161 var n, r; 7162 for (n in k) { 7163 for (g = k[n];;) 7164 if (r = a.onAttributeName(b, n)) 7165 if (r != n) delete k[n], n = r; 7166 else break; 7167 else { 7168 delete k[n]; 7169 break 7170 } 7171 r && (!1 === (g = a.onAttribute(b, d, r, g)) ? delete k[r] : 7172 k[r] = g) 7173 } 7174 d.isEmpty || this.filterChildren(a, !1, b); 7175 return !0 7176 }, 7177 filterChildren: b.filterChildren, 7178 writeHtml: function(a, b) { 7179 b && this.filter(b); 7180 var h = this.name, 7181 k = [], 7182 g = this.attributes, 7183 n, r; 7184 a.openTag(h, g); 7185 for (n in g) k.push([n, g[n]]); 7186 a.sortAttributes && k.sort(d); 7187 n = 0; 7188 for (r = k.length; n < r; n++) g = k[n], a.attribute(g[0], g[1]); 7189 a.openTagClose(h, this.isEmpty); 7190 this.writeChildrenHtml(a); 7191 this.isEmpty || a.closeTag(h) 7192 }, 7193 writeChildrenHtml: b.writeChildrenHtml, 7194 replaceWithChildren: function() { 7195 for (var a = this.children, b = a.length; b;) a[--b].insertAfter(this); 7196 this.remove() 7197 }, 7198 forEach: b.forEach, 7199 getFirst: function(b) { 7200 if (!b) return this.children.length ? this.children[0] : null; 7201 "function" != typeof b && (b = a(b)); 7202 for (var d = 0, h = this.children.length; d < h; ++d) 7203 if (b(this.children[d])) return this.children[d]; 7204 return null 7205 }, 7206 getHtml: function() { 7207 var a = new CKEDITOR.htmlParser.basicWriter; 7208 this.writeChildrenHtml(a); 7209 return a.getHtml() 7210 }, 7211 setHtml: function(a) { 7212 a = this.children = CKEDITOR.htmlParser.fragment.fromHtml(a).children; 7213 for (var b = 0, d = a.length; b < d; ++b) a[b].parent = this 7214 }, 7215 getOuterHtml: function() { 7216 var a = 7217 new CKEDITOR.htmlParser.basicWriter; 7218 this.writeHtml(a); 7219 return a.getHtml() 7220 }, 7221 split: function(a) { 7222 for (var b = this.children.splice(a, this.children.length - a), d = this.clone(), k = 0; k < b.length; ++k) b[k].parent = d; 7223 d.children = b; 7224 b[0] && (b[0].previous = null); 7225 0 < a && (this.children[a - 1].next = null); 7226 this.parent.add(d, this.getIndex() + 1); 7227 return d 7228 }, 7229 find: function(a, b) { 7230 void 0 === b && (b = !1); 7231 var d = [], 7232 k; 7233 for (k = 0; k < this.children.length; k++) { 7234 var g = this.children[k]; 7235 "function" == typeof a && a(g) ? d.push(g) : "string" == typeof a && g.name === a && d.push(g); 7236 b && g.find && (d = d.concat(g.find(a, b))) 7237 } 7238 return d 7239 }, 7240 addClass: function(a) { 7241 if (!this.hasClass(a)) { 7242 var b = this.attributes["class"] || ""; 7243 this.attributes["class"] = b + (b ? " " : "") + a 7244 } 7245 }, 7246 removeClass: function(a) { 7247 var b = this.attributes["class"]; 7248 b && ((b = CKEDITOR.tools.trim(b.replace(new RegExp("(?:\\s+|^)" + a + "(?:\\s+|$)"), " "))) ? this.attributes["class"] = b : delete this.attributes["class"]) 7249 }, 7250 hasClass: function(a) { 7251 var b = this.attributes["class"]; 7252 return b ? (new RegExp("(?:^|\\s)" + a + "(?\x3d\\s|$)")).test(b) : !1 7253 }, 7254 getFilterContext: function(a) { 7255 var b = []; 7256 a || (a = { 7257 off: !1, 7258 nonEditable: !1, 7259 nestedEditable: !1 7260 }); 7261 a.off || "off" != this.attributes["data-cke-processor"] || b.push("off", !0); 7262 a.nonEditable || "false" != this.attributes.contenteditable ? a.nonEditable && !a.nestedEditable && "true" == this.attributes.contenteditable && b.push("nestedEditable", !0) : b.push("nonEditable", !0); 7263 if (b.length) { 7264 a = CKEDITOR.tools.copy(a); 7265 for (var d = 0; d < b.length; d += 2) a[b[d]] = b[d + 1] 7266 } 7267 return a 7268 } 7269 }, !0) 7270 })(); 7271 (function() { 7272 var a = /{([^}]+)}/g; 7273 CKEDITOR.template = function(a) { 7274 this.source = String(a) 7275 }; 7276 CKEDITOR.template.prototype.output = function(d, b) { 7277 var c = this.source.replace(a, function(a, b) { 7278 return void 0 !== d[b] ? d[b] : a 7279 }); 7280 return b ? b.push(c) : c 7281 } 7282 })(); 7283 delete CKEDITOR.loadFullCore; 7284 CKEDITOR.instances = {}; 7285 CKEDITOR.document = new CKEDITOR.dom.document(document); 7286 CKEDITOR.add = function(a) { 7287 CKEDITOR.instances[a.name] = a; 7288 a.on("focus", function() { 7289 CKEDITOR.currentInstance != a && (CKEDITOR.currentInstance = a, CKEDITOR.fire("currentInstance")) 7290 }); 7291 a.on("blur", function() { 7292 CKEDITOR.currentInstance == a && (CKEDITOR.currentInstance = null, CKEDITOR.fire("currentInstance")) 7293 }); 7294 CKEDITOR.fire("instance", null, a) 7295 }; 7296 CKEDITOR.remove = function(a) { 7297 delete CKEDITOR.instances[a.name] 7298 }; 7299 (function() { 7300 var a = {}; 7301 CKEDITOR.addTemplate = function(d, b) { 7302 var c = a[d]; 7303 if (c) return c; 7304 c = { 7305 name: d, 7306 source: b 7307 }; 7308 CKEDITOR.fire("template", c); 7309 return a[d] = new CKEDITOR.template(c.source) 7310 }; 7311 CKEDITOR.getTemplate = function(d) { 7312 return a[d] 7313 } 7314 })(); 7315 (function() { 7316 var a = []; 7317 CKEDITOR.addCss = function(d) { 7318 a.push(d) 7319 }; 7320 CKEDITOR.getCss = function() { 7321 return a.join("\n") 7322 } 7323 })(); 7324 CKEDITOR.on("instanceDestroyed", function() { 7325 CKEDITOR.tools.isEmpty(this.instances) && CKEDITOR.fire("reset") 7326 }); 7327 CKEDITOR.TRISTATE_ON = 1; 7328 CKEDITOR.TRISTATE_OFF = 2; 7329 CKEDITOR.TRISTATE_DISABLED = 0; 7330 (function() { 7331 CKEDITOR.inline = function(a, d) { 7332 if (!CKEDITOR.env.isCompatible) return null; 7333 a = CKEDITOR.dom.element.get(a); 7334 if (a.getEditor()) throw 'The editor instance "' + a.getEditor().name + '" is already attached to the provided element.'; 7335 var b = new CKEDITOR.editor(d, a, CKEDITOR.ELEMENT_MODE_INLINE), 7336 c = a.is("textarea") ? a : null; 7337 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), 7338 a.insertAfter(c), c.hide(), c.$.form && b._attachToForm()) : b.setData(a.getHtml(), null, !0); 7339 b.on("loaded", function() { 7340 b.fire("uiReady"); 7341 b.editable(a); 7342 b.container = a; 7343 b.ui.contentsElement = a; 7344 b.setData(b.getData(1)); 7345 b.resetDirty(); 7346 b.fire("contentDom"); 7347 b.mode = "wysiwyg"; 7348 b.fire("mode"); 7349 b.status = "ready"; 7350 b.fireOnce("instanceReady"); 7351 CKEDITOR.fire("instanceReady", null, b) 7352 }, null, null, 1E4); 7353 b.on("destroy", function() { 7354 c && (b.container.clearCustomData(), b.container.remove(), c.show()); 7355 b.element.clearCustomData(); 7356 delete b.element 7357 }); 7358 return b 7359 }; 7360 CKEDITOR.inlineAll = function() { 7361 var a, d, b; 7362 for (b in CKEDITOR.dtd.$editable) 7363 for (var c = CKEDITOR.document.getElementsByTag(b), f = 0, h = c.count(); f < h; f++) a = c.getItem(f), "true" == a.getAttribute("contenteditable") && (d = { 7364 element: a, 7365 config: {} 7366 }, !1 !== CKEDITOR.fire("inline", d) && CKEDITOR.inline(a, d.config)) 7367 }; 7368 CKEDITOR.domReady(function() { 7369 !CKEDITOR.disableAutoInline && CKEDITOR.inlineAll() 7370 }) 7371 })(); 7372 CKEDITOR.replaceClass = "ckeditor"; 7373 (function() { 7374 function a(a, f, h, k) { 7375 if (!CKEDITOR.env.isCompatible) return null; 7376 a = CKEDITOR.dom.element.get(a); 7377 if (a.getEditor()) throw 'The editor instance "' + a.getEditor().name + '" is already attached to the provided element.'; 7378 var g = new CKEDITOR.editor(f, a, k); 7379 k == CKEDITOR.ELEMENT_MODE_REPLACE && (a.setStyle("visibility", "hidden"), g._.required = a.hasAttribute("required"), a.removeAttribute("required")); 7380 h && g.setData(h, null, !0); 7381 g.on("loaded", function() { 7382 b(g); 7383 k == CKEDITOR.ELEMENT_MODE_REPLACE && g.config.autoUpdateElement && 7384 a.$.form && g._attachToForm(); 7385 g.setMode(g.config.startupMode, function() { 7386 g.resetDirty(); 7387 g.status = "ready"; 7388 g.fireOnce("instanceReady"); 7389 CKEDITOR.fire("instanceReady", null, g) 7390 }) 7391 }); 7392 g.on("destroy", d); 7393 return g 7394 } 7395 7396 function d() { 7397 var a = this.container, 7398 b = this.element; 7399 a && (a.clearCustomData(), a.remove()); 7400 b && (b.clearCustomData(), this.elementMode == CKEDITOR.ELEMENT_MODE_REPLACE && (b.show(), this._.required && b.setAttribute("required", "required")), delete this.element) 7401 } 7402 7403 function b(a) { 7404 var b = a.name, 7405 d = a.element, 7406 k = a.elementMode, 7407 g = 7408 a.fire("uiSpace", { 7409 space: "top", 7410 html: "" 7411 }).html, 7412 n = a.fire("uiSpace", { 7413 space: "bottom", 7414 html: "" 7415 }).html, 7416 r = 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'), 7417 b = CKEDITOR.dom.element.createFromHtml(r.output({ 7418 id: a.id, 7419 name: b, 7420 langDir: a.lang.dir, 7421 langCode: a.langCode, 7422 voiceLabel: a.title, 7423 topHtml: g ? '\x3cspan id\x3d"' + a.ui.spaceId("top") + '" class\x3d"cke_top cke_reset_all" role\x3d"presentation" style\x3d"height:auto"\x3e' + g + "\x3c/span\x3e" : "", 7424 contentId: a.ui.spaceId("contents"), 7425 bottomHtml: n ? '\x3cspan id\x3d"' + a.ui.spaceId("bottom") + '" class\x3d"cke_bottom cke_reset_all" role\x3d"presentation"\x3e' + n + "\x3c/span\x3e" : "", 7426 outerEl: CKEDITOR.env.ie ? "span" : "div" 7427 })); 7428 k == CKEDITOR.ELEMENT_MODE_REPLACE ? 7429 (d.hide(), b.insertAfter(d)) : d.append(b); 7430 a.container = b; 7431 a.ui.contentsElement = a.ui.space("contents"); 7432 g && a.ui.space("top").unselectable(); 7433 n && a.ui.space("bottom").unselectable(); 7434 d = a.config.width; 7435 k = a.config.height; 7436 d && b.setStyle("width", CKEDITOR.tools.cssLength(d)); 7437 k && a.ui.space("contents").setStyle("height", CKEDITOR.tools.cssLength(k)); 7438 b.disableContextMenu(); 7439 CKEDITOR.env.webkit && b.on("focus", function() { 7440 a.focus() 7441 }); 7442 a.fireOnce("uiReady") 7443 } 7444 CKEDITOR.replace = function(b, d) { 7445 return a(b, d, null, CKEDITOR.ELEMENT_MODE_REPLACE) 7446 }; 7447 CKEDITOR.appendTo = function(b, d, h) { 7448 return a(b, d, h, CKEDITOR.ELEMENT_MODE_APPENDTO) 7449 }; 7450 CKEDITOR.replaceAll = function() { 7451 for (var a = document.getElementsByTagName("textarea"), b = 0; b < a.length; b++) { 7452 var d = null, 7453 k = a[b]; 7454 if (k.name || k.id) { 7455 if ("string" == typeof arguments[0]) { 7456 if (!(new RegExp("(?:^|\\s)" + arguments[0] + "(?:$|\\s)")).test(k.className)) continue 7457 } else if ("function" == typeof arguments[0] && (d = {}, !1 === arguments[0](k, d))) continue; 7458 this.replace(k, d) 7459 } 7460 } 7461 }; 7462 CKEDITOR.editor.prototype.addMode = function(a, b) { 7463 (this._.modes || (this._.modes = {}))[a] = b 7464 }; 7465 CKEDITOR.editor.prototype.setMode = function(a, b) { 7466 var d = this, 7467 k = this._.modes; 7468 if (a != d.mode && k && k[a]) { 7469 d.fire("beforeSetMode", a); 7470 if (d.mode) { 7471 var g = d.checkDirty(), 7472 k = d._.previousModeData, 7473 n, r = 0; 7474 d.fire("beforeModeUnload"); 7475 d.editable(0); 7476 d._.previousMode = d.mode; 7477 d._.previousModeData = n = d.getData(1); 7478 "source" == d.mode && k == n && (d.fire("lockSnapshot", { 7479 forceUpdate: !0 7480 }), r = 1); 7481 d.ui.space("contents").setHtml(""); 7482 d.mode = "" 7483 } else d._.previousModeData = d.getData(1); 7484 this._.modes[a](function() { 7485 d.mode = a; 7486 void 0 !== g && !g && 7487 d.resetDirty(); 7488 r ? d.fire("unlockSnapshot") : "wysiwyg" == a && d.fire("saveSnapshot"); 7489 setTimeout(function() { 7490 d.fire("mode"); 7491 b && b.call(d) 7492 }, 0) 7493 }) 7494 } 7495 }; 7496 CKEDITOR.editor.prototype.resize = function(a, b, d, k) { 7497 var g = this.container, 7498 n = this.ui.space("contents"), 7499 r = CKEDITOR.env.webkit && this.document && this.document.getWindow().$.frameElement; 7500 k = k ? this.container.getFirst(function(a) { 7501 return a.type == CKEDITOR.NODE_ELEMENT && a.hasClass("cke_inner") 7502 }) : g; 7503 k.setSize("width", a, !0); 7504 r && (r.style.width = "1%"); 7505 var e = (k.$.offsetHeight || 0) - (n.$.clientHeight || 7506 0), 7507 g = Math.max(b - (d ? 0 : e), 0); 7508 b = d ? b + e : b; 7509 n.setStyle("height", g + "px"); 7510 r && (r.style.width = "100%"); 7511 this.fire("resize", { 7512 outerHeight: b, 7513 contentsHeight: g, 7514 outerWidth: a || k.getSize("width") 7515 }) 7516 }; 7517 CKEDITOR.editor.prototype.getResizable = function(a) { 7518 return a ? this.ui.space("contents") : this.container 7519 }; 7520 CKEDITOR.domReady(function() { 7521 CKEDITOR.replaceClass && CKEDITOR.replaceAll(CKEDITOR.replaceClass) 7522 }) 7523 })(); 7524 CKEDITOR.config.startupMode = "wysiwyg"; 7525 (function() { 7526 function a(a) { 7527 var b = a.editor, 7528 e = a.data.path, 7529 f = e.blockLimit, 7530 g = a.data.selection, 7531 h = g.getRanges()[0], 7532 q; 7533 if (CKEDITOR.env.gecko || CKEDITOR.env.ie && CKEDITOR.env.needsBrFiller) 7534 if (g = d(g, e)) g.appendBogus(), q = CKEDITOR.env.ie; 7535 k(b, e.block, f) && h.collapsed && !h.getCommonAncestor().isReadOnly() && (e = h.clone(), e.enlarge(CKEDITOR.ENLARGE_BLOCK_CONTENTS), f = new CKEDITOR.dom.walker(e), f.guard = function(a) { 7536 return !c(a) || a.type == CKEDITOR.NODE_COMMENT || a.isReadOnly() 7537 }, !f.checkForward() || e.checkStartOfBlock() && e.checkEndOfBlock()) && 7538 (b = h.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(), q = 1, a.cancel()); 7539 q && h.select() 7540 } 7541 7542 function d(a, b) { 7543 if (a.isFake) return 0; 7544 var d = b.block || b.blockLimit, 7545 e = d && d.getLast(c); 7546 if (!(!d || !d.isBlockBoundary() || e && e.type == CKEDITOR.NODE_ELEMENT && e.isBlockBoundary() || d.is("pre") || d.getBogus())) return d 7547 } 7548 7549 function b(a) { 7550 var b = a.data.getTarget(); 7551 b.is("input") && 7552 (b = b.getAttribute("type"), "submit" != b && "reset" != b || a.data.preventDefault()) 7553 } 7554 7555 function c(a) { 7556 return e(a) && y(a) 7557 } 7558 7559 function f(a, b) { 7560 return function(c) { 7561 var d = c.data.$.toElement || c.data.$.fromElement || c.data.$.relatedTarget; 7562 (d = d && d.nodeType == CKEDITOR.NODE_ELEMENT ? new CKEDITOR.dom.element(d) : null) && (b.equals(d) || b.contains(d)) || a.call(this, c) 7563 } 7564 } 7565 7566 function h(a) { 7567 function b(a) { 7568 return function(b, e) { 7569 e && b.type == CKEDITOR.NODE_ELEMENT && b.is(f) && (d = b); 7570 if (!(e || !c(b) || a && B(b))) return !1 7571 } 7572 } 7573 var d, e = a.getRanges()[0]; 7574 a = a.root; 7575 var f = { 7576 table: 1, 7577 ul: 1, 7578 ol: 1, 7579 dl: 1 7580 }; 7581 if (e.startPath().contains(f)) { 7582 var g = e.clone(); 7583 g.collapse(1); 7584 g.setStartAt(a, CKEDITOR.POSITION_AFTER_START); 7585 a = new CKEDITOR.dom.walker(g); 7586 a.guard = b(); 7587 a.checkBackward(); 7588 if (d) return g = e.clone(), g.collapse(), g.setEndAt(d, CKEDITOR.POSITION_AFTER_END), a = new CKEDITOR.dom.walker(g), a.guard = b(!0), d = !1, a.checkForward(), d 7589 } 7590 return null 7591 } 7592 7593 function k(a, b, c) { 7594 return !1 !== a.config.autoParagraph && a.activeEnterMode != CKEDITOR.ENTER_BR && (a.editable().equals(c) && !b || b && "true" == b.getAttribute("contenteditable")) 7595 } 7596 7597 function g(a) { 7598 return a.activeEnterMode != CKEDITOR.ENTER_BR && !1 !== a.config.autoParagraph ? a.activeEnterMode == CKEDITOR.ENTER_DIV ? "div" : "p" : !1 7599 } 7600 7601 function n(a) { 7602 var b = a.editor; 7603 b.getSelection().scrollIntoView(); 7604 setTimeout(function() { 7605 b.fire("saveSnapshot") 7606 }, 0) 7607 } 7608 7609 function r(a, b, c) { 7610 var d = a.getCommonAncestor(b); 7611 for (b = a = c ? b : a; 7612 (a = a.getParent()) && !d.equals(a) && 1 == a.getChildCount();) b = a; 7613 b.remove() 7614 } 7615 var e, y, v, B, D, x, m, J, u, K; 7616 CKEDITOR.editable = CKEDITOR.tools.createClass({ 7617 base: CKEDITOR.dom.element, 7618 $: function(a, b) { 7619 this.base(b.$ || 7620 b); 7621 this.editor = a; 7622 this.status = "unloaded"; 7623 this.hasFocus = !1; 7624 this.setup() 7625 }, 7626 proto: { 7627 focus: function() { 7628 var a; 7629 if (CKEDITOR.env.webkit && !this.hasFocus && (a = this.editor._.previousActive || this.getDocument().getActive(), this.contains(a))) { 7630 a.focus(); 7631 return 7632 } 7633 CKEDITOR.env.edge && 14 < CKEDITOR.env.version && !this.hasFocus && this.getDocument().equals(CKEDITOR.document) && (this.editor._.previousScrollTop = this.$.scrollTop); 7634 try { 7635 if (!CKEDITOR.env.ie || CKEDITOR.env.edge && 14 < CKEDITOR.env.version || !this.getDocument().equals(CKEDITOR.document)) 7636 if (CKEDITOR.env.chrome) { 7637 var b = 7638 this.$.scrollTop; 7639 this.$.focus(); 7640 this.$.scrollTop = b 7641 } else this.$.focus(); 7642 else this.$.setActive() 7643 } catch (c) { 7644 if (!CKEDITOR.env.ie) throw c; 7645 } 7646 CKEDITOR.env.safari && !this.isInline() && (a = CKEDITOR.document.getActive(), a.equals(this.getWindow().getFrame()) || this.getWindow().focus()) 7647 }, 7648 on: function(a, b) { 7649 var c = Array.prototype.slice.call(arguments, 0); 7650 CKEDITOR.env.ie && /^focus|blur$/.exec(a) && (a = "focus" == a ? "focusin" : "focusout", b = f(b, this), c[0] = a, c[1] = b); 7651 return CKEDITOR.dom.element.prototype.on.apply(this, c) 7652 }, 7653 attachListener: function(a) { 7654 !this._.listeners && 7655 (this._.listeners = []); 7656 var b = Array.prototype.slice.call(arguments, 1), 7657 b = a.on.apply(a, b); 7658 this._.listeners.push(b); 7659 return b 7660 }, 7661 clearListeners: function() { 7662 var a = this._.listeners; 7663 try { 7664 for (; a.length;) a.pop().removeListener() 7665 } catch (b) {} 7666 }, 7667 restoreAttrs: function() { 7668 var a = this._.attrChanges, 7669 b, c; 7670 for (c in a) a.hasOwnProperty(c) && (b = a[c], null !== b ? this.setAttribute(c, b) : this.removeAttribute(c)) 7671 }, 7672 attachClass: function(a) { 7673 var b = this.getCustomData("classes"); 7674 this.hasClass(a) || (!b && (b = []), b.push(a), this.setCustomData("classes", 7675 b), this.addClass(a)) 7676 }, 7677 changeAttr: function(a, b) { 7678 var c = this.getAttribute(a); 7679 b !== c && (!this._.attrChanges && (this._.attrChanges = {}), a in this._.attrChanges || (this._.attrChanges[a] = c), this.setAttribute(a, b)) 7680 }, 7681 insertText: function(a) { 7682 this.editor.focus(); 7683 this.insertHtml(this.transformPlainTextToHtml(a), "text") 7684 }, 7685 transformPlainTextToHtml: function(a) { 7686 var b = this.editor.getSelection().getStartElement().hasAscendant("pre", !0) ? CKEDITOR.ENTER_BR : this.editor.activeEnterMode; 7687 return CKEDITOR.tools.transformPlainTextToHtml(a, 7688 b) 7689 }, 7690 insertHtml: function(a, b, c) { 7691 var d = this.editor; 7692 d.focus(); 7693 d.fire("saveSnapshot"); 7694 c || (c = d.getSelection().getRanges()[0]); 7695 x(this, b || "html", a, c); 7696 c.select(); 7697 n(this); 7698 this.editor.fire("afterInsertHtml", {}) 7699 }, 7700 insertHtmlIntoRange: function(a, b, c) { 7701 x(this, c || "html", a, b); 7702 this.editor.fire("afterInsertHtml", { 7703 intoRange: b 7704 }) 7705 }, 7706 insertElement: function(a, b) { 7707 var d = this.editor; 7708 d.focus(); 7709 d.fire("saveSnapshot"); 7710 var e = d.activeEnterMode, 7711 d = d.getSelection(), 7712 f = a.getName(), 7713 f = CKEDITOR.dtd.$block[f]; 7714 b || (b = d.getRanges()[0]); 7715 this.insertElementIntoRange(a, 7716 b) && (b.moveToPosition(a, CKEDITOR.POSITION_AFTER_END), f && ((f = a.getNext(function(a) { 7717 return c(a) && !B(a) 7718 })) && f.type == CKEDITOR.NODE_ELEMENT && f.is(CKEDITOR.dtd.$block) ? f.getDtd()["#"] ? b.moveToElementEditStart(f) : b.moveToElementEditEnd(a) : f || e == CKEDITOR.ENTER_BR || (f = b.fixBlock(!0, e == CKEDITOR.ENTER_DIV ? "div" : "p"), b.moveToElementEditStart(f)))); 7719 d.selectRanges([b]); 7720 n(this) 7721 }, 7722 insertElementIntoSelection: function(a) { 7723 this.insertElement(a) 7724 }, 7725 insertElementIntoRange: function(a, b) { 7726 var c = this.editor, 7727 d = c.config.enterMode, 7728 e = a.getName(), 7729 f = CKEDITOR.dtd.$block[e]; 7730 if (b.checkReadOnly()) return !1; 7731 b.deleteContents(1); 7732 b.startContainer.type == CKEDITOR.NODE_ELEMENT && (b.startContainer.is({ 7733 tr: 1, 7734 table: 1, 7735 tbody: 1, 7736 thead: 1, 7737 tfoot: 1 7738 }) ? m(b) : b.startContainer.is(CKEDITOR.dtd.$list) && J(b)); 7739 var q, g; 7740 if (f) 7741 for (; 7742 (q = b.getCommonAncestor(0, 1)) && (g = CKEDITOR.dtd[q.getName()]) && (!g || !g[e]);) q.getName() in CKEDITOR.dtd.span ? b.splitElement(q) : b.checkStartOfBlock() && b.checkEndOfBlock() ? (b.setStartBefore(q), b.collapse(!0), q.remove()) : b.splitBlock(d == CKEDITOR.ENTER_DIV ? 7743 "div" : "p", c.editable()); 7744 b.insertNode(a); 7745 return !0 7746 }, 7747 setData: function(a, b) { 7748 b || (a = this.editor.dataProcessor.toHtml(a)); 7749 this.setHtml(a); 7750 this.fixInitialSelection(); 7751 "unloaded" == this.status && (this.status = "ready"); 7752 this.editor.fire("dataReady") 7753 }, 7754 getData: function(a) { 7755 var b = this.getHtml(); 7756 a || (b = this.editor.dataProcessor.toDataFormat(b)); 7757 return b 7758 }, 7759 setReadOnly: function(a) { 7760 this.setAttribute("contenteditable", !a) 7761 }, 7762 detach: function() { 7763 this.removeClass("cke_editable"); 7764 this.status = "detached"; 7765 var a = this.editor; 7766 this._.detach(); 7767 delete a.document; 7768 delete a.window 7769 }, 7770 isInline: function() { 7771 return this.getDocument().equals(CKEDITOR.document) 7772 }, 7773 fixInitialSelection: function() { 7774 function a() { 7775 var b = c.getDocument().$, 7776 d = b.getSelection(), 7777 e; 7778 a: if (d.anchorNode && d.anchorNode == c.$) e = !0; 7779 else { 7780 if (CKEDITOR.env.webkit && (e = c.getDocument().getActive()) && e.equals(c) && !d.anchorNode) { 7781 e = !0; 7782 break a 7783 } 7784 e = void 0 7785 } e && (e = new CKEDITOR.dom.range(c), e.moveToElementEditStart(c), b = b.createRange(), b.setStart(e.startContainer.$, e.startOffset), b.collapse(!0), d.removeAllRanges(), 7786 d.addRange(b)) 7787 } 7788 7789 function b() { 7790 var a = c.getDocument().$, 7791 d = a.selection, 7792 e = c.getDocument().getActive(); 7793 "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()) 7794 } 7795 var c = this; 7796 if (CKEDITOR.env.ie && (9 > CKEDITOR.env.version || CKEDITOR.env.quirks)) this.hasFocus && (this.focus(), b()); 7797 else if (this.hasFocus) this.focus(), a(); 7798 else this.once("focus", 7799 function() { 7800 a() 7801 }, null, null, -999) 7802 }, 7803 getHtmlFromRange: function(a) { 7804 if (a.collapsed) return new CKEDITOR.dom.documentFragment(a.document); 7805 a = { 7806 doc: this.getDocument(), 7807 range: a.clone() 7808 }; 7809 u.eol.detect(a, this); 7810 u.bogus.exclude(a); 7811 u.cell.shrink(a); 7812 a.fragment = a.range.cloneContents(); 7813 u.tree.rebuild(a, this); 7814 u.eol.fix(a, this); 7815 return new CKEDITOR.dom.documentFragment(a.fragment.$) 7816 }, 7817 extractHtmlFromRange: function(a, b) { 7818 var c = K, 7819 d = { 7820 range: a, 7821 doc: a.document 7822 }, 7823 e = this.getHtmlFromRange(a); 7824 if (a.collapsed) return a.optimize(), e; 7825 a.enlarge(CKEDITOR.ENLARGE_INLINE, 7826 1); 7827 c.table.detectPurge(d); 7828 d.bookmark = a.createBookmark(); 7829 delete d.range; 7830 var f = this.editor.createRange(); 7831 f.moveToPosition(d.bookmark.startNode, CKEDITOR.POSITION_BEFORE_START); 7832 d.targetBookmark = f.createBookmark(); 7833 c.list.detectMerge(d, this); 7834 c.table.detectRanges(d, this); 7835 c.block.detectMerge(d, this); 7836 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))); 7837 a.moveToBookmark(d.targetBookmark); 7838 a.optimize(); 7839 c.fixUneditableRangePosition(a); 7840 c.list.merge(d, this); 7841 c.table.purge(d, this); 7842 c.block.merge(d, this); 7843 if (b) { 7844 c = a.startPath(); 7845 if (d = a.checkStartOfBlock() && a.checkEndOfBlock() && c.block && !a.root.equals(c.block)) { 7846 a: { 7847 var d = c.block.getElementsByTag("span"), 7848 f = 0, 7849 q; 7850 if (d) 7851 for (; q = d.getItem(f++);) 7852 if (!y(q)) { 7853 d = !0; 7854 break a 7855 } d = !1 7856 } 7857 d = !d 7858 } 7859 d && (a.moveToPosition(c.block, CKEDITOR.POSITION_BEFORE_START), c.block.remove()) 7860 } else c.autoParagraph(this.editor, a), v(a.startContainer) && a.startContainer.appendBogus(); 7861 a.startContainer.mergeSiblings(); 7862 return e 7863 }, 7864 setup: function() { 7865 var a = this.editor; 7866 this.attachListener(a, "beforeGetData", function() { 7867 var b = this.getData(); 7868 this.is("textarea") || !1 !== a.config.ignoreEmptyParagraph && (b = b.replace(D, function(a, b) { 7869 return b 7870 })); 7871 a.setData(b, null, 1) 7872 }, this); 7873 this.attachListener(a, "getSnapshot", function(a) { 7874 a.data = this.getData(1) 7875 }, this); 7876 this.attachListener(a, "afterSetData", function() { 7877 this.setData(a.getData(1)) 7878 }, this); 7879 this.attachListener(a, "loadSnapshot", function(a) { 7880 this.setData(a.data, 1) 7881 }, this); 7882 this.attachListener(a, 7883 "beforeFocus", 7884 function() { 7885 var b = a.getSelection(); 7886 (b = b && b.getNative()) && "Control" == b.type || this.focus() 7887 }, this); 7888 this.attachListener(a, "insertHtml", function(a) { 7889 this.insertHtml(a.data.dataValue, a.data.mode, a.data.range) 7890 }, this); 7891 this.attachListener(a, "insertElement", function(a) { 7892 this.insertElement(a.data) 7893 }, this); 7894 this.attachListener(a, "insertText", function(a) { 7895 this.insertText(a.data) 7896 }, this); 7897 this.setReadOnly(a.readOnly); 7898 this.attachClass("cke_editable"); 7899 a.elementMode == CKEDITOR.ELEMENT_MODE_INLINE ? this.attachClass("cke_editable_inline") : 7900 a.elementMode != CKEDITOR.ELEMENT_MODE_REPLACE && a.elementMode != CKEDITOR.ELEMENT_MODE_APPENDTO || this.attachClass("cke_editable_themed"); 7901 this.attachClass("cke_contents_" + a.config.contentsLangDirection); 7902 a.keystrokeHandler.blockedKeystrokes[8] = +a.readOnly; 7903 a.keystrokeHandler.attach(this); 7904 this.on("blur", function() { 7905 this.hasFocus = !1 7906 }, null, null, -1); 7907 this.on("focus", function() { 7908 this.hasFocus = !0 7909 }, null, null, -1); 7910 if (CKEDITOR.env.webkit) this.on("scroll", function() { 7911 a._.previousScrollTop = a.editable().$.scrollTop 7912 }, null, 7913 null, -1); 7914 if (CKEDITOR.env.edge && 14 < CKEDITOR.env.version) { 7915 var d = function() { 7916 var b = a.editable(); 7917 null != a._.previousScrollTop && b.getDocument().equals(CKEDITOR.document) && (b.$.scrollTop = a._.previousScrollTop, a._.previousScrollTop = null, this.removeListener("scroll", d)) 7918 }; 7919 this.on("scroll", d) 7920 } 7921 a.focusManager.add(this); 7922 this.equals(CKEDITOR.document.getActive()) && (this.hasFocus = !0, a.once("contentDom", function() { 7923 a.focusManager.focus(this) 7924 }, this)); 7925 this.isInline() && this.changeAttr("tabindex", a.tabIndex); 7926 if (!this.is("textarea")) { 7927 a.document = 7928 this.getDocument(); 7929 a.window = this.getWindow(); 7930 var f = a.document; 7931 this.changeAttr("spellcheck", !a.config.disableNativeSpellChecker); 7932 var g = a.config.contentsLangDirection; 7933 this.getDirection(1) != g && this.changeAttr("dir", g); 7934 var k = CKEDITOR.getCss(); 7935 if (k) { 7936 var g = f.getHead(), 7937 m = g.getCustomData("stylesheet"); 7938 m ? k != m.getText() && (CKEDITOR.env.ie && 9 > CKEDITOR.env.version ? m.$.styleSheet.cssText = k : m.setText(k)) : (k = f.appendStyleText(k), k = new