{"version":3,"file":"html.js","names":["getFormValues","form","params","elements","filter","el","name","disabled","forEach","value","getRelativeSelector","node","root","arguments","length","document","body","selectorArray","contains","localSelector","tagName","id","test","unshift","Array","from","classList","item","indexOf","attr","hasAttribute","getAttribute","siblingsIndex","parentNode","children","join","encodeHTMLEntity","entity","replace","isChildOf","element","rootElement","parentElement","setters","execute"],"sources":["toolbox/html.js"],"sourcesContent":["/* eslint-disable no-loop-func */\n/**\n * Html tools\n */\n\n/**\n * Returns list of non disabled inputs with not empty values\n *\n * @param {Object} form form DOM element\n * @returns {Object} list of form values\n */\nexport function getFormValues(form) {\n const params = {};\n\n // filter nameless & disabled elements\n [...form.elements].filter(el => !!el.name || el.disabled).forEach((el) => {\n params[el.name] = el.value;\n });\n\n return params;\n}\n\n/**\n * Returns relative css selector\n * Script tries to find full CSS path between root and target node.\n * Runs from target node to root and prepends selector for each level or till id will be found\n * @param {HTMLElement} node target element\n * @param {HTMLElement} root root element\n * @returns {String} relative selector\n */\nexport function getRelativeSelector(node, root = document.body) {\n const selectorArray = [];\n\n if (!root.contains(node)) {\n return null;\n }\n\n while (node !== root) {\n let localSelector = node.tagName;\n // use id if it is not random generated\n if (node.id && !/.+-[0-9]+$/.test(node.id)) {\n localSelector += `#${node.id}`;\n selectorArray.unshift(localSelector);\n break;\n }\n Array.from(node.classList)\n .filter(item => item.indexOf('c-') === 0)\n .forEach((item) => {\n localSelector += `.${item}`;\n });\n\n // write imporant attributes\n ['name', 'data-component', 'data-focus-id'].forEach((attr) => {\n if (node.hasAttribute(attr)) {\n localSelector += `[${attr}=\"${node.getAttribute(attr)}\"]`;\n }\n });\n\n const siblingsIndex = Array.from(node.parentNode.children).indexOf(node) + 1;\n localSelector += `:nth-child(${siblingsIndex})`;\n selectorArray.unshift(localSelector);\n node = node.parentNode;\n }\n return selectorArray.join('>');\n}\n\n/**\n * Encode untrusted data before inserting it into HTML element content.\n * The purpose of output encoding (as it relates to Cross Site Scripting)\n * is to convert untrusted input into a safe form where the input is displayed as data\n * to the user without executing as code in the browser.\n *\n * @param {String} entity unsafe html entity\n * @returns {String} safe html entity\n */\nexport function encodeHTMLEntity(entity) {\n return entity\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n\n/**\n * Check if element is child of root element\n * @param {Element} element child element\n * @param {Element} rootElement root element\n * @returns {Boolean} true if element is child of root element\n */\nexport function isChildOf(element, rootElement) {\n while (element) {\n if (element === rootElement) {\n return true;\n }\n element = element.parentElement;\n }\n return false;\n}\n"],"mappings":"iFAWO,QAAAA,CAAuBC,CAAI,CAAE,CAChC,KAAM,CAAAC,CAAM,CAAG,CAAC,CAAC,CAOjB,MAJA,CAAC,GAAGD,CAAI,CAACE,QAAQ,CAAC,CAACC,MAAM,CAACC,CAAE,EAAI,CAAC,CAACA,CAAE,CAACC,IAAI,EAAID,CAAE,CAACE,QAAQ,CAAC,CAACC,OAAO,CAAEH,CAAE,EAAK,CACtEH,CAAM,CAACG,CAAE,CAACC,IAAI,CAAC,CAAGD,CAAE,CAACI,KACzB,CAAC,CAAC,CAEKP,CACX,CAAC,CAAAQ,mBAAA,CAUM,QAAAA,CAA6BC,CAAI,CAAwB,IAAtB,CAAAC,CAAI,GAAAC,SAAA,CAAAC,MAAA,WAAAD,SAAA,IAAAA,SAAA,IAAGE,QAAQ,CAACC,IAAI,CAC1D,KAAM,CAAAC,CAAa,CAAG,EAAE,CAExB,GAAI,CAACL,CAAI,CAACM,QAAQ,CAACP,CAAI,CAAC,CACpB,MAAO,KAAI,CACd,KAEMA,CAAI,GAAKC,CAAI,EAAE,CAClB,GAAI,CAAAO,CAAa,CAAGR,CAAI,CAACS,OAAO,CAEhC,GAAIT,CAAI,CAACU,EAAE,EAAI,CAAC,YAAY,CAACC,IAAI,CAACX,CAAI,CAACU,EAAE,CAAC,CAAE,CACxCF,CAAa,EAAK,IAAGR,CAAI,CAACU,EAAG,EAAC,CAC9BJ,CAAa,CAACM,OAAO,CAACJ,CAAa,CAAC,CACpC,KACJ,CACAK,KAAK,CAACC,IAAI,CAACd,CAAI,CAACe,SAAS,CAAC,CACrBtB,MAAM,CAACuB,CAAI,EAA2B,CAAC,GAAxBA,CAAI,CAACC,OAAO,CAAC,IAAI,CAAO,CAAC,CACxCpB,OAAO,CAAEmB,CAAI,EAAK,CACfR,CAAa,EAAK,IAAGQ,CAAK,EAC9B,CAAC,CAAC,CAGN,CAAC,MAAM,CAAE,gBAAgB,CAAE,eAAe,CAAC,CAACnB,OAAO,CAAEqB,CAAI,EAAK,CACtDlB,CAAI,CAACmB,YAAY,CAACD,CAAI,CAAC,GACvBV,CAAa,EAAK,IAAGU,CAAK,KAAIlB,CAAI,CAACoB,YAAY,CAACF,CAAI,CAAE,IAAG,CAEjE,CAAC,CAAC,CAEF,KAAM,CAAAG,CAAa,CAAGR,KAAK,CAACC,IAAI,CAACd,CAAI,CAACsB,UAAU,CAACC,QAAQ,CAAC,CAACN,OAAO,CAACjB,CAAI,CAAC,CAAG,CAAC,CAC5EQ,CAAa,EAAK,cAAaa,CAAc,GAAE,CAC/Cf,CAAa,CAACM,OAAO,CAACJ,CAAa,CAAC,CACpCR,CAAI,CAAGA,CAAI,CAACsB,UAChB,CACA,MAAO,CAAAhB,CAAa,CAACkB,IAAI,CAAC,GAAG,CACjC,CAAC,CAAAC,gBAAA,CAWM,QAAAA,CAA0BC,CAAM,CAAE,CACrC,MAAO,CAAAA,CAAM,CACRC,OAAO,CAAC,IAAI,CAAE,OAAO,CAAC,CACtBA,OAAO,CAAC,IAAI,CAAE,MAAM,CAAC,CACrBA,OAAO,CAAC,IAAI,CAAE,MAAM,CAAC,CACrBA,OAAO,CAAC,IAAI,CAAE,QAAQ,CAAC,CACvBA,OAAO,CAAC,IAAI,CAAE,QAAQ,CAC/B,CAAC,CAAAC,SAAA,CAQM,QAAAA,CAAmBC,CAAO,CAAEC,CAAW,CAAE,MACrCD,CAAO,EAAE,CACZ,GAAIA,CAAO,GAAKC,CAAW,CACvB,SAEJD,CAAO,CAAGA,CAAO,CAACE,aACtB,CACA,QACJ,CAAC,IAAAC,OAAA,IAAAC,OAAA,SAAAA,CAAA","ignoreList":[]}