-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathauto-close-brackets.min.js
More file actions
1 lines (1 loc) · 1.38 KB
/
auto-close-brackets.min.js
File metadata and controls
1 lines (1 loc) · 1.38 KB
1
codeInput.plugins.AutoCloseBrackets=class extends codeInput.Plugin{bracketPairs=[];bracketsOpenedStack=[];constructor(a={"(":")","[":"]","{":"}",'"':"\""}){super([]),this.bracketPairs=a}afterElementsAdded(a){let b=a.textareaElement;b.addEventListener("keydown",b=>{this.checkBackspace(a,b)}),b.addEventListener("beforeinput",b=>{this.checkBrackets(a,b)})}checkBrackets(a,b){if(0<this.bracketsOpenedStack.length&&b.data==this.bracketsOpenedStack[this.bracketsOpenedStack.length-1][0]&&b.data==a.textareaElement.value[a.textareaElement.selectionStart])a.textareaElement.selectionStart=a.textareaElement.selectionEnd+=1,this.bracketsOpenedStack.pop(),b.preventDefault();else if(b.data in this.bracketPairs){let c=this.bracketPairs[b.data];this.bracketsOpenedStack.push([c,a.textareaElement.selectionStart]),document.execCommand("insertText",!1,c),a.textareaElement.selectionStart=a.textareaElement.selectionEnd-=1}}checkBackspace(a,b){"Backspace"==b.key&&a.textareaElement.selectionStart==a.textareaElement.selectionEnd&&0<this.bracketsOpenedStack.length&&this.bracketsOpenedStack[this.bracketsOpenedStack.length-1][1]+1==a.textareaElement.selectionStart&&a.textareaElement.value[a.textareaElement.selectionStart]==this.bracketsOpenedStack[this.bracketsOpenedStack.length-1][0]&&(a.textareaElement.selectionEnd=a.textareaElement.selectionStart+1,a.textareaElement.selectionStart-=1,this.bracketsOpenedStack.pop())}};