react-web-code-editor
Version:
A Simple and code-style Customizable web code editor with React
2 lines (1 loc) • 3.04 kB
JavaScript
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("./bracketMap.js"),e=function(){function e(t,e,r,n,a){this.textArea=t,this.currentText=e,this.caretStart=r,this.caretEnd=n,this.indent=a}return e.prototype.executeTextInput=function(t){var e=this.caretStart,r=this.caretEnd,n=this.getNewText(t);return this.setNewText(n,e+1,r+1),n},e.prototype.executeEnterAction=function(){var t=this.getCurrentLineIndentation(),e=this.indent,r=this.caretStart;if(this.isCaretSurroundedByBracket()){var n=this.getNewText("\n".concat(" ".repeat(t+e),"\n").concat(" ".repeat(t))),a=r+1+t+e;return this.setNewText(n,a,a),n}var i=this.getNewText("\n".concat(" ".repeat(t))),c=r+1+t;return this.setNewText(i,c,c),i},e.prototype.executeSpaceAction=function(){var t=this.caretStart,e=this.caretEnd,r=this.getNewText(" ");return this.setNewText(this.getNewText(" "),t+1,e+1),r},e.prototype.executeTabAction=function(){var t=this,e=t.indent,r=t.caretStart,n=t.caretEnd,a=this.getNewText(" ".repeat(e));return this.setNewText(a,r+e,n+e),a},e.prototype.executeBracketCloseAction=function(){var t=this.caretStart,e=this.caretEnd;this.setCaretPosition(t+1,e+1)},e.prototype.executeBracketOpenAction=function(t){var e=this.caretStart,r=this.caretEnd,n=this.getParenthesis(t),a=this.getNewText(n);return this.setNewText(a,e+1,r+1),a},e.prototype.refreshTextAreaHeight=function(){this.textArea.style.height="auto",this.textArea.style.height="".concat(this.textArea.scrollHeight,"px")},e.prototype.setNewText=function(t,e,r){void 0===e&&(e=this.caretStart+1),void 0===r&&(r=this.caretEnd+1),this.setValue(t),this.setCaretPosition(e,r)},e.prototype.isParenthesisPaired=function(t){var e=this,r=e.currentText,n=e.caretStart,a=e.caretEnd;return r[n-1]&&r[a]&&this.isCaretSurroundedByBracket(t)||r[n-1]===t},e.prototype.setValue=function(t){this.textArea.value=t},e.prototype.getCurrentLineIndentation=function(){for(var t=this.caretStart-1,e=0;t>=0;){var r=this.currentText[t];if("\n"===r)break;" "===r?e+=1:e=0,t-=1}return e},e.prototype.getNewText=function(t){var e=this.currentText.substring(0,this.caretStart),r=this.currentText.substring(this.caretEnd);return"".concat(e).concat(t).concat(r)},e.prototype.setCaretPosition=function(t,e){this.textArea.selectionStart=t,this.textArea.selectionEnd=e},e.prototype.getTextInBracket=function(){return this.currentText.substring(this.caretStart,this.caretEnd)},e.prototype.isCaretSurroundedByBracket=function(e){void 0===e&&(e=this.currentText[this.caretEnd]);var r=this.currentText,n=this.caretStart;return t.checkBracketIsPaired(r[n-1],e)},e.prototype.getParenthesis=function(e){var r="";switch(this.caretStart!==this.caretEnd&&(r=this.getTextInBracket()),e){case t.BRACE_OPEN:r="{".concat(r,"}");break;case t.PARENTHESIS_OPEN:r="(".concat(r,")");break;case t.BRACKET_OPEN:r="[".concat(r,"]");break;case t.CHEVRON_OPEN:r="<".concat(r,">");break;case t.QUOTE:r="'".concat(r,"'");break;case t.DOUBLE_QUOTE:r='"'.concat(r,'"');break;case t.BACKTICK:r="`".concat(r,"`")}return r},e}();exports.default=e;