-
Notifications
You must be signed in to change notification settings - Fork 0
/
peekfield.min.js
6 lines (6 loc) · 6.69 KB
/
peekfield.min.js
1
2
3
4
5
6
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).peekfield=t()}(this,function(){"use strict";
/*!
peekfield v0.2.0 (https://peekfield.js.org)
by Kodie Grantham (https://kodieg.com)
*/return function c(u,g){u=u||{},"string"==typeof(g=g||"[data-peekfield]:not(data-peekfield-ignore)")?g=document.querySelectorAll(g):g instanceof HTMLElement&&(g=[g]),void 0===c.fieldCount?(c.fieldCount=0,c.lastTabIndex=-1):u.startingTabIndex||(u.startingTabIndex=c.lastTabIndex+1);for(var e=0;e<g.length;e++)!function(e){var n=g[e],l=n.getAttribute("data-peekfield");if(l.length){c.fieldCount++,n.label=document.querySelector('[data-peekfield-for="'+l+'"]'),n.inputs=n.querySelectorAll("input:not(data-peekfield-ignore),textarea:not(data-peekfield-ignore),select:not(data-peekfield-ignore)"),n.options=Object.assign({applyStyles:!0,closeOnFocusOut:!0,devMode:!1,display:null,onClose:null,onOpen:null,opened:!1,options:{},placeholder:null,startingTabIndex:0},u||{}),n.options.options[l]&&(n.options=Object.assign(n.options,n.options.options[l])),delete n.options.options;for(var t=n.getAttribute("data-peekfield-apply-styles"),t=(t&&(n.options.applyStyles="false"!==t),n.getAttribute("data-peekfield-close-on-focus-out")),o=(t&&(n.options.closeOnFocusOut="false"!==t),n.label&&(n.label.display=n.label.getAttribute("data-peekfield-display")||n.options.display,n.label.placeholder=n.label.getAttribute("data-peekfield-placeholder")||n.options.placeholder,!1===n.options.startingTabIndex||n.label.getAttribute("tabindex")||n.label.setAttribute("tabindex",n.options.startingTabIndex+e)),!1===n.options.startingTabIndex||n.getAttribute("tabindex")||(n.setAttribute("tabindex",n.options.startingTabIndex+e),c.lastTabIndex=n.options.startingTabIndex+e),n.open=function(e){return n.options.devMode&&console.log(l,"open"),!0!==n.opened&&(n.opened=!0,n.options.applyStyles&&(n.style.display=null,n.style.visibility=null,n.label)&&(n.label.style.display="none",n.label.style.visibility="hidden"),n.classList.toggle("open",n.opened),n.label&&n.label.classList.toggle("open",n.opened),(n.inputs.length?n.inputs[0]:n).focus(),!1!==e)&&n.dispatchEvent(new Event("open",{bubbles:!0})),n},n.close=function(e){if(n.options.devMode&&console.log(l,"close"),!1!==n.opened){n.opened=!1,n.values=n.getInputValues(),n.options.applyStyles&&(n.style.display="none",n.style.visibility="hidden",n.label)&&(n.label.style.display=null,n.label.style.visibility=null);var t,o=Object.values(n.values).filter(function(e){return e&&e.length});for(t in n.changed=!1,n.empty=!o.length,n.values)if(n.values.hasOwnProperty(t))if(Array.isArray(n.values[t])){if(n.values[t].sort().join(",")!==n.originalValues[t].sort().join(",")){n.changed=!0;break}}else if(n.values[t]!==n.originalValues[t]){n.changed=!0;break}n.classList.toggle("open",n.opened),n.classList.toggle("changed",n.changed),n.classList.toggle("empty",n.empty),n.label&&(n.label.classList.toggle("open",n.opened),n.label.classList.toggle("changed",n.changed),n.label.classList.toggle("empty",n.empty),n.empty?n.label.placeholder?"function"==typeof n.label.placeholder?n.label.innerHTML=n.label.placeholder(n):n.label.innerHTML=n.label.placeholder:n.label.innerHTML="":n.label.display?"function"==typeof n.label.display?n.label.innerHTML=n.label.display(n):n.label.innerHTML=n.label.display.replace(/{(.+?)}/g,function(e,t){t=t.split("|"),e=n.values[t[0]]||t[1]||e;return e=Array.isArray(e)?e.join(t[2]||","):e}):n.label.innerHTML=o.join(" ")),!1!==e&&n.dispatchEvent(new Event("close",{bubbles:!0}))}return n},n.toggle=function(e,t){return n.options.devMode&&console.log(l,"toggle"),!0===e||void 0===e&&!n.opened?n.open(t):(!1===e||void 0===e&&n.opened)&&n.close(t),n},n.getInputValues=function(){var e={};return n.inputs.length&&(e=Array.from(n.inputs).reduce(function(e,t){var o=t.name||t.id,n=t.value,l=t.tagName.toLowerCase();if("[]"===o.slice(-2)&&(o=o.substr(0,o.length-2),n=[n]),"select"===l&&t.multiple&&(n=Array.from(t.selectedOptions).map(function(e){return e.value})),"file"===t.type&&(n=Array.from(t.files).map(function(e){return e.name})),("checkbox"===t.type||"radio"===t.type)&&!t.checked){if(e[o])return e;n=Array.isArray(n)?[]:null}return e[o]&&(n=(n=Array.isArray(e[o])?e[o].concat([n]):[e[o],n]).filter(function(e){return e&&e.length})),e[o]=n,e},{})),n.options.devMode&&console.log(l,"input values:",e),e},n.label&&(n.label.addEventListener("click",function(e){e.stopImmediatePropagation(),n.options.devMode&&console.log(l,"label click"),n.open()}),n.label.addEventListener("focusin",function(e){e.stopImmediatePropagation(),n.options.devMode&&console.log(l,"label focusin"),n.open()})),n.addEventListener("focusout",function(e){n.contains(e.relatedTarget)||n.contains(document.activeElement)||(e.stopImmediatePropagation(),n.options.devMode&&console.log(l,"focusout"),n.options.closeOnFocusOut&&n.close())}),n.options.onOpen&&n.addEventListener("open",function(e){e.stopImmediatePropagation(),n.options.devMode&&console.log(l,"onOpen"),n.options.onOpen(e,n)}),n.options.onClose&&n.addEventListener("close",function(e){e.stopImmediatePropagation(),n.options.devMode&&console.log(l,"onClose"),n.options.onClose(e,n)}),document.querySelectorAll('[data-peekfield-open="'+l+'"]')),i=0;i<o.length;i++)!function(t){t.addEventListener("click",function(e){e.target===e.currentTarget&&(e.stopImmediatePropagation(),n.options.devMode&&console.log(l,"openElement click",t),n.open())})}(o[i]);for(var a=document.querySelectorAll('[data-peekfield-close="'+l+'"]'),s=0;s<a.length;s++)!function(t){t.addEventListener("click",function(e){e.target===e.currentTarget&&(e.stopImmediatePropagation(),n.options.devMode&&console.log(l,"closeElement click",t),n.close())})}(a[s]);for(var p=document.querySelectorAll('[data-peekfield-toggle="'+l+'"]'),d=0;d<p.length;d++)!function(t){t.addEventListener("click",function(e){e.target===e.currentTarget&&(e.stopImmediatePropagation(),n.options.devMode&&console.log(l,"toggleElement click",t),n.toggle())})}(p[d]);for(var r=0;r<n.inputs.length;r++)!function(o){if(o.id)for(var e=document.querySelectorAll("label[for="+o.id+"]"),t=0;t<e.length;t++)!function(t){t.addEventListener("click",function(e){n.options.devMode&&console.log(l,"input label click",t,o),n.open()})}(e[t])}(n.inputs[r]);n.values=n.getInputValues(),n.originalValues=Object.assign({},n.values);t=Object.values(n.values).filter(function(e){return e&&e.length});n.changed=!1,n.empty=!t.length,n.classList.toggle("empty",n.empty),n.label&&n.label.classList.toggle("empty",n.empty),n.classList.contains("open")||n.options.opened?n.open(!1):n.close(!1)}else console.warn(n,"data-peekfield attribute needs to be set to a string")}(e);return g}});
//# sourceMappingURL=peekfield.min.js.map