actuel-inactuel/site/plugins/code-editor/index.js

15 lines
40 KiB
JavaScript
Raw Normal View History

(function(){"use strict";function T(){return T=Object.assign||function(l){for(var e=1;e<arguments.length;e++){var a=arguments[e];for(var u in a)Object.prototype.hasOwnProperty.call(a,u)&&(l[u]=a[u])}return l},T.apply(this,arguments)}var re=13,ae=9,ie=8,se=89,B=90,oe=77,W=57,Y=219,G=222,U=192,le=27,Q=100,ue=3e3,de=typeof window<"u"&&navigator&&/Win/i.test(navigator.platform),q=typeof window<"u"&&navigator&&/(Mac|iPhone|iPod|iPad)/i.test(navigator.platform),ce={props:{lineNumbers:{type:Boolean,default:!1},autoStyleLineNumbers:{type:Boolean,default:!0},readonly:{type:Boolean,default:!1},value:{type:String,default:""},highlight:{type:Function,required:!0},tabSize:{type:Number,default:2},insertSpaces:{type:Boolean,default:!0},ignoreTabKey:{type:Boolean,default:!1},placeholder:{type:String,default:""}},data:function(){return{capture:!0,history:{stack:[],offset:-1},lineNumbersHeight:"20px",codeData:""}},watch:{value:{immediate:!0,handler:function(e){e?this.codeData=e:this.codeData=""}},content:{immediate:!0,handler:function(){var e=this;this.lineNumbers&&this.$nextTick(function(){e.setLineNumbersHeight()})}},lineNumbers:function(){var e=this;this.$nextTick(function(){e.styleLineNumbers(),e.setLineNumbersHeight()})}},computed:{isEmpty:function(){return this.codeData.length===0},content:function(){var e=this.highlight(this.codeData)+"<br />";return e},lineNumbersCount:function(){var e=this.codeData.split(/\r\n|\n/).length;return e}},mounted:function(){this._recordCurrentState(),this.styleLineNumbers()},methods:{setLineNumbersHeight:function(){this.lineNumbersHeight=getComputedStyle(this.$refs.pre).height},styleLineNumbers:function(){if(!(!this.lineNumbers||!this.autoStyleLineNumbers)){var e=this.$refs.pre,a=this.$el.querySelector(".prism-editor__line-numbers"),u=window.getComputedStyle(e);this.$nextTick(function(){var h="border-top-left-radius",y="border-bottom-left-radius";if(a){a.style[h]=u[h],a.style[y]=u[y],e.style[h]="0",e.style[y]="0";var c=["background-color","margin-top","padding-top","font-family","font-size","line-height"];c.forEach(function(r){a.style[r]=u[r]}),a.style["margin-bottom"]="-"+u["padding-top"]}})}},_recordCurrentState:function(){var e=this.$refs.textarea;if(e){var a=e.value,u=e.selectionStart,h=e.selectionEnd;this._recordChange({value:a,selectionStart:u,selectionEnd:h})}},_getLines:function(e,a){return e.substring(0,a).split(`
`)},_applyEdits:function(e){var a=this.$refs.textarea,u=this.history.stack[this.history.offset];u&&a&&(this.history.stack[this.history.offset]=T({},u,{selectionStart:a.selectionStart,selectionEnd:a.selectionEnd})),this._recordChange(e),this._updateInput(e)},_recordChange:function(e,a){a===void 0&&(a=!1);var u=this.history,h=u.stack,y=u.offset;if(h.length&&y>-1){this.history.stack=h.slice(0,y+1);var c=this.history.stack.length;if(c>Q){var r=c-Q;this.history.stack=h.slice(r,c),this.history.offset=Math.max(this.history.offset-r,0)}}var d=Date.now();if(a){var g=this.history.stack[this.history.offset];if(g&&d-g.timestamp<ue){var x,S,_=/[^a-z0-9]([a-z0-9]+)$/i,F=(x=this._getLines(g.value,g.selectionStart).pop())===null||x===void 0?void 0:x.match(_),A=(S=this._getLines(e.value,e.selectionStart).pop())===null||S===void 0?void 0:S.match(_);if(F&&A&&A[1].startsWith(F[1])){this.history.stack[this.history.offset]=T({},e,{timestamp:d});return}}}this.history.stack.push(T({},e,{timestamp:d})),this.history.offset++},_updateInput:function(e){var a=this.$refs.textarea;a&&(a.value=e.value,a.selectionStart=e.selectionStart,a.selectionEnd=e.selectionEnd,this.$emit("input",e.value))},handleChange:function(e){var a=e.target,u=a.value,h=a.selectionStart,y=a.selectionEnd;this._recordChange({value:u,selectionStart:h,selectionEnd:y},!0),this.$emit("input",u)},_undoEdit:function(){var e=this.history,a=e.stack,u=e.offset,h=a[u-1];h&&(this._updateInput(h),this.history.offset=Math.max(u-1,0))},_redoEdit:function(){var e=this.history,a=e.stack,u=e.offset,h=a[u+1];h&&(this._updateInput(h),this.history.offset=Math.min(u+1,a.length-1))},handleKeyDown:function(e){var a=this.tabSize,u=this.insertSpaces,h=this.ignoreTabKey;if(!(this.$listeners.keydown&&(this.$emit("keydown",e),e.defaultPrevented))){e.keyCode===le&&(e.target.blur(),this.$emit("blur",e));var y=e.target,c=y.value,r=y.selectionStart,d=y.selectionEnd,g=(u?" ":" ").repeat(a);if(e.keyCode===ae&&!h&&this.capture)if(e.preventDefault(),e.shiftKey){var x=this._getLines(c,r),S=x.length-1,_=this._getLines(c,d).length-1,F=c.split(`
`).map(function(k,K){return K>=S&&K<=_&&k.startsWith(g)?k.substring(g.length):k}).join(`
`);if(c!==F){var A=x[S];this._applyEdits({value:F,selectionStart:A.startsWith(g)?r-g.length:r,selectionEnd:d-(c.length-F.length)})}}else if(r!==d){var $=this._getLines(c,r),z=$.length-1,P=this._getLines(c,d).length-1,n=$[z];this._applyEdits({value:c.split(`
`).map(function(k,K){return K>=z&&K<=P?g+k:k}).join(`
`),selectionStart:/\S/.test(n)?r+g.length:r,selectionEnd:d+g.length*(P-z+1)})}else{var t=r+g.length;this._applyEdits({value:c.substring(0,r)+g+c.substring(d),selectionStart:t,selectionEnd:t})}else if(e.keyCode===ie){var i=r!==d,s=c.substring(0,r);if(s.endsWith(g)&&!i){e.preventDefault();var o=r-g.length;this._applyEdits({value:c.substring(0,r-g.length)+c.substring(d),selectionStart:o,selectionEnd:o})}}else if(e.keyCode===re){if(r===d){var p=this._getLines(c,r).pop(),b=p==null?void 0:p.match(/^\s+/);if(b&&b[0]){e.preventDefault();var f=`
`+b[0],v=r+f.length;this._applyEdits({value:c.substring(0,r)+f+c.substring(d),selectionStart:v,selectionEnd:v})}}}else if(e.keyCode===W||e.keyCode===Y||e.keyCode===G||e.keyCode===U){var m;e.keyCode===W&&e.shiftKey?m=["(",")"]:e.keyCode===Y?e.shiftKey?m=["{","}"]:m=["[","]"]:e.keyCode===G?e.shiftKey?m=['"','"']:m=["'","'"]:e.keyCode===U&&!e.shiftKey&&(m=["`","`"]),r!==d&&m&&(e.preventDefault(),this._applyEdits({value:c.substring(0,r)+m[0]+c.substring(r,d)+m[1]+c.substring(d),selectionStart:r,selectionEnd:d+2}))}else(q?e.metaKey&&e.keyCode===B:e.ctrlKey&&e.keyCode===B)&&!e.shiftKey&&!e.altKey?(e.preventDefault(),this._undoEdit()):(q?e.metaKey&&e.keyCode===B&&e.shiftKey:de?e.ctrlKey&&e.keyCode===se:e.ctrlKey&&e.keyCode===B&&e.shiftKey)&&!e.altKey?(e.preventDefault(),this._redoEdit()):e.keyCode===oe&&e.ctrlKey&&(!q||e.shiftKey)&&(e.preventDefault(),this.capture=!this.capture)}}},render:function(e){var a=this,u=e("div",{attrs:{class:"prism-editor__line-width-calc",style:"height: 0px; visibility: hidden; pointer-events: none;"}},"999"),h=e("div",{staticClass:"prism-editor__line-numbers",style:{"min-height":this.lineNumbersHeight},attrs:{"aria-hidden":"true"}},[u,Array.from(Array(this.lineNumbersCount).keys()).map(function(d,g){return e("div",{attrs:{class:"prism-editor__line-number token comment"}},""+ ++g)})]),y=e("textarea",{ref:"textarea",on:{input:this.handleChange,keydown:this.handleKeyDown,click:function(g){a.$emit("click",g)},keyup:function(g){a.$emit("keyup",g)},focus:function(g){a.$emit("focus",g)},blur:function(g){a.$emit("blur",g)}},staticClass:"prism-editor__textarea",class:{"prism-editor__textarea--empty":this.isEmpty},attrs:{spellCheck:"false",autocapitalize:"off",autocomplete:"off",autocorrect:"off","data-gramm":"false",placeholder:this.placeholder,"data-testid":"textarea",readonly:this.readonly},domProps:{value:this.codeData}}),c=e("pre",{ref:"pre",staticClass:"prism-editor__editor",attrs:{"data-testid":"preview"},domProps:{innerHTML:this.content}}),r=e("div",{staticClass:"prism-editor__container"},[y,c]);return e("div",{staticClass:"prism-editor-wrapper"},[this.lineNumbers&&h,r])}},J=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{},X={exports:{}};(function(l){var e=typeof window<"u"?window:typeof WorkerGlobalScope<"u"&&self instanceof WorkerGlobalScope?self:{};/**
2025-02-18 10:16:52 +01:00
* Prism: Lightweight, robust, elegant syntax highlighting
*
* @license MIT <https://opensource.org/licenses/MIT>
* @author Lea Verou <https://lea.verou.me>
* @namespace
* @public
*/var a=function(u){var h=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,y=0,c={},r={manual:u.Prism&&u.Prism.manual,disableWorkerMessageHandler:u.Prism&&u.Prism.disableWorkerMessageHandler,util:{encode:function n(t){return t instanceof d?new d(t.type,n(t.content),t.alias):Array.isArray(t)?t.map(n):t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/\u00a0/g," ")},type:function(n){return Object.prototype.toString.call(n).slice(8,-1)},objId:function(n){return n.__id||Object.defineProperty(n,"__id",{value:++y}),n.__id},clone:function n(t,i){i=i||{};var s,o;switch(r.util.type(t)){case"Object":if(o=r.util.objId(t),i[o])return i[o];s={},i[o]=s;for(var p in t)t.hasOwnProperty(p)&&(s[p]=n(t[p],i));return s;case"Array":return o=r.util.objId(t),i[o]?i[o]:(s=[],i[o]=s,t.forEach(function(b,f){s[f]=n(b,i)}),s);default:return t}},getLanguage:function(n){for(;n;){var t=h.exec(n.className);if(t)return t[1].toLowerCase();n=n.parentElement}return"none"},setLanguage:function(n,t){n.className=n.className.replace(RegExp(h,"gi"),""),n.classList.add("language-"+t)},currentScript:function(){if(typeof document>"u")return null;if(document.currentScript&&document.currentScript.tagName==="SCRIPT")return document.currentScript;try{throw new Error}catch(s){var n=(/at [^(\r\n]*\((.*):[^:]+:[^:]+\)$/i.exec(s.stack)||[])[1];if(n){var t=document.getElementsByTagName("script");for(var i in t)if(t[i].src==n)return t[i]}return null}},isActive:function(n,t,i){for(var s="no-"+t;n;){var o=n.classList;if(o.contains(t))return!0;if(o.contains(s))return!1;n=n.parentElement}return!!i}},languages:{plain:c,plaintext:c,text:c,txt:c,extend:function(n,t){var i=r.util.clone(r.languages[n]);for(var s in t)i[s]=t[s];return i},insertBefore:function(n,t,i,s){s=s||r.languages;var o=s[n],p={};for(var b in o)if(o.hasOwnProperty(b)){if(b==t)for(var f in i)i.hasOwnProperty(f)&&(p[f]=i[f]);i.hasOwnProperty(b)||(p[b]=o[b])}var v=s[n];return s[n]=p,r.languages.DFS(r.languages,function(m,k){k===v&&m!=n&&(this[m]=p)}),p},DFS:function n(t,i,s,o){o=o||{};var p=r.util.objId;for(var b in t)if(t.hasOwnProperty(b)){i.call(t,b,t[b],s||b);var f=t[b],v=r.util.type(f);v==="Object"&&!o[p(f)]?(o[p(f)]=!0,n(f,i,null,o)):v==="Array"&&!o[p(f)]&&(o[p(f)]=!0,n(f,i,b,o))}}},plugins:{},highlightAll:function(n,t){r.highlightAllUnder(document,n,t)},highlightAllUnder:function(n,t,i){var s={callback:i,container:n,selector:'code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'};r.hooks.run("before-highlightall",s),s.elements=Array.prototype.slice.apply(s.container.querySelectorAll(s.selector)),r.hooks.run("before-all-elements-highlight",s);for(var o=0,p;p=s.elements[o++];)r.highlightElement(p,t===!0,s.callback)},highlightElement:function(n,t,i){var s=r.util.getLanguage(n),o=r.languages[s];r.util.setLanguage(n,s);var p=n.parentElement;p&&p.nodeName.toLowerCase()==="pre"&&r.util.setLanguage(p,s);var b=n.textContent,f={element:n,language:s,grammar:o,code:b};function v(k){f.highlightedCode=k,r.hooks.run("before-insert",f),f.element.innerHTML=f.highlightedCode,r.hooks.run("after-highlight",f),r.hooks.run("complete",f),i&&i.call(f.element)}if(r.hooks.run("before-sanity-check",f),p=f.element.parentElement,p&&p.nodeName.toLowerCase()==="pre"&&!p.hasAttribute("tabindex")&&p.setAttribute("tabindex","0"),!f.code){r.hooks.run("complete",f),i&&i.call(f.element);return}if(r.hooks.run("before-highlight",f),!f.grammar){v(r.util.encode(f.code));return}if(t&&u.Worker){var m=new Worker(r.filename);m.onmessage=function(k){v(k.data)},m.postMessage(JSON.stringify({language:f.language,code:f.code,immediateClose:!0}))}else v(r.highlight(f.code,f.grammar,f.language))},highlight:function(n,t,i){var s={code:n,grammar:t,language:i};if(r.hooks.run("before-tokenize",s),!s.grammar)throw new Error('The language "'+s.language+'" has no grammar.');return s.tokens=r.tokenize(s.code,s.grammar),r.hooks.run("after-tokenize",s),d.stringify(r.util.encode(s.tokens),s.language)},tokenize:function(n,t){var i=t.rest;if(i){for(var s in i)t[s]=i[s];delete t.rest}var o=new S;return _(o,o.head,n),x(n,o,t,o.head,0