var CMTV_Code=window.CMTV_Code||{}; (function(e){CMTV_Code.CodeBlock=XF.Element.newHandler({$expand:null,$collapse:null,$codeContainer:null,$pre:null,$code:null,eCodeBlockH:null,resizerH:null,resizeButtons:{},maxHeight:null,minHeight:null,init:function(){this.$expand=this.$target.find(".action--expand");this.$collapse=this.$target.find(".action--collapse");this.$codeContainer=this.$target.find(".bbCodeBlock-content");this.$pre=this.$target.find("pre");this.$code=this.$target.find("code");this.eCodeBlockH=XF.Element.getHandler(this.$pre, "CMTV-code-block-extend");this.resizerH=XF.Element.getHandler(this.$target.find('[data-xf-init="CMTV-code-block-resizer"]'),"CMTV-code-block-resizer");this.resizeButtons={$expand:this.$target.find(".action--expand"),$collapse:this.$target.find(".action--collapse")};this.registerVisibleCatcher()},skipInit:!1,visibleInit:function(){if(!(0>=this.$target.height()||this.skipInit)){this.eCodeBlockH.init();if(this.getHeight(this.$pre)>this.getHeight(this.$codeContainer)){var a=this.getWidth(this.$code)> this.getWidth(this.$pre)?15:0;this.maxHeight=this.getHeight(this.$pre)+this.getPadding(this.$codeContainer).vertical+a;this.minHeight=this.getHeight(this.$codeContainer,!0);this.$codeContainer.css({height:this.getHeight(this.$codeContainer,!0)+"px","min-height":this.minHeight+"px","max-height":this.maxHeight+"px"});this.resizeButtons.$expand.removeClass("action--hidden");this.resizerH.visibleInit()}this.skipInit=!0}},registerVisibleCatcher:function(){var a=null;this.$target.parents().each(function(){e(this).is(":hidden")&& (a=this)});a?(new MutationObserver(XF.proxy(this,"visibleInit"))).observe(a,{attributes:!0}):this.visibleInit()},getHeight:function(a,b){return(void 0===b?0:b)?a.innerHeight():a.height()},getWidth:function(a,b){return(void 0===b?0:b)?a.innerWidth():a.width()},getPadding:function(a){var b=this.getHeight(a,!0)-this.getHeight(a);a=this.getWidth(a,!0)-this.getWidth(a);return{vertical:b,horizontal:a}}});CMTV_Code.CodeBlockExtend=XF.extend(XF.CodeBlock,{__backup:{init:"_init"},init:function(){this._init(); Prism.highlightElement(this.$target.find("code")[0]);var a=this.$target.width(),b=this.$target.find("code").width(),c=this.$target.find(".line-highlight"),d=b+this.$target.innerWidth()-a;c.css("min-width",d);b>a&&c.width(d)}});XF.Element.register("CMTV-code-block","CMTV_Code.CodeBlock");XF.Element.register("CMTV-code-block-extend","CMTV_Code.CodeBlockExtend")})(jQuery);