-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathoncode.js
1 lines (1 loc) · 19.7 KB
/
oncode.js
1
var __spreadArrays=this&&this.__spreadArrays||function(){for(var e=0,t=0,r=arguments.length;t<r;t++)e+=arguments[t].length;var a=Array(e),i=0;for(t=0;t<r;t++)for(var o=arguments[t],s=0,n=o.length;s<n;s++,i++)a[i]=o[s];return a},languages={js:{colors:[{regex:{string:"(var|const|let|if|else|document|window|do|forEach|for|return|switch|try|catch|function|continue|debugger|break|while|true|null|undefined|false|new|await|async|of)(?=( |;|\\.|{|}|\\=|\\(|\\)))(?!(| )<\\/(.*)>)",flags:"gi"},class:"||general"},{regex:{string:"('(([a-zA-Z\\.,!\"§$%&/()-=?\\[\\]#`_ ])*?)')",flags:"gi"},class:"||strings"},{regex:{string:'(`([a-zA-Z\\.,!"§$%&/()-=?\\[\\]#`_ ]*?)`)',flags:"gi"},class:"||strings"},{regex:{string:'("([a-zA-Z\\.,!"§$%&/()-=?\\[\\]#`_ ]*?)")',flags:"gi"},class:"||strings"},{regex:{string:"((\\.([a-zA-Z0-9]*))\\()",flags:"gi"},class:"||functions"},{regex:{string:"([\\(\\)])",flags:"gi"},class:"||functions"},{regex:{string:"([{}\\[\\]])",flags:"g"},class:"||brackets"},{regex:{string:"(\\/\\*((.|\\n|\\r)*)\\*\\/|\\/\\/(.*))",flags:"g"},class:"||comments"}],suggestions:__spreadArrays(["const","let","for","white","of","new","document","Document","String","Number","Array","Object"],Object.getOwnPropertyNames(Document.prototype).filter(function(e){return!e.includes("queryCommand")}),Object.getOwnPropertyNames(HTMLElement.prototype),Object.getOwnPropertyNames(String.prototype),Object.getOwnPropertyNames(Number.prototype),Object.getOwnPropertyNames(Array.prototype),Object.getOwnPropertyNames(Object.prototype)),variableDeclarers:["const","let","var"]},html:{colors:[{regex:{string:"([a-z]*=(.*?)(?=>))",flags:"g"},class:"||attributes"},{regex:{string:"(<(/|)[a-zA-Z0-9]*)",flags:"g"},class:"||innerBrackets"},{regex:{string:"(>)",flags:"g"},class:"||lesserOrGreaterBrackets"},{regex:{string:"(<)",flags:"g"},class:"||lesserOrGreaterBrackets"}],suggestions:["a","abbr","acronym","address","applet","area","article","aside","audio","b","base","basefont","bdi","bdo","big","blockquote","body","br","button","canvas","caption","center","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","dir","div","dl","dt","em","embed","fieldset","figcaption","figure","font","footer","form","frame","frameset","h1 to h6","head","header","hr","html","i","iframe","img","input","ins","kbd","label","legend","li","link","main","map","mark","meta","meter","nav","noframes","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rp","rt","ruby","s","samp","script","section","select","small","source","span","strike","strong","style","sub","summary","sup","svg","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","tt","u","ul","var","video","wbr","accept","accept-charset","accesskey","action","align","alt","async","autocomplete","autofocus","autoplay","autosave","bgcolor","border","buffered","challenge","charset","checked","cite","class","code","codebase","color","cols","colspan","content","contenteditable","contextmenu","controls","coords","crossorigin","data","data-*","datetime","default","defer","dir","dirname","disabled","download","draggable","dropzone","enctype","for","form","formaction","headers","height","hidden","high","href","hreflang","http-equiv","icon","id","integrity","ismap","itemprop","keytype","kind","label","lang","language","list","loop","low","manifest","max","maxlength","media","method","min","multiple","muted","name","novalidate","open","optimum","pattern","ping","placeholder","poster","preload","radiogroup","readonly","rel","required","reversed","rows","rowspan","sandbox","scope","scoped","seamless","selected","shape","size","sizes","slot","span","spellcheck","src","srcdoc","srclang","srcset","start","step","style","summary","tabindex","target","title","type","value","width","wrap"]},css:{colors:[{regex:{string:"([{}])",flags:"g"},class:"||brackets"},{regex:{string:"([a-zA-Z0-9-]*:)",flags:"g"},class:"||selectors"},{regex:{string:"(#[a-zA-Z0-9]*)(?=(;| |\\r|\\n))",flags:"g"},class:"||numbers"}],suggestions:["align-content","align-items","align-self","all","animation","animation-delay","animation-direction","animation-duration","animation-fill-mode","animation-iteration-count","animation-name","animation-play-state","animation-timing-function","backface-visibility","background","background-attachment","background-blend-mode","background-clip","background-color","background-image","background-origin","background-position","background-repeat","background-size","border","border-bottom","border-bottom-color","border-bottom-left-radius","border-bottom-right-radius","border-bottom-style","border-bottom-width","border-collapse","border-color","border-image","border-image-outset","border-image-repeat","border-image-slice","border-image-source","border-image-width","border-left","border-left-color","border-left-style","border-left-width","border-radius","border-right","border-right-color","border-right-style","border-right-width","border-spacing","border-style","border-top","border-top-color","border-top-left-radius","border-top-right-radius","border-top-style","border-top-width","border-width","bottom","box-decoration-break","box-shadow","box-sizing","caption-side","caret-color","@charset","clear","clip","color","column-count","column-fill","column-gap","column-rule","column-rule-color","column-rule-style","column-rule-width","column-span","column-width","columns","content","counter-increment","counter-reset","cursor","direction","display","empty-cells","filter","flex","flex-basis","flex-direction","flex-flow","flex-grow","flex-shrink","flex-wrap","float","font","@font-face","font-family","font-kerning","font-size","font-size-adjust","font-stretch","font-style","font-variant","font-weight","grid","grid-area","grid-auto-columns","grid-auto-flow","grid-auto-rows","grid-column","grid-column-end","grid-column-gap","grid-column-start","grid-gap","grid-row","grid-row-end","grid-row-gap","grid-row-start","grid-template","grid-template-areas","grid-template-columns","grid-template-rows","hanging-punctuation","height","hyphens","@import","isolation","justify-content","@keyframes","left","letter-spacing","line-height","list-style","list-style-image","list-style-position","list-style-type","margin","margin-bottom","margin-left","margin-right","margin-top","max-height","max-width","@media","min-height","min-width","mix-blend-mode","object-fit","object-position","opacity","order","outline","outline-color","outline-offset","outline-style","outline-width","overflow","overflow-x","overflow-y","padding","padding-bottom","padding-left","padding-right","padding-top","page-break-after","page-break-before","page-break-inside","perspective","perspective-origin","pointer-events","position","quotes","resize","right","scroll-behavior","tab-size","table-layout","text-align","text-align-last","text-decoration","text-decoration-color","text-decoration-line","text-decoration-style","text-indent","text-justify","text-overflow","text-shadow","text-transform","top","transform","transform-origin","transform-style","transition","transition-delay","transition-duration","transition-property","transition-timing-function","unicode-bidi","direction","user-select","vertical-align","visibility","white-space","width","word-break","word-spacing","word-wrap","writing-mode","z-index"]}},OnCode=function(){function e(e,t){var r=this;this.tabCharacter=" ",this.isAdviserOpen=!1,this.base=e,this.initialHTML=this.base.innerHTML,this.language=t,this.currentTabOffset=0,this.openedAdviserByInteraction=!0,this.editor=document.createElement("div"),this.editor.setAttribute("contenteditable","true"),this.editor.setAttribute("spellchecking","false"),this.editor.dataset.language=t,this.editor.dataset.editor="",this.editor.innerHTML=this.base.innerHTML,this.base.innerHTML="",this.base.appendChild(this.editor),this.highlights=document.createElement("div"),this.highlights.dataset.highlights="",this.base.appendChild(this.highlights),this.adviser=document.createElement("div"),this.adviser.dataset.adviser="",this.base.appendChild(this.adviser),setInterval(function(){r.colorCode()},50),setInterval(function(){r.setOffset()},250),this.editor.addEventListener("keyup",this.handleAdviserBehavior.bind(this),!0),this.base.addEventListener("keydown",this.handleKeys.bind(this),!0)}return e.prototype.unCode=function(){this.base.innerHTML=this.initialHTML},e.prototype.getCode=function(){return this.editor.innerText},e.prototype.getSuggestions=function(e,t){var r,a=this,i=void 0===t?{}:t,o=i.object,s=void 0===o?null:o,n=i.showOnlyGoodMatching,d=void 0!==n&&n,c=languages[this.language].suggestions.reduce(function(e,t){return e.includes(t)?e:__spreadArrays(e,[t])},[]);s&&window[s]&&Object.getOwnPropertyNames(window[s])&&c.unshift.apply(c,Object.getOwnPropertyNames(window[s]));var l=c.filter(function(t){return t===e}),g=c.filter(function(t){return t.startsWith(e)&&-1===l.indexOf(t)}),h=d?[]:c.filter(function(t){return t.includes(e)&&-1===g.indexOf(t)}),u=null===(r=languages[this.language].variableDeclarers)||void 0===r?void 0:r.map(function(e){var t;return null===(t=a.editor.innerText.match(new RegExp(e+" ([a-zA-Z0-9]*)","g")))||void 0===t?void 0:t.map(function(t){return t.replace(e,"").trim()})}).flat().filter(function(t){return t&&(t===e||t.startsWith(e))});return __spreadArrays(u,l,g,h).reduce(function(e,t){return e.includes(t)?e:__spreadArrays(e,[t])},[])},e.prototype.insertSuggestion=function(e){var t=this;this.editor.focus(),this.adviser.innerHTML="";var r=e.innerText,a=e.dataset.focusword;if(0!==r.length){var i=window.getSelection(),o=i.getRangeAt(0),s=document.createTextNode(r);o.insertNode(s),o.setStartAfter(s),o.setEndAfter(s),i.removeAllRanges(),i.addRange(o),this.editor.innerHTML=this.editor.innerHTML.replace(a+r,"<span data-inserted>"+r+"</span>"),o.setStartAfter(this.editor.querySelector("[data-inserted]")),o.setEndAfter(this.editor.querySelector("[data-inserted]")),i.removeAllRanges(),i.addRange(o);var n=document.createTextNode("");o.insertNode(n),o.setStartAfter(n),o.setEndAfter(n),i.removeAllRanges(),i.addRange(o),this.editor.querySelector("[data-inserted]").outerHTML=this.editor.querySelector("[data-inserted]").innerHTML,setTimeout(function(){t.isAdviserOpen=!1},10)}},e.prototype.showSuggestions=function(e){var t,r=this,a=(void 0===e?{}:e).askedForSuggestions,i=void 0===a||a;this.isAdviserOpen=!1,this.openedAdviserByInteraction=i;var o=document.getSelection().getRangeAt(0).getBoundingClientRect(),s=window.getSelection().getRangeAt(0).startContainer.textContent.substring(0,window.getSelection().getRangeAt(0).startOffset),n=s.match(/([a-zA-Z]*)\.(\w+)$/)&&s.match(/([a-zA-Z]*)\.(\w+)$/)[0]&&s.match(/([a-zA-Z]*)\.(\w+)$/)[0].split(".")?s.match(/([a-zA-Z]*)\.(\w+)$/)[0].split(".")[0]:null,d=s.match(/([a-zA-Z-]*)$/g)?s.match(/([a-zA-Z-]*)$/g)[0]:"",c=this.getSuggestions(d,{object:n,showOnlyGoodMatching:!i});if(0!==o.left&&0!==o.top){if(c.length>7&&!i||!i&&"No results"===c[0])return this.adviser.innerHTML="",void(this.isAdviserOpen=!1);this.isAdviserOpen=!0,this.adviser.style.left=o.left+"px",this.adviser.style.top=o.top+"px",this.adviser.innerHTML="",c.map(function(e){return r.adviser.innerHTML+='<a data-focusword="'+d+'">'+e+"</a>"}),null===(t=this.adviser.querySelector("a"))||void 0===t||t.setAttribute("data-active","")}},e.prototype.getCharactersBeforeCursor=function(e){var t=(void 0===e?{}:e).escapeElementTags,r=void 0!==t&&t;try{return r?window.getSelection().getRangeAt(0).startContainer.textContent.substring(0,window.getSelection().getRangeAt(0).startOffset+1).replace(/</g,"<").replace(/>/g,">"):window.getSelection().getRangeAt(0).startContainer.textContent.substring(0,window.getSelection().getRangeAt(0).startOffset+1)}catch(e){}},e.prototype.getCharactersBehindCursor=function(){var e=window.getSelection(),t=e.getRangeAt(0),r=document.createElement("span");r.setAttribute("data-cursorposition",""),t.insertNode(r),t.setStartAfter(r),t.setEndAfter(r),e.removeAllRanges(),e.addRange(t);var a=this.editor.innerHTML.split("</span>")[1].split("\n")?this.editor.innerHTML.split("</span>")[1].split("\n")[0]:this.editor.innerHTML.split("</span>")[1],i=document.createTextNode("");return t.insertNode(i),t.setStartAfter(i),t.setEndAfter(i),e.removeAllRanges(),e.addRange(t),this.editor.querySelector("[data-cursorposition]").outerHTML=this.editor.querySelector("[data-cursorposition]").innerHTML,a},e.prototype.colorCode=function(){var e=this.editor.innerText.replace(/</g,"<").replace(/>/g,">");languages[this.language].colors.map(function(t){var r=t.regex.replacement||"$1";e=e.replace(new RegExp(t.regex.string,t.regex.flags),'<span class="'+t.class+'">'+r+"</span>")}),this.highlights.innerHTML=""+e},e.prototype.handleAdviserBehavior=function(e){e.code.includes("Key")&&!e.ctrlKey?this.showSuggestions({askedForSuggestions:!1}):this.openedAdviserByInteraction||"ArrowDown"===e.code||"ArrowUp"===e.code||(this.adviser.innerHTML="",this.isAdviserOpen=!1)},e.prototype.handleEditorSpecificKeys=function(e){switch(e.key){case"{":(t=(s=window.getSelection()).getRangeAt(0)).insertNode(document.createTextNode("}")),document.getSelection().modify("move","backward","character");break;case"[":(t=(s=window.getSelection()).getRangeAt(0)).insertNode(document.createTextNode("]")),document.getSelection().modify("move","backward","character");break;case"(":document.execCommand("insertHTML",!1,")"),document.getSelection().modify("move","backward","character");break;case")":if(!this.getCharactersBeforeCursor().endsWith(")"))break;e.preventDefault(),document.getSelection().modify("move","forward","character");break;case"`":document.execCommand("insertHTML",!1,"`"),document.getSelection().modify("move","backward","character");break;case"'":document.execCommand("insertHTML",!1,"'"),document.getSelection().modify("move","backward","character");break;case'"':document.execCommand("insertHTML",!1,'"'),document.getSelection().modify("move","backward","character");break;case">":if(!e.shiftKey||"html"!==this.language)return;var t=(s=window.getSelection()).getRangeAt(0),r=this.getCharactersBeforeCursor().match("\n")&&!this.getCharactersBeforeCursor().endsWith("\n")?this.getCharactersBeforeCursor().split("\n")[this.getCharactersBeforeCursor().split("\n").length-1].match(/<([a-zA-Z0-9]*)/)[0].replace(/[ <>]/g,""):this.getCharactersBeforeCursor().match("\n")?this.getCharactersBeforeCursor().split("\n")[this.getCharactersBeforeCursor().split("\n").length-2].match(/<([a-zA-Z0-9]*)/)[0].replace(/[ <>]/g,""):this.getCharactersBeforeCursor().match(/<([a-zA-Z0-9]*)/)[0].replace(/[ <>]/g,""),a=document.createTextNode("</"+r+">");t.insertNode(a),t.setStartBefore(a),t.setEndBefore(a),s.removeAllRanges(),s.addRange(t),document.getSelection().modify("move","backward","character"),document.getSelection().modify("move","forward","character");break;case"Tab":e.preventDefault();t=(s=document.getSelection()).getRangeAt(0);if(e.shiftKey){var i=document.createElement("span");i.setAttribute("data-cursorposition",""),t.insertNode(i),t.setStartAfter(i),t.setEndAfter(i),s.removeAllRanges(),s.addRange(t),this.editor.innerHTML=this.editor.innerHTML.replace(" <span data-cursorposition","<span data-cursorposition"),t.setStartBefore(this.editor.querySelector("[data-cursorposition]")),t.setEndBefore(this.editor.querySelector("[data-cursorposition]")),s.removeAllRanges(),s.addRange(t);var o=document.createTextNode("");return t.insertNode(o),t.setStartAfter(o),t.setEndAfter(o),s.removeAllRanges(),s.addRange(t),document.getSelection().modify("move","backward","character"),document.getSelection().modify("move","forward","character"),void(this.editor.querySelector("[data-cursorposition]").outerHTML=this.editor.querySelector("[data-cursorposition]").innerHTML)}document.execCommand("insertHTML",!1,this.tabCharacter);break;case" ":if(!e.ctrlKey||"Space"!==e.code)return;this.showSuggestions();break;case"ArrowDown":case"ArrowUp":this.currentTabOffset=0;break;case"Enter":e.preventDefault();t=(s=document.getSelection()).getRangeAt(0);var s,n=this.tabCharacter.repeat(this.currentTabOffset);if(this.getCharactersBeforeCursor().match(/(\(([a-zA-Z]*)|\(\((.*)) => {$/)){var d=this.getCharactersBehindCursor();document.execCommand("insertHTML",!1,"\n<span data-spacebetween></span>\n"+n+"});REPLACE-"),this.editor.innerHTML=this.editor.innerHTML.replace("REPLACE-"+d,""),t.setStartAfter(this.editor.querySelector("[data-spacebetween]")),t.setEndAfter(this.editor.querySelector("[data-spacebetween]"));o=document.createTextNode(this.tabCharacter+n);return this.editor.insertBefore(o,this.editor.querySelector("[data-spacebetween]")),t.setStartAfter(o),t.setEndAfter(o),s.removeAllRanges(),s.addRange(t),document.getSelection().modify("move","backward","character"),document.getSelection().modify("move","forward","character"),void(this.editor.querySelector("[data-spacebetween]").outerHTML=this.editor.querySelector("[data-spacebetween]").innerHTML)}if(this.getCharactersBeforeCursor().endsWith("{")||this.getCharactersBeforeCursor().endsWith("[")||this.getCharactersBeforeCursor().match(/<([a-zA-Z]*?)>$/)){d=this.getCharactersBehindCursor();document.execCommand("insertHTML",!1,"\n<span data-spacebetween></span>\n"+n+d+"REPLACE-"),this.editor.innerHTML=this.editor.innerHTML.replace("REPLACE-"+d,""),t.setStartAfter(this.editor.querySelector("[data-spacebetween]")),t.setEndAfter(this.editor.querySelector("[data-spacebetween]"));o=document.createTextNode(this.tabCharacter+n);return this.editor.insertBefore(o,this.editor.querySelector("[data-spacebetween]")),t.setStartAfter(o),t.setEndAfter(o),s.removeAllRanges(),s.addRange(t),document.getSelection().modify("move","backward","character"),document.getSelection().modify("move","forward","character"),void(this.editor.querySelector("[data-spacebetween]").outerHTML=this.editor.querySelector("[data-spacebetween]").innerHTML)}document.execCommand("insertHTML",!1,"\n"+n+"​"),document.getSelection().modify("move","backward","character")}},e.prototype.handleKeys=function(e){var t=!1;switch(e.code){case"Enter":case"Tab":if(!this.isAdviserOpen)break;return e.preventDefault(),this.insertSuggestion(this.adviser.querySelector("[data-active]")),void(t=!0);case"ArrowUp":if(!this.isAdviserOpen)break;e.preventDefault();var r=Array.from(this.adviser.children).indexOf(this.adviser.querySelector("a[data-active]"));if(!this.adviser.children[r-1])return;return this.adviser.querySelectorAll("a").forEach(function(e){return e.removeAttribute("data-active")}),this.adviser.children[r-1].setAttribute("data-active",""),void(t=!0);case"ArrowDown":if(!this.isAdviserOpen)break;e.preventDefault();r=Array.from(this.adviser.children).indexOf(this.adviser.querySelector("a[data-active]"));if(!this.adviser.children[r+1])return;return this.adviser.querySelectorAll("a").forEach(function(e){return e.removeAttribute("data-active")}),this.adviser.children[r+1].setAttribute("data-active",""),void(t=!0)}!t&&this.openedAdviserByInteraction&&(this.adviser.innerHTML="",this.isAdviserOpen=!1),(!t&&e.target.dataset.adviser||e.target.hasAttribute("data-editor"))&&this.handleEditorSpecificKeys(e)},e.prototype.setOffset=function(){if(this.getCharactersBeforeCursor()){var e=this.getCharactersBeforeCursor({escapeElementTags:!0}).replace(/([()\[\]"'`])/g,"\\$1"),t=this.getCharactersBeforeCursor().startsWith("\n")||this.getCharactersBeforeCursor().match(" ")||!this.editor.innerHTML.match(new RegExp("\n(.*)"+e))?this.getCharactersBeforeCursor().match("\n")&&!this.getCharactersBeforeCursor().endsWith("\n")?this.getCharactersBeforeCursor().split("\n")[this.getCharactersBeforeCursor().split("\n").length-1].replace(/[a-zA-Z{}\[\]()](.*)/g,""):this.getCharactersBeforeCursor().match("\n")?this.getCharactersBeforeCursor().split("\n")[this.getCharactersBeforeCursor().split("\n").length-2].replace(/[a-zA-Z{}\[\]()](.*)/g,""):this.getCharactersBeforeCursor().replace(/[a-zA-Z{}\[\]()](.*)/g,""):this.editor.innerHTML.match(new RegExp("\n(.*)"+e))[0].replace(/ /g," ");this.currentTabOffset=t.match(/\s{4}/g)?t.match(/\s{4}/g).length:0}},e}();