UNPKG

tab-text

Version:

Make the textarea support Tab indentation.

8 lines (7 loc) 2.63 kB
var TabText=function(f){"use strict";function m(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n<t;n++)r[n]=e[n];return r}function T(e,t){var n=typeof Symbol<"u"&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=K(e))||t&&e&&typeof e.length=="number"){n&&(e=n);var r=0,a=function(){};return{s:a,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(u){throw u},f:a}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var o,l=!0,i=!1;return{s:function(){n=n.call(e)},n:function(){var u=n.next();return l=u.done,u},e:function(u){i=!0,o=u},f:function(){try{l||n.return==null||n.return()}finally{if(i)throw o}}}}function K(e,t){if(e){if(typeof e=="string")return m(e,t);var n={}.toString.call(e).slice(8,-1);return n==="Object"&&e.constructor&&(n=e.constructor.name),n==="Map"||n==="Set"?Array.from(e):n==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?m(e,t):void 0}}var b=" ";const L={setTabValue:S,useTab:w,onKeyDown:y};function S(e){b=e}function w(e){var t=typeof e=="string"?document.querySelector(e):e;if(!t)throw new Error("Target not exist");if(t.tagName!=="TEXTAREA")throw new Error("Only support textarea");t.addEventListener("keydown",y)}function y(e){O(this,e,b)}function O(e,t,n){var r=n.length;if(t.code==="Tab"){t.preventDefault();var a=p(e),o=a.startLineIndex,l=a.start,i=a.end,u=a.lineText.split(` `);if(t.shiftKey){var E=!0,s=T(u),A;try{for(s.s();!(A=s.n()).done;){var c=A.value;c.startsWith(n)?(e.selectionStart=o,e.selectionEnd=o+r,document.execCommand("delete",!1),E&&c.startsWith(n+n)&&(l-=r),i-=r,o+=c.length-r+1):o+=c.length+1,E=!1}}catch(g){s.e(g)}finally{s.f()}e.selectionStart=l,e.selectionEnd=i;return}if(u.length===1){h(n);return}l+=r;var v=T(u),I;try{for(v.s();!(I=v.n()).done;){var C=I.value;e.selectionStart=e.selectionEnd=o,h(n),o+=r+C.length+1,i+=r}}catch(g){v.e(g)}finally{v.f()}e.selectionStart=l,e.selectionEnd=i}else if(t.code==="Enter"&&!t.ctrlKey){for(var j=p(e),M=j.lineText.split(` `)[0],D=` `,d=0;M.substring(d,d+r)===n;)D+=n,d+=r;d>0&&(h(D),t.preventDefault())}}function h(e){e&&document.execCommand("insertText",!1,e)}function p(e){var t=e.selectionStart,n=e.selectionEnd,r="",a=e.value;r=a.substring(t,n);var o=a.substring(0,t),l=o.lastIndexOf(` `),i=l+1;return{start:t,end:n,text:r,lineText:a.substring(i,n),line:r.split(` `).length,startLineIndex:i}}return f.default=L,f.onKeyDown=y,f.setTabValue=S,f.useTab=w,Object.defineProperties(f,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}}),f}({});