{"version":3,"file":"browser.mjs","sources":["../src/browser.js"],"sourcesContent":["// form control elements selector\nfunction isFormControlElement(element) {\n\tif (element.nodeName === 'INPUT' || element.nodeName === 'SELECT' || element.nodeName === 'TEXTAREA') {\n\t\treturn true;\n\t}\n\n\treturn false;\n}\n\nfunction createNewEvent(eventName) {\n\tvar event;\n\n\tif (typeof(Event) === 'function') {\n\t\tevent = new Event(eventName, { bubbles: true });\n\t} else {\n\t\tevent = document.createEvent('Event');\n\t\tevent.initEvent(eventName, true, false);\n\t}\n\n\treturn event;\n}\n\nfunction generateHandler(replaceWith) {\n\tvar selector;\n\tvar remove;\n\tvar add;\n\n\tif (replaceWith[0] === '.') {\n\t\tselector = replaceWith.slice(1);\n\t\tremove = function remove(el) {\n\t\t\tel.classList.remove(selector);\n\t\t};\n\n\t\tadd = function add(el) {\n\t\t\tel.classList.add(selector);\n\t\t};\n\t} else {\n\t\t// A bit naive\n\t\tselector = replaceWith.slice(1, -1);\n\n\t\tremove = function remove(el) {\n\t\t\tel.removeAttribute(selector, '');\n\t\t};\n\n\t\tadd = function add(el) {\n\t\t\tel.setAttribute(selector, '');\n\t\t};\n\t}\n\n\treturn function handleInputOrChangeEvent(event) {\n\t\tvar element = event.target;\n\t\tif (!isFormControlElement(element)) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar isSelect = element.nodeName === 'SELECT';\n\t\tvar hasValue = isSelect\n\t\t\t? (element.options[element.selectedIndex] && !!element.options[element.selectedIndex].value)\n\t\t\t: !!element.value;\n\n\t\tif (hasValue) {\n\t\t\tremove(element);\n\t\t} else {\n\t\t\tadd(element);\n\t\t}\n\t};\n}\n\n// observe changes to the \"selected\" property on an HTML Element\nfunction observeSelectedOfHTMLElement(HTMLElement) {\n\tvar descriptor = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'selected');\n\tvar nativeSet = descriptor.set;\n\n\tdescriptor.set = function set(value) { // eslint-disable-line no-unused-vars\n\t\tnativeSet.apply(this, arguments);\n\n\t\tvar event = createNewEvent('change');\n\t\tthis.parentElement.dispatchEvent(event);\n\t};\n\n\tObject.defineProperty(HTMLElement.prototype, 'selected', descriptor);\n}\n\n// observe changes to the \"value\" property on an HTML Element\nfunction observeValueOfHTMLElement(HTMLElement, handler) {\n\tvar descriptor = Object.getOwnPropertyDescriptor(HTMLElement.prototype, 'value');\n\tvar nativeSet = descriptor.set;\n\n\tdescriptor.set = function set() {\n\t\tnativeSet.apply(this, arguments);\n\t\thandler({ target: this });\n\t};\n\n\tObject.defineProperty(HTMLElement.prototype, 'value', descriptor);\n}\n\nexport default function cssBlankPseudoInit(opts) {\n\t// configuration\n\tvar options = {\n\t\tforce: false,\n\t\treplaceWith: '[blank]',\n\t};\n\n\tif (typeof opts !== 'undefined' && 'force' in opts) {\n\t\toptions.force = opts.force;\n\t}\n\n\tif (typeof opts !== 'undefined' && 'replaceWith' in opts) {\n\t\toptions.replaceWith = opts.replaceWith;\n\t}\n\n\ttry {\n\t\tdocument.querySelector(':blank');\n\n\t\tif (!options.force) {\n\t\t\treturn;\n\t\t}\n\t} catch (_) {}\n\n\tvar handler = generateHandler(options.replaceWith);\n\tvar bindEvents = function bindEvents() {\n\t\tif (document.body) {\n\t\t\tdocument.body.addEventListener('change', handler);\n\t\t\tdocument.body.addEventListener('input', handler);\n\t\t}\n\t};\n\tvar updateAllCandidates = function updateAllCandidates() {\n\t\tvar elements = document.querySelectorAll('input, select, textarea');\n\n\t\tfor (var i = 0; i < elements.length; i++) {\n\t\t\thandler({ target: elements[i] });\n\t\t}\n\t};\n\n\tif (document.body) {\n\t\tbindEvents();\n\t} else {\n\t\twindow.addEventListener('load', bindEvents);\n\t}\n\n\tif (document.documentElement.className.indexOf('js-blank-pseudo') === -1) {\n\t\tdocument.documentElement.className += ' js-blank-pseudo';\n\t}\n\n\tobserveValueOfHTMLElement(self.HTMLInputElement, handler);\n\tobserveValueOfHTMLElement(self.HTMLSelectElement, handler);\n\tobserveValueOfHTMLElement(self.HTMLTextAreaElement, handler);\n\tobserveSelectedOfHTMLElement(self.HTMLOptionElement);\n\n\t// conditionally update all form control elements\n\tupdateAllCandidates();\n\n\tif (typeof self.MutationObserver !== 'undefined') {\n\t\t// conditionally observe added or unobserve removed form control elements\n\t\tnew MutationObserver(function (mutationsList) {\n\t\t\tfor (var j = 0; j < mutationsList.length; j++) {\n\t\t\t\tvar mutation = mutationsList[j];\n\n\t\t\t\tfor (var k = 0; k < mutation.addedNodes.length; k++) {\n\t\t\t\t\tvar node = mutation.addedNodes[k];\n\n\t\t\t\t\tif (node.nodeType === 1 && isFormControlElement(node)) {\n\t\t\t\t\t\thandler({ target: node });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}).observe(document, { childList: true, subtree: true });\n\t} else {\n\t\twindow.addEventListener('load', updateAllCandidates);\n\t\twindow.addEventListener('DOMContentLoaded', updateAllCandidates);\n\t}\n}\n"],"names":["isFormControlElement","element","nodeName","createNewEvent","eventName","event","Event","bubbles","document","createEvent","initEvent","observeValueOfHTMLElement","HTMLElement","handler","descriptor","Object","getOwnPropertyDescriptor","prototype","nativeSet","set","apply","this","arguments","target","defineProperty","cssBlankPseudoInit","opts","options","force","replaceWith","querySelector","_","selector","remove","add","slice","el","classList","removeAttribute","setAttribute","handleInputOrChangeEvent","selectedIndex","value","bindEvents","body","addEventListener","updateAllCandidates","elements","querySelectorAll","i","length","window","documentElement","className","indexOf","self","HTMLInputElement","HTMLSelectElement","HTMLTextAreaElement","HTMLOptionElement","parentElement","dispatchEvent","MutationObserver","mutationsList","j","mutation","k","addedNodes","node","nodeType","observe","childList","subtree"],"mappings":"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"}