dreadmore
Version:
The plugin for collapsing and expanding long blocks of text. min-height: 1px - 1 line. DISABLE it using CSS!
12 lines • 6.69 kB
JavaScript
/*!
* dreadmore - 2.2.3
*
* Author: DSekon
*
* Licensed under the MIT license
*
* Project home:
* https://dreadmore.dsekon.com
*
*/
!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var r=t();for(var n in r)("object"==typeof exports?exports:e)[n]=r[n]}}(this,(function(){return(()=>{"use strict";var e={677:(e,t)=>{function r(e){return r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},r(e)}function n(e){return window.getComputedStyle(e,null)}Object.defineProperty(t,"__esModule",{value:!0}),t.css=n,t.deleteProps=function(e){var t=e;Object.keys(t).forEach((function(e){try{t[e]=null}catch(e){}try{delete t[e]}catch(e){}}))},t.lh=function(e){var t=n(e).lineHeight;t="normal"!==t?parseFloat(t):1.25*parseFloat(n(e).fontSize);return t},t.selectorAll=function(e){if("object"===r(e))return e;return Array.prototype.slice.call(document.querySelectorAll(e))},t.stringToObj=function(e){if(e&&""!==e){var t=e.split(","),r={};return t.forEach((function(e){var t=e.split(":");r[t[0].trim()]=t[1].trim()})),r}return{}}}},t={};function r(n){var a=t[n];if(void 0!==a)return a.exports;var o=t[n]={exports:{}};return e[n](o,o.exports,r),o.exports}var n={};return(()=>{var e=n;Object.defineProperty(e,"__esModule",{value:!0}),e.default=void 0;var t=r(677);function a(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null==r)return;var n,a,o=[],i=!0,l=!1;try{for(r=r.call(e);!(i=(n=r.next()).done)&&(o.push(n.value),!t||o.length!==t);i=!0);}catch(e){l=!0,a=e}finally{try{i||null==r.return||r.return()}finally{if(l)throw a}}return o}(e,t)||function(e,t){if(!e)return;if("string"==typeof e)return o(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);"Object"===r&&e.constructor&&(r=e.constructor.name);if("Map"===r||"Set"===r)return Array.from(e);if("Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return o(e,t)}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r<t;r++)n[r]=e[r];return n}function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function l(e,t){for(var r=0;r<t.length;r++){var n=t[r];n.enumerable=n.enumerable||!1,n.configurable=!0,"value"in n&&(n.writable=!0),Object.defineProperty(e,n.key,n)}}function s(e,t,r){return t in e?Object.defineProperty(e,t,{value:r,enumerable:!0,configurable:!0,writable:!0}):e[t]=r,e}var c=function(){function e(){var r,n,a=this;i(this,e),s(this,"togglerEventListener",(function(e){var t=a,r=t.params,n=r.el,o=r.toggler,i=!t.isExpanded;t.params.beforeToggle&&"function"==typeof t.params.beforeToggle&&t.params.beforeToggle(n,t.isExpanded),t.isExpanded=i,o.forEach((function(e){e.setAttribute("aria-expanded",i),e.innerHTML=i?e.getAttribute("data-drm-toggler-less")||t.params.lessText:e.getAttribute("data-drm-toggler-more")||t.params.moreText})),n.classList.toggle("active"),n.style.height=i?t.heightExpanded:t.heightDefault,t.params.afterToggle&&"function"==typeof t.params.afterToggle&&t.params.afterToggle(n,t.isExpanded)}));for(var o=arguments.length,l=new Array(o),c=0;c<o;c++)l[c]=arguments[c];if(1===l.length&&l[0].constructor&&"Object"===Object.prototype.toString.call(l[0]).slice(8,-1)?n=l[0]:(r=l[0],n=l[1]),n||(n={}),r&&!n.el&&(n.el=r),n.el||(n.el=".dreadmore"),n.el&&(0,t.selectorAll)(n.el).length>1){var u=[];return(0,t.selectorAll)(n.el).forEach((function(t){var r=Object.assign({},n,{el:t});u.push(new e(r))})),u}"string"==typeof n.el&&(n.el=document.querySelector(n.el));var d=this,f=n.el?(0,t.stringToObj)(n.el.getAttribute("data-drm")):{};return d.params=Object.assign({initialExpand:!1,isInitialExpandWhenUpdate:!1,moreText:"Show more",lessText:"Close",toggler:null,beforeToggle:function(){},afterToggle:function(){}},n,f),d.init(),d}var r,n,o;return r=e,n=[{key:"calcTags",value:function(e,r){for(var n=this.params.el,a=0,o=void 0,i=void 0,l=0,s=0,c=0,u=0,d=0,f=0,p=0;f<e&&n.childNodes[p];p++)(o=n.childNodes[p]).outerHTML&&(i=(0,t.css)(o),s=parseFloat(i.marginTop),a+=f+(d=(c=parseFloat((0,t.css)(o).height))/(u=(0,t.lh)(o)))<=e?c/r:(e-f)*u/r,f+=d,a+=(s>l?s:l)/r,l=parseFloat(i.marginBottom));return[a,a*r+parseFloat((0,t.css)(n.childNodes[n.childNodes.length-1]).marginBottom)]}},{key:"getToggler",value:function(){var e=this,t=e.params.el;!e.params.toggler&&t.nextElementSibling.hasAttribute("data-drm-toggler")?e.params.toggler=[t.nextElementSibling]:e.params.toggler&&(e.params.toggler=document.querySelectorAll('[data-drm-toggler="'.concat(e.params.toggler,'"]'))),e.params.toggler.forEach((function(t){t.setAttribute("aria-expanded",e.isExpanded),t.addEventListener("click",e.togglerEventListener)}))}},{key:"update",value:function(){var e=this;if(e&&!e.destroyed){var r=e.params,n=r.el,o=r.toggler;n.innerHTML='<div class="'.concat(n.classList.value,'" style="display: inline-block !important;">').concat(n.innerHTML.trim(),"</div>");var i=parseFloat((0,t.css)(n).minHeight),l=parseFloat((0,t.css)(n.childNodes[0]).height),s=parseFloat((0,t.css)(n).fontSize),c=0,u=i*(0,t.lh)(n);if(n.innerHTML=n.childNodes[0].innerHTML,n.childNodes[0].tagName&&(e.mode="tags"),"tags"===e.mode){var d=a(e.calcTags(i,s),2);c=d[0],u=d[1]}else c=u/s;i&&l>u?(e=Object.assign(e,{heightDefault:"".concat(c,"em"),heightExpanded:"".concat(l/s,"em")}),n.style.height=e.params.isInitialExpandWhenUpdate||e.isExpanded?e.heightExpanded:e.heightDefault,o.forEach((function(e){e.classList.contains("dreadmore--disabled")&&e.classList.remove("dreadmore--disabled")}))):(n.style.height=null,o.forEach((function(e){e.classList.add("dreadmore--disabled")})))}}},{key:"init",value:function(){var e=this;return!!e.params.el&&(e.initialized||(e.isExpanded=e.params.initialExpand,e.getToggler(),e.update(),e.initialized=!0),e)}},{key:"destroy",value:function(){var e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],r=this;if(void 0===r.params||r.destroyed)return null;var n=r.params,a=n.el,o=n.toggler;return r.initialized=!1,a.removeAttribute("style"),o.forEach((function(e){e.removeEventListener("click",r.togglerEventListener)})),e&&(0,t.deleteProps)(r),r.destroyed=!0,null}}],n&&l(r.prototype,n),o&&l(r,o),Object.defineProperty(r,"prototype",{writable:!1}),e}();e.default=c,window.DReadMore=c})(),n})()}));