UNPKG

dropkiq-ui

Version:

Liquid Expressions Simplified

1 lines 7.51 kB
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var BoundElement=function(){function t(t,e,n){this.element=t,this.window=e,this.document=n,this.isContenteditable=this.element.isContentEditable,this.isCodeMirror="object"==typeof this.element.doc,this.isAceEditor="object"==typeof this.element.renderer,this.cachedOnBlurRange=null}return t.prototype.setFocus=function(){if(this.isCodeMirror)this.element.focus();else if(this.isAceEditor)this.element.focus();else{var t=new Event("focus");this.element.dispatchEvent(t)}},t.prototype.caretPositionWithDocumentInfo=function(){return this.isCodeMirror?this.caretPositionWithDocumentInfoForCodeMirror():this.isAceEditor?this.caretPositionWithDocumentInfoForAceEditor():this.isContenteditable?this.caretPositionWithDocumentInfoForContenteditable():this.caretPositionWithDocumentInfoForInput()},t.prototype.setCaretPosition=function(t,e,n,o,i){var r=t-i.length;if(this.isCodeMirror){var s=this.element.getValue(),l=(c=this.getRowAndColumnForPosition(s,r)).column+e,a=c.column+n;this.element.doc.setSelection({line:c.row,ch:l},{line:c.row,ch:a})}else if(this.isAceEditor){var c;s=this.element.getValue(),l=(c=this.getRowAndColumnForPosition(s,r)).column+e,a=c.column+n;this.element.getSelection().setSelectionRange({start:{row:c.row,column:l},end:{row:c.row,column:a}},!1)}else if(this.isContenteditable){var h=this.document.createRange(),d=this.window.getSelection();h.setStart(o,e-i.length),h.setEnd(o,n-i.length),d.removeAllRanges(),d.addRange(h)}else{var u=r+e,p=r+n;this.element.setSelectionRange(u,p)}},t.prototype.getRowAndColumnForPosition=function(t,e){var n=t.slice(0,e).split(/\r?\n/),o=n.length-1;return{row:o,column:n[o].length}},t.prototype.getCaretPosition=function(){if(this.isCodeMirror){var t=this.element.cursorCoords(!0),e=this.element.display.lineDiv,n=this.window.getComputedStyle?getComputedStyle(e):e.currentStyle,o=this.element.getCursor(!0).line+1;return{top:this.element.heightAtLine(o),left:t.left+parseInt(n.borderLeftWidth)}}if(this.isAceEditor){var i=this.element.renderer.$cursorLayer.element.getElementsByClassName("ace_cursor")[0].getBoundingClientRect();return{top:i.top+i.height,left:i.left}}if(this.isContenteditable){var r=this.window.getSelection().getRangeAt(0);return this.getContentEditableCaretPosition(r.startOffset)}var s=this.element.selectionStart;return this.getTextAreaOrInputUnderlinePosition(this.element,s,!1)},t.prototype.insertTextAtCaret=function(t){if(this.isCodeMirror){var e=this.element.getCursor(!0);this.element.doc.replaceRange(t,e,e)}else{if(!this.isAceEditor)return this.isContenteditable?this.insertTextForContenteditable(t):this.insertTextForInput(t);e=this.element.getCursorPosition();this.element.session.insert(e,t)}},t.prototype.setExpiringCachedOnBlurRange=function(t){var e=this;this.isContenteditable&&(this.cachedOnBlurRange=t,setTimeout((function(){e.cachedOnBlurRange=null}),200))},t.prototype.insertTextForContenteditable=function(t){var e,n;e=this.window.getSelection(),this.cachedOnBlurRange?(n=this.cachedOnBlurRange,this.cachedOnBlurRange=null):n=e.getRangeAt(0),n.deleteContents();var o=this.document.createTextNode(t);return n.insertNode(o),n.selectNodeContents(o),n.collapse(!1),e.removeAllRanges(),e.addRange(n),o},t.prototype.insertTextForInput=function(t){var e=this.element,n=e.scrollTop,o=e.selectionStart,i=e.value.substring(0,o),r=e.value.substring(e.selectionEnd,e.value.length);return e.value=i+t+r,o+=t.length,e.selectionStart=o,e.selectionEnd=o,e.focus(),e.scrollTop=n,e},t.prototype.caretPositionWithDocumentInfoForInput=function(){var t=this.element.selectionStart,e=this.element.value;return{leftText:e.slice(0,t),selectionStart:t,rightText:e.slice(t,e.length),allText:e}},t.prototype.caretPositionWithDocumentInfoForContenteditable=function(){var t=this.window.getSelection().getRangeAt(0),e=t.cloneRange();e.setStart(this.element,0),e.setEnd(t.startContainer,t.startOffset);var n=this.captureRangeText(e),o=t.cloneRange();o.selectNodeContents(this.element),o.setStart(t.startContainer,t.startOffset);var i=this.captureRangeText(o);return{leftText:n,selectionStart:n.length,rightText:i,allText:n+i}},t.prototype.caretPositionWithDocumentInfoForAceEditor=function(){var t=this.element.getValue(),e=this.element.getCursorPosition(),n=e.row,o=e.column;return this.caretPositionWithDocumentInfoForValueRowAndColumn(t,n,o)},t.prototype.caretPositionWithDocumentInfoForCodeMirror=function(){var t=this.element.getValue(),e=this.element.getCursor(!0),n=e.line,o=e.ch;return this.caretPositionWithDocumentInfoForValueRowAndColumn(t,n,o)},t.prototype.caretPositionWithDocumentInfoForValueRowAndColumn=function(t,e,n){var o=[],i=[];t.split(/\r?\n/).forEach((function(t,r){r<e?o.push(t):r===e?(o.push(t.slice(0,n)),i.push(t.slice(n,t.length))):r>e&&i.push(t)}));var r=o.join("\n"),s=i.join("\n");return{leftText:r,selectionStart:r.length,rightText:s,allText:r+s}},t.prototype.captureRangeText=function(t){var e=t.cloneContents(),n=this.document.createElement("div");n.setAttribute("style","position: absolute; left: -10000px; top: -10000px"),n.setAttribute("contenteditable","true"),n.appendChild(e),this.document.body.appendChild(n);var o=n.innerText;return n.remove(),o},t.prototype.getTextAreaOrInputUnderlinePosition=function(t,e,n){var o=null!==this.window.mozInnerScreenX,i=this.document.createElement("div");i.id="input-textarea-caret-position-mirror-div",this.document.body.appendChild(i);var r=i.style,s=this.window.getComputedStyle?getComputedStyle(t):t.currentStyle;r.whiteSpace="pre-wrap","INPUT"!==t.nodeName&&(r.wordWrap="break-word"),r.position="absolute",r.visibility="hidden",["direction","boxSizing","width","height","overflowX","overflowY","borderTopWidth","borderRightWidth","borderBottomWidth","borderLeftWidth","paddingTop","paddingRight","paddingBottom","paddingLeft","fontStyle","fontVariant","fontWeight","fontStretch","fontSize","fontSizeAdjust","lineHeight","fontFamily","textAlign","textTransform","textIndent","textDecoration","letterSpacing","wordSpacing"].forEach((function(t){r[t]=s[t]})),o?(r.width=parseInt(s.width)-2+"px",t.scrollHeight>parseInt(s.height)&&(r.overflowY="scroll")):r.overflow="hidden",i.textContent=t.value.substring(0,e),"INPUT"===t.nodeName&&(i.textContent=i.textContent.replace(/\s/g," "));var l=this.document.createElement("span");l.textContent=t.value.substring(e)||".",i.appendChild(l);var a,c,h=t.getBoundingClientRect(),d=this.document.documentElement,u=(this.window.pageXOffset||d.scrollLeft)-(d.clientLeft||0),p=(this.window.pageYOffset||d.scrollTop)-(d.clientTop||0);a=h.top,c=h.left;var f={top:a+p+l.offsetTop+parseInt(s.borderTopWidth)+parseInt(s.fontSize)-t.scrollTop,left:c+u+l.offsetLeft+parseInt(s.borderLeftWidth)};return this.document.body.removeChild(i),f},t.prototype.getContentEditableCaretPosition=function(t){var e,n,o="sel_"+(new Date).getTime()+"_"+Math.random().toString().substr(2),i=this.window.getSelection(),r=i.getRangeAt(0);(n=this.document.createRange()).setStart(i.anchorNode,t),n.setEnd(i.anchorNode,t),n.collapse(!1),(e=this.document.createElement("span")).id=o,e.appendChild(this.document.createTextNode("\ufeff")),n.insertNode(e),i.removeAllRanges(),i.addRange(r);var s=e.getBoundingClientRect(),l=this.document.documentElement,a=(this.window.pageXOffset||l.scrollLeft)-(l.clientLeft||0),c=(this.window.pageYOffset||l.scrollTop)-(l.clientTop||0),h={left:s.left+a,top:s.top+e.offsetHeight+c};return e.parentNode.removeChild(e),h},t}();exports.BoundElement=BoundElement;