-
Notifications
You must be signed in to change notification settings - Fork 1
/
clampify.min.js
8 lines (8 loc) · 4.15 KB
/
clampify.min.js
1
2
3
4
5
6
7
8
/*!
* Clampify v1.2.1
*
* Copyright (c) 2017 Artem Vozhzhov <vojjov.artem@ya.ru>
*
* Licenced under the MIT licence.
*/
!function(t){var i=0,s=0,h=[],n=100,e=function Clampify(t,s){s=s||{};var h=++i;this.t=function(){return h},this.i=t,this.i.clampify=this,this.s=t.innerHTML;var n=s.endsWith||"\u2026",e=s.endsWithClass||"clampify-end";this.h=s.removeEndChars||/[.,?!\/\\:\-\s]+$/,this.o=!s.hasOwnProperty("hideOverflowY")||!!s.hideOverflowY,this.u=!!s.appendToLastElement,this.l=!!s.lastElementDeepAppend,this.setMaxLines(s.maxLines),this.v={overflowY:this.i.style.overflowY,maxHeight:this.i.style.maxHeight},this.p(),n instanceof Node?this.m=n.cloneNode(!0):(this.m=document.createElement("span"),this.m.className=e,this.m.appendChild(document.createTextNode(n))),this.N=document.createElement("span"),this.g=document.createElement("span"),this.g.appendChild(this.N),s.autoUpdate&&this.enableAutoUpdate()};if(e.setWindowResizeDelay=function(t){n=t<1?1:t},e.prototype.p=function(){if(this.A>0){var t=document.createElement("span");t.appendChild(document.createTextNode("\xa0")),this.i.innerHTML="",this.i.appendChild(t);var i=this.i.offsetHeight||this.i.clientHeight,s=t.offsetHeight;this.M=Math.max(i,s)*this.A,this.resetContent(),this.$()}else this.M=this.i.offsetHeight||this.i.clientHeight},e.prototype.k=function(){return this.g.offsetHeight>this.M},e.prototype.$=function(){this.o&&(this.i.style.overflowY="hidden"),this.i.style.maxHeight=this.M+"px"},e.prototype.C=function(){this.i.style.overflowY=this.v.overflowY,this.i.style.maxHeight=this.v.maxHeight},e.prototype.I=function(){this.N.innerHTML=this.i.innerHTML,this.i.innerHTML="",this.i.appendChild(this.g)},e.prototype.L=function(){this.i.removeChild(this.g),this.i.innerHTML=this.N.innerHTML},e.prototype.T=function(t){this.U=this.m.cloneNode(!0),this.Y=t,t.appendChild(this.U)},e.prototype.H=function(){this.Y&&this.U&&this.Y.removeChild(this.U),this.O()},e.prototype.O=function(){this.U=null,this.Y=null},e.prototype.j=function(t){if(this.H(),this.u)if(Node.TEXT_NODE===t.nodeType)this.T(t.parentNode);else if(this.l){for(var i=t;i.childNodes.length>0&&Node.ELEMENT_NODE===i.lastChild.nodeType;)i=i.lastChild;this.T(i)}else this.T(t);else this.T(this.N)},e.prototype.q=function(t){return t.join(" ").replace(this.h,"")},e.prototype.B=function(t){if(t=t||this.N,Node.TEXT_NODE===t.nodeType){var i=t.textContent.split(" ");for(t.textContent=this.q(i),this.j(t);this.k()&&i.length>0;)this.H(),i.pop(),t.textContent=this.q(i),this.j(t);if(this.H(),!t.textContent){var s,h;t.previousSibling?(s=t.previousSibling,t.parentNode.removeChild(t)):(s=t.parentNode.previousSibling,(h=t.parentNode).parentNode.removeChild(h)),this.B(s)}}else{var n=t.cloneNode(!0);for(t.innerHTML="";n.childNodes.length>0;){var e,o=n.childNodes[0];if(t.appendChild(o),this.j(o),e=this.k(),this.H(),e){this.B(o);break}}}},e.prototype.setMaxLines=function(t){t=parseInt(t),this.A=isNaN(t)?0:t},e.prototype.getMaxLines=function(){return this.A},e.prototype.resetContent=function(){this.i.innerHTML=this.s},e.prototype.truncate=function(){this.resetContent(),this.p(),this.I(),this.O(),this.k()&&(this.B(),this.j(this.N.lastChild,this.N)),this.L()},e.prototype.getId=function(){return this.t()},e.prototype.enableAutoUpdate=function(){h.push(this)},e.prototype.disableAutoUpdate=function(){for(var t=0,i=h.length;t<i;t++)if(this.getId()===h[t].getId()){h.splice(t,1);break}},e.prototype.destroy=function(){this.disableAutoUpdate(),this.resetContent(),this.C(),delete this.i.clampify},t.addEventListener("resize",function(){clearTimeout(s),s=setTimeout(function(){for(var t=0,i=h.length;t<i;t++)h[t].truncate()},n)}),t.Clampify=e,t.$clampify=function $clampify(t,i){return new e(t,i).truncate(),t},void 0!==t.jQuery){var o=t.jQuery,f=["getId","resetContent","truncate","destroy","enableAutoUpdate","disableAutoUpdate","setMaxLines","getMaxLines"];o.fn.clampify=function(t){var i=Array.prototype.slice.apply(arguments);return i.shift(),o(this).each(function(){if("string"==typeof t){if(f.indexOf(t)>-1&&this.clampify instanceof e)return"function"==typeof this.clampify[t]&&this.clampify[t].apply(this.clampify,i),o(this);t={}}return this.clampify instanceof e&&this.clampify.destroy(),$clampify(this,t)})}}}(window);