{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///indico/web/client/js/jquery/ckeditor.js","webpack:///node_modules/ckeditor/dev/builder/release/ckeditor/ckeditor.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","calculator","lengthTrimmed","pixelRegex","trimRegex","last","test","cssFloat","functions","cssVendorPrefix","ampRegex","gtRegex","ltRegex","quoteRegex","tokenCharset","TOKEN_COOKIE_NAME","allEscRegex","namedEntities","allEscDecode","getNativeListener","domObjectProto","customData","cancel","onKeyDown","onKeyPress","uniqueScripts","waitingList","attribsRegex","emptyAttribs","sortAttribs","fragProto","rePlaceholder","tpls","styles","colorBrightness","templates","commandName","panels","win","pixelate","horizontalruleCmd","pluginName","pasteTextCmd","commandDefinition","showBorderClassName","setIcons","window","CKEDITOR","dom","basePathSrcPattern","timestamp","version","revision","rnd","Math","floor","random","_","pending","status","basePath","path","CKEDITOR_BASEPATH","scripts","document","getElementsByTagName","length","match","src","indexOf","slice","location","href","getUrl","resource","this","charAt","domReady","callbacks","onReady","addEventListener","removeEventListener","executeCallbacks","attachEvent","readyState","detachEvent","er","shift","fn","push","setTimeout","toplevel","frameElement","e","documentElement","doScroll","scrollCheck","newGetUrl","CKEDITOR_GETURL","originalGetUrl","event","implementOn","targetObject","eventProto","prop","stopped","stopEvent","canceled","cancelEvent","getPrivate","obj","events","eventEntry","eventName","listeners","getEntry","getListenerIndex","listenerFunction","define","meta","entry","tools","extend","on","scopeObj","listenerData","priority","listenerFirer","editor","publisherData","stopFn","cancelFn","ev","sender","data","stop","removeListener","me","isNaN","splice","unshift","once","args","Array","arguments","evt","apply","capture","useCapture","retval","fire","previousStopped","previousCancelled","retData","errorProof","ret","fireOnce","index","removeAllListeners","hasListeners","instanceReady","loaded","env","agent","navigator","userAgent","toLowerCase","edge","trident","ie","webkit","air","mac","quirks","compatMode","documentMode","mobile","iOS","isCustomDomain","domain","hostname","secure","protocol","gecko","product","chrome","safari","parseFloat","ie9Compat","ie8Compat","ie7Compat","ie6Compat","geckoRelease","split","isCompatible","hidpi","devicePixelRatio","needsBrFiller","needsNbspFiller","cssClass","loadFullCore","script","createElement","type","appendChild","_load","loadFullCoreTimeout","add","VERBOSITY_WARN","VERBOSITY_ERROR","verbosity","warn","errorCode","additionalData","error","console","log","prefix","errorCodeLabel","lt","gt","amp","quot","nbsp","shy","code","String","fromCharCode","parseInt","arrayCompare","arrayA","arrayB","getIndex","arr","compareFunction","clone","Number","Boolean","Date","RegExp","nodeType","propertyName","constructor","capitalize","str","keepCase","toUpperCase","target","overwrite","propertiesList","argsLength","source","prototypedCopy","copy","isArray","toString","isEmpty","asString","cssStyleToDomStyle","style","styleFloat","cssName","replace","substr","buildStyleHtml","css","concat","item","join","htmlEncode","text","htmlDecode","htmlEncodeAttr","htmlDecodeAttr","transformPlainTextToHtml","enterMode","isEnterBrMode","ENTER_BR","html","paragraphTag","ENTER_P","duoLF","openTag","endTag","repeat","before","getNextNumber","getNextId","getUniqueId","uuid","substring","override","originalFunction","functionBuilder","newFn","func","milliseconds","scope","ownerWindow","trim","ltrim","rtrim","array","len","search","createClass","definition","$","baseClass","base","privates","proto","statics","originalConstructor","privateName","priv","baseProto","callee","addFunction","removeFunction","ref","callFunction","cssLength","convertToPx","element","createFromHtml","getBody","append","setStyle","clientWidth","times","tryThese","returnValue","lambda","genKey","defer","self","normalizeCssText","styleText","nativeNormalize","props","parsedProps","parseCssText","sort","convertRgbToHex","red","green","blue","color","normalizeHex","hexColor","hexColorPart","separator","normalizedHexColor","parts","normalize","setAttribute","getAttribute","writeCssText","stylesArr","objectCompare","left","right","onlyLeft","objectKeys","keys","convertArrayToObject","fillWith","fixDomain","parent","eventsBuffer","minInterval","output","scheduled","lastOutput","triggerOutput","getTime","input","diff","reset","clearTimeout","enableHtml5Elements","doc","withAppend","el","els","checkIfAnyArrayItemMatches","regexp","checkIfAnyObjectPropertyMatches","keystrokeToString","lang","keystroke","special","isMac","display","aria","CTRL","ALT","SHIFT","transparentImageData","getCookie","pair","cookie","decodeURIComponent","setCookie","encodeURIComponent","getCsrfToken","token","randValues","result","crypto","getRandomValues","Uint8Array","j","character","generateToken","escapeCss","selector","CSS","escape","getMouseButton","evtData","domEvent","button","MOUSE_BUTTON_MIDDLE","MOUSE_BUTTON_LEFT","MOUSE_BUTTON_RIGHT","parse","_colors","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blueviolet","brown","burlywood","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","mistyrose","moccasin","navajowhite","navy","oldlace","olive","olivedrab","orange","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","plum","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","salmon","sandybrown","seagreen","seashell","sienna","silver","skyblue","slateblue","slategray","slategrey","snow","springgreen","steelblue","tan","teal","thistle","tomato","turquoise","violet","wheat","white","whitesmoke","yellow","yellowgreen","_borderStyle","_widthRegExp","_rgbaRegExp","_hslaRegExp","background","colors","_findColor","forEach","colorToken","unprocessed","margin","widths","mapStyles","map","top","bottom","border","val","parseColor","width","arrayTools","filter","colorEntry","thisArg","reduce","initial","acc","findKey","dtd","X","Y","removed","substracted","P","F","FO","address","article","aside","blockquote","details","div","dl","fieldset","figure","footer","form","h1","h2","h3","h4","h5","h6","header","hgroup","hr","main","menu","nav","ol","pre","section","table","ul","M","command","link","noscript","E","T","DFO","center","dir","noframes","a","abbr","area","audio","b","bdi","bdo","br","canvas","cite","datalist","del","dfn","em","embed","iframe","img","ins","kbd","keygen","label","mark","meter","progress","q","ruby","samp","select","small","span","strong","sub","sup","textarea","time","u","video","wbr","acronym","applet","basefont","big","font","isindex","strike","tt","track","body","caption","col","colgroup","option","dd","summary","dt","legend","figcaption","head","title","li","param","optgroup","rp","rt","thead","tfoot","tbody","tr","td","th","dialog","$block","$blockLimit","$cdata","$editable","$empty","$inline","$list","$listItem","$nonBodyContent","$nonEditable","$object","$removeEmpty","$tabIndex","$tableContent","$transparent","$intermediate","getKey","keyCode","which","getKeystroke","ctrlKey","metaKey","shiftKey","altKey","preventDefault","stopPropagation","cancelBubble","getTarget","rawNode","srcElement","node","getPhase","eventPhase","getPageOffset","getDocument","x","pageX","clientX","scrollLeft","y","pageY","clientY","scrollTop","EVENT_PHASE_CAPTURING","EVENT_PHASE_AT_TARGET","EVENT_PHASE_BUBBLING","domObject","nativeDomObject","getCustomData","setCustomData","nativeListeners","listener","equals","expandoNumber","dataSlot","removeCustomData","hadKey","clearCustomData","domNode","NODE_DOCUMENT","NODE_ELEMENT","NODE_TEXT","NODE_COMMENT","NODE_DOCUMENT_FRAGMENT","POSITION_IDENTICAL","POSITION_DISCONNECTED","POSITION_FOLLOWING","POSITION_PRECEDING","POSITION_IS_CONTAINED","POSITION_CONTAINS","appendTo","toStart","includeChildren","cloneId","$clone","cloneNode","removeIds","removeAttribute","childs","childNodes","renameNodes","getName","renameNode","getChildCount","getChild","hasPrevious","previousSibling","hasNext","nextSibling","insertAfter","parentNode","insertBefore","insertBeforeMe","getAddress","normalized","$documentElement","ownerDocument","isNormalizing","current","getAdjacentNonEmptyTextNode","lookForward","sibling","textNode","nodeValue","selection","FILLING_CHAR_SEQUENCE","getNextSourceNode","startFromSibling","guard","guardNode","getFirst","getNext","getParent","getPreviousSourceNode","getLast","getPrevious","evaluator","previous","next","allowFragmentParent","getParents","closerFirst","parents","getCommonAncestor","contains","start","getPosition","otherNode","$other","compareDocumentPosition","sourceIndex","addressOfThis","addressOfOther","minLevel","min","getAscendant","query","includeSelf","isCustomEvaluator","nodeName","hasAscendant","move","remove","preserveChildren","child","firstChild","removeChild","nodeToReplace","trimmed","getText","originalLength","getLength","lastChild","isReadOnly","checkOnlyAttributes","is","isContentEditable","hasAttribute","domWindow","focus","getViewPaneSize","stdMode","height","clientHeight","getScrollPosition","pageXOffset","pageYOffset","getFrame","domDocument","appendStyleSheet","cssFileUrl","createStyleSheet","setAttributes","rel","getHead","appendStyleText","cssStyleText","styleSheet","cssText","sheet","attribsAndStyles","attributes","setStyles","createText","getWindow","getActive","$active","activeElement","getById","elementId","getElementById","getByAddress","currentIndex","candidate","getElementsByTag","tagName","namespace","nodeList","getDocumentElement","parentWindow","defaultView","write","open","close","find","querySelectorAll","findOne","querySelector","_getHtml5ShivFrag","$frag","createDocumentFragment","nativeList","count","getItem","$node","toArray","nativeEl","getElementsByName","temp","setHtml","setMarker","database","id","markerNames","clearAllMarkers","clearMarkers","removeFromDatabase","names","standard","supportsTextContent","elementsClassList","classList","supportsClassLists","rclass","hasClass","classNames","className","createTmpId","hadId","getContextualizedSelector","addClass","removeClass","appendHtml","moveChildren","appendText","appendBogus","force","bogus","breakParent","range","setStartAfter","setEndAfter","tmpElement","docFrag","extractContents","insertNode","backgroundColor","insertAfterNode","exec","getHtml","innerHTML","getOuterHtml","outerHTML","tmpDiv","getClientRect","rect","getBoundingClientRect","children","getChildren","setText","textContent","tabIndex","attr","getNamedItem","specified","checked","getAttributes","exclude","attrDefs","getComputedStyle","getPropertyValue","currentStyle","getDtd","getTabIndex","innerText","getId","getNameAtt","scopeName","getValue","first","getStyle","isEditable","textCursor","isIdentical","otherElement","thisEl","otherEl","removeAttributes","isEqualNode","isVisible","elementWindow","elementWindowFrame","offsetHeight","offsetWidth","isEmptyInlineRemoveable","hasAttributes","attribute","attrs","attrsNum","execludeAttrs","_moz_dirty","ieHasAttribute","$attr","hide","mergeSiblings","mergeElements","isNext","pendingNodes","innerSibling","inlineOnly","show","visibility","attributesPairs","setValue","removeStyle","removeProperty","components","sides","expandedRules","stylesPairs","setOpacity","opacity","round","unselectable","elements","getPositionedAncestor","getDocumentPosition","refDocument","offsetParent","offsetLeft","offsetTop","clientLeft","clientTop","scrollElement","box","$docElem","needAdjustScrollAndBorders","inDocElem","inBody","scrollRelativeLeft","scrollRelativeTop","scrollRelativeElement","currentWindow","refWindow","iframePosition","scrollIntoView","alignToTop","scrollWidth","scrollHeight","scrollIntoParent","hscroll","isQuirks","scrollBy","screenPos","refWin","pos","outerPos","side","getEditor","previousScrollTop","thisPos","parentPos","eh","ew","ch","cw","setState","state","useAria","TRISTATE_ON","TRISTATE_DISABLED","getFrameDocument","contentWindow","copyAttributes","dest","skipAttributes","attrValue","attrName","newTag","newNode","replaceChild","indices","disableContextMenu","enablesContextMenu","getDirection","useComputed","undefined","optimized","instance","editable","instances","elementMode","ELEMENT_MODE_APPENDTO","removeTmpId","list","found","callback","skipRoot","marginAndPaddingSize","adjustment","setSize","size","isBorderBox","getSize","max","documentFragment","nodeOrDoc","container","iterate","rtl","breakOnFalse","end","collapsed","optimize","startCt","startContainer","endCt","endContainer","startOffset","endOffset","userGuard","getSourceNodeFn","guardLTR","limitLTR","blockerLTR","movingOut","root","guardRTL","limitRTL","blockerRTL","stopGuard","iterateToLast","walker","checkForward","checkBackward","lastForward","lastBackward","blockBoundaryDisplayMatch","block","outOfFlowPositions","absolute","fixed","isBlockBoundary","customNodeNames","blockBoundary","listItemBoundary","bookmark","contentOnly","isReject","isBookmarkNode","isBookmark","whitespaces","isWhitespace","invisible","whitespace","offsetWidth0","nonEmpty","isWhitespaces","isBogus","tailNbspRegex","isTemp","ignored","isIgnored","empty","validEmptyBlocks","validEmptyBlockContainers","hash","filterTextContainers","getBogus","tail","isDocRoot","updateCollapsed","execContentsAction","action","mergeThen","optimizeBookmark","cloneStartNode","cloneEndNode","doNotRemoveStartNode","doNotRemoveEndNode","cloneStartText","cloneEndText","isDelete","isExtract","isClone","doClone","startNode","endNode","nextLevelParent","leftNode","rightNode","startParents","endParents","topStart","topEnd","maxLevel","findMinLevel","maxLevelLeft","maxLevelRight","levelParent","lastConnectedLevel","level","consume","commonLevel","boundariesInEmptyNode","moveToPosition","POSITION_BEFORE_START","POSITION_BEFORE_END","topLeft","moveToBookmark","collapse","mergeAndUpdate","newParent","forceClone","inlineChildReqElements","getCheckStartEndBlockEvalFunction","skipBogus","bookmarkEvaluator","nbspRegExp","editableEval","notIgnoredEval","getNextEditableNode","isPrevious","_setStartContainer","_setEndContainer","cloneContents","deleteContents","createBookmark","serializable","baseId","setEndBefore","POSITION_AFTER_END","createBookmark2","isNotText","normalizeTextNodes","limit","offset","betweenTextNodes","getPrecedingSafeNodeIndex","precedingLength","sum","getLengthOfPrecedingTextNodes","precedingContainer","normalizeFCSeq","fcseq","bmStart","bmEnd","is2","setStart","setEnd","setStartBefore","getBoundaryNodes","childCount","ignoreTextNode","ancestor","setStartAt","setEndAt","ignoreStart","ignoreEnd","nextText","enlarge","unit","excludeBrs","leadingWhitespaceRegex","ENLARGE_INLINE","enlargeInlineOnly","ENLARGE_ELEMENT","startTop","endTop","enlargeable","commonReached","isWhiteSpace","siblingText","commonAncestor","boundary","needsWhiteSpace","getValidEnlargeable","allChildren","onlyWhiteSpaces","walkerRange","ENLARGE_BLOCK_CONTENTS","ENLARGE_LIST_ITEM_CONTENTS","POSITION_AFTER_START","tailBr","notBlockBoundary","inNonEditable","boundaryGuard","checkStartOfBlock","theRange","checkEndOfBlock","shrink","selectContents","options","shrinkOnBlockBoundary","SHRINK_TEXT","moveStart","moveEnd","currentElement","SHRINK_ELEMENT","textStart","textEnd","nextNode","position","moveToRange","selectNodeContents","fixBlock","isStart","blockTag","fixedBlock","splitBlock","startPath","elementPath","endPath","startBlockLimit","blockLimit","endBlockLimit","startBlock","endBlock","isStartOfBlock","isEndOfBlock","splitElement","previousBlock","nextBlock","wasStartOfBlock","wasEndOfBlock","toSplit","removeEmptyBlocksAtEnd","childEval","atEnd","bm","checkBoundaryOfElement","checkType","checkStart","START","elementBoundaryEval","textBefore","textAfter","getPreviousNode","getNextNode","checkReadOnly","checkNodesEditable","anotherEnd","moveToElementEditablePosition","isMoveToEnd","childOnly","moveToClosestEditablePosition","isMoveForward","isElement","positions","moveToElementEditStart","moveToElementEditEnd","getEnclosedNode","isNotBookmarks","isNotWhitespaces","getTouchedStartNode","getTouchedEndNode","getPreviousEditableNode","_getTableElement","tableElements","startTable","endTable","afterCaretNode","startContainerText","isStartText","reference","_find","includeNonEditables","curItem","initialMatches","isStartGood","isEndGood","boundaries","mergeRanges","ranges","rng","lastRange","isContinuation","nodeInBetween","gapRange","END","iterator","forceBrBreak","enlargeBr","enforceRealBlocks","beginWhitespaceRegex","bookmarkGuard","whitespacesGuard","skipGuard","listItemNames","startIterator","touchPre","startAtInnerBoundary","rangeAtInnerBlockBoundary","endAtInnerBoundary","ignoreBookmarkTextEvaluator","lastNode","testRange","lastBlock","docEndMarker","started","getNestedEditableIn","editablesContainer","remainingEditables","editables","isIterableEditable","remaining","startNestedEditableIterator","parentIterator","check","createIterator","activeFilter","nestedEditable","checkEnd","getNextParagraph","isLast","removePreviousBr","removeLastBr","currentNode","closeRange","parentPre","includeNode","continueFromSibling","_getNextSourceNode","splitInfo","rootNode","guardFunction","allowed","uiItems","checkAllowed","editorFocus","refresh","readOnly","context","isContextFor","disable","startDisabled","enable","modes","noCache","checkFeature","wysiwyg","contextSensitive","preserveState","previousState","TRISTATE_OFF","newState","toggleState","ENTER_DIV","config","customConfig","autoUpdateElement","language","defaultLanguage","contentsLangDirection","forceEnterMode","shiftEnterMode","docType","bodyId","bodyClass","fullPage","contentsCss","extraPlugins","removePlugins","protectedSource","baseFloatZIndex","blockedKeystrokes","tagsToCheck","enterModes","DTD","TEST_VALUE","enterModeTags","addAndOptimizeRules","that","newRules","featureName","standardizedRules","optimizedRules","groupName","rule","rulesToOptimize","standardizeRule","rules","elementsRules","genericRules","generic","classes","optimizeRule","optimizeRules","applyAllowedRule","skipRequired","nothingRequired","req","reqs","existing","requiredClasses","hasAllRequiredInHash","requiredStyles","requiredAttributes","hasAllRequired","propertiesOnly","valid","allAttributes","applyAllowedRuleToHash","validAttributes","allStyles","validStyles","allClasses","itemsRule","items","validItems","applyAllowedRuleToArray","validClasses","applyDisallowedRule","noProperties","hadInvalidAttribute","applyDisallowedRuleToHash","hadInvalidStyle","hadInvalidClass","hadInvalid","allDisallowed","applyDisallowedRuleToArray","beforeAddingRule","overrideCustom","disabled","cachedChecks","convertValidatorToHash","validator","delimiter","extractRequired","required","all","unbang","pop","mockHash","optimizeRequiredProperties","requiredProperties","FILTER_SKIP_TREE","editorOrRules","allowedContent","disallowedContent","elementCallbacks","allowedRules","disallowedRules","transformations","cachedTests","allow","extraAllowedContent","disallow","parseRulesString","toAllowedContentRules","styleDef","getDefinition","convertStyleToRules","applyTo","fragment","toHtml","transformOnly","processRetVal","toBeRemoved","protectedRegexs","isModified","filterOpts","doFilter","doTransform","doCallbacks","processElement","comment","protectedFrag","htmlParser","fromHtml","processProtectedElement","parentDtd","toBeChecked","enterTag","removeElement","validateElement","feature","toFeature","requiredContent","addContentForms","forms","preferredForm","transfGroups","getContentFormTransformationGroup","addTransformations","addElementCallback","addFeature","contentTransformations","contentForms","group","optimizeTransformationsGroup","applyTransformations","strictCheck","cacheKey","$1","mockElementFromString","mockElementFromStyle","applyTransformationsGroup","updateAttributes","skipFinalValidation","getAllowedEnterMode","defaultMode","reverse","tag","tags","destroy","validators","validatorsRequired","validatorName","validatorFunction","rulePattern","groupsPatterns","groupNum","parseProperties","properties","populateProperties","styleBackup","classBackup","transformationsTools","unprotectElementsNamesRegexp","protectElementsNamesRegexp","opts","callbacksRetVal","retVal","executeElementCallbacks","transformElement","privObj","genericAllowedRules","genericDisallowedRules","filterElement","origName","validAttrs","origClasses","origStyles","classesArr","internalAttr","updateElement","delim","patterns","regexifyPropertiesWithWildcards","createBr","inlineNode","isBrOrBlock","replaceWith","replaceWithChildren","stripBlockBr","newParentName","checkChildren","shouldAutoP","stripBlock","elementMatchesStyle","styleName","classPattern","cl","def","defAttrs","defStyles","transform","getElementNameForTransformation","getMatchStyleFn","getTransformationFn","toolName","sizeToStyle","lengthToStyle","sizeToAttribute","lengthToAttribute","alignmentToStyle","align","alignmentToAttribute","splitBorderShorthand","listTypeToStyle","splitMarginShorthand","matchesStyle","existingClassesPattern","defClasses","focusManager","hasFocus","currentActive","SLOT_NAME","SLOT_NAME_LISTENERS","blurDelay","timer","locked","currentInstance","blur","ct","lock","unlock","noDelay","delay","doBlur","isCapture","fm","focusEvent","blurEvent","keystrokeHandler","keystrokes","keyCombination","execCommand","from","attach","languages","af","ar","az","bg","bn","bs","ca","cs","cy","da","de","en","eo","es","et","eu","fa","fi","fo","fr","gl","gu","he","hi","hu","it","ja","ka","km","ko","ku","lv","mk","mn","ms","nb","nl","no","oc","pl","pt","ro","ru","si","sk","sl","sq","sr","sv","ug","uk","vi","zh","load","languageCode","detect","loadedCallback","scriptLoader","probeLanguage","userLanguage","locale","scriptUrl","showBusy","isString","scriptCount","completed","failed","doCallback","success","checkLoaded","url","onLoad","waitingInfo","loadScript","onreadystatechange","onload","onerror","queue","loadNext","resourceManager","fileName","registered","externals","Error","getPath","external","getFilePath","file","addExternal","urls","urlsNames","resources","nameList","plugins","originalLoad","initialized","allPlugins","loadPlugins","requiredPlugins","plugin","requires","icons","ic","skin","addIcon","_called","setLang","languageEntries","pluginLangEntries","langEntries","pluginLang","ui","handlers","handler","getCommand","addHandler","space","spaceId","Editor","instanceConfig","ELEMENT_MODE_INLINE","ELEMENT_MODE_REPLACE","isSupportedElement","ELEMENT_MODE_NONE","commands","nameCounter","genEditorName","updateCommands","updateCommandsContext","startupFocus","isEditorReadOnly","blockless","activeEnterMode","validateEnterMode","activeShiftEnterMode","skinName","dataProcessor","htmlDataProcessor","loadPart","configTitle","langCode","getStylesSet","extraRegex","removeRegex","pluginsArray","languageCodes","languageFiles","pluginLangs","requiredBy","langPart","methods","setKeystroke","preloadStylesSet","loadLang","loadSkin","initComponents","onConfigLoaded","loadConfig","loadedConfig","loadConfigLoaded","editorConfig","initConfig","updateCommand","cmd","forceRefresh","updateEditorElement","getData","htmlEncodeOutput","addCommand","_attachToForm","f","onSubmit","submit","originalSubmit","noUpdate","sel","getSelection","getStartElement","createRange","eventData","commandData","async","internal","dataValue","getSnapshot","loadSnapshot","snapshot","setData","fireSnapshot","noSnapshot","setReadOnly","insertHtml","insertText","insertElement","getSelectedHtml","getRanges","docFragment","tableClone","currentRow","currentRowClone","isSelectedCell","cloneCell","getHtmlFromRange","createDocumentFragmentFromRanges","extractSelectedHtml","removeEmptyBlock","extractHtmlFromRange","selectRanges","checkDirty","previousValue","resetDirty","behavior","newKeystrokes","getCommandKeystroke","commandInstance","fakeKeystroke","setActiveFilter","setActiveEnterMode","showNotification","message","alert","htmlPartsRegex","compact","declare","ismap","multiple","nohref","noresize","noshade","nowrap","readonly","selected","onTagOpen","onTagClose","onText","onCDATA","onComment","cdata","nextIndex","tagIndex","lastIndex","attribMatch","attribs","attribsPart","selfClosing","attName","attValue","basicWriter","openTagClose","isSelfClose","closeTag","indent","condition","checkFn","wrapWith","wrapper","getFilterContext","isBlockLike","writeHtml","writer","hasInlineStarted","nonBreakingBlocks","listBlocks","rootDtd","structureFixes","isRemoveEmpty","fragmentHtml","fixingBlock","parser","pendingInline","pendingBRs","inTextarea","inPre","checkPending","newTagName","pendingBRsSent","pendingElement","pendingName","pendingDtd","currentDtd","addElement","sendPendingBRs","removeTailWhitespace","moveCurrent","savedCurrent","checkAutoParagraphing","returnPoint","realName","isOrphan","possiblySibling","tag1","tag2","optionalClose","isUnknown","isOptionalClose","currentName","pendingAdd","newPendingInline","onRoot","filterChildren","filterRoot","childrenFilteredBy","writeChildrenHtml","filterRulesGroup","addNamedRules","rulesGroups","ruleName","rulesGroup","isRuleApplicable","nonEditable","applyToAll","excludeNestedEditable","elementNameRules","attributeNameRules","attributesRules","textRules","commentRules","rootRules","addRules","elementNames","addMany","attributeNames","onElementName","execOnName","onAttributeName","commentText","onElement","onNode","onAttribute","findIndex","currentValue","orgType","orgName","isNode","createBogusAndFillerRules","createFiller","isOutput","blockFilter","fillEmptyBlock","cleanBogus","isEmptyBlockNeedFiller","maybeBogus","atBlockEnd","textBlockTags","blockLikeTags","fillEmptyBlocks","brFilter","getFixBodyTag","autoParagraph","dataFilter","htmlFilter","defaultDataFilterRulesEditableOnly","defaultDataFilterRulesForAll","defaultHtmlFilterRulesEditableOnly","defaultHtmlFilterRulesForAll","fixBodyTag","protectElements","protectedHtml","protectRegexes","store","dataStore","tempRegex","regexes","isComment","tagAttributes","unprotectSource","unprotectRealComments","protectSource","protectTextareaRegex","protectInsecureAttributes","protectPreFormatted","protectSelfClosingRegex","protectSelfClosingElements","protectElementNamesRegex","protectElementsNames","protectElementRegex","protectAttributeRegex","fullAttr","protectAttributeNameRegex","protectElementsRegex","isPre","fixBin","encodedElementsRegex","encoded","unprotectElements","unprotectElementNamesRegex","unprotectElementNames","fixForBody","fixBodyElement","fixEmptyRoot","dontFilter","protectedWhitespaces","toDataFormat","getNodeIndex","tableOrder","protectReadOnly","contenteditable","parentWidth","parentHeight","node1","node2","index1","index2","spellcheck","titleText","unprotectReadyOnly","regex","content","prefixed","cssStyle","arg","populate","originalName","off","newAttrName","attribsArray","sortAttributes","nameCondition","cloneChildren","criteria","recursive","curChild","ctx","changes","template","buffer","fullMatch","dataKey","addTemplate","tpl","params","getTemplate","addCss","getCss","inline","contentsElement","inlineAll","disableAutoInline","replaceClass","createInstance","topHtml","bottomHtml","themedTpl","langDir","voiceLabel","contentId","outerEl","loadTheme","setMode","startupMode","replaceAll","textareas","classRegex","addMode","newMode","currentData","isDirty","previousModeData","unlockSnapshot","previousMode","forceUpdate","resize","isContentHeight","resizeInner","outer","contents","contentsFrame","contentsOuterDelta","resultContentsHeight","resultOuterHeight","outerHeight","contentsHeight","outerWidth","getResizable","forContents","isNotWhitespace","isNotBookmark","emptyParagraphRegexp","insert","fixTableAfterContentsDeletion","fixListAfterContentsDelete","getHtmlFromRangeHelpers","extractHtmlFromRangeHelpers","blockInputClick","isNotEmpty","isNotBubbling","other","toElement","fromElement","relatedTarget","shouldAutoParagraph","pathBlock","pathBlockLimit","autoParagraphTag","afterInsert","pruneEmptyDisjointAncestors","second","isPruneToEnd","commonParent","removableParent","setup","active","previousActive","scrollPos","setActive","isInline","attachListener","clearListeners","restoreAttrs","orgVal","attrChanges","attachClass","cls","changeAttr","insertHtmlIntoRange","intoRange","elementName","isBlock","insertElementIntoRange","insertElementIntoSelection","isSnapshot","fixInitialSelection","detach","fixSelection","$doc","$sel","anchorNode","requiresFix","$range","removeAllRanges","addRange","parentElement","createTextRange","moveToElementText","fixMSSelection","eol","cell","tree","rebuild","fix","helpers","extractedFragment","detectPurge","targetRange","targetBookmark","detectMerge","detectRanges","tableContentsRanges","deleteRanges","detectExtractMerge","fixUneditableRangePosition","merge","purge","potentialBookmarks","hasBookmarks","ignoreEmptyParagraph","lookback","ieSel","getNative","fixScrollOnFocus","disableNativeSpellChecker","stylesElement","ownerNode","owningElement","disableReadonlyStyling","backspaceOrDelete","8","46","isHandled","getSelectedElement","structural","walkerRng","forwardGuard","isWalkOut","getSelectedTableList","control","selectElement","selectedElement","backspace","touched","siblingBlock","bookmarks","createBookmarks","lastElement","selectBookmarks","mergeBlocksCollapsedSelection","mergeBlocksNonCollapsedSelection","refs","isLocked","selectionUpdateNeeded","blockNeedsFiller","isFake","testRng","fixDom","ariaLabel","helpLabel","ariaDescId","desc","checkIfElement","parentName","isFirst","nodes","filterElementInner","childrenCount","childIndex","allowedNames","surroundBySpaces","nodes2","nodesCount","nodeIndex","afterSpace","lastSpaceIndex","getRangePrevious","blockMergedTags","splitOnLineBreak","nodeData","firstBlockAscendant","hasBlockSibling","newContainer","stripSingleBlockTags","inlineButNotBr","mergeCandidates","zombies","marker","mergeAncestorElementsOfSelectionEnds","previousNode","inlineStylesRoot","inlineStylesPeak","prepareRangeToDataInsertion","wrapDataWithInlineStyles","protect","dataWrapper","stripBlockTagIfSingleLine","processDataForInsertion","nodesData","insertionContainer","filteredNodes","bogusNeededBlocks","splittingContainer","dontMoveCaret","separateEndContainer","succeedingNode","precedingNode","maybeBr","maybeBlockData","removeBrsAdjacentToPastedBlocks","extractNodesData","blockSibling","nodesList","firstNotAllowed","lastNotAllowed","lineBreak","insideOfList","isLineBreak","isSingleNonEditableElement","insertDataIntoRange","movedIntoInline","cleanupAfterInsertion","getFixTableSelectionWalker","isMovingOut","fixTableStructure","newElementName","appendToStart","fixEmptyCells","cells","deeperSibling","getFixListSelectionWalker","rangeStart","rangeEnd","prependEolBr","appendEolBr","appended","createEolBr","boundaryNodes","commonPath","tableParent","startList","endList","listParent","rebuildFragment","checkLimit","optimizeBookmarkNode","merged","startBookmark","endBookmark","startElement","createRangeFromBookmark","mergeList","mergeListItems","rangeClone","mergeListBookmark","firstList","secondList","firstListItem","secondListItem","mergeBlockBookmark","purgeTableBookmark","firstBlock","secondBlock","tableEditable","findTableContentsRanges","editableRange","contentsRanges","startCell","endCell","leaving","checkDisjointNodes","checkRemoveCellContents","disallowedPositions","editablesCount","leftRange","rightRange","surroundingRange","common","getNormalizedAncestor","tableSurroundingRange","isSelectingTable","checkSelectionChangeTimer","checkSelectionChangeTimeoutPending","isMSSelection","nextRev","fillingCharSequence","fillingCharSequenceRegExp","isTableSelection","allowPartially","performFakeTableSelection","cache","realSelection","rangeList","SELECTION_TEXT","selectedText","lastRow","getCellsFromElement","cellsArray","getSelectedCells","txt","getTextFromSelectedCells","nativeSel","rev","fakeSelection","checkSelectionChange","realSel","fakeRanges","fakeTable","isTableRange","isFakeTableRange","isHidden","isMenuOpen","isInTable","isSameTable","isValidTableSelection","getType","SELECTION_NONE","currentPath","compare","selectionPreviousPath","sameBlockParent","checkSelectionChangeTimeout","checkSelectionChangeTimeoutExec","mayAbsorbCaret","rangeRequiresFix","ctxRequiresFix","isAtEnd","createFillingCharSequenceNode","removeFillingCharSequenceNode","fillingChar","keepSelection","getRangeAt","fillingCharSeqLength","intersectsNode","anchorOffset","focusNode","focusOffset","createNativeSelectionBookmark","removeFillingCharSequenceString","moveNativeSelectionToBookmark","nbspAware","fakeSelectionDefaultKeystrokeHandlers","leave","leaveLeft","leaveRight","37","38","39","40","clearSelection","restoreSel","lastSel","scroll","mouseDown","outerDoc","saveSel","nativ","isCollapsed","unlockSelection","lockSelection","textRng","startRng","onHover","rngEnd","moveRangeToPoint","setEndPoint","compareEndPoints","onSelectEnd","duplicate","nonEditableAscendant","forceNextSelectionCheck","selectionChange","moveToPoint","ascendant","fake","getOnKeyDownListener","hiddenSelectionContainer","keyEvent","checkNow","forceRealSelection","savedSelection","restore","SELECTION_ELEMENT","rangeParent","rangeCount","commonAncestorContainer","err","styleObjectElements","_removeFillingCharSequenceString","_createFillingCharSequenceNode","ieType","getBoundaryInformation","hasChildNodes","distance","siblings","startIndex","endIndex","nativeRange","boundaryInfo","onlyEditables","newRange","extractEditableRanges","enclosed","getSelectedText","faked","hiddenEl","removeHiddenSelectionContainer","hadHiddenSelectionContainer","fixRangesAfterHiddenSelectionContainer","focused","receiver","enclosedNode","shrinkedNode","getNonEditableFakeSelectionReceiver","tableselection","isSupportedEnvironment","notWhitespaces","nonCells","isStartMarkerAlone","dummySpan","ieRange","createControlRange","ieRangeEnd","clear","between","hideSelection","allowPartialSelection","createBookmarks2","STYLE_BLOCK","STYLE_INLINE","STYLE_OBJECT","blockElements","datagrid","objectElements","semicolonFixRegex","varRegex","notBookmark","nonWhitespaces","getUnstylableParent","unstylable","contentEditable","styleDefinition","variablesValues","customHandlers","replaceVariables","applyStyleOnSelection","checkApplicable","initialEnterMode","applyToRange","applyInlineStyle","applyBlockStyle","applyObjectStyle","removeFromRange","removeInlineStyle","removeBlockStyle","removeObjectStyle","applyToObject","setupElement","checkActive","checkElementRemovable","checkElementMatch","ignoreReadonly","_AC","styleAttribs","styleAtt","getStyleText","_length","getAttributesForComparison","elementAttr","compareCssText","getOverrides","actualAttrValue","buildPreview","att","stylesDef","_ST","stylesText","specialStylesText","styleVal","addCustomHandler","styleClass","assignedTo","posPrecedingIdenticalContained","posFollowingIdenticalContained","checkIfNodeCanBeChildOfStyle","nodeIsNoStyle","nodeIsReadonly","includeReadonly","checkPositionAndRule","checkIfStyleCanBeChildOf","currentParent","isUnknownElement","parentRule","checkIfStartsRange","checkIfTextOrReadonlyOrEmptyElement","nodeA","nodeB","posBitFlags","childRule","collapsedElement","getElement","styleRange","firstNode","firstUnstylable","lastUnstylable","applyStyle","applyStyleOnNestedEditables","includedNode","styleNode","styleHasAttrs","removeList","blockedStyles","blockedAttrs","removeFromInsideElement","alwaysRemoveElement","boundaryElement","removeFromElement","removeOverrides","clonedElement","newElement","breakNodes","breakStart","breakEnd","findNestedEditables","checkIfAllowedInEditable","checkIfAllowedByIterator","replaceBlock","newBlock","removeBlock","duoBrRegex","pres","newBlockIsPre","blockIsPre","isFromPre","preHtml","toPre","preHtmls","blockHtml","newBlockClone","fromPres","charBefore","preContent","preBlock","mergedHtml","mergePre","removeNoAttribsElement","replacement","headBookmark","tailBookmark","m1","m2","keepDataAttrs","overrides","removeEmpty","normalizeProperty","innerElement","innerElements","overrideElement","dontRemove","forceRemove","targetDocument","varName","overrideEl","overrideAttrs","isStyle","string","originalRanges","getNextRange","styleCommand","ext","stylesSet","addStylesSet","loadStylesSet","attachStyleStateChange","styleStateChangeCallbacks","currentState","stylesDefinitions","configStyleSet","stylesCombo_stylesSet","partsStylesSet","styleSetName","externalPath","createComment","pathBlockLimitElements","pathBlockElements","checkHasBlock","otherPath","thisElements","otherElements","excludeRoot","fromTop","direction","createTextNode","splitText","workaround","indexA","indexB","mixins","mergeConsequent","mergeCount","updateDirtyRange","moveToBookmarks","dirtyRange","bookmarkStart","bookmarkEnd","cssLoaded","getConfigPath","getCssPath","part","uas","ua","loadCss","bgsize","getIconStyle","overridePath","overrideOffset","overrideBgsize","icon","getUiColor","uiColor","setUiColor","uiStyle","getStylesheet","chameleon","editorStyleContent","panelStyleContent","uiColorRegexp","updateStylesheets","uiColorMenus","uiColorStylesheetId","styleNodes","styleContent","addRule","showCallback","hc","hcDetect","ua_editor","ua_dialog","channelBrightness","channel","ratio","channels","panel","baseColor","templateStyles","defaultBorder","toolbarElementsBorder","defaultBackground","lightBackground","darkBackground","ckeButtonOn","ckeResizer","ckeColorauto","dialogBody","dialogTab","dialogTabSelected","dialogTabSelectedBorder","elementsPathColor","menubuttonHover","menubuttonIcon","menubuttonIconHover","myHtmlRe","theirHtmlRe","emptyTagRe","initPrivateObject","elementDefinition","initValue","textBuilder","build","textInput","commonBuilder","containerBuilder","childHtmlList","childObjList","childHtml","uiElementBuilders","commonPrototype","isChanged","getInitValue","noChangeEvent","setInitValue","resetInitValue","commonEventProcessors","uiElement","eventProcessors","onChange","domOnChangeRegistered","getInputElement","eventRegex","cleanInnerDefinition","toggleBidiKeyUpHandler","setDirectionMarker","labeledElement","htmlList","contentHtml","labelId","requiredClass","labelLayout","inputId","labelStyle","controlStyle","hboxDefinition","padding","hbox","role","includeLabel","domId","validate","maxLength","maxlength","inputStyle","keyPressedOnMe","getButton","click","bidi","rows","cols","checkbox","myDefinition","radio","inputHtmlList","commonName","inputDefinition","labelDefinition","inputAttributes","inputHtml","keyboardFocusable","getParentEditor","32","outerDefinition","hidefocus","buttons","frameId","fileButton","onClick","getContentElement","myMatch","theirMatch","myHtmlList","theirHtml","oldFocus","isFocusable","oldIsFocusable","legendLabel","setLabel","getLabel","isEnabled","accessKeyUp","accessKeyDown","selectParentTab","getDirectionMarker","inputElement","getDialog","frameDocument","getAction","registerEvents","registerDomEvent","callNumber","formLoadedNumber","unloadNumber","formUnloadNumber","generateFormField","addUIElement","DIALOG_RESIZE_NONE","DIALOG_RESIZE_WIDTH","DIALOG_RESIZE_HEIGHT","DIALOG_RESIZE_BOTH","DIALOG_STATE_IDLE","DIALOG_STATE_BUSY","isTabVisible","tabId","tabs","getPreviousVisibleTab","currentTabId","tabIdList","getNextVisibleTab","clearOrRecoverTextInputValue","isRecover","inputs","handleFieldValidated","isValid","msg","resetField","templateSource","Focusable","focusIndex","currentFocusIndex","13","dialogName","processed","dialogDefinitions","defaultDefinition","defaultDialogDefinition","buttonsOrder","dialog_buttonsOrder","tabsToRemove","definitionObject","themeBuilt","editorId","editorDialogClass","closeTitle","clipboard","preventDefaultDropOnElement","buildDialog","contentSize","accessKeyMap","currentTabIndex","pageCount","lastTab","tabBarMode","focusList","startStyles","removeDialogTabs","removeContents","removeDialogName","onShow","onHide","onOk","onCancel","iterContents","changeFocus","hasTabs","keydownHandler","currentTop","getPageCount","prevKeyCodes","nextId","selectPage","keypressHandler","invalid","dialog_noConfirmCancel","confirm","confirmCancel","dialogElement","setupFocus","dialog_startupFocusTab","onFocus","initialFocus","inner","lastCoords","abstractDialogCoords","magnetDistance","dialog_magnetDistance","margins","mouseMoveHandler","realX","realY","dialogSize","viewPaneSize","screenX","screenY","dx","dy","mouseUpHandler","coverDoc","currentCover","initDragAndDrop","resizable","wrapperWidth","wrapperHeight","viewSize","origin","startSize","dialogCover","mouseDownFn","$event","internalWidth","moved","internalHeight","minWidth","minHeight","layout","resizer","initResizeHandles","page","addPage","lastIndexOf","buttonsHtml","save","isFixed","scrollPosition","currentZIndex","parentDialog","showCover","zIndex","accessKeyDownHandler","accessKeyUpHandler","tab","enableElements","elem","resizeHandler","resizeWithWindow","foreach","contentObj","posX","posY","widget","setupContent","commitContent","commit","unregisterAccessKey","hideCover","cursor","pageHtml","titleHtml","vbox","expand","contentMap","enabledFields","notAllowed","hidden","updateStyle","accessKey","registerAccessKey","tabAccessKeyDown","tabAccessKeyUp","currentPage","hidePage","showPage","pageId","getValueOf","setValueOf","disableButton","enableButton","addFocusable","spinner","spinnerDef","dialogDefinition","exists","getCurrent","isTabEnabled","tabName","cfg","okButton","ok","cancelButton","typeName","builder","resizeCover","recurse","addById","newItem","nextSiblingId","nullIfNotFound","removeById","contentObject","contentDefinition","getContents","addContents","addButton","buttonDefinition","removeButton","covers","backgroundColorStyle","dialog_backgroundCoverColor","backgroundCoverOpacity","dialog_backgroundCoverOpacity","coverKey","coverElement","iframeHtml","resizeFunc","scrollFunc","dialogPos","myScrollHandler","prevScrollHandler","onscroll","notEmptyRegex","integerRegex","numberRegex","htmlLengthRegex","cssLengthRegex","inlineStyleRegex","accessKeyProcessors","ctrl","alt","keyProcessor","keydown","keyup","downFunc","upFunc","nodeNameArg","stylesArg","attributesArg","contentsArg","cke_disabled","attributeClasses","finalClasses","styleStr","org","focusClass","heights","dialogCommand","openDialog","canUndo","VALIDATE_OR","VALIDATE_AND","relation","passed","notEmpty","integer","notEqual","currentTopDialog","coverId","removeCovers","dialogs","storedDialogs","init","availableLangs","a11yhelp","editorHelp","order","addButtonCommand","buttonName","buttonLabel","styleDefiniton","toolbar","bold","fw","italic","underline","subscript","superscript","basicstyles","coreStyles_bold","coreStyles_italic","coreStyles_underline","coreStyles_strike","coreStyles_subscript","coreStyles_superscript","noBlockLeft","bqBlock","commandObject","paragraphs","para","firstBookmark","tmp","denyTags","moveOutNodes","bqParent","bqChild","movedNodes","processedBlockquoteBlocks","firstTime","needEndBr","notificationArea","Area","progressOrDuration","duration","notification","notifications","closed","Notification","_hideAfterTimeout","update","messageElement","progressElement","_getClass","_createProgressElement","_getPercentageProgress","important","_createElement","notificationElement","notificationMessageElement","notificationCloseElement","_hideTimeoutId","notification_duration","_attachListeners","_layout","_removeListeners","_uiBuffer","_changeBuffer","topRect","contentsRect","contentsPos","areaRect","notificationWidth","_notificationWidth","notificationMargin","_notificationMargin","viewRect","bodyPos","leftBase","setLeft","setRight","templateArrow","btnArrowTpl","btnTpl","beforeInit","UI_BUTTON","render","updateState","modeStates","clickFn","shortcut","stateName","execute","keydownFn","onkey","focusFn","onfocus","selLocked","directional","pathDir","iconName","iconOffset","keyboard","ariaDisabled","ariaShortcut","keyboardShortcut","titleJs","hasArrow","arrowHtml","onRender","newLabel","selectedLabel","getState","toolbox","toolbars","focusCommandExecuted","toolbarFocus","getPrivateToolbarGroups","toolbarGroups","groups","endFlag","itemKeystroke","toolbarGroupCycling","rightKeyCode","leftKeyCode","toolbarLocation","groupStarted","pendingSeparator","expanded","toolbarStartupExpanded","toolbarCanCollapse","removeButtons","buildToolbarConfig","lookup","getItemDefinedGroups","toolbarGroup","subGroups","fillGroup","itemName","itemToolbar","populateToolbarConfig","newGroup","getToolbarConfig","toolbarLength","toolbarId","toolbarName","toolbarObj","row","lastToolbarInRow","canGroup","UI_SEPARATOR","addItem","itemObj","collapserFn","collapser","toolboxContainer","contentHeight","previousHeight","minClass","toolbarCollapse","toolbarExpand","keyDownFn","addToolbarGroup","subgroupOf","atStart","firePasteEvents","withBeforePaste","dataTransfer","method","filterContent","preventDefaultSetDropEffectToNone","dropEffect","filterType","filtersFactory","filters","setUpTags","createSemanticContentFilter","plainText","semanticContent","filtersFactoryFactory","forcePasteAsPlainText","pasteFilter","preventBeforePasteEvent","preventPasteEvent","inReadOnly","addButtonsCommands","toolbarOrder","ctxMenuOrder","addMenuItems","addMenuItem","createCutCopyCmd","createPasteCmd","addListeners","onKey","addPasteListenersToEditable","setToolbarStates","contextMenu","addListener","cut","stateFromNamedCommand","paste","mouseupTimeout","isCustomCopyCutSupported","initOnCopyCut","initPasteDataTransfer","mainPasteEvent","pasteDataFromClipboard","preventPasteEventNow","execIECommand","preventBeforePasteEventNow","fixCut","tryToCutCopy","forcedType","pasteNotification","pastedContent","clipboard_notificationDuration","nextPasteType","getClipboardData","enabled","onExec","dummy","getClipboardDataByPastebin","blurListener","bms","pastebin","containerOffset","overflow","isEditingHost","selPastebin","bogusSpan","getClipboardDataDirectly","cacheData","beforePasteNotCanceled","canClipboardApiBeTrusted","pasteState","callbackOrOptions","onPaste","initPasteClipboard","dropTarget","getDropTarget","crossEditorDrop","dragRange","dropRange","sourceEditor","externalDrop","resetDragDataTransfer","fireDragEvent","getContainerChildCount","initDragDataTransfer","dragStartContainerChildCount","dragEndContainerChildCount","isFileApiSupported","types","defaultPrevented","getRangeAtDropPosition","getTransferType","DATA_TRANSFER_INTERNAL","internalDrop","DATA_TRANSFER_CROSS_EDITORS","initDragDrop","latestId","supportedImageTypes","dataObj","getFilesCount","getFile","fileReader","FileReader","readAsDataURL","spaces","startsWithEOL","preSniffing","editable_wrapper","endsWithEOL","trueType","defaultType","clipboard_defaultContentType","transferType","recogniseContentType","repeatParagraphs","repeats","switchEnterMode","htmlifiedTextHtmlification","DATA_TRANSFER_EXTERNAL","isCustomDataTypesSupported","fixSplitNodesAfterDrop","preDragStartContainerChildCount","preDragEndContainerChildCount","dropContainer","handleContainer","dragContainer","preChildCount","dragElement","nodeBefore","nodeAfter","applyFix","isDropRangeAffectedByDragRange","dropOffset","dragBookmark","dropBookmark","isDropRangeAffected","dontUpdate","dropNode","dropEvt","$evt","defaultRange","caretRangeFromPoint","rangeOffset","sucess","pasteHTML","$element","elementFromPoint","nativeDataTransfer","dragData","clipboardData","copyCutData","clipboardIdDataType","metaRegExp","bodyRegExp","fragmentRegExp","files","normalizeType","htmlEnd","filterUnwantedCharacters","targetEditor","getAndSetData","_getImageFromClipboard","typesToCheck","Text","URL","getAsFile","createPanel","showBlock","panelButton","panelDefinition","toolbarRelated","panelBlockDefinition","panelParentElement","floatPanel","addBlock","onOpen","preventOnClose","onClose","onEscape","onBlock","UI_PANELBUTTON","UI_PANEL","isFramed","forceIFrame","blocks","panelTpl","frameTpl","frameDocTpl","getHolderElement","holder","parentDiv","isLoaded","frame","currentBlock","getBlock","blockHolder","blockDefinition","markItem","onMark","markFirstDisplayed","beforeMark","notDisplayed","links","getItems","noCycle","keyAction","getPanel","showBlockParams","reposition","addListBlock","multiSelect","corner","offsetX","offsetY","allowBlur","returnFocus","hideTimeout","positionedAncestor","positionedAncestorPosition","offsetParentId","blurSet","doHide","visible","activeChild","hideChild","panelLoad","autoSize","panelDoc","panelWindow","viewportSize","rectWidth","rectHeight","spaceAfter","spaceBefore","spaceBelow","spaceAbove","scrollParent","activePanel","blockParams","lastFocused","focusReturn","showAsChild","blockName","restoreFocus","isLastInstance","colorbutton","textColorTitle","bgOptions","normalizeBackground","colorButton_normalizeBackground","colorButton_backStyle","bgColorTitle","panelBlock","colorBoxId","panelTitle","colorButton_colors","colorsPerRow","colorButton_colorsPerRow","moreColorsEnabled","colordialog","colorButton_enableMore","total","applyColor","colorStyle","isUnstylable","getColorFromDialog","colorButton_enableAutomatic","auto","colorName","colorCode","colorLabel","more","renderColors","automaticColor","currentColor","finalColor","normalizeColor","selectColor","ele","colorButton_foreStyle","releaseHandlers","bindToDialog","orginal","menu_groups","groupsOrder","menuGroups","menuItems","addMenuGroup","menuItem","definitions","getMenuItem","removeMenuItem","menuItemSource","menuItemTpl","menuArrowTpl","menuShortcutTpl","removeAll","listenerItems","showSubMenu","subMenu","subItemDefs","subItemName","subItem","elementDoc","itemOverFn","showSubTimeout","menu_subMenuDelay","itemOutFn","itemClickFn","itemA","itemB","sortItems","lastGroup","listenerFn","ariaChecked","menuitemcheckbox","menuitemradio","hasSubMenu","arrowLabel","hasPopup","hoverFn","moveOutFn","iconStyle","shortcutHtml","contextmenu","addTarget","nativeContextMenuOnCtrl","isCtrlKeyDown","holdCtrlKey","contentEditableParent","fromFrame","resetOnKeyUp","enableContextMenu","browserContextMenuOnCtrl","idBase","elementsPath","emptyHtml","extra","pathItemTpl","bottomSpaceData","spaceElement","getSpaceElement","elementIndex","elementspath","eleLabel","onClickHanlder","onKeyDownHandler","elementsList","namesList","elementsChain","ignore","iterationLimit","eleTitle","jsTitle","initElementsPath","enter","shiftEnter","enterkey","enterBlock","forceMode","getRange","closestEditable","replaceRangeWithClosestEditableRoot","atBlockStart","blockParent","blockGrandParent","orgDir","dirLoose","needsBlock","enterBr","newBlockDir","headerTagRegex","startBlockTag","htmlbase","buildTable","entities","specialTable","apos","entity","chars","afterInit","getChar","baseEntitiesTable","getEntity","entities_processNumerical","entitiesTable","charCodeAt","selectedEntities","basicEntities","entities_latin","entities_greek","entities_additional","entitiesRegex","baseEntitiesRegex","findCommand","find_highlight","spaceRect","editorRect","spaceHeight","pageScrollX","dockedOffsetX","floatSpaceDockedOffsetX","dockedOffsetY","floatSpaceDockedOffsetY","pinnedOffsetX","floatSpacePinnedOffsetX","pinnedOffsetY","floatSpacePinnedOffsetY","updatePos","floatSpace","changeMode","editorPos","pageOffset","docScrollOffset","alignSide","mid","floatSpacePreferRight","floatSpaceTpl","topId","changeBuffer","uiBuffer","listItem","listGroup","reSingleQuote","listBlock","pendingHtml","pendingList","getClick","marked","toggle","onclick","startGroup","isMarked","unmark","hideGroup","groupTitle","hideItem","showAll","unmarkAll","itemId","onUnmark","UI_RICHCOMBO","richCombo","rcomboTpl","renderHtml","combo","namedPanelCls","textElement","committed","lastState","addRichCombo","addCombo","comboName","styleType","entries","defaultLabel","values","vars","face","previousStyle","matching","startBoundary","endBoundary","cloneSubtreeIntoRange","subtreeStart","font_names","font_defaultLabel","font_style","fontSize","fontSize_sizes","fontSize_defaultLabel","fontSize_style","format","format_tags","stylesCount","currentTag","format_p","format_div","format_pre","format_address","format_h1","format_h2","format_h3","format_h4","format_h5","format_h6","horizontalrule","htmlWriter","forceSimpleAmpersand","indentationChars","dataIndentationChars","selfClosingEnd","lineBreakChars","indentation","setRules","breakBeforeOpen","breakBeforeClose","breakAfterClose","needsSpace","breakAfterOpen","afterCloser","currentRules","getSelectedImage","getImageAlignment","image2","image","setupAlignCommand","image_removeLinkByEmptyURL","setupGenericListeners","states","done","genericDefinition","outdent","dataNode","indentClasses","suffix","marginLeft","marginRight","isIndent","specificDefinition","jobs","relatedGlobal","indentKey","registerCommands","execJob","refreshJob","job","getContext","indentList","listNode","itemsToMove","stopFlag","listParents","indentOffset","startItem","lastItem","listArray","listToArray","baseIndent","listRoot","parentLiElement","newList","arrayToList","pendingLis","followingList","neitherWhitespacesNorBookmark","nearestListBlock","selectedNode","globalHelpers","firstItemInPath","inFirstListItem","indentlist","outdentlist","firstListItemInPath","getAlignment","useComputedState","justifyCommand","justifyClasses","cssClassName","cssClassRegex","onDirChanged","isAllowedTextAlign","isAllowedCssClass","isStylable","justify","replaceCssLength","length1","length2","parts1","parts2","htmlFilterRules","realHtml","realFragment","realElement","realAttrs","createFakeElement","realElementType","isResizable","fakeobjects","unknown","fakeStyle","createFakeParserElement","restoreRealElement","fakeElement","baseStyle","cssWithDir","unlinkCommand","removeAnchorCommand","unlink","anchor","tryRestoreFakeAnchor","removeAnchor","getSelectedLink","compiledProtectionFunction","emailProtection","funcName","getCompiledProtectionFunction","pathFilters","javascriptProtocolRegex","emailRegex","emailSubjectRegex","emailBodyRegex","anchorRegex","urlRegex","selectableTargets","encodedEmailLinkRegex","functionCallProtectedEmailLinkRegex","popupRegex","popupFeaturesRegex","advAttrNames","tabindex","charset","unescapeSingleQuote","escapeSingleQuote","protectEmailAddressAsEncodedString","charCode","encodedChars","protectEmailLinkAsFunction","email","paramName","paramValue","returnMultiple","getEditorAnchors","divarea","imgs","anchors","fakeAnchor","parseLinkAttributes","emailMatch","anchorMatch","urlMatch","protectedAddress","rest","funcArgs","paramVal","paramQuoteRegex","paramsMatch","paramsMatchLength","subjectMatch","bodyMatch","subject","featureMatch","onclickMatch","isFinite","download","advanced","advName","getLinkAttributes","set","linkHref","argList","nameAndDomain","onclickList","featureList","featureLength","showDisplayTextForElement","widgets","linkShowAdvancedTab","linkShowTargetTab","listNodeNames","blockBogus","cleanUpDirection","parentDir","inheritInlineStyles","changeListType","groupObj","listsCreated","selectedListItems","itemNode","newListNode","listIndex","createList","listContents","divBlock","listDir","explicitDirection","contentNode","itemDir","contentBlock","insertAnchor","lastListIndex","oldIndent","boundaryNode","siblingNode","compensateBrs","baseArray","baseIndentLevel","grandparentNode","grandparent","itemChildCount","baseIndex","paragraphMode","indentLevel","currentListItem","paragraphName","itemGrandParent","currDir","listData","cachedBookmark","currentListItemName","listCommand","elementType","mergeChildren","into","refNode","forward","mergeListSiblings","mergeSibling","isTextBlock","joinNextLineToCursor","nextCursor","frag","nextPath","nextLi","nextList","sublist","getSubList","listGroups","rangeIterator","pathElements","pathElementsCount","processedFlag","numberedlist","bulletedlist","isBackspace","isOut","joinWith","nextLine","farthestInlineAscendant","scrollTimeout","checkMouseTimeoutPending","checkMouseTimer","triggerOffset","magicline_triggerOffset","holdDistance","magicline_holdDistance","boxColor","magicline_color","tabuList","magicline_tabuList","triggers","magicline_everywhere","DTD_BLOCK","isRelevant","isHtml","isLine","isFlowBreaker","inInlineMode","hotNode","isPositioned","initLine","updateWindowSize","line","wrap","mouse","updateEditableSize","view","inBetween","hiddenMode","trigger","mouseNear","elementFromMouse","triggerEditable","triggerEdge","triggerExpand","isInTabu","upper","lower","place","checkMouse","env_ie8","accessFocusSpaceCmd","magicline_keystrokePrevious","magicline_keystrokeNext","lastCmdDirection","backdoor","accessFocusSpace","boxTrigger","getAscendantTrigger","getNonEmptyNeighbour","newElementFromHtml","enterElements","EDGE_TOP","WHITE_SPACE","DTD_LISTITEM","DTD_TABLECONTENT","DTD_NONACCESSIBLE","CSS_COMMON","CSS_TRIANGLE","TRIANGLE_HTML","areSiblings","isEmptyTextNode","triggerSetup","look","pointedElement","ignoreBox","forceMouse","lineWrap","getClosestEditableLimit","getMidpoint","updateSize","upperSizeBottom","lowerSizeTop","goBack","isTextNode","iconPath","lineChildren","magicline","looks","any","styleSet","pane","oldLook","accessNode","insertFunction","doSave","doAccess","hotNodeChar","removeOld","neighborSibling","neighbor","isFloated","isTrigger","triggerLook","bottomTrigger","edgeNode","fixedOffset","edgeBottom","edgeChild","isChildBetweenPointerAndEdge","elementSibling","expandEngine","stopCondition","selectCriterion","mouseStep","upperFound","lowerFound","viewPaneHeight","verticalSearch","expandSelector","checkMouseBetweenElements","currentDistance","upperNext","minElement","minElementNext","minDistance","MAX_VALUE","abs","expandFilter","sizePrefixes","ignoreScroll","docPosition","date","paneSize","protectFormStyles","formElement","hijackRecord","hijackNames","namedItem","hijackNode","restoreFormStyles","saveStyles","isInsideEditor","restoreStyles","savedStyles","refreshCursor","one","savedScroll","outerScroll","mainDocument","mainWindow","savedState","$textarea","selectionStart","selectionEnd","scrollTo","editorElements","maximize","minimize","buttonNode","forceFromWord","pastefromword","mswordHtml","pfwEvtData","isOfficeContent","isLazyLoad","cleanWord","filterFilePath","pasteFromWordCleanupFile","loadFilterRules","pasteFromWordPromptCleanup","confirmCleanup","keyInfo","pastetext","pasteKeystroke","removeformat","tagsRegex","removeFormatRegex","removeFormatTags","removeFormatAttributes","pathElement","removeFormatFilters","addRemoveFormatFilter","dragHandler","resizeDir","resizeHorizontal","resize_minWidth","resize_maxWidth","resizeVertical","resize_minHeight","resize_maxHeight","dragEndHandler","resize_dir","resize_enabled","resizerHtml","startupShowBorders","borderField","originalCommit","selectedTable","advTab","classField","originalSetup","sourcearea","outline","sourceAreaTabSize","sourceEditable","onResize","needsFocusHack","wasActive","specialchar","specialChars","stylescombo","stylesList","_name","weight","styleA","styleB","lastType","removeStylesFromSameGroup","counter","blurCommand","focusNext","blurBackCommand","focusPrevious","selectNextCellCommand","backward","resultRange","cellIndex","nextRow","rowIndex","newRow","insertRow","tabTools","enableTabKeyTools","tabSpaces","tabText","ignoreChildren","indexToUse","passedCurrent","enteredCurrent","elected","electedTabIndex","elementTabIndex","curTabIndex","dialogadvtab","parsedStyle","styleData","cellspacing","createDef","tabledelete","deleteTable","cellNodeRegex","moveOutOfCellGuard","nearestCell","selectionOrCells","firstCell","startRow","startRowIndex","lastCell","endRowIndex","rowSpan","endRow","buildTableMap","cloneRow","colSpan","getCellColIndex","rowCells","colIndex","mapCell","getColumnsIndices","Infinity","insertColumn","originalCell","startCol","lastCol","cloneCol","nextCol","addedCells","nextCell","insertCell","newCell","deleteCells","selectionOrCell","cellsToDelete","cellToFocus","focusedCell","getFocusElementAfterDelCells","placeCursorInCell","trimCell","placeAtEnd","docInner","docOuter","cellInRow","tableMap","oRow","mergeCells","mergeDirection","isDetect","mapHeight","mapWidth","startColumn","targetCell","rowspan","colspan","lastRowIndex","totalRowSpan","totalColSpan","dimension","cellFirstChild","trs","tailTr","horizontalSplitCell","newRowSpan","newCellRowSpan","newRowIndex","ceil","candidateCell","newCellTr","newCellRow","cellsInSameRow","verticalSplitCell","newColSpan","newCellColSpan","cellsInSameCol","oCol","cellInCol","tabletools","styleParse","addCmd","valign","cursorPosition","deleteRows","selectionOrRow","rowsToDelete","mapRow","cellRowIndex","nextMapRow","endNodeName","processSelection","startColIndex","endColIndex","deleteColumns","tablecell","tablecell_insertBefore","tablecell_insertAfter","tablecell_delete","tablecell_merge","tablecell_merge_right","tablecell_merge_down","tablecell_split_vertical","tablecell_split_horizontal","tablecell_properties","deleteCell","mergeRight","mergeDown","splitHorizontal","splitVertical","tablerow","tablerow_insertBefore","tablerow_insertAfter","tablerow_delete","deleteRow","tablecolumn","column","tablecolumn_insertBefore","tablecolumn_insertAfter","tablecolumn_delete","deleteColumn","aRows","aMap","oCell","iColSpan","iRowSpan","rs","undoManager","UndoManager","editingHandler","NativeEditingHandler","undoCommand","undo","redoCommand","redo","recordCommand","toggleUndoManager","undoable","redoable","attachListeners","resetUndo","currentImage","strokesRecorded","previousKeyGroup","undoStackSize","strokesLimit","strokesPerSnapshotExceeded","keyGroup","getKeyGroup","typing","hasUndo","hasRedo","keyGroupChanged","snapshots","resetType","refreshState","getNextImage","onContentOnly","autoFireChange","Image","equalsContent","equalsSelection","restoreImage","isUndo","newImage","updateSelection","newSnapshot","lastImage","imageBefore","navigationKeyCodes","36","35","33","34","keyGroups","PRINTABLE","FUNCTIONAL","isNavigationKey","getOppositeKeyGroup","ieFunctionalKeysBug","contentsOnly","protectedAttrs","otherImage","thisContents","otherContents","bookmarksA","bookmarksB","bookmarkA","bookmarkB","ignoreInputEvent","keyEventsStack","KeyEventsStack","lastKeydownImage","onKeydown","cleanUp","onInput","lastInput","increment","getTotalInputs","resetInputs","onKeyup","totalInputs","onNavigationKey","skipContentCompare","ignoreInputEventListener","activateInputEventListener","stack","getLastIndex","nativeEvent","framedWysiwyg","onDomReady","hideFocus","isLoadingData","removeSuperfluousElement","disableObjectResizing","disableNativeTableHandles","blockResizeStart","lastListeningElement","resizeStartListener","objectResizeDisabler","innerHeight","lockRetain","retained","docTitle","isPendingFocus","contentSpace","useOnloadEvent","frameLabel","allowTransparency","addContentsCss","cssPath","curContentsCss","frameLoadedHandler","headExtra","selectors","iframeCssFixes","baseTag","baseHref","xmlDeclaration","contentsLanguage","bootstrapCode","strip"],"mappings":"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","file":"js/ckeditor.fe2ee674.bundle.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/dist/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 1863);\n","// This file is part of Indico.\n// Copyright (C) 2002 - 2021 CERN\n//\n// Indico is free software; you can redistribute it and/or\n// modify it under the terms of the MIT License; see the\n// LICENSE file for more details.\n\nimport 'ckeditor';\n","/*\nCopyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\nFor licensing, see LICENSE.md or http://ckeditor.com/license\n*/\n(function(){if(window.CKEDITOR&&window.CKEDITOR.dom)return;/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview Contains the first and essential part of the {@link CKEDITOR}\n *\t\tobject definition.\n */\n\n// #### Compressed Code\n// Compressed code in ckeditor.js must be be updated on changes in the script.\n// The Closure Compiler online service should be used when updating this manually:\n// http://closure-compiler.appspot.com/\n\n// #### Raw code\n// ATTENTION: read the above \"Compressed Code\" notes when changing this code.\n\nif ( !window.CKEDITOR ) {\n\t/**\n\t * This is the API entry point. The entire CKEditor code runs under this object.\n\t * @class CKEDITOR\n\t * @singleton\n\t */\n\twindow.CKEDITOR = ( function() {\n\t\tvar basePathSrcPattern = /(^|.*[\\\\\\/])ckeditor\\.js(?:\\?.*|;.*)?$/i;\n\n\t\tvar CKEDITOR = {\n\n\t\t\t/**\n\t\t\t * A constant string unique for each release of CKEditor. Its value\n\t\t\t * is used, by default, to build the URL for all resources loaded\n\t\t\t * by the editor code, guaranteeing clean cache results when\n\t\t\t * upgrading.\n\t\t\t *\n\t\t\t * **Note:** There is [a known issue where \"icons.png\" does not include\n\t\t\t * timestamp](http://dev.ckeditor.com/ticket/10685) and might get cached.\n\t\t\t * We are working on having it fixed.\n\t\t\t *\n\t\t\t *\t\talert( CKEDITOR.timestamp ); // e.g. '87dm'\n\t\t\t */\n\t\t\t// The production implementation contains a fixed timestamp, unique\n\t\t\t// for each release and generated by the releaser.\n\t\t\t// (Base 36 value of each component of YYMMDDHH - 4 chars total - e.g. 87bm == 08071122)\n\t\t\ttimestamp: 'HASF',\n\n\t\t\t/**\n\t\t\t * Contains the CKEditor version number.\n\t\t\t *\n\t\t\t *\t\talert( CKEDITOR.version ); // e.g. 'CKEditor 3.4.1'\n\t\t\t */\n\t\t\tversion: '4.7.3',\n\n\t\t\t/**\n\t\t\t * Contains the CKEditor revision number.\n\t\t\t * The revision number is incremented automatically, following each\n\t\t\t * modification to the CKEditor source code.\n\t\t\t *\n\t\t\t *\t\talert( CKEDITOR.revision ); // e.g. '3975'\n\t\t\t */\n\t\t\trevision: 'f8c5851a9',\n\n\t\t\t/**\n\t\t\t * A 3-digit random integer, valid for the entire life of the CKEDITOR object.\n\t\t\t *\n\t\t\t *\t\talert( CKEDITOR.rnd ); // e.g. 319\n\t\t\t *\n\t\t\t * @property {Number}\n\t\t\t */\n\t\t\trnd: Math.floor( Math.random() * ( 999 /*Max*/ - 100 /*Min*/ + 1 ) ) + 100 /*Min*/,\n\n\t\t\t/**\n\t\t\t * Private object used to hold core stuff. It should not be used outside of\n\t\t\t * the API code as properties defined here may change at any time\n\t\t\t * without notice.\n\t\t\t *\n\t\t\t * @private\n\t\t\t */\n\t\t\t_: {\n\t\t\t\tpending: [],\n\t\t\t\tbasePathSrcPattern: basePathSrcPattern\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Indicates the API loading status. The following statuses are available:\n\t\t\t *\n\t\t\t * * **unloaded**: the API is not yet loaded.\n\t\t\t * * **basic_loaded**: the basic API features are available.\n\t\t\t * * **basic_ready**: the basic API is ready to load the full core code.\n\t\t\t * * **loaded**: the API can be fully used.\n\t\t\t *\n\t\t\t * Example:\n\t\t\t *\n\t\t\t *\t\tif ( CKEDITOR.status == 'loaded' ) {\n\t\t\t *\t\t\t// The API can now be fully used.\n\t\t\t *\t\t\tdoSomething();\n\t\t\t *\t\t} else {\n\t\t\t *\t\t\t// Wait for the full core to be loaded and fire its loading.\n\t\t\t *\t\t\tCKEDITOR.on( 'load', doSomething );\n\t\t\t *\t\t\tCKEDITOR.loadFullCore && CKEDITOR.loadFullCore();\n\t\t\t *\t\t}\n\t\t\t */\n\t\t\tstatus: 'unloaded',\n\n\t\t\t/**\n\t\t\t * The full URL for the CKEditor installation directory.\n\t\t\t * It is possible to manually provide the base path by setting a\n\t\t\t * global variable named `CKEDITOR_BASEPATH`. This global variable\n\t\t\t * must be set **before** the editor script loading.\n\t\t\t *\n\t\t\t *\t\talert( CKEDITOR.basePath ); // e.g. 'http://www.example.com/ckeditor/'\n\t\t\t *\n\t\t\t * @property {String}\n\t\t\t */\n\t\t\tbasePath: ( function() {\n\t\t\t\t// Find out the editor directory path, based on its ' );\n\n\t\tthis.$.write( html );\n\t\tthis.$.close();\n\t},\n\n\t/**\n\t * Wrapper for `querySelectorAll`. Returns a list of elements within this document that match\n\t * the specified `selector`.\n\t *\n\t * **Note:** The returned list is not a live collection (like the result of native `querySelectorAll`).\n\t *\n\t * @since 4.3\n\t * @param {String} selector\n\t * @returns {CKEDITOR.dom.nodeList}\n\t */\n\tfind: function( selector ) {\n\t\treturn new CKEDITOR.dom.nodeList( this.$.querySelectorAll( selector ) );\n\t},\n\n\t/**\n\t * Wrapper for `querySelector`. Returns the first element within this document that matches\n\t * the specified `selector`.\n\t *\n\t * @since 4.3\n\t * @param {String} selector\n\t * @returns {CKEDITOR.dom.element}\n\t */\n\tfindOne: function( selector ) {\n\t\tvar el = this.$.querySelector( selector );\n\n\t\treturn el ? new CKEDITOR.dom.element( el ) : null;\n\t},\n\n\t/**\n\t * Internet Explorer 8 only method. It returns a document fragment which has all HTML5 elements enabled.\n\t *\n\t * @since 4.3\n\t * @private\n\t * @returns DocumentFragment\n\t */\n\t_getHtml5ShivFrag: function() {\n\t\tvar $frag = this.getCustomData( 'html5ShivFrag' );\n\n\t\tif ( !$frag ) {\n\t\t\t$frag = this.$.createDocumentFragment();\n\t\t\tCKEDITOR.tools.enableHtml5Elements( $frag, true );\n\t\t\tthis.setCustomData( 'html5ShivFrag', $frag );\n\t\t}\n\n\t\treturn $frag;\n\t}\n} );\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * Represents a list of {@link CKEDITOR.dom.node} objects.\n * It is a wrapper for a native nodes list.\n *\n *\t\tvar nodeList = CKEDITOR.document.getBody().getChildren();\n *\t\talert( nodeList.count() ); // number [0;N]\n *\n * @class\n * @constructor Creates a document class instance.\n * @param {Object} nativeList\n */\nCKEDITOR.dom.nodeList = function( nativeList ) {\n\tthis.$ = nativeList;\n};\n\nCKEDITOR.dom.nodeList.prototype = {\n\t/**\n\t * Gets the count of nodes in this list.\n\t *\n\t * @returns {Number}\n\t */\n\tcount: function() {\n\t\treturn this.$.length;\n\t},\n\n\t/**\n\t * Gets the node from the list.\n\t *\n\t * @returns {CKEDITOR.dom.node}\n\t */\n\tgetItem: function( index ) {\n\t\tif ( index < 0 || index >= this.$.length )\n\t\t\treturn null;\n\n\t\tvar $node = this.$[ index ];\n\t\treturn $node ? new CKEDITOR.dom.node( $node ) : null;\n\t},\n\n\t/**\n\t * Returns a node list as an array.\n\t *\n\t * @returns {CKEDITOR.dom.node[]}\n\t */\n\ttoArray: function() {\n\t\treturn CKEDITOR.tools.array.map( this.$, function( nativeEl ) {\n\t\t\treturn new CKEDITOR.dom.node( nativeEl );\n\t\t} );\n\t}\n};\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview Defines the {@link CKEDITOR.dom.element} class, which\n *\t\trepresents a DOM element.\n */\n\n/**\n * Represents a DOM element.\n *\n *\t\t// Create a new element.\n *\t\tvar element = new CKEDITOR.dom.element( 'span' );\n *\n *\t\t// Create an element based on a native DOM element.\n *\t\tvar element = new CKEDITOR.dom.element( document.getElementById( 'myId' ) );\n *\n * @class\n * @extends CKEDITOR.dom.node\n * @constructor Creates an element class instance.\n * @param {Object/String} element A native DOM element or the element name for\n * new elements.\n * @param {CKEDITOR.dom.document} [ownerDocument] The document that will contain\n * the element in case of element creation.\n */\nCKEDITOR.dom.element = function( element, ownerDocument ) {\n\tif ( typeof element == 'string' )\n\t\telement = ( ownerDocument ? ownerDocument.$ : document ).createElement( element );\n\n\t// Call the base constructor (we must not call CKEDITOR.dom.node).\n\tCKEDITOR.dom.domObject.call( this, element );\n};\n\n// PACKAGER_RENAME( CKEDITOR.dom.element )\n/**\n * The the {@link CKEDITOR.dom.element} representing and element. If the\n * element is a native DOM element, it will be transformed into a valid\n * CKEDITOR.dom.element object.\n *\n *\t\tvar element = new CKEDITOR.dom.element( 'span' );\n *\t\talert( element == CKEDITOR.dom.element.get( element ) ); // true\n *\n *\t\tvar element = document.getElementById( 'myElement' );\n *\t\talert( CKEDITOR.dom.element.get( element ).getName() ); // (e.g.) 'p'\n *\n * @static\n * @param {String/Object} element Element's id or name or native DOM element.\n * @returns {CKEDITOR.dom.element} The transformed element.\n */\nCKEDITOR.dom.element.get = function( element ) {\n\tvar el = typeof element == 'string' ? document.getElementById( element ) || document.getElementsByName( element )[ 0 ] : element;\n\n\treturn el && ( el.$ ? el : new CKEDITOR.dom.element( el ) );\n};\n\nCKEDITOR.dom.element.prototype = new CKEDITOR.dom.node();\n\n/**\n * Creates an instance of the {@link CKEDITOR.dom.element} class based on the\n * HTML representation of an element.\n *\n *\t\tvar element = CKEDITOR.dom.element.createFromHtml( 'My element' );\n *\t\talert( element.getName() ); // 'strong'\n *\n * @static\n * @param {String} html The element HTML. It should define only one element in\n * the \"root\" level. The \"root\" element can have child nodes, but not siblings.\n * @returns {CKEDITOR.dom.element} The element instance.\n */\nCKEDITOR.dom.element.createFromHtml = function( html, ownerDocument ) {\n\tvar temp = new CKEDITOR.dom.element( 'div', ownerDocument );\n\ttemp.setHtml( html );\n\n\t// When returning the node, remove it from its parent to detach it.\n\treturn temp.getFirst().remove();\n};\n\n/**\n * Sets {@link CKEDITOR.dom.element#setCustomData custom data} on an element in a way that it is later\n * possible to {@link #clearAllMarkers clear all data} set on all elements sharing the same database.\n *\n * This mechanism is very useful when processing some portion of DOM. All markers can later be removed\n * by calling the {@link #clearAllMarkers} method, hence markers will not leak to second pass of this algorithm.\n *\n *\t\tvar database = {};\n *\t\tCKEDITOR.dom.element.setMarker( database, element1, 'foo', 'bar' );\n *\t\tCKEDITOR.dom.element.setMarker( database, element2, 'oof', [ 1, 2, 3 ] );\n *\n *\t\telement1.getCustomData( 'foo' ); // 'bar'\n *\t\telement2.getCustomData( 'oof' ); // [ 1, 2, 3 ]\n *\n *\t\tCKEDITOR.dom.element.clearAllMarkers( database );\n *\n *\t\telement1.getCustomData( 'foo' ); // null\n *\n * @static\n * @param {Object} database\n * @param {CKEDITOR.dom.element} element\n * @param {String} name\n * @param {Object} value\n * @returns {CKEDITOR.dom.element} The element.\n */\nCKEDITOR.dom.element.setMarker = function( database, element, name, value ) {\n\tvar id = element.getCustomData( 'list_marker_id' ) || ( element.setCustomData( 'list_marker_id', CKEDITOR.tools.getNextNumber() ).getCustomData( 'list_marker_id' ) ),\n\t\tmarkerNames = element.getCustomData( 'list_marker_names' ) || ( element.setCustomData( 'list_marker_names', {} ).getCustomData( 'list_marker_names' ) );\n\tdatabase[ id ] = element;\n\tmarkerNames[ name ] = 1;\n\n\treturn element.setCustomData( name, value );\n};\n\n/**\n * Removes all markers added using this database. See the {@link #setMarker} method for more information.\n *\n * @param {Object} database\n * @static\n */\nCKEDITOR.dom.element.clearAllMarkers = function( database ) {\n\tfor ( var i in database )\n\t\tCKEDITOR.dom.element.clearMarkers( database, database[ i ], 1 );\n};\n\n/**\n * Removes all markers added to this element and removes it from the database if\n * `removeFromDatabase` was passed. See the {@link #setMarker} method for more information.\n *\n *\t\tvar database = {};\n *\t\tCKEDITOR.dom.element.setMarker( database, element1, 'foo', 'bar' );\n *\t\tCKEDITOR.dom.element.setMarker( database, element2, 'oof', [ 1, 2, 3 ] );\n *\n *\t\telement1.getCustomData( 'foo' ); // 'bar'\n *\t\telement2.getCustomData( 'oof' ); // [ 1, 2, 3 ]\n *\n *\t\tCKEDITOR.dom.element.clearMarkers( database, element1, true );\n *\n *\t\telement1.getCustomData( 'foo' ); // null\n *\t\telement2.getCustomData( 'oof' ); // [ 1, 2, 3 ]\n *\n * @param {Object} database\n * @static\n */\nCKEDITOR.dom.element.clearMarkers = function( database, element, removeFromDatabase ) {\n\tvar names = element.getCustomData( 'list_marker_names' ),\n\t\tid = element.getCustomData( 'list_marker_id' );\n\tfor ( var i in names )\n\t\telement.removeCustomData( i );\n\telement.removeCustomData( 'list_marker_names' );\n\tif ( removeFromDatabase ) {\n\t\telement.removeCustomData( 'list_marker_id' );\n\t\tdelete database[ id ];\n\t}\n};\n\n( function() {\n\tvar elementsClassList = document.createElement( '_' ).classList,\n\t\tsupportsClassLists = typeof elementsClassList !== 'undefined' && String( elementsClassList.add ).match( /\\[Native code\\]/gi ) !== null,\n\t\trclass = /[\\n\\t\\r]/g;\n\n\tfunction hasClass( classNames, className ) {\n\t\t// Source: jQuery.\n\t\treturn ( ' ' + classNames + ' ' ).replace( rclass, ' ' ).indexOf( ' ' + className + ' ' ) > -1;\n\t}\n\n\tCKEDITOR.tools.extend( CKEDITOR.dom.element.prototype, {\n\t\t/**\n\t\t * The node type. This is a constant value set to {@link CKEDITOR#NODE_ELEMENT}.\n\t\t *\n\t\t * @readonly\n\t\t * @property {Number} [=CKEDITOR.NODE_ELEMENT]\n\t\t */\n\t\ttype: CKEDITOR.NODE_ELEMENT,\n\n\t\t/**\n\t\t * Adds a CSS class to the element. It appends the class to the\n\t\t * already existing names.\n\t\t *\n\t\t *\t\tvar element = new CKEDITOR.dom.element( 'div' );\n\t\t *\t\telement.addClass( 'classA' ); //
\n\t\t *\t\telement.addClass( 'classB' ); //
\n\t\t *\t\telement.addClass( 'classA' ); //
\n\t\t *\n\t\t * **Note:** Since CKEditor 4.5 this method cannot be used with multiple classes (`'classA classB'`).\n\t\t *\n\t\t * @chainable\n\t\t * @method addClass\n\t\t * @param {String} className The name of the class to be added.\n\t\t */\n\t\taddClass: supportsClassLists ?\n\t\t\tfunction( className ) {\n\t\t\t\tthis.$.classList.add( className );\n\n\t\t\t\treturn this;\n\t\t\t} : function( className ) {\n\t\t\t\tvar c = this.$.className;\n\t\t\t\tif ( c ) {\n\t\t\t\t\tif ( !hasClass( c, className ) )\n\t\t\t\t\t\tc += ' ' + className;\n\t\t\t\t}\n\t\t\t\tthis.$.className = c || className;\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t/**\n\t\t * Removes a CSS class name from the elements classes. Other classes\n\t\t * remain untouched.\n\t\t *\n\t\t *\t\tvar element = new CKEDITOR.dom.element( 'div' );\n\t\t *\t\telement.addClass( 'classA' );\t\t//
\n\t\t *\t\telement.addClass( 'classB' );\t\t//
\n\t\t *\t\telement.removeClass( 'classA' );\t//
\n\t\t *\t\telement.removeClass( 'classB' );\t//
\n\t\t *\n\t\t * @chainable\n\t\t * @method removeClass\n\t\t * @param {String} className The name of the class to remove.\n\t\t */\n\t\tremoveClass: supportsClassLists ?\n\t\t\tfunction( className ) {\n\t\t\t\tvar $ = this.$;\n\t\t\t\t$.classList.remove( className );\n\n\t\t\t\tif ( !$.className )\n\t\t\t\t\t$.removeAttribute( 'class' );\n\n\t\t\t\treturn this;\n\t\t\t} : function( className ) {\n\t\t\t\tvar c = this.getAttribute( 'class' );\n\t\t\t\tif ( c && hasClass( c, className ) ) {\n\t\t\t\t\tc = c\n\t\t\t\t\t\t.replace( new RegExp( '(?:^|\\\\s+)' + className + '(?=\\\\s|$)' ), '' )\n\t\t\t\t\t\t.replace( /^\\s+/, '' );\n\n\t\t\t\t\tif ( c )\n\t\t\t\t\t\tthis.setAttribute( 'class', c );\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.removeAttribute( 'class' );\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t/**\n\t\t * Checks if element has class name.\n\t\t *\n\t\t * @param {String} className\n\t\t * @returns {Boolean}\n\t\t */\n\t\thasClass: function( className ) {\n\t\t\treturn hasClass( this.$.className, className );\n\t\t},\n\n\t\t/**\n\t\t * Append a node as a child of this element.\n\t\t *\n\t\t *\t\tvar p = new CKEDITOR.dom.element( 'p' );\n\t\t *\n\t\t *\t\tvar strong = new CKEDITOR.dom.element( 'strong' );\n\t\t *\t\tp.append( strong );\n\t\t *\n\t\t *\t\tvar em = p.append( 'em' );\n\t\t *\n\t\t *\t\t// Result: '

'\n\t\t *\n\t\t * @param {CKEDITOR.dom.node/String} node The node or element name to be appended.\n\t\t * @param {Boolean} [toStart=false] Indicates that the element is to be appended at the start.\n\t\t * @returns {CKEDITOR.dom.node} The appended node.\n\t\t */\n\t\tappend: function( node, toStart ) {\n\t\t\tif ( typeof node == 'string' )\n\t\t\t\tnode = this.getDocument().createElement( node );\n\n\t\t\tif ( toStart )\n\t\t\t\tthis.$.insertBefore( node.$, this.$.firstChild );\n\t\t\telse\n\t\t\t\tthis.$.appendChild( node.$ );\n\n\t\t\treturn node;\n\t\t},\n\n\t\t/**\n\t\t * Append HTML as a child(ren) of this element.\n\t\t *\n\t\t * @param {String} html\n\t\t */\n\t\tappendHtml: function( html ) {\n\t\t\tif ( !this.$.childNodes.length )\n\t\t\t\tthis.setHtml( html );\n\t\t\telse {\n\t\t\t\tvar temp = new CKEDITOR.dom.element( 'div', this.getDocument() );\n\t\t\t\ttemp.setHtml( html );\n\t\t\t\ttemp.moveChildren( this );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Append text to this element.\n\t\t *\n\t\t *\t\tvar p = new CKEDITOR.dom.element( 'p' );\n\t\t *\t\tp.appendText( 'This is' );\n\t\t *\t\tp.appendText( ' some text' );\n\t\t *\n\t\t *\t\t// Result: '

This is some text

'\n\t\t *\n\t\t * @param {String} text The text to be appended.\n\t\t */\n\t\tappendText: function( text ) {\n\t\t\t// On IE8 it is impossible to append node to script tag, so we use its text.\n\t\t\t// On the contrary, on Safari the text property is unpredictable in links. (http://dev.ckeditor.com/ticket/13232)\n\t\t\tif ( this.$.text != null && CKEDITOR.env.ie && CKEDITOR.env.version < 9 )\n\t\t\t\tthis.$.text += text;\n\t\t\telse\n\t\t\t\tthis.append( new CKEDITOR.dom.text( text ) );\n\t\t},\n\n\t\t/**\n\t\t * Appends a `
` filler element to this element if the filler is not present already.\n\t\t * By default filler is appended only if {@link CKEDITOR.env#needsBrFiller} is `true`,\n\t\t * however when `force` is set to `true` filler will be appended regardless of the environment.\n\t\t *\n\t\t * @param {Boolean} [force] Append filler regardless of the environment.\n\t\t */\n\t\tappendBogus: function( force ) {\n\t\t\tif ( !force && !CKEDITOR.env.needsBrFiller )\n\t\t\t\treturn;\n\n\t\t\tvar lastChild = this.getLast();\n\n\t\t\t// Ignore empty/spaces text.\n\t\t\twhile ( lastChild && lastChild.type == CKEDITOR.NODE_TEXT && !CKEDITOR.tools.rtrim( lastChild.getText() ) )\n\t\t\t\tlastChild = lastChild.getPrevious();\n\t\t\tif ( !lastChild || !lastChild.is || !lastChild.is( 'br' ) ) {\n\t\t\t\tvar bogus = this.getDocument().createElement( 'br' );\n\n\t\t\t\tCKEDITOR.env.gecko && bogus.setAttribute( 'type', '_moz' );\n\n\t\t\t\tthis.append( bogus );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Breaks one of the ancestor element in the element position, moving\n\t\t * this element between the broken parts.\n\t\t *\n\t\t *\t\t// Before breaking:\n\t\t *\t\t//\t\tThis is some sample test text\n\t\t *\t\t// If \"element\" is and \"parent\" is :\n\t\t *\t\t//\t\tThis is some sample test text\n\t\t *\t\telement.breakParent( parent );\n\t\t *\n\t\t *\t\t// Before breaking:\n\t\t *\t\t//\t\tThis is some sample test text\n\t\t *\t\t// If \"element\" is and \"parent\" is :\n\t\t *\t\t//\t\tThis is some sample test text\n\t\t *\t\telement.breakParent( parent );\n\t\t *\n\t\t * @param {CKEDITOR.dom.element} parent The anscestor element to get broken.\n\t\t * @param {Boolean} [cloneId=false] Whether to preserve ancestor ID attributes while breaking.\n\t\t */\n\t\tbreakParent: function( parent, cloneId ) {\n\t\t\tvar range = new CKEDITOR.dom.range( this.getDocument() );\n\n\t\t\t// We'll be extracting part of this element, so let's use our\n\t\t\t// range to get the correct piece.\n\t\t\trange.setStartAfter( this );\n\t\t\trange.setEndAfter( parent );\n\n\t\t\t// Extract it.\n\t\t\tvar docFrag = range.extractContents( false, cloneId || false ),\n\t\t\t\ttmpElement,\n\t\t\t\tcurrent;\n\n\t\t\t// Move the element outside the broken element.\n\t\t\trange.insertNode( this.remove() );\n\n\t\t\t// In case of Internet Explorer, we must check if there is no background-color\n\t\t\t// added to the element. In such case, we have to overwrite it to prevent \"switching it off\"\n\t\t\t// by a browser (http://dev.ckeditor.com/ticket/14667).\n\t\t\tif ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) {\n\t\t\t\ttmpElement = new CKEDITOR.dom.element( 'div' );\n\n\t\t\t\twhile ( current = docFrag.getFirst() ) {\n\t\t\t\t\tif ( current.$.style.backgroundColor ) {\n\t\t\t\t\t\t// This is a necessary hack to make sure that IE will track backgroundColor CSS property, see\n\t\t\t\t\t\t// http://dev.ckeditor.com/ticket/14667#comment:8 for more details.\n\t\t\t\t\t\tcurrent.$.style.backgroundColor = current.$.style.backgroundColor;\n\t\t\t\t\t}\n\n\t\t\t\t\ttmpElement.append( current );\n\t\t\t\t}\n\n\t\t\t\t// Re-insert the extracted piece after the element.\n\t\t\t\ttmpElement.insertAfter( this );\n\t\t\t\ttmpElement.remove( true );\n\t\t\t} else {\n\t\t\t\t// Re-insert the extracted piece after the element.\n\t\t\t\tdocFrag.insertAfterNode( this );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Checks if this element contains given node.\n\t\t *\n\t\t * @method\n\t\t * @param {CKEDITOR.dom.node} node\n\t\t * @returns {Boolean}\n\t\t */\n\t\tcontains: !document.compareDocumentPosition ?\n\t\t\tfunction( node ) {\n\t\t\t\tvar $ = this.$;\n\n\t\t\t\treturn node.type != CKEDITOR.NODE_ELEMENT ? $.contains( node.getParent().$ ) : $ != node.$ && $.contains( node.$ );\n\t\t\t} : function( node ) {\n\t\t\t\treturn !!( this.$.compareDocumentPosition( node.$ ) & 16 );\n\t\t\t},\n\n\t\t/**\n\t\t * Moves the selection focus to this element.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.document.getById( 'myTextarea' );\n\t\t *\t\telement.focus();\n\t\t *\n\t\t * @method\n\t\t * @param {Boolean} defer Whether to asynchronously defer the\n\t\t * execution by 100 ms.\n\t\t */\n\t\tfocus: ( function() {\n\t\t\tfunction exec() {\n\t\t\t\t// IE throws error if the element is not visible.\n\t\t\t\ttry {\n\t\t\t\t\tthis.$.focus();\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\treturn function( defer ) {\n\t\t\t\tif ( defer )\n\t\t\t\t\tCKEDITOR.tools.setTimeout( exec, 100, this );\n\t\t\t\telse\n\t\t\t\t\texec.call( this );\n\t\t\t};\n\t\t} )(),\n\n\t\t/**\n\t\t * Gets the inner HTML of this element.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.dom.element.createFromHtml( '
Example
' );\n\t\t *\t\talert( element.getHtml() ); // 'Example'\n\t\t *\n\t\t * @returns {String} The inner HTML of this element.\n\t\t */\n\t\tgetHtml: function() {\n\t\t\tvar retval = this.$.innerHTML;\n\t\t\t// Strip tags in IE. (http://dev.ckeditor.com/ticket/3341).\n\t\t\treturn CKEDITOR.env.ie ? retval.replace( /<\\?[^>]*>/g, '' ) : retval;\n\t\t},\n\n\t\t/**\n\t\t * Gets the outer (inner plus tags) HTML of this element.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.dom.element.createFromHtml( '
Example
' );\n\t\t *\t\talert( element.getOuterHtml() ); // '
Example
'\n\t\t *\n\t\t * @returns {String} The outer HTML of this element.\n\t\t */\n\t\tgetOuterHtml: function() {\n\t\t\tif ( this.$.outerHTML ) {\n\t\t\t\t// IE includes the tag in the outerHTML of\n\t\t\t\t// namespaced element. So, we must strip it here. (http://dev.ckeditor.com/ticket/3341)\n\t\t\t\treturn this.$.outerHTML.replace( /<\\?[^>]*>/, '' );\n\t\t\t}\n\n\t\t\tvar tmpDiv = this.$.ownerDocument.createElement( 'div' );\n\t\t\ttmpDiv.appendChild( this.$.cloneNode( true ) );\n\t\t\treturn tmpDiv.innerHTML;\n\t\t},\n\n\t\t/**\n\t\t * Retrieve the bounding rectangle of the current element, in pixels,\n\t\t * relative to the upper-left corner of the browser's client area.\n\t\t *\n\t\t * @returns {Object} The dimensions of the DOM element including\n\t\t * `left`, `top`, `right`, `bottom`, `width` and `height`.\n\t\t */\n\t\tgetClientRect: function() {\n\t\t\t// http://help.dottoro.com/ljvmcrrn.php\n\t\t\tvar rect = CKEDITOR.tools.extend( {}, this.$.getBoundingClientRect() );\n\n\t\t\t!rect.width && ( rect.width = rect.right - rect.left );\n\t\t\t!rect.height && ( rect.height = rect.bottom - rect.top );\n\n\t\t\treturn rect;\n\t\t},\n\n\t\t/**\n\t\t * Sets the inner HTML of this element.\n\t\t *\n\t\t *\t\tvar p = new CKEDITOR.dom.element( 'p' );\n\t\t *\t\tp.setHtml( 'Inner HTML' );\n\t\t *\n\t\t *\t\t// Result: '

Inner HTML

'\n\t\t *\n\t\t * @method\n\t\t * @param {String} html The HTML to be set for this element.\n\t\t * @returns {String} The inserted HTML.\n\t\t */\n\t\tsetHtml: ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) ?\n\t\t\t// old IEs throws error on HTML manipulation (through the \"innerHTML\" property)\n\t\t\t// on the element which resides in an DTD invalid position, e.g.
\n\t\t\t// fortunately it can be worked around with DOM manipulation.\n\t\t\tfunction( html ) {\n\t\t\t\ttry {\n\t\t\t\t\tvar $ = this.$;\n\n\t\t\t\t\t// Fix the case when setHtml is called on detached element.\n\t\t\t\t\t// HTML5 shiv used for document in which this element was created\n\t\t\t\t\t// won't affect that detached element. So get document fragment with\n\t\t\t\t\t// all HTML5 elements enabled and set innerHTML while this element is appended to it.\n\t\t\t\t\tif ( this.getParent() )\n\t\t\t\t\t\treturn ( $.innerHTML = html );\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar $frag = this.getDocument()._getHtml5ShivFrag();\n\t\t\t\t\t\t$frag.appendChild( $ );\n\t\t\t\t\t\t$.innerHTML = html;\n\t\t\t\t\t\t$frag.removeChild( $ );\n\n\t\t\t\t\t\treturn html;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {\n\t\t\t\t\tthis.$.innerHTML = '';\n\n\t\t\t\t\tvar temp = new CKEDITOR.dom.element( 'body', this.getDocument() );\n\t\t\t\t\ttemp.$.innerHTML = html;\n\n\t\t\t\t\tvar children = temp.getChildren();\n\t\t\t\t\twhile ( children.count() )\n\t\t\t\t\t\tthis.append( children.getItem( 0 ) );\n\n\t\t\t\t\treturn html;\n\t\t\t\t}\n\t\t\t} : function( html ) {\n\t\t\t\treturn ( this.$.innerHTML = html );\n\t\t\t},\n\n\t\t/**\n\t\t * Sets the element contents as plain text.\n\t\t *\n\t\t *\t\tvar element = new CKEDITOR.dom.element( 'div' );\n\t\t *\t\telement.setText( 'A > B & C < D' );\n\t\t *\t\talert( element.innerHTML ); // 'A > B & C < D'\n\t\t *\n\t\t * @param {String} text The text to be set.\n\t\t * @returns {String} The inserted text.\n\t\t */\n\t\tsetText: ( function() {\n\t\t\tvar supportsTextContent = document.createElement( 'p' );\n\t\t\tsupportsTextContent.innerHTML = 'x';\n\t\t\tsupportsTextContent = supportsTextContent.textContent;\n\n\t\t\treturn function( text ) {\n\t\t\t\tthis.$[ supportsTextContent ? 'textContent' : 'innerText' ] = text;\n\t\t\t};\n\t\t} )(),\n\n\t\t/**\n\t\t * Gets the value of an element attribute.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.dom.element.createFromHtml( '' );\n\t\t *\t\talert( element.getAttribute( 'type' ) ); // 'text'\n\t\t *\n\t\t * @method\n\t\t * @param {String} name The attribute name.\n\t\t * @returns {String} The attribute value or null if not defined.\n\t\t */\n\t\tgetAttribute: ( function() {\n\t\t\tvar standard = function( name ) {\n\t\t\t\t\treturn this.$.getAttribute( name, 2 );\n\t\t\t\t};\n\n\t\t\tif ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks ) ) {\n\t\t\t\treturn function( name ) {\n\t\t\t\t\tswitch ( name ) {\n\t\t\t\t\t\tcase 'class':\n\t\t\t\t\t\t\tname = 'className';\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'http-equiv':\n\t\t\t\t\t\t\tname = 'httpEquiv';\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tcase 'name':\n\t\t\t\t\t\t\treturn this.$.name;\n\n\t\t\t\t\t\tcase 'tabindex':\n\t\t\t\t\t\t\tvar tabIndex = standard.call( this, name );\n\n\t\t\t\t\t\t\t// IE returns tabIndex=0 by default for all\n\t\t\t\t\t\t\t// elements. For those elements,\n\t\t\t\t\t\t\t// getAtrribute( 'tabindex', 2 ) returns 32768\n\t\t\t\t\t\t\t// instead. So, we must make this check to give a\n\t\t\t\t\t\t\t// uniform result among all browsers.\n\t\t\t\t\t\t\tif ( tabIndex !== 0 && this.$.tabIndex === 0 )\n\t\t\t\t\t\t\t\ttabIndex = null;\n\n\t\t\t\t\t\t\treturn tabIndex;\n\n\t\t\t\t\t\tcase 'checked':\n\t\t\t\t\t\t\tvar attr = this.$.attributes.getNamedItem( name ),\n\t\t\t\t\t\t\t\tattrValue = attr.specified ? attr.nodeValue // For value given by parser.\n\t\t\t\t\t\t\t\t: this.$.checked; // For value created via DOM interface.\n\n\t\t\t\t\t\t\treturn attrValue ? 'checked' : null;\n\n\t\t\t\t\t\tcase 'hspace':\n\t\t\t\t\t\tcase 'value':\n\t\t\t\t\t\t\treturn this.$[ name ];\n\n\t\t\t\t\t\tcase 'style':\n\t\t\t\t\t\t\t// IE does not return inline styles via getAttribute(). See http://dev.ckeditor.com/ticket/2947.\n\t\t\t\t\t\t\treturn this.$.style.cssText;\n\n\t\t\t\t\t\tcase 'contenteditable':\n\t\t\t\t\t\tcase 'contentEditable':\n\t\t\t\t\t\t\treturn this.$.attributes.getNamedItem( 'contentEditable' ).specified ? this.$.getAttribute( 'contentEditable' ) : null;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn standard.call( this, name );\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn standard;\n\t\t\t}\n\t\t} )(),\n\n\t\t/**\n\t\t * Gets the values of all element attributes.\n\t\t *\n\t\t * @param {Array} exclude The names of attributes to be excluded from the returned object.\n\t\t * @return {Object} An object containing all element attributes with their values.\n\t\t */\n\t\tgetAttributes: function( exclude ) {\n\t\t\tvar attributes = {},\n\t\t\t\tattrDefs = this.$.attributes,\n\t\t\t\ti;\n\n\t\t\texclude = CKEDITOR.tools.isArray( exclude ) ? exclude : [];\n\n\t\t\tfor ( i = 0; i < attrDefs.length; i++ ) {\n\t\t\t\tif ( CKEDITOR.tools.indexOf( exclude, attrDefs[ i ].name ) === -1 ) {\n\t\t\t\t\tattributes[ attrDefs[ i ].name ] = attrDefs[ i ].value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn attributes;\n\t\t},\n\n\t\t/**\n\t\t * Gets the nodes list containing all children of this element.\n\t\t *\n\t\t * @returns {CKEDITOR.dom.nodeList}\n\t\t */\n\t\tgetChildren: function() {\n\t\t\treturn new CKEDITOR.dom.nodeList( this.$.childNodes );\n\t\t},\n\n\t\t/**\n\t\t * Gets the current computed value of one of the element CSS style\n\t\t * properties.\n\t\t *\n\t\t *\t\tvar element = new CKEDITOR.dom.element( 'span' );\n\t\t *\t\talert( element.getComputedStyle( 'display' ) ); // 'inline'\n\t\t *\n\t\t * @method\n\t\t * @param {String} propertyName The style property name.\n\t\t * @returns {String} The property value.\n\t\t */\n\t\tgetComputedStyle: ( document.defaultView && document.defaultView.getComputedStyle ) ?\n\t\t\t\tfunction( propertyName ) {\n\t\t\t\t\tvar style = this.getWindow().$.getComputedStyle( this.$, null );\n\n\t\t\t\t\t// Firefox may return null if we call the above on a hidden iframe. (http://dev.ckeditor.com/ticket/9117)\n\t\t\t\t\treturn style ? style.getPropertyValue( propertyName ) : '';\n\t\t\t\t} : function( propertyName ) {\n\t\t\t\t\treturn this.$.currentStyle[ CKEDITOR.tools.cssStyleToDomStyle( propertyName ) ];\n\t\t\t\t},\n\n\t\t/**\n\t\t * Gets the DTD entries for this element.\n\t\t *\n\t\t * @returns {Object} An object containing the list of elements accepted\n\t\t * by this element.\n\t\t */\n\t\tgetDtd: function() {\n\t\t\tvar dtd = CKEDITOR.dtd[ this.getName() ];\n\n\t\t\tthis.getDtd = function() {\n\t\t\t\treturn dtd;\n\t\t\t};\n\n\t\t\treturn dtd;\n\t\t},\n\n\t\t/**\n\t\t * Gets all this element's descendants having given tag name.\n\t\t *\n\t\t * @method\n\t\t * @param {String} tagName\n\t\t */\n\t\tgetElementsByTag: CKEDITOR.dom.document.prototype.getElementsByTag,\n\n\t\t/**\n\t\t * Gets the computed tabindex for this element.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.document.getById( 'myDiv' );\n\t\t *\t\talert( element.getTabIndex() ); // (e.g.) '-1'\n\t\t *\n\t\t * @method\n\t\t * @returns {Number} The tabindex value.\n\t\t */\n\t\tgetTabIndex: function() {\n\t\t\tvar tabIndex = this.$.tabIndex;\n\n\t\t\t// IE returns tabIndex=0 by default for all elements. In\n\t\t\t// those cases we must check that the element really has\n\t\t\t// the tabindex attribute set to zero, or it is one of\n\t\t\t// those element that should have zero by default.\n\t\t\tif ( tabIndex === 0 && !CKEDITOR.dtd.$tabIndex[ this.getName() ] && parseInt( this.getAttribute( 'tabindex' ), 10 ) !== 0 )\n\t\t\t\treturn -1;\n\n\t\t\treturn tabIndex;\n\t\t},\n\n\t\t/**\n\t\t * Gets the text value of this element.\n\t\t *\n\t\t * Only in IE (which uses innerText), `
` will cause linebreaks,\n\t\t * and sucessive whitespaces (including line breaks) will be reduced to\n\t\t * a single space. This behavior is ok for us, for now. It may change\n\t\t * in the future.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.dom.element.createFromHtml( '
Sample text.
' );\n\t\t *\t\talert( element.getText() ); // 'Sample text.'\n\t\t *\n\t\t * @returns {String} The text value.\n\t\t */\n\t\tgetText: function() {\n\t\t\treturn this.$.textContent || this.$.innerText || '';\n\t\t},\n\n\t\t/**\n\t\t * Gets the window object that contains this element.\n\t\t *\n\t\t * @returns {CKEDITOR.dom.window} The window object.\n\t\t */\n\t\tgetWindow: function() {\n\t\t\treturn this.getDocument().getWindow();\n\t\t},\n\n\t\t/**\n\t\t * Gets the value of the `id` attribute of this element.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.dom.element.createFromHtml( '

' );\n\t\t *\t\talert( element.getId() ); // 'myId'\n\t\t *\n\t\t * @returns {String} The element id, or null if not available.\n\t\t */\n\t\tgetId: function() {\n\t\t\treturn this.$.id || null;\n\t\t},\n\n\t\t/**\n\t\t * Gets the value of the `name` attribute of this element.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.dom.element.createFromHtml( '' );\n\t\t *\t\talert( element.getNameAtt() ); // 'myName'\n\t\t *\n\t\t * @returns {String} The element name, or null if not available.\n\t\t */\n\t\tgetNameAtt: function() {\n\t\t\treturn this.$.name || null;\n\t\t},\n\n\t\t/**\n\t\t * Gets the element name (tag name). The returned name is guaranteed to\n\t\t * be always full lowercased.\n\t\t *\n\t\t *\t\tvar element = new CKEDITOR.dom.element( 'span' );\n\t\t *\t\talert( element.getName() ); // 'span'\n\t\t *\n\t\t * @returns {String} The element name.\n\t\t */\n\t\tgetName: function() {\n\t\t\t// Cache the lowercased name inside a closure.\n\t\t\tvar nodeName = this.$.nodeName.toLowerCase();\n\n\t\t\tif ( CKEDITOR.env.ie && ( document.documentMode <= 8 ) ) {\n\t\t\t\tvar scopeName = this.$.scopeName;\n\t\t\t\tif ( scopeName != 'HTML' )\n\t\t\t\t\tnodeName = scopeName.toLowerCase() + ':' + nodeName;\n\t\t\t}\n\n\t\t\tthis.getName = function() {\n\t\t\t\treturn nodeName;\n\t\t\t};\n\n\t\t\treturn this.getName();\n\t\t},\n\n\t\t/**\n\t\t * Gets the value set to this element. This value is usually available\n\t\t * for form field elements.\n\t\t *\n\t\t * @returns {String} The element value.\n\t\t */\n\t\tgetValue: function() {\n\t\t\treturn this.$.value;\n\t\t},\n\n\t\t/**\n\t\t * Gets the first child node of this element.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.dom.element.createFromHtml( '
Example
' );\n\t\t *\t\tvar first = element.getFirst();\n\t\t *\t\talert( first.getName() ); // 'b'\n\t\t *\n\t\t * @param {Function} evaluator Filtering the result node.\n\t\t * @returns {CKEDITOR.dom.node} The first child node or null if not available.\n\t\t */\n\t\tgetFirst: function( evaluator ) {\n\t\t\tvar first = this.$.firstChild,\n\t\t\t\tretval = first && new CKEDITOR.dom.node( first );\n\t\t\tif ( retval && evaluator && !evaluator( retval ) )\n\t\t\t\tretval = retval.getNext( evaluator );\n\n\t\t\treturn retval;\n\t\t},\n\n\t\t/**\n\t\t * See {@link #getFirst}.\n\t\t *\n\t\t * @param {Function} evaluator Filtering the result node.\n\t\t * @returns {CKEDITOR.dom.node}\n\t\t */\n\t\tgetLast: function( evaluator ) {\n\t\t\tvar last = this.$.lastChild,\n\t\t\t\tretval = last && new CKEDITOR.dom.node( last );\n\t\t\tif ( retval && evaluator && !evaluator( retval ) )\n\t\t\t\tretval = retval.getPrevious( evaluator );\n\n\t\t\treturn retval;\n\t\t},\n\n\t\t/**\n\t\t * Gets CSS style value.\n\t\t *\n\t\t * @param {String} name The CSS property name.\n\t\t * @returns {String} Style value.\n\t\t */\n\t\tgetStyle: function( name ) {\n\t\t\treturn this.$.style[ CKEDITOR.tools.cssStyleToDomStyle( name ) ];\n\t\t},\n\n\t\t/**\n\t\t * Checks if the element name matches the specified criteria.\n\t\t *\n\t\t *\t\tvar element = new CKEDITOR.element( 'span' );\n\t\t *\t\talert( element.is( 'span' ) );\t\t\t// true\n\t\t *\t\talert( element.is( 'p', 'span' ) );\t\t// true\n\t\t *\t\talert( element.is( 'p' ) );\t\t\t\t// false\n\t\t *\t\talert( element.is( 'p', 'div' ) );\t\t// false\n\t\t *\t\talert( element.is( { p:1,span:1 } ) );\t// true\n\t\t *\n\t\t * @param {String.../Object} name One or more names to be checked, or a {@link CKEDITOR.dtd} object.\n\t\t * @returns {Boolean} `true` if the element name matches any of the names.\n\t\t */\n\t\tis: function() {\n\t\t\tvar name = this.getName();\n\n\t\t\t// Check against the specified DTD liternal.\n\t\t\tif ( typeof arguments[ 0 ] == 'object' )\n\t\t\t\treturn !!arguments[ 0 ][ name ];\n\n\t\t\t// Check for tag names\n\t\t\tfor ( var i = 0; i < arguments.length; i++ ) {\n\t\t\t\tif ( arguments[ i ] == name )\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * Decide whether one element is able to receive cursor.\n\t\t *\n\t\t * @param {Boolean} [textCursor=true] Only consider element that could receive text child.\n\t\t */\n\t\tisEditable: function( textCursor ) {\n\t\t\tvar name = this.getName();\n\n\t\t\tif ( this.isReadOnly() || this.getComputedStyle( 'display' ) == 'none' ||\n\t\t\t\tthis.getComputedStyle( 'visibility' ) == 'hidden' ||\n\t\t\t\tCKEDITOR.dtd.$nonEditable[ name ] ||\n\t\t\t\tCKEDITOR.dtd.$empty[ name ] ||\n\t\t\t\t( this.is( 'a' ) &&\n\t\t\t\t\t( this.data( 'cke-saved-name' ) || this.hasAttribute( 'name' ) ) &&\n\t\t\t\t\t!this.getChildCount()\n\t\t\t\t) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( textCursor !== false ) {\n\t\t\t\t// Get the element DTD (defaults to span for unknown elements).\n\t\t\t\tvar dtd = CKEDITOR.dtd[ name ] || CKEDITOR.dtd.span;\n\t\t\t\t// In the DTD # == text node.\n\t\t\t\treturn !!( dtd && dtd[ '#' ] );\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n\t\t * Compare this element's inner html, tag name, attributes, etc. with other one.\n\t\t *\n\t\t * See [W3C's DOM Level 3 spec - node#isEqualNode](http://www.w3.org/TR/DOM-Level-3-Core/core.html#Node3-isEqualNode)\n\t\t * for more details.\n\t\t *\n\t\t * @param {CKEDITOR.dom.element} otherElement Element to compare.\n\t\t * @returns {Boolean}\n\t\t */\n\t\tisIdentical: function( otherElement ) {\n\t\t\t// do shallow clones, but with IDs\n\t\t\tvar thisEl = this.clone( 0, 1 ),\n\t\t\t\totherEl = otherElement.clone( 0, 1 );\n\n\t\t\t// Remove distractions.\n\t\t\tthisEl.removeAttributes( [ '_moz_dirty', 'data-cke-expando', 'data-cke-saved-href', 'data-cke-saved-name' ] );\n\t\t\totherEl.removeAttributes( [ '_moz_dirty', 'data-cke-expando', 'data-cke-saved-href', 'data-cke-saved-name' ] );\n\n\t\t\t// Native comparison available.\n\t\t\tif ( thisEl.$.isEqualNode ) {\n\t\t\t\t// Styles order matters.\n\t\t\t\tthisEl.$.style.cssText = CKEDITOR.tools.normalizeCssText( thisEl.$.style.cssText );\n\t\t\t\totherEl.$.style.cssText = CKEDITOR.tools.normalizeCssText( otherEl.$.style.cssText );\n\t\t\t\treturn thisEl.$.isEqualNode( otherEl.$ );\n\t\t\t} else {\n\t\t\t\tthisEl = thisEl.getOuterHtml();\n\t\t\t\totherEl = otherEl.getOuterHtml();\n\n\t\t\t\t// Fix tiny difference between link href in older IEs.\n\t\t\t\tif ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 && this.is( 'a' ) ) {\n\t\t\t\t\tvar parent = this.getParent();\n\t\t\t\t\tif ( parent.type == CKEDITOR.NODE_ELEMENT ) {\n\t\t\t\t\t\tvar el = parent.clone();\n\t\t\t\t\t\tel.setHtml( thisEl ), thisEl = el.getHtml();\n\t\t\t\t\t\tel.setHtml( otherEl ), otherEl = el.getHtml();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn thisEl == otherEl;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Checks if this element is visible. May not work if the element is\n\t\t * child of an element with visibility set to `hidden`, but works well\n\t\t * on the great majority of cases.\n\t\t *\n\t\t * @returns {Boolean} True if the element is visible.\n\t\t */\n\t\tisVisible: function() {\n\t\t\tvar isVisible = ( this.$.offsetHeight || this.$.offsetWidth ) && this.getComputedStyle( 'visibility' ) != 'hidden',\n\t\t\t\telementWindow, elementWindowFrame;\n\n\t\t\t// Webkit and Opera report non-zero offsetHeight despite that\n\t\t\t// element is inside an invisible iframe. (http://dev.ckeditor.com/ticket/4542)\n\t\t\tif ( isVisible && CKEDITOR.env.webkit ) {\n\t\t\t\telementWindow = this.getWindow();\n\n\t\t\t\tif ( !elementWindow.equals( CKEDITOR.document.getWindow() ) && ( elementWindowFrame = elementWindow.$.frameElement ) )\n\t\t\t\t\tisVisible = new CKEDITOR.dom.element( elementWindowFrame ).isVisible();\n\n\t\t\t}\n\n\t\t\treturn !!isVisible;\n\t\t},\n\n\t\t/**\n\t\t * Whether it's an empty inline elements which has no visual impact when removed.\n\t\t *\n\t\t * @returns {Boolean}\n\t\t */\n\t\tisEmptyInlineRemoveable: function() {\n\t\t\tif ( !CKEDITOR.dtd.$removeEmpty[ this.getName() ] )\n\t\t\t\treturn false;\n\n\t\t\tvar children = this.getChildren();\n\t\t\tfor ( var i = 0, count = children.count(); i < count; i++ ) {\n\t\t\t\tvar child = children.getItem( i );\n\n\t\t\t\tif ( child.type == CKEDITOR.NODE_ELEMENT && child.data( 'cke-bookmark' ) )\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif ( child.type == CKEDITOR.NODE_ELEMENT && !child.isEmptyInlineRemoveable() || child.type == CKEDITOR.NODE_TEXT && CKEDITOR.tools.trim( child.getText() ) )\n\t\t\t\t\treturn false;\n\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n\t\t * Checks if the element has any defined attributes.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.dom.element.createFromHtml( '
Example
' );\n\t\t *\t\talert( element.hasAttributes() ); // true\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.dom.element.createFromHtml( '
Example
' );\n\t\t *\t\talert( element.hasAttributes() ); // false\n\t\t *\n\t\t * @method\n\t\t * @returns {Boolean} True if the element has attributes.\n\t\t */\n\t\thasAttributes: CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks ) ?\n\t\t\tfunction() {\n\t\t\t\tvar attributes = this.$.attributes;\n\n\t\t\t\tfor ( var i = 0; i < attributes.length; i++ ) {\n\t\t\t\t\tvar attribute = attributes[ i ];\n\n\t\t\t\t\tswitch ( attribute.nodeName ) {\n\t\t\t\t\t\tcase 'class':\n\t\t\t\t\t\t\t// IE has a strange bug. If calling removeAttribute('className'),\n\t\t\t\t\t\t\t// the attributes collection will still contain the \"class\"\n\t\t\t\t\t\t\t// attribute, which will be marked as \"specified\", even if the\n\t\t\t\t\t\t\t// outerHTML of the element is not displaying the class attribute.\n\t\t\t\t\t\t\t// Note : I was not able to reproduce it outside the editor,\n\t\t\t\t\t\t\t// but I've faced it while working on the TC of http://dev.ckeditor.com/ticket/1391.\n\t\t\t\t\t\t\tif ( this.getAttribute( 'class' ) ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Attributes to be ignored.\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\t\tcase 'data-cke-expando':\n\t\t\t\t\t\t\tcontinue;\n\n\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif ( attribute.specified ) {\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t} : function() {\n\t\t\t\tvar attrs = this.$.attributes,\n\t\t\t\t\tattrsNum = attrs.length;\n\n\t\t\t\t// The _moz_dirty attribute might get into the element after pasting (http://dev.ckeditor.com/ticket/5455)\n\t\t\t\tvar execludeAttrs = { 'data-cke-expando': 1, _moz_dirty: 1 };\n\n\t\t\t\treturn attrsNum > 0 && ( attrsNum > 2 || !execludeAttrs[ attrs[ 0 ].nodeName ] || ( attrsNum == 2 && !execludeAttrs[ attrs[ 1 ].nodeName ] ) );\n\t\t\t},\n\n\t\t/**\n\t\t * Checks if the specified attribute is defined for this element.\n\t\t *\n\t\t * @method\n\t\t * @param {String} name The attribute name.\n\t\t * @returns {Boolean} `true` if the specified attribute is defined.\n\t\t */\n\t\thasAttribute: ( function() {\n\t\t\tfunction ieHasAttribute( name ) {\n\t\t\t\tvar $attr = this.$.attributes.getNamedItem( name );\n\n\t\t\t\tif ( this.getName() == 'input' ) {\n\t\t\t\t\tswitch ( name ) {\n\t\t\t\t\t\tcase 'class':\n\t\t\t\t\t\t\treturn this.$.className.length > 0;\n\t\t\t\t\t\tcase 'checked':\n\t\t\t\t\t\t\treturn !!this.$.checked;\n\t\t\t\t\t\tcase 'value':\n\t\t\t\t\t\t\tvar type = this.getAttribute( 'type' );\n\t\t\t\t\t\t\treturn type == 'checkbox' || type == 'radio' ? this.$.value != 'on' : !!this.$.value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( !$attr )\n\t\t\t\t\treturn false;\n\n\t\t\t\treturn $attr.specified;\n\t\t\t}\n\n\t\t\tif ( CKEDITOR.env.ie ) {\n\t\t\t\tif ( CKEDITOR.env.version < 8 ) {\n\t\t\t\t\treturn function( name ) {\n\t\t\t\t\t\t// On IE < 8 the name attribute cannot be retrieved\n\t\t\t\t\t\t// right after the element creation and setting the\n\t\t\t\t\t\t// name with setAttribute.\n\t\t\t\t\t\tif ( name == 'name' )\n\t\t\t\t\t\t\treturn !!this.$.name;\n\n\t\t\t\t\t\treturn ieHasAttribute.call( this, name );\n\t\t\t\t\t};\n\t\t\t\t} else {\n\t\t\t\t\treturn ieHasAttribute;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn function( name ) {\n\t\t\t\t\t// On other browsers specified property is deprecated and return always true,\n\t\t\t\t\t// but fortunately $.attributes contains only specified attributes.\n\t\t\t\t\treturn !!this.$.attributes.getNamedItem( name );\n\t\t\t\t};\n\t\t\t}\n\t\t} )(),\n\n\t\t/**\n\t\t * Hides this element (sets `display: none`).\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.document.getById( 'myElement' );\n\t\t *\t\telement.hide();\n\t\t */\n\t\thide: function() {\n\t\t\tthis.setStyle( 'display', 'none' );\n\t\t},\n\n\t\t/**\n\t\t * Moves this element's children to the target element.\n\t\t *\n\t\t * @param {CKEDITOR.dom.element} target\n\t\t * @param {Boolean} [toStart=false] Insert moved children at the\n\t\t * beginning of the target element.\n\t\t */\n\t\tmoveChildren: function( target, toStart ) {\n\t\t\tvar $ = this.$;\n\t\t\ttarget = target.$;\n\n\t\t\tif ( $ == target )\n\t\t\t\treturn;\n\n\t\t\tvar child;\n\n\t\t\tif ( toStart ) {\n\t\t\t\twhile ( ( child = $.lastChild ) )\n\t\t\t\t\ttarget.insertBefore( $.removeChild( child ), target.firstChild );\n\t\t\t} else {\n\t\t\t\twhile ( ( child = $.firstChild ) )\n\t\t\t\t\ttarget.appendChild( $.removeChild( child ) );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Merges sibling elements that are identical to this one.\n\t\t *\n\t\t * Identical child elements are also merged. For example:\n\t\t *\n\t\t *\t\t => \n\t\t *\n\t\t * @method\n\t\t * @param {Boolean} [inlineOnly=true] Allow only inline elements to be merged.\n\t\t */\n\t\tmergeSiblings: ( function() {\n\t\t\tfunction mergeElements( element, sibling, isNext ) {\n\t\t\t\tif ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT ) {\n\t\t\t\t\t// Jumping over bookmark nodes and empty inline elements, e.g. ,\n\t\t\t\t\t// queuing them to be moved later. (http://dev.ckeditor.com/ticket/5567)\n\t\t\t\t\tvar pendingNodes = [];\n\n\t\t\t\t\twhile ( sibling.data( 'cke-bookmark' ) || sibling.isEmptyInlineRemoveable() ) {\n\t\t\t\t\t\tpendingNodes.push( sibling );\n\t\t\t\t\t\tsibling = isNext ? sibling.getNext() : sibling.getPrevious();\n\t\t\t\t\t\tif ( !sibling || sibling.type != CKEDITOR.NODE_ELEMENT )\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( element.isIdentical( sibling ) ) {\n\t\t\t\t\t\t// Save the last child to be checked too, to merge things like\n\t\t\t\t\t\t// => \n\t\t\t\t\t\tvar innerSibling = isNext ? element.getLast() : element.getFirst();\n\n\t\t\t\t\t\t// Move pending nodes first into the target element.\n\t\t\t\t\t\twhile ( pendingNodes.length )\n\t\t\t\t\t\t\tpendingNodes.shift().move( element, !isNext );\n\n\t\t\t\t\t\tsibling.moveChildren( element, !isNext );\n\t\t\t\t\t\tsibling.remove();\n\n\t\t\t\t\t\t// Now check the last inner child (see two comments above).\n\t\t\t\t\t\tif ( innerSibling && innerSibling.type == CKEDITOR.NODE_ELEMENT )\n\t\t\t\t\t\t\tinnerSibling.mergeSiblings();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn function( inlineOnly ) {\n\t\t\t\t// Merge empty links and anchors also. (http://dev.ckeditor.com/ticket/5567)\n\t\t\t\tif ( !( inlineOnly === false || CKEDITOR.dtd.$removeEmpty[ this.getName() ] || this.is( 'a' ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tmergeElements( this, this.getNext(), true );\n\t\t\t\tmergeElements( this, this.getPrevious() );\n\t\t\t};\n\t\t} )(),\n\n\t\t/**\n\t\t * Shows this element (displays it).\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.document.getById( 'myElement' );\n\t\t *\t\telement.show();\n\t\t */\n\t\tshow: function() {\n\t\t\tthis.setStyles( {\n\t\t\t\tdisplay: '',\n\t\t\t\tvisibility: ''\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Sets the value of an element attribute.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.document.getById( 'myElement' );\n\t\t *\t\telement.setAttribute( 'class', 'myClass' );\n\t\t *\t\telement.setAttribute( 'title', 'This is an example' );\n\t\t *\n\t\t * @method\n\t\t * @param {String} name The name of the attribute.\n\t\t * @param {String} value The value to be set to the attribute.\n\t\t * @returns {CKEDITOR.dom.element} This element instance.\n\t\t */\n\t\tsetAttribute: ( function() {\n\t\t\tvar standard = function( name, value ) {\n\t\t\t\t\tthis.$.setAttribute( name, value );\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\n\t\t\tif ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks ) ) {\n\t\t\t\treturn function( name, value ) {\n\t\t\t\t\tif ( name == 'class' )\n\t\t\t\t\t\tthis.$.className = value;\n\t\t\t\t\telse if ( name == 'style' )\n\t\t\t\t\t\tthis.$.style.cssText = value;\n\t\t\t\t\telse if ( name == 'tabindex' ) // Case sensitive.\n\t\t\t\t\tthis.$.tabIndex = value;\n\t\t\t\t\telse if ( name == 'checked' )\n\t\t\t\t\t\tthis.$.checked = value;\n\t\t\t\t\telse if ( name == 'contenteditable' )\n\t\t\t\t\t\tstandard.call( this, 'contentEditable', value );\n\t\t\t\t\telse\n\t\t\t\t\t\tstandard.apply( this, arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\t\t\t} else if ( CKEDITOR.env.ie8Compat && CKEDITOR.env.secure ) {\n\t\t\t\treturn function( name, value ) {\n\t\t\t\t\t// IE8 throws error when setting src attribute to non-ssl value. (http://dev.ckeditor.com/ticket/7847)\n\t\t\t\t\tif ( name == 'src' && value.match( /^http:\\/\\// ) ) {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tstandard.apply( this, arguments );\n\t\t\t\t\t\t} catch ( e ) {}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tstandard.apply( this, arguments );\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn standard;\n\t\t\t}\n\t\t} )(),\n\n\t\t/**\n\t\t * Sets the value of several element attributes.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.document.getById( 'myElement' );\n\t\t *\t\telement.setAttributes( {\n\t\t *\t\t\t'class':\t'myClass',\n\t\t *\t\t\ttitle:\t\t'This is an example'\n\t\t *\t\t} );\n\t\t *\n\t\t * @chainable\n\t\t * @param {Object} attributesPairs An object containing the names and\n\t\t * values of the attributes.\n\t\t * @returns {CKEDITOR.dom.element} This element instance.\n\t\t */\n\t\tsetAttributes: function( attributesPairs ) {\n\t\t\tfor ( var name in attributesPairs )\n\t\t\t\tthis.setAttribute( name, attributesPairs[ name ] );\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Sets the element value. This function is usually used with form\n\t\t * field element.\n\t\t *\n\t\t * @chainable\n\t\t * @param {String} value The element value.\n\t\t * @returns {CKEDITOR.dom.element} This element instance.\n\t\t */\n\t\tsetValue: function( value ) {\n\t\t\tthis.$.value = value;\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Removes an attribute from the element.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.dom.element.createFromHtml( '
' );\n\t\t *\t\telement.removeAttribute( 'class' );\n\t\t *\n\t\t * @method\n\t\t * @param {String} name The attribute name.\n\t\t */\n\t\tremoveAttribute: ( function() {\n\t\t\tvar standard = function( name ) {\n\t\t\t\t\tthis.$.removeAttribute( name );\n\t\t\t\t};\n\n\t\t\tif ( CKEDITOR.env.ie && ( CKEDITOR.env.ie7Compat || CKEDITOR.env.quirks ) ) {\n\t\t\t\treturn function( name ) {\n\t\t\t\t\tif ( name == 'class' )\n\t\t\t\t\t\tname = 'className';\n\t\t\t\t\telse if ( name == 'tabindex' )\n\t\t\t\t\t\tname = 'tabIndex';\n\t\t\t\t\telse if ( name == 'contenteditable' )\n\t\t\t\t\t\tname = 'contentEditable';\n\t\t\t\t\tstandard.call( this, name );\n\t\t\t\t};\n\t\t\t} else {\n\t\t\t\treturn standard;\n\t\t\t}\n\t\t} )(),\n\n\t\t/**\n\t\t * Removes all element's attributes or just given ones.\n\t\t *\n\t\t * @param {Array} [attributes] The array with attributes names.\n\t\t */\n\t\tremoveAttributes: function( attributes ) {\n\t\t\tif ( CKEDITOR.tools.isArray( attributes ) ) {\n\t\t\t\tfor ( var i = 0; i < attributes.length; i++ ) {\n\t\t\t\t\tthis.removeAttribute( attributes[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tattributes = attributes || this.getAttributes();\n\n\t\t\t\tfor ( var attr in attributes ) {\n\t\t\t\t\tattributes.hasOwnProperty( attr ) && this.removeAttribute( attr );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Removes a style from the element.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.dom.element.createFromHtml( '
' );\n\t\t *\t\telement.removeStyle( 'display' );\n\t\t *\n\t\t * @method\n\t\t * @param {String} name The style name.\n\t\t */\n\t\tremoveStyle: function( name ) {\n\t\t\t// Removes the specified property from the current style object.\n\t\t\tvar $ = this.$.style;\n\n\t\t\t// \"removeProperty\" need to be specific on the following styles.\n\t\t\tif ( !$.removeProperty && ( name == 'border' || name == 'margin' || name == 'padding' ) ) {\n\t\t\t\tvar names = expandedRules( name );\n\t\t\t\tfor ( var i = 0 ; i < names.length ; i++ )\n\t\t\t\t\tthis.removeStyle( names[ i ] );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$.removeProperty ? $.removeProperty( name ) : $.removeAttribute( CKEDITOR.tools.cssStyleToDomStyle( name ) );\n\n\t\t\t// Eventually remove empty style attribute.\n\t\t\tif ( !this.$.style.cssText )\n\t\t\t\tthis.removeAttribute( 'style' );\n\t\t},\n\n\t\t/**\n\t\t * Sets the value of an element style.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.document.getById( 'myElement' );\n\t\t *\t\telement.setStyle( 'background-color', '#ff0000' );\n\t\t *\t\telement.setStyle( 'margin-top', '10px' );\n\t\t *\t\telement.setStyle( 'float', 'right' );\n\t\t *\n\t\t * @param {String} name The name of the style. The CSS naming notation\n\t\t * must be used (e.g. `background-color`).\n\t\t * @param {String} value The value to be set to the style.\n\t\t * @returns {CKEDITOR.dom.element} This element instance.\n\t\t */\n\t\tsetStyle: function( name, value ) {\n\t\t\tthis.$.style[ CKEDITOR.tools.cssStyleToDomStyle( name ) ] = value;\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Sets the value of several element styles.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.document.getById( 'myElement' );\n\t\t *\t\telement.setStyles( {\n\t\t *\t\t\tposition:\t'absolute',\n\t\t *\t\t\tfloat:\t\t'right'\n\t\t *\t\t} );\n\t\t *\n\t\t * @param {Object} stylesPairs An object containing the names and\n\t\t * values of the styles.\n\t\t * @returns {CKEDITOR.dom.element} This element instance.\n\t\t */\n\t\tsetStyles: function( stylesPairs ) {\n\t\t\tfor ( var name in stylesPairs )\n\t\t\t\tthis.setStyle( name, stylesPairs[ name ] );\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Sets the opacity of an element.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.document.getById( 'myElement' );\n\t\t *\t\telement.setOpacity( 0.75 );\n\t\t *\n\t\t * @param {Number} opacity A number within the range `[0.0, 1.0]`.\n\t\t */\n\t\tsetOpacity: function( opacity ) {\n\t\t\tif ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) {\n\t\t\t\topacity = Math.round( opacity * 100 );\n\t\t\t\tthis.setStyle( 'filter', opacity >= 100 ? '' : 'progid:DXImageTransform.Microsoft.Alpha(opacity=' + opacity + ')' );\n\t\t\t} else {\n\t\t\t\tthis.setStyle( 'opacity', opacity );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Makes the element and its children unselectable.\n\t\t *\n\t\t *\t\tvar element = CKEDITOR.document.getById( 'myElement' );\n\t\t *\t\telement.unselectable();\n\t\t *\n\t\t * @method\n\t\t */\n\t\tunselectable: function() {\n\t\t\t// CSS unselectable.\n\t\t\tthis.setStyles( CKEDITOR.tools.cssVendorPrefix( 'user-select', 'none' ) );\n\n\t\t\t// For IE/Opera which doesn't support for the above CSS style,\n\t\t\t// the unselectable=\"on\" attribute only specifies the selection\n\t\t\t// process cannot start in the element itself, and it doesn't inherit.\n\t\t\tif ( CKEDITOR.env.ie ) {\n\t\t\t\tthis.setAttribute( 'unselectable', 'on' );\n\n\t\t\t\tvar element,\n\t\t\t\t\telements = this.getElementsByTag( '*' );\n\n\t\t\t\tfor ( var i = 0, count = elements.count() ; i < count ; i++ ) {\n\t\t\t\t\telement = elements.getItem( i );\n\t\t\t\t\telement.setAttribute( 'unselectable', 'on' );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Gets closest positioned (`position != static`) ancestor.\n\t\t *\n\t\t * @returns {CKEDITOR.dom.element} Positioned ancestor or `null`.\n\t\t */\n\t\tgetPositionedAncestor: function() {\n\t\t\tvar current = this;\n\t\t\twhile ( current.getName() != 'html' ) {\n\t\t\t\tif ( current.getComputedStyle( 'position' ) != 'static' )\n\t\t\t\t\treturn current;\n\n\t\t\t\tcurrent = current.getParent();\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\n\t\t/**\n\t\t * Gets this element's position in document.\n\t\t *\n\t\t * @param {CKEDITOR.dom.document} [refDocument]\n\t\t * @returns {Object} Element's position.\n\t\t * @returns {Number} return.x\n\t\t * @returns {Number} return.y\n\t\t * @todo refDocument\n\t\t */\n\t\tgetDocumentPosition: function( refDocument ) {\n\t\t\tvar x = 0,\n\t\t\t\ty = 0,\n\t\t\t\tdoc = this.getDocument(),\n\t\t\t\tbody = doc.getBody(),\n\t\t\t\tquirks = doc.$.compatMode == 'BackCompat';\n\n\t\t\tif ( document.documentElement.getBoundingClientRect &&\n\t\t\t\t( CKEDITOR.env.ie ? CKEDITOR.env.version !== 8 : true ) ) {\n\t\t\t\tvar box = this.$.getBoundingClientRect(),\n\t\t\t\t\t$doc = doc.$,\n\t\t\t\t\t$docElem = $doc.documentElement;\n\n\t\t\t\tvar clientTop = $docElem.clientTop || body.$.clientTop || 0,\n\t\t\t\t\tclientLeft = $docElem.clientLeft || body.$.clientLeft || 0,\n\t\t\t\t\tneedAdjustScrollAndBorders = true;\n\n\t\t\t\t// http://dev.ckeditor.com/ticket/3804: getBoundingClientRect() works differently on IE and non-IE\n\t\t\t\t// browsers, regarding scroll positions.\n\t\t\t\t//\n\t\t\t\t// On IE, the top position of the element is always 0, no matter\n\t\t\t\t// how much you scrolled down.\n\t\t\t\t//\n\t\t\t\t// On other browsers, the top position of the element is negative\n\t\t\t\t// scrollTop.\n\t\t\t\tif ( CKEDITOR.env.ie ) {\n\t\t\t\t\tvar inDocElem = doc.getDocumentElement().contains( this ),\n\t\t\t\t\t\tinBody = doc.getBody().contains( this );\n\n\t\t\t\t\tneedAdjustScrollAndBorders = ( quirks && inBody ) || ( !quirks && inDocElem );\n\t\t\t\t}\n\n\t\t\t\t// http://dev.ckeditor.com/ticket/12747.\n\t\t\t\tif ( needAdjustScrollAndBorders ) {\n\t\t\t\t\tvar scrollRelativeLeft,\n\t\t\t\t\t\tscrollRelativeTop;\n\n\t\t\t\t\t// See http://dev.ckeditor.com/ticket/12758 to know more about document.(documentElement|body).scroll(Left|Top) in Webkit.\n\t\t\t\t\tif ( CKEDITOR.env.webkit || ( CKEDITOR.env.ie && CKEDITOR.env.version >= 12 ) ) {\n\t\t\t\t\t\tscrollRelativeLeft = body.$.scrollLeft || $docElem.scrollLeft;\n\t\t\t\t\t\tscrollRelativeTop = body.$.scrollTop || $docElem.scrollTop;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar scrollRelativeElement = quirks ? body.$ : $docElem;\n\n\t\t\t\t\t\tscrollRelativeLeft = scrollRelativeElement.scrollLeft;\n\t\t\t\t\t\tscrollRelativeTop = scrollRelativeElement.scrollTop;\n\t\t\t\t\t}\n\n\t\t\t\t\tx = box.left + scrollRelativeLeft - clientLeft;\n\t\t\t\t\ty = box.top + scrollRelativeTop - clientTop;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar current = this,\n\t\t\t\t\tprevious = null,\n\t\t\t\t\toffsetParent;\n\t\t\t\twhile ( current && !( current.getName() == 'body' || current.getName() == 'html' ) ) {\n\t\t\t\t\tx += current.$.offsetLeft - current.$.scrollLeft;\n\t\t\t\t\ty += current.$.offsetTop - current.$.scrollTop;\n\n\t\t\t\t\t// Opera includes clientTop|Left into offsetTop|Left.\n\t\t\t\t\tif ( !current.equals( this ) ) {\n\t\t\t\t\t\tx += ( current.$.clientLeft || 0 );\n\t\t\t\t\t\ty += ( current.$.clientTop || 0 );\n\t\t\t\t\t}\n\n\t\t\t\t\tvar scrollElement = previous;\n\t\t\t\t\twhile ( scrollElement && !scrollElement.equals( current ) ) {\n\t\t\t\t\t\tx -= scrollElement.$.scrollLeft;\n\t\t\t\t\t\ty -= scrollElement.$.scrollTop;\n\t\t\t\t\t\tscrollElement = scrollElement.getParent();\n\t\t\t\t\t}\n\n\t\t\t\t\tprevious = current;\n\t\t\t\t\tcurrent = ( offsetParent = current.$.offsetParent ) ? new CKEDITOR.dom.element( offsetParent ) : null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( refDocument ) {\n\t\t\t\tvar currentWindow = this.getWindow(),\n\t\t\t\t\trefWindow = refDocument.getWindow();\n\n\t\t\t\tif ( !currentWindow.equals( refWindow ) && currentWindow.$.frameElement ) {\n\t\t\t\t\tvar iframePosition = ( new CKEDITOR.dom.element( currentWindow.$.frameElement ) ).getDocumentPosition( refDocument );\n\n\t\t\t\t\tx += iframePosition.x;\n\t\t\t\t\ty += iframePosition.y;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !document.documentElement.getBoundingClientRect ) {\n\t\t\t\t// In Firefox, we'll endup one pixel before the element positions,\n\t\t\t\t// so we must add it here.\n\t\t\t\tif ( CKEDITOR.env.gecko && !quirks ) {\n\t\t\t\t\tx += this.$.clientLeft ? 1 : 0;\n\t\t\t\t\ty += this.$.clientTop ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { x: x, y: y };\n\t\t},\n\n\t\t/**\n\t\t * Make any page element visible inside the browser viewport.\n\t\t *\n\t\t * @param {Boolean} [alignToTop=false]\n\t\t */\n\t\tscrollIntoView: function( alignToTop ) {\n\t\t\tvar parent = this.getParent();\n\t\t\tif ( !parent )\n\t\t\t\treturn;\n\n\t\t\t// Scroll the element into parent container from the inner out.\n\t\t\tdo {\n\t\t\t\t// Check ancestors that overflows.\n\t\t\t\tvar overflowed =\n\t\t\t\t\tparent.$.clientWidth && parent.$.clientWidth < parent.$.scrollWidth ||\n\t\t\t\t\tparent.$.clientHeight && parent.$.clientHeight < parent.$.scrollHeight;\n\n\t\t\t\t// Skip body element, which will report wrong clientHeight when containing\n\t\t\t\t// floated content. (http://dev.ckeditor.com/ticket/9523)\n\t\t\t\tif ( overflowed && !parent.is( 'body' ) )\n\t\t\t\t\tthis.scrollIntoParent( parent, alignToTop, 1 );\n\n\t\t\t\t// Walk across the frame.\n\t\t\t\tif ( parent.is( 'html' ) ) {\n\t\t\t\t\tvar win = parent.getWindow();\n\n\t\t\t\t\t// Avoid security error.\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar iframe = win.$.frameElement;\n\t\t\t\t\t\tiframe && ( parent = new CKEDITOR.dom.element( iframe ) );\n\t\t\t\t\t} catch ( er ) {}\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile ( ( parent = parent.getParent() ) );\n\t\t},\n\n\t\t/**\n\t\t * Make any page element visible inside one of the ancestors by scrolling the parent.\n\t\t *\n\t\t * @param {CKEDITOR.dom.element/CKEDITOR.dom.window} parent The container to scroll into.\n\t\t * @param {Boolean} [alignToTop] Align the element's top side with the container's\n\t\t * when `true` is specified; align the bottom with viewport bottom when\n\t\t * `false` is specified. Otherwise scroll on either side with the minimum\n\t\t * amount to show the element.\n\t\t * @param {Boolean} [hscroll] Whether horizontal overflow should be considered.\n\t\t */\n\t\tscrollIntoParent: function( parent, alignToTop, hscroll ) {\n\t\t\t!parent && ( parent = this.getWindow() );\n\n\t\t\tvar doc = parent.getDocument();\n\t\t\tvar isQuirks = doc.$.compatMode == 'BackCompat';\n\n\t\t\t// On window is scrolled while quirks scrolls .\n\t\t\tif ( parent instanceof CKEDITOR.dom.window )\n\t\t\t\tparent = isQuirks ? doc.getBody() : doc.getDocumentElement();\n\n\t\t\t// Scroll the parent by the specified amount.\n\t\t\tfunction scrollBy( x, y ) {\n\t\t\t\t// Webkit doesn't support \"scrollTop/scrollLeft\"\n\t\t\t\t// on documentElement/body element.\n\t\t\t\tif ( /body|html/.test( parent.getName() ) )\n\t\t\t\t\tparent.getWindow().$.scrollBy( x, y );\n\t\t\t\telse {\n\t\t\t\t\tparent.$.scrollLeft += x;\n\t\t\t\t\tparent.$.scrollTop += y;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Figure out the element position relative to the specified window.\n\t\t\tfunction screenPos( element, refWin ) {\n\t\t\t\tvar pos = { x: 0, y: 0 };\n\n\t\t\t\tif ( !( element.is( isQuirks ? 'body' : 'html' ) ) ) {\n\t\t\t\t\tvar box = element.$.getBoundingClientRect();\n\t\t\t\t\tpos.x = box.left, pos.y = box.top;\n\t\t\t\t}\n\n\t\t\t\tvar win = element.getWindow();\n\t\t\t\tif ( !win.equals( refWin ) ) {\n\t\t\t\t\tvar outerPos = screenPos( CKEDITOR.dom.element.get( win.$.frameElement ), refWin );\n\t\t\t\t\tpos.x += outerPos.x, pos.y += outerPos.y;\n\t\t\t\t}\n\n\t\t\t\treturn pos;\n\t\t\t}\n\n\t\t\t// calculated margin size.\n\t\t\tfunction margin( element, side ) {\n\t\t\t\treturn parseInt( element.getComputedStyle( 'margin-' + side ) || 0, 10 ) || 0;\n\t\t\t}\n\n\t\t\t// [WebKit] Reset stored scrollTop value to not break scrollIntoView() method flow.\n\t\t\t// Scrolling breaks when range.select() is used right after element.scrollIntoView(). (http://dev.ckeditor.com/ticket/14659)\n\t\t\tif ( CKEDITOR.env.webkit ) {\n\t\t\t\tvar editor = this.getEditor( false );\n\n\t\t\t\tif ( editor ) {\n\t\t\t\t\teditor._.previousScrollTop = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar win = parent.getWindow();\n\n\t\t\tvar thisPos = screenPos( this, win ),\n\t\t\t\tparentPos = screenPos( parent, win ),\n\t\t\t\teh = this.$.offsetHeight,\n\t\t\t\tew = this.$.offsetWidth,\n\t\t\t\tch = parent.$.clientHeight,\n\t\t\t\tcw = parent.$.clientWidth,\n\t\t\t\tlt, br;\n\n\t\t\t// Left-top margins.\n\t\t\tlt = {\n\t\t\t\tx: thisPos.x - margin( this, 'left' ) - parentPos.x || 0,\n\t\t\t\ty: thisPos.y - margin( this, 'top' ) - parentPos.y || 0\n\t\t\t};\n\n\t\t\t// Bottom-right margins.\n\t\t\tbr = {\n\t\t\t\tx: thisPos.x + ew + margin( this, 'right' ) - ( ( parentPos.x ) + cw ) || 0,\n\t\t\t\ty: thisPos.y + eh + margin( this, 'bottom' ) - ( ( parentPos.y ) + ch ) || 0\n\t\t\t};\n\n\t\t\t// 1. Do the specified alignment as much as possible;\n\t\t\t// 2. Otherwise be smart to scroll only the minimum amount;\n\t\t\t// 3. Never cut at the top;\n\t\t\t// 4. DO NOT scroll when already visible.\n\t\t\tif ( lt.y < 0 || br.y > 0 )\n\t\t\t\tscrollBy( 0, alignToTop === true ? lt.y : alignToTop === false ? br.y : lt.y < 0 ? lt.y : br.y );\n\n\t\t\tif ( hscroll && ( lt.x < 0 || br.x > 0 ) )\n\t\t\t\tscrollBy( lt.x < 0 ? lt.x : br.x, 0 );\n\t\t},\n\n\t\t/**\n\t\t * Switch the `class` attribute to reflect one of the triple states of an\n\t\t * element in one of {@link CKEDITOR#TRISTATE_ON}, {@link CKEDITOR#TRISTATE_OFF}\n\t\t * or {@link CKEDITOR#TRISTATE_DISABLED}.\n\t\t *\n\t\t *\t\tlink.setState( CKEDITOR.TRISTATE_ON );\n\t\t *\t\t// ...\n\t\t *\t\tlink.setState( CKEDITOR.TRISTATE_OFF );\n\t\t *\t\t// ...\n\t\t *\t\tlink.setState( CKEDITOR.TRISTATE_DISABLED );\n\t\t *\t\t// ...\n\t\t *\n\t\t *\t\tspan.setState( CKEDITOR.TRISTATE_ON, 'cke_button' );\n\t\t *\t\t// ...\n\t\t *\n\t\t * @param {Number} state Indicate the element state. One of {@link CKEDITOR#TRISTATE_ON},\n\t\t * {@link CKEDITOR#TRISTATE_OFF}, {@link CKEDITOR#TRISTATE_DISABLED}.\n\t\t * @param [base='cke'] The prefix apply to each of the state class name.\n\t\t * @param [useAria=true] Whether toggle the ARIA state attributes besides of class name change.\n\t\t */\n\t\tsetState: function( state, base, useAria ) {\n\t\t\tbase = base || 'cke';\n\n\t\t\tswitch ( state ) {\n\t\t\t\tcase CKEDITOR.TRISTATE_ON:\n\t\t\t\t\tthis.addClass( base + '_on' );\n\t\t\t\t\tthis.removeClass( base + '_off' );\n\t\t\t\t\tthis.removeClass( base + '_disabled' );\n\t\t\t\t\tuseAria && this.setAttribute( 'aria-pressed', true );\n\t\t\t\t\tuseAria && this.removeAttribute( 'aria-disabled' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase CKEDITOR.TRISTATE_DISABLED:\n\t\t\t\t\tthis.addClass( base + '_disabled' );\n\t\t\t\t\tthis.removeClass( base + '_off' );\n\t\t\t\t\tthis.removeClass( base + '_on' );\n\t\t\t\t\tuseAria && this.setAttribute( 'aria-disabled', true );\n\t\t\t\t\tuseAria && this.removeAttribute( 'aria-pressed' );\n\t\t\t\t\tbreak;\n\n\t\t\t\tdefault:\n\t\t\t\t\tthis.addClass( base + '_off' );\n\t\t\t\t\tthis.removeClass( base + '_on' );\n\t\t\t\t\tthis.removeClass( base + '_disabled' );\n\t\t\t\t\tuseAria && this.removeAttribute( 'aria-pressed' );\n\t\t\t\t\tuseAria && this.removeAttribute( 'aria-disabled' );\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Returns the inner document of this `' );\n\n\t\t\t\t\treturn html.join( '' );\n\t\t\t\t};\n\n\t\t\t\t// IE BUG: Parent container does not resize to contain the iframe automatically.\n\t\t\t\tdialog.on( 'load', function() {\n\t\t\t\t\tvar iframe = CKEDITOR.document.getById( _.frameId ),\n\t\t\t\t\t\tcontentDiv = iframe.getParent();\n\t\t\t\t\tcontentDiv.addClass( 'cke_dialog_ui_input_file' );\n\t\t\t\t} );\n\n\t\t\t\tCKEDITOR.ui.dialog.labeledElement.call( this, dialog, elementDefinition, htmlList, innerHTML );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * A button for submitting the file in a file upload input.\n\t\t\t *\n\t\t\t * @class CKEDITOR.ui.dialog.fileButton\n\t\t\t * @extends CKEDITOR.ui.dialog.button\n\t\t\t * @constructor Creates a fileButton class instance.\n\t\t\t * @param {CKEDITOR.dialog} dialog Parent dialog window object.\n\t\t\t * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\n\t\t\t * The element definition. Accepted fields:\n\t\t\t *\n\t\t\t * * `for` (Required) The file input's page and element ID\n\t\t\t * to associate with, in a two-item array format: `[ 'page_id', 'element_id' ]`.\n\t\t\t * * `validate` (Optional) The validation function.\n\t\t\t *\n\t\t\t * @param {Array} htmlList List of HTML code to output to.\n\t\t\t */\n\t\t\tfileButton: function( dialog, elementDefinition, htmlList ) {\n\t\t\t\tvar me = this;\n\t\t\t\tif ( arguments.length < 3 )\n\t\t\t\t\treturn;\n\n\t\t\t\tinitPrivateObject.call( this, elementDefinition );\n\n\t\t\t\tif ( elementDefinition.validate )\n\t\t\t\t\tthis.validate = elementDefinition.validate;\n\n\t\t\t\tvar myDefinition = CKEDITOR.tools.extend( {}, elementDefinition );\n\t\t\t\tvar onClick = myDefinition.onClick;\n\t\t\t\tmyDefinition.className = ( myDefinition.className ? myDefinition.className + ' ' : '' ) + 'cke_dialog_ui_button';\n\t\t\t\tmyDefinition.onClick = function( evt ) {\n\t\t\t\t\tvar target = elementDefinition[ 'for' ]; // [ pageId, elementId ]\n\t\t\t\t\tif ( !onClick || onClick.call( this, evt ) !== false ) {\n\t\t\t\t\t\tdialog.getContentElement( target[ 0 ], target[ 1 ] ).submit();\n\t\t\t\t\t\tthis.disable();\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tdialog.on( 'load', function() {\n\t\t\t\t\tdialog.getContentElement( elementDefinition[ 'for' ][ 0 ], elementDefinition[ 'for' ][ 1 ] )._.buttons.push( me );\n\t\t\t\t} );\n\n\t\t\t\tCKEDITOR.ui.dialog.button.call( this, dialog, myDefinition, htmlList );\n\t\t\t},\n\n\t\t\thtml: ( function() {\n\t\t\t\tvar myHtmlRe = /^\\s*<[\\w:]+\\s+([^>]*)?>/,\n\t\t\t\t\ttheirHtmlRe = /^(\\s*<[\\w:]+(?:\\s+[^>]*)?)((?:.|\\r|\\n)+)$/,\n\t\t\t\t\temptyTagRe = /\\/$/;\n\t\t\t\t/**\n\t\t\t\t * A dialog window element made from raw HTML code.\n\t\t\t\t *\n\t\t\t\t * @class CKEDITOR.ui.dialog.html\n\t\t\t\t * @extends CKEDITOR.ui.dialog.uiElement\n\t\t\t\t * @constructor Creates a html class instance.\n\t\t\t\t * @param {CKEDITOR.dialog} dialog Parent dialog window object.\n\t\t\t\t * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element definition.\n\t\t\t\t * Accepted fields:\n\t\t\t\t *\n\t\t\t\t * * `html` (Required) HTML code of this element.\n\t\t\t\t *\n\t\t\t\t * @param {Array} htmlList List of HTML code to be added to the dialog's content area.\n\t\t\t\t */\n\t\t\t\treturn function( dialog, elementDefinition, htmlList ) {\n\t\t\t\t\tif ( arguments.length < 3 )\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tvar myHtmlList = [],\n\t\t\t\t\t\tmyHtml,\n\t\t\t\t\t\ttheirHtml = elementDefinition.html,\n\t\t\t\t\t\tmyMatch, theirMatch;\n\n\t\t\t\t\t// If the HTML input doesn't contain any tags at the beginning, add a tag around it.\n\t\t\t\t\tif ( theirHtml.charAt( 0 ) != '<' )\n\t\t\t\t\t\ttheirHtml = '' + theirHtml + '';\n\n\t\t\t\t\t// Look for focus function in definition.\n\t\t\t\t\tvar focus = elementDefinition.focus;\n\t\t\t\t\tif ( focus ) {\n\t\t\t\t\t\tvar oldFocus = this.focus;\n\t\t\t\t\t\tthis.focus = function() {\n\t\t\t\t\t\t\t( typeof focus == 'function' ? focus : oldFocus ).call( this );\n\t\t\t\t\t\t\tthis.fire( 'focus' );\n\t\t\t\t\t\t};\n\t\t\t\t\t\tif ( elementDefinition.isFocusable ) {\n\t\t\t\t\t\t\tvar oldIsFocusable = this.isFocusable;\n\t\t\t\t\t\t\tthis.isFocusable = oldIsFocusable;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.keyboardFocusable = true;\n\t\t\t\t\t}\n\n\t\t\t\t\tCKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, myHtmlList, 'span', null, null, '' );\n\n\t\t\t\t\t// Append the attributes created by the uiElement call to the real HTML.\n\t\t\t\t\tmyHtml = myHtmlList.join( '' );\n\t\t\t\t\tmyMatch = myHtml.match( myHtmlRe );\n\t\t\t\t\ttheirMatch = theirHtml.match( theirHtmlRe ) || [ '', '', '' ];\n\n\t\t\t\t\tif ( emptyTagRe.test( theirMatch[ 1 ] ) ) {\n\t\t\t\t\t\ttheirMatch[ 1 ] = theirMatch[ 1 ].slice( 0, -1 );\n\t\t\t\t\t\ttheirMatch[ 2 ] = '/' + theirMatch[ 2 ];\n\t\t\t\t\t}\n\n\t\t\t\t\thtmlList.push( [ theirMatch[ 1 ], ' ', myMatch[ 1 ] || '', theirMatch[ 2 ] ].join( '' ) );\n\t\t\t\t};\n\t\t\t} )(),\n\n\t\t\t/**\n\t\t\t * Form fieldset for grouping dialog UI elements.\n\t\t\t *\n\t\t\t * @class CKEDITOR.ui.dialog.fieldset\n\t\t\t * @extends CKEDITOR.ui.dialog.uiElement\n\t\t\t * @constructor Creates a fieldset class instance.\n\t\t\t * @param {CKEDITOR.dialog} dialog Parent dialog window object.\n\t\t\t * @param {Array} childObjList\n\t\t\t * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container.\n\t\t\t * @param {Array} childHtmlList Array of HTML code that corresponds to the HTML output of all the\n\t\t\t * objects in childObjList.\n\t\t\t * @param {Array} htmlList Array of HTML code that this element will output to.\n\t\t\t * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\n\t\t\t * The element definition. Accepted fields:\n\t\t\t *\n\t\t\t * * `label` (Optional) The legend of the this fieldset.\n\t\t\t * * `children` (Required) An array of dialog window field definitions which will be grouped inside this fieldset.\n\t\t\t *\n\t\t\t */\n\t\t\tfieldset: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) {\n\t\t\t\tvar legendLabel = elementDefinition.label;\n\t\t\t\t/** @ignore */\n\t\t\t\tvar innerHTML = function() {\n\t\t\t\t\t\tvar html = [];\n\t\t\t\t\t\tlegendLabel && html.push( '' + legendLabel + '' );\n\t\t\t\t\t\tfor ( var i = 0; i < childHtmlList.length; i++ )\n\t\t\t\t\t\t\thtml.push( childHtmlList[ i ] );\n\t\t\t\t\t\treturn html.join( '' );\n\t\t\t\t\t};\n\n\t\t\t\tthis._ = { children: childObjList };\n\t\t\t\tCKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition, htmlList, 'fieldset', null, null, innerHTML );\n\t\t\t}\n\n\t\t}, true );\n\n\t\tCKEDITOR.ui.dialog.html.prototype = new CKEDITOR.ui.dialog.uiElement();\n\n\t\t/** @class CKEDITOR.ui.dialog.labeledElement */\n\t\tCKEDITOR.ui.dialog.labeledElement.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), {\n\t\t\t/**\n\t\t\t * Sets the label text of the element.\n\t\t\t *\n\t\t\t * @param {String} label The new label text.\n\t\t\t * @returns {CKEDITOR.ui.dialog.labeledElement} The current labeled element.\n\t\t\t */\n\t\t\tsetLabel: function( label ) {\n\t\t\t\tvar node = CKEDITOR.document.getById( this._.labelId );\n\t\t\t\tif ( node.getChildCount() < 1 )\n\t\t\t\t( new CKEDITOR.dom.text( label, CKEDITOR.document ) ).appendTo( node );\n\t\t\t\telse\n\t\t\t\t\tnode.getChild( 0 ).$.nodeValue = label;\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Retrieves the current label text of the elment.\n\t\t\t *\n\t\t\t * @returns {String} The current label text.\n\t\t\t */\n\t\t\tgetLabel: function() {\n\t\t\t\tvar node = CKEDITOR.document.getById( this._.labelId );\n\t\t\t\tif ( !node || node.getChildCount() < 1 )\n\t\t\t\t\treturn '';\n\t\t\t\telse\n\t\t\t\t\treturn node.getChild( 0 ).getText();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Defines the `onChange` event for UI element definitions.\n\t\t\t * @property {Object}\n\t\t\t */\n\t\t\teventProcessors: commonEventProcessors\n\t\t}, true );\n\n\t\t/** @class CKEDITOR.ui.dialog.button */\n\t\tCKEDITOR.ui.dialog.button.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), {\n\t\t\t/**\n\t\t\t * Simulates a click to the button.\n\t\t\t *\n\t\t\t * @returns {Object} Return value of the `click` event.\n\t\t\t */\n\t\t\tclick: function() {\n\t\t\t\tif ( !this._.disabled )\n\t\t\t\t\treturn this.fire( 'click', { dialog: this._.dialog } );\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Enables the button.\n\t\t\t */\n\t\t\tenable: function() {\n\t\t\t\tthis._.disabled = false;\n\t\t\t\tvar element = this.getElement();\n\t\t\t\telement && element.removeClass( 'cke_disabled' );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Disables the button.\n\t\t\t */\n\t\t\tdisable: function() {\n\t\t\t\tthis._.disabled = true;\n\t\t\t\tthis.getElement().addClass( 'cke_disabled' );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Checks whether a field is visible.\n\t\t\t *\n\t\t\t * @returns {Boolean}\n\t\t\t */\n\t\t\tisVisible: function() {\n\t\t\t\treturn this.getElement().getFirst().isVisible();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Checks whether a field is enabled. Fields can be disabled by using the\n\t\t\t * {@link #disable} method and enabled by using the {@link #enable} method.\n\t\t\t *\n\t\t\t * @returns {Boolean}\n\t\t\t */\n\t\t\tisEnabled: function() {\n\t\t\t\treturn !this._.disabled;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Defines the `onChange` event and `onClick` for button element definitions.\n\t\t\t *\n\t\t\t * @property {Object}\n\t\t\t */\n\t\t\teventProcessors: CKEDITOR.tools.extend( {}, CKEDITOR.ui.dialog.uiElement.prototype.eventProcessors, {\n\t\t\t\tonClick: function( dialog, func ) {\n\t\t\t\t\tthis.on( 'click', function() {\n\t\t\t\t\t\tfunc.apply( this, arguments );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}, true ),\n\n\t\t\t/**\n\t\t\t * Handler for the element's access key up event. Simulates a click to\n\t\t\t * the button.\n\t\t\t */\n\t\t\taccessKeyUp: function() {\n\t\t\t\tthis.click();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Handler for the element's access key down event. Simulates a mouse\n\t\t\t * down to the button.\n\t\t\t */\n\t\t\taccessKeyDown: function() {\n\t\t\t\tthis.focus();\n\t\t\t},\n\n\t\t\tkeyboardFocusable: true\n\t\t}, true );\n\n\t\t/** @class CKEDITOR.ui.dialog.textInput */\n\t\tCKEDITOR.ui.dialog.textInput.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement(), {\n\t\t\t/**\n\t\t\t * Gets the text input DOM element under this UI object.\n\t\t\t *\n\t\t\t * @returns {CKEDITOR.dom.element} The DOM element of the text input.\n\t\t\t */\n\t\t\tgetInputElement: function() {\n\t\t\t\treturn CKEDITOR.document.getById( this._.inputId );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Puts focus into the text input.\n\t\t\t */\n\t\t\tfocus: function() {\n\t\t\t\tvar me = this.selectParentTab();\n\n\t\t\t\t// GECKO BUG: setTimeout() is needed to workaround invisible selections.\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tvar element = me.getInputElement();\n\t\t\t\t\telement && element.$.focus();\n\t\t\t\t}, 0 );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Selects all the text in the text input.\n\t\t\t */\n\t\t\tselect: function() {\n\t\t\t\tvar me = this.selectParentTab();\n\n\t\t\t\t// GECKO BUG: setTimeout() is needed to workaround invisible selections.\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tvar e = me.getInputElement();\n\t\t\t\t\tif ( e ) {\n\t\t\t\t\t\te.$.focus();\n\t\t\t\t\t\te.$.select();\n\t\t\t\t\t}\n\t\t\t\t}, 0 );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Handler for the text input's access key up event. Makes a `select()`\n\t\t\t * call to the text input.\n\t\t\t */\n\t\t\taccessKeyUp: function() {\n\t\t\t\tthis.select();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the value of this text input object.\n\t\t\t *\n\t\t\t *\t\tuiElement.setValue( 'Blamo' );\n\t\t\t *\n\t\t\t * @param {Object} value The new value.\n\t\t\t * @returns {CKEDITOR.ui.dialog.textInput} The current UI element.\n\t\t\t */\n\t\t\tsetValue: function( value ) {\n\t\t\t\tif ( this.bidi ) {\n\t\t\t\t\tvar marker = value && value.charAt( 0 ),\n\t\t\t\t\t\tdir = ( marker == '\\u202A' ? 'ltr' : marker == '\\u202B' ? 'rtl' : null );\n\n\t\t\t\t\tif ( dir ) {\n\t\t\t\t\t\tvalue = value.slice( 1 );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set the marker or reset it (if dir==null).\n\t\t\t\t\tthis.setDirectionMarker( dir );\n\t\t\t\t}\n\n\t\t\t\tif ( !value ) {\n\t\t\t\t\tvalue = '';\n\t\t\t\t}\n\n\t\t\t\treturn CKEDITOR.ui.dialog.uiElement.prototype.setValue.apply( this, arguments );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Gets the value of this text input object.\n\t\t\t *\n\t\t\t * @returns {String} The value.\n\t\t\t */\n\t\t\tgetValue: function() {\n\t\t\t\tvar value = CKEDITOR.ui.dialog.uiElement.prototype.getValue.call( this );\n\n\t\t\t\tif ( this.bidi && value ) {\n\t\t\t\t\tvar dir = this.getDirectionMarker();\n\t\t\t\t\tif ( dir ) {\n\t\t\t\t\t\tvalue = ( dir == 'ltr' ? '\\u202A' : '\\u202B' ) + value;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn value;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Sets the text direction marker and the `dir` attribute of the input element.\n\t\t\t *\n\t\t\t * @since 4.5\n\t\t\t * @param {String} dir The text direction. Pass `null` to reset.\n\t\t\t */\n\t\t\tsetDirectionMarker: function( dir ) {\n\t\t\t\tvar inputElement = this.getInputElement();\n\n\t\t\t\tif ( dir ) {\n\t\t\t\t\tinputElement.setAttributes( {\n\t\t\t\t\t\tdir: dir,\n\t\t\t\t\t\t'data-cke-dir-marker': dir\n\t\t\t\t\t} );\n\t\t\t\t// Don't remove the dir attribute if this field hasn't got the marker,\n\t\t\t\t// because the dir attribute could be set independently.\n\t\t\t\t} else if ( this.getDirectionMarker() ) {\n\t\t\t\t\tinputElement.removeAttributes( [ 'dir', 'data-cke-dir-marker' ] );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Gets the value of the text direction marker.\n\t\t\t *\n\t\t\t * @since 4.5\n\t\t\t * @returns {String} `'ltr'`, `'rtl'` or `null` if the marker is not set.\n\t\t\t */\n\t\t\tgetDirectionMarker: function() {\n\t\t\t\treturn this.getInputElement().data( 'cke-dir-marker' );\n\t\t\t},\n\n\t\t\tkeyboardFocusable: true\n\t\t}, commonPrototype, true );\n\n\t\tCKEDITOR.ui.dialog.textarea.prototype = new CKEDITOR.ui.dialog.textInput();\n\n\t\t/** @class CKEDITOR.ui.dialog.select */\n\t\tCKEDITOR.ui.dialog.select.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.labeledElement(), {\n\t\t\t/**\n\t\t\t * Gets the DOM element of the select box.\n\t\t\t *\n\t\t\t * @returns {CKEDITOR.dom.element} The `` element of this file input.\n\t\t\t *\n\t\t\t * @returns {CKEDITOR.dom.element} The file input element.\n\t\t\t */\n\t\t\tgetInputElement: function() {\n\t\t\t\tvar frameDocument = CKEDITOR.document.getById( this._.frameId ).getFrameDocument();\n\t\t\t\treturn frameDocument.$.forms.length > 0 ? new CKEDITOR.dom.element( frameDocument.$.forms[ 0 ].elements[ 0 ] ) : this.getElement();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Uploads the file in the file input.\n\t\t\t *\n\t\t\t * @returns {CKEDITOR.ui.dialog.file} This object.\n\t\t\t */\n\t\t\tsubmit: function() {\n\t\t\t\tthis.getInputElement().getParent().$.submit();\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Gets the action assigned to the form.\n\t\t\t *\n\t\t\t * @returns {String} The value of the action.\n\t\t\t */\n\t\t\tgetAction: function() {\n\t\t\t\treturn this.getInputElement().getParent().$.action;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * The events must be applied to the inner input element, and\n\t\t\t * this must be done when the iframe and form have been loaded.\n\t\t\t */\n\t\t\tregisterEvents: function( definition ) {\n\t\t\t\tvar regex = /^on([A-Z]\\w+)/,\n\t\t\t\t\tmatch;\n\n\t\t\t\tvar registerDomEvent = function( uiElement, dialog, eventName, func ) {\n\t\t\t\t\t\tuiElement.on( 'formLoaded', function() {\n\t\t\t\t\t\t\tuiElement.getInputElement().on( eventName, func, uiElement );\n\t\t\t\t\t\t} );\n\t\t\t\t\t};\n\n\t\t\t\tfor ( var i in definition ) {\n\t\t\t\t\tif ( !( match = i.match( regex ) ) )\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif ( this.eventProcessors[ i ] )\n\t\t\t\t\t\tthis.eventProcessors[ i ].call( this, this._.dialog, definition[ i ] );\n\t\t\t\t\telse\n\t\t\t\t\t\tregisterDomEvent( this, this._.dialog, match[ 1 ].toLowerCase(), definition[ i ] );\n\t\t\t\t}\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Redraws the file input and resets the file path in the file input.\n\t\t\t * The redrawing logic is necessary because non-IE browsers tend to clear\n\t\t\t * the `' );\n\t\t\tiframe.appendTo( body.getParent() );\n\t\t}\n\n\t\t// Make the Title and Close Button unselectable.\n\t\ttitle.unselectable();\n\t\tclose.unselectable();\n\n\t\treturn {\n\t\t\telement: element,\n\t\t\tparts: {\n\t\t\t\tdialog: element.getChild( 0 ),\n\t\t\t\ttitle: title,\n\t\t\t\tclose: close,\n\t\t\t\ttabs: body.getChild( 2 ),\n\t\t\t\tcontents: body.getChild( [ 3, 0, 0, 0 ] ),\n\t\t\t\tfooter: body.getChild( [ 3, 0, 1, 0 ] )\n\t\t\t}\n\t\t};\n\t}\n\n\t/**\n\t * This is the base class for runtime dialog objects. An instance of this\n\t * class represents a single named dialog for a single editor instance.\n\t *\n\t *\t\tvar dialogObj = new CKEDITOR.dialog( editor, 'smiley' );\n\t *\n\t * @class\n\t * @constructor Creates a dialog class instance.\n\t * @param {Object} editor The editor which created the dialog.\n\t * @param {String} dialogName The dialog's registered name.\n\t */\n\tCKEDITOR.dialog = function( editor, dialogName ) {\n\t\t// Load the dialog definition.\n\t\tvar definition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ],\n\t\t\tdefaultDefinition = CKEDITOR.tools.clone( defaultDialogDefinition ),\n\t\t\tbuttonsOrder = editor.config.dialog_buttonsOrder || 'OS',\n\t\t\tdir = editor.lang.dir,\n\t\t\ttabsToRemove = {},\n\t\t\ti, processed, stopPropagation;\n\n\t\tif ( ( buttonsOrder == 'OS' && CKEDITOR.env.mac ) || // The buttons in MacOS Apps are in reverse order (http://dev.ckeditor.com/ticket/4750)\n\t\t( buttonsOrder == 'rtl' && dir == 'ltr' ) || ( buttonsOrder == 'ltr' && dir == 'rtl' ) )\n\t\t\tdefaultDefinition.buttons.reverse();\n\n\n\t\t// Completes the definition with the default values.\n\t\tdefinition = CKEDITOR.tools.extend( definition( editor ), defaultDefinition );\n\n\t\t// Clone a functionally independent copy for this dialog.\n\t\tdefinition = CKEDITOR.tools.clone( definition );\n\n\t\t// Create a complex definition object, extending it with the API\n\t\t// functions.\n\t\tdefinition = new definitionObject( this, definition );\n\n\t\tvar themeBuilt = buildDialog( editor );\n\n\t\t// Initialize some basic parameters.\n\t\tthis._ = {\n\t\t\teditor: editor,\n\t\t\telement: themeBuilt.element,\n\t\t\tname: dialogName,\n\t\t\tcontentSize: { width: 0, height: 0 },\n\t\t\tsize: { width: 0, height: 0 },\n\t\t\tcontents: {},\n\t\t\tbuttons: {},\n\t\t\taccessKeyMap: {},\n\n\t\t\t// Initialize the tab and page map.\n\t\t\ttabs: {},\n\t\t\ttabIdList: [],\n\t\t\tcurrentTabId: null,\n\t\t\tcurrentTabIndex: null,\n\t\t\tpageCount: 0,\n\t\t\tlastTab: null,\n\t\t\ttabBarMode: false,\n\n\t\t\t// Initialize the tab order array for input widgets.\n\t\t\tfocusList: [],\n\t\t\tcurrentFocusIndex: 0,\n\t\t\thasFocus: false\n\t\t};\n\n\t\tthis.parts = themeBuilt.parts;\n\n\t\tCKEDITOR.tools.setTimeout( function() {\n\t\t\teditor.fire( 'ariaWidget', this.parts.contents );\n\t\t}, 0, this );\n\n\t\t// Set the startup styles for the dialog, avoiding it enlarging the\n\t\t// page size on the dialog creation.\n\t\tvar startStyles = {\n\t\t\tposition: CKEDITOR.env.ie6Compat ? 'absolute' : 'fixed',\n\t\t\ttop: 0,\n\t\t\tvisibility: 'hidden'\n\t\t};\n\n\t\tstartStyles[ dir == 'rtl' ? 'right' : 'left' ] = 0;\n\t\tthis.parts.dialog.setStyles( startStyles );\n\n\n\t\t// Call the CKEDITOR.event constructor to initialize this instance.\n\t\tCKEDITOR.event.call( this );\n\n\t\t// Fire the \"dialogDefinition\" event, making it possible to customize\n\t\t// the dialog definition.\n\t\tthis.definition = definition = CKEDITOR.fire( 'dialogDefinition', {\n\t\t\tname: dialogName,\n\t\t\tdefinition: definition\n\t\t}, editor ).definition;\n\n\t\t// Cache tabs that should be removed.\n\t\tif ( !( 'removeDialogTabs' in editor._ ) && editor.config.removeDialogTabs ) {\n\t\t\tvar removeContents = editor.config.removeDialogTabs.split( ';' );\n\n\t\t\tfor ( i = 0; i < removeContents.length; i++ ) {\n\t\t\t\tvar parts = removeContents[ i ].split( ':' );\n\t\t\t\tif ( parts.length == 2 ) {\n\t\t\t\t\tvar removeDialogName = parts[ 0 ];\n\t\t\t\t\tif ( !tabsToRemove[ removeDialogName ] )\n\t\t\t\t\t\ttabsToRemove[ removeDialogName ] = [];\n\t\t\t\t\ttabsToRemove[ removeDialogName ].push( parts[ 1 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\teditor._.removeDialogTabs = tabsToRemove;\n\t\t}\n\n\t\t// Remove tabs of this dialog.\n\t\tif ( editor._.removeDialogTabs && ( tabsToRemove = editor._.removeDialogTabs[ dialogName ] ) ) {\n\t\t\tfor ( i = 0; i < tabsToRemove.length; i++ )\n\t\t\t\tdefinition.removeContents( tabsToRemove[ i ] );\n\t\t}\n\n\t\t// Initialize load, show, hide, ok and cancel events.\n\t\tif ( definition.onLoad )\n\t\t\tthis.on( 'load', definition.onLoad );\n\n\t\tif ( definition.onShow )\n\t\t\tthis.on( 'show', definition.onShow );\n\n\t\tif ( definition.onHide )\n\t\t\tthis.on( 'hide', definition.onHide );\n\n\t\tif ( definition.onOk ) {\n\t\t\tthis.on( 'ok', function( evt ) {\n\t\t\t\t// Dialog confirm might probably introduce content changes (http://dev.ckeditor.com/ticket/5415).\n\t\t\t\teditor.fire( 'saveSnapshot' );\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\teditor.fire( 'saveSnapshot' );\n\t\t\t\t}, 0 );\n\t\t\t\tif ( definition.onOk.call( this, evt ) === false )\n\t\t\t\t\tevt.data.hide = false;\n\t\t\t} );\n\t\t}\n\n\t\t// Set default dialog state.\n\t\tthis.state = CKEDITOR.DIALOG_STATE_IDLE;\n\n\t\tif ( definition.onCancel ) {\n\t\t\tthis.on( 'cancel', function( evt ) {\n\t\t\t\tif ( definition.onCancel.call( this, evt ) === false )\n\t\t\t\t\tevt.data.hide = false;\n\t\t\t} );\n\t\t}\n\n\t\tvar me = this;\n\n\t\t// Iterates over all items inside all content in the dialog, calling a\n\t\t// function for each of them.\n\t\tvar iterContents = function( func ) {\n\t\t\t\tvar contents = me._.contents,\n\t\t\t\t\tstop = false;\n\n\t\t\t\tfor ( var i in contents ) {\n\t\t\t\t\tfor ( var j in contents[ i ] ) {\n\t\t\t\t\t\tstop = func.call( this, contents[ i ][ j ] );\n\t\t\t\t\t\tif ( stop )\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\tthis.on( 'ok', function( evt ) {\n\t\t\titerContents( function( item ) {\n\t\t\t\tif ( item.validate ) {\n\t\t\t\t\tvar retval = item.validate( this ),\n\t\t\t\t\t\tinvalid = ( typeof retval == 'string' ) || retval === false;\n\n\t\t\t\t\tif ( invalid ) {\n\t\t\t\t\t\tevt.data.hide = false;\n\t\t\t\t\t\tevt.stop();\n\t\t\t\t\t}\n\n\t\t\t\t\thandleFieldValidated.call( item, !invalid, typeof retval == 'string' ? retval : undefined );\n\t\t\t\t\treturn invalid;\n\t\t\t\t}\n\t\t\t} );\n\t\t}, this, null, 0 );\n\n\t\tthis.on( 'cancel', function( evt ) {\n\t\t\titerContents( function( item ) {\n\t\t\t\tif ( item.isChanged() ) {\n\t\t\t\t\tif ( !editor.config.dialog_noConfirmCancel && !confirm( editor.lang.common.confirmCancel ) ) // jshint ignore:line\n\t\t\t\t\t\tevt.data.hide = false;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} );\n\t\t}, this, null, 0 );\n\n\t\tthis.parts.close.on( 'click', function( evt ) {\n\t\t\tif ( this.fire( 'cancel', { hide: true } ).hide !== false )\n\t\t\t\tthis.hide();\n\t\t\tevt.data.preventDefault();\n\t\t}, this );\n\n\t\t// Sort focus list according to tab order definitions.\n\t\tfunction setupFocus() {\n\t\t\tvar focusList = me._.focusList;\n\t\t\tfocusList.sort( function( a, b ) {\n\t\t\t\t// Mimics browser tab order logics;\n\t\t\t\tif ( a.tabIndex != b.tabIndex )\n\t\t\t\t\treturn b.tabIndex - a.tabIndex;\n\t\t\t\t// Sort is not stable in some browsers,\n\t\t\t\t// fall-back the comparator to 'focusIndex';\n\t\t\t\telse\n\t\t\t\t\treturn a.focusIndex - b.focusIndex;\n\t\t\t} );\n\n\t\t\tvar size = focusList.length;\n\t\t\tfor ( var i = 0; i < size; i++ )\n\t\t\t\tfocusList[ i ].focusIndex = i;\n\t\t}\n\n\t\t// Expects 1 or -1 as an offset, meaning direction of the offset change.\n\t\tfunction changeFocus( offset ) {\n\t\t\tvar focusList = me._.focusList;\n\t\t\toffset = offset || 0;\n\n\t\t\tif ( focusList.length < 1 )\n\t\t\t\treturn;\n\n\t\t\tvar startIndex = me._.currentFocusIndex;\n\n\t\t\tif ( me._.tabBarMode && offset < 0 ) {\n\t\t\t\t// If we are in tab mode, we need to mimic that we started tabbing back from the first\n\t\t\t\t// focusList (so it will go to the last one).\n\t\t\t\tstartIndex = 0;\n\t\t\t}\n\n\t\t\t// Trigger the 'blur' event of any input element before anything,\n\t\t\t// since certain UI updates may depend on it.\n\t\t\ttry {\n\t\t\t\tfocusList[ startIndex ].getInputElement().$.blur();\n\t\t\t} catch ( e ) {}\n\n\t\t\tvar currentIndex = startIndex,\n\t\t\t\thasTabs = me._.pageCount > 1;\n\n\t\t\tdo {\n\t\t\t\tcurrentIndex = currentIndex + offset;\n\n\t\t\t\tif ( hasTabs && !me._.tabBarMode && ( currentIndex == focusList.length || currentIndex == -1 ) ) {\n\t\t\t\t\t// If the dialog was not in tab mode, then focus the first tab (http://dev.ckeditor.com/ticket/13027).\n\t\t\t\t\tme._.tabBarMode = true;\n\t\t\t\t\tme._.tabs[ me._.currentTabId ][ 0 ].focus();\n\t\t\t\t\tme._.currentFocusIndex = -1;\n\n\t\t\t\t\t// Early return, in order to avoid accessing focusList[ -1 ].\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcurrentIndex = ( currentIndex + focusList.length ) % focusList.length;\n\n\t\t\t\tif ( currentIndex == startIndex ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} while ( offset && !focusList[ currentIndex ].isFocusable() );\n\n\t\t\tfocusList[ currentIndex ].focus();\n\n\t\t\t// Select whole field content.\n\t\t\tif ( focusList[ currentIndex ].type == 'text' )\n\t\t\t\tfocusList[ currentIndex ].select();\n\t\t}\n\n\t\tthis.changeFocus = changeFocus;\n\n\n\t\tfunction keydownHandler( evt ) {\n\t\t\t// If I'm not the top dialog, ignore.\n\t\t\tif ( me != CKEDITOR.dialog._.currentTop )\n\t\t\t\treturn;\n\n\t\t\tvar keystroke = evt.data.getKeystroke(),\n\t\t\t\trtl = editor.lang.dir == 'rtl',\n\t\t\t\tarrowKeys = [ 37, 38, 39, 40 ],\n\t\t\t\tbutton;\n\n\t\t\tprocessed = stopPropagation = 0;\n\n\t\t\tif ( keystroke == 9 || keystroke == CKEDITOR.SHIFT + 9 ) {\n\t\t\t\tvar shiftPressed = ( keystroke == CKEDITOR.SHIFT + 9 );\n\t\t\t\tchangeFocus( shiftPressed ? -1 : 1 );\n\t\t\t\tprocessed = 1;\n\t\t\t} else if ( keystroke == CKEDITOR.ALT + 121 && !me._.tabBarMode && me.getPageCount() > 1 ) {\n\t\t\t\t// Alt-F10 puts focus into the current tab item in the tab bar.\n\t\t\t\tme._.tabBarMode = true;\n\t\t\t\tme._.tabs[ me._.currentTabId ][ 0 ].focus();\n\t\t\t\tme._.currentFocusIndex = -1;\n\t\t\t\tprocessed = 1;\n\t\t\t} else if ( CKEDITOR.tools.indexOf( arrowKeys, keystroke ) != -1 && me._.tabBarMode ) {\n\t\t\t\t// Array with key codes that activate previous tab.\n\t\t\t\tvar prevKeyCodes = [\n\t\t\t\t\t\t// Depending on the lang dir: right or left key\n\t\t\t\t\t\trtl ? 39 : 37,\n\t\t\t\t\t\t// Top/bot arrow: actually for both cases it's the same.\n\t\t\t\t\t\t38\n\t\t\t\t\t],\n\t\t\t\t\tnextId = CKEDITOR.tools.indexOf( prevKeyCodes, keystroke ) != -1 ? getPreviousVisibleTab.call( me ) : getNextVisibleTab.call( me );\n\n\t\t\t\tme.selectPage( nextId );\n\t\t\t\tme._.tabs[ nextId ][ 0 ].focus();\n\t\t\t\tprocessed = 1;\n\t\t\t} else if ( ( keystroke == 13 || keystroke == 32 ) && me._.tabBarMode ) {\n\t\t\t\tthis.selectPage( this._.currentTabId );\n\t\t\t\tthis._.tabBarMode = false;\n\t\t\t\tthis._.currentFocusIndex = -1;\n\t\t\t\tchangeFocus( 1 );\n\t\t\t\tprocessed = 1;\n\t\t\t}\n\t\t\t// If user presses enter key in a text box, it implies clicking OK for the dialog.\n\t\t\telse if ( keystroke == 13 /*ENTER*/ ) {\n\t\t\t\t// Don't do that for a target that handles ENTER.\n\t\t\t\tvar target = evt.data.getTarget();\n\t\t\t\tif ( !target.is( 'a', 'button', 'select', 'textarea' ) && ( !target.is( 'input' ) || target.$.type != 'button' ) ) {\n\t\t\t\t\tbutton = this.getButton( 'ok' );\n\t\t\t\t\tbutton && CKEDITOR.tools.setTimeout( button.click, 0, button );\n\t\t\t\t\tprocessed = 1;\n\t\t\t\t}\n\t\t\t\tstopPropagation = 1; // Always block the propagation (http://dev.ckeditor.com/ticket/4269)\n\t\t\t} else if ( keystroke == 27 /*ESC*/ ) {\n\t\t\t\tbutton = this.getButton( 'cancel' );\n\n\t\t\t\t// If there's a Cancel button, click it, else just fire the cancel event and hide the dialog.\n\t\t\t\tif ( button )\n\t\t\t\t\tCKEDITOR.tools.setTimeout( button.click, 0, button );\n\t\t\t\telse {\n\t\t\t\t\tif ( this.fire( 'cancel', { hide: true } ).hide !== false )\n\t\t\t\t\t\tthis.hide();\n\t\t\t\t}\n\t\t\t\tstopPropagation = 1; // Always block the propagation (http://dev.ckeditor.com/ticket/4269)\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tkeypressHandler( evt );\n\t\t}\n\n\t\tfunction keypressHandler( evt ) {\n\t\t\tif ( processed )\n\t\t\t\tevt.data.preventDefault( 1 );\n\t\t\telse if ( stopPropagation )\n\t\t\t\tevt.data.stopPropagation();\n\t\t}\n\n\t\tvar dialogElement = this._.element;\n\n\t\teditor.focusManager.add( dialogElement, 1 );\n\n\t\t// Add the dialog keyboard handlers.\n\t\tthis.on( 'show', function() {\n\t\t\tdialogElement.on( 'keydown', keydownHandler, this );\n\n\t\t\t// Some browsers instead, don't cancel key events in the keydown, but in the\n\t\t\t// keypress. So we must do a longer trip in those cases. (http://dev.ckeditor.com/ticket/4531,http://dev.ckeditor.com/ticket/8985)\n\t\t\tif ( CKEDITOR.env.gecko )\n\t\t\t\tdialogElement.on( 'keypress', keypressHandler, this );\n\n\t\t} );\n\t\tthis.on( 'hide', function() {\n\t\t\tdialogElement.removeListener( 'keydown', keydownHandler );\n\t\t\tif ( CKEDITOR.env.gecko )\n\t\t\t\tdialogElement.removeListener( 'keypress', keypressHandler );\n\n\t\t\t// Reset fields state when closing dialog.\n\t\t\titerContents( function( item ) {\n\t\t\t\tresetField.apply( item );\n\t\t\t} );\n\t\t} );\n\t\tthis.on( 'iframeAdded', function( evt ) {\n\t\t\tvar doc = new CKEDITOR.dom.document( evt.data.iframe.$.contentWindow.document );\n\t\t\tdoc.on( 'keydown', keydownHandler, this, null, 0 );\n\t\t} );\n\n\t\t// Auto-focus logic in dialog.\n\t\tthis.on( 'show', function() {\n\t\t\t// Setup tabIndex on showing the dialog instead of on loading\n\t\t\t// to allow dynamic tab order happen in dialog definition.\n\t\t\tsetupFocus();\n\n\t\t\tvar hasTabs = me._.pageCount > 1;\n\n\t\t\tif ( editor.config.dialog_startupFocusTab && hasTabs ) {\n\t\t\t\tme._.tabBarMode = true;\n\t\t\t\tme._.tabs[ me._.currentTabId ][ 0 ].focus();\n\t\t\t\tme._.currentFocusIndex = -1;\n\t\t\t} else if ( !this._.hasFocus ) {\n\t\t\t\t// http://dev.ckeditor.com/ticket/13114#comment:4.\n\t\t\t\tthis._.currentFocusIndex = hasTabs ? -1 : this._.focusList.length - 1;\n\n\t\t\t\t// Decide where to put the initial focus.\n\t\t\t\tif ( definition.onFocus ) {\n\t\t\t\t\tvar initialFocus = definition.onFocus.call( this );\n\t\t\t\t\t// Focus the field that the user specified.\n\t\t\t\t\tinitialFocus && initialFocus.focus();\n\t\t\t\t}\n\t\t\t\t// Focus the first field in layout order.\n\t\t\t\telse {\n\t\t\t\t\tchangeFocus( 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t}, this, null, 0xffffffff );\n\n\t\t// IE6 BUG: Text fields and text areas are only half-rendered the first time the dialog appears in IE6 (http://dev.ckeditor.com/ticket/2661).\n\t\t// This is still needed after [2708] and [2709] because text fields in hidden TR tags are still broken.\n\t\tif ( CKEDITOR.env.ie6Compat ) {\n\t\t\tthis.on( 'load', function() {\n\t\t\t\tvar outer = this.getElement(),\n\t\t\t\t\tinner = outer.getFirst();\n\t\t\t\tinner.remove();\n\t\t\t\tinner.appendTo( outer );\n\t\t\t}, this );\n\t\t}\n\n\t\tinitDragAndDrop( this );\n\t\tinitResizeHandles( this );\n\n\t\t// Insert the title.\n\t\t( new CKEDITOR.dom.text( definition.title, CKEDITOR.document ) ).appendTo( this.parts.title );\n\n\t\t// Insert the tabs and contents.\n\t\tfor ( i = 0; i < definition.contents.length; i++ ) {\n\t\t\tvar page = definition.contents[ i ];\n\t\t\tpage && this.addPage( page );\n\t\t}\n\n\t\tthis.parts.tabs.on( 'click', function( evt ) {\n\t\t\tvar target = evt.data.getTarget();\n\t\t\t// If we aren't inside a tab, bail out.\n\t\t\tif ( target.hasClass( 'cke_dialog_tab' ) ) {\n\t\t\t\t// Get the ID of the tab, without the 'cke_' prefix and the unique number suffix.\n\t\t\t\tvar id = target.$.id;\n\t\t\t\tthis.selectPage( id.substring( 4, id.lastIndexOf( '_' ) ) );\n\n\t\t\t\tif ( this._.tabBarMode ) {\n\t\t\t\t\tthis._.tabBarMode = false;\n\t\t\t\t\tthis._.currentFocusIndex = -1;\n\t\t\t\t\tchangeFocus( 1 );\n\t\t\t\t}\n\t\t\t\tevt.data.preventDefault();\n\t\t\t}\n\t\t}, this );\n\n\t\t// Insert buttons.\n\t\tvar buttonsHtml = [],\n\t\t\tbuttons = CKEDITOR.dialog._.uiElementBuilders.hbox.build( this, {\n\t\t\t\ttype: 'hbox',\n\t\t\t\tclassName: 'cke_dialog_footer_buttons',\n\t\t\t\twidths: [],\n\t\t\t\tchildren: definition.buttons\n\t\t\t}, buttonsHtml ).getChild();\n\t\tthis.parts.footer.setHtml( buttonsHtml.join( '' ) );\n\n\t\tfor ( i = 0; i < buttons.length; i++ )\n\t\t\tthis._.buttons[ buttons[ i ].id ] = buttons[ i ];\n\n\t\t/**\n\t\t * Current state of the dialog. Use the {@link #setState} method to update it.\n\t\t * See the {@link #event-state} event to know more.\n\t\t *\n\t\t * @readonly\n\t\t * @property {Number} [state=CKEDITOR.DIALOG_STATE_IDLE]\n\t\t */\n\t};\n\n\t// Focusable interface. Use it via dialog.addFocusable.\n\tfunction Focusable( dialog, element, index ) {\n\t\tthis.element = element;\n\t\tthis.focusIndex = index;\n\t\t// TODO: support tabIndex for focusables.\n\t\tthis.tabIndex = 0;\n\t\tthis.isFocusable = function() {\n\t\t\treturn !element.getAttribute( 'disabled' ) && element.isVisible();\n\t\t};\n\t\tthis.focus = function() {\n\t\t\tdialog._.currentFocusIndex = this.focusIndex;\n\t\t\tthis.element.focus();\n\t\t};\n\t\t// Bind events\n\t\telement.on( 'keydown', function( e ) {\n\t\t\tif ( e.data.getKeystroke() in { 32: 1, 13: 1 } )\n\t\t\t\tthis.fire( 'click' );\n\t\t} );\n\t\telement.on( 'focus', function() {\n\t\t\tthis.fire( 'mouseover' );\n\t\t} );\n\t\telement.on( 'blur', function() {\n\t\t\tthis.fire( 'mouseout' );\n\t\t} );\n\t}\n\n\t// Re-layout the dialog on window resize.\n\tfunction resizeWithWindow( dialog ) {\n\t\tvar win = CKEDITOR.document.getWindow();\n\t\tfunction resizeHandler() {\n\t\t\tdialog.layout();\n\t\t}\n\t\twin.on( 'resize', resizeHandler );\n\t\tdialog.on( 'hide', function() {\n\t\t\twin.removeListener( 'resize', resizeHandler );\n\t\t} );\n\t}\n\n\tCKEDITOR.dialog.prototype = {\n\t\tdestroy: function() {\n\t\t\tthis.hide();\n\t\t\tthis._.element.remove();\n\t\t},\n\n\t\t/**\n\t\t * Resizes the dialog.\n\t\t *\n\t\t *\t\tdialogObj.resize( 800, 640 );\n\t\t *\n\t\t * @method\n\t\t * @param {Number} width The width of the dialog in pixels.\n\t\t * @param {Number} height The height of the dialog in pixels.\n\t\t */\n\t\tresize: ( function() {\n\t\t\treturn function( width, height ) {\n\t\t\t\tif ( this._.contentSize && this._.contentSize.width == width && this._.contentSize.height == height )\n\t\t\t\t\treturn;\n\n\t\t\t\tCKEDITOR.dialog.fire( 'resize', {\n\t\t\t\t\tdialog: this,\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height\n\t\t\t\t}, this._.editor );\n\n\t\t\t\tthis.fire( 'resize', {\n\t\t\t\t\twidth: width,\n\t\t\t\t\theight: height\n\t\t\t\t}, this._.editor );\n\n\t\t\t\tvar contents = this.parts.contents;\n\t\t\t\tcontents.setStyles( {\n\t\t\t\t\twidth: width + 'px',\n\t\t\t\t\theight: height + 'px'\n\t\t\t\t} );\n\n\t\t\t\t// Update dialog position when dimension get changed in RTL.\n\t\t\t\tif ( this._.editor.lang.dir == 'rtl' && this._.position )\n\t\t\t\t\tthis._.position.x = CKEDITOR.document.getWindow().getViewPaneSize().width - this._.contentSize.width - parseInt( this._.element.getFirst().getStyle( 'right' ), 10 );\n\n\t\t\t\tthis._.contentSize = { width: width, height: height };\n\t\t\t};\n\t\t} )(),\n\n\t\t/**\n\t\t * Gets the current size of the dialog in pixels.\n\t\t *\n\t\t * var width = dialogObj.getSize().width;\n\t\t *\n\t\t * @returns {Object}\n\t\t * @returns {Number} return.width\n\t\t * @returns {Number} return.height\n\t\t */\n\t\tgetSize: function() {\n\t\t\tvar element = this._.element.getFirst();\n\t\t\treturn { width: element.$.offsetWidth || 0, height: element.$.offsetHeight || 0 };\n\t\t},\n\n\t\t/**\n\t\t * Moves the dialog to an `(x, y)` coordinate relative to the window.\n\t\t *\n\t\t * dialogObj.move( 10, 40 );\n\t\t *\n\t\t * @method\n\t\t * @param {Number} x The target x-coordinate.\n\t\t * @param {Number} y The target y-coordinate.\n\t\t * @param {Boolean} save Flag indicate whether the dialog position should be remembered on next open up.\n\t\t */\n\t\tmove: function( x, y, save ) {\n\n\t\t\t// The dialog may be fixed positioned or absolute positioned. Ask the\n\t\t\t// browser what is the current situation first.\n\t\t\tvar element = this._.element.getFirst(), rtl = this._.editor.lang.dir == 'rtl';\n\t\t\tvar isFixed = element.getComputedStyle( 'position' ) == 'fixed';\n\n\t\t\t// (http://dev.ckeditor.com/ticket/8888) In some cases of a very small viewport, dialog is incorrectly\n\t\t\t// positioned in IE7. It also happens that it remains sticky and user cannot\n\t\t\t// scroll down/up to reveal dialog's content below/above the viewport; this is\n\t\t\t// cumbersome.\n\t\t\t// The only way to fix this is to move mouse out of the browser and\n\t\t\t// go back to see that dialog position is automagically fixed. No events,\n\t\t\t// no style change - pure magic. This is a IE7 rendering issue, which can be\n\t\t\t// fixed with dummy style redraw on each move.\n\t\t\tif ( CKEDITOR.env.ie )\n\t\t\t\telement.setStyle( 'zoom', '100%' );\n\n\t\t\tif ( isFixed && this._.position && this._.position.x == x && this._.position.y == y )\n\t\t\t\treturn;\n\n\t\t\t// Save the current position.\n\t\t\tthis._.position = { x: x, y: y };\n\n\t\t\t// If not fixed positioned, add scroll position to the coordinates.\n\t\t\tif ( !isFixed ) {\n\t\t\t\tvar scrollPosition = CKEDITOR.document.getWindow().getScrollPosition();\n\t\t\t\tx += scrollPosition.x;\n\t\t\t\ty += scrollPosition.y;\n\t\t\t}\n\n\t\t\t// Translate coordinate for RTL.\n\t\t\tif ( rtl ) {\n\t\t\t\tvar dialogSize = this.getSize(), viewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize();\n\t\t\t\tx = viewPaneSize.width - dialogSize.width - x;\n\t\t\t}\n\n\t\t\tvar styles = { 'top': ( y > 0 ? y : 0 ) + 'px' };\n\t\t\tstyles[ rtl ? 'right' : 'left' ] = ( x > 0 ? x : 0 ) + 'px';\n\n\t\t\telement.setStyles( styles );\n\n\t\t\tsave && ( this._.moved = 1 );\n\t\t},\n\n\t\t/**\n\t\t * Gets the dialog's position in the window.\n\t\t *\n\t\t *\t\tvar dialogX = dialogObj.getPosition().x;\n\t\t *\n\t\t * @returns {Object}\n\t\t * @returns {Number} return.x\n\t\t * @returns {Number} return.y\n\t\t */\n\t\tgetPosition: function() {\n\t\t\treturn CKEDITOR.tools.extend( {}, this._.position );\n\t\t},\n\n\t\t/**\n\t\t * Shows the dialog box.\n\t\t *\n\t\t *\t\tdialogObj.show();\n\t\t */\n\t\tshow: function() {\n\t\t\t// Insert the dialog's element to the root document.\n\t\t\tvar element = this._.element;\n\t\t\tvar definition = this.definition;\n\t\t\tif ( !( element.getParent() && element.getParent().equals( CKEDITOR.document.getBody() ) ) )\n\t\t\t\telement.appendTo( CKEDITOR.document.getBody() );\n\t\t\telse\n\t\t\t\telement.setStyle( 'display', 'block' );\n\n\t\t\t// First, set the dialog to an appropriate size.\n\t\t\tthis.resize(\n\t\t\t\tthis._.contentSize && this._.contentSize.width || definition.width || definition.minWidth,\n\t\t\t\tthis._.contentSize && this._.contentSize.height || definition.height || definition.minHeight\n\t\t\t);\n\n\t\t\t// Reset all inputs back to their default value.\n\t\t\tthis.reset();\n\n\t\t\t// Selects the first tab if no tab is already selected.\n\t\t\tif ( this._.currentTabId === null ) {\n\t\t\t\tthis.selectPage( this.definition.contents[ 0 ].id );\n\t\t\t}\n\n\t\t\t// Set z-index.\n\t\t\tif ( CKEDITOR.dialog._.currentZIndex === null )\n\t\t\t\tCKEDITOR.dialog._.currentZIndex = this._.editor.config.baseFloatZIndex;\n\t\t\tthis._.element.getFirst().setStyle( 'z-index', CKEDITOR.dialog._.currentZIndex += 10 );\n\n\t\t\t// Maintain the dialog ordering and dialog cover.\n\t\t\tif ( CKEDITOR.dialog._.currentTop === null ) {\n\t\t\t\tCKEDITOR.dialog._.currentTop = this;\n\t\t\t\tthis._.parentDialog = null;\n\t\t\t\tshowCover( this._.editor );\n\n\t\t\t} else {\n\t\t\t\tthis._.parentDialog = CKEDITOR.dialog._.currentTop;\n\t\t\t\tvar parentElement = this._.parentDialog.getElement().getFirst();\n\t\t\t\tparentElement.$.style.zIndex -= Math.floor( this._.editor.config.baseFloatZIndex / 2 );\n\t\t\t\tCKEDITOR.dialog._.currentTop = this;\n\t\t\t}\n\n\t\t\telement.on( 'keydown', accessKeyDownHandler );\n\t\t\telement.on( 'keyup', accessKeyUpHandler );\n\n\t\t\t// Reset the hasFocus state.\n\t\t\tthis._.hasFocus = false;\n\n\t\t\tfor ( var i in definition.contents ) {\n\t\t\t\tif ( !definition.contents[ i ] )\n\t\t\t\t\tcontinue;\n\n\t\t\t\tvar content = definition.contents[ i ],\n\t\t\t\t\ttab = this._.tabs[ content.id ],\n\t\t\t\t\trequiredContent = content.requiredContent,\n\t\t\t\t\tenableElements = 0;\n\n\t\t\t\tif ( !tab )\n\t\t\t\t\tcontinue;\n\n\t\t\t\tfor ( var j in this._.contents[ content.id ] ) {\n\t\t\t\t\tvar elem = this._.contents[ content.id ][ j ];\n\n\t\t\t\t\tif ( elem.type == 'hbox' || elem.type == 'vbox' || !elem.getInputElement() )\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif ( elem.requiredContent && !this._.editor.activeFilter.check( elem.requiredContent ) )\n\t\t\t\t\t\telem.disable();\n\t\t\t\t\telse {\n\t\t\t\t\t\telem.enable();\n\t\t\t\t\t\tenableElements++;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( !enableElements || ( requiredContent && !this._.editor.activeFilter.check( requiredContent ) ) )\n\t\t\t\t\ttab[ 0 ].addClass( 'cke_dialog_tab_disabled' );\n\t\t\t\telse\n\t\t\t\t\ttab[ 0 ].removeClass( 'cke_dialog_tab_disabled' );\n\t\t\t}\n\n\t\t\tCKEDITOR.tools.setTimeout( function() {\n\t\t\t\tthis.layout();\n\t\t\t\tresizeWithWindow( this );\n\n\t\t\t\tthis.parts.dialog.setStyle( 'visibility', '' );\n\n\t\t\t\t// Execute onLoad for the first show.\n\t\t\t\tthis.fireOnce( 'load', {} );\n\t\t\t\tCKEDITOR.ui.fire( 'ready', this );\n\n\t\t\t\tthis.fire( 'show', {} );\n\t\t\t\tthis._.editor.fire( 'dialogShow', this );\n\n\t\t\t\tif ( !this._.parentDialog )\n\t\t\t\t\tthis._.editor.focusManager.lock();\n\n\t\t\t\t// Save the initial values of the dialog.\n\t\t\t\tthis.foreach( function( contentObj ) {\n\t\t\t\t\tcontentObj.setInitValue && contentObj.setInitValue();\n\t\t\t\t} );\n\n\t\t\t}, 100, this );\n\t\t},\n\n\t\t/**\n\t\t * Rearrange the dialog to its previous position or the middle of the window.\n\t\t *\n\t\t * @since 3.5\n\t\t */\n\t\tlayout: function() {\n\t\t\tvar el = this.parts.dialog;\n\t\t\tvar dialogSize = this.getSize();\n\t\t\tvar win = CKEDITOR.document.getWindow(),\n\t\t\t\t\tviewSize = win.getViewPaneSize();\n\n\t\t\tvar posX = ( viewSize.width - dialogSize.width ) / 2,\n\t\t\t\tposY = ( viewSize.height - dialogSize.height ) / 2;\n\n\t\t\t// Switch to absolute position when viewport is smaller than dialog size.\n\t\t\tif ( !CKEDITOR.env.ie6Compat ) {\n\t\t\t\tif ( dialogSize.height + ( posY > 0 ? posY : 0 ) > viewSize.height || dialogSize.width + ( posX > 0 ? posX : 0 ) > viewSize.width ) {\n\t\t\t\t\tel.setStyle( 'position', 'absolute' );\n\t\t\t\t} else {\n\t\t\t\t\tel.setStyle( 'position', 'fixed' );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.move( this._.moved ? this._.position.x : posX, this._.moved ? this._.position.y : posY );\n\t\t},\n\n\t\t/**\n\t\t * Executes a function for each UI element.\n\t\t *\n\t\t * @param {Function} fn Function to execute for each UI element.\n\t\t * @returns {CKEDITOR.dialog} The current dialog object.\n\t\t */\n\t\tforeach: function( fn ) {\n\t\t\tfor ( var i in this._.contents ) {\n\t\t\t\tfor ( var j in this._.contents[ i ] ) {\n\t\t\t\t\tfn.call( this, this._.contents[i][j] );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Resets all input values in the dialog.\n\t\t *\n\t\t *\t\tdialogObj.reset();\n\t\t *\n\t\t * @method\n\t\t * @chainable\n\t\t */\n\t\treset: ( function() {\n\t\t\tvar fn = function( widget ) {\n\t\t\t\t\tif ( widget.reset )\n\t\t\t\t\t\twidget.reset( 1 );\n\t\t\t\t};\n\t\t\treturn function() {\n\t\t\t\tthis.foreach( fn );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t} )(),\n\n\n\t\t/**\n\t\t * Calls the {@link CKEDITOR.dialog.definition.uiElement#setup} method of each\n\t\t * of the UI elements, with the arguments passed through it.\n\t\t * It is usually being called when the dialog is opened, to put the initial value inside the field.\n\t\t *\n\t\t *\t\tdialogObj.setupContent();\n\t\t *\n\t\t *\t\tvar timestamp = ( new Date() ).valueOf();\n\t\t *\t\tdialogObj.setupContent( timestamp );\n\t\t */\n\t\tsetupContent: function() {\n\t\t\tvar args = arguments;\n\t\t\tthis.foreach( function( widget ) {\n\t\t\t\tif ( widget.setup )\n\t\t\t\t\twidget.setup.apply( widget, args );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Calls the {@link CKEDITOR.dialog.definition.uiElement#commit} method of each\n\t\t * of the UI elements, with the arguments passed through it.\n\t\t * It is usually being called when the user confirms the dialog, to process the values.\n\t\t *\n\t\t *\t\tdialogObj.commitContent();\n\t\t *\n\t\t *\t\tvar timestamp = ( new Date() ).valueOf();\n\t\t *\t\tdialogObj.commitContent( timestamp );\n\t\t */\n\t\tcommitContent: function() {\n\t\t\tvar args = arguments;\n\t\t\tthis.foreach( function( widget ) {\n\t\t\t\t// Make sure IE triggers \"change\" event on last focused input before closing the dialog. (http://dev.ckeditor.com/ticket/7915)\n\t\t\t\tif ( CKEDITOR.env.ie && this._.currentFocusIndex == widget.focusIndex )\n\t\t\t\t\twidget.getInputElement().$.blur();\n\n\t\t\t\tif ( widget.commit )\n\t\t\t\t\twidget.commit.apply( widget, args );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * Hides the dialog box.\n\t\t *\n\t\t *\t\tdialogObj.hide();\n\t\t */\n\t\thide: function() {\n\t\t\tif ( !this.parts.dialog.isVisible() )\n\t\t\t\treturn;\n\n\t\t\tthis.fire( 'hide', {} );\n\t\t\tthis._.editor.fire( 'dialogHide', this );\n\t\t\t// Reset the tab page.\n\t\t\tthis.selectPage( this._.tabIdList[ 0 ] );\n\t\t\tvar element = this._.element;\n\t\t\telement.setStyle( 'display', 'none' );\n\t\t\tthis.parts.dialog.setStyle( 'visibility', 'hidden' );\n\t\t\t// Unregister all access keys associated with this dialog.\n\t\t\tunregisterAccessKey( this );\n\n\t\t\t// Close any child(top) dialogs first.\n\t\t\twhile ( CKEDITOR.dialog._.currentTop != this )\n\t\t\t\tCKEDITOR.dialog._.currentTop.hide();\n\n\t\t\t// Maintain dialog ordering and remove cover if needed.\n\t\t\tif ( !this._.parentDialog )\n\t\t\t\thideCover( this._.editor );\n\t\t\telse {\n\t\t\t\tvar parentElement = this._.parentDialog.getElement().getFirst();\n\t\t\t\tparentElement.setStyle( 'z-index', parseInt( parentElement.$.style.zIndex, 10 ) + Math.floor( this._.editor.config.baseFloatZIndex / 2 ) );\n\t\t\t}\n\t\t\tCKEDITOR.dialog._.currentTop = this._.parentDialog;\n\n\t\t\t// Deduct or clear the z-index.\n\t\t\tif ( !this._.parentDialog ) {\n\t\t\t\tCKEDITOR.dialog._.currentZIndex = null;\n\n\t\t\t\t// Remove access key handlers.\n\t\t\t\telement.removeListener( 'keydown', accessKeyDownHandler );\n\t\t\t\telement.removeListener( 'keyup', accessKeyUpHandler );\n\n\t\t\t\tvar editor = this._.editor;\n\t\t\t\teditor.focus();\n\n\t\t\t\t// Give a while before unlock, waiting for focus to return to the editable. (http://dev.ckeditor.com/ticket/172)\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\teditor.focusManager.unlock();\n\n\t\t\t\t\t// Fixed iOS focus issue (http://dev.ckeditor.com/ticket/12381).\n\t\t\t\t\t// Keep in mind that editor.focus() does not work in this case.\n\t\t\t\t\tif ( CKEDITOR.env.iOS ) {\n\t\t\t\t\t\teditor.window.focus();\n\t\t\t\t\t}\n\t\t\t\t}, 0 );\n\n\t\t\t} else {\n\t\t\t\tCKEDITOR.dialog._.currentZIndex -= 10;\n\t\t\t}\n\n\t\t\tdelete this._.parentDialog;\n\t\t\t// Reset the initial values of the dialog.\n\t\t\tthis.foreach( function( contentObj ) {\n\t\t\t\tcontentObj.resetInitValue && contentObj.resetInitValue();\n\t\t\t} );\n\n\t\t\t// Reset dialog state back to IDLE, if busy (http://dev.ckeditor.com/ticket/13213).\n\t\t\tthis.setState( CKEDITOR.DIALOG_STATE_IDLE );\n\t\t},\n\n\t\t/**\n\t\t * Adds a tabbed page into the dialog.\n\t\t *\n\t\t * @param {Object} contents Content definition.\n\t\t */\n\t\taddPage: function( contents ) {\n\t\t\tif ( contents.requiredContent && !this._.editor.filter.check( contents.requiredContent ) )\n\t\t\t\treturn;\n\n\t\t\tvar pageHtml = [],\n\t\t\t\ttitleHtml = contents.label ? ' title=\"' + CKEDITOR.tools.htmlEncode( contents.label ) + '\"' : '',\n\t\t\t\tvbox = CKEDITOR.dialog._.uiElementBuilders.vbox.build( this, {\n\t\t\t\t\ttype: 'vbox',\n\t\t\t\t\tclassName: 'cke_dialog_page_contents',\n\t\t\t\t\tchildren: contents.elements,\n\t\t\t\t\texpand: !!contents.expand,\n\t\t\t\t\tpadding: contents.padding,\n\t\t\t\t\tstyle: contents.style || 'width: 100%;'\n\t\t\t\t}, pageHtml );\n\n\t\t\tvar contentMap = this._.contents[ contents.id ] = {},\n\t\t\t\tcursor,\n\t\t\t\tchildren = vbox.getChild(),\n\t\t\t\tenabledFields = 0;\n\n\t\t\twhile ( ( cursor = children.shift() ) ) {\n\t\t\t\t// Count all allowed fields.\n\t\t\t\tif ( !cursor.notAllowed && cursor.type != 'hbox' && cursor.type != 'vbox' )\n\t\t\t\t\tenabledFields++;\n\n\t\t\t\tcontentMap[ cursor.id ] = cursor;\n\t\t\t\tif ( typeof cursor.getChild == 'function' )\n\t\t\t\t\tchildren.push.apply( children, cursor.getChild() );\n\t\t\t}\n\n\t\t\t// If all fields are disabled (because they are not allowed) hide this tab.\n\t\t\tif ( !enabledFields )\n\t\t\t\tcontents.hidden = true;\n\n\t\t\t// Create the HTML for the tab and the content block.\n\t\t\tvar page = CKEDITOR.dom.element.createFromHtml( pageHtml.join( '' ) );\n\t\t\tpage.setAttribute( 'role', 'tabpanel' );\n\n\t\t\tvar env = CKEDITOR.env;\n\t\t\tvar tabId = 'cke_' + contents.id + '_' + CKEDITOR.tools.getNextNumber(),\n\t\t\t\ttab = CKEDITOR.dom.element.createFromHtml( [\n\t\t\t\t\t' 0 ? ' cke_last' : 'cke_first' ),\n\t\t\t\t\ttitleHtml,\n\t\t\t\t\t( !!contents.hidden ? ' style=\"display:none\"' : '' ),\n\t\t\t\t\t' id=\"', tabId, '\"',\n\t\t\t\t\tenv.gecko && !env.hc ? '' : ' href=\"javascript:void(0)\"',\n\t\t\t\t\t' tabIndex=\"-1\"',\n\t\t\t\t\t' hidefocus=\"true\"',\n\t\t\t\t\t' role=\"tab\">',\n\t\t\t\t\tcontents.label,\n\t\t\t\t\t''\n\t\t\t\t].join( '' ) );\n\n\t\t\tpage.setAttribute( 'aria-labelledby', tabId );\n\n\t\t\t// Take records for the tabs and elements created.\n\t\t\tthis._.tabs[ contents.id ] = [ tab, page ];\n\t\t\tthis._.tabIdList.push( contents.id );\n\t\t\t!contents.hidden && this._.pageCount++;\n\t\t\tthis._.lastTab = tab;\n\t\t\tthis.updateStyle();\n\n\t\t\t// Attach the DOM nodes.\n\n\t\t\tpage.setAttribute( 'name', contents.id );\n\t\t\tpage.appendTo( this.parts.contents );\n\n\t\t\ttab.unselectable();\n\t\t\tthis.parts.tabs.append( tab );\n\n\t\t\t// Add access key handlers if access key is defined.\n\t\t\tif ( contents.accessKey ) {\n\t\t\t\tregisterAccessKey( this, this, 'CTRL+' + contents.accessKey, tabAccessKeyDown, tabAccessKeyUp );\n\t\t\t\tthis._.accessKeyMap[ 'CTRL+' + contents.accessKey ] = contents.id;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Activates a tab page in the dialog by its id.\n\t\t *\n\t\t *\t\tdialogObj.selectPage( 'tab_1' );\n\t\t *\n\t\t * @param {String} id The id of the dialog tab to be activated.\n\t\t */\n\t\tselectPage: function( id ) {\n\t\t\tif ( this._.currentTabId == id )\n\t\t\t\treturn;\n\n\t\t\tif ( this._.tabs[ id ][ 0 ].hasClass( 'cke_dialog_tab_disabled' ) )\n\t\t\t\treturn;\n\n\t\t\t// If event was canceled - do nothing.\n\t\t\tif ( this.fire( 'selectPage', { page: id, currentPage: this._.currentTabId } ) === false )\n\t\t\t\treturn;\n\n\t\t\t// Hide the non-selected tabs and pages.\n\t\t\tfor ( var i in this._.tabs ) {\n\t\t\t\tvar tab = this._.tabs[ i ][ 0 ],\n\t\t\t\t\tpage = this._.tabs[ i ][ 1 ];\n\t\t\t\tif ( i != id ) {\n\t\t\t\t\ttab.removeClass( 'cke_dialog_tab_selected' );\n\t\t\t\t\tpage.hide();\n\t\t\t\t}\n\t\t\t\tpage.setAttribute( 'aria-hidden', i != id );\n\t\t\t}\n\n\t\t\tvar selected = this._.tabs[ id ];\n\t\t\tselected[ 0 ].addClass( 'cke_dialog_tab_selected' );\n\n\t\t\t// [IE] an invisible input[type='text'] will enlarge it's width\n\t\t\t// if it's value is long when it shows, so we clear it's value\n\t\t\t// before it shows and then recover it (http://dev.ckeditor.com/ticket/5649)\n\t\t\tif ( CKEDITOR.env.ie6Compat || CKEDITOR.env.ie7Compat ) {\n\t\t\t\tclearOrRecoverTextInputValue( selected[ 1 ] );\n\t\t\t\tselected[ 1 ].show();\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tclearOrRecoverTextInputValue( selected[ 1 ], 1 );\n\t\t\t\t}, 0 );\n\t\t\t} else {\n\t\t\t\tselected[ 1 ].show();\n\t\t\t}\n\n\t\t\tthis._.currentTabId = id;\n\t\t\tthis._.currentTabIndex = CKEDITOR.tools.indexOf( this._.tabIdList, id );\n\t\t},\n\n\t\t/**\n\t\t * Dialog state-specific style updates.\n\t\t */\n\t\tupdateStyle: function() {\n\t\t\t// If only a single page shown, a different style is used in the central pane.\n\t\t\tthis.parts.dialog[ ( this._.pageCount === 1 ? 'add' : 'remove' ) + 'Class' ]( 'cke_single_page' );\n\t\t},\n\n\t\t/**\n\t\t * Hides a page's tab away from the dialog.\n\t\t *\n\t\t *\t\tdialog.hidePage( 'tab_3' );\n\t\t *\n\t\t * @param {String} id The page's Id.\n\t\t */\n\t\thidePage: function( id ) {\n\t\t\tvar tab = this._.tabs[ id ] && this._.tabs[ id ][ 0 ];\n\t\t\tif ( !tab || this._.pageCount == 1 || !tab.isVisible() )\n\t\t\t\treturn;\n\t\t\t// Switch to other tab first when we're hiding the active tab.\n\t\t\telse if ( id == this._.currentTabId )\n\t\t\t\tthis.selectPage( getPreviousVisibleTab.call( this ) );\n\n\t\t\ttab.hide();\n\t\t\tthis._.pageCount--;\n\t\t\tthis.updateStyle();\n\t\t},\n\n\t\t/**\n\t\t * Unhides a page's tab.\n\t\t *\n\t\t *\t\tdialog.showPage( 'tab_2' );\n\t\t *\n\t\t * @param {String} id The page's Id.\n\t\t */\n\t\tshowPage: function( id ) {\n\t\t\tvar tab = this._.tabs[ id ] && this._.tabs[ id ][ 0 ];\n\t\t\tif ( !tab )\n\t\t\t\treturn;\n\t\t\ttab.show();\n\t\t\tthis._.pageCount++;\n\t\t\tthis.updateStyle();\n\t\t},\n\n\t\t/**\n\t\t * Gets the root DOM element of the dialog.\n\t\t *\n\t\t *\t\tvar dialogElement = dialogObj.getElement().getFirst();\n\t\t *\t\tdialogElement.setStyle( 'padding', '5px' );\n\t\t *\n\t\t * @returns {CKEDITOR.dom.element} The `` element containing this dialog.\n\t\t */\n\t\tgetElement: function() {\n\t\t\treturn this._.element;\n\t\t},\n\n\t\t/**\n\t\t * Gets the name of the dialog.\n\t\t *\n\t\t *\t\tvar dialogName = dialogObj.getName();\n\t\t *\n\t\t * @returns {String} The name of this dialog.\n\t\t */\n\t\tgetName: function() {\n\t\t\treturn this._.name;\n\t\t},\n\n\t\t/**\n\t\t * Gets a dialog UI element object from a dialog page.\n\t\t *\n\t\t *\t\tdialogObj.getContentElement( 'tabId', 'elementId' ).setValue( 'Example' );\n\t\t *\n\t\t * @param {String} pageId id of dialog page.\n\t\t * @param {String} elementId id of UI element.\n\t\t * @returns {CKEDITOR.ui.dialog.uiElement} The dialog UI element.\n\t\t */\n\t\tgetContentElement: function( pageId, elementId ) {\n\t\t\tvar page = this._.contents[ pageId ];\n\t\t\treturn page && page[ elementId ];\n\t\t},\n\n\t\t/**\n\t\t * Gets the value of a dialog UI element.\n\t\t *\n\t\t *\t\talert( dialogObj.getValueOf( 'tabId', 'elementId' ) );\n\t\t *\n\t\t * @param {String} pageId id of dialog page.\n\t\t * @param {String} elementId id of UI element.\n\t\t * @returns {Object} The value of the UI element.\n\t\t */\n\t\tgetValueOf: function( pageId, elementId ) {\n\t\t\treturn this.getContentElement( pageId, elementId ).getValue();\n\t\t},\n\n\t\t/**\n\t\t * Sets the value of a dialog UI element.\n\t\t *\n\t\t *\t\tdialogObj.setValueOf( 'tabId', 'elementId', 'Example' );\n\t\t *\n\t\t * @param {String} pageId id of the dialog page.\n\t\t * @param {String} elementId id of the UI element.\n\t\t * @param {Object} value The new value of the UI element.\n\t\t */\n\t\tsetValueOf: function( pageId, elementId, value ) {\n\t\t\treturn this.getContentElement( pageId, elementId ).setValue( value );\n\t\t},\n\n\t\t/**\n\t\t * Gets the UI element of a button in the dialog's button row.\n\t\t *\n\t\t *\t\t@returns {CKEDITOR.ui.dialog.button} The button object.\n\t\t *\n\t\t * @param {String} id The id of the button.\n\t\t */\n\t\tgetButton: function( id ) {\n\t\t\treturn this._.buttons[ id ];\n\t\t},\n\n\t\t/**\n\t\t * Simulates a click to a dialog button in the dialog's button row.\n\t\t *\n\t\t * @returns The return value of the dialog's `click` event.\n\t\t *\n\t\t * @param {String} id The id of the button.\n\t\t */\n\t\tclick: function( id ) {\n\t\t\treturn this._.buttons[ id ].click();\n\t\t},\n\n\t\t/**\n\t\t * Disables a dialog button.\n\t\t *\n\t\t * @param {String} id The id of the button.\n\t\t */\n\t\tdisableButton: function( id ) {\n\t\t\treturn this._.buttons[ id ].disable();\n\t\t},\n\n\t\t/**\n\t\t * Enables a dialog button.\n\t\t *\n\t\t * @param {String} id The id of the button.\n\t\t */\n\t\tenableButton: function( id ) {\n\t\t\treturn this._.buttons[ id ].enable();\n\t\t},\n\n\t\t/**\n\t\t * Gets the number of pages in the dialog.\n\t\t *\n\t\t * @returns {Number} Page count.\n\t\t */\n\t\tgetPageCount: function() {\n\t\t\treturn this._.pageCount;\n\t\t},\n\n\t\t/**\n\t\t * Gets the editor instance which opened this dialog.\n\t\t *\n\t\t * @returns {CKEDITOR.editor} Parent editor instances.\n\t\t */\n\t\tgetParentEditor: function() {\n\t\t\treturn this._.editor;\n\t\t},\n\n\t\t/**\n\t\t * Gets the element that was selected when opening the dialog, if any.\n\t\t *\n\t\t * @returns {CKEDITOR.dom.element} The element that was selected, or `null`.\n\t\t */\n\t\tgetSelectedElement: function() {\n\t\t\treturn this.getParentEditor().getSelection().getSelectedElement();\n\t\t},\n\n\t\t/**\n\t\t * Adds element to dialog's focusable list.\n\t\t *\n\t\t * @param {CKEDITOR.dom.element} element\n\t\t * @param {Number} [index]\n\t\t */\n\t\taddFocusable: function( element, index ) {\n\t\t\tif ( typeof index == 'undefined' ) {\n\t\t\t\tindex = this._.focusList.length;\n\t\t\t\tthis._.focusList.push( new Focusable( this, element, index ) );\n\t\t\t} else {\n\t\t\t\tthis._.focusList.splice( index, 0, new Focusable( this, element, index ) );\n\t\t\t\tfor ( var i = index + 1; i < this._.focusList.length; i++ )\n\t\t\t\t\tthis._.focusList[ i ].focusIndex++;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Sets the dialog {@link #property-state}.\n\t\t *\n\t\t * @since 4.5\n\t\t * @param {Number} state Either {@link CKEDITOR#DIALOG_STATE_IDLE} or {@link CKEDITOR#DIALOG_STATE_BUSY}.\n\t\t */\n\t\tsetState: function( state ) {\n\t\t\tvar oldState = this.state;\n\n\t\t\tif ( oldState == state ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis.state = state;\n\n\t\t\tif ( state == CKEDITOR.DIALOG_STATE_BUSY ) {\n\t\t\t\t// Insert the spinner on demand.\n\t\t\t\tif ( !this.parts.spinner ) {\n\t\t\t\t\tvar dir = this.getParentEditor().lang.dir,\n\t\t\t\t\t\tspinnerDef = {\n\t\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t\t'class': 'cke_dialog_spinner'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tstyles: {\n\t\t\t\t\t\t\t\t'float': dir == 'rtl' ? 'right' : 'left'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\tspinnerDef.styles[ 'margin-' + ( dir == 'rtl' ? 'left' : 'right' ) ] = '8px';\n\n\t\t\t\t\tthis.parts.spinner = CKEDITOR.document.createElement( 'div', spinnerDef );\n\n\t\t\t\t\tthis.parts.spinner.setHtml( '⌛' );\n\t\t\t\t\tthis.parts.spinner.appendTo( this.parts.title, 1 );\n\t\t\t\t}\n\n\t\t\t\t// Finally, show the spinner.\n\t\t\t\tthis.parts.spinner.show();\n\n\t\t\t\tthis.getButton( 'ok' ).disable();\n\t\t\t} else if ( state == CKEDITOR.DIALOG_STATE_IDLE ) {\n\t\t\t\t// Hide the spinner. But don't do anything if there is no spinner yet.\n\t\t\t\tthis.parts.spinner && this.parts.spinner.hide();\n\n\t\t\t\tthis.getButton( 'ok' ).enable();\n\t\t\t}\n\n\t\t\tthis.fire( 'state', state );\n\t\t}\n\t};\n\n\tCKEDITOR.tools.extend( CKEDITOR.dialog, {\n\t\t/**\n\t\t * Registers a dialog.\n\t\t *\n\t\t *\t\t// Full sample plugin, which does not only register a dialog window but also adds an item to the context menu.\n\t\t *\t\t// To open the dialog window, choose \"Open dialog\" in the context menu.\n\t\t *\t\tCKEDITOR.plugins.add( 'myplugin', {\n\t\t *\t\t\tinit: function( editor ) {\n\t\t *\t\t\t\teditor.addCommand( 'mydialog',new CKEDITOR.dialogCommand( 'mydialog' ) );\n\t\t *\n\t\t *\t\t\t\tif ( editor.contextMenu ) {\n\t\t *\t\t\t\t\teditor.addMenuGroup( 'mygroup', 10 );\n\t\t *\t\t\t\t\teditor.addMenuItem( 'My Dialog', {\n\t\t *\t\t\t\t\t\tlabel: 'Open dialog',\n\t\t *\t\t\t\t\t\tcommand: 'mydialog',\n\t\t *\t\t\t\t\t\tgroup: 'mygroup'\n\t\t *\t\t\t\t\t} );\n\t\t *\t\t\t\t\teditor.contextMenu.addListener( function( element ) {\n\t\t *\t\t\t\t\t\treturn { 'My Dialog': CKEDITOR.TRISTATE_OFF };\n\t\t *\t\t\t\t\t} );\n\t\t *\t\t\t\t}\n\t\t *\n\t\t *\t\t\t\tCKEDITOR.dialog.add( 'mydialog', function( api ) {\n\t\t *\t\t\t\t\t// CKEDITOR.dialog.definition\n\t\t *\t\t\t\t\tvar dialogDefinition = {\n\t\t *\t\t\t\t\t\ttitle: 'Sample dialog',\n\t\t *\t\t\t\t\t\tminWidth: 390,\n\t\t *\t\t\t\t\t\tminHeight: 130,\n\t\t *\t\t\t\t\t\tcontents: [\n\t\t *\t\t\t\t\t\t\t{\n\t\t *\t\t\t\t\t\t\t\tid: 'tab1',\n\t\t *\t\t\t\t\t\t\t\tlabel: 'Label',\n\t\t *\t\t\t\t\t\t\t\ttitle: 'Title',\n\t\t *\t\t\t\t\t\t\t\texpand: true,\n\t\t *\t\t\t\t\t\t\t\tpadding: 0,\n\t\t *\t\t\t\t\t\t\t\telements: [\n\t\t *\t\t\t\t\t\t\t\t\t{\n\t\t *\t\t\t\t\t\t\t\t\t\ttype: 'html',\n\t\t *\t\t\t\t\t\t\t\t\t\thtml: '

This is some sample HTML content.

'\n\t\t *\t\t\t\t\t\t\t\t\t},\n\t\t *\t\t\t\t\t\t\t\t\t{\n\t\t *\t\t\t\t\t\t\t\t\t\ttype: 'textarea',\n\t\t *\t\t\t\t\t\t\t\t\t\tid: 'textareaId',\n\t\t *\t\t\t\t\t\t\t\t\t\trows: 4,\n\t\t *\t\t\t\t\t\t\t\t\t\tcols: 40\n\t\t *\t\t\t\t\t\t\t\t\t}\n\t\t *\t\t\t\t\t\t\t\t]\n\t\t *\t\t\t\t\t\t\t}\n\t\t *\t\t\t\t\t\t],\n\t\t *\t\t\t\t\t\tbuttons: [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ],\n\t\t *\t\t\t\t\t\tonOk: function() {\n\t\t *\t\t\t\t\t\t\t// \"this\" is now a CKEDITOR.dialog object.\n\t\t *\t\t\t\t\t\t\t// Accessing dialog elements:\n\t\t *\t\t\t\t\t\t\tvar textareaObj = this.getContentElement( 'tab1', 'textareaId' );\n\t\t *\t\t\t\t\t\t\talert( \"You have entered: \" + textareaObj.getValue() );\n\t\t *\t\t\t\t\t\t}\n\t\t *\t\t\t\t\t};\n\t\t *\n\t\t *\t\t\t\t\treturn dialogDefinition;\n\t\t *\t\t\t\t} );\n\t\t *\t\t\t}\n\t\t *\t\t} );\n\t\t *\n\t\t *\t\tCKEDITOR.replace( 'editor1', { extraPlugins: 'myplugin' } );\n\t\t *\n\t\t * @static\n\t\t * @param {String} name The dialog's name.\n\t\t * @param {Function/String} dialogDefinition\n\t\t * A function returning the dialog's definition, or the URL to the `.js` file holding the function.\n\t\t * The function should accept an argument `editor` which is the current editor instance, and\n\t\t * return an object conforming to {@link CKEDITOR.dialog.definition}.\n\t\t * @see CKEDITOR.dialog.definition\n\t\t */\n\t\tadd: function( name, dialogDefinition ) {\n\t\t\t// Avoid path registration from multiple instances override definition.\n\t\t\tif ( !this._.dialogDefinitions[ name ] || typeof dialogDefinition == 'function' )\n\t\t\t\tthis._.dialogDefinitions[ name ] = dialogDefinition;\n\t\t},\n\n\t\t/**\n\t\t * @static\n\t\t * @todo\n\t\t */\n\t\texists: function( name ) {\n\t\t\treturn !!this._.dialogDefinitions[ name ];\n\t\t},\n\n\t\t/**\n\t\t * @static\n\t\t * @todo\n\t\t */\n\t\tgetCurrent: function() {\n\t\t\treturn CKEDITOR.dialog._.currentTop;\n\t\t},\n\n\t\t/**\n\t\t * Check whether tab wasn't removed by {@link CKEDITOR.config#removeDialogTabs}.\n\t\t *\n\t\t * @since 4.1\n\t\t * @static\n\t\t * @param {CKEDITOR.editor} editor\n\t\t * @param {String} dialogName\n\t\t * @param {String} tabName\n\t\t * @returns {Boolean}\n\t\t */\n\t\tisTabEnabled: function( editor, dialogName, tabName ) {\n\t\t\tvar cfg = editor.config.removeDialogTabs;\n\n\t\t\treturn !( cfg && cfg.match( new RegExp( '(?:^|;)' + dialogName + ':' + tabName + '(?:$|;)', 'i' ) ) );\n\t\t},\n\n\t\t/**\n\t\t * The default OK button for dialogs. Fires the `ok` event and closes the dialog if the event succeeds.\n\t\t *\n\t\t * @static\n\t\t * @method\n\t\t */\n\t\tokButton: ( function() {\n\t\t\tvar retval = function( editor, override ) {\n\t\t\t\t\toverride = override || {};\n\t\t\t\t\treturn CKEDITOR.tools.extend( {\n\t\t\t\t\t\tid: 'ok',\n\t\t\t\t\t\ttype: 'button',\n\t\t\t\t\t\tlabel: editor.lang.common.ok,\n\t\t\t\t\t\t'class': 'cke_dialog_ui_button_ok',\n\t\t\t\t\t\tonClick: function( evt ) {\n\t\t\t\t\t\t\tvar dialog = evt.data.dialog;\n\t\t\t\t\t\t\tif ( dialog.fire( 'ok', { hide: true } ).hide !== false )\n\t\t\t\t\t\t\t\tdialog.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, override, true );\n\t\t\t\t};\n\t\t\tretval.type = 'button';\n\t\t\tretval.override = function( override ) {\n\t\t\t\treturn CKEDITOR.tools.extend( function( editor ) {\n\t\t\t\t\treturn retval( editor, override );\n\t\t\t\t}, { type: 'button' }, true );\n\t\t\t};\n\t\t\treturn retval;\n\t\t} )(),\n\n\t\t/**\n\t\t * The default cancel button for dialogs. Fires the `cancel` event and\n\t\t * closes the dialog if no UI element value changed.\n\t\t *\n\t\t * @static\n\t\t * @method\n\t\t */\n\t\tcancelButton: ( function() {\n\t\t\tvar retval = function( editor, override ) {\n\t\t\t\t\toverride = override || {};\n\t\t\t\t\treturn CKEDITOR.tools.extend( {\n\t\t\t\t\t\tid: 'cancel',\n\t\t\t\t\t\ttype: 'button',\n\t\t\t\t\t\tlabel: editor.lang.common.cancel,\n\t\t\t\t\t\t'class': 'cke_dialog_ui_button_cancel',\n\t\t\t\t\t\tonClick: function( evt ) {\n\t\t\t\t\t\t\tvar dialog = evt.data.dialog;\n\t\t\t\t\t\t\tif ( dialog.fire( 'cancel', { hide: true } ).hide !== false )\n\t\t\t\t\t\t\t\tdialog.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, override, true );\n\t\t\t\t};\n\t\t\tretval.type = 'button';\n\t\t\tretval.override = function( override ) {\n\t\t\t\treturn CKEDITOR.tools.extend( function( editor ) {\n\t\t\t\t\treturn retval( editor, override );\n\t\t\t\t}, { type: 'button' }, true );\n\t\t\t};\n\t\t\treturn retval;\n\t\t} )(),\n\n\t\t/**\n\t\t * Registers a dialog UI element.\n\t\t *\n\t\t * @static\n\t\t * @param {String} typeName The name of the UI element.\n\t\t * @param {Function} builder The function to build the UI element.\n\t\t */\n\t\taddUIElement: function( typeName, builder ) {\n\t\t\tthis._.uiElementBuilders[ typeName ] = builder;\n\t\t}\n\t} );\n\n\tCKEDITOR.dialog._ = {\n\t\tuiElementBuilders: {},\n\n\t\tdialogDefinitions: {},\n\n\t\tcurrentTop: null,\n\n\t\tcurrentZIndex: null\n\t};\n\n\t// \"Inherit\" (copy actually) from CKEDITOR.event.\n\tCKEDITOR.event.implementOn( CKEDITOR.dialog );\n\tCKEDITOR.event.implementOn( CKEDITOR.dialog.prototype );\n\n\tvar defaultDialogDefinition = {\n\t\tresizable: CKEDITOR.DIALOG_RESIZE_BOTH,\n\t\tminWidth: 600,\n\t\tminHeight: 400,\n\t\tbuttons: [ CKEDITOR.dialog.okButton, CKEDITOR.dialog.cancelButton ]\n\t};\n\n\t// Tool function used to return an item from an array based on its id\n\t// property.\n\tvar getById = function( array, id, recurse ) {\n\t\t\tfor ( var i = 0, item;\n\t\t\t( item = array[ i ] ); i++ ) {\n\t\t\t\tif ( item.id == id )\n\t\t\t\t\treturn item;\n\t\t\t\tif ( recurse && item[ recurse ] ) {\n\t\t\t\t\tvar retval = getById( item[ recurse ], id, recurse );\n\t\t\t\t\tif ( retval )\n\t\t\t\t\t\treturn retval;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t// Tool function used to add an item into an array.\n\tvar addById = function( array, newItem, nextSiblingId, recurse, nullIfNotFound ) {\n\t\t\tif ( nextSiblingId ) {\n\t\t\t\tfor ( var i = 0, item;\n\t\t\t\t( item = array[ i ] ); i++ ) {\n\t\t\t\t\tif ( item.id == nextSiblingId ) {\n\t\t\t\t\t\tarray.splice( i, 0, newItem );\n\t\t\t\t\t\treturn newItem;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( recurse && item[ recurse ] ) {\n\t\t\t\t\t\tvar retval = addById( item[ recurse ], newItem, nextSiblingId, recurse, true );\n\t\t\t\t\t\tif ( retval )\n\t\t\t\t\t\t\treturn retval;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( nullIfNotFound )\n\t\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tarray.push( newItem );\n\t\t\treturn newItem;\n\t\t};\n\n\t// Tool function used to remove an item from an array based on its id.\n\tvar removeById = function( array, id, recurse ) {\n\t\t\tfor ( var i = 0, item;\n\t\t\t( item = array[ i ] ); i++ ) {\n\t\t\t\tif ( item.id == id )\n\t\t\t\t\treturn array.splice( i, 1 );\n\t\t\t\tif ( recurse && item[ recurse ] ) {\n\t\t\t\t\tvar retval = removeById( item[ recurse ], id, recurse );\n\t\t\t\t\tif ( retval )\n\t\t\t\t\t\treturn retval;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t/**\n\t * This class is not really part of the API. It is the `definition` property value\n\t * passed to `dialogDefinition` event handlers.\n\t *\n\t *\t\tCKEDITOR.on( 'dialogDefinition', function( evt ) {\n\t *\t\t\tvar definition = evt.data.definition;\n\t *\t\t\tvar content = definition.getContents( 'page1' );\n\t * \t\t\t// ...\n\t *\t\t} );\n\t *\n\t * @private\n\t * @class CKEDITOR.dialog.definitionObject\n\t * @extends CKEDITOR.dialog.definition\n\t * @constructor Creates a definitionObject class instance.\n\t */\n\tvar definitionObject = function( dialog, dialogDefinition ) {\n\t\t\t// TODO : Check if needed.\n\t\t\tthis.dialog = dialog;\n\n\t\t\t// Transform the contents entries in contentObjects.\n\t\t\tvar contents = dialogDefinition.contents;\n\t\t\tfor ( var i = 0, content;\n\t\t\t( content = contents[ i ] ); i++ )\n\t\t\t\tcontents[ i ] = content && new contentObject( dialog, content );\n\n\t\t\tCKEDITOR.tools.extend( this, dialogDefinition );\n\t\t};\n\n\tdefinitionObject.prototype = {\n\t\t/**\n\t\t * Gets a content definition.\n\t\t *\n\t\t * @param {String} id The id of the content definition.\n\t\t * @returns {CKEDITOR.dialog.definition.content} The content definition matching id.\n\t\t */\n\t\tgetContents: function( id ) {\n\t\t\treturn getById( this.contents, id );\n\t\t},\n\n\t\t/**\n\t\t * Gets a button definition.\n\t\t *\n\t\t * @param {String} id The id of the button definition.\n\t\t * @returns {CKEDITOR.dialog.definition.button} The button definition matching id.\n\t\t */\n\t\tgetButton: function( id ) {\n\t\t\treturn getById( this.buttons, id );\n\t\t},\n\n\t\t/**\n\t\t * Adds a content definition object under this dialog definition.\n\t\t *\n\t\t * @param {CKEDITOR.dialog.definition.content} contentDefinition The\n\t\t * content definition.\n\t\t * @param {String} [nextSiblingId] The id of an existing content\n\t\t * definition which the new content definition will be inserted\n\t\t * before. Omit if the new content definition is to be inserted as\n\t\t * the last item.\n\t\t * @returns {CKEDITOR.dialog.definition.content} The inserted content definition.\n\t\t */\n\t\taddContents: function( contentDefinition, nextSiblingId ) {\n\t\t\treturn addById( this.contents, contentDefinition, nextSiblingId );\n\t\t},\n\n\t\t/**\n\t\t * Adds a button definition object under this dialog definition.\n\t\t *\n\t\t * @param {CKEDITOR.dialog.definition.button} buttonDefinition The\n\t\t * button definition.\n\t\t * @param {String} [nextSiblingId] The id of an existing button\n\t\t * definition which the new button definition will be inserted\n\t\t * before. Omit if the new button definition is to be inserted as\n\t\t * the last item.\n\t\t * @returns {CKEDITOR.dialog.definition.button} The inserted button definition.\n\t\t */\n\t\taddButton: function( buttonDefinition, nextSiblingId ) {\n\t\t\treturn addById( this.buttons, buttonDefinition, nextSiblingId );\n\t\t},\n\n\t\t/**\n\t\t * Removes a content definition from this dialog definition.\n\t\t *\n\t\t * @param {String} id The id of the content definition to be removed.\n\t\t * @returns {CKEDITOR.dialog.definition.content} The removed content definition.\n\t\t */\n\t\tremoveContents: function( id ) {\n\t\t\tremoveById( this.contents, id );\n\t\t},\n\n\t\t/**\n\t\t * Removes a button definition from the dialog definition.\n\t\t *\n\t\t * @param {String} id The id of the button definition to be removed.\n\t\t * @returns {CKEDITOR.dialog.definition.button} The removed button definition.\n\t\t */\n\t\tremoveButton: function( id ) {\n\t\t\tremoveById( this.buttons, id );\n\t\t}\n\t};\n\n\t/**\n\t * This class is not really part of the API. It is the template of the\n\t * objects representing content pages inside the\n\t * CKEDITOR.dialog.definitionObject.\n\t *\n\t *\t\tCKEDITOR.on( 'dialogDefinition', function( evt ) {\n\t *\t\t\tvar definition = evt.data.definition;\n\t *\t\t\tvar content = definition.getContents( 'page1' );\n\t *\t\t\tcontent.remove( 'textInput1' );\n\t *\t\t\t// ...\n\t *\t\t} );\n\t *\n\t * @private\n\t * @class CKEDITOR.dialog.definition.contentObject\n\t * @constructor Creates a contentObject class instance.\n\t */\n\tfunction contentObject( dialog, contentDefinition ) {\n\t\tthis._ = {\n\t\t\tdialog: dialog\n\t\t};\n\n\t\tCKEDITOR.tools.extend( this, contentDefinition );\n\t}\n\n\tcontentObject.prototype = {\n\t\t/**\n\t\t * Gets a UI element definition under the content definition.\n\t\t *\n\t\t * @param {String} id The id of the UI element definition.\n\t\t * @returns {CKEDITOR.dialog.definition.uiElement}\n\t\t */\n\t\tget: function( id ) {\n\t\t\treturn getById( this.elements, id, 'children' );\n\t\t},\n\n\t\t/**\n\t\t * Adds a UI element definition to the content definition.\n\t\t *\n\t\t * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition The\n\t\t * UI elemnet definition to be added.\n\t\t * @param {String} nextSiblingId The id of an existing UI element\n\t\t * definition which the new UI element definition will be inserted\n\t\t * before. Omit if the new button definition is to be inserted as\n\t\t * the last item.\n\t\t * @returns {CKEDITOR.dialog.definition.uiElement} The element definition inserted.\n\t\t */\n\t\tadd: function( elementDefinition, nextSiblingId ) {\n\t\t\treturn addById( this.elements, elementDefinition, nextSiblingId, 'children' );\n\t\t},\n\n\t\t/**\n\t\t * Removes a UI element definition from the content definition.\n\t\t *\n\t\t * @param {String} id The id of the UI element definition to be removed.\n\t\t * @returns {CKEDITOR.dialog.definition.uiElement} The element definition removed.\n\t\t */\n\t\tremove: function( id ) {\n\t\t\tremoveById( this.elements, id, 'children' );\n\t\t}\n\t};\n\n\tfunction initDragAndDrop( dialog ) {\n\t\tvar lastCoords = null,\n\t\t\tabstractDialogCoords = null,\n\t\t\teditor = dialog.getParentEditor(),\n\t\t\tmagnetDistance = editor.config.dialog_magnetDistance,\n\t\t\tmargins = CKEDITOR.skin.margins || [ 0, 0, 0, 0 ];\n\n\t\tif ( typeof magnetDistance == 'undefined' )\n\t\t\tmagnetDistance = 20;\n\n\t\tfunction mouseMoveHandler( evt ) {\n\t\t\tvar dialogSize = dialog.getSize(),\n\t\t\t\tviewPaneSize = CKEDITOR.document.getWindow().getViewPaneSize(),\n\t\t\t\tx = evt.data.$.screenX,\n\t\t\t\ty = evt.data.$.screenY,\n\t\t\t\tdx = x - lastCoords.x,\n\t\t\t\tdy = y - lastCoords.y,\n\t\t\t\trealX, realY;\n\n\t\t\tlastCoords = { x: x, y: y };\n\t\t\tabstractDialogCoords.x += dx;\n\t\t\tabstractDialogCoords.y += dy;\n\n\t\t\tif ( abstractDialogCoords.x + margins[ 3 ] < magnetDistance )\n\t\t\t\trealX = -margins[ 3 ];\n\t\t\telse if ( abstractDialogCoords.x - margins[ 1 ] > viewPaneSize.width - dialogSize.width - magnetDistance )\n\t\t\t\trealX = viewPaneSize.width - dialogSize.width + ( editor.lang.dir == 'rtl' ? 0 : margins[ 1 ] );\n\t\t\telse\n\t\t\t\trealX = abstractDialogCoords.x;\n\n\t\t\tif ( abstractDialogCoords.y + margins[ 0 ] < magnetDistance )\n\t\t\t\trealY = -margins[ 0 ];\n\t\t\telse if ( abstractDialogCoords.y - margins[ 2 ] > viewPaneSize.height - dialogSize.height - magnetDistance )\n\t\t\t\trealY = viewPaneSize.height - dialogSize.height + margins[ 2 ];\n\t\t\telse\n\t\t\t\trealY = abstractDialogCoords.y;\n\n\t\t\tdialog.move( realX, realY, 1 );\n\n\t\t\tevt.data.preventDefault();\n\t\t}\n\n\t\tfunction mouseUpHandler() {\n\t\t\tCKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler );\n\t\t\tCKEDITOR.document.removeListener( 'mouseup', mouseUpHandler );\n\n\t\t\tif ( CKEDITOR.env.ie6Compat ) {\n\t\t\t\tvar coverDoc = currentCover.getChild( 0 ).getFrameDocument();\n\t\t\t\tcoverDoc.removeListener( 'mousemove', mouseMoveHandler );\n\t\t\t\tcoverDoc.removeListener( 'mouseup', mouseUpHandler );\n\t\t\t}\n\t\t}\n\n\t\tdialog.parts.title.on( 'mousedown', function( evt ) {\n\t\t\tlastCoords = { x: evt.data.$.screenX, y: evt.data.$.screenY };\n\n\t\t\tCKEDITOR.document.on( 'mousemove', mouseMoveHandler );\n\t\t\tCKEDITOR.document.on( 'mouseup', mouseUpHandler );\n\t\t\tabstractDialogCoords = dialog.getPosition();\n\n\t\t\tif ( CKEDITOR.env.ie6Compat ) {\n\t\t\t\tvar coverDoc = currentCover.getChild( 0 ).getFrameDocument();\n\t\t\t\tcoverDoc.on( 'mousemove', mouseMoveHandler );\n\t\t\t\tcoverDoc.on( 'mouseup', mouseUpHandler );\n\t\t\t}\n\n\t\t\tevt.data.preventDefault();\n\t\t}, dialog );\n\t}\n\n\tfunction initResizeHandles( dialog ) {\n\t\tvar def = dialog.definition,\n\t\t\tresizable = def.resizable;\n\n\t\tif ( resizable == CKEDITOR.DIALOG_RESIZE_NONE )\n\t\t\treturn;\n\n\t\tvar editor = dialog.getParentEditor();\n\t\tvar wrapperWidth, wrapperHeight, viewSize, origin, startSize, dialogCover;\n\n\t\tvar mouseDownFn = CKEDITOR.tools.addFunction( function( $event ) {\n\t\t\tstartSize = dialog.getSize();\n\n\t\t\tvar content = dialog.parts.contents,\n\t\t\t\tiframeDialog = content.$.getElementsByTagName( 'iframe' ).length;\n\n\t\t\t// Shim to help capturing \"mousemove\" over iframe.\n\t\t\tif ( iframeDialog ) {\n\t\t\t\tdialogCover = CKEDITOR.dom.element.createFromHtml( '
' );\n\t\t\t\tcontent.append( dialogCover );\n\t\t\t}\n\n\t\t\t// Calculate the offset between content and chrome size.\n\t\t\twrapperHeight = startSize.height - dialog.parts.contents.getSize( 'height', !( CKEDITOR.env.gecko || CKEDITOR.env.ie && CKEDITOR.env.quirks ) );\n\t\t\twrapperWidth = startSize.width - dialog.parts.contents.getSize( 'width', 1 );\n\n\t\t\torigin = { x: $event.screenX, y: $event.screenY };\n\n\t\t\tviewSize = CKEDITOR.document.getWindow().getViewPaneSize();\n\n\t\t\tCKEDITOR.document.on( 'mousemove', mouseMoveHandler );\n\t\t\tCKEDITOR.document.on( 'mouseup', mouseUpHandler );\n\n\t\t\tif ( CKEDITOR.env.ie6Compat ) {\n\t\t\t\tvar coverDoc = currentCover.getChild( 0 ).getFrameDocument();\n\t\t\t\tcoverDoc.on( 'mousemove', mouseMoveHandler );\n\t\t\t\tcoverDoc.on( 'mouseup', mouseUpHandler );\n\t\t\t}\n\n\t\t\t$event.preventDefault && $event.preventDefault();\n\t\t} );\n\n\t\t// Prepend the grip to the dialog.\n\t\tdialog.on( 'load', function() {\n\t\t\tvar direction = '';\n\t\t\tif ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH )\n\t\t\t\tdirection = ' cke_resizer_horizontal';\n\t\t\telse if ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT )\n\t\t\t\tdirection = ' cke_resizer_vertical';\n\t\t\tvar resizer = CKEDITOR.dom.element.createFromHtml(\n\t\t\t\t'' +\n\t\t\t\t// BLACK LOWER RIGHT TRIANGLE (ltr)\n\t\t\t\t// BLACK LOWER LEFT TRIANGLE (rtl)\n\t\t\t\t( editor.lang.dir == 'ltr' ? '\\u25E2' : '\\u25E3' ) +\n\t\t\t\t'
' );\n\t\t\tdialog.parts.footer.append( resizer, 1 );\n\t\t} );\n\t\teditor.on( 'destroy', function() {\n\t\t\tCKEDITOR.tools.removeFunction( mouseDownFn );\n\t\t} );\n\n\t\tfunction mouseMoveHandler( evt ) {\n\t\t\tvar rtl = editor.lang.dir == 'rtl',\n\t\t\t\tdx = ( evt.data.$.screenX - origin.x ) * ( rtl ? -1 : 1 ),\n\t\t\t\tdy = evt.data.$.screenY - origin.y,\n\t\t\t\twidth = startSize.width,\n\t\t\t\theight = startSize.height,\n\t\t\t\tinternalWidth = width + dx * ( dialog._.moved ? 1 : 2 ),\n\t\t\t\tinternalHeight = height + dy * ( dialog._.moved ? 1 : 2 ),\n\t\t\t\telement = dialog._.element.getFirst(),\n\t\t\t\tright = rtl && element.getComputedStyle( 'right' ),\n\t\t\t\tposition = dialog.getPosition();\n\n\t\t\tif ( position.y + internalHeight > viewSize.height )\n\t\t\t\tinternalHeight = viewSize.height - position.y;\n\n\t\t\tif ( ( rtl ? right : position.x ) + internalWidth > viewSize.width )\n\t\t\t\tinternalWidth = viewSize.width - ( rtl ? right : position.x );\n\n\t\t\t// Make sure the dialog will not be resized to the wrong side when it's in the leftmost position for RTL.\n\t\t\tif ( ( resizable == CKEDITOR.DIALOG_RESIZE_WIDTH || resizable == CKEDITOR.DIALOG_RESIZE_BOTH ) )\n\t\t\t\twidth = Math.max( def.minWidth || 0, internalWidth - wrapperWidth );\n\n\t\t\tif ( resizable == CKEDITOR.DIALOG_RESIZE_HEIGHT || resizable == CKEDITOR.DIALOG_RESIZE_BOTH )\n\t\t\t\theight = Math.max( def.minHeight || 0, internalHeight - wrapperHeight );\n\n\t\t\tdialog.resize( width, height );\n\n\t\t\tif ( !dialog._.moved )\n\t\t\t\tdialog.layout();\n\n\t\t\tevt.data.preventDefault();\n\t\t}\n\n\t\tfunction mouseUpHandler() {\n\t\t\tCKEDITOR.document.removeListener( 'mouseup', mouseUpHandler );\n\t\t\tCKEDITOR.document.removeListener( 'mousemove', mouseMoveHandler );\n\n\t\t\tif ( dialogCover ) {\n\t\t\t\tdialogCover.remove();\n\t\t\t\tdialogCover = null;\n\t\t\t}\n\n\t\t\tif ( CKEDITOR.env.ie6Compat ) {\n\t\t\t\tvar coverDoc = currentCover.getChild( 0 ).getFrameDocument();\n\t\t\t\tcoverDoc.removeListener( 'mouseup', mouseUpHandler );\n\t\t\t\tcoverDoc.removeListener( 'mousemove', mouseMoveHandler );\n\t\t\t}\n\t\t}\n\t}\n\n\tvar resizeCover;\n\t// Caching resuable covers and allowing only one cover\n\t// on screen.\n\tvar covers = {},\n\t\tcurrentCover;\n\n\tfunction cancelEvent( ev ) {\n\t\tev.data.preventDefault( 1 );\n\t}\n\n\tfunction showCover( editor ) {\n\t\tvar win = CKEDITOR.document.getWindow(),\n\t\t\tconfig = editor.config,\n\t\t\tskinName = ( CKEDITOR.skinName || editor.config.skin ),\n\t\t\tbackgroundColorStyle = config.dialog_backgroundCoverColor || ( skinName == 'moono-lisa' ? 'black' : 'white' ),\n\t\t\tbackgroundCoverOpacity = config.dialog_backgroundCoverOpacity,\n\t\t\tbaseFloatZIndex = config.baseFloatZIndex,\n\t\t\tcoverKey = CKEDITOR.tools.genKey( backgroundColorStyle, backgroundCoverOpacity, baseFloatZIndex ),\n\t\t\tcoverElement = covers[ coverKey ];\n\n\t\tif ( !coverElement ) {\n\t\t\tvar html = [\n\t\t\t\t'
'\n\t\t\t];\n\n\t\t\tif ( CKEDITOR.env.ie6Compat ) {\n\t\t\t\t// Support for custom document.domain in IE.\n\t\t\t\tvar iframeHtml = '';\n\n\t\t\t\thtml.push( '' +\n\t\t\t\t\t'' );\n\t\t\t}\n\n\t\t\thtml.push( '
' );\n\n\t\t\tcoverElement = CKEDITOR.dom.element.createFromHtml( html.join( '' ) );\n\t\t\tcoverElement.setOpacity( backgroundCoverOpacity !== undefined ? backgroundCoverOpacity : 0.5 );\n\n\t\t\tcoverElement.on( 'keydown', cancelEvent );\n\t\t\tcoverElement.on( 'keypress', cancelEvent );\n\t\t\tcoverElement.on( 'keyup', cancelEvent );\n\n\t\t\tcoverElement.appendTo( CKEDITOR.document.getBody() );\n\t\t\tcovers[ coverKey ] = coverElement;\n\t\t} else {\n\t\t\tcoverElement.show();\n\t\t}\n\n\t\t// Makes the dialog cover a focus holder as well.\n\t\teditor.focusManager.add( coverElement );\n\n\t\tcurrentCover = coverElement;\n\t\tvar resizeFunc = function() {\n\t\t\t\tvar size = win.getViewPaneSize();\n\t\t\t\tcoverElement.setStyles( {\n\t\t\t\t\twidth: size.width + 'px',\n\t\t\t\t\theight: size.height + 'px'\n\t\t\t\t} );\n\t\t\t};\n\n\t\tvar scrollFunc = function() {\n\t\t\t\tvar pos = win.getScrollPosition(),\n\t\t\t\t\tcursor = CKEDITOR.dialog._.currentTop;\n\t\t\t\tcoverElement.setStyles( {\n\t\t\t\t\tleft: pos.x + 'px',\n\t\t\t\t\ttop: pos.y + 'px'\n\t\t\t\t} );\n\n\t\t\t\tif ( cursor ) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tvar dialogPos = cursor.getPosition();\n\t\t\t\t\t\tcursor.move( dialogPos.x, dialogPos.y );\n\t\t\t\t\t} while ( ( cursor = cursor._.parentDialog ) );\n\t\t\t\t}\n\t\t\t};\n\n\t\tresizeCover = resizeFunc;\n\t\twin.on( 'resize', resizeFunc );\n\t\tresizeFunc();\n\t\t// Using Safari/Mac, focus must be kept where it is (http://dev.ckeditor.com/ticket/7027)\n\t\tif ( !( CKEDITOR.env.mac && CKEDITOR.env.webkit ) )\n\t\t\tcoverElement.focus();\n\n\t\tif ( CKEDITOR.env.ie6Compat ) {\n\t\t\t// IE BUG: win.$.onscroll assignment doesn't work.. it must be window.onscroll.\n\t\t\t// So we need to invent a really funny way to make it work.\n\t\t\tvar myScrollHandler = function() {\n\t\t\t\t\tscrollFunc();\n\t\t\t\t\targuments.callee.prevScrollHandler.apply( this, arguments );\n\t\t\t\t};\n\t\t\twin.$.setTimeout( function() {\n\t\t\t\tmyScrollHandler.prevScrollHandler = window.onscroll ||\n\t\t\t\tfunction() {};\n\t\t\t\twindow.onscroll = myScrollHandler;\n\t\t\t}, 0 );\n\t\t\tscrollFunc();\n\t\t}\n\t}\n\n\tfunction hideCover( editor ) {\n\t\tif ( !currentCover )\n\t\t\treturn;\n\n\t\teditor.focusManager.remove( currentCover );\n\t\tvar win = CKEDITOR.document.getWindow();\n\t\tcurrentCover.hide();\n\t\twin.removeListener( 'resize', resizeCover );\n\n\t\tif ( CKEDITOR.env.ie6Compat ) {\n\t\t\twin.$.setTimeout( function() {\n\t\t\t\tvar prevScrollHandler = window.onscroll && window.onscroll.prevScrollHandler;\n\t\t\t\twindow.onscroll = prevScrollHandler || null;\n\t\t\t}, 0 );\n\t\t}\n\t\tresizeCover = null;\n\t}\n\n\tfunction removeCovers() {\n\t\tfor ( var coverId in covers )\n\t\t\tcovers[ coverId ].remove();\n\t\tcovers = {};\n\t}\n\n\tvar accessKeyProcessors = {};\n\n\tvar accessKeyDownHandler = function( evt ) {\n\t\t\tvar ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey,\n\t\t\t\talt = evt.data.$.altKey,\n\t\t\t\tshift = evt.data.$.shiftKey,\n\t\t\t\tkey = String.fromCharCode( evt.data.$.keyCode ),\n\t\t\t\tkeyProcessor = accessKeyProcessors[ ( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '' ) + ( shift ? 'SHIFT+' : '' ) + key ];\n\n\t\t\tif ( !keyProcessor || !keyProcessor.length )\n\t\t\t\treturn;\n\n\t\t\tkeyProcessor = keyProcessor[ keyProcessor.length - 1 ];\n\t\t\tkeyProcessor.keydown && keyProcessor.keydown.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key );\n\t\t\tevt.data.preventDefault();\n\t\t};\n\n\tvar accessKeyUpHandler = function( evt ) {\n\t\t\tvar ctrl = evt.data.$.ctrlKey || evt.data.$.metaKey,\n\t\t\t\talt = evt.data.$.altKey,\n\t\t\t\tshift = evt.data.$.shiftKey,\n\t\t\t\tkey = String.fromCharCode( evt.data.$.keyCode ),\n\t\t\t\tkeyProcessor = accessKeyProcessors[ ( ctrl ? 'CTRL+' : '' ) + ( alt ? 'ALT+' : '' ) + ( shift ? 'SHIFT+' : '' ) + key ];\n\n\t\t\tif ( !keyProcessor || !keyProcessor.length )\n\t\t\t\treturn;\n\n\t\t\tkeyProcessor = keyProcessor[ keyProcessor.length - 1 ];\n\t\t\tif ( keyProcessor.keyup ) {\n\t\t\t\tkeyProcessor.keyup.call( keyProcessor.uiElement, keyProcessor.dialog, keyProcessor.key );\n\t\t\t\tevt.data.preventDefault();\n\t\t\t}\n\t\t};\n\n\tvar registerAccessKey = function( uiElement, dialog, key, downFunc, upFunc ) {\n\t\t\tvar procList = accessKeyProcessors[ key ] || ( accessKeyProcessors[ key ] = [] );\n\t\t\tprocList.push( {\n\t\t\t\tuiElement: uiElement,\n\t\t\t\tdialog: dialog,\n\t\t\t\tkey: key,\n\t\t\t\tkeyup: upFunc || uiElement.accessKeyUp,\n\t\t\t\tkeydown: downFunc || uiElement.accessKeyDown\n\t\t\t} );\n\t\t};\n\n\tvar unregisterAccessKey = function( obj ) {\n\t\t\tfor ( var i in accessKeyProcessors ) {\n\t\t\t\tvar list = accessKeyProcessors[ i ];\n\t\t\t\tfor ( var j = list.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tif ( list[ j ].dialog == obj || list[ j ].uiElement == obj )\n\t\t\t\t\t\tlist.splice( j, 1 );\n\t\t\t\t}\n\t\t\t\tif ( list.length === 0 )\n\t\t\t\t\tdelete accessKeyProcessors[ i ];\n\t\t\t}\n\t\t};\n\n\tvar tabAccessKeyUp = function( dialog, key ) {\n\t\t\tif ( dialog._.accessKeyMap[ key ] )\n\t\t\t\tdialog.selectPage( dialog._.accessKeyMap[ key ] );\n\t\t};\n\n\tvar tabAccessKeyDown = function() {};\n\n\t( function() {\n\t\tCKEDITOR.ui.dialog = {\n\t\t\t/**\n\t\t\t * The base class of all dialog UI elements.\n\t\t\t *\n\t\t\t * @class CKEDITOR.ui.dialog.uiElement\n\t\t\t * @constructor Creates a uiElement class instance.\n\t\t\t * @param {CKEDITOR.dialog} dialog Parent dialog object.\n\t\t\t * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition Element\n\t\t\t * definition.\n\t\t\t *\n\t\t\t * Accepted fields:\n\t\t\t *\n\t\t\t * * `id` (Required) The id of the UI element. See {@link CKEDITOR.dialog#getContentElement}.\n\t\t\t * * `type` (Required) The type of the UI element. The\n\t\t\t * value to this field specifies which UI element class will be used to\n\t\t\t * generate the final widget.\n\t\t\t * * `title` (Optional) The popup tooltip for the UI\n\t\t\t * element.\n\t\t\t * * `hidden` (Optional) A flag that tells if the element\n\t\t\t * should be initially visible.\n\t\t\t * * `className` (Optional) Additional CSS class names\n\t\t\t * to add to the UI element. Separated by space.\n\t\t\t * * `style` (Optional) Additional CSS inline styles\n\t\t\t * to add to the UI element. A semicolon (;) is required after the last\n\t\t\t * style declaration.\n\t\t\t * * `accessKey` (Optional) The alphanumeric access key\n\t\t\t * for this element. Access keys are automatically prefixed by CTRL.\n\t\t\t * * `on*` (Optional) Any UI element definition field that\n\t\t\t * starts with `on` followed immediately by a capital letter and\n\t\t\t * probably more letters is an event handler. Event handlers may be further\n\t\t\t * divided into registered event handlers and DOM event handlers. Please\n\t\t\t * refer to {@link CKEDITOR.ui.dialog.uiElement#registerEvents} and\n\t\t\t * {@link CKEDITOR.ui.dialog.uiElement#eventProcessors} for more information.\n\t\t\t *\n\t\t\t * @param {Array} htmlList\n\t\t\t * List of HTML code to be added to the dialog's content area.\n\t\t\t * @param {Function/String} [nodeNameArg='div']\n\t\t\t * A function returning a string, or a simple string for the node name for\n\t\t\t * the root DOM node.\n\t\t\t * @param {Function/Object} [stylesArg={}]\n\t\t\t * A function returning an object, or a simple object for CSS styles applied\n\t\t\t * to the DOM node.\n\t\t\t * @param {Function/Object} [attributesArg={}]\n\t\t\t * A fucntion returning an object, or a simple object for attributes applied\n\t\t\t * to the DOM node.\n\t\t\t * @param {Function/String} [contentsArg='']\n\t\t\t * A function returning a string, or a simple string for the HTML code inside\n\t\t\t * the root DOM node. Default is empty string.\n\t\t\t */\n\t\t\tuiElement: function( dialog, elementDefinition, htmlList, nodeNameArg, stylesArg, attributesArg, contentsArg ) {\n\t\t\t\tif ( arguments.length < 4 )\n\t\t\t\t\treturn;\n\n\t\t\t\tvar nodeName = ( nodeNameArg.call ? nodeNameArg( elementDefinition ) : nodeNameArg ) || 'div',\n\t\t\t\t\thtml = [ '<', nodeName, ' ' ],\n\t\t\t\t\tstyles = ( stylesArg && stylesArg.call ? stylesArg( elementDefinition ) : stylesArg ) || {},\n\t\t\t\t\tattributes = ( attributesArg && attributesArg.call ? attributesArg( elementDefinition ) : attributesArg ) || {},\n\t\t\t\t\tinnerHTML = ( contentsArg && contentsArg.call ? contentsArg.call( this, dialog, elementDefinition ) : contentsArg ) || '',\n\t\t\t\t\tdomId = this.domId = attributes.id || CKEDITOR.tools.getNextId() + '_uiElement',\n\t\t\t\t\ti;\n\n\t\t\t\tif ( elementDefinition.requiredContent && !dialog.getParentEditor().filter.check( elementDefinition.requiredContent ) ) {\n\t\t\t\t\tstyles.display = 'none';\n\t\t\t\t\tthis.notAllowed = true;\n\t\t\t\t}\n\n\t\t\t\t// Set the id, a unique id is required for getElement() to work.\n\t\t\t\tattributes.id = domId;\n\n\t\t\t\t// Set the type and definition CSS class names.\n\t\t\t\tvar classes = {};\n\t\t\t\tif ( elementDefinition.type )\n\t\t\t\t\tclasses[ 'cke_dialog_ui_' + elementDefinition.type ] = 1;\n\t\t\t\tif ( elementDefinition.className )\n\t\t\t\t\tclasses[ elementDefinition.className ] = 1;\n\t\t\t\tif ( elementDefinition.disabled )\n\t\t\t\t\tclasses.cke_disabled = 1;\n\n\t\t\t\tvar attributeClasses = ( attributes[ 'class' ] && attributes[ 'class' ].split ) ? attributes[ 'class' ].split( ' ' ) : [];\n\t\t\t\tfor ( i = 0; i < attributeClasses.length; i++ ) {\n\t\t\t\t\tif ( attributeClasses[ i ] )\n\t\t\t\t\t\tclasses[ attributeClasses[ i ] ] = 1;\n\t\t\t\t}\n\t\t\t\tvar finalClasses = [];\n\t\t\t\tfor ( i in classes )\n\t\t\t\t\tfinalClasses.push( i );\n\t\t\t\tattributes[ 'class' ] = finalClasses.join( ' ' );\n\n\t\t\t\t// Set the popup tooltop.\n\t\t\t\tif ( elementDefinition.title )\n\t\t\t\t\tattributes.title = elementDefinition.title;\n\n\t\t\t\t// Write the inline CSS styles.\n\t\t\t\tvar styleStr = ( elementDefinition.style || '' ).split( ';' );\n\n\t\t\t\t// Element alignment support.\n\t\t\t\tif ( elementDefinition.align ) {\n\t\t\t\t\tvar align = elementDefinition.align;\n\t\t\t\t\tstyles[ 'margin-left' ] = align == 'left' ? 0 : 'auto';\n\t\t\t\t\tstyles[ 'margin-right' ] = align == 'right' ? 0 : 'auto';\n\t\t\t\t}\n\n\t\t\t\tfor ( i in styles )\n\t\t\t\t\tstyleStr.push( i + ':' + styles[ i ] );\n\t\t\t\tif ( elementDefinition.hidden )\n\t\t\t\t\tstyleStr.push( 'display:none' );\n\t\t\t\tfor ( i = styleStr.length - 1; i >= 0; i-- ) {\n\t\t\t\t\tif ( styleStr[ i ] === '' )\n\t\t\t\t\t\tstyleStr.splice( i, 1 );\n\t\t\t\t}\n\t\t\t\tif ( styleStr.length > 0 )\n\t\t\t\t\tattributes.style = ( attributes.style ? ( attributes.style + '; ' ) : '' ) + styleStr.join( '; ' );\n\n\t\t\t\t// Write the attributes.\n\t\t\t\tfor ( i in attributes )\n\t\t\t\t\thtml.push( i + '=\"' + CKEDITOR.tools.htmlEncode( attributes[ i ] ) + '\" ' );\n\n\t\t\t\t// Write the content HTML.\n\t\t\t\thtml.push( '>', innerHTML, '' );\n\n\t\t\t\t// Add contents to the parent HTML array.\n\t\t\t\thtmlList.push( html.join( '' ) );\n\n\t\t\t\t( this._ || ( this._ = {} ) ).dialog = dialog;\n\n\t\t\t\t// Override isChanged if it is defined in element definition.\n\t\t\t\tif ( typeof elementDefinition.isChanged == 'boolean' )\n\t\t\t\t\tthis.isChanged = function() {\n\t\t\t\t\t\treturn elementDefinition.isChanged;\n\t\t\t\t\t};\n\t\t\t\tif ( typeof elementDefinition.isChanged == 'function' )\n\t\t\t\t\tthis.isChanged = elementDefinition.isChanged;\n\n\t\t\t\t// Overload 'get(set)Value' on definition.\n\t\t\t\tif ( typeof elementDefinition.setValue == 'function' ) {\n\t\t\t\t\tthis.setValue = CKEDITOR.tools.override( this.setValue, function( org ) {\n\t\t\t\t\t\treturn function( val ) {\n\t\t\t\t\t\t\torg.call( this, elementDefinition.setValue.call( this, val ) );\n\t\t\t\t\t\t};\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tif ( typeof elementDefinition.getValue == 'function' ) {\n\t\t\t\t\tthis.getValue = CKEDITOR.tools.override( this.getValue, function( org ) {\n\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\treturn elementDefinition.getValue.call( this, org.call( this ) );\n\t\t\t\t\t\t};\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\t// Add events.\n\t\t\t\tCKEDITOR.event.implementOn( this );\n\n\t\t\t\tthis.registerEvents( elementDefinition );\n\t\t\t\tif ( this.accessKeyUp && this.accessKeyDown && elementDefinition.accessKey )\n\t\t\t\t\tregisterAccessKey( this, dialog, 'CTRL+' + elementDefinition.accessKey );\n\n\t\t\t\tvar me = this;\n\t\t\t\tdialog.on( 'load', function() {\n\t\t\t\t\tvar input = me.getInputElement();\n\t\t\t\t\tif ( input ) {\n\t\t\t\t\t\tvar focusClass = me.type in { 'checkbox': 1, 'ratio': 1 } && CKEDITOR.env.ie && CKEDITOR.env.version < 8 ? 'cke_dialog_ui_focused' : '';\n\t\t\t\t\t\tinput.on( 'focus', function() {\n\t\t\t\t\t\t\tdialog._.tabBarMode = false;\n\t\t\t\t\t\t\tdialog._.hasFocus = true;\n\t\t\t\t\t\t\tme.fire( 'focus' );\n\t\t\t\t\t\t\tfocusClass && this.addClass( focusClass );\n\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tinput.on( 'blur', function() {\n\t\t\t\t\t\t\tme.fire( 'blur' );\n\t\t\t\t\t\t\tfocusClass && this.removeClass( focusClass );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\t// Completes this object with everything we have in the\n\t\t\t\t// definition.\n\t\t\t\tCKEDITOR.tools.extend( this, elementDefinition );\n\n\t\t\t\t// Register the object as a tab focus if it can be included.\n\t\t\t\tif ( this.keyboardFocusable ) {\n\t\t\t\t\tthis.tabIndex = elementDefinition.tabIndex || 0;\n\n\t\t\t\t\tthis.focusIndex = dialog._.focusList.push( this ) - 1;\n\t\t\t\t\tthis.on( 'focus', function() {\n\t\t\t\t\t\tdialog._.currentFocusIndex = me.focusIndex;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Horizontal layout box for dialog UI elements, auto-expends to available width of container.\n\t\t\t *\n\t\t\t * @class CKEDITOR.ui.dialog.hbox\n\t\t\t * @extends CKEDITOR.ui.dialog.uiElement\n\t\t\t * @constructor Creates a hbox class instance.\n\t\t\t * @param {CKEDITOR.dialog} dialog Parent dialog object.\n\t\t\t * @param {Array} childObjList\n\t\t\t * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container.\n\t\t\t * @param {Array} childHtmlList\n\t\t\t * Array of HTML code that correspond to the HTML output of all the\n\t\t\t * objects in childObjList.\n\t\t\t * @param {Array} htmlList\n\t\t\t * Array of HTML code that this element will output to.\n\t\t\t * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\n\t\t\t * The element definition. Accepted fields:\n\t\t\t *\n\t\t\t * * `widths` (Optional) The widths of child cells.\n\t\t\t * * `height` (Optional) The height of the layout.\n\t\t\t * * `padding` (Optional) The padding width inside child cells.\n\t\t\t * * `align` (Optional) The alignment of the whole layout.\n\t\t\t */\n\t\t\thbox: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) {\n\t\t\t\tif ( arguments.length < 4 )\n\t\t\t\t\treturn;\n\n\t\t\t\tthis._ || ( this._ = {} );\n\n\t\t\t\tvar children = this._.children = childObjList,\n\t\t\t\t\twidths = elementDefinition && elementDefinition.widths || null,\n\t\t\t\t\theight = elementDefinition && elementDefinition.height || null,\n\t\t\t\t\tstyles = {},\n\t\t\t\t\ti;\n\t\t\t\t/** @ignore */\n\t\t\t\tvar innerHTML = function() {\n\t\t\t\t\t\tvar html = [ '' ];\n\t\t\t\t\t\tfor ( i = 0; i < childHtmlList.length; i++ ) {\n\t\t\t\t\t\t\tvar className = 'cke_dialog_ui_hbox_child',\n\t\t\t\t\t\t\t\tstyles = [];\n\t\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\t\tclassName = 'cke_dialog_ui_hbox_first';\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif ( i == childHtmlList.length - 1 ) {\n\t\t\t\t\t\t\t\tclassName = 'cke_dialog_ui_hbox_last';\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\thtml.push( ' 0 ) {\n\t\t\t\t\t\t\t\thtml.push( 'style=\"' + styles.join( '; ' ) + '\" ' );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\thtml.push( '>', childHtmlList[ i ], '' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thtml.push( '' );\n\t\t\t\t\t\treturn html.join( '' );\n\t\t\t\t\t};\n\n\t\t\t\tvar attribs = { role: 'presentation' };\n\t\t\t\telementDefinition && elementDefinition.align && ( attribs.align = elementDefinition.align );\n\n\t\t\t\tCKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition || { type: 'hbox' }, htmlList, 'table', styles, attribs, innerHTML );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Vertical layout box for dialog UI elements.\n\t\t\t *\n\t\t\t * @class CKEDITOR.ui.dialog.vbox\n\t\t\t * @extends CKEDITOR.ui.dialog.hbox\n\t\t\t * @constructor Creates a vbox class instance.\n\t\t\t * @param {CKEDITOR.dialog} dialog Parent dialog object.\n\t\t\t * @param {Array} childObjList\n\t\t\t * Array of {@link CKEDITOR.ui.dialog.uiElement} objects inside this container.\n\t\t\t * @param {Array} childHtmlList\n\t\t\t * Array of HTML code that correspond to the HTML output of all the\n\t\t\t * objects in childObjList.\n\t\t\t * @param {Array} htmlList Array of HTML code that this element will output to.\n\t\t\t * @param {CKEDITOR.dialog.definition.uiElement} elementDefinition\n\t\t\t * The element definition. Accepted fields:\n\t\t\t *\n\t\t\t * * `width` (Optional) The width of the layout.\n\t\t\t * * `heights` (Optional) The heights of individual cells.\n\t\t\t * * `align` (Optional) The alignment of the layout.\n\t\t\t * * `padding` (Optional) The padding width inside child cells.\n\t\t\t * * `expand` (Optional) Whether the layout should expand\n\t\t\t * vertically to fill its container.\n\t\t\t */\n\t\t\tvbox: function( dialog, childObjList, childHtmlList, htmlList, elementDefinition ) {\n\t\t\t\tif ( arguments.length < 3 )\n\t\t\t\t\treturn;\n\n\t\t\t\tthis._ || ( this._ = {} );\n\n\t\t\t\tvar children = this._.children = childObjList,\n\t\t\t\t\twidth = elementDefinition && elementDefinition.width || null,\n\t\t\t\t\theights = elementDefinition && elementDefinition.heights || null;\n\t\t\t\t/** @ignore */\n\t\t\t\tvar innerHTML = function() {\n\t\t\t\t\t\tvar html = [ '' );\n\t\t\t\t\t\tfor ( var i = 0; i < childHtmlList.length; i++ ) {\n\t\t\t\t\t\t\tvar styles = [];\n\t\t\t\t\t\t\thtml.push( '' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thtml.push( '
0 )\n\t\t\t\t\t\t\t\thtml.push( 'style=\"', styles.join( '; ' ), '\" ' );\n\t\t\t\t\t\t\thtml.push( ' class=\"cke_dialog_ui_vbox_child\">', childHtmlList[ i ], '
' );\n\t\t\t\t\t\treturn html.join( '' );\n\t\t\t\t\t};\n\t\t\t\tCKEDITOR.ui.dialog.uiElement.call( this, dialog, elementDefinition || { type: 'vbox' }, htmlList, 'div', null, { role: 'presentation' }, innerHTML );\n\t\t\t}\n\t\t};\n\t} )();\n\n\t/** @class CKEDITOR.ui.dialog.uiElement */\n\tCKEDITOR.ui.dialog.uiElement.prototype = {\n\t\t/**\n\t\t * Gets the root DOM element of this dialog UI object.\n\t\t *\n\t\t *\t\tuiElement.getElement().hide();\n\t\t *\n\t\t * @returns {CKEDITOR.dom.element} Root DOM element of UI object.\n\t\t */\n\t\tgetElement: function() {\n\t\t\treturn CKEDITOR.document.getById( this.domId );\n\t\t},\n\n\t\t/**\n\t\t * Gets the DOM element that the user inputs values.\n\t\t *\n\t\t * This function is used by {@link #setValue}, {@link #getValue} and {@link #focus}. It should\n\t\t * be overrided in child classes where the input element isn't the root\n\t\t * element.\n\t\t *\n\t\t *\t\tvar rawValue = textInput.getInputElement().$.value;\n\t\t *\n\t\t * @returns {CKEDITOR.dom.element} The element where the user input values.\n\t\t */\n\t\tgetInputElement: function() {\n\t\t\treturn this.getElement();\n\t\t},\n\n\t\t/**\n\t\t * Gets the parent dialog object containing this UI element.\n\t\t *\n\t\t *\t\tvar dialog = uiElement.getDialog();\n\t\t *\n\t\t * @returns {CKEDITOR.dialog} Parent dialog object.\n\t\t */\n\t\tgetDialog: function() {\n\t\t\treturn this._.dialog;\n\t\t},\n\n\t\t/**\n\t\t * Sets the value of this dialog UI object.\n\t\t *\n\t\t *\t\tuiElement.setValue( 'Dingo' );\n\t\t *\n\t\t * @chainable\n\t\t * @param {Object} value The new value.\n\t\t * @param {Boolean} noChangeEvent Internal commit, to supress `change` event on this element.\n\t\t */\n\t\tsetValue: function( value, noChangeEvent ) {\n\t\t\tthis.getInputElement().setValue( value );\n\t\t\t!noChangeEvent && this.fire( 'change', { value: value } );\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Gets the current value of this dialog UI object.\n\t\t *\n\t\t *\t\tvar myValue = uiElement.getValue();\n\t\t *\n\t\t * @returns {Object} The current value.\n\t\t */\n\t\tgetValue: function() {\n\t\t\treturn this.getInputElement().getValue();\n\t\t},\n\n\t\t/**\n\t\t * Tells whether the UI object's value has changed.\n\t\t *\n\t\t *\t\tif ( uiElement.isChanged() )\n\t\t *\t\t\tconfirm( 'Value changed! Continue?' );\n\t\t *\n\t\t * @returns {Boolean} `true` if changed, `false` if not changed.\n\t\t */\n\t\tisChanged: function() {\n\t\t\t// Override in input classes.\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * Selects the parent tab of this element. Usually called by focus() or overridden focus() methods.\n\t\t *\n\t\t *\t\tfocus : function() {\n\t\t *\t\t\tthis.selectParentTab();\n\t\t *\t\t\t// do something else.\n\t\t *\t\t}\n\t\t *\n\t\t * @chainable\n\t\t */\n\t\tselectParentTab: function() {\n\t\t\tvar element = this.getInputElement(),\n\t\t\t\tcursor = element,\n\t\t\t\ttabId;\n\t\t\twhile ( ( cursor = cursor.getParent() ) && cursor.$.className.search( 'cke_dialog_page_contents' ) == -1 ) {\n\n\t\t\t}\n\n\t\t\t// Some widgets don't have parent tabs (e.g. OK and Cancel buttons).\n\t\t\tif ( !cursor )\n\t\t\t\treturn this;\n\n\t\t\ttabId = cursor.getAttribute( 'name' );\n\t\t\t// Avoid duplicate select.\n\t\t\tif ( this._.dialog._.currentTabId != tabId )\n\t\t\t\tthis._.dialog.selectPage( tabId );\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Puts the focus to the UI object. Switches tabs if the UI object isn't in the active tab page.\n\t\t *\n\t\t *\t\tuiElement.focus();\n\t\t *\n\t\t * @chainable\n\t\t */\n\t\tfocus: function() {\n\t\t\tthis.selectParentTab().getInputElement().focus();\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * Registers the `on*` event handlers defined in the element definition.\n\t\t *\n\t\t * The default behavior of this function is:\n\t\t *\n\t\t * 1. If the on* event is defined in the class's eventProcesors list,\n\t\t * then the registration is delegated to the corresponding function\n\t\t * in the eventProcessors list.\n\t\t * 2. If the on* event is not defined in the eventProcessors list, then\n\t\t * register the event handler under the corresponding DOM event of\n\t\t * the UI element's input DOM element (as defined by the return value\n\t\t * of {@link #getInputElement}).\n\t\t *\n\t\t * This function is only called at UI element instantiation, but can\n\t\t * be overridded in child classes if they require more flexibility.\n\t\t *\n\t\t * @chainable\n\t\t * @param {CKEDITOR.dialog.definition.uiElement} definition The UI element\n\t\t * definition.\n\t\t */\n\t\tregisterEvents: function( definition ) {\n\t\t\tvar regex = /^on([A-Z]\\w+)/,\n\t\t\t\tmatch;\n\n\t\t\tvar registerDomEvent = function( uiElement, dialog, eventName, func ) {\n\t\t\t\t\tdialog.on( 'load', function() {\n\t\t\t\t\t\tuiElement.getInputElement().on( eventName, func, uiElement );\n\t\t\t\t\t} );\n\t\t\t\t};\n\n\t\t\tfor ( var i in definition ) {\n\t\t\t\tif ( !( match = i.match( regex ) ) )\n\t\t\t\t\tcontinue;\n\t\t\t\tif ( this.eventProcessors[ i ] )\n\t\t\t\t\tthis.eventProcessors[ i ].call( this, this._.dialog, definition[ i ] );\n\t\t\t\telse\n\t\t\t\t\tregisterDomEvent( this, this._.dialog, match[ 1 ].toLowerCase(), definition[ i ] );\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\t\t/**\n\t\t * The event processor list used by\n\t\t * {@link CKEDITOR.ui.dialog.uiElement#getInputElement} at UI element\n\t\t * instantiation. The default list defines three `on*` events:\n\t\t *\n\t\t * 1. `onLoad` - Called when the element's parent dialog opens for the\n\t\t * first time.\n\t\t * 2. `onShow` - Called whenever the element's parent dialog opens.\n\t\t * 3. `onHide` - Called whenever the element's parent dialog closes.\n\t\t *\n\t\t *\t\t// This connects the 'click' event in CKEDITOR.ui.dialog.button to onClick\n\t\t *\t\t// handlers in the UI element's definitions.\n\t\t *\t\tCKEDITOR.ui.dialog.button.eventProcessors = CKEDITOR.tools.extend( {},\n\t\t *\t\t\tCKEDITOR.ui.dialog.uiElement.prototype.eventProcessors,\n\t\t *\t\t\t{ onClick : function( dialog, func ) { this.on( 'click', func ); } },\n\t\t *\t\t\ttrue\n\t\t *\t\t);\n\t\t *\n\t\t * @property {Object}\n\t\t */\n\t\teventProcessors: {\n\t\t\tonLoad: function( dialog, func ) {\n\t\t\t\tdialog.on( 'load', func, this );\n\t\t\t},\n\n\t\t\tonShow: function( dialog, func ) {\n\t\t\t\tdialog.on( 'show', func, this );\n\t\t\t},\n\n\t\t\tonHide: function( dialog, func ) {\n\t\t\t\tdialog.on( 'hide', func, this );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The default handler for a UI element's access key down event, which\n\t\t * tries to put focus to the UI element.\n\t\t *\n\t\t * Can be overridded in child classes for more sophisticaed behavior.\n\t\t *\n\t\t * @param {CKEDITOR.dialog} dialog The parent dialog object.\n\t\t * @param {String} key The key combination pressed. Since access keys\n\t\t * are defined to always include the `CTRL` key, its value should always\n\t\t * include a `'CTRL+'` prefix.\n\t\t */\n\t\taccessKeyDown: function() {\n\t\t\tthis.focus();\n\t\t},\n\n\t\t/**\n\t\t * The default handler for a UI element's access key up event, which\n\t\t * does nothing.\n\t\t *\n\t\t * Can be overridded in child classes for more sophisticated behavior.\n\t\t *\n\t\t * @param {CKEDITOR.dialog} dialog The parent dialog object.\n\t\t * @param {String} key The key combination pressed. Since access keys\n\t\t * are defined to always include the `CTRL` key, its value should always\n\t\t * include a `'CTRL+'` prefix.\n\t\t */\n\t\taccessKeyUp: function() {},\n\n\t\t/**\n\t\t * Disables a UI element.\n\t\t */\n\t\tdisable: function() {\n\t\t\tvar element = this.getElement(),\n\t\t\t\tinput = this.getInputElement();\n\t\t\tinput.setAttribute( 'disabled', 'true' );\n\t\t\telement.addClass( 'cke_disabled' );\n\t\t},\n\n\t\t/**\n\t\t * Enables a UI element.\n\t\t */\n\t\tenable: function() {\n\t\t\tvar element = this.getElement(),\n\t\t\t\tinput = this.getInputElement();\n\t\t\tinput.removeAttribute( 'disabled' );\n\t\t\telement.removeClass( 'cke_disabled' );\n\t\t},\n\n\t\t/**\n\t\t * Determines whether an UI element is enabled or not.\n\t\t *\n\t\t * @returns {Boolean} Whether the UI element is enabled.\n\t\t */\n\t\tisEnabled: function() {\n\t\t\treturn !this.getElement().hasClass( 'cke_disabled' );\n\t\t},\n\n\t\t/**\n\t\t * Determines whether an UI element is visible or not.\n\t\t *\n\t\t * @returns {Boolean} Whether the UI element is visible.\n\t\t */\n\t\tisVisible: function() {\n\t\t\treturn this.getInputElement().isVisible();\n\t\t},\n\n\t\t/**\n\t\t * Determines whether an UI element is focus-able or not.\n\t\t * Focus-able is defined as being both visible and enabled.\n\t\t *\n\t\t * @returns {Boolean} Whether the UI element can be focused.\n\t\t */\n\t\tisFocusable: function() {\n\t\t\tif ( !this.isEnabled() || !this.isVisible() )\n\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\t};\n\n\t/** @class CKEDITOR.ui.dialog.hbox */\n\tCKEDITOR.ui.dialog.hbox.prototype = CKEDITOR.tools.extend( new CKEDITOR.ui.dialog.uiElement(), {\n\t\t/**\n\t\t * Gets a child UI element inside this container.\n\t\t *\n\t\t *\t\tvar checkbox = hbox.getChild( [0,1] );\n\t\t *\t\tcheckbox.setValue( true );\n\t\t *\n\t\t * @param {Array/Number} indices An array or a single number to indicate the child's\n\t\t * position in the container's descendant tree. Omit to get all the children in an array.\n\t\t * @returns {Array/CKEDITOR.ui.dialog.uiElement} Array of all UI elements in the container\n\t\t * if no argument given, or the specified UI element if indices is given.\n\t\t */\n\t\tgetChild: function( indices ) {\n\t\t\t// If no arguments, return a clone of the children array.\n\t\t\tif ( arguments.length < 1 )\n\t\t\t\treturn this._.children.concat();\n\n\t\t\t// If indices isn't array, make it one.\n\t\t\tif ( !indices.splice )\n\t\t\t\tindices = [ indices ];\n\n\t\t\t// Retrieve the child element according to tree position.\n\t\t\tif ( indices.length < 2 )\n\t\t\t\treturn this._.children[ indices[ 0 ] ];\n\t\t\telse\n\t\t\t\treturn ( this._.children[ indices[ 0 ] ] && this._.children[ indices[ 0 ] ].getChild ) ? this._.children[ indices[ 0 ] ].getChild( indices.slice( 1, indices.length ) ) : null;\n\t\t}\n\t}, true );\n\n\tCKEDITOR.ui.dialog.vbox.prototype = new CKEDITOR.ui.dialog.hbox();\n\n\t( function() {\n\t\tvar commonBuilder = {\n\t\t\tbuild: function( dialog, elementDefinition, output ) {\n\t\t\t\tvar children = elementDefinition.children,\n\t\t\t\t\tchild,\n\t\t\t\t\tchildHtmlList = [],\n\t\t\t\t\tchildObjList = [];\n\t\t\t\tfor ( var i = 0;\n\t\t\t\t( i < children.length && ( child = children[ i ] ) ); i++ ) {\n\t\t\t\t\tvar childHtml = [];\n\t\t\t\t\tchildHtmlList.push( childHtml );\n\t\t\t\t\tchildObjList.push( CKEDITOR.dialog._.uiElementBuilders[ child.type ].build( dialog, child, childHtml ) );\n\t\t\t\t}\n\t\t\t\treturn new CKEDITOR.ui.dialog[ elementDefinition.type ]( dialog, childObjList, childHtmlList, output, elementDefinition );\n\t\t\t}\n\t\t};\n\n\t\tCKEDITOR.dialog.addUIElement( 'hbox', commonBuilder );\n\t\tCKEDITOR.dialog.addUIElement( 'vbox', commonBuilder );\n\t} )();\n\n\t/**\n\t * Generic dialog command. It opens a specific dialog when executed.\n\t *\n\t *\t\t// Register the \"link\" command which opens the \"link\" dialog.\n\t *\t\teditor.addCommand( 'link', new CKEDITOR.dialogCommand( 'link' ) );\n\t *\n\t * @class\n\t * @constructor Creates a dialogCommand class instance.\n\t * @extends CKEDITOR.commandDefinition\n\t * @param {String} dialogName The name of the dialog to open when executing\n\t * this command.\n\t * @param {Object} [ext] Additional command definition's properties.\n\t * @param {String} [ext.tabId] You can provide additional property (`tabId`) if you wish to open the dialog on a specific tabId.\n\t *\n\t *\t\t// Open the dialog on the 'keystroke' tabId.\n\t *\t\teditor.addCommand( 'keystroke', new CKEDITOR.dialogCommand( 'a11yHelp', { tabId: 'keystroke' } ) );\n\t */\n\tCKEDITOR.dialogCommand = function( dialogName, ext ) {\n\t\tthis.dialogName = dialogName;\n\t\tCKEDITOR.tools.extend( this, ext, true );\n\t};\n\n\tCKEDITOR.dialogCommand.prototype = {\n\t\texec: function( editor ) {\n\t\t\tvar tabId = this.tabId;\n\t\t\teditor.openDialog( this.dialogName, function( dialog ) {\n\t\t\t\t// Select different tab if it's provided (#830).\n\t\t\t\tif ( tabId ) {\n\t\t\t\t\tdialog.selectPage( tabId );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\t// Dialog commands just open a dialog ui, thus require no undo logic,\n\t\t// undo support should dedicate to specific dialog implementation.\n\t\tcanUndo: false,\n\n\t\teditorFocus: 1\n\t};\n\n\t( function() {\n\t\tvar notEmptyRegex = /^([a]|[^a])+$/,\n\t\t\tintegerRegex = /^\\d*$/,\n\t\t\tnumberRegex = /^\\d*(?:\\.\\d+)?$/,\n\t\t\thtmlLengthRegex = /^(((\\d*(\\.\\d+))|(\\d*))(px|\\%)?)?$/,\n\t\t\tcssLengthRegex = /^(((\\d*(\\.\\d+))|(\\d*))(px|em|ex|in|cm|mm|pt|pc|\\%)?)?$/i,\n\t\t\tinlineStyleRegex = /^(\\s*[\\w-]+\\s*:\\s*[^:;]+(?:;|$))*$/;\n\n\t\tCKEDITOR.VALIDATE_OR = 1;\n\t\tCKEDITOR.VALIDATE_AND = 2;\n\n\t\tCKEDITOR.dialog.validate = {\n\t\t\tfunctions: function() {\n\t\t\t\tvar args = arguments;\n\t\t\t\treturn function() {\n\t\t\t\t\t/**\n\t\t\t\t\t * It's important for validate functions to be able to accept the value\n\t\t\t\t\t * as argument in addition to this.getValue(), so that it is possible to\n\t\t\t\t\t * combine validate functions together to make more sophisticated\n\t\t\t\t\t * validators.\n\t\t\t\t\t */\n\t\t\t\t\tvar value = this && this.getValue ? this.getValue() : args[ 0 ];\n\n\t\t\t\t\tvar msg,\n\t\t\t\t\t\trelation = CKEDITOR.VALIDATE_AND,\n\t\t\t\t\t\tfunctions = [],\n\t\t\t\t\t\ti;\n\n\t\t\t\t\tfor ( i = 0; i < args.length; i++ ) {\n\t\t\t\t\t\tif ( typeof args[ i ] == 'function' )\n\t\t\t\t\t\t\tfunctions.push( args[ i ] );\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( i < args.length && typeof args[ i ] == 'string' ) {\n\t\t\t\t\t\tmsg = args[ i ];\n\t\t\t\t\t\ti++;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( i < args.length && typeof args[ i ] == 'number' )\n\t\t\t\t\t\trelation = args[ i ];\n\n\t\t\t\t\tvar passed = ( relation == CKEDITOR.VALIDATE_AND ? true : false );\n\t\t\t\t\tfor ( i = 0; i < functions.length; i++ ) {\n\t\t\t\t\t\tif ( relation == CKEDITOR.VALIDATE_AND )\n\t\t\t\t\t\t\tpassed = passed && functions[ i ]( value );\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tpassed = passed || functions[ i ]( value );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn !passed ? msg : true;\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tregex: function( regex, msg ) {\n\t\t\t\t/*\n\t\t\t\t * Can be greatly shortened by deriving from functions validator if code size\n\t\t\t\t * turns out to be more important than performance.\n\t\t\t\t */\n\t\t\t\treturn function() {\n\t\t\t\t\tvar value = this && this.getValue ? this.getValue() : arguments[ 0 ];\n\t\t\t\t\treturn !regex.test( value ) ? msg : true;\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tnotEmpty: function( msg ) {\n\t\t\t\treturn this.regex( notEmptyRegex, msg );\n\t\t\t},\n\n\t\t\tinteger: function( msg ) {\n\t\t\t\treturn this.regex( integerRegex, msg );\n\t\t\t},\n\n\t\t\t'number': function( msg ) {\n\t\t\t\treturn this.regex( numberRegex, msg );\n\t\t\t},\n\n\t\t\t'cssLength': function( msg ) {\n\t\t\t\treturn this.functions( function( val ) {\n\t\t\t\t\treturn cssLengthRegex.test( CKEDITOR.tools.trim( val ) );\n\t\t\t\t}, msg );\n\t\t\t},\n\n\t\t\t'htmlLength': function( msg ) {\n\t\t\t\treturn this.functions( function( val ) {\n\t\t\t\t\treturn htmlLengthRegex.test( CKEDITOR.tools.trim( val ) );\n\t\t\t\t}, msg );\n\t\t\t},\n\n\t\t\t'inlineStyle': function( msg ) {\n\t\t\t\treturn this.functions( function( val ) {\n\t\t\t\t\treturn inlineStyleRegex.test( CKEDITOR.tools.trim( val ) );\n\t\t\t\t}, msg );\n\t\t\t},\n\n\t\t\tequals: function( value, msg ) {\n\t\t\t\treturn this.functions( function( val ) {\n\t\t\t\t\treturn val == value;\n\t\t\t\t}, msg );\n\t\t\t},\n\n\t\t\tnotEqual: function( value, msg ) {\n\t\t\t\treturn this.functions( function( val ) {\n\t\t\t\t\treturn val != value;\n\t\t\t\t}, msg );\n\t\t\t}\n\t\t};\n\n\t\tCKEDITOR.on( 'instanceDestroyed', function( evt ) {\n\t\t\t// Remove dialog cover on last instance destroy.\n\t\t\tif ( CKEDITOR.tools.isEmpty( CKEDITOR.instances ) ) {\n\t\t\t\tvar currentTopDialog;\n\t\t\t\twhile ( ( currentTopDialog = CKEDITOR.dialog._.currentTop ) )\n\t\t\t\t\tcurrentTopDialog.hide();\n\t\t\t\tremoveCovers();\n\t\t\t}\n\n\t\t\tvar dialogs = evt.editor._.storedDialogs;\n\t\t\tfor ( var name in dialogs )\n\t\t\t\tdialogs[ name ].destroy();\n\n\t\t} );\n\n\t} )();\n\n\t// Extend the CKEDITOR.editor class with dialog specific functions.\n\tCKEDITOR.tools.extend( CKEDITOR.editor.prototype, {\n\t\t/**\n\t\t * Loads and opens a registered dialog.\n\t\t *\n\t\t *\t\tCKEDITOR.instances.editor1.openDialog( 'smiley' );\n\t\t *\n\t\t * @member CKEDITOR.editor\n\t\t * @param {String} dialogName The registered name of the dialog.\n\t\t * @param {Function} callback The function to be invoked after dialog instance created.\n\t\t * @returns {CKEDITOR.dialog} The dialog object corresponding to the dialog displayed.\n\t\t * `null` if the dialog name is not registered.\n\t\t * @see CKEDITOR.dialog#add\n\t\t */\n\t\topenDialog: function( dialogName, callback ) {\n\t\t\tvar dialog = null, dialogDefinitions = CKEDITOR.dialog._.dialogDefinitions[ dialogName ];\n\n\t\t\tif ( CKEDITOR.dialog._.currentTop === null )\n\t\t\t\tshowCover( this );\n\n\t\t\t// If the dialogDefinition is already loaded, open it immediately.\n\t\t\tif ( typeof dialogDefinitions == 'function' ) {\n\t\t\t\tvar storedDialogs = this._.storedDialogs || ( this._.storedDialogs = {} );\n\n\t\t\t\tdialog = storedDialogs[ dialogName ] || ( storedDialogs[ dialogName ] = new CKEDITOR.dialog( this, dialogName ) );\n\n\t\t\t\tcallback && callback.call( dialog, dialog );\n\t\t\t\tdialog.show();\n\n\t\t\t} else if ( dialogDefinitions == 'failed' ) {\n\t\t\t\thideCover( this );\n\t\t\t\tthrow new Error( '[CKEDITOR.dialog.openDialog] Dialog \"' + dialogName + '\" failed when loading definition.' );\n\t\t\t} else if ( typeof dialogDefinitions == 'string' ) {\n\n\t\t\t\tCKEDITOR.scriptLoader.load( CKEDITOR.getUrl( dialogDefinitions ),\n\t\t\t\t\tfunction() {\n\t\t\t\t\t\tvar dialogDefinition = CKEDITOR.dialog._.dialogDefinitions[ dialogName ];\n\t\t\t\t\t\t// In case of plugin error, mark it as loading failed.\n\t\t\t\t\t\tif ( typeof dialogDefinition != 'function' )\n\t\t\t\t\t\t\tCKEDITOR.dialog._.dialogDefinitions[ dialogName ] = 'failed';\n\n\t\t\t\t\t\tthis.openDialog( dialogName, callback );\n\t\t\t\t\t}, this, 0, 1 );\n\t\t\t}\n\n\t\t\tCKEDITOR.skin.loadPart( 'dialog' );\n\n\t\t\treturn dialog;\n\t\t}\n\t} );\n} )();\n\nCKEDITOR.plugins.add( 'dialog', {\n\trequires: 'dialogui',\n\tinit: function( editor ) {\n\t\teditor.on( 'doubleclick', function( evt ) {\n\t\t\tif ( evt.data.dialog )\n\t\t\t\teditor.openDialog( evt.data.dialog );\n\t\t}, null, null, 999 );\n\t}\n} );\n\n// Dialog related configurations.\n\n/**\n * The color of the dialog background cover. It should be a valid CSS color string.\n *\n *\t\tconfig.dialog_backgroundCoverColor = 'rgb(255, 254, 253)';\n *\n * @cfg {String} [dialog_backgroundCoverColor='white']\n * @member CKEDITOR.config\n */\n\n/**\n * The opacity of the dialog background cover. It should be a number within the\n * range `[0.0, 1.0]`.\n *\n *\t\tconfig.dialog_backgroundCoverOpacity = 0.7;\n *\n * @cfg {Number} [dialog_backgroundCoverOpacity=0.5]\n * @member CKEDITOR.config\n */\n\n/**\n * If the dialog has more than one tab, put focus into the first tab as soon as dialog is opened.\n *\n *\t\tconfig.dialog_startupFocusTab = true;\n *\n * @cfg {Boolean} [dialog_startupFocusTab=false]\n * @member CKEDITOR.config\n */\n\n/**\n * The distance of magnetic borders used in moving and resizing dialogs,\n * measured in pixels.\n *\n *\t\tconfig.dialog_magnetDistance = 30;\n *\n * @cfg {Number} [dialog_magnetDistance=20]\n * @member CKEDITOR.config\n */\n\n/**\n * The guideline to follow when generating the dialog buttons. There are 3 possible options:\n *\n * * `'OS'` - the buttons will be displayed in the default order of the user's OS;\n * * `'ltr'` - for Left-To-Right order;\n * * `'rtl'` - for Right-To-Left order.\n *\n * Example:\n *\n *\t\tconfig.dialog_buttonsOrder = 'rtl';\n *\n * @since 3.5\n * @cfg {String} [dialog_buttonsOrder='OS']\n * @member CKEDITOR.config\n */\n\n/**\n * The dialog contents to removed. It's a string composed by dialog name and tab name with a colon between them.\n *\n * Separate each pair with semicolon (see example).\n *\n * **Note:** All names are case-sensitive.\n *\n * **Note:** Be cautious when specifying dialog tabs that are mandatory,\n * like `'info'`, dialog functionality might be broken because of this!\n *\n *\t\tconfig.removeDialogTabs = 'flash:advanced;image:Link';\n *\n * @since 3.5\n * @cfg {String} [removeDialogTabs='']\n * @member CKEDITOR.config\n */\n\n/**\n * Tells if user should not be asked to confirm close, if any dialog field was modified.\n * By default it is set to `false` meaning that the confirmation dialog will be shown.\n *\n *\t\tconfig.dialog_noConfirmCancel = true;\n *\n * @since 4.3\n * @cfg {Boolean} [dialog_noConfirmCancel=false]\n * @member CKEDITOR.config\n */\n\n/**\n * Event fired when a dialog definition is about to be used to create a dialog into\n * an editor instance. This event makes it possible to customize the definition\n * before creating it.\n *\n * Note that this event is called only the first time a specific dialog is\n * opened. Successive openings will use the cached dialog, and this event will\n * not get fired.\n *\n * @event dialogDefinition\n * @member CKEDITOR\n * @param {CKEDITOR.dialog.definition} data The dialog defination that\n * is being loaded.\n * @param {CKEDITOR.editor} editor The editor instance that will use the dialog.\n */\n\n/**\n * Event fired when a tab is going to be selected in a dialog.\n *\n * @event selectPage\n * @member CKEDITOR.dialog\n * @param data\n * @param {String} data.page The id of the page that it's gonna be selected.\n * @param {String} data.currentPage The id of the current page.\n */\n\n/**\n * Event fired when the user tries to dismiss a dialog.\n *\n * @event cancel\n * @member CKEDITOR.dialog\n * @param data\n * @param {Boolean} data.hide Whether the event should proceed or not.\n */\n\n/**\n * Event fired when the user tries to confirm a dialog.\n *\n * @event ok\n * @member CKEDITOR.dialog\n * @param data\n * @param {Boolean} data.hide Whether the event should proceed or not.\n */\n\n/**\n * Event fired when a dialog is shown.\n *\n * @event show\n * @member CKEDITOR.dialog\n */\n\n/**\n * Event fired when a dialog is shown.\n *\n * @event dialogShow\n * @member CKEDITOR.editor\n * @param {CKEDITOR.editor} editor This editor instance.\n * @param {CKEDITOR.dialog} data The opened dialog instance.\n */\n\n/**\n * Event fired when a dialog is hidden.\n *\n * @event hide\n * @member CKEDITOR.dialog\n */\n\n/**\n * Event fired when a dialog is hidden.\n *\n * @event dialogHide\n * @member CKEDITOR.editor\n * @param {CKEDITOR.editor} editor This editor instance.\n * @param {CKEDITOR.dialog} data The hidden dialog instance.\n */\n\n/**\n * Event fired when a dialog is being resized. The event is fired on\n * both the {@link CKEDITOR.dialog} object and the dialog instance\n * since 3.5.3, previously it was only available in the global object.\n *\n * @static\n * @event resize\n * @member CKEDITOR.dialog\n * @param data\n * @param {CKEDITOR.dialog} data.dialog The dialog being resized (if\n * it is fired on the dialog itself, this parameter is not sent).\n * @param {String} data.skin The skin name.\n * @param {Number} data.width The new width.\n * @param {Number} data.height The new height.\n */\n\n/**\n * Event fired when a dialog is being resized. The event is fired on\n * both the {@link CKEDITOR.dialog} object and the dialog instance\n * since 3.5.3, previously it was only available in the global object.\n *\n * @since 3.5\n * @event resize\n * @member CKEDITOR.dialog\n * @param data\n * @param {Number} data.width The new width.\n * @param {Number} data.height The new height.\n */\n\n/**\n * Event fired when the dialog state changes, usually by {@link CKEDITOR.dialog#setState}.\n *\n * @since 4.5\n * @event state\n * @member CKEDITOR.dialog\n * @param data\n * @param {Number} data The new state. Either {@link CKEDITOR#DIALOG_STATE_IDLE} or {@link CKEDITOR#DIALOG_STATE_BUSY}.\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview Plugin definition for the a11yhelp, which provides a dialog\n * with accessibility related help.\n */\n\n( function() {\n\tvar pluginName = 'a11yhelp',\n\t\tcommandName = 'a11yHelp';\n\n\tCKEDITOR.plugins.add( pluginName, {\n\t\trequires: 'dialog',\n\n\t\t// List of available localizations.\n\t\t// jscs:disable\n\t\tavailableLangs: { af:1,ar:1,az:1,bg:1,ca:1,cs:1,cy:1,da:1,de:1,'de-ch':1,el:1,en:1,'en-gb':1,eo:1,es:1,'es-mx':1,et:1,eu:1,fa:1,fi:1,fo:1,fr:1,'fr-ca':1,gl:1,gu:1,he:1,hi:1,hr:1,hu:1,id:1,it:1,ja:1,km:1,ko:1,ku:1,lt:1,lv:1,mk:1,mn:1,nb:1,nl:1,no:1,oc:1,pl:1,pt:1,'pt-br':1,ro:1,ru:1,si:1,sk:1,sl:1,sq:1,sr:1,'sr-latn':1,sv:1,th:1,tr:1,tt:1,ug:1,uk:1,vi:1,zh:1,'zh-cn':1 },\n\t\t// jscs:enable\n\n\t\tinit: function( editor ) {\n\t\t\tvar plugin = this;\n\t\t\teditor.addCommand( commandName, {\n\t\t\t\texec: function() {\n\t\t\t\t\tvar langCode = editor.langCode;\n\t\t\t\t\tlangCode =\n\t\t\t\t\t\tplugin.availableLangs[ langCode ] ? langCode :\n\t\t\t\t\t\tplugin.availableLangs[ langCode.replace( /-.*/, '' ) ] ? langCode.replace( /-.*/, '' ) :\n\t\t\t\t\t\t'en';\n\n\t\t\t\t\tCKEDITOR.scriptLoader.load( CKEDITOR.getUrl( plugin.path + 'dialogs/lang/' + langCode + '.js' ), function() {\n\t\t\t\t\t\teditor.lang.a11yhelp = plugin.langEntries[ langCode ];\n\t\t\t\t\t\teditor.openDialog( commandName );\n\t\t\t\t\t} );\n\t\t\t\t},\n\t\t\t\tmodes: { wysiwyg: 1, source: 1 },\n\t\t\t\treadOnly: 1,\n\t\t\t\tcanUndo: false\n\t\t\t} );\n\n\t\t\teditor.setKeystroke( CKEDITOR.ALT + 48 /*0*/, 'a11yHelp' );\n\t\t\tCKEDITOR.dialog.add( commandName, this.path + 'dialogs/a11yhelp.js' );\n\n\t\t\teditor.on( 'ariaEditorHelpLabel', function( evt ) {\n\t\t\t\tevt.data.label = editor.lang.common.editorHelp;\n\t\t\t} );\n\t\t}\n\t} );\n} )();\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.plugins.add( 'basicstyles', {\n\t// jscs:disable maximumLineLength\n\t// jscs:enable maximumLineLength\n\tinit: function( editor ) {\n\t\tvar order = 0;\n\t\t// All buttons use the same code to register. So, to avoid\n\t\t// duplications, let's use this tool function.\n\t\tvar addButtonCommand = function( buttonName, buttonLabel, commandName, styleDefiniton ) {\n\t\t\t\t// Disable the command if no definition is configured.\n\t\t\t\tif ( !styleDefiniton )\n\t\t\t\t\treturn;\n\n\t\t\t\tvar style = new CKEDITOR.style( styleDefiniton ),\n\t\t\t\t\tforms = contentForms[ commandName ];\n\n\t\t\t\t// Put the style as the most important form.\n\t\t\t\tforms.unshift( style );\n\n\t\t\t\t// Listen to contextual style activation.\n\t\t\t\teditor.attachStyleStateChange( style, function( state ) {\n\t\t\t\t\t!editor.readOnly && editor.getCommand( commandName ).setState( state );\n\t\t\t\t} );\n\n\t\t\t\t// Create the command that can be used to apply the style.\n\t\t\t\teditor.addCommand( commandName, new CKEDITOR.styleCommand( style, {\n\t\t\t\t\tcontentForms: forms\n\t\t\t\t} ) );\n\n\t\t\t\t// Register the button, if the button plugin is loaded.\n\t\t\t\tif ( editor.ui.addButton ) {\n\t\t\t\t\teditor.ui.addButton( buttonName, {\n\t\t\t\t\t\tlabel: buttonLabel,\n\t\t\t\t\t\tcommand: commandName,\n\t\t\t\t\t\ttoolbar: 'basicstyles,' + ( order += 10 )\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t};\n\n\t\tvar contentForms = {\n\t\t\t\tbold: [\n\t\t\t\t\t'strong',\n\t\t\t\t\t'b',\n\t\t\t\t\t[ 'span', function( el ) {\n\t\t\t\t\t\tvar fw = el.styles[ 'font-weight' ];\n\t\t\t\t\t\treturn fw == 'bold' || +fw >= 700;\n\t\t\t\t\t} ]\n\t\t\t\t],\n\n\t\t\t\titalic: [\n\t\t\t\t\t'em',\n\t\t\t\t\t'i',\n\t\t\t\t\t[ 'span', function( el ) {\n\t\t\t\t\t\treturn el.styles[ 'font-style' ] == 'italic';\n\t\t\t\t\t} ]\n\t\t\t\t],\n\n\t\t\t\tunderline: [\n\t\t\t\t\t'u',\n\t\t\t\t\t[ 'span', function( el ) {\n\t\t\t\t\t\treturn el.styles[ 'text-decoration' ] == 'underline';\n\t\t\t\t\t} ]\n\t\t\t\t],\n\n\t\t\t\tstrike: [\n\t\t\t\t\t's',\n\t\t\t\t\t'strike',\n\t\t\t\t\t[ 'span', function( el ) {\n\t\t\t\t\t\treturn el.styles[ 'text-decoration' ] == 'line-through';\n\t\t\t\t\t} ]\n\t\t\t\t],\n\n\t\t\t\tsubscript: [\n\t\t\t\t\t'sub'\n\t\t\t\t],\n\n\t\t\t\tsuperscript: [\n\t\t\t\t\t'sup'\n\t\t\t\t]\n\t\t\t},\n\t\t\tconfig = editor.config,\n\t\t\tlang = editor.lang.basicstyles;\n\n\t\taddButtonCommand( 'Bold', lang.bold, 'bold', config.coreStyles_bold );\n\t\taddButtonCommand( 'Italic', lang.italic, 'italic', config.coreStyles_italic );\n\t\taddButtonCommand( 'Underline', lang.underline, 'underline', config.coreStyles_underline );\n\t\taddButtonCommand( 'Strike', lang.strike, 'strike', config.coreStyles_strike );\n\t\taddButtonCommand( 'Subscript', lang.subscript, 'subscript', config.coreStyles_subscript );\n\t\taddButtonCommand( 'Superscript', lang.superscript, 'superscript', config.coreStyles_superscript );\n\n\t\teditor.setKeystroke( [\n\t\t\t[ CKEDITOR.CTRL + 66 /*B*/, 'bold' ],\n\t\t\t[ CKEDITOR.CTRL + 73 /*I*/, 'italic' ],\n\t\t\t[ CKEDITOR.CTRL + 85 /*U*/, 'underline' ]\n\t\t] );\n\t}\n} );\n\n// Basic Inline Styles.\n\n/**\n * The style definition that applies the **bold** style to the text.\n *\n * Read more in the [documentation](#!/guide/dev_basicstyles)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/basicstyles.html).\n *\n *\t\tconfig.coreStyles_bold = { element: 'b', overrides: 'strong' };\n *\n *\t\tconfig.coreStyles_bold = {\n *\t\t\telement: 'span',\n *\t\t\tattributes: { 'class': 'Bold' }\n *\t\t};\n *\n * @cfg\n * @member CKEDITOR.config\n */\nCKEDITOR.config.coreStyles_bold = { element: 'strong', overrides: 'b' };\n\n/**\n * The style definition that applies the *italics* style to the text.\n *\n * Read more in the [documentation](#!/guide/dev_basicstyles)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/basicstyles.html).\n *\n *\t\tconfig.coreStyles_italic = { element: 'i', overrides: 'em' };\n *\n *\t\tCKEDITOR.config.coreStyles_italic = {\n *\t\t\telement: 'span',\n *\t\t\tattributes: { 'class': 'Italic' }\n *\t\t};\n *\n * @cfg\n * @member CKEDITOR.config\n */\nCKEDITOR.config.coreStyles_italic = { element: 'em', overrides: 'i' };\n\n/**\n * The style definition that applies the underline style to the text.\n *\n * Read more in the [documentation](#!/guide/dev_basicstyles)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/basicstyles.html).\n *\n *\t\tCKEDITOR.config.coreStyles_underline = {\n *\t\t\telement: 'span',\n *\t\t\tattributes: { 'class': 'Underline' }\n *\t\t};\n *\n * @cfg\n * @member CKEDITOR.config\n */\nCKEDITOR.config.coreStyles_underline = { element: 'u' };\n\n/**\n * The style definition that applies the strikethrough style to the text.\n *\n * Read more in the [documentation](#!/guide/dev_basicstyles)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/basicstyles.html).\n *\n *\t\tCKEDITOR.config.coreStyles_strike = {\n *\t\t\telement: 'span',\n *\t\t\tattributes: { 'class': 'Strikethrough' },\n *\t\t\toverrides: 'strike'\n *\t\t};\n *\n * @cfg\n * @member CKEDITOR.config\n */\nCKEDITOR.config.coreStyles_strike = { element: 's', overrides: 'strike' };\n\n/**\n * The style definition that applies the subscript style to the text.\n *\n * Read more in the [documentation](#!/guide/dev_basicstyles)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/basicstyles.html).\n *\n *\t\tCKEDITOR.config.coreStyles_subscript = {\n *\t\t\telement: 'span',\n *\t\t\tattributes: { 'class': 'Subscript' },\n *\t\t\toverrides: 'sub'\n *\t\t};\n *\n * @cfg\n * @member CKEDITOR.config\n */\nCKEDITOR.config.coreStyles_subscript = { element: 'sub' };\n\n/**\n * The style definition that applies the superscript style to the text.\n *\n * Read more in the [documentation](#!/guide/dev_basicstyles)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/basicstyles.html).\n *\n *\t\tCKEDITOR.config.coreStyles_superscript = {\n *\t\t\telement: 'span',\n *\t\t\tattributes: { 'class': 'Superscript' },\n *\t\t\toverrides: 'sup'\n *\t\t};\n *\n * @cfg\n * @member CKEDITOR.config\n */\nCKEDITOR.config.coreStyles_superscript = { element: 'sup' };\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n( function() {\n\tfunction noBlockLeft( bqBlock ) {\n\t\tfor ( var i = 0, length = bqBlock.getChildCount(), child; i < length && ( child = bqBlock.getChild( i ) ); i++ ) {\n\t\t\tif ( child.type == CKEDITOR.NODE_ELEMENT && child.isBlockBoundary() )\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\tvar commandObject = {\n\t\texec: function( editor ) {\n\t\t\tvar state = editor.getCommand( 'blockquote' ).state,\n\t\t\t\tselection = editor.getSelection(),\n\t\t\t\trange = selection && selection.getRanges()[ 0 ];\n\n\t\t\tif ( !range )\n\t\t\t\treturn;\n\n\t\t\tvar bookmarks = selection.createBookmarks();\n\n\t\t\t// Kludge for http://dev.ckeditor.com/ticket/1592: if the bookmark nodes are in the beginning of\n\t\t\t// blockquote, then move them to the nearest block element in the\n\t\t\t// blockquote.\n\t\t\tif ( CKEDITOR.env.ie ) {\n\t\t\t\tvar bookmarkStart = bookmarks[ 0 ].startNode,\n\t\t\t\t\tbookmarkEnd = bookmarks[ 0 ].endNode,\n\t\t\t\t\tcursor;\n\n\t\t\t\tif ( bookmarkStart && bookmarkStart.getParent().getName() == 'blockquote' ) {\n\t\t\t\t\tcursor = bookmarkStart;\n\t\t\t\t\twhile ( ( cursor = cursor.getNext() ) ) {\n\t\t\t\t\t\tif ( cursor.type == CKEDITOR.NODE_ELEMENT && cursor.isBlockBoundary() ) {\n\t\t\t\t\t\t\tbookmarkStart.move( cursor, true );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( bookmarkEnd && bookmarkEnd.getParent().getName() == 'blockquote' ) {\n\t\t\t\t\tcursor = bookmarkEnd;\n\t\t\t\t\twhile ( ( cursor = cursor.getPrevious() ) ) {\n\t\t\t\t\t\tif ( cursor.type == CKEDITOR.NODE_ELEMENT && cursor.isBlockBoundary() ) {\n\t\t\t\t\t\t\tbookmarkEnd.move( cursor );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar iterator = range.createIterator(),\n\t\t\t\tblock;\n\t\t\titerator.enlargeBr = editor.config.enterMode != CKEDITOR.ENTER_BR;\n\n\t\t\tif ( state == CKEDITOR.TRISTATE_OFF ) {\n\t\t\t\tvar paragraphs = [];\n\t\t\t\twhile ( ( block = iterator.getNextParagraph() ) )\n\t\t\t\t\tparagraphs.push( block );\n\n\t\t\t\t// If no paragraphs, create one from the current selection position.\n\t\t\t\tif ( paragraphs.length < 1 ) {\n\t\t\t\t\tvar para = editor.document.createElement( editor.config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ),\n\t\t\t\t\t\tfirstBookmark = bookmarks.shift();\n\t\t\t\t\trange.insertNode( para );\n\t\t\t\t\tpara.append( new CKEDITOR.dom.text( '\\ufeff', editor.document ) );\n\t\t\t\t\trange.moveToBookmark( firstBookmark );\n\t\t\t\t\trange.selectNodeContents( para );\n\t\t\t\t\trange.collapse( true );\n\t\t\t\t\tfirstBookmark = range.createBookmark();\n\t\t\t\t\tparagraphs.push( para );\n\t\t\t\t\tbookmarks.unshift( firstBookmark );\n\t\t\t\t}\n\n\t\t\t\t// Make sure all paragraphs have the same parent.\n\t\t\t\tvar commonParent = paragraphs[ 0 ].getParent(),\n\t\t\t\t\ttmp = [];\n\t\t\t\tfor ( var i = 0; i < paragraphs.length; i++ ) {\n\t\t\t\t\tblock = paragraphs[ i ];\n\t\t\t\t\tcommonParent = commonParent.getCommonAncestor( block.getParent() );\n\t\t\t\t}\n\n\t\t\t\t// The common parent must not be the following tags: table, tbody, tr, ol, ul.\n\t\t\t\tvar denyTags = { table: 1, tbody: 1, tr: 1, ol: 1, ul: 1 };\n\t\t\t\twhile ( denyTags[ commonParent.getName() ] )\n\t\t\t\t\tcommonParent = commonParent.getParent();\n\n\t\t\t\t// Reconstruct the block list to be processed such that all resulting blocks\n\t\t\t\t// satisfy parentNode.equals( commonParent ).\n\t\t\t\tvar lastBlock = null;\n\t\t\t\twhile ( paragraphs.length > 0 ) {\n\t\t\t\t\tblock = paragraphs.shift();\n\t\t\t\t\twhile ( !block.getParent().equals( commonParent ) )\n\t\t\t\t\t\tblock = block.getParent();\n\t\t\t\t\tif ( !block.equals( lastBlock ) )\n\t\t\t\t\t\ttmp.push( block );\n\t\t\t\t\tlastBlock = block;\n\t\t\t\t}\n\n\t\t\t\t// If any of the selected blocks is a blockquote, remove it to prevent\n\t\t\t\t// nested blockquotes.\n\t\t\t\twhile ( tmp.length > 0 ) {\n\t\t\t\t\tblock = tmp.shift();\n\t\t\t\t\tif ( block.getName() == 'blockquote' ) {\n\t\t\t\t\t\tvar docFrag = new CKEDITOR.dom.documentFragment( editor.document );\n\t\t\t\t\t\twhile ( block.getFirst() ) {\n\t\t\t\t\t\t\tdocFrag.append( block.getFirst().remove() );\n\t\t\t\t\t\t\tparagraphs.push( docFrag.getLast() );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdocFrag.replace( block );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tparagraphs.push( block );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Now we have all the blocks to be included in a new blockquote node.\n\t\t\t\tvar bqBlock = editor.document.createElement( 'blockquote' );\n\t\t\t\tbqBlock.insertBefore( paragraphs[ 0 ] );\n\t\t\t\twhile ( paragraphs.length > 0 ) {\n\t\t\t\t\tblock = paragraphs.shift();\n\t\t\t\t\tbqBlock.append( block );\n\t\t\t\t}\n\t\t\t} else if ( state == CKEDITOR.TRISTATE_ON ) {\n\t\t\t\tvar moveOutNodes = [],\n\t\t\t\t\tdatabase = {};\n\n\t\t\t\twhile ( ( block = iterator.getNextParagraph() ) ) {\n\t\t\t\t\tvar bqParent = null,\n\t\t\t\t\t\tbqChild = null;\n\t\t\t\t\twhile ( block.getParent() ) {\n\t\t\t\t\t\tif ( block.getParent().getName() == 'blockquote' ) {\n\t\t\t\t\t\t\tbqParent = block.getParent();\n\t\t\t\t\t\t\tbqChild = block;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tblock = block.getParent();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remember the blocks that were recorded down in the moveOutNodes array\n\t\t\t\t\t// to prevent duplicates.\n\t\t\t\t\tif ( bqParent && bqChild && !bqChild.getCustomData( 'blockquote_moveout' ) ) {\n\t\t\t\t\t\tmoveOutNodes.push( bqChild );\n\t\t\t\t\t\tCKEDITOR.dom.element.setMarker( database, bqChild, 'blockquote_moveout', true );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tCKEDITOR.dom.element.clearAllMarkers( database );\n\n\t\t\t\tvar movedNodes = [],\n\t\t\t\t\tprocessedBlockquoteBlocks = [];\n\n\t\t\t\tdatabase = {};\n\t\t\t\twhile ( moveOutNodes.length > 0 ) {\n\t\t\t\t\tvar node = moveOutNodes.shift();\n\t\t\t\t\tbqBlock = node.getParent();\n\n\t\t\t\t\t// If the node is located at the beginning or the end, just take it out\n\t\t\t\t\t// without splitting. Otherwise, split the blockquote node and move the\n\t\t\t\t\t// paragraph in between the two blockquote nodes.\n\t\t\t\t\tif ( !node.getPrevious() )\n\t\t\t\t\t\tnode.remove().insertBefore( bqBlock );\n\t\t\t\t\telse if ( !node.getNext() )\n\t\t\t\t\t\tnode.remove().insertAfter( bqBlock );\n\t\t\t\t\telse {\n\t\t\t\t\t\tnode.breakParent( node.getParent() );\n\t\t\t\t\t\tprocessedBlockquoteBlocks.push( node.getNext() );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remember the blockquote node so we can clear it later (if it becomes empty).\n\t\t\t\t\tif ( !bqBlock.getCustomData( 'blockquote_processed' ) ) {\n\t\t\t\t\t\tprocessedBlockquoteBlocks.push( bqBlock );\n\t\t\t\t\t\tCKEDITOR.dom.element.setMarker( database, bqBlock, 'blockquote_processed', true );\n\t\t\t\t\t}\n\n\t\t\t\t\tmovedNodes.push( node );\n\t\t\t\t}\n\n\t\t\t\tCKEDITOR.dom.element.clearAllMarkers( database );\n\n\t\t\t\t// Clear blockquote nodes that have become empty.\n\t\t\t\tfor ( i = processedBlockquoteBlocks.length - 1; i >= 0; i-- ) {\n\t\t\t\t\tbqBlock = processedBlockquoteBlocks[ i ];\n\t\t\t\t\tif ( noBlockLeft( bqBlock ) )\n\t\t\t\t\t\tbqBlock.remove();\n\t\t\t\t}\n\n\t\t\t\tif ( editor.config.enterMode == CKEDITOR.ENTER_BR ) {\n\t\t\t\t\tvar firstTime = true;\n\t\t\t\t\twhile ( movedNodes.length ) {\n\t\t\t\t\t\tnode = movedNodes.shift();\n\n\t\t\t\t\t\tif ( node.getName() == 'div' ) {\n\t\t\t\t\t\t\tdocFrag = new CKEDITOR.dom.documentFragment( editor.document );\n\t\t\t\t\t\t\tvar needBeginBr = firstTime && node.getPrevious() && !( node.getPrevious().type == CKEDITOR.NODE_ELEMENT && node.getPrevious().isBlockBoundary() );\n\t\t\t\t\t\t\tif ( needBeginBr )\n\t\t\t\t\t\t\t\tdocFrag.append( editor.document.createElement( 'br' ) );\n\n\t\t\t\t\t\t\tvar needEndBr = node.getNext() && !( node.getNext().type == CKEDITOR.NODE_ELEMENT && node.getNext().isBlockBoundary() );\n\t\t\t\t\t\t\twhile ( node.getFirst() )\n\t\t\t\t\t\t\t\tnode.getFirst().remove().appendTo( docFrag );\n\n\t\t\t\t\t\t\tif ( needEndBr )\n\t\t\t\t\t\t\t\tdocFrag.append( editor.document.createElement( 'br' ) );\n\n\t\t\t\t\t\t\tdocFrag.replace( node );\n\t\t\t\t\t\t\tfirstTime = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tselection.selectBookmarks( bookmarks );\n\t\t\teditor.focus();\n\t\t},\n\n\t\trefresh: function( editor, path ) {\n\t\t\t// Check if inside of blockquote.\n\t\t\tvar firstBlock = path.block || path.blockLimit;\n\t\t\tthis.setState( editor.elementPath( firstBlock ).contains( 'blockquote', 1 ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );\n\t\t},\n\n\t\tcontext: 'blockquote',\n\n\t\tallowedContent: 'blockquote',\n\t\trequiredContent: 'blockquote'\n\t};\n\n\tCKEDITOR.plugins.add( 'blockquote', {\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\t\tinit: function( editor ) {\n\t\t\tif ( editor.blockless )\n\t\t\t\treturn;\n\n\t\t\teditor.addCommand( 'blockquote', commandObject );\n\n\t\t\teditor.ui.addButton && editor.ui.addButton( 'Blockquote', {\n\t\t\t\tlabel: editor.lang.blockquote.toolbar,\n\t\t\t\tcommand: 'blockquote',\n\t\t\t\ttoolbar: 'blocks,10'\n\t\t\t} );\n\t\t}\n\t} );\n} )();\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview The \"Notification\" plugin.\n *\n */\n\n'use strict';\n\nCKEDITOR.plugins.add( 'notification', {\n\n\tinit: function( editor ) {\n\t\teditor._.notificationArea = new Area( editor );\n\n\t\t// Overwrites default `editor.showNotification`.\n\t\teditor.showNotification = function( message, type, progressOrDuration ) {\n\t\t\tvar progress, duration;\n\n\t\t\tif ( type == 'progress' ) {\n\t\t\t\tprogress = progressOrDuration;\n\t\t\t} else {\n\t\t\t\tduration = progressOrDuration;\n\t\t\t}\n\n\t\t\tvar notification = new CKEDITOR.plugins.notification( editor, {\n\t\t\t\tmessage: message,\n\t\t\t\ttype: type,\n\t\t\t\tprogress: progress,\n\t\t\t\tduration: duration\n\t\t\t} );\n\n\t\t\tnotification.show();\n\n\t\t\treturn notification;\n\t\t};\n\n\t\t// Close the last notification on ESC.\n\t\teditor.on( 'key', function( evt ) {\n\t\t\tif ( evt.data.keyCode == 27 ) { /* ESC */\n\t\t\t\tvar notifications = editor._.notificationArea.notifications;\n\n\t\t\t\tif ( !notifications.length ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// As long as this is not a common practice to inform screen-reader users about actions, in this case\n\t\t\t\t// this is the best solution (unfortunately there is no standard for accessibility for notifications).\n\t\t\t\t// Notification has an `alert` aria role what means that it does not get a focus nor is needed to be\n\t\t\t\t// closed (unlike `alertdialog`). However notification will capture ESC key so we need to inform user\n\t\t\t\t// why it does not do other actions.\n\t\t\t\tsay( editor.lang.notification.closed );\n\n\t\t\t\t// Hide last.\n\t\t\t\tnotifications[ notifications.length - 1 ].hide();\n\n\t\t\t\tevt.cancel();\n\t\t\t}\n\t\t} );\n\n\t\t// Send the message to the screen readers.\n\t\tfunction say( text ) {\n\t\t\tvar message = new CKEDITOR.dom.element( 'div' );\n\t\t\tmessage.setStyles( {\n\t\t\t\tposition: 'fixed',\n\t\t\t\t'margin-left': '-9999px'\n\t\t\t} );\n\t\t\tmessage.setAttributes( {\n\t\t\t\t'aria-live': 'assertive',\n\t\t\t\t'aria-atomic': 'true'\n\t\t\t} );\n\t\t\tmessage.setText( text );\n\n\t\t\tCKEDITOR.document.getBody().append( message );\n\n\t\t\tsetTimeout( function() {\n\t\t\t\tmessage.remove();\n\t\t\t}, 100 );\n\t\t}\n\t}\n} );\n\n/**\n * Notification class. Notifications are used to display short messages to the user. They might be used to show the result of\n * asynchronous actions or information about changes in the editor content. It is recommended to use them instead of\n * alert dialogs. They should **not** be used if a user response is required nor with dialog windows (e.g. in dialog validation).\n *\n * There are four types of notifications available, see the {@link #type} property.\n *\n * Note that the notification constructor only creates a notification instance. To show it, use the {@link #show} method:\n *\n *\t\tvar notification = new CKEDITOR.plugins.notification( editor, { message: 'Foo' } );\n *\t\tnotification.show();\n *\n * You can also use the {@link CKEDITOR.editor#showNotification} method:\n *\n *\t\teditor.showNotification( 'Foo' );\n *\n * All of the notification actions: ({@link #show}, {@link #update} and {@link #hide}) fire cancelable events\n * on the related {@link CKEDITOR.editor} instance so you can integrate editor notifications with your website notifications.\n *\n * Refer to the [Notifications](http://docs.ckeditor.com/#!/guide/dev_notifications) article for more information about this feature.\n *\n * @since 4.5\n * @class CKEDITOR.plugins.notification\n * @constructor Create a notification object. Call {@link #show} to show the created notification.\n * @param {CKEDITOR.editor} editor The editor instance.\n * @param {Object} options\n * @param {String} options.message The message displayed in the notification.\n * @param {String} [options.type='info'] Notification type, see {@link #type}.\n * @param {Number} [options.progress=0] If the type is `progress` this may be a progress from 0 to 1.\n * @param {Number} [options.duration] How long the notification will be visible, see {@link #duration}.\n */\nfunction Notification( editor, options ) {\n\tCKEDITOR.tools.extend( this, options, {\n\t\teditor: editor,\n\t\tid: 'cke-' + CKEDITOR.tools.getUniqueId(),\n\t\tarea: editor._.notificationArea\n\t} );\n\n\tif ( !options.type ) {\n\t\tthis.type = 'info';\n\t}\n\n\tthis.element = this._createElement();\n\n\t// Don't allow dragging on notification (http://dev.ckeditor.com/ticket/13184).\n\teditor.plugins.clipboard && CKEDITOR.plugins.clipboard.preventDefaultDropOnElement( this.element );\n}\n\n/**\n * The editor instance.\n *\n * @readonly\n * @property {CKEDITOR.editor} editor\n */\n\n/**\n * Message displayed in the notification.\n *\n * @readonly\n * @property {String} message\n */\n\n/**\n * Notification type. There are four types available:\n *\n * * `info` (default) – Information for the user (e.g. \"File is uploading.\", \"ACF modified content.\"),\n * * `warning` – Warning or error message (e.g. \"This type of file is not supported.\",\n * \"You cannot paste the script.\"),\n * * `success` – Information that an operation finished successfully (e.g. \"File uploaded.\", \"Data imported.\").\n * * `progress` – Information about the progress of an operation. When the operation is done, the notification\n * type should be changed to `success`.\n *\n * @readonly\n * @property {String} type\n */\n\n/**\n * If the notification {@link #type} is `'progress'`, this is the progress from `0` to `1`.\n *\n * @readonly\n * @property {Number} progress\n */\n\n/**\n * Notification duration. Determines after how many milliseconds the notification should close automatically.\n * `0` means that the notification will not close automatically and that the user needs to close it manually.\n * The default value for `warning` and `progress` notifications is `0`. For `info` and `success` the value can\n * either be set through the {@link CKEDITOR.config#notification_duration} configuration option or equals `5000`\n * if the configuration option is not set.\n *\n * @readonly\n * @property {Number} duration\n */\n\n/**\n * Unique notification ID.\n *\n * @readonly\n * @property {Number} id\n */\n\n/**\n * Notification DOM element. There is one element per notification. It is created when the notification is created,\n * even if it is not shown. If the notification is hidden, the element is detached from the document but not deleted.\n * It will be reused if the notification is shown again.\n *\n * @readonly\n * @property {CKEDITOR.dom.element} element\n */\n\n/**\n * {@link CKEDITOR.plugins.notification.area Notification area} reference.\n *\n * @readonly\n * @property {CKEDITOR.plugins.notification.area} area\n */\n\nNotification.prototype = {\n\t/**\n\t * Adds the notification element to the notification area. The notification will be hidden automatically if\n\t * {@link #duration} is set.\n\t *\n\t * Fires the {@link CKEDITOR.editor#notificationShow} event.\n\t */\n\tshow: function() {\n\t\tif ( this.editor.fire( 'notificationShow', { notification: this } ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.area.add( this );\n\n\t\tthis._hideAfterTimeout();\n\t},\n\n\t/**\n\t * Updates the notification object and element.\n\t *\n\t * Fires the {@link CKEDITOR.editor#notificationUpdate} event.\n\t *\n\t * @param {Object} options\n\t * @param {String} [options.message] {@link #message}\n\t * @param {String} [options.type] {@link #type}\n\t * @param {Number} [options.progress] {@link #progress}\n\t * @param {Number} [options.duration] {@link #duration}\n\t * @param {Boolean} [options.important=false] If the update is important, the notification will be shown\n\t * if it was hidden and read by screen readers.\n\t */\n\tupdate: function( options ) {\n\t\tvar show = true;\n\n\t\tif ( this.editor.fire( 'notificationUpdate', { notification: this, options: options } ) === false ) {\n\t\t\t// The idea of cancelable event is to let user create his own way of displaying notification, so if\n\t\t\t// `notificationUpdate` event will be canceled there will be no interaction with notification area, but on\n\t\t\t// the other hand the logic should work anyway so object will be updated (including `element` property).\n\t\t\t// Note: we can safely update the element's attributes below, because this element is created inside\n\t\t\t// the constructor. If the notificatinShow event was canceled as well, the element is detached from DOM.\n\t\t\tshow = false;\n\t\t}\n\n\t\tvar element = this.element,\n\t\t\tmessageElement = element.findOne( '.cke_notification_message' ),\n\t\t\tprogressElement = element.findOne( '.cke_notification_progress' ),\n\t\t\ttype = options.type;\n\n\t\telement.removeAttribute( 'role' );\n\n\t\t// Change type to progress if `options.progress` is set.\n\t\tif ( options.progress && this.type != 'progress' ) {\n\t\t\ttype = 'progress';\n\t\t}\n\n\t\tif ( type ) {\n\t\t\telement.removeClass( this._getClass() );\n\t\t\telement.removeAttribute( 'aria-label' );\n\n\t\t\tthis.type = type;\n\n\t\t\telement.addClass( this._getClass() );\n\t\t\telement.setAttribute( 'aria-label', this.type );\n\n\t\t\tif ( this.type == 'progress' && !progressElement ) {\n\t\t\t\tprogressElement = this._createProgressElement();\n\t\t\t\tprogressElement.insertBefore( messageElement );\n\t\t\t} else if ( this.type != 'progress' && progressElement ) {\n\t\t\t\tprogressElement.remove();\n\t\t\t}\n\t\t}\n\n\t\tif ( options.message !== undefined ) {\n\t\t\tthis.message = options.message;\n\t\t\tmessageElement.setHtml( this.message );\n\t\t}\n\n\t\tif ( options.progress !== undefined ) {\n\t\t\tthis.progress = options.progress;\n\n\t\t\tif ( progressElement ) {\n\t\t\t\tprogressElement.setStyle( 'width', this._getPercentageProgress() );\n\t\t\t}\n\t\t}\n\n\t\tif ( show && options.important ) {\n\t\t\telement.setAttribute( 'role', 'alert' );\n\n\t\t\tif ( !this.isVisible() ) {\n\t\t\t\tthis.area.add( this );\n\t\t\t}\n\t\t}\n\n\t\t// Overwrite even if it is undefined.\n\t\tthis.duration = options.duration;\n\n\t\tthis._hideAfterTimeout();\n\t},\n\n\t/**\n\t * Removes the notification element from the notification area.\n\t *\n\t * Fires the {@link CKEDITOR.editor#notificationHide} event.\n\t */\n\thide: function() {\n\t\tif ( this.editor.fire( 'notificationHide', { notification: this } ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.area.remove( this );\n\t},\n\n\t/**\n\t * Returns `true` if the notification is in the notification area.\n\t *\n\t * @returns {Boolean} `true` if the notification is in the notification area.\n\t */\n\tisVisible: function() {\n\t\treturn CKEDITOR.tools.indexOf( this.area.notifications, this ) >= 0;\n\t},\n\n\t/**\n\t * Creates the notification DOM element.\n\t *\n\t * @private\n\t * @returns {CKEDITOR.dom.element} Notification DOM element.\n\t */\n\t_createElement: function() {\n\t\tvar notification = this,\n\t\t\tnotificationElement, notificationMessageElement, notificationCloseElement,\n\t\t\tclose = this.editor.lang.common.close;\n\n\t\tnotificationElement = new CKEDITOR.dom.element( 'div' );\n\t\tnotificationElement.addClass( 'cke_notification' );\n\t\tnotificationElement.addClass( this._getClass() );\n\t\tnotificationElement.setAttributes( {\n\t\t\tid: this.id,\n\t\t\trole: 'alert',\n\t\t\t'aria-label': this.type\n\t\t} );\n\n\t\tif ( this.type == 'progress' )\n\t\t\tnotificationElement.append( this._createProgressElement() );\n\n\t\tnotificationMessageElement = new CKEDITOR.dom.element( 'p' );\n\t\tnotificationMessageElement.addClass( 'cke_notification_message' );\n\t\tnotificationMessageElement.setHtml( this.message );\n\t\tnotificationElement.append( notificationMessageElement );\n\n\t\tnotificationCloseElement = CKEDITOR.dom.element.createFromHtml(\n\t\t\t'' +\n\t\t\t\t'X' +\n\t\t\t'' );\n\t\tnotificationElement.append( notificationCloseElement );\n\n\t\tnotificationCloseElement.on( 'click', function() {\n\t\t\t// Focus editor on close (http://dev.ckeditor.com/ticket/12865)\n\t\t\tnotification.editor.focus();\n\n\t\t\tnotification.hide();\n\t\t} );\n\n\t\treturn notificationElement;\n\t},\n\n\t/**\n\t * Gets the notification CSS class.\n\t *\n\t * @private\n\t * @returns {String} Notification CSS class.\n\t */\n\t_getClass: function() {\n\t\treturn ( this.type == 'progress' ) ?\n\t\t\t'cke_notification_info' :\n\t\t\t( 'cke_notification_' + this.type );\n\t},\n\n\t/**\n\t * Creates a progress element for the notification element.\n\t *\n\t * @private\n\t * @returns {CKEDITOR.dom.element} Progress element for the notification element.\n\t */\n\t_createProgressElement: function() {\n\t\tvar element = new CKEDITOR.dom.element( 'span' );\n\t\telement.addClass( 'cke_notification_progress' );\n\t\telement.setStyle( 'width', this._getPercentageProgress() );\n\t\treturn element;\n\t},\n\n\t/**\n\t * Gets the progress as a percentage (ex. `0.3` -> `30%`).\n\t *\n\t * @private\n\t * @returns {String} Progress as a percentage.\n\t */\n\t_getPercentageProgress: function() {\n\t\treturn Math.round( ( this.progress || 0 ) * 100 ) + '%';\n\t},\n\n\t/**\n\t * Hides the notification after a timeout.\n\t *\n\t * @private\n\t */\n\t_hideAfterTimeout: function() {\n\t\tvar notification = this,\n\t\t\tduration;\n\n\t\tif ( this._hideTimeoutId ) {\n\t\t\tclearTimeout( this._hideTimeoutId );\n\t\t}\n\n\t\tif ( typeof this.duration == 'number' ) {\n\t\t\tduration = this.duration;\n\t\t} else if ( this.type == 'info' || this.type == 'success' ) {\n\t\t\tduration = ( typeof this.editor.config.notification_duration == 'number' ) ?\n\t\t\t\tthis.editor.config.notification_duration :\n\t\t\t\t5000;\n\t\t}\n\n\t\tif ( duration ) {\n\t\t\tnotification._hideTimeoutId = setTimeout( function() {\n\t\t\t\tnotification.hide();\n\t\t\t}, duration );\n\t\t}\n\t}\n};\n\n/**\n * Notification area is an area where all notifications are put. The area is laid out dynamically.\n * When the first notification is added, the area is shown and all listeners are added.\n * When the last notification is removed, the area is hidden and all listeners are removed.\n *\n * @since 4.5\n * @private\n * @class CKEDITOR.plugins.notification.area\n * @constructor\n * @param {CKEDITOR.editor} editor The editor instance.\n */\nfunction Area( editor ) {\n\tvar that = this;\n\n\tthis.editor = editor;\n\tthis.notifications = [];\n\tthis.element = this._createElement();\n\tthis._uiBuffer = CKEDITOR.tools.eventsBuffer( 10, this._layout, this );\n\tthis._changeBuffer = CKEDITOR.tools.eventsBuffer( 500, this._layout, this );\n\n\teditor.on( 'destroy', function() {\n\t\tthat._removeListeners();\n\t\tthat.element.remove();\n\t} );\n}\n\n/**\n * The editor instance.\n *\n * @readonly\n * @property {CKEDITOR.editor} editor\n */\n\n/**\n * The array of added notifications.\n *\n * @readonly\n * @property {Array} notifications\n */\n\n/**\n * Notification area DOM element. This element is created when the area object is created. It will be attached to the document\n * when the first notification is added and removed when the last notification is removed.\n *\n * @readonly\n * @property {CKEDITOR.dom.element} element\n */\n\n/**\n * Notification width. Cached for performance reasons.\n *\n * @private\n * @property {CKEDITOR.dom.element} _notificationWidth\n */\n\n/**\n * Notification margin. Cached for performance reasons.\n *\n * @private\n * @property {CKEDITOR.dom.element} _notificationMargin\n */\n\n/**\n * Event buffer object for UI events to optimize performance.\n *\n * @private\n * @property {Object} _uiBuffer\n */\n\n/**\n * Event buffer object for editor change events to optimize performance.\n *\n * @private\n * @property {Object} _changeBuffer\n */\n\nArea.prototype = {\n\t/**\n\t * Adds the notification to the notification area. If it is the first notification, the area will also be attached to\n\t * the document and listeners will be attached.\n\t *\n\t * Note that the proper way to show a notification is to call the {@link CKEDITOR.plugins.notification#show} method.\n\t *\n\t * @param {CKEDITOR.plugins.notification} notification Notification to add.\n\t */\n\tadd: function( notification ) {\n\t\tthis.notifications.push( notification );\n\n\t\tthis.element.append( notification.element );\n\n\t\tif ( this.element.getChildCount() == 1 ) {\n\t\t\tCKEDITOR.document.getBody().append( this.element );\n\t\t\tthis._attachListeners();\n\t\t}\n\n\t\tthis._layout();\n\t},\n\n\t/**\n\t * Removes the notification from the notification area. If it is the last notification, the area will also be\n\t * detached from the document and listeners will be detached.\n\t *\n\t * Note that the proper way to hide a notification is to call the {@link CKEDITOR.plugins.notification#hide} method.\n\t *\n\t * @param {CKEDITOR.plugins.notification} notification Notification to remove.\n\t */\n\tremove: function( notification ) {\n\t\tvar i = CKEDITOR.tools.indexOf( this.notifications, notification );\n\n\t\tif ( i < 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.notifications.splice( i, 1 );\n\n\t\tnotification.element.remove();\n\n\t\tif ( !this.element.getChildCount() ) {\n\t\t\tthis._removeListeners();\n\t\t\tthis.element.remove();\n\t\t}\n\t},\n\n\t/**\n\t * Creates the notification area element.\n\t *\n\t * @private\n\t * @returns {CKEDITOR.dom.element} Notification area element.\n\t */\n\t_createElement: function() {\n\t\tvar editor = this.editor,\n\t\t\tconfig = editor.config,\n\t\t\tnotificationArea = new CKEDITOR.dom.element( 'div' );\n\n\t\tnotificationArea.addClass( 'cke_notifications_area' );\n\t\tnotificationArea.setAttribute( 'id', 'cke_notifications_area_' + editor.name );\n\t\tnotificationArea.setStyle( 'z-index', config.baseFloatZIndex - 2 );\n\n\t\treturn notificationArea;\n\t},\n\n\t/**\n\t * Attaches listeners to the notification area.\n\t *\n\t * @private\n\t */\n\t_attachListeners: function() {\n\t\tvar win = CKEDITOR.document.getWindow(),\n\t\t\teditor = this.editor;\n\n\t\twin.on( 'scroll', this._uiBuffer.input );\n\t\twin.on( 'resize', this._uiBuffer.input );\n\t\teditor.on( 'change', this._changeBuffer.input );\n\t\teditor.on( 'floatingSpaceLayout', this._layout, this, null, 20 );\n\t\teditor.on( 'blur', this._layout, this, null, 20 );\n\t},\n\n\t/**\n\t * Detaches listeners from the notification area.\n\t *\n\t * @private\n\t */\n\t_removeListeners: function() {\n\t\tvar win = CKEDITOR.document.getWindow(),\n\t\t\teditor = this.editor;\n\n\t\twin.removeListener( 'scroll', this._uiBuffer.input );\n\t\twin.removeListener( 'resize', this._uiBuffer.input );\n\t\teditor.removeListener( 'change', this._changeBuffer.input );\n\t\teditor.removeListener( 'floatingSpaceLayout', this._layout );\n\t\teditor.removeListener( 'blur', this._layout );\n\t},\n\n\t/**\n\t * Sets the position of the notification area based on the editor content, toolbar as well as\n\t * viewport position and dimensions.\n\t *\n\t * @private\n\t */\n\t_layout: function() {\n\t\tvar area = this.element,\n\t\t\teditor = this.editor,\n\t\t\tcontentsRect = editor.ui.contentsElement.getClientRect(),\n\t\t\tcontentsPos = editor.ui.contentsElement.getDocumentPosition(),\n\t\t\ttop,\n\t\t\ttopRect,\n\t\t\tareaRect = area.getClientRect(),\n\t\t\tnotification,\n\t\t\tnotificationWidth = this._notificationWidth,\n\t\t\tnotificationMargin = this._notificationMargin,\n\t\t\twin = CKEDITOR.document.getWindow(),\n\t\t\tscrollPos = win.getScrollPosition(),\n\t\t\tviewRect = win.getViewPaneSize(),\n\t\t\tbody = CKEDITOR.document.getBody(),\n\t\t\tbodyPos = body.getDocumentPosition(),\n\t\t\tcssLength = CKEDITOR.tools.cssLength;\n\n\t\t// Cache for optimization\n\t\tif ( !notificationWidth || !notificationMargin ) {\n\t\t\tnotification = this.element.getChild( 0 );\n\t\t\tnotificationWidth = this._notificationWidth = notification.getClientRect().width;\n\t\t\tnotificationMargin = this._notificationMargin =\n\t\t\t\tparseInt( notification.getComputedStyle( 'margin-left' ), 10 ) +\n\t\t\t\tparseInt( notification.getComputedStyle( 'margin-right' ), 10 );\n\t\t}\n\n\t\t// Check if toolbar exist and if so, then assign values to it (#491).\n\t\tif ( editor.toolbar ) {\n\t\t\ttop = editor.ui.space( 'top' );\n\t\t\ttopRect = top.getClientRect();\n\t\t}\n\n\n\t\t// --------------------------------------- Horizontal layout ----------------------------------------\n\n\t\t// +---Viewport-------------------------------+ +---Viewport-------------------------------+\n\t\t// | | | |\n\t\t// | +---Toolbar----------------------------+ | | +---Content----------------------------+ |\n\t\t// | | | | | | | |\n\t\t// | +---Content----------------------------+ | | | | |\n\t\t// | | | | | +---Toolbar----------------------+ | |\n\t\t// | | +------Notification------+ | | | | | | |\n\t\t// | | | | OR | +--------------------------------+ | |\n\t\t// | | | | | | | |\n\t\t// | | | | | | +------Notification------+ | |\n\t\t// | | | | | | | |\n\t\t// | | | | | | | |\n\t\t// | +--------------------------------------+ | | +--------------------------------------+ |\n\t\t// +------------------------------------------+ +------------------------------------------+\n\t\tif ( top && top.isVisible() &&\n\t\t\ttopRect.bottom > contentsRect.top &&\n\t\t\ttopRect.bottom < contentsRect.bottom - areaRect.height ) {\n\t\t\tsetBelowToolbar();\n\n\t\t// +---Viewport-------------------------------+\n\t\t// | |\n\t\t// | +---Content----------------------------+ |\n\t\t// | | | |\n\t\t// | | +------Notification------+ | |\n\t\t// | | | |\n\t\t// | | | |\n\t\t// | | | |\n\t\t// | +--------------------------------------+ |\n\t\t// | |\n\t\t// +------------------------------------------+\n\t\t} else if ( contentsRect.top > 0 ) {\n\t\t\tsetTopStandard();\n\n\t\t// +---Content----------------------------+\n\t\t// | |\n\t\t// +---Viewport-------------------------------+\n\t\t// | | | |\n\t\t// | | +------Notification------+ | |\n\t\t// | | | |\n\t\t// | | | |\n\t\t// | | | |\n\t\t// | +--------------------------------------+ |\n\t\t// | |\n\t\t// +------------------------------------------+\n\t\t} else if ( contentsPos.y + contentsRect.height - areaRect.height > scrollPos.y ) {\n\t\t\tsetTopFixed();\n\n\t\t// +---Content----------------------------+ +---Content----------------------------+\n\t\t// | | | |\n\t\t// | | | |\n\t\t// | | | +------Notification------+ |\n\t\t// | | | |\n\t\t// | | OR +--------------------------------------+\n\t\t// +---Viewport-------------------------------+\n\t\t// | | +------Notification------+ | | +---Viewport-------------------------------+\n\t\t// | | | | | |\n\t\t// | +--------------------------------------+ | | |\n\t\t// | | | |\n\t\t// +------------------------------------------+ +------------------------------------------+\n\t\t} else {\n\t\t\tsetBottom();\n\t\t}\n\n\t\tfunction setTopStandard() {\n\t\t\tarea.setStyles( {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: cssLength( contentsPos.y )\n\t\t\t} );\n\t\t}\n\n\t\tfunction setBelowToolbar() {\n\t\t\tarea.setStyles( {\n\t\t\t\tposition: 'fixed',\n\t\t\t\ttop: cssLength( topRect.bottom )\n\t\t\t} );\n\t\t}\n\n\t\tfunction setTopFixed() {\n\t\t\tarea.setStyles( {\n\t\t\t\tposition: 'fixed',\n\t\t\t\ttop: 0\n\t\t\t} );\n\t\t}\n\n\t\tfunction setBottom() {\n\t\t\tarea.setStyles( {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: cssLength( contentsPos.y + contentsRect.height - areaRect.height )\n\t\t\t} );\n\t\t}\n\n\t\t// ---------------------------------------- Vertical layout -----------------------------------------\n\n\t\tvar leftBase = area.getStyle( 'position' ) == 'fixed' ?\n\t\t\tcontentsRect.left :\n\t\t\tbody.getComputedStyle( 'position' ) != 'static' ? contentsPos.x - bodyPos.x : contentsPos.x;\n\n\t\t// Content is narrower than notification\n\t\tif ( contentsRect.width < notificationWidth + notificationMargin ) {\n\n\t\t\t// +---Viewport-------------------------------+\n\t\t\t// | |\n\t\t\t// | +---Content------------+ |\n\t\t\t// | | | |\n\t\t\t// | +------Notification------+ | |\n\t\t\t// | | | |\n\t\t\t// | +----------------------+ |\n\t\t\t// | |\n\t\t\t// +------------------------------------------+\n\t\t\tif ( contentsPos.x + notificationWidth + notificationMargin > scrollPos.x + viewRect.width ) {\n\t\t\t\tsetRight();\n\n\t\t\t// +---Viewport-------------------------------+ +---Viewport--------------------------+\n\t\t\t// | | | |\n\t\t\t// | +---Content------------+ | +---Content------------+ |\n\t\t\t// | | | | | | | |\n\t\t\t// | | +------Notification------+ | OR | +------Notification------+ |\n\t\t\t// | | | | | | | |\n\t\t\t// | +----------------------+ | +----------------------+ |\n\t\t\t// | | | |\n\t\t\t// +------------------------------------------+ +-------------------------------------+\n\t\t\t} else {\n\t\t\t\tsetLeft();\n\t\t\t}\n\n\t\t// Content is wider than notification.\n\t\t} else {\n\n\t\t\t// +--+Viewport+------------------------+\n\t\t\t// | |\n\t\t\t// | +---Content-----------------------------------------+\n\t\t\t// | | | |\n\t\t\t// | | +-----+Notification+-----+ |\n\t\t\t// | | | |\n\t\t\t// | | | |\n\t\t\t// | | | |\n\t\t\t// | +---------------------------------------------------+\n\t\t\t// | |\n\t\t\t// +------------------------------------+\n\t\t\tif ( contentsPos.x + notificationWidth + notificationMargin > scrollPos.x + viewRect.width ) {\n\t\t\t\tsetLeft();\n\n\t\t\t// +---Viewport-------------------------+\n\t\t\t// | |\n\t\t\t// | +---Content----------------------------------------------+\n\t\t\t// | | | |\n\t\t\t// | | +------Notification------+ | |\n\t\t\t// | | | |\n\t\t\t// | | | |\n\t\t\t// | +--------------------------------------------------------+\n\t\t\t// | |\n\t\t\t// +------------------------------------+\n\t\t\t} else if ( contentsPos.x + contentsRect.width / 2 +\n\t\t\t\tnotificationWidth / 2 + notificationMargin > scrollPos.x + viewRect.width ) {\n\t\t\t\tsetRightFixed();\n\n\t\t\t// +---Viewport-------------------------+\n\t\t\t// | |\n\t\t\t// +---Content----------------------------+ |\n\t\t\t// | | | |\n\t\t\t// | +------Notification------+ | |\n\t\t\t// | | | |\n\t\t\t// | | | |\n\t\t\t// +--------------------------------------+ |\n\t\t\t// | |\n\t\t\t// +------------------------------------+\n\t\t\t} else if ( contentsRect.left + contentsRect.width - notificationWidth - notificationMargin < 0 ) {\n\t\t\t\tsetRight();\n\n\t\t\t// +---Viewport-------------------------+\n\t\t\t// | |\n\t\t\t// +---Content---------------------------------------------+ |\n\t\t\t// | | | |\n\t\t\t// | | +------Notification------+ | |\n\t\t\t// | | | |\n\t\t\t// | | | |\n\t\t\t// +-------------------------------------------------------+ |\n\t\t\t// | |\n\t\t\t// +------------------------------------+\n\t\t\t} else if ( contentsRect.left + contentsRect.width / 2 - notificationWidth / 2 < 0 ) {\n\t\t\t\tsetLeftFixed();\n\n\t\t\t// +---Viewport-------------------------+\n\t\t\t// | |\n\t\t\t// | +---Content----------------------+ |\n\t\t\t// | | | |\n\t\t\t// | | +-----Notification-----+ | |\n\t\t\t// | | | |\n\t\t\t// | | | |\n\t\t\t// | +--------------------------------+ |\n\t\t\t// | |\n\t\t\t// +------------------------------------+\n\t\t\t} else {\n\t\t\t\tsetCenter();\n\t\t\t}\n\t\t}\n\n\t\tfunction setLeft() {\n\t\t\tarea.setStyle( 'left', cssLength( leftBase ) );\n\t\t}\n\n\t\tfunction setLeftFixed() {\n\t\t\tarea.setStyle( 'left', cssLength( leftBase - contentsPos.x + scrollPos.x ) );\n\t\t}\n\n\t\tfunction setCenter() {\n\t\t\tarea.setStyle( 'left', cssLength( leftBase + contentsRect.width / 2 - notificationWidth / 2 - notificationMargin / 2 ) );\n\t\t}\n\n\t\tfunction setRight() {\n\t\t\tarea.setStyle( 'left', cssLength( leftBase + contentsRect.width - notificationWidth - notificationMargin ) );\n\t\t}\n\n\t\tfunction setRightFixed() {\n\t\t\tarea.setStyle( 'left', cssLength( leftBase - contentsPos.x + scrollPos.x + viewRect.width -\n\t\t\t\tnotificationWidth - notificationMargin ) );\n\t\t}\n\t}\n};\n\nCKEDITOR.plugins.notification = Notification;\n\n/**\n * After how many milliseconds the notification of the `info` and `success`\n * {@link CKEDITOR.plugins.notification#type type} should close automatically.\n * `0` means that notifications will not close automatically.\n * Note that `warning` and `progress` notifications will never close automatically.\n *\n * Refer to the [Notifications](http://docs.ckeditor.com/#!/guide/dev_notifications) article\n * for more information about this feature.\n *\n * @since 4.5\n * @cfg {Number} [notification_duration=5000]\n * @member CKEDITOR.config\n */\n\n/**\n * Event fired when the {@link CKEDITOR.plugins.notification#show} method is called, before the\n * notification is shown. If this event is canceled, the notification will not be shown.\n *\n * Using this event allows you to fully customize how a notification will be shown. It may be used to integrate\n * the CKEditor notification system with your web page notifications.\n *\n * @since 4.5\n * @event notificationShow\n * @member CKEDITOR.editor\n * @param data\n * @param {CKEDITOR.plugins.notification} data.notification Notification which will be shown.\n * @param {CKEDITOR.editor} editor The editor instance.\n */\n\n/**\n * Event fired when the {@link CKEDITOR.plugins.notification#update} method is called, before the\n * notification is updated. If this event is canceled, the notification will not be shown even if the update was important,\n * but the object will be updated anyway. Note that canceling this event does not prevent updating {@link #element}\n * attributes, but if {@link #notificationShow} was canceled as well, this element is detached from the DOM.\n *\n * Using this event allows you to fully customize how a notification will be updated. It may be used to integrate\n * the CKEditor notification system with your web page notifications.\n *\n * @since 4.5\n * @event notificationUpdate\n * @member CKEDITOR.editor\n * @param data\n * @param {CKEDITOR.plugins.notification} data.notification Notification which will be updated.\n * Note that it contains the data that has not been updated yet.\n * @param {Object} data.options Update options, see {@link CKEDITOR.plugins.notification#update}.\n * @param {CKEDITOR.editor} editor The editor instance.\n */\n\n/**\n * Event fired when the {@link CKEDITOR.plugins.notification#hide} method is called, before the\n * notification is hidden. If this event is canceled, the notification will not be hidden.\n *\n * Using this event allows you to fully customize how a notification will be hidden. It may be used to integrate\n * the CKEditor notification system with your web page notifications.\n *\n * @since 4.5\n * @event notificationHide\n * @member CKEDITOR.editor\n * @param data\n * @param {CKEDITOR.plugins.notification} data.notification Notification which will be hidden.\n * @param {CKEDITOR.editor} editor The editor instance.\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n( function() {\n\tvar template = '' +\n\t\t'{label}' +\n\t\t'{ariaShortcut}' +\n\t\t'{arrowHtml}' +\n\t\t'';\n\n\tvar templateArrow = '' +\n\t\t// BLACK DOWN-POINTING TRIANGLE\n\t( CKEDITOR.env.hc ? '▼' : '' ) +\n\t\t'';\n\n\tvar btnArrowTpl = CKEDITOR.addTemplate( 'buttonArrow', templateArrow ),\n\t\tbtnTpl = CKEDITOR.addTemplate( 'button', template );\n\n\tCKEDITOR.plugins.add( 'button', {\n\t\tbeforeInit: function( editor ) {\n\t\t\teditor.ui.addHandler( CKEDITOR.UI_BUTTON, CKEDITOR.ui.button.handler );\n\t\t}\n\t} );\n\n\t/**\n\t * Button UI element.\n\t *\n\t * @readonly\n\t * @property {String} [='button']\n\t * @member CKEDITOR\n\t */\n\tCKEDITOR.UI_BUTTON = 'button';\n\n\t/**\n\t * Represents a button UI element. This class should not be called directly. To\n\t * create new buttons use {@link CKEDITOR.ui#addButton} instead.\n\t *\n\t * @class\n\t * @constructor Creates a button class instance.\n\t * @param {Object} definition The button definition.\n\t */\n\tCKEDITOR.ui.button = function( definition ) {\n\t\tCKEDITOR.tools.extend( this, definition,\n\t\t// Set defaults.\n\t\t{\n\t\t\ttitle: definition.label,\n\t\t\tclick: definition.click ||\n\t\t\tfunction( editor ) {\n\t\t\t\teditor.execCommand( definition.command );\n\t\t\t}\n\t\t} );\n\n\t\tthis._ = {};\n\t};\n\n\t/**\n\t * Represents the button handler object.\n\t *\n\t * @class\n\t * @singleton\n\t * @extends CKEDITOR.ui.handlerDefinition\n\t */\n\tCKEDITOR.ui.button.handler = {\n\t\t/**\n\t\t * Transforms a button definition in a {@link CKEDITOR.ui.button} instance.\n\t\t *\n\t\t * @member CKEDITOR.ui.button.handler\n\t\t * @param {Object} definition\n\t\t * @returns {CKEDITOR.ui.button}\n\t\t */\n\t\tcreate: function( definition ) {\n\t\t\treturn new CKEDITOR.ui.button( definition );\n\t\t}\n\t};\n\n\t/** @class CKEDITOR.ui.button */\n\tCKEDITOR.ui.button.prototype = {\n\t\t/**\n\t\t * Renders the button.\n\t\t *\n\t\t * @param {CKEDITOR.editor} editor The editor instance which this button is\n\t\t * to be used by.\n\t\t * @param {Array} output The output array to which the HTML code related to\n\t\t * this button should be appended.\n\t\t */\n\t\trender: function( editor, output ) {\n\t\t\tfunction updateState() {\n\t\t\t\t// \"this\" is a CKEDITOR.ui.button instance.\n\t\t\t\tvar mode = editor.mode;\n\n\t\t\t\tif ( mode ) {\n\t\t\t\t\t// Restore saved button state.\n\t\t\t\t\tvar state = this.modes[ mode ] ? modeStates[ mode ] !== undefined ? modeStates[ mode ] : CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED;\n\n\t\t\t\t\tstate = editor.readOnly && !this.readOnly ? CKEDITOR.TRISTATE_DISABLED : state;\n\n\t\t\t\t\tthis.setState( state );\n\n\t\t\t\t\t// Let plugin to disable button.\n\t\t\t\t\tif ( this.refresh )\n\t\t\t\t\t\tthis.refresh();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar env = CKEDITOR.env,\n\t\t\t\tid = this._.id = CKEDITOR.tools.getNextId(),\n\t\t\t\tstateName = '',\n\t\t\t\tcommand = this.command,\n\t\t\t\t// Get the command name.\n\t\t\t\tclickFn,\n\t\t\t\tkeystroke,\n\t\t\t\tshortcut;\n\n\t\t\tthis._.editor = editor;\n\n\t\t\tvar instance = {\n\t\t\t\tid: id,\n\t\t\t\tbutton: this,\n\t\t\t\teditor: editor,\n\t\t\t\tfocus: function() {\n\t\t\t\t\tvar element = CKEDITOR.document.getById( id );\n\t\t\t\t\telement.focus();\n\t\t\t\t},\n\t\t\t\texecute: function() {\n\t\t\t\t\tthis.button.click( editor );\n\t\t\t\t},\n\t\t\t\tattach: function( editor ) {\n\t\t\t\t\tthis.button.attach( editor );\n\t\t\t\t}\n\t\t\t};\n\n\t\t\tvar keydownFn = CKEDITOR.tools.addFunction( function( ev ) {\n\t\t\t\tif ( instance.onkey ) {\n\t\t\t\t\tev = new CKEDITOR.dom.event( ev );\n\t\t\t\t\treturn ( instance.onkey( instance, ev.getKeystroke() ) !== false );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tvar focusFn = CKEDITOR.tools.addFunction( function( ev ) {\n\t\t\t\tvar retVal;\n\n\t\t\t\tif ( instance.onfocus )\n\t\t\t\t\tretVal = ( instance.onfocus( instance, new CKEDITOR.dom.event( ev ) ) !== false );\n\n\t\t\t\treturn retVal;\n\t\t\t} );\n\n\t\t\tvar selLocked = 0;\n\n\t\t\tinstance.clickFn = clickFn = CKEDITOR.tools.addFunction( function() {\n\n\t\t\t\t// Restore locked selection in Opera.\n\t\t\t\tif ( selLocked ) {\n\t\t\t\t\teditor.unlockSelection( 1 );\n\t\t\t\t\tselLocked = 0;\n\t\t\t\t}\n\t\t\t\tinstance.execute();\n\n\t\t\t\t// Fixed iOS focus issue when your press disabled button (http://dev.ckeditor.com/ticket/12381).\n\t\t\t\tif ( env.iOS ) {\n\t\t\t\t\teditor.focus();\n\t\t\t\t}\n\t\t\t} );\n\n\n\t\t\t// Indicate a mode sensitive button.\n\t\t\tif ( this.modes ) {\n\t\t\t\tvar modeStates = {};\n\n\t\t\t\teditor.on( 'beforeModeUnload', function() {\n\t\t\t\t\tif ( editor.mode && this._.state != CKEDITOR.TRISTATE_DISABLED )\n\t\t\t\t\t\tmodeStates[ editor.mode ] = this._.state;\n\t\t\t\t}, this );\n\n\t\t\t\t// Update status when activeFilter, mode or readOnly changes.\n\t\t\t\teditor.on( 'activeFilterChange', updateState, this );\n\t\t\t\teditor.on( 'mode', updateState, this );\n\t\t\t\t// If this button is sensitive to readOnly state, update it accordingly.\n\t\t\t\t!this.readOnly && editor.on( 'readOnly', updateState, this );\n\n\t\t\t} else if ( command ) {\n\t\t\t\t// Get the command instance.\n\t\t\t\tcommand = editor.getCommand( command );\n\n\t\t\t\tif ( command ) {\n\t\t\t\t\tcommand.on( 'state', function() {\n\t\t\t\t\t\tthis.setState( command.state );\n\t\t\t\t\t}, this );\n\n\t\t\t\t\tstateName += ( command.state == CKEDITOR.TRISTATE_ON ? 'on' : command.state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' : 'off' );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// For button that has text-direction awareness on selection path.\n\t\t\tif ( this.directional ) {\n\t\t\t\teditor.on( 'contentDirChanged', function( evt ) {\n\t\t\t\t\tvar el = CKEDITOR.document.getById( this._.id ),\n\t\t\t\t\t\ticon = el.getFirst();\n\n\t\t\t\t\tvar pathDir = evt.data;\n\n\t\t\t\t\t// Make a minor direction change to become style-able for the skin icon.\n\t\t\t\t\tif ( pathDir != editor.lang.dir )\n\t\t\t\t\t\tel.addClass( 'cke_' + pathDir );\n\t\t\t\t\telse\n\t\t\t\t\t\tel.removeClass( 'cke_ltr' ).removeClass( 'cke_rtl' );\n\n\t\t\t\t\t// Inline style update for the plugin icon.\n\t\t\t\t\ticon.setAttribute( 'style', CKEDITOR.skin.getIconStyle( iconName, pathDir == 'rtl', this.icon, this.iconOffset ) );\n\t\t\t\t}, this );\n\t\t\t}\n\n\t\t\tif ( !command ) {\n\t\t\t\tstateName += 'off';\n\t\t\t} else {\n\t\t\t\tkeystroke = editor.getCommandKeystroke( command );\n\n\t\t\t\tif ( keystroke ) {\n\t\t\t\t\tshortcut = CKEDITOR.tools.keystrokeToString( editor.lang.common.keyboard, keystroke );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar name = this.name || this.command,\n\t\t\t\ticonName = name;\n\n\t\t\t// Check if we're pointing to an icon defined by another command. (http://dev.ckeditor.com/ticket/9555)\n\t\t\tif ( this.icon && !( /\\./ ).test( this.icon ) ) {\n\t\t\t\ticonName = this.icon;\n\t\t\t\tthis.icon = null;\n\t\t\t}\n\n\t\t\tvar params = {\n\t\t\t\tid: id,\n\t\t\t\tname: name,\n\t\t\t\ticonName: iconName,\n\t\t\t\tlabel: this.label,\n\t\t\t\tcls: this.className || '',\n\t\t\t\tstate: stateName,\n\t\t\t\tariaDisabled: stateName == 'disabled' ? 'true' : 'false',\n\t\t\t\ttitle: this.title + ( shortcut ? ' (' + shortcut.display + ')' : '' ),\n\t\t\t\tariaShortcut: shortcut ? editor.lang.common.keyboardShortcut + ' ' + shortcut.aria : '',\n\t\t\t\ttitleJs: env.gecko && !env.hc ? '' : ( this.title || '' ).replace( \"'\", '' ),\n\t\t\t\thasArrow: this.hasArrow ? 'true' : 'false',\n\t\t\t\tkeydownFn: keydownFn,\n\t\t\t\tfocusFn: focusFn,\n\t\t\t\tclickFn: clickFn,\n\t\t\t\tstyle: CKEDITOR.skin.getIconStyle( iconName, ( editor.lang.dir == 'rtl' ), this.icon, this.iconOffset ),\n\t\t\t\tarrowHtml: this.hasArrow ? btnArrowTpl.output() : ''\n\t\t\t};\n\n\t\t\tbtnTpl.output( params, output );\n\n\t\t\tif ( this.onRender )\n\t\t\t\tthis.onRender();\n\n\t\t\treturn instance;\n\t\t},\n\n\t\t/**\n\t\t * Sets the button state.\n\t\t *\n\t\t * @param {Number} state Indicates the button state. One of {@link CKEDITOR#TRISTATE_ON},\n\t\t * {@link CKEDITOR#TRISTATE_OFF}, or {@link CKEDITOR#TRISTATE_DISABLED}.\n\t\t */\n\t\tsetState: function( state ) {\n\t\t\tif ( this._.state == state )\n\t\t\t\treturn false;\n\n\t\t\tthis._.state = state;\n\n\t\t\tvar element = CKEDITOR.document.getById( this._.id );\n\n\t\t\tif ( element ) {\n\t\t\t\telement.setState( state, 'cke_button' );\n\n\t\t\t\tstate == CKEDITOR.TRISTATE_DISABLED ?\n\t\t\t\t\telement.setAttribute( 'aria-disabled', true ) :\n\t\t\t\t\telement.removeAttribute( 'aria-disabled' );\n\n\t\t\t\tif ( !this.hasArrow ) {\n\t\t\t\t\t// Note: aria-pressed attribute should not be added to menuButton instances. (http://dev.ckeditor.com/ticket/11331)\n\t\t\t\t\tstate == CKEDITOR.TRISTATE_ON ?\n\t\t\t\t\t\telement.setAttribute( 'aria-pressed', true ) :\n\t\t\t\t\t\telement.removeAttribute( 'aria-pressed' );\n\t\t\t\t} else {\n\t\t\t\t\tvar newLabel = state == CKEDITOR.TRISTATE_ON ?\n\t\t\t\t\t\tthis._.editor.lang.button.selectedLabel.replace( /%1/g, this.label ) : this.label;\n\t\t\t\t\tCKEDITOR.document.getById( this._.id + '_label' ).setText( newLabel );\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Gets the button state.\n\t\t *\n\t\t * @returns {Number} The button state. One of {@link CKEDITOR#TRISTATE_ON},\n\t\t * {@link CKEDITOR#TRISTATE_OFF}, or {@link CKEDITOR#TRISTATE_DISABLED}.\n\t\t */\n\t\tgetState: function() {\n\t\t\treturn this._.state;\n\t\t},\n\n\t\t/**\n\t\t * Returns this button's {@link CKEDITOR.feature} instance.\n\t\t *\n\t\t * It may be this button instance if it has at least one of\n\t\t * `allowedContent` and `requiredContent` properties. Otherwise,\n\t\t * if a command is bound to this button by the `command` property, then\n\t\t * that command will be returned.\n\t\t *\n\t\t * This method implements the {@link CKEDITOR.feature#toFeature} interface method.\n\t\t *\n\t\t * @since 4.1\n\t\t * @param {CKEDITOR.editor} Editor instance.\n\t\t * @returns {CKEDITOR.feature} The feature.\n\t\t */\n\t\ttoFeature: function( editor ) {\n\t\t\tif ( this._.feature )\n\t\t\t\treturn this._.feature;\n\n\t\t\tvar feature = this;\n\n\t\t\t// If button isn't a feature, return command if is bound.\n\t\t\tif ( !this.allowedContent && !this.requiredContent && this.command )\n\t\t\t\tfeature = editor.getCommand( this.command ) || feature;\n\n\t\t\treturn this._.feature = feature;\n\t\t}\n\t};\n\n\t/**\n\t * Adds a button definition to the UI elements list.\n\t *\n\t *\t\teditorInstance.ui.addButton( 'MyBold', {\n\t *\t\t\tlabel: 'My Bold',\n\t *\t\t\tcommand: 'bold',\n\t *\t\t\ttoolbar: 'basicstyles,1'\n\t *\t\t} );\n\t *\n\t * @member CKEDITOR.ui\n\t * @param {String} name The button name.\n\t * @param {Object} definition The button definition.\n\t * @param {String} definition.label The textual part of the button (if visible) and its tooltip.\n\t * @param {String} definition.command The command to be executed once the button is activated.\n\t * @param {String} definition.toolbar The {@link CKEDITOR.config#toolbarGroups toolbar group} into which\n\t * the button will be added. An optional index value (separated by a comma) determines the button position within the group.\n\t */\n\tCKEDITOR.ui.prototype.addButton = function( name, definition ) {\n\t\tthis.add( name, CKEDITOR.UI_BUTTON, definition );\n\t};\n\n} )();\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview The \"toolbar\" plugin. Renders the default toolbar interface in\n * the editor.\n */\n\n( function() {\n\tvar toolbox = function() {\n\t\t\tthis.toolbars = [];\n\t\t\tthis.focusCommandExecuted = false;\n\t\t};\n\n\ttoolbox.prototype.focus = function() {\n\t\tfor ( var t = 0, toolbar; toolbar = this.toolbars[ t++ ]; ) {\n\t\t\tfor ( var i = 0, item; item = toolbar.items[ i++ ]; ) {\n\t\t\t\tif ( item.focus ) {\n\t\t\t\t\titem.focus();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tvar commands = {\n\t\ttoolbarFocus: {\n\t\t\tmodes: { wysiwyg: 1, source: 1 },\n\t\t\treadOnly: 1,\n\n\t\t\texec: function( editor ) {\n\t\t\t\tif ( editor.toolbox ) {\n\t\t\t\t\teditor.toolbox.focusCommandExecuted = true;\n\n\t\t\t\t\t// Make the first button focus accessible for IE. (http://dev.ckeditor.com/ticket/3417)\n\t\t\t\t\t// Adobe AIR instead need while of delay.\n\t\t\t\t\tif ( CKEDITOR.env.ie || CKEDITOR.env.air ) {\n\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\teditor.toolbox.focus();\n\t\t\t\t\t\t}, 100 );\n\t\t\t\t\t} else {\n\t\t\t\t\t\teditor.toolbox.focus();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\tCKEDITOR.plugins.add( 'toolbar', {\n\t\trequires: 'button',\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\n\t\tinit: function( editor ) {\n\t\t\tvar endFlag;\n\n\t\t\tvar itemKeystroke = function( item, keystroke ) {\n\t\t\t\t\tvar next, toolbar;\n\t\t\t\t\tvar rtl = editor.lang.dir == 'rtl',\n\t\t\t\t\t\ttoolbarGroupCycling = editor.config.toolbarGroupCycling,\n\t\t\t\t\t\t// Picking right/left key codes.\n\t\t\t\t\t\trightKeyCode = rtl ? 37 : 39,\n\t\t\t\t\t\tleftKeyCode = rtl ? 39 : 37;\n\n\t\t\t\t\ttoolbarGroupCycling = toolbarGroupCycling === undefined || toolbarGroupCycling;\n\n\t\t\t\t\tswitch ( keystroke ) {\n\t\t\t\t\t\tcase 9: // TAB\n\t\t\t\t\t\tcase CKEDITOR.SHIFT + 9: // SHIFT + TAB\n\t\t\t\t\t\t\t// Cycle through the toolbars, starting from the one\n\t\t\t\t\t\t\t// closest to the current item.\n\t\t\t\t\t\t\twhile ( !toolbar || !toolbar.items.length ) {\n\t\t\t\t\t\t\t\tif ( keystroke == 9 ) {\n\t\t\t\t\t\t\t\t\ttoolbar = ( ( toolbar ? toolbar.next : item.toolbar.next ) || editor.toolbox.toolbars[ 0 ] );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\ttoolbar = ( ( toolbar ? toolbar.previous : item.toolbar.previous ) || editor.toolbox.toolbars[ editor.toolbox.toolbars.length - 1 ] );\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Look for the first item that accepts focus.\n\t\t\t\t\t\t\t\tif ( toolbar.items.length ) {\n\t\t\t\t\t\t\t\t\titem = toolbar.items[ endFlag ? ( toolbar.items.length - 1 ) : 0 ];\n\t\t\t\t\t\t\t\t\twhile ( item && !item.focus ) {\n\t\t\t\t\t\t\t\t\t\titem = endFlag ? item.previous : item.next;\n\n\t\t\t\t\t\t\t\t\t\tif ( !item )\n\t\t\t\t\t\t\t\t\t\t\ttoolbar = 0;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( item )\n\t\t\t\t\t\t\t\titem.focus();\n\n\t\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t\tcase rightKeyCode:\n\t\t\t\t\t\t\tnext = item;\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\t// Look for the next item in the toolbar.\n\t\t\t\t\t\t\t\tnext = next.next;\n\n\t\t\t\t\t\t\t\t// If it's the last item, cycle to the first one.\n\t\t\t\t\t\t\t\tif ( !next && toolbarGroupCycling ) next = item.toolbar.items[ 0 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ( next && !next.focus );\n\n\t\t\t\t\t\t\t// If available, just focus it, otherwise focus the\n\t\t\t\t\t\t\t// first one.\n\t\t\t\t\t\t\tif ( next )\n\t\t\t\t\t\t\t\tnext.focus();\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t// Send a TAB.\n\t\t\t\t\t\t\t\titemKeystroke( item, 9 );\n\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\tcase 40: // DOWN-ARROW\n\t\t\t\t\t\t\tif ( item.button && item.button.hasArrow ) {\n\t\t\t\t\t\t\t\titem.execute();\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Send left arrow key.\n\t\t\t\t\t\t\t\titemKeystroke( item, keystroke == 40 ? rightKeyCode : leftKeyCode );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\tcase leftKeyCode:\n\t\t\t\t\t\tcase 38: // UP-ARROW\n\t\t\t\t\t\t\tnext = item;\n\t\t\t\t\t\t\tdo {\n\t\t\t\t\t\t\t\t// Look for the previous item in the toolbar.\n\t\t\t\t\t\t\t\tnext = next.previous;\n\n\t\t\t\t\t\t\t\t// If it's the first item, cycle to the last one.\n\t\t\t\t\t\t\t\tif ( !next && toolbarGroupCycling ) next = item.toolbar.items[ item.toolbar.items.length - 1 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\twhile ( next && !next.focus );\n\n\t\t\t\t\t\t\t// If available, just focus it, otherwise focus the\n\t\t\t\t\t\t\t// last one.\n\t\t\t\t\t\t\tif ( next )\n\t\t\t\t\t\t\t\tnext.focus();\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tendFlag = 1;\n\t\t\t\t\t\t\t\t// Send a SHIFT + TAB.\n\t\t\t\t\t\t\t\titemKeystroke( item, CKEDITOR.SHIFT + 9 );\n\t\t\t\t\t\t\t\tendFlag = 0;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t\tcase 27: // ESC\n\t\t\t\t\t\t\teditor.focus();\n\t\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t\tcase 13: // ENTER\n\t\t\t\t\t\tcase 32: // SPACE\n\t\t\t\t\t\t\titem.execute();\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn true;\n\t\t\t\t};\n\n\t\t\teditor.on( 'uiSpace', function( event ) {\n\t\t\t\tif ( event.data.space != editor.config.toolbarLocation )\n\t\t\t\t\treturn;\n\n\t\t\t\t// Create toolbar only once.\n\t\t\t\tevent.removeListener();\n\n\t\t\t\teditor.toolbox = new toolbox();\n\n\t\t\t\tvar labelId = CKEDITOR.tools.getNextId();\n\n\t\t\t\tvar output = [\n\t\t\t\t\t'', editor.lang.toolbar.toolbars, '',\n\t\t\t\t\t''\n\t\t\t\t];\n\n\t\t\t\tvar expanded = editor.config.toolbarStartupExpanded !== false,\n\t\t\t\t\tgroupStarted, pendingSeparator;\n\n\t\t\t\t// If the toolbar collapser will be available, we'll have\n\t\t\t\t// an additional container for all toolbars.\n\t\t\t\tif ( editor.config.toolbarCanCollapse && editor.elementMode != CKEDITOR.ELEMENT_MODE_INLINE )\n\t\t\t\t\toutput.push( '' : ' style=\"display:none\">' ) );\n\n\t\t\t\tvar toolbars = editor.toolbox.toolbars,\n\t\t\t\t\ttoolbar = getToolbarConfig( editor ),\n\t\t\t\t\ttoolbarLength = toolbar.length;\n\n\t\t\t\tfor ( var r = 0; r < toolbarLength; r++ ) {\n\t\t\t\t\tvar toolbarId,\n\t\t\t\t\t\ttoolbarObj = 0,\n\t\t\t\t\t\ttoolbarName,\n\t\t\t\t\t\trow = toolbar[ r ],\n\t\t\t\t\t\tlastToolbarInRow = row !== '/' && ( toolbar[ r + 1 ] === '/' || r == toolbarLength - 1 ),\n\t\t\t\t\t\titems;\n\n\t\t\t\t\t// It's better to check if the row object is really\n\t\t\t\t\t// available because it's a common mistake to leave\n\t\t\t\t\t// an extra comma in the toolbar definition\n\t\t\t\t\t// settings, which leads on the editor not loading\n\t\t\t\t\t// at all in IE. (http://dev.ckeditor.com/ticket/3983)\n\t\t\t\t\tif ( !row )\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\tif ( groupStarted ) {\n\t\t\t\t\t\toutput.push( '' );\n\t\t\t\t\t\tgroupStarted = 0;\n\t\t\t\t\t\tpendingSeparator = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( row === '/' ) {\n\t\t\t\t\t\toutput.push( '' );\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\titems = row.items || row;\n\n\t\t\t\t\t// Create all items defined for this toolbar.\n\t\t\t\t\tfor ( var i = 0; i < items.length; i++ ) {\n\t\t\t\t\t\tvar item = items[ i ],\n\t\t\t\t\t\t\tcanGroup;\n\n\t\t\t\t\t\tif ( item ) {\n\t\t\t\t\t\t\tif ( item.type == CKEDITOR.UI_SEPARATOR ) {\n\t\t\t\t\t\t\t\t// Do not add the separator immediately. Just save\n\t\t\t\t\t\t\t\t// it be included if we already have something in\n\t\t\t\t\t\t\t\t// the toolbar and if a new item is to be added (later).\n\t\t\t\t\t\t\t\tpendingSeparator = groupStarted && item;\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcanGroup = item.canGroup !== false;\n\n\t\t\t\t\t\t\t// Initialize the toolbar first, if needed.\n\t\t\t\t\t\t\tif ( !toolbarObj ) {\n\t\t\t\t\t\t\t\t// Create the basic toolbar object.\n\t\t\t\t\t\t\t\ttoolbarId = CKEDITOR.tools.getNextId();\n\t\t\t\t\t\t\t\ttoolbarObj = { id: toolbarId, items: [] };\n\t\t\t\t\t\t\t\ttoolbarName = row.name && ( editor.lang.toolbar.toolbarGroups[ row.name ] || row.name );\n\n\t\t\t\t\t\t\t\t// Output the toolbar opener.\n\t\t\t\t\t\t\t\toutput.push( '' );\n\n\t\t\t\t\t\t\t\t// If a toolbar name is available, send the voice label.\n\t\t\t\t\t\t\t\ttoolbarName && output.push( '', toolbarName, '' );\n\n\t\t\t\t\t\t\t\toutput.push( '' );\n\n\t\t\t\t\t\t\t\t// Add the toolbar to the \"editor.toolbox.toolbars\"\n\t\t\t\t\t\t\t\t// array.\n\t\t\t\t\t\t\t\tvar index = toolbars.push( toolbarObj ) - 1;\n\n\t\t\t\t\t\t\t\t// Create the next/previous reference.\n\t\t\t\t\t\t\t\tif ( index > 0 ) {\n\t\t\t\t\t\t\t\t\ttoolbarObj.previous = toolbars[ index - 1 ];\n\t\t\t\t\t\t\t\t\ttoolbarObj.previous.next = toolbarObj;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( canGroup ) {\n\t\t\t\t\t\t\t\tif ( !groupStarted ) {\n\t\t\t\t\t\t\t\t\toutput.push( '' );\n\t\t\t\t\t\t\t\t\tgroupStarted = 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( groupStarted ) {\n\t\t\t\t\t\t\t\toutput.push( '' );\n\t\t\t\t\t\t\t\tgroupStarted = 0;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfunction addItem( item ) { // jshint ignore:line\n\t\t\t\t\t\t\t\tvar itemObj = item.render( editor, output );\n\t\t\t\t\t\t\t\tindex = toolbarObj.items.push( itemObj ) - 1;\n\n\t\t\t\t\t\t\t\tif ( index > 0 ) {\n\t\t\t\t\t\t\t\t\titemObj.previous = toolbarObj.items[ index - 1 ];\n\t\t\t\t\t\t\t\t\titemObj.previous.next = itemObj;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\titemObj.toolbar = toolbarObj;\n\t\t\t\t\t\t\t\titemObj.onkey = itemKeystroke;\n\n\t\t\t\t\t\t\t\t// Fix for http://dev.ckeditor.com/ticket/3052:\n\t\t\t\t\t\t\t\t// Prevent JAWS from focusing the toolbar after document load.\n\t\t\t\t\t\t\t\titemObj.onfocus = function() {\n\t\t\t\t\t\t\t\t\tif ( !editor.toolbox.focusCommandExecuted )\n\t\t\t\t\t\t\t\t\t\teditor.focus();\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( pendingSeparator ) {\n\t\t\t\t\t\t\t\taddItem( pendingSeparator );\n\t\t\t\t\t\t\t\tpendingSeparator = 0;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\taddItem( item );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( groupStarted ) {\n\t\t\t\t\t\toutput.push( '' );\n\t\t\t\t\t\tgroupStarted = 0;\n\t\t\t\t\t\tpendingSeparator = 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( toolbarObj )\n\t\t\t\t\t\toutput.push( '' );\n\t\t\t\t}\n\n\t\t\t\tif ( editor.config.toolbarCanCollapse )\n\t\t\t\t\toutput.push( '' );\n\n\t\t\t\t// Not toolbar collapser for inline mode.\n\t\t\t\tif ( editor.config.toolbarCanCollapse && editor.elementMode != CKEDITOR.ELEMENT_MODE_INLINE ) {\n\t\t\t\t\tvar collapserFn = CKEDITOR.tools.addFunction( function() {\n\t\t\t\t\t\teditor.execCommand( 'toolbarCollapse' );\n\t\t\t\t\t} );\n\n\t\t\t\t\teditor.on( 'destroy', function() {\n\t\t\t\t\t\tCKEDITOR.tools.removeFunction( collapserFn );\n\t\t\t\t\t} );\n\n\t\t\t\t\teditor.addCommand( 'toolbarCollapse', {\n\t\t\t\t\t\treadOnly: 1,\n\t\t\t\t\t\texec: function( editor ) {\n\t\t\t\t\t\t\tvar collapser = editor.ui.space( 'toolbar_collapser' ),\n\t\t\t\t\t\t\t\ttoolbox = collapser.getPrevious(),\n\t\t\t\t\t\t\t\tcontents = editor.ui.space( 'contents' ),\n\t\t\t\t\t\t\t\ttoolboxContainer = toolbox.getParent(),\n\t\t\t\t\t\t\t\tcontentHeight = parseInt( contents.$.style.height, 10 ),\n\t\t\t\t\t\t\t\tpreviousHeight = toolboxContainer.$.offsetHeight,\n\t\t\t\t\t\t\t\tminClass = 'cke_toolbox_collapser_min',\n\t\t\t\t\t\t\t\tcollapsed = collapser.hasClass( minClass );\n\n\t\t\t\t\t\t\tif ( !collapsed ) {\n\t\t\t\t\t\t\t\ttoolbox.hide();\n\t\t\t\t\t\t\t\tcollapser.addClass( minClass );\n\t\t\t\t\t\t\t\tcollapser.setAttribute( 'title', editor.lang.toolbar.toolbarExpand );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\ttoolbox.show();\n\t\t\t\t\t\t\t\tcollapser.removeClass( minClass );\n\t\t\t\t\t\t\t\tcollapser.setAttribute( 'title', editor.lang.toolbar.toolbarCollapse );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Update collapser symbol.\n\t\t\t\t\t\t\tcollapser.getFirst().setText( collapsed ? '\\u25B2' : // BLACK UP-POINTING TRIANGLE\n\t\t\t\t\t\t\t'\\u25C0' ); // BLACK LEFT-POINTING TRIANGLE\n\n\t\t\t\t\t\t\tvar dy = toolboxContainer.$.offsetHeight - previousHeight;\n\t\t\t\t\t\t\tcontents.setStyle( 'height', ( contentHeight - dy ) + 'px' );\n\n\t\t\t\t\t\t\teditor.fire( 'resize', {\n\t\t\t\t\t\t\t\touterHeight: editor.container.$.offsetHeight,\n\t\t\t\t\t\t\t\tcontentsHeight: contents.$.offsetHeight,\n\t\t\t\t\t\t\t\touterWidth: editor.container.$.offsetWidth\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tmodes: { wysiwyg: 1, source: 1 }\n\t\t\t\t\t} );\n\n\t\t\t\t\teditor.setKeystroke( CKEDITOR.ALT + ( CKEDITOR.env.ie || CKEDITOR.env.webkit ? 189 : 109 ) /*-*/, 'toolbarCollapse' );\n\n\t\t\t\t\toutput.push( '', '', // BLACK UP-POINTING TRIANGLE\n\t\t\t\t\t\t'' );\n\t\t\t\t}\n\n\t\t\t\toutput.push( '' );\n\t\t\t\tevent.data.html += output.join( '' );\n\t\t\t} );\n\n\t\t\teditor.on( 'destroy', function() {\n\t\t\t\tif ( this.toolbox ) {\n\t\t\t\t\tvar toolbars,\n\t\t\t\t\t\tindex = 0,\n\t\t\t\t\t\ti, items, instance;\n\t\t\t\t\ttoolbars = this.toolbox.toolbars;\n\t\t\t\t\tfor ( ; index < toolbars.length; index++ ) {\n\t\t\t\t\t\titems = toolbars[ index ].items;\n\t\t\t\t\t\tfor ( i = 0; i < items.length; i++ ) {\n\t\t\t\t\t\t\tinstance = items[ i ];\n\t\t\t\t\t\t\tif ( instance.clickFn )\n\t\t\t\t\t\t\t\tCKEDITOR.tools.removeFunction( instance.clickFn );\n\t\t\t\t\t\t\tif ( instance.keyDownFn )\n\t\t\t\t\t\t\t\tCKEDITOR.tools.removeFunction( instance.keyDownFn );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Manage editor focus when navigating the toolbar.\n\t\t\teditor.on( 'uiReady', function() {\n\t\t\t\tvar toolbox = editor.ui.space( 'toolbox' );\n\t\t\t\ttoolbox && editor.focusManager.add( toolbox, 1 );\n\t\t\t} );\n\n\t\t\teditor.addCommand( 'toolbarFocus', commands.toolbarFocus );\n\t\t\teditor.setKeystroke( CKEDITOR.ALT + 121 /*F10*/, 'toolbarFocus' );\n\n\t\t\teditor.ui.add( '-', CKEDITOR.UI_SEPARATOR, {} );\n\t\t\teditor.ui.addHandler( CKEDITOR.UI_SEPARATOR, {\n\t\t\t\tcreate: function() {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trender: function( editor, output ) {\n\t\t\t\t\t\t\toutput.push( '' );\n\t\t\t\t\t\t\treturn {};\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n\n\tfunction getToolbarConfig( editor ) {\n\t\tvar removeButtons = editor.config.removeButtons;\n\n\t\tremoveButtons = removeButtons && removeButtons.split( ',' );\n\n\t\tfunction buildToolbarConfig() {\n\n\t\t\t// Object containing all toolbar groups used by ui items.\n\t\t\tvar lookup = getItemDefinedGroups();\n\n\t\t\t// Take the base for the new toolbar, which is basically a toolbar\n\t\t\t// definition without items.\n\t\t\tvar toolbar = CKEDITOR.tools.clone( editor.config.toolbarGroups ) || getPrivateToolbarGroups( editor );\n\n\t\t\t// Fill the toolbar groups with the available ui items.\n\t\t\tfor ( var i = 0; i < toolbar.length; i++ ) {\n\t\t\t\tvar toolbarGroup = toolbar[ i ];\n\n\t\t\t\t// Skip toolbar break.\n\t\t\t\tif ( toolbarGroup == '/' )\n\t\t\t\t\tcontinue;\n\t\t\t\t// Handle simply group name item.\n\t\t\t\telse if ( typeof toolbarGroup == 'string' )\n\t\t\t\t\ttoolbarGroup = toolbar[ i ] = { name: toolbarGroup };\n\n\t\t\t\tvar items, subGroups = toolbarGroup.groups;\n\n\t\t\t\t// Look for items that match sub groups.\n\t\t\t\tif ( subGroups ) {\n\t\t\t\t\tfor ( var j = 0, sub; j < subGroups.length; j++ ) {\n\t\t\t\t\t\tsub = subGroups[ j ];\n\n\t\t\t\t\t\t// If any ui item is registered for this subgroup.\n\t\t\t\t\t\titems = lookup[ sub ];\n\t\t\t\t\t\titems && fillGroup( toolbarGroup, items );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Add the main group items as well.\n\t\t\t\titems = lookup[ toolbarGroup.name ];\n\t\t\t\titems && fillGroup( toolbarGroup, items );\n\t\t\t}\n\n\t\t\treturn toolbar;\n\t\t}\n\n\t\t// Returns an object containing all toolbar groups used by ui items.\n\t\tfunction getItemDefinedGroups() {\n\t\t\tvar groups = {},\n\t\t\t\titemName, item, itemToolbar, group, order;\n\n\t\t\tfor ( itemName in editor.ui.items ) {\n\t\t\t\titem = editor.ui.items[ itemName ];\n\t\t\t\titemToolbar = item.toolbar || 'others';\n\t\t\t\tif ( itemToolbar ) {\n\t\t\t\t\t// Break the toolbar property into its parts: \"group_name[,order]\".\n\t\t\t\t\titemToolbar = itemToolbar.split( ',' );\n\t\t\t\t\tgroup = itemToolbar[ 0 ];\n\t\t\t\t\torder = parseInt( itemToolbar[ 1 ] || -1, 10 );\n\n\t\t\t\t\t// Initialize the group, if necessary.\n\t\t\t\t\tgroups[ group ] || ( groups[ group ] = [] );\n\n\t\t\t\t\t// Push the data used to build the toolbar later.\n\t\t\t\t\tgroups[ group ].push( { name: itemName, order: order } );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Put the items in the right order.\n\t\t\tfor ( group in groups ) {\n\t\t\t\tgroups[ group ] = groups[ group ].sort( function( a, b ) {\n\t\t\t\t\treturn a.order == b.order ? 0 :\n\t\t\t\t\t\tb.order < 0 ? -1 :\n\t\t\t\t\t\ta.order < 0 ? 1 :\n\t\t\t\t\t\ta.order < b.order ? -1 :\n\t\t\t\t\t\t1;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn groups;\n\t\t}\n\n\t\tfunction fillGroup( toolbarGroup, uiItems ) {\n\t\t\tif ( uiItems.length ) {\n\t\t\t\tif ( toolbarGroup.items )\n\t\t\t\t\ttoolbarGroup.items.push( editor.ui.create( '-' ) );\n\t\t\t\telse\n\t\t\t\t\ttoolbarGroup.items = [];\n\n\t\t\t\tvar item, name;\n\t\t\t\twhile ( ( item = uiItems.shift() ) ) {\n\t\t\t\t\tname = typeof item == 'string' ? item : item.name;\n\n\t\t\t\t\t// Ignore items that are configured to be removed.\n\t\t\t\t\tif ( !removeButtons || CKEDITOR.tools.indexOf( removeButtons, name ) == -1 ) {\n\t\t\t\t\t\titem = editor.ui.create( name );\n\n\t\t\t\t\t\tif ( !item )\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\tif ( !editor.addFeature( item ) )\n\t\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t\ttoolbarGroup.items.push( item );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction populateToolbarConfig( config ) {\n\t\t\tvar toolbar = [],\n\t\t\t\ti, group, newGroup;\n\n\t\t\tfor ( i = 0; i < config.length; ++i ) {\n\t\t\t\tgroup = config[ i ];\n\t\t\t\tnewGroup = {};\n\n\t\t\t\tif ( group == '/' )\n\t\t\t\t\ttoolbar.push( group );\n\t\t\t\telse if ( CKEDITOR.tools.isArray( group ) ) {\n\t\t\t\t\tfillGroup( newGroup, CKEDITOR.tools.clone( group ) );\n\t\t\t\t\ttoolbar.push( newGroup );\n\t\t\t\t}\n\t\t\t\telse if ( group.items ) {\n\t\t\t\t\tfillGroup( newGroup, CKEDITOR.tools.clone( group.items ) );\n\t\t\t\t\tnewGroup.name = group.name;\n\t\t\t\t\ttoolbar.push( newGroup );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn toolbar;\n\t\t}\n\n\t\tvar toolbar = editor.config.toolbar;\n\n\t\t// If it is a string, return the relative \"toolbar_name\" config.\n\t\tif ( typeof toolbar == 'string' )\n\t\t\ttoolbar = editor.config[ 'toolbar_' + toolbar ];\n\n\t\treturn ( editor.toolbar = toolbar ? populateToolbarConfig( toolbar ) : buildToolbarConfig() );\n\t}\n\n\t/**\n\t * Adds a toolbar group. See {@link CKEDITOR.config#toolbarGroups} for more details.\n\t *\n\t * **Note:** This method will not modify toolbar groups set explicitly by\n\t * {@link CKEDITOR.config#toolbarGroups}. It will only extend the default setting.\n\t *\n\t * @param {String} name Toolbar group name.\n\t * @param {Number/String} previous The name of the toolbar group after which this one\n\t * should be added or `0` if this group should be the first one.\n\t * @param {String} [subgroupOf] The name of the parent group.\n\t * @member CKEDITOR.ui\n\t */\n\tCKEDITOR.ui.prototype.addToolbarGroup = function( name, previous, subgroupOf ) {\n\t\t// The toolbarGroups from the privates is the one we gonna use for automatic toolbar creation.\n\t\tvar toolbarGroups = getPrivateToolbarGroups( this.editor ),\n\t\t\tatStart = previous === 0,\n\t\t\tnewGroup = { name: name };\n\n\t\tif ( subgroupOf ) {\n\t\t\t// Transform the subgroupOf name in the real subgroup object.\n\t\t\tsubgroupOf = CKEDITOR.tools.search( toolbarGroups, function( group ) {\n\t\t\t\treturn group.name == subgroupOf;\n\t\t\t} );\n\n\t\t\tif ( subgroupOf ) {\n\t\t\t\t!subgroupOf.groups && ( subgroupOf.groups = [] ) ;\n\n\t\t\t\tif ( previous ) {\n\t\t\t\t\t// Search the \"previous\" item and add the new one after it.\n\t\t\t\t\tprevious = CKEDITOR.tools.indexOf( subgroupOf.groups, previous );\n\t\t\t\t\tif ( previous >= 0 ) {\n\t\t\t\t\t\tsubgroupOf.groups.splice( previous + 1, 0, name );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// If no previous found.\n\n\t\t\t\tif ( atStart )\n\t\t\t\t\tsubgroupOf.groups.splice( 0, 0, name );\n\t\t\t\telse\n\t\t\t\t\tsubgroupOf.groups.push( name );\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\t// Ignore \"previous\" if subgroupOf has not been found.\n\t\t\t\tprevious = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( previous ) {\n\t\t\t// Transform the \"previous\" name into its index.\n\t\t\tprevious = CKEDITOR.tools.indexOf( toolbarGroups, function( group ) {\n\t\t\t\treturn group.name == previous;\n\t\t\t} );\n\t\t}\n\n\t\tif ( atStart )\n\t\t\ttoolbarGroups.splice( 0, 0, name );\n\t\telse if ( typeof previous == 'number' )\n\t\t\ttoolbarGroups.splice( previous + 1, 0, newGroup );\n\t\telse\n\t\t\ttoolbarGroups.push( name );\n\t};\n\n\tfunction getPrivateToolbarGroups( editor ) {\n\t\treturn editor._.toolbarGroups || ( editor._.toolbarGroups = [\n\t\t\t{ name: 'document', groups: [ 'mode', 'document', 'doctools' ] },\n\t\t\t{ name: 'clipboard', groups: [ 'clipboard', 'undo' ] },\n\t\t\t{ name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] },\n\t\t\t{ name: 'forms' },\n\t\t\t'/',\n\t\t\t{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },\n\t\t\t{ name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] },\n\t\t\t{ name: 'links' },\n\t\t\t{ name: 'insert' },\n\t\t\t'/',\n\t\t\t{ name: 'styles' },\n\t\t\t{ name: 'colors' },\n\t\t\t{ name: 'tools' },\n\t\t\t{ name: 'others' },\n\t\t\t{ name: 'about' }\n\t\t] );\n\t}\n} )();\n\n/**\n * Separator UI element.\n *\n * @readonly\n * @property {String} [='separator']\n * @member CKEDITOR\n */\nCKEDITOR.UI_SEPARATOR = 'separator';\n\n/**\n * The part of the user interface where the toolbar will be rendered. For the default\n * editor implementation, the recommended options are `'top'` and `'bottom'`.\n *\n * Please note that this option is only applicable to [classic](#!/guide/dev_framed)\n * (`iframe`-based) editor. In case of [inline](#!/guide/dev_inline) editor the toolbar\n * position is set dynamically depending on the position of the editable element on the screen.\n *\n * Read more in the [documentation](#!/guide/dev_toolbarlocation)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/toolbarlocation.html).\n *\n *\t\tconfig.toolbarLocation = 'bottom';\n *\n * @cfg\n * @member CKEDITOR.config\n */\nCKEDITOR.config.toolbarLocation = 'top';\n\n/**\n * The toolbox (alias toolbar) definition. It is a toolbar name or an array of\n * toolbars (strips), each one being also an array, containing a list of UI items.\n *\n * If set to `null`, the toolbar will be generated automatically using all available buttons\n * and {@link #toolbarGroups} as a toolbar groups layout.\n *\n * In CKEditor 4.5+ you can generate your toolbar customization code by using the [visual\n * toolbar configurator](http://docs.ckeditor.com/#!/guide/dev_toolbar).\n *\n *\t\t// Defines a toolbar with only one strip containing the \"Source\" button, a\n *\t\t// separator, and the \"Bold\" and \"Italic\" buttons.\n *\t\tconfig.toolbar = [\n *\t\t\t[ 'Source', '-', 'Bold', 'Italic' ]\n *\t\t];\n *\n *\t\t// Similar to the example above, defines a \"Basic\" toolbar with only one strip containing three buttons.\n *\t\t// Note that this setting is composed by \"toolbar_\" added to the toolbar name, which in this case is called \"Basic\".\n *\t\t// This second part of the setting name can be anything. You must use this name in the CKEDITOR.config.toolbar setting\n *\t\t// in order to instruct the editor which `toolbar_(name)` setting should be used.\n *\t\tconfig.toolbar_Basic = [\n *\t\t\t[ 'Source', '-', 'Bold', 'Italic' ]\n *\t\t];\n *\t\t// Load toolbar_Name where Name = Basic.\n *\t\tconfig.toolbar = 'Basic';\n *\n * @cfg {Array/String} [toolbar=null]\n * @member CKEDITOR.config\n */\n\n/**\n * The toolbar groups definition.\n *\n * If the toolbar layout is not explicitly defined by the {@link #toolbar} setting, then\n * this setting is used to group all defined buttons (see {@link CKEDITOR.ui#addButton}).\n * Buttons are associated with toolbar groups by the `toolbar` property in their definition objects.\n *\n * New groups may be dynamically added during the editor and plugin initialization by\n * {@link CKEDITOR.ui#addToolbarGroup}. This is only possible if the default setting was used.\n *\n *\t\t// Default setting.\n *\t\tconfig.toolbarGroups = [\n *\t\t\t{ name: 'document',\t groups: [ 'mode', 'document', 'doctools' ] },\n *\t\t\t{ name: 'clipboard', groups: [ 'clipboard', 'undo' ] },\n *\t\t\t{ name: 'editing', groups: [ 'find', 'selection', 'spellchecker' ] },\n *\t\t\t{ name: 'forms' },\n *\t\t\t'/',\n *\t\t\t{ name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },\n *\t\t\t{ name: 'paragraph', groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] },\n *\t\t\t{ name: 'links' },\n *\t\t\t{ name: 'insert' },\n *\t\t\t'/',\n *\t\t\t{ name: 'styles' },\n *\t\t\t{ name: 'colors' },\n *\t\t\t{ name: 'tools' },\n *\t\t\t{ name: 'others' },\n *\t\t\t{ name: 'about' }\n *\t\t];\n *\n * @cfg {Array} [toolbarGroups=see example]\n * @member CKEDITOR.config\n */\n\n/**\n * Whether the toolbar can be collapsed by the user. If disabled, the Collapse Toolbar\n * button will not be displayed.\n *\n *\t\tconfig.toolbarCanCollapse = true;\n *\n * @cfg {Boolean} [toolbarCanCollapse=false]\n * @member CKEDITOR.config\n */\n\n/**\n * Whether the toolbar must start expanded when the editor is loaded.\n *\n * Setting this option to `false` will affect the toolbar only when\n * {@link #toolbarCanCollapse} is set to `true`:\n *\n *\t\tconfig.toolbarCanCollapse = true;\n *\t\tconfig.toolbarStartupExpanded = false;\n *\n * @cfg {Boolean} [toolbarStartupExpanded=true]\n * @member CKEDITOR.config\n */\n\n/**\n * When enabled, causes the *Arrow* keys navigation to cycle within the current\n * toolbar group. Otherwise the *Arrow* keys will move through all items available in\n * the toolbar. The *Tab* key will still be used to quickly jump among the\n * toolbar groups.\n *\n *\t\tconfig.toolbarGroupCycling = false;\n *\n * @since 3.6\n * @cfg {Boolean} [toolbarGroupCycling=true]\n * @member CKEDITOR.config\n */\n\n/**\n * List of toolbar button names that must not be rendered. This will also work\n * for non-button toolbar items, like the Font drop-down list.\n *\n *\t\tconfig.removeButtons = 'Underline,JustifyCenter';\n *\n * This configuration option should not be overused. The recommended way is to use the\n * {@link CKEDITOR.config#removePlugins} setting to remove features from the editor\n * or even better, [create a custom editor build](http://ckeditor.com/builder) with\n * just the features that you will use.\n * In some cases though, a single plugin may define a set of toolbar buttons and\n * `removeButtons` may be useful when just a few of them are to be removed.\n *\n * @cfg {String} [removeButtons]\n * @member CKEDITOR.config\n */\n\n/**\n * The toolbar definition used by the editor. It is created from the\n * {@link CKEDITOR.config#toolbar} option if it is set or automatically\n * based on {@link CKEDITOR.config#toolbarGroups}.\n *\n * @readonly\n * @property {Object} toolbar\n * @member CKEDITOR.editor\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @ignore\n * File overview: Clipboard support.\n */\n\n//\n// COPY & PASTE EXECUTION FLOWS:\n// -- CTRL+C\n//\t\t* if ( isCustomCopyCutSupported )\n//\t\t\t* dataTransfer.setData( 'text/html', getSelectedHtml )\n//\t\t* else\n//\t\t\t* browser's default behavior\n// -- CTRL+X\n//\t\t* listen onKey (onkeydown)\n//\t\t* fire 'saveSnapshot' on editor\n//\t\t* if ( isCustomCopyCutSupported )\n//\t\t\t* dataTransfer.setData( 'text/html', getSelectedHtml )\n//\t\t\t* extractSelectedHtml // remove selected contents\n//\t\t* else\n//\t\t\t* browser's default behavior\n//\t\t* deferred second 'saveSnapshot' event\n// -- CTRL+V\n//\t\t* listen onKey (onkeydown)\n//\t\t* simulate 'beforepaste' for non-IEs on editable\n//\t\t* listen 'onpaste' on editable ('onbeforepaste' for IE)\n//\t\t* fire 'beforePaste' on editor\n//\t\t* if ( !canceled && ( htmlInDataTransfer || !external paste) && dataTransfer is not empty ) getClipboardDataByPastebin\n//\t\t* fire 'paste' on editor\n//\t\t* !canceled && fire 'afterPaste' on editor\n// -- Copy command\n//\t\t* tryToCutCopy\n//\t\t\t* execCommand\n//\t\t* !success && notification\n// -- Cut command\n//\t\t* fixCut\n//\t\t* tryToCutCopy\n//\t\t\t* execCommand\n//\t\t* !success && notification\n// -- Paste command\n//\t\t* fire 'paste' on editable ('beforepaste' for IE)\n//\t\t* !canceled && execCommand 'paste'\n// -- Paste from native context menu & menubar\n//\t\t(Fx & Webkits are handled in 'paste' default listener.\n//\t\tOpera cannot be handled at all because it doesn't fire any events\n//\t\tSpecial treatment is needed for IE, for which is this part of doc)\n//\t\t* listen 'onpaste'\n//\t\t* cancel native event\n//\t\t* fire 'beforePaste' on editor\n//\t\t* if ( !canceled && ( htmlInDataTransfer || !external paste) && dataTransfer is not empty ) getClipboardDataByPastebin\n//\t\t* execIECommand( 'paste' ) -> this fires another 'paste' event, so cancel it\n//\t\t* fire 'paste' on editor\n//\t\t* !canceled && fire 'afterPaste' on editor\n//\n//\n// PASTE EVENT - PREPROCESSING:\n// -- Possible dataValue types: auto, text, html.\n// -- Possible dataValue contents:\n//\t\t* text (possible \\n\\r)\n//\t\t* htmlified text (text + br,div,p - no presentational markup & attrs - depends on browser)\n//\t\t* html\n// -- Possible flags:\n//\t\t* htmlified - if true then content is a HTML even if no markup inside. This flag is set\n//\t\t\tfor content from editable pastebins, because they 'htmlify' pasted content.\n//\n// -- Type: auto:\n//\t\t* content: htmlified text ->\tfilter, unify text markup (brs, ps, divs), set type: text\n//\t\t* content: html ->\t\t\t\tfilter, set type: html\n// -- Type: text:\n//\t\t* content: htmlified text ->\tfilter, unify text markup\n//\t\t* content: html ->\t\t\t\tfilter, strip presentational markup, unify text markup\n// -- Type: html:\n//\t\t* content: htmlified text ->\tfilter, unify text markup\n//\t\t* content: html ->\t\t\t\tfilter\n//\n// -- Phases:\n//\t\t* if dataValue is empty copy data from dataTransfer to dataValue (priority 1)\n//\t\t* filtering (priorities 3-5) - e.g. pastefromword filters\n//\t\t* content type sniffing (priority 6)\n//\t\t* markup transformations for text (priority 6)\n//\n// DRAG & DROP EXECUTION FLOWS:\n// -- Drag\n//\t\t* save to the global object:\n//\t\t\t* drag timestamp (with 'cke-' prefix),\n//\t\t\t* selected html,\n//\t\t\t* drag range,\n//\t\t\t* editor instance.\n//\t\t* put drag timestamp into event.dataTransfer.text\n// -- Drop\n//\t\t* if events text == saved timestamp && editor == saved editor\n//\t\t\tinternal drag & drop occurred\n//\t\t\t* getRangeAtDropPosition\n//\t\t\t* create bookmarks for drag and drop ranges starting from the end of the document\n//\t\t\t* dragRange.deleteContents()\n//\t\t\t* fire 'paste' with saved html and drop range\n//\t\t* if events text == saved timestamp && editor != saved editor\n//\t\t\tcross editor drag & drop occurred\n//\t\t\t* getRangeAtDropPosition\n//\t\t\t* fire 'paste' with saved html\n//\t\t\t* dragRange.deleteContents()\n//\t\t\t* FF: refreshCursor on afterPaste\n//\t\t* if events text != saved timestamp\n//\t\t\tdrop form external source occurred\n//\t\t\t* getRangeAtDropPosition\n//\t\t\t* if event contains html data then fire 'paste' with html\n//\t\t\t* else if event contains text data then fire 'paste' with encoded text\n//\t\t\t* FF: refreshCursor on afterPaste\n\n'use strict';\n\n( function() {\n\t// Register the plugin.\n\tCKEDITOR.plugins.add( 'clipboard', {\n\t\trequires: 'notification,toolbar',\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\t\tinit: function( editor ) {\n\t\t\tvar filterType,\n\t\t\t\tfiltersFactory = filtersFactoryFactory();\n\n\t\t\tif ( editor.config.forcePasteAsPlainText ) {\n\t\t\t\tfilterType = 'plain-text';\n\t\t\t} else if ( editor.config.pasteFilter ) {\n\t\t\t\tfilterType = editor.config.pasteFilter;\n\t\t\t}\n\t\t\t// On Webkit the pasteFilter defaults 'semantic-content' because pasted data is so terrible\n\t\t\t// that it must be always filtered.\n\t\t\telse if ( CKEDITOR.env.webkit && !( 'pasteFilter' in editor.config ) ) {\n\t\t\t\tfilterType = 'semantic-content';\n\t\t\t}\n\n\t\t\teditor.pasteFilter = filtersFactory.get( filterType );\n\n\t\t\tinitPasteClipboard( editor );\n\t\t\tinitDragDrop( editor );\n\n\t\t\t// Convert image file (if present) to base64 string for Firefox. Do it as the first\n\t\t\t// step as the conversion is asynchronous and should hold all further paste processing.\n\t\t\tif ( CKEDITOR.env.gecko ) {\n\t\t\t\tvar supportedImageTypes = [ 'image/png', 'image/jpeg', 'image/gif' ],\n\t\t\t\t\tlatestId;\n\n\t\t\t\teditor.on( 'paste', function( evt ) {\n\t\t\t\t\tvar dataObj = evt.data,\n\t\t\t\t\t\tdata = dataObj.dataValue,\n\t\t\t\t\t\tdataTransfer = dataObj.dataTransfer;\n\n\t\t\t\t\t// If data empty check for image content inside data transfer. http://dev.ckeditor.com/ticket/16705\n\t\t\t\t\tif ( !data && dataObj.method == 'paste' && dataTransfer && dataTransfer.getFilesCount() == 1 && latestId != dataTransfer.id ) {\n\t\t\t\t\t\tvar file = dataTransfer.getFile( 0 );\n\n\t\t\t\t\t\tif ( CKEDITOR.tools.indexOf( supportedImageTypes, file.type ) != -1 ) {\n\t\t\t\t\t\t\tvar fileReader = new FileReader();\n\n\t\t\t\t\t\t\t// Convert image file to img tag with base64 image.\n\t\t\t\t\t\t\tfileReader.addEventListener( 'load', function() {\n\t\t\t\t\t\t\t\tevt.data.dataValue = '';\n\t\t\t\t\t\t\t\teditor.fire( 'paste', evt.data );\n\t\t\t\t\t\t\t}, false );\n\n\t\t\t\t\t\t\t// Proceed with normal flow if reading file was aborted.\n\t\t\t\t\t\t\tfileReader.addEventListener( 'abort', function() {\n\t\t\t\t\t\t\t\teditor.fire( 'paste', evt.data );\n\t\t\t\t\t\t\t}, false );\n\n\t\t\t\t\t\t\t// Proceed with normal flow if reading file failed.\n\t\t\t\t\t\t\tfileReader.addEventListener( 'error', function() {\n\t\t\t\t\t\t\t\teditor.fire( 'paste', evt.data );\n\t\t\t\t\t\t\t}, false );\n\n\t\t\t\t\t\t\tfileReader.readAsDataURL( file );\n\n\t\t\t\t\t\t\tlatestId = dataObj.dataTransfer.id;\n\n\t\t\t\t\t\t\tevt.stop();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, null, null, 1 );\n\t\t\t}\n\n\t\t\teditor.on( 'paste', function( evt ) {\n\t\t\t\t// Init `dataTransfer` if `paste` event was fired without it, so it will be always available.\n\t\t\t\tif ( !evt.data.dataTransfer ) {\n\t\t\t\t\tevt.data.dataTransfer = new CKEDITOR.plugins.clipboard.dataTransfer();\n\t\t\t\t}\n\n\t\t\t\t// If dataValue is already set (manually or by paste bin), so do not override it.\n\t\t\t\tif ( evt.data.dataValue ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar dataTransfer = evt.data.dataTransfer,\n\t\t\t\t\t// IE support only text data and throws exception if we try to get html data.\n\t\t\t\t\t// This html data object may also be empty if we drag content of the textarea.\n\t\t\t\t\tvalue = dataTransfer.getData( 'text/html' );\n\n\t\t\t\tif ( value ) {\n\t\t\t\t\tevt.data.dataValue = value;\n\t\t\t\t\tevt.data.type = 'html';\n\t\t\t\t} else {\n\t\t\t\t\t// Try to get text data otherwise.\n\t\t\t\t\tvalue = dataTransfer.getData( 'text/plain' );\n\n\t\t\t\t\tif ( value ) {\n\t\t\t\t\t\tevt.data.dataValue = editor.editable().transformPlainTextToHtml( value );\n\t\t\t\t\t\tevt.data.type = 'text';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, null, null, 1 );\n\n\t\t\teditor.on( 'paste', function( evt ) {\n\t\t\t\tvar data = evt.data.dataValue,\n\t\t\t\t\tblockElements = CKEDITOR.dtd.$block;\n\n\t\t\t\t// Filter webkit garbage.\n\t\t\t\tif ( data.indexOf( 'Apple-' ) > -1 ) {\n\t\t\t\t\t// Replace special webkit's   with simple space, because webkit\n\t\t\t\t\t// produces them even for normal spaces.\n\t\t\t\t\tdata = data.replace( / <\\/span>/gi, ' ' );\n\n\t\t\t\t\t// Strip around white-spaces when not in forced 'html' content type.\n\t\t\t\t\t// This spans are created only when pasting plain text into Webkit,\n\t\t\t\t\t// but for safety reasons remove them always.\n\t\t\t\t\tif ( evt.data.type != 'html' ) {\n\t\t\t\t\t\tdata = data.replace( /]*>([^<]*)<\\/span>/gi, function( all, spaces ) {\n\t\t\t\t\t\t\t// Replace tabs with 4 spaces like Fx does.\n\t\t\t\t\t\t\treturn spaces.replace( /\\t/g, '    ' );\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\t// This br is produced only when copying & pasting HTML content.\n\t\t\t\t\tif ( data.indexOf( '
' ) > -1 ) {\n\t\t\t\t\t\tevt.data.startsWithEOL = 1;\n\t\t\t\t\t\tevt.data.preSniffing = 'html'; // Mark as not text.\n\t\t\t\t\t\tdata = data.replace( /
/, '' );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove all other classes.\n\t\t\t\t\tdata = data.replace( /(<[^>]+) class=\"Apple-[^\"]*\"/gi, '$1' );\n\t\t\t\t}\n\n\t\t\t\t// Strip editable that was copied from inside. (http://dev.ckeditor.com/ticket/9534)\n\t\t\t\tif ( data.match( /^<[^<]+cke_(editable|contents)/i ) ) {\n\t\t\t\t\tvar tmp,\n\t\t\t\t\t\teditable_wrapper,\n\t\t\t\t\t\twrapper = new CKEDITOR.dom.element( 'div' );\n\n\t\t\t\t\twrapper.setHtml( data );\n\t\t\t\t\t// Verify for sure and check for nested editor UI parts. (http://dev.ckeditor.com/ticket/9675)\n\t\t\t\t\twhile ( wrapper.getChildCount() == 1 &&\n\t\t\t\t\t\t\t( tmp = wrapper.getFirst() ) &&\n\t\t\t\t\t\t\ttmp.type == CKEDITOR.NODE_ELEMENT &&\t// Make sure first-child is element.\n\t\t\t\t\t\t\t( tmp.hasClass( 'cke_editable' ) || tmp.hasClass( 'cke_contents' ) ) ) {\n\t\t\t\t\t\twrapper = editable_wrapper = tmp;\n\t\t\t\t\t}\n\n\t\t\t\t\t// If editable wrapper was found strip it and bogus
(added on FF).\n\t\t\t\t\tif ( editable_wrapper )\n\t\t\t\t\t\tdata = editable_wrapper.getHtml().replace( /
$/i, '' );\n\t\t\t\t}\n\n\t\t\t\tif ( CKEDITOR.env.ie ) {\n\t\t\t\t\t//  

->

(br.cke-pasted-remove will be removed later)\n\t\t\t\t\tdata = data.replace( /^ (?: |\\r\\n)?<(\\w+)/g, function( match, elementName ) {\n\t\t\t\t\t\tif ( elementName.toLowerCase() in blockElements ) {\n\t\t\t\t\t\t\tevt.data.preSniffing = 'html'; // Mark as not a text.\n\t\t\t\t\t\t\treturn '<' + elementName;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match;\n\t\t\t\t\t} );\n\t\t\t\t} else if ( CKEDITOR.env.webkit ) {\n\t\t\t\t\t//


->


\n\t\t\t\t\t// We don't mark br, because this situation can happen for htmlified text too.\n\t\t\t\t\tdata = data.replace( /<\\/(\\w+)>

<\\/div>$/, function( match, elementName ) {\n\t\t\t\t\t\tif ( elementName in blockElements ) {\n\t\t\t\t\t\t\tevt.data.endsWithEOL = 1;\n\t\t\t\t\t\t\treturn '';\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn match;\n\t\t\t\t\t} );\n\t\t\t\t} else if ( CKEDITOR.env.gecko ) {\n\t\t\t\t\t// Firefox adds bogus
when user pasted text followed by space(s).\n\t\t\t\t\tdata = data.replace( /(\\s)
$/, '$1' );\n\t\t\t\t}\n\n\t\t\t\tevt.data.dataValue = data;\n\t\t\t}, null, null, 3 );\n\n\t\t\teditor.on( 'paste', function( evt ) {\n\t\t\t\tvar dataObj = evt.data,\n\t\t\t\t\ttype = editor._.nextPasteType || dataObj.type,\n\t\t\t\t\tdata = dataObj.dataValue,\n\t\t\t\t\ttrueType,\n\t\t\t\t\t// Default is 'html'.\n\t\t\t\t\tdefaultType = editor.config.clipboard_defaultContentType || 'html',\n\t\t\t\t\ttransferType = dataObj.dataTransfer.getTransferType( editor );\n\n\t\t\t\t// If forced type is 'html' we don't need to know true data type.\n\t\t\t\tif ( type == 'html' || dataObj.preSniffing == 'html' ) {\n\t\t\t\t\ttrueType = 'html';\n\t\t\t\t} else {\n\t\t\t\t\ttrueType = recogniseContentType( data );\n\t\t\t\t}\n\n\t\t\t\tdelete editor._.nextPasteType;\n\n\t\t\t\t// Unify text markup.\n\t\t\t\tif ( trueType == 'htmlifiedtext' ) {\n\t\t\t\t\tdata = htmlifiedTextHtmlification( editor.config, data );\n\t\t\t\t}\n\n\t\t\t\t// Strip presentational markup & unify text markup.\n\t\t\t\t// Forced plain text.\n\t\t\t\t// Note: we do not check dontFilter option in this case, because forcePAPT was implemented\n\t\t\t\t// before pasteFilter and pasteFilter is automatically used on Webkit&Blink since 4.5, so\n\t\t\t\t// forcePAPT should have priority as it had before 4.5.\n\t\t\t\tif ( type == 'text' && trueType == 'html' ) {\n\t\t\t\t\tdata = filterContent( editor, data, filtersFactory.get( 'plain-text' ) );\n\t\t\t\t}\n\t\t\t\t// External paste and pasteFilter exists and filtering isn't disabled.\n\t\t\t\telse if ( transferType == CKEDITOR.DATA_TRANSFER_EXTERNAL && editor.pasteFilter && !dataObj.dontFilter ) {\n\t\t\t\t\tdata = filterContent( editor, data, editor.pasteFilter );\n\t\t\t\t}\n\n\t\t\t\tif ( dataObj.startsWithEOL ) {\n\t\t\t\t\tdata = '
' + data;\n\t\t\t\t}\n\t\t\t\tif ( dataObj.endsWithEOL ) {\n\t\t\t\t\tdata += '
';\n\t\t\t\t}\n\n\t\t\t\tif ( type == 'auto' ) {\n\t\t\t\t\ttype = ( trueType == 'html' || defaultType == 'html' ) ? 'html' : 'text';\n\t\t\t\t}\n\n\t\t\t\tdataObj.type = type;\n\t\t\t\tdataObj.dataValue = data;\n\t\t\t\tdelete dataObj.preSniffing;\n\t\t\t\tdelete dataObj.startsWithEOL;\n\t\t\t\tdelete dataObj.endsWithEOL;\n\t\t\t}, null, null, 6 );\n\n\t\t\t// Inserts processed data into the editor at the end of the\n\t\t\t// events chain.\n\t\t\teditor.on( 'paste', function( evt ) {\n\t\t\t\tvar data = evt.data;\n\n\t\t\t\tif ( data.dataValue ) {\n\t\t\t\t\teditor.insertHtml( data.dataValue, data.type, data.range );\n\n\t\t\t\t\t// Defer 'afterPaste' so all other listeners for 'paste' will be fired first.\n\t\t\t\t\t// Fire afterPaste only if paste inserted some HTML.\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\teditor.fire( 'afterPaste' );\n\t\t\t\t\t}, 0 );\n\t\t\t\t}\n\t\t\t}, null, null, 1000 );\n\t\t}\n\t} );\n\n\tfunction firePasteEvents( editor, data, withBeforePaste ) {\n\t\tif ( !data.type ) {\n\t\t\tdata.type = 'auto';\n\t\t}\n\n\t\tif ( withBeforePaste ) {\n\t\t\t// Fire 'beforePaste' event so clipboard flavor get customized\n\t\t\t// by other plugins.\n\t\t\tif ( editor.fire( 'beforePaste', data ) === false )\n\t\t\t\treturn false; // Event canceled\n\t\t}\n\n\t\t// Do not fire paste if there is no data (dataValue and dataTranfser are empty).\n\t\t// This check should be done after firing 'beforePaste' because for native paste\n\t\t// 'beforePaste' is by default fired even for empty clipboard.\n\t\tif ( !data.dataValue && data.dataTransfer.isEmpty() ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !data.dataValue ) {\n\t\t\tdata.dataValue = '';\n\t\t}\n\n\t\t// Because of FF bug we need to use this hack, otherwise cursor is hidden\n\t\t// or it is not possible to move it (http://dev.ckeditor.com/ticket/12420).\n\t\t// Also, check that editor.toolbox exists, because the toolbar plugin might not be loaded (http://dev.ckeditor.com/ticket/13305).\n\t\tif ( CKEDITOR.env.gecko && data.method == 'drop' && editor.toolbox ) {\n\t\t\teditor.once( 'afterPaste', function() {\n\t\t\t\teditor.toolbox.focus();\n\t\t\t} );\n\t\t}\n\n\t\treturn editor.fire( 'paste', data );\n\t}\n\n\tfunction initPasteClipboard( editor ) {\n\t\tvar clipboard = CKEDITOR.plugins.clipboard,\n\t\t\tpreventBeforePasteEvent = 0,\n\t\t\tpreventPasteEvent = 0,\n\t\t\tinReadOnly = 0;\n\n\t\taddListeners();\n\t\taddButtonsCommands();\n\n\t\t/**\n\t\t * Gets clipboard data by directly accessing the clipboard (IE only).\n\t\t *\n\t\t *\t\teditor.getClipboardData( function( data ) {\n\t\t *\t\t\tif ( data )\n\t\t *\t\t\t\talert( data.type + ' ' + data.dataValue );\n\t\t *\t\t} );\n\t\t *\n\t\t * @member CKEDITOR.editor\n\t\t * @param {Function/Object} callbackOrOptions For function, see the `callback` parameter documentation. The object was used before 4.7.0 with the `title` property, to set the paste dialog's title.\n\t\t * @param {Function} callback A function that will be executed with the `data` property of the\n\t\t * {@link CKEDITOR.editor#event-paste paste event} or `null` if none of the capturing methods succeeded.\n\t\t * Since 4.7.0 the `callback` should be provided as a first argument, just like in the example above. This parameter will be removed in\n\t\t * an upcoming major release.\n\t\t */\n\t\teditor.getClipboardData = function( callbackOrOptions, callback ) {\n\t\t\t// Options are optional - args shift.\n\t\t\tif ( !callback ) {\n\t\t\t\tcallback = callbackOrOptions;\n\t\t\t\tcallbackOrOptions = null;\n\t\t\t}\n\n\t\t\t// Listen with maximum priority to handle content before everyone else.\n\t\t\t// This callback will handle paste event that will be fired if direct\n\t\t\t// access to the clipboard succeed in IE.\n\t\t\teditor.on( 'paste', onPaste, null, null, 0 );\n\n\t\t\t// If command didn't succeed (only IE allows to access clipboard and only if\n\t\t\t// user agrees) invoke callback with null, meaning that paste is not blocked.\n\t\t\tif ( getClipboardDataDirectly() === false ) {\n\t\t\t\t// Direct access to the clipboard wasn't successful so remove listener.\n\t\t\t\teditor.removeListener( 'paste', onPaste );\n\n\t\t\t\tcallback( null );\n\t\t\t}\n\n\t\t\tfunction onPaste( evt ) {\n\t\t\t\tevt.removeListener();\n\t\t\t\tevt.cancel();\n\t\t\t\tcallback( evt.data );\n\t\t\t}\n\t\t};\n\n\t\tfunction addButtonsCommands() {\n\t\t\taddButtonCommand( 'Cut', 'cut', createCutCopyCmd( 'cut' ), 10, 1 );\n\t\t\taddButtonCommand( 'Copy', 'copy', createCutCopyCmd( 'copy' ), 20, 4 );\n\t\t\taddButtonCommand( 'Paste', 'paste', createPasteCmd(), 30, 8 );\n\n\t\t\tfunction addButtonCommand( buttonName, commandName, command, toolbarOrder, ctxMenuOrder ) {\n\t\t\t\tvar lang = editor.lang.clipboard[ commandName ];\n\n\t\t\t\teditor.addCommand( commandName, command );\n\t\t\t\teditor.ui.addButton && editor.ui.addButton( buttonName, {\n\t\t\t\t\tlabel: lang,\n\t\t\t\t\tcommand: commandName,\n\t\t\t\t\ttoolbar: 'clipboard,' + toolbarOrder\n\t\t\t\t} );\n\n\t\t\t\t// If the \"menu\" plugin is loaded, register the menu item.\n\t\t\t\tif ( editor.addMenuItems ) {\n\t\t\t\t\teditor.addMenuItem( commandName, {\n\t\t\t\t\t\tlabel: lang,\n\t\t\t\t\t\tcommand: commandName,\n\t\t\t\t\t\tgroup: 'clipboard',\n\t\t\t\t\t\torder: ctxMenuOrder\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction addListeners() {\n\t\t\teditor.on( 'key', onKey );\n\t\t\teditor.on( 'contentDom', addPasteListenersToEditable );\n\n\t\t\t// For improved performance, we're checking the readOnly state on selectionChange instead of hooking a key event for that.\n\t\t\teditor.on( 'selectionChange', function( evt ) {\n\t\t\t\tinReadOnly = evt.data.selection.getRanges()[ 0 ].checkReadOnly();\n\t\t\t\tsetToolbarStates();\n\t\t\t} );\n\n\t\t\t// If the \"contextmenu\" plugin is loaded, register the listeners.\n\t\t\tif ( editor.contextMenu ) {\n\t\t\t\teditor.contextMenu.addListener( function( element, selection ) {\n\t\t\t\t\tinReadOnly = selection.getRanges()[ 0 ].checkReadOnly();\n\t\t\t\t\treturn {\n\t\t\t\t\t\tcut: stateFromNamedCommand( 'cut' ),\n\t\t\t\t\t\tcopy: stateFromNamedCommand( 'copy' ),\n\t\t\t\t\t\tpaste: stateFromNamedCommand( 'paste' )\n\t\t\t\t\t};\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\t// Add events listeners to editable.\n\t\tfunction addPasteListenersToEditable() {\n\t\t\tvar editable = editor.editable();\n\n\t\t\tif ( CKEDITOR.plugins.clipboard.isCustomCopyCutSupported ) {\n\t\t\t\tvar initOnCopyCut = function( evt ) {\n\t\t\t\t\t// If user tries to cut in read-only editor, we must prevent default action. (http://dev.ckeditor.com/ticket/13872)\n\t\t\t\t\tif ( !editor.readOnly || evt.name != 'cut' ) {\n\t\t\t\t\t\tclipboard.initPasteDataTransfer( evt, editor );\n\t\t\t\t\t}\n\t\t\t\t\tevt.data.preventDefault();\n\t\t\t\t};\n\n\t\t\t\teditable.on( 'copy', initOnCopyCut );\n\t\t\t\teditable.on( 'cut', initOnCopyCut );\n\n\t\t\t\t// Delete content with the low priority so one can overwrite cut data.\n\t\t\t\teditable.on( 'cut', function() {\n\t\t\t\t\t// If user tries to cut in read-only editor, we must prevent default action. (http://dev.ckeditor.com/ticket/13872)\n\t\t\t\t\tif ( !editor.readOnly ) {\n\t\t\t\t\t\teditor.extractSelectedHtml();\n\t\t\t\t\t}\n\t\t\t\t}, null, null, 999 );\n\t\t\t}\n\n\t\t\t// We'll be catching all pasted content in one line, regardless of whether\n\t\t\t// it's introduced by a document command execution (e.g. toolbar buttons) or\n\t\t\t// user paste behaviors (e.g. CTRL+V).\n\t\t\teditable.on( clipboard.mainPasteEvent, function( evt ) {\n\t\t\t\tif ( clipboard.mainPasteEvent == 'beforepaste' && preventBeforePasteEvent ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If you've just asked yourself why preventPasteEventNow() is not here, but\n\t\t\t\t// in listener for CTRL+V and exec method of 'paste' command\n\t\t\t\t// you've asked the same question we did.\n\t\t\t\t//\n\t\t\t\t// THE ANSWER:\n\t\t\t\t//\n\t\t\t\t// First thing to notice - this answer makes sense only for IE,\n\t\t\t\t// because other browsers don't listen for 'paste' event.\n\t\t\t\t//\n\t\t\t\t// What would happen if we move preventPasteEventNow() here?\n\t\t\t\t// For:\n\t\t\t\t// * CTRL+V - IE fires 'beforepaste', so we prevent 'paste' and pasteDataFromClipboard(). OK.\n\t\t\t\t// * editor.execCommand( 'paste' ) - we fire 'beforepaste', so we prevent\n\t\t\t\t//\t\t'paste' and pasteDataFromClipboard() and doc.execCommand( 'Paste' ). OK.\n\t\t\t\t// * native context menu - IE fires 'beforepaste', so we prevent 'paste', but unfortunately\n\t\t\t\t//\t\ton IE we fail with pasteDataFromClipboard() here, because of... we don't know why, but\n\t\t\t\t//\t\twe just fail, so... we paste nothing. FAIL.\n\t\t\t\t// * native menu bar - the same as for native context menu.\n\t\t\t\t//\n\t\t\t\t// But don't you know any way to distinguish first two cases from last two?\n\t\t\t\t// Only one - special flag set in CTRL+V handler and exec method of 'paste'\n\t\t\t\t// command. And that's what we did using preventPasteEventNow().\n\n\t\t\t\tpasteDataFromClipboard( evt );\n\t\t\t} );\n\n\t\t\t// It's not possible to clearly handle all four paste methods (ctrl+v, native menu bar\n\t\t\t// native context menu, editor's command) in one 'paste/beforepaste' event in IE.\n\t\t\t//\n\t\t\t// For ctrl+v & editor's command it's easy to handle pasting in 'beforepaste' listener,\n\t\t\t// so we do this. For another two methods it's better to use 'paste' event.\n\t\t\t//\n\t\t\t// 'paste' is always being fired after 'beforepaste' (except of weird one on opening native\n\t\t\t// context menu), so for two methods handled in 'beforepaste' we're canceling 'paste'\n\t\t\t// using preventPasteEvent state.\n\t\t\t//\n\t\t\t// 'paste' event in IE is being fired before getClipboardDataByPastebin executes its callback.\n\t\t\t//\n\t\t\t// QUESTION: Why didn't you handle all 4 paste methods in handler for 'paste'?\n\t\t\t//\t\tWouldn't this just be simpler?\n\t\t\t// ANSWER: Then we would have to evt.data.preventDefault() only for native\n\t\t\t//\t\tcontext menu and menu bar pastes. The same with execIECommand().\n\t\t\t//\t\tThat would force us to mark CTRL+V and editor's paste command with\n\t\t\t//\t\tspecial flag, other than preventPasteEvent. But we still would have to\n\t\t\t//\t\thave preventPasteEvent for the second event fired by execIECommand.\n\t\t\t//\t\tCode would be longer and not cleaner.\n\t\t\tif ( clipboard.mainPasteEvent == 'beforepaste' ) {\n\t\t\t\teditable.on( 'paste', function( evt ) {\n\t\t\t\t\tif ( preventPasteEvent ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Cancel next 'paste' event fired by execIECommand( 'paste' )\n\t\t\t\t\t// at the end of this callback.\n\t\t\t\t\tpreventPasteEventNow();\n\n\t\t\t\t\t// Prevent native paste.\n\t\t\t\t\tevt.data.preventDefault();\n\n\t\t\t\t\tpasteDataFromClipboard( evt );\n\n\t\t\t\t\t// Force IE to paste content into pastebin so pasteDataFromClipboard will work.\n\t\t\t\t\texecIECommand( 'paste' );\n\t\t\t\t} );\n\n\t\t\t\t// If mainPasteEvent is 'beforePaste' (IE before Edge),\n\t\t\t\t// dismiss the (wrong) 'beforepaste' event fired on context/toolbar menu open. (http://dev.ckeditor.com/ticket/7953)\n\t\t\t\teditable.on( 'contextmenu', preventBeforePasteEventNow, null, null, 0 );\n\n\t\t\t\teditable.on( 'beforepaste', function( evt ) {\n\t\t\t\t\t// Do not prevent event on CTRL+V and SHIFT+INS because it blocks paste (http://dev.ckeditor.com/ticket/11970).\n\t\t\t\t\tif ( evt.data && !evt.data.$.ctrlKey && !evt.data.$.shiftKey )\n\t\t\t\t\t\tpreventBeforePasteEventNow();\n\t\t\t\t}, null, null, 0 );\n\t\t\t}\n\n\t\t\teditable.on( 'beforecut', function() {\n\t\t\t\t!preventBeforePasteEvent && fixCut( editor );\n\t\t\t} );\n\n\t\t\tvar mouseupTimeout;\n\n\t\t\t// Use editor.document instead of editable in non-IEs for observing mouseup\n\t\t\t// since editable won't fire the event if selection process started within\n\t\t\t// iframe and ended out of the editor (http://dev.ckeditor.com/ticket/9851).\n\t\t\teditable.attachListener( CKEDITOR.env.ie ? editable : editor.document.getDocumentElement(), 'mouseup', function() {\n\t\t\t\tmouseupTimeout = setTimeout( function() {\n\t\t\t\t\tsetToolbarStates();\n\t\t\t\t}, 0 );\n\t\t\t} );\n\n\t\t\t// Make sure that deferred mouseup callback isn't executed after editor instance\n\t\t\t// had been destroyed. This may happen when editor.destroy() is called in parallel\n\t\t\t// with mouseup event (i.e. a button with onclick callback) (http://dev.ckeditor.com/ticket/10219).\n\t\t\teditor.on( 'destroy', function() {\n\t\t\t\tclearTimeout( mouseupTimeout );\n\t\t\t} );\n\n\t\t\teditable.on( 'keyup', setToolbarStates );\n\t\t}\n\n\t\t// Create object representing Cut or Copy commands.\n\t\tfunction createCutCopyCmd( type ) {\n\t\t\treturn {\n\t\t\t\ttype: type,\n\t\t\t\tcanUndo: type == 'cut', // We can't undo copy to clipboard.\n\t\t\t\tstartDisabled: true,\n\t\t\t\tfakeKeystroke: type == 'cut' ? CKEDITOR.CTRL + 88 /*X*/ : CKEDITOR.CTRL + 67 /*C*/,\n\t\t\t\texec: function() {\n\t\t\t\t\t// Attempts to execute the Cut and Copy operations.\n\t\t\t\t\tfunction tryToCutCopy( type ) {\n\t\t\t\t\t\tif ( CKEDITOR.env.ie )\n\t\t\t\t\t\t\treturn execIECommand( type );\n\n\t\t\t\t\t\t// non-IEs part\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Other browsers throw an error if the command is disabled.\n\t\t\t\t\t\t\treturn editor.document.$.execCommand( type, false, null );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.type == 'cut' && fixCut();\n\n\t\t\t\t\tvar success = tryToCutCopy( this.type );\n\n\t\t\t\t\tif ( !success ) {\n\t\t\t\t\t\t// Show cutError or copyError.\n\t\t\t\t\t\teditor.showNotification( editor.lang.clipboard[ this.type + 'Error' ] ); // jshint ignore:line\n\t\t\t\t\t}\n\n\t\t\t\t\treturn success;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction createPasteCmd() {\n\t\t\treturn {\n\t\t\t\t// Snapshots are done manually by editable.insertXXX methods.\n\t\t\t\tcanUndo: false,\n\t\t\t\tasync: true,\n\t\t\t\tfakeKeystroke: CKEDITOR.CTRL + 86 /*V*/,\n\n\t\t\t\t/**\n\t\t\t\t * The default implementation of the paste command.\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {CKEDITOR.editor} editor An instance of the editor where the command is being executed.\n\t\t\t\t * @param {Object/String} data If `data` is a string, then it is considered content that is being pasted.\n\t\t\t\t * Otherwise it is treated as an object with options.\n\t\t\t\t * @param {Boolean/String} [data.notification=true] Content for a notification shown after an unsuccessful\n\t\t\t\t * paste attempt. If `false`, the notification will not be displayed. This parameter was added in 4.7.0.\n\t\t\t\t * @param {String} [data.type='html'] The type of pasted content. There are two allowed values:\n\t\t\t\t * * 'html'\n\t\t\t\t * * 'text'\n\t\t\t\t * @param {String/Object} data.dataValue Content being pasted. If this parameter is an object, it\n\t\t\t\t * is supposed to be a `data` property of the {@link CKEDITOR.editor#paste} event.\n\t\t\t\t * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer Data transfer instance connected\n\t\t\t\t * with the current paste action.\n\t\t\t\t * @member CKEDITOR.editor.commands.paste\n\t\t\t\t */\n\t\t\t\texec: function( editor, data ) {\n\t\t\t\t\tdata = typeof data !== 'undefined' && data !== null ? data : {};\n\n\t\t\t\t\tvar cmd = this,\n\t\t\t\t\t\tnotification = typeof data.notification !== 'undefined' ? data.notification : true,\n\t\t\t\t\t\tforcedType = data.type,\n\t\t\t\t\t\tkeystroke = CKEDITOR.tools.keystrokeToString( editor.lang.common.keyboard,\n\t\t\t\t\t\t\teditor.getCommandKeystroke( this ) ),\n\t\t\t\t\t\tmsg = typeof notification === 'string' ? notification : editor.lang.clipboard.pasteNotification\n\t\t\t\t\t\t\t.replace( /%1/, '' + keystroke.display + '' ),\n\t\t\t\t\t\tpastedContent = typeof data === 'string' ? data : data.dataValue;\n\n\t\t\t\t\tfunction callback( data, withBeforePaste ) {\n\t\t\t\t\t\twithBeforePaste = typeof withBeforePaste !== 'undefined' ? withBeforePaste : true;\n\n\t\t\t\t\t\tif ( data ) {\n\t\t\t\t\t\t\tdata.method = 'paste';\n\n\t\t\t\t\t\t\tif ( !data.dataTransfer ) {\n\t\t\t\t\t\t\t\tdata.dataTransfer = clipboard.initPasteDataTransfer();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tfirePasteEvents( editor, data, withBeforePaste );\n\t\t\t\t\t\t} else if ( notification ) {\n\t\t\t\t\t\t\teditor.showNotification( msg, 'info', editor.config.clipboard_notificationDuration );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\teditor.fire( 'afterCommandExec', {\n\t\t\t\t\t\t\tname: 'paste',\n\t\t\t\t\t\t\tcommand: cmd,\n\t\t\t\t\t\t\treturnValue: !!data\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Force type for the next paste.\n\t\t\t\t\tif ( forcedType ) {\n\t\t\t\t\t\teditor._.nextPasteType = forcedType;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdelete editor._.nextPasteType;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( typeof pastedContent === 'string' ) {\n\t\t\t\t\t\tcallback( {\n\t\t\t\t\t\t\tdataValue: pastedContent\n\t\t\t\t\t\t} );\n\t\t\t\t\t} else {\n\t\t\t\t\t\teditor.getClipboardData( callback );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\tfunction preventPasteEventNow() {\n\t\t\tpreventPasteEvent = 1;\n\t\t\t// For safety reason we should wait longer than 0/1ms.\n\t\t\t// We don't know how long execution of quite complex getClipboardData will take\n\t\t\t// and in for example 'paste' listener execCommand() (which fires 'paste') is called\n\t\t\t// after getClipboardData finishes.\n\t\t\t// Luckily, it's impossible to immediately fire another 'paste' event we want to handle,\n\t\t\t// because we only handle there native context menu and menu bar.\n\t\t\tsetTimeout( function() {\n\t\t\t\tpreventPasteEvent = 0;\n\t\t\t}, 100 );\n\t\t}\n\n\t\tfunction preventBeforePasteEventNow() {\n\t\t\tpreventBeforePasteEvent = 1;\n\t\t\tsetTimeout( function() {\n\t\t\t\tpreventBeforePasteEvent = 0;\n\t\t\t}, 10 );\n\t\t}\n\n\t\t// Tries to execute any of the paste, cut or copy commands in IE. Returns a\n\t\t// boolean indicating that the operation succeeded.\n\t\t// @param {String} command *LOWER CASED* name of command ('paste', 'cut', 'copy').\n\t\tfunction execIECommand( command ) {\n\t\t\tvar doc = editor.document,\n\t\t\t\tbody = doc.getBody(),\n\t\t\t\tenabled = false,\n\t\t\t\tonExec = function() {\n\t\t\t\t\tenabled = true;\n\t\t\t\t};\n\n\t\t\t// The following seems to be the only reliable way to detect that\n\t\t\t// clipboard commands are enabled in IE. It will fire the\n\t\t\t// onpaste/oncut/oncopy events only if the security settings allowed\n\t\t\t// the command to execute.\n\t\t\tbody.on( command, onExec );\n\n\t\t\t// IE7: document.execCommand has problem to paste into positioned element.\n\t\t\tif ( CKEDITOR.env.version > 7 ) {\n\t\t\t\tdoc.$.execCommand( command );\n\t\t\t} else {\n\t\t\t\tdoc.$.selection.createRange().execCommand( command );\n\t\t\t}\n\n\t\t\tbody.removeListener( command, onExec );\n\n\t\t\treturn enabled;\n\t\t}\n\n\t\t// Cutting off control type element in IE standards breaks the selection entirely. (http://dev.ckeditor.com/ticket/4881)\n\t\tfunction fixCut() {\n\t\t\tif ( !CKEDITOR.env.ie || CKEDITOR.env.quirks )\n\t\t\t\treturn;\n\n\t\t\tvar sel = editor.getSelection(),\n\t\t\t\tcontrol, range, dummy;\n\n\t\t\tif ( ( sel.getType() == CKEDITOR.SELECTION_ELEMENT ) && ( control = sel.getSelectedElement() ) ) {\n\t\t\t\trange = sel.getRanges()[ 0 ];\n\t\t\t\tdummy = editor.document.createText( '' );\n\t\t\t\tdummy.insertBefore( control );\n\t\t\t\trange.setStartBefore( dummy );\n\t\t\t\trange.setEndAfter( control );\n\t\t\t\tsel.selectRanges( [ range ] );\n\n\t\t\t\t// Clear up the fix if the paste wasn't succeeded.\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t// Element still online?\n\t\t\t\t\tif ( control.getParent() ) {\n\t\t\t\t\t\tdummy.remove();\n\t\t\t\t\t\tsel.selectElement( control );\n\t\t\t\t\t}\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t}\n\n\t\t// Allow to peek clipboard content by redirecting the\n\t\t// pasting content into a temporary bin and grab the content of it.\n\t\tfunction getClipboardDataByPastebin( evt, callback ) {\n\t\t\tvar doc = editor.document,\n\t\t\t\teditable = editor.editable(),\n\t\t\t\tcancel = function( evt ) {\n\t\t\t\t\tevt.cancel();\n\t\t\t\t},\n\t\t\t\tblurListener;\n\n\t\t\t// Avoid recursions on 'paste' event or consequent paste too fast. (http://dev.ckeditor.com/ticket/5730)\n\t\t\tif ( doc.getById( 'cke_pastebin' ) )\n\t\t\t\treturn;\n\n\t\t\tvar sel = editor.getSelection();\n\t\t\tvar bms = sel.createBookmarks();\n\n\t\t\t// http://dev.ckeditor.com/ticket/11384. On IE9+ we use native selectionchange (i.e. editor#selectionCheck) to cache the most\n\t\t\t// recent selection which we then lock on editable blur. See selection.js for more info.\n\t\t\t// selectionchange fired before getClipboardDataByPastebin() cached selection\n\t\t\t// before creating bookmark (cached selection will be invalid, because bookmarks modified the DOM),\n\t\t\t// so we need to fire selectionchange one more time, to store current seleciton.\n\t\t\t// Selection will be locked when we focus pastebin.\n\t\t\tif ( CKEDITOR.env.ie )\n\t\t\t\tsel.root.fire( 'selectionchange' );\n\n\t\t\t// Create container to paste into.\n\t\t\t// For rich content we prefer to use \"body\" since it holds\n\t\t\t// the least possibility to be splitted by pasted content, while this may\n\t\t\t// breaks the text selection on a frame-less editable, \"div\" would be\n\t\t\t// the best one in that case.\n\t\t\t// In another case on old IEs moving the selection into a \"body\" paste bin causes error panic.\n\t\t\t// Body can't be also used for Opera which fills it with
\n\t\t\t// what is indistinguishable from pasted
(copying
in Opera isn't possible,\n\t\t\t// but it can be copied from other browser).\n\t\t\tvar pastebin = new CKEDITOR.dom.element(\n\t\t\t\t( CKEDITOR.env.webkit || editable.is( 'body' ) ) && !CKEDITOR.env.ie ? 'body' : 'div', doc );\n\n\t\t\tpastebin.setAttributes( {\n\t\t\t\tid: 'cke_pastebin',\n\t\t\t\t'data-cke-temp': '1'\n\t\t\t} );\n\n\t\t\tvar containerOffset = 0,\n\t\t\t\toffsetParent,\n\t\t\t\twin = doc.getWindow();\n\n\t\t\tif ( CKEDITOR.env.webkit ) {\n\t\t\t\t// It's better to paste close to the real paste destination, so inherited styles\n\t\t\t\t// (which Webkits will try to compensate by styling span) differs less from the destination's one.\n\t\t\t\teditable.append( pastebin );\n\t\t\t\t// Style pastebin like .cke_editable, to minimize differences between origin and destination. (http://dev.ckeditor.com/ticket/9754)\n\t\t\t\tpastebin.addClass( 'cke_editable' );\n\n\t\t\t\t// Compensate position of offsetParent.\n\t\t\t\tif ( !editable.is( 'body' ) ) {\n\t\t\t\t\t// We're not able to get offsetParent from pastebin (body element), so check whether\n\t\t\t\t\t// its parent (editable) is positioned.\n\t\t\t\t\tif ( editable.getComputedStyle( 'position' ) != 'static' )\n\t\t\t\t\t\toffsetParent = editable;\n\t\t\t\t\t// And if not - safely get offsetParent from editable.\n\t\t\t\t\telse\n\t\t\t\t\t\toffsetParent = CKEDITOR.dom.element.get( editable.$.offsetParent );\n\n\t\t\t\t\tcontainerOffset = offsetParent.getDocumentPosition().y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Opera and IE doesn't allow to append to html element.\n\t\t\t\teditable.getAscendant( CKEDITOR.env.ie ? 'body' : 'html', 1 ).append( pastebin );\n\t\t\t}\n\n\t\t\tpastebin.setStyles( {\n\t\t\t\tposition: 'absolute',\n\t\t\t\t// Position the bin at the top (+10 for safety) of viewport to avoid any subsequent document scroll.\n\t\t\t\ttop: ( win.getScrollPosition().y - containerOffset + 10 ) + 'px',\n\t\t\t\twidth: '1px',\n\t\t\t\t// Caret has to fit in that height, otherwise browsers like Chrome & Opera will scroll window to show it.\n\t\t\t\t// Set height equal to viewport's height - 20px (safety gaps), minimum 1px.\n\t\t\t\theight: Math.max( 1, win.getViewPaneSize().height - 20 ) + 'px',\n\t\t\t\toverflow: 'hidden',\n\t\t\t\t// Reset styles that can mess up pastebin position.\n\t\t\t\tmargin: 0,\n\t\t\t\tpadding: 0\n\t\t\t} );\n\n\t\t\t// Paste fails in Safari when the body tag has 'user-select: none'. (http://dev.ckeditor.com/ticket/12506)\n\t\t\tif ( CKEDITOR.env.safari )\n\t\t\t\tpastebin.setStyles( CKEDITOR.tools.cssVendorPrefix( 'user-select', 'text' ) );\n\n\t\t\t// Check if the paste bin now establishes new editing host.\n\t\t\tvar isEditingHost = pastebin.getParent().isReadOnly();\n\n\t\t\tif ( isEditingHost ) {\n\t\t\t\t// Hide the paste bin.\n\t\t\t\tpastebin.setOpacity( 0 );\n\t\t\t\t// And make it editable.\n\t\t\t\tpastebin.setAttribute( 'contenteditable', true );\n\t\t\t}\n\t\t\t// Transparency is not enough since positioned non-editing host always shows\n\t\t\t// resize handler, pull it off the screen instead.\n\t\t\telse {\n\t\t\t\tpastebin.setStyle( editor.config.contentsLangDirection == 'ltr' ? 'left' : 'right', '-10000px' );\n\t\t\t}\n\n\t\t\teditor.on( 'selectionChange', cancel, null, null, 0 );\n\n\t\t\t// Webkit fill fire blur on editable when moving selection to\n\t\t\t// pastebin (if body is used). Cancel it because it causes incorrect\n\t\t\t// selection lock in case of inline editor (http://dev.ckeditor.com/ticket/10644).\n\t\t\t// The same seems to apply to Firefox (http://dev.ckeditor.com/ticket/10787).\n\t\t\tif ( CKEDITOR.env.webkit || CKEDITOR.env.gecko )\n\t\t\t\tblurListener = editable.once( 'blur', cancel, null, null, -100 );\n\n\t\t\t// Temporarily move selection to the pastebin.\n\t\t\tisEditingHost && pastebin.focus();\n\t\t\tvar range = new CKEDITOR.dom.range( pastebin );\n\t\t\trange.selectNodeContents( pastebin );\n\t\t\tvar selPastebin = range.select();\n\n\t\t\t// If non-native paste is executed, IE will open security alert and blur editable.\n\t\t\t// Editable will then lock selection inside itself and after accepting security alert\n\t\t\t// this selection will be restored. We overwrite stored selection, so it's restored\n\t\t\t// in pastebin. (http://dev.ckeditor.com/ticket/9552)\n\t\t\tif ( CKEDITOR.env.ie ) {\n\t\t\t\tblurListener = editable.once( 'blur', function() {\n\t\t\t\t\teditor.lockSelection( selPastebin );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tvar scrollTop = CKEDITOR.document.getWindow().getScrollPosition().y;\n\n\t\t\t// Wait a while and grab the pasted contents.\n\t\t\tsetTimeout( function() {\n\t\t\t\t// Restore main window's scroll position which could have been changed\n\t\t\t\t// by browser in cases described in http://dev.ckeditor.com/ticket/9771.\n\t\t\t\tif ( CKEDITOR.env.webkit )\n\t\t\t\t\tCKEDITOR.document.getBody().$.scrollTop = scrollTop;\n\n\t\t\t\t// Blur will be fired only on non-native paste. In other case manually remove listener.\n\t\t\t\tblurListener && blurListener.removeListener();\n\n\t\t\t\t// Restore properly the document focus. (http://dev.ckeditor.com/ticket/8849)\n\t\t\t\tif ( CKEDITOR.env.ie )\n\t\t\t\t\teditable.focus();\n\n\t\t\t\t// IE7: selection must go before removing pastebin. (http://dev.ckeditor.com/ticket/8691)\n\t\t\t\tsel.selectBookmarks( bms );\n\t\t\t\tpastebin.remove();\n\n\t\t\t\t// Grab the HTML contents.\n\t\t\t\t// We need to look for a apple style wrapper on webkit it also adds\n\t\t\t\t// a div wrapper if you copy/paste the body of the editor.\n\t\t\t\t// Remove hidden div and restore selection.\n\t\t\t\tvar bogusSpan;\n\t\t\t\tif ( CKEDITOR.env.webkit && ( bogusSpan = pastebin.getFirst() ) && ( bogusSpan.is && bogusSpan.hasClass( 'Apple-style-span' ) ) )\n\t\t\t\t\tpastebin = bogusSpan;\n\n\t\t\t\teditor.removeListener( 'selectionChange', cancel );\n\t\t\t\tcallback( pastebin.getHtml() );\n\t\t\t}, 0 );\n\t\t}\n\n\t\t// Try to get content directly on IE from clipboard, without native event\n\t\t// being fired before. In other words - synthetically get clipboard data, if it's possible.\n\t\t// mainPasteEvent will be fired, so if forced native paste:\n\t\t// * worked, getClipboardDataByPastebin will grab it,\n\t\t// * didn't work, dataValue and dataTransfer will be empty and editor#paste won't be fired.\n\t\t// Clipboard data can be accessed directly only on IEs older than Edge.\n\t\t// On other browsers we should fire beforePaste event and return false.\n\t\tfunction getClipboardDataDirectly() {\n\t\t\tif ( clipboard.mainPasteEvent == 'paste' ) {\n\t\t\t\teditor.fire( 'beforePaste', { type: 'auto', method: 'paste' } );\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Prevent IE from pasting at the begining of the document.\n\t\t\teditor.focus();\n\n\t\t\t// Command will be handled by 'beforepaste', but as\n\t\t\t// execIECommand( 'paste' ) will fire also 'paste' event\n\t\t\t// we're canceling it.\n\t\t\tpreventPasteEventNow();\n\n\t\t\t// http://dev.ckeditor.com/ticket/9247: Lock focus to prevent IE from hiding toolbar for inline editor.\n\t\t\tvar focusManager = editor.focusManager;\n\t\t\tfocusManager.lock();\n\n\t\t\tif ( editor.editable().fire( clipboard.mainPasteEvent ) && !execIECommand( 'paste' ) ) {\n\t\t\t\tfocusManager.unlock();\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tfocusManager.unlock();\n\n\t\t\treturn true;\n\t\t}\n\n\t\t// Listens for some clipboard related keystrokes, so they get customized.\n\t\t// Needs to be bind to keydown event.\n\t\tfunction onKey( event ) {\n\t\t\tif ( editor.mode != 'wysiwyg' )\n\t\t\t\treturn;\n\n\t\t\tswitch ( event.data.keyCode ) {\n\t\t\t\t// Paste\n\t\t\t\tcase CKEDITOR.CTRL + 86: // CTRL+V\n\t\t\t\tcase CKEDITOR.SHIFT + 45: // SHIFT+INS\n\t\t\t\t\tvar editable = editor.editable();\n\n\t\t\t\t\t// Cancel 'paste' event because ctrl+v is for IE handled\n\t\t\t\t\t// by 'beforepaste'.\n\t\t\t\t\tpreventPasteEventNow();\n\n\t\t\t\t\t// Simulate 'beforepaste' event for all browsers using 'paste' as main event.\n\t\t\t\t\tif ( clipboard.mainPasteEvent == 'paste' ) {\n\t\t\t\t\t\teditable.fire( 'beforepaste' );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn;\n\n\t\t\t\t\t// Cut\n\t\t\t\tcase CKEDITOR.CTRL + 88: // CTRL+X\n\t\t\t\tcase CKEDITOR.SHIFT + 46: // SHIFT+DEL\n\t\t\t\t\t// Save Undo snapshot.\n\t\t\t\t\teditor.fire( 'saveSnapshot' ); // Save before cut\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\teditor.fire( 'saveSnapshot' ); // Save after cut\n\t\t\t\t\t}, 50 ); // OSX is slow (http://dev.ckeditor.com/ticket/11416).\n\t\t\t}\n\t\t}\n\n\t\tfunction pasteDataFromClipboard( evt ) {\n\t\t\t// Default type is 'auto', but can be changed by beforePaste listeners.\n\t\t\tvar eventData = {\n\t\t\t\t\ttype: 'auto',\n\t\t\t\t\tmethod: 'paste',\n\t\t\t\t\tdataTransfer: clipboard.initPasteDataTransfer( evt )\n\t\t\t\t};\n\n\t\t\teventData.dataTransfer.cacheData();\n\n\t\t\t// Fire 'beforePaste' event so clipboard flavor get customized by other plugins.\n\t\t\t// If 'beforePaste' is canceled continue executing getClipboardDataByPastebin and then do nothing\n\t\t\t// (do not fire 'paste', 'afterPaste' events). This way we can grab all - synthetically\n\t\t\t// and natively pasted content and prevent its insertion into editor\n\t\t\t// after canceling 'beforePaste' event.\n\t\t\tvar beforePasteNotCanceled = editor.fire( 'beforePaste', eventData ) !== false;\n\n\t\t\t// Do not use paste bin if the browser let us get HTML or files from dataTranfer.\n\t\t\tif ( beforePasteNotCanceled && clipboard.canClipboardApiBeTrusted( eventData.dataTransfer, editor ) ) {\n\t\t\t\tevt.data.preventDefault();\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tfirePasteEvents( editor, eventData );\n\t\t\t\t}, 0 );\n\t\t\t} else {\n\t\t\t\tgetClipboardDataByPastebin( evt, function( data ) {\n\t\t\t\t\t// Clean up.\n\t\t\t\t\teventData.dataValue = data.replace( /]+data-cke-bookmark[^<]*?<\\/span>/ig, '' );\n\n\t\t\t\t\t// Fire remaining events (without beforePaste)\n\t\t\t\t\tbeforePasteNotCanceled && firePasteEvents( editor, eventData );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tfunction setToolbarStates() {\n\t\t\tif ( editor.mode != 'wysiwyg' )\n\t\t\t\treturn;\n\n\t\t\tvar pasteState = stateFromNamedCommand( 'paste' );\n\n\t\t\teditor.getCommand( 'cut' ).setState( stateFromNamedCommand( 'cut' ) );\n\t\t\teditor.getCommand( 'copy' ).setState( stateFromNamedCommand( 'copy' ) );\n\t\t\teditor.getCommand( 'paste' ).setState( pasteState );\n\t\t\teditor.fire( 'pasteState', pasteState );\n\t\t}\n\n\t\tfunction stateFromNamedCommand( command ) {\n\t\t\tif ( inReadOnly && command in { paste: 1, cut: 1 } )\n\t\t\t\treturn CKEDITOR.TRISTATE_DISABLED;\n\n\t\t\tif ( command == 'paste' )\n\t\t\t\treturn CKEDITOR.TRISTATE_OFF;\n\n\t\t\t// Cut, copy - check if the selection is not empty.\n\t\t\tvar sel = editor.getSelection(),\n\t\t\t\tranges = sel.getRanges(),\n\t\t\t\tselectionIsEmpty = sel.getType() == CKEDITOR.SELECTION_NONE || ( ranges.length == 1 && ranges[ 0 ].collapsed );\n\n\t\t\treturn selectionIsEmpty ? CKEDITOR.TRISTATE_DISABLED : CKEDITOR.TRISTATE_OFF;\n\t\t}\n\t}\n\n\t// Returns:\n\t// * 'htmlifiedtext' if content looks like transformed by browser from plain text.\n\t//\t\tSee clipboard/paste.html TCs for more info.\n\t// * 'html' if it is not 'htmlifiedtext'.\n\tfunction recogniseContentType( data ) {\n\t\tif ( CKEDITOR.env.webkit ) {\n\t\t\t// Plain text or (

and text inside
).\n\t\t\tif ( !data.match( /^[^<]*$/g ) && !data.match( /^(
<\\/div>|
[^<]*<\\/div>)*$/gi ) )\n\t\t\t\treturn 'html';\n\t\t} else if ( CKEDITOR.env.ie ) {\n\t\t\t// Text and
or ( text and
in

- paragraphs can be separated by new \\r\\n ).\n\t\t\tif ( !data.match( /^([^<]|)*$/gi ) && !data.match( /^(

([^<]|)*<\\/p>|(\\r\\n))*$/gi ) )\n\t\t\t\treturn 'html';\n\t\t} else if ( CKEDITOR.env.gecko ) {\n\t\t\t// Text or
.\n\t\t\tif ( !data.match( /^([^<]|)*$/gi ) )\n\t\t\t\treturn 'html';\n\t\t} else {\n\t\t\treturn 'html';\n\t\t}\n\n\t\treturn 'htmlifiedtext';\n\t}\n\n\t// This function transforms what browsers produce when\n\t// pasting plain text into editable element (see clipboard/paste.html TCs\n\t// for more info) into correct HTML (similar to that produced by text2Html).\n\tfunction htmlifiedTextHtmlification( config, data ) {\n\t\tfunction repeatParagraphs( repeats ) {\n\t\t\t// Repeat blocks floor((n+1)/2) times.\n\t\t\t// Even number of repeats - add
at the beginning of last

.\n\t\t\treturn CKEDITOR.tools.repeat( '

', ~~( repeats / 2 ) ) + ( repeats % 2 == 1 ? '
' : '' );\n\t\t}\n\n\t\t\t// Replace adjacent white-spaces (EOLs too - Fx sometimes keeps them) with one space.\n\t\tdata = data.replace( /\\s+/g, ' ' )\n\t\t\t// Remove spaces from between tags.\n\t\t\t.replace( /> +<' )\n\t\t\t// Normalize XHTML syntax and upper cased
tags.\n\t\t\t.replace( /
/gi, '
' );\n\n\t\t// IE - lower cased tags.\n\t\tdata = data.replace( /<\\/?[A-Z]+>/g, function( match ) {\n\t\t\treturn match.toLowerCase();\n\t\t} );\n\n\t\t// Don't touch single lines (no ) - nothing to do here.\n\t\tif ( data.match( /^[^<]$/ ) )\n\t\t\treturn data;\n\n\t\t// Webkit.\n\t\tif ( CKEDITOR.env.webkit && data.indexOf( '

' ) > -1 ) {\n\t\t\t\t// One line break at the beginning - insert
\n\t\t\tdata = data.replace( /^(
(
|)<\\/div>)(?!$|(
(
|)<\\/div>))/g, '
' )\n\t\t\t\t// Two or more - reduce number of new lines by one.\n\t\t\t\t.replace( /^(
(
|)<\\/div>){2}(?!$)/g, '
' );\n\n\t\t\t// Two line breaks create one paragraph in Webkit.\n\t\t\tif ( data.match( /
(
|)<\\/div>/ ) ) {\n\t\t\t\tdata = '

' + data.replace( /(

(
|)<\\/div>)+/g, function( match ) {\n\t\t\t\t\treturn repeatParagraphs( match.split( '
' ).length + 1 );\n\t\t\t\t} ) + '

';\n\t\t\t}\n\n\t\t\t// One line break create br.\n\t\t\tdata = data.replace( /<\\/div>
/g, '
' );\n\n\t\t\t// Remove remaining divs.\n\t\t\tdata = data.replace( /<\\/?div>/g, '' );\n\t\t}\n\n\t\t// Opera and Firefox and enterMode != BR.\n\t\tif ( CKEDITOR.env.gecko && config.enterMode != CKEDITOR.ENTER_BR ) {\n\t\t\t// Remove bogus
- Fx generates two for one line break.\n\t\t\t// For two line breaks it still produces two , but it's better to ignore this case than the first one.\n\t\t\tif ( CKEDITOR.env.gecko )\n\t\t\t\tdata = data.replace( /^

$/, '
' );\n\n\t\t\t// This line satisfy edge case when for Opera we have two line breaks\n\t\t\t//data = data.replace( /)\n\n\t\t\tif ( data.indexOf( '

' ) > -1 ) {\n\t\t\t\t// Two line breaks create one paragraph, three - 2, four - 3, etc.\n\t\t\t\tdata = '

' + data.replace( /(
){2,}/g, function( match ) {\n\t\t\t\t\treturn repeatParagraphs( match.length / 4 );\n\t\t\t\t} ) + '

';\n\t\t\t}\n\t\t}\n\n\t\treturn switchEnterMode( config, data );\n\t}\n\n\tfunction filtersFactoryFactory() {\n\t\tvar filters = {};\n\n\t\tfunction setUpTags() {\n\t\t\tvar tags = {};\n\n\t\t\tfor ( var tag in CKEDITOR.dtd ) {\n\t\t\t\tif ( tag.charAt( 0 ) != '$' && tag != 'div' && tag != 'span' ) {\n\t\t\t\t\ttags[ tag ] = 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn tags;\n\t\t}\n\n\t\tfunction createSemanticContentFilter() {\n\t\t\tvar filter = new CKEDITOR.filter();\n\n\t\t\tfilter.allow( {\n\t\t\t\t$1: {\n\t\t\t\t\telements: setUpTags(),\n\t\t\t\t\tattributes: true,\n\t\t\t\t\tstyles: false,\n\t\t\t\t\tclasses: false\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn filter;\n\t\t}\n\n\t\treturn {\n\t\t\tget: function( type ) {\n\t\t\t\tif ( type == 'plain-text' ) {\n\t\t\t\t\t// Does this look confusing to you? Did we forget about enter mode?\n\t\t\t\t\t// It is a trick that let's us creating one filter for edidtor, regardless of its\n\t\t\t\t\t// activeEnterMode (which as the name indicates can change during runtime).\n\t\t\t\t\t//\n\t\t\t\t\t// How does it work?\n\t\t\t\t\t// The active enter mode is passed to the filter.applyTo method.\n\t\t\t\t\t// The filter first marks all elements except
as disallowed and then tries to remove\n\t\t\t\t\t// them. However, it cannot remove e.g. a

element completely, because it's a basic structural element,\n\t\t\t\t\t// so it tries to replace it with an element created based on the active enter mode, eventually doing nothing.\n\t\t\t\t\t//\n\t\t\t\t\t// Now you can sleep well.\n\t\t\t\t\treturn filters.plainText || ( filters.plainText = new CKEDITOR.filter( 'br' ) );\n\t\t\t\t} else if ( type == 'semantic-content' ) {\n\t\t\t\t\treturn filters.semanticContent || ( filters.semanticContent = createSemanticContentFilter() );\n\t\t\t\t} else if ( type ) {\n\t\t\t\t\t// Create filter based on rules (string or object).\n\t\t\t\t\treturn new CKEDITOR.filter( type );\n\t\t\t\t}\n\n\t\t\t\treturn null;\n\t\t\t}\n\t\t};\n\t}\n\n\tfunction filterContent( editor, data, filter ) {\n\t\tvar fragment = CKEDITOR.htmlParser.fragment.fromHtml( data ),\n\t\t\twriter = new CKEDITOR.htmlParser.basicWriter();\n\n\t\tfilter.applyTo( fragment, true, false, editor.activeEnterMode );\n\t\tfragment.writeHtml( writer );\n\n\t\treturn writer.getHtml();\n\t}\n\n\tfunction switchEnterMode( config, data ) {\n\t\tif ( config.enterMode == CKEDITOR.ENTER_BR ) {\n\t\t\tdata = data.replace( /(<\\/p>

)+/g, function( match ) {\n\t\t\t\treturn CKEDITOR.tools.repeat( '
', match.length / 7 * 2 );\n\t\t\t} ).replace( /<\\/?p>/g, '' );\n\t\t} else if ( config.enterMode == CKEDITOR.ENTER_DIV ) {\n\t\t\tdata = data.replace( /<(\\/)?p>/g, '<$1div>' );\n\t\t}\n\n\t\treturn data;\n\t}\n\n\tfunction preventDefaultSetDropEffectToNone( evt ) {\n\t\tevt.data.preventDefault();\n\t\tevt.data.$.dataTransfer.dropEffect = 'none';\n\t}\n\n\tfunction initDragDrop( editor ) {\n\t\tvar clipboard = CKEDITOR.plugins.clipboard;\n\n\t\teditor.on( 'contentDom', function() {\n\t\t\tvar editable = editor.editable(),\n\t\t\t\tdropTarget = CKEDITOR.plugins.clipboard.getDropTarget( editor ),\n\t\t\t\ttop = editor.ui.space( 'top' ),\n\t\t\t\tbottom = editor.ui.space( 'bottom' );\n\n\t\t\t// -------------- DRAGOVER TOP & BOTTOM --------------\n\n\t\t\t// Not allowing dragging on toolbar and bottom (http://dev.ckeditor.com/ticket/12613).\n\t\t\tclipboard.preventDefaultDropOnElement( top );\n\t\t\tclipboard.preventDefaultDropOnElement( bottom );\n\n\t\t\t// -------------- DRAGSTART --------------\n\t\t\t// Listed on dragstart to mark internal and cross-editor drag & drop\n\t\t\t// and save range and selected HTML.\n\n\t\t\teditable.attachListener( dropTarget, 'dragstart', fireDragEvent );\n\n\t\t\t// Make sure to reset data transfer (in case dragend was not called or was canceled).\n\t\t\teditable.attachListener( editor, 'dragstart', clipboard.resetDragDataTransfer, clipboard, null, 1 );\n\n\t\t\t// Create a dataTransfer object and save it globally.\n\t\t\teditable.attachListener( editor, 'dragstart', function( evt ) {\n\t\t\t\tclipboard.initDragDataTransfer( evt, editor );\n\t\t\t}, null, null, 2 );\n\n\t\t\teditable.attachListener( editor, 'dragstart', function() {\n\t\t\t\t// Save drag range globally for cross editor D&D.\n\t\t\t\tvar dragRange = clipboard.dragRange = editor.getSelection().getRanges()[ 0 ];\n\n\t\t\t\t// Store number of children, so we can later tell if any text node was split on drop. (http://dev.ckeditor.com/ticket/13011, http://dev.ckeditor.com/ticket/13447)\n\t\t\t\tif ( CKEDITOR.env.ie && CKEDITOR.env.version < 10 ) {\n\t\t\t\t\tclipboard.dragStartContainerChildCount = dragRange ? getContainerChildCount( dragRange.startContainer ) : null;\n\t\t\t\t\tclipboard.dragEndContainerChildCount = dragRange ? getContainerChildCount( dragRange.endContainer ) : null;\n\t\t\t\t}\n\t\t\t}, null, null, 100 );\n\n\t\t\t// -------------- DRAGEND --------------\n\t\t\t// Clean up on dragend.\n\n\t\t\teditable.attachListener( dropTarget, 'dragend', fireDragEvent );\n\n\t\t\t// Init data transfer if someone wants to use it in dragend.\n\t\t\teditable.attachListener( editor, 'dragend', clipboard.initDragDataTransfer, clipboard, null, 1 );\n\n\t\t\t// When drag & drop is done we need to reset dataTransfer so the future\n\t\t\t// external drop will be not recognize as internal.\n\t\t\teditable.attachListener( editor, 'dragend', clipboard.resetDragDataTransfer, clipboard, null, 100 );\n\n\t\t\t// -------------- DRAGOVER --------------\n\t\t\t// We need to call preventDefault on dragover because otherwise if\n\t\t\t// we drop image it will overwrite document.\n\n\t\t\teditable.attachListener( dropTarget, 'dragover', function( evt ) {\n\t\t\t\t// Edge requires this handler to have `preventDefault()` regardless of the situation.\n\t\t\t\tif ( CKEDITOR.env.edge ) {\n\t\t\t\t\tevt.data.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar target = evt.data.getTarget();\n\n\t\t\t\t// Prevent reloading page when dragging image on empty document (http://dev.ckeditor.com/ticket/12619).\n\t\t\t\tif ( target && target.is && target.is( 'html' ) ) {\n\t\t\t\t\tevt.data.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// If we do not prevent default dragover on IE the file path\n\t\t\t\t// will be loaded and we will lose content. On the other hand\n\t\t\t\t// if we prevent it the cursor will not we shown, so we prevent\n\t\t\t\t// dragover only on IE, on versions which support file API and only\n\t\t\t\t// if the event contains files.\n\t\t\t\tif ( CKEDITOR.env.ie &&\n\t\t\t\t\tCKEDITOR.plugins.clipboard.isFileApiSupported &&\n\t\t\t\t\tevt.data.$.dataTransfer.types.contains( 'Files' ) ) {\n\t\t\t\t\tevt.data.preventDefault();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// -------------- DROP --------------\n\n\t\t\teditable.attachListener( dropTarget, 'drop', function( evt ) {\n\t\t\t\t// Do nothing if event was already prevented. (http://dev.ckeditor.com/ticket/13879)\n\t\t\t\tif ( evt.data.$.defaultPrevented ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Cancel native drop.\n\t\t\t\tevt.data.preventDefault();\n\n\t\t\t\tvar target = evt.data.getTarget(),\n\t\t\t\t\treadOnly = target.isReadOnly();\n\n\t\t\t\t// Do nothing if drop on non editable element (http://dev.ckeditor.com/ticket/13015).\n\t\t\t\t// The tag isn't editable (body is), but we want to allow drop on it\n\t\t\t\t// (so it is possible to drop below editor contents).\n\t\t\t\tif ( readOnly && !( target.type == CKEDITOR.NODE_ELEMENT && target.is( 'html' ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Getting drop position is one of the most complex parts.\n\t\t\t\tvar dropRange = clipboard.getRangeAtDropPosition( evt, editor ),\n\t\t\t\t\tdragRange = clipboard.dragRange;\n\n\t\t\t\t// Do nothing if it was not possible to get drop range.\n\t\t\t\tif ( !dropRange ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Fire drop.\n\t\t\t\tfireDragEvent( evt, dragRange, dropRange );\n\t\t\t}, null, null, 9999 );\n\n\t\t\t// Create dataTransfer or get it, if it was created before.\n\t\t\teditable.attachListener( editor, 'drop', clipboard.initDragDataTransfer, clipboard, null, 1 );\n\n\t\t\t// Execute drop action, fire paste.\n\t\t\teditable.attachListener( editor, 'drop', function( evt ) {\n\t\t\t\tvar data = evt.data;\n\n\t\t\t\tif ( !data ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Let user modify drag and drop range.\n\t\t\t\tvar dropRange = data.dropRange,\n\t\t\t\t\tdragRange = data.dragRange,\n\t\t\t\t\tdataTransfer = data.dataTransfer;\n\n\t\t\t\tif ( dataTransfer.getTransferType( editor ) == CKEDITOR.DATA_TRANSFER_INTERNAL ) {\n\t\t\t\t\t// Execute drop with a timeout because otherwise selection, after drop,\n\t\t\t\t\t// on IE is in the drag position, instead of drop position.\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tclipboard.internalDrop( dragRange, dropRange, dataTransfer, editor );\n\t\t\t\t\t}, 0 );\n\t\t\t\t} else if ( dataTransfer.getTransferType( editor ) == CKEDITOR.DATA_TRANSFER_CROSS_EDITORS ) {\n\t\t\t\t\tcrossEditorDrop( dragRange, dropRange, dataTransfer );\n\t\t\t\t} else {\n\t\t\t\t\texternalDrop( dropRange, dataTransfer );\n\t\t\t\t}\n\t\t\t}, null, null, 9999 );\n\n\t\t\t// Cross editor drag and drop (drag in one Editor and drop in the other).\n\t\t\tfunction crossEditorDrop( dragRange, dropRange, dataTransfer ) {\n\t\t\t\t// Paste event should be fired before delete contents because otherwise\n\t\t\t\t// Chrome have a problem with drop range (Chrome split the drop\n\t\t\t\t// range container so the offset is bigger then container length).\n\t\t\t\tdropRange.select();\n\t\t\t\tfirePasteEvents( editor, { dataTransfer: dataTransfer, method: 'drop' }, 1 );\n\n\t\t\t\t// Remove dragged content and make a snapshot.\n\t\t\t\tdataTransfer.sourceEditor.fire( 'saveSnapshot' );\n\n\t\t\t\tdataTransfer.sourceEditor.editable().extractHtmlFromRange( dragRange );\n\n\t\t\t\t// Make some selection before saving snapshot, otherwise error will be thrown, because\n\t\t\t\t// there will be no valid selection after content is removed.\n\t\t\t\tdataTransfer.sourceEditor.getSelection().selectRanges( [ dragRange ] );\n\t\t\t\tdataTransfer.sourceEditor.fire( 'saveSnapshot' );\n\t\t\t}\n\n\t\t\t// Drop from external source.\n\t\t\tfunction externalDrop( dropRange, dataTransfer ) {\n\t\t\t\t// Paste content into the drop position.\n\t\t\t\tdropRange.select();\n\n\t\t\t\tfirePasteEvents( editor, { dataTransfer: dataTransfer, method: 'drop' }, 1 );\n\n\t\t\t\t// Usually we reset DataTranfer on dragend,\n\t\t\t\t// but dragend is called on the same element as dragstart\n\t\t\t\t// so it will not be called on on external drop.\n\t\t\t\tclipboard.resetDragDataTransfer();\n\t\t\t}\n\n\t\t\t// Fire drag/drop events (dragstart, dragend, drop).\n\t\t\tfunction fireDragEvent( evt, dragRange, dropRange ) {\n\t\t\t\tvar eventData = {\n\t\t\t\t\t\t$: evt.data.$,\n\t\t\t\t\t\ttarget: evt.data.getTarget()\n\t\t\t\t\t};\n\n\t\t\t\tif ( dragRange ) {\n\t\t\t\t\teventData.dragRange = dragRange;\n\t\t\t\t}\n\t\t\t\tif ( dropRange ) {\n\t\t\t\t\teventData.dropRange = dropRange;\n\t\t\t\t}\n\n\t\t\t\tif ( editor.fire( evt.name, eventData ) === false ) {\n\t\t\t\t\tevt.data.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction getContainerChildCount( container ) {\n\t\t\t\tif ( container.type != CKEDITOR.NODE_ELEMENT ) {\n\t\t\t\t\tcontainer = container.getParent();\n\t\t\t\t}\n\n\t\t\t\treturn container.getChildCount();\n\t\t\t}\n\t\t} );\n\t}\n\n\t/**\n\t * @singleton\n\t * @class CKEDITOR.plugins.clipboard\n\t */\n\tCKEDITOR.plugins.clipboard = {\n\t\t/**\n\t\t * True if the environment allows to set data on copy or cut manually. This value is false in IE, because this browser\n\t\t * shows the security dialog window when the script tries to set clipboard data and on iOS, because custom data is\n\t\t * not saved to clipboard there.\n\t\t *\n\t\t * @since 4.5\n\t\t * @readonly\n\t\t * @property {Boolean}\n\t\t */\n\t\tisCustomCopyCutSupported: !CKEDITOR.env.ie && !CKEDITOR.env.iOS,\n\n\t\t/**\n\t\t * True if the environment supports MIME types and custom data types in dataTransfer/cliboardData getData/setData methods.\n\t\t *\n\t\t * @since 4.5\n\t\t * @readonly\n\t\t * @property {Boolean}\n\t\t */\n\t\tisCustomDataTypesSupported: !CKEDITOR.env.ie,\n\n\t\t/**\n\t\t * True if the environment supports File API.\n\t\t *\n\t\t * @since 4.5\n\t\t * @readonly\n\t\t * @property {Boolean}\n\t\t */\n\t\tisFileApiSupported: !CKEDITOR.env.ie || CKEDITOR.env.version > 9,\n\n\t\t/**\n\t\t * Main native paste event editable should listen to.\n\t\t *\n\t\t * **Note:** Safari does not like the {@link CKEDITOR.editor#beforePaste} event — it sometimes does not\n\t\t * handle Ctrl+C properly. This is probably caused by some race condition between events.\n\t\t * Chrome, Firefox and Edge work well with both events, so it is better to use {@link CKEDITOR.editor#paste}\n\t\t * which will handle pasting from e.g. browsers' menu bars.\n\t\t * IE7/8 does not like the {@link CKEDITOR.editor#paste} event for which it is throwing random errors.\n\t\t *\n\t\t * @since 4.5\n\t\t * @readonly\n\t\t * @property {String}\n\t\t */\n\t\tmainPasteEvent: ( CKEDITOR.env.ie && !CKEDITOR.env.edge ) ? 'beforepaste' : 'paste',\n\n\t\t/**\n\t\t * Returns `true` if it is expected that a browser provides HTML data through the Clipboard API.\n\t\t * If not, this method returns `false` and as a result CKEditor will use the paste bin. Read more in\n\t\t * the [Clipboard Integration](http://docs.ckeditor.com/#!/guide/dev_clipboard-section-clipboard-api) guide.\n\t\t *\n\t\t * @since 4.5.2\n\t\t * @returns {Boolean}\n\t\t */\n\t\tcanClipboardApiBeTrusted: function( dataTransfer, editor ) {\n\t\t\t// If it's an internal or cross-editor data transfer, then it means that custom cut/copy/paste support works\n\t\t\t// and that the data were put manually on the data transfer so we can be sure that it's available.\n\t\t\tif ( dataTransfer.getTransferType( editor ) != CKEDITOR.DATA_TRANSFER_EXTERNAL ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// In Chrome we can trust Clipboard API, with the exception of Chrome on Android (in both - mobile and desktop modes), where\n\t\t\t// clipboard API is not available so we need to check it (http://dev.ckeditor.com/ticket/13187).\n\t\t\tif ( CKEDITOR.env.chrome && !dataTransfer.isEmpty() ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Because of a Firefox bug HTML data are not available in some cases (e.g. paste from Word), in such cases we\n\t\t\t// need to use the pastebin (http://dev.ckeditor.com/ticket/13528, https://bugzilla.mozilla.org/show_bug.cgi?id=1183686).\n\t\t\tif ( CKEDITOR.env.gecko && ( dataTransfer.getData( 'text/html' ) || dataTransfer.getFilesCount() ) ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Safari fixed clipboard in 10.1 (https://bugs.webkit.org/show_bug.cgi?id=19893) (http://dev.ckeditor.com/ticket/16982).\n\t\t\t// However iOS version still doesn't work well enough (https://bugs.webkit.org/show_bug.cgi?id=19893#c34).\n\t\t\tif ( CKEDITOR.env.safari && CKEDITOR.env.version >= 603 && !CKEDITOR.env.iOS ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// In older Safari and IE HTML data is not available though the Clipboard API.\n\t\t\t// In Edge things are a bit messy at the moment -\n\t\t\t// https://connect.microsoft.com/IE/feedback/details/1572456/edge-clipboard-api-text-html-content-messed-up-in-event-clipboarddata\n\t\t\t// It is safer to use the paste bin in unknown cases.\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * Returns the element that should be used as the target for the drop event.\n\t\t *\n\t\t * @since 4.5\n\t\t * @param {CKEDITOR.editor} editor The editor instance.\n\t\t * @returns {CKEDITOR.dom.domObject} the element that should be used as the target for the drop event.\n\t\t */\n\t\tgetDropTarget: function( editor ) {\n\t\t\tvar editable = editor.editable();\n\n\t\t\t// http://dev.ckeditor.com/ticket/11123 Firefox needs to listen on document, because otherwise event won't be fired.\n\t\t\t// http://dev.ckeditor.com/ticket/11086 IE8 cannot listen on document.\n\t\t\tif ( ( CKEDITOR.env.ie && CKEDITOR.env.version < 9 ) || editable.isInline() ) {\n\t\t\t\treturn editable;\n\t\t\t} else {\n\t\t\t\treturn editor.document;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * IE 8 & 9 split text node on drop so the first node contains the\n\t\t * text before the drop position and the second contains the rest. If you\n\t\t * drag the content from the same node you will be not be able to get\n\t\t * it (the range becomes invalid), so you need to join them back.\n\t\t *\n\t\t * Note that the first node in IE 8 & 9 is the original node object\n\t\t * but with shortened content.\n\t\t *\n\t\t *\t\tBefore:\n\t\t *\t\t --- Text Node A ----------------------------------\n\t\t *\t\t /\\\n\t\t *\t\t Drag position\n\t\t *\n\t\t *\t\tAfter (IE 8 & 9):\n\t\t *\t\t --- Text Node A ----- --- Text Node B -----------\n\t\t *\t\t /\\ /\\\n\t\t *\t\t Drop position Drag position\n\t\t *\t\t (invalid)\n\t\t *\n\t\t *\t\tAfter (other browsers):\n\t\t *\t\t --- Text Node A ----------------------------------\n\t\t *\t\t /\\ /\\\n\t\t *\t\t Drop position Drag position\n\t\t *\n\t\t * **Note:** This function is in the public scope for tests usage only.\n\t\t *\n\t\t * @since 4.5\n\t\t * @private\n\t\t * @param {CKEDITOR.dom.range} dragRange The drag range.\n\t\t * @param {CKEDITOR.dom.range} dropRange The drop range.\n\t\t * @param {Number} preDragStartContainerChildCount The number of children of the drag range start container before the drop.\n\t\t * @param {Number} preDragEndContainerChildCount The number of children of the drag range end container before the drop.\n\t\t */\n\t\tfixSplitNodesAfterDrop: function( dragRange, dropRange, preDragStartContainerChildCount, preDragEndContainerChildCount ) {\n\t\t\tvar dropContainer = dropRange.startContainer;\n\n\t\t\tif (\n\t\t\t\ttypeof preDragEndContainerChildCount != 'number' ||\n\t\t\t\ttypeof preDragStartContainerChildCount != 'number'\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// We are only concerned about ranges anchored in elements.\n\t\t\tif ( dropContainer.type != CKEDITOR.NODE_ELEMENT ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( handleContainer( dragRange.startContainer, dropContainer, preDragStartContainerChildCount ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( handleContainer( dragRange.endContainer, dropContainer, preDragEndContainerChildCount ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfunction handleContainer( dragContainer, dropContainer, preChildCount ) {\n\t\t\t\tvar dragElement = dragContainer;\n\t\t\t\tif ( dragElement.type == CKEDITOR.NODE_TEXT ) {\n\t\t\t\t\tdragElement = dragContainer.getParent();\n\t\t\t\t}\n\n\t\t\t\tif ( dragElement.equals( dropContainer ) && preChildCount != dropContainer.getChildCount() ) {\n\t\t\t\t\tapplyFix( dropRange );\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfunction applyFix( dropRange ) {\n\t\t\t\tvar nodeBefore = dropRange.startContainer.getChild( dropRange.startOffset - 1 ),\n\t\t\t\t\tnodeAfter = dropRange.startContainer.getChild( dropRange.startOffset );\n\n\t\t\t\tif (\n\t\t\t\t\tnodeBefore && nodeBefore.type == CKEDITOR.NODE_TEXT &&\n\t\t\t\t\tnodeAfter && nodeAfter.type == CKEDITOR.NODE_TEXT\n\t\t\t\t) {\n\t\t\t\t\tvar offset = nodeBefore.getLength();\n\n\t\t\t\t\tnodeBefore.setText( nodeBefore.getText() + nodeAfter.getText() );\n\t\t\t\t\tnodeAfter.remove();\n\n\t\t\t\t\tdropRange.setStart( nodeBefore, offset );\n\t\t\t\t\tdropRange.collapse( true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Checks whether turning the drag range into bookmarks will invalidate the drop range.\n\t\t * This usually happens when the drop range shares the container with the drag range and is\n\t\t * located after the drag range, but there are countless edge cases.\n\t\t *\n\t\t * This function is stricly related to {@link #internalDrop} which toggles\n\t\t * order in which it creates bookmarks for both ranges based on a value returned\n\t\t * by this method. In some cases this method returns a value which is not necessarily\n\t\t * true in terms of what it was meant to check, but it is convenient, because\n\t\t * we know how it is interpreted in {@link #internalDrop}, so the correct\n\t\t * behavior of the entire algorithm is assured.\n\t\t *\n\t\t * **Note:** This function is in the public scope for tests usage only.\n\t\t *\n\t\t * @since 4.5\n\t\t * @private\n\t\t * @param {CKEDITOR.dom.range} dragRange The first range to compare.\n\t\t * @param {CKEDITOR.dom.range} dropRange The second range to compare.\n\t\t * @returns {Boolean} `true` if the first range is before the second range.\n\t\t */\n\t\tisDropRangeAffectedByDragRange: function( dragRange, dropRange ) {\n\t\t\tvar dropContainer = dropRange.startContainer,\n\t\t\t\tdropOffset = dropRange.endOffset;\n\n\t\t\t// Both containers are the same and drop offset is at the same position or later.\n\t\t\t// \" A L] A \" \" M A \"\n\t\t\t// ^ ^\n\t\t\tif ( dragRange.endContainer.equals( dropContainer ) && dragRange.endOffset <= dropOffset ) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Bookmark for drag start container will mess up with offsets.\n\t\t\t// \" O [L A \" \" M A \"\n\t\t\t// ^ ^\n\t\t\tif (\n\t\t\t\tdragRange.startContainer.getParent().equals( dropContainer ) &&\n\t\t\t\tdragRange.startContainer.getIndex() < dropOffset\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\t// Bookmark for drag end container will mess up with offsets.\n\t\t\t// \" O] L A \" \" M A \"\n\t\t\t// ^ ^\n\t\t\tif (\n\t\t\t\tdragRange.endContainer.getParent().equals( dropContainer ) &&\n\t\t\t\tdragRange.endContainer.getIndex() < dropOffset\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\treturn false;\n\t\t},\n\n\t\t/**\n\t\t * Internal drag and drop (drag and drop in the same editor instance).\n\t\t *\n\t\t * **Note:** This function is in the public scope for tests usage only.\n\t\t *\n\t\t * @since 4.5\n\t\t * @private\n\t\t * @param {CKEDITOR.dom.range} dragRange The first range to compare.\n\t\t * @param {CKEDITOR.dom.range} dropRange The second range to compare.\n\t\t * @param {CKEDITOR.plugins.clipboard.dataTransfer} dataTransfer\n\t\t * @param {CKEDITOR.editor} editor\n\t\t */\n\t\tinternalDrop: function( dragRange, dropRange, dataTransfer, editor ) {\n\t\t\tvar clipboard = CKEDITOR.plugins.clipboard,\n\t\t\t\teditable = editor.editable(),\n\t\t\t\tdragBookmark, dropBookmark, isDropRangeAffected;\n\n\t\t\t// Save and lock snapshot so there will be only\n\t\t\t// one snapshot for both remove and insert content.\n\t\t\teditor.fire( 'saveSnapshot' );\n\t\t\teditor.fire( 'lockSnapshot', { dontUpdate: 1 } );\n\n\t\t\tif ( CKEDITOR.env.ie && CKEDITOR.env.version < 10 ) {\n\t\t\t\tthis.fixSplitNodesAfterDrop(\n\t\t\t\t\tdragRange,\n\t\t\t\t\tdropRange,\n\t\t\t\t\tclipboard.dragStartContainerChildCount,\n\t\t\t\t\tclipboard.dragEndContainerChildCount\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Because we manipulate multiple ranges we need to do it carefully,\n\t\t\t// changing one range (event creating a bookmark) may make other invalid.\n\t\t\t// We need to change ranges into bookmarks so we can manipulate them easily in the future.\n\t\t\t// We can change the range which is later in the text before we change the preceding range.\n\t\t\t// We call isDropRangeAffectedByDragRange to test the order of ranges.\n\t\t\tisDropRangeAffected = this.isDropRangeAffectedByDragRange( dragRange, dropRange );\n\t\t\tif ( !isDropRangeAffected ) {\n\t\t\t\tdragBookmark = dragRange.createBookmark( false );\n\t\t\t}\n\t\t\tdropBookmark = dropRange.clone().createBookmark( false );\n\t\t\tif ( isDropRangeAffected ) {\n\t\t\t\tdragBookmark = dragRange.createBookmark( false );\n\t\t\t}\n\n\t\t\t// Check if drop range is inside range.\n\t\t\t// This is an edge case when we drop something on editable's margin/padding.\n\t\t\t// That space is not treated as a part of the range we drag, so it is possible to drop there.\n\t\t\t// When we drop, browser tries to find closest drop position and it finds it inside drag range. (http://dev.ckeditor.com/ticket/13453)\n\t\t\tvar startNode = dragBookmark.startNode,\n\t\t\t\tendNode = dragBookmark.endNode,\n\t\t\t\tdropNode = dropBookmark.startNode,\n\t\t\t\tdropInsideDragRange =\n\t\t\t\t\t// Must check endNode because dragRange could be collapsed in some edge cases (simulated DnD).\n\t\t\t\t\tendNode &&\n\t\t\t\t\t( startNode.getPosition( dropNode ) & CKEDITOR.POSITION_PRECEDING ) &&\n\t\t\t\t\t( endNode.getPosition( dropNode ) & CKEDITOR.POSITION_FOLLOWING );\n\n\t\t\t// If the drop range happens to be inside drag range change it's position to the beginning of the drag range.\n\t\t\tif ( dropInsideDragRange ) {\n\t\t\t\t// We only change position of bookmark span that is connected with dropBookmark.\n\t\t\t\t// dropRange will be overwritten and set to the dropBookmark later.\n\t\t\t\tdropNode.insertBefore( startNode );\n\t\t\t}\n\n\t\t\t// No we can safely delete content for the drag range...\n\t\t\tdragRange = editor.createRange();\n\t\t\tdragRange.moveToBookmark( dragBookmark );\n\t\t\teditable.extractHtmlFromRange( dragRange, 1 );\n\n\t\t\t// ...and paste content into the drop position.\n\t\t\tdropRange = editor.createRange();\n\t\t\tdropRange.moveToBookmark( dropBookmark );\n\n\t\t\t// We do not select drop range, because of may be in the place we can not set the selection\n\t\t\t// (e.g. between blocks, in case of block widget D&D). We put range to the paste event instead.\n\t\t\tfirePasteEvents( editor, { dataTransfer: dataTransfer, method: 'drop', range: dropRange }, 1 );\n\n\t\t\teditor.fire( 'unlockSnapshot' );\n\t\t},\n\n\t\t/**\n\t\t * Gets the range from the `drop` event.\n\t\t *\n\t\t * @since 4.5\n\t\t * @param {Object} domEvent A native DOM drop event object.\n\t\t * @param {CKEDITOR.editor} editor The source editor instance.\n\t\t * @returns {CKEDITOR.dom.range} range at drop position.\n\t\t */\n\t\tgetRangeAtDropPosition: function( dropEvt, editor ) {\n\t\t\tvar $evt = dropEvt.data.$,\n\t\t\t\tx = $evt.clientX,\n\t\t\t\ty = $evt.clientY,\n\t\t\t\t$range,\n\t\t\t\tdefaultRange = editor.getSelection( true ).getRanges()[ 0 ],\n\t\t\t\trange = editor.createRange();\n\n\t\t\t// Make testing possible.\n\t\t\tif ( dropEvt.data.testRange )\n\t\t\t\treturn dropEvt.data.testRange;\n\n\t\t\t// Webkits.\n\t\t\tif ( document.caretRangeFromPoint && editor.document.$.caretRangeFromPoint( x, y ) ) {\n\t\t\t\t$range = editor.document.$.caretRangeFromPoint( x, y );\n\t\t\t\trange.setStart( CKEDITOR.dom.node( $range.startContainer ), $range.startOffset );\n\t\t\t\trange.collapse( true );\n\t\t\t}\n\t\t\t// FF.\n\t\t\telse if ( $evt.rangeParent ) {\n\t\t\t\trange.setStart( CKEDITOR.dom.node( $evt.rangeParent ), $evt.rangeOffset );\n\t\t\t\trange.collapse( true );\n\t\t\t}\n\t\t\t// IEs 9+.\n\t\t\t// We check if editable is focused to make sure that it's an internal DnD. External DnD must use the second\n\t\t\t// mechanism because of http://dev.ckeditor.com/ticket/13472#comment:6.\n\t\t\telse if ( CKEDITOR.env.ie && CKEDITOR.env.version > 8 && defaultRange && editor.editable().hasFocus ) {\n\t\t\t\t// On IE 9+ range by default is where we expected it.\n\t\t\t\t// defaultRange may be undefined if dragover was canceled (file drop).\n\t\t\t\treturn defaultRange;\n\t\t\t}\n\t\t\t// IE 8 and all IEs if !defaultRange or external DnD.\n\t\t\telse if ( document.body.createTextRange ) {\n\t\t\t\t// To use this method we need a focus (which may be somewhere else in case of external drop).\n\t\t\t\teditor.focus();\n\n\t\t\t\t$range = editor.document.getBody().$.createTextRange();\n\t\t\t\ttry {\n\t\t\t\t\tvar sucess = false;\n\n\t\t\t\t\t// If user drop between text line IEs moveToPoint throws exception:\n\t\t\t\t\t//\n\t\t\t\t\t//\t\tLorem ipsum pulvinar purus et euismod\n\t\t\t\t\t//\n\t\t\t\t\t//\t\tdolor sit amet,| consectetur adipiscing\n\t\t\t\t\t//\t\t *\n\t\t\t\t\t//\t\tvestibulum tincidunt augue eget tempus.\n\t\t\t\t\t//\n\t\t\t\t\t// * - drop position\n\t\t\t\t\t// | - expected cursor position\n\t\t\t\t\t//\n\t\t\t\t\t// So we try to call moveToPoint with +-1px up to +-20px above or\n\t\t\t\t\t// below original drop position to find nearest good drop position.\n\t\t\t\t\tfor ( var i = 0; i < 20 && !sucess; i++ ) {\n\t\t\t\t\t\tif ( !sucess ) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t$range.moveToPoint( x, y - i );\n\t\t\t\t\t\t\t\tsucess = true;\n\t\t\t\t\t\t\t} catch ( err ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( !sucess ) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t$range.moveToPoint( x, y + i );\n\t\t\t\t\t\t\t\tsucess = true;\n\t\t\t\t\t\t\t} catch ( err ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( sucess ) {\n\t\t\t\t\t\tvar id = 'cke-temp-' + ( new Date() ).getTime();\n\t\t\t\t\t\t$range.pasteHTML( '\\u200b' );\n\n\t\t\t\t\t\tvar span = editor.document.getById( id );\n\t\t\t\t\t\trange.moveToPosition( span, CKEDITOR.POSITION_BEFORE_START );\n\t\t\t\t\t\tspan.remove();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If the fist method does not succeed we might be next to\n\t\t\t\t\t\t// the short element (like header):\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//\t\tLorem ipsum pulvinar purus et euismod.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//\t\tSOME HEADER| *\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//\t\tvestibulum tincidunt augue eget tempus.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// * - drop position\n\t\t\t\t\t\t// | - expected cursor position\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// In such situation elementFromPoint returns proper element. Using getClientRect\n\t\t\t\t\t\t// it is possible to check if the cursor should be at the beginning or at the end\n\t\t\t\t\t\t// of paragraph.\n\t\t\t\t\t\tvar $element = editor.document.$.elementFromPoint( x, y ),\n\t\t\t\t\t\t\telement = new CKEDITOR.dom.element( $element ),\n\t\t\t\t\t\t\trect;\n\n\t\t\t\t\t\tif ( !element.equals( editor.editable() ) && element.getName() != 'html' ) {\n\t\t\t\t\t\t\trect = element.getClientRect();\n\n\t\t\t\t\t\t\tif ( x < rect.left ) {\n\t\t\t\t\t\t\t\trange.setStartAt( element, CKEDITOR.POSITION_AFTER_START );\n\t\t\t\t\t\t\t\trange.collapse( true );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\trange.setStartAt( element, CKEDITOR.POSITION_BEFORE_END );\n\t\t\t\t\t\t\t\trange.collapse( true );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// If drop happens on no element elementFromPoint returns html or body.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//\t\t* |Lorem ipsum pulvinar purus et euismod.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//\t\t vestibulum tincidunt augue eget tempus.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// * - drop position\n\t\t\t\t\t\t// | - expected cursor position\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// In such case we can try to use default selection. If startContainer is not\n\t\t\t\t\t\t// 'editable' element it is probably proper selection.\n\t\t\t\t\t\telse if ( defaultRange && defaultRange.startContainer &&\n\t\t\t\t\t\t\t!defaultRange.startContainer.equals( editor.editable() ) ) {\n\t\t\t\t\t\t\treturn defaultRange;\n\n\t\t\t\t\t\t// Otherwise we can not find any drop position and we have to return null\n\t\t\t\t\t\t// and cancel drop event.\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\t\t\t\t} catch ( err ) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn range;\n\t\t},\n\n\t\t/**\n\t\t * This function tries to link the `evt.data.dataTransfer` property of the {@link CKEDITOR.editor#dragstart},\n\t\t * {@link CKEDITOR.editor#dragend} and {@link CKEDITOR.editor#drop} events to a single\n\t\t * {@link CKEDITOR.plugins.clipboard.dataTransfer} object.\n\t\t *\n\t\t * This method is automatically used by the core of the drag and drop functionality and\n\t\t * usually does not have to be called manually when using the drag and drop events.\n\t\t *\n\t\t * This method behaves differently depending on whether the drag and drop events were fired\n\t\t * artificially (to represent a non-native drag and drop) or whether they were caused by the native drag and drop.\n\t\t *\n\t\t * If the native event is not available, then it will create a new {@link CKEDITOR.plugins.clipboard.dataTransfer}\n\t\t * instance (if it does not exist already) and will link it to this and all following event objects until\n\t\t * the {@link #resetDragDataTransfer} method is called. It means that all three drag and drop events must be fired\n\t\t * in order to ensure that the data transfer is bound correctly.\n\t\t *\n\t\t * If the native event is available, then the {@link CKEDITOR.plugins.clipboard.dataTransfer} is identified\n\t\t * by its ID and a new instance is assigned to the `evt.data.dataTransfer` only if the ID changed or\n\t\t * the {@link #resetDragDataTransfer} method was called.\n\t\t *\n\t\t * @since 4.5\n\t\t * @param {CKEDITOR.dom.event} [evt] A drop event object.\n\t\t * @param {CKEDITOR.editor} [sourceEditor] The source editor instance.\n\t\t */\n\t\tinitDragDataTransfer: function( evt, sourceEditor ) {\n\t\t\t// Create a new dataTransfer object based on the drop event.\n\t\t\t// If this event was used on dragstart to create dataTransfer\n\t\t\t// both dataTransfer objects will have the same id.\n\t\t\tvar nativeDataTransfer = evt.data.$ ? evt.data.$.dataTransfer : null,\n\t\t\t\tdataTransfer = new this.dataTransfer( nativeDataTransfer, sourceEditor );\n\n\t\t\tif ( !nativeDataTransfer ) {\n\t\t\t\t// No native event.\n\t\t\t\tif ( this.dragData ) {\n\t\t\t\t\tdataTransfer = this.dragData;\n\t\t\t\t} else {\n\t\t\t\t\tthis.dragData = dataTransfer;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Native event. If there is the same id we will replace dataTransfer with the one\n\t\t\t\t// created on drag, because it contains drag editor, drag content and so on.\n\t\t\t\t// Otherwise (in case of drag from external source) we save new object to\n\t\t\t\t// the global clipboard.dragData.\n\t\t\t\tif ( this.dragData && dataTransfer.id == this.dragData.id ) {\n\t\t\t\t\tdataTransfer = this.dragData;\n\t\t\t\t} else {\n\t\t\t\t\tthis.dragData = dataTransfer;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tevt.data.dataTransfer = dataTransfer;\n\t\t},\n\n\t\t/**\n\t\t * Removes the global {@link #dragData} so the next call to {@link #initDragDataTransfer}\n\t\t * always creates a new instance of {@link CKEDITOR.plugins.clipboard.dataTransfer}.\n\t\t *\n\t\t * @since 4.5\n\t\t */\n\t\tresetDragDataTransfer: function() {\n\t\t\tthis.dragData = null;\n\t\t},\n\n\t\t/**\n\t\t * Global object storing the data transfer of the current drag and drop operation.\n\t\t * Do not use it directly, use {@link #initDragDataTransfer} and {@link #resetDragDataTransfer}.\n\t\t *\n\t\t * Note: This object is global (meaning that it is not related to a single editor instance)\n\t\t * in order to handle drag and drop from one editor into another.\n\t\t *\n\t\t * @since 4.5\n\t\t * @private\n\t\t * @property {CKEDITOR.plugins.clipboard.dataTransfer} dragData\n\t\t */\n\n\t\t/**\n\t\t * Range object to save the drag range and remove its content after the drop.\n\t\t *\n\t\t * @since 4.5\n\t\t * @private\n\t\t * @property {CKEDITOR.dom.range} dragRange\n\t\t */\n\n\t\t/**\n\t\t * Initializes and links data transfer objects based on the paste event. If the data\n\t\t * transfer object was already initialized on this event, the function will\n\t\t * return that object. In IE it is not possible to link copy/cut and paste events\n\t\t * so the method always returns a new object. The same happens if there is no paste event\n\t\t * passed to the method.\n\t\t *\n\t\t * @since 4.5\n\t\t * @param {CKEDITOR.dom.event} [evt] A paste event object.\n\t\t * @param {CKEDITOR.editor} [sourceEditor] The source editor instance.\n\t\t * @returns {CKEDITOR.plugins.clipboard.dataTransfer} The data transfer object.\n\t\t */\n\t\tinitPasteDataTransfer: function( evt, sourceEditor ) {\n\t\t\tif ( !this.isCustomCopyCutSupported ) {\n\t\t\t\t// Edge does not support custom copy/cut, but it have some useful data in the clipboardData (http://dev.ckeditor.com/ticket/13755).\n\t\t\t\treturn new this.dataTransfer( ( CKEDITOR.env.edge && evt && evt.data.$ && evt.data.$.clipboardData ) || null, sourceEditor );\n\t\t\t} else if ( evt && evt.data && evt.data.$ ) {\n\t\t\t\tvar dataTransfer = new this.dataTransfer( evt.data.$.clipboardData, sourceEditor );\n\n\t\t\t\tif ( this.copyCutData && dataTransfer.id == this.copyCutData.id ) {\n\t\t\t\t\tdataTransfer = this.copyCutData;\n\t\t\t\t\tdataTransfer.$ = evt.data.$.clipboardData;\n\t\t\t\t} else {\n\t\t\t\t\tthis.copyCutData = dataTransfer;\n\t\t\t\t}\n\n\t\t\t\treturn dataTransfer;\n\t\t\t} else {\n\t\t\t\treturn new this.dataTransfer( null, sourceEditor );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Prevents dropping on the specified element.\n\t\t *\n\t\t * @since 4.5\n\t\t * @param {CKEDITOR.dom.element} element The element on which dropping should be disabled.\n\t\t */\n\t\tpreventDefaultDropOnElement: function( element ) {\n\t\t\telement && element.on( 'dragover', preventDefaultSetDropEffectToNone );\n\t\t}\n\t};\n\n\t// Data type used to link drag and drop events.\n\t//\n\t// In IE URL data type is buggie and there is no way to mark drag & drop without\n\t// modifying text data (which would be displayed if user drop content to the textarea)\n\t// so we just read dragged text.\n\t//\n\t// In Chrome and Firefox we can use custom data types.\n\tvar clipboardIdDataType = CKEDITOR.plugins.clipboard.isCustomDataTypesSupported ? 'cke/id' : 'Text';\n\t/**\n\t * Facade for the native `dataTransfer`/`clipboadData` object to hide all differences\n\t * between browsers.\n\t *\n\t * @since 4.5\n\t * @class CKEDITOR.plugins.clipboard.dataTransfer\n\t * @constructor Creates a class instance.\n\t * @param {Object} [nativeDataTransfer] A native data transfer object.\n\t * @param {CKEDITOR.editor} [editor] The source editor instance. If the editor is defined, dataValue will\n\t * be created based on the editor content and the type will be 'html'.\n\t */\n\tCKEDITOR.plugins.clipboard.dataTransfer = function( nativeDataTransfer, editor ) {\n\t\tif ( nativeDataTransfer ) {\n\t\t\tthis.$ = nativeDataTransfer;\n\t\t}\n\n\t\tthis._ = {\n\t\t\tmetaRegExp: /^/i,\n\t\t\tbodyRegExp: /([\\s\\S]*)<\\/body>/i,\n\t\t\tfragmentRegExp: //g,\n\n\t\t\tdata: {},\n\t\t\tfiles: [],\n\n\t\t\tnormalizeType: function( type ) {\n\t\t\t\ttype = type.toLowerCase();\n\n\t\t\t\tif ( type == 'text' || type == 'text/plain' ) {\n\t\t\t\t\treturn 'Text'; // IE support only Text and URL;\n\t\t\t\t} else if ( type == 'url' ) {\n\t\t\t\t\treturn 'URL'; // IE support only Text and URL;\n\t\t\t\t} else {\n\t\t\t\t\treturn type;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Check if ID is already created.\n\t\tthis.id = this.getData( clipboardIdDataType );\n\n\t\t// If there is no ID we need to create it. Different browsers needs different ID.\n\t\tif ( !this.id ) {\n\t\t\tif ( clipboardIdDataType == 'Text' ) {\n\t\t\t\t// For IE10+ only Text data type is supported and we have to compare dragged\n\t\t\t\t// and dropped text. If the ID is not set it means that empty string was dragged\n\t\t\t\t// (ex. image with no alt). We change null to empty string.\n\t\t\t\tthis.id = '';\n\t\t\t} else {\n\t\t\t\t// String for custom data type.\n\t\t\t\tthis.id = 'cke-' + CKEDITOR.tools.getUniqueId();\n\t\t\t}\n\t\t}\n\n\t\t// In IE10+ we can not use any data type besides text, so we do not call setData.\n\t\tif ( clipboardIdDataType != 'Text' ) {\n\t\t\t// Try to set ID so it will be passed from the drag to the drop event.\n\t\t\t// On some browsers with some event it is not possible to setData so we\n\t\t\t// need to catch exceptions.\n\t\t\ttry {\n\t\t\t\tthis.$.setData( clipboardIdDataType, this.id );\n\t\t\t} catch ( err ) {}\n\t\t}\n\n\t\tif ( editor ) {\n\t\t\tthis.sourceEditor = editor;\n\n\t\t\tthis.setData( 'text/html', editor.getSelectedHtml( 1 ) );\n\n\t\t\t// Without setData( 'text', ... ) on dragstart there is no drop event in Safari.\n\t\t\t// Also 'text' data is empty as drop to the textarea does not work if we do not put there text.\n\t\t\tif ( clipboardIdDataType != 'Text' && !this.getData( 'text/plain' ) ) {\n\t\t\t\tthis.setData( 'text/plain', editor.getSelection().getSelectedText() );\n\t\t\t}\n\t\t}\n\n\t\t/**\n\t\t * Data transfer ID used to bind all dataTransfer\n\t\t * objects based on the same event (e.g. in drag and drop events).\n\t\t *\n\t\t * @readonly\n\t\t * @property {String} id\n\t\t */\n\n\t\t/**\n\t\t * A native DOM event object.\n\t\t *\n\t\t * @readonly\n\t\t * @property {Object} $\n\t\t */\n\n\t\t/**\n\t\t * Source editor — the editor where the drag starts.\n\t\t * Might be undefined if the drag starts outside the editor (e.g. when dropping files to the editor).\n\t\t *\n\t\t * @readonly\n\t\t * @property {CKEDITOR.editor} sourceEditor\n\t\t */\n\n\t\t/**\n\t\t * Private properties and methods.\n\t\t *\n\t\t * @private\n\t\t * @property {Object} _\n\t\t */\n\t};\n\n\t/**\n\t * Data transfer operation (drag and drop or copy and paste) started and ended in the same\n\t * editor instance.\n\t *\n\t * @since 4.5\n\t * @readonly\n\t * @property {Number} [=1]\n\t * @member CKEDITOR\n\t */\n\tCKEDITOR.DATA_TRANSFER_INTERNAL = 1;\n\n\t/**\n\t * Data transfer operation (drag and drop or copy and paste) started in one editor\n\t * instance and ended in another.\n\t *\n\t * @since 4.5\n\t * @readonly\n\t * @property {Number} [=2]\n\t * @member CKEDITOR\n\t */\n\tCKEDITOR.DATA_TRANSFER_CROSS_EDITORS = 2;\n\n\t/**\n\t * Data transfer operation (drag and drop or copy and paste) started outside of the editor.\n\t * The source of the data may be a textarea, HTML, another application, etc.\n\t *\n\t * @since 4.5\n\t * @readonly\n\t * @property {Number} [=3]\n\t * @member CKEDITOR\n\t */\n\tCKEDITOR.DATA_TRANSFER_EXTERNAL = 3;\n\n\tCKEDITOR.plugins.clipboard.dataTransfer.prototype = {\n\t\t/**\n\t\t * Facade for the native `getData` method.\n\t\t *\n\t\t * @param {String} type The type of data to retrieve.\n\t\t * @param {Boolean} [getNative=false] Indicates if the whole, original content of the dataTransfer should be returned.\n\t\t * Introduced in CKEditor 4.7.0.\n\t\t * @returns {String} type Stored data for the given type or an empty string if the data for that type does not exist.\n\t\t */\n\t\tgetData: function( type, getNative ) {\n\t\t\tfunction isEmpty( data ) {\n\t\t\t\treturn data === undefined || data === null || data === '';\n\t\t\t}\n\n\t\t\tfunction filterUnwantedCharacters( data ) {\n\t\t\t\tif ( typeof data !== 'string' ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tvar htmlEnd = data.indexOf( '' );\n\n\t\t\t\tif ( htmlEnd !== -1 ) {\n\t\t\t\t\t// Just cut everything after ``, so everything after htmlEnd index + length of ``.\n\t\t\t\t\t// Required to workaround bug: https://bugs.chromium.org/p/chromium/issues/detail?id=696978\n\t\t\t\t\treturn data.substring( 0, htmlEnd + 7 );\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t}\n\n\t\t\ttype = this._.normalizeType( type );\n\n\t\t\tvar data = this._.data[ type ],\n\t\t\t\tresult;\n\n\t\t\tif ( isEmpty( data ) ) {\n\t\t\t\ttry {\n\t\t\t\t\tdata = this.$.getData( type );\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( isEmpty( data ) ) {\n\t\t\t\tdata = '';\n\t\t\t}\n\n\t\t\t// Some browsers add at the begging of the HTML data\n\t\t\t// or surround it with ...(some content) and (some content)\n\t\t\t// This code removes meta tags and returns only the contents of the element if found. Note that\n\t\t\t// some significant content may be placed outside Start/EndFragment comments so it's kept.\n\t\t\t//\n\t\t\t// See http://dev.ckeditor.com/ticket/13583 for more details.\n\t\t\t// Additionally http://dev.ckeditor.com/ticket/16847 adds a flag allowing to get the whole, original content.\n\t\t\tif ( type == 'text/html' && !getNative ) {\n\t\t\t\tdata = data.replace( this._.metaRegExp, '' );\n\n\t\t\t\t// Keep only contents of the element\n\t\t\t\tresult = this._.bodyRegExp.exec( data );\n\t\t\t\tif ( result && result.length ) {\n\t\t\t\t\tdata = result[ 1 ];\n\n\t\t\t\t\t// Remove also comments.\n\t\t\t\t\tdata = data.replace( this._.fragmentRegExp, '' );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Firefox on Linux put files paths as a text/plain data if there are files\n\t\t\t// in the dataTransfer object. We need to hide it, because files should be\n\t\t\t// handled on paste only if dataValue is empty.\n\t\t\telse if ( type == 'Text' && CKEDITOR.env.gecko && this.getFilesCount() &&\n\t\t\t\tdata.substring( 0, 7 ) == 'file://' ) {\n\t\t\t\tdata = '';\n\t\t\t}\n\n\t\t\treturn filterUnwantedCharacters( data );\n\t\t},\n\n\t\t/**\n\t\t * Facade for the native `setData` method.\n\t\t *\n\t\t * @param {String} type The type of data to retrieve.\n\t\t * @param {String} value The data to add.\n\t\t */\n\t\tsetData: function( type, value ) {\n\t\t\ttype = this._.normalizeType( type );\n\n\t\t\tthis._.data[ type ] = value;\n\n\t\t\t// There is \"Unexpected call to method or property access.\" error if you try\n\t\t\t// to set data of unsupported type on IE.\n\t\t\tif ( !CKEDITOR.plugins.clipboard.isCustomDataTypesSupported && type != 'URL' && type != 'Text' ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If we use the text type to bind the ID, then if someone tries to set the text, we must also\n\t\t\t// update ID accordingly. http://dev.ckeditor.com/ticket/13468.\n\t\t\tif ( clipboardIdDataType == 'Text' && type == 'Text' ) {\n\t\t\t\tthis.id = value;\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tthis.$.setData( type, value );\n\t\t\t} catch ( e ) {}\n\t\t},\n\n\t\t/**\n\t\t * Gets the data transfer type.\n\t\t *\n\t\t * @param {CKEDITOR.editor} targetEditor The drop/paste target editor instance.\n\t\t * @returns {Number} Possible values: {@link CKEDITOR#DATA_TRANSFER_INTERNAL},\n\t\t * {@link CKEDITOR#DATA_TRANSFER_CROSS_EDITORS}, {@link CKEDITOR#DATA_TRANSFER_EXTERNAL}.\n\t\t */\n\t\tgetTransferType: function( targetEditor ) {\n\t\t\tif ( !this.sourceEditor ) {\n\t\t\t\treturn CKEDITOR.DATA_TRANSFER_EXTERNAL;\n\t\t\t} else if ( this.sourceEditor == targetEditor ) {\n\t\t\t\treturn CKEDITOR.DATA_TRANSFER_INTERNAL;\n\t\t\t} else {\n\t\t\t\treturn CKEDITOR.DATA_TRANSFER_CROSS_EDITORS;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Copies the data from the native data transfer to a private cache.\n\t\t * This function is needed because the data from the native data transfer\n\t\t * is available only synchronously to the event listener. It is not possible\n\t\t * to get the data asynchronously, after a timeout, and the {@link CKEDITOR.editor#paste}\n\t\t * event is fired asynchronously — hence the need for caching the data.\n\t\t */\n\t\tcacheData: function() {\n\t\t\tif ( !this.$ ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar that = this,\n\t\t\t\ti, file;\n\n\t\t\tfunction getAndSetData( type ) {\n\t\t\t\ttype = that._.normalizeType( type );\n\n\t\t\t\tvar data = that.getData( type, true );\n\t\t\t\tif ( data ) {\n\t\t\t\t\tthat._.data[ type ] = data;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Copy data.\n\t\t\tif ( CKEDITOR.plugins.clipboard.isCustomDataTypesSupported ) {\n\t\t\t\tif ( this.$.types ) {\n\t\t\t\t\tfor ( i = 0; i < this.$.types.length; i++ ) {\n\t\t\t\t\t\tgetAndSetData( this.$.types[ i ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tgetAndSetData( 'Text' );\n\t\t\t\tgetAndSetData( 'URL' );\n\t\t\t}\n\n\t\t\t// Copy files references.\n\t\t\tfile = this._getImageFromClipboard();\n\t\t\tif ( ( this.$ && this.$.files ) || file ) {\n\t\t\t\tthis._.files = [];\n\n\t\t\t\t// Edge have empty files property with no length (http://dev.ckeditor.com/ticket/13755).\n\t\t\t\tif ( this.$.files && this.$.files.length ) {\n\t\t\t\t\tfor ( i = 0; i < this.$.files.length; i++ ) {\n\t\t\t\t\t\tthis._.files.push( this.$.files[ i ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Don't include $.items if both $.files and $.items contains files, because,\n\t\t\t\t// according to spec and browsers behavior, they contain the same files.\n\t\t\t\tif ( this._.files.length === 0 && file ) {\n\t\t\t\t\tthis._.files.push( file );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Gets the number of files in the dataTransfer object.\n\t\t *\n\t\t * @returns {Number} The number of files.\n\t\t */\n\t\tgetFilesCount: function() {\n\t\t\tif ( this._.files.length ) {\n\t\t\t\treturn this._.files.length;\n\t\t\t}\n\n\t\t\tif ( this.$ && this.$.files && this.$.files.length ) {\n\t\t\t\treturn this.$.files.length;\n\t\t\t}\n\n\t\t\treturn this._getImageFromClipboard() ? 1 : 0;\n\t\t},\n\n\t\t/**\n\t\t * Gets the file at the index given.\n\t\t *\n\t\t * @param {Number} i Index.\n\t\t * @returns {File} File instance.\n\t\t */\n\t\tgetFile: function( i ) {\n\t\t\tif ( this._.files.length ) {\n\t\t\t\treturn this._.files[ i ];\n\t\t\t}\n\n\t\t\tif ( this.$ && this.$.files && this.$.files.length ) {\n\t\t\t\treturn this.$.files[ i ];\n\t\t\t}\n\n\t\t\t// File or null if the file was not found.\n\t\t\treturn i === 0 ? this._getImageFromClipboard() : undefined;\n\t\t},\n\n\t\t/**\n\t\t * Checks if the data transfer contains any data.\n\t\t *\n\t\t * @returns {Boolean} `true` if the object contains no data.\n\t\t */\n\t\tisEmpty: function() {\n\t\t\tvar typesToCheck = {},\n\t\t\t\ttype;\n\n\t\t\t// If dataTransfer contains files it is not empty.\n\t\t\tif ( this.getFilesCount() ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Add custom types.\n\t\t\tfor ( type in this._.data ) {\n\t\t\t\ttypesToCheck[ type ] = 1;\n\t\t\t}\n\n\t\t\t// Add native types.\n\t\t\tif ( this.$ ) {\n\t\t\t\tif ( CKEDITOR.plugins.clipboard.isCustomDataTypesSupported ) {\n\t\t\t\t\tif ( this.$.types ) {\n\t\t\t\t\t\tfor ( var i = 0; i < this.$.types.length; i++ ) {\n\t\t\t\t\t\t\ttypesToCheck[ this.$.types[ i ] ] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\ttypesToCheck.Text = 1;\n\t\t\t\t\ttypesToCheck.URL = 1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove ID.\n\t\t\tif ( clipboardIdDataType != 'Text' ) {\n\t\t\t\ttypesToCheck[ clipboardIdDataType ] = 0;\n\t\t\t}\n\n\t\t\tfor ( type in typesToCheck ) {\n\t\t\t\tif ( typesToCheck[ type ] && this.getData( type ) !== '' ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn true;\n\t\t},\n\n\t\t/**\n\t\t * When the content of the clipboard is pasted in Chrome, the clipboard data object has an empty `files` property,\n\t\t * but it is possible to get the file as `items[0].getAsFile();` (http://dev.ckeditor.com/ticket/12961).\n\t\t *\n\t\t * @private\n\t\t * @returns {File} File instance or `null` if not found.\n\t\t */\n\t\t_getImageFromClipboard: function() {\n\t\t\tvar file;\n\n\t\t\tif ( this.$ && this.$.items && this.$.items[ 0 ] ) {\n\t\t\t\ttry {\n\t\t\t\t\tfile = this.$.items[ 0 ].getAsFile();\n\t\t\t\t\t// Duck typing\n\t\t\t\t\tif ( file && file.type ) {\n\t\t\t\t\t\treturn file;\n\t\t\t\t\t}\n\t\t\t\t} catch ( err ) {\n\t\t\t\t\t// noop\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn undefined;\n\t\t}\n\t};\n} )();\n\n/**\n * The default content type that is used when pasted data cannot be clearly recognized as HTML or text.\n *\n * For example: `'foo'` may come from a plain text editor or a website. It is not possible to recognize the content\n * type in this case, so the default type will be used. At the same time it is clear that `'example text'` is\n * HTML and its origin is a web page, email or another rich text editor.\n *\n * **Note:** If content type is text, then styles of the paste context are preserved.\n *\n *\t\tCKEDITOR.config.clipboard_defaultContentType = 'text';\n *\n * See also the {@link CKEDITOR.editor#paste} event and read more about the integration with clipboard\n * in the [Clipboard Deep Dive guide](#!/guide/dev_clipboard).\n *\n * @since 4.0\n * @cfg {'html'/'text'} [clipboard_defaultContentType='html']\n * @member CKEDITOR.config\n */\n\n/**\n * Fired after the user initiated a paste action, but before the data is inserted into the editor.\n * The listeners to this event are able to process the content before its insertion into the document.\n *\n * Read more about the integration with clipboard in the [Clipboard Deep Dive guide](#!/guide/dev_clipboard).\n *\n * See also:\n *\n * * the {@link CKEDITOR.config#pasteFilter} option,\n * * the {@link CKEDITOR.editor#drop} event,\n * * the {@link CKEDITOR.plugins.clipboard.dataTransfer} class.\n *\n * @since 3.1\n * @event paste\n * @member CKEDITOR.editor\n * @param {CKEDITOR.editor} editor This editor instance.\n * @param data\n * @param {String} data.type The type of data in `data.dataValue`. Usually `'html'` or `'text'`, but for listeners\n * with a priority smaller than `6` it may also be `'auto'` which means that the content type has not been recognised yet\n * (this will be done by the content type sniffer that listens with priority `6`).\n * @param {String} data.dataValue HTML to be pasted.\n * @param {String} data.method Indicates the data transfer method. It could be drag and drop or copy and paste.\n * Possible values: `'drop'`, `'paste'`. Introduced in CKEditor 4.5.\n * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer Facade for the native dataTransfer object\n * which provides access to various data types and files, and passes some data between linked events\n * (like drag and drop). Introduced in CKEditor 4.5.\n * @param {Boolean} [data.dontFilter=false] Whether the {@link CKEDITOR.editor#pasteFilter paste filter} should not\n * be applied to data. This option has no effect when `data.type` equals `'text'` which means that for instance\n * {@link CKEDITOR.config#forcePasteAsPlainText} has a higher priority. Introduced in CKEditor 4.5.\n */\n\n/**\n * Fired before the {@link #paste} event. Allows to preset data type.\n *\n * **Note:** This event is deprecated. Add a `0` priority listener for the\n * {@link #paste} event instead.\n *\n * @deprecated\n * @event beforePaste\n * @member CKEDITOR.editor\n */\n\n/**\n * Fired after the {@link #paste} event if content was modified. Note that if the paste\n * event does not insert any data, the `afterPaste` event will not be fired.\n *\n * @event afterPaste\n * @member CKEDITOR.editor\n */\n\n/**\n * Facade for the native `drop` event. Fired when the native `drop` event occurs.\n *\n * **Note:** To manipulate dropped data, use the {@link CKEDITOR.editor#paste} event.\n * Use the `drop` event only to control drag and drop operations (e.g. to prevent the ability to drop some content).\n *\n * Read more about integration with drag and drop in the [Clipboard Deep Dive guide](#!/guide/dev_clipboard).\n *\n * See also:\n *\n * * The {@link CKEDITOR.editor#paste} event,\n * * The {@link CKEDITOR.editor#dragstart} and {@link CKEDITOR.editor#dragend} events,\n * * The {@link CKEDITOR.plugins.clipboard.dataTransfer} class.\n *\n * @since 4.5\n * @event drop\n * @member CKEDITOR.editor\n * @param {CKEDITOR.editor} editor This editor instance.\n * @param data\n * @param {Object} data.$ Native drop event.\n * @param {CKEDITOR.dom.node} data.target Drop target.\n * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer DataTransfer facade.\n * @param {CKEDITOR.dom.range} data.dragRange Drag range, lets you manipulate the drag range.\n * Note that dragged HTML is saved as `text/html` data on `dragstart` so if you change the drag range\n * on drop, dropped HTML will not change. You need to change it manually using\n * {@link CKEDITOR.plugins.clipboard.dataTransfer#setData dataTransfer.setData}.\n * @param {CKEDITOR.dom.range} data.dropRange Drop range, lets you manipulate the drop range.\n */\n\n/**\n * Facade for the native `dragstart` event. Fired when the native `dragstart` event occurs.\n *\n * This event can be canceled in order to block the drag start operation. It can also be fired to mimic the start of the drag and drop\n * operation. For instance, the `widget` plugin uses this option to integrate its custom block widget drag and drop with\n * the entire system.\n *\n * Read more about integration with drag and drop in the [Clipboard Deep Dive guide](#!/guide/dev_clipboard).\n *\n * See also:\n *\n * * The {@link CKEDITOR.editor#paste} event,\n * * The {@link CKEDITOR.editor#drop} and {@link CKEDITOR.editor#dragend} events,\n * * The {@link CKEDITOR.plugins.clipboard.dataTransfer} class.\n *\n * @since 4.5\n * @event dragstart\n * @member CKEDITOR.editor\n * @param {CKEDITOR.editor} editor This editor instance.\n * @param data\n * @param {Object} data.$ Native dragstart event.\n * @param {CKEDITOR.dom.node} data.target Drag target.\n * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer DataTransfer facade.\n */\n\n/**\n * Facade for the native `dragend` event. Fired when the native `dragend` event occurs.\n *\n * Read more about integration with drag and drop in the [Clipboard Deep Dive guide](#!/guide/dev_clipboard).\n *\n * See also:\n *\n * * The {@link CKEDITOR.editor#paste} event,\n * * The {@link CKEDITOR.editor#drop} and {@link CKEDITOR.editor#dragend} events,\n * * The {@link CKEDITOR.plugins.clipboard.dataTransfer} class.\n *\n * @since 4.5\n * @event dragend\n * @member CKEDITOR.editor\n * @param {CKEDITOR.editor} editor This editor instance.\n * @param data\n * @param {Object} data.$ Native dragend event.\n * @param {CKEDITOR.dom.node} data.target Drag target.\n * @param {CKEDITOR.plugins.clipboard.dataTransfer} data.dataTransfer DataTransfer facade.\n */\n\n/**\n * Defines a filter which is applied to external data pasted or dropped into the editor. Possible values are:\n *\n * * `'plain-text'` – Content will be pasted as a plain text.\n * * `'semantic-content'` – Known tags (except `div`, `span`) with all attributes (except\n * `style` and `class`) will be kept.\n * * `'h1 h2 p div'` – Custom rules compatible with {@link CKEDITOR.filter}.\n * * `null` – Content will not be filtered by the paste filter (but it still may be filtered\n * by [Advanced Content Filter](#!/guide/dev_advanced_content_filter)). This value can be used to\n * disable the paste filter in Chrome and Safari, where this option defaults to `'semantic-content'`.\n *\n * Example:\n *\n *\t\tconfig.pasteFilter = 'plain-text';\n *\n * Custom setting:\n *\n *\t\tconfig.pasteFilter = 'h1 h2 p ul ol li; img[!src, alt]; a[!href]';\n *\n * Based on this configuration option, a proper {@link CKEDITOR.filter} instance will be defined and assigned to the editor\n * as a {@link CKEDITOR.editor#pasteFilter}. You can tweak the paste filter settings on the fly on this object\n * as well as delete or replace it.\n *\n *\t\tvar editor = CKEDITOR.replace( 'editor', {\n *\t\t\tpasteFilter: 'semantic-content'\n *\t\t} );\n *\n *\t\teditor.on( 'instanceReady', function() {\n *\t\t\t// The result of this will be that all semantic content will be preserved\n *\t\t\t// except tables.\n *\t\t\teditor.pasteFilter.disallow( 'table' );\n *\t\t} );\n *\n * Note that the paste filter is applied only to **external** data. There are three data sources:\n *\n * * copied and pasted in the same editor (internal),\n * * copied from one editor and pasted into another (cross-editor),\n * * coming from all other sources like websites, MS Word, etc. (external).\n *\n * If {@link CKEDITOR.config#allowedContent Advanced Content Filter} is not disabled, then\n * it will also be applied to pasted and dropped data. The paste filter job is to \"normalize\"\n * external data which often needs to be handled differently than content produced by the editor.\n *\n * This setting defaults to `'semantic-content'` in Chrome, Opera and Safari (all Blink and Webkit based browsers)\n * due to messy HTML which these browsers keep in the clipboard. In other browsers it defaults to `null`.\n *\n * @since 4.5\n * @cfg {String} [pasteFilter='semantic-content' in Chrome and Safari and `null` in other browsers]\n * @member CKEDITOR.config\n */\n\n/**\n * {@link CKEDITOR.filter Content filter} which is used when external data is pasted or dropped into the editor\n * or a forced paste as plain text occurs.\n *\n * This object might be used on the fly to define rules for pasted external content.\n * This object is available and used if the {@link CKEDITOR.plugins.clipboard clipboard} plugin is enabled and\n * {@link CKEDITOR.config#pasteFilter} or {@link CKEDITOR.config#forcePasteAsPlainText} was defined.\n *\n * To enable the filter:\n *\n *\t\tvar editor = CKEDITOR.replace( 'editor', {\n *\t\t\tpasteFilter: 'plain-text'\n *\t\t} );\n *\n * You can also modify the filter on the fly later on:\n *\n *\t\teditor.pasteFilter = new CKEDITOR.filter( 'p h1 h2; a[!href]' );\n *\n * Note that the paste filter is only applied to **external** data. There are three data sources:\n *\n * * copied and pasted in the same editor (internal),\n * * copied from one editor and pasted into another (cross-editor),\n * * coming from all other sources like websites, MS Word, etc. (external).\n *\n * If {@link CKEDITOR.config#allowedContent Advanced Content Filter} is not disabled, then\n * it will also be applied to pasted and dropped data. The paste filter job is to \"normalize\"\n * external data which often needs to be handled differently than content produced by the editor.\n *\n * @since 4.5\n * @readonly\n * @property {CKEDITOR.filter} [pasteFilter]\n * @member CKEDITOR.editor\n */\n\n/**\n * Duration of the notification displayed after pasting was blocked by the browser.\n *\n * @since 4.7.0\n * @cfg {Number} [clipboard_notificationDuration=10000]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.clipboard_notificationDuration = 10000;\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.plugins.add( 'panelbutton', {\n\trequires: 'button',\n\tonLoad: function() {\n\t\tfunction clickFn( editor ) {\n\t\t\tvar _ = this._;\n\n\t\t\tif ( _.state == CKEDITOR.TRISTATE_DISABLED )\n\t\t\t\treturn;\n\n\t\t\tthis.createPanel( editor );\n\n\t\t\tif ( _.on ) {\n\t\t\t\t_.panel.hide();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_.panel.showBlock( this._.id, this.document.getById( this._.id ), 4 );\n\t\t}\n\n\t\t/**\n\t\t * @class\n\t\t * @extends CKEDITOR.ui.button\n\t\t * @todo class and methods\n\t\t */\n\t\tCKEDITOR.ui.panelButton = CKEDITOR.tools.createClass( {\n\t\t\tbase: CKEDITOR.ui.button,\n\n\t\t\t/**\n\t\t\t * Creates a panelButton class instance.\n\t\t\t *\n\t\t\t * @constructor\n\t\t\t */\n\t\t\t$: function( definition ) {\n\t\t\t\t// We don't want the panel definition in this object.\n\t\t\t\tvar panelDefinition = definition.panel || {};\n\t\t\t\tdelete definition.panel;\n\n\t\t\t\tthis.base( definition );\n\n\t\t\t\tthis.document = ( panelDefinition.parent && panelDefinition.parent.getDocument() ) || CKEDITOR.document;\n\n\t\t\t\tpanelDefinition.block = {\n\t\t\t\t\tattributes: panelDefinition.attributes\n\t\t\t\t};\n\t\t\t\tpanelDefinition.toolbarRelated = true;\n\n\t\t\t\tthis.hasArrow = true;\n\n\t\t\t\tthis.click = clickFn;\n\n\t\t\t\tthis._ = {\n\t\t\t\t\tpanelDefinition: panelDefinition\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tstatics: {\n\t\t\t\thandler: {\n\t\t\t\t\tcreate: function( definition ) {\n\t\t\t\t\t\treturn new CKEDITOR.ui.panelButton( definition );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tproto: {\n\t\t\t\tcreatePanel: function( editor ) {\n\t\t\t\t\tvar _ = this._;\n\n\t\t\t\t\tif ( _.panel )\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tvar panelDefinition = this._.panelDefinition,\n\t\t\t\t\t\tpanelBlockDefinition = this._.panelDefinition.block,\n\t\t\t\t\t\tpanelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(),\n\t\t\t\t\t\tpanel = this._.panel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ),\n\t\t\t\t\t\tblock = panel.addBlock( _.id, panelBlockDefinition ),\n\t\t\t\t\t\tme = this;\n\n\t\t\t\t\tpanel.onShow = function() {\n\t\t\t\t\t\tif ( me.className )\n\t\t\t\t\t\t\tthis.element.addClass( me.className + '_panel' );\n\n\t\t\t\t\t\tme.setState( CKEDITOR.TRISTATE_ON );\n\n\t\t\t\t\t\t_.on = 1;\n\n\t\t\t\t\t\tme.editorFocus && editor.focus();\n\n\t\t\t\t\t\tif ( me.onOpen )\n\t\t\t\t\t\t\tme.onOpen();\n\t\t\t\t\t};\n\n\t\t\t\t\tpanel.onHide = function( preventOnClose ) {\n\t\t\t\t\t\tif ( me.className )\n\t\t\t\t\t\t\tthis.element.getFirst().removeClass( me.className + '_panel' );\n\n\t\t\t\t\t\tme.setState( me.modes && me.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );\n\n\t\t\t\t\t\t_.on = 0;\n\n\t\t\t\t\t\tif ( !preventOnClose && me.onClose )\n\t\t\t\t\t\t\tme.onClose();\n\t\t\t\t\t};\n\n\t\t\t\t\tpanel.onEscape = function() {\n\t\t\t\t\t\tpanel.hide( 1 );\n\t\t\t\t\t\tme.document.getById( _.id ).focus();\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( this.onBlock )\n\t\t\t\t\t\tthis.onBlock( panel, block );\n\n\t\t\t\t\tblock.onHide = function() {\n\t\t\t\t\t\t_.on = 0;\n\t\t\t\t\t\tme.setState( CKEDITOR.TRISTATE_OFF );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t},\n\tbeforeInit: function( editor ) {\n\t\teditor.ui.addHandler( CKEDITOR.UI_PANELBUTTON, CKEDITOR.ui.panelButton.handler );\n\t}\n} );\n\n/**\n * Button UI element.\n *\n * @readonly\n * @property {String} [='panelbutton']\n * @member CKEDITOR\n */\nCKEDITOR.UI_PANELBUTTON = 'panelbutton';\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n( function() {\n\tCKEDITOR.plugins.add( 'panel', {\n\t\tbeforeInit: function( editor ) {\n\t\t\teditor.ui.addHandler( CKEDITOR.UI_PANEL, CKEDITOR.ui.panel.handler );\n\t\t}\n\t} );\n\n\t/**\n\t * Panel UI element.\n\t *\n\t * @readonly\n\t * @property {String} [='panel']\n\t * @member CKEDITOR\n\t */\n\tCKEDITOR.UI_PANEL = 'panel';\n\n\t/**\n\t * @class\n\t * @constructor Creates a panel class instance.\n\t * @param {CKEDITOR.dom.document} document\n\t * @param {Object} definition\n\t */\n\tCKEDITOR.ui.panel = function( document, definition ) {\n\t\t// Copy all definition properties to this object.\n\t\tif ( definition )\n\t\t\tCKEDITOR.tools.extend( this, definition );\n\n\t\t// Set defaults.\n\t\tCKEDITOR.tools.extend( this, {\n\t\t\tclassName: '',\n\t\t\tcss: []\n\t\t} );\n\n\t\tthis.id = CKEDITOR.tools.getNextId();\n\t\tthis.document = document;\n\t\tthis.isFramed = this.forceIFrame || this.css.length;\n\n\t\tthis._ = {\n\t\t\tblocks: {}\n\t\t};\n\t};\n\n\t/**\n\t * Represents panel handler object.\n\t *\n\t * @class\n\t * @singleton\n\t * @extends CKEDITOR.ui.handlerDefinition\n\t */\n\tCKEDITOR.ui.panel.handler = {\n\t\t/**\n\t\t * Transforms a panel definition in a {@link CKEDITOR.ui.panel} instance.\n\t\t *\n\t\t * @param {Object} definition\n\t\t * @returns {CKEDITOR.ui.panel}\n\t\t */\n\t\tcreate: function( definition ) {\n\t\t\treturn new CKEDITOR.ui.panel( definition );\n\t\t}\n\t};\n\n\tvar panelTpl = CKEDITOR.addTemplate( 'panel', '

' +\n\t\t'{frame}' +\n\t\t'
' );\n\n\tvar frameTpl = CKEDITOR.addTemplate( 'panel-frame', '' );\n\n\tvar frameDocTpl = CKEDITOR.addTemplate( 'panel-frame-inner', '' +\n\t\t'' +\n\t\t\t'{css}' +\n\t\t\t'' +\n\t\t'<\\/html>' );\n\n\t/** @class CKEDITOR.ui.panel */\n\tCKEDITOR.ui.panel.prototype = {\n\t\t/**\n\t\t * Renders the combo.\n\t\t *\n\t\t * @param {CKEDITOR.editor} editor The editor instance which this button is\n\t\t * to be used by.\n\t\t * @param {Array} [output] The output array to which append the HTML relative\n\t\t * to this button.\n\t\t */\n\t\trender: function( editor, output ) {\n\t\t\tthis.getHolderElement = function() {\n\t\t\t\tvar holder = this._.holder;\n\n\t\t\t\tif ( !holder ) {\n\t\t\t\t\tif ( this.isFramed ) {\n\t\t\t\t\t\tvar iframe = this.document.getById( this.id + '_frame' ),\n\t\t\t\t\t\t\tparentDiv = iframe.getParent(),\n\t\t\t\t\t\t\tdoc = iframe.getFrameDocument();\n\n\t\t\t\t\t\t// Make it scrollable on iOS. (http://dev.ckeditor.com/ticket/8308)\n\t\t\t\t\t\tCKEDITOR.env.iOS && parentDiv.setStyles( {\n\t\t\t\t\t\t\t'overflow': 'scroll',\n\t\t\t\t\t\t\t'-webkit-overflow-scrolling': 'touch'\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tvar onLoad = CKEDITOR.tools.addFunction( CKEDITOR.tools.bind( function() {\n\t\t\t\t\t\t\tthis.isLoaded = true;\n\t\t\t\t\t\t\tif ( this.onLoad )\n\t\t\t\t\t\t\t\tthis.onLoad();\n\t\t\t\t\t\t}, this ) );\n\n\t\t\t\t\t\tdoc.write( frameDocTpl.output( CKEDITOR.tools.extend( {\n\t\t\t\t\t\t\tcss: CKEDITOR.tools.buildStyleHtml( this.css ),\n\t\t\t\t\t\t\tonload: 'window.parent.CKEDITOR.tools.callFunction(' + onLoad + ');'\n\t\t\t\t\t\t}, data ) ) );\n\n\t\t\t\t\t\tvar win = doc.getWindow();\n\n\t\t\t\t\t\t// Register the CKEDITOR global.\n\t\t\t\t\t\twin.$.CKEDITOR = CKEDITOR;\n\n\t\t\t\t\t\t// Arrow keys for scrolling is only preventable with 'keypress' event in Opera (http://dev.ckeditor.com/ticket/4534).\n\t\t\t\t\t\tdoc.on( 'keydown', function( evt ) {\n\t\t\t\t\t\t\tvar keystroke = evt.data.getKeystroke(),\n\t\t\t\t\t\t\t\tdir = this.document.getById( this.id ).getAttribute( 'dir' );\n\n\t\t\t\t\t\t\t// Delegate key processing to block.\n\t\t\t\t\t\t\tif ( this._.onKeyDown && this._.onKeyDown( keystroke ) === false ) {\n\t\t\t\t\t\t\t\tevt.data.preventDefault();\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// ESC/ARROW-LEFT(ltr) OR ARROW-RIGHT(rtl)\n\t\t\t\t\t\t\tif ( keystroke == 27 || keystroke == ( dir == 'rtl' ? 39 : 37 ) ) {\n\t\t\t\t\t\t\t\tif ( this.onEscape && this.onEscape( keystroke ) === false )\n\t\t\t\t\t\t\t\t\tevt.data.preventDefault();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, this );\n\n\t\t\t\t\t\tholder = doc.getBody();\n\t\t\t\t\t\tholder.unselectable();\n\t\t\t\t\t\tCKEDITOR.env.air && CKEDITOR.tools.callFunction( onLoad );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tholder = this.document.getById( this.id );\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._.holder = holder;\n\t\t\t\t}\n\n\t\t\t\treturn holder;\n\t\t\t};\n\n\t\t\tvar data = {\n\t\t\t\teditorId: editor.id,\n\t\t\t\tid: this.id,\n\t\t\t\tlangCode: editor.langCode,\n\t\t\t\tdir: editor.lang.dir,\n\t\t\t\tcls: this.className,\n\t\t\t\tframe: '',\n\t\t\t\tenv: CKEDITOR.env.cssClass,\n\t\t\t\t'z-index': editor.config.baseFloatZIndex + 1\n\t\t\t};\n\n\t\t\tif ( this.isFramed ) {\n\t\t\t\t// With IE, the custom domain has to be taken care at first,\n\t\t\t\t// for other browers, the 'src' attribute should be left empty to\n\t\t\t\t// trigger iframe's 'load' event.\n\t\t\t\tvar src =\n\t\t\t\t\tCKEDITOR.env.air ? 'javascript:void(0)' : // jshint ignore:line\n\t\t\t\t\tCKEDITOR.env.ie ? 'javascript:void(function(){' + encodeURIComponent( // jshint ignore:line\n\t\t\t\t\t\t'document.open();' +\n\t\t\t\t\t\t// In IE, the document domain must be set any time we call document.open().\n\t\t\t\t\t\t'(' + CKEDITOR.tools.fixDomain + ')();' +\n\t\t\t\t\t\t'document.close();'\n\t\t\t\t\t) + '}())' :\n\t\t\t\t\t'';\n\n\t\t\t\tdata.frame = frameTpl.output( {\n\t\t\t\t\tid: this.id + '_frame',\n\t\t\t\t\tsrc: src\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tvar html = panelTpl.output( data );\n\n\t\t\tif ( output )\n\t\t\t\toutput.push( html );\n\n\t\t\treturn html;\n\t\t},\n\n\t\t/**\n\t\t * @todo\n\t\t */\n\t\taddBlock: function( name, block ) {\n\t\t\tblock = this._.blocks[ name ] = block instanceof CKEDITOR.ui.panel.block ? block : new CKEDITOR.ui.panel.block( this.getHolderElement(), block );\n\n\t\t\tif ( !this._.currentBlock )\n\t\t\t\tthis.showBlock( name );\n\n\t\t\treturn block;\n\t\t},\n\n\t\t/**\n\t\t * @todo\n\t\t */\n\t\tgetBlock: function( name ) {\n\t\t\treturn this._.blocks[ name ];\n\t\t},\n\n\t\t/**\n\t\t * @todo\n\t\t */\n\t\tshowBlock: function( name ) {\n\t\t\tvar blocks = this._.blocks,\n\t\t\t\tblock = blocks[ name ],\n\t\t\t\tcurrent = this._.currentBlock;\n\n\t\t\t// ARIA role works better in IE on the body element, while on the iframe\n\t\t\t// for FF. (http://dev.ckeditor.com/ticket/8864)\n\t\t\tvar holder = !this.forceIFrame || CKEDITOR.env.ie ? this._.holder : this.document.getById( this.id + '_frame' );\n\n\t\t\tif ( current )\n\t\t\t\tcurrent.hide();\n\n\t\t\tthis._.currentBlock = block;\n\n\t\t\tCKEDITOR.fire( 'ariaWidget', holder );\n\n\t\t\t// Reset the focus index, so it will always go into the first one.\n\t\t\tblock._.focusIndex = -1;\n\n\t\t\tthis._.onKeyDown = block.onKeyDown && CKEDITOR.tools.bind( block.onKeyDown, block );\n\n\t\t\tblock.show();\n\n\t\t\treturn block;\n\t\t},\n\n\t\t/**\n\t\t * @todo\n\t\t */\n\t\tdestroy: function() {\n\t\t\tthis.element && this.element.remove();\n\t\t}\n\t};\n\n\t/**\n\t * @class\n\t *\n\t * @todo class and all methods\n\t */\n\tCKEDITOR.ui.panel.block = CKEDITOR.tools.createClass( {\n\t\t/**\n\t\t * Creates a block class instances.\n\t\t *\n\t\t * @constructor\n\t\t * @todo\n\t\t */\n\t\t$: function( blockHolder, blockDefinition ) {\n\t\t\tthis.element = blockHolder.append( blockHolder.getDocument().createElement( 'div', {\n\t\t\t\tattributes: {\n\t\t\t\t\t'tabindex': -1,\n\t\t\t\t\t'class': 'cke_panel_block'\n\t\t\t\t},\n\t\t\t\tstyles: {\n\t\t\t\t\tdisplay: 'none'\n\t\t\t\t}\n\t\t\t} ) );\n\n\t\t\t// Copy all definition properties to this object.\n\t\t\tif ( blockDefinition )\n\t\t\t\tCKEDITOR.tools.extend( this, blockDefinition );\n\n\t\t\t// Set the a11y attributes of this element ...\n\t\t\tthis.element.setAttributes( {\n\t\t\t\t'role': this.attributes.role || 'presentation',\n\t\t\t\t'aria-label': this.attributes[ 'aria-label' ],\n\t\t\t\t'title': this.attributes.title || this.attributes[ 'aria-label' ]\n\t\t\t} );\n\n\t\t\tthis.keys = {};\n\n\t\t\tthis._.focusIndex = -1;\n\n\t\t\t// Disable context menu for panels.\n\t\t\tthis.element.disableContextMenu();\n\t\t},\n\n\t\t_: {\n\n\t\t\t/**\n\t\t\t * Mark the item specified by the index as current activated.\n\t\t\t */\n\t\t\tmarkItem: function( index ) {\n\t\t\t\tif ( index == -1 )\n\t\t\t\t\treturn;\n\t\t\t\tvar links = this.element.getElementsByTag( 'a' );\n\t\t\t\tvar item = links.getItem( this._.focusIndex = index );\n\n\t\t\t\t// Safari need focus on the iframe window first(http://dev.ckeditor.com/ticket/3389), but we need\n\t\t\t\t// lock the blur to avoid hiding the panel.\n\t\t\t\tif ( CKEDITOR.env.webkit )\n\t\t\t\t\titem.getDocument().getWindow().focus();\n\t\t\t\titem.focus();\n\n\t\t\t\tthis.onMark && this.onMark( item );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Marks the first visible item or the one whose `aria-selected` attribute is set to `true`.\n\t\t\t * The latter has priority over the former.\n\t\t\t *\n\t\t\t * @private\n\t\t\t * @param beforeMark function to be executed just before marking.\n\t\t\t * Used in cases when any preparatory cleanup (like unmarking all items) would simultaneously\n\t\t\t * destroy the information that is needed to determine the focused item.\n\t\t\t */\n\t\t\tmarkFirstDisplayed: function( beforeMark ) {\n\t\t\t\tvar notDisplayed = function( element ) {\n\t\t\t\t\t\treturn element.type == CKEDITOR.NODE_ELEMENT && element.getStyle( 'display' ) == 'none';\n\t\t\t\t\t},\n\t\t\t\t\tlinks = this._.getItems(),\n\t\t\t\t\titem, focused;\n\n\t\t\t\tfor ( var i = links.count() - 1; i >= 0; i-- ) {\n\t\t\t\t\titem = links.getItem( i );\n\n\t\t\t\t\tif ( !item.getAscendant( notDisplayed ) ) {\n\t\t\t\t\t\tfocused = item;\n\t\t\t\t\t\tthis._.focusIndex = i;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( item.getAttribute( 'aria-selected' ) == 'true' ) {\n\t\t\t\t\t\tfocused = item;\n\t\t\t\t\t\tthis._.focusIndex = i;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif ( !focused ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( beforeMark ) {\n\t\t\t\t\tbeforeMark();\n\t\t\t\t}\n\n\t\t\t\tif ( CKEDITOR.env.webkit )\n\t\t\t\t\tfocused.getDocument().getWindow().focus();\n\t\t\t\tfocused.focus();\n\n\t\t\t\tthis.onMark && this.onMark( focused );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Returns a `CKEDITOR.dom.nodeList` of block items.\n\t\t\t *\n\t\t\t * @returns {*|CKEDITOR.dom.nodeList}\n\t\t\t */\n\t\t\tgetItems: function() {\n\t\t\t\treturn this.element.getElementsByTag( 'a' );\n\t\t\t}\n\t\t},\n\n\t\tproto: {\n\t\t\tshow: function() {\n\t\t\t\tthis.element.setStyle( 'display', '' );\n\t\t\t},\n\n\t\t\thide: function() {\n\t\t\t\tif ( !this.onHide || this.onHide.call( this ) !== true )\n\t\t\t\t\tthis.element.setStyle( 'display', 'none' );\n\t\t\t},\n\n\t\t\tonKeyDown: function( keystroke, noCycle ) {\n\t\t\t\tvar keyAction = this.keys[ keystroke ];\n\t\t\t\tswitch ( keyAction ) {\n\t\t\t\t\t// Move forward.\n\t\t\t\t\tcase 'next':\n\t\t\t\t\t\tvar index = this._.focusIndex,\n\t\t\t\t\t\t\tlinks = this.element.getElementsByTag( 'a' ),\n\t\t\t\t\t\t\tlink;\n\n\t\t\t\t\t\twhile ( ( link = links.getItem( ++index ) ) ) {\n\t\t\t\t\t\t\t// Move the focus only if the element is marked with\n\t\t\t\t\t\t\t// the _cke_focus and it it's visible (check if it has\n\t\t\t\t\t\t\t// width).\n\t\t\t\t\t\t\tif ( link.getAttribute( '_cke_focus' ) && link.$.offsetWidth ) {\n\t\t\t\t\t\t\t\tthis._.focusIndex = index;\n\t\t\t\t\t\t\t\tlink.focus();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If no link was found, cycle and restart from the top. (http://dev.ckeditor.com/ticket/11125)\n\t\t\t\t\t\tif ( !link && !noCycle ) {\n\t\t\t\t\t\t\tthis._.focusIndex = -1;\n\t\t\t\t\t\t\treturn this.onKeyDown( keystroke, 1 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\t\t// Move backward.\n\t\t\t\t\tcase 'prev':\n\t\t\t\t\t\tindex = this._.focusIndex;\n\t\t\t\t\t\tlinks = this.element.getElementsByTag( 'a' );\n\n\t\t\t\t\t\twhile ( index > 0 && ( link = links.getItem( --index ) ) ) {\n\t\t\t\t\t\t\t// Move the focus only if the element is marked with\n\t\t\t\t\t\t\t// the _cke_focus and it it's visible (check if it has\n\t\t\t\t\t\t\t// width).\n\t\t\t\t\t\t\tif ( link.getAttribute( '_cke_focus' ) && link.$.offsetWidth ) {\n\t\t\t\t\t\t\t\tthis._.focusIndex = index;\n\t\t\t\t\t\t\t\tlink.focus();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Make sure link is null when the loop ends and nothing was\n\t\t\t\t\t\t\t// found (http://dev.ckeditor.com/ticket/11125).\n\t\t\t\t\t\t\tlink = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If no link was found, cycle and restart from the bottom. (http://dev.ckeditor.com/ticket/11125)\n\t\t\t\t\t\tif ( !link && !noCycle ) {\n\t\t\t\t\t\t\tthis._.focusIndex = links.count();\n\t\t\t\t\t\t\treturn this.onKeyDown( keystroke, 1 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\tcase 'click':\n\t\t\t\t\tcase 'mouseup':\n\t\t\t\t\t\tindex = this._.focusIndex;\n\t\t\t\t\t\tlink = index >= 0 && this.element.getElementsByTag( 'a' ).getItem( index );\n\n\t\t\t\t\t\tif ( link )\n\t\t\t\t\t\t\tlink.$[ keyAction ] ? link.$[ keyAction ]() : link.$[ 'on' + keyAction ]();\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t} );\n\n} )();\n\n/**\n * Fired when a panel is added to the document.\n *\n * @event ariaWidget\n * @member CKEDITOR\n * @param {Object} data The element wrapping the panel.\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.plugins.add( 'floatpanel', {\n\trequires: 'panel'\n} );\n\n( function() {\n\tvar panels = {};\n\n\tfunction getPanel( editor, doc, parentElement, definition, level ) {\n\t\t// Generates the panel key: docId-eleId-skinName-langDir[-uiColor][-CSSs][-level]\n\t\tvar key = CKEDITOR.tools.genKey( doc.getUniqueId(), parentElement.getUniqueId(), editor.lang.dir, editor.uiColor || '', definition.css || '', level || '' ),\n\t\t\tpanel = panels[ key ];\n\n\t\tif ( !panel ) {\n\t\t\tpanel = panels[ key ] = new CKEDITOR.ui.panel( doc, definition );\n\t\t\tpanel.element = parentElement.append( CKEDITOR.dom.element.createFromHtml( panel.render( editor ), doc ) );\n\n\t\t\tpanel.element.setStyles( {\n\t\t\t\tdisplay: 'none',\n\t\t\t\tposition: 'absolute'\n\t\t\t} );\n\t\t}\n\n\t\treturn panel;\n\t}\n\n\t/**\n\t * Represents a floating panel UI element.\n\t *\n\t * It is reused by rich combos, color combos, menus, etc.\n\t * and it renders its content using {@link CKEDITOR.ui.panel}.\n\t *\n\t * @class\n\t * @todo\n\t */\n\tCKEDITOR.ui.floatPanel = CKEDITOR.tools.createClass( {\n\t\t/**\n\t\t * Creates a floatPanel class instance.\n\t\t *\n\t\t * @constructor\n\t\t * @param {CKEDITOR.editor} editor\n\t\t * @param {CKEDITOR.dom.element} parentElement\n\t\t * @param {Object} definition Definition of the panel that will be floating.\n\t\t * @param {Number} level\n\t\t */\n\t\t$: function( editor, parentElement, definition, level ) {\n\t\t\tdefinition.forceIFrame = 1;\n\n\t\t\t// In case of editor with floating toolbar append panels that should float\n\t\t\t// to the main UI element.\n\t\t\tif ( definition.toolbarRelated && editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE )\n\t\t\t\tparentElement = CKEDITOR.document.getById( 'cke_' + editor.name );\n\n\t\t\tvar doc = parentElement.getDocument(),\n\t\t\t\tpanel = getPanel( editor, doc, parentElement, definition, level || 0 ),\n\t\t\t\telement = panel.element,\n\t\t\t\tiframe = element.getFirst(),\n\t\t\t\tthat = this;\n\n\t\t\t// Disable native browser menu. (http://dev.ckeditor.com/ticket/4825)\n\t\t\telement.disableContextMenu();\n\n\t\t\tthis.element = element;\n\n\t\t\tthis._ = {\n\t\t\t\teditor: editor,\n\t\t\t\t// The panel that will be floating.\n\t\t\t\tpanel: panel,\n\t\t\t\tparentElement: parentElement,\n\t\t\t\tdefinition: definition,\n\t\t\t\tdocument: doc,\n\t\t\t\tiframe: iframe,\n\t\t\t\tchildren: [],\n\t\t\t\tdir: editor.lang.dir,\n\t\t\t\tshowBlockParams: null\n\t\t\t};\n\n\t\t\teditor.on( 'mode', hide );\n\t\t\teditor.on( 'resize', hide );\n\n\t\t\t// When resize of the window is triggered floatpanel should be repositioned according to new dimensions.\n\t\t\t// http://dev.ckeditor.com/ticket/11724. Fixes issue with undesired panel hiding on Android and iOS.\n\t\t\tdoc.getWindow().on( 'resize', function() {\n\t\t\t\tthis.reposition();\n\t\t\t}, this );\n\n\t\t\t// We need a wrapper because events implementation doesn't allow to attach\n\t\t\t// one listener more than once for the same event on the same object.\n\t\t\t// Remember that floatPanel#hide is shared between all instances.\n\t\t\tfunction hide() {\n\t\t\t\tthat.hide();\n\t\t\t}\n\t\t},\n\n\t\tproto: {\n\t\t\t/**\n\t\t\t * @todo\n\t\t\t */\n\t\t\taddBlock: function( name, block ) {\n\t\t\t\treturn this._.panel.addBlock( name, block );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @todo\n\t\t\t */\n\t\t\taddListBlock: function( name, multiSelect ) {\n\t\t\t\treturn this._.panel.addListBlock( name, multiSelect );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @todo\n\t\t\t */\n\t\t\tgetBlock: function( name ) {\n\t\t\t\treturn this._.panel.getBlock( name );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Shows the panel block.\n\t\t\t *\n\t\t\t * @param {String} name\n\t\t\t * @param {CKEDITOR.dom.element} offsetParent Positioned parent.\n\t\t\t * @param {Number} corner\n\t\t\t *\n\t\t\t * * For LTR (left to right) oriented editor:\n\t\t\t * * `1` = top-left\n\t\t\t * * `2` = top-right\n\t\t\t * * `3` = bottom-right\n\t\t\t * * `4` = bottom-left\n\t\t\t * * For RTL (right to left):\n\t\t\t * * `1` = top-right\n\t\t\t * * `2` = top-left\n\t\t\t * * `3` = bottom-left\n\t\t\t * * `4` = bottom-right\n\t\t\t *\n\t\t\t * @param {Number} [offsetX=0]\n\t\t\t * @param {Number} [offsetY=0]\n\t\t\t * @param {Function} [callback] A callback function executed when block positioning is done.\n\t\t\t * @todo what do exactly these params mean (especially corner)?\n\t\t\t */\n\t\t\tshowBlock: function( name, offsetParent, corner, offsetX, offsetY, callback ) {\n\t\t\t\tvar panel = this._.panel,\n\t\t\t\t\tblock = panel.showBlock( name );\n\n\t\t\t\tthis._.showBlockParams = [].slice.call( arguments );\n\t\t\t\tthis.allowBlur( false );\n\n\t\t\t\t// Record from where the focus is when open panel.\n\t\t\t\tvar editable = this._.editor.editable();\n\t\t\t\tthis._.returnFocus = editable.hasFocus ? editable : new CKEDITOR.dom.element( CKEDITOR.document.$.activeElement );\n\t\t\t\tthis._.hideTimeout = 0;\n\n\t\t\t\tvar element = this.element,\n\t\t\t\t\tiframe = this._.iframe,\n\t\t\t\t\t// Edge prefers iframe's window to the iframe, just like the rest of the browsers (http://dev.ckeditor.com/ticket/13143).\n\t\t\t\t\tfocused = CKEDITOR.env.ie && !CKEDITOR.env.edge ? iframe : new CKEDITOR.dom.window( iframe.$.contentWindow ),\n\t\t\t\t\tdoc = element.getDocument(),\n\t\t\t\t\tpositionedAncestor = this._.parentElement.getPositionedAncestor(),\n\t\t\t\t\tposition = offsetParent.getDocumentPosition( doc ),\n\t\t\t\t\tpositionedAncestorPosition = positionedAncestor ? positionedAncestor.getDocumentPosition( doc ) : { x: 0, y: 0 },\n\t\t\t\t\trtl = this._.dir == 'rtl',\n\t\t\t\t\tleft = position.x + ( offsetX || 0 ) - positionedAncestorPosition.x,\n\t\t\t\t\ttop = position.y + ( offsetY || 0 ) - positionedAncestorPosition.y;\n\n\t\t\t\t// Floating panels are off by (-1px, 0px) in RTL mode. (http://dev.ckeditor.com/ticket/3438)\n\t\t\t\tif ( rtl && ( corner == 1 || corner == 4 ) )\n\t\t\t\t\tleft += offsetParent.$.offsetWidth;\n\t\t\t\telse if ( !rtl && ( corner == 2 || corner == 3 ) )\n\t\t\t\t\tleft += offsetParent.$.offsetWidth - 1;\n\n\t\t\t\tif ( corner == 3 || corner == 4 )\n\t\t\t\t\ttop += offsetParent.$.offsetHeight - 1;\n\n\t\t\t\t// Memorize offsetParent by it's ID.\n\t\t\t\tthis._.panel._.offsetParentId = offsetParent.getId();\n\n\t\t\t\telement.setStyles( {\n\t\t\t\t\ttop: top + 'px',\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tdisplay: ''\n\t\t\t\t} );\n\n\t\t\t\t// Don't use display or visibility style because we need to\n\t\t\t\t// calculate the rendering layout later and focus the element.\n\t\t\t\telement.setOpacity( 0 );\n\n\t\t\t\t// To allow the context menu to decrease back their width\n\t\t\t\telement.getFirst().removeStyle( 'width' );\n\n\t\t\t\t// Report to focus manager.\n\t\t\t\tthis._.editor.focusManager.add( focused );\n\n\t\t\t\t// Configure the IFrame blur event. Do that only once.\n\t\t\t\tif ( !this._.blurSet ) {\n\n\t\t\t\t\t// With addEventListener compatible browsers, we must\n\t\t\t\t\t// useCapture when registering the focus/blur events to\n\t\t\t\t\t// guarantee they will be firing in all situations. (http://dev.ckeditor.com/ticket/3068, http://dev.ckeditor.com/ticket/3222 )\n\t\t\t\t\tCKEDITOR.event.useCapture = true;\n\n\t\t\t\t\tfocused.on( 'blur', function( ev ) {\n\t\t\t\t\t\t// As we are using capture to register the listener,\n\t\t\t\t\t\t// the blur event may get fired even when focusing\n\t\t\t\t\t\t// inside the window itself, so we must ensure the\n\t\t\t\t\t\t// target is out of it.\n\t\t\t\t\t\tif ( !this.allowBlur() || ev.data.getPhase() != CKEDITOR.EVENT_PHASE_AT_TARGET )\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\tif ( this.visible && !this._.activeChild ) {\n\t\t\t\t\t\t\t// [iOS] Allow hide to be prevented if touch is bound\n\t\t\t\t\t\t\t// to any parent of the iframe blur happens before touch (http://dev.ckeditor.com/ticket/10714).\n\t\t\t\t\t\t\tif ( CKEDITOR.env.iOS ) {\n\t\t\t\t\t\t\t\tif ( !this._.hideTimeout )\n\t\t\t\t\t\t\t\t\tthis._.hideTimeout = CKEDITOR.tools.setTimeout( doHide, 0, this );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdoHide.call( this );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tfunction doHide() {\n\t\t\t\t\t\t\t// Panel close is caused by user's navigating away the focus, e.g. click outside the panel.\n\t\t\t\t\t\t\t// DO NOT restore focus in this case.\n\t\t\t\t\t\t\tdelete this._.returnFocus;\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this );\n\n\t\t\t\t\tfocused.on( 'focus', function() {\n\t\t\t\t\t\tthis._.focused = true;\n\t\t\t\t\t\tthis.hideChild();\n\t\t\t\t\t\tthis.allowBlur( true );\n\t\t\t\t\t}, this );\n\n\t\t\t\t\t// [iOS] if touch is bound to any parent of the iframe blur\n\t\t\t\t\t// happens twice before touchstart and before touchend (http://dev.ckeditor.com/ticket/10714).\n\t\t\t\t\tif ( CKEDITOR.env.iOS ) {\n\t\t\t\t\t\t// Prevent false hiding on blur.\n\t\t\t\t\t\t// We don't need to return focus here because touchend will fire anyway.\n\t\t\t\t\t\t// If user scrolls and pointer gets out of the panel area touchend will also fire.\n\t\t\t\t\t\tfocused.on( 'touchstart', function() {\n\t\t\t\t\t\t\tclearTimeout( this._.hideTimeout );\n\t\t\t\t\t\t}, this );\n\n\t\t\t\t\t\t// Set focus back to handle blur and hide panel when needed.\n\t\t\t\t\t\tfocused.on( 'touchend', function() {\n\t\t\t\t\t\t\tthis._.hideTimeout = 0;\n\t\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\t}, this );\n\t\t\t\t\t}\n\n\t\t\t\t\tCKEDITOR.event.useCapture = false;\n\n\t\t\t\t\tthis._.blurSet = 1;\n\t\t\t\t}\n\n\t\t\t\tpanel.onEscape = CKEDITOR.tools.bind( function( keystroke ) {\n\t\t\t\t\tif ( this.onEscape && this.onEscape( keystroke ) === false )\n\t\t\t\t\t\treturn false;\n\t\t\t\t}, this );\n\n\t\t\t\tCKEDITOR.tools.setTimeout( function() {\n\t\t\t\t\tvar panelLoad = CKEDITOR.tools.bind( function() {\n\t\t\t\t\t\tvar target = element;\n\n\t\t\t\t\t\t// Reset panel width as the new content can be narrower\n\t\t\t\t\t\t// than the old one. (http://dev.ckeditor.com/ticket/9355)\n\t\t\t\t\t\ttarget.removeStyle( 'width' );\n\n\t\t\t\t\t\tif ( block.autoSize ) {\n\t\t\t\t\t\t\tvar panelDoc = block.element.getDocument(),\n\t\t\t\t\t\t\t\twidth = ( ( CKEDITOR.env.webkit || CKEDITOR.env.edge ) ? block.element : panelDoc.getBody() ).$.scrollWidth;\n\n\t\t\t\t\t\t\t// Account for extra height needed due to IE quirks box model bug:\n\t\t\t\t\t\t\t// http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug\n\t\t\t\t\t\t\t// (http://dev.ckeditor.com/ticket/3426)\n\t\t\t\t\t\t\tif ( CKEDITOR.env.ie && CKEDITOR.env.quirks && width > 0 )\n\t\t\t\t\t\t\t\twidth += ( target.$.offsetWidth || 0 ) - ( target.$.clientWidth || 0 ) + 3;\n\n\t\t\t\t\t\t\t// Add some extra pixels to improve the appearance.\n\t\t\t\t\t\t\twidth += 10;\n\n\t\t\t\t\t\t\ttarget.setStyle( 'width', width + 'px' );\n\n\t\t\t\t\t\t\tvar height = block.element.$.scrollHeight;\n\n\t\t\t\t\t\t\t// Account for extra height needed due to IE quirks box model bug:\n\t\t\t\t\t\t\t// http://en.wikipedia.org/wiki/Internet_Explorer_box_model_bug\n\t\t\t\t\t\t\t// (http://dev.ckeditor.com/ticket/3426)\n\t\t\t\t\t\t\tif ( CKEDITOR.env.ie && CKEDITOR.env.quirks && height > 0 )\n\t\t\t\t\t\t\t\theight += ( target.$.offsetHeight || 0 ) - ( target.$.clientHeight || 0 ) + 3;\n\n\t\t\t\t\t\t\ttarget.setStyle( 'height', height + 'px' );\n\n\t\t\t\t\t\t\t// Fix IE < 8 visibility.\n\t\t\t\t\t\t\tpanel._.currentBlock.element.setStyle( 'display', 'none' ).removeStyle( 'display' );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttarget.removeStyle( 'height' );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Flip panel layout horizontally in RTL with known width.\n\t\t\t\t\t\tif ( rtl )\n\t\t\t\t\t\t\tleft -= element.$.offsetWidth;\n\n\t\t\t\t\t\t// Pop the style now for measurement.\n\t\t\t\t\t\telement.setStyle( 'left', left + 'px' );\n\n\t\t\t\t\t\t/* panel layout smartly fit the viewport size. */\n\t\t\t\t\t\tvar panelElement = panel.element,\n\t\t\t\t\t\t\tpanelWindow = panelElement.getWindow(),\n\t\t\t\t\t\t\trect = element.$.getBoundingClientRect(),\n\t\t\t\t\t\t\tviewportSize = panelWindow.getViewPaneSize();\n\n\t\t\t\t\t\t// Compensation for browsers that dont support \"width\" and \"height\".\n\t\t\t\t\t\tvar rectWidth = rect.width || rect.right - rect.left,\n\t\t\t\t\t\t\trectHeight = rect.height || rect.bottom - rect.top;\n\n\t\t\t\t\t\t// Check if default horizontal layout is impossible.\n\t\t\t\t\t\tvar spaceAfter = rtl ? rect.right : viewportSize.width - rect.left,\n\t\t\t\t\t\t\tspaceBefore = rtl ? viewportSize.width - rect.right : rect.left;\n\n\t\t\t\t\t\tif ( rtl ) {\n\t\t\t\t\t\t\tif ( spaceAfter < rectWidth ) {\n\t\t\t\t\t\t\t\t// Flip to show on right.\n\t\t\t\t\t\t\t\tif ( spaceBefore > rectWidth )\n\t\t\t\t\t\t\t\t\tleft += rectWidth;\n\t\t\t\t\t\t\t\t// Align to window left.\n\t\t\t\t\t\t\t\telse if ( viewportSize.width > rectWidth )\n\t\t\t\t\t\t\t\t\tleft = left - rect.left;\n\t\t\t\t\t\t\t\t// Align to window right, never cutting the panel at right.\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tleft = left - rect.right + viewportSize.width;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if ( spaceAfter < rectWidth ) {\n\t\t\t\t\t\t\t// Flip to show on left.\n\t\t\t\t\t\t\tif ( spaceBefore > rectWidth )\n\t\t\t\t\t\t\t\tleft -= rectWidth;\n\t\t\t\t\t\t\t// Align to window right.\n\t\t\t\t\t\t\telse if ( viewportSize.width > rectWidth )\n\t\t\t\t\t\t\t\tleft = left - rect.right + viewportSize.width;\n\t\t\t\t\t\t\t// Align to window left, never cutting the panel at left.\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tleft = left - rect.left;\n\t\t\t\t\t\t}\n\n\n\t\t\t\t\t\t// Check if the default vertical layout is possible.\n\t\t\t\t\t\tvar spaceBelow = viewportSize.height - rect.top,\n\t\t\t\t\t\t\tspaceAbove = rect.top;\n\n\t\t\t\t\t\tif ( spaceBelow < rectHeight ) {\n\t\t\t\t\t\t\t// Flip to show above.\n\t\t\t\t\t\t\tif ( spaceAbove > rectHeight )\n\t\t\t\t\t\t\t\ttop -= rectHeight;\n\t\t\t\t\t\t\t// Align to window bottom.\n\t\t\t\t\t\t\telse if ( viewportSize.height > rectHeight )\n\t\t\t\t\t\t\t\ttop = top - rect.bottom + viewportSize.height;\n\t\t\t\t\t\t\t// Align to top, never cutting the panel at top.\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\ttop = top - rect.top;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If IE is in RTL, we have troubles with absolute\n\t\t\t\t\t\t// position and horizontal scrolls. Here we have a\n\t\t\t\t\t\t// series of hacks to workaround it. (http://dev.ckeditor.com/ticket/6146)\n\t\t\t\t\t\tif ( CKEDITOR.env.ie ) {\n\t\t\t\t\t\t\tvar offsetParent = new CKEDITOR.dom.element( element.$.offsetParent ),\n\t\t\t\t\t\t\t\tscrollParent = offsetParent;\n\n\t\t\t\t\t\t\t// Quirks returns , but standards returns .\n\t\t\t\t\t\t\tif ( scrollParent.getName() == 'html' )\n\t\t\t\t\t\t\t\tscrollParent = scrollParent.getDocument().getBody();\n\n\t\t\t\t\t\t\tif ( scrollParent.getComputedStyle( 'direction' ) == 'rtl' ) {\n\t\t\t\t\t\t\t\t// For IE8, there is not much logic on this, but it works.\n\t\t\t\t\t\t\t\tif ( CKEDITOR.env.ie8Compat )\n\t\t\t\t\t\t\t\t\tleft -= element.getDocument().getDocumentElement().$.scrollLeft * 2;\n\t\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\t\tleft -= ( offsetParent.$.scrollWidth - offsetParent.$.clientWidth );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Trigger the onHide event of the previously active panel to prevent\n\t\t\t\t\t\t// incorrect styles from being applied (http://dev.ckeditor.com/ticket/6170)\n\t\t\t\t\t\tvar innerElement = element.getFirst(),\n\t\t\t\t\t\t\tactivePanel;\n\t\t\t\t\t\tif ( ( activePanel = innerElement.getCustomData( 'activePanel' ) ) )\n\t\t\t\t\t\t\tactivePanel.onHide && activePanel.onHide.call( this, 1 );\n\t\t\t\t\t\tinnerElement.setCustomData( 'activePanel', this );\n\n\t\t\t\t\t\telement.setStyles( {\n\t\t\t\t\t\t\ttop: top + 'px',\n\t\t\t\t\t\t\tleft: left + 'px'\n\t\t\t\t\t\t} );\n\t\t\t\t\t\telement.setOpacity( 1 );\n\n\t\t\t\t\t\tcallback && callback();\n\t\t\t\t\t}, this );\n\n\t\t\t\t\tpanel.isLoaded ? panelLoad() : panel.onLoad = panelLoad;\n\n\t\t\t\t\tCKEDITOR.tools.setTimeout( function() {\n\t\t\t\t\t\tvar scrollTop = CKEDITOR.env.webkit && CKEDITOR.document.getWindow().getScrollPosition().y;\n\n\t\t\t\t\t\t// Focus the panel frame first, so blur gets fired.\n\t\t\t\t\t\tthis.focus();\n\n\t\t\t\t\t\t// Focus the block now.\n\t\t\t\t\t\tblock.element.focus();\n\n\t\t\t\t\t\t// http://dev.ckeditor.com/ticket/10623, http://dev.ckeditor.com/ticket/10951 - restore the viewport's scroll position after focusing list element.\n\t\t\t\t\t\tif ( CKEDITOR.env.webkit )\n\t\t\t\t\t\t\tCKEDITOR.document.getBody().$.scrollTop = scrollTop;\n\n\t\t\t\t\t\t// We need this get fired manually because of unfired focus() function.\n\t\t\t\t\t\tthis.allowBlur( true );\n\n\t\t\t\t\t\t// Ensure that the first item is focused (http://dev.ckeditor.com/ticket/16804).\n\t\t\t\t\t\tif ( CKEDITOR.env.ie ) {\n\t\t\t\t\t\t\tCKEDITOR.tools.setTimeout( function() {\n\t\t\t\t\t\t\t\tblock.markFirstDisplayed ? block.markFirstDisplayed() : block._.markFirstDisplayed();\n\t\t\t\t\t\t\t}, 0 );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tblock.markFirstDisplayed ? block.markFirstDisplayed() : block._.markFirstDisplayed();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tthis._.editor.fire( 'panelShow', this );\n\t\t\t\t\t}, 0, this );\n\t\t\t\t}, CKEDITOR.env.air ? 200 : 0, this );\n\t\t\t\tthis.visible = 1;\n\n\t\t\t\tif ( this.onShow )\n\t\t\t\t\tthis.onShow.call( this );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Repositions the panel with the same parameters that were used in the last {@link #showBlock} call.\n\t\t\t *\n\t\t\t * @since 4.5.4\n\t\t\t */\n\t\t\treposition: function() {\n\t\t\t\tvar blockParams = this._.showBlockParams;\n\n\t\t\t\tif ( this.visible && this._.showBlockParams ) {\n\t\t\t\t\tthis.hide();\n\t\t\t\t\tthis.showBlock.apply( this, blockParams );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Restores the last focused element or simply focuses the panel window.\n\t\t\t */\n\t\t\tfocus: function() {\n\t\t\t\t// Webkit requires to blur any previous focused page element, in\n\t\t\t\t// order to properly fire the \"focus\" event.\n\t\t\t\tif ( CKEDITOR.env.webkit ) {\n\t\t\t\t\tvar active = CKEDITOR.document.getActive();\n\t\t\t\t\tactive && !active.equals( this._.iframe ) && active.$.blur();\n\t\t\t\t}\n\n\t\t\t\t// Restore last focused element or simply focus panel window.\n\t\t\t\tvar focus = this._.lastFocused || this._.iframe.getFrameDocument().getWindow();\n\t\t\t\tfocus.focus();\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @todo\n\t\t\t */\n\t\t\tblur: function() {\n\t\t\t\tvar doc = this._.iframe.getFrameDocument(),\n\t\t\t\t\tactive = doc.getActive();\n\n\t\t\t\tactive && active.is( 'a' ) && ( this._.lastFocused = active );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Hides the panel.\n\t\t\t *\n\t\t\t * @todo\n\t\t\t */\n\t\t\thide: function( returnFocus ) {\n\t\t\t\tif ( this.visible && ( !this.onHide || this.onHide.call( this ) !== true ) ) {\n\t\t\t\t\tthis.hideChild();\n\t\t\t\t\t// Blur previously focused element. (http://dev.ckeditor.com/ticket/6671)\n\t\t\t\t\tCKEDITOR.env.gecko && this._.iframe.getFrameDocument().$.activeElement.blur();\n\t\t\t\t\tthis.element.setStyle( 'display', 'none' );\n\t\t\t\t\tthis.visible = 0;\n\t\t\t\t\tthis.element.getFirst().removeCustomData( 'activePanel' );\n\n\t\t\t\t\t// Return focus properly. (http://dev.ckeditor.com/ticket/6247)\n\t\t\t\t\tvar focusReturn = returnFocus && this._.returnFocus;\n\t\t\t\t\tif ( focusReturn ) {\n\t\t\t\t\t\t// Webkit requires focus moved out panel iframe first.\n\t\t\t\t\t\tif ( CKEDITOR.env.webkit && focusReturn.type )\n\t\t\t\t\t\t\tfocusReturn.getWindow().$.focus();\n\n\t\t\t\t\t\tfocusReturn.focus();\n\t\t\t\t\t}\n\n\t\t\t\t\tdelete this._.lastFocused;\n\t\t\t\t\tthis._.showBlockParams = null;\n\n\t\t\t\t\tthis._.editor.fire( 'panelHide', this );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @todo\n\t\t\t */\n\t\t\tallowBlur: function( allow ) {\n\t\t\t\t// Prevent editor from hiding the panel. (http://dev.ckeditor.com/ticket/3222)\n\t\t\t\tvar panel = this._.panel;\n\t\t\t\tif ( allow !== undefined )\n\t\t\t\t\tpanel.allowBlur = allow;\n\n\t\t\t\treturn panel.allowBlur;\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Shows the specified panel as a child of one block of this one.\n\t\t\t *\n\t\t\t * @param {CKEDITOR.ui.floatPanel} panel\n\t\t\t * @param {String} blockName\n\t\t\t * @param {CKEDITOR.dom.element} offsetParent Positioned parent.\n\t\t\t * @param {Number} corner\n\t\t\t *\n\t\t\t * * For LTR (left to right) oriented editor:\n\t\t\t * * `1` = top-left\n\t\t\t * * `2` = top-right\n\t\t\t * * `3` = bottom-right\n\t\t\t * * `4` = bottom-left\n\t\t\t * * For RTL (right to left):\n\t\t\t * * `1` = top-right\n\t\t\t * * `2` = top-left\n\t\t\t * * `3` = bottom-left\n\t\t\t * * `4` = bottom-right\n\t\t\t *\n\t\t\t * @param {Number} [offsetX=0]\n\t\t\t * @param {Number} [offsetY=0]\n\t\t\t * @todo\n\t\t\t */\n\t\t\tshowAsChild: function( panel, blockName, offsetParent, corner, offsetX, offsetY ) {\n\t\t\t\t// Skip reshowing of child which is already visible.\n\t\t\t\tif ( this._.activeChild == panel && panel._.panel._.offsetParentId == offsetParent.getId() )\n\t\t\t\t\treturn;\n\n\t\t\t\tthis.hideChild();\n\n\t\t\t\tpanel.onHide = CKEDITOR.tools.bind( function() {\n\t\t\t\t\t// Use a timeout, so we give time for this menu to get\n\t\t\t\t\t// potentially focused.\n\t\t\t\t\tCKEDITOR.tools.setTimeout( function() {\n\t\t\t\t\t\tif ( !this._.focused )\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t}, 0, this );\n\t\t\t\t}, this );\n\n\t\t\t\tthis._.activeChild = panel;\n\t\t\t\tthis._.focused = false;\n\n\t\t\t\tpanel.showBlock( blockName, offsetParent, corner, offsetX, offsetY );\n\t\t\t\tthis.blur();\n\n\t\t\t\t/* http://dev.ckeditor.com/ticket/3767 IE: Second level menu may not have borders */\n\t\t\t\tif ( CKEDITOR.env.ie7Compat || CKEDITOR.env.ie6Compat ) {\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tpanel.element.getChild( 0 ).$.style.cssText += '';\n\t\t\t\t\t}, 100 );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * @todo\n\t\t\t */\n\t\t\thideChild: function( restoreFocus ) {\n\t\t\t\tvar activeChild = this._.activeChild;\n\n\t\t\t\tif ( activeChild ) {\n\t\t\t\t\tdelete activeChild.onHide;\n\t\t\t\t\tdelete this._.activeChild;\n\t\t\t\t\tactiveChild.hide();\n\n\t\t\t\t\t// At this point focus should be moved back to parent panel.\n\t\t\t\t\trestoreFocus && this.focus();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\n\tCKEDITOR.on( 'instanceDestroyed', function() {\n\t\tvar isLastInstance = CKEDITOR.tools.isEmpty( CKEDITOR.instances );\n\n\t\tfor ( var i in panels ) {\n\t\t\tvar panel = panels[ i ];\n\t\t\t// Safe to destroy it since there're no more instances.(http://dev.ckeditor.com/ticket/4241)\n\t\t\tif ( isLastInstance )\n\t\t\t\tpanel.destroy();\n\t\t\t// Panel might be used by other instances, just hide them.(http://dev.ckeditor.com/ticket/4552)\n\t\t\telse\n\t\t\t\tpanel.element.hide();\n\t\t}\n\t\t// Remove the registration.\n\t\tisLastInstance && ( panels = {} );\n\n\t} );\n} )();\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview The \"colorbutton\" plugin that makes it possible to assign\n * text and background colors to editor contents.\n *\n */\nCKEDITOR.plugins.add( 'colorbutton', {\n\trequires: 'panelbutton,floatpanel',\n\t// jscs:disable maximumLineLength\n\t// jscs:enable maximumLineLength\n\tinit: function( editor ) {\n\t\tvar config = editor.config,\n\t\t\tlang = editor.lang.colorbutton;\n\n\t\tif ( !CKEDITOR.env.hc ) {\n\t\t\taddButton( 'TextColor', 'fore', lang.textColorTitle, 10, {\n\t\t\t\tcontentTransformations: [\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\telement: 'font',\n\t\t\t\t\t\t\tcheck: 'span{color}',\n\t\t\t\t\t\t\tleft: function( element ) {\n\t\t\t\t\t\t\t\treturn !!element.attributes.color;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tright: function( element ) {\n\t\t\t\t\t\t\t\telement.name = 'span';\n\n\t\t\t\t\t\t\t\telement.attributes.color && ( element.styles.color = element.attributes.color );\n\t\t\t\t\t\t\t\tdelete element.attributes.color;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t]\n\t\t\t} );\n\n\t\t\tvar bgOptions = {},\n\t\t\t\tnormalizeBackground = editor.config.colorButton_normalizeBackground;\n\n\t\t\tif ( normalizeBackground === undefined || normalizeBackground ) {\n\t\t\t\t// If background contains only color, then we want to convert it into background-color so that it's\n\t\t\t\t// correctly picked by colorbutton plugin.\n\t\t\t\tbgOptions.contentTransformations = [\n\t\t\t\t\t[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Transform span that specify background with color only to background-color.\n\t\t\t\t\t\t\telement: 'span',\n\t\t\t\t\t\t\tleft: function( element ) {\n\t\t\t\t\t\t\t\tvar tools = CKEDITOR.tools;\n\t\t\t\t\t\t\t\tif ( element.name != 'span' || !element.styles || !element.styles.background ) {\n\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tvar background = tools.style.parse.background( element.styles.background );\n\n\t\t\t\t\t\t\t\t// We return true only if background specifies **only** color property, and there's only one background directive.\n\t\t\t\t\t\t\t\treturn background.color && tools.objectKeys( background ).length === 1;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tright: function( element ) {\n\t\t\t\t\t\t\t\tvar style = new CKEDITOR.style( editor.config.colorButton_backStyle, {\n\t\t\t\t\t\t\t\t\t\tcolor: element.styles.background\n\t\t\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t\t\tdefinition = style.getDefinition();\n\n\t\t\t\t\t\t\t\t// Align the output object with the template used in config.\n\t\t\t\t\t\t\t\telement.name = definition.element;\n\t\t\t\t\t\t\t\telement.styles = definition.styles;\n\t\t\t\t\t\t\t\telement.attributes = definition.attributes || {};\n\n\t\t\t\t\t\t\t\treturn element;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t];\n\t\t\t}\n\n\t\t\taddButton( 'BGColor', 'back', lang.bgColorTitle, 20, bgOptions );\n\t\t}\n\n\t\tfunction addButton( name, type, title, order, options ) {\n\t\t\tvar style = new CKEDITOR.style( config[ 'colorButton_' + type + 'Style' ] ),\n\t\t\t\tcolorBoxId = CKEDITOR.tools.getNextId() + '_colorBox',\n\t\t\t\tpanelBlock;\n\n\t\t\toptions = options || {};\n\n\t\t\teditor.ui.add( name, CKEDITOR.UI_PANELBUTTON, {\n\t\t\t\tlabel: title,\n\t\t\t\ttitle: title,\n\t\t\t\tmodes: { wysiwyg: 1 },\n\t\t\t\teditorFocus: 0,\n\t\t\t\ttoolbar: 'colors,' + order,\n\t\t\t\tallowedContent: style,\n\t\t\t\trequiredContent: style,\n\t\t\t\tcontentTransformations: options.contentTransformations,\n\n\t\t\t\tpanel: {\n\t\t\t\t\tcss: CKEDITOR.skin.getPath( 'editor' ),\n\t\t\t\t\tattributes: { role: 'listbox', 'aria-label': lang.panelTitle }\n\t\t\t\t},\n\n\t\t\t\tonBlock: function( panel, block ) {\n\t\t\t\t\tpanelBlock = block;\n\n\t\t\t\t\tblock.autoSize = true;\n\t\t\t\t\tblock.element.addClass( 'cke_colorblock' );\n\t\t\t\t\tblock.element.setHtml( renderColors( panel, type, colorBoxId ) );\n\t\t\t\t\t// The block should not have scrollbars (http://dev.ckeditor.com/ticket/5933, http://dev.ckeditor.com/ticket/6056)\n\t\t\t\t\tblock.element.getDocument().getBody().setStyle( 'overflow', 'hidden' );\n\n\t\t\t\t\tCKEDITOR.ui.fire( 'ready', this );\n\n\t\t\t\t\tvar keys = block.keys;\n\t\t\t\t\tvar rtl = editor.lang.dir == 'rtl';\n\t\t\t\t\tkeys[ rtl ? 37 : 39 ] = 'next'; // ARROW-RIGHT\n\t\t\t\t\tkeys[ 40 ] = 'next'; // ARROW-DOWN\n\t\t\t\t\tkeys[ 9 ] = 'next'; // TAB\n\t\t\t\t\tkeys[ rtl ? 39 : 37 ] = 'prev'; // ARROW-LEFT\n\t\t\t\t\tkeys[ 38 ] = 'prev'; // ARROW-UP\n\t\t\t\t\tkeys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB\n\t\t\t\t\tkeys[ 32 ] = 'click'; // SPACE\n\t\t\t\t},\n\n\t\t\t\trefresh: function() {\n\t\t\t\t\tif ( !editor.activeFilter.check( style ) )\n\t\t\t\t\t\tthis.setState( CKEDITOR.TRISTATE_DISABLED );\n\t\t\t\t},\n\n\t\t\t\t// The automatic colorbox should represent the real color (http://dev.ckeditor.com/ticket/6010)\n\t\t\t\tonOpen: function() {\n\n\t\t\t\t\tvar selection = editor.getSelection(),\n\t\t\t\t\t\tblock = selection && selection.getStartElement(),\n\t\t\t\t\t\tpath = editor.elementPath( block ),\n\t\t\t\t\t\tautomaticColor;\n\n\t\t\t\t\tif ( !path )\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Find the closest block element.\n\t\t\t\t\tblock = path.block || path.blockLimit || editor.document.getBody();\n\n\t\t\t\t\t// The background color might be transparent. In that case, look up the color in the DOM tree.\n\t\t\t\t\tdo {\n\t\t\t\t\t\tautomaticColor = block && block.getComputedStyle( type == 'back' ? 'background-color' : 'color' ) || 'transparent';\n\t\t\t\t\t}\n\t\t\t\t\twhile ( type == 'back' && automaticColor == 'transparent' && block && ( block = block.getParent() ) );\n\n\t\t\t\t\t// The box should never be transparent.\n\t\t\t\t\tif ( !automaticColor || automaticColor == 'transparent' )\n\t\t\t\t\t\tautomaticColor = '#ffffff';\n\n\t\t\t\t\tif ( config.colorButton_enableAutomatic !== false ) {\n\t\t\t\t\t\tthis._.panel._.iframe.getFrameDocument().getById( colorBoxId ).setStyle( 'background-color', automaticColor );\n\t\t\t\t\t}\n\n\t\t\t\t\tvar range = selection && selection.getRanges()[ 0 ];\n\n\t\t\t\t\tif ( range ) {\n\t\t\t\t\t\tvar walker = new CKEDITOR.dom.walker( range ),\n\t\t\t\t\t\t\telement = range.collapsed ? range.startContainer : walker.next(),\n\t\t\t\t\t\t\tfinalColor = '',\n\t\t\t\t\t\t\tcurrentColor;\n\n\t\t\t\t\t\twhile ( element ) {\n\t\t\t\t\t\t\tif ( element.type === CKEDITOR.NODE_TEXT ) {\n\t\t\t\t\t\t\t\telement = element.getParent();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcurrentColor = normalizeColor( element.getComputedStyle( type == 'back' ? 'background-color' : 'color' ) );\n\t\t\t\t\t\t\tfinalColor = finalColor || currentColor;\n\n\t\t\t\t\t\t\tif ( finalColor !== currentColor ) {\n\t\t\t\t\t\t\t\tfinalColor = '';\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\telement = walker.next();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tselectColor( panelBlock, finalColor );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn automaticColor;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tfunction renderColors( panel, type, colorBoxId ) {\n\t\t\tvar output = [],\n\t\t\t\tcolors = config.colorButton_colors.split( ',' ),\n\t\t\t\tcolorsPerRow = config.colorButton_colorsPerRow || 6,\n\t\t\t\t// Tells if we should include \"More Colors...\" button.\n\t\t\t\tmoreColorsEnabled = editor.plugins.colordialog && config.colorButton_enableMore !== false,\n\t\t\t\t// aria-setsize and aria-posinset attributes are used to indicate size of options, because\n\t\t\t\t// screen readers doesn't play nice with table, based layouts (http://dev.ckeditor.com/ticket/12097).\n\t\t\t\ttotal = colors.length + ( moreColorsEnabled ? 2 : 1 );\n\n\t\t\tvar clickFn = CKEDITOR.tools.addFunction( function applyColorStyle( color, type ) {\n\n\t\t\t\teditor.focus();\n\t\t\t\teditor.fire( 'saveSnapshot' );\n\n\t\t\t\tif ( color == '?' ) {\n\t\t\t\t\teditor.getColorFromDialog( function( color ) {\n\t\t\t\t\t\tif ( color ) {\n\t\t\t\t\t\t\treturn applyColor( color );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\treturn applyColor( color );\n\t\t\t\t}\n\n\t\t\t\tfunction applyColor( color ) {\n\t\t\t\t\t// Clean up any conflicting style within the range.\n\t\t\t\t\teditor.removeStyle( new CKEDITOR.style( config[ 'colorButton_' + type + 'Style' ], { color: 'inherit' } ) );\n\t\t\t\t\tvar colorStyle = config[ 'colorButton_' + type + 'Style' ];\n\n\t\t\t\t\tcolorStyle.childRule = type == 'back' ?\n\t\t\t\t\tfunction( element ) {\n\t\t\t\t\t\t// It's better to apply background color as the innermost style. (http://dev.ckeditor.com/ticket/3599)\n\t\t\t\t\t\t// Except for \"unstylable elements\". (http://dev.ckeditor.com/ticket/6103)\n\t\t\t\t\t\treturn isUnstylable( element );\n\t\t\t\t\t} : function( element ) {\n\t\t\t\t\t\t// Fore color style must be applied inside links instead of around it. (http://dev.ckeditor.com/ticket/4772,http://dev.ckeditor.com/ticket/6908)\n\t\t\t\t\t\treturn !( element.is( 'a' ) || element.getElementsByTag( 'a' ).count() ) || isUnstylable( element );\n\t\t\t\t\t};\n\n\t\t\t\t\teditor.focus();\n\t\t\t\t\teditor.applyStyle( new CKEDITOR.style( colorStyle, { color: color } ) );\n\t\t\t\t\teditor.fire( 'saveSnapshot' );\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\tif ( config.colorButton_enableAutomatic !== false ) {\n\t\t\t\t// Render the \"Automatic\" button.\n\t\t\t\toutput.push( '' +\n\t\t\t\t\t\t'' +\n\t\t\t\t\t\t\t'' +\n\t\t\t\t\t\t\t\t'' +\n\t\t\t\t\t\t\t'' +\n\t\t\t\t\t\t'
', lang.auto, '
' +\n\t\t\t\t\t'
' );\n\t\t\t}\n\t\t\toutput.push( '' );\n\n\t\t\t// Render the color boxes.\n\t\t\tfor ( var i = 0; i < colors.length; i++ ) {\n\t\t\t\tif ( ( i % colorsPerRow ) === 0 )\n\t\t\t\t\toutput.push( '' );\n\n\t\t\t\tvar parts = colors[ i ].split( '/' ),\n\t\t\t\t\tcolorName = parts[ 0 ],\n\t\t\t\t\tcolorCode = parts[ 1 ] || colorName;\n\n\t\t\t\t// The data can be only a color code (without #) or colorName + color code\n\t\t\t\t// If only a color code is provided, then the colorName is the color with the hash\n\t\t\t\t// Convert the color from RGB to RRGGBB for better compatibility with IE and . See http://dev.ckeditor.com/ticket/5676\n\t\t\t\tif ( !parts[ 1 ] )\n\t\t\t\t\tcolorName = '#' + colorName.replace( /^(.)(.)(.)$/, '$1$1$2$2$3$3' );\n\n\t\t\t\tvar colorLabel = editor.lang.colorbutton.colors[ colorCode ] || colorCode;\n\t\t\t\toutput.push( '' );\n\t\t\t}\n\n\t\t\t// Render the \"More Colors\" button.\n\t\t\tif ( moreColorsEnabled ) {\n\t\t\t\toutput.push( '' +\n\t\t\t\t\t'' +\n\t\t\t\t\t\t'' ); // tr is later in the code.\n\t\t\t}\n\n\t\t\toutput.push( '
' +\n\t\t\t\t\t'' +\n\t\t\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t\t'
' +\n\t\t\t\t\t\t\t'', lang.more, '' +\n\t\t\t\t\t\t'
' );\n\n\t\t\treturn output.join( '' );\n\t\t}\n\n\t\tfunction isUnstylable( ele ) {\n\t\t\treturn ( ele.getAttribute( 'contentEditable' ) == 'false' ) || ele.getAttribute( 'data-nostyle' );\n\t\t}\n\n\t\t/*\n\t\t * Selects the specified color in the specified panel block.\n\t\t *\n\t\t * @private\n\t\t * @member CKEDITOR.plugins.colorbutton\n\t\t * @param {CKEDITOR.ui.panel.block} block\n\t\t * @param {String} color\n\t\t */\n\t\tfunction selectColor( block, color ) {\n\t\t\tvar items = block._.getItems();\n\n\t\t\tfor ( var i = 0; i < items.count(); i++ ) {\n\t\t\t\tvar item = items.getItem( i );\n\n\t\t\t\titem.removeAttribute( 'aria-selected' );\n\n\t\t\t\tif ( color && color == normalizeColor( item.getAttribute( 'data-value' ) ) ) {\n\t\t\t\t\titem.setAttribute( 'aria-selected', true );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t/*\n\t\t * Converts a CSS color value to an easily comparable form.\n\t\t *\n\t\t * @private\n\t\t * @member CKEDITOR.plugins.colorbutton\n\t\t * @param {String} color\n\t\t * @returns {String}\n\t\t */\n\t\tfunction normalizeColor( color ) {\n\t\t\treturn CKEDITOR.tools.convertRgbToHex( color || '' ).replace( /#/, '' ).toLowerCase();\n\t\t}\n\t}\n} );\n\n/**\n * Whether to enable the **More Colors** button in the color selectors.\n *\n * Read more in the [documentation](#!/guide/dev_colorbutton)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html).\n *\n *\t\tconfig.colorButton_enableMore = false;\n *\n * @cfg {Boolean} [colorButton_enableMore=true]\n * @member CKEDITOR.config\n */\n\n/**\n * Defines the colors to be displayed in the color selectors. This is a string\n * containing hexadecimal notation for HTML colors, without the `'#'` prefix.\n *\n * **Since 3.3:** A color name may optionally be defined by prefixing the entries with\n * a name and the slash character. For example, `'FontColor1/FF9900'` will be\n * displayed as the color `#FF9900` in the selector, but will be output as `'FontColor1'`.\n *\n * **Since 4.6.2:** The default color palette has changed. It contains fewer colors in more\n * pastel shades than the previous one.\n *\n * Read more in the [documentation](#!/guide/dev_colorbutton)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html).\n *\n *\t\t// Brazil colors only.\n *\t\tconfig.colorButton_colors = '00923E,F8C100,28166F';\n *\n *\t\tconfig.colorButton_colors = 'FontColor1/FF9900,FontColor2/0066CC,FontColor3/F00';\n *\n *\t\t// CKEditor color palette available before version 4.6.2.\n *\t\tconfig.colorButton_colors =\n *\t\t\t'000,800000,8B4513,2F4F4F,008080,000080,4B0082,696969,' +\n *\t\t\t'B22222,A52A2A,DAA520,006400,40E0D0,0000CD,800080,808080,' +\n *\t\t\t'F00,FF8C00,FFD700,008000,0FF,00F,EE82EE,A9A9A9,' +\n *\t\t\t'FFA07A,FFA500,FFFF00,00FF00,AFEEEE,ADD8E6,DDA0DD,D3D3D3,' +\n *\t\t\t'FFF0F5,FAEBD7,FFFFE0,F0FFF0,F0FFFF,F0F8FF,E6E6FA,FFF';\n *\n * @cfg {String} [colorButton_colors=see source]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.colorButton_colors = '1ABC9C,2ECC71,3498DB,9B59B6,4E5F70,F1C40F,' +\n\t'16A085,27AE60,2980B9,8E44AD,2C3E50,F39C12,' +\n\t'E67E22,E74C3C,ECF0F1,95A5A6,DDD,FFF,' +\n\t'D35400,C0392B,BDC3C7,7F8C8D,999,000';\n\n/**\n * Stores the style definition that applies the text foreground color.\n *\n * Read more in the [documentation](#!/guide/dev_colorbutton)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html).\n *\n *\t\t// This is actually the default value.\n *\t\tconfig.colorButton_foreStyle = {\n *\t\t\telement: 'span',\n *\t\t\tstyles: { color: '#(color)' }\n *\t\t};\n *\n * @cfg [colorButton_foreStyle=see source]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.colorButton_foreStyle = {\n\telement: 'span',\n\tstyles: { 'color': '#(color)' },\n\toverrides: [ {\n\t\telement: 'font', attributes: { 'color': null }\n\t} ]\n};\n\n/**\n * Stores the style definition that applies the text background color.\n *\n * Read more in the [documentation](#!/guide/dev_colorbutton)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html).\n *\n *\t\t// This is actually the default value.\n *\t\tconfig.colorButton_backStyle = {\n *\t\t\telement: 'span',\n *\t\t\tstyles: { 'background-color': '#(color)' }\n *\t\t};\n *\n * @cfg [colorButton_backStyle=see source]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.colorButton_backStyle = {\n\telement: 'span',\n\tstyles: { 'background-color': '#(color)' }\n};\n\n/**\n * Whether to enable the **Automatic** button in the color selectors.\n *\n * Read more in the [documentation](#!/guide/dev_colorbutton)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html).\n *\n *\t\tconfig.colorButton_enableAutomatic = false;\n *\n * @cfg {Boolean} [colorButton_enableAutomatic=true]\n * @member CKEDITOR.config\n */\n\n/**\n * Defines how many colors will be shown per row in the color selectors.\n *\n * Read more in the [documentation](#!/guide/dev_colorbutton)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/colorbutton.html).\n *\n *\t\tconfig.colorButton_colorsPerRow = 8;\n *\n * @since 4.6.2\n * @cfg {Number} [colorButton_colorsPerRow=6]\n * @member CKEDITOR.config\n */\n\n/**\n * Whether the plugin should convert `background` CSS properties with color only, to a `background-color` property,\n * allowing the [Color Button](http://ckeditor.com/addon/colorbutton) plugin to edit these styles.\n *\n *\t\tconfig.colorButton_normalizeBackground = false;\n *\n * @since 4.6.1\n * @cfg {Boolean} [colorButton_normalizeBackground=true]\n * @member CKEDITOR.config\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.plugins.colordialog = {\n\trequires: 'dialog',\n\t// jscs:disable maximumLineLength\n\t// jscs:enable maximumLineLength\n\tinit: function( editor ) {\n\t\tvar cmd = new CKEDITOR.dialogCommand( 'colordialog' );\n\t\tcmd.editorFocus = false;\n\n\t\teditor.addCommand( 'colordialog', cmd );\n\n\t\tCKEDITOR.dialog.add( 'colordialog', this.path + 'dialogs/colordialog.js' );\n\n\t\t/**\n\t\t * Open up color dialog and to receive the selected color.\n\t\t *\n\t\t * @param {Function} callback The callback when color dialog is closed\n\t\t * @param {String} callback.color The color value received if selected on the dialog.\n\t\t * @param [scope] The scope in which the callback will be bound.\n\t\t * @member CKEDITOR.editor\n\t\t */\n\t\teditor.getColorFromDialog = function( callback, scope ) {\n\t\t\tvar onClose = function( evt ) {\n\t\t\t\treleaseHandlers( this );\n\t\t\t\tvar color = evt.name == 'ok' ? this.getValueOf( 'picker', 'selectedColor' ) : null;\n\t\t\t\tcallback.call( scope, color );\n\t\t\t};\n\t\t\tvar releaseHandlers = function( dialog ) {\n\t\t\t\tdialog.removeListener( 'ok', onClose );\n\t\t\t\tdialog.removeListener( 'cancel', onClose );\n\t\t\t};\n\t\t\tvar bindToDialog = function( dialog ) {\n\t\t\t\tdialog.on( 'ok', onClose );\n\t\t\t\tdialog.on( 'cancel', onClose );\n\t\t\t};\n\n\t\t\teditor.execCommand( 'colordialog' );\n\n\t\t\tif ( editor._.storedDialogs && editor._.storedDialogs.colordialog )\n\t\t\t\tbindToDialog( editor._.storedDialogs.colordialog );\n\t\t\telse {\n\t\t\t\tCKEDITOR.on( 'dialogDefinition', function( e ) {\n\t\t\t\t\tif ( e.data.name != 'colordialog' )\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tvar definition = e.data.definition;\n\n\t\t\t\t\te.removeListener();\n\t\t\t\t\tdefinition.onLoad = CKEDITOR.tools.override( definition.onLoad,\n\t\t\t\t\t\tfunction( orginal ) {\n\t\t\t\t\t\t\treturn function() {\n\t\t\t\t\t\t\t\tbindToDialog( this );\n\t\t\t\t\t\t\t\tdefinition.onLoad = orginal;\n\t\t\t\t\t\t\t\tif ( typeof orginal == 'function' )\n\t\t\t\t\t\t\t\t\torginal.call( this );\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t}\n\t\t};\n\n\n\t}\n};\n\nCKEDITOR.plugins.add( 'colordialog', CKEDITOR.plugins.colordialog );\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.plugins.add( 'menu', {\n\trequires: 'floatpanel',\n\n\tbeforeInit: function( editor ) {\n\t\tvar groups = editor.config.menu_groups.split( ',' ),\n\t\t\tgroupsOrder = editor._.menuGroups = {},\n\t\t\tmenuItems = editor._.menuItems = {};\n\n\t\tfor ( var i = 0; i < groups.length; i++ )\n\t\t\tgroupsOrder[ groups[ i ] ] = i + 1;\n\n\t\t/**\n\t\t * Registers an item group to the editor context menu in order to make it\n\t\t * possible to associate it with menu items later.\n\t\t *\n\t\t * @param {String} name Specify a group name.\n\t\t * @param {Number} [order=100] Define the display sequence of this group\n\t\t * inside the menu. A smaller value gets displayed first.\n\t\t * @member CKEDITOR.editor\n\t\t */\n\t\teditor.addMenuGroup = function( name, order ) {\n\t\t\tgroupsOrder[ name ] = order || 100;\n\t\t};\n\n\t\t/**\n\t\t * Adds an item from the specified definition to the editor context menu.\n\t\t *\n\t\t * @method\n\t\t * @param {String} name The menu item name.\n\t\t * @param {Object} definition The menu item definition.\n\t\t * @member CKEDITOR.editor\n\t\t */\n\t\teditor.addMenuItem = function( name, definition ) {\n\t\t\tif ( groupsOrder[ definition.group ] )\n\t\t\t\tmenuItems[ name ] = new CKEDITOR.menuItem( this, name, definition );\n\t\t};\n\n\t\t/**\n\t\t * Adds one or more items from the specified definition object to the editor context menu.\n\t\t *\n\t\t * @method\n\t\t * @param {Object} definitions Object where keys are used as itemName and corresponding values as definition for a {@link #addMenuItem} call.\n\t\t * @member CKEDITOR.editor\n\t\t */\n\t\teditor.addMenuItems = function( definitions ) {\n\t\t\tfor ( var itemName in definitions ) {\n\t\t\t\tthis.addMenuItem( itemName, definitions[ itemName ] );\n\t\t\t}\n\t\t};\n\n\t\t/**\n\t\t * Retrieves a particular menu item definition from the editor context menu.\n\t\t *\n\t\t * @method\n\t\t * @param {String} name The name of the desired menu item.\n\t\t * @returns {Object}\n\t\t * @member CKEDITOR.editor\n\t\t */\n\t\teditor.getMenuItem = function( name ) {\n\t\t\treturn menuItems[ name ];\n\t\t};\n\n\t\t/**\n\t\t * Removes a particular menu item added before from the editor context menu.\n\t\t *\n\t\t * @since 3.6.1\n\t\t * @method\n\t\t * @param {String} name The name of the desired menu item.\n\t\t * @member CKEDITOR.editor\n\t\t */\n\t\teditor.removeMenuItem = function( name ) {\n\t\t\tdelete menuItems[ name ];\n\t\t};\n\t}\n} );\n\n( function() {\n\tvar menuItemSource = '' +\n\t\t'';\n\n\tmenuItemSource +=\n\t\t\t\t//'' +\n\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t\t'' +\n\t\t\t\t\t\t'{label}' +\n\t\t\t\t\t'' +\n\t\t\t\t\t'{shortcutHtml}' +\n\t\t\t\t\t'{arrowHtml}' +\n\t\t\t\t'' +\n\t\t\t'{ariaShortcut}';\n\n\tvar menuArrowSource = '' +\n\t\t\t\t'{label}' +\n\t\t\t'';\n\n\tvar menuShortcutSource = '' +\n\t\t\t\t'{shortcut}' +\n\t\t\t'';\n\n\tvar menuItemTpl = CKEDITOR.addTemplate( 'menuItem', menuItemSource ),\n\t\tmenuArrowTpl = CKEDITOR.addTemplate( 'menuArrow', menuArrowSource ),\n\t\tmenuShortcutTpl = CKEDITOR.addTemplate( 'menuShortcut', menuShortcutSource );\n\n\t/**\n\t * @class\n\t * @todo\n\t */\n\tCKEDITOR.menu = CKEDITOR.tools.createClass( {\n\t\t/**\n\t\t * @constructor\n\t\t */\n\t\t$: function( editor, definition ) {\n\t\t\tdefinition = this._.definition = definition || {};\n\t\t\tthis.id = CKEDITOR.tools.getNextId();\n\n\t\t\tthis.editor = editor;\n\t\t\tthis.items = [];\n\t\t\tthis._.listeners = [];\n\n\t\t\tthis._.level = definition.level || 1;\n\n\t\t\tvar panelDefinition = CKEDITOR.tools.extend( {}, definition.panel, {\n\t\t\t\tcss: [ CKEDITOR.skin.getPath( 'editor' ) ],\n\t\t\t\tlevel: this._.level - 1,\n\t\t\t\tblock: {}\n\t\t\t} );\n\n\t\t\tvar attrs = panelDefinition.block.attributes = ( panelDefinition.attributes || {} );\n\t\t\t// Provide default role of 'menu'.\n\t\t\t!attrs.role && ( attrs.role = 'menu' );\n\t\t\tthis._.panelDefinition = panelDefinition;\n\t\t},\n\n\t\t_: {\n\t\t\tonShow: function() {\n\t\t\t\tvar selection = this.editor.getSelection(),\n\t\t\t\t\tstart = selection && selection.getStartElement(),\n\t\t\t\t\tpath = this.editor.elementPath(),\n\t\t\t\t\tlisteners = this._.listeners;\n\n\t\t\t\tthis.removeAll();\n\t\t\t\t// Call all listeners, filling the list of items to be displayed.\n\t\t\t\tfor ( var i = 0; i < listeners.length; i++ ) {\n\t\t\t\t\tvar listenerItems = listeners[ i ]( start, selection, path );\n\n\t\t\t\t\tif ( listenerItems ) {\n\t\t\t\t\t\tfor ( var itemName in listenerItems ) {\n\t\t\t\t\t\t\tvar item = this.editor.getMenuItem( itemName );\n\n\t\t\t\t\t\t\tif ( item && ( !item.command || this.editor.getCommand( item.command ).state ) ) {\n\t\t\t\t\t\t\t\titem.state = listenerItems[ itemName ];\n\t\t\t\t\t\t\t\tthis.add( item );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tonClick: function( item ) {\n\t\t\t\tthis.hide();\n\n\t\t\t\tif ( item.onClick )\n\t\t\t\t\titem.onClick();\n\t\t\t\telse if ( item.command )\n\t\t\t\t\tthis.editor.execCommand( item.command );\n\t\t\t},\n\n\t\t\tonEscape: function( keystroke ) {\n\t\t\t\tvar parent = this.parent;\n\t\t\t\t// 1. If it's sub-menu, close it, with focus restored on this.\n\t\t\t\t// 2. In case of a top-menu, close it, with focus returned to page.\n\t\t\t\tif ( parent )\n\t\t\t\t\tparent._.panel.hideChild( 1 );\n\t\t\t\telse if ( keystroke == 27 )\n\t\t\t\t\tthis.hide( 1 );\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\tonHide: function() {\n\t\t\t\tthis.onHide && this.onHide();\n\t\t\t},\n\n\t\t\tshowSubMenu: function( index ) {\n\t\t\t\tvar menu = this._.subMenu,\n\t\t\t\t\titem = this.items[ index ],\n\t\t\t\t\tsubItemDefs = item.getItems && item.getItems();\n\n\t\t\t\t// If this item has no subitems, we just hide the submenu, if\n\t\t\t\t// available, and return back.\n\t\t\t\tif ( !subItemDefs ) {\n\t\t\t\t\t// Hide sub menu with focus returned.\n\t\t\t\t\tthis._.panel.hideChild( 1 );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Create the submenu, if not available, or clean the existing\n\t\t\t\t// one.\n\t\t\t\tif ( menu )\n\t\t\t\t\tmenu.removeAll();\n\t\t\t\telse {\n\t\t\t\t\tmenu = this._.subMenu = new CKEDITOR.menu( this.editor, CKEDITOR.tools.extend( {}, this._.definition, { level: this._.level + 1 }, true ) );\n\t\t\t\t\tmenu.parent = this;\n\t\t\t\t\tmenu._.onClick = CKEDITOR.tools.bind( this._.onClick, this );\n\t\t\t\t}\n\n\t\t\t\t// Add all submenu items to the menu.\n\t\t\t\tfor ( var subItemName in subItemDefs ) {\n\t\t\t\t\tvar subItem = this.editor.getMenuItem( subItemName );\n\t\t\t\t\tif ( subItem ) {\n\t\t\t\t\t\tsubItem.state = subItemDefs[ subItemName ];\n\t\t\t\t\t\tmenu.add( subItem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Get the element representing the current item.\n\t\t\t\tvar element = this._.panel.getBlock( this.id ).element.getDocument().getById( this.id + String( index ) );\n\n\t\t\t\t// Show the submenu.\n\t\t\t\t// This timeout is needed to give time for the sub-menu get\n\t\t\t\t// focus when JAWS is running. (http://dev.ckeditor.com/ticket/9844)\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\tmenu.show( element, 2 );\n\t\t\t\t}, 0 );\n\t\t\t}\n\t\t},\n\n\t\tproto: {\n\t\t\t/**\n\t\t\t * Adds an item.\n\t\t\t *\n\t\t\t * @param item\n\t\t\t */\n\t\t\tadd: function( item ) {\n\t\t\t\t// Later we may sort the items, but Array#sort is not stable in\n\t\t\t\t// some browsers, here we're forcing the original sequence with\n\t\t\t\t// 'order' attribute if it hasn't been assigned. (http://dev.ckeditor.com/ticket/3868)\n\t\t\t\tif ( !item.order )\n\t\t\t\t\titem.order = this.items.length;\n\n\t\t\t\tthis.items.push( item );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Removes all items.\n\t\t\t */\n\t\t\tremoveAll: function() {\n\t\t\t\tthis.items = [];\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Shows the menu in given location.\n\t\t\t *\n\t\t\t * @param {CKEDITOR.dom.element} offsetParent\n\t\t\t * @param {Number} [corner]\n\t\t\t * @param {Number} [offsetX]\n\t\t\t * @param {Number} [offsetY]\n\t\t\t */\n\t\t\tshow: function( offsetParent, corner, offsetX, offsetY ) {\n\t\t\t\t// Not for sub menu.\n\t\t\t\tif ( !this.parent ) {\n\t\t\t\t\tthis._.onShow();\n\t\t\t\t\t// Don't menu with zero items.\n\t\t\t\t\tif ( !this.items.length )\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tcorner = corner || ( this.editor.lang.dir == 'rtl' ? 2 : 1 );\n\n\t\t\t\tvar items = this.items,\n\t\t\t\t\teditor = this.editor,\n\t\t\t\t\tpanel = this._.panel,\n\t\t\t\t\telement = this._.element;\n\n\t\t\t\t// Create the floating panel for this menu.\n\t\t\t\tif ( !panel ) {\n\t\t\t\t\tpanel = this._.panel = new CKEDITOR.ui.floatPanel( this.editor, CKEDITOR.document.getBody(), this._.panelDefinition, this._.level );\n\n\t\t\t\t\tpanel.onEscape = CKEDITOR.tools.bind( function( keystroke ) {\n\t\t\t\t\t\tif ( this._.onEscape( keystroke ) === false )\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t}, this );\n\n\t\t\t\t\tpanel.onShow = function() {\n\t\t\t\t\t\t// Menu need CSS resets, compensate class name.\n\t\t\t\t\t\tvar holder = panel._.panel.getHolderElement();\n\t\t\t\t\t\tholder.getParent().addClass( 'cke' ).addClass( 'cke_reset_all' );\n\t\t\t\t\t};\n\n\t\t\t\t\tpanel.onHide = CKEDITOR.tools.bind( function() {\n\t\t\t\t\t\tthis._.onHide && this._.onHide();\n\t\t\t\t\t}, this );\n\n\t\t\t\t\t// Create an autosize block inside the panel.\n\t\t\t\t\tvar block = panel.addBlock( this.id, this._.panelDefinition.block );\n\t\t\t\t\tblock.autoSize = true;\n\n\t\t\t\t\tvar keys = block.keys;\n\t\t\t\t\tkeys[ 40 ] = 'next'; // ARROW-DOWN\n\t\t\t\t\tkeys[ 9 ] = 'next'; // TAB\n\t\t\t\t\tkeys[ 38 ] = 'prev'; // ARROW-UP\n\t\t\t\t\tkeys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB\n\t\t\t\t\tkeys[ ( editor.lang.dir == 'rtl' ? 37 : 39 ) ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // ARROW-RIGHT/ARROW-LEFT(rtl)\n\t\t\t\t\tkeys[ 32 ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // SPACE\n\t\t\t\t\tCKEDITOR.env.ie && ( keys[ 13 ] = 'mouseup' ); // Manage ENTER, since onclick is blocked in IE (http://dev.ckeditor.com/ticket/8041).\n\n\t\t\t\t\telement = this._.element = block.element;\n\n\t\t\t\t\tvar elementDoc = element.getDocument();\n\t\t\t\t\telementDoc.getBody().setStyle( 'overflow', 'hidden' );\n\t\t\t\t\telementDoc.getElementsByTag( 'html' ).getItem( 0 ).setStyle( 'overflow', 'hidden' );\n\n\t\t\t\t\tthis._.itemOverFn = CKEDITOR.tools.addFunction( function( index ) {\n\t\t\t\t\t\tclearTimeout( this._.showSubTimeout );\n\t\t\t\t\t\tthis._.showSubTimeout = CKEDITOR.tools.setTimeout( this._.showSubMenu, editor.config.menu_subMenuDelay || 400, this, [ index ] );\n\t\t\t\t\t}, this );\n\n\t\t\t\t\tthis._.itemOutFn = CKEDITOR.tools.addFunction( function() {\n\t\t\t\t\t\tclearTimeout( this._.showSubTimeout );\n\t\t\t\t\t}, this );\n\n\t\t\t\t\tthis._.itemClickFn = CKEDITOR.tools.addFunction( function( index ) {\n\t\t\t\t\t\tvar item = this.items[ index ];\n\n\t\t\t\t\t\tif ( item.state == CKEDITOR.TRISTATE_DISABLED ) {\n\t\t\t\t\t\t\tthis.hide( 1 );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( item.getItems )\n\t\t\t\t\t\t\tthis._.showSubMenu( index );\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tthis._.onClick( item );\n\t\t\t\t\t}, this );\n\t\t\t\t}\n\n\t\t\t\t// Put the items in the right order.\n\t\t\t\tsortItems( items );\n\n\t\t\t\t// Apply the editor mixed direction status to menu.\n\t\t\t\tvar path = editor.elementPath(),\n\t\t\t\t\tmixedDirCls = ( path && path.direction() != editor.lang.dir ) ? ' cke_mixed_dir_content' : '';\n\n\t\t\t\t// Build the HTML that composes the menu and its items.\n\t\t\t\tvar output = [ '
' ];\n\n\t\t\t\tvar length = items.length,\n\t\t\t\t\tlastGroup = length && items[ 0 ].group;\n\n\t\t\t\tfor ( var i = 0; i < length; i++ ) {\n\t\t\t\t\tvar item = items[ i ];\n\t\t\t\t\tif ( lastGroup != item.group ) {\n\t\t\t\t\t\toutput.push( '
' );\n\t\t\t\t\t\tlastGroup = item.group;\n\t\t\t\t\t}\n\n\t\t\t\t\titem.render( this, i, output );\n\t\t\t\t}\n\n\t\t\t\toutput.push( '
' );\n\n\t\t\t\t// Inject the HTML inside the panel.\n\t\t\t\telement.setHtml( output.join( '' ) );\n\n\t\t\t\tCKEDITOR.ui.fire( 'ready', this );\n\n\t\t\t\t// Show the panel.\n\t\t\t\tif ( this.parent )\n\t\t\t\t\tthis.parent._.panel.showAsChild( panel, this.id, offsetParent, corner, offsetX, offsetY );\n\t\t\t\telse\n\t\t\t\t\tpanel.showBlock( this.id, offsetParent, corner, offsetX, offsetY );\n\n\t\t\t\teditor.fire( 'menuShow', [ panel ] );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Adds a callback executed on opening the menu. Items\n\t\t\t * returned by that callback are added to the menu.\n\t\t\t *\n\t\t\t * @param {Function} listenerFn\n\t\t\t * @param {CKEDITOR.dom.element} listenerFn.startElement The selection start anchor element.\n\t\t\t * @param {CKEDITOR.dom.selection} listenerFn.selection The current selection.\n\t\t\t * @param {CKEDITOR.dom.elementPath} listenerFn.path The current elements path.\n\t\t\t * @param listenerFn.return Object (`commandName` => `state`) of items that should be added to the menu.\n\t\t\t */\n\t\t\taddListener: function( listenerFn ) {\n\t\t\t\tthis._.listeners.push( listenerFn );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Hides the menu.\n\t\t\t *\n\t\t\t * @param {Boolean} [returnFocus]\n\t\t\t */\n\t\t\thide: function( returnFocus ) {\n\t\t\t\tthis._.onHide && this._.onHide();\n\t\t\t\tthis._.panel && this._.panel.hide( returnFocus );\n\t\t\t}\n\t\t}\n\t} );\n\n\tfunction sortItems( items ) {\n\t\titems.sort( function( itemA, itemB ) {\n\t\t\tif ( itemA.group < itemB.group )\n\t\t\t\treturn -1;\n\t\t\telse if ( itemA.group > itemB.group )\n\t\t\t\treturn 1;\n\n\t\t\treturn itemA.order < itemB.order ? -1 : itemA.order > itemB.order ? 1 : 0;\n\t\t} );\n\t}\n\n\t/**\n\t * @class\n\t * @todo\n\t */\n\tCKEDITOR.menuItem = CKEDITOR.tools.createClass( {\n\t\t$: function( editor, name, definition ) {\n\t\t\tCKEDITOR.tools.extend( this, definition,\n\t\t\t// Defaults\n\t\t\t{\n\t\t\t\torder: 0,\n\t\t\t\tclassName: 'cke_menubutton__' + name\n\t\t\t} );\n\n\t\t\t// Transform the group name into its order number.\n\t\t\tthis.group = editor._.menuGroups[ this.group ];\n\n\t\t\tthis.editor = editor;\n\t\t\tthis.name = name;\n\t\t},\n\n\t\tproto: {\n\t\t\trender: function( menu, index, output ) {\n\t\t\t\tvar id = menu.id + String( index ),\n\t\t\t\t\tstate = ( typeof this.state == 'undefined' ) ? CKEDITOR.TRISTATE_OFF : this.state,\n\t\t\t\t\tariaChecked = '',\n\t\t\t\t\teditor = this.editor,\n\t\t\t\t\tkeystroke,\n\t\t\t\t\tcommand,\n\t\t\t\t\tshortcut;\n\n\t\t\t\tvar stateName = state == CKEDITOR.TRISTATE_ON ? 'on' : state == CKEDITOR.TRISTATE_DISABLED ? 'disabled' : 'off';\n\n\t\t\t\tif ( this.role in { menuitemcheckbox: 1, menuitemradio: 1 } )\n\t\t\t\t\tariaChecked = ' aria-checked=\"' + ( state == CKEDITOR.TRISTATE_ON ? 'true' : 'false' ) + '\"';\n\n\t\t\t\tvar hasSubMenu = this.getItems;\n\t\t\t\t// ltr: BLACK LEFT-POINTING POINTER\n\t\t\t\t// rtl: BLACK RIGHT-POINTING POINTER\n\t\t\t\tvar arrowLabel = '&#' + ( this.editor.lang.dir == 'rtl' ? '9668' : '9658' ) + ';';\n\n\t\t\t\tvar iconName = this.name;\n\t\t\t\tif ( this.icon && !( /\\./ ).test( this.icon ) )\n\t\t\t\t\ticonName = this.icon;\n\n\t\t\t\tif ( this.command ) {\n\t\t\t\t\tcommand = editor.getCommand( this.command );\n\t\t\t\t\tkeystroke = editor.getCommandKeystroke( command );\n\n\t\t\t\t\tif ( keystroke ) {\n\t\t\t\t\t\tshortcut = CKEDITOR.tools.keystrokeToString( editor.lang.common.keyboard, keystroke );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar params = {\n\t\t\t\t\tid: id,\n\t\t\t\t\tname: this.name,\n\t\t\t\t\ticonName: iconName,\n\t\t\t\t\tlabel: this.label,\n\t\t\t\t\tcls: this.className || '',\n\t\t\t\t\tstate: stateName,\n\t\t\t\t\thasPopup: hasSubMenu ? 'true' : 'false',\n\t\t\t\t\tdisabled: state == CKEDITOR.TRISTATE_DISABLED,\n\t\t\t\t\ttitle: this.label + ( shortcut ? ' (' + shortcut.display + ')' : '' ),\n\t\t\t\t\tariaShortcut: shortcut ? editor.lang.common.keyboardShortcut + ' ' + shortcut.aria : '',\n\t\t\t\t\thref: 'javascript:void(\\'' + ( this.label || '' ).replace( \"'\" + '' ) + '\\')', // jshint ignore:line\n\t\t\t\t\thoverFn: menu._.itemOverFn,\n\t\t\t\t\tmoveOutFn: menu._.itemOutFn,\n\t\t\t\t\tclickFn: menu._.itemClickFn,\n\t\t\t\t\tindex: index,\n\t\t\t\t\ticonStyle: CKEDITOR.skin.getIconStyle( iconName, ( this.editor.lang.dir == 'rtl' ), iconName == this.icon ? null : this.icon, this.iconOffset ),\n\t\t\t\t\tshortcutHtml: shortcut ? menuShortcutTpl.output( { shortcut: shortcut.display } ) : '',\n\t\t\t\t\tarrowHtml: hasSubMenu ? menuArrowTpl.output( { label: arrowLabel } ) : '',\n\t\t\t\t\trole: this.role ? this.role : 'menuitem',\n\t\t\t\t\tariaChecked: ariaChecked\n\t\t\t\t};\n\n\t\t\t\tmenuItemTpl.output( params, output );\n\t\t\t}\n\t\t}\n\t} );\n\n} )();\n\n\n/**\n * The amount of time, in milliseconds, the editor waits before displaying submenu\n * options when moving the mouse over options that contain submenus, like the\n * \"Cell Properties\" entry for tables.\n *\n *\t\t// Remove the submenu delay.\n *\t\tconfig.menu_subMenuDelay = 0;\n *\n * @cfg {Number} [menu_subMenuDelay=400]\n * @member CKEDITOR.config\n */\n\n/**\n * Fired when a menu is shown.\n *\n * @event menuShow\n * @member CKEDITOR.editor\n * @param {CKEDITOR.editor} editor This editor instance.\n * @param {CKEDITOR.ui.panel[]} data\n */\n\n/**\n * A comma separated list of items group names to be displayed in the context\n * menu. The order of items will reflect the order specified in this list if\n * no priority was defined in the groups.\n *\n *\t\tconfig.menu_groups = 'clipboard,table,anchor,link,image';\n *\n * @cfg {String} [menu_groups=see source]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.menu_groups = 'clipboard,' +\n\t'form,' +\n\t'tablecell,tablecellproperties,tablerow,tablecolumn,table,' +\n\t'anchor,link,image,flash,' +\n\t'checkbox,radio,textfield,hiddenfield,imagebutton,button,select,textarea,div';\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.plugins.add( 'contextmenu', {\n\trequires: 'menu',\n\n\t// jscs:disable maximumLineLength\n\t// jscs:enable maximumLineLength\n\n\t// Make sure the base class (CKEDITOR.menu) is loaded before it (http://dev.ckeditor.com/ticket/3318).\n\tonLoad: function() {\n\t\t/**\n\t\t * Class replacing the non-configurable native context menu with a configurable CKEditor's equivalent.\n\t\t *\n\t\t * @class\n\t\t * @extends CKEDITOR.menu\n\t\t */\n\t\tCKEDITOR.plugins.contextMenu = CKEDITOR.tools.createClass( {\n\t\t\tbase: CKEDITOR.menu,\n\n\t\t\t/**\n\t\t\t * Creates the CKEDITOR.plugins.contextMenu class instance.\n\t\t\t *\n\t\t\t * @constructor\n\t\t\t * @param {CKEDITOR.editor} editor\n\t\t\t */\n\t\t\t$: function( editor ) {\n\t\t\t\tthis.base.call( this, editor, {\n\t\t\t\t\tpanel: {\n\t\t\t\t\t\tclassName: 'cke_menu_panel',\n\t\t\t\t\t\tattributes: {\n\t\t\t\t\t\t\t'aria-label': editor.lang.contextmenu.options\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\tproto: {\n\t\t\t\t/**\n\t\t\t\t * Starts watching on native context menu triggers (Option key, right click) on the given element.\n\t\t\t\t *\n\t\t\t\t * @param {CKEDITOR.dom.element} element\n\t\t\t\t * @param {Boolean} [nativeContextMenuOnCtrl] Whether to open native context menu if the\n\t\t\t\t * Ctrl key is held on opening the context menu. See {@link CKEDITOR.config#browserContextMenuOnCtrl}.\n\t\t\t\t */\n\t\t\t\taddTarget: function( element, nativeContextMenuOnCtrl ) {\n\t\t\t\t\telement.on( 'contextmenu', function( event ) {\n\t\t\t\t\t\tvar domEvent = event.data,\n\t\t\t\t\t\t\tisCtrlKeyDown =\n\t\t\t\t\t\t\t\t// Safari on Windows always show 'ctrlKey' as true in 'contextmenu' event,\n\t\t\t\t\t\t\t\t// which make this property unreliable. (http://dev.ckeditor.com/ticket/4826)\n\t\t\t\t\t\t\t\t( CKEDITOR.env.webkit ? holdCtrlKey : ( CKEDITOR.env.mac ? domEvent.$.metaKey : domEvent.$.ctrlKey ) );\n\n\t\t\t\t\t\tif ( nativeContextMenuOnCtrl && isCtrlKeyDown )\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// Cancel the browser context menu.\n\t\t\t\t\t\tdomEvent.preventDefault();\n\n\t\t\t\t\t\t// Fix selection when non-editable element in Webkit/Blink (Mac) (http://dev.ckeditor.com/ticket/11306).\n\t\t\t\t\t\tif ( CKEDITOR.env.mac && CKEDITOR.env.webkit ) {\n\t\t\t\t\t\t\tvar editor = this.editor,\n\t\t\t\t\t\t\t\tcontentEditableParent = new CKEDITOR.dom.elementPath( domEvent.getTarget(), editor.editable() ).contains( function( el ) {\n\t\t\t\t\t\t\t\t\t// Return when non-editable or nested editable element is found.\n\t\t\t\t\t\t\t\t\treturn el.hasAttribute( 'contenteditable' );\n\t\t\t\t\t\t\t\t}, true ); // Exclude editor's editable.\n\n\t\t\t\t\t\t\t// Fake selection for non-editables only (to exclude nested editables).\n\t\t\t\t\t\t\tif ( contentEditableParent && contentEditableParent.getAttribute( 'contenteditable' ) == 'false' )\n\t\t\t\t\t\t\t\teditor.getSelection().fake( contentEditableParent );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar doc = domEvent.getTarget().getDocument(),\n\t\t\t\t\t\t\toffsetParent = domEvent.getTarget().getDocument().getDocumentElement(),\n\t\t\t\t\t\t\tfromFrame = !doc.equals( CKEDITOR.document ),\n\t\t\t\t\t\t\tscroll = doc.getWindow().getScrollPosition(),\n\t\t\t\t\t\t\toffsetX = fromFrame ? domEvent.$.clientX : domEvent.$.pageX || scroll.x + domEvent.$.clientX,\n\t\t\t\t\t\t\toffsetY = fromFrame ? domEvent.$.clientY : domEvent.$.pageY || scroll.y + domEvent.$.clientY;\n\n\t\t\t\t\t\tCKEDITOR.tools.setTimeout( function() {\n\t\t\t\t\t\t\tthis.open( offsetParent, null, offsetX, offsetY );\n\n\t\t\t\t\t\t\t// IE needs a short while to allow selection change before opening menu. (http://dev.ckeditor.com/ticket/7908)\n\t\t\t\t\t\t}, CKEDITOR.env.ie ? 200 : 0, this );\n\t\t\t\t\t}, this );\n\n\t\t\t\t\tif ( CKEDITOR.env.webkit ) {\n\t\t\t\t\t\tvar holdCtrlKey,\n\t\t\t\t\t\t\tonKeyDown = function( event ) {\n\t\t\t\t\t\t\t\tholdCtrlKey = CKEDITOR.env.mac ? event.data.$.metaKey : event.data.$.ctrlKey;\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tresetOnKeyUp = function() {\n\t\t\t\t\t\t\t\tholdCtrlKey = 0;\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\telement.on( 'keydown', onKeyDown );\n\t\t\t\t\t\telement.on( 'keyup', resetOnKeyUp );\n\t\t\t\t\t\telement.on( 'contextmenu', resetOnKeyUp );\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t/**\n\t\t\t\t * Opens the context menu in the given location. See the {@link CKEDITOR.menu#show} method.\n\t\t\t\t *\n\t\t\t\t * @param {CKEDITOR.dom.element} offsetParent\n\t\t\t\t * @param {Number} [corner]\n\t\t\t\t * @param {Number} [offsetX]\n\t\t\t\t * @param {Number} [offsetY]\n\t\t\t\t */\n\t\t\t\topen: function( offsetParent, corner, offsetX, offsetY ) {\n\t\t\t\t\tif ( this.editor.config.enableContextMenu === false ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.editor.focus();\n\t\t\t\t\toffsetParent = offsetParent || CKEDITOR.document.getDocumentElement();\n\n\t\t\t\t\t// http://dev.ckeditor.com/ticket/9362: Force selection check to update commands' states in the new context.\n\t\t\t\t\tthis.editor.selectionChange( 1 );\n\n\t\t\t\t\tthis.show( offsetParent, corner, offsetX, offsetY );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tbeforeInit: function( editor ) {\n\t\t/**\n\t\t * @readonly\n\t\t * @property {CKEDITOR.plugins.contextMenu} contextMenu\n\t\t * @member CKEDITOR.editor\n\t\t */\n\t\tvar contextMenu = editor.contextMenu = new CKEDITOR.plugins.contextMenu( editor );\n\n\t\teditor.on( 'contentDom', function() {\n\t\t\tcontextMenu.addTarget( editor.editable(), editor.config.browserContextMenuOnCtrl !== false );\n\t\t} );\n\n\t\teditor.addCommand( 'contextMenu', {\n\t\t\texec: function() {\n\t\t\t\teditor.contextMenu.open( editor.document.getBody() );\n\t\t\t}\n\t\t} );\n\n\t\teditor.setKeystroke( CKEDITOR.SHIFT + 121 /*F10*/, 'contextMenu' );\n\t\teditor.setKeystroke( CKEDITOR.CTRL + CKEDITOR.SHIFT + 121 /*F10*/, 'contextMenu' );\n\t}\n} );\n\n/**\n * Whether to show the browser native context menu when the Ctrl or\n * Meta (Mac) key is pressed on opening the context menu with the\n * right mouse button click or the Menu key.\n *\n *\t\tconfig.browserContextMenuOnCtrl = false;\n *\n * @since 3.0.2\n * @cfg {Boolean} [browserContextMenuOnCtrl=true]\n * @member CKEDITOR.config\n */\n\n/**\n * Whether to enable the context menu. Regardless of the setting the [Context Menu](http://ckeditor.com/addon/contextmenu)\n * plugin is still loaded.\n *\n *\t\tconfig.enableContextMenu = false;\n *\n * @since 4.7.0\n * @cfg {Boolean} [enableContextMenu=true]\n * @member CKEDITOR.config\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview The \"elementspath\" plugin. It shows all elements in the DOM\n *\t\tparent tree relative to the current selection in the editing area.\n */\n\n( function() {\n\tvar commands = {\n\t\ttoolbarFocus: {\n\t\t\teditorFocus: false,\n\t\t\treadOnly: 1,\n\t\t\texec: function( editor ) {\n\t\t\t\tvar idBase = editor._.elementsPath.idBase;\n\t\t\t\tvar element = CKEDITOR.document.getById( idBase + '0' );\n\n\t\t\t\t// Make the first button focus accessible for IE. (http://dev.ckeditor.com/ticket/3417)\n\t\t\t\t// Adobe AIR instead need while of delay.\n\t\t\t\telement && element.focus( CKEDITOR.env.ie || CKEDITOR.env.air );\n\t\t\t}\n\t\t}\n\t};\n\n\tvar emptyHtml = ' ';\n\n\tvar extra = '';\n\n\t// Some browsers don't cancel key events in the keydown but in the\n\t// keypress.\n\t// TODO: Check if really needed.\n\tif ( CKEDITOR.env.gecko && CKEDITOR.env.mac )\n\t\textra += ' onkeypress=\"return false;\"';\n\n\t// With Firefox, we need to force the button to redraw, otherwise it\n\t// will remain in the focus state.\n\tif ( CKEDITOR.env.gecko )\n\t\textra += ' onblur=\"this.style.cssText = this.style.cssText;\"';\n\n\tvar pathItemTpl = CKEDITOR.addTemplate( 'pathItem', '' +\n\t\t'{text}' +\n\t\t'' );\n\n\tCKEDITOR.plugins.add( 'elementspath', {\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\t\tinit: function( editor ) {\n\t\t\teditor._.elementsPath = {\n\t\t\t\tidBase: 'cke_elementspath_' + CKEDITOR.tools.getNextNumber() + '_',\n\t\t\t\tfilters: []\n\t\t\t};\n\n\t\t\teditor.on( 'uiSpace', function( event ) {\n\t\t\t\tif ( event.data.space == 'bottom' )\n\t\t\t\t\tinitElementsPath( editor, event.data );\n\t\t\t} );\n\t\t}\n\t} );\n\n\tfunction initElementsPath( editor, bottomSpaceData ) {\n\t\tvar spaceId = editor.ui.spaceId( 'path' ),\n\t\t\tspaceElement,\n\t\t\tgetSpaceElement = function() {\n\t\t\t\tif ( !spaceElement )\n\t\t\t\t\tspaceElement = CKEDITOR.document.getById( spaceId );\n\t\t\t\treturn spaceElement;\n\t\t\t},\n\t\t\telementsPath = editor._.elementsPath,\n\t\t\tidBase = elementsPath.idBase;\n\n\t\tbottomSpaceData.html += '' + editor.lang.elementspath.eleLabel + '' +\n\t\t\t'' + emptyHtml + '';\n\n\t\t// Register the ui element to the focus manager.\n\t\teditor.on( 'uiReady', function() {\n\t\t\tvar element = editor.ui.space( 'path' );\n\t\t\telement && editor.focusManager.add( element, 1 );\n\t\t} );\n\n\t\tfunction onClick( elementIndex ) {\n\t\t\tvar element = elementsPath.list[ elementIndex ],\n\t\t\t\tselection;\n\n\t\t\tif ( element.equals( editor.editable() ) || element.getAttribute( 'contenteditable' ) == 'true' ) {\n\t\t\t\tvar range = editor.createRange();\n\t\t\t\trange.selectNodeContents( element );\n\n\t\t\t\tselection = range.select();\n\t\t\t} else {\n\t\t\t\tselection = editor.getSelection();\n\t\t\t\tselection.selectElement( element );\n\t\t\t}\n\n\t\t\t// Explicitly fire selectionChange when clicking on an element path button. (http://dev.ckeditor.com/ticket/13548)\n\t\t\tif ( CKEDITOR.env.ie ) {\n\t\t\t\teditor.fire( 'selectionChange', { selection: selection, path: new CKEDITOR.dom.elementPath( element ) } );\n\t\t\t}\n\n\t\t\t// It is important to focus() *after* the above selection\n\t\t\t// manipulation, otherwise Firefox will have troubles. http://dev.ckeditor.com/ticket/10119\n\t\t\teditor.focus();\n\t\t}\n\n\t\telementsPath.onClick = onClick;\n\n\t\tvar onClickHanlder = CKEDITOR.tools.addFunction( onClick ),\n\t\t\tonKeyDownHandler = CKEDITOR.tools.addFunction( function( elementIndex, ev ) {\n\t\t\t\tvar idBase = elementsPath.idBase,\n\t\t\t\t\telement;\n\n\t\t\t\tev = new CKEDITOR.dom.event( ev );\n\n\t\t\t\tvar rtl = editor.lang.dir == 'rtl';\n\t\t\t\tswitch ( ev.getKeystroke() ) {\n\t\t\t\t\tcase rtl ? 39 : 37: // LEFT-ARROW\n\t\t\t\t\tcase 9: // TAB\n\t\t\t\t\t\telement = CKEDITOR.document.getById( idBase + ( elementIndex + 1 ) );\n\t\t\t\t\t\tif ( !element )\n\t\t\t\t\t\t\telement = CKEDITOR.document.getById( idBase + '0' );\n\t\t\t\t\t\telement.focus();\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\tcase rtl ? 37 : 39: // RIGHT-ARROW\n\t\t\t\t\tcase CKEDITOR.SHIFT + 9: // SHIFT + TAB\n\t\t\t\t\t\telement = CKEDITOR.document.getById( idBase + ( elementIndex - 1 ) );\n\t\t\t\t\t\tif ( !element )\n\t\t\t\t\t\t\telement = CKEDITOR.document.getById( idBase + ( elementsPath.list.length - 1 ) );\n\t\t\t\t\t\telement.focus();\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\tcase 27: // ESC\n\t\t\t\t\t\teditor.focus();\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\tcase 13: // ENTER\t// Opera\n\t\t\t\t\tcase 32: // SPACE\n\t\t\t\t\t\tonClick( elementIndex );\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t} );\n\n\t\teditor.on( 'selectionChange', function() {\n\t\t\tvar html = [],\n\t\t\t\telementsList = elementsPath.list = [],\n\t\t\t\tnamesList = [],\n\t\t\t\tfilters = elementsPath.filters,\n\t\t\t\tisContentEditable = true,\n\n\t\t\t\t// Use elementPath to consider children of editable only (http://dev.ckeditor.com/ticket/11124).\n\t\t\t\telementsChain = editor.elementPath().elements,\n\t\t\t\tname;\n\n\t\t\t// Starts iteration from body element, skipping html.\n\t\t\tfor ( var j = elementsChain.length; j--; ) {\n\t\t\t\tvar element = elementsChain[ j ],\n\t\t\t\t\tignore = 0;\n\n\t\t\t\tif ( element.data( 'cke-display-name' ) )\n\t\t\t\t\tname = element.data( 'cke-display-name' );\n\t\t\t\telse if ( element.data( 'cke-real-element-type' ) )\n\t\t\t\t\tname = element.data( 'cke-real-element-type' );\n\t\t\t\telse\n\t\t\t\t\tname = element.getName();\n\n\t\t\t\tisContentEditable = element.hasAttribute( 'contenteditable' ) ?\n\t\t\t\t\telement.getAttribute( 'contenteditable' ) == 'true' : isContentEditable;\n\n\t\t\t\t// If elem is non-contenteditable, and it's not specifying contenteditable\n\t\t\t\t// attribute - then elem should be ignored.\n\t\t\t\tif ( !isContentEditable && !element.hasAttribute( 'contenteditable' ) )\n\t\t\t\t\tignore = 1;\n\n\t\t\t\tfor ( var i = 0; i < filters.length; i++ ) {\n\t\t\t\t\tvar ret = filters[ i ]( element, name );\n\t\t\t\t\tif ( ret === false ) {\n\t\t\t\t\t\tignore = 1;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tname = ret || name;\n\t\t\t\t}\n\n\t\t\t\tif ( !ignore ) {\n\t\t\t\t\telementsList.unshift( element );\n\t\t\t\t\tnamesList.unshift( name );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( var iterationLimit = elementsList.length, index = 0; index < iterationLimit; index++ ) {\n\t\t\t\tname = namesList[ index ];\n\t\t\t\tvar label = editor.lang.elementspath.eleTitle.replace( /%1/, name ),\n\t\t\t\t\titem = pathItemTpl.output( {\n\t\t\t\t\t\tid: idBase + index,\n\t\t\t\t\t\tlabel: label,\n\t\t\t\t\t\ttext: name,\n\t\t\t\t\t\tjsTitle: 'javascript:void(\\'' + name + '\\')', // jshint ignore:line\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\tkeyDownFn: onKeyDownHandler,\n\t\t\t\t\t\tclickFn: onClickHanlder\n\t\t\t\t\t} );\n\n\t\t\t\thtml.unshift( item );\n\t\t\t}\n\n\t\t\tvar space = getSpaceElement();\n\t\t\tspace.setHtml( html.join( '' ) + emptyHtml );\n\t\t\teditor.fire( 'elementsPathUpdate', { space: space } );\n\t\t} );\n\n\t\tfunction empty() {\n\t\t\tspaceElement && spaceElement.setHtml( emptyHtml );\n\t\t\tdelete elementsPath.list;\n\t\t}\n\n\t\teditor.on( 'readOnly', empty );\n\t\teditor.on( 'contentDomUnload', empty );\n\n\t\teditor.addCommand( 'elementsPathFocus', commands.toolbarFocus );\n\t\teditor.setKeystroke( CKEDITOR.ALT + 122 /*F11*/, 'elementsPathFocus' );\n\t}\n} )();\n\n/**\n * Fired when the contents of the elementsPath are changed.\n *\n * @event elementsPathUpdate\n * @member CKEDITOR.editor\n * @param {CKEDITOR.editor} editor This editor instance.\n * @param data\n * @param {CKEDITOR.dom.element} data.space The elementsPath container.\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n( function() {\n\tCKEDITOR.plugins.add( 'enterkey', {\n\t\tinit: function( editor ) {\n\t\t\teditor.addCommand( 'enter', {\n\t\t\t\tmodes: { wysiwyg: 1 },\n\t\t\t\teditorFocus: false,\n\t\t\t\texec: function( editor ) {\n\t\t\t\t\tenter( editor );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\teditor.addCommand( 'shiftEnter', {\n\t\t\t\tmodes: { wysiwyg: 1 },\n\t\t\t\teditorFocus: false,\n\t\t\t\texec: function( editor ) {\n\t\t\t\t\tshiftEnter( editor );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\teditor.setKeystroke( [\n\t\t\t\t[ 13, 'enter' ],\n\t\t\t\t[ CKEDITOR.SHIFT + 13, 'shiftEnter' ]\n\t\t\t] );\n\t\t}\n\t} );\n\n\tvar whitespaces = CKEDITOR.dom.walker.whitespaces(),\n\t\tbookmark = CKEDITOR.dom.walker.bookmark();\n\n\tCKEDITOR.plugins.enterkey = {\n\t\tenterBlock: function( editor, mode, range, forceMode ) {\n\t\t\t// Get the range for the current selection.\n\t\t\trange = range || getRange( editor );\n\n\t\t\t// We may not have valid ranges to work on, like when inside a\n\t\t\t// contenteditable=false element.\n\t\t\tif ( !range )\n\t\t\t\treturn;\n\n\t\t\t// When range is in nested editable, we have to replace range with this one,\n\t\t\t// which have root property set to closest editable, to make auto paragraphing work. (http://dev.ckeditor.com/ticket/12162)\n\t\t\trange = replaceRangeWithClosestEditableRoot( range );\n\n\t\t\tvar doc = range.document;\n\n\t\t\tvar atBlockStart = range.checkStartOfBlock(),\n\t\t\t\tatBlockEnd = range.checkEndOfBlock(),\n\t\t\t\tpath = editor.elementPath( range.startContainer ),\n\t\t\t\tblock = path.block,\n\n\t\t\t\t// Determine the block element to be used.\n\t\t\t\tblockTag = ( mode == CKEDITOR.ENTER_DIV ? 'div' : 'p' ),\n\n\t\t\t\tnewBlock;\n\n\t\t\t// Exit the list when we're inside an empty list item block. (http://dev.ckeditor.com/ticket/5376)\n\t\t\tif ( atBlockStart && atBlockEnd ) {\n\t\t\t\t// Exit the list when we're inside an empty list item block. (http://dev.ckeditor.com/ticket/5376)\n\t\t\t\tif ( block && ( block.is( 'li' ) || block.getParent().is( 'li' ) ) ) {\n\t\t\t\t\t// Make sure to point to the li when dealing with empty list item.\n\t\t\t\t\tif ( !block.is( 'li' ) )\n\t\t\t\t\t\tblock = block.getParent();\n\n\t\t\t\t\tvar blockParent = block.getParent(),\n\t\t\t\t\t\tblockGrandParent = blockParent.getParent(),\n\n\t\t\t\t\t\tfirstChild = !block.hasPrevious(),\n\t\t\t\t\t\tlastChild = !block.hasNext(),\n\n\t\t\t\t\t\tselection = editor.getSelection(),\n\t\t\t\t\t\tbookmarks = selection.createBookmarks(),\n\n\t\t\t\t\t\torgDir = block.getDirection( 1 ),\n\t\t\t\t\t\tclassName = block.getAttribute( 'class' ),\n\t\t\t\t\t\tstyle = block.getAttribute( 'style' ),\n\t\t\t\t\t\tdirLoose = blockGrandParent.getDirection( 1 ) != orgDir,\n\n\t\t\t\t\t\tenterMode = editor.enterMode,\n\t\t\t\t\t\tneedsBlock = enterMode != CKEDITOR.ENTER_BR || dirLoose || style || className,\n\n\t\t\t\t\t\tchild;\n\n\t\t\t\t\tif ( blockGrandParent.is( 'li' ) ) {\n\n\t\t\t\t\t\t// If block is the first or the last child of the parent\n\t\t\t\t\t\t// list, degrade it and move to the outer list:\n\t\t\t\t\t\t// before the parent list if block is first child and after\n\t\t\t\t\t\t// the parent list if block is the last child, respectively.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//
    =>
      \n\t\t\t\t\t\t//
    • =>
    • \n\t\t\t\t\t\t//
        =>
          \n\t\t\t\t\t\t//
        • x
        • =>
        • x
        • \n\t\t\t\t\t\t//
        • ^
        • =>
        \n\t\t\t\t\t\t//
      =>
    • \n\t\t\t\t\t\t// =>
    • ^
    • \n\t\t\t\t\t\t//
    =>
\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// AND\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//
    =>
      \n\t\t\t\t\t\t//
    • =>
    • ^
    • \n\t\t\t\t\t\t//
        =>
      • \n\t\t\t\t\t\t//
      • ^
      • =>
          \n\t\t\t\t\t\t//
        • x
        • =>
        • x
        • \n\t\t\t\t\t\t//
        =>
      \n\t\t\t\t\t\t// => \n\t\t\t\t\t\t//
    =>
\n\n\t\t\t\t\t\tif ( firstChild || lastChild ) {\n\n\t\t\t\t\t\t\t// If it's only child, we don't want to keep perent ul anymore.\n\t\t\t\t\t\t\tif ( firstChild && lastChild ) {\n\t\t\t\t\t\t\t\tblockParent.remove();\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tblock[lastChild ? 'insertAfter' : 'insertBefore']( blockGrandParent );\n\n\t\t\t\t\t\t\t// If the empty block is neither first nor last child\n\t\t\t\t\t\t\t// then split the list and the block as an element\n\t\t\t\t\t\t\t// of outer list.\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// =>
    \n\t\t\t\t\t\t\t// =>
  • \n\t\t\t\t\t\t\t//
      =>
        \n\t\t\t\t\t\t\t//
      • =>
      • x
      • \n\t\t\t\t\t\t\t//
          =>
        \n\t\t\t\t\t\t\t//
      • x
      • => \n\t\t\t\t\t\t\t//
      • ^
      • =>
      • ^
      • \n\t\t\t\t\t\t\t//
      • y
      • =>
      • \n\t\t\t\t\t\t\t//
      =>
        \n\t\t\t\t\t\t\t// =>
      • y
      • \n\t\t\t\t\t\t\t//
      =>
    \n\t\t\t\t\t\t\t// =>
  • \n\t\t\t\t\t\t\t// =>
\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tblock.breakParent( blockGrandParent );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telse if ( !needsBlock ) {\n\t\t\t\t\t\tblock.appendBogus( true );\n\n\t\t\t\t\t\t// If block is the first or last child of the parent\n\t\t\t\t\t\t// list, move all block's children out of the list:\n\t\t\t\t\t\t// before the list if block is first child and after the list\n\t\t\t\t\t\t// if block is the last child, respectively.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//
    =>
      \n\t\t\t\t\t\t//
    • x
    • =>
    • x
    • \n\t\t\t\t\t\t//
    • ^
    • =>
    \n\t\t\t\t\t\t//
=> ^\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// AND\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//
    => ^\n\t\t\t\t\t\t//
  • ^
  • =>
      \n\t\t\t\t\t\t//
    • x
    • =>
    • x
    • \n\t\t\t\t\t\t//
    =>
\n\n\t\t\t\t\t\tif ( firstChild || lastChild ) {\n\t\t\t\t\t\t\twhile ( ( child = block[ firstChild ? 'getFirst' : 'getLast' ]() ) )\n\t\t\t\t\t\t\t\tchild[ firstChild ? 'insertBefore' : 'insertAfter' ]( blockParent );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If the empty block is neither first nor last child\n\t\t\t\t\t\t// then split the list and put all the block contents\n\t\t\t\t\t\t// between two lists.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//
    =>
      \n\t\t\t\t\t\t//
    • x
    • =>
    • x
    • \n\t\t\t\t\t\t//
    • ^
    • =>
    \n\t\t\t\t\t\t//
  • y
  • => ^\n\t\t\t\t\t\t//
=>
    \n\t\t\t\t\t\t// =>
  • y
  • \n\t\t\t\t\t\t// =>
\n\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tblock.breakParent( blockParent );\n\n\t\t\t\t\t\t\twhile ( ( child = block.getLast() ) )\n\t\t\t\t\t\t\t\tchild.insertAfter( blockParent );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tblock.remove();\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Original path block is the list item, create new block for the list item content.\n\t\t\t\t\t\tif ( path.block.is( 'li' ) ) {\n\t\t\t\t\t\t\t// Use
block for ENTER_BR and ENTER_DIV.\n\t\t\t\t\t\t\tnewBlock = doc.createElement( mode == CKEDITOR.ENTER_P ? 'p' : 'div' );\n\n\t\t\t\t\t\t\tif ( dirLoose )\n\t\t\t\t\t\t\t\tnewBlock.setAttribute( 'dir', orgDir );\n\n\t\t\t\t\t\t\tstyle && newBlock.setAttribute( 'style', style );\n\t\t\t\t\t\t\tclassName && newBlock.setAttribute( 'class', className );\n\n\t\t\t\t\t\t\t// Move all the child nodes to the new block.\n\t\t\t\t\t\t\tblock.moveChildren( newBlock );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// The original path block is not a list item, just copy the block to out side of the list.\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tnewBlock = path.block;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If block is the first or last child of the parent\n\t\t\t\t\t\t// list, move it out of the list:\n\t\t\t\t\t\t// before the list if block is first child and after the list\n\t\t\t\t\t\t// if block is the last child, respectively.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//
    =>
      \n\t\t\t\t\t\t//
    • x
    • =>
    • x
    • \n\t\t\t\t\t\t//
    • ^
    • =>
    \n\t\t\t\t\t\t//
=>

^

\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// AND\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//
    =>

    ^

    \n\t\t\t\t\t\t//
  • ^
  • =>
      \n\t\t\t\t\t\t//
    • x
    • =>
    • x
    • \n\t\t\t\t\t\t//
    =>
\n\n\t\t\t\t\t\tif ( firstChild || lastChild )\n\t\t\t\t\t\t\tnewBlock[ firstChild ? 'insertBefore' : 'insertAfter' ]( blockParent );\n\n\t\t\t\t\t\t// If the empty block is neither first nor last child\n\t\t\t\t\t\t// then split the list and put the new block between\n\t\t\t\t\t\t// two lists.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// =>
    \n\t\t\t\t\t\t//
      =>
    • x
    • \n\t\t\t\t\t\t//
    • x
    • =>
    \n\t\t\t\t\t\t//
  • ^
  • =>

    ^

    \n\t\t\t\t\t\t//
  • y
  • =>
      \n\t\t\t\t\t\t//
    =>
  • y
  • \n\t\t\t\t\t\t// =>
\n\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tblock.breakParent( blockParent );\n\t\t\t\t\t\t\tnewBlock.insertAfter( blockParent );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tblock.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\tselection.selectBookmarks( bookmarks );\n\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tif ( block && block.getParent().is( 'blockquote' ) ) {\n\t\t\t\t\tblock.breakParent( block.getParent() );\n\n\t\t\t\t\t// If we were at the start of
, there will be an empty element before it now.\n\t\t\t\t\tif ( !block.getPrevious().getFirst( CKEDITOR.dom.walker.invisible( 1 ) ) )\n\t\t\t\t\t\tblock.getPrevious().remove();\n\n\t\t\t\t\t// If we were at the end of
, there will be an empty element after it now.\n\t\t\t\t\tif ( !block.getNext().getFirst( CKEDITOR.dom.walker.invisible( 1 ) ) )\n\t\t\t\t\t\tblock.getNext().remove();\n\n\t\t\t\t\trange.moveToElementEditStart( block );\n\t\t\t\t\trange.select();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Don't split
 if we're in the middle of it, act as shift enter key.\n\t\t\telse if ( block && block.is( 'pre' ) ) {\n\t\t\t\tif ( !atBlockEnd ) {\n\t\t\t\t\tenterBr( editor, mode, range, forceMode );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Split the range.\n\t\t\tvar splitInfo = range.splitBlock( blockTag );\n\n\t\t\tif ( !splitInfo )\n\t\t\t\treturn;\n\n\t\t\t// Get the current blocks.\n\t\t\tvar previousBlock = splitInfo.previousBlock,\n\t\t\t\tnextBlock = splitInfo.nextBlock;\n\n\t\t\tvar isStartOfBlock = splitInfo.wasStartOfBlock,\n\t\t\t\tisEndOfBlock = splitInfo.wasEndOfBlock;\n\n\t\t\tvar node;\n\n\t\t\t// If this is a block under a list item, split it as well. (http://dev.ckeditor.com/ticket/1647)\n\t\t\tif ( nextBlock ) {\n\t\t\t\tnode = nextBlock.getParent();\n\t\t\t\tif ( node.is( 'li' ) ) {\n\t\t\t\t\tnextBlock.breakParent( node );\n\t\t\t\t\tnextBlock.move( nextBlock.getNext(), 1 );\n\t\t\t\t}\n\t\t\t} else if ( previousBlock && ( node = previousBlock.getParent() ) && node.is( 'li' ) ) {\n\t\t\t\tpreviousBlock.breakParent( node );\n\t\t\t\tnode = previousBlock.getNext();\n\t\t\t\trange.moveToElementEditStart( node );\n\t\t\t\tpreviousBlock.move( previousBlock.getPrevious() );\n\t\t\t}\n\n\t\t\t// If we have both the previous and next blocks, it means that the\n\t\t\t// boundaries were on separated blocks, or none of them where on the\n\t\t\t// block limits (start/end).\n\t\t\tif ( !isStartOfBlock && !isEndOfBlock ) {\n\t\t\t\t// If the next block is an 
  • with another list tree as the first\n\t\t\t\t// child, we'll need to append a filler (
    /NBSP) or the list item\n\t\t\t\t// wouldn't be editable. (http://dev.ckeditor.com/ticket/1420)\n\t\t\t\tif ( nextBlock.is( 'li' ) ) {\n\t\t\t\t\tvar walkerRange = range.clone();\n\t\t\t\t\twalkerRange.selectNodeContents( nextBlock );\n\t\t\t\t\tvar walker = new CKEDITOR.dom.walker( walkerRange );\n\t\t\t\t\twalker.evaluator = function( node ) {\n\t\t\t\t\t\treturn !( bookmark( node ) || whitespaces( node ) || node.type == CKEDITOR.NODE_ELEMENT && node.getName() in CKEDITOR.dtd.$inline && !( node.getName() in CKEDITOR.dtd.$empty ) );\n\t\t\t\t\t};\n\n\t\t\t\t\tnode = walker.next();\n\t\t\t\t\tif ( node && node.type == CKEDITOR.NODE_ELEMENT && node.is( 'ul', 'ol' ) )\n\t\t\t\t\t\t( CKEDITOR.env.needsBrFiller ? doc.createElement( 'br' ) : doc.createText( '\\xa0' ) ).insertBefore( node );\n\t\t\t\t}\n\n\t\t\t\t// Move the selection to the end block.\n\t\t\t\tif ( nextBlock )\n\t\t\t\t\trange.moveToElementEditStart( nextBlock );\n\t\t\t} else {\n\t\t\t\tvar newBlockDir;\n\n\t\t\t\tif ( previousBlock ) {\n\t\t\t\t\t// Do not enter this block if it's a header tag, or we are in\n\t\t\t\t\t// a Shift+Enter (http://dev.ckeditor.com/ticket/77). Create a new block element instead\n\t\t\t\t\t// (later in the code).\n\t\t\t\t\tif ( previousBlock.is( 'li' ) || !( headerTagRegex.test( previousBlock.getName() ) || previousBlock.is( 'pre' ) ) ) {\n\t\t\t\t\t\t// Otherwise, duplicate the previous block.\n\t\t\t\t\t\tnewBlock = previousBlock.clone();\n\t\t\t\t\t}\n\t\t\t\t} else if ( nextBlock ) {\n\t\t\t\t\tnewBlock = nextBlock.clone();\n\t\t\t\t}\n\n\t\t\t\tif ( !newBlock ) {\n\t\t\t\t\t// We have already created a new list item. (http://dev.ckeditor.com/ticket/6849)\n\t\t\t\t\tif ( node && node.is( 'li' ) )\n\t\t\t\t\t\tnewBlock = node;\n\t\t\t\t\telse {\n\t\t\t\t\t\tnewBlock = doc.createElement( blockTag );\n\t\t\t\t\t\tif ( previousBlock && ( newBlockDir = previousBlock.getDirection() ) )\n\t\t\t\t\t\t\tnewBlock.setAttribute( 'dir', newBlockDir );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Force the enter block unless we're talking of a list item.\n\t\t\t\telse if ( forceMode && !newBlock.is( 'li' ) ) {\n\t\t\t\t\tnewBlock.renameNode( blockTag );\n\t\t\t\t}\n\n\t\t\t\t// Recreate the inline elements tree, which was available\n\t\t\t\t// before hitting enter, so the same styles will be available in\n\t\t\t\t// the new block.\n\t\t\t\tvar elementPath = splitInfo.elementPath;\n\t\t\t\tif ( elementPath ) {\n\t\t\t\t\tfor ( var i = 0, len = elementPath.elements.length; i < len; i++ ) {\n\t\t\t\t\t\tvar element = elementPath.elements[ i ];\n\n\t\t\t\t\t\tif ( element.equals( elementPath.block ) || element.equals( elementPath.blockLimit ) )\n\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\tif ( CKEDITOR.dtd.$removeEmpty[ element.getName() ] ) {\n\t\t\t\t\t\t\telement = element.clone();\n\t\t\t\t\t\t\tnewBlock.moveChildren( element );\n\t\t\t\t\t\t\tnewBlock.append( element );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tnewBlock.appendBogus();\n\n\t\t\t\tif ( !newBlock.getParent() )\n\t\t\t\t\trange.insertNode( newBlock );\n\n\t\t\t\t// list item start number should not be duplicated (http://dev.ckeditor.com/ticket/7330), but we need\n\t\t\t\t// to remove the attribute after it's onto the DOM tree because of old IEs (http://dev.ckeditor.com/ticket/7581).\n\t\t\t\tnewBlock.is( 'li' ) && newBlock.removeAttribute( 'value' );\n\n\t\t\t\t// This is tricky, but to make the new block visible correctly\n\t\t\t\t// we must select it.\n\t\t\t\t// The previousBlock check has been included because it may be\n\t\t\t\t// empty if we have fixed a block-less space (like ENTER into an\n\t\t\t\t// empty table cell).\n\t\t\t\tif ( CKEDITOR.env.ie && isStartOfBlock && ( !isEndOfBlock || !previousBlock.getChildCount() ) ) {\n\t\t\t\t\t// Move the selection to the new block.\n\t\t\t\t\trange.moveToElementEditStart( isEndOfBlock ? previousBlock : newBlock );\n\t\t\t\t\trange.select();\n\t\t\t\t}\n\n\t\t\t\t// Move the selection to the new block.\n\t\t\t\trange.moveToElementEditStart( isStartOfBlock && !isEndOfBlock ? nextBlock : newBlock );\n\t\t\t}\n\n\t\t\trange.select();\n\t\t\trange.scrollIntoView();\n\t\t},\n\n\t\tenterBr: function( editor, mode, range, forceMode ) {\n\t\t\t// Get the range for the current selection.\n\t\t\trange = range || getRange( editor );\n\n\t\t\t// We may not have valid ranges to work on, like when inside a\n\t\t\t// contenteditable=false element.\n\t\t\tif ( !range )\n\t\t\t\treturn;\n\n\t\t\tvar doc = range.document;\n\n\t\t\tvar isEndOfBlock = range.checkEndOfBlock();\n\n\t\t\tvar elementPath = new CKEDITOR.dom.elementPath( editor.getSelection().getStartElement() );\n\n\t\t\tvar startBlock = elementPath.block,\n\t\t\t\tstartBlockTag = startBlock && elementPath.block.getName();\n\n\t\t\tif ( !forceMode && startBlockTag == 'li' ) {\n\t\t\t\tenterBlock( editor, mode, range, forceMode );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If we are at the end of a header block.\n\t\t\tif ( !forceMode && isEndOfBlock && headerTagRegex.test( startBlockTag ) ) {\n\t\t\t\tvar newBlock, newBlockDir;\n\n\t\t\t\tif ( ( newBlockDir = startBlock.getDirection() ) ) {\n\t\t\t\t\tnewBlock = doc.createElement( 'div' );\n\t\t\t\t\tnewBlock.setAttribute( 'dir', newBlockDir );\n\t\t\t\t\tnewBlock.insertAfter( startBlock );\n\t\t\t\t\trange.setStart( newBlock, 0 );\n\t\t\t\t} else {\n\t\t\t\t\t// Insert a
    after the current paragraph.\n\t\t\t\t\tdoc.createElement( 'br' ).insertAfter( startBlock );\n\n\t\t\t\t\t// A text node is required by Gecko only to make the cursor blink.\n\t\t\t\t\tif ( CKEDITOR.env.gecko )\n\t\t\t\t\t\tdoc.createText( '' ).insertAfter( startBlock );\n\n\t\t\t\t\t// IE has different behaviors regarding position.\n\t\t\t\t\trange.setStartAt( startBlock.getNext(), CKEDITOR.env.ie ? CKEDITOR.POSITION_BEFORE_START : CKEDITOR.POSITION_AFTER_START );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar lineBreak;\n\n\t\t\t\t// IE<8 prefers text node as line-break inside of
     (http://dev.ckeditor.com/ticket/4711).\n\t\t\t\tif ( startBlockTag == 'pre' && CKEDITOR.env.ie && CKEDITOR.env.version < 8 )\n\t\t\t\t\tlineBreak = doc.createText( '\\r' );\n\t\t\t\telse\n\t\t\t\t\tlineBreak = doc.createElement( 'br' );\n\n\t\t\t\trange.deleteContents();\n\t\t\t\trange.insertNode( lineBreak );\n\n\t\t\t\t// Old IEs have different behavior regarding position.\n\t\t\t\tif ( !CKEDITOR.env.needsBrFiller )\n\t\t\t\t\trange.setStartAt( lineBreak, CKEDITOR.POSITION_AFTER_END );\n\t\t\t\telse {\n\t\t\t\t\t// A text node is required by Gecko only to make the cursor blink.\n\t\t\t\t\t// We need some text inside of it, so the bogus 
    is properly\n\t\t\t\t\t// created.\n\t\t\t\t\tdoc.createText( '\\ufeff' ).insertAfter( lineBreak );\n\n\t\t\t\t\t// If we are at the end of a block, we must be sure the bogus node is available in that block.\n\t\t\t\t\tif ( isEndOfBlock ) {\n\t\t\t\t\t\t// In most situations we've got an elementPath.block (e.g.

    ), but in a\n\t\t\t\t\t\t// blockless editor or when autoP is false that needs to be a block limit.\n\t\t\t\t\t\t( startBlock || elementPath.blockLimit ).appendBogus();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Now we can remove the text node contents, so the caret doesn't\n\t\t\t\t\t// stop on it.\n\t\t\t\t\tlineBreak.getNext().$.nodeValue = '';\n\n\t\t\t\t\trange.setStartAt( lineBreak.getNext(), CKEDITOR.POSITION_AFTER_START );\n\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// This collapse guarantees the cursor will be blinking.\n\t\t\trange.collapse( true );\n\n\t\t\trange.select();\n\t\t\trange.scrollIntoView();\n\t\t}\n\t};\n\n\tvar plugin = CKEDITOR.plugins.enterkey,\n\t\tenterBr = plugin.enterBr,\n\t\tenterBlock = plugin.enterBlock,\n\t\theaderTagRegex = /^h[1-6]$/;\n\n\tfunction shiftEnter( editor ) {\n\t\t// On SHIFT+ENTER:\n\t\t// 1. We want to enforce the mode to be respected, instead\n\t\t// of cloning the current block. (http://dev.ckeditor.com/ticket/77)\n\t\treturn enter( editor, editor.activeShiftEnterMode, 1 );\n\t}\n\n\tfunction enter( editor, mode, forceMode ) {\n\t\tforceMode = editor.config.forceEnterMode || forceMode;\n\n\t\t// Only effective within document.\n\t\tif ( editor.mode != 'wysiwyg' )\n\t\t\treturn;\n\n\t\tif ( !mode )\n\t\t\tmode = editor.activeEnterMode;\n\n\t\t// TODO this should be handled by setting editor.activeEnterMode on selection change.\n\t\t// Check path block specialities:\n\t\t// 1. Cannot be a un-splittable element, e.g. table caption;\n\t\tvar path = editor.elementPath();\n\n\t\tif ( path && !path.isContextFor( 'p' ) ) {\n\t\t\tmode = CKEDITOR.ENTER_BR;\n\t\t\tforceMode = 1;\n\t\t}\n\n\t\teditor.fire( 'saveSnapshot' ); // Save undo step.\n\n\t\tif ( mode == CKEDITOR.ENTER_BR )\n\t\t\tenterBr( editor, mode, null, forceMode );\n\t\telse\n\t\t\tenterBlock( editor, mode, null, forceMode );\n\n\t\teditor.fire( 'saveSnapshot' );\n\t}\n\n\tfunction getRange( editor ) {\n\t\t// Get the selection ranges.\n\t\tvar ranges = editor.getSelection().getRanges( true );\n\n\t\t// Delete the contents of all ranges except the first one.\n\t\tfor ( var i = ranges.length - 1; i > 0; i-- ) {\n\t\t\tranges[ i ].deleteContents();\n\t\t}\n\n\t\t// Return the first range.\n\t\treturn ranges[ 0 ];\n\t}\n\n\tfunction replaceRangeWithClosestEditableRoot( range ) {\n\t\tvar closestEditable = range.startContainer.getAscendant( function( node ) {\n\t\t\treturn node.type == CKEDITOR.NODE_ELEMENT && node.getAttribute( 'contenteditable' ) == 'true';\n\t\t}, true );\n\n\t\tif ( range.root.equals( closestEditable ) ) {\n\t\t\treturn range;\n\t\t} else {\n\t\t\tvar newRange = new CKEDITOR.dom.range( closestEditable );\n\n\t\t\tnewRange.moveToRange( range );\n\t\t\treturn newRange;\n\t\t}\n\t}\n} )();\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n( function() {\n\t// Basic HTML entities.\n\tvar htmlbase = 'nbsp,gt,lt,amp';\n\n\tvar entities =\n\t// Latin-1 entities\n\t'quot,iexcl,cent,pound,curren,yen,brvbar,sect,uml,copy,ordf,laquo,' +\n\t\t'not,shy,reg,macr,deg,plusmn,sup2,sup3,acute,micro,para,middot,' +\n\t\t'cedil,sup1,ordm,raquo,frac14,frac12,frac34,iquest,times,divide,' +\n\n\t\t// Symbols\n\t\t'fnof,bull,hellip,prime,Prime,oline,frasl,weierp,image,real,trade,' +\n\t\t'alefsym,larr,uarr,rarr,darr,harr,crarr,lArr,uArr,rArr,dArr,hArr,' +\n\t\t'forall,part,exist,empty,nabla,isin,notin,ni,prod,sum,minus,lowast,' +\n\t\t'radic,prop,infin,ang,and,or,cap,cup,int,there4,sim,cong,asymp,ne,' +\n\t\t'equiv,le,ge,sub,sup,nsub,sube,supe,oplus,otimes,perp,sdot,lceil,' +\n\t\t'rceil,lfloor,rfloor,lang,rang,loz,spades,clubs,hearts,diams,' +\n\n\t\t// Other special characters\n\t\t'circ,tilde,ensp,emsp,thinsp,zwnj,zwj,lrm,rlm,ndash,mdash,lsquo,' +\n\t\t'rsquo,sbquo,ldquo,rdquo,bdquo,dagger,Dagger,permil,lsaquo,rsaquo,' +\n\t\t'euro';\n\n\t// Latin letters entities\n\tvar latin = 'Agrave,Aacute,Acirc,Atilde,Auml,Aring,AElig,Ccedil,Egrave,Eacute,' +\n\t\t'Ecirc,Euml,Igrave,Iacute,Icirc,Iuml,ETH,Ntilde,Ograve,Oacute,Ocirc,' +\n\t\t'Otilde,Ouml,Oslash,Ugrave,Uacute,Ucirc,Uuml,Yacute,THORN,szlig,' +\n\t\t'agrave,aacute,acirc,atilde,auml,aring,aelig,ccedil,egrave,eacute,' +\n\t\t'ecirc,euml,igrave,iacute,icirc,iuml,eth,ntilde,ograve,oacute,ocirc,' +\n\t\t'otilde,ouml,oslash,ugrave,uacute,ucirc,uuml,yacute,thorn,yuml,' +\n\t\t'OElig,oelig,Scaron,scaron,Yuml';\n\n\t// Greek letters entities.\n\tvar greek = 'Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,Mu,' +\n\t\t'Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,alpha,' +\n\t\t'beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,mu,nu,xi,' +\n\t\t'omicron,pi,rho,sigmaf,sigma,tau,upsilon,phi,chi,psi,omega,thetasym,' +\n\t\t'upsih,piv';\n\n\t// Create a mapping table between one character and its entity form from a list of entity names.\n\t// @param reverse {Boolean} Whether to create a reverse map from the entity string form to an actual character.\n\tfunction buildTable( entities, reverse ) {\n\t\tvar table = {},\n\t\t\tregex = [];\n\n\t\t// Entities that the browsers' DOM does not automatically transform to the\n\t\t// final character.\n\t\tvar specialTable = {\n\t\t\tnbsp: '\\u00A0', // IE | FF\n\t\t\tshy: '\\u00AD', // IE\n\t\t\tgt: '\\u003E', // IE | FF | -- | Opera\n\t\t\tlt: '\\u003C', // IE | FF | Safari | Opera\n\t\t\tamp: '\\u0026', // ALL\n\t\t\tapos: '\\u0027', // IE\n\t\t\tquot: '\\u0022' // IE\n\t\t};\n\n\t\tentities = entities.replace( /\\b(nbsp|shy|gt|lt|amp|apos|quot)(?:,|$)/g, function( match, entity ) {\n\t\t\tvar org = reverse ? '&' + entity + ';' : specialTable[ entity ],\n\t\t\t\tresult = reverse ? specialTable[ entity ] : '&' + entity + ';';\n\n\t\t\ttable[ org ] = result;\n\t\t\tregex.push( org );\n\t\t\treturn '';\n\t\t} );\n\n\t\tif ( !reverse && entities ) {\n\t\t\t// Transforms the entities string into an array.\n\t\t\tentities = entities.split( ',' );\n\n\t\t\t// Put all entities inside a DOM element, transforming them to their\n\t\t\t// final characters.\n\t\t\tvar div = document.createElement( 'div' ),\n\t\t\t\tchars;\n\t\t\tdiv.innerHTML = '&' + entities.join( ';&' ) + ';';\n\t\t\tchars = div.innerHTML;\n\t\t\tdiv = null;\n\n\t\t\t// Add all characters to the table.\n\t\t\tfor ( var i = 0; i < chars.length; i++ ) {\n\t\t\t\tvar charAt = chars.charAt( i );\n\t\t\t\ttable[ charAt ] = '&' + entities[ i ] + ';';\n\t\t\t\tregex.push( charAt );\n\t\t\t}\n\t\t}\n\n\t\ttable.regex = regex.join( reverse ? '|' : '' );\n\n\t\treturn table;\n\t}\n\n\tCKEDITOR.plugins.add( 'entities', {\n\t\tafterInit: function( editor ) {\n\t\t\tvar config = editor.config;\n\n\t\t\tfunction getChar( character ) {\n\t\t\t\treturn baseEntitiesTable[ character ];\n\t\t\t}\n\n\t\t\tfunction getEntity( character ) {\n\t\t\t\treturn config.entities_processNumerical == 'force' || !entitiesTable[ character ] ? '&#' + character.charCodeAt( 0 ) + ';'\n\t\t\t\t: entitiesTable[ character ];\n\t\t\t}\n\n\t\t\tvar dataProcessor = editor.dataProcessor,\n\t\t\t\thtmlFilter = dataProcessor && dataProcessor.htmlFilter;\n\n\t\t\tif ( htmlFilter ) {\n\t\t\t\t// Mandatory HTML basic entities.\n\t\t\t\tvar selectedEntities = [];\n\n\t\t\t\tif ( config.basicEntities !== false )\n\t\t\t\t\tselectedEntities.push( htmlbase );\n\n\t\t\t\tif ( config.entities ) {\n\t\t\t\t\tif ( selectedEntities.length )\n\t\t\t\t\t\tselectedEntities.push( entities );\n\n\t\t\t\t\tif ( config.entities_latin )\n\t\t\t\t\t\tselectedEntities.push( latin );\n\n\t\t\t\t\tif ( config.entities_greek )\n\t\t\t\t\t\tselectedEntities.push( greek );\n\n\t\t\t\t\tif ( config.entities_additional )\n\t\t\t\t\t\tselectedEntities.push( config.entities_additional );\n\t\t\t\t}\n\n\t\t\t\tvar entitiesTable = buildTable( selectedEntities.join( ',' ) );\n\n\t\t\t\t// Create the Regex used to find entities in the text, leave it matches nothing if entities are empty.\n\t\t\t\tvar entitiesRegex = entitiesTable.regex ? '[' + entitiesTable.regex + ']' : 'a^';\n\t\t\t\tdelete entitiesTable.regex;\n\n\t\t\t\tif ( config.entities && config.entities_processNumerical )\n\t\t\t\t\tentitiesRegex = '[^ -~]|' + entitiesRegex;\n\n\t\t\t\tentitiesRegex = new RegExp( entitiesRegex, 'g' );\n\n\t\t\t\t// Decode entities that the browsers has transformed\n\t\t\t\t// at first place.\n\t\t\t\tvar baseEntitiesTable = buildTable( [ htmlbase, 'shy' ].join( ',' ), true ),\n\t\t\t\t\tbaseEntitiesRegex = new RegExp( baseEntitiesTable.regex, 'g' );\n\n\t\t\t\thtmlFilter.addRules( {\n\t\t\t\t\ttext: function( text ) {\n\t\t\t\t\t\treturn text.replace( baseEntitiesRegex, getChar ).replace( entitiesRegex, getEntity );\n\t\t\t\t\t}\n\t\t\t\t}, {\n\t\t\t\t\tapplyToAll: true,\n\t\t\t\t\texcludeNestedEditable: true\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n} )();\n\n/**\n * Whether to escape basic HTML entities in the document, including:\n *\n * * ` `\n * * `>`\n * * `<`\n * * `&`\n *\n * **Note:** This option should not be changed unless when outputting a non-HTML data format like BBCode.\n *\n *\t\tconfig.basicEntities = false;\n *\n * @cfg {Boolean} [basicEntities=true]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.basicEntities = true;\n\n/**\n * Whether to use HTML entities in the editor output.\n *\n *\t\tconfig.entities = false;\n *\n * @cfg {Boolean} [entities=true]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.entities = true;\n\n/**\n * Whether to convert some Latin characters (Latin alphabet No. 1, ISO 8859-1)\n * to HTML entities. The list of entities can be found in the\n * [W3C HTML 4.01 Specification, section 24.2.1](http://www.w3.org/TR/html4/sgml/entities.html#h-24.2.1).\n *\n *\t\tconfig.entities_latin = false;\n *\n * @cfg {Boolean} [entities_latin=true]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.entities_latin = true;\n\n/**\n * Whether to convert some symbols, mathematical symbols, and Greek letters to\n * HTML entities. This may be more relevant for users typing text written in Greek.\n * The list of entities can be found in the\n * [W3C HTML 4.01 Specification, section 24.3.1](http://www.w3.org/TR/html4/sgml/entities.html#h-24.3.1).\n *\n *\t\tconfig.entities_greek = false;\n *\n * @cfg {Boolean} [entities_greek=true]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.entities_greek = true;\n\n/**\n * Whether to convert all remaining characters not included in the ASCII\n * character table to their relative decimal numeric representation of HTML entity.\n * When set to `force`, it will convert all entities into this format.\n *\n * For example the phrase: `'This is Chinese: 汉语.'` would be output\n * as: `'This is Chinese: 汉语.'`\n *\n *\t\tconfig.entities_processNumerical = true;\n *\t\tconfig.entities_processNumerical = 'force'; // Converts from ' ' into ' ';\n *\n * @cfg {Boolean/String} [entities_processNumerical=false]\n * @member CKEDITOR.config\n */\n\n/**\n * A comma-separated list of additional entities to be used. Entity names\n * or numbers must be used in a form that excludes the `'&'` prefix and the `';'` ending.\n *\n *\t\tconfig.entities_additional = '#1049'; // Adds Cyrillic capital letter Short I (Й).\n *\n * @cfg {String} [entities_additional='#39' (The single quote (') character)]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.entities_additional = '#39';\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.plugins.add( 'find', {\n\trequires: 'dialog',\n\t// jscs:disable maximumLineLength\n\t// jscs:enable maximumLineLength\n\tinit: function( editor ) {\n\t\tvar findCommand = editor.addCommand( 'find', new CKEDITOR.dialogCommand( 'find' ) );\n\t\tfindCommand.canUndo = false;\n\t\tfindCommand.readOnly = 1;\n\n\t\tvar replaceCommand = editor.addCommand( 'replace', new CKEDITOR.dialogCommand( 'replace' ) );\n\t\treplaceCommand.canUndo = false;\n\n\t\tif ( editor.ui.addButton ) {\n\t\t\teditor.ui.addButton( 'Find', {\n\t\t\t\tlabel: editor.lang.find.find,\n\t\t\t\tcommand: 'find',\n\t\t\t\ttoolbar: 'find,10'\n\t\t\t} );\n\n\t\t\teditor.ui.addButton( 'Replace', {\n\t\t\t\tlabel: editor.lang.find.replace,\n\t\t\t\tcommand: 'replace',\n\t\t\t\ttoolbar: 'find,20'\n\t\t\t} );\n\t\t}\n\n\t\tCKEDITOR.dialog.add( 'find', this.path + 'dialogs/find.js' );\n\t\tCKEDITOR.dialog.add( 'replace', this.path + 'dialogs/find.js' );\n\t}\n} );\n\n/**\n * Defines the style to be used to highlight results with the find dialog.\n *\n *\t\t// Highlight search results with blue on yellow.\n *\t\tconfig.find_highlight = {\n *\t\t\telement: 'span',\n *\t\t\tstyles: { 'background-color': '#ff0', color: '#00f' }\n *\t\t};\n *\n * @cfg\n * @member CKEDITOR.config\n */\nCKEDITOR.config.find_highlight = { element: 'span', styles: { 'background-color': '#004', color: '#fff' } };\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n( function() {\n\tvar win = CKEDITOR.document.getWindow(),\n\t\tpixelate = CKEDITOR.tools.cssLength;\n\n\tCKEDITOR.plugins.add( 'floatingspace', {\n\t\tinit: function( editor ) {\n\t\t\t// Add listener with lower priority than that in themedui creator.\n\t\t\t// Thereby floatingspace will be created only if themedui wasn't used.\n\t\t\teditor.on( 'loaded', function() {\n\t\t\t\tattach( this );\n\t\t\t}, null, null, 20 );\n\t\t}\n\t} );\n\n\tfunction scrollOffset( side ) {\n\t\tvar pageOffset = side == 'left' ? 'pageXOffset' : 'pageYOffset',\n\t\t\tdocScrollOffset = side == 'left' ? 'scrollLeft' : 'scrollTop';\n\n\t\treturn ( pageOffset in win.$ ) ? win.$[ pageOffset ] : CKEDITOR.document.$.documentElement[ docScrollOffset ];\n\t}\n\n\tfunction attach( editor ) {\n\t\tvar config = editor.config,\n\n\t\t\t// Get the HTML for the predefined spaces.\n\t\t\ttopHtml = editor.fire( 'uiSpace', { space: 'top', html: '' } ).html,\n\n\t\t\t// Re-positioning of the space.\n\t\t\tlayout = ( function() {\n\t\t\t\t// Mode indicates the vertical aligning mode.\n\t\t\t\tvar mode, editable,\n\t\t\t\t\tspaceRect, editorRect, viewRect, spaceHeight, pageScrollX,\n\n\t\t\t\t\t// Allow minor adjustments of the float space from custom configs.\n\t\t\t\t\tdockedOffsetX = config.floatSpaceDockedOffsetX || 0,\n\t\t\t\t\tdockedOffsetY = config.floatSpaceDockedOffsetY || 0,\n\t\t\t\t\tpinnedOffsetX = config.floatSpacePinnedOffsetX || 0,\n\t\t\t\t\tpinnedOffsetY = config.floatSpacePinnedOffsetY || 0;\n\n\t\t\t\t// Update the float space position.\n\t\t\t\tfunction updatePos( pos, prop, val ) {\n\t\t\t\t\tfloatSpace.setStyle( prop, pixelate( val ) );\n\t\t\t\t\tfloatSpace.setStyle( 'position', pos );\n\t\t\t\t}\n\n\t\t\t\t// Change the current mode and update float space position accordingly.\n\t\t\t\tfunction changeMode( newMode ) {\n\t\t\t\t\tvar editorPos = editable.getDocumentPosition();\n\n\t\t\t\t\tswitch ( newMode ) {\n\t\t\t\t\t\tcase 'top':\n\t\t\t\t\t\t\tupdatePos( 'absolute', 'top', editorPos.y - spaceHeight - dockedOffsetY );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'pin':\n\t\t\t\t\t\t\tupdatePos( 'fixed', 'top', pinnedOffsetY );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\t\tupdatePos( 'absolute', 'top', editorPos.y + ( editorRect.height || editorRect.bottom - editorRect.top ) + dockedOffsetY );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\n\t\t\t\t\tmode = newMode;\n\t\t\t\t}\n\n\t\t\t\treturn function( evt ) {\n\t\t\t\t\t// http://dev.ckeditor.com/ticket/10112 Do not fail on editable-less editor.\n\t\t\t\t\tif ( !( editable = editor.editable() ) )\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tvar show = ( evt && evt.name == 'focus' );\n\n\t\t\t\t\t// Show up the space on focus gain.\n\t\t\t\t\tif ( show ) {\n\t\t\t\t\t\tfloatSpace.show();\n\t\t\t\t\t}\n\n\t\t\t\t\teditor.fire( 'floatingSpaceLayout', { show: show } );\n\n\t\t\t\t\t// Reset the horizontal position for below measurement.\n\t\t\t\t\tfloatSpace.removeStyle( 'left' );\n\t\t\t\t\tfloatSpace.removeStyle( 'right' );\n\n\t\t\t\t\t// Compute the screen position from the TextRectangle object would\n\t\t\t\t\t// be very simple, even though the \"width\"/\"height\" property is not\n\t\t\t\t\t// available for all, it's safe to figure that out from the rest.\n\n\t\t\t\t\t// http://help.dottoro.com/ljgupwlp.php\n\t\t\t\t\tspaceRect = floatSpace.getClientRect();\n\t\t\t\t\teditorRect = editable.getClientRect();\n\t\t\t\t\tviewRect = win.getViewPaneSize();\n\t\t\t\t\tspaceHeight = spaceRect.height;\n\t\t\t\t\tpageScrollX = scrollOffset( 'left' );\n\n\t\t\t\t\t// We initialize it as pin mode.\n\t\t\t\t\tif ( !mode ) {\n\t\t\t\t\t\tmode = 'pin';\n\t\t\t\t\t\tchangeMode( 'pin' );\n\t\t\t\t\t\t// Call for a refresh to the actual layout.\n\t\t\t\t\t\tlayout( evt );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// +------------------------ Viewport -+ \\\n\t\t\t\t\t// | | |-> floatSpaceDockedOffsetY\n\t\t\t\t\t// | ................................. | /\n\t\t\t\t\t// | |\n\t\t\t\t\t// | +------ Space -+ |\n\t\t\t\t\t// | | | |\n\t\t\t\t\t// | +--------------+ |\n\t\t\t\t\t// | +------------------ Editor -+ |\n\t\t\t\t\t// | | | |\n\t\t\t\t\t//\n\t\t\t\t\tif ( spaceHeight + dockedOffsetY <= editorRect.top )\n\t\t\t\t\t\tchangeMode( 'top' );\n\n\t\t\t\t\t// +- - - - - - - - - Editor -+\n\t\t\t\t\t// | |\n\t\t\t\t\t// +------------------------ Viewport -+ \\\n\t\t\t\t\t// | | | | |-> floatSpacePinnedOffsetY\n\t\t\t\t\t// | ................................. | /\n\t\t\t\t\t// | +------ Space -+ | |\n\t\t\t\t\t// | | | | |\n\t\t\t\t\t// | +--------------+ | |\n\t\t\t\t\t// | | | |\n\t\t\t\t\t// | +---------------------------+ |\n\t\t\t\t\t// +-----------------------------------+\n\t\t\t\t\t//\n\t\t\t\t\telse if ( spaceHeight + dockedOffsetY > viewRect.height - editorRect.bottom )\n\t\t\t\t\t\tchangeMode( 'pin' );\n\n\t\t\t\t\t// +- - - - - - - - - Editor -+\n\t\t\t\t\t// | |\n\t\t\t\t\t// +------------------------ Viewport -+ \\\n\t\t\t\t\t// | | | | |-> floatSpacePinnedOffsetY\n\t\t\t\t\t// | ................................. | /\n\t\t\t\t\t// | | | |\n\t\t\t\t\t// | | | |\n\t\t\t\t\t// | +---------------------------+ |\n\t\t\t\t\t// | +------ Space -+ |\n\t\t\t\t\t// | | | |\n\t\t\t\t\t// | +--------------+ |\n\t\t\t\t\t//\n\t\t\t\t\telse\n\t\t\t\t\t\tchangeMode( 'bottom' );\n\n\t\t\t\t\tvar mid = viewRect.width / 2,\n\t\t\t\t\t\talignSide, offset;\n\n\t\t\t\t\tif ( config.floatSpacePreferRight ) {\n\t\t\t\t\t\talignSide = 'right';\n\t\t\t\t\t} else if ( editorRect.left > 0 && editorRect.right < viewRect.width && editorRect.width > spaceRect.width ) {\n\t\t\t\t\t\talignSide = config.contentsLangDirection == 'rtl' ? 'right' : 'left';\n\t\t\t\t\t} else {\n\t\t\t\t\t\talignSide = mid - editorRect.left > editorRect.right - mid ? 'left' : 'right';\n\t\t\t\t\t}\n\n\t\t\t\t\t// (http://dev.ckeditor.com/ticket/9769) If viewport width is less than space width,\n\t\t\t\t\t// make sure space never cross the left boundary of the viewport.\n\t\t\t\t\t// In other words: top-left corner of the space is always visible.\n\t\t\t\t\tif ( spaceRect.width > viewRect.width ) {\n\t\t\t\t\t\talignSide = 'left';\n\t\t\t\t\t\toffset = 0;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tif ( alignSide == 'left' ) {\n\t\t\t\t\t\t\t// If the space rect fits into viewport, align it\n\t\t\t\t\t\t\t// to the left edge of editor:\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// +------------------------ Viewport -+\n\t\t\t\t\t\t\t// | |\n\t\t\t\t\t\t\t// | +------------- Space -+ |\n\t\t\t\t\t\t\t// | | | |\n\t\t\t\t\t\t\t// | +---------------------+ |\n\t\t\t\t\t\t\t// | +------------------ Editor -+ |\n\t\t\t\t\t\t\t// | | | |\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\tif ( editorRect.left > 0 )\n\t\t\t\t\t\t\t\toffset = editorRect.left;\n\n\t\t\t\t\t\t\t// If the left part of the editor is cut off by the left\n\t\t\t\t\t\t\t// edge of the viewport, stick the space to the viewport:\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// +------------------------ Viewport -+\n\t\t\t\t\t\t\t// | |\n\t\t\t\t\t\t\t// +---------------- Space -+ |\n\t\t\t\t\t\t\t// | | |\n\t\t\t\t\t\t\t// +------------------------+ |\n\t\t\t\t\t\t\t// +----|------------- Editor -+ |\n\t\t\t\t\t\t\t// | | | |\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\toffset = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t// If the space rect fits into viewport, align it\n\t\t\t\t\t\t\t// to the right edge of editor:\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// +------------------------ Viewport -+\n\t\t\t\t\t\t\t// | |\n\t\t\t\t\t\t\t// | +------------- Space -+ |\n\t\t\t\t\t\t\t// | | | |\n\t\t\t\t\t\t\t// | +---------------------+ |\n\t\t\t\t\t\t\t// | +------------------ Editor -+ |\n\t\t\t\t\t\t\t// | | | |\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\tif ( editorRect.right < viewRect.width )\n\t\t\t\t\t\t\t\toffset = viewRect.width - editorRect.right;\n\n\t\t\t\t\t\t\t// If the right part of the editor is cut off by the right\n\t\t\t\t\t\t\t// edge of the viewport, stick the space to the viewport:\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t// +------------------------ Viewport -+\n\t\t\t\t\t\t\t// | |\n\t\t\t\t\t\t\t// | +------------- Space -+\n\t\t\t\t\t\t\t// | | |\n\t\t\t\t\t\t\t// | +---------------------+\n\t\t\t\t\t\t\t// | +-----------------|- Editor -+\n\t\t\t\t\t\t\t// | | | |\n\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\toffset = 0;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// (http://dev.ckeditor.com/ticket/9769) Finally, stick the space to the opposite side of\n\t\t\t\t\t\t// the viewport when it's cut off horizontally on the left/right\n\t\t\t\t\t\t// side like below.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// This trick reveals cut off space in some edge cases and\n\t\t\t\t\t\t// hence it improves accessibility.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// +------------------------ Viewport -+\n\t\t\t\t\t\t// | |\n\t\t\t\t\t\t// | +--------------------|-- Space -+\n\t\t\t\t\t\t// | | | |\n\t\t\t\t\t\t// | +--------------------|----------+\n\t\t\t\t\t\t// | +------- Editor -+ |\n\t\t\t\t\t\t// | | | |\n\t\t\t\t\t\t//\n\t\t\t\t\t\t//\t\t\t\tbecomes:\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// +------------------------ Viewport -+\n\t\t\t\t\t\t// | |\n\t\t\t\t\t\t// | +----------------------- Space -+\n\t\t\t\t\t\t// | | |\n\t\t\t\t\t\t// | +-------------------------------+\n\t\t\t\t\t\t// | +------- Editor -+ |\n\t\t\t\t\t\t// | | | |\n\t\t\t\t\t\t//\n\t\t\t\t\t\tif ( offset + spaceRect.width > viewRect.width ) {\n\t\t\t\t\t\t\talignSide = alignSide == 'left' ? 'right' : 'left';\n\t\t\t\t\t\t\toffset = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Pin mode is fixed, so don't include scroll-x.\n\t\t\t\t\t// (http://dev.ckeditor.com/ticket/9903) For mode is \"top\" or \"bottom\", add opposite scroll-x for right-aligned space.\n\t\t\t\t\tvar scroll = mode == 'pin' ? 0 : alignSide == 'left' ? pageScrollX : -pageScrollX;\n\n\t\t\t\t\tfloatSpace.setStyle( alignSide, pixelate( ( mode == 'pin' ? pinnedOffsetX : dockedOffsetX ) + offset + scroll ) );\n\t\t\t\t};\n\t\t\t} )();\n\n\t\tif ( topHtml ) {\n\t\t\tvar floatSpaceTpl = new CKEDITOR.template(\n\t\t\t\t'' +\n\t\t\t\t\t( editor.title ? '{voiceLabel}' : ' ' ) +\n\t\t\t\t\t'

    ' +\n\t\t\t\t\t\t'
    {content}
    ' +\n\t\t\t\t\t'
    ' +\n\t\t\t\t'
  • ' ),\n\t\t\t\tfloatSpace = CKEDITOR.document.getBody().append( CKEDITOR.dom.element.createFromHtml( floatSpaceTpl.output( {\n\t\t\t\t\tcontent: topHtml,\n\t\t\t\t\tid: editor.id,\n\t\t\t\t\tlangDir: editor.lang.dir,\n\t\t\t\t\tlangCode: editor.langCode,\n\t\t\t\t\tname: editor.name,\n\t\t\t\t\tstyle: 'display:none;z-index:' + ( config.baseFloatZIndex - 1 ),\n\t\t\t\t\ttopId: editor.ui.spaceId( 'top' ),\n\t\t\t\t\tvoiceLabel: editor.title\n\t\t\t\t} ) ) ),\n\n\t\t\t\t// Use event buffers to reduce CPU load when tons of events are fired.\n\t\t\t\tchangeBuffer = CKEDITOR.tools.eventsBuffer( 500, layout ),\n\t\t\t\tuiBuffer = CKEDITOR.tools.eventsBuffer( 100, layout );\n\n\t\t\t// There's no need for the floatSpace to be selectable.\n\t\t\tfloatSpace.unselectable();\n\n\t\t\t// Prevent clicking on non-buttons area of the space from blurring editor.\n\t\t\tfloatSpace.on( 'mousedown', function( evt ) {\n\t\t\t\tevt = evt.data;\n\t\t\t\tif ( !evt.getTarget().hasAscendant( 'a', 1 ) )\n\t\t\t\t\tevt.preventDefault();\n\t\t\t} );\n\n\t\t\teditor.on( 'focus', function( evt ) {\n\t\t\t\tlayout( evt );\n\t\t\t\teditor.on( 'change', changeBuffer.input );\n\t\t\t\twin.on( 'scroll', uiBuffer.input );\n\t\t\t\twin.on( 'resize', uiBuffer.input );\n\t\t\t} );\n\n\t\t\teditor.on( 'blur', function() {\n\t\t\t\tfloatSpace.hide();\n\t\t\t\teditor.removeListener( 'change', changeBuffer.input );\n\t\t\t\twin.removeListener( 'scroll', uiBuffer.input );\n\t\t\t\twin.removeListener( 'resize', uiBuffer.input );\n\t\t\t} );\n\n\t\t\teditor.on( 'destroy', function() {\n\t\t\t\twin.removeListener( 'scroll', uiBuffer.input );\n\t\t\t\twin.removeListener( 'resize', uiBuffer.input );\n\t\t\t\tfloatSpace.clearCustomData();\n\t\t\t\tfloatSpace.remove();\n\t\t\t} );\n\n\t\t\t// Handle initial focus.\n\t\t\tif ( editor.focusManager.hasFocus )\n\t\t\t\tfloatSpace.show();\n\n\t\t\t// Register this UI space to the focus manager.\n\t\t\teditor.focusManager.add( floatSpace, 1 );\n\t\t}\n\t}\n} )();\n\n/**\n * Along with {@link #floatSpaceDockedOffsetY} it defines the\n * amount of offset (in pixels) between the float space and the editable left/right\n * boundaries when the space element is docked on either side of the editable.\n *\n *\t\tconfig.floatSpaceDockedOffsetX = 10;\n *\n * @cfg {Number} [floatSpaceDockedOffsetX=0]\n * @member CKEDITOR.config\n */\n\n/**\n * Along with {@link #floatSpaceDockedOffsetX} it defines the\n * amount of offset (in pixels) between the float space and the editable top/bottom\n * boundaries when the space element is docked on either side of the editable.\n *\n *\t\tconfig.floatSpaceDockedOffsetY = 10;\n *\n * @cfg {Number} [floatSpaceDockedOffsetY=0]\n * @member CKEDITOR.config\n */\n\n/**\n * Along with {@link #floatSpacePinnedOffsetY} it defines the\n * amount of offset (in pixels) between the float space and the viewport boundaries\n * when the space element is pinned.\n *\n *\t\tconfig.floatSpacePinnedOffsetX = 20;\n *\n * @cfg {Number} [floatSpacePinnedOffsetX=0]\n * @member CKEDITOR.config\n */\n\n/**\n * Along with {@link #floatSpacePinnedOffsetX} it defines the\n * amount of offset (in pixels) between the float space and the viewport boundaries\n * when the space element is pinned.\n *\n *\t\tconfig.floatSpacePinnedOffsetY = 20;\n *\n * @cfg {Number} [floatSpacePinnedOffsetY=0]\n * @member CKEDITOR.config\n */\n\n/**\n * Indicates that the float space should be aligned to the right side\n * of the editable area rather than to the left (if possible).\n *\n *\t\tconfig.floatSpacePreferRight = true;\n *\n * @since 4.5\n * @cfg {Boolean} [floatSpacePreferRight=false]\n * @member CKEDITOR.config\n */\n\n/**\n * Fired when the viewport or editor parameters change and the floating space needs to check and\n * eventually update its position and dimensions.\n *\n * @since 4.5\n * @event floatingSpaceLayout\n * @member CKEDITOR.editor\n * @param {CKEDITOR.editor} editor The editor instance.\n * @param data\n * @param {Boolean} data.show True if the float space should show up as a result of this event.\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.plugins.add( 'listblock', {\n\trequires: 'panel',\n\n\tonLoad: function() {\n\t\tvar list = CKEDITOR.addTemplate( 'panel-list', '
      {items}
    ' ),\n\t\t\tlistItem = CKEDITOR.addTemplate( 'panel-list-item', '' ),\n\t\t\tlistGroup = CKEDITOR.addTemplate( 'panel-list-group', '

    {label}

    ' ),\n\t\t\treSingleQuote = /\\'/g,\n\t\t\tescapeSingleQuotes = function( str ) {\n\t\t\t\treturn str.replace( reSingleQuote, '\\\\\\'' );\n\t\t\t};\n\n\t\tCKEDITOR.ui.panel.prototype.addListBlock = function( name, definition ) {\n\t\t\treturn this.addBlock( name, new CKEDITOR.ui.listBlock( this.getHolderElement(), definition ) );\n\t\t};\n\n\t\tCKEDITOR.ui.listBlock = CKEDITOR.tools.createClass( {\n\t\t\tbase: CKEDITOR.ui.panel.block,\n\n\t\t\t$: function( blockHolder, blockDefinition ) {\n\t\t\t\tblockDefinition = blockDefinition || {};\n\n\t\t\t\tvar attribs = blockDefinition.attributes || ( blockDefinition.attributes = {} );\n\t\t\t\t( this.multiSelect = !!blockDefinition.multiSelect ) && ( attribs[ 'aria-multiselectable' ] = true );\n\t\t\t\t// Provide default role of 'listbox'.\n\t\t\t\t!attribs.role && ( attribs.role = 'listbox' );\n\n\t\t\t\t// Call the base contructor.\n\t\t\t\tthis.base.apply( this, arguments );\n\n\t\t\t\t// Set the proper a11y attributes.\n\t\t\t\tthis.element.setAttribute( 'role', attribs.role );\n\n\t\t\t\tvar keys = this.keys;\n\t\t\t\tkeys[ 40 ] = 'next'; // ARROW-DOWN\n\t\t\t\tkeys[ 9 ] = 'next'; // TAB\n\t\t\t\tkeys[ 38 ] = 'prev'; // ARROW-UP\n\t\t\t\tkeys[ CKEDITOR.SHIFT + 9 ] = 'prev'; // SHIFT + TAB\n\t\t\t\tkeys[ 32 ] = CKEDITOR.env.ie ? 'mouseup' : 'click'; // SPACE\n\t\t\t\tCKEDITOR.env.ie && ( keys[ 13 ] = 'mouseup' ); // Manage ENTER, since onclick is blocked in IE (http://dev.ckeditor.com/ticket/8041).\n\n\t\t\t\tthis._.pendingHtml = [];\n\t\t\t\tthis._.pendingList = [];\n\t\t\t\tthis._.items = {};\n\t\t\t\tthis._.groups = {};\n\t\t\t},\n\n\t\t\t_: {\n\t\t\t\tclose: function() {\n\t\t\t\t\tif ( this._.started ) {\n\t\t\t\t\t\tvar output = list.output( { items: this._.pendingList.join( '' ) } );\n\t\t\t\t\t\tthis._.pendingList = [];\n\t\t\t\t\t\tthis._.pendingHtml.push( output );\n\t\t\t\t\t\tdelete this._.started;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tgetClick: function() {\n\t\t\t\t\tif ( !this._.click ) {\n\t\t\t\t\t\tthis._.click = CKEDITOR.tools.addFunction( function( value ) {\n\t\t\t\t\t\t\tvar marked = this.toggle( value );\n\t\t\t\t\t\t\tif ( this.onClick )\n\t\t\t\t\t\t\t\tthis.onClick( value, marked );\n\t\t\t\t\t\t}, this );\n\t\t\t\t\t}\n\t\t\t\t\treturn this._.click;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tproto: {\n\t\t\t\tadd: function( value, html, title ) {\n\t\t\t\t\tvar id = CKEDITOR.tools.getNextId();\n\n\t\t\t\t\tif ( !this._.started ) {\n\t\t\t\t\t\tthis._.started = 1;\n\t\t\t\t\t\tthis._.size = this._.size || 0;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis._.items[ value ] = id;\n\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\tid: id,\n\t\t\t\t\t\tval: escapeSingleQuotes( CKEDITOR.tools.htmlEncodeAttr( value ) ),\n\t\t\t\t\t\tonclick: CKEDITOR.env.ie ? 'onclick=\"return false;\" onmouseup' : 'onclick',\n\t\t\t\t\t\tclickFn: this._.getClick(),\n\t\t\t\t\t\ttitle: CKEDITOR.tools.htmlEncodeAttr( title || value ),\n\t\t\t\t\t\ttext: html || value\n\t\t\t\t\t};\n\n\t\t\t\t\tthis._.pendingList.push( listItem.output( data ) );\n\t\t\t\t},\n\n\t\t\t\tstartGroup: function( title ) {\n\t\t\t\t\tthis._.close();\n\n\t\t\t\t\tvar id = CKEDITOR.tools.getNextId();\n\n\t\t\t\t\tthis._.groups[ title ] = id;\n\n\t\t\t\t\tthis._.pendingHtml.push( listGroup.output( { id: id, label: title } ) );\n\t\t\t\t},\n\n\t\t\t\tcommit: function() {\n\t\t\t\t\tthis._.close();\n\t\t\t\t\tthis.element.appendHtml( this._.pendingHtml.join( '' ) );\n\t\t\t\t\tdelete this._.size;\n\n\t\t\t\t\tthis._.pendingHtml = [];\n\t\t\t\t},\n\n\t\t\t\ttoggle: function( value ) {\n\t\t\t\t\tvar isMarked = this.isMarked( value );\n\n\t\t\t\t\tif ( isMarked )\n\t\t\t\t\t\tthis.unmark( value );\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.mark( value );\n\n\t\t\t\t\treturn !isMarked;\n\t\t\t\t},\n\n\t\t\t\thideGroup: function( groupTitle ) {\n\t\t\t\t\tvar group = this.element.getDocument().getById( this._.groups[ groupTitle ] ),\n\t\t\t\t\t\tlist = group && group.getNext();\n\n\t\t\t\t\tif ( group ) {\n\t\t\t\t\t\tgroup.setStyle( 'display', 'none' );\n\n\t\t\t\t\t\tif ( list && list.getName() == 'ul' )\n\t\t\t\t\t\t\tlist.setStyle( 'display', 'none' );\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\thideItem: function( value ) {\n\t\t\t\t\tthis.element.getDocument().getById( this._.items[ value ] ).setStyle( 'display', 'none' );\n\t\t\t\t},\n\n\t\t\t\tshowAll: function() {\n\t\t\t\t\tvar items = this._.items,\n\t\t\t\t\t\tgroups = this._.groups,\n\t\t\t\t\t\tdoc = this.element.getDocument();\n\n\t\t\t\t\tfor ( var value in items ) {\n\t\t\t\t\t\tdoc.getById( items[ value ] ).setStyle( 'display', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( var title in groups ) {\n\t\t\t\t\t\tvar group = doc.getById( groups[ title ] ),\n\t\t\t\t\t\t\tlist = group.getNext();\n\n\t\t\t\t\t\tgroup.setStyle( 'display', '' );\n\n\t\t\t\t\t\tif ( list && list.getName() == 'ul' )\n\t\t\t\t\t\t\tlist.setStyle( 'display', '' );\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tmark: function( value ) {\n\t\t\t\t\tif ( !this.multiSelect )\n\t\t\t\t\t\tthis.unmarkAll();\n\n\t\t\t\t\tvar itemId = this._.items[ value ],\n\t\t\t\t\t\titem = this.element.getDocument().getById( itemId );\n\t\t\t\t\titem.addClass( 'cke_selected' );\n\n\t\t\t\t\tthis.element.getDocument().getById( itemId + '_option' ).setAttribute( 'aria-selected', true );\n\t\t\t\t\tthis.onMark && this.onMark( item );\n\t\t\t\t},\n\n\t\t\t\tmarkFirstDisplayed: function() {\n\t\t\t\t\tvar context = this;\n\t\t\t\t\tthis._.markFirstDisplayed( function() {\n\t\t\t\t\t\tif ( !context.multiSelect )\n\t\t\t\t\t\t\tcontext.unmarkAll();\n\t\t\t\t\t} );\n\t\t\t\t},\n\n\t\t\t\tunmark: function( value ) {\n\t\t\t\t\tvar doc = this.element.getDocument(),\n\t\t\t\t\t\titemId = this._.items[ value ],\n\t\t\t\t\t\titem = doc.getById( itemId );\n\n\t\t\t\t\titem.removeClass( 'cke_selected' );\n\t\t\t\t\tdoc.getById( itemId + '_option' ).removeAttribute( 'aria-selected' );\n\n\t\t\t\t\tthis.onUnmark && this.onUnmark( item );\n\t\t\t\t},\n\n\t\t\t\tunmarkAll: function() {\n\t\t\t\t\tvar items = this._.items,\n\t\t\t\t\t\tdoc = this.element.getDocument();\n\n\t\t\t\t\tfor ( var value in items ) {\n\t\t\t\t\t\tvar itemId = items[ value ];\n\n\t\t\t\t\t\tdoc.getById( itemId ).removeClass( 'cke_selected' );\n\t\t\t\t\t\tdoc.getById( itemId + '_option' ).removeAttribute( 'aria-selected' );\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.onUnmark && this.onUnmark();\n\t\t\t\t},\n\n\t\t\t\tisMarked: function( value ) {\n\t\t\t\t\treturn this.element.getDocument().getById( this._.items[ value ] ).hasClass( 'cke_selected' );\n\t\t\t\t},\n\n\t\t\t\tfocus: function( value ) {\n\t\t\t\t\tthis._.focusIndex = -1;\n\n\t\t\t\t\tvar links = this.element.getElementsByTag( 'a' ),\n\t\t\t\t\t\tlink,\n\t\t\t\t\t\tselected,\n\t\t\t\t\t\ti = -1;\n\n\t\t\t\t\tif ( value ) {\n\t\t\t\t\t\tselected = this.element.getDocument().getById( this._.items[ value ] ).getFirst();\n\n\t\t\t\t\t\twhile ( ( link = links.getItem( ++i ) ) ) {\n\t\t\t\t\t\t\tif ( link.equals( selected ) ) {\n\t\t\t\t\t\t\t\tthis._.focusIndex = i;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.element.focus();\n\t\t\t\t\t}\n\n\t\t\t\t\tselected && setTimeout( function() {\n\t\t\t\t\t\tselected.focus();\n\t\t\t\t\t}, 0 );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.plugins.add( 'richcombo', {\n\trequires: 'floatpanel,listblock,button',\n\n\tbeforeInit: function( editor ) {\n\t\teditor.ui.addHandler( CKEDITOR.UI_RICHCOMBO, CKEDITOR.ui.richCombo.handler );\n\t}\n} );\n\n( function() {\n\tvar template = '' +\n\t\t\t'{label}' +\n\t\t\t'' +\n\t\t\t'{label}' +\n\t\t\t'' +\n\t\t\t\t'' +\n\t\t\t\t// BLACK DOWN-POINTING TRIANGLE\n\t( CKEDITOR.env.hc ? '▼' : CKEDITOR.env.air ? ' ' : '' ) +\n\t\t\t\t'' +\n\t\t\t'' +\n\t\t'' +\n\t\t'';\n\n\tvar rcomboTpl = CKEDITOR.addTemplate( 'combo', template );\n\n\t/**\n\t * Button UI element.\n\t *\n\t * @readonly\n\t * @property {String} [='richcombo']\n\t * @member CKEDITOR\n\t */\n\tCKEDITOR.UI_RICHCOMBO = 'richcombo';\n\n\t/**\n\t * @class\n\t * @todo\n\t */\n\tCKEDITOR.ui.richCombo = CKEDITOR.tools.createClass( {\n\t\t$: function( definition ) {\n\t\t\t// Copy all definition properties to this object.\n\t\t\tCKEDITOR.tools.extend( this, definition,\n\t\t\t// Set defaults.\n\t\t\t{\n\t\t\t\t// The combo won't participate in toolbar grouping.\n\t\t\t\tcanGroup: false,\n\t\t\t\ttitle: definition.label,\n\t\t\t\tmodes: { wysiwyg: 1 },\n\t\t\t\teditorFocus: 1\n\t\t\t} );\n\n\t\t\t// We don't want the panel definition in this object.\n\t\t\tvar panelDefinition = this.panel || {};\n\t\t\tdelete this.panel;\n\n\t\t\tthis.id = CKEDITOR.tools.getNextNumber();\n\n\t\t\tthis.document = ( panelDefinition.parent && panelDefinition.parent.getDocument() ) || CKEDITOR.document;\n\n\t\t\tpanelDefinition.className = 'cke_combopanel';\n\t\t\tpanelDefinition.block = {\n\t\t\t\tmultiSelect: panelDefinition.multiSelect,\n\t\t\t\tattributes: panelDefinition.attributes\n\t\t\t};\n\t\t\tpanelDefinition.toolbarRelated = true;\n\n\t\t\tthis._ = {\n\t\t\t\tpanelDefinition: panelDefinition,\n\t\t\t\titems: {}\n\t\t\t};\n\t\t},\n\n\t\tproto: {\n\t\t\trenderHtml: function( editor ) {\n\t\t\t\tvar output = [];\n\t\t\t\tthis.render( editor, output );\n\t\t\t\treturn output.join( '' );\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Renders the combo.\n\t\t\t *\n\t\t\t * @param {CKEDITOR.editor} editor The editor instance which this button is\n\t\t\t * to be used by.\n\t\t\t * @param {Array} output The output array to which append the HTML relative\n\t\t\t * to this button.\n\t\t\t */\n\t\t\trender: function( editor, output ) {\n\t\t\t\tvar env = CKEDITOR.env;\n\n\t\t\t\tvar id = 'cke_' + this.id;\n\t\t\t\tvar clickFn = CKEDITOR.tools.addFunction( function( el ) {\n\t\t\t\t\t// Restore locked selection in Opera.\n\t\t\t\t\tif ( selLocked ) {\n\t\t\t\t\t\teditor.unlockSelection( 1 );\n\t\t\t\t\t\tselLocked = 0;\n\t\t\t\t\t}\n\t\t\t\t\tinstance.execute( el );\n\t\t\t\t}, this );\n\n\t\t\t\tvar combo = this;\n\t\t\t\tvar instance = {\n\t\t\t\t\tid: id,\n\t\t\t\t\tcombo: this,\n\t\t\t\t\tfocus: function() {\n\t\t\t\t\t\tvar element = CKEDITOR.document.getById( id ).getChild( 1 );\n\t\t\t\t\t\telement.focus();\n\t\t\t\t\t},\n\t\t\t\t\texecute: function( el ) {\n\t\t\t\t\t\tvar _ = combo._;\n\n\t\t\t\t\t\tif ( _.state == CKEDITOR.TRISTATE_DISABLED )\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\tcombo.createPanel( editor );\n\n\t\t\t\t\t\tif ( _.on ) {\n\t\t\t\t\t\t\t_.panel.hide();\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcombo.commit();\n\t\t\t\t\t\tvar value = combo.getValue();\n\t\t\t\t\t\tif ( value )\n\t\t\t\t\t\t\t_.list.mark( value );\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\t_.list.unmarkAll();\n\n\t\t\t\t\t\t_.panel.showBlock( combo.id, new CKEDITOR.dom.element( el ), 4 );\n\t\t\t\t\t},\n\t\t\t\t\tclickFn: clickFn\n\t\t\t\t};\n\n\t\t\t\tfunction updateState() {\n\t\t\t\t\t// Don't change state while richcombo is active (http://dev.ckeditor.com/ticket/11793).\n\t\t\t\t\tif ( this.getState() == CKEDITOR.TRISTATE_ON )\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tvar state = this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED;\n\n\t\t\t\t\tif ( editor.readOnly && !this.readOnly )\n\t\t\t\t\t\tstate = CKEDITOR.TRISTATE_DISABLED;\n\n\t\t\t\t\tthis.setState( state );\n\t\t\t\t\tthis.setValue( '' );\n\n\t\t\t\t\t// Let plugin to disable button.\n\t\t\t\t\tif ( state != CKEDITOR.TRISTATE_DISABLED && this.refresh )\n\t\t\t\t\t\tthis.refresh();\n\t\t\t\t}\n\n\t\t\t\t// Update status when activeFilter, mode, selection or readOnly changes.\n\t\t\t\teditor.on( 'activeFilterChange', updateState, this );\n\t\t\t\teditor.on( 'mode', updateState, this );\n\t\t\t\teditor.on( 'selectionChange', updateState, this );\n\t\t\t\t// If this combo is sensitive to readOnly state, update it accordingly.\n\t\t\t\t!this.readOnly && editor.on( 'readOnly', updateState, this );\n\n\t\t\t\tvar keyDownFn = CKEDITOR.tools.addFunction( function( ev, element ) {\n\t\t\t\t\tev = new CKEDITOR.dom.event( ev );\n\n\t\t\t\t\tvar keystroke = ev.getKeystroke();\n\n\t\t\t\t\tswitch ( keystroke ) {\n\t\t\t\t\t\tcase 13: // ENTER\n\t\t\t\t\t\tcase 32: // SPACE\n\t\t\t\t\t\tcase 40: // ARROW-DOWN\n\t\t\t\t\t\t\t// Show panel\n\t\t\t\t\t\t\tCKEDITOR.tools.callFunction( clickFn, element );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// Delegate the default behavior to toolbar button key handling.\n\t\t\t\t\t\t\tinstance.onkey( instance, keystroke );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Avoid subsequent focus grab on editor document.\n\t\t\t\t\tev.preventDefault();\n\t\t\t\t} );\n\n\t\t\t\tvar focusFn = CKEDITOR.tools.addFunction( function() {\n\t\t\t\t\tinstance.onfocus && instance.onfocus();\n\t\t\t\t} );\n\n\t\t\t\tvar selLocked = 0;\n\n\t\t\t\t// For clean up\n\t\t\t\tinstance.keyDownFn = keyDownFn;\n\n\t\t\t\tvar params = {\n\t\t\t\t\tid: id,\n\t\t\t\t\tname: this.name || this.command,\n\t\t\t\t\tlabel: this.label,\n\t\t\t\t\ttitle: this.title,\n\t\t\t\t\tcls: this.className || '',\n\t\t\t\t\ttitleJs: env.gecko && !env.hc ? '' : ( this.title || '' ).replace( \"'\", '' ),\n\t\t\t\t\tkeydownFn: keyDownFn,\n\t\t\t\t\tfocusFn: focusFn,\n\t\t\t\t\tclickFn: clickFn\n\t\t\t\t};\n\n\t\t\t\trcomboTpl.output( params, output );\n\n\t\t\t\tif ( this.onRender )\n\t\t\t\t\tthis.onRender();\n\n\t\t\t\treturn instance;\n\t\t\t},\n\n\t\t\tcreatePanel: function( editor ) {\n\t\t\t\tif ( this._.panel )\n\t\t\t\t\treturn;\n\n\t\t\t\tvar panelDefinition = this._.panelDefinition,\n\t\t\t\t\tpanelBlockDefinition = this._.panelDefinition.block,\n\t\t\t\t\tpanelParentElement = panelDefinition.parent || CKEDITOR.document.getBody(),\n\t\t\t\t\tnamedPanelCls = 'cke_combopanel__' + this.name,\n\t\t\t\t\tpanel = new CKEDITOR.ui.floatPanel( editor, panelParentElement, panelDefinition ),\n\t\t\t\t\tlist = panel.addListBlock( this.id, panelBlockDefinition ),\n\t\t\t\t\tme = this;\n\n\t\t\t\tpanel.onShow = function() {\n\t\t\t\t\tthis.element.addClass( namedPanelCls );\n\n\t\t\t\t\tme.setState( CKEDITOR.TRISTATE_ON );\n\n\t\t\t\t\tme._.on = 1;\n\n\t\t\t\t\tme.editorFocus && !editor.focusManager.hasFocus && editor.focus();\n\n\t\t\t\t\tif ( me.onOpen )\n\t\t\t\t\t\tme.onOpen();\n\t\t\t\t};\n\n\t\t\t\tpanel.onHide = function( preventOnClose ) {\n\t\t\t\t\tthis.element.removeClass( namedPanelCls );\n\n\t\t\t\t\tme.setState( me.modes && me.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );\n\n\t\t\t\t\tme._.on = 0;\n\n\t\t\t\t\tif ( !preventOnClose && me.onClose )\n\t\t\t\t\t\tme.onClose();\n\t\t\t\t};\n\n\t\t\t\tpanel.onEscape = function() {\n\t\t\t\t\t// Hide drop-down with focus returned.\n\t\t\t\t\tpanel.hide( 1 );\n\t\t\t\t};\n\n\t\t\t\tlist.onClick = function( value, marked ) {\n\n\t\t\t\t\tif ( me.onClick )\n\t\t\t\t\t\tme.onClick.call( me, value, marked );\n\n\t\t\t\t\tpanel.hide();\n\t\t\t\t};\n\n\t\t\t\tthis._.panel = panel;\n\t\t\t\tthis._.list = list;\n\n\t\t\t\tpanel.getBlock( this.id ).onHide = function() {\n\t\t\t\t\tme._.on = 0;\n\t\t\t\t\tme.setState( CKEDITOR.TRISTATE_OFF );\n\t\t\t\t};\n\n\t\t\t\tif ( this.init )\n\t\t\t\t\tthis.init();\n\t\t\t},\n\n\t\t\tsetValue: function( value, text ) {\n\t\t\t\tthis._.value = value;\n\n\t\t\t\tvar textElement = this.document.getById( 'cke_' + this.id + '_text' );\n\t\t\t\tif ( textElement ) {\n\t\t\t\t\tif ( !( value || text ) ) {\n\t\t\t\t\t\ttext = this.label;\n\t\t\t\t\t\ttextElement.addClass( 'cke_combo_inlinelabel' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttextElement.removeClass( 'cke_combo_inlinelabel' );\n\t\t\t\t\t}\n\n\t\t\t\t\ttextElement.setText( typeof text != 'undefined' ? text : value );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tgetValue: function() {\n\t\t\t\treturn this._.value || '';\n\t\t\t},\n\n\t\t\tunmarkAll: function() {\n\t\t\t\tthis._.list.unmarkAll();\n\t\t\t},\n\n\t\t\tmark: function( value ) {\n\t\t\t\tthis._.list.mark( value );\n\t\t\t},\n\n\t\t\thideItem: function( value ) {\n\t\t\t\tthis._.list.hideItem( value );\n\t\t\t},\n\n\t\t\thideGroup: function( groupTitle ) {\n\t\t\t\tthis._.list.hideGroup( groupTitle );\n\t\t\t},\n\n\t\t\tshowAll: function() {\n\t\t\t\tthis._.list.showAll();\n\t\t\t},\n\n\t\t\tadd: function( value, html, text ) {\n\t\t\t\tthis._.items[ value ] = text || value;\n\t\t\t\tthis._.list.add( value, html, text );\n\t\t\t},\n\n\t\t\tstartGroup: function( title ) {\n\t\t\t\tthis._.list.startGroup( title );\n\t\t\t},\n\n\t\t\tcommit: function() {\n\t\t\t\tif ( !this._.committed ) {\n\t\t\t\t\tthis._.list.commit();\n\t\t\t\t\tthis._.committed = 1;\n\t\t\t\t\tCKEDITOR.ui.fire( 'ready', this );\n\t\t\t\t}\n\t\t\t\tthis._.committed = 1;\n\t\t\t},\n\n\t\t\tsetState: function( state ) {\n\t\t\t\tif ( this._.state == state )\n\t\t\t\t\treturn;\n\n\t\t\t\tvar el = this.document.getById( 'cke_' + this.id );\n\t\t\t\tel.setState( state, 'cke_combo' );\n\n\t\t\t\tstate == CKEDITOR.TRISTATE_DISABLED ?\n\t\t\t\t\tel.setAttribute( 'aria-disabled', true ) :\n\t\t\t\t\tel.removeAttribute( 'aria-disabled' );\n\n\t\t\t\tthis._.state = state;\n\t\t\t},\n\n\t\t\tgetState: function() {\n\t\t\t\treturn this._.state;\n\t\t\t},\n\n\t\t\tenable: function() {\n\t\t\t\tif ( this._.state == CKEDITOR.TRISTATE_DISABLED )\n\t\t\t\t\tthis.setState( this._.lastState );\n\t\t\t},\n\n\t\t\tdisable: function() {\n\t\t\t\tif ( this._.state != CKEDITOR.TRISTATE_DISABLED ) {\n\t\t\t\t\tthis._.lastState = this._.state;\n\t\t\t\t\tthis.setState( CKEDITOR.TRISTATE_DISABLED );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Represents richCombo handler object.\n\t\t *\n\t\t * @class CKEDITOR.ui.richCombo.handler\n\t\t * @singleton\n\t\t * @extends CKEDITOR.ui.handlerDefinition\n\t\t */\n\t\tstatics: {\n\t\t\thandler: {\n\t\t\t\t/**\n\t\t\t\t * Transforms a richCombo definition in a {@link CKEDITOR.ui.richCombo} instance.\n\t\t\t\t *\n\t\t\t\t * @param {Object} definition\n\t\t\t\t * @returns {CKEDITOR.ui.richCombo}\n\t\t\t\t */\n\t\t\t\tcreate: function( definition ) {\n\t\t\t\t\treturn new CKEDITOR.ui.richCombo( definition );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\n\t/**\n\t * @param {String} name\n\t * @param {Object} definition\n\t * @member CKEDITOR.ui\n\t * @todo\n\t */\n\tCKEDITOR.ui.prototype.addRichCombo = function( name, definition ) {\n\t\tthis.add( name, CKEDITOR.UI_RICHCOMBO, definition );\n\t};\n\n} )();\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n( function() {\n\tfunction addCombo( editor, comboName, styleType, lang, entries, defaultLabel, styleDefinition, order ) {\n\t\tvar config = editor.config,\n\t\t\tstyle = new CKEDITOR.style( styleDefinition );\n\n\t\t// Gets the list of fonts from the settings.\n\t\tvar names = entries.split( ';' ),\n\t\t\tvalues = [];\n\n\t\t// Create style objects for all fonts.\n\t\tvar styles = {};\n\t\tfor ( var i = 0; i < names.length; i++ ) {\n\t\t\tvar parts = names[ i ];\n\n\t\t\tif ( parts ) {\n\t\t\t\tparts = parts.split( '/' );\n\n\t\t\t\tvar vars = {},\n\t\t\t\t\tname = names[ i ] = parts[ 0 ];\n\n\t\t\t\tvars[ styleType ] = values[ i ] = parts[ 1 ] || name;\n\n\t\t\t\tstyles[ name ] = new CKEDITOR.style( styleDefinition, vars );\n\t\t\t\tstyles[ name ]._.definition.name = name;\n\t\t\t} else {\n\t\t\t\tnames.splice( i--, 1 );\n\t\t\t}\n\t\t}\n\n\t\teditor.ui.addRichCombo( comboName, {\n\t\t\tlabel: lang.label,\n\t\t\ttitle: lang.panelTitle,\n\t\t\ttoolbar: 'styles,' + order,\n\t\t\tallowedContent: style,\n\t\t\trequiredContent: style,\n\t\t\tcontentTransformations: [\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\telement: 'font',\n\t\t\t\t\t\tcheck: 'span',\n\t\t\t\t\t\tleft: function( element ) {\n\t\t\t\t\t\t\treturn !!element.attributes.size ||\n\t\t\t\t\t\t\t\t!!element.attributes.align ||\n\t\t\t\t\t\t\t\t!!element.attributes.face;\n\t\t\t\t\t\t},\n\t\t\t\t\t\tright: function( element ) {\n\t\t\t\t\t\t\tvar sizes = [\n\t\t\t\t\t\t\t\t'', // Non-existent size \"0\"\n\t\t\t\t\t\t\t\t'x-small',\n\t\t\t\t\t\t\t\t'small',\n\t\t\t\t\t\t\t\t'medium',\n\t\t\t\t\t\t\t\t'large',\n\t\t\t\t\t\t\t\t'x-large',\n\t\t\t\t\t\t\t\t'xx-large',\n\t\t\t\t\t\t\t\t'48px' // Closest value to what size=\"7\" might mean.\n\t\t\t\t\t\t\t];\n\n\t\t\t\t\t\t\telement.name = 'span';\n\n\t\t\t\t\t\t\tif ( element.attributes.size ) {\n\t\t\t\t\t\t\t\telement.styles[ 'font-size' ] = sizes[ element.attributes.size ];\n\t\t\t\t\t\t\t\tdelete element.attributes.size;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( element.attributes.align ) {\n\t\t\t\t\t\t\t\telement.styles[ 'text-align' ] = element.attributes.align;\n\t\t\t\t\t\t\t\tdelete element.attributes.align;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( element.attributes.face ) {\n\t\t\t\t\t\t\t\telement.styles[ 'font-family' ] = element.attributes.face;\n\t\t\t\t\t\t\t\tdelete element.attributes.face;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t],\n\t\t\tpanel: {\n\t\t\t\tcss: [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss ),\n\t\t\t\tmultiSelect: false,\n\t\t\t\tattributes: { 'aria-label': lang.panelTitle }\n\t\t\t},\n\n\t\t\tinit: function() {\n\t\t\t\tthis.startGroup( lang.panelTitle );\n\n\t\t\t\tfor ( var i = 0; i < names.length; i++ ) {\n\t\t\t\t\tvar name = names[ i ];\n\n\t\t\t\t\t// Add the tag entry to the panel list.\n\t\t\t\t\tthis.add( name, styles[ name ].buildPreview(), name );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tonClick: function( value ) {\n\t\t\t\teditor.focus();\n\t\t\t\teditor.fire( 'saveSnapshot' );\n\n\t\t\t\tvar previousValue = this.getValue(),\n\t\t\t\t\tstyle = styles[ value ];\n\n\t\t\t\t// When applying one style over another, first remove the previous one (http://dev.ckeditor.com/ticket/12403).\n\t\t\t\t// NOTE: This is only a temporary fix. It will be moved to the styles system (http://dev.ckeditor.com/ticket/12687).\n\t\t\t\tif ( previousValue && value != previousValue ) {\n\t\t\t\t\tvar previousStyle = styles[ previousValue ],\n\t\t\t\t\t\trange = editor.getSelection().getRanges()[ 0 ];\n\n\t\t\t\t\t// If the range is collapsed we can't simply use the editor.removeStyle method\n\t\t\t\t\t// because it will remove the entire element and we want to split it instead.\n\t\t\t\t\tif ( range.collapsed ) {\n\t\t\t\t\t\tvar path = editor.elementPath(),\n\t\t\t\t\t\t\t// Find the style element.\n\t\t\t\t\t\t\tmatching = path.contains( function( el ) {\n\t\t\t\t\t\t\t\treturn previousStyle.checkElementRemovable( el );\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tif ( matching ) {\n\t\t\t\t\t\t\tvar startBoundary = range.checkBoundaryOfElement( matching, CKEDITOR.START ),\n\t\t\t\t\t\t\t\tendBoundary = range.checkBoundaryOfElement( matching, CKEDITOR.END ),\n\t\t\t\t\t\t\t\tnode, bm;\n\n\t\t\t\t\t\t\t// If we are at both boundaries it means that the element is empty.\n\t\t\t\t\t\t\t// Remove it but in a way that we won't lose other empty inline elements inside it.\n\t\t\t\t\t\t\t// Example:

    x[]x

    \n\t\t\t\t\t\t\t// Result:

    x[]x

    \n\t\t\t\t\t\t\tif ( startBoundary && endBoundary ) {\n\t\t\t\t\t\t\t\tbm = range.createBookmark();\n\t\t\t\t\t\t\t\t// Replace the element with its children (TODO element.replaceWithChildren).\n\t\t\t\t\t\t\t\twhile ( ( node = matching.getFirst() ) ) {\n\t\t\t\t\t\t\t\t\tnode.insertBefore( matching );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tmatching.remove();\n\t\t\t\t\t\t\t\trange.moveToBookmark( bm );\n\n\t\t\t\t\t\t\t// If we are at the boundary of the style element, move out and copy nested styles/elements.\n\t\t\t\t\t\t\t} else if ( startBoundary || endBoundary ) {\n\t\t\t\t\t\t\t\trange.moveToPosition( matching, startBoundary ? CKEDITOR.POSITION_BEFORE_START : CKEDITOR.POSITION_AFTER_END );\n\t\t\t\t\t\t\t\tcloneSubtreeIntoRange( range, path.elements.slice(), matching );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// Split the element and clone the elements that were in the path\n\t\t\t\t\t\t\t\t// (between the startContainer and the matching element)\n\t\t\t\t\t\t\t\t// into the new place.\n\t\t\t\t\t\t\t\trange.splitElement( matching );\n\t\t\t\t\t\t\t\trange.moveToPosition( matching, CKEDITOR.POSITION_AFTER_END );\n\t\t\t\t\t\t\t\tcloneSubtreeIntoRange( range, path.elements.slice(), matching );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\teditor.getSelection().selectRanges( [ range ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\teditor.removeStyle( previousStyle );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\teditor[ previousValue == value ? 'removeStyle' : 'applyStyle' ]( style );\n\n\t\t\t\teditor.fire( 'saveSnapshot' );\n\t\t\t},\n\n\t\t\tonRender: function() {\n\t\t\t\teditor.on( 'selectionChange', function( ev ) {\n\t\t\t\t\tvar currentValue = this.getValue();\n\n\t\t\t\t\tvar elementPath = ev.data.path,\n\t\t\t\t\t\telements = elementPath.elements;\n\n\t\t\t\t\t// For each element into the elements path.\n\t\t\t\t\tfor ( var i = 0, element; i < elements.length; i++ ) {\n\t\t\t\t\t\telement = elements[ i ];\n\n\t\t\t\t\t\t// Check if the element is removable by any of\n\t\t\t\t\t\t// the styles.\n\t\t\t\t\t\tfor ( var value in styles ) {\n\t\t\t\t\t\t\tif ( styles[ value ].checkElementMatch( element, true, editor ) ) {\n\t\t\t\t\t\t\t\tif ( value != currentValue )\n\t\t\t\t\t\t\t\t\tthis.setValue( value );\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// If no styles match, just empty it.\n\t\t\t\t\tthis.setValue( '', defaultLabel );\n\t\t\t\t}, this );\n\t\t\t},\n\n\t\t\trefresh: function() {\n\t\t\t\tif ( !editor.activeFilter.check( style ) )\n\t\t\t\t\tthis.setState( CKEDITOR.TRISTATE_DISABLED );\n\t\t\t}\n\t\t} );\n\t}\n\n\t// Clones the subtree between subtreeStart (exclusive) and the\n\t// leaf (inclusive) and inserts it into the range.\n\t//\n\t// @param range\n\t// @param {CKEDITOR.dom.element[]} elements Elements path in the standard order: leaf -> root.\n\t// @param {CKEDITOR.dom.element/null} substreeStart The start of the subtree.\n\t// If null, then the leaf belongs to the subtree.\n\tfunction cloneSubtreeIntoRange( range, elements, subtreeStart ) {\n\t\tvar current = elements.pop();\n\t\tif ( !current ) {\n\t\t\treturn;\n\t\t}\n\t\t// Rewind the elements array up to the subtreeStart and then start the real cloning.\n\t\tif ( subtreeStart ) {\n\t\t\treturn cloneSubtreeIntoRange( range, elements, current.equals( subtreeStart ) ? null : subtreeStart );\n\t\t}\n\n\t\tvar clone = current.clone();\n\t\trange.insertNode( clone );\n\t\trange.moveToPosition( clone, CKEDITOR.POSITION_AFTER_START );\n\n\t\tcloneSubtreeIntoRange( range, elements );\n\t}\n\n\tCKEDITOR.plugins.add( 'font', {\n\t\trequires: 'richcombo',\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\t\tinit: function( editor ) {\n\t\t\tvar config = editor.config;\n\n\t\t\taddCombo( editor, 'Font', 'family', editor.lang.font, config.font_names, config.font_defaultLabel, config.font_style, 30 );\n\t\t\taddCombo( editor, 'FontSize', 'size', editor.lang.font.fontSize, config.fontSize_sizes, config.fontSize_defaultLabel, config.fontSize_style, 40 );\n\t\t}\n\t} );\n} )();\n\n/**\n * The list of fonts names to be displayed in the Font combo in the toolbar.\n * Entries are separated by semi-colons (`';'`), while it's possible to have more\n * than one font for each entry, in the HTML way (separated by comma).\n *\n * A display name may be optionally defined by prefixing the entries with the\n * name and the slash character. For example, `'Arial/Arial, Helvetica, sans-serif'`\n * will be displayed as `'Arial'` in the list, but will be outputted as\n * `'Arial, Helvetica, sans-serif'`.\n *\n *\t\tconfig.font_names =\n *\t\t\t'Arial/Arial, Helvetica, sans-serif;' +\n *\t\t\t'Times New Roman/Times New Roman, Times, serif;' +\n *\t\t\t'Verdana';\n *\n *\t\tconfig.font_names = 'Arial;Times New Roman;Verdana';\n *\n * @cfg {String} [font_names=see source]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.font_names = 'Arial/Arial, Helvetica, sans-serif;' +\n\t'Comic Sans MS/Comic Sans MS, cursive;' +\n\t'Courier New/Courier New, Courier, monospace;' +\n\t'Georgia/Georgia, serif;' +\n\t'Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;' +\n\t'Tahoma/Tahoma, Geneva, sans-serif;' +\n\t'Times New Roman/Times New Roman, Times, serif;' +\n\t'Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;' +\n\t'Verdana/Verdana, Geneva, sans-serif';\n\n/**\n * The text to be displayed in the Font combo is none of the available values\n * matches the current cursor position or text selection.\n *\n *\t\t// If the default site font is Arial, we may making it more explicit to the end user.\n *\t\tconfig.font_defaultLabel = 'Arial';\n *\n * @cfg {String} [font_defaultLabel='']\n * @member CKEDITOR.config\n */\nCKEDITOR.config.font_defaultLabel = '';\n\n/**\n * The style definition to be used to apply the font in the text.\n *\n *\t\t// This is actually the default value for it.\n *\t\tconfig.font_style = {\n *\t\t\telement:\t\t'span',\n *\t\t\tstyles:\t\t\t{ 'font-family': '#(family)' },\n *\t\t\toverrides:\t\t[ { element: 'font', attributes: { 'face': null } } ]\n * };\n *\n * @cfg {Object} [font_style=see example]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.font_style = {\n\telement: 'span',\n\tstyles: { 'font-family': '#(family)' },\n\toverrides: [ {\n\t\telement: 'font', attributes: { 'face': null }\n\t} ]\n};\n\n/**\n * The list of fonts size to be displayed in the Font Size combo in the\n * toolbar. Entries are separated by semi-colons (`';'`).\n *\n * Any kind of \"CSS like\" size can be used, like `'12px'`, `'2.3em'`, `'130%'`,\n * `'larger'` or `'x-small'`.\n *\n * A display name may be optionally defined by prefixing the entries with the\n * name and the slash character. For example, `'Bigger Font/14px'` will be\n * displayed as `'Bigger Font'` in the list, but will be outputted as `'14px'`.\n *\n *\t\tconfig.fontSize_sizes = '16/16px;24/24px;48/48px;';\n *\n *\t\tconfig.fontSize_sizes = '12px;2.3em;130%;larger;x-small';\n *\n *\t\tconfig.fontSize_sizes = '12 Pixels/12px;Big/2.3em;30 Percent More/130%;Bigger/larger;Very Small/x-small';\n *\n * @cfg {String} [fontSize_sizes=see source]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.fontSize_sizes = '8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px';\n\n/**\n * The text to be displayed in the Font Size combo is none of the available\n * values matches the current cursor position or text selection.\n *\n *\t\t// If the default site font size is 12px, we may making it more explicit to the end user.\n *\t\tconfig.fontSize_defaultLabel = '12px';\n *\n * @cfg {String} [fontSize_defaultLabel='']\n * @member CKEDITOR.config\n */\nCKEDITOR.config.fontSize_defaultLabel = '';\n\n/**\n * The style definition to be used to apply the font size in the text.\n *\n *\t\t// This is actually the default value for it.\n *\t\tconfig.fontSize_style = {\n *\t\t\telement:\t\t'span',\n *\t\t\tstyles:\t\t\t{ 'font-size': '#(size)' },\n *\t\t\toverrides:\t\t[ { element: 'font', attributes: { 'size': null } } ]\n *\t\t};\n *\n * @cfg {Object} [fontSize_style=see example]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.fontSize_style = {\n\telement: 'span',\n\tstyles: { 'font-size': '#(size)' },\n\toverrides: [ {\n\t\telement: 'font', attributes: { 'size': null }\n\t} ]\n};\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.plugins.add( 'format', {\n\trequires: 'richcombo',\n\t// jscs:disable maximumLineLength\n\t// jscs:enable maximumLineLength\n\tinit: function( editor ) {\n\t\tif ( editor.blockless )\n\t\t\treturn;\n\n\t\tvar config = editor.config,\n\t\t\tlang = editor.lang.format;\n\n\t\t// Gets the list of tags from the settings.\n\t\tvar tags = config.format_tags.split( ';' );\n\n\t\t// Create style objects for all defined styles.\n\t\tvar styles = {},\n\t\t\tstylesCount = 0,\n\t\t\tallowedContent = [];\n\t\tfor ( var i = 0; i < tags.length; i++ ) {\n\t\t\tvar tag = tags[ i ];\n\t\t\tvar style = new CKEDITOR.style( config[ 'format_' + tag ] );\n\t\t\tif ( !editor.filter.customConfig || editor.filter.check( style ) ) {\n\t\t\t\tstylesCount++;\n\t\t\t\tstyles[ tag ] = style;\n\t\t\t\tstyles[ tag ]._.enterMode = editor.config.enterMode;\n\t\t\t\tallowedContent.push( style );\n\t\t\t}\n\t\t}\n\n\t\t// Hide entire combo when all formats are rejected.\n\t\tif ( stylesCount === 0 )\n\t\t\treturn;\n\n\t\teditor.ui.addRichCombo( 'Format', {\n\t\t\tlabel: lang.label,\n\t\t\ttitle: lang.panelTitle,\n\t\t\ttoolbar: 'styles,20',\n\t\t\tallowedContent: allowedContent,\n\n\t\t\tpanel: {\n\t\t\t\tcss: [ CKEDITOR.skin.getPath( 'editor' ) ].concat( config.contentsCss ),\n\t\t\t\tmultiSelect: false,\n\t\t\t\tattributes: { 'aria-label': lang.panelTitle }\n\t\t\t},\n\n\t\t\tinit: function() {\n\t\t\t\tthis.startGroup( lang.panelTitle );\n\n\t\t\t\tfor ( var tag in styles ) {\n\t\t\t\t\tvar label = lang[ 'tag_' + tag ];\n\n\t\t\t\t\t// Add the tag entry to the panel list.\n\t\t\t\t\tthis.add( tag, styles[ tag ].buildPreview( label ), label );\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tonClick: function( value ) {\n\t\t\t\teditor.focus();\n\t\t\t\teditor.fire( 'saveSnapshot' );\n\n\t\t\t\tvar style = styles[ value ],\n\t\t\t\t\telementPath = editor.elementPath();\n\n\t\t\t\teditor[ style.checkActive( elementPath, editor ) ? 'removeStyle' : 'applyStyle' ]( style );\n\n\t\t\t\t// Save the undo snapshot after all changes are affected. (http://dev.ckeditor.com/ticket/4899)\n\t\t\t\tsetTimeout( function() {\n\t\t\t\t\teditor.fire( 'saveSnapshot' );\n\t\t\t\t}, 0 );\n\t\t\t},\n\n\t\t\tonRender: function() {\n\t\t\t\teditor.on( 'selectionChange', function( ev ) {\n\t\t\t\t\tvar currentTag = this.getValue(),\n\t\t\t\t\t\telementPath = ev.data.path;\n\n\t\t\t\t\tthis.refresh();\n\n\t\t\t\t\tfor ( var tag in styles ) {\n\t\t\t\t\t\tif ( styles[ tag ].checkActive( elementPath, editor ) ) {\n\t\t\t\t\t\t\tif ( tag != currentTag )\n\t\t\t\t\t\t\t\tthis.setValue( tag, editor.lang.format[ 'tag_' + tag ] );\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// If no styles match, just empty it.\n\t\t\t\t\tthis.setValue( '' );\n\n\t\t\t\t}, this );\n\t\t\t},\n\n\t\t\tonOpen: function() {\n\t\t\t\tthis.showAll();\n\t\t\t\tfor ( var name in styles ) {\n\t\t\t\t\tvar style = styles[ name ];\n\n\t\t\t\t\t// Check if that style is enabled in activeFilter.\n\t\t\t\t\tif ( !editor.activeFilter.check( style ) )\n\t\t\t\t\t\tthis.hideItem( name );\n\n\t\t\t\t}\n\t\t\t},\n\n\t\t\trefresh: function() {\n\t\t\t\tvar elementPath = editor.elementPath();\n\n\t\t\t\tif ( !elementPath )\n\t\t\t\t\t\treturn;\n\n\t\t\t\t// Check if element path contains 'p' element.\n\t\t\t\tif ( !elementPath.isContextFor( 'p' ) ) {\n\t\t\t\t\tthis.setState( CKEDITOR.TRISTATE_DISABLED );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Check if there is any available style.\n\t\t\t\tfor ( var name in styles ) {\n\t\t\t\t\tif ( editor.activeFilter.check( styles[ name ] ) )\n\t\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis.setState( CKEDITOR.TRISTATE_DISABLED );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n/**\n * A list of semicolon-separated style names (by default: tags) representing\n * the style definition for each entry to be displayed in the Format drop-down list\n * in the toolbar. Each entry must have a corresponding configuration in a\n * setting named `'format_(tagName)'`. For example, the `'p'` entry has its\n * definition taken from [config.format_p](#!/api/CKEDITOR.config-cfg-format_p).\n *\n * Read more in the [documentation](#!/guide/dev_format)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html).\n *\n *\t\tconfig.format_tags = 'p;h2;h3;pre';\n *\n * @cfg {String} [format_tags='p;h1;h2;h3;h4;h5;h6;pre;address;div']\n * @member CKEDITOR.config\n */\nCKEDITOR.config.format_tags = 'p;h1;h2;h3;h4;h5;h6;pre;address;div';\n\n/**\n * The style definition to be used to apply the `Normal` format.\n *\n * Read more in the [documentation](#!/guide/dev_format)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html).\n *\n *\t\tconfig.format_p = { element: 'p', attributes: { 'class': 'normalPara' } };\n *\n * @cfg {Object} [format_p={ element: 'p' }]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.format_p = { element: 'p' };\n\n/**\n * The style definition to be used to apply the `Normal (DIV)` format.\n *\n * Read more in the [documentation](#!/guide/dev_format)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html).\n *\n *\t\tconfig.format_div = { element: 'div', attributes: { 'class': 'normalDiv' } };\n *\n * @cfg {Object} [format_div={ element: 'div' }]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.format_div = { element: 'div' };\n\n/**\n * The style definition to be used to apply the `Formatted` format.\n *\n * Read more in the [documentation](#!/guide/dev_format)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html).\n *\n *\t\tconfig.format_pre = { element: 'pre', attributes: { 'class': 'code' } };\n *\n * @cfg {Object} [format_pre={ element: 'pre' }]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.format_pre = { element: 'pre' };\n\n/**\n * The style definition to be used to apply the `Address` format.\n *\n * Read more in the [documentation](#!/guide/dev_format)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html).\n *\n *\t\tconfig.format_address = { element: 'address', attributes: { 'class': 'styledAddress' } };\n *\n * @cfg {Object} [format_address={ element: 'address' }]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.format_address = { element: 'address' };\n\n/**\n * The style definition to be used to apply the `Heading 1` format.\n *\n * Read more in the [documentation](#!/guide/dev_format)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html).\n *\n *\t\tconfig.format_h1 = { element: 'h1', attributes: { 'class': 'contentTitle1' } };\n *\n * @cfg {Object} [format_h1={ element: 'h1' }]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.format_h1 = { element: 'h1' };\n\n/**\n * The style definition to be used to apply the `Heading 2` format.\n *\n * Read more in the [documentation](#!/guide/dev_format)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html).\n *\n *\t\tconfig.format_h2 = { element: 'h2', attributes: { 'class': 'contentTitle2' } };\n *\n * @cfg {Object} [format_h2={ element: 'h2' }]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.format_h2 = { element: 'h2' };\n\n/**\n * The style definition to be used to apply the `Heading 3` format.\n *\n * Read more in the [documentation](#!/guide/dev_format)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html).\n *\n *\t\tconfig.format_h3 = { element: 'h3', attributes: { 'class': 'contentTitle3' } };\n *\n * @cfg {Object} [format_h3={ element: 'h3' }]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.format_h3 = { element: 'h3' };\n\n/**\n * The style definition to be used to apply the `Heading 4` format.\n *\n * Read more in the [documentation](#!/guide/dev_format)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html).\n *\n *\t\tconfig.format_h4 = { element: 'h4', attributes: { 'class': 'contentTitle4' } };\n *\n * @cfg {Object} [format_h4={ element: 'h4' }]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.format_h4 = { element: 'h4' };\n\n/**\n * The style definition to be used to apply the `Heading 5` format.\n *\n * Read more in the [documentation](#!/guide/dev_format)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html).\n *\n *\t\tconfig.format_h5 = { element: 'h5', attributes: { 'class': 'contentTitle5' } };\n *\n * @cfg {Object} [format_h5={ element: 'h5' }]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.format_h5 = { element: 'h5' };\n\n/**\n * The style definition to be used to apply the `Heading 6` format.\n *\n * Read more in the [documentation](#!/guide/dev_format)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/format.html).\n *\n *\t\tconfig.format_h6 = { element: 'h6', attributes: { 'class': 'contentTitle6' } };\n *\n * @cfg {Object} [format_h6={ element: 'h6' }]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.format_h6 = { element: 'h6' };\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview Horizontal Rule plugin.\n */\n\n( function() {\n\tvar horizontalruleCmd = {\n\t\tcanUndo: false, // The undo snapshot will be handled by 'insertElement'.\n\t\texec: function( editor ) {\n\t\t\tvar hr = editor.document.createElement( 'hr' );\n\t\t\teditor.insertElement( hr );\n\t\t},\n\n\t\tallowedContent: 'hr',\n\t\trequiredContent: 'hr'\n\t};\n\n\tvar pluginName = 'horizontalrule';\n\n\t// Register a plugin named \"horizontalrule\".\n\tCKEDITOR.plugins.add( pluginName, {\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\t\tinit: function( editor ) {\n\t\t\tif ( editor.blockless )\n\t\t\t\treturn;\n\n\t\t\teditor.addCommand( pluginName, horizontalruleCmd );\n\t\t\teditor.ui.addButton && editor.ui.addButton( 'HorizontalRule', {\n\t\t\t\tlabel: editor.lang.horizontalrule.toolbar,\n\t\t\t\tcommand: pluginName,\n\t\t\t\ttoolbar: 'insert,40'\n\t\t\t} );\n\t\t}\n\t} );\n} )();\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.plugins.add( 'htmlwriter', {\n\tinit: function( editor ) {\n\t\tvar writer = new CKEDITOR.htmlWriter();\n\n\t\twriter.forceSimpleAmpersand = editor.config.forceSimpleAmpersand;\n\t\twriter.indentationChars = editor.config.dataIndentationChars || '\\t';\n\n\t\t// Overwrite default basicWriter initialized in hmtlDataProcessor constructor.\n\t\teditor.dataProcessor.writer = writer;\n\t}\n} );\n\n/**\n * The class used to write HTML data.\n *\n *\t\tvar writer = new CKEDITOR.htmlWriter();\n *\t\twriter.openTag( 'p' );\n *\t\twriter.attribute( 'class', 'MyClass' );\n *\t\twriter.openTagClose( 'p' );\n *\t\twriter.text( 'Hello' );\n *\t\twriter.closeTag( 'p' );\n *\t\talert( writer.getHtml() ); // '

    Hello

    '\n *\n * @class\n * @extends CKEDITOR.htmlParser.basicWriter\n */\nCKEDITOR.htmlWriter = CKEDITOR.tools.createClass( {\n\tbase: CKEDITOR.htmlParser.basicWriter,\n\n\t/**\n\t * Creates an `htmlWriter` class instance.\n\t *\n\t * @constructor\n\t */\n\t$: function() {\n\t\t// Call the base contructor.\n\t\tthis.base();\n\n\t\t/**\n\t\t * The characters to be used for each indentation step.\n\t\t *\n\t\t *\t\t// Use tab for indentation.\n\t\t *\t\teditorInstance.dataProcessor.writer.indentationChars = '\\t';\n\t\t */\n\t\tthis.indentationChars = '\\t';\n\n\t\t/**\n\t\t * The characters to be used to close \"self-closing\" elements, like `
    ` or ``.\n\t\t *\n\t\t *\t\t// Use HTML4 notation for self-closing elements.\n\t\t *\t\teditorInstance.dataProcessor.writer.selfClosingEnd = '>';\n\t\t */\n\t\tthis.selfClosingEnd = ' />';\n\n\t\t/**\n\t\t * The characters to be used for line breaks.\n\t\t *\n\t\t *\t\t// Use CRLF for line breaks.\n\t\t *\t\teditorInstance.dataProcessor.writer.lineBreakChars = '\\r\\n';\n\t\t */\n\t\tthis.lineBreakChars = '\\n';\n\n\t\tthis.sortAttributes = 1;\n\n\t\tthis._.indent = 0;\n\t\tthis._.indentation = '';\n\t\t// Indicate preformatted block context status. (http://dev.ckeditor.com/ticket/5789)\n\t\tthis._.inPre = 0;\n\t\tthis._.rules = {};\n\n\t\tvar dtd = CKEDITOR.dtd;\n\n\t\tfor ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) {\n\t\t\tthis.setRules( e, {\n\t\t\t\tindent: !dtd[ e ][ '#' ],\n\t\t\t\tbreakBeforeOpen: 1,\n\t\t\t\tbreakBeforeClose: !dtd[ e ][ '#' ],\n\t\t\t\tbreakAfterClose: 1,\n\t\t\t\tneedsSpace: ( e in dtd.$block ) && !( e in { li: 1, dt: 1, dd: 1 } )\n\t\t\t} );\n\t\t}\n\n\t\tthis.setRules( 'br', { breakAfterOpen: 1 } );\n\n\t\tthis.setRules( 'title', {\n\t\t\tindent: 0,\n\t\t\tbreakAfterOpen: 0\n\t\t} );\n\n\t\tthis.setRules( 'style', {\n\t\t\tindent: 0,\n\t\t\tbreakBeforeClose: 1\n\t\t} );\n\n\t\tthis.setRules( 'pre', {\n\t\t\tbreakAfterOpen: 1, // Keep line break after the opening tag\n\t\t\tindent: 0 // Disable indentation on
    .\n\t\t} );\n\t},\n\n\tproto: {\n\t\t/**\n\t\t * Writes the tag opening part for an opener tag.\n\t\t *\n\t\t *\t\t// Writes ''.\n\t\t *\t\twriter.openTagClose( 'p', false );\n\t\t *\n\t\t *\t\t// Writes ' />'.\n\t\t *\t\twriter.openTagClose( 'br', true );\n\t\t *\n\t\t * @param {String} tagName The element name for this tag.\n\t\t * @param {Boolean} isSelfClose Indicates that this is a self-closing tag,\n\t\t * like `
    ` or ``.\n\t\t */\n\t\topenTagClose: function( tagName, isSelfClose ) {\n\t\t\tvar rules = this._.rules[ tagName ];\n\n\t\t\tif ( isSelfClose ) {\n\t\t\t\tthis._.output.push( this.selfClosingEnd );\n\n\t\t\t\tif ( rules && rules.breakAfterClose )\n\t\t\t\t\tthis._.needsSpace = rules.needsSpace;\n\t\t\t} else {\n\t\t\t\tthis._.output.push( '>' );\n\n\t\t\t\tif ( rules && rules.indent )\n\t\t\t\t\tthis._.indentation += this.indentationChars;\n\t\t\t}\n\n\t\t\tif ( rules && rules.breakAfterOpen )\n\t\t\t\tthis.lineBreak();\n\t\t\ttagName == 'pre' && ( this._.inPre = 1 );\n\t\t},\n\n\t\t/**\n\t\t * Writes an attribute. This function should be called after opening the\n\t\t * tag with {@link #openTagClose}.\n\t\t *\n\t\t *\t\t// Writes ' class=\"MyClass\"'.\n\t\t *\t\twriter.attribute( 'class', 'MyClass' );\n\t\t *\n\t\t * @param {String} attName The attribute name.\n\t\t * @param {String} attValue The attribute value.\n\t\t */\n\t\tattribute: function( attName, attValue ) {\n\n\t\t\tif ( typeof attValue == 'string' ) {\n\t\t\t\tthis.forceSimpleAmpersand && ( attValue = attValue.replace( /&/g, '&' ) );\n\t\t\t\t// Browsers don't always escape special character in attribute values. (http://dev.ckeditor.com/ticket/4683, http://dev.ckeditor.com/ticket/4719).\n\t\t\t\tattValue = CKEDITOR.tools.htmlEncodeAttr( attValue );\n\t\t\t}\n\n\t\t\tthis._.output.push( ' ', attName, '=\"', attValue, '\"' );\n\t\t},\n\n\t\t/**\n\t\t * Writes a closer tag.\n\t\t *\n\t\t *\t\t// Writes '

    '.\n\t\t *\t\twriter.closeTag( 'p' );\n\t\t *\n\t\t * @param {String} tagName The element name for this tag.\n\t\t */\n\t\tcloseTag: function( tagName ) {\n\t\t\tvar rules = this._.rules[ tagName ];\n\n\t\t\tif ( rules && rules.indent )\n\t\t\t\tthis._.indentation = this._.indentation.substr( this.indentationChars.length );\n\n\t\t\tif ( this._.indent )\n\t\t\t\tthis.indentation();\n\t\t\t// Do not break if indenting.\n\t\t\telse if ( rules && rules.breakBeforeClose ) {\n\t\t\t\tthis.lineBreak();\n\t\t\t\tthis.indentation();\n\t\t\t}\n\n\t\t\tthis._.output.push( '' );\n\t\t\ttagName == 'pre' && ( this._.inPre = 0 );\n\n\t\t\tif ( rules && rules.breakAfterClose ) {\n\t\t\t\tthis.lineBreak();\n\t\t\t\tthis._.needsSpace = rules.needsSpace;\n\t\t\t}\n\n\t\t\tthis._.afterCloser = 1;\n\t\t},\n\n\t\t/**\n\t\t * Writes text.\n\t\t *\n\t\t *\t\t// Writes 'Hello Word'.\n\t\t *\t\twriter.text( 'Hello Word' );\n\t\t *\n\t\t * @param {String} text The text value\n\t\t */\n\t\ttext: function( text ) {\n\t\t\tif ( this._.indent ) {\n\t\t\t\tthis.indentation();\n\t\t\t\t!this._.inPre && ( text = CKEDITOR.tools.ltrim( text ) );\n\t\t\t}\n\n\t\t\tthis._.output.push( text );\n\t\t},\n\n\t\t/**\n\t\t * Writes a comment.\n\t\t *\n\t\t *\t\t// Writes \"\".\n\t\t *\t\twriter.comment( ' My comment ' );\n\t\t *\n\t\t * @param {String} comment The comment text.\n\t\t */\n\t\tcomment: function( comment ) {\n\t\t\tif ( this._.indent )\n\t\t\t\tthis.indentation();\n\n\t\t\tthis._.output.push( '' );\n\t\t},\n\n\t\t/**\n\t\t * Writes a line break. It uses the {@link #lineBreakChars} property for it.\n\t\t *\n\t\t *\t\t// Writes '\\n' (e.g.).\n\t\t *\t\twriter.lineBreak();\n\t\t */\n\t\tlineBreak: function() {\n\t\t\tif ( !this._.inPre && this._.output.length > 0 )\n\t\t\t\tthis._.output.push( this.lineBreakChars );\n\t\t\tthis._.indent = 1;\n\t\t},\n\n\t\t/**\n\t\t * Writes the current indentation character. It uses the {@link #indentationChars}\n\t\t * property, repeating it for the current indentation steps.\n\t\t *\n\t\t *\t\t// Writes '\\t' (e.g.).\n\t\t *\t\twriter.indentation();\n\t\t */\n\t\tindentation: function() {\n\t\t\tif ( !this._.inPre && this._.indentation )\n\t\t\t\tthis._.output.push( this._.indentation );\n\t\t\tthis._.indent = 0;\n\t\t},\n\n\t\t/**\n\t\t * Empties the current output buffer. It also brings back the default\n\t\t * values of the writer flags.\n\t\t *\n\t\t *\t\twriter.reset();\n\t\t */\n\t\treset: function() {\n\t\t\tthis._.output = [];\n\t\t\tthis._.indent = 0;\n\t\t\tthis._.indentation = '';\n\t\t\tthis._.afterCloser = 0;\n\t\t\tthis._.inPre = 0;\n\t\t\tthis._.needsSpace = 0;\n\t\t},\n\n\t\t/**\n\t\t * Sets formatting rules for a given element. Possible rules are:\n\t\t *\n\t\t * * `indent` – indent the element content.\n\t\t * * `breakBeforeOpen` – break line before the opener tag for this element.\n\t\t * * `breakAfterOpen` – break line after the opener tag for this element.\n\t\t * * `breakBeforeClose` – break line before the closer tag for this element.\n\t\t * * `breakAfterClose` – break line after the closer tag for this element.\n\t\t *\n\t\t * All rules default to `false`. Each function call overrides rules that are\n\t\t * already present, leaving the undefined ones untouched.\n\t\t *\n\t\t * By default, all elements available in the {@link CKEDITOR.dtd#$block},\n\t\t * {@link CKEDITOR.dtd#$listItem}, and {@link CKEDITOR.dtd#$tableContent}\n\t\t * lists have all the above rules set to `true`. Additionaly, the `
    `\n\t\t * element has the `breakAfterOpen` rule set to `true`.\n\t\t *\n\t\t *\t\t// Break line before and after \"img\" tags.\n\t\t *\t\twriter.setRules( 'img', {\n\t\t *\t\t\tbreakBeforeOpen: true\n\t\t *\t\t\tbreakAfterOpen: true\n\t\t *\t\t} );\n\t\t *\n\t\t *\t\t// Reset the rules for the \"h1\" tag.\n\t\t *\t\twriter.setRules( 'h1', {} );\n\t\t *\n\t\t * @param {String} tagName The name of the element for which the rules are set.\n\t\t * @param {Object} rules An object containing the element rules.\n\t\t */\n\t\tsetRules: function( tagName, rules ) {\n\t\t\tvar currentRules = this._.rules[ tagName ];\n\n\t\t\tif ( currentRules )\n\t\t\t\tCKEDITOR.tools.extend( currentRules, rules, true );\n\t\t\telse\n\t\t\t\tthis._.rules[ tagName ] = rules;\n\t\t}\n\t}\n} );\n\n/**\n * Whether to force using `'&'` instead of `'&'` in element attributes\n * values. It is not recommended to change this setting for compliance with the\n * W3C XHTML 1.0 standards ([C.12, XHTML 1.0](http://www.w3.org/TR/xhtml1/#C_12)).\n *\n *\t\t// Use `'&'` instead of `'&'`\n *\t\tCKEDITOR.config.forceSimpleAmpersand = true;\n *\n * @cfg {Boolean} [forceSimpleAmpersand=false]\n * @member CKEDITOR.config\n */\n\n/**\n * The characters to be used for indenting HTML output produced by the editor.\n * Using characters different from `' '` (space) and `'\\t'` (tab) is not recommended\n * as it will mess the code.\n *\n *\t\t// No indentation.\n *\t\tCKEDITOR.config.dataIndentationChars = '';\n *\n *\t\t// Use two spaces for indentation.\n *\t\tCKEDITOR.config.dataIndentationChars = ' ';\n *\n * @cfg {String} [dataIndentationChars='\\t']\n * @member CKEDITOR.config\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview The Image plugin.\n */\n\n( function() {\n\n\tCKEDITOR.plugins.add( 'image', {\n\t\trequires: 'dialog',\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\t\tinit: function( editor ) {\n\t\t\t// Abort when Image2 is to be loaded since both plugins\n\t\t\t// share the same button, command, etc. names (http://dev.ckeditor.com/ticket/11222).\n\t\t\tif ( editor.plugins.image2 )\n\t\t\t\treturn;\n\n\t\t\tvar pluginName = 'image';\n\n\t\t\t// Register the dialog.\n\t\t\tCKEDITOR.dialog.add( pluginName, this.path + 'dialogs/image.js' );\n\n\t\t\tvar allowed = 'img[alt,!src]{border-style,border-width,float,height,margin,margin-bottom,margin-left,margin-right,margin-top,width}',\n\t\t\t\trequired = 'img[alt,src]';\n\n\t\t\tif ( CKEDITOR.dialog.isTabEnabled( editor, pluginName, 'advanced' ) )\n\t\t\t\tallowed = 'img[alt,dir,id,lang,longdesc,!src,title]{*}(*)';\n\n\t\t\t// Register the command.\n\t\t\teditor.addCommand( pluginName, new CKEDITOR.dialogCommand( pluginName, {\n\t\t\t\tallowedContent: allowed,\n\t\t\t\trequiredContent: required,\n\t\t\t\tcontentTransformations: [\n\t\t\t\t\t[ 'img{width}: sizeToStyle', 'img[width]: sizeToAttribute' ],\n\t\t\t\t\t[ 'img{float}: alignmentToStyle', 'img[align]: alignmentToAttribute' ]\n\t\t\t\t]\n\t\t\t} ) );\n\n\t\t\t// Register the toolbar button.\n\t\t\teditor.ui.addButton && editor.ui.addButton( 'Image', {\n\t\t\t\tlabel: editor.lang.common.image,\n\t\t\t\tcommand: pluginName,\n\t\t\t\ttoolbar: 'insert,10'\n\t\t\t} );\n\n\t\t\teditor.on( 'doubleclick', function( evt ) {\n\t\t\t\tvar element = evt.data.element;\n\n\t\t\t\tif ( element.is( 'img' ) && !element.data( 'cke-realelement' ) && !element.isReadOnly() )\n\t\t\t\t\tevt.data.dialog = 'image';\n\t\t\t} );\n\n\t\t\t// If the \"menu\" plugin is loaded, register the menu items.\n\t\t\tif ( editor.addMenuItems ) {\n\t\t\t\teditor.addMenuItems( {\n\t\t\t\t\timage: {\n\t\t\t\t\t\tlabel: editor.lang.image.menu,\n\t\t\t\t\t\tcommand: 'image',\n\t\t\t\t\t\tgroup: 'image'\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// If the \"contextmenu\" plugin is loaded, register the listeners.\n\t\t\tif ( editor.contextMenu ) {\n\t\t\t\teditor.contextMenu.addListener( function( element ) {\n\t\t\t\t\tif ( getSelectedImage( editor, element ) )\n\t\t\t\t\t\treturn { image: CKEDITOR.TRISTATE_OFF };\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\t\tafterInit: function( editor ) {\n\t\t\t// Abort when Image2 is to be loaded since both plugins\n\t\t\t// share the same button, command, etc. names (http://dev.ckeditor.com/ticket/11222).\n\t\t\tif ( editor.plugins.image2 )\n\t\t\t\treturn;\n\n\t\t\t// Customize the behavior of the alignment commands. (http://dev.ckeditor.com/ticket/7430)\n\t\t\tsetupAlignCommand( 'left' );\n\t\t\tsetupAlignCommand( 'right' );\n\t\t\tsetupAlignCommand( 'center' );\n\t\t\tsetupAlignCommand( 'block' );\n\n\t\t\tfunction setupAlignCommand( value ) {\n\t\t\t\tvar command = editor.getCommand( 'justify' + value );\n\t\t\t\tif ( command ) {\n\t\t\t\t\tif ( value == 'left' || value == 'right' ) {\n\t\t\t\t\t\tcommand.on( 'exec', function( evt ) {\n\t\t\t\t\t\t\tvar img = getSelectedImage( editor ),\n\t\t\t\t\t\t\t\talign;\n\t\t\t\t\t\t\tif ( img ) {\n\t\t\t\t\t\t\t\talign = getImageAlignment( img );\n\t\t\t\t\t\t\t\tif ( align == value ) {\n\t\t\t\t\t\t\t\t\timg.removeStyle( 'float' );\n\n\t\t\t\t\t\t\t\t\t// Remove \"align\" attribute when necessary.\n\t\t\t\t\t\t\t\t\tif ( value == getImageAlignment( img ) )\n\t\t\t\t\t\t\t\t\t\timg.removeAttribute( 'align' );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\timg.setStyle( 'float', value );\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tevt.cancel();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\tcommand.on( 'refresh', function( evt ) {\n\t\t\t\t\t\tvar img = getSelectedImage( editor ),\n\t\t\t\t\t\t\talign;\n\t\t\t\t\t\tif ( img ) {\n\t\t\t\t\t\t\talign = getImageAlignment( img );\n\n\t\t\t\t\t\t\tthis.setState(\n\t\t\t\t\t\t\t( align == value ) ? CKEDITOR.TRISTATE_ON : ( value == 'right' || value == 'left' ) ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );\n\n\t\t\t\t\t\t\tevt.cancel();\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} );\n\n\tfunction getSelectedImage( editor, element ) {\n\t\tif ( !element ) {\n\t\t\tvar sel = editor.getSelection();\n\t\t\telement = sel.getSelectedElement();\n\t\t}\n\n\t\tif ( element && element.is( 'img' ) && !element.data( 'cke-realelement' ) && !element.isReadOnly() )\n\t\t\treturn element;\n\t}\n\n\tfunction getImageAlignment( element ) {\n\t\tvar align = element.getStyle( 'float' );\n\n\t\tif ( align == 'inherit' || align == 'none' )\n\t\t\talign = 0;\n\n\t\tif ( !align )\n\t\t\talign = element.getAttribute( 'align' );\n\n\t\treturn align;\n\t}\n\n} )();\n\n/**\n * Determines whether dimension inputs should be automatically filled when the image URL changes in the Image plugin dialog window.\n *\n *\t\tconfig.image_prefillDimensions = false;\n *\n * @since 4.5\n * @cfg {Boolean} [image_prefillDimensions=true]\n * @member CKEDITOR.config\n */\n\n/**\n * Whether to remove links when emptying the link URL field in the Image dialog window.\n *\n *\t\tconfig.image_removeLinkByEmptyURL = false;\n *\n * @cfg {Boolean} [image_removeLinkByEmptyURL=true]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.image_removeLinkByEmptyURL = true;\n\n/**\n * Padding text to set off the image in the preview area.\n *\n *\t\tconfig.image_previewText = CKEDITOR.tools.repeat( '___ ', 100 );\n *\n * @cfg {String} [image_previewText='Lorem ipsum dolor...' (placeholder text)]\n * @member CKEDITOR.config\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview Increase and Decrease Indent commands.\n */\n\n( function() {\n\t'use strict';\n\n\tvar TRISTATE_DISABLED = CKEDITOR.TRISTATE_DISABLED,\n\t\tTRISTATE_OFF = CKEDITOR.TRISTATE_OFF;\n\n\tCKEDITOR.plugins.add( 'indent', {\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\n\t\tinit: function( editor ) {\n\t\t\tvar genericDefinition = CKEDITOR.plugins.indent.genericDefinition;\n\n\t\t\t// Register generic commands.\n\t\t\tsetupGenericListeners( editor, editor.addCommand( 'indent', new genericDefinition( true ) ) );\n\t\t\tsetupGenericListeners( editor, editor.addCommand( 'outdent', new genericDefinition() ) );\n\n\t\t\t// Create and register toolbar button if possible.\n\t\t\tif ( editor.ui.addButton ) {\n\t\t\t\teditor.ui.addButton( 'Indent', {\n\t\t\t\t\tlabel: editor.lang.indent.indent,\n\t\t\t\t\tcommand: 'indent',\n\t\t\t\t\tdirectional: true,\n\t\t\t\t\ttoolbar: 'indent,20'\n\t\t\t\t} );\n\n\t\t\t\teditor.ui.addButton( 'Outdent', {\n\t\t\t\t\tlabel: editor.lang.indent.outdent,\n\t\t\t\t\tcommand: 'outdent',\n\t\t\t\t\tdirectional: true,\n\t\t\t\t\ttoolbar: 'indent,10'\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Register dirChanged listener.\n\t\t\teditor.on( 'dirChanged', function( evt ) {\n\t\t\t\tvar range = editor.createRange(),\n\t\t\t\t\tdataNode = evt.data.node;\n\n\t\t\t\trange.setStartBefore( dataNode );\n\t\t\t\trange.setEndAfter( dataNode );\n\n\t\t\t\tvar walker = new CKEDITOR.dom.walker( range ),\n\t\t\t\t\tnode;\n\n\t\t\t\twhile ( ( node = walker.next() ) ) {\n\t\t\t\t\tif ( node.type == CKEDITOR.NODE_ELEMENT ) {\n\t\t\t\t\t\t// A child with the defined dir is to be ignored.\n\t\t\t\t\t\tif ( !node.equals( dataNode ) && node.getDirection() ) {\n\t\t\t\t\t\t\trange.setStartAfter( node );\n\t\t\t\t\t\t\twalker = new CKEDITOR.dom.walker( range );\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Switch alignment classes.\n\t\t\t\t\t\tvar classes = editor.config.indentClasses;\n\t\t\t\t\t\tif ( classes ) {\n\t\t\t\t\t\t\tvar suffix = ( evt.data.dir == 'ltr' ) ? [ '_rtl', '' ] : [ '', '_rtl' ];\n\t\t\t\t\t\t\tfor ( var i = 0; i < classes.length; i++ ) {\n\t\t\t\t\t\t\t\tif ( node.hasClass( classes[ i ] + suffix[ 0 ] ) ) {\n\t\t\t\t\t\t\t\t\tnode.removeClass( classes[ i ] + suffix[ 0 ] );\n\t\t\t\t\t\t\t\t\tnode.addClass( classes[ i ] + suffix[ 1 ] );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Switch the margins.\n\t\t\t\t\t\tvar marginLeft = node.getStyle( 'margin-right' ),\n\t\t\t\t\t\t\tmarginRight = node.getStyle( 'margin-left' );\n\n\t\t\t\t\t\tmarginLeft ? node.setStyle( 'margin-left', marginLeft ) : node.removeStyle( 'margin-left' );\n\t\t\t\t\t\tmarginRight ? node.setStyle( 'margin-right', marginRight ) : node.removeStyle( 'margin-right' );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n\n\t/**\n\t * Global command class definitions and global helpers.\n\t *\n\t * @class\n\t * @singleton\n\t */\n\tCKEDITOR.plugins.indent = {\n\t\t/**\n\t\t * A base class for a generic command definition, responsible mainly for creating\n\t\t * Increase Indent and Decrease Indent toolbar buttons as well as for refreshing\n\t\t * UI states.\n\t\t *\n\t\t * Commands of this class do not perform any indentation by themselves. They\n\t\t * delegate this job to content-specific indentation commands (i.e. indentlist).\n\t\t *\n\t\t * @class CKEDITOR.plugins.indent.genericDefinition\n\t\t * @extends CKEDITOR.commandDefinition\n\t\t * @param {CKEDITOR.editor} editor The editor instance this command will be\n\t\t * applied to.\n\t\t * @param {String} name The name of the command.\n\t\t * @param {Boolean} [isIndent] Defines the command as indenting or outdenting.\n\t\t */\n\t\tgenericDefinition: function( isIndent ) {\n\t\t\t/**\n\t\t\t * Determines whether the command belongs to the indentation family.\n\t\t\t * Otherwise it is assumed to be an outdenting command.\n\t\t\t *\n\t\t\t * @readonly\n\t\t\t * @property {Boolean} [=false]\n\t\t\t */\n\t\t\tthis.isIndent = !!isIndent;\n\n\t\t\t// Mimic naive startDisabled behavior for outdent.\n\t\t\tthis.startDisabled = !this.isIndent;\n\t\t},\n\n\t\t/**\n\t\t * A base class for specific indentation command definitions responsible for\n\t\t * handling a pre-defined set of elements i.e. indentlist for lists or\n\t\t * indentblock for text block elements.\n\t\t *\n\t\t * Commands of this class perform indentation operations and modify the DOM structure.\n\t\t * They listen for events fired by {@link CKEDITOR.plugins.indent.genericDefinition}\n\t\t * and execute defined actions.\n\t\t *\n\t\t * **NOTE**: This is not an {@link CKEDITOR.command editor command}.\n\t\t * Context-specific commands are internal, for indentation system only.\n\t\t *\n\t\t * @class CKEDITOR.plugins.indent.specificDefinition\n\t\t * @param {CKEDITOR.editor} editor The editor instance this command will be\n\t\t * applied to.\n\t\t * @param {String} name The name of the command.\n\t\t * @param {Boolean} [isIndent] Defines the command as indenting or outdenting.\n\t\t */\n\t\tspecificDefinition: function( editor, name, isIndent ) {\n\t\t\tthis.name = name;\n\t\t\tthis.editor = editor;\n\n\t\t\t/**\n\t\t\t * An object of jobs handled by the command. Each job consists\n\t\t\t * of two functions: `refresh` and `exec` as well as the execution priority.\n\t\t\t *\n\t\t\t *\t* The `refresh` function determines whether a job is doable for\n\t\t\t *\t a particular context. These functions are executed in the\n\t\t\t *\t order of priorities, one by one, for all plugins that registered\n\t\t\t *\t jobs. As jobs are related to generic commands, refreshing\n\t\t\t *\t occurs when the global command is firing the `refresh` event.\n\t\t\t *\n\t\t\t *\t **Note**: This function must return either {@link CKEDITOR#TRISTATE_DISABLED}\n\t\t\t *\t or {@link CKEDITOR#TRISTATE_OFF}.\n\t\t\t *\n\t\t\t *\t* The `exec` function modifies the DOM if possible. Just like\n\t\t\t *\t `refresh`, `exec` functions are executed in the order of priorities\n\t\t\t *\t while the generic command is executed. This function is not executed\n\t\t\t *\t if `refresh` for this job returned {@link CKEDITOR#TRISTATE_DISABLED}.\n\t\t\t *\n\t\t\t *\t **Note**: This function must return a Boolean value, indicating whether it\n\t\t\t *\t was successful. If a job was successful, then no other jobs are being executed.\n\t\t\t *\n\t\t\t * Sample definition:\n\t\t\t *\n\t\t\t *\t\tcommand.jobs = {\n\t\t\t *\t\t\t// Priority = 20.\n\t\t\t *\t\t\t'20': {\n\t\t\t *\t\t\t\trefresh( editor, path ) {\n\t\t\t *\t\t\t\t\tif ( condition )\n\t\t\t *\t\t\t\t\t\treturn CKEDITOR.TRISTATE_OFF;\n\t\t\t *\t\t\t\t\telse\n\t\t\t *\t\t\t\t\t\treturn CKEDITOR.TRISTATE_DISABLED;\n\t\t\t *\t\t\t\t},\n\t\t\t *\t\t\t\texec( editor ) {\n\t\t\t *\t\t\t\t\t// DOM modified! This was OK.\n\t\t\t *\t\t\t\t\treturn true;\n\t\t\t *\t\t\t\t}\n\t\t\t *\t\t\t},\n\t\t\t *\t\t\t// Priority = 60. This job is done later.\n\t\t\t *\t\t\t'60': {\n\t\t\t *\t\t\t\t// Another job.\n\t\t\t *\t\t\t}\n\t\t\t *\t\t};\n\t\t\t *\n\t\t\t * For additional information, please check comments for\n\t\t\t * the `setupGenericListeners` function.\n\t\t\t *\n\t\t\t * @readonly\n\t\t\t * @property {Object} [={}]\n\t\t\t */\n\t\t\tthis.jobs = {};\n\n\t\t\t/**\n\t\t\t * Determines whether the editor that the command belongs to has\n\t\t\t * {@link CKEDITOR.config#enterMode config.enterMode} set to {@link CKEDITOR#ENTER_BR}.\n\t\t\t *\n\t\t\t * @readonly\n\t\t\t * @see CKEDITOR.config#enterMode\n\t\t\t * @property {Boolean} [=false]\n\t\t\t */\n\t\t\tthis.enterBr = editor.config.enterMode == CKEDITOR.ENTER_BR;\n\n\t\t\t/**\n\t\t\t * Determines whether the command belongs to the indentation family.\n\t\t\t * Otherwise it is assumed to be an outdenting command.\n\t\t\t *\n\t\t\t * @readonly\n\t\t\t * @property {Boolean} [=false]\n\t\t\t */\n\t\t\tthis.isIndent = !!isIndent;\n\n\t\t\t/**\n\t\t\t * The name of the global command related to this one.\n\t\t\t *\n\t\t\t * @readonly\n\t\t\t */\n\t\t\tthis.relatedGlobal = isIndent ? 'indent' : 'outdent';\n\n\t\t\t/**\n\t\t\t * A keystroke associated with this command (*Tab* or *Shift+Tab*).\n\t\t\t *\n\t\t\t * @readonly\n\t\t\t */\n\t\t\tthis.indentKey = isIndent ? 9 : CKEDITOR.SHIFT + 9;\n\n\t\t\t/**\n\t\t\t * Stores created markers for the command so they can eventually be\n\t\t\t * purged after the `exec` function is run.\n\t\t\t */\n\t\t\tthis.database = {};\n\t\t},\n\n\t\t/**\n\t\t * Registers content-specific commands as a part of the indentation system\n\t\t * directed by generic commands. Once a command is registered,\n\t\t * it listens for events of a related generic command.\n\t\t *\n\t\t *\t\tCKEDITOR.plugins.indent.registerCommands( editor, {\n\t\t *\t\t\t'indentlist': new indentListCommand( editor, 'indentlist' ),\n\t\t *\t\t\t'outdentlist': new indentListCommand( editor, 'outdentlist' )\n\t\t *\t\t} );\n\t\t *\n\t\t * Content-specific commands listen for the generic command's `exec` and\n\t\t * try to execute their own jobs, one after another. If some execution is\n\t\t * successful, `evt.data.done` is set so no more jobs (commands) are involved.\n\t\t *\n\t\t * Content-specific commands also listen for the generic command's `refresh`\n\t\t * and fill the `evt.data.states` object with states of jobs. A generic command\n\t\t * uses this data to determine its own state and to update the UI.\n\t\t *\n\t\t * @member CKEDITOR.plugins.indent\n\t\t * @param {CKEDITOR.editor} editor The editor instance this command is\n\t\t * applied to.\n\t\t * @param {Object} commands An object of {@link CKEDITOR.command}.\n\t\t */\n\t\tregisterCommands: function( editor, commands ) {\n\t\t\teditor.on( 'pluginsLoaded', function() {\n\t\t\t\tfor ( var name in commands ) {\n\t\t\t\t\t( function( editor, command ) {\n\t\t\t\t\t\tvar relatedGlobal = editor.getCommand( command.relatedGlobal );\n\n\t\t\t\t\t\tfor ( var priority in command.jobs ) {\n\t\t\t\t\t\t\t// Observe generic exec event and execute command when necessary.\n\t\t\t\t\t\t\t// If the command was successfully handled by the command and\n\t\t\t\t\t\t\t// DOM has been modified, stop event propagation so no other plugin\n\t\t\t\t\t\t\t// will bother. Job is done.\n\t\t\t\t\t\t\trelatedGlobal.on( 'exec', function( evt ) {\n\t\t\t\t\t\t\t\tif ( evt.data.done )\n\t\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t\t// Make sure that anything this command will do is invisible\n\t\t\t\t\t\t\t\t// for undoManager. What undoManager only can see and\n\t\t\t\t\t\t\t\t// remember is the execution of the global command (relatedGlobal).\n\t\t\t\t\t\t\t\teditor.fire( 'lockSnapshot' );\n\n\t\t\t\t\t\t\t\tif ( command.execJob( editor, priority ) )\n\t\t\t\t\t\t\t\t\tevt.data.done = true;\n\n\t\t\t\t\t\t\t\teditor.fire( 'unlockSnapshot' );\n\n\t\t\t\t\t\t\t\t// Clean up the markers.\n\t\t\t\t\t\t\t\tCKEDITOR.dom.element.clearAllMarkers( command.database );\n\t\t\t\t\t\t\t}, this, null, priority );\n\n\t\t\t\t\t\t\t// Observe generic refresh event and force command refresh.\n\t\t\t\t\t\t\t// Once refreshed, save command state in event data\n\t\t\t\t\t\t\t// so generic command plugin can update its own state and UI.\n\t\t\t\t\t\t\trelatedGlobal.on( 'refresh', function( evt ) {\n\t\t\t\t\t\t\t\tif ( !evt.data.states )\n\t\t\t\t\t\t\t\t\tevt.data.states = {};\n\n\t\t\t\t\t\t\t\tevt.data.states[ command.name + '@' + priority ] =\n\t\t\t\t\t\t\t\t\tcommand.refreshJob( editor, priority, evt.data.path );\n\t\t\t\t\t\t\t}, this, null, priority );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Since specific indent commands have no UI elements,\n\t\t\t\t\t\t// they need to be manually registered as a editor feature.\n\t\t\t\t\t\teditor.addFeature( command );\n\t\t\t\t\t} )( this, commands[ name ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t};\n\n\tCKEDITOR.plugins.indent.genericDefinition.prototype = {\n\t\tcontext: 'p',\n\n\t\texec: function() {}\n\t};\n\n\tCKEDITOR.plugins.indent.specificDefinition.prototype = {\n\t\t/**\n\t\t * Executes the content-specific procedure if the context is correct.\n\t\t * It calls the `exec` function of a job of the given `priority`\n\t\t * that modifies the DOM.\n\t\t *\n\t\t * @param {CKEDITOR.editor} editor The editor instance this command\n\t\t * will be applied to.\n\t\t * @param {Number} priority The priority of the job to be executed.\n\t\t * @returns {Boolean} Indicates whether the job was successful.\n\t\t */\n\t\texecJob: function( editor, priority ) {\n\t\t\tvar job = this.jobs[ priority ];\n\n\t\t\tif ( job.state != TRISTATE_DISABLED )\n\t\t\t\treturn job.exec.call( this, editor );\n\t\t},\n\n\t\t/**\n\t\t * Calls the `refresh` function of a job of the given `priority`.\n\t\t * The function returns the state of the job which can be either\n\t\t * {@link CKEDITOR#TRISTATE_DISABLED} or {@link CKEDITOR#TRISTATE_OFF}.\n\t\t *\n\t\t * @param {CKEDITOR.editor} editor The editor instance this command\n\t\t * will be applied to.\n\t\t * @param {Number} priority The priority of the job to be executed.\n\t\t * @returns {Number} The state of the job.\n\t\t */\n\t\trefreshJob: function( editor, priority, path ) {\n\t\t\tvar job = this.jobs[ priority ];\n\n\t\t\tif ( !editor.activeFilter.checkFeature( this ) )\n\t\t\t\tjob.state = TRISTATE_DISABLED;\n\t\t\telse\n\t\t\t\tjob.state = job.refresh.call( this, editor, path );\n\n\t\t\treturn job.state;\n\t\t},\n\n\t\t/**\n\t\t * Checks if the element path contains the element handled\n\t\t * by this indentation command.\n\t\t *\n\t\t * @param {CKEDITOR.dom.elementPath} node A path to be checked.\n\t\t * @returns {CKEDITOR.dom.element}\n\t\t */\n\t\tgetContext: function( path ) {\n\t\t\treturn path.contains( this.context );\n\t\t}\n\t};\n\n\t/**\n\t * Attaches event listeners for this generic command. Since the indentation\n\t * system is event-oriented, generic commands communicate with\n\t * content-specific commands using the `exec` and `refresh` events.\n\t *\n\t * Listener priorities are crucial. Different indentation phases\n\t * are executed with different priorities.\n\t *\n\t * For the `exec` event:\n\t *\n\t *\t* 0: Selection and bookmarks are saved by the generic command.\n\t *\t* 1-99: Content-specific commands try to indent the code by executing\n\t *\t their own jobs ({@link CKEDITOR.plugins.indent.specificDefinition#jobs}).\n\t *\t* 100: Bookmarks are re-selected by the generic command.\n\t *\n\t * The visual interpretation looks as follows:\n\t *\n\t *\t\t +------------------+\n\t *\t\t | Exec event fired |\n\t *\t\t +------ + ---------+\n\t *\t\t |\n\t *\t\t 0 -<----------+ Selection and bookmarks saved.\n\t *\t\t |\n\t *\t\t |\n\t *\t\t 25 -<---+ Exec 1st job of plugin#1 (return false, continuing...).\n\t *\t\t |\n\t *\t\t |\n\t *\t\t 50 -<---+ Exec 1st job of plugin#2 (return false, continuing...).\n\t *\t\t |\n\t *\t\t |\n\t *\t\t 75 -<---+ Exec 2nd job of plugin#1 (only if plugin#2 failed).\n\t *\t\t |\n\t *\t\t |\n\t *\t\t 100 -<-----------+ Re-select bookmarks, clean-up.\n\t *\t\t |\n\t *\t\t+-------- v ----------+\n\t *\t\t| Exec event finished |\n\t *\t\t+---------------------+\n\t *\n\t * For the `refresh` event:\n\t *\n\t *\t* <100: Content-specific commands refresh their job states according\n\t *\t to the given path. Jobs save their states in the `evt.data.states` object\n\t *\t passed along with the event. This can be either {@link CKEDITOR#TRISTATE_DISABLED}\n\t *\t or {@link CKEDITOR#TRISTATE_OFF}.\n\t *\t* 100: Command state is determined according to what states\n\t *\t have been returned by content-specific jobs (`evt.data.states`).\n\t *\t UI elements are updated at this stage.\n\t *\n\t *\t **Note**: If there is at least one job with the {@link CKEDITOR#TRISTATE_OFF} state,\n\t *\t then the generic command state is also {@link CKEDITOR#TRISTATE_OFF}. Otherwise,\n\t *\t the command state is {@link CKEDITOR#TRISTATE_DISABLED}.\n\t *\n\t * @param {CKEDITOR.command} command The command to be set up.\n\t * @private\n\t */\n\tfunction setupGenericListeners( editor, command ) {\n\t\tvar selection, bookmarks;\n\n\t\t// Set the command state according to content-specific\n\t\t// command states.\n\t\tcommand.on( 'refresh', function( evt ) {\n\t\t\t// If no state comes with event data, disable command.\n\t\t\tvar states = [ TRISTATE_DISABLED ];\n\n\t\t\tfor ( var s in evt.data.states )\n\t\t\t\tstates.push( evt.data.states[ s ] );\n\n\t\t\tthis.setState( CKEDITOR.tools.search( states, TRISTATE_OFF ) ? TRISTATE_OFF : TRISTATE_DISABLED );\n\t\t}, command, null, 100 );\n\n\t\t// Initialization. Save bookmarks and mark event as not handled\n\t\t// by any plugin (command) yet.\n\t\tcommand.on( 'exec', function( evt ) {\n\t\t\tselection = editor.getSelection();\n\t\t\tbookmarks = selection.createBookmarks( 1 );\n\n\t\t\t// Mark execution as not handled yet.\n\t\t\tif ( !evt.data )\n\t\t\t\tevt.data = {};\n\n\t\t\tevt.data.done = false;\n\t\t}, command, null, 0 );\n\n\t\t// Housekeeping. Make sure selectionChange will be called.\n\t\t// Also re-select previously saved bookmarks.\n\t\tcommand.on( 'exec', function() {\n\t\t\teditor.forceNextSelectionCheck();\n\t\t\tselection.selectBookmarks( bookmarks );\n\t\t}, command, null, 100 );\n\t}\n} )();\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview Handles the indentation of lists.\n */\n\n( function() {\n\t'use strict';\n\n\tvar isNotWhitespaces = CKEDITOR.dom.walker.whitespaces( true ),\n\t\tisNotBookmark = CKEDITOR.dom.walker.bookmark( false, true ),\n\t\tTRISTATE_DISABLED = CKEDITOR.TRISTATE_DISABLED,\n\t\tTRISTATE_OFF = CKEDITOR.TRISTATE_OFF;\n\n\tCKEDITOR.plugins.add( 'indentlist', {\n\t\trequires: 'indent',\n\t\tinit: function( editor ) {\n\t\t\tvar globalHelpers = CKEDITOR.plugins.indent;\n\n\t\t\t// Register commands.\n\t\t\tglobalHelpers.registerCommands( editor, {\n\t\t\t\tindentlist: new commandDefinition( editor, 'indentlist', true ),\n\t\t\t\toutdentlist: new commandDefinition( editor, 'outdentlist' )\n\t\t\t} );\n\n\t\t\tfunction commandDefinition( editor ) {\n\t\t\t\tglobalHelpers.specificDefinition.apply( this, arguments );\n\n\t\t\t\t// Require ul OR ol list.\n\t\t\t\tthis.requiredContent = [ 'ul', 'ol' ];\n\n\t\t\t\t// Indent and outdent lists with TAB/SHIFT+TAB key. Indenting can\n\t\t\t\t// be done for any list item that isn't the first child of the parent.\n\t\t\t\teditor.on( 'key', function( evt ) {\n\t\t\t\t\tvar path = editor.elementPath();\n\n\t\t\t\t\tif ( editor.mode != 'wysiwyg' )\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tif ( evt.data.keyCode == this.indentKey ) {\n\t\t\t\t\t\t// Prevent of getting context of empty path (#424)(https://dev.ckeditor.com/ticket/17028).\n\t\t\t\t\t\tif ( !path ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar list = this.getContext( path );\n\n\t\t\t\t\t\tif ( list ) {\n\t\t\t\t\t\t\t// Don't indent if in first list item of the parent.\n\t\t\t\t\t\t\t// Outdent, however, can always be done to collapse\n\t\t\t\t\t\t\t// the list into a paragraph (div).\n\t\t\t\t\t\t\tif ( this.isIndent && CKEDITOR.plugins.indentList.firstItemInPath( this.context, path, list ) )\n\t\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t\t// Exec related global indentation command. Global\n\t\t\t\t\t\t\t// commands take care of bookmarks and selection,\n\t\t\t\t\t\t\t// so it's much easier to use them instead of\n\t\t\t\t\t\t\t// content-specific commands.\n\t\t\t\t\t\t\teditor.execCommand( this.relatedGlobal );\n\n\t\t\t\t\t\t\t// Cancel the key event so editor doesn't lose focus.\n\t\t\t\t\t\t\tevt.cancel();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}, this );\n\n\t\t\t\t// There are two different jobs for this plugin:\n\t\t\t\t//\n\t\t\t\t//\t* Indent job (priority=10), before indentblock.\n\t\t\t\t//\n\t\t\t\t//\t This job is before indentblock because, if this plugin is\n\t\t\t\t//\t loaded it has higher priority over indentblock. It means that,\n\t\t\t\t//\t if possible, nesting is performed, and then block manipulation,\n\t\t\t\t//\t if necessary.\n\t\t\t\t//\n\t\t\t\t//\t* Outdent job (priority=30), after outdentblock.\n\t\t\t\t//\n\t\t\t\t//\t This job got to be after outdentblock because in some cases\n\t\t\t\t//\t (margin, config#indentClass on list) outdent must be done on\n\t\t\t\t//\t block-level.\n\n\t\t\t\tthis.jobs[ this.isIndent ? 10 : 30 ] = {\n\t\t\t\t\trefresh: this.isIndent ?\n\t\t\t\t\t\tfunction( editor, path ) {\n\t\t\t\t\t\t\tvar list = this.getContext( path ),\n\t\t\t\t\t\t\t\tinFirstListItem = CKEDITOR.plugins.indentList.firstItemInPath( this.context, path, list );\n\n\t\t\t\t\t\t\tif ( !list || !this.isIndent || inFirstListItem )\n\t\t\t\t\t\t\t\treturn TRISTATE_DISABLED;\n\n\t\t\t\t\t\t\treturn TRISTATE_OFF;\n\t\t\t\t\t\t} : function( editor, path ) {\n\t\t\t\t\t\t\tvar list = this.getContext( path );\n\n\t\t\t\t\t\t\tif ( !list || this.isIndent )\n\t\t\t\t\t\t\t\treturn TRISTATE_DISABLED;\n\n\t\t\t\t\t\t\treturn TRISTATE_OFF;\n\t\t\t\t\t\t},\n\n\t\t\t\t\texec: CKEDITOR.tools.bind( indentList, this )\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tCKEDITOR.tools.extend( commandDefinition.prototype, globalHelpers.specificDefinition.prototype, {\n\t\t\t\t// Elements that, if in an elementpath, will be handled by this\n\t\t\t\t// command. They restrict the scope of the plugin.\n\t\t\t\tcontext: { ol: 1, ul: 1 }\n\t\t\t} );\n\t\t}\n\t} );\n\n\tfunction indentList( editor ) {\n\t\tvar that = this,\n\t\t\tdatabase = this.database,\n\t\t\tcontext = this.context,\n\t\t\trange;\n\n\t\tfunction indent( listNode ) {\n\t\t\t// Our starting and ending points of the range might be inside some blocks under a list item...\n\t\t\t// So before playing with the iterator, we need to expand the block to include the list items.\n\t\t\tvar startContainer = range.startContainer,\n\t\t\t\tendContainer = range.endContainer;\n\t\t\twhile ( startContainer && !startContainer.getParent().equals( listNode ) )\n\t\t\t\tstartContainer = startContainer.getParent();\n\t\t\twhile ( endContainer && !endContainer.getParent().equals( listNode ) )\n\t\t\t\tendContainer = endContainer.getParent();\n\n\t\t\tif ( !startContainer || !endContainer )\n\t\t\t\treturn false;\n\n\t\t\t// Now we can iterate over the individual items on the same tree depth.\n\t\t\tvar block = startContainer,\n\t\t\t\titemsToMove = [],\n\t\t\t\tstopFlag = false;\n\n\t\t\twhile ( !stopFlag ) {\n\t\t\t\tif ( block.equals( endContainer ) )\n\t\t\t\t\tstopFlag = true;\n\n\t\t\t\titemsToMove.push( block );\n\t\t\t\tblock = block.getNext();\n\t\t\t}\n\n\t\t\tif ( itemsToMove.length < 1 )\n\t\t\t\treturn false;\n\n\t\t\t// Do indent or outdent operations on the array model of the list, not the\n\t\t\t// list's DOM tree itself. The array model demands that it knows as much as\n\t\t\t// possible about the surrounding lists, we need to feed it the further\n\t\t\t// ancestor node that is still a list.\n\t\t\tvar listParents = listNode.getParents( true );\n\t\t\tfor ( var i = 0; i < listParents.length; i++ ) {\n\t\t\t\tif ( listParents[ i ].getName && context[ listParents[ i ].getName() ] ) {\n\t\t\t\t\tlistNode = listParents[ i ];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar indentOffset = that.isIndent ? 1 : -1,\n\t\t\t\tstartItem = itemsToMove[ 0 ],\n\t\t\t\tlastItem = itemsToMove[ itemsToMove.length - 1 ],\n\n\t\t\t\t// Convert the list DOM tree into a one dimensional array.\n\t\t\t\tlistArray = CKEDITOR.plugins.list.listToArray( listNode, database ),\n\n\t\t\t\t// Apply indenting or outdenting on the array.\n\t\t\t\tbaseIndent = listArray[ lastItem.getCustomData( 'listarray_index' ) ].indent;\n\n\t\t\tfor ( i = startItem.getCustomData( 'listarray_index' ); i <= lastItem.getCustomData( 'listarray_index' ); i++ ) {\n\t\t\t\tlistArray[ i ].indent += indentOffset;\n\t\t\t\t// Make sure the newly created sublist get a brand-new element of the same type. (http://dev.ckeditor.com/ticket/5372)\n\t\t\t\tif ( indentOffset > 0 ) {\n\t\t\t\t\tvar listRoot = listArray[ i ].parent;\n\t\t\t\t\tlistArray[ i ].parent = new CKEDITOR.dom.element( listRoot.getName(), listRoot.getDocument() );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( i = lastItem.getCustomData( 'listarray_index' ) + 1; i < listArray.length && listArray[ i ].indent > baseIndent; i++ )\n\t\t\t\tlistArray[ i ].indent += indentOffset;\n\n\t\t\t// Convert the array back to a DOM forest (yes we might have a few subtrees now).\n\t\t\t// And replace the old list with the new forest.\n\t\t\tvar newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode, listNode.getDirection() );\n\n\t\t\t// Avoid nested
  • after outdent even they're visually same,\n\t\t\t// recording them for later refactoring.(http://dev.ckeditor.com/ticket/3982)\n\t\t\tif ( !that.isIndent ) {\n\t\t\t\tvar parentLiElement;\n\t\t\t\tif ( ( parentLiElement = listNode.getParent() ) && parentLiElement.is( 'li' ) ) {\n\t\t\t\t\tvar children = newList.listNode.getChildren(),\n\t\t\t\t\t\tpendingLis = [],\n\t\t\t\t\t\tcount = children.count(),\n\t\t\t\t\t\tchild;\n\n\t\t\t\t\tfor ( i = count - 1; i >= 0; i-- ) {\n\t\t\t\t\t\tif ( ( child = children.getItem( i ) ) && child.is && child.is( 'li' ) )\n\t\t\t\t\t\t\tpendingLis.push( child );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( newList )\n\t\t\t\tnewList.listNode.replace( listNode );\n\n\t\t\t// Move the nested
  • to be appeared after the parent.\n\t\t\tif ( pendingLis && pendingLis.length ) {\n\t\t\t\tfor ( i = 0; i < pendingLis.length; i++ ) {\n\t\t\t\t\tvar li = pendingLis[ i ],\n\t\t\t\t\t\tfollowingList = li;\n\n\t\t\t\t\t// Nest preceding
      /
        inside current
      1. if any.\n\t\t\t\t\twhile ( ( followingList = followingList.getNext() ) && followingList.is && followingList.getName() in context ) {\n\t\t\t\t\t\t// IE requires a filler NBSP for nested list inside empty list item,\n\t\t\t\t\t\t// otherwise the list item will be inaccessiable. (http://dev.ckeditor.com/ticket/4476)\n\t\t\t\t\t\tif ( CKEDITOR.env.needsNbspFiller && !li.getFirst( neitherWhitespacesNorBookmark ) )\n\t\t\t\t\t\t\tli.append( range.document.createText( '\\u00a0' ) );\n\n\t\t\t\t\t\tli.append( followingList );\n\t\t\t\t\t}\n\n\t\t\t\t\tli.insertAfter( parentLiElement );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( newList )\n\t\t\t\teditor.fire( 'contentDomInvalidated' );\n\n\t\t\treturn true;\n\t\t}\n\n\t\tvar selection = editor.getSelection(),\n\t\t\tranges = selection && selection.getRanges(),\n\t\t\titerator = ranges.createIterator();\n\n\t\twhile ( ( range = iterator.getNextRange() ) ) {\n\t\t\tvar nearestListBlock = range.getCommonAncestor();\n\n\t\t\twhile ( nearestListBlock && !( nearestListBlock.type == CKEDITOR.NODE_ELEMENT && context[ nearestListBlock.getName() ] ) ) {\n\t\t\t\t// Avoid having plugin propagate to parent of editor in inline mode by canceling the indentation. (http://dev.ckeditor.com/ticket/12796)\n\t\t\t\tif ( editor.editable().equals( nearestListBlock ) ) {\n\t\t\t\t\tnearestListBlock = false;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tnearestListBlock = nearestListBlock.getParent();\n\t\t\t}\n\n\t\t\t// Avoid having selection boundaries out of the list.\n\t\t\t//
        • [...

        ...]

        =>
        • [...]

        ...

        \n\t\t\tif ( !nearestListBlock ) {\n\t\t\t\tif ( ( nearestListBlock = range.startPath().contains( context ) ) )\n\t\t\t\t\trange.setEndAt( nearestListBlock, CKEDITOR.POSITION_BEFORE_END );\n\t\t\t}\n\n\t\t\t// Avoid having selection enclose the entire list. (http://dev.ckeditor.com/ticket/6138)\n\t\t\t// [
        • ...
        ] =>
        • [...]
        \n\t\t\tif ( !nearestListBlock ) {\n\t\t\t\tvar selectedNode = range.getEnclosedNode();\n\t\t\t\tif ( selectedNode && selectedNode.type == CKEDITOR.NODE_ELEMENT && selectedNode.getName() in context ) {\n\t\t\t\t\trange.setStartAt( selectedNode, CKEDITOR.POSITION_AFTER_START );\n\t\t\t\t\trange.setEndAt( selectedNode, CKEDITOR.POSITION_BEFORE_END );\n\t\t\t\t\tnearestListBlock = selectedNode;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Avoid selection anchors under list root.\n\t\t\t//
          [
        • ...
        • ]
        =>\t
        • [...]
        \n\t\t\tif ( nearestListBlock && range.startContainer.type == CKEDITOR.NODE_ELEMENT && range.startContainer.getName() in context ) {\n\t\t\t\tvar walker = new CKEDITOR.dom.walker( range );\n\t\t\t\twalker.evaluator = listItem;\n\t\t\t\trange.startContainer = walker.next();\n\t\t\t}\n\n\t\t\tif ( nearestListBlock && range.endContainer.type == CKEDITOR.NODE_ELEMENT && range.endContainer.getName() in context ) {\n\t\t\t\twalker = new CKEDITOR.dom.walker( range );\n\t\t\t\twalker.evaluator = listItem;\n\t\t\t\trange.endContainer = walker.previous();\n\t\t\t}\n\n\t\t\tif ( nearestListBlock )\n\t\t\t\treturn indent( nearestListBlock );\n\t\t}\n\t\treturn 0;\n\t}\n\n\t// Determines whether a node is a list
      2. element.\n\tfunction listItem( node ) {\n\t\treturn node.type == CKEDITOR.NODE_ELEMENT && node.is( 'li' );\n\t}\n\n\tfunction neitherWhitespacesNorBookmark( node ) {\n\t\treturn isNotWhitespaces( node ) && isNotBookmark( node );\n\t}\n\n\t/**\n\t * Global namespace for methods exposed by the Indent List plugin.\n\t *\n\t * @singleton\n\t * @class\n\t */\n\tCKEDITOR.plugins.indentList = {};\n\n\t/**\n\t * Checks whether the first child of the list is in the path.\n\t * The list can be extracted from the path or given explicitly\n\t * e.g. for better performance if cached.\n\t *\n\t * @since 4.4.6\n\t * @param {Object} query See the {@link CKEDITOR.dom.elementPath#contains} method arguments.\n\t * @param {CKEDITOR.dom.elementPath} path\n\t * @param {CKEDITOR.dom.element} [list]\n\t * @returns {Boolean}\n\t * @member CKEDITOR.plugins.indentList\n\t */\n\tCKEDITOR.plugins.indentList.firstItemInPath = function( query, path, list ) {\n\t\tvar firstListItemInPath = path.contains( listItem );\n\t\tif ( !list )\n\t\t\tlist = path.contains( query );\n\n\t\treturn list && firstListItemInPath && firstListItemInPath.equals( list.getFirst( listItem ) );\n\t};\n} )();\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview Justify commands.\n */\n\n( function() {\n\tfunction getAlignment( element, useComputedState ) {\n\t\tuseComputedState = useComputedState === undefined || useComputedState;\n\n\t\tvar align;\n\t\tif ( useComputedState )\n\t\t\talign = element.getComputedStyle( 'text-align' );\n\t\telse {\n\t\t\twhile ( !element.hasAttribute || !( element.hasAttribute( 'align' ) || element.getStyle( 'text-align' ) ) ) {\n\t\t\t\tvar parent = element.getParent();\n\t\t\t\tif ( !parent )\n\t\t\t\t\tbreak;\n\t\t\t\telement = parent;\n\t\t\t}\n\t\t\talign = element.getStyle( 'text-align' ) || element.getAttribute( 'align' ) || '';\n\t\t}\n\n\t\t// Sometimes computed values doesn't tell.\n\t\talign && ( align = align.replace( /(?:-(?:moz|webkit)-)?(?:start|auto)/i, '' ) );\n\n\t\t!align && useComputedState && ( align = element.getComputedStyle( 'direction' ) == 'rtl' ? 'right' : 'left' );\n\n\t\treturn align;\n\t}\n\n\tfunction justifyCommand( editor, name, value ) {\n\t\tthis.editor = editor;\n\t\tthis.name = name;\n\t\tthis.value = value;\n\t\tthis.context = 'p';\n\t\tvar classes = editor.config.justifyClasses,\n\t\t\tblockTag = editor.config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div';\n\n\t\tif ( classes ) {\n\t\t\tswitch ( value ) {\n\t\t\t\tcase 'left':\n\t\t\t\t\tthis.cssClassName = classes[ 0 ];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'center':\n\t\t\t\t\tthis.cssClassName = classes[ 1 ];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'right':\n\t\t\t\t\tthis.cssClassName = classes[ 2 ];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'justify':\n\t\t\t\t\tthis.cssClassName = classes[ 3 ];\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.cssClassRegex = new RegExp( '(?:^|\\\\s+)(?:' + classes.join( '|' ) + ')(?=$|\\\\s)' );\n\t\t\tthis.requiredContent = blockTag + '(' + this.cssClassName + ')';\n\t\t}\n\t\telse {\n\t\t\tthis.requiredContent = blockTag + '{text-align}';\n\t\t}\n\n\t\tthis.allowedContent = {\n\t\t\t'caption div h1 h2 h3 h4 h5 h6 p pre td th li': {\n\t\t\t\t// Do not add elements, but only text-align style if element is validated by other rule.\n\t\t\t\tpropertiesOnly: true,\n\t\t\t\tstyles: this.cssClassName ? null : 'text-align',\n\t\t\t\tclasses: this.cssClassName || null\n\t\t\t}\n\t\t};\n\n\t\t// In enter mode BR we need to allow here for div, because when non other\n\t\t// feature allows div justify is the only plugin that uses it.\n\t\tif ( editor.config.enterMode == CKEDITOR.ENTER_BR )\n\t\t\tthis.allowedContent.div = true;\n\t}\n\n\tfunction onDirChanged( e ) {\n\t\tvar editor = e.editor;\n\n\t\tvar range = editor.createRange();\n\t\trange.setStartBefore( e.data.node );\n\t\trange.setEndAfter( e.data.node );\n\n\t\tvar walker = new CKEDITOR.dom.walker( range ),\n\t\t\tnode;\n\n\t\twhile ( ( node = walker.next() ) ) {\n\t\t\tif ( node.type == CKEDITOR.NODE_ELEMENT ) {\n\t\t\t\t// A child with the defined dir is to be ignored.\n\t\t\t\tif ( !node.equals( e.data.node ) && node.getDirection() ) {\n\t\t\t\t\trange.setStartAfter( node );\n\t\t\t\t\twalker = new CKEDITOR.dom.walker( range );\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Switch the alignment.\n\t\t\t\tvar classes = editor.config.justifyClasses;\n\t\t\t\tif ( classes ) {\n\t\t\t\t\t// The left align class.\n\t\t\t\t\tif ( node.hasClass( classes[ 0 ] ) ) {\n\t\t\t\t\t\tnode.removeClass( classes[ 0 ] );\n\t\t\t\t\t\tnode.addClass( classes[ 2 ] );\n\t\t\t\t\t}\n\t\t\t\t\t// The right align class.\n\t\t\t\t\telse if ( node.hasClass( classes[ 2 ] ) ) {\n\t\t\t\t\t\tnode.removeClass( classes[ 2 ] );\n\t\t\t\t\t\tnode.addClass( classes[ 0 ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Always switch CSS margins.\n\t\t\t\tvar style = 'text-align';\n\t\t\t\tvar align = node.getStyle( style );\n\n\t\t\t\tif ( align == 'left' )\n\t\t\t\t\tnode.setStyle( style, 'right' );\n\t\t\t\telse if ( align == 'right' )\n\t\t\t\t\tnode.setStyle( style, 'left' );\n\t\t\t}\n\t\t}\n\t}\n\n\tjustifyCommand.prototype = {\n\t\texec: function( editor ) {\n\t\t\tvar selection = editor.getSelection(),\n\t\t\t\tenterMode = editor.config.enterMode;\n\n\t\t\tif ( !selection )\n\t\t\t\treturn;\n\n\t\t\tvar bookmarks = selection.createBookmarks(),\n\t\t\t\tranges = selection.getRanges();\n\n\t\t\tvar cssClassName = this.cssClassName,\n\t\t\t\titerator, block;\n\n\t\t\tvar useComputedState = editor.config.useComputedState;\n\t\t\tuseComputedState = useComputedState === undefined || useComputedState;\n\n\t\t\tfor ( var i = ranges.length - 1; i >= 0; i-- ) {\n\t\t\t\titerator = ranges[ i ].createIterator();\n\t\t\t\titerator.enlargeBr = enterMode != CKEDITOR.ENTER_BR;\n\n\t\t\t\twhile ( ( block = iterator.getNextParagraph( enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' ) ) ) {\n\t\t\t\t\tif ( block.isReadOnly() )\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t// Check if style or class might be applied to currently processed element (#455).\n\t\t\t\t\tvar tag = block.getName(),\n\t\t\t\t\t\tisAllowedTextAlign, isAllowedCssClass;\n\n\t\t\t\t\tisAllowedTextAlign = editor.activeFilter.check( tag + '{text-align}' );\n\t\t\t\t\tisAllowedCssClass = editor.activeFilter.check( tag + '(' + cssClassName + ')' );\n\n\t\t\t\t\tif ( !isAllowedCssClass && !isAllowedTextAlign ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\tblock.removeAttribute( 'align' );\n\t\t\t\t\tblock.removeStyle( 'text-align' );\n\n\t\t\t\t\t// Remove any of the alignment classes from the className.\n\t\t\t\t\tvar className = cssClassName && ( block.$.className = CKEDITOR.tools.ltrim( block.$.className.replace( this.cssClassRegex, '' ) ) );\n\n\t\t\t\t\tvar apply = ( this.state == CKEDITOR.TRISTATE_OFF ) && ( !useComputedState || ( getAlignment( block, true ) != this.value ) );\n\n\t\t\t\t\tif ( cssClassName && isAllowedCssClass ) {\n\t\t\t\t\t\t// Append the desired class name.\n\t\t\t\t\t\tif ( apply )\n\t\t\t\t\t\t\tblock.addClass( cssClassName );\n\t\t\t\t\t\telse if ( !className )\n\t\t\t\t\t\t\tblock.removeAttribute( 'class' );\n\t\t\t\t\t} else if ( apply && isAllowedTextAlign ) {\n\t\t\t\t\t\tblock.setStyle( 'text-align', this.value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\teditor.focus();\n\t\t\teditor.forceNextSelectionCheck();\n\t\t\tselection.selectBookmarks( bookmarks );\n\t\t},\n\n\t\trefresh: function( editor, path ) {\n\t\t\tvar firstBlock = path.block || path.blockLimit,\n\t\t\t\tname = firstBlock.getName(),\n\t\t\t\tisEditable = firstBlock.equals( editor.editable() ),\n\t\t\t\tisStylable = this.cssClassName ? editor.activeFilter.check( name + '(' + this.cssClassName + ')' ) :\n\t\t\t\t\teditor.activeFilter.check( name + '{text-align}' );\n\n\t\t\t// #455\n\t\t\t// 1. Check if we are directly in editbale. Justification should be always allowed, and not highlighted.\n\t\t\t// Checking path.elements.length is required to filter out situation `body > ul` where ul is selected and path.blockLimit returns editable.\n\t\t\t// 2. Check if current element can have applied specific class.\n\t\t\t// 3. Check if current element can have applied text-align style.\n\t\t\tif ( isEditable && path.elements.length === 1 ) {\n\t\t\t\tthis.setState( CKEDITOR.TRISTATE_OFF );\n\t\t\t} else if ( !isEditable && isStylable ) {\n\t\t\t\t// 2 & 3 in one condition.\n\t\t\t\tthis.setState( getAlignment( firstBlock, this.editor.config.useComputedState ) == this.value ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );\n\t\t\t} else {\n\t\t\t\tthis.setState( CKEDITOR.TRISTATE_DISABLED );\n\t\t\t}\n\t\t}\n\t};\n\n\tCKEDITOR.plugins.add( 'justify', {\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\t\tinit: function( editor ) {\n\t\t\tif ( editor.blockless )\n\t\t\t\treturn;\n\n\t\t\tvar left = new justifyCommand( editor, 'justifyleft', 'left' ),\n\t\t\t\tcenter = new justifyCommand( editor, 'justifycenter', 'center' ),\n\t\t\t\tright = new justifyCommand( editor, 'justifyright', 'right' ),\n\t\t\t\tjustify = new justifyCommand( editor, 'justifyblock', 'justify' );\n\n\t\t\teditor.addCommand( 'justifyleft', left );\n\t\t\teditor.addCommand( 'justifycenter', center );\n\t\t\teditor.addCommand( 'justifyright', right );\n\t\t\teditor.addCommand( 'justifyblock', justify );\n\n\t\t\tif ( editor.ui.addButton ) {\n\t\t\t\teditor.ui.addButton( 'JustifyLeft', {\n\t\t\t\t\tlabel: editor.lang.justify.left,\n\t\t\t\t\tcommand: 'justifyleft',\n\t\t\t\t\ttoolbar: 'align,10'\n\t\t\t\t} );\n\t\t\t\teditor.ui.addButton( 'JustifyCenter', {\n\t\t\t\t\tlabel: editor.lang.justify.center,\n\t\t\t\t\tcommand: 'justifycenter',\n\t\t\t\t\ttoolbar: 'align,20'\n\t\t\t\t} );\n\t\t\t\teditor.ui.addButton( 'JustifyRight', {\n\t\t\t\t\tlabel: editor.lang.justify.right,\n\t\t\t\t\tcommand: 'justifyright',\n\t\t\t\t\ttoolbar: 'align,30'\n\t\t\t\t} );\n\t\t\t\teditor.ui.addButton( 'JustifyBlock', {\n\t\t\t\t\tlabel: editor.lang.justify.block,\n\t\t\t\t\tcommand: 'justifyblock',\n\t\t\t\t\ttoolbar: 'align,40'\n\t\t\t\t} );\n\t\t\t}\n\t\t\teditor.on( 'dirChanged', onDirChanged );\n\t\t}\n\t} );\n} )();\n\n/**\n * List of classes to use for aligning the contents. If it's `null`, no classes will be used\n * and instead the corresponding CSS values will be used.\n *\n * The array should contain 4 members, in the following order: left, center, right, justify.\n *\n *\t\t// Use the classes 'AlignLeft', 'AlignCenter', 'AlignRight', 'AlignJustify'\n *\t\tconfig.justifyClasses = [ 'AlignLeft', 'AlignCenter', 'AlignRight', 'AlignJustify' ];\n *\n * @cfg {Array} [justifyClasses=null]\n * @member CKEDITOR.config\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n( function() {\n\tvar cssStyle = CKEDITOR.htmlParser.cssStyle,\n\t\tcssLength = CKEDITOR.tools.cssLength;\n\n\tvar cssLengthRegex = /^((?:\\d*(?:\\.\\d+))|(?:\\d+))(.*)?$/i;\n\n\t// Replacing the former CSS length value with the later one, with\n\t// adjustment to the length unit.\n\tfunction replaceCssLength( length1, length2 ) {\n\t\tvar parts1 = cssLengthRegex.exec( length1 ),\n\t\t\tparts2 = cssLengthRegex.exec( length2 );\n\n\t\t// Omit pixel length unit when necessary,\n\t\t// e.g. replaceCssLength( 10, '20px' ) -> 20\n\t\tif ( parts1 ) {\n\t\t\tif ( !parts1[ 2 ] && parts2[ 2 ] == 'px' )\n\t\t\t\treturn parts2[ 1 ];\n\t\t\tif ( parts1[ 2 ] == 'px' && !parts2[ 2 ] )\n\t\t\t\treturn parts2[ 1 ] + 'px';\n\t\t}\n\n\t\treturn length2;\n\t}\n\n\tvar htmlFilterRules = {\n\t\telements: {\n\t\t\t$: function( element ) {\n\t\t\t\tvar attributes = element.attributes,\n\t\t\t\t\trealHtml = attributes && attributes[ 'data-cke-realelement' ],\n\t\t\t\t\trealFragment = realHtml && new CKEDITOR.htmlParser.fragment.fromHtml( decodeURIComponent( realHtml ) ),\n\t\t\t\t\trealElement = realFragment && realFragment.children[ 0 ];\n\n\t\t\t\t// Width/height in the fake object are subjected to clone into the real element.\n\t\t\t\tif ( realElement && element.attributes[ 'data-cke-resizable' ] ) {\n\t\t\t\t\tvar styles = new cssStyle( element ).rules,\n\t\t\t\t\t\trealAttrs = realElement.attributes,\n\t\t\t\t\t\twidth = styles.width,\n\t\t\t\t\t\theight = styles.height;\n\n\t\t\t\t\twidth && ( realAttrs.width = replaceCssLength( realAttrs.width, width ) );\n\t\t\t\t\theight && ( realAttrs.height = replaceCssLength( realAttrs.height, height ) );\n\t\t\t\t}\n\n\t\t\t\treturn realElement;\n\t\t\t}\n\t\t}\n\t};\n\n\tCKEDITOR.plugins.add( 'fakeobjects', {\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\n\t\tinit: function( editor ) {\n\t\t\t// Allow image with all styles and classes plus src, alt and title attributes.\n\t\t\t// We need them when fakeobject is pasted.\n\t\t\teditor.filter.allow( 'img[!data-cke-realelement,src,alt,title](*){*}', 'fakeobjects' );\n\t\t},\n\n\t\tafterInit: function( editor ) {\n\t\t\tvar dataProcessor = editor.dataProcessor,\n\t\t\t\thtmlFilter = dataProcessor && dataProcessor.htmlFilter;\n\n\t\t\tif ( htmlFilter ) {\n\t\t\t\thtmlFilter.addRules( htmlFilterRules, {\n\t\t\t\t\tapplyToAll: true\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n\n\t/**\n\t * Creates fake {@link CKEDITOR.dom.element} based on real element.\n\t * Fake element is an img with special attributes, which keep real element properties.\n\t *\n\t * @member CKEDITOR.editor\n\t * @param {CKEDITOR.dom.element} realElement Real element to transform.\n\t * @param {String} className Class name which will be used as class of fake element.\n\t * @param {String} realElementType Stores type of fake element.\n\t * @param {Boolean} isResizable Keeps information if element is resizable.\n\t * @returns {CKEDITOR.dom.element} Fake element.\n\t */\n\tCKEDITOR.editor.prototype.createFakeElement = function( realElement, className, realElementType, isResizable ) {\n\t\tvar lang = this.lang.fakeobjects,\n\t\t\tlabel = lang[ realElementType ] || lang.unknown;\n\n\t\tvar attributes = {\n\t\t\t'class': className,\n\t\t\t'data-cke-realelement': encodeURIComponent( realElement.getOuterHtml() ),\n\t\t\t'data-cke-real-node-type': realElement.type,\n\t\t\talt: label,\n\t\t\ttitle: label,\n\t\t\talign: realElement.getAttribute( 'align' ) || ''\n\t\t};\n\n\t\t// Do not set \"src\" on high-contrast so the alt text is displayed. (http://dev.ckeditor.com/ticket/8945)\n\t\tif ( !CKEDITOR.env.hc )\n\t\t\tattributes.src = CKEDITOR.tools.transparentImageData;\n\n\t\tif ( realElementType )\n\t\t\tattributes[ 'data-cke-real-element-type' ] = realElementType;\n\n\t\tif ( isResizable ) {\n\t\t\tattributes[ 'data-cke-resizable' ] = isResizable;\n\n\t\t\tvar fakeStyle = new cssStyle();\n\n\t\t\tvar width = realElement.getAttribute( 'width' ),\n\t\t\t\theight = realElement.getAttribute( 'height' );\n\n\t\t\twidth && ( fakeStyle.rules.width = cssLength( width ) );\n\t\t\theight && ( fakeStyle.rules.height = cssLength( height ) );\n\t\t\tfakeStyle.populate( attributes );\n\t\t}\n\n\t\treturn this.document.createElement( 'img', { attributes: attributes } );\n\t};\n\n\t/**\n\t * Creates fake {@link CKEDITOR.htmlParser.element} based on real element.\n\t *\n\t * @member CKEDITOR.editor\n\t * @param {CKEDITOR.dom.element} realElement Real element to transform.\n\t * @param {String} className Class name which will be used as class of fake element.\n\t * @param {String} realElementType Store type of fake element.\n\t * @param {Boolean} isResizable Keep information if element is resizable.\n\t * @returns {CKEDITOR.htmlParser.element} Fake htmlParser element.\n\t */\n\tCKEDITOR.editor.prototype.createFakeParserElement = function( realElement, className, realElementType, isResizable ) {\n\t\tvar lang = this.lang.fakeobjects,\n\t\t\tlabel = lang[ realElementType ] || lang.unknown,\n\t\t\thtml;\n\n\t\tvar writer = new CKEDITOR.htmlParser.basicWriter();\n\t\trealElement.writeHtml( writer );\n\t\thtml = writer.getHtml();\n\n\t\tvar attributes = {\n\t\t\t'class': className,\n\t\t\t'data-cke-realelement': encodeURIComponent( html ),\n\t\t\t'data-cke-real-node-type': realElement.type,\n\t\t\talt: label,\n\t\t\ttitle: label,\n\t\t\talign: realElement.attributes.align || ''\n\t\t};\n\n\t\t// Do not set \"src\" on high-contrast so the alt text is displayed. (http://dev.ckeditor.com/ticket/8945)\n\t\tif ( !CKEDITOR.env.hc )\n\t\t\tattributes.src = CKEDITOR.tools.transparentImageData;\n\n\t\tif ( realElementType )\n\t\t\tattributes[ 'data-cke-real-element-type' ] = realElementType;\n\n\t\tif ( isResizable ) {\n\t\t\tattributes[ 'data-cke-resizable' ] = isResizable;\n\t\t\tvar realAttrs = realElement.attributes,\n\t\t\t\tfakeStyle = new cssStyle();\n\n\t\t\tvar width = realAttrs.width,\n\t\t\t\theight = realAttrs.height;\n\n\t\t\twidth !== undefined && ( fakeStyle.rules.width = cssLength( width ) );\n\t\t\theight !== undefined && ( fakeStyle.rules.height = cssLength( height ) );\n\t\t\tfakeStyle.populate( attributes );\n\t\t}\n\n\t\treturn new CKEDITOR.htmlParser.element( 'img', attributes );\n\t};\n\n\t/**\n\t * Creates {@link CKEDITOR.dom.element} from fake element.\n\t *\n\t * @member CKEDITOR.editor\n\t * @param {CKEDITOR.dom.element} fakeElement Fake element to transform.\n\t * @returns {CKEDITOR.dom.element/null} Returns real element or `null` if transformed element wasn't fake.\n\t */\n\tCKEDITOR.editor.prototype.restoreRealElement = function( fakeElement ) {\n\t\tif ( fakeElement.data( 'cke-real-node-type' ) != CKEDITOR.NODE_ELEMENT )\n\t\t\treturn null;\n\n\t\tvar element = CKEDITOR.dom.element.createFromHtml( decodeURIComponent( fakeElement.data( 'cke-realelement' ) ), this.document );\n\n\t\tif ( fakeElement.data( 'cke-resizable' ) ) {\n\t\t\tvar width = fakeElement.getStyle( 'width' ),\n\t\t\t\theight = fakeElement.getStyle( 'height' );\n\n\t\t\twidth && element.setAttribute( 'width', replaceCssLength( element.getAttribute( 'width' ), width ) );\n\t\t\theight && element.setAttribute( 'height', replaceCssLength( element.getAttribute( 'height' ), height ) );\n\t\t}\n\n\t\treturn element;\n\t};\n\n} )();\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n'use strict';\n\n( function() {\n\tCKEDITOR.plugins.add( 'link', {\n\t\trequires: 'dialog,fakeobjects',\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\t\tonLoad: function() {\n\t\t\t// Add the CSS styles for anchor placeholders.\n\t\t\tvar iconPath = CKEDITOR.getUrl( this.path + 'images' + ( CKEDITOR.env.hidpi ? '/hidpi' : '' ) + '/anchor.png' ),\n\t\t\t\tbaseStyle = 'background:url(' + iconPath + ') no-repeat %1 center;border:1px dotted #00f;background-size:16px;';\n\n\t\t\tvar template = '.%2 a.cke_anchor,' +\n\t\t\t\t'.%2 a.cke_anchor_empty' +\n\t\t\t\t',.cke_editable.%2 a[name]' +\n\t\t\t\t',.cke_editable.%2 a[data-cke-saved-name]' +\n\t\t\t\t'{' +\n\t\t\t\t\tbaseStyle +\n\t\t\t\t\t'padding-%1:18px;' +\n\t\t\t\t\t// Show the arrow cursor for the anchor image (FF at least).\n\t\t\t\t\t'cursor:auto;' +\n\t\t\t\t'}' +\n\t\t\t\t'.%2 img.cke_anchor' +\n\t\t\t\t'{' +\n\t\t\t\t\tbaseStyle +\n\t\t\t\t\t'width:16px;' +\n\t\t\t\t\t'min-height:15px;' +\n\t\t\t\t\t// The default line-height on IE.\n\t\t\t\t\t'height:1.15em;' +\n\t\t\t\t\t// Opera works better with \"middle\" (even if not perfect)\n\t\t\t\t\t'vertical-align:text-bottom;' +\n\t\t\t\t'}';\n\n\t\t\t// Styles with contents direction awareness.\n\t\t\tfunction cssWithDir( dir ) {\n\t\t\t\treturn template.replace( /%1/g, dir == 'rtl' ? 'right' : 'left' ).replace( /%2/g, 'cke_contents_' + dir );\n\t\t\t}\n\n\t\t\tCKEDITOR.addCss( cssWithDir( 'ltr' ) + cssWithDir( 'rtl' ) );\n\t\t},\n\n\t\tinit: function( editor ) {\n\t\t\tvar allowed = 'a[!href]',\n\t\t\t\trequired = 'a[href]';\n\n\t\t\tif ( CKEDITOR.dialog.isTabEnabled( editor, 'link', 'advanced' ) )\n\t\t\t\tallowed = allowed.replace( ']', ',accesskey,charset,dir,id,lang,name,rel,tabindex,title,type,download]{*}(*)' );\n\t\t\tif ( CKEDITOR.dialog.isTabEnabled( editor, 'link', 'target' ) )\n\t\t\t\tallowed = allowed.replace( ']', ',target,onclick]' );\n\n\t\t\t// Add the link and unlink buttons.\n\t\t\teditor.addCommand( 'link', new CKEDITOR.dialogCommand( 'link', {\n\t\t\t\tallowedContent: allowed,\n\t\t\t\trequiredContent: required\n\t\t\t} ) );\n\t\t\teditor.addCommand( 'anchor', new CKEDITOR.dialogCommand( 'anchor', {\n\t\t\t\tallowedContent: 'a[!name,id]',\n\t\t\t\trequiredContent: 'a[name]'\n\t\t\t} ) );\n\t\t\teditor.addCommand( 'unlink', new CKEDITOR.unlinkCommand() );\n\t\t\teditor.addCommand( 'removeAnchor', new CKEDITOR.removeAnchorCommand() );\n\n\t\t\teditor.setKeystroke( CKEDITOR.CTRL + 76 /*L*/, 'link' );\n\n\t\t\tif ( editor.ui.addButton ) {\n\t\t\t\teditor.ui.addButton( 'Link', {\n\t\t\t\t\tlabel: editor.lang.link.toolbar,\n\t\t\t\t\tcommand: 'link',\n\t\t\t\t\ttoolbar: 'links,10'\n\t\t\t\t} );\n\t\t\t\teditor.ui.addButton( 'Unlink', {\n\t\t\t\t\tlabel: editor.lang.link.unlink,\n\t\t\t\t\tcommand: 'unlink',\n\t\t\t\t\ttoolbar: 'links,20'\n\t\t\t\t} );\n\t\t\t\teditor.ui.addButton( 'Anchor', {\n\t\t\t\t\tlabel: editor.lang.link.anchor.toolbar,\n\t\t\t\t\tcommand: 'anchor',\n\t\t\t\t\ttoolbar: 'links,30'\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tCKEDITOR.dialog.add( 'link', this.path + 'dialogs/link.js' );\n\t\t\tCKEDITOR.dialog.add( 'anchor', this.path + 'dialogs/anchor.js' );\n\n\t\t\teditor.on( 'doubleclick', function( evt ) {\n\t\t\t\t// If the link has descendants and the last part of it is also a part of a word partially\n\t\t\t\t// unlinked, clicked element may be a descendant of the link, not the link itself (http://dev.ckeditor.com/ticket/11956).\n\t\t\t\t// The evt.data.element.getAscendant( 'img', 1 ) condition allows opening anchor dialog if the anchor is empty (#501).\n\t\t\t\tvar element = evt.data.element.getAscendant( { a: 1, img: 1 }, true );\n\n\t\t\t\tif ( element && !element.isReadOnly() ) {\n\t\t\t\t\tif ( element.is( 'a' ) ) {\n\t\t\t\t\t\tevt.data.dialog = ( element.getAttribute( 'name' ) && ( !element.getAttribute( 'href' ) || !element.getChildCount() ) ) ? 'anchor' : 'link';\n\n\t\t\t\t\t\t// Pass the link to be selected along with event data.\n\t\t\t\t\t\tevt.data.link = element;\n\t\t\t\t\t} else if ( CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, element ) ) {\n\t\t\t\t\t\tevt.data.dialog = 'anchor';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}, null, null, 0 );\n\n\t\t\t// If event was cancelled, link passed in event data will not be selected.\n\t\t\teditor.on( 'doubleclick', function( evt ) {\n\t\t\t\t// Make sure both links and anchors are selected (http://dev.ckeditor.com/ticket/11822).\n\t\t\t\tif ( evt.data.dialog in { link: 1, anchor: 1 } && evt.data.link )\n\t\t\t\t\teditor.getSelection().selectElement( evt.data.link );\n\t\t\t}, null, null, 20 );\n\n\t\t\t// If the \"menu\" plugin is loaded, register the menu items.\n\t\t\tif ( editor.addMenuItems ) {\n\t\t\t\teditor.addMenuItems( {\n\t\t\t\t\tanchor: {\n\t\t\t\t\t\tlabel: editor.lang.link.anchor.menu,\n\t\t\t\t\t\tcommand: 'anchor',\n\t\t\t\t\t\tgroup: 'anchor',\n\t\t\t\t\t\torder: 1\n\t\t\t\t\t},\n\n\t\t\t\t\tremoveAnchor: {\n\t\t\t\t\t\tlabel: editor.lang.link.anchor.remove,\n\t\t\t\t\t\tcommand: 'removeAnchor',\n\t\t\t\t\t\tgroup: 'anchor',\n\t\t\t\t\t\torder: 5\n\t\t\t\t\t},\n\n\t\t\t\t\tlink: {\n\t\t\t\t\t\tlabel: editor.lang.link.menu,\n\t\t\t\t\t\tcommand: 'link',\n\t\t\t\t\t\tgroup: 'link',\n\t\t\t\t\t\torder: 1\n\t\t\t\t\t},\n\n\t\t\t\t\tunlink: {\n\t\t\t\t\t\tlabel: editor.lang.link.unlink,\n\t\t\t\t\t\tcommand: 'unlink',\n\t\t\t\t\t\tgroup: 'link',\n\t\t\t\t\t\torder: 5\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// If the \"contextmenu\" plugin is loaded, register the listeners.\n\t\t\tif ( editor.contextMenu ) {\n\t\t\t\teditor.contextMenu.addListener( function( element ) {\n\t\t\t\t\tif ( !element || element.isReadOnly() )\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\tvar anchor = CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, element );\n\n\t\t\t\t\tif ( !anchor && !( anchor = CKEDITOR.plugins.link.getSelectedLink( editor ) ) )\n\t\t\t\t\t\treturn null;\n\n\t\t\t\t\tvar menu = {};\n\n\t\t\t\t\tif ( anchor.getAttribute( 'href' ) && anchor.getChildCount() )\n\t\t\t\t\t\tmenu = { link: CKEDITOR.TRISTATE_OFF, unlink: CKEDITOR.TRISTATE_OFF };\n\n\t\t\t\t\tif ( anchor && anchor.hasAttribute( 'name' ) )\n\t\t\t\t\t\tmenu.anchor = menu.removeAnchor = CKEDITOR.TRISTATE_OFF;\n\n\t\t\t\t\treturn menu;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tthis.compiledProtectionFunction = getCompiledProtectionFunction( editor );\n\t\t},\n\n\t\tafterInit: function( editor ) {\n\t\t\t// Empty anchors upcasting to fake objects.\n\t\t\teditor.dataProcessor.dataFilter.addRules( {\n\t\t\t\telements: {\n\t\t\t\t\ta: function( element ) {\n\t\t\t\t\t\tif ( !element.attributes.name )\n\t\t\t\t\t\t\treturn null;\n\n\t\t\t\t\t\tif ( !element.children.length )\n\t\t\t\t\t\t\treturn editor.createFakeParserElement( element, 'cke_anchor', 'anchor' );\n\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tvar pathFilters = editor._.elementsPath && editor._.elementsPath.filters;\n\t\t\tif ( pathFilters ) {\n\t\t\t\tpathFilters.push( function( element, name ) {\n\t\t\t\t\tif ( name == 'a' ) {\n\t\t\t\t\t\tif ( CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, element ) || ( element.getAttribute( 'name' ) && ( !element.getAttribute( 'href' ) || !element.getChildCount() ) ) )\n\t\t\t\t\t\t\treturn 'anchor';\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n\n\t// Loads the parameters in a selected link to the link dialog fields.\n\tvar javascriptProtocolRegex = /^javascript:/,\n\t\temailRegex = /^mailto:([^?]+)(?:\\?(.+))?$/,\n\t\temailSubjectRegex = /subject=([^;?:@&=$,\\/]*)/i,\n\t\temailBodyRegex = /body=([^;?:@&=$,\\/]*)/i,\n\t\tanchorRegex = /^#(.*)$/,\n\t\turlRegex = /^((?:http|https|ftp|news):\\/\\/)?(.*)$/,\n\t\tselectableTargets = /^(_(?:self|top|parent|blank))$/,\n\t\tencodedEmailLinkRegex = /^javascript:void\\(location\\.href='mailto:'\\+String\\.fromCharCode\\(([^)]+)\\)(?:\\+'(.*)')?\\)$/,\n\t\tfunctionCallProtectedEmailLinkRegex = /^javascript:([^(]+)\\(([^)]+)\\)$/,\n\t\tpopupRegex = /\\s*window.open\\(\\s*this\\.href\\s*,\\s*(?:'([^']*)'|null)\\s*,\\s*'([^']*)'\\s*\\)\\s*;\\s*return\\s*false;*\\s*/,\n\t\tpopupFeaturesRegex = /(?:^|,)([^=]+)=(\\d+|yes|no)/gi;\n\n\tvar advAttrNames = {\n\t\tid: 'advId',\n\t\tdir: 'advLangDir',\n\t\taccessKey: 'advAccessKey',\n\t\t// 'data-cke-saved-name': 'advName',\n\t\tname: 'advName',\n\t\tlang: 'advLangCode',\n\t\ttabindex: 'advTabIndex',\n\t\ttitle: 'advTitle',\n\t\ttype: 'advContentType',\n\t\t'class': 'advCSSClasses',\n\t\tcharset: 'advCharset',\n\t\tstyle: 'advStyles',\n\t\trel: 'advRel'\n\t};\n\n\tfunction unescapeSingleQuote( str ) {\n\t\treturn str.replace( /\\\\'/g, '\\'' );\n\t}\n\n\tfunction escapeSingleQuote( str ) {\n\t\treturn str.replace( /'/g, '\\\\$&' );\n\t}\n\n\tfunction protectEmailAddressAsEncodedString( address ) {\n\t\tvar charCode,\n\t\t\tlength = address.length,\n\t\t\tencodedChars = [];\n\n\t\tfor ( var i = 0; i < length; i++ ) {\n\t\t\tcharCode = address.charCodeAt( i );\n\t\t\tencodedChars.push( charCode );\n\t\t}\n\n\t\treturn 'String.fromCharCode(' + encodedChars.join( ',' ) + ')';\n\t}\n\n\tfunction protectEmailLinkAsFunction( editor, email ) {\n\t\tvar plugin = editor.plugins.link,\n\t\t\tname = plugin.compiledProtectionFunction.name,\n\t\t\tparams = plugin.compiledProtectionFunction.params,\n\t\t\tparamName, paramValue, retval;\n\n\t\tretval = [ name, '(' ];\n\t\tfor ( var i = 0; i < params.length; i++ ) {\n\t\t\tparamName = params[ i ].toLowerCase();\n\t\t\tparamValue = email[ paramName ];\n\n\t\t\ti > 0 && retval.push( ',' );\n\t\t\tretval.push( '\\'', paramValue ? escapeSingleQuote( encodeURIComponent( email[ paramName ] ) ) : '', '\\'' );\n\t\t}\n\t\tretval.push( ')' );\n\t\treturn retval.join( '' );\n\t}\n\n\tfunction getCompiledProtectionFunction( editor ) {\n\t\tvar emailProtection = editor.config.emailProtection || '',\n\t\t\tcompiledProtectionFunction;\n\n\t\t// Compile the protection function pattern.\n\t\tif ( emailProtection && emailProtection != 'encode' ) {\n\t\t\tcompiledProtectionFunction = {};\n\n\t\t\temailProtection.replace( /^([^(]+)\\(([^)]+)\\)$/, function( match, funcName, params ) {\n\t\t\t\tcompiledProtectionFunction.name = funcName;\n\t\t\t\tcompiledProtectionFunction.params = [];\n\t\t\t\tparams.replace( /[^,\\s]+/g, function( param ) {\n\t\t\t\t\tcompiledProtectionFunction.params.push( param );\n\t\t\t\t} );\n\t\t\t} );\n\t\t}\n\n\t\treturn compiledProtectionFunction;\n\t}\n\n\t/**\n\t * Set of Link plugin helpers.\n\t *\n\t * @class\n\t * @singleton\n\t */\n\tCKEDITOR.plugins.link = {\n\t\t/**\n\t\t * Get the surrounding link element of the current selection.\n\t\t *\n\t\t *\t\tCKEDITOR.plugins.link.getSelectedLink( editor );\n\t\t *\n\t\t *\t\t// The following selections will all return the link element.\n\t\t *\n\t\t *\t\tli^nk\n\t\t *\t\t[link]\n\t\t *\t\ttext[link]\n\t\t *\t\tli[nk]\n\t\t *\t\t[li]nk]\n\t\t *\t\t[li]nk\n\t\t *\n\t\t * @since 3.2.1\n\t\t * @param {CKEDITOR.editor} editor\n\t\t * @param {Boolean} [returnMultiple=false] Indicates whether the function should return only the first selected link or all of them.\n\t\t * @returns {CKEDITOR.dom.element/CKEDITOR.dom.element[]/null} A single link element or an array of link\n\t\t * elements relevant to the current selection.\n\t\t */\n\t\tgetSelectedLink: function( editor, returnMultiple ) {\n\t\t\tvar selection = editor.getSelection(),\n\t\t\t\tselectedElement = selection.getSelectedElement(),\n\t\t\t\tranges = selection.getRanges(),\n\t\t\t\tlinks = [],\n\t\t\t\tlink,\n\t\t\t\trange,\n\t\t\t\ti;\n\n\t\t\tif ( !returnMultiple && selectedElement && selectedElement.is( 'a' ) ) {\n\t\t\t\treturn selectedElement;\n\t\t\t}\n\n\t\t\tfor ( i = 0; i < ranges.length; i++ ) {\n\t\t\t\trange = selection.getRanges()[ i ];\n\n\t\t\t\t// Skip bogus to cover cases of multiple selection inside tables (#tp2245).\n\t\t\t\trange.shrink( CKEDITOR.SHRINK_TEXT, false, { skipBogus: true } );\n\t\t\t\tlink = editor.elementPath( range.getCommonAncestor() ).contains( 'a', 1 );\n\n\t\t\t\tif ( link && returnMultiple ) {\n\t\t\t\t\tlinks.push( link );\n\t\t\t\t} else if ( link ) {\n\t\t\t\t\treturn link;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn returnMultiple ? links : null;\n\t\t},\n\n\t\t/**\n\t\t * Collects anchors available in the editor (i.e. used by the Link plugin).\n\t\t * Note that the scope of search is different for inline (the \"global\" document) and\n\t\t * classic (`iframe`-based) editors (the \"inner\" document).\n\t\t *\n\t\t * @since 4.3.3\n\t\t * @param {CKEDITOR.editor} editor\n\t\t * @returns {CKEDITOR.dom.element[]} An array of anchor elements.\n\t\t */\n\t\tgetEditorAnchors: function( editor ) {\n\t\t\tvar editable = editor.editable(),\n\n\t\t\t\t// The scope of search for anchors is the entire document for inline editors\n\t\t\t\t// and editor's editable for classic editor/divarea (http://dev.ckeditor.com/ticket/11359).\n\t\t\t\tscope = ( editable.isInline() && !editor.plugins.divarea ) ? editor.document : editable,\n\n\t\t\t\tlinks = scope.getElementsByTag( 'a' ),\n\t\t\t\timgs = scope.getElementsByTag( 'img' ),\n\t\t\t\tanchors = [],\n\t\t\t\ti = 0,\n\t\t\t\titem;\n\n\t\t\t// Retrieve all anchors within the scope.\n\t\t\twhile ( ( item = links.getItem( i++ ) ) ) {\n\t\t\t\tif ( item.data( 'cke-saved-name' ) || item.hasAttribute( 'name' ) ) {\n\t\t\t\t\tanchors.push( {\n\t\t\t\t\t\tname: item.data( 'cke-saved-name' ) || item.getAttribute( 'name' ),\n\t\t\t\t\t\tid: item.getAttribute( 'id' )\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t\t// Retrieve all \"fake anchors\" within the scope.\n\t\t\ti = 0;\n\n\t\t\twhile ( ( item = imgs.getItem( i++ ) ) ) {\n\t\t\t\tif ( ( item = this.tryRestoreFakeAnchor( editor, item ) ) ) {\n\t\t\t\t\tanchors.push( {\n\t\t\t\t\t\tname: item.getAttribute( 'name' ),\n\t\t\t\t\t\tid: item.getAttribute( 'id' )\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn anchors;\n\t\t},\n\n\t\t/**\n\t\t * Opera and WebKit do not make it possible to select empty anchors. Fake\n\t\t * elements must be used for them.\n\t\t *\n\t\t * @readonly\n\t\t * @deprecated 4.3.3 It is set to `true` in every browser.\n\t\t * @property {Boolean}\n\t\t */\n\t\tfakeAnchor: true,\n\n\t\t/**\n\t\t * For browsers that do not support CSS3 `a[name]:empty()`. Note that IE9 is included because of http://dev.ckeditor.com/ticket/7783.\n\t\t *\n\t\t * @readonly\n\t\t * @deprecated 4.3.3 It is set to `false` in every browser.\n\t\t * @property {Boolean} synAnchorSelector\n\t\t */\n\n\t\t/**\n\t\t * For browsers that have editing issues with an empty anchor.\n\t\t *\n\t\t * @readonly\n\t\t * @deprecated 4.3.3 It is set to `false` in every browser.\n\t\t * @property {Boolean} emptyAnchorFix\n\t\t */\n\n\t\t/**\n\t\t * Returns an element representing a real anchor restored from a fake anchor.\n\t\t *\n\t\t * @param {CKEDITOR.editor} editor\n\t\t * @param {CKEDITOR.dom.element} element\n\t\t * @returns {CKEDITOR.dom.element} Restored anchor element or nothing if the\n\t\t * passed element was not a fake anchor.\n\t\t */\n\t\ttryRestoreFakeAnchor: function( editor, element ) {\n\t\t\tif ( element && element.data( 'cke-real-element-type' ) && element.data( 'cke-real-element-type' ) == 'anchor' ) {\n\t\t\t\tvar link = editor.restoreRealElement( element );\n\t\t\t\tif ( link.data( 'cke-saved-name' ) )\n\t\t\t\t\treturn link;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * Parses attributes of the link element and returns an object representing\n\t\t * the current state (data) of the link. This data format is a plain object accepted\n\t\t * e.g. by the Link dialog window and {@link #getLinkAttributes}.\n\t\t *\n\t\t * **Note:** Data model format produced by the parser must be compatible with the Link\n\t\t * plugin dialog because it is passed directly to {@link CKEDITOR.dialog#setupContent}.\n\t\t *\n\t\t * @since 4.4\n\t\t * @param {CKEDITOR.editor} editor\n\t\t * @param {CKEDITOR.dom.element} element\n\t\t * @returns {Object} An object of link data.\n\t\t */\n\t\tparseLinkAttributes: function( editor, element ) {\n\t\t\tvar href = ( element && ( element.data( 'cke-saved-href' ) || element.getAttribute( 'href' ) ) ) || '',\n\t\t\t\tcompiledProtectionFunction = editor.plugins.link.compiledProtectionFunction,\n\t\t\t\temailProtection = editor.config.emailProtection,\n\t\t\t\tjavascriptMatch, emailMatch, anchorMatch, urlMatch,\n\t\t\t\tretval = {};\n\n\t\t\tif ( ( javascriptMatch = href.match( javascriptProtocolRegex ) ) ) {\n\t\t\t\tif ( emailProtection == 'encode' ) {\n\t\t\t\t\thref = href.replace( encodedEmailLinkRegex, function( match, protectedAddress, rest ) {\n\t\t\t\t\t\t// Without it 'undefined' is appended to e-mails without subject and body (http://dev.ckeditor.com/ticket/9192).\n\t\t\t\t\t\trest = rest || '';\n\n\t\t\t\t\t\treturn 'mailto:' +\n\t\t\t\t\t\t\tString.fromCharCode.apply( String, protectedAddress.split( ',' ) ) +\n\t\t\t\t\t\t\tunescapeSingleQuote( rest );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\t// Protected email link as function call.\n\t\t\t\telse if ( emailProtection ) {\n\t\t\t\t\thref.replace( functionCallProtectedEmailLinkRegex, function( match, funcName, funcArgs ) {\n\t\t\t\t\t\tif ( funcName == compiledProtectionFunction.name ) {\n\t\t\t\t\t\t\tretval.type = 'email';\n\t\t\t\t\t\t\tvar email = retval.email = {};\n\n\t\t\t\t\t\t\tvar paramRegex = /[^,\\s]+/g,\n\t\t\t\t\t\t\t\tparamQuoteRegex = /(^')|('$)/g,\n\t\t\t\t\t\t\t\tparamsMatch = funcArgs.match( paramRegex ),\n\t\t\t\t\t\t\t\tparamsMatchLength = paramsMatch.length,\n\t\t\t\t\t\t\t\tparamName, paramVal;\n\n\t\t\t\t\t\t\tfor ( var i = 0; i < paramsMatchLength; i++ ) {\n\t\t\t\t\t\t\t\tparamVal = decodeURIComponent( unescapeSingleQuote( paramsMatch[ i ].replace( paramQuoteRegex, '' ) ) );\n\t\t\t\t\t\t\t\tparamName = compiledProtectionFunction.params[ i ].toLowerCase();\n\t\t\t\t\t\t\t\temail[ paramName ] = paramVal;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\temail.address = [ email.name, email.domain ].join( '@' );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !retval.type ) {\n\t\t\t\tif ( ( anchorMatch = href.match( anchorRegex ) ) ) {\n\t\t\t\t\tretval.type = 'anchor';\n\t\t\t\t\tretval.anchor = {};\n\t\t\t\t\tretval.anchor.name = retval.anchor.id = anchorMatch[ 1 ];\n\t\t\t\t}\n\t\t\t\t// Protected email link as encoded string.\n\t\t\t\telse if ( ( emailMatch = href.match( emailRegex ) ) ) {\n\t\t\t\t\tvar subjectMatch = href.match( emailSubjectRegex ),\n\t\t\t\t\t\tbodyMatch = href.match( emailBodyRegex );\n\n\t\t\t\t\tretval.type = 'email';\n\t\t\t\t\tvar email = ( retval.email = {} );\n\t\t\t\t\temail.address = emailMatch[ 1 ];\n\t\t\t\t\tsubjectMatch && ( email.subject = decodeURIComponent( subjectMatch[ 1 ] ) );\n\t\t\t\t\tbodyMatch && ( email.body = decodeURIComponent( bodyMatch[ 1 ] ) );\n\t\t\t\t}\n\t\t\t\t// urlRegex matches empty strings, so need to check for href as well.\n\t\t\t\telse if ( href && ( urlMatch = href.match( urlRegex ) ) ) {\n\t\t\t\t\tretval.type = 'url';\n\t\t\t\t\tretval.url = {};\n\t\t\t\t\tretval.url.protocol = urlMatch[ 1 ];\n\t\t\t\t\tretval.url.url = urlMatch[ 2 ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Load target and popup settings.\n\t\t\tif ( element ) {\n\t\t\t\tvar target = element.getAttribute( 'target' );\n\n\t\t\t\t// IE BUG: target attribute is an empty string instead of null in IE if it's not set.\n\t\t\t\tif ( !target ) {\n\t\t\t\t\tvar onclick = element.data( 'cke-pa-onclick' ) || element.getAttribute( 'onclick' ),\n\t\t\t\t\t\tonclickMatch = onclick && onclick.match( popupRegex );\n\n\t\t\t\t\tif ( onclickMatch ) {\n\t\t\t\t\t\tretval.target = {\n\t\t\t\t\t\t\ttype: 'popup',\n\t\t\t\t\t\t\tname: onclickMatch[ 1 ]\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tvar featureMatch;\n\t\t\t\t\t\twhile ( ( featureMatch = popupFeaturesRegex.exec( onclickMatch[ 2 ] ) ) ) {\n\t\t\t\t\t\t\t// Some values should remain numbers (http://dev.ckeditor.com/ticket/7300)\n\t\t\t\t\t\t\tif ( ( featureMatch[ 2 ] == 'yes' || featureMatch[ 2 ] == '1' ) && !( featureMatch[ 1 ] in { height: 1, width: 1, top: 1, left: 1 } ) )\n\t\t\t\t\t\t\t\tretval.target[ featureMatch[ 1 ] ] = true;\n\t\t\t\t\t\t\telse if ( isFinite( featureMatch[ 2 ] ) )\n\t\t\t\t\t\t\t\tretval.target[ featureMatch[ 1 ] ] = featureMatch[ 2 ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tretval.target = {\n\t\t\t\t\t\ttype: target.match( selectableTargets ) ? target : 'frame',\n\t\t\t\t\t\tname: target\n\t\t\t\t\t};\n\t\t\t\t}\n\n\t\t\t\tvar download = element.getAttribute( 'download' );\n\t\t\t\tif ( download !== null ) {\n\t\t\t\t\tretval.download = true;\n\t\t\t\t}\n\n\t\t\t\tvar advanced = {};\n\n\t\t\t\tfor ( var a in advAttrNames ) {\n\t\t\t\t\tvar val = element.getAttribute( a );\n\n\t\t\t\t\tif ( val )\n\t\t\t\t\t\tadvanced[ advAttrNames[ a ] ] = val;\n\t\t\t\t}\n\n\t\t\t\tvar advName = element.data( 'cke-saved-name' ) || advanced.advName;\n\n\t\t\t\tif ( advName )\n\t\t\t\t\tadvanced.advName = advName;\n\n\t\t\t\tif ( !CKEDITOR.tools.isEmpty( advanced ) )\n\t\t\t\t\tretval.advanced = advanced;\n\t\t\t}\n\n\t\t\treturn retval;\n\t\t},\n\n\t\t/**\n\t\t * Converts link data produced by {@link #parseLinkAttributes} into an object which consists\n\t\t * of attributes to be set (with their values) and an array of attributes to be removed.\n\t\t * This method can be used to compose or to update any link element with the given data.\n\t\t *\n\t\t * @since 4.4\n\t\t * @param {CKEDITOR.editor} editor\n\t\t * @param {Object} data Data in {@link #parseLinkAttributes} format.\n\t\t * @returns {Object} An object consisting of two keys, i.e.:\n\t\t *\n\t\t *\t\t{\n\t\t *\t\t\t// Attributes to be set.\n\t\t *\t\t\tset: {\n\t\t *\t\t\t\thref: 'http://foo.bar',\n\t\t *\t\t\t\ttarget: 'bang'\n\t\t *\t\t\t},\n\t\t *\t\t\t// Attributes to be removed.\n\t\t *\t\t\tremoved: [\n\t\t *\t\t\t\t'id', 'style'\n\t\t *\t\t\t]\n\t\t *\t\t}\n\t\t *\n\t\t */\n\t\tgetLinkAttributes: function( editor, data ) {\n\t\t\tvar emailProtection = editor.config.emailProtection || '',\n\t\t\t\tset = {};\n\n\t\t\t// Compose the URL.\n\t\t\tswitch ( data.type ) {\n\t\t\t\tcase 'url':\n\t\t\t\t\tvar protocol = ( data.url && data.url.protocol !== undefined ) ? data.url.protocol : 'http://',\n\t\t\t\t\t\turl = ( data.url && CKEDITOR.tools.trim( data.url.url ) ) || '';\n\n\t\t\t\t\tset[ 'data-cke-saved-href' ] = ( url.indexOf( '/' ) === 0 ) ? url : protocol + url;\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'anchor':\n\t\t\t\t\tvar name = ( data.anchor && data.anchor.name ),\n\t\t\t\t\t\tid = ( data.anchor && data.anchor.id );\n\n\t\t\t\t\tset[ 'data-cke-saved-href' ] = '#' + ( name || id || '' );\n\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'email':\n\t\t\t\t\tvar email = data.email,\n\t\t\t\t\t\taddress = email.address,\n\t\t\t\t\t\tlinkHref;\n\n\t\t\t\t\tswitch ( emailProtection ) {\n\t\t\t\t\t\tcase '':\n\t\t\t\t\t\tcase 'encode':\n\t\t\t\t\t\t\tvar subject = encodeURIComponent( email.subject || '' ),\n\t\t\t\t\t\t\t\tbody = encodeURIComponent( email.body || '' ),\n\t\t\t\t\t\t\t\targList = [];\n\n\t\t\t\t\t\t\t// Build the e-mail parameters first.\n\t\t\t\t\t\t\tsubject && argList.push( 'subject=' + subject );\n\t\t\t\t\t\t\tbody && argList.push( 'body=' + body );\n\t\t\t\t\t\t\targList = argList.length ? '?' + argList.join( '&' ) : '';\n\n\t\t\t\t\t\t\tif ( emailProtection == 'encode' ) {\n\t\t\t\t\t\t\t\tlinkHref = [\n\t\t\t\t\t\t\t\t\t'javascript:void(location.href=\\'mailto:\\'+', // jshint ignore:line\n\t\t\t\t\t\t\t\t\tprotectEmailAddressAsEncodedString( address )\n\t\t\t\t\t\t\t\t];\n\t\t\t\t\t\t\t\t// parameters are optional.\n\t\t\t\t\t\t\t\targList && linkHref.push( '+\\'', escapeSingleQuote( argList ), '\\'' );\n\n\t\t\t\t\t\t\t\tlinkHref.push( ')' );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tlinkHref = [ 'mailto:', address, argList ];\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// Separating name and domain.\n\t\t\t\t\t\t\tvar nameAndDomain = address.split( '@', 2 );\n\t\t\t\t\t\t\temail.name = nameAndDomain[ 0 ];\n\t\t\t\t\t\t\temail.domain = nameAndDomain[ 1 ];\n\n\t\t\t\t\t\t\tlinkHref = [ 'javascript:', protectEmailLinkAsFunction( editor, email ) ]; // jshint ignore:line\n\t\t\t\t\t}\n\n\t\t\t\t\tset[ 'data-cke-saved-href' ] = linkHref.join( '' );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\t// Popups and target.\n\t\t\tif ( data.target ) {\n\t\t\t\tif ( data.target.type == 'popup' ) {\n\t\t\t\t\tvar onclickList = [\n\t\t\t\t\t\t\t'window.open(this.href, \\'', data.target.name || '', '\\', \\''\n\t\t\t\t\t\t],\n\t\t\t\t\t\tfeatureList = [\n\t\t\t\t\t\t\t'resizable', 'status', 'location', 'toolbar', 'menubar', 'fullscreen', 'scrollbars', 'dependent'\n\t\t\t\t\t\t],\n\t\t\t\t\t\tfeatureLength = featureList.length,\n\t\t\t\t\t\taddFeature = function( featureName ) {\n\t\t\t\t\t\t\tif ( data.target[ featureName ] )\n\t\t\t\t\t\t\t\tfeatureList.push( featureName + '=' + data.target[ featureName ] );\n\t\t\t\t\t\t};\n\n\t\t\t\t\tfor ( var i = 0; i < featureLength; i++ )\n\t\t\t\t\t\tfeatureList[ i ] = featureList[ i ] + ( data.target[ featureList[ i ] ] ? '=yes' : '=no' );\n\n\t\t\t\t\taddFeature( 'width' );\n\t\t\t\t\taddFeature( 'left' );\n\t\t\t\t\taddFeature( 'height' );\n\t\t\t\t\taddFeature( 'top' );\n\n\t\t\t\t\tonclickList.push( featureList.join( ',' ), '\\'); return false;' );\n\t\t\t\t\tset[ 'data-cke-pa-onclick' ] = onclickList.join( '' );\n\t\t\t\t}\n\t\t\t\telse if ( data.target.type != 'notSet' && data.target.name ) {\n\t\t\t\t\tset.target = data.target.name;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Force download attribute.\n\t\t\tif ( data.download ) {\n\t\t\t\tset.download = '';\n\t\t\t}\n\n\t\t\t// Advanced attributes.\n\t\t\tif ( data.advanced ) {\n\t\t\t\tfor ( var a in advAttrNames ) {\n\t\t\t\t\tvar val = data.advanced[ advAttrNames[ a ] ];\n\n\t\t\t\t\tif ( val )\n\t\t\t\t\t\tset[ a ] = val;\n\t\t\t\t}\n\n\t\t\t\tif ( set.name )\n\t\t\t\t\tset[ 'data-cke-saved-name' ] = set.name;\n\t\t\t}\n\n\t\t\t// Browser need the \"href\" fro copy/paste link to work. (http://dev.ckeditor.com/ticket/6641)\n\t\t\tif ( set[ 'data-cke-saved-href' ] )\n\t\t\t\tset.href = set[ 'data-cke-saved-href' ];\n\n\t\t\tvar removed = {\n\t\t\t\ttarget: 1,\n\t\t\t\tonclick: 1,\n\t\t\t\t'data-cke-pa-onclick': 1,\n\t\t\t\t'data-cke-saved-name': 1,\n\t\t\t\t'download': 1\n\t\t\t};\n\n\t\t\tif ( data.advanced )\n\t\t\t\tCKEDITOR.tools.extend( removed, advAttrNames );\n\n\t\t\t// Remove all attributes which are not currently set.\n\t\t\tfor ( var s in set )\n\t\t\t\tdelete removed[ s ];\n\n\t\t\treturn {\n\t\t\t\tset: set,\n\t\t\t\tremoved: CKEDITOR.tools.objectKeys( removed )\n\t\t\t};\n\t\t},\n\n\n\t\t/**\n\t\t * Determines whether an element should have a \"Display Text\" field in the Link dialog.\n\t\t *\n\t\t * @since 4.5.11\n\t\t * @param {CKEDITOR.dom.element/null} element Selected element, `null` if none selected or if a ranged selection\n\t\t * is made.\n\t\t * @param {CKEDITOR.editor} editor The editor instance for which the check is performed.\n\t\t * @returns {Boolean}\n\t\t */\n\t\tshowDisplayTextForElement: function( element, editor ) {\n\t\t\tvar undesiredElements = {\n\t\t\t\t\timg: 1,\n\t\t\t\t\ttable: 1,\n\t\t\t\t\ttbody: 1,\n\t\t\t\t\tthead: 1,\n\t\t\t\t\ttfoot: 1,\n\t\t\t\t\tinput: 1,\n\t\t\t\t\tselect: 1,\n\t\t\t\t\ttextarea: 1\n\t\t\t\t},\n\t\t\t\tselection = editor.getSelection();\n\n\t\t\t// Widget duck typing, we don't want to show display text for widgets.\n\t\t\tif ( editor.widgets && editor.widgets.focused ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( selection && selection.getRanges().length > 1 ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\treturn !element || !element.getName || !element.is( undesiredElements );\n\t\t}\n\t};\n\n\t// TODO Much probably there's no need to expose these as public objects.\n\n\tCKEDITOR.unlinkCommand = function() {};\n\tCKEDITOR.unlinkCommand.prototype = {\n\t\texec: function( editor ) {\n\t\t\t// IE/Edge removes link from selection while executing \"unlink\" command when cursor\n\t\t\t// is right before/after link's text. Therefore whole link must be selected and the\n\t\t\t// position of cursor must be restored to its initial state after unlinking. (http://dev.ckeditor.com/ticket/13062)\n\t\t\tif ( CKEDITOR.env.ie ) {\n\t\t\t\tvar range = editor.getSelection().getRanges()[ 0 ],\n\t\t\t\t\tlink = ( range.getPreviousEditableNode() && range.getPreviousEditableNode().getAscendant( 'a', true ) ) ||\n\t\t\t\t\t\t\t( range.getNextEditableNode() && range.getNextEditableNode().getAscendant( 'a', true ) ),\n\t\t\t\t\tbookmark;\n\n\t\t\t\tif ( range.collapsed && link ) {\n\t\t\t\t\tbookmark = range.createBookmark();\n\t\t\t\t\trange.selectNodeContents( link );\n\t\t\t\t\trange.select();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar style = new CKEDITOR.style( { element: 'a', type: CKEDITOR.STYLE_INLINE, alwaysRemoveElement: 1 } );\n\t\t\teditor.removeStyle( style );\n\n\t\t\tif ( bookmark ) {\n\t\t\t\trange.moveToBookmark( bookmark );\n\t\t\t\trange.select();\n\t\t\t}\n\t\t},\n\n\t\trefresh: function( editor, path ) {\n\t\t\t// Despite our initial hope, document.queryCommandEnabled() does not work\n\t\t\t// for this in Firefox. So we must detect the state by element paths.\n\n\t\t\tvar element = path.lastElement && path.lastElement.getAscendant( 'a', true );\n\n\t\t\tif ( element && element.getName() == 'a' && element.getAttribute( 'href' ) && element.getChildCount() )\n\t\t\t\tthis.setState( CKEDITOR.TRISTATE_OFF );\n\t\t\telse\n\t\t\t\tthis.setState( CKEDITOR.TRISTATE_DISABLED );\n\t\t},\n\n\t\tcontextSensitive: 1,\n\t\tstartDisabled: 1,\n\t\trequiredContent: 'a[href]',\n\t\teditorFocus: 1\n\t};\n\n\tCKEDITOR.removeAnchorCommand = function() {};\n\tCKEDITOR.removeAnchorCommand.prototype = {\n\t\texec: function( editor ) {\n\t\t\tvar sel = editor.getSelection(),\n\t\t\t\tbms = sel.createBookmarks(),\n\t\t\t\tanchor;\n\t\t\tif ( sel && ( anchor = sel.getSelectedElement() ) && ( !anchor.getChildCount() ? CKEDITOR.plugins.link.tryRestoreFakeAnchor( editor, anchor ) : anchor.is( 'a' ) ) )\n\t\t\t\tanchor.remove( 1 );\n\t\t\telse {\n\t\t\t\tif ( ( anchor = CKEDITOR.plugins.link.getSelectedLink( editor ) ) ) {\n\t\t\t\t\tif ( anchor.hasAttribute( 'href' ) ) {\n\t\t\t\t\t\tanchor.removeAttributes( { name: 1, 'data-cke-saved-name': 1 } );\n\t\t\t\t\t\tanchor.removeClass( 'cke_anchor' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tanchor.remove( 1 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsel.selectBookmarks( bms );\n\t\t},\n\t\trequiredContent: 'a[name]'\n\t};\n\n\tCKEDITOR.tools.extend( CKEDITOR.config, {\n\t\t/**\n\t\t * Whether to show the Advanced tab in the Link dialog window.\n\t\t *\n\t\t * @cfg {Boolean} [linkShowAdvancedTab=true]\n\t\t * @member CKEDITOR.config\n\t\t */\n\t\tlinkShowAdvancedTab: true,\n\n\t\t/**\n\t\t * Whether to show the Target tab in the Link dialog window.\n\t\t *\n\t\t * @cfg {Boolean} [linkShowTargetTab=true]\n\t\t * @member CKEDITOR.config\n\t\t */\n\t\tlinkShowTargetTab: true\n\n\t\t/**\n\t\t * Whether JavaScript code is allowed as a `href` attribute in an anchor tag.\n\t\t * With this option enabled it is possible to create links like:\n\t\t *\n\t\t *\t\thello world\n\t\t *\n\t\t * By default JavaScript links are not allowed and will not pass\n\t\t * the Link dialog window validation.\n\t\t *\n\t\t * @since 4.4.1\n\t\t * @cfg {Boolean} [linkJavaScriptLinksAllowed=false]\n\t\t * @member CKEDITOR.config\n\t\t */\n\t} );\n} )();\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview Insert and remove numbered and bulleted lists.\n */\n\n( function() {\n\tvar listNodeNames = { ol: 1, ul: 1 };\n\n\tvar whitespaces = CKEDITOR.dom.walker.whitespaces(),\n\t\tbookmarks = CKEDITOR.dom.walker.bookmark(),\n\t\tnonEmpty = function( node ) {\n\t\t\treturn !( whitespaces( node ) || bookmarks( node ) );\n\t\t},\n\t\tblockBogus = CKEDITOR.dom.walker.bogus();\n\n\tfunction cleanUpDirection( element ) {\n\t\tvar dir, parent, parentDir;\n\t\tif ( ( dir = element.getDirection() ) ) {\n\t\t\tparent = element.getParent();\n\t\t\twhile ( parent && !( parentDir = parent.getDirection() ) )\n\t\t\t\tparent = parent.getParent();\n\n\t\t\tif ( dir == parentDir )\n\t\t\t\telement.removeAttribute( 'dir' );\n\t\t}\n\t}\n\n\t// Inherit inline styles from another element.\n\tfunction inheritInlineStyles( parent, el ) {\n\t\tvar style = parent.getAttribute( 'style' );\n\n\t\t// Put parent styles before child styles.\n\t\tstyle && el.setAttribute( 'style', style.replace( /([^;])$/, '$1;' ) + ( el.getAttribute( 'style' ) || '' ) );\n\t}\n\n\tCKEDITOR.plugins.list = {\n\t\t/**\n\t\t * Convert a DOM list tree into a data structure that is easier to\n\t\t * manipulate. This operation should be non-intrusive in the sense that it\n\t\t * does not change the DOM tree, with the exception that it may add some\n\t\t * markers to the list item nodes when database is specified.\n\t\t *\n\t\t * @member CKEDITOR.plugins.list\n\t\t * @todo params\n\t\t */\n\t\tlistToArray: function( listNode, database, baseArray, baseIndentLevel, grandparentNode ) {\n\t\t\tif ( !listNodeNames[ listNode.getName() ] )\n\t\t\t\treturn [];\n\n\t\t\tif ( !baseIndentLevel )\n\t\t\t\tbaseIndentLevel = 0;\n\t\t\tif ( !baseArray )\n\t\t\t\tbaseArray = [];\n\n\t\t\t// Iterate over all list items to and look for inner lists.\n\t\t\tfor ( var i = 0, count = listNode.getChildCount(); i < count; i++ ) {\n\t\t\t\tvar listItem = listNode.getChild( i );\n\n\t\t\t\t// Fixing malformed nested lists by moving it into a previous list item. (http://dev.ckeditor.com/ticket/6236)\n\t\t\t\tif ( listItem.type == CKEDITOR.NODE_ELEMENT && listItem.getName() in CKEDITOR.dtd.$list )\n\t\t\t\t\tCKEDITOR.plugins.list.listToArray( listItem, database, baseArray, baseIndentLevel + 1 );\n\n\t\t\t\t// It may be a text node or some funny stuff.\n\t\t\t\tif ( listItem.$.nodeName.toLowerCase() != 'li' )\n\t\t\t\t\tcontinue;\n\n\t\t\t\tvar itemObj = { 'parent': listNode, indent: baseIndentLevel, element: listItem, contents: [] };\n\t\t\t\tif ( !grandparentNode ) {\n\t\t\t\t\titemObj.grandparent = listNode.getParent();\n\t\t\t\t\tif ( itemObj.grandparent && itemObj.grandparent.$.nodeName.toLowerCase() == 'li' )\n\t\t\t\t\t\titemObj.grandparent = itemObj.grandparent.getParent();\n\t\t\t\t} else {\n\t\t\t\t\titemObj.grandparent = grandparentNode;\n\t\t\t\t}\n\n\t\t\t\tif ( database )\n\t\t\t\t\tCKEDITOR.dom.element.setMarker( database, listItem, 'listarray_index', baseArray.length );\n\t\t\t\tbaseArray.push( itemObj );\n\n\t\t\t\tfor ( var j = 0, itemChildCount = listItem.getChildCount(), child; j < itemChildCount; j++ ) {\n\t\t\t\t\tchild = listItem.getChild( j );\n\t\t\t\t\tif ( child.type == CKEDITOR.NODE_ELEMENT && listNodeNames[ child.getName() ] )\n\t\t\t\t\t// Note the recursion here, it pushes inner list items with\n\t\t\t\t\t// +1 indentation in the correct order.\n\t\t\t\t\tCKEDITOR.plugins.list.listToArray( child, database, baseArray, baseIndentLevel + 1, itemObj.grandparent );\n\t\t\t\t\telse\n\t\t\t\t\t\titemObj.contents.push( child );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn baseArray;\n\t\t},\n\n\t\t/**\n\t\t * Convert our internal representation of a list back to a DOM forest.\n\t\t *\n\t\t * @member CKEDITOR.plugins.list\n\t\t * @todo params\n\t\t */\n\t\tarrayToList: function( listArray, database, baseIndex, paragraphMode, dir ) {\n\t\t\tif ( !baseIndex )\n\t\t\t\tbaseIndex = 0;\n\t\t\tif ( !listArray || listArray.length < baseIndex + 1 )\n\t\t\t\treturn null;\n\n\t\t\tvar i,\n\t\t\t\tdoc = listArray[ baseIndex ].parent.getDocument(),\n\t\t\t\tretval = new CKEDITOR.dom.documentFragment( doc ),\n\t\t\t\trootNode = null,\n\t\t\t\tcurrentIndex = baseIndex,\n\t\t\t\tindentLevel = Math.max( listArray[ baseIndex ].indent, 0 ),\n\t\t\t\tcurrentListItem = null,\n\t\t\t\torgDir, block,\n\t\t\t\tparagraphName = ( paragraphMode == CKEDITOR.ENTER_P ? 'p' : 'div' );\n\n\t\t\twhile ( 1 ) {\n\t\t\t\tvar item = listArray[ currentIndex ],\n\t\t\t\t\titemGrandParent = item.grandparent;\n\n\t\t\t\torgDir = item.element.getDirection( 1 );\n\n\t\t\t\tif ( item.indent == indentLevel ) {\n\t\t\t\t\tif ( !rootNode || listArray[ currentIndex ].parent.getName() != rootNode.getName() ) {\n\t\t\t\t\t\trootNode = listArray[ currentIndex ].parent.clone( false, 1 );\n\t\t\t\t\t\tdir && rootNode.setAttribute( 'dir', dir );\n\t\t\t\t\t\tretval.append( rootNode );\n\t\t\t\t\t}\n\t\t\t\t\tcurrentListItem = rootNode.append( item.element.clone( 0, 1 ) );\n\n\t\t\t\t\tif ( orgDir != rootNode.getDirection( 1 ) )\n\t\t\t\t\t\tcurrentListItem.setAttribute( 'dir', orgDir );\n\n\t\t\t\t\tfor ( i = 0; i < item.contents.length; i++ )\n\t\t\t\t\t\tcurrentListItem.append( item.contents[ i ].clone( 1, 1 ) );\n\t\t\t\t\tcurrentIndex++;\n\t\t\t\t} else if ( item.indent == Math.max( indentLevel, 0 ) + 1 ) {\n\t\t\t\t\t// Maintain original direction (http://dev.ckeditor.com/ticket/6861).\n\t\t\t\t\tvar currDir = listArray[ currentIndex - 1 ].element.getDirection( 1 ),\n\t\t\t\t\t\tlistData = CKEDITOR.plugins.list.arrayToList( listArray, null, currentIndex, paragraphMode, currDir != orgDir ? orgDir : null );\n\n\t\t\t\t\t// If the next block is an
      3. with another list tree as the first\n\t\t\t\t\t// child, we'll need to append a filler (
        /NBSP) or the list item\n\t\t\t\t\t// wouldn't be editable. (http://dev.ckeditor.com/ticket/6724)\n\t\t\t\t\tif ( !currentListItem.getChildCount() && CKEDITOR.env.needsNbspFiller && doc.$.documentMode <= 7 )\n\t\t\t\t\t\tcurrentListItem.append( doc.createText( '\\xa0' ) );\n\t\t\t\t\tcurrentListItem.append( listData.listNode );\n\t\t\t\t\tcurrentIndex = listData.nextIndex;\n\t\t\t\t} else if ( item.indent == -1 && !baseIndex && itemGrandParent ) {\n\t\t\t\t\tif ( listNodeNames[ itemGrandParent.getName() ] ) {\n\t\t\t\t\t\tcurrentListItem = item.element.clone( false, true );\n\t\t\t\t\t\tif ( orgDir != itemGrandParent.getDirection( 1 ) )\n\t\t\t\t\t\t\tcurrentListItem.setAttribute( 'dir', orgDir );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcurrentListItem = new CKEDITOR.dom.documentFragment( doc );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Migrate all children to the new container,\n\t\t\t\t\t// apply the proper text direction.\n\t\t\t\t\tvar dirLoose = itemGrandParent.getDirection( 1 ) != orgDir,\n\t\t\t\t\t\tli = item.element,\n\t\t\t\t\t\tclassName = li.getAttribute( 'class' ),\n\t\t\t\t\t\tstyle = li.getAttribute( 'style' );\n\n\t\t\t\t\tvar needsBlock = currentListItem.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT && ( paragraphMode != CKEDITOR.ENTER_BR || dirLoose || style || className );\n\n\t\t\t\t\tvar child,\n\t\t\t\t\t\tcount = item.contents.length,\n\t\t\t\t\t\tcachedBookmark;\n\n\t\t\t\t\tfor ( i = 0; i < count; i++ ) {\n\t\t\t\t\t\tchild = item.contents[ i ];\n\n\t\t\t\t\t\t// Append bookmark if we can, or cache it and append it when we'll know\n\t\t\t\t\t\t// what to do with it. Generally - we want to keep it next to its original neighbour.\n\t\t\t\t\t\t// Exception: if bookmark is the only child it hasn't got any neighbour, so handle it normally\n\t\t\t\t\t\t// (wrap with block if needed).\n\t\t\t\t\t\tif ( bookmarks( child ) && count > 1 ) {\n\t\t\t\t\t\t\t// If we don't need block, it's simple - append bookmark directly to the current list item.\n\t\t\t\t\t\t\tif ( !needsBlock )\n\t\t\t\t\t\t\t\tcurrentListItem.append( child.clone( 1, 1 ) );\n\t\t\t\t\t\t\telse\n\t\t\t\t\t\t\t\tcachedBookmark = child.clone( 1, 1 );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Block content goes directly to the current list item, without wrapping.\n\t\t\t\t\t\telse if ( child.type == CKEDITOR.NODE_ELEMENT && child.isBlockBoundary() ) {\n\t\t\t\t\t\t\t// Apply direction on content blocks.\n\t\t\t\t\t\t\tif ( dirLoose && !child.getDirection() )\n\t\t\t\t\t\t\t\tchild.setAttribute( 'dir', orgDir );\n\n\t\t\t\t\t\t\tinheritInlineStyles( li, child );\n\n\t\t\t\t\t\t\tclassName && child.addClass( className );\n\n\t\t\t\t\t\t\t// Close the block which we started for inline content.\n\t\t\t\t\t\t\tblock = null;\n\t\t\t\t\t\t\t// Append bookmark directly before current child.\n\t\t\t\t\t\t\tif ( cachedBookmark ) {\n\t\t\t\t\t\t\t\tcurrentListItem.append( cachedBookmark );\n\t\t\t\t\t\t\t\tcachedBookmark = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Append this block element to the list item.\n\t\t\t\t\t\t\tcurrentListItem.append( child.clone( 1, 1 ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Some inline content was found - wrap it with block and append that\n\t\t\t\t\t\t// block to the current list item or append it to the block previously created.\n\t\t\t\t\t\telse if ( needsBlock ) {\n\t\t\t\t\t\t\t// Establish new block to hold text direction and styles.\n\t\t\t\t\t\t\tif ( !block ) {\n\t\t\t\t\t\t\t\tblock = doc.createElement( paragraphName );\n\t\t\t\t\t\t\t\tcurrentListItem.append( block );\n\t\t\t\t\t\t\t\tdirLoose && block.setAttribute( 'dir', orgDir );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Copy over styles to new block;\n\t\t\t\t\t\t\tstyle && block.setAttribute( 'style', style );\n\t\t\t\t\t\t\tclassName && block.setAttribute( 'class', className );\n\n\t\t\t\t\t\t\t// Append bookmark directly before current child.\n\t\t\t\t\t\t\tif ( cachedBookmark ) {\n\t\t\t\t\t\t\t\tblock.append( cachedBookmark );\n\t\t\t\t\t\t\t\tcachedBookmark = null;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tblock.append( child.clone( 1, 1 ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// E.g. BR mode - inline content appended directly to the list item.\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tcurrentListItem.append( child.clone( 1, 1 ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// No content after bookmark - append it to the block if we had one\n\t\t\t\t\t// or directly to the current list item if we finished directly in the current list item.\n\t\t\t\t\tif ( cachedBookmark ) {\n\t\t\t\t\t\t( block || currentListItem ).append( cachedBookmark );\n\t\t\t\t\t\tcachedBookmark = null;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( currentListItem.type == CKEDITOR.NODE_DOCUMENT_FRAGMENT && currentIndex != listArray.length - 1 ) {\n\t\t\t\t\t\tvar last;\n\n\t\t\t\t\t\t// Remove bogus
        if this browser uses them.\n\t\t\t\t\t\tif ( CKEDITOR.env.needsBrFiller ) {\n\t\t\t\t\t\t\tlast = currentListItem.getLast();\n\t\t\t\t\t\t\tif ( last && last.type == CKEDITOR.NODE_ELEMENT && last.is( 'br' ) )\n\t\t\t\t\t\t\t\tlast.remove();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// If the last element is not a block, append
        to separate merged list items.\n\t\t\t\t\t\tlast = currentListItem.getLast( nonEmpty );\n\t\t\t\t\t\tif ( !( last && last.type == CKEDITOR.NODE_ELEMENT && last.is( CKEDITOR.dtd.$block ) ) )\n\t\t\t\t\t\t\tcurrentListItem.append( doc.createElement( 'br' ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tvar currentListItemName = currentListItem.$.nodeName.toLowerCase();\n\t\t\t\t\tif ( currentListItemName == 'div' || currentListItemName == 'p' ) {\n\t\t\t\t\t\tcurrentListItem.appendBogus();\n\t\t\t\t\t}\n\t\t\t\t\tretval.append( currentListItem );\n\t\t\t\t\trootNode = null;\n\t\t\t\t\tcurrentIndex++;\n\t\t\t\t} else {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\tblock = null;\n\n\t\t\t\tif ( listArray.length <= currentIndex || Math.max( listArray[ currentIndex ].indent, 0 ) < indentLevel )\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif ( database ) {\n\t\t\t\tvar currentNode = retval.getFirst();\n\n\t\t\t\twhile ( currentNode ) {\n\t\t\t\t\tif ( currentNode.type == CKEDITOR.NODE_ELEMENT ) {\n\t\t\t\t\t\t// Clear marker attributes for the new list tree made of cloned nodes, if any.\n\t\t\t\t\t\tCKEDITOR.dom.element.clearMarkers( database, currentNode );\n\n\t\t\t\t\t\t// Clear redundant direction attribute specified on list items.\n\t\t\t\t\t\tif ( currentNode.getName() in CKEDITOR.dtd.$listItem )\n\t\t\t\t\t\t\tcleanUpDirection( currentNode );\n\t\t\t\t\t}\n\n\t\t\t\t\tcurrentNode = currentNode.getNextSourceNode();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn { listNode: retval, nextIndex: currentIndex };\n\t\t}\n\t};\n\n\tfunction changeListType( editor, groupObj, database, listsCreated ) {\n\t\t// This case is easy...\n\t\t// 1. Convert the whole list into a one-dimensional array.\n\t\t// 2. Change the list type by modifying the array.\n\t\t// 3. Recreate the whole list by converting the array to a list.\n\t\t// 4. Replace the original list with the recreated list.\n\t\tvar listArray = CKEDITOR.plugins.list.listToArray( groupObj.root, database ),\n\t\t\tselectedListItems = [];\n\n\t\tfor ( var i = 0; i < groupObj.contents.length; i++ ) {\n\t\t\tvar itemNode = groupObj.contents[ i ];\n\t\t\titemNode = itemNode.getAscendant( 'li', true );\n\t\t\tif ( !itemNode || itemNode.getCustomData( 'list_item_processed' ) )\n\t\t\t\tcontinue;\n\t\t\tselectedListItems.push( itemNode );\n\t\t\tCKEDITOR.dom.element.setMarker( database, itemNode, 'list_item_processed', true );\n\t\t}\n\n\t\tvar root = groupObj.root,\n\t\t\tdoc = root.getDocument(),\n\t\t\tlistNode, newListNode;\n\n\t\tfor ( i = 0; i < selectedListItems.length; i++ ) {\n\t\t\tvar listIndex = selectedListItems[ i ].getCustomData( 'listarray_index' );\n\t\t\tlistNode = listArray[ listIndex ].parent;\n\n\t\t\t// Switch to new list node for this particular item.\n\t\t\tif ( !listNode.is( this.type ) ) {\n\t\t\t\tnewListNode = doc.createElement( this.type );\n\t\t\t\t// Copy all attributes, except from 'start' and 'type'.\n\t\t\t\tlistNode.copyAttributes( newListNode, { start: 1, type: 1 } );\n\t\t\t\t// The list-style-type property should be ignored.\n\t\t\t\tnewListNode.removeStyle( 'list-style-type' );\n\t\t\t\tlistArray[ listIndex ].parent = newListNode;\n\t\t\t}\n\t\t}\n\n\t\tvar newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode );\n\t\tvar child,\n\t\t\tlength = newList.listNode.getChildCount();\n\t\tfor ( i = 0; i < length && ( child = newList.listNode.getChild( i ) ); i++ ) {\n\t\t\tif ( child.getName() == this.type )\n\t\t\t\tlistsCreated.push( child );\n\t\t}\n\t\tnewList.listNode.replace( groupObj.root );\n\n\t\teditor.fire( 'contentDomInvalidated' );\n\t}\n\n\tfunction createList( editor, groupObj, listsCreated ) {\n\t\tvar contents = groupObj.contents,\n\t\t\tdoc = groupObj.root.getDocument(),\n\t\t\tlistContents = [];\n\n\t\t// It is possible to have the contents returned by DomRangeIterator to be the same as the root.\n\t\t// e.g. when we're running into table cells.\n\t\t// In such a case, enclose the childNodes of contents[0] into a
        .\n\t\tif ( contents.length == 1 && contents[ 0 ].equals( groupObj.root ) ) {\n\t\t\tvar divBlock = doc.createElement( 'div' );\n\t\t\tcontents[ 0 ].moveChildren && contents[ 0 ].moveChildren( divBlock );\n\t\t\tcontents[ 0 ].append( divBlock );\n\t\t\tcontents[ 0 ] = divBlock;\n\t\t}\n\n\t\t// Calculate the common parent node of all content blocks.\n\t\tvar commonParent = groupObj.contents[ 0 ].getParent();\n\t\tfor ( var i = 0; i < contents.length; i++ )\n\t\t\tcommonParent = commonParent.getCommonAncestor( contents[ i ].getParent() );\n\n\t\tvar useComputedState = editor.config.useComputedState,\n\t\t\tlistDir, explicitDirection;\n\n\t\tuseComputedState = useComputedState === undefined || useComputedState;\n\n\t\t// We want to insert things that are in the same tree level only, so calculate the contents again\n\t\t// by expanding the selected blocks to the same tree level.\n\t\tfor ( i = 0; i < contents.length; i++ ) {\n\t\t\tvar contentNode = contents[ i ],\n\t\t\t\tparentNode;\n\t\t\twhile ( ( parentNode = contentNode.getParent() ) ) {\n\t\t\t\tif ( parentNode.equals( commonParent ) ) {\n\t\t\t\t\tlistContents.push( contentNode );\n\n\t\t\t\t\t// Determine the lists's direction.\n\t\t\t\t\tif ( !explicitDirection && contentNode.getDirection() )\n\t\t\t\t\t\texplicitDirection = 1;\n\n\t\t\t\t\tvar itemDir = contentNode.getDirection( useComputedState );\n\n\t\t\t\t\tif ( listDir !== null ) {\n\t\t\t\t\t\t// If at least one LI have a different direction than current listDir, we can't have listDir.\n\t\t\t\t\t\tif ( listDir && listDir != itemDir )\n\t\t\t\t\t\t\tlistDir = null;\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tlistDir = itemDir;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcontentNode = parentNode;\n\t\t\t}\n\t\t}\n\n\t\tif ( listContents.length < 1 )\n\t\t\treturn;\n\n\t\t// Insert the list to the DOM tree.\n\t\tvar insertAnchor = listContents[ listContents.length - 1 ].getNext(),\n\t\t\tlistNode = doc.createElement( this.type );\n\n\t\tlistsCreated.push( listNode );\n\n\t\tvar contentBlock, listItem;\n\n\t\twhile ( listContents.length ) {\n\t\t\tcontentBlock = listContents.shift();\n\t\t\tlistItem = doc.createElement( 'li' );\n\n\t\t\t// If current block should be preserved, append it to list item instead of\n\t\t\t// transforming it to
      4. element.\n\t\t\tif ( shouldPreserveBlock( contentBlock ) )\n\t\t\t\tcontentBlock.appendTo( listItem );\n\t\t\telse {\n\t\t\t\tcontentBlock.copyAttributes( listItem );\n\t\t\t\t// Remove direction attribute after it was merged into list root. (http://dev.ckeditor.com/ticket/7657)\n\t\t\t\tif ( listDir && contentBlock.getDirection() ) {\n\t\t\t\t\tlistItem.removeStyle( 'direction' );\n\t\t\t\t\tlistItem.removeAttribute( 'dir' );\n\t\t\t\t}\n\t\t\t\tcontentBlock.moveChildren( listItem );\n\t\t\t\tcontentBlock.remove();\n\t\t\t}\n\n\t\t\tlistItem.appendTo( listNode );\n\t\t}\n\n\t\t// Apply list root dir only if it has been explicitly declared.\n\t\tif ( listDir && explicitDirection )\n\t\t\tlistNode.setAttribute( 'dir', listDir );\n\n\t\tif ( insertAnchor )\n\t\t\tlistNode.insertBefore( insertAnchor );\n\t\telse\n\t\t\tlistNode.appendTo( commonParent );\n\t}\n\n\tfunction removeList( editor, groupObj, database ) {\n\t\t// This is very much like the change list type operation.\n\t\t// Except that we're changing the selected items' indent to -1 in the list array.\n\t\tvar listArray = CKEDITOR.plugins.list.listToArray( groupObj.root, database ),\n\t\t\tselectedListItems = [];\n\n\t\tfor ( var i = 0; i < groupObj.contents.length; i++ ) {\n\t\t\tvar itemNode = groupObj.contents[ i ];\n\t\t\titemNode = itemNode.getAscendant( 'li', true );\n\t\t\tif ( !itemNode || itemNode.getCustomData( 'list_item_processed' ) )\n\t\t\t\tcontinue;\n\t\t\tselectedListItems.push( itemNode );\n\t\t\tCKEDITOR.dom.element.setMarker( database, itemNode, 'list_item_processed', true );\n\t\t}\n\n\t\tvar lastListIndex = null;\n\t\tfor ( i = 0; i < selectedListItems.length; i++ ) {\n\t\t\tvar listIndex = selectedListItems[ i ].getCustomData( 'listarray_index' );\n\t\t\tlistArray[ listIndex ].indent = -1;\n\t\t\tlastListIndex = listIndex;\n\t\t}\n\n\t\t// After cutting parts of the list out with indent=-1, we still have to maintain the array list\n\t\t// model's nextItem.indent <= currentItem.indent + 1 invariant. Otherwise the array model of the\n\t\t// list cannot be converted back to a real DOM list.\n\t\tfor ( i = lastListIndex + 1; i < listArray.length; i++ ) {\n\t\t\tif ( listArray[ i ].indent > listArray[ i - 1 ].indent + 1 ) {\n\t\t\t\tvar indentOffset = listArray[ i - 1 ].indent + 1 - listArray[ i ].indent;\n\t\t\t\tvar oldIndent = listArray[ i ].indent;\n\t\t\t\twhile ( listArray[ i ] && listArray[ i ].indent >= oldIndent ) {\n\t\t\t\t\tlistArray[ i ].indent += indentOffset;\n\t\t\t\t\ti++;\n\t\t\t\t}\n\t\t\t\ti--;\n\t\t\t}\n\t\t}\n\n\t\tvar newList = CKEDITOR.plugins.list.arrayToList( listArray, database, null, editor.config.enterMode, groupObj.root.getAttribute( 'dir' ) );\n\n\t\t// Compensate
        before/after the list node if the surrounds are non-blocks.(http://dev.ckeditor.com/ticket/3836)\n\t\tvar docFragment = newList.listNode,\n\t\t\tboundaryNode, siblingNode;\n\n\t\tfunction compensateBrs( isStart ) {\n\t\t\tif (\n\t\t\t\t( boundaryNode = docFragment[ isStart ? 'getFirst' : 'getLast' ]() ) &&\n\t\t\t\t!( boundaryNode.is && boundaryNode.isBlockBoundary() ) &&\n\t\t\t\t( siblingNode = groupObj.root[ isStart ? 'getPrevious' : 'getNext' ]( CKEDITOR.dom.walker.invisible( true ) ) ) &&\n\t\t\t\t!( siblingNode.is && siblingNode.isBlockBoundary( { br: 1 } ) )\n\t\t\t) {\n\t\t\t\teditor.document.createElement( 'br' )[ isStart ? 'insertBefore' : 'insertAfter' ]( boundaryNode );\n\t\t\t}\n\t\t}\n\t\tcompensateBrs( true );\n\t\tcompensateBrs();\n\n\t\tdocFragment.replace( groupObj.root );\n\n\t\teditor.fire( 'contentDomInvalidated' );\n\t}\n\n\tvar headerTagRegex = /^h[1-6]$/;\n\n\t// Checks wheather this block should be element preserved (not transformed to
      5. ) when creating list.\n\tfunction shouldPreserveBlock( block ) {\n\t\treturn (\n\t\t\t// http://dev.ckeditor.com/ticket/5335\n\t\t\tblock.is( 'pre' ) ||\n\t\t\t// http://dev.ckeditor.com/ticket/5271 - this is a header.\n\t\t\theaderTagRegex.test( block.getName() ) ||\n\t\t\t// 11083 - this is a non-editable element.\n\t\t\tblock.getAttribute( 'contenteditable' ) == 'false'\n\t\t);\n\t}\n\n\tfunction listCommand( name, type ) {\n\t\tthis.name = name;\n\t\tthis.type = type;\n\t\tthis.context = type;\n\t\tthis.allowedContent = type + ' li';\n\t\tthis.requiredContent = type;\n\t}\n\n\tvar elementType = CKEDITOR.dom.walker.nodeType( CKEDITOR.NODE_ELEMENT );\n\n\t// Merge child nodes with direction preserved. (http://dev.ckeditor.com/ticket/7448)\n\tfunction mergeChildren( from, into, refNode, forward ) {\n\t\tvar child, itemDir;\n\t\twhile ( ( child = from[ forward ? 'getLast' : 'getFirst' ]( elementType ) ) ) {\n\t\t\tif ( ( itemDir = child.getDirection( 1 ) ) !== into.getDirection( 1 ) )\n\t\t\t\tchild.setAttribute( 'dir', itemDir );\n\n\t\t\tchild.remove();\n\n\t\t\trefNode ? child[ forward ? 'insertBefore' : 'insertAfter' ]( refNode ) : into.append( child, forward );\n\t\t}\n\t}\n\n\tlistCommand.prototype = {\n\t\texec: function( editor ) {\n\t\t\t// Run state check first of all.\n\t\t\tthis.refresh( editor, editor.elementPath() );\n\n\t\t\tvar config = editor.config,\n\t\t\t\tselection = editor.getSelection(),\n\t\t\t\tranges = selection && selection.getRanges();\n\n\t\t\t// Midas lists rule #1 says we can create a list even in an empty document.\n\t\t\t// But DOM iterator wouldn't run if the document is really empty.\n\t\t\t// So create a paragraph if the document is empty and we're going to create a list.\n\t\t\tif ( this.state == CKEDITOR.TRISTATE_OFF ) {\n\t\t\t\tvar editable = editor.editable();\n\t\t\t\tif ( !editable.getFirst( nonEmpty ) ) {\n\t\t\t\t\tconfig.enterMode == CKEDITOR.ENTER_BR ? editable.appendBogus() : ranges[ 0 ].fixBlock( 1, config.enterMode == CKEDITOR.ENTER_P ? 'p' : 'div' );\n\n\t\t\t\t\tselection.selectRanges( ranges );\n\t\t\t\t}\n\t\t\t\t// Maybe a single range there enclosing the whole list,\n\t\t\t\t// turn on the list state manually(http://dev.ckeditor.com/ticket/4129).\n\t\t\t\telse {\n\t\t\t\t\tvar range = ranges.length == 1 && ranges[ 0 ],\n\t\t\t\t\t\tenclosedNode = range && range.getEnclosedNode();\n\t\t\t\t\tif ( enclosedNode && enclosedNode.is && this.type == enclosedNode.getName() )\n\t\t\t\t\t\tthis.setState( CKEDITOR.TRISTATE_ON );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar bookmarks = selection.createBookmarks( true );\n\n\t\t\t// Group the blocks up because there are many cases where multiple lists have to be created,\n\t\t\t// or multiple lists have to be cancelled.\n\t\t\tvar listGroups = [],\n\t\t\t\tdatabase = {},\n\t\t\t\trangeIterator = ranges.createIterator(),\n\t\t\t\tindex = 0;\n\n\t\t\twhile ( ( range = rangeIterator.getNextRange() ) && ++index ) {\n\t\t\t\tvar boundaryNodes = range.getBoundaryNodes(),\n\t\t\t\t\tstartNode = boundaryNodes.startNode,\n\t\t\t\t\tendNode = boundaryNodes.endNode;\n\n\t\t\t\tif ( startNode.type == CKEDITOR.NODE_ELEMENT && startNode.getName() == 'td' )\n\t\t\t\t\trange.setStartAt( boundaryNodes.startNode, CKEDITOR.POSITION_AFTER_START );\n\n\t\t\t\tif ( endNode.type == CKEDITOR.NODE_ELEMENT && endNode.getName() == 'td' )\n\t\t\t\t\trange.setEndAt( boundaryNodes.endNode, CKEDITOR.POSITION_BEFORE_END );\n\n\t\t\t\tvar iterator = range.createIterator(),\n\t\t\t\t\tblock;\n\n\t\t\t\titerator.forceBrBreak = ( this.state == CKEDITOR.TRISTATE_OFF );\n\n\t\t\t\twhile ( ( block = iterator.getNextParagraph() ) ) {\n\t\t\t\t\t// Avoid duplicate blocks get processed across ranges.\n\t\t\t\t\tif ( block.getCustomData( 'list_block' ) )\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\telse\n\t\t\t\t\t\tCKEDITOR.dom.element.setMarker( database, block, 'list_block', 1 );\n\n\t\t\t\t\tvar path = editor.elementPath( block ),\n\t\t\t\t\t\tpathElements = path.elements,\n\t\t\t\t\t\tpathElementsCount = pathElements.length,\n\t\t\t\t\t\tprocessedFlag = 0,\n\t\t\t\t\t\tblockLimit = path.blockLimit,\n\t\t\t\t\t\telement;\n\n\t\t\t\t\t// First, try to group by a list ancestor.\n\t\t\t\t\tfor ( var i = pathElementsCount - 1; i >= 0 && ( element = pathElements[ i ] ); i-- ) {\n\t\t\t\t\t\t// Don't leak outside block limit (http://dev.ckeditor.com/ticket/3940).\n\t\t\t\t\t\tif ( listNodeNames[ element.getName() ] && blockLimit.contains( element ) ) {\n\t\t\t\t\t\t\t// If we've encountered a list inside a block limit\n\t\t\t\t\t\t\t// The last group object of the block limit element should\n\t\t\t\t\t\t\t// no longer be valid. Since paragraphs after the list\n\t\t\t\t\t\t\t// should belong to a different group of paragraphs before\n\t\t\t\t\t\t\t// the list. (Bug http://dev.ckeditor.com/ticket/1309)\n\t\t\t\t\t\t\tblockLimit.removeCustomData( 'list_group_object_' + index );\n\n\t\t\t\t\t\t\tvar groupObj = element.getCustomData( 'list_group_object' );\n\t\t\t\t\t\t\tif ( groupObj )\n\t\t\t\t\t\t\t\tgroupObj.contents.push( block );\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tgroupObj = { root: element, contents: [ block ] };\n\t\t\t\t\t\t\t\tlistGroups.push( groupObj );\n\t\t\t\t\t\t\t\tCKEDITOR.dom.element.setMarker( database, element, 'list_group_object', groupObj );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tprocessedFlag = 1;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( processedFlag )\n\t\t\t\t\t\tcontinue;\n\n\t\t\t\t\t// No list ancestor? Group by block limit, but don't mix contents from different ranges.\n\t\t\t\t\tvar root = blockLimit;\n\t\t\t\t\tif ( root.getCustomData( 'list_group_object_' + index ) )\n\t\t\t\t\t\troot.getCustomData( 'list_group_object_' + index ).contents.push( block );\n\t\t\t\t\telse {\n\t\t\t\t\t\tgroupObj = { root: root, contents: [ block ] };\n\t\t\t\t\t\tCKEDITOR.dom.element.setMarker( database, root, 'list_group_object_' + index, groupObj );\n\t\t\t\t\t\tlistGroups.push( groupObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Now we have two kinds of list groups, groups rooted at a list, and groups rooted at a block limit element.\n\t\t\t// We either have to build lists or remove lists, for removing a list does not makes sense when we are looking\n\t\t\t// at the group that's not rooted at lists. So we have three cases to handle.\n\t\t\tvar listsCreated = [];\n\t\t\twhile ( listGroups.length > 0 ) {\n\t\t\t\tgroupObj = listGroups.shift();\n\t\t\t\tif ( this.state == CKEDITOR.TRISTATE_OFF ) {\n\t\t\t\t\tif ( listNodeNames[ groupObj.root.getName() ] )\n\t\t\t\t\t\tchangeListType.call( this, editor, groupObj, database, listsCreated );\n\t\t\t\t\telse\n\t\t\t\t\t\tcreateList.call( this, editor, groupObj, listsCreated );\n\t\t\t\t} else if ( this.state == CKEDITOR.TRISTATE_ON && listNodeNames[ groupObj.root.getName() ] ) {\n\t\t\t\t\tremoveList.call( this, editor, groupObj, database );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// For all new lists created, merge into adjacent, same type lists.\n\t\t\tfor ( i = 0; i < listsCreated.length; i++ )\n\t\t\t\tmergeListSiblings( listsCreated[ i ] );\n\n\t\t\t// Clean up, restore selection and update toolbar button states.\n\t\t\tCKEDITOR.dom.element.clearAllMarkers( database );\n\t\t\tselection.selectBookmarks( bookmarks );\n\t\t\teditor.focus();\n\t\t},\n\n\t\trefresh: function( editor, path ) {\n\t\t\tvar list = path.contains( listNodeNames, 1 ),\n\t\t\t\tlimit = path.blockLimit || path.root;\n\n\t\t\t// 1. Only a single type of list activate.\n\t\t\t// 2. Do not show list outside of block limit.\n\t\t\tif ( list && limit.contains( list ) )\n\t\t\t\tthis.setState( list.is( this.type ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );\n\t\t\telse\n\t\t\t\tthis.setState( CKEDITOR.TRISTATE_OFF );\n\t\t}\n\t};\n\n\t// Merge list adjacent, of same type lists.\n\tfunction mergeListSiblings( listNode ) {\n\n\t\tfunction mergeSibling( rtl ) {\n\t\t\tvar sibling = listNode[ rtl ? 'getPrevious' : 'getNext' ]( nonEmpty );\n\t\t\tif ( sibling && sibling.type == CKEDITOR.NODE_ELEMENT && sibling.is( listNode.getName() ) ) {\n\t\t\t\t// Move children order by merge direction.(http://dev.ckeditor.com/ticket/3820)\n\t\t\t\tmergeChildren( listNode, sibling, null, !rtl );\n\n\t\t\t\tlistNode.remove();\n\t\t\t\tlistNode = sibling;\n\t\t\t}\n\t\t}\n\n\t\tmergeSibling();\n\t\tmergeSibling( 1 );\n\t}\n\n\t// Check if node is block element that recieves text.\n\tfunction isTextBlock( node ) {\n\t\treturn node.type == CKEDITOR.NODE_ELEMENT && ( node.getName() in CKEDITOR.dtd.$block || node.getName() in CKEDITOR.dtd.$listItem ) && CKEDITOR.dtd[ node.getName() ][ '#' ];\n\t}\n\n\t// Join visually two block lines.\n\tfunction joinNextLineToCursor( editor, cursor, nextCursor ) {\n\t\teditor.fire( 'saveSnapshot' );\n\n\t\t// Merge with previous block's content.\n\t\tnextCursor.enlarge( CKEDITOR.ENLARGE_LIST_ITEM_CONTENTS );\n\t\tvar frag = nextCursor.extractContents();\n\n\t\tcursor.trim( false, true );\n\t\tvar bm = cursor.createBookmark();\n\n\t\t// Kill original bogus;\n\t\tvar currentPath = new CKEDITOR.dom.elementPath( cursor.startContainer ),\n\t\t\t\tpathBlock = currentPath.block,\n\t\t\t\tcurrentBlock = currentPath.lastElement.getAscendant( 'li', 1 ) || pathBlock,\n\t\t\t\tnextPath = new CKEDITOR.dom.elementPath( nextCursor.startContainer ),\n\t\t\t\tnextLi = nextPath.contains( CKEDITOR.dtd.$listItem ),\n\t\t\t\tnextList = nextPath.contains( CKEDITOR.dtd.$list ),\n\t\t\t\tlast;\n\n\t\t// Remove bogus node the current block/pseudo block.\n\t\tif ( pathBlock ) {\n\t\t\tvar bogus = pathBlock.getBogus();\n\t\t\tbogus && bogus.remove();\n\t\t}\n\t\telse if ( nextList ) {\n\t\t\tlast = nextList.getPrevious( nonEmpty );\n\t\t\tif ( last && blockBogus( last ) )\n\t\t\t\tlast.remove();\n\t\t}\n\n\t\t// Kill the tail br in extracted.\n\t\tlast = frag.getLast();\n\t\tif ( last && last.type == CKEDITOR.NODE_ELEMENT && last.is( 'br' ) )\n\t\t\tlast.remove();\n\n\t\t// Insert fragment at the range position.\n\t\tvar nextNode = cursor.startContainer.getChild( cursor.startOffset );\n\t\tif ( nextNode )\n\t\t\tfrag.insertBefore( nextNode );\n\t\telse\n\t\t\tcursor.startContainer.append( frag );\n\n\t\t// Move the sub list nested in the next list item.\n\t\tif ( nextLi ) {\n\t\t\tvar sublist = getSubList( nextLi );\n\t\t\tif ( sublist ) {\n\t\t\t\t// If next line is in the sub list of the current list item.\n\t\t\t\tif ( currentBlock.contains( nextLi ) ) {\n\t\t\t\t\tmergeChildren( sublist, nextLi.getParent(), nextLi );\n\t\t\t\t\tsublist.remove();\n\t\t\t\t}\n\t\t\t\t// Migrate the sub list to current list item.\n\t\t\t\telse {\n\t\t\t\t\tcurrentBlock.append( sublist );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar nextBlock, parent;\n\t\t// Remove any remaining zombies path blocks at the end after line merged.\n\t\twhile ( nextCursor.checkStartOfBlock() && nextCursor.checkEndOfBlock() ) {\n\t\t\tnextPath = nextCursor.startPath();\n\t\t\tnextBlock = nextPath.block;\n\n\t\t\t// Abort when nothing to be removed (http://dev.ckeditor.com/ticket/10890).\n\t\t\tif ( !nextBlock )\n\t\t\t\tbreak;\n\n\t\t\t// Check if also to remove empty list.\n\t\t\tif ( nextBlock.is( 'li' ) ) {\n\t\t\t\tparent = nextBlock.getParent();\n\t\t\t\tif ( nextBlock.equals( parent.getLast( nonEmpty ) ) && nextBlock.equals( parent.getFirst( nonEmpty ) ) )\n\t\t\t\t\tnextBlock = parent;\n\t\t\t}\n\n\t\t\tnextCursor.moveToPosition( nextBlock, CKEDITOR.POSITION_BEFORE_START );\n\t\t\tnextBlock.remove();\n\t\t}\n\n\t\t// Check if need to further merge with the list resides after the merged block. (http://dev.ckeditor.com/ticket/9080)\n\t\tvar walkerRng = nextCursor.clone(), editable = editor.editable();\n\t\twalkerRng.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END );\n\t\tvar walker = new CKEDITOR.dom.walker( walkerRng );\n\t\twalker.evaluator = function( node ) {\n\t\t\treturn nonEmpty( node ) && !blockBogus( node );\n\t\t};\n\t\tvar next = walker.next();\n\t\tif ( next && next.type == CKEDITOR.NODE_ELEMENT && next.getName() in CKEDITOR.dtd.$list )\n\t\t\tmergeListSiblings( next );\n\n\t\tcursor.moveToBookmark( bm );\n\n\t\t// Make fresh selection.\n\t\tcursor.select();\n\n\t\teditor.fire( 'saveSnapshot' );\n\t}\n\n\tfunction getSubList( li ) {\n\t\tvar last = li.getLast( nonEmpty );\n\t\treturn last && last.type == CKEDITOR.NODE_ELEMENT && last.getName() in listNodeNames ? last : null;\n\t}\n\n\tCKEDITOR.plugins.add( 'list', {\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\t\trequires: 'indentlist',\n\t\tinit: function( editor ) {\n\t\t\tif ( editor.blockless )\n\t\t\t\treturn;\n\n\t\t\t// Register commands.\n\t\t\teditor.addCommand( 'numberedlist', new listCommand( 'numberedlist', 'ol' ) );\n\t\t\teditor.addCommand( 'bulletedlist', new listCommand( 'bulletedlist', 'ul' ) );\n\n\t\t\t// Register the toolbar button.\n\t\t\tif ( editor.ui.addButton ) {\n\t\t\t\teditor.ui.addButton( 'NumberedList', {\n\t\t\t\t\tlabel: editor.lang.list.numberedlist,\n\t\t\t\t\tcommand: 'numberedlist',\n\t\t\t\t\tdirectional: true,\n\t\t\t\t\ttoolbar: 'list,10'\n\t\t\t\t} );\n\t\t\t\teditor.ui.addButton( 'BulletedList', {\n\t\t\t\t\tlabel: editor.lang.list.bulletedlist,\n\t\t\t\t\tcommand: 'bulletedlist',\n\t\t\t\t\tdirectional: true,\n\t\t\t\t\ttoolbar: 'list,20'\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Handled backspace/del key to join list items. (http://dev.ckeditor.com/ticket/8248,http://dev.ckeditor.com/ticket/9080)\n\t\t\teditor.on( 'key', function( evt ) {\n\t\t\t\t// Use getKey directly in order to ignore modifiers.\n\t\t\t\t// Justification: http://dev.ckeditor.com/ticket/11861#comment:13\n\t\t\t\tvar key = evt.data.domEvent.getKey(), li;\n\n\t\t\t\t// DEl/BACKSPACE\n\t\t\t\tif ( editor.mode == 'wysiwyg' && key in { 8: 1, 46: 1 } ) {\n\t\t\t\t\tvar sel = editor.getSelection(),\n\t\t\t\t\t\trange = sel.getRanges()[ 0 ],\n\t\t\t\t\t\tpath = range && range.startPath();\n\n\t\t\t\t\tif ( !range || !range.collapsed )\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tvar isBackspace = key == 8;\n\t\t\t\t\tvar editable = editor.editable();\n\t\t\t\t\tvar walker = new CKEDITOR.dom.walker( range.clone() );\n\t\t\t\t\twalker.evaluator = function( node ) {\n\t\t\t\t\t\treturn nonEmpty( node ) && !blockBogus( node );\n\t\t\t\t\t};\n\t\t\t\t\t// Backspace/Del behavior at the start/end of table is handled in core.\n\t\t\t\t\twalker.guard = function( node, isOut ) {\n\t\t\t\t\t\treturn !( isOut && node.type == CKEDITOR.NODE_ELEMENT && node.is( 'table' ) );\n\t\t\t\t\t};\n\n\t\t\t\t\tvar cursor = range.clone();\n\n\t\t\t\t\tif ( isBackspace ) {\n\t\t\t\t\t\tvar previous, joinWith;\n\n\t\t\t\t\t\t// Join a sub list's first line, with the previous visual line in parent.\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t( previous = path.contains( listNodeNames ) ) &&\n\t\t\t\t\t\t\trange.checkBoundaryOfElement( previous, CKEDITOR.START ) &&\n\t\t\t\t\t\t\t( previous = previous.getParent() ) && previous.is( 'li' ) &&\n\t\t\t\t\t\t\t( previous = getSubList( previous ) )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tjoinWith = previous;\n\t\t\t\t\t\t\tprevious = previous.getPrevious( nonEmpty );\n\t\t\t\t\t\t\t// Place cursor before the nested list.\n\t\t\t\t\t\t\tcursor.moveToPosition(\n\t\t\t\t\t\t\t\tprevious && blockBogus( previous ) ? previous : joinWith,\n\t\t\t\t\t\t\t\tCKEDITOR.POSITION_BEFORE_START );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Join any line following a list, with the last visual line of the list.\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\twalker.range.setStartAt( editable, CKEDITOR.POSITION_AFTER_START );\n\t\t\t\t\t\t\twalker.range.setEnd( range.startContainer, range.startOffset );\n\n\t\t\t\t\t\t\tprevious = walker.previous();\n\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tprevious && previous.type == CKEDITOR.NODE_ELEMENT &&\n\t\t\t\t\t\t\t\t( previous.getName() in listNodeNames ||\n\t\t\t\t\t\t\t\tprevious.is( 'li' ) )\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tif ( !previous.is( 'li' ) ) {\n\t\t\t\t\t\t\t\t\twalker.range.selectNodeContents( previous );\n\t\t\t\t\t\t\t\t\twalker.reset();\n\t\t\t\t\t\t\t\t\twalker.evaluator = isTextBlock;\n\t\t\t\t\t\t\t\t\tprevious = walker.previous();\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tjoinWith = previous;\n\t\t\t\t\t\t\t\t// Place cursor at the end of previous block.\n\t\t\t\t\t\t\t\tcursor.moveToElementEditEnd( joinWith );\n\n\t\t\t\t\t\t\t\t// And then just before end of closest block element (http://dev.ckeditor.com/ticket/12729).\n\t\t\t\t\t\t\t\tcursor.moveToPosition( cursor.endPath().block, CKEDITOR.POSITION_BEFORE_END );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( joinWith ) {\n\t\t\t\t\t\t\tjoinNextLineToCursor( editor, cursor, range );\n\t\t\t\t\t\t\tevt.cancel();\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tvar list = path.contains( listNodeNames );\n\t\t\t\t\t\t\t// Backspace pressed at the start of list outdents the first list item. (http://dev.ckeditor.com/ticket/9129)\n\t\t\t\t\t\t\tif ( list && range.checkBoundaryOfElement( list, CKEDITOR.START ) ) {\n\t\t\t\t\t\t\t\tli = list.getFirst( nonEmpty );\n\n\t\t\t\t\t\t\t\tif ( range.checkBoundaryOfElement( li, CKEDITOR.START ) ) {\n\t\t\t\t\t\t\t\t\tprevious = list.getPrevious( nonEmpty );\n\n\t\t\t\t\t\t\t\t\t// Only if the list item contains a sub list, do nothing but\n\t\t\t\t\t\t\t\t\t// simply move cursor backward one character.\n\t\t\t\t\t\t\t\t\tif ( getSubList( li ) ) {\n\t\t\t\t\t\t\t\t\t\tif ( previous ) {\n\t\t\t\t\t\t\t\t\t\t\trange.moveToElementEditEnd( previous );\n\t\t\t\t\t\t\t\t\t\t\trange.select();\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tevt.cancel();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\t\teditor.execCommand( 'outdent' );\n\t\t\t\t\t\t\t\t\t\tevt.cancel();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar next, nextLine;\n\n\t\t\t\t\t\tli = path.contains( 'li' );\n\n\t\t\t\t\t\tif ( li ) {\n\t\t\t\t\t\t\twalker.range.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END );\n\n\t\t\t\t\t\t\tvar last = li.getLast( nonEmpty );\n\t\t\t\t\t\t\tvar block = last && isTextBlock( last ) ? last : li;\n\n\t\t\t\t\t\t\t// Indicate cursor at the visual end of an list item.\n\t\t\t\t\t\t\tvar isAtEnd = 0;\n\n\t\t\t\t\t\t\tnext = walker.next();\n\n\t\t\t\t\t\t\t// When list item contains a sub list.\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tnext && next.type == CKEDITOR.NODE_ELEMENT &&\n\t\t\t\t\t\t\t\tnext.getName() in listNodeNames &&\n\t\t\t\t\t\t\t\tnext.equals( last )\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tisAtEnd = 1;\n\n\t\t\t\t\t\t\t\t// Move to the first item in sub list.\n\t\t\t\t\t\t\t\tnext = walker.next();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Right at the end of list item.\n\t\t\t\t\t\t\telse if ( range.checkBoundaryOfElement( block, CKEDITOR.END ) ) {\n\t\t\t\t\t\t\t\tisAtEnd = 2;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( isAtEnd && next ) {\n\t\t\t\t\t\t\t\t// Put cursor range there.\n\t\t\t\t\t\t\t\tnextLine = range.clone();\n\t\t\t\t\t\t\t\tnextLine.moveToElementEditStart( next );\n\n\t\t\t\t\t\t\t\t// http://dev.ckeditor.com/ticket/13409\n\t\t\t\t\t\t\t\t// For the following case and similar\n\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t//
          \n\t\t\t\t\t\t\t\t// \t
        • \n\t\t\t\t\t\t\t\t// \t\t

          x^

          \n\t\t\t\t\t\t\t\t// \t\t
            \n\t\t\t\t\t\t\t\t// \t\t\t
          • y
          • \n\t\t\t\t\t\t\t\t// \t\t
          \n\t\t\t\t\t\t\t\t// \t
        • \n\t\t\t\t\t\t\t\t//
        \n\t\t\t\t\t\t\t\tif ( isAtEnd == 1 ) {\n\t\t\t\t\t\t\t\t\t// Move the cursor to if attached to \"x\" text node.\n\t\t\t\t\t\t\t\t\tcursor.optimize();\n\n\t\t\t\t\t\t\t\t\t// Abort if the range is attached directly in
      6. , like\n\t\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t\t//
          \n\t\t\t\t\t\t\t\t\t// \t
        • \n\t\t\t\t\t\t\t\t\t// \t\tx^\n\t\t\t\t\t\t\t\t\t// \t\t
            \n\t\t\t\t\t\t\t\t\t// \t\t\t
          • y
          • \n\t\t\t\t\t\t\t\t\t// \t\t
          \n\t\t\t\t\t\t\t\t\t// \t
        • \n\t\t\t\t\t\t\t\t\t//
        \n\t\t\t\t\t\t\t\t\tif ( !cursor.startContainer.equals( li ) ) {\n\t\t\t\t\t\t\t\t\t\tvar node = cursor.startContainer,\n\t\t\t\t\t\t\t\t\t\t\tfarthestInlineAscendant;\n\n\t\t\t\t\t\t\t\t\t\t// Find , which is farthest from but still inline element.\n\t\t\t\t\t\t\t\t\t\twhile ( node.is( CKEDITOR.dtd.$inline ) ) {\n\t\t\t\t\t\t\t\t\t\t\tfarthestInlineAscendant = node;\n\t\t\t\t\t\t\t\t\t\t\tnode = node.getParent();\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\t// Move the range so it does not contain inline elements.\n\t\t\t\t\t\t\t\t\t\t// It prevents from being included in .\n\t\t\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t\t\t// \n\t\t\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t\t\t// so instead of\n\t\t\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t\t\t//
          \n\t\t\t\t\t\t\t\t\t\t// \t
        • \n\t\t\t\t\t\t\t\t\t\t// \t\t

          x^y

          \n\t\t\t\t\t\t\t\t\t\t// \t
        • \n\t\t\t\t\t\t\t\t\t\t//
        \n\t\t\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t\t\t// pressing DELETE produces\n\t\t\t\t\t\t\t\t\t\t//\n\t\t\t\t\t\t\t\t\t\t//
          \n\t\t\t\t\t\t\t\t\t\t// \t
        • \n\t\t\t\t\t\t\t\t\t\t// \t\t

          x^y

          \n\t\t\t\t\t\t\t\t\t\t// \t
        • \n\t\t\t\t\t\t\t\t\t\t//
        \n\t\t\t\t\t\t\t\t\t\tif ( farthestInlineAscendant ) {\n\t\t\t\t\t\t\t\t\t\t\tcursor.moveToPosition( farthestInlineAscendant, CKEDITOR.POSITION_AFTER_END );\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Moving `cursor` and `next line` only when at the end literally (http://dev.ckeditor.com/ticket/12729).\n\t\t\t\t\t\t\t\tif ( isAtEnd == 2 ) {\n\t\t\t\t\t\t\t\t\tcursor.moveToPosition( cursor.endPath().block, CKEDITOR.POSITION_BEFORE_END );\n\n\t\t\t\t\t\t\t\t\t// Next line might be text node not wrapped in block element.\n\t\t\t\t\t\t\t\t\tif ( nextLine.endPath().block ) {\n\t\t\t\t\t\t\t\t\t\tnextLine.moveToPosition( nextLine.endPath().block, CKEDITOR.POSITION_AFTER_START );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tjoinNextLineToCursor( editor, cursor, nextLine );\n\t\t\t\t\t\t\t\tevt.cancel();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Handle Del key pressed before the list.\n\t\t\t\t\t\t\twalker.range.setEndAt( editable, CKEDITOR.POSITION_BEFORE_END );\n\t\t\t\t\t\t\tnext = walker.next();\n\n\t\t\t\t\t\t\tif ( next && next.type == CKEDITOR.NODE_ELEMENT && next.is( listNodeNames ) ) {\n\t\t\t\t\t\t\t\t// The start
      7. \n\t\t\t\t\t\t\t\tnext = next.getFirst( nonEmpty );\n\n\t\t\t\t\t\t\t\t// Simply remove the current empty block, move cursor to the\n\t\t\t\t\t\t\t\t// subsequent list.\n\t\t\t\t\t\t\t\tif ( path.block && range.checkStartOfBlock() && range.checkEndOfBlock() ) {\n\t\t\t\t\t\t\t\t\tpath.block.remove();\n\t\t\t\t\t\t\t\t\trange.moveToElementEditStart( next );\n\t\t\t\t\t\t\t\t\trange.select();\n\t\t\t\t\t\t\t\t\tevt.cancel();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Preventing the default (merge behavior), but simply move\n\t\t\t\t\t\t\t\t// the cursor one character forward if subsequent list item\n\t\t\t\t\t\t\t\t// contains sub list.\n\t\t\t\t\t\t\t\telse if ( getSubList( next ) ) {\n\t\t\t\t\t\t\t\t\trange.moveToElementEditStart( next );\n\t\t\t\t\t\t\t\t\trange.select();\n\t\t\t\t\t\t\t\t\tevt.cancel();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Merge the first list item with the current line.\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tnextLine = range.clone();\n\t\t\t\t\t\t\t\t\tnextLine.moveToElementEditStart( next );\n\t\t\t\t\t\t\t\t\tjoinNextLineToCursor( editor, cursor, nextLine );\n\t\t\t\t\t\t\t\t\tevt.cancel();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// The backspace/del could potentially put cursor at a bad position,\n\t\t\t\t\t// being it handled or not, check immediately the selection to have it fixed.\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\teditor.selectionChange( 1 );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t} );\n} )();\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview The [Magic Line](http://ckeditor.com/addon/magicline) plugin that makes it easier to access some document areas that\n * are difficult to focus.\n */\n\n'use strict';\n\n( function() {\n\tCKEDITOR.plugins.add( 'magicline', {\n\t\tinit: initPlugin\n\t} );\n\n\t// Activates the box inside of an editor.\n\tfunction initPlugin( editor ) {\n\t\t// Configurables\n\t\tvar config = editor.config,\n\t\t\ttriggerOffset = config.magicline_triggerOffset || 30,\n\t\t\tenterMode = config.enterMode,\n\t\t\tthat = {\n\t\t\t\t// Global stuff is being initialized here.\n\t\t\t\teditor: editor,\n\t\t\t\tenterMode: enterMode,\n\t\t\t\ttriggerOffset: triggerOffset,\n\t\t\t\tholdDistance: 0 | triggerOffset * ( config.magicline_holdDistance || 0.5 ),\n\t\t\t\tboxColor: config.magicline_color || '#ff0000',\n\t\t\t\trtl: config.contentsLangDirection == 'rtl',\n\t\t\t\ttabuList: [ 'data-cke-hidden-sel' ].concat( config.magicline_tabuList || [] ),\n\t\t\t\ttriggers: config.magicline_everywhere ? DTD_BLOCK : { table: 1, hr: 1, div: 1, ul: 1, ol: 1, dl: 1, form: 1, blockquote: 1 }\n\t\t\t},\n\t\t\tscrollTimeout, checkMouseTimeoutPending, checkMouseTimer;\n\n\n\t\t// Simple irrelevant elements filter.\n\t\tthat.isRelevant = function( node ) {\n\t\t\treturn isHtml( node ) && // -> Node must be an existing HTML element.\n\t\t\t\t!isLine( that, node ) && // -> Node can be neither the box nor its child.\n\t\t\t\t!isFlowBreaker( node ); // -> Node can be neither floated nor positioned nor aligned.\n\t\t};\n\n\t\teditor.on( 'contentDom', addListeners, this );\n\n\t\tfunction addListeners() {\n\t\t\tvar editable = editor.editable(),\n\t\t\t\tdoc = editor.document,\n\t\t\t\twin = editor.window;\n\n\t\t\t// Global stuff is being initialized here.\n\t\t\textend( that, {\n\t\t\t\teditable: editable,\n\t\t\t\tinInlineMode: editable.isInline(),\n\t\t\t\tdoc: doc,\n\t\t\t\twin: win,\n\t\t\t\thotNode: null\n\t\t\t}, true );\n\n\t\t\t// This is the boundary of the editor. For inline the boundary is editable itself.\n\t\t\t// For classic (`iframe`-based) editor, the HTML element is a real boundary.\n\t\t\tthat.boundary = that.inInlineMode ? that.editable : that.doc.getDocumentElement();\n\n\t\t\t// Enabling the box inside of inline editable is pointless.\n\t\t\t// There's no need to access spaces inside paragraphs, links, spans, etc.\n\t\t\tif ( editable.is( dtd.$inline ) )\n\t\t\t\treturn;\n\n\t\t\t// Handle in-line editing by setting appropriate position.\n\t\t\t// If current position is static, make it relative and clear top/left coordinates.\n\t\t\tif ( that.inInlineMode && !isPositioned( editable ) ) {\n\t\t\t\teditable.setStyles( {\n\t\t\t\t\tposition: 'relative',\n\t\t\t\t\ttop: null,\n\t\t\t\t\tleft: null\n\t\t\t\t} );\n\t\t\t}\n\t\t\t// Enable the box. Let it produce children elements, initialize\n\t\t\t// event handlers and own methods.\n\t\t\tinitLine.call( this, that );\n\n\t\t\t// Get view dimensions and scroll positions.\n\t\t\t// At this stage (before any checkMouse call) it is used mostly\n\t\t\t// by tests. Nevertheless it a crucial thing.\n\t\t\tupdateWindowSize( that );\n\n\t\t\t// Remove the box before an undo image is created.\n\t\t\t// This is important. If we didn't do that, the *undo thing* would revert the box into an editor.\n\t\t\t// Thanks to that, undo doesn't even know about the existence of the box.\n\t\t\teditable.attachListener( editor, 'beforeUndoImage', function() {\n\t\t\t\tthat.line.detach();\n\t\t\t} );\n\n\t\t\t// Removes the box HTML from editor data string if getData is called.\n\t\t\t// Thanks to that, an editor never yields data polluted by the box.\n\t\t\t// Listen with very high priority, so line will be removed before other\n\t\t\t// listeners will see it.\n\t\t\teditable.attachListener( editor, 'beforeGetData', function() {\n\t\t\t\t// If the box is in editable, remove it.\n\t\t\t\tif ( that.line.wrap.getParent() ) {\n\t\t\t\t\tthat.line.detach();\n\n\t\t\t\t\t// Restore line in the last listener for 'getData'.\n\t\t\t\t\teditor.once( 'getData', function() {\n\t\t\t\t\t\tthat.line.attach();\n\t\t\t\t\t}, null, null, 1000 );\n\t\t\t\t}\n\t\t\t}, null, null, 0 );\n\n\t\t\t// Hide the box on mouseout if mouse leaves document.\n\t\t\teditable.attachListener( that.inInlineMode ? doc : doc.getWindow().getFrame(), 'mouseout', function( event ) {\n\t\t\t\tif ( editor.mode != 'wysiwyg' )\n\t\t\t\t\treturn;\n\n\t\t\t\t// Check for inline-mode editor. If so, check mouse position\n\t\t\t\t// and remove the box if mouse outside of an editor.\n\t\t\t\tif ( that.inInlineMode ) {\n\t\t\t\t\tvar mouse = {\n\t\t\t\t\t\tx: event.data.$.clientX,\n\t\t\t\t\t\ty: event.data.$.clientY\n\t\t\t\t\t};\n\n\t\t\t\t\tupdateWindowSize( that );\n\t\t\t\t\tupdateEditableSize( that, true );\n\n\t\t\t\t\tvar size = that.view.editable,\n\t\t\t\t\t\tscroll = that.view.scroll;\n\n\t\t\t\t\t// If outside of an editor...\n\t\t\t\t\tif ( !inBetween( mouse.x, size.left - scroll.x, size.right - scroll.x ) || !inBetween( mouse.y, size.top - scroll.y, size.bottom - scroll.y ) ) {\n\t\t\t\t\t\tclearTimeout( checkMouseTimer );\n\t\t\t\t\t\tcheckMouseTimer = null;\n\t\t\t\t\t\tthat.line.detach();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\telse {\n\t\t\t\t\tclearTimeout( checkMouseTimer );\n\t\t\t\t\tcheckMouseTimer = null;\n\t\t\t\t\tthat.line.detach();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// This one deactivates hidden mode of an editor which\n\t\t\t// prevents the box from being shown.\n\t\t\teditable.attachListener( editable, 'keyup', function() {\n\t\t\t\tthat.hiddenMode = 0;\n\t\t\t} );\n\n\t\t\teditable.attachListener( editable, 'keydown', function( event ) {\n\t\t\t\tif ( editor.mode != 'wysiwyg' )\n\t\t\t\t\treturn;\n\n\t\t\t\tvar keyStroke = event.data.getKeystroke();\n\n\t\t\t\tswitch ( keyStroke ) {\n\t\t\t\t\t// Shift pressed\n\t\t\t\t\tcase 2228240: // IE\n\t\t\t\t\tcase 16:\n\t\t\t\t\t\tthat.hiddenMode = 1;\n\t\t\t\t\t\tthat.line.detach();\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\t// This method ensures that checkMouse aren't executed\n\t\t\t// in parallel and no more frequently than specified in timeout function.\n\t\t\t// In classic (`iframe`-based) editor, document is used as a trigger, to provide magicline\n\t\t\t// functionality when mouse is below the body (short content, short body).\n\t\t\teditable.attachListener( that.inInlineMode ? editable : doc, 'mousemove', function( event ) {\n\t\t\t\tcheckMouseTimeoutPending = true;\n\n\t\t\t\tif ( editor.mode != 'wysiwyg' || editor.readOnly || checkMouseTimer )\n\t\t\t\t\treturn;\n\n\t\t\t\t// IE<9 requires this event-driven object to be created\n\t\t\t\t// outside of the setTimeout statement.\n\t\t\t\t// Otherwise it loses the event object with its properties.\n\t\t\t\tvar mouse = {\n\t\t\t\t\tx: event.data.$.clientX,\n\t\t\t\t\ty: event.data.$.clientY\n\t\t\t\t};\n\n\t\t\t\tcheckMouseTimer = setTimeout( function() {\n\t\t\t\t\tcheckMouse( mouse );\n\t\t\t\t}, 30 ); // balances performance and accessibility\n\t\t\t} );\n\n\t\t\t// This one removes box on scroll event.\n\t\t\t// It is to avoid box displacement.\n\t\t\teditable.attachListener( win, 'scroll', function() {\n\t\t\t\tif ( editor.mode != 'wysiwyg' )\n\t\t\t\t\treturn;\n\n\t\t\t\tthat.line.detach();\n\n\t\t\t\t// To figure this out just look at the mouseup\n\t\t\t\t// event handler below.\n\t\t\t\tif ( env.webkit ) {\n\t\t\t\t\tthat.hiddenMode = 1;\n\n\t\t\t\t\tclearTimeout( scrollTimeout );\n\t\t\t\t\tscrollTimeout = setTimeout( function() {\n\t\t\t\t\t\t// Don't leave hidden mode until mouse remains pressed and\n\t\t\t\t\t\t// scroll is being used, i.e. when dragging something.\n\t\t\t\t\t\tif ( !that.mouseDown )\n\t\t\t\t\t\t\tthat.hiddenMode = 0;\n\t\t\t\t\t}, 50 );\n\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Those event handlers remove the box on mousedown\n\t\t\t// and don't reveal it until the mouse is released.\n\t\t\t// It is to prevent box insertion e.g. while scrolling\n\t\t\t// (w/ scrollbar), selecting and so on.\n\t\t\teditable.attachListener( env_ie8 ? doc : win, 'mousedown', function() {\n\t\t\t\tif ( editor.mode != 'wysiwyg' )\n\t\t\t\t\treturn;\n\n\t\t\t\tthat.line.detach();\n\t\t\t\tthat.hiddenMode = 1;\n\t\t\t\tthat.mouseDown = 1;\n\n\t\t\t} );\n\n\t\t\t// Google Chrome doesn't trigger this on the scrollbar (since 2009...)\n\t\t\t// so it is totally useless to check for scroll finish\n\t\t\t// see: http://code.google.com/p/chromium/issues/detail?id=14204\n\t\t\teditable.attachListener( env_ie8 ? doc : win, 'mouseup', function() {\n\t\t\t\tthat.hiddenMode = 0;\n\t\t\t\tthat.mouseDown = 0;\n\t\t\t} );\n\n\t\t\t// Editor commands for accessing difficult focus spaces.\n\t\t\teditor.addCommand( 'accessPreviousSpace', accessFocusSpaceCmd( that ) );\n\t\t\teditor.addCommand( 'accessNextSpace', accessFocusSpaceCmd( that, true ) );\n\n\t\t\teditor.setKeystroke( [\n\t\t\t\t[ config.magicline_keystrokePrevious, 'accessPreviousSpace' ],\n\t\t\t\t[ config.magicline_keystrokeNext, 'accessNextSpace' ]\n\t\t\t] );\n\n\t\t\t// Revert magicline hot node on undo/redo.\n\t\t\teditor.on( 'loadSnapshot', function() {\n\t\t\t\tvar elements, element, i;\n\n\t\t\t\tfor ( var t in { p: 1, br: 1, div: 1 } ) {\n\t\t\t\t\t// document.find is not available in QM (http://dev.ckeditor.com/ticket/11149).\n\t\t\t\t\telements = editor.document.getElementsByTag( t );\n\n\t\t\t\t\tfor ( i = elements.count(); i--; ) {\n\t\t\t\t\t\tif ( ( element = elements.getItem( i ) ).data( 'cke-magicline-hot' ) ) {\n\t\t\t\t\t\t\t// Restore hotNode\n\t\t\t\t\t\t\tthat.hotNode = element;\n\t\t\t\t\t\t\t// Restore last access direction\n\t\t\t\t\t\t\tthat.lastCmdDirection = element.data( 'cke-magicline-dir' ) === 'true' ? true : false;\n\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// This method handles mousemove mouse for box toggling.\n\t\t\t// It uses mouse position to determine underlying element, then\n\t\t\t// it tries to use different trigger type in order to place the box\n\t\t\t// in correct place. The following procedure is executed periodically.\n\t\t\tfunction checkMouse( mouse ) {\n\n\t\t\t\tthat.mouse = mouse;\n\t\t\t\tthat.trigger = null;\n\n\t\t\t\tcheckMouseTimer = null;\n\t\t\t\tupdateWindowSize( that );\n\n\t\t\t\tif (\n\t\t\t\t\tcheckMouseTimeoutPending &&\t\t\t\t\t\t\t\t// There must be an event pending.\n\t\t\t\t\t!that.hiddenMode &&\t\t\t\t\t\t\t\t\t\t// Can't be in hidden mode.\n\t\t\t\t\teditor.focusManager.hasFocus &&\t\t\t\t\t\t\t// Editor must have focus.\n\t\t\t\t\t!that.line.mouseNear() &&\t\t\t\t\t\t\t\t// Mouse pointer can't be close to the box.\n\t\t\t\t\t( that.element = elementFromMouse( that, true ) )\t\t// There must be valid element.\n\t\t\t\t) {\n\t\t\t\t\t// If trigger exists, and trigger is correct -> show the box.\n\t\t\t\t\t// Don't show the line if trigger is a descendant of some tabu-list element.\n\t\t\t\t\tif ( ( that.trigger = triggerEditable( that ) || triggerEdge( that ) || triggerExpand( that ) ) &&\n\t\t\t\t\t\t!isInTabu( that, that.trigger.upper || that.trigger.lower ) ) {\n\t\t\t\t\t\tthat.line.attach().place();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Otherwise remove the box\n\t\t\t\t\telse {\n\t\t\t\t\t\tthat.trigger = null;\n\t\t\t\t\t\tthat.line.detach();\n\t\t\t\t\t}\n\n\n\t\t\t\t\tcheckMouseTimeoutPending = false;\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\t// This one allows testing and debugging. It reveals some\n\t\t\t// inner methods to the world.\n\t\t\tthis.backdoor = {\n\t\t\t\taccessFocusSpace: accessFocusSpace,\n\t\t\t\tboxTrigger: boxTrigger,\n\t\t\t\tisLine: isLine,\n\t\t\t\tgetAscendantTrigger: getAscendantTrigger,\n\t\t\t\tgetNonEmptyNeighbour: getNonEmptyNeighbour,\n\t\t\t\tgetSize: getSize,\n\t\t\t\tthat: that,\n\t\t\t\ttriggerEdge: triggerEdge,\n\t\t\t\ttriggerEditable: triggerEditable,\n\t\t\t\ttriggerExpand: triggerExpand\n\t\t\t};\n\t\t}\n\t}\n\n\t// Some shorthands for common methods to save bytes\n\tvar extend = CKEDITOR.tools.extend,\n\t\tnewElement = CKEDITOR.dom.element,\n\t\tnewElementFromHtml = newElement.createFromHtml,\n\t\tenv = CKEDITOR.env,\n\t\tenv_ie8 = CKEDITOR.env.ie && CKEDITOR.env.version < 9,\n\t\tdtd = CKEDITOR.dtd,\n\n\t\t// Global object associating enter modes with elements.\n\t\tenterElements = {},\n\n\t\t// Constant values, types and so on.\n\t\tEDGE_TOP = 128,\n\t\tEDGE_BOTTOM = 64,\n\t\tEDGE_MIDDLE = 32,\n\t\tTYPE_EDGE = 16,\n\t\tTYPE_EXPAND = 8,\n\t\tLOOK_TOP = 4,\n\t\tLOOK_BOTTOM = 2,\n\t\tLOOK_NORMAL = 1,\n\t\tWHITE_SPACE = '\\u00A0',\n\t\tDTD_LISTITEM = dtd.$listItem,\n\t\tDTD_TABLECONTENT = dtd.$tableContent,\n\t\tDTD_NONACCESSIBLE = extend( {}, dtd.$nonEditable, dtd.$empty ),\n\t\tDTD_BLOCK = dtd.$block,\n\n\t\t// Minimum time that must elapse between two update*Size calls.\n\t\t// It prevents constant getComuptedStyle calls and improves performance.\n\t\tCACHE_TIME = 100,\n\n\t\t// Shared CSS stuff for box elements\n\t\tCSS_COMMON = 'width:0px;height:0px;padding:0px;margin:0px;display:block;' + 'z-index:9999;color:#fff;position:absolute;font-size: 0px;line-height:0px;',\n\t\tCSS_TRIANGLE = CSS_COMMON + 'border-color:transparent;display:block;border-style:solid;',\n\t\tTRIANGLE_HTML = '' + WHITE_SPACE + '';\n\n\tenterElements[ CKEDITOR.ENTER_BR ] = 'br';\n\tenterElements[ CKEDITOR.ENTER_P ] = 'p';\n\tenterElements[ CKEDITOR.ENTER_DIV ] = 'div';\n\n\tfunction areSiblings( that, upper, lower ) {\n\t\treturn isHtml( upper ) && isHtml( lower ) && lower.equals( upper.getNext( function( node ) {\n\t\t\treturn !( isEmptyTextNode( node ) || isComment( node ) || isFlowBreaker( node ) );\n\t\t} ) );\n\t}\n\n\t// boxTrigger is an abstract type which describes\n\t// the relationship between elements that may result\n\t// in showing the box.\n\t//\n\t// The following type is used by numerous methods\n\t// to share information about the hypothetical box placement\n\t// and look by referring to boxTrigger properties.\n\tfunction boxTrigger( triggerSetup ) {\n\t\tthis.upper = triggerSetup[ 0 ];\n\t\tthis.lower = triggerSetup[ 1 ];\n\t\tthis.set.apply( this, triggerSetup.slice( 2 ) );\n\t}\n\n\tboxTrigger.prototype = {\n\t\tset: function( edge, type, look ) {\n\t\t\tthis.properties = edge + type + ( look || LOOK_NORMAL );\n\t\t\treturn this;\n\t\t},\n\n\t\tis: function( property ) {\n\t\t\treturn ( this.properties & property ) == property;\n\t\t}\n\t};\n\n\tvar elementFromMouse = ( function() {\n\t\tfunction elementFromPoint( doc, mouse ) {\n\t\t\tvar pointedElement = doc.$.elementFromPoint( mouse.x, mouse.y );\n\n\t\t\t// IE9QM: from times to times it will return an empty object on scroll bar hover. (http://dev.ckeditor.com/ticket/12185)\n\t\t\treturn pointedElement && pointedElement.nodeType ?\n\t\t\t\tnew CKEDITOR.dom.element( pointedElement ) :\n\t\t\t\tnull;\n\t\t}\n\n\t\treturn function( that, ignoreBox, forceMouse ) {\n\t\t\tif ( !that.mouse )\n\t\t\t\treturn null;\n\n\t\t\tvar doc = that.doc,\n\t\t\t\tlineWrap = that.line.wrap,\n\t\t\t\tmouse = forceMouse || that.mouse,\n\t\t\t\t// Note: element might be null.\n\t\t\t\telement = elementFromPoint( doc, mouse );\n\n\t\t\t// If ignoreBox is set and element is the box, it means that we\n\t\t\t// need to hide the box for a while, repeat elementFromPoint\n\t\t\t// and show it again.\n\t\t\tif ( ignoreBox && isLine( that, element ) ) {\n\t\t\t\tlineWrap.hide();\n\t\t\t\telement = elementFromPoint( doc, mouse );\n\t\t\t\tlineWrap.show();\n\t\t\t}\n\n\t\t\t// Return nothing if:\n\t\t\t//\t\\-> Element is not HTML.\n\t\t\tif ( !( element && element.type == CKEDITOR.NODE_ELEMENT && element.$ ) )\n\t\t\t\treturn null;\n\n\t\t\t// Also return nothing if:\n\t\t\t//\t\\-> We're IE<9 and element is out of the top-level element (editable for inline and HTML for classic (`iframe`-based)).\n\t\t\t//\t\tThis is due to the bug which allows IE<9 firing mouse events on element\n\t\t\t//\t\twith contenteditable=true while doing selection out (far, away) of the element.\n\t\t\t//\t\tThus we must always be sure that we stay in editable or HTML.\n\t\t\tif ( env.ie && env.version < 9 ) {\n\t\t\t\tif ( !( that.boundary.equals( element ) || that.boundary.contains( element ) ) )\n\t\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\treturn element;\n\t\t};\n\t} )();\n\n\t// Gets the closest parent node that belongs to triggers group.\n\tfunction getAscendantTrigger( that ) {\n\t\tvar node = that.element,\n\t\t\ttrigger;\n\n\t\tif ( node && isHtml( node ) ) {\n\t\t\ttrigger = node.getAscendant( that.triggers, true );\n\n\t\t\t// If trigger is an element, neither editable nor editable's ascendant.\n\t\t\tif ( trigger && that.editable.contains( trigger ) ) {\n\t\t\t\t// Check for closest editable limit.\n\t\t\t\t// Don't consider trigger as a limit as it may be nested editable (includeSelf=false) (http://dev.ckeditor.com/ticket/12009).\n\t\t\t\tvar limit = getClosestEditableLimit( trigger );\n\n\t\t\t\t// Trigger in nested editable area.\n\t\t\t\tif ( limit.getAttribute( 'contenteditable' ) == 'true' )\n\t\t\t\t\treturn trigger;\n\t\t\t\t// Trigger in non-editable area.\n\t\t\t\telse if ( limit.is( that.triggers ) )\n\t\t\t\t\treturn limit;\n\t\t\t\telse\n\t\t\t\t\treturn null;\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\treturn null;\n\t}\n\n\tfunction getMidpoint( that, upper, lower ) {\n\t\tupdateSize( that, upper );\n\t\tupdateSize( that, lower );\n\n\t\tvar upperSizeBottom = upper.size.bottom,\n\t\t\tlowerSizeTop = lower.size.top;\n\n\t\treturn upperSizeBottom && lowerSizeTop ? 0 | ( upperSizeBottom + lowerSizeTop ) / 2 : upperSizeBottom || lowerSizeTop;\n\t}\n\n\t// Get nearest node (either text or HTML), but:\n\t//\t\\->\tOmit all empty text nodes (containing white characters only).\n\t//\t\\-> Omit BR elements\n\t//\t\\-> Omit flow breakers.\n\tfunction getNonEmptyNeighbour( that, node, goBack ) {\n\t\tnode = node[ goBack ? 'getPrevious' : 'getNext' ]( function( node ) {\n\t\t\treturn ( isTextNode( node ) && !isEmptyTextNode( node ) ) ||\n\t\t\t\t( isHtml( node ) && !isFlowBreaker( node ) && !isLine( that, node ) );\n\t\t} );\n\n\t\treturn node;\n\t}\n\n\tfunction inBetween( val, lower, upper ) {\n\t\treturn val > lower && val < upper;\n\t}\n\n\t// Returns the closest ancestor that has contenteditable attribute.\n\t// Such ancestor is the limit of (non-)editable DOM branch that element\n\t// belongs to. This method omits editor editable.\n\tfunction getClosestEditableLimit( element, includeSelf ) {\n\t\tif ( element.data( 'cke-editable' ) )\n\t\t\treturn null;\n\n\t\tif ( !includeSelf )\n\t\t\telement = element.getParent();\n\n\t\twhile ( element ) {\n\t\t\tif ( element.data( 'cke-editable' ) )\n\t\t\t\treturn null;\n\n\t\t\tif ( element.hasAttribute( 'contenteditable' ) )\n\t\t\t\treturn element;\n\n\t\t\telement = element.getParent();\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t// Access space line consists of a few elements (spans):\n\t// \t\\-> Line wrapper.\n\t// \t\\-> Line.\n\t// \t\\-> Line triangles: left triangle (LT), right triangle (RT).\n\t// \t\\-> Button handler (BTN).\n\t//\n\t//\t+--------------------------------------------------- line.wrap (span) -----+\n\t//\t| +---------------------------------------------------- line (span) -----+ |\n\t//\t| | +- LT \\ +- BTN -+ / RT -+ | |\n\t//\t| | | \\ | | | / | | |\n\t//\t| | | / | <__| | \\ | | |\n\t//\t| | +-----/ +-------+ \\-----+ | |\n\t//\t| +----------------------------------------------------------------------+ |\n\t// +--------------------------------------------------------------------------+\n\t//\n\tfunction initLine( that ) {\n\t\tvar doc = that.doc,\n\t\t\t// This the main box element that holds triangles and the insertion button\n\t\t\tline = newElementFromHtml( '', doc ),\n\t\t\ticonPath = CKEDITOR.getUrl( this.path + 'images/' + ( env.hidpi ? 'hidpi/' : '' ) + 'icon' + ( that.rtl ? '-rtl' : '' ) + '.png' );\n\n\t\textend( line, {\n\n\t\t\tattach: function() {\n\t\t\t\t// Only if not already attached\n\t\t\t\tif ( !this.wrap.getParent() )\n\t\t\t\t\tthis.wrap.appendTo( that.editable, true );\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Looks are as follows: [ LOOK_TOP, LOOK_BOTTOM, LOOK_NORMAL ].\n\t\t\tlineChildren: [\n\t\t\t\textend(\n\t\t\t\t\tnewElementFromHtml(\n\t\t\t\t\t\t'', doc\n\t\t\t\t\t), {\n\t\t\t\t\t\tbase: CSS_COMMON + 'height:17px;width:17px;' + ( that.rtl ? 'left' : 'right' ) + ':17px;' +\n\t\t\t\t\t\t\t\t'background:url(' + iconPath + ') center no-repeat ' + that.boxColor + ';cursor:pointer;' +\n\t\t\t\t\t\t\t\t( env.hc ? 'font-size: 15px;line-height:14px;border:1px solid #fff;text-align:center;' : '' ) +\n\t\t\t\t\t\t\t\t( env.hidpi ? 'background-size: 9px 10px;' : '' ),\n\t\t\t\t\t\tlooks: [\n\t\t\t\t\t\t\t'top:-8px; border-radius: 2px;',\n\t\t\t\t\t\t\t'top:-17px; border-radius: 2px 2px 0px 0px;',\n\t\t\t\t\t\t\t'top:-1px; border-radius: 0px 0px 2px 2px;'\n\t\t\t\t\t\t]\n\t\t\t\t\t}\n\t\t\t\t),\n\t\t\t\textend( newElementFromHtml( TRIANGLE_HTML, doc ), {\n\t\t\t\t\tbase: CSS_TRIANGLE + 'left:0px;border-left-color:' + that.boxColor + ';',\n\t\t\t\t\tlooks: [\n\t\t\t\t\t\t'border-width:8px 0 8px 8px;top:-8px',\n\t\t\t\t\t\t'border-width:8px 0 0 8px;top:-8px',\n\t\t\t\t\t\t'border-width:0 0 8px 8px;top:0px'\n\t\t\t\t\t]\n\t\t\t\t} ),\n\t\t\t\textend( newElementFromHtml( TRIANGLE_HTML, doc ), {\n\t\t\t\t\tbase: CSS_TRIANGLE + 'right:0px;border-right-color:' + that.boxColor + ';',\n\t\t\t\t\tlooks: [\n\t\t\t\t\t\t'border-width:8px 8px 8px 0;top:-8px',\n\t\t\t\t\t\t'border-width:8px 8px 0 0;top:-8px',\n\t\t\t\t\t\t'border-width:0 8px 8px 0;top:0px'\n\t\t\t\t\t]\n\t\t\t\t} )\n\t\t\t],\n\n\t\t\tdetach: function() {\n\t\t\t\t// Detach only if already attached.\n\t\t\t\tif ( this.wrap.getParent() )\n\t\t\t\t\tthis.wrap.remove();\n\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Checks whether mouseY is around an element by comparing boundaries and considering\n\t\t\t// an offset distance.\n\t\t\tmouseNear: function() {\n\n\t\t\t\tupdateSize( that, this );\n\t\t\t\tvar offset = that.holdDistance,\n\t\t\t\t\tsize = this.size;\n\n\t\t\t\t// Determine neighborhood by element dimensions and offsets.\n\t\t\t\tif ( size && inBetween( that.mouse.y, size.top - offset, size.bottom + offset ) && inBetween( that.mouse.x, size.left - offset, size.right + offset ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t},\n\n\t\t\t// Adjusts position of the box according to the trigger properties.\n\t\t\t// If also affects look of the box depending on the type of the trigger.\n\t\t\tplace: function() {\n\t\t\t\tvar view = that.view,\n\t\t\t\t\teditable = that.editable,\n\t\t\t\t\ttrigger = that.trigger,\n\t\t\t\t\tupper = trigger.upper,\n\t\t\t\t\tlower = trigger.lower,\n\t\t\t\t\tany = upper || lower,\n\t\t\t\t\tparent = any.getParent(),\n\t\t\t\t\tstyleSet = {};\n\n\t\t\t\t// Save recent trigger for further insertion.\n\t\t\t\t// It is necessary due to the fact, that that.trigger may\n\t\t\t\t// contain different boxTrigger at the moment of insertion\n\t\t\t\t// or may be even null.\n\t\t\t\tthis.trigger = trigger;\n\n\t\t\t\tupper && updateSize( that, upper, true );\n\t\t\t\tlower && updateSize( that, lower, true );\n\t\t\t\tupdateSize( that, parent, true );\n\n\t\t\t\t// Yeah, that's gonna be useful in inline-mode case.\n\t\t\t\tif ( that.inInlineMode )\n\t\t\t\t\tupdateEditableSize( that, true );\n\n\t\t\t\t// Set X coordinate (left, right, width).\n\t\t\t\tif ( parent.equals( editable ) ) {\n\t\t\t\t\tstyleSet.left = view.scroll.x;\n\t\t\t\t\tstyleSet.right = -view.scroll.x;\n\t\t\t\t\tstyleSet.width = '';\n\t\t\t\t} else {\n\t\t\t\t\tstyleSet.left = any.size.left - any.size.margin.left + view.scroll.x - ( that.inInlineMode ? view.editable.left + view.editable.border.left : 0 );\n\t\t\t\t\tstyleSet.width = any.size.outerWidth + any.size.margin.left + any.size.margin.right + view.scroll.x;\n\t\t\t\t\tstyleSet.right = '';\n\t\t\t\t}\n\n\t\t\t\t// Set Y coordinate (top) for trigger consisting of two elements.\n\t\t\t\tif ( upper && lower ) {\n\t\t\t\t\t// No margins at all or they're equal. Place box right between.\n\t\t\t\t\tif ( upper.size.margin.bottom === lower.size.margin.top )\n\t\t\t\t\t\tstyleSet.top = 0 | ( upper.size.bottom + upper.size.margin.bottom / 2 );\n\t\t\t\t\telse {\n\t\t\t\t\t\t// Upper margin < lower margin. Place at lower margin.\n\t\t\t\t\t\tif ( upper.size.margin.bottom < lower.size.margin.top )\n\t\t\t\t\t\t\tstyleSet.top = upper.size.bottom + upper.size.margin.bottom;\n\t\t\t\t\t\t// Upper margin > lower margin. Place at upper margin - lower margin.\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\tstyleSet.top = upper.size.bottom + upper.size.margin.bottom - lower.size.margin.top;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Set Y coordinate (top) for single-edge trigger.\n\t\t\t\telse if ( !upper )\n\t\t\t\t\tstyleSet.top = lower.size.top - lower.size.margin.top;\n\t\t\t\telse if ( !lower ) {\n\t\t\t\t\tstyleSet.top = upper.size.bottom + upper.size.margin.bottom;\n\t\t\t\t}\n\n\t\t\t\t// Set box button modes if close to the viewport horizontal edge\n\t\t\t\t// or look forced by the trigger.\n\t\t\t\tif ( trigger.is( LOOK_TOP ) || inBetween( styleSet.top, view.scroll.y - 15, view.scroll.y + 5 ) ) {\n\t\t\t\t\tstyleSet.top = that.inInlineMode ? 0 : view.scroll.y;\n\t\t\t\t\tthis.look( LOOK_TOP );\n\t\t\t\t} else if ( trigger.is( LOOK_BOTTOM ) || inBetween( styleSet.top, view.pane.bottom - 5, view.pane.bottom + 15 ) ) {\n\t\t\t\t\tstyleSet.top = that.inInlineMode ? (\n\t\t\t\t\t\t\tview.editable.height + view.editable.padding.top + view.editable.padding.bottom\n\t\t\t\t\t\t) : (\n\t\t\t\t\t\t\tview.pane.bottom - 1\n\t\t\t\t\t\t);\n\n\t\t\t\t\tthis.look( LOOK_BOTTOM );\n\t\t\t\t} else {\n\t\t\t\t\tif ( that.inInlineMode )\n\t\t\t\t\t\tstyleSet.top -= view.editable.top + view.editable.border.top;\n\n\t\t\t\t\tthis.look( LOOK_NORMAL );\n\t\t\t\t}\n\n\t\t\t\tif ( that.inInlineMode ) {\n\t\t\t\t\t// 1px bug here...\n\t\t\t\t\tstyleSet.top--;\n\n\t\t\t\t\t// Consider the editable to be an element with overflow:scroll\n\t\t\t\t\t// and non-zero scrollTop/scrollLeft value.\n\t\t\t\t\t// For example: divarea editable. (http://dev.ckeditor.com/ticket/9383)\n\t\t\t\t\tstyleSet.top += view.editable.scroll.top;\n\t\t\t\t\tstyleSet.left += view.editable.scroll.left;\n\t\t\t\t}\n\n\t\t\t\t// Append `px` prefixes.\n\t\t\t\tfor ( var style in styleSet )\n\t\t\t\t\tstyleSet[ style ] = CKEDITOR.tools.cssLength( styleSet[ style ] );\n\n\t\t\t\tthis.setStyles( styleSet );\n\t\t\t},\n\n\t\t\t// Changes look of the box according to current needs.\n\t\t\t// Three different styles are available: [ LOOK_TOP, LOOK_BOTTOM, LOOK_NORMAL ].\n\t\t\tlook: function( look ) {\n\t\t\t\tif ( this.oldLook == look )\n\t\t\t\t\treturn;\n\n\t\t\t\tfor ( var i = this.lineChildren.length, child; i--; )\n\t\t\t\t\t( child = this.lineChildren[ i ] ).setAttribute( 'style', child.base + child.looks[ 0 | look / 2 ] );\n\n\t\t\t\tthis.oldLook = look;\n\t\t\t},\n\n\t\t\twrap: new newElement( 'span', that.doc )\n\n\t\t} );\n\n\t\t// Insert children into the box.\n\t\tfor ( var i = line.lineChildren.length; i--; )\n\t\t\tline.lineChildren[ i ].appendTo( line );\n\n\t\t// Set default look of the box.\n\t\tline.look( LOOK_NORMAL );\n\n\t\t// Using that wrapper prevents IE (8,9) from resizing editable area at the moment\n\t\t// of box insertion. This works thanks to the fact, that positioned box is wrapped by\n\t\t// an inline element. So much tricky.\n\t\tline.appendTo( line.wrap );\n\n\t\t// Make the box unselectable.\n\t\tline.unselectable();\n\n\t\t// Handle accessSpace node insertion.\n\t\tline.lineChildren[ 0 ].on( 'mouseup', function( event ) {\n\t\t\tline.detach();\n\n\t\t\taccessFocusSpace( that, function( accessNode ) {\n\t\t\t\t// Use old trigger that was saved by 'place' method. Look: line.place\n\t\t\t\tvar trigger = that.line.trigger;\n\n\t\t\t\taccessNode[ trigger.is( EDGE_TOP ) ? 'insertBefore' : 'insertAfter' ](\n\t\t\t\t\ttrigger.is( EDGE_TOP ) ? trigger.lower : trigger.upper );\n\t\t\t}, true );\n\n\t\t\tthat.editor.focus();\n\n\t\t\tif ( !env.ie && that.enterMode != CKEDITOR.ENTER_BR )\n\t\t\t\tthat.hotNode.scrollIntoView();\n\n\t\t\tevent.data.preventDefault( true );\n\t\t} );\n\n\t\t// Prevents IE9 from displaying the resize box and disables drag'n'drop functionality.\n\t\tline.on( 'mousedown', function( event ) {\n\t\t\tevent.data.preventDefault( true );\n\t\t} );\n\n\t\tthat.line = line;\n\t}\n\n\t// This function allows accessing any focus space according to the insert function:\n\t// \t* For enterMode ENTER_P it creates P element filled with dummy white-space.\n\t// \t* For enterMode ENTER_DIV it creates DIV element filled with dummy white-space.\n\t// \t* For enterMode ENTER_BR it creates BR element or   in IE.\n\t//\n\t// The node is being inserted according to insertFunction. Finally the method\n\t// selects the non-breaking space making the node ready for typing.\n\tfunction accessFocusSpace( that, insertFunction, doSave ) {\n\t\tvar range = new CKEDITOR.dom.range( that.doc ),\n\t\t\teditor = that.editor,\n\t\t\taccessNode;\n\n\t\t// IE requires text node of   in ENTER_BR mode.\n\t\tif ( env.ie && that.enterMode == CKEDITOR.ENTER_BR )\n\t\t\taccessNode = that.doc.createText( WHITE_SPACE );\n\n\t\t// In other cases a regular element is used.\n\t\telse {\n\t\t\t// Use the enterMode of editable's limit or editor's\n\t\t\t// enter mode if not in nested editable.\n\t\t\tvar limit = getClosestEditableLimit( that.element, true ),\n\n\t\t\t\t// This is an enter mode for the context. We cannot use\n\t\t\t\t// editor.activeEnterMode because the focused nested editable will\n\t\t\t\t// have a different enterMode as editor but magicline will be inserted\n\t\t\t\t// directly into editor's editable.\n\t\t\t\tenterMode = limit && limit.data( 'cke-enter-mode' ) || that.enterMode;\n\n\t\t\taccessNode = new newElement( enterElements[ enterMode ], that.doc );\n\n\t\t\tif ( !accessNode.is( 'br' ) ) {\n\t\t\t\tvar dummy = that.doc.createText( WHITE_SPACE );\n\t\t\t\tdummy.appendTo( accessNode );\n\t\t\t}\n\t\t}\n\n\t\tdoSave && editor.fire( 'saveSnapshot' );\n\n\t\tinsertFunction( accessNode );\n\t\t//dummy.appendTo( accessNode );\n\t\trange.moveToPosition( accessNode, CKEDITOR.POSITION_AFTER_START );\n\t\teditor.getSelection().selectRanges( [ range ] );\n\t\tthat.hotNode = accessNode;\n\n\t\tdoSave && editor.fire( 'saveSnapshot' );\n\t}\n\n\t// Access focus space on demand by taking an element under the caret as a reference.\n\t// The space is accessed provided the element under the caret is trigger AND:\n\t//\n\t// 1. First/last-child of its parent:\n\t//\t\t+----------------------- Parent element -+\n\t//\t\t| +------------------------------ DIV -+ |\t<-- Access before\n\t//\t\t| | Foo^ | |\n\t//\t\t| | | |\n\t//\t\t| +------------------------------------+ |\t<-- Access after\n\t//\t\t+----------------------------------------+\n\t//\n\t// OR\n\t//\n\t// 2. It has a direct sibling element, which is also a trigger:\n\t//\t\t+-------------------------------- DIV#1 -+\n\t//\t\t| Foo^ |\n\t//\t\t| |\n\t//\t\t+----------------------------------------+\n\t// \t<-- Access here\n\t//\t\t+-------------------------------- DIV#2 -+\n\t//\t\t| Bar |\n\t//\t\t| |\n\t//\t\t+----------------------------------------+\n\t//\n\t// OR\n\t//\n\t// 3. It has a direct sibling, which is a trigger and has a valid neighbour trigger,\n\t// but belongs to dtd.$.empty/nonEditable:\n\t//\t\t+------------------------------------ P -+\n\t//\t\t| Foo^ |\n\t//\t\t| |\n\t//\t\t+----------------------------------------+\n\t//\t\t+----------------------------------- HR -+\n\t// \t<-- Access here\n\t//\t\t+-------------------------------- DIV#2 -+\n\t//\t\t| Bar |\n\t//\t\t| |\n\t//\t\t+----------------------------------------+\n\t//\n\tfunction accessFocusSpaceCmd( that, insertAfter ) {\n\t\treturn {\n\t\t\tcanUndo: true,\n\t\t\tmodes: { wysiwyg: 1 },\n\t\t\texec: ( function() {\n\n\t\t\t\t// Inserts line (accessNode) at the position by taking target node as a reference.\n\t\t\t\tfunction doAccess( target ) {\n\t\t\t\t\t// Remove old hotNode under certain circumstances.\n\t\t\t\t\tvar hotNodeChar = ( env.ie && env.version < 9 ? ' ' : WHITE_SPACE ),\n\t\t\t\t\t\tremoveOld = that.hotNode &&\t\t\t\t\t\t\t// Old hotNode must exist.\n\t\t\t\t\t\t\tthat.hotNode.getText() == hotNodeChar &&\t\t// Old hotNode hasn't been changed.\n\t\t\t\t\t\t\tthat.element.equals( that.hotNode ) &&\t\t\t// Caret is inside old hotNode.\n\t\t\t\t\t\t\t// Command is executed in the same direction.\n\t\t\t\t\t\t\tthat.lastCmdDirection === !!insertAfter; // jshint ignore:line\n\n\t\t\t\t\taccessFocusSpace( that, function( accessNode ) {\n\t\t\t\t\t\tif ( removeOld && that.hotNode )\n\t\t\t\t\t\t\tthat.hotNode.remove();\n\n\t\t\t\t\t\taccessNode[ insertAfter ? 'insertAfter' : 'insertBefore' ]( target );\n\n\t\t\t\t\t\t// Make this element distinguishable. Also remember the direction\n\t\t\t\t\t\t// it's been inserted into document.\n\t\t\t\t\t\taccessNode.setAttributes( {\n\t\t\t\t\t\t\t'data-cke-magicline-hot': 1,\n\t\t\t\t\t\t\t'data-cke-magicline-dir': !!insertAfter\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t// Save last direction of the command (is insertAfter?).\n\t\t\t\t\t\tthat.lastCmdDirection = !!insertAfter;\n\t\t\t\t\t} );\n\n\t\t\t\t\tif ( !env.ie && that.enterMode != CKEDITOR.ENTER_BR )\n\t\t\t\t\t\tthat.hotNode.scrollIntoView();\n\n\t\t\t\t\t// Detach the line if was visible (previously triggered by mouse).\n\t\t\t\t\tthat.line.detach();\n\t\t\t\t}\n\n\t\t\t\treturn function( editor ) {\n\t\t\t\t\tvar selected = editor.getSelection().getStartElement(),\n\t\t\t\t\t\tlimit;\n\n\t\t\t\t\t// (http://dev.ckeditor.com/ticket/9833) Go down to the closest non-inline element in DOM structure\n\t\t\t\t\t// since inline elements don't participate in in magicline.\n\t\t\t\t\tselected = selected.getAscendant( DTD_BLOCK, 1 );\n\n\t\t\t\t\t// Stop if selected is a child of a tabu-list element.\n\t\t\t\t\tif ( isInTabu( that, selected ) )\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Sometimes it may happen that there's no parent block below selected element\n\t\t\t\t\t// or, for example, getAscendant reaches editable or editable parent.\n\t\t\t\t\t// We must avoid such pathological cases.\n\t\t\t\t\tif ( !selected || selected.equals( that.editable ) || selected.contains( that.editable ) )\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// Executing the command directly in nested editable should\n\t\t\t\t\t// access space before/after it.\n\t\t\t\t\tif ( ( limit = getClosestEditableLimit( selected ) ) && limit.getAttribute( 'contenteditable' ) == 'false' )\n\t\t\t\t\t\tselected = limit;\n\n\t\t\t\t\t// That holds element from mouse. Replace it with the\n\t\t\t\t\t// element under the caret.\n\t\t\t\t\tthat.element = selected;\n\n\t\t\t\t\t// (3.) Handle the following cases where selected neighbour\n\t\t\t\t\t// is a trigger inaccessible for the caret AND:\n\t\t\t\t\t//\t- Is first/last-child\n\t\t\t\t\t//\tOR\n\t\t\t\t\t//\t- Has a sibling, which is also a trigger.\n\t\t\t\t\tvar neighbor = getNonEmptyNeighbour( that, selected, !insertAfter ),\n\t\t\t\t\t\tneighborSibling;\n\n\t\t\t\t\t// Check for a neighbour that belongs to triggers.\n\t\t\t\t\t// Consider only non-accessible elements (they cannot have any children)\n\t\t\t\t\t// since they cannot be given a caret inside, to run the command\n\t\t\t\t\t// the regular way (1. & 2.).\n\t\t\t\t\tif (\n\t\t\t\t\t\tisHtml( neighbor ) && neighbor.is( that.triggers ) && neighbor.is( DTD_NONACCESSIBLE ) &&\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\t// Check whether neighbor is first/last-child.\n\t\t\t\t\t\t\t!getNonEmptyNeighbour( that, neighbor, !insertAfter ) ||\n\t\t\t\t\t\t\t// Check for a sibling of a neighbour that also is a trigger.\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\t( neighborSibling = getNonEmptyNeighbour( that, neighbor, !insertAfter ) ) &&\n\t\t\t\t\t\t\t\tisHtml( neighborSibling ) &&\n\t\t\t\t\t\t\t\tneighborSibling.is( that.triggers )\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t) {\n\t\t\t\t\t\tdoAccess( neighbor );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Look for possible target element DOWN \"selected\" DOM branch (towards editable)\n\t\t\t\t\t// that belong to that.triggers\n\t\t\t\t\tvar target = getAscendantTrigger( that, selected );\n\n\t\t\t\t\t// No HTML target -> no access.\n\t\t\t\t\tif ( !isHtml( target ) )\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\t// (1.) Target is first/last child -> access.\n\t\t\t\t\tif ( !getNonEmptyNeighbour( that, target, !insertAfter ) ) {\n\t\t\t\t\t\tdoAccess( target );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tvar sibling = getNonEmptyNeighbour( that, target, !insertAfter );\n\n\t\t\t\t\t// (2.) Target has a sibling that belongs to that.triggers -> access.\n\t\t\t\t\tif ( sibling && isHtml( sibling ) && sibling.is( that.triggers ) ) {\n\t\t\t\t\t\tdoAccess( target );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t} )()\n\t\t};\n\t}\n\n\tfunction isLine( that, node ) {\n\t\tif ( !( node && node.type == CKEDITOR.NODE_ELEMENT && node.$ ) )\n\t\t\treturn false;\n\n\t\tvar line = that.line;\n\n\t\treturn line.wrap.equals( node ) || line.wrap.contains( node );\n\t}\n\n\t// Is text node containing white-spaces only?\n\tvar isEmptyTextNode = CKEDITOR.dom.walker.whitespaces();\n\n\t// Is fully visible HTML node?\n\tfunction isHtml( node ) {\n\t\treturn node && node.type == CKEDITOR.NODE_ELEMENT && node.$;\t// IE requires that\n\t}\n\n\tfunction isFloated( element ) {\n\t\tif ( !isHtml( element ) )\n\t\t\treturn false;\n\n\t\tvar options = { left: 1, right: 1, center: 1 };\n\n\t\treturn !!( options[ element.getComputedStyle( 'float' ) ] || options[ element.getAttribute( 'align' ) ] );\n\t}\n\n\tfunction isFlowBreaker( element ) {\n\t\tif ( !isHtml( element ) )\n\t\t\treturn false;\n\n\t\treturn isPositioned( element ) || isFloated( element );\n\t}\n\n\t// Isn't node of NODE_COMMENT type?\n\tvar isComment = CKEDITOR.dom.walker.nodeType( CKEDITOR.NODE_COMMENT );\n\n\tfunction isPositioned( element ) {\n\t\treturn !!{ absolute: 1, fixed: 1 }[ element.getComputedStyle( 'position' ) ];\n\t}\n\n\t// Is text node?\n\tfunction isTextNode( node ) {\n\t\treturn node && node.type == CKEDITOR.NODE_TEXT;\n\t}\n\n\tfunction isTrigger( that, element ) {\n\t\treturn isHtml( element ) ? element.is( that.triggers ) : null;\n\t}\n\n\tfunction isInTabu( that, element ) {\n\t\tif ( !element )\n\t\t\treturn false;\n\n\t\tvar parents = element.getParents( 1 );\n\n\t\tfor ( var i = parents.length ; i-- ; ) {\n\t\t\tfor ( var j = that.tabuList.length ; j-- ; ) {\n\t\t\t\tif ( parents[ i ].hasAttribute( that.tabuList[ j ] ) )\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t// This function checks vertically is there's a relevant child between element's edge\n\t// and the pointer.\n\t//\t\\-> Table contents are omitted.\n\tfunction isChildBetweenPointerAndEdge( that, parent, edgeBottom ) {\n\t\tvar edgeChild = parent[ edgeBottom ? 'getLast' : 'getFirst' ]( function( node ) {\n\t\t\treturn that.isRelevant( node ) && !node.is( DTD_TABLECONTENT );\n\t\t} );\n\n\t\tif ( !edgeChild )\n\t\t\treturn false;\n\n\t\tupdateSize( that, edgeChild );\n\n\t\treturn edgeBottom ? edgeChild.size.top > that.mouse.y : edgeChild.size.bottom < that.mouse.y;\n\t}\n\n\t// This method handles edge cases:\n\t// \t\\-> Mouse is around upper or lower edge of view pane.\n\t// \t\\-> Also scroll position is either minimal or maximal.\n\t// \t\\-> It's OK to show LOOK_TOP(BOTTOM) type line.\n\t//\n\t// This trigger doesn't need additional post-filtering.\n\t//\n\t//\t+----------------------------- Editable -+ /--\n\t//\t| +---------------------- First child -+ | | <-- Top edge (first child)\n\t//\t| | | | |\n\t//\t| | | | |\t * Mouse activation area *\n\t//\t| | | | |\n\t//\t| | ... | |\t\\-- Top edge + trigger offset\n\t//\t| . . |\n\t//\t| |\n\t//\t| . . |\n\t//\t| | ... | | /-- Bottom edge - trigger offset\n\t//\t| | | | |\n\t//\t| | | | |\t * Mouse activation area *\n\t//\t| | | | |\n\t//\t| +----------------------- Last child -+ | | <-- Bottom edge (last child)\n\t//\t+----------------------------------------+ \\--\n\t//\n\tfunction triggerEditable( that ) {\n\n\t\tvar editable = that.editable,\n\t\t\tmouse = that.mouse,\n\t\t\tview = that.view,\n\t\t\ttriggerOffset = that.triggerOffset,\n\t\t\ttriggerLook;\n\n\t\t// Update editable dimensions.\n\t\tupdateEditableSize( that );\n\n\t\t// This flag determines whether checking bottom trigger.\n\t\tvar bottomTrigger = mouse.y > (\n\t\t\t\tthat.inInlineMode ? (\n\t\t\t\t\tview.editable.top + view.editable.height / 2\n\t\t\t\t) : (\n\t\t\t\t\t// This is to handle case when editable.height / 2 <<< pane.height.\n\t\t\t\t\tMath.min( view.editable.height, view.pane.height ) / 2\n\t\t\t\t)\n\t\t\t),\n\n\t\t// Edge node according to bottomTrigger.\n\t\tedgeNode = editable[ bottomTrigger ? 'getLast' : 'getFirst' ]( function( node ) {\n\t\t\treturn !( isEmptyTextNode( node ) || isComment( node ) );\n\t\t} );\n\n\t\t// There's no edge node. Abort.\n\t\tif ( !edgeNode ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// If the edgeNode in editable is ML, get the next one.\n\t\tif ( isLine( that, edgeNode ) ) {\n\t\t\tedgeNode = that.line.wrap[ bottomTrigger ? 'getPrevious' : 'getNext' ]( function( node ) {\n\t\t\t\treturn !( isEmptyTextNode( node ) || isComment( node ) );\n\t\t\t} );\n\t\t}\n\n\t\t// Exclude bad nodes (no ML needed then):\n\t\t//\t\\-> Edge node is text.\n\t\t//\t\\-> Edge node is floated, etc.\n\t\t//\n\t\t// Edge node *must be* a valid trigger at this stage as well.\n\t\tif ( !isHtml( edgeNode ) || isFlowBreaker( edgeNode ) || !isTrigger( that, edgeNode ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Update size of edge node. Dimensions will be necessary.\n\t\tupdateSize( that, edgeNode );\n\n\t\t// Return appropriate trigger according to bottomTrigger.\n\t\t// \\->\tTop edge trigger case first.\n\t\tif ( !bottomTrigger &&\t\t\t\t\t\t\t\t\t\t\t\t\t// Top trigger case.\n\t\t\tedgeNode.size.top >= 0 &&\t\t\t\t\t\t\t\t\t\t\t// Check if the first element is fully visible.\n\t\t\tinBetween( mouse.y, 0, edgeNode.size.top + triggerOffset ) ) {\t\t// Check if mouse in [0, edgeNode.top + triggerOffset].\n\n\t\t\t// Determine trigger look.\n\t\t\ttriggerLook = that.inInlineMode || view.scroll.y === 0 ?\n\t\t\t\tLOOK_TOP : LOOK_NORMAL;\n\n\n\t\t\treturn new boxTrigger( [ null, edgeNode,\n\t\t\t\tEDGE_TOP,\n\t\t\t\tTYPE_EDGE,\n\t\t\t\ttriggerLook\n\t\t\t] );\n\t\t}\n\n\t\t// \\->\tBottom case.\n\t\telse if ( bottomTrigger &&\n\t\t\tedgeNode.size.bottom <= view.pane.height &&\t\t\t\t\t\t\t// Check if the last element is fully visible\n\t\t\tinBetween( mouse.y,\t\t\t\t\t\t\t\t\t\t\t\t\t// Check if mouse in...\n\t\t\t\tedgeNode.size.bottom - triggerOffset, view.pane.height ) ) {\t// [ edgeNode.bottom - triggerOffset, paneHeight ]\n\n\t\t\t// Determine trigger look.\n\t\t\ttriggerLook = that.inInlineMode ||\n\t\t\t\tinBetween( edgeNode.size.bottom, view.pane.height - triggerOffset, view.pane.height ) ?\n\t\t\t\t\tLOOK_BOTTOM : LOOK_NORMAL;\n\n\n\t\t\treturn new boxTrigger( [ edgeNode, null,\n\t\t\t\tEDGE_BOTTOM,\n\t\t\t\tTYPE_EDGE,\n\t\t\t\ttriggerLook\n\t\t\t] );\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t// This method covers cases *inside* of an element:\n\t// \t\\->\tThe pointer is in the top (bottom) area of an element and there's\n\t//\t\tHTML node before (after) this element.\n\t// \t\\-> An element being the first or last child of its parent.\n\t//\n\t//\t+----------------------- Parent element -+\n\t//\t| +----------------------- Element #1 -+ | /--\n\t//\t| | | | |\t * Mouse activation area (as first child) *\n\t//\t| | | | \\--\n\t//\t| | | | /--\n\t//\t| | | | |\t * Mouse activation area (Element #2) *\n\t//\t| +------------------------------------+ | \\--\n\t//\t| |\n\t//\t| +----------------------- Element #2 -+ | /--\n\t//\t| | | | |\t * Mouse activation area (Element #1) *\n\t//\t| | | | \\--\n\t//\t| | | |\n\t//\t| +------------------------------------+ |\n\t//\t| |\n\t//\t| Text node is here. |\n\t//\t| |\n\t//\t| +----------------------- Element #3 -+ |\n\t//\t| | | |\n\t//\t| | | |\n\t//\t| | | | /--\n\t//\t| | | | |\t * Mouse activation area (as last child) *\n\t//\t| +------------------------------------+ | \\--\n\t//\t+----------------------------------------+\n\t//\n\tfunction triggerEdge( that ) {\n\n\t\tvar mouse = that.mouse,\n\t\t\tview = that.view,\n\t\t\ttriggerOffset = that.triggerOffset;\n\n\t\t// Get the ascendant trigger basing on elementFromMouse.\n\t\tvar element = getAscendantTrigger( that );\n\n\n\t\t// Abort if there's no appropriate element.\n\t\tif ( !element ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Dimensions will be necessary.\n\t\tupdateSize( that, element );\n\n\t\t// If triggerOffset is larger than a half of element's height,\n\t\t// use an offset of 1/2 of element's height. If the offset wasn't reduced,\n\t\t// top area would cover most (all) cases.\n\t\tvar fixedOffset = Math.min( triggerOffset,\n\t\t\t\t0 | ( element.size.outerHeight / 2 ) ),\n\n\t\t// This variable will hold the trigger to be returned.\n\t\t\ttriggerSetup = [],\n\t\t\ttriggerLook,\n\n\t\t// This flag determines whether dealing with a bottom trigger.\n\t\t\tbottomTrigger;\n\n\t\t//\t\\-> Top trigger.\n\t\tif ( inBetween( mouse.y, element.size.top - 1, element.size.top + fixedOffset ) )\n\t\t\tbottomTrigger = false;\n\t\t//\t\\-> Bottom trigger.\n\t\telse if ( inBetween( mouse.y, element.size.bottom - fixedOffset, element.size.bottom + 1 ) )\n\t\t\tbottomTrigger = true;\n\t\t//\t\\-> Abort. Not in a valid trigger space.\n\t\telse {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Reject wrong elements.\n\t\t// \t\\-> Reject an element which is a flow breaker.\n\t\t// \t\\-> Reject an element which has a child above/below the mouse pointer.\n\t\t//\t\\-> Reject an element which belongs to list items.\n\t\tif (\n\t\t\tisFlowBreaker( element ) ||\n\t\t\tisChildBetweenPointerAndEdge( that, element, bottomTrigger ) ||\n\t\t\telement.getParent().is( DTD_LISTITEM )\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Get sibling according to bottomTrigger.\n\t\tvar elementSibling = getNonEmptyNeighbour( that, element, !bottomTrigger );\n\n\t\t// No sibling element.\n\t\t// This is a first or last child case.\n\t\tif ( !elementSibling ) {\n\t\t\t// No need to reject the element as it has already been done before.\n\t\t\t// Prepare a trigger.\n\n\t\t\t// Determine trigger look.\n\t\t\tif ( element.equals( that.editable[ bottomTrigger ? 'getLast' : 'getFirst' ]( that.isRelevant ) ) ) {\n\t\t\t\tupdateEditableSize( that );\n\n\t\t\t\tif (\n\t\t\t\t\tbottomTrigger && inBetween( mouse.y,\n\t\t\t\t\telement.size.bottom - fixedOffset, view.pane.height ) &&\n\t\t\t\t\tinBetween( element.size.bottom, view.pane.height - fixedOffset, view.pane.height )\n\t\t\t\t) {\n\t\t\t\t\ttriggerLook = LOOK_BOTTOM;\n\t\t\t\t} else if ( inBetween( mouse.y, 0, element.size.top + fixedOffset ) ) {\n\t\t\t\t\ttriggerLook = LOOK_TOP;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttriggerLook = LOOK_NORMAL;\n\t\t\t}\n\n\t\t\ttriggerSetup = [ null, element ][ bottomTrigger ? 'reverse' : 'concat' ]().concat( [\n\t\t\t\tbottomTrigger ? EDGE_BOTTOM : EDGE_TOP,\n\t\t\t\tTYPE_EDGE,\n\t\t\t\ttriggerLook,\n\t\t\t\telement.equals( that.editable[ bottomTrigger ? 'getLast' : 'getFirst' ]( that.isRelevant ) ) ?\n\t\t\t\t\t\t( bottomTrigger ? LOOK_BOTTOM : LOOK_TOP ) : LOOK_NORMAL\n\t\t\t] );\n\n\t\t}\n\n\t\t// Abort. Sibling is a text element.\n\t\telse if ( isTextNode( elementSibling ) ) {\n\t\t\treturn null;\n\t\t}\n\n\t\t// Check if the sibling is a HTML element.\n\t\t// If so, create an TYPE_EDGE, EDGE_MIDDLE trigger.\n\t\telse if ( isHtml( elementSibling ) ) {\n\t\t\t// Reject wrong elementSiblings.\n\t\t\t// \t\\-> Reject an elementSibling which is a flow breaker.\n\t\t\t//\t\\-> Reject an elementSibling which isn't a trigger.\n\t\t\t//\t\\-> Reject an elementSibling which belongs to list items.\n\t\t\tif (\n\t\t\t\tisFlowBreaker( elementSibling ) ||\n\t\t\t\t!isTrigger( that, elementSibling ) ||\n\t\t\t\telementSibling.getParent().is( DTD_LISTITEM )\n\t\t\t) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Prepare a trigger.\n\t\t\ttriggerSetup = [ elementSibling, element ][ bottomTrigger ? 'reverse' : 'concat' ]().concat( [\n\t\t\t\tEDGE_MIDDLE,\n\t\t\t\tTYPE_EDGE\n\t\t\t] );\n\n\t\t}\n\n\t\tif ( 0 in triggerSetup ) {\n\t\t\treturn new boxTrigger( triggerSetup );\n\t\t}\n\n\t\treturn null;\n\t}\n\n\t// Checks iteratively up and down in search for elements using elementFromMouse method.\n\t// Useful if between two triggers.\n\t//\n\t//\t+----------------------- Parent element -+\n\t//\t| +----------------------- Element #1 -+ |\n\t//\t| | | |\n\t//\t| | | |\n\t//\t| | | |\n\t//\t| +------------------------------------+ |\n\t//\t| | /--\n\t//\t| . | |\n\t//\t| . +-- Floated -+ | |\n\t//\t| | | | | |\t* Mouse activation area *\n\t//\t| | | IGNORE | | |\n\t//\t| X | | | |\tMethod searches vertically for sibling elements.\n\t//\t| | +------------+ | |\tStart point is X (mouse-y coordinate).\n\t//\t| | | |\tFloated elements, comments and empty text nodes are omitted.\n\t//\t| . | |\n\t//\t| . | |\n\t//\t| | \\--\n\t//\t| +----------------------- Element #2 -+ |\n\t//\t| | | |\n\t//\t| | | |\n\t//\t| | | |\n\t//\t| | | |\n\t//\t| +------------------------------------+ |\n\t//\t+----------------------------------------+\n\t//\n\tvar triggerExpand = ( function() {\n\t\t// The heart of the procedure. This method creates triggers that are\n\t\t// filtered by expandFilter method.\n\t\tfunction expandEngine( that ) {\n\n\t\t\tvar startElement = that.element,\n\t\t\t\tupper, lower, trigger;\n\n\t\t\tif ( !isHtml( startElement ) || startElement.contains( that.editable ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Stop searching if element is in non-editable branch of DOM.\n\t\t\tif ( startElement.isReadOnly() )\n\t\t\t\treturn null;\n\n\t\t\ttrigger = verticalSearch( that,\n\t\t\t\tfunction( current, startElement ) {\n\t\t\t\t\treturn !startElement.equals( current );\t// stop when start element and the current one differ\n\t\t\t\t}, function( that, mouse ) {\n\t\t\t\t\treturn elementFromMouse( that, true, mouse );\n\t\t\t\t}, startElement ),\n\n\t\t\tupper = trigger.upper,\n\t\t\tlower = trigger.lower;\n\n\n\t\t\t// Success: two siblings have been found\n\t\t\tif ( areSiblings( that, upper, lower ) ) {\n\t\t\t\treturn trigger.set( EDGE_MIDDLE, TYPE_EXPAND );\n\t\t\t}\n\n\n\t\t\t// Danger. Dragons ahead.\n\t\t\t// No siblings have been found during previous phase, post-processing may be necessary.\n\t\t\t// We can traverse DOM until a valid pair of elements around the pointer is found.\n\n\t\t\t// Prepare for post-processing:\n\t\t\t// \t1. Determine if upper and lower are children of startElement.\n\t\t\t// \t\t1.1. If so, find their ascendants that are closest to startElement (one level deeper than startElement).\n\t\t\t// \t\t1.2. Otherwise use first/last-child of the startElement as upper/lower. Why?:\n\t\t\t// \t\t\ta) \tupper/lower belongs to another branch of the DOM tree.\n\t\t\t// \t\t\tb) \tverticalSearch encountered an edge of the viewport and failed.\n\t\t\t// \t\t1.3. Make sure upper and lower still exist. Why?:\n\t\t\t// \t\t\ta) \tUpper and lower may be not belong to the branch of the startElement (may not exist at all) and\n\t\t\t// \t\t\t\tstartElement has no children.\n\t\t\t// \t2. Perform the post-processing.\n\t\t\t// \t\t2.1. Gather dimensions of an upper element.\n\t\t\t// \t\t2.2. Abort if lower edge of upper is already under the mouse pointer. Why?:\n\t\t\t// \t\t\ta) \tWe expect upper to be above and lower below the mouse pointer.\n\t\t\t// \t3. Perform iterative search while upper != lower.\n\t\t\t// \t\t3.1. Find the upper-next element. If there's no such element, break current search. Why?:\n\t\t\t// \t\t\ta)\tThere's no point in further search if there are only text nodes ahead.\n\t\t\t// \t\t3.2. Calculate the distance between the middle point of ( upper, upperNext ) and mouse-y.\n\t\t\t// \t\t3.3. If the distance is shorter than the previous best, save it (save upper, upperNext as well).\n\t\t\t// \t\t3.4. If the optimal pair is found, assign it back to the trigger.\n\n\t\t\t// 1.1., 1.2.\n\t\t\tif ( upper && startElement.contains( upper ) ) {\n\t\t\t\twhile ( !upper.getParent().equals( startElement ) )\n\t\t\t\t\tupper = upper.getParent();\n\t\t\t} else {\n\t\t\t\tupper = startElement.getFirst( function( node ) {\n\t\t\t\t\treturn expandSelector( that, node );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( lower && startElement.contains( lower ) ) {\n\t\t\t\twhile ( !lower.getParent().equals( startElement ) )\n\t\t\t\t\tlower = lower.getParent();\n\t\t\t} else {\n\t\t\t\tlower = startElement.getLast( function( node ) {\n\t\t\t\t\treturn expandSelector( that, node );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// 1.3.\n\t\t\tif ( !upper || !lower ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// 2.1.\n\t\t\tupdateSize( that, upper );\n\t\t\tupdateSize( that, lower );\n\n\t\t\tif ( !checkMouseBetweenElements( that, upper, lower ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tvar minDistance = Number.MAX_VALUE,\n\t\t\t\tcurrentDistance, upperNext, minElement, minElementNext;\n\n\t\t\twhile ( lower && !lower.equals( upper ) ) {\n\t\t\t\t// 3.1.\n\t\t\t\tif ( !( upperNext = upper.getNext( that.isRelevant ) ) )\n\t\t\t\t\tbreak;\n\n\t\t\t\t// 3.2.\n\t\t\t\tcurrentDistance = Math.abs( getMidpoint( that, upper, upperNext ) - that.mouse.y );\n\n\t\t\t\t// 3.3.\n\t\t\t\tif ( currentDistance < minDistance ) {\n\t\t\t\t\tminDistance = currentDistance;\n\t\t\t\t\tminElement = upper;\n\t\t\t\t\tminElementNext = upperNext;\n\t\t\t\t}\n\n\t\t\t\tupper = upperNext;\n\t\t\t\tupdateSize( that, upper );\n\t\t\t}\n\n\n\t\t\t// 3.4.\n\t\t\tif ( !minElement || !minElementNext ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\tif ( !checkMouseBetweenElements( that, minElement, minElementNext ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// An element of minimal distance has been found. Assign it to the trigger.\n\t\t\ttrigger.upper = minElement;\n\t\t\ttrigger.lower = minElementNext;\n\n\t\t\t// Success: post-processing revealed a pair of elements.\n\t\t\treturn trigger.set( EDGE_MIDDLE, TYPE_EXPAND );\n\t\t}\n\n\t\t// This is default element selector used by the engine.\n\t\tfunction expandSelector( that, node ) {\n\t\t\treturn !( isTextNode( node ) ||\n\t\t\t\tisComment( node ) ||\n\t\t\t\tisFlowBreaker( node ) ||\n\t\t\t\tisLine( that, node ) ||\n\t\t\t\t( node.type == CKEDITOR.NODE_ELEMENT && node.$ && node.is( 'br' ) ) );\n\t\t}\n\n\t\t// This method checks whether mouse-y is between the top edge of upper\n\t\t// and bottom edge of lower.\n\t\t//\n\t\t// NOTE: This method assumes that updateSize has already been called\n\t\t// for the elements and is up-to-date.\n\t\t//\n\t\t//\t+---------------------------- Upper -+ /--\n\t\t//\t| | |\n\t\t//\t+------------------------------------+ |\n\t\t// |\n\t\t// ... |\n\t\t// |\n\t\t//\t\t\t\t\t\tX |\t* Return true for mouse-y in this range *\n\t\t// |\n\t\t// ... |\n\t\t// |\n\t\t//\t+---------------------------- Lower -+ |\n\t\t//\t| | |\n\t\t//\t+------------------------------------+ \\--\n\t\t//\n\t\tfunction checkMouseBetweenElements( that, upper, lower ) {\n\t\t\treturn inBetween( that.mouse.y, upper.size.top, lower.size.bottom );\n\t\t}\n\n\t\t// A method for trigger filtering. Accepts or rejects trigger pairs\n\t\t// by their location in DOM etc.\n\t\tfunction expandFilter( that, trigger ) {\n\n\t\t\tvar upper = trigger.upper,\n\t\t\t\tlower = trigger.lower;\n\n\t\t\tif (\n\t\t\t\t!upper || !lower ||\t\t\t\t\t\t\t\t\t\t\t// NOT: EDGE_MIDDLE trigger ALWAYS has two elements.\n\t\t\t\tisFlowBreaker( lower ) || isFlowBreaker( upper ) ||\t\t\t// NOT: one of the elements is floated or positioned\n\t\t\t\tlower.equals( upper ) || upper.equals( lower ) ||\t\t\t// NOT: two trigger elements, one equals another.\n\t\t\t\tlower.contains( upper ) || upper.contains( lower )\n\t\t\t) {\t// NOT: two trigger elements, one contains another.\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// YES: two trigger elements, pure siblings.\n\t\t\telse if ( isTrigger( that, upper ) && isTrigger( that, lower ) && areSiblings( that, upper, lower ) ) {\n\n\t\t\t\treturn true;\n\t\t\t}\n\n\n\t\t\treturn false;\n\t\t}\n\n\t\t// Simple wrapper for expandEngine and expandFilter.\n\t\treturn function( that ) {\n\n\t\t\tvar trigger = expandEngine( that );\n\n\t\t\treturn trigger && expandFilter( that, trigger ) ? trigger : null;\n\t\t};\n\t} )();\n\n\t// Collects dimensions of an element.\n\tvar sizePrefixes = [ 'top', 'left', 'right', 'bottom' ];\n\n\tfunction getSize( that, element, ignoreScroll, force ) {\n\t\tvar docPosition = element.getDocumentPosition(),\n\t\t\tborder = {},\n\t\t\tmargin = {},\n\t\t\tpadding = {},\n\t\t\tbox = {};\n\n\t\tfor ( var i = sizePrefixes.length; i--; ) {\n\t\t\tborder[ sizePrefixes[ i ] ] = parseInt( getStyle( 'border-' + sizePrefixes[ i ] + '-width' ), 10 ) || 0;\n\t\t\tpadding[ sizePrefixes[ i ] ] = parseInt( getStyle( 'padding-' + sizePrefixes[ i ] ), 10 ) || 0;\n\t\t\tmargin[ sizePrefixes[ i ] ] = parseInt( getStyle( 'margin-' + sizePrefixes[ i ] ), 10 ) || 0;\n\t\t}\n\n\t\t// updateWindowSize if forced to do so OR NOT ignoring scroll.\n\t\tif ( !ignoreScroll || force )\n\t\t\tupdateWindowSize( that, force );\n\n\t\tbox.top = docPosition.y - ( ignoreScroll ? 0 : that.view.scroll.y ), box.left = docPosition.x - ( ignoreScroll ? 0 : that.view.scroll.x ),\n\n\t\t// w/ borders and paddings.\n\t\tbox.outerWidth = element.$.offsetWidth, box.outerHeight = element.$.offsetHeight,\n\n\t\t// w/o borders and paddings.\n\t\tbox.height = box.outerHeight - ( padding.top + padding.bottom + border.top + border.bottom ), box.width = box.outerWidth - ( padding.left + padding.right + border.left + border.right ),\n\n\t\tbox.bottom = box.top + box.outerHeight, box.right = box.left + box.outerWidth;\n\n\t\tif ( that.inInlineMode ) {\n\t\t\tbox.scroll = {\n\t\t\t\ttop: element.$.scrollTop,\n\t\t\t\tleft: element.$.scrollLeft\n\t\t\t};\n\t\t}\n\n\t\treturn extend( {\n\t\t\tborder: border,\n\t\t\tpadding: padding,\n\t\t\tmargin: margin,\n\t\t\tignoreScroll: ignoreScroll\n\t\t}, box, true );\n\n\t\tfunction getStyle( propertyName ) {\n\t\t\treturn element.getComputedStyle.call( element, propertyName );\n\t\t}\n\t}\n\n\tfunction updateSize( that, element, ignoreScroll ) {\n\t\tif ( !isHtml( element ) ) // i.e. an element is hidden\n\t\t\treturn ( element.size = null ); //\t-> reset size to make it useless for other methods\n\n\t\tif ( !element.size )\n\t\t\telement.size = {};\n\n\t\t// Abort if there was a similar query performed recently.\n\t\t// This kind of caching provides great performance improvement.\n\t\telse if ( element.size.ignoreScroll == ignoreScroll && element.size.date > new Date() - CACHE_TIME ) {\n\t\t\treturn null;\n\t\t}\n\n\n\t\treturn extend( element.size, getSize( that, element, ignoreScroll ), {\n\t\t\tdate: +new Date()\n\t\t}, true );\n\t}\n\n\t// Updates that.view.editable object.\n\t// This one must be called separately outside of updateWindowSize\n\t// to prevent cyclic dependency getSize<->updateWindowSize.\n\t// It calls getSize with force flag to avoid getWindowSize cache (look: getSize).\n\tfunction updateEditableSize( that, ignoreScroll ) {\n\t\tthat.view.editable = getSize( that, that.editable, ignoreScroll, true );\n\t}\n\n\tfunction updateWindowSize( that, force ) {\n\t\tif ( !that.view )\n\t\t\tthat.view = {};\n\n\t\tvar view = that.view;\n\n\t\tif ( !force && view && view.date > new Date() - CACHE_TIME ) {\n\t\t\treturn;\n\t\t}\n\n\n\t\tvar win = that.win,\n\t\t\tscroll = win.getScrollPosition(),\n\t\t\tpaneSize = win.getViewPaneSize();\n\n\t\textend( that.view, {\n\t\t\tscroll: {\n\t\t\t\tx: scroll.x,\n\t\t\t\ty: scroll.y,\n\t\t\t\twidth: that.doc.$.documentElement.scrollWidth - paneSize.width,\n\t\t\t\theight: that.doc.$.documentElement.scrollHeight - paneSize.height\n\t\t\t},\n\t\t\tpane: {\n\t\t\t\twidth: paneSize.width,\n\t\t\t\theight: paneSize.height,\n\t\t\t\tbottom: paneSize.height + scroll.y\n\t\t\t},\n\t\t\tdate: +new Date()\n\t\t}, true );\n\t}\n\n\t// This method searches document vertically using given\n\t// select criterion until stop criterion is fulfilled.\n\tfunction verticalSearch( that, stopCondition, selectCriterion, startElement ) {\n\t\tvar upper = startElement,\n\t\t\tlower = startElement,\n\t\t\tmouseStep = 0,\n\t\t\tupperFound = false,\n\t\t\tlowerFound = false,\n\t\t\tviewPaneHeight = that.view.pane.height,\n\t\t\tmouse = that.mouse;\n\n\t\twhile ( mouse.y + mouseStep < viewPaneHeight && mouse.y - mouseStep > 0 ) {\n\t\t\tif ( !upperFound )\n\t\t\t\tupperFound = stopCondition( upper, startElement );\n\n\t\t\tif ( !lowerFound )\n\t\t\t\tlowerFound = stopCondition( lower, startElement );\n\n\t\t\t// Still not found...\n\t\t\tif ( !upperFound && mouse.y - mouseStep > 0 )\n\t\t\t\tupper = selectCriterion( that, { x: mouse.x, y: mouse.y - mouseStep } );\n\n\t\t\tif ( !lowerFound && mouse.y + mouseStep < viewPaneHeight )\n\t\t\t\tlower = selectCriterion( that, { x: mouse.x, y: mouse.y + mouseStep } );\n\n\t\t\tif ( upperFound && lowerFound )\n\t\t\t\tbreak;\n\n\t\t\t// Instead of ++ to reduce the number of invocations by half.\n\t\t\t// It's trades off accuracy in some edge cases for improved performance.\n\t\t\tmouseStep += 2;\n\t\t}\n\n\t\treturn new boxTrigger( [ upper, lower, null, null ] );\n\t}\n\n} )();\n\n/**\n * Sets the default vertical distance between the edge of the element and the mouse pointer that\n * causes the magic line to appear. This option accepts a value in pixels, without the unit (for example:\n * `15` for 15 pixels).\n *\n * Read more in the [documentation](#!/guide/dev_magicline)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html).\n *\n *\t\t// Changes the offset to 15px.\n *\t\tCKEDITOR.config.magicline_triggerOffset = 15;\n *\n * @cfg {Number} [magicline_triggerOffset=30]\n * @member CKEDITOR.config\n * @see CKEDITOR.config#magicline_holdDistance\n */\n\n/**\n * Defines the distance between the mouse pointer and the box within\n * which the magic line stays revealed and no other focus space is offered to be accessed.\n * This value is relative to {@link #magicline_triggerOffset}.\n *\n * Read more in the [documentation](#!/guide/dev_magicline)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html).\n *\n *\t\t// Increases the distance to 80% of CKEDITOR.config.magicline_triggerOffset.\n *\t\tCKEDITOR.config.magicline_holdDistance = .8;\n *\n * @cfg {Number} [magicline_holdDistance=0.5]\n * @member CKEDITOR.config\n * @see CKEDITOR.config#magicline_triggerOffset\n */\n\n/**\n * Defines the default keystroke that accesses the closest unreachable focus space **before**\n * the caret (start of the selection). If there is no focus space available, the selection remains unchanged.\n *\n * Read more in the [documentation](#!/guide/dev_magicline)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html).\n *\n *\t\t// Changes the default keystroke to \"Ctrl + ,\".\n *\t\tCKEDITOR.config.magicline_keystrokePrevious = CKEDITOR.CTRL + 188;\n *\n * @cfg {Number} [magicline_keystrokePrevious=CKEDITOR.CTRL + CKEDITOR.SHIFT + 51 (CTRL + SHIFT + 3)]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.magicline_keystrokePrevious = CKEDITOR.CTRL + CKEDITOR.SHIFT + 51; // CTRL + SHIFT + 3\n\n/**\n * Defines the default keystroke that accesses the closest unreachable focus space **after**\n * the caret (start of the selection). If there is no focus space available, the selection remains unchanged.\n *\n * Read more in the [documentation](#!/guide/dev_magicline)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html).\n *\n *\t\t// Changes keystroke to \"Ctrl + .\".\n *\t\tCKEDITOR.config.magicline_keystrokeNext = CKEDITOR.CTRL + 190;\n *\n * @cfg {Number} [magicline_keystrokeNext=CKEDITOR.CTRL + CKEDITOR.SHIFT + 52 (CTRL + SHIFT + 4)]\n * @member CKEDITOR.config\n */\nCKEDITOR.config.magicline_keystrokeNext = CKEDITOR.CTRL + CKEDITOR.SHIFT + 52; // CTRL + SHIFT + 4\n\n/**\n * Defines a list of attributes that, if assigned to some elements, prevent the magic line from being\n * used within these elements.\n *\n * Read more in the [documentation](#!/guide/dev_magicline)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html).\n *\n *\t\t// Adds the \"data-tabu\" attribute to the magic line tabu list.\n *\t\tCKEDITOR.config.magicline_tabuList = [ 'data-tabu' ];\n *\n * @cfg {Number} [magicline_tabuList=[ 'data-widget-wrapper' ]]\n * @member CKEDITOR.config\n */\n\n/**\n * Defines the color of the magic line. The color may be adjusted to enhance readability.\n *\n * Read more in the [documentation](#!/guide/dev_magicline)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html).\n *\n *\t\t// Changes magic line color to blue.\n *\t\tCKEDITOR.config.magicline_color = '#0000FF';\n *\n * @cfg {String} [magicline_color='#FF0000']\n * @member CKEDITOR.config\n */\n\n/**\n * Activates the special all-encompassing mode that considers all focus spaces between\n * {@link CKEDITOR.dtd#$block} elements as accessible by the magic line.\n *\n * Read more in the [documentation](#!/guide/dev_magicline)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/magicline.html).\n *\n *\t\t// Enables the greedy \"put everywhere\" mode.\n *\t\tCKEDITOR.config.magicline_everywhere = true;\n *\n * @cfg {Boolean} [magicline_everywhere=false]\n * @member CKEDITOR.config\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n( function() {\n\tfunction protectFormStyles( formElement ) {\n\t\tif ( !formElement || formElement.type != CKEDITOR.NODE_ELEMENT || formElement.getName() != 'form' )\n\t\t\treturn [];\n\n\t\tvar hijackRecord = [],\n\t\t\thijackNames = [ 'style', 'className' ];\n\t\tfor ( var i = 0; i < hijackNames.length; i++ ) {\n\t\t\tvar name = hijackNames[ i ];\n\t\t\tvar $node = formElement.$.elements.namedItem( name );\n\t\t\tif ( $node ) {\n\t\t\t\tvar hijackNode = new CKEDITOR.dom.element( $node );\n\t\t\t\thijackRecord.push( [ hijackNode, hijackNode.nextSibling ] );\n\t\t\t\thijackNode.remove();\n\t\t\t}\n\t\t}\n\n\t\treturn hijackRecord;\n\t}\n\n\tfunction restoreFormStyles( formElement, hijackRecord ) {\n\t\tif ( !formElement || formElement.type != CKEDITOR.NODE_ELEMENT || formElement.getName() != 'form' )\n\t\t\treturn;\n\n\t\tif ( hijackRecord.length > 0 ) {\n\t\t\tfor ( var i = hijackRecord.length - 1; i >= 0; i-- ) {\n\t\t\t\tvar node = hijackRecord[ i ][ 0 ];\n\t\t\t\tvar sibling = hijackRecord[ i ][ 1 ];\n\t\t\t\tif ( sibling )\n\t\t\t\t\tnode.insertBefore( sibling );\n\t\t\t\telse\n\t\t\t\t\tnode.appendTo( formElement );\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction saveStyles( element, isInsideEditor ) {\n\t\tvar data = protectFormStyles( element );\n\t\tvar retval = {};\n\n\t\tvar $element = element.$;\n\n\t\tif ( !isInsideEditor ) {\n\t\t\tretval[ 'class' ] = $element.className || '';\n\t\t\t$element.className = '';\n\t\t}\n\n\t\tretval.inline = $element.style.cssText || '';\n\t\tif ( !isInsideEditor ) // Reset any external styles that might interfere. (http://dev.ckeditor.com/ticket/2474)\n\t\t$element.style.cssText = 'position: static; overflow: visible';\n\n\t\trestoreFormStyles( data );\n\t\treturn retval;\n\t}\n\n\tfunction restoreStyles( element, savedStyles ) {\n\t\tvar data = protectFormStyles( element );\n\t\tvar $element = element.$;\n\t\tif ( 'class' in savedStyles )\n\t\t\t$element.className = savedStyles[ 'class' ];\n\t\tif ( 'inline' in savedStyles )\n\t\t\t$element.style.cssText = savedStyles.inline;\n\t\trestoreFormStyles( data );\n\t}\n\n\tfunction refreshCursor( editor ) {\n\t\tif ( editor.editable().isInline() )\n\t\t\treturn;\n\n\t\t// Refresh all editor instances on the page (http://dev.ckeditor.com/ticket/5724).\n\t\tvar all = CKEDITOR.instances;\n\t\tfor ( var i in all ) {\n\t\t\tvar one = all[ i ];\n\t\t\tif ( one.mode == 'wysiwyg' && !one.readOnly ) {\n\t\t\t\tvar body = one.document.getBody();\n\t\t\t\t// Refresh 'contentEditable' otherwise\n\t\t\t\t// DOM lifting breaks design mode. (http://dev.ckeditor.com/ticket/5560)\n\t\t\t\tbody.setAttribute( 'contentEditable', false );\n\t\t\t\tbody.setAttribute( 'contentEditable', true );\n\t\t\t}\n\t\t}\n\n\t\tif ( editor.editable().hasFocus ) {\n\t\t\teditor.toolbox.focus();\n\t\t\teditor.focus();\n\t\t}\n\t}\n\n\tCKEDITOR.plugins.add( 'maximize', {\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\t\tinit: function( editor ) {\n\t\t\t// Maximize plugin isn't available in inline mode yet.\n\t\t\tif ( editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE )\n\t\t\t\treturn;\n\n\t\t\tvar lang = editor.lang;\n\t\t\tvar mainDocument = CKEDITOR.document,\n\t\t\t\tmainWindow = mainDocument.getWindow();\n\n\t\t\t// Saved selection and scroll position for the editing area.\n\t\t\tvar savedSelection, savedScroll;\n\n\t\t\t// Saved scroll position for the outer window.\n\t\t\tvar outerScroll;\n\n\t\t\t// Saved resize handler function.\n\t\t\tfunction resizeHandler() {\n\t\t\t\tvar viewPaneSize = mainWindow.getViewPaneSize();\n\t\t\t\teditor.resize( viewPaneSize.width, viewPaneSize.height, null, true );\n\t\t\t}\n\n\t\t\t// Retain state after mode switches.\n\t\t\tvar savedState = CKEDITOR.TRISTATE_OFF;\n\n\t\t\teditor.addCommand( 'maximize', {\n\t\t\t\t// Disabled on iOS (http://dev.ckeditor.com/ticket/8307).\n\t\t\t\tmodes: { wysiwyg: !CKEDITOR.env.iOS, source: !CKEDITOR.env.iOS },\n\t\t\t\treadOnly: 1,\n\t\t\t\teditorFocus: false,\n\t\t\t\texec: function() {\n\t\t\t\t\tvar container = editor.container.getFirst( function( node ) {\n\t\t\t\t\t\treturn node.type == CKEDITOR.NODE_ELEMENT && node.hasClass( 'cke_inner' );\n\t\t\t\t\t} );\n\t\t\t\t\tvar contents = editor.ui.space( 'contents' );\n\n\t\t\t\t\t// Save current selection and scroll position in editing area.\n\t\t\t\t\tif ( editor.mode == 'wysiwyg' ) {\n\t\t\t\t\t\tvar selection = editor.getSelection();\n\t\t\t\t\t\tsavedSelection = selection && selection.getRanges();\n\t\t\t\t\t\tsavedScroll = mainWindow.getScrollPosition();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar $textarea = editor.editable().$;\n\t\t\t\t\t\tsavedSelection = !CKEDITOR.env.ie && [ $textarea.selectionStart, $textarea.selectionEnd ];\n\t\t\t\t\t\tsavedScroll = [ $textarea.scrollLeft, $textarea.scrollTop ];\n\t\t\t\t\t}\n\n\t\t\t\t\t// Go fullscreen if the state is off.\n\t\t\t\t\tif ( this.state == CKEDITOR.TRISTATE_OFF ) {\n\t\t\t\t\t\t// Add event handler for resizing.\n\t\t\t\t\t\tmainWindow.on( 'resize', resizeHandler );\n\n\t\t\t\t\t\t// Save the scroll bar position.\n\t\t\t\t\t\touterScroll = mainWindow.getScrollPosition();\n\n\t\t\t\t\t\t// Save and reset the styles for the entire node tree.\n\t\t\t\t\t\tvar currentNode = editor.container;\n\t\t\t\t\t\twhile ( ( currentNode = currentNode.getParent() ) ) {\n\t\t\t\t\t\t\tcurrentNode.setCustomData( 'maximize_saved_styles', saveStyles( currentNode ) );\n\t\t\t\t\t\t\t// Show under floatpanels (-1) and context menu (-2).\n\t\t\t\t\t\t\tcurrentNode.setStyle( 'z-index', editor.config.baseFloatZIndex - 5 );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontents.setCustomData( 'maximize_saved_styles', saveStyles( contents, true ) );\n\t\t\t\t\t\tcontainer.setCustomData( 'maximize_saved_styles', saveStyles( container, true ) );\n\n\t\t\t\t\t\t// Hide scroll bars.\n\t\t\t\t\t\tvar styles = {\n\t\t\t\t\t\t\toverflow: CKEDITOR.env.webkit ? '' : 'hidden', // http://dev.ckeditor.com/ticket/6896\n\t\t\t\t\t\t\twidth: 0,\n\t\t\t\t\t\t\theight: 0\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tmainDocument.getDocumentElement().setStyles( styles );\n\t\t\t\t\t\t!CKEDITOR.env.gecko && mainDocument.getDocumentElement().setStyle( 'position', 'fixed' );\n\t\t\t\t\t\t!( CKEDITOR.env.gecko && CKEDITOR.env.quirks ) && mainDocument.getBody().setStyles( styles );\n\n\t\t\t\t\t\t// Scroll to the top left (IE needs some time for it - http://dev.ckeditor.com/ticket/4923).\n\t\t\t\t\t\tCKEDITOR.env.ie ? setTimeout( function() {\n\t\t\t\t\t\t\tmainWindow.$.scrollTo( 0, 0 );\n\t\t\t\t\t\t}, 0 ) : mainWindow.$.scrollTo( 0, 0 );\n\n\t\t\t\t\t\t// Resize and move to top left.\n\t\t\t\t\t\t// Special treatment for FF Quirks (http://dev.ckeditor.com/ticket/7284)\n\t\t\t\t\t\tcontainer.setStyle( 'position', CKEDITOR.env.gecko && CKEDITOR.env.quirks ? 'fixed' : 'absolute' );\n\t\t\t\t\t\tcontainer.$.offsetLeft; // SAFARI BUG: See http://dev.ckeditor.com/ticket/2066.\n\t\t\t\t\t\tcontainer.setStyles( {\n\t\t\t\t\t\t\t// Show under floatpanels (-1) and context menu (-2).\n\t\t\t\t\t\t\t'z-index': editor.config.baseFloatZIndex - 5,\n\t\t\t\t\t\t\tleft: '0px',\n\t\t\t\t\t\t\ttop: '0px'\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t// Add cke_maximized class before resize handle since that will change things sizes (http://dev.ckeditor.com/ticket/5580)\n\t\t\t\t\t\tcontainer.addClass( 'cke_maximized' );\n\n\t\t\t\t\t\tresizeHandler();\n\n\t\t\t\t\t\t// Still not top left? Fix it. (Bug http://dev.ckeditor.com/ticket/174)\n\t\t\t\t\t\tvar offset = container.getDocumentPosition();\n\t\t\t\t\t\tcontainer.setStyles( {\n\t\t\t\t\t\t\tleft: ( -1 * offset.x ) + 'px',\n\t\t\t\t\t\t\ttop: ( -1 * offset.y ) + 'px'\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t// Fixing positioning editor chrome in Firefox break design mode. (http://dev.ckeditor.com/ticket/5149)\n\t\t\t\t\t\tCKEDITOR.env.gecko && refreshCursor( editor );\n\t\t\t\t\t}\n\t\t\t\t\t// Restore from fullscreen if the state is on.\n\t\t\t\t\telse if ( this.state == CKEDITOR.TRISTATE_ON ) {\n\t\t\t\t\t\t// Remove event handler for resizing.\n\t\t\t\t\t\tmainWindow.removeListener( 'resize', resizeHandler );\n\n\t\t\t\t\t\t// Restore CSS styles for the entire node tree.\n\t\t\t\t\t\tvar editorElements = [ contents, container ];\n\t\t\t\t\t\tfor ( var i = 0; i < editorElements.length; i++ ) {\n\t\t\t\t\t\t\trestoreStyles( editorElements[ i ], editorElements[ i ].getCustomData( 'maximize_saved_styles' ) );\n\t\t\t\t\t\t\teditorElements[ i ].removeCustomData( 'maximize_saved_styles' );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcurrentNode = editor.container;\n\t\t\t\t\t\twhile ( ( currentNode = currentNode.getParent() ) ) {\n\t\t\t\t\t\t\trestoreStyles( currentNode, currentNode.getCustomData( 'maximize_saved_styles' ) );\n\t\t\t\t\t\t\tcurrentNode.removeCustomData( 'maximize_saved_styles' );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Restore the window scroll position.\n\t\t\t\t\t\tCKEDITOR.env.ie ? setTimeout( function() {\n\t\t\t\t\t\t\tmainWindow.$.scrollTo( outerScroll.x, outerScroll.y );\n\t\t\t\t\t\t}, 0 ) : mainWindow.$.scrollTo( outerScroll.x, outerScroll.y );\n\n\t\t\t\t\t\t// Remove cke_maximized class.\n\t\t\t\t\t\tcontainer.removeClass( 'cke_maximized' );\n\n\t\t\t\t\t\t// Webkit requires a re-layout on editor chrome. (http://dev.ckeditor.com/ticket/6695)\n\t\t\t\t\t\tif ( CKEDITOR.env.webkit ) {\n\t\t\t\t\t\t\tcontainer.setStyle( 'display', 'inline' );\n\t\t\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\t\t\tcontainer.setStyle( 'display', 'block' );\n\t\t\t\t\t\t\t}, 0 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Emit a resize event, because this time the size is modified in\n\t\t\t\t\t\t// restoreStyles.\n\t\t\t\t\t\teditor.fire( 'resize', {\n\t\t\t\t\t\t\touterHeight: editor.container.$.offsetHeight,\n\t\t\t\t\t\t\tcontentsHeight: contents.$.offsetHeight,\n\t\t\t\t\t\t\touterWidth: editor.container.$.offsetWidth\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.toggleState();\n\n\t\t\t\t\t// Toggle button label.\n\t\t\t\t\tvar button = this.uiItems[ 0 ];\n\t\t\t\t\t// Only try to change the button if it exists (http://dev.ckeditor.com/ticket/6166)\n\t\t\t\t\tif ( button ) {\n\t\t\t\t\t\tvar label = ( this.state == CKEDITOR.TRISTATE_OFF ) ? lang.maximize.maximize : lang.maximize.minimize;\n\t\t\t\t\t\tvar buttonNode = CKEDITOR.document.getById( button._.id );\n\t\t\t\t\t\tbuttonNode.getChild( 1 ).setHtml( label );\n\t\t\t\t\t\tbuttonNode.setAttribute( 'title', label );\n\t\t\t\t\t\tbuttonNode.setAttribute( 'href', 'javascript:void(\"' + label + '\");' ); // jshint ignore:line\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore selection and scroll position in editing area.\n\t\t\t\t\tif ( editor.mode == 'wysiwyg' ) {\n\t\t\t\t\t\tif ( savedSelection ) {\n\t\t\t\t\t\t\t// Fixing positioning editor chrome in Firefox break design mode. (http://dev.ckeditor.com/ticket/5149)\n\t\t\t\t\t\t\tCKEDITOR.env.gecko && refreshCursor( editor );\n\n\t\t\t\t\t\t\teditor.getSelection().selectRanges( savedSelection );\n\t\t\t\t\t\t\tvar element = editor.getSelection().getStartElement();\n\t\t\t\t\t\t\telement && element.scrollIntoView( true );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tmainWindow.$.scrollTo( savedScroll.x, savedScroll.y );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( savedSelection ) {\n\t\t\t\t\t\t\t$textarea.selectionStart = savedSelection[ 0 ];\n\t\t\t\t\t\t\t$textarea.selectionEnd = savedSelection[ 1 ];\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$textarea.scrollLeft = savedScroll[ 0 ];\n\t\t\t\t\t\t$textarea.scrollTop = savedScroll[ 1 ];\n\t\t\t\t\t}\n\n\t\t\t\t\tsavedSelection = savedScroll = null;\n\t\t\t\t\tsavedState = this.state;\n\n\t\t\t\t\teditor.fire( 'maximize', this.state );\n\t\t\t\t},\n\t\t\t\tcanUndo: false\n\t\t\t} );\n\n\t\t\teditor.ui.addButton && editor.ui.addButton( 'Maximize', {\n\t\t\t\tlabel: lang.maximize.maximize,\n\t\t\t\tcommand: 'maximize',\n\t\t\t\ttoolbar: 'tools,10'\n\t\t\t} );\n\n\t\t\t// Restore the command state after mode change, unless it has been changed to disabled (http://dev.ckeditor.com/ticket/6467)\n\t\t\teditor.on( 'mode', function() {\n\t\t\t\tvar command = editor.getCommand( 'maximize' );\n\t\t\t\tcommand.setState( command.state == CKEDITOR.TRISTATE_DISABLED ? CKEDITOR.TRISTATE_DISABLED : savedState );\n\t\t\t}, null, null, 100 );\n\t\t}\n\t} );\n} )();\n\n/**\n * Event fired when the maximize command is called.\n * It also indicates whether an editor is maximized or not.\n *\n * @event maximize\n * @member CKEDITOR.editor\n * @param {CKEDITOR.editor} editor This editor instance.\n * @param {Number} data Current state of the command. See {@link CKEDITOR#TRISTATE_ON} and {@link CKEDITOR#TRISTATE_OFF}.\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n( function() {\n\t/* global confirm */\n\n\tCKEDITOR.plugins.add( 'pastefromword', {\n\t\trequires: 'clipboard',\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\t\tinit: function( editor ) {\n\t\t\t// Flag indicate this command is actually been asked instead of a generic pasting.\n\t\t\tvar forceFromWord = 0,\n\t\t\t\tpath = this.path;\n\n\t\t\teditor.addCommand( 'pastefromword', {\n\t\t\t\t// Snapshots are done manually by editable.insertXXX methods.\n\t\t\t\tcanUndo: false,\n\t\t\t\tasync: true,\n\n\t\t\t\t/**\n\t\t\t\t * The Paste from Word command. It will determine its pasted content from Word automatically if possible.\n\t\t\t\t *\n\t\t\t\t * At the time of writing it was working correctly only in Internet Explorer browsers, due to their\n\t\t\t\t * `paste` support in `document.execCommand`.\n\t\t\t\t *\n\t\t\t\t * @private\n\t\t\t\t * @param {CKEDITOR.editor} editor An instance of the editor where the command is being executed.\n\t\t\t\t * @param {Object} [data] The options object.\n\t\t\t\t * @param {Boolean/String} [data.notification=true] Content for a notification shown after an unsuccessful\n\t\t\t\t * paste attempt. If `false`, the notification will not be displayed. This parameter was added in 4.7.0.\n\t\t\t\t * @member CKEDITOR.editor.commands.pastefromword\n\t\t\t\t */\n\t\t\t\texec: function( editor, data ) {\n\t\t\t\t\tforceFromWord = 1;\n\t\t\t\t\teditor.execCommand( 'paste', {\n\t\t\t\t\t\ttype: 'html',\n\t\t\t\t\t\tnotification: data && typeof data.notification !== 'undefined' ? data.notification : true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Register the toolbar button.\n\t\t\teditor.ui.addButton && editor.ui.addButton( 'PasteFromWord', {\n\t\t\t\tlabel: editor.lang.pastefromword.toolbar,\n\t\t\t\tcommand: 'pastefromword',\n\t\t\t\ttoolbar: 'clipboard,50'\n\t\t\t} );\n\n\t\t\t// Features brought by this command beside the normal process:\n\t\t\t// 1. No more bothering of user about the clean-up.\n\t\t\t// 2. Perform the clean-up even if content is not from Microsoft Word.\n\t\t\t// (e.g. from a Microsoft Word similar application.)\n\t\t\t// 3. Listen with high priority (3), so clean up is done before content\n\t\t\t// type sniffing (priority = 6).\n\t\t\teditor.on( 'paste', function( evt ) {\n\t\t\t\tvar data = evt.data,\n\t\t\t\t\tdataTransferHtml = CKEDITOR.plugins.clipboard.isCustomDataTypesSupported ?\n\t\t\t\t\t\tdata.dataTransfer.getData( 'text/html', true ) : null,\n\t\t\t\t\t// Some commands fire paste event without setting dataTransfer property. In such case\n\t\t\t\t\t// dataValue should be used.\n\t\t\t\t\tmswordHtml = dataTransferHtml || data.dataValue,\n\t\t\t\t\tpfwEvtData = { dataValue: mswordHtml },\n\t\t\t\t\tofficeMetaRegexp = /|<\\/font>)/,\n\t\t\t\t\tisOfficeContent = officeMetaRegexp.test( mswordHtml ) || wordRegexp.test( mswordHtml );\n\n\t\t\t\tif ( !mswordHtml || !( forceFromWord || isOfficeContent ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// PFW might still get prevented, if it's not forced.\n\t\t\t\tif ( editor.fire( 'pasteFromWord', pfwEvtData ) === false && !forceFromWord ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Do not apply paste filter to data filtered by the Word filter (http://dev.ckeditor.com/ticket/13093).\n\t\t\t\tdata.dontFilter = true;\n\n\t\t\t\t// If filter rules aren't loaded then cancel 'paste' event,\n\t\t\t\t// load them and when they'll get loaded fire new paste event\n\t\t\t\t// for which data will be filtered in second execution of\n\t\t\t\t// this listener.\n\t\t\t\tvar isLazyLoad = loadFilterRules( editor, path, function() {\n\t\t\t\t\t// Event continuation with the original data.\n\t\t\t\t\tif ( isLazyLoad ) {\n\t\t\t\t\t\teditor.fire( 'paste', data );\n\t\t\t\t\t} else if ( !editor.config.pasteFromWordPromptCleanup || ( forceFromWord || confirm( editor.lang.pastefromword.confirmCleanup ) ) ) {\n\t\t\t\t\t\tpfwEvtData.dataValue = CKEDITOR.cleanWord( pfwEvtData.dataValue, editor );\n\n\t\t\t\t\t\teditor.fire( 'afterPasteFromWord', pfwEvtData );\n\n\t\t\t\t\t\tdata.dataValue = pfwEvtData.dataValue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset forceFromWord.\n\t\t\t\t\tforceFromWord = 0;\n\t\t\t\t} );\n\n\t\t\t\t// The cleanup rules are to be loaded, we should just cancel\n\t\t\t\t// this event.\n\t\t\t\tisLazyLoad && evt.cancel();\n\t\t\t}, null, null, 3 );\n\t\t}\n\n\t} );\n\n\tfunction loadFilterRules( editor, path, callback ) {\n\t\tvar isLoaded = CKEDITOR.cleanWord;\n\n\t\tif ( isLoaded )\n\t\t\tcallback();\n\t\telse {\n\t\t\tvar filterFilePath = CKEDITOR.getUrl( editor.config.pasteFromWordCleanupFile || ( path + 'filter/default.js' ) );\n\n\t\t\t// Load with busy indicator.\n\t\t\tCKEDITOR.scriptLoader.load( filterFilePath, callback, null, true );\n\t\t}\n\n\t\treturn !isLoaded;\n\t}\n} )();\n\n\n/**\n * Whether to prompt the user about the clean up of content being pasted from Microsoft Word.\n *\n *\t\tconfig.pasteFromWordPromptCleanup = true;\n *\n * @since 3.1\n * @cfg {Boolean} [pasteFromWordPromptCleanup=false]\n * @member CKEDITOR.config\n */\n\n/**\n * The file that provides the Microsoft Word cleanup function for pasting operations.\n *\n * **Note:** This is a global configuration shared by all editor instances present\n * on the page.\n *\n *\t\t// Load from the 'pastefromword' plugin 'filter' sub folder (custom.js file) using a path relative to the CKEditor installation folder.\n *\t\tCKEDITOR.config.pasteFromWordCleanupFile = 'plugins/pastefromword/filter/custom.js';\n *\n *\t\t// Load from the 'pastefromword' plugin 'filter' sub folder (custom.js file) using a full path (including the CKEditor installation folder).\n *\t\tCKEDITOR.config.pasteFromWordCleanupFile = '/ckeditor/plugins/pastefromword/filter/custom.js';\n *\n *\t\t// Load custom.js file from the 'customFilters' folder (located in server's root) using the full URL.\n *\t\tCKEDITOR.config.pasteFromWordCleanupFile = 'http://my.example.com/customFilters/custom.js';\n *\n * @since 3.1\n * @cfg {String} [pasteFromWordCleanupFile= + 'filter/default.js']\n * @member CKEDITOR.config\n */\n\n/**\n * Fired when the pasted content was recognized as Microsoft Word content.\n *\n * This event is cancellable. If canceled, it will prevent Paste from Word processing.\n *\n * @since 4.6.0\n * @event pasteFromWord\n * @param data\n * @param {String} data.dataValue Pasted content. Changes to this property will affect the pasted content.\n * @member CKEDITOR.editor\n */\n\n/**\n * Fired after the Paste form Word filters have been applied.\n *\n * @since 4.6.0\n * @event afterPasteFromWord\n * @param data\n * @param {String} data.dataValue Pasted content after processing. Changes to this property will affect the pasted content.\n * @member CKEDITOR.editor\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview Paste as plain text plugin.\n */\n\n( function() {\n\t// The pastetext command definition.\n\tvar pasteTextCmd = {\n\t\t// Snapshots are done manually by editable.insertXXX methods.\n\t\tcanUndo: false,\n\t\tasync: true,\n\n\t\t/**\n\t\t * The Paste as plain text command. It will determine its pasted text automatically if possible.\n\t\t *\n\t\t * At the time of writing it was working correctly only in Internet Explorer browsers, due to their\n\t\t * `paste` support in `document.execCommand`.\n\t\t *\n\t\t * @private\n\t\t * @param {CKEDITOR.editor} editor An instance of the editor where the command is being executed.\n\t\t * @param {Object} [data] The options object.\n\t\t * @param {Boolean/String} [data.notification=true] Content for a notification shown after an unsuccessful\n\t\t * paste attempt. If `false`, the notification will not be displayed. This parameter was added in 4.7.0.\n\t\t * @member CKEDITOR.editor.commands.pastetext\n\t\t */\n\t\texec: function( editor, data ) {\n\t\t\tvar lang = editor.lang,\n\t\t\t\t// In IE we must display keystroke for `paste` command as blocked `pastetext`\n\t\t\t\t// can fallback only to native paste.\n\t\t\t\tkeyInfo = CKEDITOR.tools.keystrokeToString( lang.common.keyboard,\n\t\t\t\t\teditor.getCommandKeystroke( CKEDITOR.env.ie ? editor.commands.paste : this ) ),\n\t\t\t\tnotification = ( data && typeof data.notification !== 'undefined' ) ? data.notification :\n\t\t\t\t\t!data || !data.from || ( data.from === 'keystrokeHandler' && CKEDITOR.env.ie ),\n\t\t\t\tmsg = ( notification && typeof notification === 'string' ) ? notification : lang.pastetext.pasteNotification\n\t\t\t\t\t.replace( /%1/, '' + keyInfo.display + '' );\n\n\t\t\teditor.execCommand( 'paste', {\n\t\t\t\ttype: 'text',\n\t\t\t\tnotification: notification ? msg : false\n\t\t\t} );\n\t\t}\n\t};\n\n\t// Register the plugin.\n\tCKEDITOR.plugins.add( 'pastetext', {\n\t\trequires: 'clipboard',\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\t\tinit: function( editor ) {\n\t\t\tvar commandName = 'pastetext',\n\t\t\t\tpasteKeystroke = !CKEDITOR.env.safari ? CKEDITOR.CTRL + CKEDITOR.SHIFT + 86 : // Ctrl + Shift + V\n\t\t\t\t\tCKEDITOR.CTRL + CKEDITOR.ALT + CKEDITOR.SHIFT + 86; // Ctrl + Shift + Alt + V\n\n\t\t\teditor.addCommand( commandName, pasteTextCmd );\n\n\t\t\teditor.setKeystroke( pasteKeystroke, commandName );\n\n\t\t\teditor.ui.addButton && editor.ui.addButton( 'PasteText', {\n\t\t\t\tlabel: editor.lang.pastetext.button,\n\t\t\t\tcommand: commandName,\n\t\t\t\ttoolbar: 'clipboard,40'\n\t\t\t} );\n\n\t\t\tif ( editor.config.forcePasteAsPlainText ) {\n\t\t\t\teditor.on( 'beforePaste', function( evt ) {\n\t\t\t\t\t// Do NOT overwrite if HTML format is explicitly requested.\n\t\t\t\t\t// This allows pastefromword dominates over pastetext.\n\t\t\t\t\tif ( evt.data.type != 'html' )\n\t\t\t\t\t\tevt.data.type = 'text';\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\teditor.on( 'pasteState', function( evt ) {\n\t\t\t\teditor.getCommand( commandName ).setState( evt.data );\n\t\t\t} );\n\t\t}\n\t} );\n} )();\n\n\n/**\n * Whether to force all pasting operations to insert on plain text into the\n * editor, loosing any formatting information possibly available in the source\n * text.\n *\n * **Note:** paste from word (dialog) is not affected by this configuration.\n *\n *\t\tconfig.forcePasteAsPlainText = true;\n *\n * @cfg {Boolean} [forcePasteAsPlainText=false]\n * @member CKEDITOR.config\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.plugins.add( 'removeformat', {\n\t// jscs:disable maximumLineLength\n\t// jscs:enable maximumLineLength\n\tinit: function( editor ) {\n\t\teditor.addCommand( 'removeFormat', CKEDITOR.plugins.removeformat.commands.removeformat );\n\t\teditor.ui.addButton && editor.ui.addButton( 'RemoveFormat', {\n\t\t\tlabel: editor.lang.removeformat.toolbar,\n\t\t\tcommand: 'removeFormat',\n\t\t\ttoolbar: 'cleanup,10'\n\t\t} );\n\t}\n} );\n\nCKEDITOR.plugins.removeformat = {\n\tcommands: {\n\t\tremoveformat: {\n\t\t\texec: function( editor ) {\n\t\t\t\tvar tagsRegex = editor._.removeFormatRegex || ( editor._.removeFormatRegex = new RegExp( '^(?:' + editor.config.removeFormatTags.replace( /,/g, '|' ) + ')$', 'i' ) );\n\n\t\t\t\tvar removeAttributes = editor._.removeAttributes || ( editor._.removeAttributes = editor.config.removeFormatAttributes.split( ',' ) ),\n\t\t\t\t\tfilter = CKEDITOR.plugins.removeformat.filter,\n\t\t\t\t\tranges = editor.getSelection().getRanges(),\n\t\t\t\t\titerator = ranges.createIterator(),\n\t\t\t\t\tisElement = function( element ) {\n\t\t\t\t\t\treturn element.type == CKEDITOR.NODE_ELEMENT;\n\t\t\t\t\t},\n\t\t\t\t\trange;\n\n\t\t\t\twhile ( ( range = iterator.getNextRange() ) ) {\n\t\t\t\t\tif ( !range.collapsed )\n\t\t\t\t\t\trange.enlarge( CKEDITOR.ENLARGE_ELEMENT );\n\n\t\t\t\t\t// Bookmark the range so we can re-select it after processing.\n\t\t\t\t\tvar bookmark = range.createBookmark(),\n\t\t\t\t\t\t// The style will be applied within the bookmark boundaries.\n\t\t\t\t\t\tstartNode = bookmark.startNode,\n\t\t\t\t\t\tendNode = bookmark.endNode,\n\t\t\t\t\t\tcurrentNode;\n\n\t\t\t\t\t// We need to check the selection boundaries (bookmark spans) to break\n\t\t\t\t\t// the code in a way that we can properly remove partially selected nodes.\n\t\t\t\t\t// For example, removing a style from\n\t\t\t\t\t//\t\tThis is [some text to show the] problem\n\t\t\t\t\t// ... where [ and ] represent the selection, must result:\n\t\t\t\t\t//\t\tThis is [some text to show the] problem\n\t\t\t\t\t// The strategy is simple, we just break the partial nodes before the\n\t\t\t\t\t// removal logic, having something that could be represented this way:\n\t\t\t\t\t//\t\tThis is [some text to show the] problem\n\n\t\t\t\t\tvar breakParent = function( node ) {\n\t\t\t\t\t\t\t// Let's start checking the start boundary.\n\t\t\t\t\t\t\tvar path = editor.elementPath( node ),\n\t\t\t\t\t\t\t\tpathElements = path.elements;\n\n\t\t\t\t\t\t\tfor ( var i = 1, pathElement; pathElement = pathElements[ i ]; i++ ) {\n\t\t\t\t\t\t\t\tif ( pathElement.equals( path.block ) || pathElement.equals( path.blockLimit ) )\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\t// If this element can be removed (even partially).\n\t\t\t\t\t\t\t\tif ( tagsRegex.test( pathElement.getName() ) && filter( editor, pathElement ) )\n\t\t\t\t\t\t\t\t\tnode.breakParent( pathElement );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t};\n\n\t\t\t\t\tbreakParent( startNode );\n\t\t\t\t\tif ( endNode ) {\n\t\t\t\t\t\tbreakParent( endNode );\n\n\t\t\t\t\t\t// Navigate through all nodes between the bookmarks.\n\t\t\t\t\t\tcurrentNode = startNode.getNextSourceNode( true, CKEDITOR.NODE_ELEMENT );\n\n\t\t\t\t\t\twhile ( currentNode ) {\n\t\t\t\t\t\t\t// If we have reached the end of the selection, stop looping.\n\t\t\t\t\t\t\tif ( currentNode.equals( endNode ) )\n\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\tif ( currentNode.isReadOnly() ) {\n\t\t\t\t\t\t\t\t// In case of non-editable we're skipping to the next sibling *elmenet*.\n\n\t\t\t\t\t\t\t\t// We need to be aware that endNode can be nested within current non-editable.\n\t\t\t\t\t\t\t\t// This condition tests if currentNode (non-editable) contains endNode. If it does\n\t\t\t\t\t\t\t\t// then we should break the filtering\n\t\t\t\t\t\t\t\tif ( currentNode.getPosition( endNode ) & CKEDITOR.POSITION_CONTAINS ) {\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tcurrentNode = currentNode.getNext( isElement );\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// Cache the next node to be processed. Do it now, because\n\t\t\t\t\t\t\t// currentNode may be removed.\n\t\t\t\t\t\t\tvar nextNode = currentNode.getNextSourceNode( false, CKEDITOR.NODE_ELEMENT ),\n\t\t\t\t\t\t\t\tisFakeElement = currentNode.getName() == 'img' && currentNode.data( 'cke-realelement' );\n\n\t\t\t\t\t\t\t// This node must not be a fake element, and must not be read-only.\n\t\t\t\t\t\t\tif ( !isFakeElement && filter( editor, currentNode ) ) {\n\t\t\t\t\t\t\t\t// Remove elements nodes that match with this style rules.\n\t\t\t\t\t\t\t\tif ( tagsRegex.test( currentNode.getName() ) )\n\t\t\t\t\t\t\t\t\tcurrentNode.remove( 1 );\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tcurrentNode.removeAttributes( removeAttributes );\n\t\t\t\t\t\t\t\t\teditor.fire( 'removeFormatCleanup', currentNode );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tcurrentNode = nextNode;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\trange.moveToBookmark( bookmark );\n\t\t\t\t}\n\n\t\t\t\t// The selection path may not changed, but we should force a selection\n\t\t\t\t// change event to refresh command states, due to the above attribution change. (http://dev.ckeditor.com/ticket/9238)\n\t\t\t\teditor.forceNextSelectionCheck();\n\t\t\t\teditor.getSelection().selectRanges( ranges );\n\t\t\t}\n\t\t}\n\t},\n\n\t// Perform the remove format filters on the passed element.\n\t// @param {CKEDITOR.editor} editor\n\t// @param {CKEDITOR.dom.element} element\n\tfilter: function( editor, element ) {\n\t\t// If editor#addRemoveFotmatFilter hasn't been executed yet value is not initialized.\n\t\tvar filters = editor._.removeFormatFilters || [];\n\t\tfor ( var i = 0; i < filters.length; i++ ) {\n\t\t\tif ( filters[ i ]( element ) === false )\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n};\n\n/**\n * Add to a collection of functions to decide whether a specific\n * element should be considered as formatting element and thus\n * could be removed during `removeFormat` command.\n *\n * **Note:** Only available with the existence of `removeformat` plugin.\n *\n *\t\t// Don't remove empty span.\n *\t\teditor.addRemoveFormatFilter( function( element ) {\n *\t\t\treturn !( element.is( 'span' ) && CKEDITOR.tools.isEmpty( element.getAttributes() ) );\n *\t\t} );\n *\n * @since 3.3\n * @member CKEDITOR.editor\n * @param {Function} func The function to be called, which will be passed a {CKEDITOR.dom.element} element to test.\n */\nCKEDITOR.editor.prototype.addRemoveFormatFilter = function( func ) {\n\tif ( !this._.removeFormatFilters )\n\t\tthis._.removeFormatFilters = [];\n\n\tthis._.removeFormatFilters.push( func );\n};\n\n/**\n * A comma separated list of elements to be removed when executing the `remove\n * format` command. Note that only inline elements are allowed.\n *\n * @cfg\n * @member CKEDITOR.config\n */\nCKEDITOR.config.removeFormatTags = 'b,big,cite,code,del,dfn,em,font,i,ins,kbd,q,s,samp,small,span,strike,strong,sub,sup,tt,u,var';\n\n/**\n * A comma separated list of elements attributes to be removed when executing\n * the `remove format` command.\n *\n * @cfg\n * @member CKEDITOR.config\n */\nCKEDITOR.config.removeFormatAttributes = 'class,style,lang,width,height,align,hspace,valign';\n\n/**\n * Fired after an element was cleaned by the removeFormat plugin.\n *\n * @event removeFormatCleanup\n * @member CKEDITOR.editor\n * @param {CKEDITOR.editor} editor This editor instance.\n * @param data\n * @param {CKEDITOR.dom.element} data.element The element that was cleaned up.\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\nCKEDITOR.plugins.add( 'resize', {\n\tinit: function( editor ) {\n\t\tfunction dragHandler( evt ) {\n\t\t\tvar dx = evt.data.$.screenX - origin.x,\n\t\t\tdy = evt.data.$.screenY - origin.y,\n\t\t\twidth = startSize.width,\n\t\t\theight = startSize.height,\n\t\t\tinternalWidth = width + dx * ( resizeDir == 'rtl' ? -1 : 1 ),\n\t\t\tinternalHeight = height + dy;\n\n\t\t\tif ( resizeHorizontal )\n\t\t\t\twidth = Math.max( config.resize_minWidth, Math.min( internalWidth, config.resize_maxWidth ) );\n\n\t\t\tif ( resizeVertical )\n\t\t\t\theight = Math.max( config.resize_minHeight, Math.min( internalHeight, config.resize_maxHeight ) );\n\n\t\t\t// DO NOT impose fixed size with single direction resize. (http://dev.ckeditor.com/ticket/6308)\n\t\t\teditor.resize( resizeHorizontal ? width : null, height );\n\t\t}\n\n\t\tfunction dragEndHandler() {\n\t\t\tCKEDITOR.document.removeListener( 'mousemove', dragHandler );\n\t\t\tCKEDITOR.document.removeListener( 'mouseup', dragEndHandler );\n\n\t\t\tif ( editor.document ) {\n\t\t\t\teditor.document.removeListener( 'mousemove', dragHandler );\n\t\t\t\teditor.document.removeListener( 'mouseup', dragEndHandler );\n\t\t\t}\n\t\t}\n\n\t\tvar config = editor.config;\n\t\tvar spaceId = editor.ui.spaceId( 'resizer' );\n\n\t\t// Resize in the same direction of chrome,\n\t\t// which is identical to dir of editor element. (http://dev.ckeditor.com/ticket/6614)\n\t\tvar resizeDir = editor.element ? editor.element.getDirection( 1 ) : 'ltr';\n\n\t\t!config.resize_dir && ( config.resize_dir = 'vertical' );\n\t\t( config.resize_maxWidth === undefined ) && ( config.resize_maxWidth = 3000 );\n\t\t( config.resize_maxHeight === undefined ) && ( config.resize_maxHeight = 3000 );\n\t\t( config.resize_minWidth === undefined ) && ( config.resize_minWidth = 750 );\n\t\t( config.resize_minHeight === undefined ) && ( config.resize_minHeight = 250 );\n\n\t\tif ( config.resize_enabled !== false ) {\n\t\t\tvar container = null,\n\t\t\t\torigin, startSize,\n\t\t\t\tresizeHorizontal = ( config.resize_dir == 'both' || config.resize_dir == 'horizontal' ) && ( config.resize_minWidth != config.resize_maxWidth ),\n\t\t\t\tresizeVertical = ( config.resize_dir == 'both' || config.resize_dir == 'vertical' ) && ( config.resize_minHeight != config.resize_maxHeight );\n\n\t\t\tvar mouseDownFn = CKEDITOR.tools.addFunction( function( $event ) {\n\t\t\t\tif ( !container )\n\t\t\t\t\tcontainer = editor.getResizable();\n\n\t\t\t\tstartSize = { width: container.$.offsetWidth || 0, height: container.$.offsetHeight || 0 };\n\t\t\t\torigin = { x: $event.screenX, y: $event.screenY };\n\n\t\t\t\tconfig.resize_minWidth > startSize.width && ( config.resize_minWidth = startSize.width );\n\t\t\t\tconfig.resize_minHeight > startSize.height && ( config.resize_minHeight = startSize.height );\n\n\t\t\t\tCKEDITOR.document.on( 'mousemove', dragHandler );\n\t\t\t\tCKEDITOR.document.on( 'mouseup', dragEndHandler );\n\n\t\t\t\tif ( editor.document ) {\n\t\t\t\t\teditor.document.on( 'mousemove', dragHandler );\n\t\t\t\t\teditor.document.on( 'mouseup', dragEndHandler );\n\t\t\t\t}\n\n\t\t\t\t$event.preventDefault && $event.preventDefault();\n\t\t\t} );\n\n\t\t\teditor.on( 'destroy', function() {\n\t\t\t\tCKEDITOR.tools.removeFunction( mouseDownFn );\n\t\t\t} );\n\n\t\t\teditor.on( 'uiSpace', function( event ) {\n\t\t\t\tif ( event.data.space == 'bottom' ) {\n\t\t\t\t\tvar direction = '';\n\t\t\t\t\tif ( resizeHorizontal && !resizeVertical )\n\t\t\t\t\t\tdirection = ' cke_resizer_horizontal';\n\t\t\t\t\tif ( !resizeHorizontal && resizeVertical )\n\t\t\t\t\t\tdirection = ' cke_resizer_vertical';\n\n\t\t\t\t\tvar resizerHtml =\n\t\t\t\t\t\t'' +\n\t\t\t\t\t\t// BLACK LOWER RIGHT TRIANGLE (ltr)\n\t\t\t\t\t\t// BLACK LOWER LEFT TRIANGLE (rtl)\n\t\t\t\t\t\t( resizeDir == 'ltr' ? '\\u25E2' : '\\u25E3' ) +\n\t\t\t\t\t\t'';\n\n\t\t\t\t\t// Always sticks the corner of botttom space.\n\t\t\t\t\tresizeDir == 'ltr' && direction == 'ltr' ? event.data.html += resizerHtml : event.data.html = resizerHtml + event.data.html;\n\t\t\t\t}\n\t\t\t}, editor, null, 100 );\n\n\t\t\t// Toggle the visibility of the resizer when an editor is being maximized or minimized.\n\t\t\teditor.on( 'maximize', function( event ) {\n\t\t\t\teditor.ui.space( 'resizer' )[ event.data == CKEDITOR.TRISTATE_ON ? 'hide' : 'show' ]();\n\t\t\t} );\n\t\t}\n\t}\n} );\n\n/**\n * The minimum editor width, in pixels, when resizing the editor interface by using the resize handle.\n * Note: It falls back to editor's actual width if it is smaller than the default value.\n *\n * Read more in the [documentation](#!/guide/dev_resize)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/resize.html).\n *\n *\t\tconfig.resize_minWidth = 500;\n *\n * @cfg {Number} [resize_minWidth=750]\n * @member CKEDITOR.config\n */\n\n/**\n * The minimum editor height, in pixels, when resizing the editor interface by using the resize handle.\n * Note: It falls back to editor's actual height if it is smaller than the default value.\n *\n * Read more in the [documentation](#!/guide/dev_resize)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/resize.html).\n *\n *\t\tconfig.resize_minHeight = 600;\n *\n * @cfg {Number} [resize_minHeight=250]\n * @member CKEDITOR.config\n */\n\n/**\n * The maximum editor width, in pixels, when resizing the editor interface by using the resize handle.\n *\n * Read more in the [documentation](#!/guide/dev_resize)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/resize.html).\n *\n *\t\tconfig.resize_maxWidth = 750;\n *\n * @cfg {Number} [resize_maxWidth=3000]\n * @member CKEDITOR.config\n */\n\n/**\n * The maximum editor height, in pixels, when resizing the editor interface by using the resize handle.\n *\n * Read more in the [documentation](#!/guide/dev_resize)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/resize.html).\n *\n *\t\tconfig.resize_maxHeight = 600;\n *\n * @cfg {Number} [resize_maxHeight=3000]\n * @member CKEDITOR.config\n */\n\n/**\n * Whether to enable the resizing feature. If this feature is disabled, the resize handle will not be visible.\n *\n * Read more in the [documentation](#!/guide/dev_resize)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/resize.html).\n *\n *\t\tconfig.resize_enabled = false;\n *\n * @cfg {Boolean} [resize_enabled=true]\n * @member CKEDITOR.config\n */\n\n/**\n * The dimensions for which the editor resizing is enabled. Possible values\n * are `both`, `vertical`, and `horizontal`.\n *\n * Read more in the [documentation](#!/guide/dev_resize)\n * and see the [SDK sample](http://sdk.ckeditor.com/samples/resize.html).\n *\n *\t\tconfig.resize_dir = 'both';\n *\n * @since 3.3\n * @cfg {String} [resize_dir='vertical']\n * @member CKEDITOR.config\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview The \"show border\" plugin. The command display visible outline\n * border line around all table elements if table doesn't have a none-zero 'border' attribute specified.\n */\n\n( function() {\n\tvar commandDefinition = {\n\t\tpreserveState: true,\n\t\teditorFocus: false,\n\t\treadOnly: 1,\n\n\t\texec: function( editor ) {\n\t\t\tthis.toggleState();\n\t\t\tthis.refresh( editor );\n\t\t},\n\n\t\trefresh: function( editor ) {\n\t\t\tif ( editor.document ) {\n\t\t\t\tvar funcName = ( this.state == CKEDITOR.TRISTATE_ON ) ? 'attachClass' : 'removeClass';\n\t\t\t\teditor.editable()[ funcName ]( 'cke_show_borders' );\n\t\t\t}\n\t\t}\n\t};\n\n\tvar showBorderClassName = 'cke_show_border';\n\n\tCKEDITOR.plugins.add( 'showborders', {\n\t\tmodes: { 'wysiwyg': 1 },\n\n\t\tonLoad: function() {\n\t\t\tvar cssStyleText,\n\t\t\t\tcssTemplate =\n\t\t\t// TODO: For IE6, we don't have child selector support,\n\t\t\t// where nested table cells could be incorrect.\n\t\t\t( CKEDITOR.env.ie6Compat ? [\n\t\t\t\t'.%1 table.%2,',\n\t\t\t\t'.%1 table.%2 td, .%1 table.%2 th',\n\t\t\t\t'{',\n\t\t\t\t'border : #d3d3d3 1px dotted',\n\t\t\t\t'}'\n\t\t\t] : [\n\t\t\t\t'.%1 table.%2,',\n\t\t\t\t'.%1 table.%2 > tr > td, .%1 table.%2 > tr > th,',\n\t\t\t\t'.%1 table.%2 > tbody > tr > td, .%1 table.%2 > tbody > tr > th,',\n\t\t\t\t'.%1 table.%2 > thead > tr > td, .%1 table.%2 > thead > tr > th,',\n\t\t\t\t'.%1 table.%2 > tfoot > tr > td, .%1 table.%2 > tfoot > tr > th',\n\t\t\t\t'{',\n\t\t\t\t'border : #d3d3d3 1px dotted',\n\t\t\t\t'}'\n\t\t\t] ).join( '' );\n\n\t\t\tcssStyleText = cssTemplate.replace( /%2/g, showBorderClassName ).replace( /%1/g, 'cke_show_borders ' );\n\n\t\t\tCKEDITOR.addCss( cssStyleText );\n\t\t},\n\n\t\tinit: function( editor ) {\n\n\t\t\tvar command = editor.addCommand( 'showborders', commandDefinition );\n\t\t\tcommand.canUndo = false;\n\n\t\t\tif ( editor.config.startupShowBorders !== false )\n\t\t\t\tcommand.setState( CKEDITOR.TRISTATE_ON );\n\n\t\t\t// Refresh the command on setData.\n\t\t\teditor.on( 'mode', function() {\n\t\t\t\tif ( command.state != CKEDITOR.TRISTATE_DISABLED )\n\t\t\t\t\tcommand.refresh( editor );\n\t\t\t}, null, null, 100 );\n\n\t\t\t// Refresh the command on wysiwyg frame reloads.\n\t\t\teditor.on( 'contentDom', function() {\n\t\t\t\tif ( command.state != CKEDITOR.TRISTATE_DISABLED )\n\t\t\t\t\tcommand.refresh( editor );\n\t\t\t} );\n\n\t\t\teditor.on( 'removeFormatCleanup', function( evt ) {\n\t\t\t\tvar element = evt.data;\n\t\t\t\tif ( editor.getCommand( 'showborders' ).state == CKEDITOR.TRISTATE_ON && element.is( 'table' ) && ( !element.hasAttribute( 'border' ) || parseInt( element.getAttribute( 'border' ), 10 ) <= 0 ) )\n\t\t\t\t\telement.addClass( showBorderClassName );\n\t\t\t} );\n\t\t},\n\n\t\tafterInit: function( editor ) {\n\t\t\tvar dataProcessor = editor.dataProcessor,\n\t\t\t\tdataFilter = dataProcessor && dataProcessor.dataFilter,\n\t\t\t\thtmlFilter = dataProcessor && dataProcessor.htmlFilter;\n\n\t\t\tif ( dataFilter ) {\n\t\t\t\tdataFilter.addRules( {\n\t\t\t\t\telements: {\n\t\t\t\t\t\t'table': function( element ) {\n\t\t\t\t\t\t\tvar attributes = element.attributes,\n\t\t\t\t\t\t\t\tcssClass = attributes[ 'class' ],\n\t\t\t\t\t\t\t\tborder = parseInt( attributes.border, 10 );\n\n\t\t\t\t\t\t\tif ( ( !border || border <= 0 ) && ( !cssClass || cssClass.indexOf( showBorderClassName ) == -1 ) )\n\t\t\t\t\t\t\t\tattributes[ 'class' ] = ( cssClass || '' ) + ' ' + showBorderClassName;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( htmlFilter ) {\n\t\t\t\thtmlFilter.addRules( {\n\t\t\t\t\telements: {\n\t\t\t\t\t\t'table': function( table ) {\n\t\t\t\t\t\t\tvar attributes = table.attributes,\n\t\t\t\t\t\t\t\tcssClass = attributes[ 'class' ];\n\n\t\t\t\t\t\t\tcssClass && ( attributes[ 'class' ] = cssClass.replace( showBorderClassName, '' ).replace( /\\s{2}/, ' ' ).replace( /^\\s+|\\s+$/, '' ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n\n\t// Table dialog must be aware of it.\n\tCKEDITOR.on( 'dialogDefinition', function( ev ) {\n\t\tvar dialogName = ev.data.name;\n\n\t\tif ( dialogName == 'table' || dialogName == 'tableProperties' ) {\n\t\t\tvar dialogDefinition = ev.data.definition,\n\t\t\t\tinfoTab = dialogDefinition.getContents( 'info' ),\n\t\t\t\tborderField = infoTab.get( 'txtBorder' ),\n\t\t\t\toriginalCommit = borderField.commit;\n\n\t\t\tborderField.commit = CKEDITOR.tools.override( originalCommit, function( org ) {\n\t\t\t\treturn function( data, selectedTable ) {\n\t\t\t\t\torg.apply( this, arguments );\n\t\t\t\t\tvar value = parseInt( this.getValue(), 10 );\n\t\t\t\t\tselectedTable[ ( !value || value <= 0 ) ? 'addClass' : 'removeClass' ]( showBorderClassName );\n\t\t\t\t};\n\t\t\t} );\n\n\t\t\tvar advTab = dialogDefinition.getContents( 'advanced' ),\n\t\t\t\tclassField = advTab && advTab.get( 'advCSSClasses' );\n\n\t\t\tif ( classField ) {\n\t\t\t\tclassField.setup = CKEDITOR.tools.override( classField.setup, function( originalSetup ) {\n\t\t\t\t\treturn function() {\n\t\t\t\t\t\toriginalSetup.apply( this, arguments );\n\t\t\t\t\t\tthis.setValue( this.getValue().replace( /cke_show_border/, '' ) );\n\t\t\t\t\t};\n\t\t\t\t} );\n\n\t\t\t\tclassField.commit = CKEDITOR.tools.override( classField.commit, function( originalCommit ) {\n\t\t\t\t\treturn function( data, element ) {\n\t\t\t\t\t\toriginalCommit.apply( this, arguments );\n\n\t\t\t\t\t\tif ( !parseInt( element.getAttribute( 'border' ), 10 ) )\n\t\t\t\t\t\t\telement.addClass( 'cke_show_border' );\n\t\t\t\t\t};\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n\n} )();\n\n/**\n * Whether to automatically enable the \"show borders\" command when the editor loads.\n *\n *\t\tconfig.startupShowBorders = false;\n *\n * @cfg {Boolean} [startupShowBorders=true]\n * @member CKEDITOR.config\n */\n\n/**\n * Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved.\n * For licensing, see LICENSE.md or http://ckeditor.com/license\n */\n\n/**\n * @fileOverview The Source Editing Area plugin. It registers the \"source\" editing\n *\t\tmode, which displays raw HTML data being edited in the editor.\n */\n\n( function() {\n\tCKEDITOR.plugins.add( 'sourcearea', {\n\t\t// jscs:disable maximumLineLength\n\t\t// jscs:enable maximumLineLength\n\t\tinit: function( editor ) {\n\t\t\t// Source mode in inline editors is only available through the \"sourcedialog\" plugin.\n\t\t\tif ( editor.elementMode == CKEDITOR.ELEMENT_MODE_INLINE )\n\t\t\t\treturn;\n\n\t\t\tvar sourcearea = CKEDITOR.plugins.sourcearea;\n\n\t\t\teditor.addMode( 'source', function( callback ) {\n\t\t\t\tvar contentsSpace = editor.ui.space( 'contents' ),\n\t\t\t\t\ttextarea = contentsSpace.getDocument().createElement( 'textarea' );\n\n\t\t\t\ttextarea.setStyles(\n\t\t\t\t\tCKEDITOR.tools.extend( {\n\t\t\t\t\t\t// IE7 has overflow the