1
0
Fork 0
This repository has been archived on 2024-06-28. You can view files and clone it, but cannot push or open issues or pull requests.
matomo-injector/lib/behave.js
2014-05-07 13:56:35 +02:00

1 line
No EOL
8.4 KiB
JavaScript

(function(e){"use strict";var t=t||function(){var e={};return{add:function(t,n){if(typeof t=="object"){var r;for(r=0;r<t.length;r++){var i=t[r];if(!e[i]){e[i]=[]}e[i].push(n)}}else{if(!e[t]){e[t]=[]}e[t].push(n)}},get:function(t){if(e[t]){return e[t]}}}}(),n=n||function(n){if(typeof String.prototype.repeat!=="function"){String.prototype.repeat=function(e){if(e<1){return""}if(e%2){return this.repeat(e-1)+this}var t=this.repeat(e/2);return t+t}}if(typeof Array.prototype.filter!=="function"){Array.prototype.filter=function(e){if(this===null){throw new TypeError}var t=Object(this),n=t.length>>>0;if(typeof e!="function"){throw new TypeError}var r=[],i=arguments[1];for(var s=0;s<n;s++){if(s in t){var o=t[s];if(e.call(i,o,s,t)){r.push(o)}}}return r}}var r={textarea:null,replaceTab:true,softTabs:true,tabSize:4,autoOpen:true,overwrite:true,autoStrip:true,autoIndent:true,fence:false},i,s,o={keyMap:[{open:'"',close:'"',canBreak:false},{open:"'",close:"'",canBreak:false},{open:"(",close:")",canBreak:false},{open:"[",close:"]",canBreak:true},{open:"{",close:"}",canBreak:true}]},u={_callHook:function(n,i){var s=t.get(n);i=typeof i=="boolean"&&i===false?false:true;if(s){if(i){var o=r.textarea,a=o.value,f=u.cursor.get(),l;for(l=0;l<s.length;l++){s[l].call(e,{editor:{element:o,text:a,levelsDeep:u.levelsDeep()},caret:{pos:f},lines:{current:u.cursor.getLine(a,f),total:u.editor.getLines(a)}})}}else{for(l=0;l<s.length;l++){s[l].call(e)}}}},defineNewLine:function(){var e=document.createElement("textarea");e.value="\n";if(e.value.length==2){s="\r\n"}else{s="\n"}},defineTabSize:function(e){if(typeof r.textarea.style.OTabSize!="undefined"){r.textarea.style.OTabSize=e;return}if(typeof r.textarea.style.MozTabSize!="undefined"){r.textarea.style.MozTabSize=e;return}if(typeof r.textarea.style.tabSize!="undefined"){r.textarea.style.tabSize=e;return}},cursor:{getLine:function(e,t){return e.substring(0,t).split("\n").length},get:function(){if(typeof document.createElement("textarea").selectionStart==="number"){return r.textarea.selectionStart}else if(document.selection){var e=0,t=r.textarea.createTextRange(),n=document.selection.createRange().duplicate(),i=n.getBookmark();t.moveToBookmark(i);while(t.moveStart("character",-1)!==0){e++}return e}},set:function(e,t){if(!t){t=e}if(r.textarea.setSelectionRange){r.textarea.focus();r.textarea.setSelectionRange(e,t)}else if(r.textarea.createTextRange){var n=r.textarea.createTextRange();n.collapse(true);n.moveEnd("character",t);n.moveStart("character",e);n.select()}},selection:function(){var e=r.textarea,t=0,n=0,i,o,a,f,l;if(typeof e.selectionStart=="number"&&typeof e.selectionEnd=="number"){t=e.selectionStart;n=e.selectionEnd}else{o=document.selection.createRange();if(o&&o.parentElement()==e){i=u.editor.get();f=i.length;a=e.createTextRange();a.moveToBookmark(o.getBookmark());l=e.createTextRange();l.collapse(false);if(a.compareEndPoints("StartToEnd",l)>-1){t=n=f}else{t=-a.moveStart("character",-f);t+=i.slice(0,t).split(s).length-1;if(a.compareEndPoints("EndToEnd",l)>-1){n=f}else{n=-a.moveEnd("character",-f);n+=i.slice(0,n).split(s).length-1}}}}return t==n?false:{start:t,end:n}}},editor:{getLines:function(e){return e.split("\n").length},get:function(){return r.textarea.value.replace(/\r/g,"")},set:function(e){r.textarea.value=e}},fenceRange:function(){if(typeof r.fence=="string"){var e=u.editor.get(),t=u.cursor.get(),n=0,i=e.indexOf(r.fence),s=0;while(i>=0){s++;if(t<i+n){break}n+=i+r.fence.length;e=e.substring(i+r.fence.length);i=e.indexOf(r.fence)}if(n<t&&i+n>t&&s%2===0){return true}return false}else{return true}},isEven:function(e,t){return t%2},levelsDeep:function(){var e=u.cursor.get(),t=u.editor.get();var n=t.substring(0,e),r=0,i,s;for(i=0;i<n.length;i++){for(s=0;s<o.keyMap.length;s++){if(o.keyMap[s].canBreak){if(o.keyMap[s].open==n.charAt(i)){r++}if(o.keyMap[s].close==n.charAt(i)){r--}}}}var a=0,f=["'",'"'];for(i=0;i<o.keyMap.length;i++){if(o.keyMap[i].canBreak){for(s in f){a+=n.split(f[s]).filter(u.isEven).join("").split(o.keyMap[i].open).length-1}}}var l=r-a;return l>=0?l:0},deepExtend:function(e,t){for(var n in t){if(t[n]&&t[n].constructor&&t[n].constructor===Object){e[n]=e[n]||{};u.deepExtend(e[n],t[n])}else{e[n]=t[n]}}return e},addEvent:function(t,n,r){if(t.addEventListener){t.addEventListener(n,r,false)}else if(t.attachEvent){t.attachEvent("on"+n,r)}},removeEvent:function(t,n,r){if(t.addEventListener){t.removeEventListener(n,r,false)}else if(t.attachEvent){t.detachEvent("on"+n,r)}},preventDefaultEvent:function(e){if(e.preventDefault){e.preventDefault()}else{e.returnValue=false}}},a={tabKey:function(e){if(!u.fenceRange()){return}if(e.keyCode==9){u.preventDefaultEvent(e);var t=true;u._callHook("tab:before");var n=u.cursor.selection(),r=u.cursor.get(),s=u.editor.get();if(n){var o=n.start;while(o--){if(s.charAt(o)=="\n"){n.start=o+1;break}}var a=s.substring(n.start,n.end),f=a.split("\n"),l;if(e.shiftKey){for(l=0;l<f.length;l++){if(f[l].substring(0,i.length)==i){f[l]=f[l].substring(i.length)}}a=f.join("\n");u.editor.set(s.substring(0,n.start)+a+s.substring(n.end));u.cursor.set(n.start,n.start+a.length)}else{for(l in f){f[l]=i+f[l]}a=f.join("\n");u.editor.set(s.substring(0,n.start)+a+s.substring(n.end));u.cursor.set(n.start,n.start+a.length)}}else{var c=s.substring(0,r),h=s.substring(r),p=c+i+h;if(e.shiftKey){if(s.substring(r-i.length,r)==i){p=s.substring(0,r-i.length)+h;u.editor.set(p);u.cursor.set(r-i.length)}}else{u.editor.set(p);u.cursor.set(r+i.length);t=false}}u._callHook("tab:after")}return t},enterKey:function(e){if(!u.fenceRange()){return}if(e.keyCode==13){u.preventDefaultEvent(e);u._callHook("enter:before");var t=u.cursor.get(),n=u.editor.get(),r=n.substring(0,t),a=n.substring(t),f=r.charAt(r.length-1),l=a.charAt(0),c=u.levelsDeep(),h="",p="",d,v;if(!c){d=1}else{while(c--){h+=i}h=h;d=h.length+1;for(v=0;v<o.keyMap.length;v++){if(o.keyMap[v].open==f&&o.keyMap[v].close==l){p=s}}}var m=r+s+h+p+h.substring(0,h.length-i.length)+a;u.editor.set(m);u.cursor.set(t+d);u._callHook("enter:after")}},deleteKey:function(e){if(!u.fenceRange()){return}if(e.keyCode==8){u.preventDefaultEvent(e);u._callHook("delete:before");var t=u.cursor.get(),n=u.editor.get(),r=n.substring(0,t),i=n.substring(t),s=r.charAt(r.length-1),a=i.charAt(0),f;if(u.cursor.selection()===false){for(f=0;f<o.keyMap.length;f++){if(o.keyMap[f].open==s&&o.keyMap[f].close==a){var l=n.substring(0,t-1)+n.substring(t+1);u.editor.set(l);u.cursor.set(t-1);return}}var l=n.substring(0,t-1)+n.substring(t);u.editor.set(l);u.cursor.set(t-1)}else{var c=u.cursor.selection(),l=n.substring(0,c.start)+n.substring(c.end);u.editor.set(l);u.cursor.set(t)}u._callHook("delete:after")}}},f={openedChar:function(e,t){u.preventDefaultEvent(t);u._callHook("openChar:before");var n=u.cursor.get(),i=u.editor.get(),s=i.substring(0,n),o=i.substring(n),a=s+e.open+e.close+o;r.textarea.value=a;u.cursor.set(n+1);u._callHook("openChar:after")},closedChar:function(e,t){var n=u.cursor.get(),r=u.editor.get(),i=r.substring(n,n+1);if(i==e.close){u.preventDefaultEvent(t);u._callHook("closeChar:before");u.cursor.set(u.cursor.get()+1);u._callHook("closeChar:after");return true}return false}},l={filter:function(e){if(!u.fenceRange()){return}var t=e.which||e.keyCode;if(t==39||t==40&&e.which===0){return}var n=String.fromCharCode(t),i;for(i=0;i<o.keyMap.length;i++){if(o.keyMap[i].close==n){var s=r.overwrite&&f.closedChar(o.keyMap[i],e);if(!s&&o.keyMap[i].open==n&&r.autoOpen){f.openedChar(o.keyMap[i],e)}}else if(o.keyMap[i].open==n&&r.autoOpen){f.openedChar(o.keyMap[i],e)}}},listen:function(){if(r.replaceTab){u.addEvent(r.textarea,"keydown",a.tabKey)}if(r.autoIndent){u.addEvent(r.textarea,"keydown",a.enterKey)}if(r.autoStrip){u.addEvent(r.textarea,"keydown",a.deleteKey)}u.addEvent(r.textarea,"keypress",l.filter);u.addEvent(r.textarea,"keydown",function(){u._callHook("keydown")});u.addEvent(r.textarea,"keyup",function(){u._callHook("keyup")})}},c=function(e){if(e.textarea){u._callHook("init:before",false);u.deepExtend(r,e);u.defineNewLine();if(r.softTabs){i=" ".repeat(r.tabSize)}else{i=" ";u.defineTabSize(r.tabSize)}l.listen();u._callHook("init:after",false)}};this.destroy=function(){u.removeEvent(r.textarea,"keydown",a.tabKey);u.removeEvent(r.textarea,"keydown",a.enterKey);u.removeEvent(r.textarea,"keydown",a.deleteKey);u.removeEvent(r.textarea,"keypress",l.filter)};c(n)};if(typeof module!=="undefined"&&module.exports){module.exports=n}if(typeof ender==="undefined"){this.Behave=n;this.BehaveHooks=t}if(typeof define==="function"&&define.amd){define("behave",[],function(){return n})}}).call(this)