From d4b8920f20b5e38e7c3fea6a2625a8c8dd1c69fe Mon Sep 17 00:00:00 2001 From: Grzegorz Tomicki Date: Thu, 26 May 2022 14:57:14 +0200 Subject: [PATCH] fix: drop console --- README.md | 6 +++--- dist/js/showMore.esm.js | 1 - dist/js/showMore.esm.js.map | 2 +- dist/js/showMore.js | 1 - dist/js/showMore.js.map | 2 +- dist/js/showMore.min.js | 2 +- dist/js/showMore.umd.js | 1 - dist/js/showMore.umd.js.map | 2 +- docs/global.css.map | 2 +- docs/showMore.min.js | 2 +- docs/showMore.min.js.map | 2 +- package.json | 2 +- rollup.config.js | 8 +++++++- sources/index.js | 2 +- 14 files changed, 19 insertions(+), 16 deletions(-) diff --git a/README.md b/README.md index 1beed86..76c63c3 100644 --- a/README.md +++ b/README.md @@ -64,12 +64,12 @@ npm run prod HTML ```html - + ``` CSS ```html - + ``` -- OR -- @@ -283,7 +283,7 @@ Configuration for IE: ### cdn -- https://cdn.jsdelivr.net/gh/tomik23/show-more@1.1.3/dist/js/showMore.ie.min.js +- https://cdn.jsdelivr.net/gh/tomik23/show-more@1.1.4/dist/js/showMore.ie.min.js ### cdn polyfill from npm diff --git a/dist/js/showMore.esm.js b/dist/js/showMore.esm.js index 6eec4a7..3ebedcd 100644 --- a/dist/js/showMore.esm.js +++ b/dist/js/showMore.esm.js @@ -98,7 +98,6 @@ class ShowMore { }); const limitCounts = limit + after; const ellips = ellipsis === false ? "" : "..."; - console.log(nobutton); if (type === "text") { const originalText = element.innerHTML.trim(); const elementText = element.textContent.trim(); diff --git a/dist/js/showMore.esm.js.map b/dist/js/showMore.esm.js.map index f53fe7e..f4b98c0 100644 --- a/dist/js/showMore.esm.js.map +++ b/dist/js/showMore.esm.js.map @@ -1 +1 @@ -{"version":3,"file":"showMore.esm.js","sources":["../../sources/utils/function.js","../../sources/utils/regex.js","../../sources/utils/defaults.js","../../sources/index.js"],"sourcesContent":["/**\r\n * Get hidden element\r\n *\r\n * @param {object} object\r\n * @param {String} type - type of element table | div\r\n * @returns\r\n */\r\nconst getNumber = ({ rows, children }, type) => {\r\n const elementType = type === \"table\" ? rows : children;\r\n\r\n const numbersElementHidden = [].slice\r\n .call(elementType)\r\n .filter((el) => el.className === \"hidden\").length;\r\n return numbersElementHidden !== 0 ? ` ${numbersElementHidden}` : \"\";\r\n};\r\n\r\n// https://stackoverflow.com/questions/6003271/substring-text-with-html-tags-in-javascript\r\n/**\r\n * Substring text width html tags\r\n *\r\n * @param {String} originalText - text with html tags\r\n * @param {String} count - limit of characters\r\n * @returns\r\n */\r\nconst htmlSubstr = (originalText, count) => {\r\n let div = createElement(\"div\");\r\n div.insertAdjacentHTML(\"afterbegin\", originalText);\r\n\r\n walk(div, track);\r\n\r\n function track(el) {\r\n if (count > 0) {\r\n let len = el.data.length;\r\n count -= len;\r\n if (count <= 0) {\r\n el.data = el.substringData(0, el.data.length + count);\r\n }\r\n } else {\r\n el.data = \"\";\r\n }\r\n }\r\n\r\n function walk(el, fn) {\r\n let node = el.firstChild;\r\n do {\r\n if (node.nodeType === 3) {\r\n fn(node);\r\n } else if (node.nodeType === 1 && node.childNodes && node.childNodes[0]) {\r\n walk(node, fn);\r\n }\r\n } while ((node = node.nextSibling));\r\n }\r\n return div.innerHTML;\r\n};\r\n\r\n/**\r\n * Add/remove class 'hidden' to element\r\n *\r\n * @param {HTMLElement} element\r\n * @param {String} type - type of element add or remove\r\n */\r\nconst addRemoveClass = (element, type = false) => {\r\n return element.classList[type ? \"add\" : \"remove\"](\"hidden\");\r\n};\r\n\r\n/**\r\n * Set attributes to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {Object} object\r\n */\r\nconst setAttributes = (el, object) => {\r\n for (let key in object) {\r\n el.setAttribute(key, object[key]);\r\n }\r\n};\r\n\r\n/**\r\n * Create element\r\n *\r\n * @param {String} type - type of element\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (type) => document.createElement(type);\r\n\r\nexport { addRemoveClass, createElement, getNumber, htmlSubstr, setAttributes };\r\n","/**\r\n * Default regexes for validation\r\n */\r\nconst defaultRegex = {\r\n newLine: {\r\n match: /(\\r\\n|\\n|\\r)/gm,\r\n replace: \"\",\r\n },\r\n space: {\r\n match: /\\s\\s+/gm,\r\n replace: \" \",\r\n },\r\n br: {\r\n match: //gim,\r\n replace: \"\",\r\n },\r\n html: {\r\n match: /(<((?!b|\\/b|!strong|\\/strong)[^>]+)>)/gi,\r\n replace: \"\",\r\n },\r\n};\r\n\r\nexport default defaultRegex;\r\n","const defaultOptions = {\r\n typeElement: \"span\",\r\n more: false,\r\n less: false,\r\n number: false,\r\n nobutton: false,\r\n after: 0,\r\n btnClass: \"show-more-btn\",\r\n btnClassAppend: null,\r\n};\r\n\r\nexport default defaultOptions;\r\n","import {\r\n addRemoveClass,\r\n createElement,\r\n getNumber,\r\n htmlSubstr,\r\n setAttributes,\r\n} from \"./utils/function\";\r\nimport defaultRegex from \"./utils/regex\";\r\nimport defaultOptions from \"./utils/defaults\";\r\n\r\n/**\r\n * @class ShowMore\r\n */\r\nexport default class ShowMore {\r\n /**\r\n * Constructor\r\n *\r\n * @param {HTMLElement} className\r\n * @param {Object} object\r\n */\r\n constructor(className, { onMoreLess = () => {}, regex = {}, config } = {}) {\r\n // all html elements\r\n const elements = [].slice.call(document.querySelectorAll(className));\r\n\r\n // colback function\r\n this._onMoreLess = onMoreLess;\r\n\r\n // global regex\r\n this._regex = { ...defaultRegex, ...regex };\r\n\r\n elements.map((item, index) => {\r\n const configData = JSON.parse(item.getAttribute(\"data-config\"));\r\n const configGlobal = config;\r\n\r\n const configDataAndGlobal = { ...configGlobal, ...configData };\r\n\r\n this._object = {\r\n index,\r\n classArray: item.classList,\r\n ...defaultOptions,\r\n ...configDataAndGlobal,\r\n typeElement: configDataAndGlobal.element || \"span\",\r\n element: item,\r\n };\r\n\r\n this._initial();\r\n });\r\n }\r\n\r\n /**\r\n * Initail function\r\n *\r\n * @param {Object} object\r\n */\r\n _initial = () => {\r\n const { element, after, ellipsis, nobutton, limit, type } = this._object;\r\n // set default aria-expande to false\r\n setAttributes(element, { \"aria-expanded\": \"false\" });\r\n\r\n const limitCounts = limit + after;\r\n const ellips = ellipsis === false ? \"\" : \"...\";\r\n\r\n console.log(nobutton);\r\n\r\n // text\r\n if (type === \"text\") {\r\n const originalText = element.innerHTML.trim();\r\n const elementText = element.textContent.trim();\r\n\r\n if (elementText.length > limitCounts) {\r\n let orgTexReg = originalText;\r\n\r\n for (let key in this._regex) {\r\n const { match, replace } = this._regex[key];\r\n if (key && match) orgTexReg = orgTexReg.replace(match, replace);\r\n }\r\n\r\n const truncatedText = htmlSubstr(orgTexReg, limit - 1).concat(ellips);\r\n\r\n element.textContent = \"\";\r\n element.insertAdjacentHTML(\"beforeend\", truncatedText);\r\n\r\n this._clickEvent(element, {\r\n ...this._object,\r\n originalText,\r\n truncatedText,\r\n });\r\n\r\n if (nobutton) return;\r\n this._addBtn(this._object);\r\n }\r\n }\r\n\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n if (items.length > limitCounts) {\r\n for (let i = limit; i < items.length; i++) {\r\n addRemoveClass(items[i], true);\r\n }\r\n\r\n // add event click\r\n this._clickEvent(\r\n type === \"list\" ? element : element.nextElementSibling,\r\n this._object\r\n );\r\n\r\n if (nobutton) return;\r\n // add button to the list and table\r\n this._addBtn(this._object);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Event click\r\n *\r\n * @param {HTMLElement} element\r\n * @param {Object} object\r\n */\r\n _clickEvent = (element, object) =>\r\n element.addEventListener(\"click\", this._handleEvent.bind(this, object));\r\n\r\n /**\r\n * Create button\r\n *\r\n * @param {Object} object\r\n * @returns HTMLElement\r\n */\r\n _createBtn = ({\r\n element,\r\n number,\r\n less,\r\n more,\r\n type,\r\n btnClass,\r\n btnClassAppend,\r\n }) => {\r\n const typeAria = this._checkExp ? less || \"\" : more || \"\";\r\n const label = this._checkExp ? \"collapse\" : \"expand\";\r\n const expanded = this._checkExp ? true : false;\r\n\r\n const button = createElement(\"button\");\r\n button.className =\r\n btnClassAppend == null ? btnClass : btnClass + \" \" + btnClassAppend;\r\n setAttributes(button, {\r\n \"aria-expanded\": expanded,\r\n \"aria-label\": label,\r\n tabindex: 0,\r\n });\r\n\r\n button.insertAdjacentHTML(\r\n \"beforeend\",\r\n number ? typeAria + getNumber(element, type) : typeAria\r\n );\r\n return button;\r\n };\r\n\r\n /**\r\n * Event handler\r\n *\r\n * @param {Object} object\r\n * @param {Event} event\r\n */\r\n _handleEvent = (object, { target }) => {\r\n const {\r\n element,\r\n type,\r\n limit,\r\n less,\r\n typeElement,\r\n originalText,\r\n truncatedText,\r\n btnClass,\r\n } = object;\r\n\r\n // check if the button is clicked\r\n const checkContainsClass = target.classList.contains(btnClass);\r\n\r\n if (!checkContainsClass) return;\r\n\r\n const ariaExpanded = element.getAttribute(\"aria-expanded\");\r\n this._checkExp = ariaExpanded === \"false\";\r\n\r\n // --------------------------------------------------\r\n // text\r\n if (type === \"text\" && checkContainsClass) {\r\n element.textContent = \"\";\r\n\r\n element.insertAdjacentHTML(\r\n \"beforeend\",\r\n this._checkExp ? originalText : truncatedText\r\n );\r\n\r\n if (less) {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.insertAdjacentElement(\"beforeend\", this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n }\r\n\r\n // --------------------------------------------------\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n const typeRemove =\r\n type === \"list\" ? i >= limit && i < items.length - 1 : i >= limit;\r\n\r\n if (ariaExpanded === \"false\") {\r\n addRemoveClass(items[i]);\r\n } else if (typeRemove) {\r\n addRemoveClass(items[i], true);\r\n }\r\n }\r\n }\r\n\r\n // set aria-expanded\r\n if (type) {\r\n this._setExpand({ ...object, target });\r\n }\r\n };\r\n\r\n _getNumberCount = (element, type) => {\r\n return type === \"list\" ? [].slice.call(element.children) : element.rows;\r\n };\r\n\r\n /**\r\n * Add button\r\n *\r\n * @param {Object} object\r\n */\r\n _addBtn = (object) => {\r\n const { type, element, more, typeElement } = object;\r\n\r\n if (!more) return;\r\n\r\n if (type === \"table\") {\r\n element.insertAdjacentElement(\"afterend\", this._createBtn(object));\r\n } else {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.appendChild(this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n };\r\n\r\n /**\r\n * Set aria-expanded\r\n *\r\n * @param {Object} object\r\n */\r\n _setExpand = (object) => {\r\n const { element, type, less, more, number, target } = object;\r\n\r\n const typeAria = this._checkExp ? less : more;\r\n const aria = this._checkExp ? \"expand\" : \"collapse\";\r\n const ariaText = type === \"table\" ? type : `the ${type}`;\r\n const lastChild = element.lastElementChild;\r\n\r\n setAttributes(element, { \"aria-expanded\": this._checkExp });\r\n setAttributes(target, {\r\n \"aria-expanded\": this._checkExp,\r\n \"aria-label\": `${aria} ${ariaText}`,\r\n });\r\n\r\n // callback function on more/less\r\n this._onMoreLess(aria, object);\r\n\r\n if (typeAria) {\r\n target.innerHTML = number\r\n ? typeAria + getNumber(element, type)\r\n : typeAria;\r\n } else if (type === \"table\") {\r\n target.parentNode.removeChild(target);\r\n } else if (type === \"list\") {\r\n lastChild.parentNode.removeChild(lastChild);\r\n }\r\n };\r\n}\r\n"],"names":["getNumber","type","rows","children","elementType","numbersElementHidden","slice","call","filter","el","className","length","htmlSubstr","originalText","count","div","createElement","insertAdjacentHTML","walk","track","len","data","substringData","fn","node","firstChild","nodeType","childNodes","nextSibling","innerHTML","addRemoveClass","element","classList","setAttributes","object","key","setAttribute","document","defaultRegex","newLine","match","replace","space","br","html","defaultOptions","typeElement","more","less","number","nobutton","after","btnClass","btnClassAppend","ShowMore","constructor","onMoreLess","regex","config","_initial","ellipsis","limit","_object","limitCounts","ellips","console","log","trim","elementText","textContent","orgTexReg","_regex","truncatedText","concat","_clickEvent","_addBtn","items","_getNumberCount","i","nextElementSibling","addEventListener","_handleEvent","bind","_createBtn","typeAria","_checkExp","label","expanded","button","tabindex","target","checkContainsClass","contains","ariaExpanded","getAttribute","add","insertAdjacentElement","appendChild","typeRemove","_setExpand","aria","ariaText","lastChild","lastElementChild","_onMoreLess","parentNode","removeChild","elements","querySelectorAll","map","item","index","configData","JSON","parse","configGlobal","configDataAndGlobal","classArray"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"showMore.esm.js","sources":["../../sources/utils/function.js","../../sources/utils/regex.js","../../sources/utils/defaults.js","../../sources/index.js"],"sourcesContent":["/**\r\n * Get hidden element\r\n *\r\n * @param {object} object\r\n * @param {String} type - type of element table | div\r\n * @returns\r\n */\r\nconst getNumber = ({ rows, children }, type) => {\r\n const elementType = type === \"table\" ? rows : children;\r\n\r\n const numbersElementHidden = [].slice\r\n .call(elementType)\r\n .filter((el) => el.className === \"hidden\").length;\r\n return numbersElementHidden !== 0 ? ` ${numbersElementHidden}` : \"\";\r\n};\r\n\r\n// https://stackoverflow.com/questions/6003271/substring-text-with-html-tags-in-javascript\r\n/**\r\n * Substring text width html tags\r\n *\r\n * @param {String} originalText - text with html tags\r\n * @param {String} count - limit of characters\r\n * @returns\r\n */\r\nconst htmlSubstr = (originalText, count) => {\r\n let div = createElement(\"div\");\r\n div.insertAdjacentHTML(\"afterbegin\", originalText);\r\n\r\n walk(div, track);\r\n\r\n function track(el) {\r\n if (count > 0) {\r\n let len = el.data.length;\r\n count -= len;\r\n if (count <= 0) {\r\n el.data = el.substringData(0, el.data.length + count);\r\n }\r\n } else {\r\n el.data = \"\";\r\n }\r\n }\r\n\r\n function walk(el, fn) {\r\n let node = el.firstChild;\r\n do {\r\n if (node.nodeType === 3) {\r\n fn(node);\r\n } else if (node.nodeType === 1 && node.childNodes && node.childNodes[0]) {\r\n walk(node, fn);\r\n }\r\n } while ((node = node.nextSibling));\r\n }\r\n return div.innerHTML;\r\n};\r\n\r\n/**\r\n * Add/remove class 'hidden' to element\r\n *\r\n * @param {HTMLElement} element\r\n * @param {String} type - type of element add or remove\r\n */\r\nconst addRemoveClass = (element, type = false) => {\r\n return element.classList[type ? \"add\" : \"remove\"](\"hidden\");\r\n};\r\n\r\n/**\r\n * Set attributes to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {Object} object\r\n */\r\nconst setAttributes = (el, object) => {\r\n for (let key in object) {\r\n el.setAttribute(key, object[key]);\r\n }\r\n};\r\n\r\n/**\r\n * Create element\r\n *\r\n * @param {String} type - type of element\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (type) => document.createElement(type);\r\n\r\nexport { addRemoveClass, createElement, getNumber, htmlSubstr, setAttributes };\r\n","/**\r\n * Default regexes for validation\r\n */\r\nconst defaultRegex = {\r\n newLine: {\r\n match: /(\\r\\n|\\n|\\r)/gm,\r\n replace: \"\",\r\n },\r\n space: {\r\n match: /\\s\\s+/gm,\r\n replace: \" \",\r\n },\r\n br: {\r\n match: //gim,\r\n replace: \"\",\r\n },\r\n html: {\r\n match: /(<((?!b|\\/b|!strong|\\/strong)[^>]+)>)/gi,\r\n replace: \"\",\r\n },\r\n};\r\n\r\nexport default defaultRegex;\r\n","const defaultOptions = {\r\n typeElement: \"span\",\r\n more: false,\r\n less: false,\r\n number: false,\r\n nobutton: false,\r\n after: 0,\r\n btnClass: \"show-more-btn\",\r\n btnClassAppend: null,\r\n};\r\n\r\nexport default defaultOptions;\r\n","import {\r\n addRemoveClass,\r\n createElement,\r\n getNumber,\r\n htmlSubstr,\r\n setAttributes,\r\n} from \"./utils/function\";\r\nimport defaultRegex from \"./utils/regex\";\r\nimport defaultOptions from \"./utils/defaults\";\r\n\r\n/**\r\n * @class ShowMore\r\n */\r\nexport default class ShowMore {\r\n /**\r\n * Constructor\r\n *\r\n * @param {HTMLElement} className\r\n * @param {Object} object\r\n */\r\n constructor(className, { onMoreLess = () => {}, regex = {}, config } = {}) {\r\n // all html elements\r\n const elements = [].slice.call(document.querySelectorAll(className));\r\n\r\n // colback function\r\n this._onMoreLess = onMoreLess;\r\n\r\n // global regex\r\n this._regex = { ...defaultRegex, ...regex };\r\n\r\n elements.map((item, index) => {\r\n const configData = JSON.parse(item.getAttribute(\"data-config\"));\r\n const configGlobal = config;\r\n\r\n const configDataAndGlobal = { ...configGlobal, ...configData };\r\n\r\n this._object = {\r\n index,\r\n classArray: item.classList,\r\n ...defaultOptions,\r\n ...configDataAndGlobal,\r\n typeElement: configDataAndGlobal.element || \"span\",\r\n element: item,\r\n };\r\n\r\n this._initial();\r\n });\r\n }\r\n\r\n /**\r\n * Initail function\r\n *\r\n * @param {Object} object\r\n */\r\n _initial = () => {\r\n const { element, after, ellipsis, nobutton, limit, type } = this._object;\r\n // set default aria-expande to false\r\n setAttributes(element, { \"aria-expanded\": \"false\" });\r\n\r\n const limitCounts = limit + after;\r\n const ellips = ellipsis === false ? \"\" : \"...\";\r\n\r\n // console.log(nobutton);\r\n\r\n // text\r\n if (type === \"text\") {\r\n const originalText = element.innerHTML.trim();\r\n const elementText = element.textContent.trim();\r\n\r\n if (elementText.length > limitCounts) {\r\n let orgTexReg = originalText;\r\n\r\n for (let key in this._regex) {\r\n const { match, replace } = this._regex[key];\r\n if (key && match) orgTexReg = orgTexReg.replace(match, replace);\r\n }\r\n\r\n const truncatedText = htmlSubstr(orgTexReg, limit - 1).concat(ellips);\r\n\r\n element.textContent = \"\";\r\n element.insertAdjacentHTML(\"beforeend\", truncatedText);\r\n\r\n this._clickEvent(element, {\r\n ...this._object,\r\n originalText,\r\n truncatedText,\r\n });\r\n\r\n if (nobutton) return;\r\n this._addBtn(this._object);\r\n }\r\n }\r\n\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n if (items.length > limitCounts) {\r\n for (let i = limit; i < items.length; i++) {\r\n addRemoveClass(items[i], true);\r\n }\r\n\r\n // add event click\r\n this._clickEvent(\r\n type === \"list\" ? element : element.nextElementSibling,\r\n this._object\r\n );\r\n\r\n if (nobutton) return;\r\n // add button to the list and table\r\n this._addBtn(this._object);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Event click\r\n *\r\n * @param {HTMLElement} element\r\n * @param {Object} object\r\n */\r\n _clickEvent = (element, object) =>\r\n element.addEventListener(\"click\", this._handleEvent.bind(this, object));\r\n\r\n /**\r\n * Create button\r\n *\r\n * @param {Object} object\r\n * @returns HTMLElement\r\n */\r\n _createBtn = ({\r\n element,\r\n number,\r\n less,\r\n more,\r\n type,\r\n btnClass,\r\n btnClassAppend,\r\n }) => {\r\n const typeAria = this._checkExp ? less || \"\" : more || \"\";\r\n const label = this._checkExp ? \"collapse\" : \"expand\";\r\n const expanded = this._checkExp ? true : false;\r\n\r\n const button = createElement(\"button\");\r\n button.className =\r\n btnClassAppend == null ? btnClass : btnClass + \" \" + btnClassAppend;\r\n setAttributes(button, {\r\n \"aria-expanded\": expanded,\r\n \"aria-label\": label,\r\n tabindex: 0,\r\n });\r\n\r\n button.insertAdjacentHTML(\r\n \"beforeend\",\r\n number ? typeAria + getNumber(element, type) : typeAria\r\n );\r\n return button;\r\n };\r\n\r\n /**\r\n * Event handler\r\n *\r\n * @param {Object} object\r\n * @param {Event} event\r\n */\r\n _handleEvent = (object, { target }) => {\r\n const {\r\n element,\r\n type,\r\n limit,\r\n less,\r\n typeElement,\r\n originalText,\r\n truncatedText,\r\n btnClass,\r\n } = object;\r\n\r\n // check if the button is clicked\r\n const checkContainsClass = target.classList.contains(btnClass);\r\n\r\n if (!checkContainsClass) return;\r\n\r\n const ariaExpanded = element.getAttribute(\"aria-expanded\");\r\n this._checkExp = ariaExpanded === \"false\";\r\n\r\n // --------------------------------------------------\r\n // text\r\n if (type === \"text\" && checkContainsClass) {\r\n element.textContent = \"\";\r\n\r\n element.insertAdjacentHTML(\r\n \"beforeend\",\r\n this._checkExp ? originalText : truncatedText\r\n );\r\n\r\n if (less) {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.insertAdjacentElement(\"beforeend\", this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n }\r\n\r\n // --------------------------------------------------\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n const typeRemove =\r\n type === \"list\" ? i >= limit && i < items.length - 1 : i >= limit;\r\n\r\n if (ariaExpanded === \"false\") {\r\n addRemoveClass(items[i]);\r\n } else if (typeRemove) {\r\n addRemoveClass(items[i], true);\r\n }\r\n }\r\n }\r\n\r\n // set aria-expanded\r\n if (type) {\r\n this._setExpand({ ...object, target });\r\n }\r\n };\r\n\r\n _getNumberCount = (element, type) => {\r\n return type === \"list\" ? [].slice.call(element.children) : element.rows;\r\n };\r\n\r\n /**\r\n * Add button\r\n *\r\n * @param {Object} object\r\n */\r\n _addBtn = (object) => {\r\n const { type, element, more, typeElement } = object;\r\n\r\n if (!more) return;\r\n\r\n if (type === \"table\") {\r\n element.insertAdjacentElement(\"afterend\", this._createBtn(object));\r\n } else {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.appendChild(this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n };\r\n\r\n /**\r\n * Set aria-expanded\r\n *\r\n * @param {Object} object\r\n */\r\n _setExpand = (object) => {\r\n const { element, type, less, more, number, target } = object;\r\n\r\n const typeAria = this._checkExp ? less : more;\r\n const aria = this._checkExp ? \"expand\" : \"collapse\";\r\n const ariaText = type === \"table\" ? type : `the ${type}`;\r\n const lastChild = element.lastElementChild;\r\n\r\n setAttributes(element, { \"aria-expanded\": this._checkExp });\r\n setAttributes(target, {\r\n \"aria-expanded\": this._checkExp,\r\n \"aria-label\": `${aria} ${ariaText}`,\r\n });\r\n\r\n // callback function on more/less\r\n this._onMoreLess(aria, object);\r\n\r\n if (typeAria) {\r\n target.innerHTML = number\r\n ? typeAria + getNumber(element, type)\r\n : typeAria;\r\n } else if (type === \"table\") {\r\n target.parentNode.removeChild(target);\r\n } else if (type === \"list\") {\r\n lastChild.parentNode.removeChild(lastChild);\r\n }\r\n };\r\n}\r\n"],"names":["getNumber","type","rows","children","elementType","numbersElementHidden","slice","call","filter","el","className","length","htmlSubstr","originalText","count","div","createElement","insertAdjacentHTML","walk","track","len","data","substringData","fn","node","firstChild","nodeType","childNodes","nextSibling","innerHTML","addRemoveClass","element","classList","setAttributes","object","key","setAttribute","document","defaultRegex","newLine","match","replace","space","br","html","defaultOptions","typeElement","more","less","number","nobutton","after","btnClass","btnClassAppend","ShowMore","constructor","onMoreLess","regex","config","_initial","ellipsis","limit","_object","limitCounts","ellips","trim","elementText","textContent","orgTexReg","_regex","truncatedText","concat","_clickEvent","_addBtn","items","_getNumberCount","i","nextElementSibling","addEventListener","_handleEvent","bind","_createBtn","typeAria","_checkExp","label","expanded","button","tabindex","target","checkContainsClass","contains","ariaExpanded","getAttribute","add","insertAdjacentElement","appendChild","typeRemove","_setExpand","aria","ariaText","lastChild","lastElementChild","_onMoreLess","parentNode","removeChild","elements","querySelectorAll","map","item","index","configData","JSON","parse","configGlobal","configDataAndGlobal","classArray"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/showMore.js b/dist/js/showMore.js index dfe1b00..5633468 100644 --- a/dist/js/showMore.js +++ b/dist/js/showMore.js @@ -101,7 +101,6 @@ var ShowMore = (function () { }); const limitCounts = limit + after; const ellips = ellipsis === false ? "" : "..."; - console.log(nobutton); if (type === "text") { const originalText = element.innerHTML.trim(); const elementText = element.textContent.trim(); diff --git a/dist/js/showMore.js.map b/dist/js/showMore.js.map index 30a169a..3860f65 100644 --- a/dist/js/showMore.js.map +++ b/dist/js/showMore.js.map @@ -1 +1 @@ -{"version":3,"file":"showMore.js","sources":["../../sources/utils/function.js","../../sources/utils/regex.js","../../sources/utils/defaults.js","../../sources/index.js"],"sourcesContent":["/**\r\n * Get hidden element\r\n *\r\n * @param {object} object\r\n * @param {String} type - type of element table | div\r\n * @returns\r\n */\r\nconst getNumber = ({ rows, children }, type) => {\r\n const elementType = type === \"table\" ? rows : children;\r\n\r\n const numbersElementHidden = [].slice\r\n .call(elementType)\r\n .filter((el) => el.className === \"hidden\").length;\r\n return numbersElementHidden !== 0 ? ` ${numbersElementHidden}` : \"\";\r\n};\r\n\r\n// https://stackoverflow.com/questions/6003271/substring-text-with-html-tags-in-javascript\r\n/**\r\n * Substring text width html tags\r\n *\r\n * @param {String} originalText - text with html tags\r\n * @param {String} count - limit of characters\r\n * @returns\r\n */\r\nconst htmlSubstr = (originalText, count) => {\r\n let div = createElement(\"div\");\r\n div.insertAdjacentHTML(\"afterbegin\", originalText);\r\n\r\n walk(div, track);\r\n\r\n function track(el) {\r\n if (count > 0) {\r\n let len = el.data.length;\r\n count -= len;\r\n if (count <= 0) {\r\n el.data = el.substringData(0, el.data.length + count);\r\n }\r\n } else {\r\n el.data = \"\";\r\n }\r\n }\r\n\r\n function walk(el, fn) {\r\n let node = el.firstChild;\r\n do {\r\n if (node.nodeType === 3) {\r\n fn(node);\r\n } else if (node.nodeType === 1 && node.childNodes && node.childNodes[0]) {\r\n walk(node, fn);\r\n }\r\n } while ((node = node.nextSibling));\r\n }\r\n return div.innerHTML;\r\n};\r\n\r\n/**\r\n * Add/remove class 'hidden' to element\r\n *\r\n * @param {HTMLElement} element\r\n * @param {String} type - type of element add or remove\r\n */\r\nconst addRemoveClass = (element, type = false) => {\r\n return element.classList[type ? \"add\" : \"remove\"](\"hidden\");\r\n};\r\n\r\n/**\r\n * Set attributes to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {Object} object\r\n */\r\nconst setAttributes = (el, object) => {\r\n for (let key in object) {\r\n el.setAttribute(key, object[key]);\r\n }\r\n};\r\n\r\n/**\r\n * Create element\r\n *\r\n * @param {String} type - type of element\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (type) => document.createElement(type);\r\n\r\nexport { addRemoveClass, createElement, getNumber, htmlSubstr, setAttributes };\r\n","/**\r\n * Default regexes for validation\r\n */\r\nconst defaultRegex = {\r\n newLine: {\r\n match: /(\\r\\n|\\n|\\r)/gm,\r\n replace: \"\",\r\n },\r\n space: {\r\n match: /\\s\\s+/gm,\r\n replace: \" \",\r\n },\r\n br: {\r\n match: //gim,\r\n replace: \"\",\r\n },\r\n html: {\r\n match: /(<((?!b|\\/b|!strong|\\/strong)[^>]+)>)/gi,\r\n replace: \"\",\r\n },\r\n};\r\n\r\nexport default defaultRegex;\r\n","const defaultOptions = {\r\n typeElement: \"span\",\r\n more: false,\r\n less: false,\r\n number: false,\r\n nobutton: false,\r\n after: 0,\r\n btnClass: \"show-more-btn\",\r\n btnClassAppend: null,\r\n};\r\n\r\nexport default defaultOptions;\r\n","import {\r\n addRemoveClass,\r\n createElement,\r\n getNumber,\r\n htmlSubstr,\r\n setAttributes,\r\n} from \"./utils/function\";\r\nimport defaultRegex from \"./utils/regex\";\r\nimport defaultOptions from \"./utils/defaults\";\r\n\r\n/**\r\n * @class ShowMore\r\n */\r\nexport default class ShowMore {\r\n /**\r\n * Constructor\r\n *\r\n * @param {HTMLElement} className\r\n * @param {Object} object\r\n */\r\n constructor(className, { onMoreLess = () => {}, regex = {}, config } = {}) {\r\n // all html elements\r\n const elements = [].slice.call(document.querySelectorAll(className));\r\n\r\n // colback function\r\n this._onMoreLess = onMoreLess;\r\n\r\n // global regex\r\n this._regex = { ...defaultRegex, ...regex };\r\n\r\n elements.map((item, index) => {\r\n const configData = JSON.parse(item.getAttribute(\"data-config\"));\r\n const configGlobal = config;\r\n\r\n const configDataAndGlobal = { ...configGlobal, ...configData };\r\n\r\n this._object = {\r\n index,\r\n classArray: item.classList,\r\n ...defaultOptions,\r\n ...configDataAndGlobal,\r\n typeElement: configDataAndGlobal.element || \"span\",\r\n element: item,\r\n };\r\n\r\n this._initial();\r\n });\r\n }\r\n\r\n /**\r\n * Initail function\r\n *\r\n * @param {Object} object\r\n */\r\n _initial = () => {\r\n const { element, after, ellipsis, nobutton, limit, type } = this._object;\r\n // set default aria-expande to false\r\n setAttributes(element, { \"aria-expanded\": \"false\" });\r\n\r\n const limitCounts = limit + after;\r\n const ellips = ellipsis === false ? \"\" : \"...\";\r\n\r\n console.log(nobutton);\r\n\r\n // text\r\n if (type === \"text\") {\r\n const originalText = element.innerHTML.trim();\r\n const elementText = element.textContent.trim();\r\n\r\n if (elementText.length > limitCounts) {\r\n let orgTexReg = originalText;\r\n\r\n for (let key in this._regex) {\r\n const { match, replace } = this._regex[key];\r\n if (key && match) orgTexReg = orgTexReg.replace(match, replace);\r\n }\r\n\r\n const truncatedText = htmlSubstr(orgTexReg, limit - 1).concat(ellips);\r\n\r\n element.textContent = \"\";\r\n element.insertAdjacentHTML(\"beforeend\", truncatedText);\r\n\r\n this._clickEvent(element, {\r\n ...this._object,\r\n originalText,\r\n truncatedText,\r\n });\r\n\r\n if (nobutton) return;\r\n this._addBtn(this._object);\r\n }\r\n }\r\n\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n if (items.length > limitCounts) {\r\n for (let i = limit; i < items.length; i++) {\r\n addRemoveClass(items[i], true);\r\n }\r\n\r\n // add event click\r\n this._clickEvent(\r\n type === \"list\" ? element : element.nextElementSibling,\r\n this._object\r\n );\r\n\r\n if (nobutton) return;\r\n // add button to the list and table\r\n this._addBtn(this._object);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Event click\r\n *\r\n * @param {HTMLElement} element\r\n * @param {Object} object\r\n */\r\n _clickEvent = (element, object) =>\r\n element.addEventListener(\"click\", this._handleEvent.bind(this, object));\r\n\r\n /**\r\n * Create button\r\n *\r\n * @param {Object} object\r\n * @returns HTMLElement\r\n */\r\n _createBtn = ({\r\n element,\r\n number,\r\n less,\r\n more,\r\n type,\r\n btnClass,\r\n btnClassAppend,\r\n }) => {\r\n const typeAria = this._checkExp ? less || \"\" : more || \"\";\r\n const label = this._checkExp ? \"collapse\" : \"expand\";\r\n const expanded = this._checkExp ? true : false;\r\n\r\n const button = createElement(\"button\");\r\n button.className =\r\n btnClassAppend == null ? btnClass : btnClass + \" \" + btnClassAppend;\r\n setAttributes(button, {\r\n \"aria-expanded\": expanded,\r\n \"aria-label\": label,\r\n tabindex: 0,\r\n });\r\n\r\n button.insertAdjacentHTML(\r\n \"beforeend\",\r\n number ? typeAria + getNumber(element, type) : typeAria\r\n );\r\n return button;\r\n };\r\n\r\n /**\r\n * Event handler\r\n *\r\n * @param {Object} object\r\n * @param {Event} event\r\n */\r\n _handleEvent = (object, { target }) => {\r\n const {\r\n element,\r\n type,\r\n limit,\r\n less,\r\n typeElement,\r\n originalText,\r\n truncatedText,\r\n btnClass,\r\n } = object;\r\n\r\n // check if the button is clicked\r\n const checkContainsClass = target.classList.contains(btnClass);\r\n\r\n if (!checkContainsClass) return;\r\n\r\n const ariaExpanded = element.getAttribute(\"aria-expanded\");\r\n this._checkExp = ariaExpanded === \"false\";\r\n\r\n // --------------------------------------------------\r\n // text\r\n if (type === \"text\" && checkContainsClass) {\r\n element.textContent = \"\";\r\n\r\n element.insertAdjacentHTML(\r\n \"beforeend\",\r\n this._checkExp ? originalText : truncatedText\r\n );\r\n\r\n if (less) {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.insertAdjacentElement(\"beforeend\", this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n }\r\n\r\n // --------------------------------------------------\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n const typeRemove =\r\n type === \"list\" ? i >= limit && i < items.length - 1 : i >= limit;\r\n\r\n if (ariaExpanded === \"false\") {\r\n addRemoveClass(items[i]);\r\n } else if (typeRemove) {\r\n addRemoveClass(items[i], true);\r\n }\r\n }\r\n }\r\n\r\n // set aria-expanded\r\n if (type) {\r\n this._setExpand({ ...object, target });\r\n }\r\n };\r\n\r\n _getNumberCount = (element, type) => {\r\n return type === \"list\" ? [].slice.call(element.children) : element.rows;\r\n };\r\n\r\n /**\r\n * Add button\r\n *\r\n * @param {Object} object\r\n */\r\n _addBtn = (object) => {\r\n const { type, element, more, typeElement } = object;\r\n\r\n if (!more) return;\r\n\r\n if (type === \"table\") {\r\n element.insertAdjacentElement(\"afterend\", this._createBtn(object));\r\n } else {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.appendChild(this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n };\r\n\r\n /**\r\n * Set aria-expanded\r\n *\r\n * @param {Object} object\r\n */\r\n _setExpand = (object) => {\r\n const { element, type, less, more, number, target } = object;\r\n\r\n const typeAria = this._checkExp ? less : more;\r\n const aria = this._checkExp ? \"expand\" : \"collapse\";\r\n const ariaText = type === \"table\" ? type : `the ${type}`;\r\n const lastChild = element.lastElementChild;\r\n\r\n setAttributes(element, { \"aria-expanded\": this._checkExp });\r\n setAttributes(target, {\r\n \"aria-expanded\": this._checkExp,\r\n \"aria-label\": `${aria} ${ariaText}`,\r\n });\r\n\r\n // callback function on more/less\r\n this._onMoreLess(aria, object);\r\n\r\n if (typeAria) {\r\n target.innerHTML = number\r\n ? typeAria + getNumber(element, type)\r\n : typeAria;\r\n } else if (type === \"table\") {\r\n target.parentNode.removeChild(target);\r\n } else if (type === \"list\") {\r\n lastChild.parentNode.removeChild(lastChild);\r\n }\r\n };\r\n}\r\n"],"names":["getNumber","type","rows","children","elementType","numbersElementHidden","slice","call","filter","el","className","length","htmlSubstr","originalText","count","div","createElement","insertAdjacentHTML","walk","track","len","data","substringData","fn","node","firstChild","nodeType","childNodes","nextSibling","innerHTML","addRemoveClass","element","classList","setAttributes","object","key","setAttribute","document","defaultRegex","newLine","match","replace","space","br","html","defaultOptions","typeElement","more","less","number","nobutton","after","btnClass","btnClassAppend","ShowMore","constructor","onMoreLess","regex","config","_initial","ellipsis","limit","_object","limitCounts","ellips","console","log","trim","elementText","textContent","orgTexReg","_regex","truncatedText","concat","_clickEvent","_addBtn","items","_getNumberCount","i","nextElementSibling","addEventListener","_handleEvent","bind","_createBtn","typeAria","_checkExp","label","expanded","button","tabindex","target","checkContainsClass","contains","ariaExpanded","getAttribute","add","insertAdjacentElement","appendChild","typeRemove","_setExpand","aria","ariaText","lastChild","lastElementChild","_onMoreLess","parentNode","removeChild","elements","querySelectorAll","map","item","index","configData","JSON","parse","configGlobal","configDataAndGlobal","classArray"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"showMore.js","sources":["../../sources/utils/function.js","../../sources/utils/regex.js","../../sources/utils/defaults.js","../../sources/index.js"],"sourcesContent":["/**\r\n * Get hidden element\r\n *\r\n * @param {object} object\r\n * @param {String} type - type of element table | div\r\n * @returns\r\n */\r\nconst getNumber = ({ rows, children }, type) => {\r\n const elementType = type === \"table\" ? rows : children;\r\n\r\n const numbersElementHidden = [].slice\r\n .call(elementType)\r\n .filter((el) => el.className === \"hidden\").length;\r\n return numbersElementHidden !== 0 ? ` ${numbersElementHidden}` : \"\";\r\n};\r\n\r\n// https://stackoverflow.com/questions/6003271/substring-text-with-html-tags-in-javascript\r\n/**\r\n * Substring text width html tags\r\n *\r\n * @param {String} originalText - text with html tags\r\n * @param {String} count - limit of characters\r\n * @returns\r\n */\r\nconst htmlSubstr = (originalText, count) => {\r\n let div = createElement(\"div\");\r\n div.insertAdjacentHTML(\"afterbegin\", originalText);\r\n\r\n walk(div, track);\r\n\r\n function track(el) {\r\n if (count > 0) {\r\n let len = el.data.length;\r\n count -= len;\r\n if (count <= 0) {\r\n el.data = el.substringData(0, el.data.length + count);\r\n }\r\n } else {\r\n el.data = \"\";\r\n }\r\n }\r\n\r\n function walk(el, fn) {\r\n let node = el.firstChild;\r\n do {\r\n if (node.nodeType === 3) {\r\n fn(node);\r\n } else if (node.nodeType === 1 && node.childNodes && node.childNodes[0]) {\r\n walk(node, fn);\r\n }\r\n } while ((node = node.nextSibling));\r\n }\r\n return div.innerHTML;\r\n};\r\n\r\n/**\r\n * Add/remove class 'hidden' to element\r\n *\r\n * @param {HTMLElement} element\r\n * @param {String} type - type of element add or remove\r\n */\r\nconst addRemoveClass = (element, type = false) => {\r\n return element.classList[type ? \"add\" : \"remove\"](\"hidden\");\r\n};\r\n\r\n/**\r\n * Set attributes to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {Object} object\r\n */\r\nconst setAttributes = (el, object) => {\r\n for (let key in object) {\r\n el.setAttribute(key, object[key]);\r\n }\r\n};\r\n\r\n/**\r\n * Create element\r\n *\r\n * @param {String} type - type of element\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (type) => document.createElement(type);\r\n\r\nexport { addRemoveClass, createElement, getNumber, htmlSubstr, setAttributes };\r\n","/**\r\n * Default regexes for validation\r\n */\r\nconst defaultRegex = {\r\n newLine: {\r\n match: /(\\r\\n|\\n|\\r)/gm,\r\n replace: \"\",\r\n },\r\n space: {\r\n match: /\\s\\s+/gm,\r\n replace: \" \",\r\n },\r\n br: {\r\n match: //gim,\r\n replace: \"\",\r\n },\r\n html: {\r\n match: /(<((?!b|\\/b|!strong|\\/strong)[^>]+)>)/gi,\r\n replace: \"\",\r\n },\r\n};\r\n\r\nexport default defaultRegex;\r\n","const defaultOptions = {\r\n typeElement: \"span\",\r\n more: false,\r\n less: false,\r\n number: false,\r\n nobutton: false,\r\n after: 0,\r\n btnClass: \"show-more-btn\",\r\n btnClassAppend: null,\r\n};\r\n\r\nexport default defaultOptions;\r\n","import {\r\n addRemoveClass,\r\n createElement,\r\n getNumber,\r\n htmlSubstr,\r\n setAttributes,\r\n} from \"./utils/function\";\r\nimport defaultRegex from \"./utils/regex\";\r\nimport defaultOptions from \"./utils/defaults\";\r\n\r\n/**\r\n * @class ShowMore\r\n */\r\nexport default class ShowMore {\r\n /**\r\n * Constructor\r\n *\r\n * @param {HTMLElement} className\r\n * @param {Object} object\r\n */\r\n constructor(className, { onMoreLess = () => {}, regex = {}, config } = {}) {\r\n // all html elements\r\n const elements = [].slice.call(document.querySelectorAll(className));\r\n\r\n // colback function\r\n this._onMoreLess = onMoreLess;\r\n\r\n // global regex\r\n this._regex = { ...defaultRegex, ...regex };\r\n\r\n elements.map((item, index) => {\r\n const configData = JSON.parse(item.getAttribute(\"data-config\"));\r\n const configGlobal = config;\r\n\r\n const configDataAndGlobal = { ...configGlobal, ...configData };\r\n\r\n this._object = {\r\n index,\r\n classArray: item.classList,\r\n ...defaultOptions,\r\n ...configDataAndGlobal,\r\n typeElement: configDataAndGlobal.element || \"span\",\r\n element: item,\r\n };\r\n\r\n this._initial();\r\n });\r\n }\r\n\r\n /**\r\n * Initail function\r\n *\r\n * @param {Object} object\r\n */\r\n _initial = () => {\r\n const { element, after, ellipsis, nobutton, limit, type } = this._object;\r\n // set default aria-expande to false\r\n setAttributes(element, { \"aria-expanded\": \"false\" });\r\n\r\n const limitCounts = limit + after;\r\n const ellips = ellipsis === false ? \"\" : \"...\";\r\n\r\n // console.log(nobutton);\r\n\r\n // text\r\n if (type === \"text\") {\r\n const originalText = element.innerHTML.trim();\r\n const elementText = element.textContent.trim();\r\n\r\n if (elementText.length > limitCounts) {\r\n let orgTexReg = originalText;\r\n\r\n for (let key in this._regex) {\r\n const { match, replace } = this._regex[key];\r\n if (key && match) orgTexReg = orgTexReg.replace(match, replace);\r\n }\r\n\r\n const truncatedText = htmlSubstr(orgTexReg, limit - 1).concat(ellips);\r\n\r\n element.textContent = \"\";\r\n element.insertAdjacentHTML(\"beforeend\", truncatedText);\r\n\r\n this._clickEvent(element, {\r\n ...this._object,\r\n originalText,\r\n truncatedText,\r\n });\r\n\r\n if (nobutton) return;\r\n this._addBtn(this._object);\r\n }\r\n }\r\n\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n if (items.length > limitCounts) {\r\n for (let i = limit; i < items.length; i++) {\r\n addRemoveClass(items[i], true);\r\n }\r\n\r\n // add event click\r\n this._clickEvent(\r\n type === \"list\" ? element : element.nextElementSibling,\r\n this._object\r\n );\r\n\r\n if (nobutton) return;\r\n // add button to the list and table\r\n this._addBtn(this._object);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Event click\r\n *\r\n * @param {HTMLElement} element\r\n * @param {Object} object\r\n */\r\n _clickEvent = (element, object) =>\r\n element.addEventListener(\"click\", this._handleEvent.bind(this, object));\r\n\r\n /**\r\n * Create button\r\n *\r\n * @param {Object} object\r\n * @returns HTMLElement\r\n */\r\n _createBtn = ({\r\n element,\r\n number,\r\n less,\r\n more,\r\n type,\r\n btnClass,\r\n btnClassAppend,\r\n }) => {\r\n const typeAria = this._checkExp ? less || \"\" : more || \"\";\r\n const label = this._checkExp ? \"collapse\" : \"expand\";\r\n const expanded = this._checkExp ? true : false;\r\n\r\n const button = createElement(\"button\");\r\n button.className =\r\n btnClassAppend == null ? btnClass : btnClass + \" \" + btnClassAppend;\r\n setAttributes(button, {\r\n \"aria-expanded\": expanded,\r\n \"aria-label\": label,\r\n tabindex: 0,\r\n });\r\n\r\n button.insertAdjacentHTML(\r\n \"beforeend\",\r\n number ? typeAria + getNumber(element, type) : typeAria\r\n );\r\n return button;\r\n };\r\n\r\n /**\r\n * Event handler\r\n *\r\n * @param {Object} object\r\n * @param {Event} event\r\n */\r\n _handleEvent = (object, { target }) => {\r\n const {\r\n element,\r\n type,\r\n limit,\r\n less,\r\n typeElement,\r\n originalText,\r\n truncatedText,\r\n btnClass,\r\n } = object;\r\n\r\n // check if the button is clicked\r\n const checkContainsClass = target.classList.contains(btnClass);\r\n\r\n if (!checkContainsClass) return;\r\n\r\n const ariaExpanded = element.getAttribute(\"aria-expanded\");\r\n this._checkExp = ariaExpanded === \"false\";\r\n\r\n // --------------------------------------------------\r\n // text\r\n if (type === \"text\" && checkContainsClass) {\r\n element.textContent = \"\";\r\n\r\n element.insertAdjacentHTML(\r\n \"beforeend\",\r\n this._checkExp ? originalText : truncatedText\r\n );\r\n\r\n if (less) {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.insertAdjacentElement(\"beforeend\", this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n }\r\n\r\n // --------------------------------------------------\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n const typeRemove =\r\n type === \"list\" ? i >= limit && i < items.length - 1 : i >= limit;\r\n\r\n if (ariaExpanded === \"false\") {\r\n addRemoveClass(items[i]);\r\n } else if (typeRemove) {\r\n addRemoveClass(items[i], true);\r\n }\r\n }\r\n }\r\n\r\n // set aria-expanded\r\n if (type) {\r\n this._setExpand({ ...object, target });\r\n }\r\n };\r\n\r\n _getNumberCount = (element, type) => {\r\n return type === \"list\" ? [].slice.call(element.children) : element.rows;\r\n };\r\n\r\n /**\r\n * Add button\r\n *\r\n * @param {Object} object\r\n */\r\n _addBtn = (object) => {\r\n const { type, element, more, typeElement } = object;\r\n\r\n if (!more) return;\r\n\r\n if (type === \"table\") {\r\n element.insertAdjacentElement(\"afterend\", this._createBtn(object));\r\n } else {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.appendChild(this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n };\r\n\r\n /**\r\n * Set aria-expanded\r\n *\r\n * @param {Object} object\r\n */\r\n _setExpand = (object) => {\r\n const { element, type, less, more, number, target } = object;\r\n\r\n const typeAria = this._checkExp ? less : more;\r\n const aria = this._checkExp ? \"expand\" : \"collapse\";\r\n const ariaText = type === \"table\" ? type : `the ${type}`;\r\n const lastChild = element.lastElementChild;\r\n\r\n setAttributes(element, { \"aria-expanded\": this._checkExp });\r\n setAttributes(target, {\r\n \"aria-expanded\": this._checkExp,\r\n \"aria-label\": `${aria} ${ariaText}`,\r\n });\r\n\r\n // callback function on more/less\r\n this._onMoreLess(aria, object);\r\n\r\n if (typeAria) {\r\n target.innerHTML = number\r\n ? typeAria + getNumber(element, type)\r\n : typeAria;\r\n } else if (type === \"table\") {\r\n target.parentNode.removeChild(target);\r\n } else if (type === \"list\") {\r\n lastChild.parentNode.removeChild(lastChild);\r\n }\r\n };\r\n}\r\n"],"names":["getNumber","type","rows","children","elementType","numbersElementHidden","slice","call","filter","el","className","length","htmlSubstr","originalText","count","div","createElement","insertAdjacentHTML","walk","track","len","data","substringData","fn","node","firstChild","nodeType","childNodes","nextSibling","innerHTML","addRemoveClass","element","classList","setAttributes","object","key","setAttribute","document","defaultRegex","newLine","match","replace","space","br","html","defaultOptions","typeElement","more","less","number","nobutton","after","btnClass","btnClassAppend","ShowMore","constructor","onMoreLess","regex","config","_initial","ellipsis","limit","_object","limitCounts","ellips","trim","elementText","textContent","orgTexReg","_regex","truncatedText","concat","_clickEvent","_addBtn","items","_getNumberCount","i","nextElementSibling","addEventListener","_handleEvent","bind","_createBtn","typeAria","_checkExp","label","expanded","button","tabindex","target","checkContainsClass","contains","ariaExpanded","getAttribute","add","insertAdjacentElement","appendChild","typeRemove","_setExpand","aria","ariaText","lastChild","lastElementChild","_onMoreLess","parentNode","removeChild","elements","querySelectorAll","map","item","index","configData","JSON","parse","configGlobal","configDataAndGlobal","classArray"],"mappings":"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"} \ No newline at end of file diff --git a/dist/js/showMore.min.js b/dist/js/showMore.min.js index db9ae66..f511112 100644 --- a/dist/js/showMore.min.js +++ b/dist/js/showMore.min.js @@ -1 +1 @@ -var ShowMore=function(){"use strict";const t=(t,e)=>{let{rows:s,children:n}=t;const i="table"===e?s:n,l=[].slice.call(i).filter(t=>"hidden"===t.className).length;return 0!==l?" "+l:""},e=function(t,e){return void 0===e&&(e=!1),t.classList[e?"add":"remove"]("hidden")},s=(t,e)=>{for(let s in e)t.setAttribute(s,e[s])},n=t=>document.createElement(t),i={newLine:{match:/(\r\n|\n|\r)/gm,replace:""},space:{match:/\s\s+/gm,replace:" "},br:{match://gim,replace:""},html:{match:/(<((?!b|\/b|!strong|\/strong)[^>]+)>)/gi,replace:""}},l={typeElement:"span",more:!1,less:!1,number:!1,nobutton:!1,after:0,btnClass:"show-more-btn",btnClassAppend:null};return class{constructor(r,a){let{onMoreLess:o=(()=>{}),regex:h={},config:c}=void 0===a?{}:a;this.t=()=>{const{element:t,after:i,ellipsis:l,nobutton:r,limit:a,type:o}=this.s;s(t,{"aria-expanded":"false"});const h=a+i,c=!1===l?"":"...";if(console.log(r),"text"===o){const e=t.innerHTML.trim();if(t.textContent.trim().length>h){let s=e;for(let t in this.i){const{match:e,replace:n}=this.i[t];t&&e&&(s=s.replace(e,n))}const i=((t,e)=>{let s=n("div");return s.insertAdjacentHTML("afterbegin",t),function t(e,s){let n=e.firstChild;do{3===n.nodeType?s(n):1===n.nodeType&&n.childNodes&&n.childNodes[0]&&t(n,s)}while(n=n.nextSibling)}(s,(function(t){if(e>0){let s=t.data.length;(e-=s)<=0&&(t.data=t.substringData(0,t.data.length+e))}else t.data=""})),s.innerHTML})(s,a-1).concat(c);if(t.textContent="",t.insertAdjacentHTML("beforeend",i),this.l(t,{...this.s,originalText:e,truncatedText:i}),r)return;this.o(this.s)}}if("list"===o||"table"===o){const s=this.h(t,o);if(s.length>h){for(let t=a;tt.addEventListener("click",this.p.bind(this,e)),this.m=e=>{let{element:i,number:l,less:r,more:a,type:o,btnClass:h,btnClassAppend:c}=e;const d=this.u?r||"":a||"",p=this.u?"collapse":"expand",f=!!this.u,m=n("button");return m.className=null==c?h:h+" "+c,s(m,{"aria-expanded":f,"aria-label":p,tabindex:0}),m.insertAdjacentHTML("beforeend",l?d+t(i,o):d),m},this.p=(t,s)=>{let{target:i}=s;const{element:l,type:r,limit:a,less:o,typeElement:h,originalText:c,truncatedText:d,btnClass:p}=t,f=i.classList.contains(p);if(!f)return;const m=l.getAttribute("aria-expanded");if(this.u="false"===m,"text"===r&&f&&(l.textContent="",l.insertAdjacentHTML("beforeend",this.u?c:d),o)){const e=n(h);e.classList.add("show-more-wrapper"),e.insertAdjacentElement("beforeend",this.m(t)),l.appendChild(e)}if("list"===r||"table"===r){const t=this.h(l,r);for(let s=0;s=a&&s=a;"false"===m?e(t[s]):n&&e(t[s],!0)}}r&&this.g({...t,target:i})},this.h=(t,e)=>"list"===e?[].slice.call(t.children):t.rows,this.o=t=>{const{type:e,element:s,more:i,typeElement:l}=t;if(i)if("table"===e)s.insertAdjacentElement("afterend",this.m(t));else{const e=n(l);e.classList.add("show-more-wrapper"),e.appendChild(this.m(t)),s.appendChild(e)}},this.g=e=>{const{element:n,type:i,less:l,more:r,number:a,target:o}=e,h=this.u?l:r,c=this.u?"expand":"collapse",d="table"===i?i:"the "+i,p=n.lastElementChild;s(n,{"aria-expanded":this.u}),s(o,{"aria-expanded":this.u,"aria-label":c+" "+d}),this.C(c,e),h?o.innerHTML=a?h+t(n,i):h:"table"===i?o.parentNode.removeChild(o):"list"===i&&p.parentNode.removeChild(p)};const d=[].slice.call(document.querySelectorAll(r));this.C=o,this.i={...i,...h},d.map((t,e)=>{const s=JSON.parse(t.getAttribute("data-config")),n={...c,...s};this.s={index:e,classArray:t.classList,...l,...n,typeElement:n.element||"span",element:t},this.t()})}}}(); +var ShowMore=function(){"use strict";const t=(t,e)=>{let{rows:s,children:n}=t;const i="table"===e?s:n,r=[].slice.call(i).filter(t=>"hidden"===t.className).length;return 0!==r?" "+r:""},e=function(t,e){return void 0===e&&(e=!1),t.classList[e?"add":"remove"]("hidden")},s=(t,e)=>{for(let s in e)t.setAttribute(s,e[s])},n=t=>document.createElement(t),i={newLine:{match:/(\r\n|\n|\r)/gm,replace:""},space:{match:/\s\s+/gm,replace:" "},br:{match://gim,replace:""},html:{match:/(<((?!b|\/b|!strong|\/strong)[^>]+)>)/gi,replace:""}},r={typeElement:"span",more:!1,less:!1,number:!1,nobutton:!1,after:0,btnClass:"show-more-btn",btnClassAppend:null};return class{constructor(l,a){let{onMoreLess:o=(()=>{}),regex:h={},config:c}=void 0===a?{}:a;this.t=()=>{const{element:t,after:i,ellipsis:r,nobutton:l,limit:a,type:o}=this.s;s(t,{"aria-expanded":"false"});const h=a+i,c=!1===r?"":"...";if("text"===o){const e=t.innerHTML.trim();if(t.textContent.trim().length>h){let s=e;for(let t in this.i){const{match:e,replace:n}=this.i[t];t&&e&&(s=s.replace(e,n))}const i=((t,e)=>{let s=n("div");return s.insertAdjacentHTML("afterbegin",t),function t(e,s){let n=e.firstChild;do{3===n.nodeType?s(n):1===n.nodeType&&n.childNodes&&n.childNodes[0]&&t(n,s)}while(n=n.nextSibling)}(s,(function(t){if(e>0){let s=t.data.length;(e-=s)<=0&&(t.data=t.substringData(0,t.data.length+e))}else t.data=""})),s.innerHTML})(s,a-1).concat(c);if(t.textContent="",t.insertAdjacentHTML("beforeend",i),this.l(t,{...this.s,originalText:e,truncatedText:i}),l)return;this.o(this.s)}}if("list"===o||"table"===o){const s=this.h(t,o);if(s.length>h){for(let t=a;tt.addEventListener("click",this.p.bind(this,e)),this.m=e=>{let{element:i,number:r,less:l,more:a,type:o,btnClass:h,btnClassAppend:c}=e;const d=this.u?l||"":a||"",p=this.u?"collapse":"expand",f=!!this.u,m=n("button");return m.className=null==c?h:h+" "+c,s(m,{"aria-expanded":f,"aria-label":p,tabindex:0}),m.insertAdjacentHTML("beforeend",r?d+t(i,o):d),m},this.p=(t,s)=>{let{target:i}=s;const{element:r,type:l,limit:a,less:o,typeElement:h,originalText:c,truncatedText:d,btnClass:p}=t,f=i.classList.contains(p);if(!f)return;const m=r.getAttribute("aria-expanded");if(this.u="false"===m,"text"===l&&f&&(r.textContent="",r.insertAdjacentHTML("beforeend",this.u?c:d),o)){const e=n(h);e.classList.add("show-more-wrapper"),e.insertAdjacentElement("beforeend",this.m(t)),r.appendChild(e)}if("list"===l||"table"===l){const t=this.h(r,l);for(let s=0;s=a&&s=a;"false"===m?e(t[s]):n&&e(t[s],!0)}}l&&this.g({...t,target:i})},this.h=(t,e)=>"list"===e?[].slice.call(t.children):t.rows,this.o=t=>{const{type:e,element:s,more:i,typeElement:r}=t;if(i)if("table"===e)s.insertAdjacentElement("afterend",this.m(t));else{const e=n(r);e.classList.add("show-more-wrapper"),e.appendChild(this.m(t)),s.appendChild(e)}},this.g=e=>{const{element:n,type:i,less:r,more:l,number:a,target:o}=e,h=this.u?r:l,c=this.u?"expand":"collapse",d="table"===i?i:"the "+i,p=n.lastElementChild;s(n,{"aria-expanded":this.u}),s(o,{"aria-expanded":this.u,"aria-label":c+" "+d}),this.C(c,e),h?o.innerHTML=a?h+t(n,i):h:"table"===i?o.parentNode.removeChild(o):"list"===i&&p.parentNode.removeChild(p)};const d=[].slice.call(document.querySelectorAll(l));this.C=o,this.i={...i,...h},d.map((t,e)=>{const s=JSON.parse(t.getAttribute("data-config")),n={...c,...s};this.s={index:e,classArray:t.classList,...r,...n,typeElement:n.element||"span",element:t},this.t()})}}}(); diff --git a/dist/js/showMore.umd.js b/dist/js/showMore.umd.js index 1a2f83b..6233bdb 100644 --- a/dist/js/showMore.umd.js +++ b/dist/js/showMore.umd.js @@ -104,7 +104,6 @@ }); const limitCounts = limit + after; const ellips = ellipsis === false ? "" : "..."; - console.log(nobutton); if (type === "text") { const originalText = element.innerHTML.trim(); const elementText = element.textContent.trim(); diff --git a/dist/js/showMore.umd.js.map b/dist/js/showMore.umd.js.map index 3443395..a2c955c 100644 --- a/dist/js/showMore.umd.js.map +++ b/dist/js/showMore.umd.js.map @@ -1 +1 @@ -{"version":3,"file":"showMore.umd.js","sources":["../../sources/utils/function.js","../../sources/utils/regex.js","../../sources/utils/defaults.js","../../sources/index.js"],"sourcesContent":["/**\r\n * Get hidden element\r\n *\r\n * @param {object} object\r\n * @param {String} type - type of element table | div\r\n * @returns\r\n */\r\nconst getNumber = ({ rows, children }, type) => {\r\n const elementType = type === \"table\" ? rows : children;\r\n\r\n const numbersElementHidden = [].slice\r\n .call(elementType)\r\n .filter((el) => el.className === \"hidden\").length;\r\n return numbersElementHidden !== 0 ? ` ${numbersElementHidden}` : \"\";\r\n};\r\n\r\n// https://stackoverflow.com/questions/6003271/substring-text-with-html-tags-in-javascript\r\n/**\r\n * Substring text width html tags\r\n *\r\n * @param {String} originalText - text with html tags\r\n * @param {String} count - limit of characters\r\n * @returns\r\n */\r\nconst htmlSubstr = (originalText, count) => {\r\n let div = createElement(\"div\");\r\n div.insertAdjacentHTML(\"afterbegin\", originalText);\r\n\r\n walk(div, track);\r\n\r\n function track(el) {\r\n if (count > 0) {\r\n let len = el.data.length;\r\n count -= len;\r\n if (count <= 0) {\r\n el.data = el.substringData(0, el.data.length + count);\r\n }\r\n } else {\r\n el.data = \"\";\r\n }\r\n }\r\n\r\n function walk(el, fn) {\r\n let node = el.firstChild;\r\n do {\r\n if (node.nodeType === 3) {\r\n fn(node);\r\n } else if (node.nodeType === 1 && node.childNodes && node.childNodes[0]) {\r\n walk(node, fn);\r\n }\r\n } while ((node = node.nextSibling));\r\n }\r\n return div.innerHTML;\r\n};\r\n\r\n/**\r\n * Add/remove class 'hidden' to element\r\n *\r\n * @param {HTMLElement} element\r\n * @param {String} type - type of element add or remove\r\n */\r\nconst addRemoveClass = (element, type = false) => {\r\n return element.classList[type ? \"add\" : \"remove\"](\"hidden\");\r\n};\r\n\r\n/**\r\n * Set attributes to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {Object} object\r\n */\r\nconst setAttributes = (el, object) => {\r\n for (let key in object) {\r\n el.setAttribute(key, object[key]);\r\n }\r\n};\r\n\r\n/**\r\n * Create element\r\n *\r\n * @param {String} type - type of element\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (type) => document.createElement(type);\r\n\r\nexport { addRemoveClass, createElement, getNumber, htmlSubstr, setAttributes };\r\n","/**\r\n * Default regexes for validation\r\n */\r\nconst defaultRegex = {\r\n newLine: {\r\n match: /(\\r\\n|\\n|\\r)/gm,\r\n replace: \"\",\r\n },\r\n space: {\r\n match: /\\s\\s+/gm,\r\n replace: \" \",\r\n },\r\n br: {\r\n match: //gim,\r\n replace: \"\",\r\n },\r\n html: {\r\n match: /(<((?!b|\\/b|!strong|\\/strong)[^>]+)>)/gi,\r\n replace: \"\",\r\n },\r\n};\r\n\r\nexport default defaultRegex;\r\n","const defaultOptions = {\r\n typeElement: \"span\",\r\n more: false,\r\n less: false,\r\n number: false,\r\n nobutton: false,\r\n after: 0,\r\n btnClass: \"show-more-btn\",\r\n btnClassAppend: null,\r\n};\r\n\r\nexport default defaultOptions;\r\n","import {\r\n addRemoveClass,\r\n createElement,\r\n getNumber,\r\n htmlSubstr,\r\n setAttributes,\r\n} from \"./utils/function\";\r\nimport defaultRegex from \"./utils/regex\";\r\nimport defaultOptions from \"./utils/defaults\";\r\n\r\n/**\r\n * @class ShowMore\r\n */\r\nexport default class ShowMore {\r\n /**\r\n * Constructor\r\n *\r\n * @param {HTMLElement} className\r\n * @param {Object} object\r\n */\r\n constructor(className, { onMoreLess = () => {}, regex = {}, config } = {}) {\r\n // all html elements\r\n const elements = [].slice.call(document.querySelectorAll(className));\r\n\r\n // colback function\r\n this._onMoreLess = onMoreLess;\r\n\r\n // global regex\r\n this._regex = { ...defaultRegex, ...regex };\r\n\r\n elements.map((item, index) => {\r\n const configData = JSON.parse(item.getAttribute(\"data-config\"));\r\n const configGlobal = config;\r\n\r\n const configDataAndGlobal = { ...configGlobal, ...configData };\r\n\r\n this._object = {\r\n index,\r\n classArray: item.classList,\r\n ...defaultOptions,\r\n ...configDataAndGlobal,\r\n typeElement: configDataAndGlobal.element || \"span\",\r\n element: item,\r\n };\r\n\r\n this._initial();\r\n });\r\n }\r\n\r\n /**\r\n * Initail function\r\n *\r\n * @param {Object} object\r\n */\r\n _initial = () => {\r\n const { element, after, ellipsis, nobutton, limit, type } = this._object;\r\n // set default aria-expande to false\r\n setAttributes(element, { \"aria-expanded\": \"false\" });\r\n\r\n const limitCounts = limit + after;\r\n const ellips = ellipsis === false ? \"\" : \"...\";\r\n\r\n console.log(nobutton);\r\n\r\n // text\r\n if (type === \"text\") {\r\n const originalText = element.innerHTML.trim();\r\n const elementText = element.textContent.trim();\r\n\r\n if (elementText.length > limitCounts) {\r\n let orgTexReg = originalText;\r\n\r\n for (let key in this._regex) {\r\n const { match, replace } = this._regex[key];\r\n if (key && match) orgTexReg = orgTexReg.replace(match, replace);\r\n }\r\n\r\n const truncatedText = htmlSubstr(orgTexReg, limit - 1).concat(ellips);\r\n\r\n element.textContent = \"\";\r\n element.insertAdjacentHTML(\"beforeend\", truncatedText);\r\n\r\n this._clickEvent(element, {\r\n ...this._object,\r\n originalText,\r\n truncatedText,\r\n });\r\n\r\n if (nobutton) return;\r\n this._addBtn(this._object);\r\n }\r\n }\r\n\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n if (items.length > limitCounts) {\r\n for (let i = limit; i < items.length; i++) {\r\n addRemoveClass(items[i], true);\r\n }\r\n\r\n // add event click\r\n this._clickEvent(\r\n type === \"list\" ? element : element.nextElementSibling,\r\n this._object\r\n );\r\n\r\n if (nobutton) return;\r\n // add button to the list and table\r\n this._addBtn(this._object);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Event click\r\n *\r\n * @param {HTMLElement} element\r\n * @param {Object} object\r\n */\r\n _clickEvent = (element, object) =>\r\n element.addEventListener(\"click\", this._handleEvent.bind(this, object));\r\n\r\n /**\r\n * Create button\r\n *\r\n * @param {Object} object\r\n * @returns HTMLElement\r\n */\r\n _createBtn = ({\r\n element,\r\n number,\r\n less,\r\n more,\r\n type,\r\n btnClass,\r\n btnClassAppend,\r\n }) => {\r\n const typeAria = this._checkExp ? less || \"\" : more || \"\";\r\n const label = this._checkExp ? \"collapse\" : \"expand\";\r\n const expanded = this._checkExp ? true : false;\r\n\r\n const button = createElement(\"button\");\r\n button.className =\r\n btnClassAppend == null ? btnClass : btnClass + \" \" + btnClassAppend;\r\n setAttributes(button, {\r\n \"aria-expanded\": expanded,\r\n \"aria-label\": label,\r\n tabindex: 0,\r\n });\r\n\r\n button.insertAdjacentHTML(\r\n \"beforeend\",\r\n number ? typeAria + getNumber(element, type) : typeAria\r\n );\r\n return button;\r\n };\r\n\r\n /**\r\n * Event handler\r\n *\r\n * @param {Object} object\r\n * @param {Event} event\r\n */\r\n _handleEvent = (object, { target }) => {\r\n const {\r\n element,\r\n type,\r\n limit,\r\n less,\r\n typeElement,\r\n originalText,\r\n truncatedText,\r\n btnClass,\r\n } = object;\r\n\r\n // check if the button is clicked\r\n const checkContainsClass = target.classList.contains(btnClass);\r\n\r\n if (!checkContainsClass) return;\r\n\r\n const ariaExpanded = element.getAttribute(\"aria-expanded\");\r\n this._checkExp = ariaExpanded === \"false\";\r\n\r\n // --------------------------------------------------\r\n // text\r\n if (type === \"text\" && checkContainsClass) {\r\n element.textContent = \"\";\r\n\r\n element.insertAdjacentHTML(\r\n \"beforeend\",\r\n this._checkExp ? originalText : truncatedText\r\n );\r\n\r\n if (less) {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.insertAdjacentElement(\"beforeend\", this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n }\r\n\r\n // --------------------------------------------------\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n const typeRemove =\r\n type === \"list\" ? i >= limit && i < items.length - 1 : i >= limit;\r\n\r\n if (ariaExpanded === \"false\") {\r\n addRemoveClass(items[i]);\r\n } else if (typeRemove) {\r\n addRemoveClass(items[i], true);\r\n }\r\n }\r\n }\r\n\r\n // set aria-expanded\r\n if (type) {\r\n this._setExpand({ ...object, target });\r\n }\r\n };\r\n\r\n _getNumberCount = (element, type) => {\r\n return type === \"list\" ? [].slice.call(element.children) : element.rows;\r\n };\r\n\r\n /**\r\n * Add button\r\n *\r\n * @param {Object} object\r\n */\r\n _addBtn = (object) => {\r\n const { type, element, more, typeElement } = object;\r\n\r\n if (!more) return;\r\n\r\n if (type === \"table\") {\r\n element.insertAdjacentElement(\"afterend\", this._createBtn(object));\r\n } else {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.appendChild(this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n };\r\n\r\n /**\r\n * Set aria-expanded\r\n *\r\n * @param {Object} object\r\n */\r\n _setExpand = (object) => {\r\n const { element, type, less, more, number, target } = object;\r\n\r\n const typeAria = this._checkExp ? less : more;\r\n const aria = this._checkExp ? \"expand\" : \"collapse\";\r\n const ariaText = type === \"table\" ? type : `the ${type}`;\r\n const lastChild = element.lastElementChild;\r\n\r\n setAttributes(element, { \"aria-expanded\": this._checkExp });\r\n setAttributes(target, {\r\n \"aria-expanded\": this._checkExp,\r\n \"aria-label\": `${aria} ${ariaText}`,\r\n });\r\n\r\n // callback function on more/less\r\n this._onMoreLess(aria, object);\r\n\r\n if (typeAria) {\r\n target.innerHTML = number\r\n ? typeAria + getNumber(element, type)\r\n : typeAria;\r\n } else if (type === \"table\") {\r\n target.parentNode.removeChild(target);\r\n } else if (type === \"list\") {\r\n lastChild.parentNode.removeChild(lastChild);\r\n }\r\n };\r\n}\r\n"],"names":["getNumber","type","rows","children","elementType","numbersElementHidden","slice","call","filter","el","className","length","htmlSubstr","originalText","count","div","createElement","insertAdjacentHTML","walk","track","len","data","substringData","fn","node","firstChild","nodeType","childNodes","nextSibling","innerHTML","addRemoveClass","element","classList","setAttributes","object","key","setAttribute","document","defaultRegex","newLine","match","replace","space","br","html","defaultOptions","typeElement","more","less","number","nobutton","after","btnClass","btnClassAppend","ShowMore","constructor","onMoreLess","regex","config","_initial","ellipsis","limit","_object","limitCounts","ellips","console","log","trim","elementText","textContent","orgTexReg","_regex","truncatedText","concat","_clickEvent","_addBtn","items","_getNumberCount","i","nextElementSibling","addEventListener","_handleEvent","bind","_createBtn","typeAria","_checkExp","label","expanded","button","tabindex","target","checkContainsClass","contains","ariaExpanded","getAttribute","add","insertAdjacentElement","appendChild","typeRemove","_setExpand","aria","ariaText","lastChild","lastElementChild","_onMoreLess","parentNode","removeChild","elements","querySelectorAll","map","item","index","configData","JSON","parse","configGlobal","configDataAndGlobal","classArray"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"showMore.umd.js","sources":["../../sources/utils/function.js","../../sources/utils/regex.js","../../sources/utils/defaults.js","../../sources/index.js"],"sourcesContent":["/**\r\n * Get hidden element\r\n *\r\n * @param {object} object\r\n * @param {String} type - type of element table | div\r\n * @returns\r\n */\r\nconst getNumber = ({ rows, children }, type) => {\r\n const elementType = type === \"table\" ? rows : children;\r\n\r\n const numbersElementHidden = [].slice\r\n .call(elementType)\r\n .filter((el) => el.className === \"hidden\").length;\r\n return numbersElementHidden !== 0 ? ` ${numbersElementHidden}` : \"\";\r\n};\r\n\r\n// https://stackoverflow.com/questions/6003271/substring-text-with-html-tags-in-javascript\r\n/**\r\n * Substring text width html tags\r\n *\r\n * @param {String} originalText - text with html tags\r\n * @param {String} count - limit of characters\r\n * @returns\r\n */\r\nconst htmlSubstr = (originalText, count) => {\r\n let div = createElement(\"div\");\r\n div.insertAdjacentHTML(\"afterbegin\", originalText);\r\n\r\n walk(div, track);\r\n\r\n function track(el) {\r\n if (count > 0) {\r\n let len = el.data.length;\r\n count -= len;\r\n if (count <= 0) {\r\n el.data = el.substringData(0, el.data.length + count);\r\n }\r\n } else {\r\n el.data = \"\";\r\n }\r\n }\r\n\r\n function walk(el, fn) {\r\n let node = el.firstChild;\r\n do {\r\n if (node.nodeType === 3) {\r\n fn(node);\r\n } else if (node.nodeType === 1 && node.childNodes && node.childNodes[0]) {\r\n walk(node, fn);\r\n }\r\n } while ((node = node.nextSibling));\r\n }\r\n return div.innerHTML;\r\n};\r\n\r\n/**\r\n * Add/remove class 'hidden' to element\r\n *\r\n * @param {HTMLElement} element\r\n * @param {String} type - type of element add or remove\r\n */\r\nconst addRemoveClass = (element, type = false) => {\r\n return element.classList[type ? \"add\" : \"remove\"](\"hidden\");\r\n};\r\n\r\n/**\r\n * Set attributes to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {Object} object\r\n */\r\nconst setAttributes = (el, object) => {\r\n for (let key in object) {\r\n el.setAttribute(key, object[key]);\r\n }\r\n};\r\n\r\n/**\r\n * Create element\r\n *\r\n * @param {String} type - type of element\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (type) => document.createElement(type);\r\n\r\nexport { addRemoveClass, createElement, getNumber, htmlSubstr, setAttributes };\r\n","/**\r\n * Default regexes for validation\r\n */\r\nconst defaultRegex = {\r\n newLine: {\r\n match: /(\\r\\n|\\n|\\r)/gm,\r\n replace: \"\",\r\n },\r\n space: {\r\n match: /\\s\\s+/gm,\r\n replace: \" \",\r\n },\r\n br: {\r\n match: //gim,\r\n replace: \"\",\r\n },\r\n html: {\r\n match: /(<((?!b|\\/b|!strong|\\/strong)[^>]+)>)/gi,\r\n replace: \"\",\r\n },\r\n};\r\n\r\nexport default defaultRegex;\r\n","const defaultOptions = {\r\n typeElement: \"span\",\r\n more: false,\r\n less: false,\r\n number: false,\r\n nobutton: false,\r\n after: 0,\r\n btnClass: \"show-more-btn\",\r\n btnClassAppend: null,\r\n};\r\n\r\nexport default defaultOptions;\r\n","import {\r\n addRemoveClass,\r\n createElement,\r\n getNumber,\r\n htmlSubstr,\r\n setAttributes,\r\n} from \"./utils/function\";\r\nimport defaultRegex from \"./utils/regex\";\r\nimport defaultOptions from \"./utils/defaults\";\r\n\r\n/**\r\n * @class ShowMore\r\n */\r\nexport default class ShowMore {\r\n /**\r\n * Constructor\r\n *\r\n * @param {HTMLElement} className\r\n * @param {Object} object\r\n */\r\n constructor(className, { onMoreLess = () => {}, regex = {}, config } = {}) {\r\n // all html elements\r\n const elements = [].slice.call(document.querySelectorAll(className));\r\n\r\n // colback function\r\n this._onMoreLess = onMoreLess;\r\n\r\n // global regex\r\n this._regex = { ...defaultRegex, ...regex };\r\n\r\n elements.map((item, index) => {\r\n const configData = JSON.parse(item.getAttribute(\"data-config\"));\r\n const configGlobal = config;\r\n\r\n const configDataAndGlobal = { ...configGlobal, ...configData };\r\n\r\n this._object = {\r\n index,\r\n classArray: item.classList,\r\n ...defaultOptions,\r\n ...configDataAndGlobal,\r\n typeElement: configDataAndGlobal.element || \"span\",\r\n element: item,\r\n };\r\n\r\n this._initial();\r\n });\r\n }\r\n\r\n /**\r\n * Initail function\r\n *\r\n * @param {Object} object\r\n */\r\n _initial = () => {\r\n const { element, after, ellipsis, nobutton, limit, type } = this._object;\r\n // set default aria-expande to false\r\n setAttributes(element, { \"aria-expanded\": \"false\" });\r\n\r\n const limitCounts = limit + after;\r\n const ellips = ellipsis === false ? \"\" : \"...\";\r\n\r\n // console.log(nobutton);\r\n\r\n // text\r\n if (type === \"text\") {\r\n const originalText = element.innerHTML.trim();\r\n const elementText = element.textContent.trim();\r\n\r\n if (elementText.length > limitCounts) {\r\n let orgTexReg = originalText;\r\n\r\n for (let key in this._regex) {\r\n const { match, replace } = this._regex[key];\r\n if (key && match) orgTexReg = orgTexReg.replace(match, replace);\r\n }\r\n\r\n const truncatedText = htmlSubstr(orgTexReg, limit - 1).concat(ellips);\r\n\r\n element.textContent = \"\";\r\n element.insertAdjacentHTML(\"beforeend\", truncatedText);\r\n\r\n this._clickEvent(element, {\r\n ...this._object,\r\n originalText,\r\n truncatedText,\r\n });\r\n\r\n if (nobutton) return;\r\n this._addBtn(this._object);\r\n }\r\n }\r\n\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n if (items.length > limitCounts) {\r\n for (let i = limit; i < items.length; i++) {\r\n addRemoveClass(items[i], true);\r\n }\r\n\r\n // add event click\r\n this._clickEvent(\r\n type === \"list\" ? element : element.nextElementSibling,\r\n this._object\r\n );\r\n\r\n if (nobutton) return;\r\n // add button to the list and table\r\n this._addBtn(this._object);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Event click\r\n *\r\n * @param {HTMLElement} element\r\n * @param {Object} object\r\n */\r\n _clickEvent = (element, object) =>\r\n element.addEventListener(\"click\", this._handleEvent.bind(this, object));\r\n\r\n /**\r\n * Create button\r\n *\r\n * @param {Object} object\r\n * @returns HTMLElement\r\n */\r\n _createBtn = ({\r\n element,\r\n number,\r\n less,\r\n more,\r\n type,\r\n btnClass,\r\n btnClassAppend,\r\n }) => {\r\n const typeAria = this._checkExp ? less || \"\" : more || \"\";\r\n const label = this._checkExp ? \"collapse\" : \"expand\";\r\n const expanded = this._checkExp ? true : false;\r\n\r\n const button = createElement(\"button\");\r\n button.className =\r\n btnClassAppend == null ? btnClass : btnClass + \" \" + btnClassAppend;\r\n setAttributes(button, {\r\n \"aria-expanded\": expanded,\r\n \"aria-label\": label,\r\n tabindex: 0,\r\n });\r\n\r\n button.insertAdjacentHTML(\r\n \"beforeend\",\r\n number ? typeAria + getNumber(element, type) : typeAria\r\n );\r\n return button;\r\n };\r\n\r\n /**\r\n * Event handler\r\n *\r\n * @param {Object} object\r\n * @param {Event} event\r\n */\r\n _handleEvent = (object, { target }) => {\r\n const {\r\n element,\r\n type,\r\n limit,\r\n less,\r\n typeElement,\r\n originalText,\r\n truncatedText,\r\n btnClass,\r\n } = object;\r\n\r\n // check if the button is clicked\r\n const checkContainsClass = target.classList.contains(btnClass);\r\n\r\n if (!checkContainsClass) return;\r\n\r\n const ariaExpanded = element.getAttribute(\"aria-expanded\");\r\n this._checkExp = ariaExpanded === \"false\";\r\n\r\n // --------------------------------------------------\r\n // text\r\n if (type === \"text\" && checkContainsClass) {\r\n element.textContent = \"\";\r\n\r\n element.insertAdjacentHTML(\r\n \"beforeend\",\r\n this._checkExp ? originalText : truncatedText\r\n );\r\n\r\n if (less) {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.insertAdjacentElement(\"beforeend\", this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n }\r\n\r\n // --------------------------------------------------\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n const typeRemove =\r\n type === \"list\" ? i >= limit && i < items.length - 1 : i >= limit;\r\n\r\n if (ariaExpanded === \"false\") {\r\n addRemoveClass(items[i]);\r\n } else if (typeRemove) {\r\n addRemoveClass(items[i], true);\r\n }\r\n }\r\n }\r\n\r\n // set aria-expanded\r\n if (type) {\r\n this._setExpand({ ...object, target });\r\n }\r\n };\r\n\r\n _getNumberCount = (element, type) => {\r\n return type === \"list\" ? [].slice.call(element.children) : element.rows;\r\n };\r\n\r\n /**\r\n * Add button\r\n *\r\n * @param {Object} object\r\n */\r\n _addBtn = (object) => {\r\n const { type, element, more, typeElement } = object;\r\n\r\n if (!more) return;\r\n\r\n if (type === \"table\") {\r\n element.insertAdjacentElement(\"afterend\", this._createBtn(object));\r\n } else {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.appendChild(this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n };\r\n\r\n /**\r\n * Set aria-expanded\r\n *\r\n * @param {Object} object\r\n */\r\n _setExpand = (object) => {\r\n const { element, type, less, more, number, target } = object;\r\n\r\n const typeAria = this._checkExp ? less : more;\r\n const aria = this._checkExp ? \"expand\" : \"collapse\";\r\n const ariaText = type === \"table\" ? type : `the ${type}`;\r\n const lastChild = element.lastElementChild;\r\n\r\n setAttributes(element, { \"aria-expanded\": this._checkExp });\r\n setAttributes(target, {\r\n \"aria-expanded\": this._checkExp,\r\n \"aria-label\": `${aria} ${ariaText}`,\r\n });\r\n\r\n // callback function on more/less\r\n this._onMoreLess(aria, object);\r\n\r\n if (typeAria) {\r\n target.innerHTML = number\r\n ? typeAria + getNumber(element, type)\r\n : typeAria;\r\n } else if (type === \"table\") {\r\n target.parentNode.removeChild(target);\r\n } else if (type === \"list\") {\r\n lastChild.parentNode.removeChild(lastChild);\r\n }\r\n };\r\n}\r\n"],"names":["getNumber","type","rows","children","elementType","numbersElementHidden","slice","call","filter","el","className","length","htmlSubstr","originalText","count","div","createElement","insertAdjacentHTML","walk","track","len","data","substringData","fn","node","firstChild","nodeType","childNodes","nextSibling","innerHTML","addRemoveClass","element","classList","setAttributes","object","key","setAttribute","document","defaultRegex","newLine","match","replace","space","br","html","defaultOptions","typeElement","more","less","number","nobutton","after","btnClass","btnClassAppend","ShowMore","constructor","onMoreLess","regex","config","_initial","ellipsis","limit","_object","limitCounts","ellips","trim","elementText","textContent","orgTexReg","_regex","truncatedText","concat","_clickEvent","_addBtn","items","_getNumberCount","i","nextElementSibling","addEventListener","_handleEvent","bind","_createBtn","typeAria","_checkExp","label","expanded","button","tabindex","target","checkContainsClass","contains","ariaExpanded","getAttribute","add","insertAdjacentElement","appendChild","typeRemove","_setExpand","aria","ariaText","lastChild","lastElementChild","_onMoreLess","parentNode","removeChild","elements","querySelectorAll","map","item","index","configData","JSON","parse","configGlobal","configDataAndGlobal","classArray"],"mappings":"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"} \ No newline at end of file diff --git a/docs/global.css.map b/docs/global.css.map index 3beaa52..c12a8f9 100644 --- a/docs/global.css.map +++ b/docs/global.css.map @@ -1 +1 @@ -{"version":3,"sourceRoot":"","sources":["../sources/scss/modules/_table.scss","../sources/scss/global.scss"],"names":[],"mappings":";AAAA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;AAAA;EAEE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;;ACnCJ;AAAA;AAAA;EAGE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EANF;IAOI;IACA;;;AAIJ;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAKF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;;AAIA;EACE;;AAIJ;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAEF;EACE;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;;AAKF;AAAA;EAEE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA","file":"global.css"} \ No newline at end of file +{"version":3,"sourceRoot":"","sources":["../sources/scss/modules/_table.scss","../sources/scss/global.scss"],"names":[],"mappings":";AAAA;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;;AAGF;AAAA;EAEE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;;AAGF;EACE;EACA;EACA;;AAGF;EACE;;;ACnCJ;AAAA;AAAA;EAGE;;;AAGF;EACE;;;AAGF;AAAA;EAEE;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;AAAA;EAEE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;AAEA;EANF;IAOI;IACA;;;AAIJ;EACE;;;AAIJ;EACE;EACA;;;AAGF;EACE;EACA;;;AAGF;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;;;AAGF;EACE;EACA;EACA;EACA;EACA;;AAEA;EACE;;;AAKF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAKN;EACE;EACA;EACA;;;AAGF;EACE;EACA;EACA;;AAGA;EACE;EACA;;;AAIJ;EACE;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;;;AAKF;EACE;;AAIA;EACE;;AAIJ;EACE;;;AAIJ;EACE;EACA;EACA;EACA;EACA;EACA;EACA;;AACA;EACE;EACA;EACA;EACA;;AAEF;EACE;;;AAIJ;EACE;;;AAGF;EACE;;;AAGF;EACE;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;;;AAKF;AAAA;EAEE;;;AAIJ;EACE;;;AAGF;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAEA;EACE;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF;EACE;EACA;;;AAIJ;EACE;EACA","file":"global.css"} \ No newline at end of file diff --git a/docs/showMore.min.js b/docs/showMore.min.js index 633b8f7..f3ad3b1 100644 --- a/docs/showMore.min.js +++ b/docs/showMore.min.js @@ -1,2 +1,2 @@ -var ShowMore=function(){"use strict";const t=(t,e)=>{let{rows:s,children:n}=t;const i="table"===e?s:n,l=[].slice.call(i).filter(t=>"hidden"===t.className).length;return 0!==l?" "+l:""},e=function(t,e){return void 0===e&&(e=!1),t.classList[e?"add":"remove"]("hidden")},s=(t,e)=>{for(let s in e)t.setAttribute(s,e[s])},n=t=>document.createElement(t),i={newLine:{match:/(\r\n|\n|\r)/gm,replace:""},space:{match:/\s\s+/gm,replace:" "},br:{match://gim,replace:""},html:{match:/(<((?!b|\/b|!strong|\/strong)[^>]+)>)/gi,replace:""}},l={typeElement:"span",more:!1,less:!1,number:!1,nobutton:!1,after:0,btnClass:"show-more-btn",btnClassAppend:null};return class{constructor(r,a){let{onMoreLess:o=(()=>{}),regex:h={},config:c}=void 0===a?{}:a;this.t=()=>{const{element:t,after:i,ellipsis:l,nobutton:r,limit:a,type:o}=this.s;s(t,{"aria-expanded":"false"});const h=a+i,c=!1===l?"":"...";if(console.log(r),"text"===o){const e=t.innerHTML.trim();if(t.textContent.trim().length>h){let s=e;for(let t in this.i){const{match:e,replace:n}=this.i[t];t&&e&&(s=s.replace(e,n))}const i=((t,e)=>{let s=n("div");return s.insertAdjacentHTML("afterbegin",t),function t(e,s){let n=e.firstChild;do{3===n.nodeType?s(n):1===n.nodeType&&n.childNodes&&n.childNodes[0]&&t(n,s)}while(n=n.nextSibling)}(s,(function(t){if(e>0){let s=t.data.length;(e-=s)<=0&&(t.data=t.substringData(0,t.data.length+e))}else t.data=""})),s.innerHTML})(s,a-1).concat(c);if(t.textContent="",t.insertAdjacentHTML("beforeend",i),this.l(t,{...this.s,originalText:e,truncatedText:i}),r)return;this.o(this.s)}}if("list"===o||"table"===o){const s=this.h(t,o);if(s.length>h){for(let t=a;tt.addEventListener("click",this.p.bind(this,e)),this.m=e=>{let{element:i,number:l,less:r,more:a,type:o,btnClass:h,btnClassAppend:c}=e;const d=this.u?r||"":a||"",p=this.u?"collapse":"expand",f=!!this.u,m=n("button");return m.className=null==c?h:h+" "+c,s(m,{"aria-expanded":f,"aria-label":p,tabindex:0}),m.insertAdjacentHTML("beforeend",l?d+t(i,o):d),m},this.p=(t,s)=>{let{target:i}=s;const{element:l,type:r,limit:a,less:o,typeElement:h,originalText:c,truncatedText:d,btnClass:p}=t,f=i.classList.contains(p);if(!f)return;const m=l.getAttribute("aria-expanded");if(this.u="false"===m,"text"===r&&f&&(l.textContent="",l.insertAdjacentHTML("beforeend",this.u?c:d),o)){const e=n(h);e.classList.add("show-more-wrapper"),e.insertAdjacentElement("beforeend",this.m(t)),l.appendChild(e)}if("list"===r||"table"===r){const t=this.h(l,r);for(let s=0;s=a&&s=a;"false"===m?e(t[s]):n&&e(t[s],!0)}}r&&this.g({...t,target:i})},this.h=(t,e)=>"list"===e?[].slice.call(t.children):t.rows,this.o=t=>{const{type:e,element:s,more:i,typeElement:l}=t;if(i)if("table"===e)s.insertAdjacentElement("afterend",this.m(t));else{const e=n(l);e.classList.add("show-more-wrapper"),e.appendChild(this.m(t)),s.appendChild(e)}},this.g=e=>{const{element:n,type:i,less:l,more:r,number:a,target:o}=e,h=this.u?l:r,c=this.u?"expand":"collapse",d="table"===i?i:"the "+i,p=n.lastElementChild;s(n,{"aria-expanded":this.u}),s(o,{"aria-expanded":this.u,"aria-label":c+" "+d}),this.C(c,e),h?o.innerHTML=a?h+t(n,i):h:"table"===i?o.parentNode.removeChild(o):"list"===i&&p.parentNode.removeChild(p)};const d=[].slice.call(document.querySelectorAll(r));this.C=o,this.i={...i,...h},d.map((t,e)=>{const s=JSON.parse(t.getAttribute("data-config")),n={...c,...s};this.s={index:e,classArray:t.classList,...l,...n,typeElement:n.element||"span",element:t},this.t()})}}}(); +var ShowMore=function(){"use strict";const t=(t,e)=>{let{rows:s,children:n}=t;const i="table"===e?s:n,r=[].slice.call(i).filter(t=>"hidden"===t.className).length;return 0!==r?" "+r:""},e=function(t,e){return void 0===e&&(e=!1),t.classList[e?"add":"remove"]("hidden")},s=(t,e)=>{for(let s in e)t.setAttribute(s,e[s])},n=t=>document.createElement(t),i={newLine:{match:/(\r\n|\n|\r)/gm,replace:""},space:{match:/\s\s+/gm,replace:" "},br:{match://gim,replace:""},html:{match:/(<((?!b|\/b|!strong|\/strong)[^>]+)>)/gi,replace:""}},r={typeElement:"span",more:!1,less:!1,number:!1,nobutton:!1,after:0,btnClass:"show-more-btn",btnClassAppend:null};return class{constructor(l,a){let{onMoreLess:o=(()=>{}),regex:h={},config:c}=void 0===a?{}:a;this.t=()=>{const{element:t,after:i,ellipsis:r,nobutton:l,limit:a,type:o}=this.s;s(t,{"aria-expanded":"false"});const h=a+i,c=!1===r?"":"...";if("text"===o){const e=t.innerHTML.trim();if(t.textContent.trim().length>h){let s=e;for(let t in this.i){const{match:e,replace:n}=this.i[t];t&&e&&(s=s.replace(e,n))}const i=((t,e)=>{let s=n("div");return s.insertAdjacentHTML("afterbegin",t),function t(e,s){let n=e.firstChild;do{3===n.nodeType?s(n):1===n.nodeType&&n.childNodes&&n.childNodes[0]&&t(n,s)}while(n=n.nextSibling)}(s,(function(t){if(e>0){let s=t.data.length;(e-=s)<=0&&(t.data=t.substringData(0,t.data.length+e))}else t.data=""})),s.innerHTML})(s,a-1).concat(c);if(t.textContent="",t.insertAdjacentHTML("beforeend",i),this.l(t,{...this.s,originalText:e,truncatedText:i}),l)return;this.o(this.s)}}if("list"===o||"table"===o){const s=this.h(t,o);if(s.length>h){for(let t=a;tt.addEventListener("click",this.p.bind(this,e)),this.m=e=>{let{element:i,number:r,less:l,more:a,type:o,btnClass:h,btnClassAppend:c}=e;const d=this.u?l||"":a||"",p=this.u?"collapse":"expand",f=!!this.u,m=n("button");return m.className=null==c?h:h+" "+c,s(m,{"aria-expanded":f,"aria-label":p,tabindex:0}),m.insertAdjacentHTML("beforeend",r?d+t(i,o):d),m},this.p=(t,s)=>{let{target:i}=s;const{element:r,type:l,limit:a,less:o,typeElement:h,originalText:c,truncatedText:d,btnClass:p}=t,f=i.classList.contains(p);if(!f)return;const m=r.getAttribute("aria-expanded");if(this.u="false"===m,"text"===l&&f&&(r.textContent="",r.insertAdjacentHTML("beforeend",this.u?c:d),o)){const e=n(h);e.classList.add("show-more-wrapper"),e.insertAdjacentElement("beforeend",this.m(t)),r.appendChild(e)}if("list"===l||"table"===l){const t=this.h(r,l);for(let s=0;s=a&&s=a;"false"===m?e(t[s]):n&&e(t[s],!0)}}l&&this.g({...t,target:i})},this.h=(t,e)=>"list"===e?[].slice.call(t.children):t.rows,this.o=t=>{const{type:e,element:s,more:i,typeElement:r}=t;if(i)if("table"===e)s.insertAdjacentElement("afterend",this.m(t));else{const e=n(r);e.classList.add("show-more-wrapper"),e.appendChild(this.m(t)),s.appendChild(e)}},this.g=e=>{const{element:n,type:i,less:r,more:l,number:a,target:o}=e,h=this.u?r:l,c=this.u?"expand":"collapse",d="table"===i?i:"the "+i,p=n.lastElementChild;s(n,{"aria-expanded":this.u}),s(o,{"aria-expanded":this.u,"aria-label":c+" "+d}),this.C(c,e),h?o.innerHTML=a?h+t(n,i):h:"table"===i?o.parentNode.removeChild(o):"list"===i&&p.parentNode.removeChild(p)};const d=[].slice.call(document.querySelectorAll(l));this.C=o,this.i={...i,...h},d.map((t,e)=>{const s=JSON.parse(t.getAttribute("data-config")),n={...c,...s};this.s={index:e,classArray:t.classList,...r,...n,typeElement:n.element||"span",element:t},this.t()})}}}(); //# sourceMappingURL=showMore.min.js.map diff --git a/docs/showMore.min.js.map b/docs/showMore.min.js.map index 86a544b..0336905 100644 --- a/docs/showMore.min.js.map +++ b/docs/showMore.min.js.map @@ -1 +1 @@ -{"version":3,"file":"showMore.min.js","sources":["../sources/utils/function.js","../sources/utils/regex.js","../sources/utils/defaults.js","../sources/index.js"],"sourcesContent":["/**\r\n * Get hidden element\r\n *\r\n * @param {object} object\r\n * @param {String} type - type of element table | div\r\n * @returns\r\n */\r\nconst getNumber = ({ rows, children }, type) => {\r\n const elementType = type === \"table\" ? rows : children;\r\n\r\n const numbersElementHidden = [].slice\r\n .call(elementType)\r\n .filter((el) => el.className === \"hidden\").length;\r\n return numbersElementHidden !== 0 ? ` ${numbersElementHidden}` : \"\";\r\n};\r\n\r\n// https://stackoverflow.com/questions/6003271/substring-text-with-html-tags-in-javascript\r\n/**\r\n * Substring text width html tags\r\n *\r\n * @param {String} originalText - text with html tags\r\n * @param {String} count - limit of characters\r\n * @returns\r\n */\r\nconst htmlSubstr = (originalText, count) => {\r\n let div = createElement(\"div\");\r\n div.insertAdjacentHTML(\"afterbegin\", originalText);\r\n\r\n walk(div, track);\r\n\r\n function track(el) {\r\n if (count > 0) {\r\n let len = el.data.length;\r\n count -= len;\r\n if (count <= 0) {\r\n el.data = el.substringData(0, el.data.length + count);\r\n }\r\n } else {\r\n el.data = \"\";\r\n }\r\n }\r\n\r\n function walk(el, fn) {\r\n let node = el.firstChild;\r\n do {\r\n if (node.nodeType === 3) {\r\n fn(node);\r\n } else if (node.nodeType === 1 && node.childNodes && node.childNodes[0]) {\r\n walk(node, fn);\r\n }\r\n } while ((node = node.nextSibling));\r\n }\r\n return div.innerHTML;\r\n};\r\n\r\n/**\r\n * Add/remove class 'hidden' to element\r\n *\r\n * @param {HTMLElement} element\r\n * @param {String} type - type of element add or remove\r\n */\r\nconst addRemoveClass = (element, type = false) => {\r\n return element.classList[type ? \"add\" : \"remove\"](\"hidden\");\r\n};\r\n\r\n/**\r\n * Set attributes to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {Object} object\r\n */\r\nconst setAttributes = (el, object) => {\r\n for (let key in object) {\r\n el.setAttribute(key, object[key]);\r\n }\r\n};\r\n\r\n/**\r\n * Create element\r\n *\r\n * @param {String} type - type of element\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (type) => document.createElement(type);\r\n\r\nexport { addRemoveClass, createElement, getNumber, htmlSubstr, setAttributes };\r\n","/**\r\n * Default regexes for validation\r\n */\r\nconst defaultRegex = {\r\n newLine: {\r\n match: /(\\r\\n|\\n|\\r)/gm,\r\n replace: \"\",\r\n },\r\n space: {\r\n match: /\\s\\s+/gm,\r\n replace: \" \",\r\n },\r\n br: {\r\n match: //gim,\r\n replace: \"\",\r\n },\r\n html: {\r\n match: /(<((?!b|\\/b|!strong|\\/strong)[^>]+)>)/gi,\r\n replace: \"\",\r\n },\r\n};\r\n\r\nexport default defaultRegex;\r\n","const defaultOptions = {\r\n typeElement: \"span\",\r\n more: false,\r\n less: false,\r\n number: false,\r\n nobutton: false,\r\n after: 0,\r\n btnClass: \"show-more-btn\",\r\n btnClassAppend: null,\r\n};\r\n\r\nexport default defaultOptions;\r\n","import {\r\n addRemoveClass,\r\n createElement,\r\n getNumber,\r\n htmlSubstr,\r\n setAttributes,\r\n} from \"./utils/function\";\r\nimport defaultRegex from \"./utils/regex\";\r\nimport defaultOptions from \"./utils/defaults\";\r\n\r\n/**\r\n * @class ShowMore\r\n */\r\nexport default class ShowMore {\r\n /**\r\n * Constructor\r\n *\r\n * @param {HTMLElement} className\r\n * @param {Object} object\r\n */\r\n constructor(className, { onMoreLess = () => {}, regex = {}, config } = {}) {\r\n // all html elements\r\n const elements = [].slice.call(document.querySelectorAll(className));\r\n\r\n // colback function\r\n this._onMoreLess = onMoreLess;\r\n\r\n // global regex\r\n this._regex = { ...defaultRegex, ...regex };\r\n\r\n elements.map((item, index) => {\r\n const configData = JSON.parse(item.getAttribute(\"data-config\"));\r\n const configGlobal = config;\r\n\r\n const configDataAndGlobal = { ...configGlobal, ...configData };\r\n\r\n this._object = {\r\n index,\r\n classArray: item.classList,\r\n ...defaultOptions,\r\n ...configDataAndGlobal,\r\n typeElement: configDataAndGlobal.element || \"span\",\r\n element: item,\r\n };\r\n\r\n this._initial();\r\n });\r\n }\r\n\r\n /**\r\n * Initail function\r\n *\r\n * @param {Object} object\r\n */\r\n _initial = () => {\r\n const { element, after, ellipsis, nobutton, limit, type } = this._object;\r\n // set default aria-expande to false\r\n setAttributes(element, { \"aria-expanded\": \"false\" });\r\n\r\n const limitCounts = limit + after;\r\n const ellips = ellipsis === false ? \"\" : \"...\";\r\n\r\n console.log(nobutton);\r\n\r\n // text\r\n if (type === \"text\") {\r\n const originalText = element.innerHTML.trim();\r\n const elementText = element.textContent.trim();\r\n\r\n if (elementText.length > limitCounts) {\r\n let orgTexReg = originalText;\r\n\r\n for (let key in this._regex) {\r\n const { match, replace } = this._regex[key];\r\n if (key && match) orgTexReg = orgTexReg.replace(match, replace);\r\n }\r\n\r\n const truncatedText = htmlSubstr(orgTexReg, limit - 1).concat(ellips);\r\n\r\n element.textContent = \"\";\r\n element.insertAdjacentHTML(\"beforeend\", truncatedText);\r\n\r\n this._clickEvent(element, {\r\n ...this._object,\r\n originalText,\r\n truncatedText,\r\n });\r\n\r\n if (nobutton) return;\r\n this._addBtn(this._object);\r\n }\r\n }\r\n\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n if (items.length > limitCounts) {\r\n for (let i = limit; i < items.length; i++) {\r\n addRemoveClass(items[i], true);\r\n }\r\n\r\n // add event click\r\n this._clickEvent(\r\n type === \"list\" ? element : element.nextElementSibling,\r\n this._object\r\n );\r\n\r\n if (nobutton) return;\r\n // add button to the list and table\r\n this._addBtn(this._object);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Event click\r\n *\r\n * @param {HTMLElement} element\r\n * @param {Object} object\r\n */\r\n _clickEvent = (element, object) =>\r\n element.addEventListener(\"click\", this._handleEvent.bind(this, object));\r\n\r\n /**\r\n * Create button\r\n *\r\n * @param {Object} object\r\n * @returns HTMLElement\r\n */\r\n _createBtn = ({\r\n element,\r\n number,\r\n less,\r\n more,\r\n type,\r\n btnClass,\r\n btnClassAppend,\r\n }) => {\r\n const typeAria = this._checkExp ? less || \"\" : more || \"\";\r\n const label = this._checkExp ? \"collapse\" : \"expand\";\r\n const expanded = this._checkExp ? true : false;\r\n\r\n const button = createElement(\"button\");\r\n button.className =\r\n btnClassAppend == null ? btnClass : btnClass + \" \" + btnClassAppend;\r\n setAttributes(button, {\r\n \"aria-expanded\": expanded,\r\n \"aria-label\": label,\r\n tabindex: 0,\r\n });\r\n\r\n button.insertAdjacentHTML(\r\n \"beforeend\",\r\n number ? typeAria + getNumber(element, type) : typeAria\r\n );\r\n return button;\r\n };\r\n\r\n /**\r\n * Event handler\r\n *\r\n * @param {Object} object\r\n * @param {Event} event\r\n */\r\n _handleEvent = (object, { target }) => {\r\n const {\r\n element,\r\n type,\r\n limit,\r\n less,\r\n typeElement,\r\n originalText,\r\n truncatedText,\r\n btnClass,\r\n } = object;\r\n\r\n // check if the button is clicked\r\n const checkContainsClass = target.classList.contains(btnClass);\r\n\r\n if (!checkContainsClass) return;\r\n\r\n const ariaExpanded = element.getAttribute(\"aria-expanded\");\r\n this._checkExp = ariaExpanded === \"false\";\r\n\r\n // --------------------------------------------------\r\n // text\r\n if (type === \"text\" && checkContainsClass) {\r\n element.textContent = \"\";\r\n\r\n element.insertAdjacentHTML(\r\n \"beforeend\",\r\n this._checkExp ? originalText : truncatedText\r\n );\r\n\r\n if (less) {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.insertAdjacentElement(\"beforeend\", this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n }\r\n\r\n // --------------------------------------------------\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n const typeRemove =\r\n type === \"list\" ? i >= limit && i < items.length - 1 : i >= limit;\r\n\r\n if (ariaExpanded === \"false\") {\r\n addRemoveClass(items[i]);\r\n } else if (typeRemove) {\r\n addRemoveClass(items[i], true);\r\n }\r\n }\r\n }\r\n\r\n // set aria-expanded\r\n if (type) {\r\n this._setExpand({ ...object, target });\r\n }\r\n };\r\n\r\n _getNumberCount = (element, type) => {\r\n return type === \"list\" ? [].slice.call(element.children) : element.rows;\r\n };\r\n\r\n /**\r\n * Add button\r\n *\r\n * @param {Object} object\r\n */\r\n _addBtn = (object) => {\r\n const { type, element, more, typeElement } = object;\r\n\r\n if (!more) return;\r\n\r\n if (type === \"table\") {\r\n element.insertAdjacentElement(\"afterend\", this._createBtn(object));\r\n } else {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.appendChild(this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n };\r\n\r\n /**\r\n * Set aria-expanded\r\n *\r\n * @param {Object} object\r\n */\r\n _setExpand = (object) => {\r\n const { element, type, less, more, number, target } = object;\r\n\r\n const typeAria = this._checkExp ? less : more;\r\n const aria = this._checkExp ? \"expand\" : \"collapse\";\r\n const ariaText = type === \"table\" ? type : `the ${type}`;\r\n const lastChild = element.lastElementChild;\r\n\r\n setAttributes(element, { \"aria-expanded\": this._checkExp });\r\n setAttributes(target, {\r\n \"aria-expanded\": this._checkExp,\r\n \"aria-label\": `${aria} ${ariaText}`,\r\n });\r\n\r\n // callback function on more/less\r\n this._onMoreLess(aria, object);\r\n\r\n if (typeAria) {\r\n target.innerHTML = number\r\n ? typeAria + getNumber(element, type)\r\n : typeAria;\r\n } else if (type === \"table\") {\r\n target.parentNode.removeChild(target);\r\n } else if (type === \"list\") {\r\n lastChild.parentNode.removeChild(lastChild);\r\n }\r\n };\r\n}\r\n"],"names":["getNumber","type","rows","children","elementType","numbersElementHidden","slice","call","filter","el","className","length","addRemoveClass","element","classList","setAttributes","object","key","setAttribute","createElement","document","defaultRegex","newLine","match","replace","space","br","html","defaultOptions","typeElement","more","less","number","nobutton","after","btnClass","btnClassAppend","constructor","onMoreLess","regex","config","_initial","ellipsis","limit","this","_object","limitCounts","ellips","console","log","originalText","innerHTML","trim","textContent","orgTexReg","_regex","truncatedText","count","div","insertAdjacentHTML","walk","fn","node","firstChild","nodeType","childNodes","nextSibling","len","data","substringData","htmlSubstr","concat","_clickEvent","_addBtn","items","_getNumberCount","i","nextElementSibling","addEventListener","_handleEvent","bind","_createBtn","_ref","typeAria","_checkExp","label","expanded","button","tabindex","target","checkContainsClass","contains","ariaExpanded","getAttribute","add","insertAdjacentElement","appendChild","typeRemove","_setExpand","aria","ariaText","lastChild","lastElementChild","_onMoreLess","parentNode","removeChild","elements","querySelectorAll","map","item","index","configData","JSON","parse","configDataAndGlobal","classArray"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"showMore.min.js","sources":["../sources/utils/function.js","../sources/utils/regex.js","../sources/utils/defaults.js","../sources/index.js"],"sourcesContent":["/**\r\n * Get hidden element\r\n *\r\n * @param {object} object\r\n * @param {String} type - type of element table | div\r\n * @returns\r\n */\r\nconst getNumber = ({ rows, children }, type) => {\r\n const elementType = type === \"table\" ? rows : children;\r\n\r\n const numbersElementHidden = [].slice\r\n .call(elementType)\r\n .filter((el) => el.className === \"hidden\").length;\r\n return numbersElementHidden !== 0 ? ` ${numbersElementHidden}` : \"\";\r\n};\r\n\r\n// https://stackoverflow.com/questions/6003271/substring-text-with-html-tags-in-javascript\r\n/**\r\n * Substring text width html tags\r\n *\r\n * @param {String} originalText - text with html tags\r\n * @param {String} count - limit of characters\r\n * @returns\r\n */\r\nconst htmlSubstr = (originalText, count) => {\r\n let div = createElement(\"div\");\r\n div.insertAdjacentHTML(\"afterbegin\", originalText);\r\n\r\n walk(div, track);\r\n\r\n function track(el) {\r\n if (count > 0) {\r\n let len = el.data.length;\r\n count -= len;\r\n if (count <= 0) {\r\n el.data = el.substringData(0, el.data.length + count);\r\n }\r\n } else {\r\n el.data = \"\";\r\n }\r\n }\r\n\r\n function walk(el, fn) {\r\n let node = el.firstChild;\r\n do {\r\n if (node.nodeType === 3) {\r\n fn(node);\r\n } else if (node.nodeType === 1 && node.childNodes && node.childNodes[0]) {\r\n walk(node, fn);\r\n }\r\n } while ((node = node.nextSibling));\r\n }\r\n return div.innerHTML;\r\n};\r\n\r\n/**\r\n * Add/remove class 'hidden' to element\r\n *\r\n * @param {HTMLElement} element\r\n * @param {String} type - type of element add or remove\r\n */\r\nconst addRemoveClass = (element, type = false) => {\r\n return element.classList[type ? \"add\" : \"remove\"](\"hidden\");\r\n};\r\n\r\n/**\r\n * Set attributes to element\r\n *\r\n * @param {HTMLElement} el\r\n * @param {Object} object\r\n */\r\nconst setAttributes = (el, object) => {\r\n for (let key in object) {\r\n el.setAttribute(key, object[key]);\r\n }\r\n};\r\n\r\n/**\r\n * Create element\r\n *\r\n * @param {String} type - type of element\r\n * @returns {HTMLElement}\r\n */\r\nconst createElement = (type) => document.createElement(type);\r\n\r\nexport { addRemoveClass, createElement, getNumber, htmlSubstr, setAttributes };\r\n","/**\r\n * Default regexes for validation\r\n */\r\nconst defaultRegex = {\r\n newLine: {\r\n match: /(\\r\\n|\\n|\\r)/gm,\r\n replace: \"\",\r\n },\r\n space: {\r\n match: /\\s\\s+/gm,\r\n replace: \" \",\r\n },\r\n br: {\r\n match: //gim,\r\n replace: \"\",\r\n },\r\n html: {\r\n match: /(<((?!b|\\/b|!strong|\\/strong)[^>]+)>)/gi,\r\n replace: \"\",\r\n },\r\n};\r\n\r\nexport default defaultRegex;\r\n","const defaultOptions = {\r\n typeElement: \"span\",\r\n more: false,\r\n less: false,\r\n number: false,\r\n nobutton: false,\r\n after: 0,\r\n btnClass: \"show-more-btn\",\r\n btnClassAppend: null,\r\n};\r\n\r\nexport default defaultOptions;\r\n","import {\r\n addRemoveClass,\r\n createElement,\r\n getNumber,\r\n htmlSubstr,\r\n setAttributes,\r\n} from \"./utils/function\";\r\nimport defaultRegex from \"./utils/regex\";\r\nimport defaultOptions from \"./utils/defaults\";\r\n\r\n/**\r\n * @class ShowMore\r\n */\r\nexport default class ShowMore {\r\n /**\r\n * Constructor\r\n *\r\n * @param {HTMLElement} className\r\n * @param {Object} object\r\n */\r\n constructor(className, { onMoreLess = () => {}, regex = {}, config } = {}) {\r\n // all html elements\r\n const elements = [].slice.call(document.querySelectorAll(className));\r\n\r\n // colback function\r\n this._onMoreLess = onMoreLess;\r\n\r\n // global regex\r\n this._regex = { ...defaultRegex, ...regex };\r\n\r\n elements.map((item, index) => {\r\n const configData = JSON.parse(item.getAttribute(\"data-config\"));\r\n const configGlobal = config;\r\n\r\n const configDataAndGlobal = { ...configGlobal, ...configData };\r\n\r\n this._object = {\r\n index,\r\n classArray: item.classList,\r\n ...defaultOptions,\r\n ...configDataAndGlobal,\r\n typeElement: configDataAndGlobal.element || \"span\",\r\n element: item,\r\n };\r\n\r\n this._initial();\r\n });\r\n }\r\n\r\n /**\r\n * Initail function\r\n *\r\n * @param {Object} object\r\n */\r\n _initial = () => {\r\n const { element, after, ellipsis, nobutton, limit, type } = this._object;\r\n // set default aria-expande to false\r\n setAttributes(element, { \"aria-expanded\": \"false\" });\r\n\r\n const limitCounts = limit + after;\r\n const ellips = ellipsis === false ? \"\" : \"...\";\r\n\r\n // console.log(nobutton);\r\n\r\n // text\r\n if (type === \"text\") {\r\n const originalText = element.innerHTML.trim();\r\n const elementText = element.textContent.trim();\r\n\r\n if (elementText.length > limitCounts) {\r\n let orgTexReg = originalText;\r\n\r\n for (let key in this._regex) {\r\n const { match, replace } = this._regex[key];\r\n if (key && match) orgTexReg = orgTexReg.replace(match, replace);\r\n }\r\n\r\n const truncatedText = htmlSubstr(orgTexReg, limit - 1).concat(ellips);\r\n\r\n element.textContent = \"\";\r\n element.insertAdjacentHTML(\"beforeend\", truncatedText);\r\n\r\n this._clickEvent(element, {\r\n ...this._object,\r\n originalText,\r\n truncatedText,\r\n });\r\n\r\n if (nobutton) return;\r\n this._addBtn(this._object);\r\n }\r\n }\r\n\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n if (items.length > limitCounts) {\r\n for (let i = limit; i < items.length; i++) {\r\n addRemoveClass(items[i], true);\r\n }\r\n\r\n // add event click\r\n this._clickEvent(\r\n type === \"list\" ? element : element.nextElementSibling,\r\n this._object\r\n );\r\n\r\n if (nobutton) return;\r\n // add button to the list and table\r\n this._addBtn(this._object);\r\n }\r\n }\r\n };\r\n\r\n /**\r\n * Event click\r\n *\r\n * @param {HTMLElement} element\r\n * @param {Object} object\r\n */\r\n _clickEvent = (element, object) =>\r\n element.addEventListener(\"click\", this._handleEvent.bind(this, object));\r\n\r\n /**\r\n * Create button\r\n *\r\n * @param {Object} object\r\n * @returns HTMLElement\r\n */\r\n _createBtn = ({\r\n element,\r\n number,\r\n less,\r\n more,\r\n type,\r\n btnClass,\r\n btnClassAppend,\r\n }) => {\r\n const typeAria = this._checkExp ? less || \"\" : more || \"\";\r\n const label = this._checkExp ? \"collapse\" : \"expand\";\r\n const expanded = this._checkExp ? true : false;\r\n\r\n const button = createElement(\"button\");\r\n button.className =\r\n btnClassAppend == null ? btnClass : btnClass + \" \" + btnClassAppend;\r\n setAttributes(button, {\r\n \"aria-expanded\": expanded,\r\n \"aria-label\": label,\r\n tabindex: 0,\r\n });\r\n\r\n button.insertAdjacentHTML(\r\n \"beforeend\",\r\n number ? typeAria + getNumber(element, type) : typeAria\r\n );\r\n return button;\r\n };\r\n\r\n /**\r\n * Event handler\r\n *\r\n * @param {Object} object\r\n * @param {Event} event\r\n */\r\n _handleEvent = (object, { target }) => {\r\n const {\r\n element,\r\n type,\r\n limit,\r\n less,\r\n typeElement,\r\n originalText,\r\n truncatedText,\r\n btnClass,\r\n } = object;\r\n\r\n // check if the button is clicked\r\n const checkContainsClass = target.classList.contains(btnClass);\r\n\r\n if (!checkContainsClass) return;\r\n\r\n const ariaExpanded = element.getAttribute(\"aria-expanded\");\r\n this._checkExp = ariaExpanded === \"false\";\r\n\r\n // --------------------------------------------------\r\n // text\r\n if (type === \"text\" && checkContainsClass) {\r\n element.textContent = \"\";\r\n\r\n element.insertAdjacentHTML(\r\n \"beforeend\",\r\n this._checkExp ? originalText : truncatedText\r\n );\r\n\r\n if (less) {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.insertAdjacentElement(\"beforeend\", this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n }\r\n\r\n // --------------------------------------------------\r\n // list and table\r\n if (type === \"list\" || type === \"table\") {\r\n const items = this._getNumberCount(element, type);\r\n\r\n for (let i = 0; i < items.length; i++) {\r\n const typeRemove =\r\n type === \"list\" ? i >= limit && i < items.length - 1 : i >= limit;\r\n\r\n if (ariaExpanded === \"false\") {\r\n addRemoveClass(items[i]);\r\n } else if (typeRemove) {\r\n addRemoveClass(items[i], true);\r\n }\r\n }\r\n }\r\n\r\n // set aria-expanded\r\n if (type) {\r\n this._setExpand({ ...object, target });\r\n }\r\n };\r\n\r\n _getNumberCount = (element, type) => {\r\n return type === \"list\" ? [].slice.call(element.children) : element.rows;\r\n };\r\n\r\n /**\r\n * Add button\r\n *\r\n * @param {Object} object\r\n */\r\n _addBtn = (object) => {\r\n const { type, element, more, typeElement } = object;\r\n\r\n if (!more) return;\r\n\r\n if (type === \"table\") {\r\n element.insertAdjacentElement(\"afterend\", this._createBtn(object));\r\n } else {\r\n const el = createElement(typeElement);\r\n el.classList.add(\"show-more-wrapper\");\r\n el.appendChild(this._createBtn(object));\r\n element.appendChild(el);\r\n }\r\n };\r\n\r\n /**\r\n * Set aria-expanded\r\n *\r\n * @param {Object} object\r\n */\r\n _setExpand = (object) => {\r\n const { element, type, less, more, number, target } = object;\r\n\r\n const typeAria = this._checkExp ? less : more;\r\n const aria = this._checkExp ? \"expand\" : \"collapse\";\r\n const ariaText = type === \"table\" ? type : `the ${type}`;\r\n const lastChild = element.lastElementChild;\r\n\r\n setAttributes(element, { \"aria-expanded\": this._checkExp });\r\n setAttributes(target, {\r\n \"aria-expanded\": this._checkExp,\r\n \"aria-label\": `${aria} ${ariaText}`,\r\n });\r\n\r\n // callback function on more/less\r\n this._onMoreLess(aria, object);\r\n\r\n if (typeAria) {\r\n target.innerHTML = number\r\n ? typeAria + getNumber(element, type)\r\n : typeAria;\r\n } else if (type === \"table\") {\r\n target.parentNode.removeChild(target);\r\n } else if (type === \"list\") {\r\n lastChild.parentNode.removeChild(lastChild);\r\n }\r\n };\r\n}\r\n"],"names":["getNumber","type","rows","children","elementType","numbersElementHidden","slice","call","filter","el","className","length","addRemoveClass","element","classList","setAttributes","object","key","setAttribute","createElement","document","defaultRegex","newLine","match","replace","space","br","html","defaultOptions","typeElement","more","less","number","nobutton","after","btnClass","btnClassAppend","constructor","onMoreLess","regex","config","_initial","ellipsis","limit","this","_object","limitCounts","ellips","originalText","innerHTML","trim","textContent","orgTexReg","_regex","truncatedText","count","div","insertAdjacentHTML","walk","fn","node","firstChild","nodeType","childNodes","nextSibling","len","data","substringData","htmlSubstr","concat","_clickEvent","_addBtn","items","_getNumberCount","i","nextElementSibling","addEventListener","_handleEvent","bind","_createBtn","_ref","typeAria","_checkExp","label","expanded","button","tabindex","target","checkContainsClass","contains","ariaExpanded","getAttribute","add","insertAdjacentElement","appendChild","typeRemove","_setExpand","aria","ariaText","lastChild","lastElementChild","_onMoreLess","parentNode","removeChild","elements","querySelectorAll","map","item","index","configData","JSON","parse","configDataAndGlobal","classArray"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index bd69fff..dee2b1b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "show-more-read", - "version": "1.1.3", + "version": "1.1.4", "main": "dist/js/showMore.js", "description": "JavaScript library that truncates text, list or table by chars, elements or rows", "author": "Grzegorz Tomicki", diff --git a/rollup.config.js b/rollup.config.js index 0a29d41..96d0e8d 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -70,7 +70,12 @@ export default [ format: "iife", sourcemap: false, file: "dist/js/showMore.min.js", - plugins: [terser({ ...terserConfig })], + plugins: [ + terser({ + ...terserConfig, + compress: { drop_console: true, drop_debugger: true }, + }), + ], }, }, { @@ -85,6 +90,7 @@ export default [ PRODUCTION && terser({ ...terserConfig, + compress: { drop_console: true, drop_debugger: true }, }), !PRODUCTION && serve({ open: true, contentBase: ["docs"] }), !PRODUCTION && livereload(), diff --git a/sources/index.js b/sources/index.js index cb93251..7a1d3cd 100644 --- a/sources/index.js +++ b/sources/index.js @@ -60,7 +60,7 @@ export default class ShowMore { const limitCounts = limit + after; const ellips = ellipsis === false ? "" : "..."; - console.log(nobutton); + // console.log(nobutton); // text if (type === "text") {