Object.defineProperty&&Object.getOwnPropertyDescriptor&&Object.getOwnPropertyDescriptor(Element.prototype,"textContent")&&!Object.getOwnPropertyDescriptor(Element.prototype,"textContent").get&&function(){var innerText=Object.getOwnPropertyDescriptor(Element.prototype,"innerText");Object.defineProperty(Element.prototype,"textContent",{get:function(){return innerText.get.call(this)},set:function(s){return innerText.set.call(this,s)}})}(),Array.isArray||(Array.isArray=function(arg){return"[object Array]"===Object.prototype.toString.call(arg)});
/**
* @license wysihtml5x v0.4.13
* https://github.com/Edicy/wysihtml5
*
* Author: Christopher Blum (https://github.com/tiff)
* Secondary author of extended features: Oliver Pulges (https://github.com/pulges)
*
* Copyright (C) 2012 XING AG
* Licensed under the MIT license (MIT)
*
*/
var wysihtml5={version:"0.4.13",commands:{},dom:{},quirks:{},toolbar:{},lang:{},selection:{},views:{},INVISIBLE_SPACE:"\ufeff",EMPTY_FUNCTION:function(){},ELEMENT_NODE:1,TEXT_NODE:3,BACKSPACE_KEY:8,ENTER_KEY:13,ESCAPE_KEY:27,SPACE_KEY:32,DELETE_KEY:46};
/**
* Rangy, a cross-browser JavaScript range and selection library
* http://code.google.com/p/rangy/
*
* Copyright 2014, Tim Down
* Licensed under the MIT license.
* Version: 1.3alpha.20140804
* Build date: 4 August 2014
*/
!function(factory,global){"function"==typeof define&&define.amd?define(factory):global.rangy=factory()}(function(){function isHostMethod(o,p){var t=typeof o[p];return t==FUNCTION||!(t!=OBJECT||!o[p])||"unknown"==t}function isHostObject(o,p){return!(typeof o[p]!=OBJECT||!o[p])}function isHostProperty(o,p){return typeof o[p]!=UNDEFINED}function createMultiplePropertyTest(testFunc){return function(o,props){for(var i=props.length;i--;)if(!testFunc(o,props[i]))return!1;return!0}}function isTextRange(range){return range&&areHostMethods(range,textRangeMethods)&&areHostProperties(range,textRangeProperties)}function getBody(doc){return isHostObject(doc,"body")?doc.body:doc.getElementsByTagName("body")[0]}function consoleLog(msg){isHostObject(window,"console")&&isHostMethod(window.console,"log")&&window.console.log(msg)}function alertOrLog(msg,shouldAlert){shouldAlert?window.alert(msg):consoleLog(msg)}function fail(reason){api.initialized=!0,api.supported=!1,alertOrLog("Rangy is not supported on this page in your browser. Reason: "+reason,api.config.alertOnFail)}function warn(msg){alertOrLog("Rangy warning: "+msg,api.config.alertOnWarn)}function getErrorDesc(ex){return ex.message||ex.description||String(ex)}function init(){if(!api.initialized){var testRange,implementsDomRange=!1,implementsTextRange=!1;isHostMethod(document,"createRange")&&(testRange=document.createRange(),areHostMethods(testRange,domRangeMethods)&&areHostProperties(testRange,domRangeProperties)&&(implementsDomRange=!0));var body=getBody(document);if(body&&"body"==body.nodeName.toLowerCase())if(body&&isHostMethod(body,"createTextRange")&&isTextRange(testRange=body.createTextRange())&&(implementsTextRange=!0),implementsDomRange||implementsTextRange){var module;for(var moduleName in api.initialized=!0,api.features={implementsDomRange:implementsDomRange,implementsTextRange:implementsTextRange},modules)(module=modules[moduleName])instanceof Module&&module.init(module,api);for(var i=0,len=initListeners.length;iindex?(position.node=newNode,position.offset-=index):position.node==node.parentNode&&position.offset>getNodeIndex(node)&&++position.offset;return newNode}function getDocument(node){if(9==node.nodeType)return node;if(typeof node.ownerDocument!=UNDEF)return node.ownerDocument;if(typeof node.document!=UNDEF)return node.document;if(node.parentNode)return getDocument(node.parentNode);throw module.createError("getDocument: no document found for node")}function getWindow(node){var doc=getDocument(node);if(typeof doc.defaultView!=UNDEF)return doc.defaultView;if(typeof doc.parentWindow!=UNDEF)return doc.parentWindow;throw module.createError("Cannot get a window object for node")}function getIframeDocument(iframeEl){if(typeof iframeEl.contentDocument!=UNDEF)return iframeEl.contentDocument;if(typeof iframeEl.contentWindow!=UNDEF)return iframeEl.contentWindow.document;throw module.createError("getIframeDocument: No Document object found for iframe element")}function getIframeWindow(iframeEl){if(typeof iframeEl.contentWindow!=UNDEF)return iframeEl.contentWindow;if(typeof iframeEl.contentDocument!=UNDEF)return iframeEl.contentDocument.defaultView;throw module.createError("getIframeWindow: No Window object found for iframe element")}function isWindow(obj){return obj&&util.isHostMethod(obj,"setTimeout")&&util.isHostObject(obj,"document")}function getContentDocument(obj,module,methodName){var doc;if(obj?util.isHostProperty(obj,"nodeType")?doc=1==obj.nodeType&&"iframe"==obj.tagName.toLowerCase()?getIframeDocument(obj):getDocument(obj):isWindow(obj)&&(doc=obj.document):doc=document,!doc)throw module.createError(methodName+"(): Parameter must be a Window object or DOM node");return doc}function getRootContainer(node){for(var parent;parent=node.parentNode;)node=parent;return node}function comparePoints(nodeA,offsetA,nodeB,offsetB){var nodeC,root,childA,childB,n;if(nodeA==nodeB)return offsetA===offsetB?0:offsetA[index:"+getNodeIndex(node)+",length:"+node.childNodes.length+"]["+(node.innerHTML||"[innerHTML not supported]").slice(0,25)+"]"}return node.nodeName}function fragmentFromNodeChildren(node){for(var child,fragment=getDocument(node).createDocumentFragment();child=node.firstChild;)fragment.appendChild(child);return fragment}function NodeIterator(root){this.root=root,this._next=root}function createIterator(root){return new NodeIterator(root)}function DomPosition(node,offset){this.node=node,this.offset=offset}function DOMException(codeName){this.code=this[codeName],this.codeName=codeName,this.message="DOMException: "+this.codeName}var UNDEF="undefined",util=api.util;util.areHostMethods(document,["createDocumentFragment","createElement","createTextNode"])||module.fail("document missing a Node creation method"),util.isHostMethod(document,"getElementsByTagName")||module.fail("document missing getElementsByTagName method");var el=document.createElement("div");util.areHostMethods(el,["insertBefore","appendChild","cloneNode"]||!util.areHostObjects(el,["previousSibling","nextSibling","childNodes","parentNode"]))||module.fail("Incomplete Element implementation"),util.isHostProperty(el,"innerHTML")||module.fail("Element is missing innerHTML property");var textNode=document.createTextNode("test");util.areHostMethods(textNode,["splitText","deleteData","insertData","appendData","cloneNode"]||!util.areHostObjects(el,["previousSibling","nextSibling","childNodes","parentNode"])||!util.areHostProperties(textNode,["data"]))||module.fail("Incomplete Text Node implementation");var getComputedStyleProperty,arrayContains=function(arr,val){for(var i=arr.length;i--;)if(arr[i]===val)return!0;return!1},crashyTextNodes=!1;!function(){var el=document.createElement("b");el.innerHTML="1";var textNode=el.firstChild;el.innerHTML="
",crashyTextNodes=isBrokenNode(textNode),api.features.crashyTextNodes=crashyTextNodes}(),typeof window.getComputedStyle!=UNDEF?getComputedStyleProperty=function(el,propName){return getWindow(el).getComputedStyle(el,null)[propName]}:typeof document.documentElement.currentStyle!=UNDEF?getComputedStyleProperty=function(el,propName){return el.currentStyle[propName]}:module.fail("No means of obtaining computed style properties found"),NodeIterator.prototype={_current:null,hasNext:function(){return!!this._next},next:function(){var child,next,n=this._current=this._next;if(this._current)if(child=n.firstChild)this._next=child;else{for(next=null;n!==this.root&&!(next=n.nextSibling);)n=n.parentNode;this._next=next}return this._current},detach:function(){this._current=this._next=this.root=null}},DomPosition.prototype={equals:function(pos){return!!pos&&this.node===pos.node&&this.offset==pos.offset},inspect:function(){return"[DomPosition("+inspectNode(this.node)+":"+this.offset+")]"},toString:function(){return this.inspect()}},DOMException.prototype={INDEX_SIZE_ERR:1,HIERARCHY_REQUEST_ERR:3,WRONG_DOCUMENT_ERR:4,NO_MODIFICATION_ALLOWED_ERR:7,NOT_FOUND_ERR:8,NOT_SUPPORTED_ERR:9,INVALID_STATE_ERR:11,INVALID_NODE_TYPE_ERR:24},DOMException.prototype.toString=function(){return this.message},api.dom={arrayContains:arrayContains,isHtmlNamespace:isHtmlNamespace,parentElement:parentElement,getNodeIndex:getNodeIndex,getNodeLength:getNodeLength,getCommonAncestor:getCommonAncestor,isAncestorOf:isAncestorOf,isOrIsAncestorOf:isOrIsAncestorOf,getClosestAncestorIn:getClosestAncestorIn,isCharacterDataNode:isCharacterDataNode,isTextOrCommentNode:isTextOrCommentNode,insertAfter:insertAfter,splitDataNode:splitDataNode,getDocument:getDocument,getWindow:getWindow,getIframeWindow:getIframeWindow,getIframeDocument:getIframeDocument,getBody:util.getBody,isWindow:isWindow,getContentDocument:getContentDocument,getRootContainer:getRootContainer,comparePoints:comparePoints,isBrokenNode:isBrokenNode,inspectNode:inspectNode,getComputedStyleProperty:getComputedStyleProperty,fragmentFromNodeChildren:fragmentFromNodeChildren,createIterator:createIterator,DomPosition:DomPosition},api.DOMException=DOMException}),api.createCoreModule("DomRange",["DomUtil"],function(api){function isNonTextPartiallySelected(node,range){return 3!=node.nodeType&&(isOrIsAncestorOf(node,range.startContainer)||isOrIsAncestorOf(node,range.endContainer))}function getRangeDocument(range){return range.document||getDocument(range.startContainer)}function getBoundaryBeforeNode(node){return new DomPosition(node.parentNode,getNodeIndex(node))}function getBoundaryAfterNode(node){return new DomPosition(node.parentNode,getNodeIndex(node)+1)}function insertNodeAtPosition(node,n,o){var firstNodeInserted=11==node.nodeType?node.firstChild:node;return isCharacterDataNode(n)?o==n.length?dom.insertAfter(node,n):n.parentNode.insertBefore(node,0==o?n:splitDataNode(n,o)):o>=n.childNodes.length?n.appendChild(node):n.insertBefore(node,n.childNodes[o]),firstNodeInserted}function rangesIntersect(rangeA,rangeB,touchingIsIntersecting){if(assertRangeValid(rangeA),assertRangeValid(rangeB),getRangeDocument(rangeB)!=getRangeDocument(rangeA))throw new DOMException("WRONG_DOCUMENT_ERR");var startComparison=comparePoints(rangeA.startContainer,rangeA.startOffset,rangeB.endContainer,rangeB.endOffset),endComparison=comparePoints(rangeA.endContainer,rangeA.endOffset,rangeB.startContainer,rangeB.startOffset);return touchingIsIntersecting?startComparison<=0&&endComparison>=0:startComparison<0&&endComparison>0}function cloneSubtree(iterator){for(var partiallySelected,node,subIterator,frag=getRangeDocument(iterator.range).createDocumentFragment();node=iterator.next();){if(partiallySelected=iterator.isPartiallySelectedSubtree(),node=node.cloneNode(!partiallySelected),partiallySelected&&(subIterator=iterator.getSubtreeIterator(),node.appendChild(cloneSubtree(subIterator)),subIterator.detach()),10==node.nodeType)throw new DOMException("HIERARCHY_REQUEST_ERR");frag.appendChild(node)}return frag}function iterateSubtree(rangeIterator,func,iteratorState){var it,n,node,subRangeIterator;for(iteratorState=iteratorState||{stop:!1};node=rangeIterator.next();)if(rangeIterator.isPartiallySelectedSubtree()){if(!1===func(node))return void(iteratorState.stop=!0);if(iterateSubtree(subRangeIterator=rangeIterator.getSubtreeIterator(),func,iteratorState),subRangeIterator.detach(),iteratorState.stop)return}else for(it=dom.createIterator(node);n=it.next();)if(!1===func(n))return void(iteratorState.stop=!0)}function deleteSubtree(iterator){for(var subIterator;iterator.next();)iterator.isPartiallySelectedSubtree()?(deleteSubtree(subIterator=iterator.getSubtreeIterator()),subIterator.detach()):iterator.remove()}function extractSubtree(iterator){for(var node,subIterator,frag=getRangeDocument(iterator.range).createDocumentFragment();node=iterator.next();){if(iterator.isPartiallySelectedSubtree()?(node=node.cloneNode(!1),subIterator=iterator.getSubtreeIterator(),node.appendChild(extractSubtree(subIterator)),subIterator.detach()):iterator.remove(),10==node.nodeType)throw new DOMException("HIERARCHY_REQUEST_ERR");frag.appendChild(node)}return frag}function getNodesInRange(range,nodeTypes,filter){var regex,filterNodeTypes=!(!nodeTypes||!nodeTypes.length),filterExists=!!filter;filterNodeTypes&&(regex=new RegExp("^("+nodeTypes.join("|")+")$"));var nodes=[];return iterateSubtree(new RangeIterator(range,!1),function(node){if((!filterNodeTypes||regex.test(node.nodeType))&&(!filterExists||filter(node))){var sc=range.startContainer;if(node!=sc||!isCharacterDataNode(sc)||range.startOffset!=sc.length){var ec=range.endContainer;node==ec&&isCharacterDataNode(ec)&&0==range.endOffset||nodes.push(node)}}}),nodes}function inspect(range){return"["+("undefined"==typeof range.getName?"Range":range.getName())+"("+dom.inspectNode(range.startContainer)+":"+range.startOffset+", "+dom.inspectNode(range.endContainer)+":"+range.endOffset+")]"}function RangeIterator(range,clonePartiallySelectedTextNodes){if(this.range=range,this.clonePartiallySelectedTextNodes=clonePartiallySelectedTextNodes,!range.collapsed){this.sc=range.startContainer,this.so=range.startOffset,this.ec=range.endContainer,this.eo=range.endOffset;var root=range.commonAncestorContainer;this.sc===this.ec&&isCharacterDataNode(this.sc)?(this.isSingleCharacterDataNode=!0,this._first=this._last=this._next=this.sc):(this._first=this._next=this.sc!==root||isCharacterDataNode(this.sc)?getClosestAncestorIn(this.sc,root,!0):this.sc.childNodes[this.so],this._last=this.ec!==root||isCharacterDataNode(this.ec)?getClosestAncestorIn(this.ec,root,!0):this.ec.childNodes[this.eo-1])}}function createAncestorFinder(nodeTypes){return function(node,selfIsAncestor){for(var t,n=selfIsAncestor?node:node.parentNode;n;){if(t=n.nodeType,arrayContains(nodeTypes,t))return n;n=n.parentNode}return null}}function assertNoDocTypeNotationEntityAncestor(node,allowSelf){if(getDocTypeNotationEntityAncestor(node,allowSelf))throw new DOMException("INVALID_NODE_TYPE_ERR")}function assertValidNodeType(node,invalidTypes){if(!arrayContains(invalidTypes,node.nodeType))throw new DOMException("INVALID_NODE_TYPE_ERR")}function assertValidOffset(node,offset){if(offset<0||offset>(isCharacterDataNode(node)?node.length:node.childNodes.length))throw new DOMException("INDEX_SIZE_ERR")}function assertSameDocumentOrFragment(node1,node2){if(getDocumentOrFragmentContainer(node1,!0)!==getDocumentOrFragmentContainer(node2,!0))throw new DOMException("WRONG_DOCUMENT_ERR")}function assertNodeNotReadOnly(node){if(getReadonlyAncestor(node,!0))throw new DOMException("NO_MODIFICATION_ALLOWED_ERR")}function assertNode(node,codeName){if(!node)throw new DOMException(codeName)}function isOrphan(node){return crashyTextNodes&&dom.isBrokenNode(node)||!arrayContains(rootContainerNodeTypes,node.nodeType)&&!getDocumentOrFragmentContainer(node,!0)}function isValidOffset(node,offset){return offset<=(isCharacterDataNode(node)?node.length:node.childNodes.length)}function isRangeValid(range){return!!range.startContainer&&!!range.endContainer&&!isOrphan(range.startContainer)&&!isOrphan(range.endContainer)&&isValidOffset(range.startContainer,range.startOffset)&&isValidOffset(range.endContainer,range.endOffset)}function assertRangeValid(range){if(!isRangeValid(range))throw new Error("Range error: Range is no longer valid after DOM mutation ("+range.inspect()+")")}function splitRangeBoundaries(range,positionsToPreserve){assertRangeValid(range);var sc=range.startContainer,so=range.startOffset,ec=range.endContainer,eo=range.endOffset,startEndSame=sc===ec;isCharacterDataNode(ec)&&eo>0&&eo0&&so=getNodeIndex(sc)&&eo++,so=0),range.setStartAndEnd(sc,so,ec,eo)}function rangeToHtml(range){assertRangeValid(range);var container=range.commonAncestorContainer.parentNode.cloneNode(!1);return container.appendChild(range.cloneContents()),container.innerHTML}function copyComparisonConstantsToObject(obj){obj.START_TO_START=s2s,obj.START_TO_END=s2e,obj.END_TO_END=e2e,obj.END_TO_START=e2s,obj.NODE_BEFORE=n_b,obj.NODE_AFTER=n_a,obj.NODE_BEFORE_AND_AFTER=n_b_a,obj.NODE_INSIDE=n_i}function copyComparisonConstants(constructor){copyComparisonConstantsToObject(constructor),copyComparisonConstantsToObject(constructor.prototype)}function createRangeContentRemover(remover,boundaryUpdater){return function(){assertRangeValid(this);var boundary,sc=this.startContainer,so=this.startOffset,root=this.commonAncestorContainer,iterator=new RangeIterator(this,!0);sc!==root&&(sc=(boundary=getBoundaryAfterNode(getClosestAncestorIn(sc,root,!0))).node,so=boundary.offset),iterateSubtree(iterator,assertNodeNotReadOnly),iterator.reset();var returnValue=remover(iterator);return iterator.detach(),boundaryUpdater(this,sc,so,sc,so),returnValue}}function createPrototypeRange(constructor,boundaryUpdater){function createBeforeAfterNodeSetter(isBefore,isStart){return function(node){assertValidNodeType(node,beforeAfterNodeTypes),assertValidNodeType(getRootContainer(node),rootContainerNodeTypes);var boundary=(isBefore?getBoundaryBeforeNode:getBoundaryAfterNode)(node);(isStart?setRangeStart:setRangeEnd)(this,boundary.node,boundary.offset)}}function setRangeStart(range,node,offset){var ec=range.endContainer,eo=range.endOffset;node===range.startContainer&&offset===range.startOffset||(getRootContainer(node)==getRootContainer(ec)&&1!=comparePoints(node,offset,ec,eo)||(ec=node,eo=offset),boundaryUpdater(range,node,offset,ec,eo))}function setRangeEnd(range,node,offset){var sc=range.startContainer,so=range.startOffset;node===range.endContainer&&offset===range.endOffset||(getRootContainer(node)==getRootContainer(sc)&&-1!=comparePoints(node,offset,sc,so)||(sc=node,so=offset),boundaryUpdater(range,sc,so,node,offset))}var F=function(){};F.prototype=api.rangePrototype,constructor.prototype=new F,util.extend(constructor.prototype,{setStart:function(node,offset){assertNoDocTypeNotationEntityAncestor(node,!0),assertValidOffset(node,offset),setRangeStart(this,node,offset)},setEnd:function(node,offset){assertNoDocTypeNotationEntityAncestor(node,!0),assertValidOffset(node,offset),setRangeEnd(this,node,offset)},setStartAndEnd:function(){var args=arguments,sc=args[0],so=args[1],ec=sc,eo=so;switch(args.length){case 3:eo=args[2];break;case 4:ec=args[2],eo=args[3]}boundaryUpdater(this,sc,so,ec,eo)},setBoundary:function(node,offset,isStart){this["set"+(isStart?"Start":"End")](node,offset)},setStartBefore:createBeforeAfterNodeSetter(!0,!0),setStartAfter:createBeforeAfterNodeSetter(!1,!0),setEndBefore:createBeforeAfterNodeSetter(!0,!1),setEndAfter:createBeforeAfterNodeSetter(!1,!1),collapse:function(isStart){assertRangeValid(this),isStart?boundaryUpdater(this,this.startContainer,this.startOffset,this.startContainer,this.startOffset):boundaryUpdater(this,this.endContainer,this.endOffset,this.endContainer,this.endOffset)},selectNodeContents:function(node){assertNoDocTypeNotationEntityAncestor(node,!0),boundaryUpdater(this,node,0,node,getNodeLength(node))},selectNode:function(node){assertNoDocTypeNotationEntityAncestor(node,!1),assertValidNodeType(node,beforeAfterNodeTypes);var start=getBoundaryBeforeNode(node),end=getBoundaryAfterNode(node);boundaryUpdater(this,start.node,start.offset,end.node,end.offset)},extractContents:createRangeContentRemover(extractSubtree,boundaryUpdater),deleteContents:createRangeContentRemover(deleteSubtree,boundaryUpdater),canSurroundContents:function(){assertRangeValid(this),assertNodeNotReadOnly(this.startContainer),assertNodeNotReadOnly(this.endContainer);var iterator=new RangeIterator(this,!0),boundariesInvalid=iterator._first&&isNonTextPartiallySelected(iterator._first,this)||iterator._last&&isNonTextPartiallySelected(iterator._last,this);return iterator.detach(),!boundariesInvalid},splitBoundaries:function(){splitRangeBoundaries(this)},splitBoundariesPreservingPositions:function(positionsToPreserve){splitRangeBoundaries(this,positionsToPreserve)},normalizeBoundaries:function(){assertRangeValid(this);var sc=this.startContainer,so=this.startOffset,ec=this.endContainer,eo=this.endOffset,mergeForward=function(node){var sibling=node.nextSibling;sibling&&sibling.nodeType==node.nodeType&&(ec=node,eo=node.length,node.appendData(sibling.data),sibling.parentNode.removeChild(sibling))},mergeBackward=function(node){var sibling=node.previousSibling;if(sibling&&sibling.nodeType==node.nodeType){sc=node;var nodeLength=node.length;if(so=sibling.length,node.insertData(0,sibling.data),sibling.parentNode.removeChild(sibling),sc==ec)eo+=so,ec=sc;else if(ec==node.parentNode){var nodeIndex=getNodeIndex(node);eo==nodeIndex?(ec=node,eo=nodeLength):eo>nodeIndex&&eo--}}},normalizeStart=!0;if(isCharacterDataNode(ec))ec.length==eo&&mergeForward(ec);else{if(eo>0){var endNode=ec.childNodes[eo-1];endNode&&isCharacterDataNode(endNode)&&mergeForward(endNode)}normalizeStart=!this.collapsed}if(normalizeStart){if(isCharacterDataNode(sc))0==so&&mergeBackward(sc);else if(sox",htmlParsingConforms=3==styleEl.firstChild.nodeType}catch(e){}api.features.htmlParsingConforms=htmlParsingConforms;var createContextualFragment=htmlParsingConforms?function(fragmentStr){var node=this.startContainer,doc=getDocument(node);if(!node)throw new DOMException("INVALID_STATE_ERR");var el=null;return 1==node.nodeType?el=node:isCharacterDataNode(node)&&(el=dom.parentElement(node)),(el=null===el||"HTML"==el.nodeName&&dom.isHtmlNamespace(getDocument(el).documentElement)&&dom.isHtmlNamespace(el)?doc.createElement("body"):el.cloneNode(!1)).innerHTML=fragmentStr,dom.fragmentFromNodeChildren(el)}:function(fragmentStr){var el=getRangeDocument(this).createElement("body");return el.innerHTML=fragmentStr,dom.fragmentFromNodeChildren(el)},rangeProperties=["startContainer","startOffset","endContainer","endOffset","collapsed","commonAncestorContainer"],s2s=0,s2e=1,e2e=2,e2s=3,n_b=0,n_a=1,n_b_a=2,n_i=3;util.extend(api.rangePrototype,{compareBoundaryPoints:function(how,range){var nodeA,offsetA,nodeB,offsetB;assertRangeValid(this),
assertSameDocumentOrFragment(this.startContainer,range.startContainer);var prefixA=how==e2s||how==s2s?"start":"end",prefixB=how==s2e||how==s2s?"start":"end";return nodeA=this[prefixA+"Container"],offsetA=this[prefixA+"Offset"],nodeB=range[prefixB+"Container"],offsetB=range[prefixB+"Offset"],comparePoints(nodeA,offsetA,nodeB,offsetB)},insertNode:function(node){if(assertRangeValid(this),assertValidNodeType(node,insertableNodeTypes),assertNodeNotReadOnly(this.startContainer),isOrIsAncestorOf(node,this.startContainer))throw new DOMException("HIERARCHY_REQUEST_ERR");var firstNodeInserted=insertNodeAtPosition(node,this.startContainer,this.startOffset);this.setStartBefore(firstNodeInserted)},cloneContents:function(){var clone,frag;if(assertRangeValid(this),this.collapsed)return getRangeDocument(this).createDocumentFragment();if(this.startContainer===this.endContainer&&isCharacterDataNode(this.startContainer))return(clone=this.startContainer.cloneNode(!0)).data=clone.data.slice(this.startOffset,this.endOffset),(frag=getRangeDocument(this).createDocumentFragment()).appendChild(clone),frag;var iterator=new RangeIterator(this,!0);return clone=cloneSubtree(iterator),iterator.detach(),clone},canSurroundContents:function(){assertRangeValid(this),assertNodeNotReadOnly(this.startContainer),assertNodeNotReadOnly(this.endContainer);var iterator=new RangeIterator(this,!0),boundariesInvalid=iterator._first&&isNonTextPartiallySelected(iterator._first,this)||iterator._last&&isNonTextPartiallySelected(iterator._last,this);return iterator.detach(),!boundariesInvalid},surroundContents:function(node){if(assertValidNodeType(node,surroundNodeTypes),!this.canSurroundContents())throw new DOMException("INVALID_STATE_ERR");var content=this.extractContents();if(node.hasChildNodes())for(;node.lastChild;)node.removeChild(node.lastChild);insertNodeAtPosition(node,this.startContainer,this.startOffset),node.appendChild(content),this.selectNode(node)},cloneRange:function(){assertRangeValid(this);for(var prop,range=new Range(getRangeDocument(this)),i=rangeProperties.length;i--;)range[prop=rangeProperties[i]]=this[prop];return range},toString:function(){assertRangeValid(this);var sc=this.startContainer;if(sc===this.endContainer&&isCharacterDataNode(sc))return 3==sc.nodeType||4==sc.nodeType?sc.data.slice(this.startOffset,this.endOffset):"";var textParts=[],iterator=new RangeIterator(this,!0);return iterateSubtree(iterator,function(node){3!=node.nodeType&&4!=node.nodeType||textParts.push(node.data)}),iterator.detach(),textParts.join("")},compareNode:function(node){assertRangeValid(this);var parent=node.parentNode,nodeIndex=getNodeIndex(node);if(!parent)throw new DOMException("NOT_FOUND_ERR");var startComparison=this.comparePoint(parent,nodeIndex),endComparison=this.comparePoint(parent,nodeIndex+1);return startComparison<0?endComparison>0?n_b_a:n_b:endComparison>0?n_a:n_i},comparePoint:function(node,offset){return assertRangeValid(this),assertNode(node,"HIERARCHY_REQUEST_ERR"),assertSameDocumentOrFragment(node,this.startContainer),comparePoints(node,offset,this.startContainer,this.startOffset)<0?-1:comparePoints(node,offset,this.endContainer,this.endOffset)>0?1:0},createContextualFragment:createContextualFragment,toHtml:function(){return rangeToHtml(this)},intersectsNode:function(node,touchingIsIntersecting){if(assertRangeValid(this),assertNode(node,"NOT_FOUND_ERR"),getDocument(node)!==getRangeDocument(this))return!1;var parent=node.parentNode,offset=getNodeIndex(node);assertNode(parent,"NOT_FOUND_ERR");var startComparison=comparePoints(parent,offset,this.endContainer,this.endOffset),endComparison=comparePoints(parent,offset+1,this.startContainer,this.startOffset);return touchingIsIntersecting?startComparison<=0&&endComparison>=0:startComparison<0&&endComparison>0},isPointInRange:function(node,offset){return assertRangeValid(this),assertNode(node,"HIERARCHY_REQUEST_ERR"),assertSameDocumentOrFragment(node,this.startContainer),comparePoints(node,offset,this.startContainer,this.startOffset)>=0&&comparePoints(node,offset,this.endContainer,this.endOffset)<=0},intersectsRange:function(range){return rangesIntersect(this,range,!1)},intersectsOrTouchesRange:function(range){return rangesIntersect(this,range,!0)},intersection:function(range){if(this.intersectsRange(range)){var startComparison=comparePoints(this.startContainer,this.startOffset,range.startContainer,range.startOffset),endComparison=comparePoints(this.endContainer,this.endOffset,range.endContainer,range.endOffset),intersectionRange=this.cloneRange();return-1==startComparison&&intersectionRange.setStart(range.startContainer,range.startOffset),1==endComparison&&intersectionRange.setEnd(range.endContainer,range.endOffset),intersectionRange}return null},union:function(range){if(this.intersectsOrTouchesRange(range)){var unionRange=this.cloneRange();return-1==comparePoints(range.startContainer,range.startOffset,this.startContainer,this.startOffset)&&unionRange.setStart(range.startContainer,range.startOffset),1==comparePoints(range.endContainer,range.endOffset,this.endContainer,this.endOffset)&&unionRange.setEnd(range.endContainer,range.endOffset),unionRange}throw new DOMException("Ranges do not intersect")},containsNode:function(node,allowPartial){return allowPartial?this.intersectsNode(node,!1):this.compareNode(node)==n_i},containsNodeContents:function(node){return this.comparePoint(node,0)>=0&&this.comparePoint(node,getNodeLength(node))<=0},containsRange:function(range){var intersection=this.intersection(range);return null!==intersection&&range.equals(intersection)},containsNodeText:function(node){var nodeRange=this.cloneRange();nodeRange.selectNode(node);var textNodes=nodeRange.getNodes([3]);if(textNodes.length>0){nodeRange.setStart(textNodes[0],0);var lastTextNode=textNodes.pop();return nodeRange.setEnd(lastTextNode,lastTextNode.length),this.containsRange(nodeRange)}return this.containsNodeContents(node)},getNodes:function(nodeTypes,filter){return assertRangeValid(this),getNodesInRange(this,nodeTypes,filter)},getDocument:function(){return getRangeDocument(this)},collapseBefore:function(node){this.setEndBefore(node),this.collapse(!1)},collapseAfter:function(node){this.setStartAfter(node),this.collapse(!0)},getBookmark:function(containerNode){var doc=getRangeDocument(this),preSelectionRange=api.createRange(doc);containerNode=containerNode||dom.getBody(doc),preSelectionRange.selectNodeContents(containerNode);var range=this.intersection(preSelectionRange),start=0,end=0;return range&&(preSelectionRange.setEnd(range.startContainer,range.startOffset),end=(start=preSelectionRange.toString().length)+range.toString().length),{start:start,end:end,containerNode:containerNode}},moveToBookmark:function(bookmark){var containerNode=bookmark.containerNode,charIndex=0;this.setStart(containerNode,0),this.collapse(!0);for(var node,nextCharIndex,i,childNodes,nodeStack=[containerNode],foundStart=!1,stop=!1;!stop&&(node=nodeStack.pop());)if(3==node.nodeType)nextCharIndex=charIndex+node.length,!foundStart&&bookmark.start>=charIndex&&bookmark.start<=nextCharIndex&&(this.setStart(node,bookmark.start-charIndex),foundStart=!0),foundStart&&bookmark.end>=charIndex&&bookmark.end<=nextCharIndex&&(this.setEnd(node,bookmark.end-charIndex),stop=!0),charIndex=nextCharIndex;else for(i=(childNodes=node.childNodes).length;i--;)nodeStack.push(childNodes[i])},getName:function(){return"DomRange"},equals:function(range){return Range.rangesEqual(this,range)},isValid:function(){return isRangeValid(this)},inspect:function(){return inspect(this)},detach:function(){}}),createPrototypeRange(Range,updateBoundaries),util.extend(Range,{rangeProperties:rangeProperties,RangeIterator:RangeIterator,copyComparisonConstants:copyComparisonConstants,createPrototypeRange:createPrototypeRange,inspect:inspect,toHtml:rangeToHtml,getRangeDocument:getRangeDocument,rangesEqual:function(r1,r2){return r1.startContainer===r2.startContainer&&r1.startOffset===r2.startOffset&&r1.endContainer===r2.endContainer&&r1.endOffset===r2.endOffset}}),api.DomRange=Range}),api.createCoreModule("WrappedRange",["DomRange"],function(api,module){var WrappedRange,WrappedTextRange,dom=api.dom,util=api.util,DomPosition=dom.DomPosition,DomRange=api.DomRange,getBody=dom.getBody,getContentDocument=dom.getContentDocument,isCharacterDataNode=dom.isCharacterDataNode;if(api.features.implementsDomRange&&function(){function updateRangeProperties(range){for(var prop,i=rangeProperties.length;i--;)range[prop=rangeProperties[i]]=range.nativeRange[prop];range.collapsed=range.startContainer===range.endContainer&&range.startOffset===range.endOffset}function updateNativeRange(range,startContainer,startOffset,endContainer,endOffset){var startMoved=range.startContainer!==startContainer||range.startOffset!=startOffset,endMoved=range.endContainer!==endContainer||range.endOffset!=endOffset,nativeRangeDifferent=!range.equals(range.nativeRange);(startMoved||endMoved||nativeRangeDifferent)&&(range.setEnd(endContainer,endOffset),range.setStart(startContainer,startOffset))}var rangeProto,createBeforeAfterNodeSetter,rangeProperties=DomRange.rangeProperties;WrappedRange=function(range){if(!range)throw module.createError("WrappedRange: Range must be specified");this.nativeRange=range,updateRangeProperties(this)},DomRange.createPrototypeRange(WrappedRange,updateNativeRange),(rangeProto=WrappedRange.prototype).selectNode=function(node){this.nativeRange.selectNode(node),updateRangeProperties(this)},rangeProto.cloneContents=function(){return this.nativeRange.cloneContents()},rangeProto.surroundContents=function(node){this.nativeRange.surroundContents(node),updateRangeProperties(this)},rangeProto.collapse=function(isStart){this.nativeRange.collapse(isStart),updateRangeProperties(this)},rangeProto.cloneRange=function(){return new WrappedRange(this.nativeRange.cloneRange())},rangeProto.refresh=function(){updateRangeProperties(this)},rangeProto.toString=function(){return this.nativeRange.toString()};var testTextNode=document.createTextNode("test");getBody(document).appendChild(testTextNode);var range=document.createRange();range.setStart(testTextNode,0),range.setEnd(testTextNode,0);try{range.setStart(testTextNode,1),rangeProto.setStart=function(node,offset){this.nativeRange.setStart(node,offset),updateRangeProperties(this)},rangeProto.setEnd=function(node,offset){this.nativeRange.setEnd(node,offset),updateRangeProperties(this)},createBeforeAfterNodeSetter=function(name){return function(node){this.nativeRange[name](node),updateRangeProperties(this)}}}catch(ex){rangeProto.setStart=function(node,offset){try{this.nativeRange.setStart(node,offset)}catch(ex){this.nativeRange.setEnd(node,offset),this.nativeRange.setStart(node,offset)}updateRangeProperties(this)},rangeProto.setEnd=function(node,offset){try{this.nativeRange.setEnd(node,offset)}catch(ex){this.nativeRange.setStart(node,offset),this.nativeRange.setEnd(node,offset)}updateRangeProperties(this)},createBeforeAfterNodeSetter=function(name,oppositeName){return function(node){try{this.nativeRange[name](node)}catch(ex){this.nativeRange[oppositeName](node),this.nativeRange[name](node)}updateRangeProperties(this)}}}rangeProto.setStartBefore=createBeforeAfterNodeSetter("setStartBefore","setEndBefore"),rangeProto.setStartAfter=createBeforeAfterNodeSetter("setStartAfter","setEndAfter"),rangeProto.setEndBefore=createBeforeAfterNodeSetter("setEndBefore","setStartBefore"),rangeProto.setEndAfter=createBeforeAfterNodeSetter("setEndAfter","setStartAfter"),rangeProto.selectNodeContents=function(node){this.setStartAndEnd(node,0,dom.getNodeLength(node))},range.selectNodeContents(testTextNode),range.setEnd(testTextNode,3);var range2=document.createRange();range2.selectNodeContents(testTextNode),range2.setEnd(testTextNode,4),range2.setStart(testTextNode,2),-1==range.compareBoundaryPoints(range.START_TO_END,range2)&&1==range.compareBoundaryPoints(range.END_TO_START,range2)?rangeProto.compareBoundaryPoints=function(type,range){return type==(range=range.nativeRange||range).START_TO_END?type=range.END_TO_START:type==range.END_TO_START&&(type=range.START_TO_END),this.nativeRange.compareBoundaryPoints(type,range)}:rangeProto.compareBoundaryPoints=function(type,range){return this.nativeRange.compareBoundaryPoints(type,range.nativeRange||range)};var el=document.createElement("div");el.innerHTML="123";var textNode=el.firstChild,body=getBody(document);body.appendChild(el),range.setStart(textNode,1),range.setEnd(textNode,2),range.deleteContents(),"13"==textNode.data&&(rangeProto.deleteContents=function(){this.nativeRange.deleteContents(),updateRangeProperties(this)},rangeProto.extractContents=function(){var frag=this.nativeRange.extractContents();return updateRangeProperties(this),frag}),body.removeChild(el),body=null,util.isHostMethod(range,"createContextualFragment")&&(rangeProto.createContextualFragment=function(fragmentStr){return this.nativeRange.createContextualFragment(fragmentStr)}),getBody(document).removeChild(testTextNode),rangeProto.getName=function(){return"WrappedRange"},api.WrappedRange=WrappedRange,api.createNativeRange=function(doc){return(doc=getContentDocument(doc,module,"createNativeRange")).createRange()}}(),api.features.implementsTextRange){var getTextRangeContainerElement=function(textRange){var parentEl=textRange.parentElement(),range=textRange.duplicate();range.collapse(!0);var startEl=range.parentElement();(range=textRange.duplicate()).collapse(!1);var endEl=range.parentElement(),startEndContainer=startEl==endEl?startEl:dom.getCommonAncestor(startEl,endEl);return startEndContainer==parentEl?startEndContainer:dom.getCommonAncestor(parentEl,startEndContainer)},textRangeIsCollapsed=function(textRange){return 0==textRange.compareEndPoints("StartToEnd",textRange)},getTextRangeBoundaryPosition=function(textRange,wholeRangeContainerElement,isStart,isCollapsed,startInfo){var workingRange=textRange.duplicate();workingRange.collapse(isStart);var containerElement=workingRange.parentElement();if(dom.isOrIsAncestorOf(wholeRangeContainerElement,containerElement)||(containerElement=wholeRangeContainerElement),!containerElement.canHaveHTML){var pos=new DomPosition(containerElement.parentNode,dom.getNodeIndex(containerElement));return{boundaryPosition:pos,nodeInfo:{nodeIndex:pos.offset,containerElement:pos.node}}}var workingNode=dom.getDocument(containerElement).createElement("span");workingNode.parentNode&&workingNode.parentNode.removeChild(workingNode);for(var comparison,previousNode,nextNode,boundaryPosition,boundaryNode,workingComparisonType=isStart?"StartToStart":"StartToEnd",start=startInfo&&startInfo.containerElement==containerElement?startInfo.nodeIndex:0,childNodeCount=containerElement.childNodes.length,end=childNodeCount,nodeIndex=end;nodeIndex==childNodeCount?containerElement.appendChild(workingNode):containerElement.insertBefore(workingNode,containerElement.childNodes[nodeIndex]),workingRange.moveToElementText(workingNode),0!=(comparison=workingRange.compareEndPoints(workingComparisonType,textRange))&&start!=end;){if(-1==comparison){if(end==start+1)break;start=nodeIndex}else end=end==start+1?start:nodeIndex;nodeIndex=Math.floor((start+end)/2),containerElement.removeChild(workingNode)}if(boundaryNode=workingNode.nextSibling,-1==comparison&&boundaryNode&&isCharacterDataNode(boundaryNode)){var offset;if(workingRange.setEndPoint(isStart?"EndToStart":"EndToEnd",textRange),/[\r\n]/.test(boundaryNode.data)){var tempRange=workingRange.duplicate(),rangeLength=tempRange.text.replace(/\r\n/g,"\r").length;for(offset=tempRange.moveStart("character",rangeLength);-1==(comparison=tempRange.compareEndPoints("StartToEnd",tempRange));)offset++,tempRange.moveStart("character",1)}else offset=workingRange.text.length;boundaryPosition=new DomPosition(boundaryNode,offset)}else previousNode=(isCollapsed||!isStart)&&workingNode.previousSibling,boundaryPosition=(nextNode=(isCollapsed||isStart)&&workingNode.nextSibling)&&isCharacterDataNode(nextNode)?new DomPosition(nextNode,0):previousNode&&isCharacterDataNode(previousNode)?new DomPosition(previousNode,previousNode.data.length):new DomPosition(containerElement,dom.getNodeIndex(workingNode));return workingNode.parentNode.removeChild(workingNode),{boundaryPosition:boundaryPosition,nodeInfo:{nodeIndex:nodeIndex,containerElement:containerElement}}},createBoundaryTextRange=function(boundaryPosition,isStart){var boundaryNode,boundaryParent,workingNode,childNodes,boundaryOffset=boundaryPosition.offset,doc=dom.getDocument(boundaryPosition.node),workingRange=getBody(doc).createTextRange(),nodeIsDataNode=isCharacterDataNode(boundaryPosition.node);return nodeIsDataNode?boundaryParent=(boundaryNode=boundaryPosition.node).parentNode:(boundaryNode=boundaryOffset<(childNodes=boundaryPosition.node.childNodes).length?childNodes[boundaryOffset]:null,boundaryParent=boundaryPosition.node),(workingNode=doc.createElement("span")).innerHTML="feff;",boundaryNode?boundaryParent.insertBefore(workingNode,boundaryNode):boundaryParent.appendChild(workingNode),workingRange.moveToElementText(workingNode),workingRange.collapse(!isStart),boundaryParent.removeChild(workingNode),nodeIsDataNode&&workingRange[isStart?"moveStart":"moveEnd"]("character",boundaryOffset),workingRange};(WrappedTextRange=function(textRange){this.textRange=textRange,this.refresh()}).prototype=new DomRange(document),WrappedTextRange.prototype.refresh=function(){var start,end,startBoundary,rangeContainerElement=getTextRangeContainerElement(this.textRange);textRangeIsCollapsed(this.textRange)?end=start=getTextRangeBoundaryPosition(this.textRange,rangeContainerElement,!0,!0).boundaryPosition:(start=(startBoundary=getTextRangeBoundaryPosition(this.textRange,rangeContainerElement,!0,!1)).boundaryPosition,end=getTextRangeBoundaryPosition(this.textRange,rangeContainerElement,!1,!1,startBoundary.nodeInfo).boundaryPosition),this.setStart(start.node,start.offset),this.setEnd(end.node,end.offset)},WrappedTextRange.prototype.getName=function(){return"WrappedTextRange"},DomRange.copyComparisonConstants(WrappedTextRange);var rangeToTextRange=function(range){if(range.collapsed)return createBoundaryTextRange(new DomPosition(range.startContainer,range.startOffset),!0);var startRange=createBoundaryTextRange(new DomPosition(range.startContainer,range.startOffset),!0),endRange=createBoundaryTextRange(new DomPosition(range.endContainer,range.endOffset),!1),textRange=getBody(DomRange.getRangeDocument(range)).createTextRange();return textRange.setEndPoint("StartToStart",startRange),textRange.setEndPoint("EndToEnd",endRange),textRange};if(WrappedTextRange.rangeToTextRange=rangeToTextRange,WrappedTextRange.prototype.toTextRange=function(){return rangeToTextRange(this)},api.WrappedTextRange=WrappedTextRange,!api.features.implementsDomRange||api.config.preferTextRange){var globalObj=function(){return this}();"undefined"==typeof globalObj.Range&&(globalObj.Range=WrappedTextRange),api.createNativeRange=function(doc){return doc=getContentDocument(doc,module,"createNativeRange"),getBody(doc).createTextRange()},api.WrappedRange=WrappedTextRange}}api.createRange=function(doc){return doc=getContentDocument(doc,module,"createRange"),new api.WrappedRange(api.createNativeRange(doc))},api.createRangyRange=function(doc){return doc=getContentDocument(doc,module,"createRangyRange"),new DomRange(doc)},api.createIframeRange=function(iframeEl){return module.deprecationNotice("createIframeRange()","createRange(iframeEl)"),api.createRange(iframeEl)},api.createIframeRangyRange=function(iframeEl){return module.deprecationNotice("createIframeRangyRange()","createRangyRange(iframeEl)"),api.createRangyRange(iframeEl)},api.addShimListener(function(win){var doc=win.document;"undefined"==typeof doc.createRange&&(doc.createRange=function(){return api.createRange(doc)}),doc=win=null})}),api.createCoreModule("WrappedSelection",["DomRange","WrappedRange"],function(api,module){function isDirectionBackward(dir){return"string"==typeof dir?/^backward(s)?$/i.test(dir):!!dir}function getWindow(win,methodName){if(win){if(dom.isWindow(win))return win;if(win instanceof WrappedSelection)return win.win;var doc=dom.getContentDocument(win,module,methodName);return dom.getWindow(doc)}return window}function getWinSelection(winParam){return getWindow(winParam,"getWinSelection").getSelection()}function getDocSelection(winParam){return getWindow(winParam,"getDocSelection").document.selection}function winSelectionIsBackward(sel){var backward=!1;return sel.anchorNode&&(backward=1==dom.comparePoints(sel.anchorNode,sel.anchorOffset,sel.focusNode,sel.focusOffset)),backward}function updateAnchorAndFocusFromRange(sel,range,backward){var anchorPrefix=backward?"end":"start",focusPrefix=backward?"start":"end";sel.anchorNode=range[anchorPrefix+"Container"],sel.anchorOffset=range[anchorPrefix+"Offset"],sel.focusNode=range[focusPrefix+"Container"],sel.focusOffset=range[focusPrefix+"Offset"]}function updateAnchorAndFocusFromNativeSelection(sel){var nativeSel=sel.nativeSelection;sel.anchorNode=nativeSel.anchorNode,sel.anchorOffset=nativeSel.anchorOffset,sel.focusNode=nativeSel.focusNode,sel.focusOffset=nativeSel.focusOffset}function updateEmptySelection(sel){sel.anchorNode=sel.focusNode=null,sel.anchorOffset=sel.focusOffset=0,sel.rangeCount=0,sel.isCollapsed=!0,sel._ranges.length=0}function getNativeRange(range){var nativeRange;return range instanceof DomRange?((nativeRange=api.createNativeRange(range.getDocument())).setEnd(range.endContainer,range.endOffset),nativeRange.setStart(range.startContainer,range.startOffset)):range instanceof WrappedRange?nativeRange=range.nativeRange:features.implementsDomRange&&range instanceof dom.getWindow(range.startContainer).Range&&(nativeRange=range),nativeRange}function rangeContainsSingleElement(rangeNodes){if(!rangeNodes.length||1!=rangeNodes[0].nodeType)return!1;for(var i=1,len=rangeNodes.length;i1,originalSelectionRanges=[],originalSelectionBackward=winSelectionIsBackward(sel),i=0;i=36)selectionSupportsMultipleRanges=!1;else{var r2=r1.cloneRange();r1.setStart(textNode,0),r2.setEnd(textNode,3),r2.setStart(textNode,2),sel.addRange(r1),sel.addRange(r2),selectionSupportsMultipleRanges=2==sel.rangeCount}}for(body.removeChild(testEl),sel.removeAllRanges(),i=0;i1)createControlSelection(this,ranges);else{this.removeAllRanges();for(var i=0,len=ranges.length;i1?createControlSelection(this,ranges):rangeCount&&this.addRange(ranges[0])}}if(selProto.getRangeAt=function(index){if(index<0||index>=this.rangeCount)throw new DOMException("INDEX_SIZE_ERR");return this._ranges[index].cloneRange()},useDocumentSelection)refreshSelection=function(sel){var range;api.isSelectionValid(sel.win)?range=sel.docSelection.createRange():(range=getBody(sel.win.document).createTextRange()).collapse(!0),sel.docSelection.type==CONTROL?updateControlSelection(sel):isTextRange(range)?updateFromTextRange(sel,range):updateEmptySelection(sel)};else if(isHostMethod(testSelection,"getRangeAt")&&typeof testSelection.rangeCount==NUMBER)refreshSelection=function(sel){if(implementsControlRange&&implementsDocSelection&&sel.docSelection.type==CONTROL)updateControlSelection(sel);else if(sel._ranges.length=sel.rangeCount=sel.nativeSelection.rangeCount,sel.rangeCount){for(var i=0,len=sel.rangeCount;i0)return api.WrappedTextRange.rangeToTextRange(this.getRangeAt(0));throw module.createError("getNativeTextRange: selection contains no range")}),selProto.getName=function(){return"WrappedSelection"},selProto.inspect=function(){return inspect(this)},selProto.detach=function(){actOnCachedSelection(this.win,"delete"),deleteProperties(this)},WrappedSelection.detachAll=function(){actOnCachedSelection(null,"deleteAll")},WrappedSelection.inspect=inspect,WrappedSelection.isDirectionBackward=isDirectionBackward,api.Selection=WrappedSelection,api.selectionPrototype=selProto,api.addShimListener(function(win){"undefined"==typeof win.getSelection&&(win.getSelection=function(){return getSelection(win)}),win=null})}),api;fail("No document found")}else fail("No window found")},this),
/**
* Selection save and restore module for Rangy.
* Saves and restores user selections using marker invisible elements in the DOM.
*
* Part of Rangy, a cross-browser JavaScript range and selection library
* http://code.google.com/p/rangy/
*
* Depends on Rangy core.
*
* Copyright 2014, Tim Down
* Licensed under the MIT license.
* Version: 1.3alpha.20140804
* Build date: 4 August 2014
*/
function(factory,global){"function"==typeof define&&define.amd?define(["rangy"],factory):factory(global.rangy)}(function(rangy){rangy.createModule("SaveRestore",["WrappedRange"],function(api,module){function gEBI(id,doc){return(doc||document).getElementById(id)}function insertRangeBoundaryMarker(range,atStart){var markerEl,markerId="selectionBoundary_"+ +new Date+"_"+(""+Math.random()).slice(2),doc=dom.getDocument(range.startContainer),boundaryRange=range.cloneRange();return boundaryRange.collapse(atStart),(markerEl=doc.createElement("span")).id=markerId,markerEl.style.lineHeight="0",markerEl.style.display="none",markerEl.className="rangySelectionBoundary",markerEl.appendChild(doc.createTextNode(markerTextChar)),boundaryRange.insertNode(markerEl),markerEl}function setRangeBoundary(doc,range,markerId,atStart){var markerEl=gEBI(markerId,doc);markerEl?(range[atStart?"setStartBefore":"setEndBefore"](markerEl),markerEl.parentNode.removeChild(markerEl)):module.warn("Marker element has been removed. Cannot restore selection.")}function compareRanges(r1,r2){return r2.compareBoundaryPoints(r1.START_TO_START,r1)}function saveRange(range,backward){var endEl,doc=api.DomRange.getRangeDocument(range),text=range.toString();return range.collapsed?{document:doc,markerId:(endEl=insertRangeBoundaryMarker(range,!1)).id,collapsed:!0}:(endEl=insertRangeBoundaryMarker(range,!1),{document:doc,startMarkerId:insertRangeBoundaryMarker(range,!0).id,endMarkerId:endEl.id,collapsed:!1,backward:backward,toString:function(){return"original text: '"+text+"', new text: '"+range.toString()+"'"}})}function restoreRange(rangeInfo,normalize){var doc=rangeInfo.document;void 0===normalize&&(normalize=!0);var range=api.createRange(doc);if(rangeInfo.collapsed){var markerEl=gEBI(rangeInfo.markerId,doc);if(markerEl){markerEl.style.display="inline";var previousNode=markerEl.previousSibling;previousNode&&3==previousNode.nodeType?(markerEl.parentNode.removeChild(markerEl),range.collapseToPoint(previousNode,previousNode.length)):(range.collapseBefore(markerEl),markerEl.parentNode.removeChild(markerEl))}else module.warn("Marker element has been removed. Cannot restore selection.")}else setRangeBoundary(doc,range,rangeInfo.startMarkerId,!0),setRangeBoundary(doc,range,rangeInfo.endMarkerId,!1);return normalize&&range.normalizeBoundaries(),range}function saveRanges(ranges,backward){var range,doc,rangeInfos=[];(ranges=ranges.slice(0)).sort(compareRanges);for(var i=0,len=ranges.length;i=0;--i)range=ranges[i],doc=api.DomRange.getRangeDocument(range),range.collapsed?range.collapseAfter(gEBI(rangeInfos[i].markerId,doc)):(range.setEndBefore(gEBI(rangeInfos[i].endMarkerId,doc)),range.setStartAfter(gEBI(rangeInfos[i].startMarkerId,doc)));return rangeInfos}function saveSelection(win){if(!api.isSelectionValid(win))return module.warn("Cannot save selection. This usually happens when the selection is collapsed and the selection document has lost focus."),null;var sel=api.getSelection(win),ranges=sel.getAllRanges(),backward=1==ranges.length&&sel.isBackward(),rangeInfos=saveRanges(ranges,backward);return backward?sel.setSingleRange(ranges[0],"backward"):sel.setRanges(ranges),{win:win,rangeInfos:rangeInfos,restored:!1}}function restoreRanges(rangeInfos){for(var ranges=[],i=rangeInfos.length-1;i>=0;i--)ranges[i]=restoreRange(rangeInfos[i],!0);return ranges}function restoreSelection(savedSelection,preserveDirection){if(!savedSelection.restored){var rangeInfos=savedSelection.rangeInfos,sel=api.getSelection(savedSelection.win),ranges=restoreRanges(rangeInfos);1==rangeInfos.length&&preserveDirection&&api.features.selectionHasExtend&&rangeInfos[0].backward?(sel.removeAllRanges(),sel.addRange(ranges[0],!0)):sel.setRanges(ranges),savedSelection.restored=!0}}function removeMarkerElement(doc,markerId){var markerEl=gEBI(markerId,doc);markerEl&&markerEl.parentNode.removeChild(markerEl)}function removeMarkers(savedSelection){for(var rangeInfo,rangeInfos=savedSelection.rangeInfos,i=0,len=rangeInfos.length;i1){var ancestor=this[source];if(ancestor&&"function"==typeof value&&(!ancestor.valueOf||ancestor.valueOf()!=value.valueOf())&&/\bbase\b/.test(value)){var method=value.valueOf();(value=function(){var previous=this.base||Base.prototype.base;this.base=ancestor;var returnValue=method.apply(this,arguments);return this.base=previous,returnValue}).valueOf=function(type){return"object"==type?value:method},value.toString=Base.toString}this[source]=value}else if(source){var extend=Base.prototype.extend;Base._prototyping||"function"==typeof this||(extend=this.extend||extend);for(var proto={toSource:null},hidden=["constructor","toString","valueOf"],i=Base._prototyping?0:1;key=hidden[i++];)source[key]!=proto[key]&&extend.call(this,key,source[key]);for(var key in source)proto[key]||extend.call(this,key,source[key])}return this}},Base=Base.extend({constructor:function(){this.extend(arguments[0])}},{ancestor:Object,version:"1.1",forEach:function(object,block,context){for(var key in object)this.prototype[key]===undefined&&block.call(context,object[key],key,object)},implement:function(){for(var i=0;i"===equation?version>rv:"<="===equation?version<=rv:">="===equation?version>=rv:void 0:version===rv))}var buggyCommands,supported,userAgent=navigator.userAgent,testElement=document.createElement("div"),isGecko=-1!==userAgent.indexOf("Gecko")&&-1===userAgent.indexOf("KHTML"),isWebKit=-1!==userAgent.indexOf("AppleWebKit/"),isChrome=-1!==userAgent.indexOf("Chrome/"),isOpera=-1!==userAgent.indexOf("Opera/");return{USER_AGENT:userAgent,supported:function(){var userAgent=this.USER_AGENT.toLowerCase(),hasContentEditableSupport="contentEditable"in testElement,hasEditingApiSupport=document.execCommand&&document.queryCommandSupported&&document.queryCommandState,hasQuerySelectorSupport=document.querySelector&&document.querySelectorAll,isIncompatibleMobileBrowser=this.isIos()&&iosVersion(userAgent)<5||this.isAndroid()&&androidVersion(userAgent)<4||-1!==userAgent.indexOf("opera mobi")||-1!==userAgent.indexOf("hpwos/");return hasContentEditableSupport&&hasEditingApiSupport&&hasQuerySelectorSupport&&!isIncompatibleMobileBrowser},isTouchDevice:function(){return this.supportsEvent("touchmove")},isIos:function(){return/ipad|iphone|ipod/i.test(this.USER_AGENT)},isAndroid:function(){return-1!==this.USER_AGENT.indexOf("Android")},supportsSandboxedIframes:function(){return isIE()},throwsMixedContentWarningWhenIframeSrcIsEmpty:function(){return!("querySelector"in document)},displaysCaretInEmptyContentEditableCorrectly:function(){return isIE()},hasCurrentStyleProperty:function(){return"currentStyle"in testElement},hasHistoryIssue:function(){return isGecko&&"Mac"===navigator.platform.substr(0,3)},insertsLineBreaksOnReturn:function(){return isGecko},supportsPlaceholderAttributeOn:function(element){return"placeholder"in element},supportsEvent:function(eventName){return"on"+eventName in testElement||(testElement.setAttribute("on"+eventName,"return;"),"function"==typeof testElement["on"+eventName])},supportsEventsInIframeCorrectly:function(){return!isOpera},supportsHTML5Tags:function(context){var element=context.createElement("div"),html5="foo";return element.innerHTML=html5,element.innerHTML.toLowerCase()===html5},supportsCommand:(buggyCommands={formatBlock:isIE(10,"<="),insertUnorderedList:isIE(),insertOrderedList:isIE()},supported={insertHTML:isGecko},function(doc,command){if(!buggyCommands[command]){try{return doc.queryCommandSupported(command)}catch(e1){}try{return doc.queryCommandEnabled(command)}catch(e2){return!!supported[command]}}return!1}),doesAutoLinkingInContentEditable:function(){return isIE()},canDisableAutoLinking:function(){return this.supportsCommand(document,"AutoUrlDetect")},clearsContentEditableCorrectly:function(){return isGecko||isOpera||isWebKit},supportsGetAttributeCorrectly:function(){return"1"!=document.createElement("td").getAttribute("rowspan")},canSelectImagesInContentEditable:function(){return isGecko||isIE()||isOpera},autoScrollsToCaret:function(){return!isWebKit},autoClosesUnclosedTags:function(){var returnValue,innerHTML,clonedTestElement=testElement.cloneNode(!1);return clonedTestElement.innerHTML="",innerHTML=clonedTestElement.innerHTML.toLowerCase(),returnValue=""===innerHTML||"
"===innerHTML,this.autoClosesUnclosedTags=function(){return returnValue},returnValue},supportsNativeGetElementsByClassName:function(){return-1!==String(document.getElementsByClassName).indexOf("[native code]")},supportsSelectionModify:function(){return"getSelection"in window&&"modify"in window.getSelection()},needsSpaceAfterLineBreak:function(){return isOpera},supportsSpeechApiOn:function(input){return(userAgent.match(/Chrome\/(\d+)/)||[undefined,0])[1]>=11&&("onwebkitspeechchange"in input||"speech"in input)},crashesWhenDefineProperty:function(property){return isIE(9)&&("XMLHttpRequest"===property||"XDomainRequest"===property)},doesAsyncFocus:function(){return isIE()},hasProblemsSettingCaretAfterImg:function(){return isIE()},hasUndoInContextMenu:function(){return isGecko||isChrome||isOpera},hasInsertNodeIssue:function(){return isOpera},hasIframeFocusIssue:function(){return isIE()},createsNestedInvalidMarkupAfterPaste:function(){return isWebKit},supportsMutationEvents:function(){return"MutationEvent"in window}}}(),wysihtml5.lang.array=function(arr){return{contains:function(needle){if(Array.isArray(needle)){for(var i=needle.length;i--;)if(-1!==wysihtml5.lang.array(arr).indexOf(needle[i]))return!0;return!1}return-1!==wysihtml5.lang.array(arr).indexOf(needle)},indexOf:function(needle){if(arr.indexOf)return arr.indexOf(needle);for(var i=0,length=arr.length;i>>0,A=new Array(len),i=0;i"]/g,ENTITY_MAP={"&":"&","<":"<",">":">",'"':"""};wysihtml5.lang.string=function(str){return str=String(str),{trim:function(){return str.replace(WHITE_SPACE_START,"").replace(WHITE_SPACE_END,"")},interpolate:function(vars){for(var i in vars)str=this.replace("#{"+i+"}").by(vars[i]);return str},replace:function(search){return{by:function(replace){return str.split(search).join(replace)}}},escapeHTML:function(){return str.replace(ENTITY_REG_EXP,function(c){return ENTITY_MAP[c]})}}}}(),function(wysihtml5){function autoLink(element,ignoreInClasses){return _hasParentThatShouldBeIgnored(element,ignoreInClasses)?element:(element===element.ownerDocument.documentElement&&(element=element.ownerDocument.body),_parseNode(element,ignoreInClasses))}function _convertUrlsToLinks(str){return str.replace(URL_REG_EXP,function(match,url){var punctuation=(url.match(TRAILING_CHAR_REG_EXP)||[])[1]||"",opening=BRACKETS[punctuation];(url=url.replace(TRAILING_CHAR_REG_EXP,"")).split(opening).length>url.split(punctuation).length&&(url+=punctuation,punctuation="");var realUrl=url,displayUrl=url;return url.length>MAX_DISPLAY_LENGTH&&(displayUrl=displayUrl.substr(0,MAX_DISPLAY_LENGTH)+"..."),"www."===realUrl.substr(0,4)&&(realUrl="http://"+realUrl),''+displayUrl+""+punctuation})}function _getTempElement(context){var tempElement=context._wysihtml5_tempElement;return tempElement||(tempElement=context._wysihtml5_tempElement=context.createElement("div")),tempElement}function _wrapMatchesInNode(textNode){var parentNode=textNode.parentNode,nodeValue=wysihtml5.lang.string(textNode.data).escapeHTML(),tempElement=_getTempElement(parentNode.ownerDocument);for(tempElement.innerHTML=""+_convertUrlsToLinks(nodeValue),tempElement.removeChild(tempElement.firstChild);tempElement.firstChild;)parentNode.insertBefore(tempElement.firstChild,textNode);parentNode.removeChild(textNode)}function _hasParentThatShouldBeIgnored(node,ignoreInClasses){for(var nodeName;node.parentNode;){if(nodeName=(node=node.parentNode).nodeName,node.className&&wysihtml5.lang.array(node.className.split(" ")).contains(ignoreInClasses))return!0;if(IGNORE_URLS_IN.contains(nodeName))return!0;if("body"===nodeName)return!1}return!1}function _parseNode(element,ignoreInClasses){if(!(IGNORE_URLS_IN.contains(element.nodeName)||element.className&&wysihtml5.lang.array(element.className.split(" ")).contains(ignoreInClasses))){if(element.nodeType!==wysihtml5.TEXT_NODE||!element.data.match(URL_REG_EXP)){for(var childNodes=wysihtml5.lang.array(element.childNodes).get(),childNodesLength=childNodes.length,i=0;i0&&(elementClassName==className||new RegExp("(^|\\s)"+className+"(\\s|$)").test(elementClassName))}}(wysihtml5),wysihtml5.dom.contains=function(){var documentElement=document.documentElement;return documentElement.contains?function(container,element){return element.nodeType!==wysihtml5.ELEMENT_NODE&&(element=element.parentNode),container!==element&&container.contains(element)}:documentElement.compareDocumentPosition?function(container,element){return!!(16&container.compareDocumentPosition(element))}:void 0}(),wysihtml5.dom.convertToList=function(){function _createListItem(doc,list){var listItem=doc.createElement("li");return list.appendChild(listItem),listItem}function _createList(doc,type){return doc.createElement(type)}function convertToList(element,listType,uneditableClass){if("UL"===element.nodeName||"OL"===element.nodeName||"MENU"===element.nodeName)return element;var childNodes,childNodesLength,childNode,lineBreak,parentNode,isBlockElement,isLineBreak,currentListItem,i,doc=element.ownerDocument,list=_createList(doc,listType),lineBreaks=element.querySelectorAll("br"),lineBreaksLength=lineBreaks.length;for(i=0;i0}}(),function(wysihtml5){function _getDocumentIdentifier(doc){return doc._wysihtml5_identifier||(doc._wysihtml5_identifier=DOCUMENT_IDENTIFIER++)}var LIVE_CACHE={},DOCUMENT_IDENTIFIER=1;wysihtml5.dom.hasElementWithClassName=function(doc,className){if(!wysihtml5.browser.supportsNativeGetElementsByClassName())return!!doc.querySelector("."+className);var key=_getDocumentIdentifier(doc)+":"+className,cacheEntry=LIVE_CACHE[key];return cacheEntry||(cacheEntry=LIVE_CACHE[key]=doc.getElementsByClassName(className)),cacheEntry.length>0}}(wysihtml5),wysihtml5.dom.insert=function(elementToInsert){return{after:function(element){element.parentNode.insertBefore(elementToInsert,element.nextSibling)},before:function(element){element.parentNode.insertBefore(elementToInsert,element)},into:function(element){element.appendChild(elementToInsert)}}},wysihtml5.dom.insertCSS=function(rules){return rules=rules.join("\n"),{into:function(doc){var styleElement=doc.createElement("style");styleElement.type="text/css",styleElement.styleSheet?styleElement.styleSheet.cssText=rules:styleElement.appendChild(doc.createTextNode(rules));var link=doc.querySelector("head link");if(link)link.parentNode.insertBefore(styleElement,link);else{var head=doc.querySelector("head");head&&head.appendChild(styleElement)}}}},function(wysihtml5){wysihtml5.dom.lineBreaks=function(node){function _isLineBreak(n){return"BR"===n.nodeName}function _isLineBreakOrBlockElement(element){return!!_isLineBreak(element)||"block"===wysihtml5.dom.getStyle("display").from(element)}return{add:function(){var doc=node.ownerDocument,nextSibling=wysihtml5.dom.domNode(node).next({ignoreBlankTexts:!0}),previousSibling=wysihtml5.dom.domNode(node).prev({ignoreBlankTexts:!0});nextSibling&&!_isLineBreakOrBlockElement(nextSibling)&&wysihtml5.dom.insert(doc.createElement("br")).after(node),previousSibling&&!_isLineBreakOrBlockElement(previousSibling)&&wysihtml5.dom.insert(doc.createElement("br")).before(node)},remove:function(){var nextSibling=wysihtml5.dom.domNode(node).next({ignoreBlankTexts:!0}),previousSibling=wysihtml5.dom.domNode(node).prev({ignoreBlankTexts:!0});nextSibling&&_isLineBreak(nextSibling)&&nextSibling.parentNode.removeChild(nextSibling),previousSibling&&_isLineBreak(previousSibling)&&previousSibling.parentNode.removeChild(previousSibling)}}}}(wysihtml5),wysihtml5.dom.observe=function(element,eventNames,handler){for(var handlerWrapper,eventName,i=0,length=(eventNames="string"==typeof eventNames?[eventNames]:eventNames).length;i"===oldNode.outerHTML.slice(-4).toLowerCase()||(nodeName="div")),nodeName in tagRules){if(!(rule=tagRules[nodeName])||rule.remove)return null;if(rule.unwrap)return!1;rule="string"==typeof rule?{rename_tag:rule}:rule}else{if(!oldNode.firstChild)return null;rule={rename_tag:DEFAULT_NODE_NAME}}return _handleAttributes(oldNode,newNode=oldNode.ownerDocument.createElement(rule.rename_tag||nodeName),rule,clearInternals),_handleStyles(oldNode,newNode,rule),rule.one_of_type&&!_testTypes(oldNode,currentRules,rule.one_of_type,clearInternals)?(!rule.remove_action||"unwrap"!=rule.remove_action)&&null:(oldNode=null,newNode.normalize&&newNode.normalize(),newNode)}function _testTypes(oldNode,rules,types,clearInternals){var type;if("SPAN"===oldNode.nodeName&&!clearInternals&&("_wysihtml5-temp-placeholder"===oldNode.className||"rangySelectionBoundary"===oldNode.className))return!0;for(type in types)if(types.hasOwnProperty(type)&&rules.type_definitions&&rules.type_definitions[type]&&_testType(oldNode,rules.type_definitions[type]))return!0;return!1}function _testType(oldNode,definition){var classesLength,s,a,attr,styleProp,nodeClasses=oldNode.getAttribute("class"),nodeStyles=oldNode.getAttribute("style");if(definition.methods)for(var m in definition.methods)if(definition.methods.hasOwnProperty(m)&&typeCeckMethods[m]&&typeCeckMethods[m](oldNode))return!0;if(nodeClasses&&definition.classes){classesLength=(nodeClasses=nodeClasses.replace(/^\s+/g,"").replace(/\s+$/g,"").split(WHITE_SPACE_REG_EXP)).length;for(var i=0;i-1)return!0;return!1}function _handleStyles(oldNode,newNode,rule){var s;if(rule&&rule.keep_styles)for(s in rule.keep_styles)rule.keep_styles.hasOwnProperty(s)&&("float"==s?(oldNode.style.styleFloat&&(newNode.style.styleFloat=oldNode.style.styleFloat),oldNode.style.cssFloat&&(newNode.style.cssFloat=oldNode.style.cssFloat)):oldNode.style[s]&&(newNode.style[s]=oldNode.style[s]))}function _handleAttributes(oldNode,newNode,rule,clearInternals){var classesLength,currentClass,newClass,attributeName,newAttributeValue,method,oldAttribute,attributes={},setClass=rule.set_class,addClass=rule.add_class,addStyle=rule.add_style,setAttributes=rule.set_attributes,checkAttributes=rule.check_attributes,allowedClasses=currentRules.classes,i=0,classes=[],styles=[],newClasses=[],oldClasses=[];if(setAttributes&&(attributes=wysihtml5.lang.object(setAttributes).clone()),checkAttributes)for(attributeName in checkAttributes)(method=attributeCheckMethods[checkAttributes[attributeName]])&&((oldAttribute=_getAttribute(oldNode,attributeName))||"alt"===attributeName&&"IMG"==oldNode.nodeName)&&"string"==typeof(newAttributeValue=method(oldAttribute))&&(attributes[attributeName]=newAttributeValue);if(setClass&&classes.push(setClass),addClass)for(attributeName in addClass)(method=addClassMethods[addClass[attributeName]])&&"string"==typeof(newClass=method(_getAttribute(oldNode,attributeName)))&&classes.push(newClass);if(addStyle)for(attributeName in addStyle)(method=addStyleMethods[addStyle[attributeName]])&&(newStyle=method(_getAttribute(oldNode,attributeName)),"string"==typeof newStyle&&styles.push(newStyle));if("string"==typeof allowedClasses&&"any"===allowedClasses&&oldNode.getAttribute("class"))attributes["class"]=oldNode.getAttribute("class");else{for(clearInternals||(allowedClasses["_wysihtml5-temp-placeholder"]=1,allowedClasses._rangySelectionBoundary=1,allowedClasses["wysiwyg-tmp-selected-cell"]=1),(oldClasses=oldNode.getAttribute("class"))&&(classes=classes.concat(oldClasses.split(WHITE_SPACE_REG_EXP))),classesLength=classes.length;i0)return!0;for(var i=visibleElements.length;i--;)if(el.querySelector(visibleElements[i]))return!0;return!!(el.offsetWidth&&el.offsetWidth>0&&el.offsetHeight&&el.offsetHeight>0)})};return parse}(),wysihtml5.dom.removeEmptyTextNodes=function(node){for(var childNode,childNodes=wysihtml5.lang.array(node.childNodes).get(),childNodesLength=childNodes.length,i=0;i