diff --git a/assets/scripts/dist/bundle.js b/assets/scripts/dist/bundle.js index 183aa58..498b116 100644 --- a/assets/scripts/dist/bundle.js +++ b/assets/scripts/dist/bundle.js @@ -1 +1 @@ -!function(e){function t(i){if(n[i])return n[i].exports;var s=n[i]={exports:{},id:i,loaded:!1};return e[i].call(s.exports,s,s.exports,t),s.loaded=!0,s.exports}var n={};return t.m=e,t.c=n,t.p="/assets/scripts/dist/",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{"default":e}}function s(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.Choices=void 0;var o=function(){function e(e,t){for(var n=0;n1)for(var c=1;c'),n=(0,u.strToEl)('
');this.passedElement.classList.add(this.options.classNames.input,this.options.classNames.hiddenState),this.passedElement.tabIndex="-1",this.passedElement.setAttribute("style","display:none;"),this.passedElement.setAttribute("aria-hidden","true"),(0,u.wrap)(this.passedElement,n),(0,u.wrap)(n,t);var i=(0,u.strToEl)(''),s=(0,u.strToEl)('');if(this.options.placeholder){var o=this.options.placeholderValue||this.passedElement.placeholder;o&&(s.placeholder=o,s.style.width=(0,u.getWidthOfInput)(s))}this.options.addItems||(s.disabled=!0,t.classList.add(this.options.classNames.disabledState)),t.appendChild(n),n.appendChild(i),n.appendChild(s),this.containerOuter=t,this.containerInner=n,this.input=s,this.list=i,this.presetItems.forEach(function(t){e.addItem(t)}),this.store.subscribe(this.render),this.render(),this.addEventListeners()}},{key:"generateMultipleSelectInput",value:function(){var e=this,t=(0,u.strToEl)('
'),n=(0,u.strToEl)('
');this.passedElement.classList.add(this.options.classNames.input,this.options.classNames.hiddenState),this.passedElement.tabIndex="-1",this.passedElement.setAttribute("style","display:none;"),this.passedElement.setAttribute("aria-hidden","true"),(0,u.wrap)(this.passedElement,n),(0,u.wrap)(n,t);var i=(0,u.strToEl)(''),s=(0,u.strToEl)(''),o=(0,u.strToEl)('
');this.options.placeholder&&this.options.placeholderValue&&(s.placeholder=this.options.placeholderValue,s.style.width=(0,u.getWidthOfInput)(s)),this.options.addItems||(s.disabled=!0),t.appendChild(n),t.appendChild(o),n.appendChild(i),n.appendChild(s),this.containerOuter=t,this.containerInner=n,this.input=s,this.list=i,this.dropdown=o;var r=Array.from(this.passedElement.getElementsByTagName("OPTGROUP"));if(r.length)r.forEach(function(t,n){var i=Array.from(t.getElementsByTagName("OPTION")),s=n;e.addGroup(t.label,s),i.forEach(function(t){e.addOption(t,s)})});else{var a=Array.from(this.passedElement.options);a.forEach(function(t){e.addOption(t)})}this.store.subscribe(this.render),this.render(),this.addEventListeners()}},{key:"addEventListeners",value:function(){document.addEventListener("keydown",this.onKeyDown),document.addEventListener("click",this.onClick),document.addEventListener("paste",this.onPaste)}},{key:"removeEventListeners",value:function(){document.removeEventListener("keydown",this.onKeyDown),document.removeEventListener("click",this.onClick),document.removeEventListener("paste",this.onPaste)}},{key:"observeStore",value:function(e,t,n){function i(){var i=t(e.getState());i!==s&&(s=i,n(s))}var s=void 0,o=e.subscribe(i);return i(),o}},{key:"render",value:function(){var e=this,t=arguments.length<=0||void 0===arguments[0]?this.options.callbackOnRender:arguments[0],n=this.options.classNames,i=this.getItems(),s=this.getOptions(),o=this.getGroups();this.dropdown&&!function(){e.dropdown.innerHTML="";var t=document.createDocumentFragment();if(o.length)o.forEach(function(e){var i=(0,u.strToEl)('\n
\n
'+e.value+"
\n
\n "),o=s.filter(function(t){return t.groupId===e.id});if(o)o.forEach(function(e){var t=(0,u.strToEl)('\n
\n '+e.label+"\n
\n ");i.appendChild(t)});else{var r=(0,u.strToEl)('
No options to select
');i.appendChild(r)}t.appendChild(i)});else if(s)s.forEach(function(e){var i=(0,u.strToEl)('\n
\n '+e.label+"\n
\n ");t.appendChild(i)});else{var i=(0,u.strToEl)('
No options to select
');t.appendChild(i)}e.dropdown.appendChild(t)}();var r=this.getItemsReducedToValues();this.passedElement.value=r.join(this.options.delimiter),this.list.innerHTML="";var a=document.createDocumentFragment();i.forEach(function(t){if(t.active){var i=(0,u.strToEl)('\n
  • \n '+t.label+"\n
  • \n ");a.appendChild(i)}}),this.list.appendChild(a),t&&((0,u.isType)("Function",t)?t(i,s,o):console.error("callbackOnRender: Callback is not a function"))}},{key:"renderInput",value:function(e){switch(this.options.debug&&console.debug("Render"),e.type){case"text":this.generateTextInput();break;case"select-one":break;case"select-multiple":this.generateMultipleSelectInput();break;default:this.generateMultipleSelectInput()}}},{key:"init",value:function(){var e=arguments.length<=0||void 0===arguments[0]?this.options.callbackOnInit:arguments[0];this.supports||console.error("init: Your browser doesn'nt support shit"),this.initialised=!0,this.renderInput(this.passedElement),e&&((0,u.isType)("Function",e)?e():console.error("callbackOnInit: Callback is not a function"))}},{key:"destroy",value:function(){this.options=null,this.passedElement=null,this.initialised=null}}]),e}();document.addEventListener("DOMContentLoaded",function(){var e=document.getElementById("choices-1"),t=(new d(e,{delimiter:" ",editItems:!0,maxItems:5}),new d("#choices-2",{allowPaste:!1,allowDuplicates:!1,editItems:!0}),new d("#choices-3",{allowDuplicates:!1,editItems:!0,regexFilter:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/}),new d("#choices-4",{addItems:!1,removeItems:!1}),new d("#choices-5",{prependValue:"item-",appendValue:"-"+Date.now()}));t.removeAllItems();new d("#choices-6",{items:["josh@joshuajohnson.co.uk","joe@bloggs.co.uk"]}),new d("#choices-7",{}),new d("[data-choice]",{placeholderValue:"This is a placeholder set in the config"})})},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{"default":e}}t.__esModule=!0,t.compose=t.applyMiddleware=t.bindActionCreators=t.combineReducers=t.createStore=void 0;var s=n(3),o=i(s),r=n(8),a=i(r),l=n(10),c=i(l),u=n(11),d=i(u),h=n(12),p=i(h),f=n(9);i(f);t.createStore=o.default,t.combineReducers=a.default,t.bindActionCreators=c.default,t.applyMiddleware=d.default,t.compose=p.default},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{"default":e}}function s(e,t,n){function i(){f===p&&(f=p.slice())}function o(){return h}function l(e){if("function"!=typeof e)throw new Error("Expected listener to be a function.");var t=!0;return i(),f.push(e),function(){if(t){t=!1,i();var n=f.indexOf(e);f.splice(n,1)}}}function c(e){if(!(0,r.default)(e))throw new Error("Actions must be plain objects. Use custom middleware for async actions.");if("undefined"==typeof e.type)throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?');if(v)throw new Error("Reducers may not dispatch actions.");try{v=!0,h=d(h,e)}finally{v=!1}for(var t=p=f,n=0;nn;n++)t[n]=arguments[n];return function(e){return function(n,i,s){var r=e(n,i,s),l=r.dispatch,c=[],u={getState:r.getState,dispatch:function(e){return l(e)}};return c=t.map(function(e){return e(u)}),l=a.default.apply(void 0,c)(r.dispatch),o({},r,{dispatch:l})}}}var o=Object.assign||function(e){for(var t=1;tn;n++)t[n]=arguments[n];return function(){if(0===t.length)return arguments.length<=0?void 0:arguments[0];var e=t[t.length-1],n=t.slice(0,-1);return n.reduceRight(function(e,t){return t(e)},e.apply(void 0,arguments))}}t.__esModule=!0,t.default=n},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var s=n(2),o=n(14),r=i(o),a=n(15),l=i(a),c=n(16),u=i(c),d=(0,s.combineReducers)({items:r.default,groups:l.default,options:u.default});t.default=d},function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t-1?e.map(function(e){return e.id===parseInt(t.optionId)&&(e.selected=t.selected),e}):e;default:return e}};t.default=i},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.addItem=function(e,t,n,i){return{type:"ADD_ITEM",value:e,label:t,id:parseInt(n),optionId:parseInt(i)}},t.removeItem=function(e,t){return{type:"REMOVE_ITEM",id:parseInt(e),optionId:parseInt(t)}},t.selectItem=function(e,t){return{type:"SELECT_ITEM",id:parseInt(e),selected:t}},t.addOption=function(e,t,n,i){return{type:"ADD_OPTION",value:e,label:t,id:parseInt(n),groupId:parseInt(i)}},t.selectOption=function(e,t){return{type:"SELECT_OPTION",id:parseInt(e),selected:t}},t.addGroup=function(e,t){return{type:"ADD_GROUP",value:e,id:parseInt(t)}}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=(t.hasClass=function(e,t){return new RegExp(" "+t+" ").test(" "+e.className+" ")},t.capitalise=function(e){return e.replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},t.isType=function(e,t){var n=Object.prototype.toString.call(t).slice(8,-1);return void 0!==t&&null!==t&&n===e}),i=(t.extend=function o(){for(var e={},t=!1,i=arguments.length,s=function(i){for(var s in i)Object.prototype.hasOwnProperty.call(i,s)&&(t&&n("Object",i[s])?e[s]=o(!0,e[s],i[s]):e[s]=i[s])},r=0;i>r;r++){var a=arguments[r];n("Object",a)?s(a):console.error("Custom options must be an object")}return e},t.whichTransitionEvent=function(){var e,t=document.createElement("fakeelement"),n={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(e in n)if(void 0!==t.style[e])return n[e]},t.whichAnimationEvent=function(){var e,t=document.createElement("fakeelement"),n={animation:"animationend",OAnimation:"oAnimationEnd",MozAnimation:"animationend",WebkitAnimation:"webkitAnimationEnd"};for(e in n)if(void 0!==t.style[e])return n[e]}),s=(t.getParentsUntil=function(e,t,n){for(var i=[];e&&e!==document;e=e.parentNode){if(t){var s=t.charAt(0);if("."===s&&e.classList.contains(t.substr(1)))break;if("#"===s&&e.id===t.substr(1))break;if("["===s&&e.hasAttribute(t.substr(1,t.length-1)))break;if(e.tagName.toLowerCase()===t)break}if(n){var o=n.charAt(0);"."===o&&e.classList.contains(n.substr(1))&&i.push(e),"#"===o&&e.id===n.substr(1)&&i.push(e),"["===o&&e.hasAttribute(n.substr(1,n.length-1))&&i.push(e),e.tagName.toLowerCase()===n&&i.push(e)}else i.push(e)}return 0===i.length?null:i},t.wrap=function(e,t){return t=t||document.createElement("div"),e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t.appendChild(e)},t.getSiblings=function(e){for(var t=[],n=e.parentNode.firstChild;n;n=n.nextSibling)1===n.nodeType&&n!==e&&t.push(n);return t},t.findAncestor=function(e,t){for(;(e=e.parentElement)&&!e.classList.contains(t););return e},t.debounce=function(e,t,n){var i;return function(){var s=this,o=arguments,r=function(){i=null,n||e.apply(s,o)},a=n&&!i;clearTimeout(i),i=setTimeout(r,t),a&&e.apply(s,o)}},t.getElemDistance=function(e){var t=0;if(e.offsetParent)do t+=e.offsetTop,e=e.offsetParent;while(e);return t>=0?t:0},t.getElementOffset=function(e,t){var n=t;return n>1&&(n=1),n>0&&(n=0),Math.max(e.offsetHeight*n)},t.getScrollPosition=function(e){return"bottom"===e?Math.max((window.scrollY||window.pageYOffset)+(window.innerHeight||document.documentElement.clientHeight)):window.scrollY||window.pageYOffset},t.isInView=function(e,t,n){return this.getScrollPosition(t)>this.getElemDistance(e)+this.getElementOffset(e,n)},t.stripHTML=function(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""},t.addAnimation=function(e,t){var n=i(),s=function o(){e.classList.remove(t),e.removeEventListener(n,o,!1)};e.classList.add(t),e.addEventListener(n,s,!1)},t.getRandomNumber=function(e,t){return Math.floor(Math.random()*(t-e)+e)},t.strToEl=function(){var e=document.createElement("div");return function(t){var n;for(e.innerHTML=t,n=e.children[0];e.firstChild;)e.removeChild(e.firstChild);return n}}());t.getWidthOfInput=function(e){var t=arguments.length<=1||void 0===arguments[1]?20:arguments[1],n=e.value||e.placeholder,i=e.offsetWidth;if(n){var o=s(''+n+"");o.style.position="absolute",o.style.top="-9999px",o.style.left="-9999px",o.style.padding="0",o.style.width="auto",document.body.appendChild(o),o.offsetWidth>t&&o.offsetWidth!=e.offsetWidth&&(i=o.offsetWidth+t),document.body.removeChild(o)}return i+"px"}}]); \ No newline at end of file +!function(e){function t(i){if(n[i])return n[i].exports;var o=n[i]={exports:{},id:i,loaded:!1};return e[i].call(o.exports,o,o.exports,t),o.loaded=!0,o.exports}var n={};return t.m=e,t.c=n,t.p="/assets/scripts/dist/",t(0)}([function(e,t,n){e.exports=n(1)},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{"default":e}}function o(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(t,"__esModule",{value:!0}),t.Choices=void 0;var s=function(){function e(e,t){for(var n=0;n1)for(var c=1;c'),n=(0,u.strToEl)('
    ');this.passedElement.classList.add(this.options.classNames.input,this.options.classNames.hiddenState),this.passedElement.tabIndex="-1",this.passedElement.setAttribute("style","display:none;"),this.passedElement.setAttribute("aria-hidden","true"),(0,u.wrap)(this.passedElement,n),(0,u.wrap)(n,t);var i=(0,u.strToEl)('
      '),o=(0,u.strToEl)('');if(this.options.placeholder){var s=this.options.placeholderValue||this.passedElement.placeholder;s&&(o.placeholder=s,o.style.width=(0,u.getWidthOfInput)(o))}this.options.addItems||(o.disabled=!0,t.classList.add(this.options.classNames.disabledState)),t.appendChild(n),n.appendChild(i),n.appendChild(o),this.containerOuter=t,this.containerInner=n,this.input=o,this.list=i,this.presetItems.forEach(function(t){e.addItem(t)})}},{key:"generateMultipleSelectInput",value:function(){var e=this,t=(0,u.strToEl)('
      '),n=(0,u.strToEl)('
      ');this.passedElement.classList.add(this.options.classNames.input,this.options.classNames.hiddenState),this.passedElement.tabIndex="-1",this.passedElement.setAttribute("style","display:none;"),this.passedElement.setAttribute("aria-hidden","true"),(0,u.wrap)(this.passedElement,n),(0,u.wrap)(n,t);var i=(0,u.strToEl)('
        '),o=(0,u.strToEl)(''),s=(0,u.strToEl)('
        ');this.options.placeholder&&this.options.placeholderValue&&(o.placeholder=this.options.placeholderValue,o.style.width=(0,u.getWidthOfInput)(o)),this.options.addItems||(o.disabled=!0),t.appendChild(n),t.appendChild(s),n.appendChild(i),n.appendChild(o),this.containerOuter=t,this.containerInner=n,this.input=o,this.list=i,this.dropdown=s;var r=Array.from(this.passedElement.getElementsByTagName("OPTGROUP"));if(r.length)r.forEach(function(t,n){var i=Array.from(t.getElementsByTagName("OPTION")),o=n;e.addGroup(t.label,o),i.forEach(function(t){e.addOption(t,o)})});else{var a=Array.from(this.passedElement.options);a.forEach(function(t){e.addOption(t)})}}},{key:"addEventListeners",value:function(){document.addEventListener("keydown",this.onKeyDown),document.addEventListener("click",this.onClick),document.addEventListener("paste",this.onPaste)}},{key:"removeEventListeners",value:function(){document.removeEventListener("keydown",this.onKeyDown),document.removeEventListener("click",this.onClick),document.removeEventListener("paste",this.onPaste)}},{key:"render",value:function(){var e=this,t=arguments.length<=0||void 0===arguments[0]?this.options.callbackOnRender:arguments[0],n=this.options.classNames,i=this.getItemsFilteredByActive(),o=this.getOptions(),s=this.getGroups();this.dropdown&&!function(){e.dropdown.innerHTML="";var t=document.createDocumentFragment();if(s.length)s.forEach(function(e){var i=(0,u.strToEl)('\n
        \n
        '+e.value+"
        \n
        \n "),s=o.filter(function(t){return t.groupId===e.id});if(s)s.forEach(function(e){var t=(0,u.strToEl)('\n
        \n '+e.label+"\n
        \n ");i.appendChild(t)});else{var r=(0,u.strToEl)('
        No options to select
        ');i.appendChild(r)}t.appendChild(i)});else if(o)o.forEach(function(e){var i=(0,u.strToEl)('\n
        \n '+e.label+"\n
        \n ");t.appendChild(i)});else{var i=(0,u.strToEl)('
        No options to select
        ');t.appendChild(i)}e.dropdown.appendChild(t)}(),i&&!function(){var t=e.getItemsReducedToValues();e.passedElement.value=t.join(e.options.delimiter),e.list.innerHTML="";var o=document.createDocumentFragment();i.forEach(function(t){var i=(0,u.strToEl)('\n
      • \n '+t.label+"\n
      • \n ");o.appendChild(i)}),e.list.appendChild(o)}(),t&&((0,u.isType)("Function",t)?t(i,o,s):console.error("callbackOnRender: Callback is not a function"))}},{key:"renderInput",value:function(e){switch(this.options.debug&&console.debug("Render"),e.type){case"text":this.generateTextInput();break;case"select-one":break;case"select-multiple":this.generateMultipleSelectInput();break;default:console.error("renderInput: Input type is not supported")}}},{key:"init",value:function(){var e=arguments.length<=0||void 0===arguments[0]?this.options.callbackOnInit:arguments[0];this.supports||console.error("init: Your browser doesn'nt support shit"),this.initialised=!0,this.renderInput(this.passedElement),this.store.subscribe(this.render),this.render(),this.addEventListeners(),e&&((0,u.isType)("Function",e)?e():console.error("callbackOnInit: Callback is not a function"))}},{key:"destroy",value:function(){this.options=null,this.passedElement=null,this.initialised=null}}]),e}();document.addEventListener("DOMContentLoaded",function(){var e=document.getElementById("choices-1"),t=(new d(e,{delimiter:" ",editItems:!0,maxItems:5}),new d("#choices-2",{allowPaste:!1,allowDuplicates:!1,editItems:!0}),new d("#choices-3",{allowDuplicates:!1,editItems:!0,regexFilter:/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/}),new d("#choices-4",{addItems:!1,removeItems:!1}),new d("#choices-5",{prependValue:"item-",appendValue:"-"+Date.now()}));t.removeAllItems();var n=new d("#choices-6",{items:["josh@joshuajohnson.co.uk","joe@bloggs.co.uk"],callbackOnRender:function(e,t,n){console.log(e)}});new d("#choices-7",{}),new d("[data-choice]",{placeholderValue:"This is a placeholder set in the config"});n.addItem("josh2@joshuajohnson.co.uk",null,null,function(){console.log("Custom add item callback")}),n.removeItemsByValue("josh@joshuajohnson.co.uk"),console.log(n.getItemById(3))})},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{"default":e}}t.__esModule=!0,t.compose=t.applyMiddleware=t.bindActionCreators=t.combineReducers=t.createStore=void 0;var o=n(3),s=i(o),r=n(8),a=i(r),l=n(10),c=i(l),u=n(11),d=i(u),h=n(12),p=i(h),f=n(9);i(f);t.createStore=s.default,t.combineReducers=a.default,t.bindActionCreators=c.default,t.applyMiddleware=d.default,t.compose=p.default},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{"default":e}}function o(e,t,n){function i(){f===p&&(f=p.slice())}function s(){return h}function l(e){if("function"!=typeof e)throw new Error("Expected listener to be a function.");var t=!0;return i(),f.push(e),function(){if(t){t=!1,i();var n=f.indexOf(e);f.splice(n,1)}}}function c(e){if(!(0,r.default)(e))throw new Error("Actions must be plain objects. Use custom middleware for async actions.");if("undefined"==typeof e.type)throw new Error('Actions may not have an undefined "type" property. Have you misspelled a constant?');if(v)throw new Error("Reducers may not dispatch actions.");try{v=!0,h=d(h,e)}finally{v=!1}for(var t=p=f,n=0;nn;n++)t[n]=arguments[n];return function(e){return function(n,i,o){var r=e(n,i,o),l=r.dispatch,c=[],u={getState:r.getState,dispatch:function(e){return l(e)}};return c=t.map(function(e){return e(u)}),l=a.default.apply(void 0,c)(r.dispatch),s({},r,{dispatch:l})}}}var s=Object.assign||function(e){for(var t=1;tn;n++)t[n]=arguments[n];return function(){if(0===t.length)return arguments.length<=0?void 0:arguments[0];var e=t[t.length-1],n=t.slice(0,-1);return n.reduceRight(function(e,t){return t(e)},e.apply(void 0,arguments))}}t.__esModule=!0,t.default=n},function(e,t,n){"use strict";function i(e){return e&&e.__esModule?e:{"default":e}}Object.defineProperty(t,"__esModule",{value:!0});var o=n(2),s=n(14),r=i(s),a=n(15),l=i(a),c=n(16),u=i(c),d=(0,o.combineReducers)({items:r.default,groups:l.default,options:u.default});t.default=d},function(e,t){"use strict";function n(e){if(Array.isArray(e)){for(var t=0,n=Array(e.length);t-1?e.map(function(e){return e.id===parseInt(t.optionId)&&(e.selected=t.selected),e}):e;default:return e}};t.default=i},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});t.addItem=function(e,t,n,i){return{type:"ADD_ITEM",value:e,label:t,id:n,optionId:i}},t.removeItem=function(e,t){return{type:"REMOVE_ITEM",id:e,optionId:t}},t.selectItem=function(e,t){return{type:"SELECT_ITEM",id:e,selected:t}},t.addOption=function(e,t,n,i){return{type:"ADD_OPTION",value:e,label:t,id:n,groupId:i}},t.selectOption=function(e,t){return{type:"SELECT_OPTION",id:e,selected:t}},t.addGroup=function(e,t){return{type:"ADD_GROUP",value:e,id:t}}},function(e,t){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=(t.hasClass=function(e,t){return new RegExp(" "+t+" ").test(" "+e.className+" ")},t.capitalise=function(e){return e.replace(/\w\S*/g,function(e){return e.charAt(0).toUpperCase()+e.substr(1).toLowerCase()})},t.isType=function(e,t){var n=Object.prototype.toString.call(t).slice(8,-1);return void 0!==t&&null!==t&&n===e}),i=(t.extend=function s(){for(var e={},t=!1,i=arguments.length,o=function(i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(t&&n("Object",i[o])?e[o]=s(!0,e[o],i[o]):e[o]=i[o])},r=0;i>r;r++){var a=arguments[r];n("Object",a)?o(a):console.error("Custom options must be an object")}return e},t.whichTransitionEvent=function(){var e,t=document.createElement("fakeelement"),n={transition:"transitionend",OTransition:"oTransitionEnd",MozTransition:"transitionend",WebkitTransition:"webkitTransitionEnd"};for(e in n)if(void 0!==t.style[e])return n[e]},t.whichAnimationEvent=function(){var e,t=document.createElement("fakeelement"),n={animation:"animationend",OAnimation:"oAnimationEnd",MozAnimation:"animationend",WebkitAnimation:"webkitAnimationEnd"};for(e in n)if(void 0!==t.style[e])return n[e]}),o=(t.getParentsUntil=function(e,t,n){for(var i=[];e&&e!==document;e=e.parentNode){if(t){var o=t.charAt(0);if("."===o&&e.classList.contains(t.substr(1)))break;if("#"===o&&e.id===t.substr(1))break;if("["===o&&e.hasAttribute(t.substr(1,t.length-1)))break;if(e.tagName.toLowerCase()===t)break}if(n){var s=n.charAt(0);"."===s&&e.classList.contains(n.substr(1))&&i.push(e),"#"===s&&e.id===n.substr(1)&&i.push(e),"["===s&&e.hasAttribute(n.substr(1,n.length-1))&&i.push(e),e.tagName.toLowerCase()===n&&i.push(e)}else i.push(e)}return 0===i.length?null:i},t.wrap=function(e,t){return t=t||document.createElement("div"),e.nextSibling?e.parentNode.insertBefore(t,e.nextSibling):e.parentNode.appendChild(t),t.appendChild(e)},t.getSiblings=function(e){for(var t=[],n=e.parentNode.firstChild;n;n=n.nextSibling)1===n.nodeType&&n!==e&&t.push(n);return t},t.findAncestor=function(e,t){for(;(e=e.parentElement)&&!e.classList.contains(t););return e},t.debounce=function(e,t,n){var i;return function(){var o=this,s=arguments,r=function(){i=null,n||e.apply(o,s)},a=n&&!i;clearTimeout(i),i=setTimeout(r,t),a&&e.apply(o,s)}},t.getElemDistance=function(e){var t=0;if(e.offsetParent)do t+=e.offsetTop,e=e.offsetParent;while(e);return t>=0?t:0},t.getElementOffset=function(e,t){var n=t;return n>1&&(n=1),n>0&&(n=0),Math.max(e.offsetHeight*n)},t.getScrollPosition=function(e){return"bottom"===e?Math.max((window.scrollY||window.pageYOffset)+(window.innerHeight||document.documentElement.clientHeight)):window.scrollY||window.pageYOffset},t.isInView=function(e,t,n){return this.getScrollPosition(t)>this.getElemDistance(e)+this.getElementOffset(e,n)},t.stripHTML=function(e){var t=document.createElement("DIV");return t.innerHTML=e,t.textContent||t.innerText||""},t.addAnimation=function(e,t){var n=i(),o=function s(){e.classList.remove(t),e.removeEventListener(n,s,!1)};e.classList.add(t),e.addEventListener(n,o,!1)},t.getRandomNumber=function(e,t){return Math.floor(Math.random()*(t-e)+e)},t.strToEl=function(){var e=document.createElement("div");return function(t){var n;for(e.innerHTML=t,n=e.children[0];e.firstChild;)e.removeChild(e.firstChild);return n}}());t.getWidthOfInput=function(e){var t=arguments.length<=1||void 0===arguments[1]?20:arguments[1],n=e.value||e.placeholder,i=e.offsetWidth;if(n){var s=o(''+n+"");s.style.position="absolute",s.style.top="-9999px",s.style.left="-9999px",s.style.padding="0",s.style.width="auto",document.body.appendChild(s),s.offsetWidth>t&&s.offsetWidth!=e.offsetWidth&&(i=s.offsetWidth+t/4),document.body.removeChild(s)}return i+"px"}}]); \ No newline at end of file diff --git a/assets/scripts/src/actions/index.js b/assets/scripts/src/actions/index.js index 14f29d5..1e6a341 100644 --- a/assets/scripts/src/actions/index.js +++ b/assets/scripts/src/actions/index.js @@ -1,51 +1,51 @@ export const addItem = (value, label, id, optionId) => { return { type: 'ADD_ITEM', - value: value, - label: label, - id: parseInt(id), - optionId: parseInt(optionId) + value, + label, + id, + optionId, } }; export const removeItem = (id, optionId) => { return { type: 'REMOVE_ITEM', - id: parseInt(id), - optionId: parseInt(optionId) + id, + optionId, } }; export const selectItem = (id, selected) => { return { type: 'SELECT_ITEM', - id: parseInt(id), - selected: selected, + id, + selected, } }; export const addOption = (value, label, id, groupId) => { return { type: 'ADD_OPTION', - value: value, - label: label, - id: parseInt(id), - groupId: parseInt(groupId) + value, + label, + id, + groupId, } }; export const selectOption = (id, selected) => { return { type: 'SELECT_OPTION', - id: parseInt(id), - selected: selected, + id, + selected, } }; export const addGroup = (value, id) => { return { type: 'ADD_GROUP', - value: value, - id: parseInt(id) + value, + id, } }; \ No newline at end of file diff --git a/assets/scripts/src/choices.js b/assets/scripts/src/choices.js index 887f8bb..e1172c8 100644 --- a/assets/scripts/src/choices.js +++ b/assets/scripts/src/choices.js @@ -408,6 +408,7 @@ export class Choices { let passedValue = value.trim(); let passedLabel = label || passedValue; + let passedOptionId = optionId || -1; // If a prepended value has been passed, prepend it if(this.options.prependValue) { @@ -420,7 +421,7 @@ export class Choices { } // Generate unique id - let id = this.store.getState().items.length + 1; + const id = this.store.getState().items.length + 1; // Close dropdown if(this.dropdown && this.dropdown.classList.contains('is-active')) { @@ -436,7 +437,7 @@ export class Choices { } } - this.store.dispatch(addItem(passedValue, passedLabel, id, optionId)); + this.store.dispatch(addItem(passedValue, passedLabel, id, passedOptionId)); } /** @@ -444,14 +445,14 @@ export class Choices { * @param */ removeItem(item, callback = this.options.callbackOnRemoveItem) { - if(!item) { - console.error('removeItem: No item or value was passed to be removed'); + if(!item || !isType('Object', item)) { + console.error('removeItem: No item object was passed to be removed'); return; } - let id = item.id; - let value = item.value; - let optionId = item.optionId; + const id = item.id; + const value = item.value; + const optionId = item.optionId; // Run callback if(callback){ @@ -465,13 +466,27 @@ export class Choices { this.store.dispatch(removeItem(id, optionId)); } + removeItemsByValue(value) { + if(!value || !isType('String', value)) { + console.error('removeItemsByValue: No value was passed to be removed'); + } + + const items = this.getItemsFilteredByActive(); + + items.forEach((item) => { + if(item.value === value) { + this.removeItem(item); + } + }); + } + /** * Remove all items from array * @param {Boolean} selectedOnly Optionally remove only selected items * @return */ removeAllItems() { - const items = this.getItems(); + const items = this.getItemsFilteredByActive(); items.forEach((item) => { if(item.active) { @@ -481,7 +496,7 @@ export class Choices { } removeAllSelectedItems() { - const items = this.getItems(); + const items = this.getItemsFilteredByActive(); items.forEach((item) => { if(item.selected && item.active) { @@ -628,15 +643,6 @@ export class Choices { this.presetItems.forEach((value) => { this.addItem(value); }); - - // Subscribe to store - this.store.subscribe(this.render); - - // Render any items - this.render(); - - // Trigger event listeners - this.addEventListeners(); } /** @@ -684,7 +690,6 @@ export class Choices { this.list = list; this.dropdown = dropdown; - // const passedGroups; const passedGroups = Array.from(this.passedElement.getElementsByTagName('OPTGROUP')); if(passedGroups.length) { @@ -706,16 +711,6 @@ export class Choices { this.addOption(option); }); } - - - // Subscribe to store - this.store.subscribe(this.render); - - // Render any items - this.render(); - - // Trigger event listeners - this.addEventListeners(); } /** @@ -736,29 +731,13 @@ export class Choices { document.removeEventListener('paste', this.onPaste); } - observeStore(store, select, onChange) { - let currentState; - - function handleChange() { - let nextState = select(store.getState()); - if (nextState !== currentState) { - currentState = nextState; - onChange(currentState); - } - } - - let unsubscribe = store.subscribe(handleChange); - handleChange(); - return unsubscribe; - } - /** * Render DOM with values * @return */ render(callback = this.options.callbackOnRender) { const classNames = this.options.classNames; - const items = this.getItems(); + const activeItems = this.getItemsFilteredByActive(); const options = this.getOptions(); const groups = this.getGroups(); @@ -823,21 +802,21 @@ export class Choices { } // ITEMS - // Simplify store data to just values - const itemsFiltered = this.getItemsReducedToValues(); + if(activeItems) { + // Simplify store data to just values + const itemsFiltered = this.getItemsReducedToValues(); - // Assign hidden input array of values - this.passedElement.value = itemsFiltered.join(this.options.delimiter); + // Assign hidden input array of values + this.passedElement.value = itemsFiltered.join(this.options.delimiter); - // Clear list - this.list.innerHTML = ''; + // Clear list + this.list.innerHTML = ''; - // Create a fragment to store our list items (so we don't have to update the DOM for each item) - const itemListFragment = document.createDocumentFragment(); - - // Add each list item to list - items.forEach((item) => { - if(item.active) { + // Create a fragment to store our list items (so we don't have to update the DOM for each item) + const itemListFragment = document.createDocumentFragment(); + + // Add each list item to list + activeItems.forEach((item) => { // Create new list element const listItem = strToEl(`
      • @@ -847,15 +826,15 @@ export class Choices { // Append it to list itemListFragment.appendChild(listItem); - } - }); + }); - this.list.appendChild(itemListFragment); + this.list.appendChild(itemListFragment); + } // Run callback if it is a function if(callback){ if(isType('Function', callback)) { - callback(items, options, groups); + callback(activeItems, options, groups); } else { console.error('callbackOnRender: Callback is not a function'); } @@ -880,7 +859,7 @@ export class Choices { this.generateMultipleSelectInput(); break; default: - this.generateMultipleSelectInput(); + console.error('renderInput: Input type is not supported'); break; } } @@ -892,7 +871,18 @@ export class Choices { init(callback = this.options.callbackOnInit) { if (!this.supports) console.error('init: Your browser doesn\'nt support shit'); this.initialised = true; + + // Render input this.renderInput(this.passedElement); + + // Subscribe to store + this.store.subscribe(this.render); + + // Render any items + this.render(); + + // Trigger event listeners + this.addEventListeners(); // Run callback if it is a function if(callback){ if(isType('Function', callback)) { @@ -951,15 +941,18 @@ document.addEventListener('DOMContentLoaded', () => { const choices5 = new Choices('#choices-5', { prependValue: 'item-', appendValue: `-${Date.now()}`, + // callbackOnRender: function(items, options) { + // console.log(items); + // }, }); choices5.removeAllItems(); const choices6 = new Choices('#choices-6', { items: ['josh@joshuajohnson.co.uk', 'joe@bloggs.co.uk'], - // callbackOnRender: function(items, options, groups) { - // console.log(items); - // }, + callbackOnRender: function(items, options, groups) { + console.log(items); + }, }); const choices7 = new Choices('#choices-7', { @@ -975,7 +968,7 @@ document.addEventListener('DOMContentLoaded', () => { // }, }); - // choices6.addItem('josh2@joshuajohnson.co.uk', () => { console.log('Custom add item callback')}); - // choices6.removeItem('josh@joshuajohnson.co.uk'); - // console.log(choices6.getItemById(1)); + choices6.addItem('josh2@joshuajohnson.co.uk', null, null, () => { console.log('Custom add item callback')}); + choices6.removeItemsByValue('josh@joshuajohnson.co.uk'); + console.log(choices6.getItemById(3)); }); \ No newline at end of file diff --git a/assets/scripts/src/lib/utils.js b/assets/scripts/src/lib/utils.js index 2a100b3..3e2aead 100644 --- a/assets/scripts/src/lib/utils.js +++ b/assets/scripts/src/lib/utils.js @@ -389,7 +389,7 @@ export const getWidthOfInput = (input, initialWidth = 20) => { document.body.appendChild(testEl); if(testEl.offsetWidth > initialWidth && testEl.offsetWidth != input.offsetWidth) { - width = testEl.offsetWidth + initialWidth; + width = testEl.offsetWidth + initialWidth/4; } document.body.removeChild(testEl); diff --git a/assets/scripts/src/reducers/groups.js b/assets/scripts/src/reducers/groups.js index e128ad3..959f00e 100644 --- a/assets/scripts/src/reducers/groups.js +++ b/assets/scripts/src/reducers/groups.js @@ -2,7 +2,7 @@ const groups = (state = [], action) => { switch (action.type) { case 'ADD_GROUP': return [...state, { - id: parseInt(action.id), + id: action.id, value: action.value, disabled: false, }]; diff --git a/assets/scripts/src/reducers/options.js b/assets/scripts/src/reducers/options.js index 29a96ba..17fbfa0 100644 --- a/assets/scripts/src/reducers/options.js +++ b/assets/scripts/src/reducers/options.js @@ -2,7 +2,7 @@ const options = (state = [], action) => { switch (action.type) { case 'ADD_OPTION': return [...state, { - id: parseInt(action.id), + id: action.id, groupId: action.groupId, value: action.value, label: action.label,