Flat file database editor and browser with web interface
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
rocket-inv/templates/static/taggle.min.js

1 lines
13 KiB

!function(e,s){"use strict";var i="Taggle";"function"==typeof define&&define.amd?define([],function(){var t=s();return e[i]=t}):"object"==typeof module&&module.exports?module.exports=e[i]=s():e[i]=s()}(this,function(){"use strict";function t(){}var s={additionalTagClasses:"",allowDuplicates:!1,saveOnBlur:!1,clearOnBlur:!0,duplicateTagClass:"",containerFocusClass:"active",focusInputOnContainerClick:!0,hiddenInputName:"taggles[]",tags:[],delimeter:",",delimiter:"",attachTagId:!1,allowedTags:[],disallowedTags:[],trimTags:!0,maxTags:null,tabIndex:1,placeholder:"Enter tags...",submitKeys:[188,9,13],preserveCase:!1,inputFormatter:t,tagFormatter:t,onBeforeTagAdd:t,onTagAdd:t,onBeforeTagRemove:function(){return!0},onTagRemove:t};function i(t){for(var e=t,s=1,i=arguments.length;s<i;s++){var n=arguments[s];for(var a in n)n.hasOwnProperty(a)&&(e[a]=n[a])}return e}function h(t,e,s){t.addEventListener?t.addEventListener(e,s,!1):t.attachEvent?t.attachEvent("on"+e,s):t["on"+e]=s}function o(t,e,s){t.removeEventListener?t.removeEventListener(e,s,!1):t.detachEvent?t.detachEvent("on"+e,s):t["on"+e]=null}function n(t){return t.replace(/^\s+|\s+$/g,"")}function l(t,e){window.attachEvent&&!window.addEventListener?t.innerText=e:t.textContent=e}function e(t,e){this.settings=i({},s,e),this.measurements={container:{rect:null,style:null,padding:null}},this.container=t,this.tag={values:[],elements:[]},this.list=document.createElement("ul"),this.inputLi=document.createElement("li"),this.input=document.createElement("input"),this.sizer=document.createElement("div"),this.pasting=!1,this.placeholder=null,this.data=null,this.settings.placeholder&&(this.placeholder=document.createElement("span")),"string"==typeof t&&(this.container=document.getElementById(t)),this._id=0,this._closeEvents=[],this._closeButtons=[],this._setMeasurements(),this._setupTextarea(),this._attachEvents()}return e.prototype._setMeasurements=function(){this.measurements.container.rect=this.container.getBoundingClientRect(),this.measurements.container.style=window.getComputedStyle(this.container);var t=this.measurements.container.style,e=parseInt(t["padding-left"]||t.paddingLeft,10),s=parseInt(t["padding-right"]||t.paddingRight,10),i=parseInt(t["border-left-width"]||t.borderLeftWidth,10),n=parseInt(t["border-right-width"]||t.borderRightWidth,10);this.measurements.container.padding=e+s+i+n},e.prototype._setupTextarea=function(){var t;if(this.list.className="taggle_list",this.input.type="text",this.input.style.paddingLeft=0,this.input.style.paddingRight=0,this.input.className="taggle_input",this.input.tabIndex=this.settings.tabIndex,this.sizer.className="taggle_sizer",this.settings.tags.length)for(var e=0,s=this.settings.tags.length;e<s;e++){var i=this._createTag(this.settings.tags[e],this.tag.values.length);this.list.appendChild(i)}this.placeholder&&(this.placeholder.style.opacity=0,this.placeholder.classList.add("taggle_placeholder"),this.container.appendChild(this.placeholder),l(this.placeholder,this.settings.placeholder),this.settings.tags.length||this._showPlaceholder());var n=this.settings.inputFormatter(this.input);n&&(this.input=n),this.inputLi.appendChild(this.input),this.list.appendChild(this.inputLi),this.container.appendChild(this.list),this.container.appendChild(this.sizer),t=window.getComputedStyle(this.input).fontSize,this.sizer.style.fontSize=t},e.prototype._attachEvents=function(){var t=this;if(this._eventsAttached)return!1;return this._eventsAttached=!0,this.settings.focusInputOnContainerClick&&(this._handleContainerClick=function(){t.input.focus()}.bind(this),h(this.container,"click",this._handleContainerClick)),this._handleFocus=this._focusInput.bind(this),this._handleBlur=this._blurEvent.bind(this),this._handleKeydown=this._keydownEvents.bind(this),this._handleKeyup=this._keyupEvents.bind(this),h(this.input,"focus",this._handleFocus),h(this.input,"blur",this._handleBlur),h(this.input,"keydown",this._handleKeydown),h(this.input,"keyup",this._handleKeyup),!0},e.prototype._detachEvents=function(){if(!this._eventsAttached)return!1;var s=this;return this._eventsAttached=!1,o(this.container,"click",this._handleContainerClick),o(this.input,"focus",this._handleFocus),o(this.input,"blur",this._handleBlur),o(this.input,"keydown",this._handleKeydown),o(this.input,"keyup",this._handleKeyup),this._closeButtons.forEach(function(t,e){o(t,"click",s._closeEvents[e])}),!0},e.prototype._fixInputWidth=function(){var t,e,s,i,n;this._setMeasurements(),this._setInputWidth(),e=this.input.getBoundingClientRect(),t=(t=(s=this.measurements.container.rect).width)||s.right-s.left,i=e.left-s.left,n=this.measurements.container.padding,this._setInputWidth(Math.floor(t-i-n))},e.prototype._canAdd=function(t,e){if(!e)return!1;var s=this.settings.maxTags;if(null!==s&&s<=this.getTagValues().length)return!1;if(!1===this.settings.onBeforeTagAdd(t,e))return!1;if(!this.settings.allowDuplicates&&this._hasDupes(e))return!1;var i=this.settings.preserveCase,n=this.settings.allowedTags;if(n.length&&!this._tagIsInArray(e,n,i))return!1;var a=this.settings.disallowedTags;return!a.length||!this._tagIsInArray(e,a,i)},e.prototype._tagIsInArray=function(t,e,s){return s?-1!==e.indexOf(t):-1!==[].slice.apply(e).map(function(t){return t.toLowerCase()}).indexOf(t)},e.prototype._add=function(h,t,l){var u=this,e=t||"",s=this.settings.delimiter||this.settings.delimeter;"string"!=typeof t&&(e=this.input.value,this.settings.trimTags&&(e[0]===s&&(e=e.replace(s,"")),e=n(e))),e.split(s).map(function(t){return u.settings.trimTags&&(t=n(t)),u._formatTag(t)}).forEach(function(t){if(u._canAdd(h,t)){var e,s,i,n=u.tag.values.length,a=(e=l||n,s=0,i=n,Math.min(Math.max(e,s),i)),r=u._createTag(t,a),o=u.list.children[a];u.list.insertBefore(r,o),t=u.tag.values[a],u.settings.onTagAdd(h,t),u.input.value="",u._fixInputWidth(),u._focusInput()}})},e.prototype._checkLastTag=function(t){t=t||window.event;var e=this.container.querySelectorAll(".taggle"),s=e[e.length-1],i="taggle_hot",n=this.input.classList.contains("taggle_back");""!==this.input.value||8!==t.keyCode||n?s.classList.contains(i)&&s.classList.remove(i):s.classList.contains(i)?(this.input.classList.add("taggle_back"),this._remove(s,t),this._fixInputWidth(),this._focusInput()):s.classList.add(i)},e.prototype._setInputWidth=function(t){this.input.style.width=(t||10)+"px"},e.prototype._hasDupes=function(t){var e,s=this.tag.values.indexOf(t),i=this.container.querySelector(".taggle_list");if(this.settings.duplicateTagClass)for(var n=0,a=(e=i.querySelectorAll("."+this.settings.duplicateTagClass)).length;n<a;n++)e[n].classList.remove(this.settings.duplicateTagClass);return-1<s&&(this.settings.duplicateTagClass&&i.childNodes[s].classList.add(this.settings.duplicateTagClass),!0)},e.prototype._isConfirmKey=function(t){var e=!1;return-1<this.settings.submitKeys.indexOf(t)&&(e=!0),e},e.prototype._focusInput=function(){this._fixInputWidth(),this.container.classList.contains(this.settings.containerFocusClass)||this.container.classList.add(this.settings.containerFocusClass),this.placeholder&&(this.placeholder.style.opacity=0)},e.prototype._blurEvent=function(t){if(this.container.classList.contains(this.settings.containerFocusClass)&&this.container.classList.remove(this.settings.containerFocusClass),this.settings.saveOnBlur){if(t=t||window.event,this._listenForEndOfContainer(),""!==this.input.value)return void this._confirmValidTagEvent(t);this.tag.values.length&&this._checkLastTag(t)}else this.settings.clearOnBlur&&(this.input.value="",this._setInputWidth());this.tag.values.length||this.input.value||this._showPlaceholder()},e.prototype._keydownEvents=function(t){var e=(t=t||window.event).keyCode;this.pasting=!1,this._listenForEndOfContainer(),86===e&&t.metaKey&&(this.pasting=!0),this._isConfirmKey(e)&&""!==this.input.value?this._confirmValidTagEvent(t):this.tag.values.length&&this._checkLastTag(t)},e.prototype._keyupEvents=function(t){t=t||window.event,this.input.classList.remove("taggle_back"),l(this.sizer,this.input.value),this.pasting&&""!==this.input.value&&(this._add(t),this.pasting=!1)},e.prototype._confirmValidTagEvent=function(t){(t=t||window.event).preventDefault?t.preventDefault():t.returnValue=!1,this._add(t)},e.prototype._listenForEndOfContainer=function(){var t=this.sizer.getBoundingClientRect().width,e=this.measurements.container.rect.width-this.measurements.container.padding;t+1.5*parseInt(this.sizer.style.fontSize,10)>parseInt(this.input.style.width,10)&&(this.input.style.width=e+"px")},e.prototype._createTag=function(t,e){var s=document.createElement("li"),i=document.createElement("button"),n=document.createElement("input"),a=document.createElement("span");t=this._formatTag(t),l(i,"×"),i.className="close",i.setAttribute("type","button");var r=this._remove.bind(this,i);h(i,"click",r),l(a,t),a.className="taggle_text",s.className="taggle "+this.settings.additionalTagClasses,n.type="hidden",n.value=t,n.name=this.settings.hiddenInputName,s.appendChild(a),s.appendChild(i),s.appendChild(n);var o=this.settings.tagFormatter(s);if(void 0!==o&&(s=o),!(s instanceof HTMLElement)||"li"!==s.localName&&"LI"!==s.tagName)throw new Error("tagFormatter must return an li element");return this.settings.attachTagId&&(this._id+=1,t={text:t,id:this._id}),this.tag.values.splice(e,0,t),this.tag.elements.splice(e,0,s),this._closeEvents.splice(e,0,r),this._closeButtons.splice(e,0,i),s},e.prototype._showPlaceholder=function(){this.placeholder&&(this.placeholder.style.opacity=1)},e.prototype._remove=function(s,i){var n,t,a,r=this;function e(t){if(!t){var e=r._closeEvents[a];o(r._closeButtons[a],"click",e),s.parentNode.removeChild(s),r.tag.elements.splice(a,1),r.tag.values.splice(a,1),r._closeEvents.splice(a,1),r._closeButtons.splice(a,1),r.settings.onTagRemove(i,n),r._focusInput()}}"li"!==s.tagName.toLowerCase()&&(s=s.parentNode),t="a"===s.tagName.toLowerCase()?s.parentNode:s,a=this.tag.elements.indexOf(t),n=this.tag.values[a],this.settings.onBeforeTagRemove(i,n,e)&&e()},e.prototype._formatTag=function(t){return this.settings.preserveCase?t:t.toLowerCase()},e.prototype._isIndexInRange=function(t){return 0<=t&&t<=this.tag.values.length-1},e.prototype.getTags=function(){return{elements:this.getTagElements(),values:this.getTagValues()}},e.prototype.getTagElements=function(){return[].slice.apply(this.tag.elements)},e.prototype.getTagValues=function(){return[].slice.apply(this.tag.values)},e.prototype.getInput=function(){return this.input},e.prototype.getContainer=function(){return this.container},e.prototype.add=function(t,e){var s;if(s=t,Array.isArray?Array.isArray(s):"[object Array]"===Object.prototype.toString.call(s))for(var i=e,n=0,a=t.length;n<a;n++)"string"==typeof t[n]&&(this._add(null,t[n],i),isNaN(i)||(i+=1));else this._add(null,t,e);return this},e.prototype.edit=function(t,e){if("string"!=typeof t)throw new Error("First edit argument must be of type string");if("number"!=typeof e)throw new Error("Second edit argument must be a number");if(!this._isIndexInRange(e))throw new Error("Edit index should be between 0 and "+this.tag.values.length-1);return"string"==typeof this.tag.values[e]?this.tag.values[e]=t:this.tag.values[e].text=t,l(this.tag.elements[e],t),this},e.prototype.move=function(t,e){if("number"!=typeof t||"number"!=typeof e)throw new Error("Both arguments must be numbers");if(!this._isIndexInRange(t))throw new Error("First index should be between 0 and "+this.tag.values.length-1);if(!this._isIndexInRange(e))throw new Error("Second index should be between 0 and "+this.tag.values.length-1);if(t===e)return this;var s=this.tag.values[t],i=this.tag.elements[t],n=this.tag.elements[e],a=this._closeEvents[t],r=this._closeButtons[t];return this.tag.values.splice(t,1),this.tag.elements.splice(t,1),this._closeEvents.splice(t,1),this._closeButtons.splice(t,1),this.tag.values.splice(e,0,s),this.tag.elements.splice(e,0,i),this._closeEvents.splice(t,0,a),this._closeButtons.splice(t,0,r),this.list.insertBefore(i,n.nextSibling),this},e.prototype.remove=function(t,e){for(var s=this.tag.values.length-1,i=!1;-1<s;){var n=this.tag.values[s];if(this.settings.attachTagId&&(n=n.text),n===t&&(i=!0,this._remove(this.tag.elements[s])),i&&!e)break;s--}return this},e.prototype.removeAll=function(){for(var t=this.tag.values.length-1;0<=t;t--)this._remove(this.tag.elements[t]);return this._showPlaceholder(),this},e.prototype.setOptions=function(t){return this.settings=i({},this.settings,t||{}),this},e.prototype.enable=function(){var t=[].slice.call(this.container.querySelectorAll("button")),e=[].slice.call(this.container.querySelectorAll("input"));return t.concat(e).forEach(function(t){t.removeAttribute("disabled")}),this},e.prototype.disable=function(){var t=[].slice.call(this.container.querySelectorAll("button")),e=[].slice.call(this.container.querySelectorAll("input"));return t.concat(e).forEach(function(t){t.setAttribute("disabled","")}),this},e.prototype.setData=function(t){return this.data=t,this},e.prototype.getData=function(){return this.data},e.prototype.attachEvents=function(){var s=this;return this._attachEvents()&&this._closeButtons.forEach(function(t,e){h(t,"click",s._closeEvents[e])}),this},e.prototype.removeEvents=function(){return this._detachEvents(),this},e});