js-snip
Version:
Universal JavaScript library for clamping HTML text elements.
2 lines (1 loc) • 5.59 kB
JavaScript
function e(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,r)}return n}function t(t){for(var n=1;n<arguments.length;n++){var o=null!=arguments[n]?arguments[n]:{};n%2?e(Object(o),!0).forEach((function(e){r(t,e,o[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(o)):e(Object(o)).forEach((function(e){Object.defineProperty(t,e,Object.getOwnPropertyDescriptor(o,e))}))}return t}function n(e){return n="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},n(e)}function r(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||null===e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var r=n.call(e,t||"default");if("object"!=typeof r)return r;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:String(t)}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,r=new Array(t);n<t;n++)r[n]=e[n];return r}function i(e,t){var n="undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(!n){if(Array.isArray(e)||(n=function(e,t){if(e){if("string"==typeof e)return o(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?o(e,t):void 0}}(e))||t&&e&&"number"==typeof e.length){n&&(e=n);var r=0,i=function(){};return{s:i,n:function(){return r>=e.length?{done:!0}:{done:!1,value:e[r++]}},e:function(e){throw e},f:i}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}var l,s=!0,u=!1;return{s:function(){n=n.call(e)},n:function(){var e=n.next();return s=e.done,e},e:function(e){u=!0,l=e},f:function(){try{s||null==n.return||n.return()}finally{if(u)throw l}}}}var l=function(e){var t=window.getComputedStyle(e),n=parseFloat(t.height),r="normal"===t.lineHeight?1.2*parseFloat(t.fontSize):parseFloat(t.lineHeight);return 0===n&&0===r?0:Math.ceil(n/r)},s=function(){return"undefined"!=typeof CSS&&CSS.supports("display","-webkit-box")&&CSS.supports("-webkit-line-clamp","3")&&CSS.supports("-webkit-box-orient","vertical")},u=new WeakMap,c=function(e){return u.get(e)},a=function(e,t){u.set(e,t)},f=function(e){return{hasEllipsis:c(e).hasEllipsis}},p=function(e){var n=t({},c(e));(null==n?void 0:n.observer)&&(null==n||n.observer.disconnect()),(null==n?void 0:n.observer)&&(null==n||delete n.prevWidth),(null==n?void 0:n.observer)&&(null==n||delete n.prevHeight),(null==n?void 0:n.observer)&&(null==n||delete n.observer),a(e,n)},y={mode:"css",lines:3,ellipsis:". . .",midWord:!0,textContent:null},v=function(e){if("number"==typeof e)return parseInt(e.toString());if("string"==typeof e){var t=parseInt(e);if(!isNaN(t))return t}return y.lines},d=function(e){return s()?"css"===e||"js"===e?e:y.mode:"js"},b=function(e){return"string"==typeof e?e:"number"==typeof e?e.toString():y.ellipsis},m=function(e){return"boolean"==typeof e?e:y.midWord},h=function(e){return"string"==typeof e?e:"number"==typeof e?e.toString():y.textContent},g=function(e){var t,n=c(e);e.textContent=null!==(t=null==n?void 0:n.fullText)&&void 0!==t?t:e.textContent,e.style.display="",e.style.webkitLineClamp="",e.style.webkitBoxOrient="",e.style.overflow=""},w=function(e){g(e),p(e),function(e){u.delete(e)}(e)},S=function(e,r,o){var s=!function(e){return u.has(e)}(e),w=c(e),S=function(e){if("object"!==n(e)||null===e)return y;var t=e,r=t.mode,o=t.lines,i=t.ellipsis,l=t.midWord,s=t.textContent;return{mode:d(r),lines:v(o),ellipsis:b(i),midWord:m(l),textContent:h(s)}}(r);a(e,t(t(t({},w),S),{},{hasEllipsis:!s&&(null==w?void 0:w.hasEllipsis),fullText:S.textContent?S.textContent:s?e.textContent:null==w?void 0:w.fullText}));var x=function(){var n=f(e),r=c(e);g(e);var s=l(e);if("css"===r.mode&&function(e,t){var n=t.lines,r=t.fullText;e.textContent=r,e.style.display="-webkit-box",e.style.webkitLineClamp=n.toString(),e.style.webkitBoxOrient="vertical",e.style.overflow="hidden"}(e,r),"js"===r.mode&&function(e,t){var n=t.lines,r=t.midWord,o=t.fullText,s=t.ellipsis,u=r?[". ",", "," ",""]:[". ",", "," "];if(e.textContent=o,e.style.display="",e.style.webkitLineClamp="",e.style.webkitBoxOrient="",e.style.overflow="",!(n<=0||l(e)<=n)){var c={unprocessed:o,processed:""};u.forEach((function(t){var r,o=i(c.unprocessed.split(t));try{for(o.s();!(r=o.n()).done;){var u=r.value;if(e.textContent="".concat(c.processed).concat(u).concat(t).concat(s),l(e)>n){c.unprocessed=u;break}c.processed="".concat(c.processed).concat(u).concat(t)}}catch(e){o.e(e)}finally{o.f()}})),e.textContent="".concat(c.processed.trim()).concat(s)}}(e,r),a(e,t(t({},r),{},{hasEllipsis:l(e)<s})),o){var u=f(e);o(u,n)}};if("undefined"!=typeof ResizeObserver)return p(e),void function(e,n){var r=c(e),o=r.observer||new ResizeObserver((function(){var r=c(e);if(e.clientWidth!==r.prevWidth||e.clientHeight!==r.prevHeight){n();var o=t({},r);o.prevWidth=e.clientWidth,o.prevHeight=e.clientHeight,a(e,o)}}));o.observe(e),a(e,t(t({},r),{},{observer:o}))}(e,x);x()};export{l as getLines,S as snip,s as supportsCSSMode,w as unsnip};