
META-INF.resources.bower_components.textAngular.dist.textAngular.min.js Maven / Gradle / Ivy
"use strict";var textAngularVersion="v1.5.16";var _browserDetect={ie:function(){var undef,v=3,div=document.createElement("div"),all=div.getElementsByTagName("i");while(div.innerHTML="\x3c!--[if gt IE "+ ++v+"]>4?v:undef}(),webkit:/AppleWebKit\/([\d.]+)/i.test(navigator.userAgent),isFirefox:navigator.userAgent.toLowerCase().indexOf("firefox")>-1};var performance=performance||{};performance.now=function(){return performance.now||performance.mozNow||performance.msNow||performance.oNow||performance.webkitNow||function(){return(new Date).getTime()}}();function stripHtmlToText(html){var tmp=document.createElement("DIV");tmp.innerHTML=html;var res=tmp.textContent||tmp.innerText||"";res.replace("","");res=res.trim();return res}function getDomFromHtml(html){var tmp=document.createElement("DIV");tmp.innerHTML=html;return tmp}var BLOCKELEMENTS=/^(address|article|aside|audio|blockquote|canvas|center|dd|div|dl|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|noscript|ol|output|p|pre|section|table|tfoot|ul|video)$/i;var LISTELEMENTS=/^(ul|li|ol)$/i;var VALIDELEMENTS=/^(#text|span|address|article|aside|audio|blockquote|canvas|center|dd|div|dl|fieldset|figcaption|figure|footer|form|h1|h2|h3|h4|h5|h6|header|hgroup|hr|noscript|ol|output|p|pre|section|table|tfoot|ul|video|li)$/i;if(!String.prototype.trim){String.prototype.trim=function(){return this.replace(/^\s+|\s+$/g,"")}}var sheet,addCSSRule,removeCSSRule,_addCSSRule,_removeCSSRule,_getRuleIndex;if(_browserDetect.ie>8||_browserDetect.ie===undefined){var _sheets=document.styleSheets;for(var i=0;i<_sheets.length;i++){if(_sheets[i].media.length===0||_sheets[i].media.mediaText.match(/(all|screen)/gi)){if(_sheets[i].href){if(_sheets[i].href.match(/textangular\.(min\.|)css/gi)){sheet=_sheets[i];break}}}}if(!sheet){sheet=function(){var style=document.createElement("style");if(_browserDetect.webkit)style.appendChild(document.createTextNode(""));document.getElementsByTagName("head")[0].appendChild(style);return style.sheet}()}addCSSRule=function(selector,rules){return _addCSSRule(sheet,selector,rules)};_addCSSRule=function(_sheet,selector,rules){var insertIndex;var insertedRule;if(_sheet.cssRules)insertIndex=Math.max(_sheet.cssRules.length-1,0);else if(_sheet.rules)insertIndex=Math.max(_sheet.rules.length-1,0);if(_sheet.insertRule){_sheet.insertRule(selector+"{"+rules+"}",insertIndex)}else{_sheet.addRule(selector,rules,insertIndex)}if(sheet.rules)insertedRule=sheet.rules[insertIndex];else if(sheet.cssRules)insertedRule=sheet.cssRules[insertIndex];return insertedRule};_getRuleIndex=function(rule,rules){var i,ruleIndex;for(i=0;i
|)/gi,"$1");return fe}else return html};return taFixChrome}).factory("taSanitize",["$sanitize",function taSanitizeFactory($sanitize){var convert_infos=[{property:"font-weight",values:["bold"],tag:"b"},{property:"font-style",values:["italic"],tag:"i"}];var styleMatch=[];for(var i=0;i
]*>.*?<\/pre[^>]*>)/gi);var processedSafe=safe.replace(/((9|10);)*/gi,"");var re=/]*>.*?<\/pre[^>]*>/gi;var index=0;var lastIndex=0;var origTag;safe="";while((origTag=re.exec(processedSafe))!==null&&index<_preTags.length){safe+=processedSafe.substring(lastIndex,origTag.index)+_preTags[index];lastIndex=origTag.index+origTag[0].length;index++}return safe+processedSafe.substring(lastIndex)}}]).factory("taToolExecuteAction",["$q","$log",function($q,$log){return function(editor){if(editor!==undefined)this.$editor=function(){return editor};var deferred=$q.defer(),promise=deferred.promise,_editor=this.$editor();var result;try{result=this.action(deferred,_editor.startAction());promise["finally"](function(){_editor.endAction.call(_editor)})}catch(exc){$log.error(exc)}if(result||result===undefined){deferred.resolve()}}}]);angular.module("textAngular.DOM",["textAngular.factories"]).factory("taExecCommand",["taSelection","taBrowserTag","$document",function(taSelection,taBrowserTag,$document){var listToDefault=function(listElement,defaultWrap){var $target,i;var children=listElement.find("li");for(i=children.length-1;i>=0;i--){$target=angular.element("<"+defaultWrap+">"+children[i].innerHTML+""+defaultWrap+">");listElement.after($target)}listElement.remove();taSelection.setSelectionToElementEnd($target[0])};var listElementToSelfTag=function(list,listElement,selfTag,bDefault,defaultWrap){var $target,i;var priorElement;var nextElement;var children=list.find("li");var foundIndex;for(i=0;i0){priorElement=children[i-1]}if(i+1 "+listElement[0].innerHTML+""+defaultWrap+">"}else{html+="<"+taBrowserTag(selfTag)+">";html+=" "+listElement[0].innerHTML+" ";html+=""+taBrowserTag(selfTag)+">"}$target=angular.element(html);if(!priorElement){listElement.remove();list.after(angular.element(list[0].outerHTML));list.after($target);list.remove();taSelection.setSelectionToElementEnd($target[0])}else if(!nextElement){listElement.remove();list.after($target);taSelection.setSelectionToElementEnd($target[0])}else{var p=list.parent();var html1="";var listTag=list[0].nodeName.toLowerCase();html1+="<"+listTag+">";for(i=0;i"+children[i].innerHTML+""}html1+=""+listTag+">";var html2="";html2+="<"+listTag+">";for(i=foundIndex+1;i "+children[i].innerHTML+""}html2+=""+listTag+">";list.after(angular.element(html2));list.after($target);list.after(angular.element(html1));list.remove();taSelection.setSelectionToElementEnd($target[0])}};var listElementsToSelfTag=function(list,listElements,selfTag,bDefault,defaultWrap){var $target,i,j,p;var priorElement;var afterElement;var children=list.find("li");var foundIndexes=[];for(i=0;i 0){priorElement=children[foundIndexes[0]-1]}if(foundIndexes[listElements.length-1]+1 "+listElements[j].innerHTML+""+defaultWrap+">";listElements[j].remove()}}else{html+="<"+taBrowserTag(selfTag)+">";for(j=0;j "}$target=angular.element(html);if(!priorElement){list.after(angular.element(list[0].outerHTML));list.after($target);list.remove();taSelection.setSelectionToElementEnd($target[0])}else if(!afterElement){list.after($target);taSelection.setSelectionToElementEnd($target[0])}else{var html1="";var listTag=list[0].nodeName.toLowerCase();html1+="<"+listTag+">";for(i=0;i "+children[i].innerHTML+""}html1+=""+listTag+">";var html2="";html2+="<"+listTag+">";for(i=foundIndexes[listElements.length-1]+1;i "+children[i].innerHTML+""}html2+=""+listTag+">";list.after(angular.element(html2));list.after($target);list.after(angular.element(html1));list.remove();taSelection.setSelectionToElementEnd($target[0])}};var selectLi=function(liElement){if(/(
)$/i.test(liElement.innerHTML.trim()))taSelection.setSelectionBeforeElement(angular.element(liElement).find("br")[0]);else taSelection.setSelectionToElementEnd(liElement)};var listToList=function(listElement,newListTag){var $target=angular.element("<"+newListTag+">"+listElement[0].innerHTML+""+newListTag+">");listElement.after($target);listElement.remove();selectLi($target.find("li")[0])};var childElementsToList=function(elements,listElement,newListTag){var html="";for(var i=0;i"+elements[i].innerHTML+""+taBrowserTag("li")+">"}var $target=angular.element("<"+newListTag+">"+html+""+newListTag+">");listElement.after($target);listElement.remove();selectLi($target.find("li")[0])};var turnBlockIntoBlocks=function(element,options){for(var i=0;i "){return element}else{var $target=angular.element(options);$target[0].innerHTML=element.innerHTML;element.parentNode.insertBefore($target[0],element);element.parentNode.removeChild(element);return $target}};return function(taDefaultWrap,topNode){taDefaultWrap=taBrowserTag(taDefaultWrap);return function(command,showUI,options,defaultTagAttributes){var i,$target,html,_nodes,next,optionsTagName,selectedElement,ourSelection;var defaultWrapper=angular.element("<"+taDefaultWrap+">");try{if(taSelection.getSelection){ourSelection=taSelection.getSelection()}selectedElement=taSelection.getSelectionElement();var __h,_innerNode;if(selectedElement.tagName!==undefined){if(selectedElement.tagName.toLowerCase()==="div"&&/taTextElement.+/.test(selectedElement.id)&&ourSelection&&ourSelection.start&&ourSelection.start.offset===1&&ourSelection.end.offset===1){__h=selectedElement.innerHTML;if(/
/i.test(__h)){__h=__h.replace(/
/i,"")}if(/
/i.test(__h)){__h=__h.replace(/
/i,"")}if(/()+/i.test(__h)){__h=__.replace(/()+/i,"")}if(/<\/span>(<\/span>)+/i.test(__h)){__h=__.replace(/<\/span>(<\/span>)+/i,"")}if(/<\/span>/i.test(__h)){__h=__h.replace(/<\/span>/i,"")}_innerNode=""+__h+"";selectedElement.innerHTML=_innerNode;taSelection.setSelectionToElementEnd(selectedElement.childNodes[0]);selectedElement=taSelection.getSelectionElement()}else if(selectedElement.tagName.toLowerCase()==="span"&&ourSelection&&ourSelection.start&&ourSelection.start.offset===1&&ourSelection.end.offset===1){__h=selectedElement.innerHTML;if(/
/i.test(__h)){__h=__h.replace(/
/i,"")}if(/
/i.test(__h)){__h=__h.replace(/
/i,"")}if(/()+/i.test(__h)){__h=__.replace(/()+/i,"")}if(/<\/span>(<\/span>)+/i.test(__h)){__h=__.replace(/<\/span>(<\/span>)+/i,"")}if(/<\/span>/i.test(__h)){__h=__h.replace(/<\/span>/i,"")}_innerNode=""+__h+"";selectedElement.innerHTML=_innerNode;taSelection.setSelectionToElementEnd(selectedElement.childNodes[0]);selectedElement=taSelection.getSelectionElement()}else if(selectedElement.tagName.toLowerCase()==="p"&&ourSelection&&ourSelection.start&&ourSelection.start.offset===1&&ourSelection.end.offset===1){__h=selectedElement.innerHTML;if(/
/i.test(__h)){__h=__h.replace(/
/i,"");selectedElement.innerHTML=__h}}else if(selectedElement.tagName.toLowerCase()==="li"&&ourSelection&&ourSelection.start&&ourSelection.start.offset===ourSelection.end.offset){__h=selectedElement.innerHTML;if(/
/i.test(__h)){__h=__h.replace(/
/i,"");selectedElement.innerHTML=__h}}}}catch(e){}if(!selectedElement){return}var $selected=angular.element(selectedElement);var tagName=selectedElement&&selectedElement.tagName&&selectedElement.tagName.toLowerCase()||"";if(command.toLowerCase()==="insertorderedlist"||command.toLowerCase()==="insertunorderedlist"){var selfTag=taBrowserTag(command.toLowerCase()==="insertorderedlist"?"ol":"ul");var selectedElements=taSelection.getOnlySelectedElements();if(selectedElements.length>1&&(tagName==="ol"||tagName==="ul")){return listElementsToSelfTag($selected,selectedElements,selfTag,selfTag===tagName,taDefaultWrap)}if(tagName===selfTag){if($selected[0].childNodes.length!==selectedElements.length&&selectedElements.length===1){$selected=angular.element(selectedElements[0]);return listElementToSelfTag($selected.parent(),$selected,selfTag,true,taDefaultWrap)}else{return listToDefault($selected,taDefaultWrap)}}else if(tagName==="li"&&$selected.parent()[0].tagName.toLowerCase()===selfTag&&$selected.parent().children().length===1){return listToDefault($selected.parent(),taDefaultWrap)}else if(tagName==="li"&&$selected.parent()[0].tagName.toLowerCase()!==selfTag&&$selected.parent().children().length===1){return listToList($selected.parent(),selfTag)}else if(tagName.match(BLOCKELEMENTS)&&!$selected.hasClass("ta-bind")){if(selectedElements.length){if($selected[0].childNodes.length!==selectedElements.length&&selectedElements.length===1){$selected=angular.element(selectedElements[0]);return listElementToSelfTag($selected.parent(),$selected,selfTag,selfTag===tagName,taDefaultWrap)}}if(tagName==="ol"||tagName==="ul"){return listToList($selected,selfTag)}else{var childBlockElements=false;angular.forEach($selected.children(),function(elem){if(elem.tagName.match(BLOCKELEMENTS)){childBlockElements=true}});if(childBlockElements){return childElementsToList($selected.children(),$selected,selfTag)}else{return childElementsToList([angular.element(""+selectedElement.innerHTML+"")[0]],$selected,selfTag)}}}else if(tagName.match(BLOCKELEMENTS)){_nodes=taSelection.getOnlySelectedElements();if(_nodes.length===0){$target=angular.element("<"+selfTag+">"+selectedElement.innerHTML+" "+selfTag+">");$selected.html("");$selected.append($target)}else if(_nodes.length===1&&(_nodes[0].tagName.toLowerCase()==="ol"||_nodes[0].tagName.toLowerCase()==="ul")){if(_nodes[0].tagName.toLowerCase()===selfTag){return listToDefault(angular.element(_nodes[0]),taDefaultWrap)}else{return listToList(angular.element(_nodes[0]),selfTag)}}else{html="";var $nodes=[];for(i=0;i<_nodes.length;i++){if(_nodes[i].nodeType!==3){var $n=angular.element(_nodes[i]);if(_nodes[i].tagName.toLowerCase()==="li")continue;else if(_nodes[i].tagName.toLowerCase()==="ol"||_nodes[i].tagName.toLowerCase()==="ul"){html+=$n[0].innerHTML}else if(_nodes[i].tagName.toLowerCase()==="span"&&(_nodes[i].childNodes[0].tagName.toLowerCase()==="ol"||_nodes[i].childNodes[0].tagName.toLowerCase()==="ul")){html+=$n[0].childNodes[0].innerHTML}else{html+="<"+taBrowserTag("li")+">"+$n[0].innerHTML+""+taBrowserTag("li")+">"}$nodes.unshift($n)}}$target=angular.element("<"+selfTag+">"+html+""+selfTag+">");$nodes.pop().replaceWith($target);angular.forEach($nodes,function($node){$node.remove()})}taSelection.setSelectionToElementEnd($target[0]);return}}else if(command.toLowerCase()==="formatblock"){optionsTagName=options.toLowerCase().replace(/[<>]/gi,"");if(optionsTagName.trim()==="default"){optionsTagName=taDefaultWrap;options="<"+taDefaultWrap+">"}if(tagName==="li"){$target=$selected.parent()}else{$target=$selected}while(!$target[0].tagName||!$target[0].tagName.match(BLOCKELEMENTS)&&!$target.parent().attr("contenteditable")){$target=$target.parent();tagName=($target[0].tagName||"").toLowerCase()}if(tagName===optionsTagName){_nodes=$target.children();var hasBlock=false;for(i=0;i<_nodes.length;i++){hasBlock=hasBlock||_nodes[i].tagName.match(BLOCKELEMENTS)}if(hasBlock){$target.after(_nodes);next=$target.next();$target.remove();$target=next}else{defaultWrapper.append($target[0].childNodes);$target.after(defaultWrapper);$target.remove();$target=defaultWrapper}}else if($target.parent()[0].tagName.toLowerCase()===optionsTagName&&!$target.parent().hasClass("ta-bind")){var blockElement=$target.parent();var contents=blockElement.contents();for(i=0;i");defaultWrapper[0].innerHTML=contents[i].outerHTML;contents[i]=defaultWrapper[0]}blockElement.parent()[0].insertBefore(contents[i],blockElement[0])}blockElement.remove()}else if(tagName.match(LISTELEMENTS)){$target.wrap(options)}else{_nodes=taSelection.getOnlySelectedElements();if(_nodes.length===0){_nodes=[$target[0]]}for(i=0;i<_nodes.length;i++){if(_nodes[i].nodeType===3||!_nodes[i].tagName.match(BLOCKELEMENTS)){while(_nodes[i].nodeType===3||!_nodes[i].tagName||!_nodes[i].tagName.match(BLOCKELEMENTS)){_nodes[i]=_nodes[i].parentNode}}}_nodes=_nodes.filter(function(value,index,self){return self.indexOf(value)===index});if(_nodes.length>1){_nodes=_nodes.filter(function(value,index,self){return!(value.nodeName.toLowerCase()==="div"&&/^taTextElement/.test(value.id))})}if(angular.element(_nodes[0]).hasClass("ta-bind")){$target=angular.element(options);$target[0].innerHTML=_nodes[0].innerHTML;_nodes[0].innerHTML=$target[0].outerHTML}else if(optionsTagName==="blockquote"){html="";for(i=0;i<_nodes.length;i++){html+=_nodes[i].outerHTML}$target=angular.element(options);$target[0].innerHTML=html;_nodes[0].parentNode.insertBefore($target[0],_nodes[0]);for(i=_nodes.length-1;i>=0;i--){if(_nodes[i].parentNode)_nodes[i].parentNode.removeChild(_nodes[i])}}else if(optionsTagName==="pre"&&taSelection.getStateShiftKey()){html="";for(i=0;i<_nodes.length;i++){html+=_nodes[i].outerHTML}$target=angular.element(options);$target[0].innerHTML=html;_nodes[0].parentNode.insertBefore($target[0],_nodes[0]);for(i=_nodes.length-1;i>=0;i--){if(_nodes[i].parentNode)_nodes[i].parentNode.removeChild(_nodes[i])}}else{for(i=0;i<_nodes.length;i++){var newBlock=turnBlockIntoBlocks(_nodes[i],options);if(_nodes[i]===$target[0]){$target=angular.element(newBlock)}}}}taSelection.setSelectionToElementEnd($target[0]);$target[0].focus();return}else if(command.toLowerCase()==="createlink"){if(tagName==="a"){taSelection.getSelectionElement().href=options;return}var tagBegin='',tagEnd="",_selection=taSelection.getSelection();if(_selection.collapsed){taSelection.insertHtml(tagBegin+options+tagEnd,topNode)}else if(rangy.getSelection().getRangeAt(0).canSurroundContents()){var node=angular.element(tagBegin+tagEnd)[0];rangy.getSelection().getRangeAt(0).surroundContents(node)}return}else if(command.toLowerCase()==="inserthtml"){taSelection.insertHtml(options,topNode);return}try{$document[0].execCommand(command,showUI,options)}catch(e){}}}}]).service("taSelection",["$document","taDOM","$log",function($document,taDOM,$log){var _document=$document[0];var bShiftState;var brException=function(element,offset){if(element.tagName&&element.tagName.match(/^br$/i)&&offset===0&&!element.previousSibling){return{element:element.parentNode,offset:0}}else{return{element:element,offset:offset}}};var api={getSelection:function(){var range;try{range=rangy.getSelection().getRangeAt(0)}catch(e){return undefined}var container=range.commonAncestorContainer;var selection={start:brException(range.startContainer,range.startOffset),end:brException(range.endContainer,range.endOffset),collapsed:range.collapsed};if(container.nodeType===3){if(container.parentNode.nodeName.toLowerCase()==="div"&&/^taTextElement/.test(container.parentNode.id)){}else{container=container.parentNode}}if(container.nodeName.toLowerCase()==="div"&&/^taTextElement/.test(container.id)){selection.start.element=container.childNodes[selection.start.offset];selection.end.element=container.childNodes[selection.end.offset];selection.container=container}else{if(container.parentNode===selection.start.element||container.parentNode===selection.end.element){selection.container=container.parentNode}else{selection.container=container}}return selection},updateLeftArrowKey:function(element){var range=rangy.getSelection().getRangeAt(0);if(range&&range.collapsed){var _nodes=api.getFlattenedDom(range);if(!_nodes.findIndex)return;var _node=range.startContainer;var indexStartContainer=_nodes.findIndex(function(element,index){if(element.node===_node)return true;var _indexp=element.parents.indexOf(_node);return _indexp!==-1});var m;var nextNodeToRight;_nodes.forEach(function(n,i){n.parents.forEach(function(nn,j){})});if(indexStartContainer+1<_nodes.length){nextNodeToRight=_nodes[indexStartContainer+1].node}if(nextNodeToRight&&nextNodeToRight.textContent){m=/^\ufeff([^\ufeff]*)$/.exec(nextNodeToRight.textContent);if(m){return}}var nextNodeToLeft;if(indexStartContainer>0){nextNodeToLeft=_nodes[indexStartContainer-1].node}if(range.startOffset===0&&nextNodeToLeft){m=/^\ufeff([^\ufeff]*)$/.exec(nextNodeToLeft.textContent);if(m){api.setSelectionToElementEnd(nextNodeToLeft);return}}}},updateRightArrowKey:function(element){if(false){var range=rangy.getSelection().getRangeAt(0);if(range&&range.collapsed){var _nodes=api.getFlattenedDom(range);if(!_nodes.findIndex)return;var _node=range.startContainer;var indexStartContainer=_nodes.findIndex(function(element,index){if(element.node===_node)return true;var _indexp=element.parents.indexOf(_node);return _indexp!==-1});var _sel;var i;var m;var indexFound=_nodes.findIndex(function(n,index){if(n.textContent){var m=/^\ufeff([^\ufeff]*)$/.exec(n.textContent);if(m){return true}else{return false}}else{return false}});if(indexFound===-1){return}_node=_nodes[indexStartContainer];if(_node&&_node.textContent){m=/^\ufeff([^\ufeff]*)$/.exec(_node.textContent);if(m&&range.startOffset-1===m[1].length){return}}if(_nodes&&range.startOffset===0){indexStartContainer=_nodes.indexOf(range.startContainer);if(indexStartContainer!==-1&&indexStartContainer>0){_node=_nodes[indexStartContainer-1];if(_node.textContent){m=/\ufeff([^\ufeff]*)$/.exec(_node.textContent);if(m&&true||range.startOffset===m[1].length+1){}}}}}}},getFlattenedDom:function(range){var parent=range.commonAncestorContainer.parentNode;if(!parent){return range.commonAncestorContainer.childNodes}var nodes=Array.prototype.slice.call(parent.childNodes);var indexStartContainer=nodes.indexOf(range.startContainer);if(indexStartContainer+1 0){}else{if(parent.parentNode){parent=parent.parentNode}}nodes=[];function addNodes(_set){if(_set.node.childNodes.length){var childNodes=Array.prototype.slice.call(_set.node.childNodes);childNodes.forEach(function(n){var _t=_set.parents.slice();if(_t.slice(-1)[0]!==_set.node){_t.push(_set.node)}addNodes({parents:_t,node:n})})}else{nodes.push({parents:_set.parents,node:_set.node})}}addNodes({parents:[parent],node:parent});return nodes},getOnlySelectedElements:function(){var range=rangy.getSelection().getRangeAt(0);var container=range.commonAncestorContainer;container=container.nodeType===3?container.parentNode:container;return range.getNodes([1],function(node){return node.parentNode===container})},getAllSelectedElements:function(){var range=rangy.getSelection().getRangeAt(0);var container=range.commonAncestorContainer;container=container.nodeType===3?container.parentNode:container;var selectedNodes=range.getNodes([1],function(node){return node.parentNode===container});var innerHtml=container.innerHTML;innerHtml=innerHtml.replace(/]+>\ufeff?<\/span>/gi,"");if(innerHtml===range.toHtml()&&!(container.nodeName.toLowerCase()==="div"&&/^taTextElement/.test(container.id))){var arr=[];for(var i=selectedNodes.length;i--;arr.unshift(selectedNodes[i]));selectedNodes=arr;selectedNodes.push(container)}return selectedNodes},getSelectionElement:function(){var s=api.getSelection();if(s){return api.getSelection().container}else{return undefined}},setSelection:function(elStart,elEnd,start,end){var range=rangy.createRange();range.setStart(elStart,start);range.setEnd(elEnd,end);rangy.getSelection().setSingleRange(range)},setSelectionBeforeElement:function(el){var range=rangy.createRange();range.selectNode(el);range.collapse(true);rangy.getSelection().setSingleRange(range)},setSelectionAfterElement:function(el){var range=rangy.createRange();range.selectNode(el);range.collapse(false);rangy.getSelection().setSingleRange(range)},setSelectionToElementStart:function(el){var range=rangy.createRange();range.selectNodeContents(el);range.collapse(true);rangy.getSelection().setSingleRange(range)},setSelectionToElementEnd:function(el){var range=rangy.createRange();range.selectNodeContents(el);range.collapse(false);if(el.childNodes&&el.childNodes[el.childNodes.length-1]&&el.childNodes[el.childNodes.length-1].nodeName==="br"){range.startOffset=range.endOffset=range.startOffset-1}rangy.getSelection().setSingleRange(range)},setStateShiftKey:function(bS){bShiftState=bS},getStateShiftKey:function(){return bShiftState},insertHtml:function(html,topNode){var parent,secondParent,_childI,nodes,i,lastNode,_tempFrag;var element=angular.element(" "+html+"");var range=rangy.getSelection().getRangeAt(0);var frag=_document.createDocumentFragment();var children=element[0].childNodes;var isInline=true;if(children.length>0){nodes=[];for(_childI=0;_childI)$/i.test(range.startContainer.innerHTML)){range.selectNode(range.startContainer)}}else{isInline=true;lastNode=frag=_document.createTextNode(html)}if(isInline){range.deleteContents()}else{if(range.collapsed&&range.startContainer!==topNode){if(range.startContainer.innerHTML&&range.startContainer.innerHTML.match(/^<[^>]*>$/i)){parent=range.startContainer;if(range.startOffset===1){range.setStartAfter(parent);range.setEndAfter(parent)}else{range.setStartBefore(parent);range.setEndBefore(parent)}}else{if(range.startContainer.nodeType===3&&range.startContainer.parentNode!==topNode){parent=range.startContainer.parentNode;secondParent=parent.cloneNode();taDOM.splitNodes(parent.childNodes,parent,secondParent,range.startContainer,range.startOffset);while(!VALIDELEMENTS.test(parent.nodeName)){angular.element(parent).after(secondParent);parent=parent.parentNode;var _lastSecondParent=secondParent;secondParent=parent.cloneNode();taDOM.splitNodes(parent.childNodes,parent,secondParent,_lastSecondParent)}}else{parent=range.startContainer;secondParent=parent.cloneNode();taDOM.splitNodes(parent.childNodes,parent,secondParent,undefined,undefined,range.startOffset)}angular.element(parent).after(secondParent);range.setStartAfter(parent);range.setEndAfter(parent);if(/^(|
)$/i.test(parent.innerHTML.trim())){range.setStartBefore(parent);range.setEndBefore(parent);angular.element(parent).remove()}if(/^(|
)$/i.test(secondParent.innerHTML.trim()))angular.element(secondParent).remove();if(parent.nodeName.toLowerCase()==="li"){_tempFrag=_document.createDocumentFragment();for(i=0;i");taDOM.transferChildNodes(frag.childNodes[i],element[0]);taDOM.transferNodeAttributes(frag.childNodes[i],element[0]);_tempFrag.appendChild(element[0])}frag=_tempFrag;if(lastNode){lastNode=frag.childNodes[frag.childNodes.length-1];lastNode=lastNode.childNodes[lastNode.childNodes.length-1]}}}}else{range.deleteContents()}}range.insertNode(frag);if(lastNode){api.setSelectionToElementEnd(lastNode)}}};return api}]).service("taDOM",function(){var taDOM={getByAttribute:function(element,attribute){var resultingElements=[];var childNodes=element.children();if(childNodes.length){angular.forEach(childNodes,function(child){resultingElements=resultingElements.concat(taDOM.getByAttribute(angular.element(child),attribute))})}if(element.attr(attribute)!==undefined)resultingElements.push(element);return resultingElements},transferChildNodes:function(source,target){target.innerHTML="";while(source.childNodes.length>0)target.appendChild(source.childNodes[0]);return target},splitNodes:function(nodes,target1,target2,splitNode,subSplitIndex,splitIndex){if(!splitNode&&isNaN(splitIndex))throw new Error("taDOM.splitNodes requires a splitNode or splitIndex");var startNodes=document.createDocumentFragment();var endNodes=document.createDocumentFragment();var index=0;while(nodes.length>0&&(isNaN(splitIndex)||splitIndex!==index)&&nodes[0]!==splitNode){startNodes.appendChild(nodes[0]);index++}if(!isNaN(subSplitIndex)&&subSplitIndex>=0&&nodes[0]){startNodes.appendChild(document.createTextNode(nodes[0].nodeValue.substring(0,subSplitIndex)));nodes[0].nodeValue=nodes[0].nodeValue.substring(subSplitIndex)}while(nodes.length>0)endNodes.appendChild(nodes[0]);taDOM.transferChildNodes(startNodes,target1);taDOM.transferChildNodes(endNodes,target2)},transferNodeAttributes:function(source,target){for(var i=0;i ");source.html(viewValue);return source.text().length<=max}}}}).directive("taMinText",function(){return{restrict:"A",require:"ngModel",link:function(scope,elem,attrs,ctrl){var min=parseInt(scope.$eval(attrs.taMinText));if(isNaN(min)){throw"Min text must be an integer"}attrs.$observe("taMinText",function(value){min=parseInt(value);if(isNaN(min)){throw"Min text must be an integer"}if(ctrl.$dirty){ctrl.$validate()}});ctrl.$validators.taMinText=function(viewValue){var source=angular.element("");source.html(viewValue);return!source.text().length||source.text().length>=min}}}});angular.module("textAngular.taBind",["textAngular.factories","textAngular.DOM"]).service("_taBlankTest",[function(){return function(_blankVal){if(!_blankVal)return true;var _text_=stripHtmlToText(_blankVal);if(_text_===""){if(/ ]+>/.test(_blankVal)){return false}return true}else{return false}}}]).directive("taButton",[function(){return{link:function(scope,element,attrs){element.attr("unselectable","on");element.on("mousedown",function(e,eventData){if(eventData)angular.extend(e,eventData);e.preventDefault();return false})}}}]).directive("taBind",["taSanitize","$timeout","$document","taFixChrome","taBrowserTag","taSelection","taSelectableElements","taApplyCustomRenderers","taOptions","_taBlankTest","$parse","taDOM","textAngularManager",function(taSanitize,$timeout,$document,taFixChrome,taBrowserTag,taSelection,taSelectableElements,taApplyCustomRenderers,taOptions,_taBlankTest,$parse,taDOM,textAngularManager){return{priority:2,require:["ngModel","?ngModelOptions"],link:function(scope,element,attrs,controller){var ngModel=controller[0];var ngModelOptions=controller[1]||{};var _isContentEditable=element.attr("contenteditable")!==undefined&&element.attr("contenteditable");var _isInputFriendly=_isContentEditable||element[0].tagName.toLowerCase()==="textarea"||element[0].tagName.toLowerCase()==="input";var _isReadonly=false;var _focussed=false;var _skipRender=false;var _disableSanitizer=attrs.taUnsafeSanitizer||taOptions.disableSanitizer;var _keepStyles=attrs.taKeepStyles||taOptions.keepStyles;var _lastKey;var BLOCKED_KEYS=/^(9|19|20|27|33|34|35|36|37|38|39|40|45|112|113|114|115|116|117|118|119|120|121|122|123|144|145)$/i;var UNDO_TRIGGER_KEYS=/^(8|13|32|46|59|61|107|109|173|186|187|188|189|190|191|192|219|220|221|222)$/i;var _pasteHandler;var _defaultVal,_defaultTest;var _CTRL_KEY=1;var _META_KEY=2;var _ALT_KEY=4;var _SHIFT_KEY=8;var _ENTER_KEYCODE=13;var _SHIFT_KEYCODE=16;var _TAB_KEYCODE=9;var _LEFT_ARROW_KEYCODE=37;var _RIGHT_ARROW_KEYCODE=39;var _keyMappings=[{specialKey:"UndoKey",forbiddenModifiers:_ALT_KEY+_SHIFT_KEY,mustHaveModifiers:[_META_KEY+_CTRL_KEY],keyCode:90},{specialKey:"RedoKey",forbiddenModifiers:_ALT_KEY,mustHaveModifiers:[_META_KEY+_CTRL_KEY,_SHIFT_KEY],keyCode:90},{specialKey:"RedoKey",forbiddenModifiers:_ALT_KEY+_SHIFT_KEY,mustHaveModifiers:[_META_KEY+_CTRL_KEY],keyCode:89},{specialKey:"TabKey",forbiddenModifiers:_META_KEY+_SHIFT_KEY+_ALT_KEY+_CTRL_KEY,mustHaveModifiers:[],keyCode:_TAB_KEYCODE},{specialKey:"ShiftTabKey",forbiddenModifiers:_META_KEY+_ALT_KEY+_CTRL_KEY,mustHaveModifiers:[_SHIFT_KEY],keyCode:_TAB_KEYCODE}];function _mapKeys(event){var specialKey;_keyMappings.forEach(function(map){if(map.keyCode===event.keyCode){var netModifiers=(event.metaKey?_META_KEY:0)+(event.ctrlKey?_CTRL_KEY:0)+(event.shiftKey?_SHIFT_KEY:0)+(event.altKey?_ALT_KEY:0);if(map.forbiddenModifiers&netModifiers)return;if(map.mustHaveModifiers.every(function(modifier){return netModifiers&modifier})){specialKey=map.specialKey}}});return specialKey}if(attrs.taDefaultWrap===undefined)attrs.taDefaultWrap="p";if(attrs.taDefaultWrap===""){_defaultVal="";_defaultTest=_browserDetect.ie===undefined?"
":_browserDetect.ie>=11?"":_browserDetect.ie<=8?"
":"
"}else{_defaultVal=_browserDetect.ie===undefined||_browserDetect.ie>=11?attrs.taDefaultWrap.toLowerCase()==="br"?"
":"<"+attrs.taDefaultWrap+">
"+attrs.taDefaultWrap+">":_browserDetect.ie<=8?"<"+attrs.taDefaultWrap.toUpperCase()+">"+attrs.taDefaultWrap.toUpperCase()+">":"<"+attrs.taDefaultWrap+">"+attrs.taDefaultWrap+">";_defaultTest=_browserDetect.ie===undefined||_browserDetect.ie>=11?attrs.taDefaultWrap.toLowerCase()==="br"?"
":"<"+attrs.taDefaultWrap+">
"+attrs.taDefaultWrap+">":_browserDetect.ie<=8?"<"+attrs.taDefaultWrap.toUpperCase()+"> "+attrs.taDefaultWrap.toUpperCase()+">":"<"+attrs.taDefaultWrap+"> "+attrs.taDefaultWrap+">"}if(!ngModelOptions.$options)ngModelOptions.$options={};var _ensureContentWrapped=function(value){if(_taBlankTest(value))return value;var domTest=angular.element(""+value+"");if(domTest.children().length===0){value="<"+attrs.taDefaultWrap+">"+value+""+attrs.taDefaultWrap+">"}else{var _children=domTest[0].childNodes;var i;var _foundBlockElement=false;for(i=0;i<_children.length;i++){if(_foundBlockElement=_children[i].nodeName.toLowerCase().match(BLOCKELEMENTS))break}if(!_foundBlockElement){value="<"+attrs.taDefaultWrap+">"+value+""+attrs.taDefaultWrap+">"}else{value="";for(i=0;i<_children.length;i++){var node=_children[i];var nodeName=node.nodeName.toLowerCase();if(nodeName==="#comment"){value+="\x3c!--"+node.nodeValue+"--\x3e"}else if(nodeName==="#text"){var text=node.textContent;if(!text.trim()){value+=text}else{value+="<"+attrs.taDefaultWrap+">"+text+""+attrs.taDefaultWrap+">"}}else if(!nodeName.match(BLOCKELEMENTS)){var _subVal=node.outerHTML||node.nodeValue;if(_subVal.trim()!=="")value+="<"+attrs.taDefaultWrap+">"+_subVal+""+attrs.taDefaultWrap+">";else value+=_subVal}else{value+=node.outerHTML}}}}return value};if(attrs.taPaste){_pasteHandler=$parse(attrs.taPaste)}element.addClass("ta-bind");var _undoKeyupTimeout;scope["$undoManager"+(attrs.id||"")]=ngModel.$undoManager={_stack:[],_index:0,_max:1e3,push:function(value){if(typeof value==="undefined"||value===null||typeof this.current()!=="undefined"&&this.current()!==null&&value===this.current())return value;if(this._indexthis._max)this._stack.shift();this._index=this._stack.length-1;return value},undo:function(){return this.setToIndex(this._index-1)},redo:function(){return this.setToIndex(this._index+1)},setToIndex:function(index){if(index<0||index>this._stack.length-1){return undefined}this._index=index;return this.current()},current:function(){return this._stack[this._index]}};var _compileHtml=function(){if(_isContentEditable){return element[0].innerHTML}if(_isInputFriendly){return element.val()}throw"textAngular Error: attempting to update non-editable taBind"};var selectorClickHandler=function(event){scope.$emit("ta-element-select",this);event.preventDefault();return false};var _reApplyOnSelectorHandlers=scope["reApplyOnSelectorHandlers"+(attrs.id||"")]=function(){if(!_isReadonly)angular.forEach(taSelectableElements,function(selector){element.find(selector).off("click",selectorClickHandler).on("click",selectorClickHandler)})};var _setViewValue=function(_val,triggerUndo,skipRender){_skipRender=skipRender||false;if(typeof triggerUndo==="undefined"||triggerUndo===null)triggerUndo=true&&_isContentEditable;if(typeof _val==="undefined"||_val===null)_val=_compileHtml();if(_taBlankTest(_val)){if(ngModel.$viewValue!=="")ngModel.$setViewValue("");if(triggerUndo&&ngModel.$undoManager.current()!=="")ngModel.$undoManager.push("")}else{_reApplyOnSelectorHandlers();if(ngModel.$viewValue!==_val){ngModel.$setViewValue(_val);if(triggerUndo)ngModel.$undoManager.push(_val)}}ngModel.$render()};var _setInnerHTML=function(newval){element[0].innerHTML=newval};var _redoUndoTimeout;var _undo=scope["$undoTaBind"+(attrs.id||"")]=function(){if(!_isReadonly&&_isContentEditable){var content=ngModel.$undoManager.undo();if(typeof content!=="undefined"&&content!==null){_setInnerHTML(content);_setViewValue(content,false);if(_redoUndoTimeout)$timeout.cancel(_redoUndoTimeout);_redoUndoTimeout=$timeout(function(){element[0].focus();taSelection.setSelectionToElementEnd(element[0])},1)}}};var _redo=scope["$redoTaBind"+(attrs.id||"")]=function(){if(!_isReadonly&&_isContentEditable){var content=ngModel.$undoManager.redo();if(typeof content!=="undefined"&&content!==null){_setInnerHTML(content);_setViewValue(content,false);if(_redoUndoTimeout)$timeout.cancel(_redoUndoTimeout);_redoUndoTimeout=$timeout(function(){element[0].focus();taSelection.setSelectionToElementEnd(element[0])},1)}}};scope["updateTaBind"+(attrs.id||"")]=function(){if(!_isReadonly)_setViewValue(undefined,undefined,true)};var _sanitize=function(unsafe){return ngModel.$oldViewValue=taSanitize(taFixChrome(unsafe,_keepStyles),ngModel.$oldViewValue,_disableSanitizer)};if(element.attr("required"))ngModel.$validators.required=function(modelValue,viewValue){return!_taBlankTest(modelValue||viewValue)};ngModel.$parsers.push(_sanitize);ngModel.$parsers.unshift(_ensureContentWrapped);ngModel.$formatters.push(_sanitize);ngModel.$formatters.unshift(_ensureContentWrapped);ngModel.$formatters.unshift(function(value){return ngModel.$undoManager.push(value||"")});if(_isInputFriendly){scope.events={};if(!_isContentEditable){element.on("change blur",scope.events.change=scope.events.blur=function(){if(!_isReadonly)ngModel.$setViewValue(_compileHtml())});element.on("keydown",scope.events.keydown=function(event,eventData){if(eventData)angular.extend(event,eventData);if(event.keyCode===_TAB_KEYCODE){var start=this.selectionStart;var end=this.selectionEnd;var value=element.val();if(event.shiftKey){var _linebreak=value.lastIndexOf("\n",start),_tab=value.lastIndexOf("\t",start);if(_tab!==-1&&_tab>=_linebreak){element.val(value.substring(0,_tab)+value.substring(_tab+1));this.selectionStart=this.selectionEnd=start-1}}else{element.val(value.substring(0,start)+"\t"+value.substring(end));this.selectionStart=this.selectionEnd=start+1}event.preventDefault()}});var _repeat=function(string,n){var result="";for(var _n=0;_n "+htmlValue+"