vendor: 11,960 bytes, lines 1-6
1/*! 2 Colorbox 1.6.4 3 license: MIT 4 http://www.jacklmoore.com/colorbox 5*/ 6(function(t,e,i){function n(i,n,o){var r=e.createElement(i);return n&&(r.id=Z+n),o&&(r.style.cssText=o),t(r)}function o(){return i.innerHeight?i.innerHeight:t(i).height()}function r(e,i){i!==Object(i)&&(i={}),this.cache={},this.el=e,this.value=function(e){var n;return void 0===this.cache[e]&&(n=t(this.el).attr("data-cbox-"+e),void 0!==n?this.cache[e]=n:void 0!==i[e]?this.cache[e]=i[e]:void 0!==X[e]&&(this.cache[e]=X[e])),this.cache[e]},this.get=function(e){var i=this.value(e);return t.isFunction(i)?i.call(this.el,this):i}}function h(t){var e=W.length,i=(A+t)%e;return 0>i?e+i:i}function a(t,e){return Math.round((/%/.test(t)?("x"===e?E.width():o())/100:1)*parseInt(t,10))}function s(t,e){return t.get("photo")||t.get("photoRegex").test(e)}function l(t,e){return t.get("retinaUrl")&&i.devicePixelRatio>1?e.replace(t.get("photoRegex"),t.get("retinaSuffix")):e}function d(t){"contains"in x[0]&&!x[0].contains(t.target)&&t.target!==v[0]&&(t.stopPropagation(),x.focus())}function c(t){c.str!==t&&(x.add(v).removeClass(c.str).addClass(t),c.str=t)}function g(e){A=0,e&&e!==!1&&"nofollow"!==e?(W=t("."+te).filter(function(){var i=t.data(this,Y),n=new r(this,i);return n.get("rel")===e}),A=W.index(_.el),-1===A&&(W=W.add(_.el),A=W.length-1)):W=t(_.el)}function u(i){t(e).trigger(i),ae.triggerHandler(i)}function f(i){var o;if(!G){if(o=t(i).data(Y),_=new r(i,o),g(_.get("rel")),!U){U=$=!0,c(_.get("className")),x.css({visibility:"hidden",display:"block",opacity:""}),I=n(se,"LoadedContent","width:0; height:0; overflow:hidden; visibility:hidden"),b.css({width:"",height:""}).append(I),j=T.height()+k.height()+b.outerHeight(!0)-b.height(),D=C.width()+H.width()+b.outerWidth(!0)-b.width(),N=I.outerHeight(!0),z=I.outerWidth(!0);var h=a(_.get("initialWidth"),"x"),s=a(_.get("initialHeight"),"y"),l=_.get("maxWidth"),f=_.get("maxHeight");_.w=Math.max((l!==!1?Math.min(h,a(l,"x")):h)-z-D,0),_.h=Math.max((f!==!1?Math.min(s,a(f,"y")):s)-N-j,0),I.css({width:"",height:_.h}),J.position(),u(ee),_.get("onOpen"),O.add(F).hide(),x.focus(),_.get("trapFocus")&&e.addEventListener&&(e.addEventListener("focus",d,!0),ae.one(re,function(){e.removeEventListener("focus",d,!0)})),_.get("returnFocus")&&ae.one(re,function(){t(_.el).focus()})}var p=parseFloat(_.get("opacity"));v.css({opacity:p===p?p:"",cursor:_.get("overlayClose")?"pointer":"",visibility:"visible"}).show(),_.get("closeButton")?B.html(_.get("close")).appendTo(b):B.appendTo("<div/>"),w()}}function p(){x||(V=!1,E=t(i),x=n(se).attr({id:Y,"class":t.support.opacity===!1?Z+"IE":"",role:"dialog",tabindex:"-1"}).hide(),v=n(se,"Overlay").hide(),L=t([n(se,"LoadingOverlay")[0],n(se,"LoadingGraphic")[0]]),y=n(se,"Wrapper"),b=n(se,"Content").append(F=n(se,"Title"),R=n(se,"Current"),P=t('<button type="button"/>').attr({id:Z+"Previous"}),K=t('<button type="button"/>').attr({id:Z+"Next"}),S=t('<button type="button"/>').attr({id:Z+"Slideshow"}),L),B=t('<button type="button"/>').attr({id:Z+"Close"}),y.append(n(se).append(n(se,"TopLeft"),T=n(se,"TopCenter"),n(se,"TopRight")),n(se,!1,"clear:left").append(C=n(se,"MiddleLeft"),b,H=n(se,"MiddleRight")),n(se,!1,"clear:left").append(n(se,"BottomLeft"),k=n(se,"BottomCenter"),n(se,"BottomRight"))).find("div div").css({"float":"left"}),M=n(se,!1,"position:absolute; width:9999px; visibility:hidden; display:none; max-width:none;"),O=K.add(P).add(R).add(S)),e.body&&!x.parent().length&&t(e.body).append(v,x.append(y,M))}function m(){function i(t){t.which>1||t.shiftKey||t.altKey||t.metaKey||t.ctrlKey||(t.preventDefault(),f(this))}return x?(V||(V=!0,K.click(function(){J.next()}),P.click(function(){J.prev()}),B.click(function(){J.close()}),v.click(function(){_.get("overlayClose")&&J.close()}),t(e).bind("keydown."+Z,function(t){var e=t.keyCode;U&&_.get("escKey")&&27===e&&(t.preventDefault(),J.close()),U&&_.get("arrowKey")&&W[1]&&!t.altKey&&(37===e?(t.preventDefault(),P.click()):39===e&&(t.preventDefault(),K.click()))}),t.isFunction(t.fn.on)?t(e).on("click."+Z,"."+te,i):t("."+te).live("click."+Z,i)),!0):!1}function w(){var e,o,r,h=J.prep,d=++le;if($=!0,q=!1,u(he),u(ie),_.get("onLoad"),_.h=_.get("height")?a(_.get("height"),"y")-N-j:_.get("innerHeight")&&a(_.get("innerHeight"),"y"),_.w=_.get("width")?a(_.get("width"),"x")-z-D:_.get("innerWidth")&&a(_.get("innerWidth"),"x"),_.mw=_.w,_.mh=_.h,_.get("maxWidth")&&(_.mw=a(_.get("maxWidth"),"x")-z-D,_.mw=_.w&&_.w<_.mw?_.w:_.mw),_.get("maxHeight")&&(_.mh=a(_.get("maxHeight"),"y")-N-j,_.mh=_.h&&_.h<_.mh?_.h:_.mh),e=_.get("href"),Q=setTimeout(function(){L.show()},100),_.get("inline")){var c=t(e).eq(0);r=t("<div>").hide().insertBefore(c),ae.one(he,function(){r.replaceWith(c)}),h(c)}else _.get("iframe")?h(" "):_.get("html")?h(_.get("html")):s(_,e)?(e=l(_,e),q=_.get("createImg"),t(q).addClass(Z+"Photo").bind("error."+Z,function(){h(n(se,"Error").html(_.get("imgError")))}).one("load",function(){d===le&&setTimeout(function(){var e;_.get("retinaImage")&&i.devicePixelRatio>1&&(q.height=q.height/i.devicePixelRatio,q.width=q.width/i.devicePixelRatio),_.get("scalePhotos")&&(o=function(){q.height-=q.height*e,q.width-=q.width*e},_.mw&&q.width>_.mw&&(e=(q.width-_.mw)/q.width,o()),_.mh&&q.height>_.mh&&(e=(q.height-_.mh)/q.height,o())),_.h&&(q.style.marginTop=Math.max(_.mh-q.height,0)/2+"px"),W[1]&&(_.get("loop")||W[A+1])&&(q.style.cursor="pointer",t(q).bind("click."+Z,function(){J.next()})),q.style.width=q.width+"px",q.style.height=q.height+"px",h(q)},1)}),q.src=e):e&&M.load(e,_.get("data"),function(e,i){d===le&&h("error"===i?n(se,"Error").html(_.get("xhrError")):t(this).contents())})}var v,x,y,b,T,C,H,k,W,E,I,M,L,F,R,S,K,P,B,O,_,j,D,N,z,A,q,U,$,G,Q,J,V,X={html:!1,photo:!1,iframe:!1,inline:!1,transition:"elastic",speed:300,fadeOut:300,width:!1,initialWidth:"600",innerWidth:!1,maxWidth:!1,height:!1,initialHeight:"450",innerHeight:!1,maxHeight:!1,scalePhotos:!0,scrolling:!0,opacity:.9,preloading:!0,className:!1,overlayClose:!0,escKey:!0,arrowKey:!0,top:!1,bottom:!1,left:!1,right:!1,fixed:!1,data:void 0,closeButton:!0,fastIframe:!0,open:!1,reposition:!0,loop:!0,slideshow:!1,slideshowAuto:!0,slideshowSpeed:2500,slideshowStart:"start slideshow",slideshowStop:"stop slideshow",photoRegex:/\.(gif|png|jp(e|g|eg)|bmp|ico|webp|jxr|svg)((#|\?).*)?$/i,retinaImage:!1,retinaUrl:!1,retinaSuffix:"@2x.$1",current:"image {current} of {total}",previous:"previous",next:"next",close:"close",xhrError:"This content failed to load.",imgError:"This image failed to load.",returnFocus:!0,trapFocus:!0,onOpen:!1,onLoad:!1,onComplete:!1,onCleanup:!1,onClosed:!1,rel:function(){return this.rel},href:function(){return t(this).attr("href")},title:function(){return this.title},createImg:function(){var e=new Image,i=t(this).data("cbox-img-attrs");return"object"==typeof i&&t.each(i,function(t,i){e[t]=i}),e},createIframe:function(){var i=e.createElement("iframe"),n=t(this).data("cbox-iframe-attrs");return"object"==typeof n&&t.each(n,function(t,e){i[t]=e}),"frameBorder"in i&&(i.frameBorder=0),"allowTransparency"in i&&(i.allowTransparency="true"),i.name=(new Date).getTime(),i.allowFullscreen=!0,i}},Y="colorbox",Z="cbox",te=Z+"Element",ee=Z+"_open",ie=Z+"_load",ne=Z+"_complete",oe=Z+"_cleanup",re=Z+"_closed",he=Z+"_purge",ae=t("<a/>"),se="div",le=0,de={},ce=function(){function t(){clearTimeout(h)}function e(){(_.get("loop")||W[A+1])&&(t(),h=setTimeout(J.next,_.get("slideshowSpeed")))}function i(){S.html(_.get("slideshowStop")).unbind(s).one(s,n),ae.bind(ne,e).bind(ie,t),x.removeClass(a+"off").addClass(a+"on")}function n(){t(),ae.unbind(ne,e).unbind(ie,t),S.html(_.get("slideshowStart")).unbind(s).one(s,function(){J.next(),i()}),x.removeClass(a+"on").addClass(a+"off")}function o(){r=!1,S.hide(),t(),ae.unbind(ne,e).unbind(ie,t),x.removeClass(a+"off "+a+"on")}var r,h,a=Z+"Slideshow_",s="click."+Z;return function(){r?_.get("slideshow")||(ae.unbind(oe,o),o()):_.get("slideshow")&&W[1]&&(r=!0,ae.one(oe,o),_.get("slideshowAuto")?i():n(),S.show())}}();t[Y]||(t(p),J=t.fn[Y]=t[Y]=function(e,i){var n,o=this;return e=e||{},t.isFunction(o)&&(o=t("<a/>"),e.open=!0),o[0]?(p(),m()&&(i&&(e.onComplete=i),o.each(function(){var i=t.data(this,Y)||{};t.data(this,Y,t.extend(i,e))}).addClass(te),n=new r(o[0],e),n.get("open")&&f(o[0])),o):o},J.position=function(e,i){function n(){T[0].style.width=k[0].style.width=b[0].style.width=parseInt(x[0].style.width,10)-D+"px",b[0].style.height=C[0].style.height=H[0].style.height=parseInt(x[0].style.height,10)-j+"px"}var r,h,s,l=0,d=0,c=x.offset();if(E.unbind("resize."+Z),x.css({top:-9e4,left:-9e4}),h=E.scrollTop(),s=E.scrollLeft(),_.get("fixed")?(c.top-=h,c.left-=s,x.css({position:"fixed"})):(l=h,d=s,x.css({position:"absolute"})),d+=_.get("right")!==!1?Math.max(E.width()-_.w-z-D-a(_.get("right"),"x"),0):_.get("left")!==!1?a(_.get("left"),"x"):Math.round(Math.max(E.width()-_.w-z-D,0)/2),l+=_.get("bottom")!==!1?Math.max(o()-_.h-N-j-a(_.get("bottom"),"y"),0):_.get("top")!==!1?a(_.get("top"),"y"):Math.round(Math.max(o()-_.h-N-j,0)/2),x.css({top:c.top,left:c.left,visibility:"visible"}),y[0].style.width=y[0].style.height="9999px",r={width:_.w+z+D,height:_.h+N+j,top:l,left:d},e){var g=0;t.each(r,function(t){return r[t]!==de[t]?(g=e,void 0):void 0}),e=g}de=r,e||x.css(r),x.dequeue().animate(r,{duration:e||0,complete:function(){n(),$=!1,y[0].style.width=_.w+z+D+"px",y[0].style.height=_.h+N+j+"px",_.get("reposition")&&setTimeout(function(){E.bind("resize."+Z,J.position)},1),t.isFunction(i)&&i()},step:n})},J.resize=function(t){var e;U&&(t=t||{},t.width&&(_.w=a(t.width,"x")-z-D),t.innerWidth&&(_.w=a(t.innerWidth,"x")),I.css({width:_.w}),t.height&&(_.h=a(t.height,"y")-N-j),t.innerHeight&&(_.h=a(t.innerHeight,"y")),t.innerHeight||t.height||(e=I.scrollTop(),I.css({height:"auto"}),_.h=I.height()),I.css({height:_.h}),e&&I.scrollTop(e),J.position("none"===_.get("transition")?0:_.get("speed")))},J.prep=function(i){function o(){return _.w=_.w||I.width(),_.w=_.mw&&_.mw<_.w?_.mw:_.w,_.w}function a(){return _.h=_.h||I.height(),_.h=_.mh&&_.mh<_.h?_.mh:_.h,_.h}if(U){var d,g="none"===_.get("transition")?0:_.get("speed");I.remove(),I=n(se,"LoadedContent").append(i),I.hide().appendTo(M.show()).css({width:o(),overflow:_.get("scrolling")?"auto":"hidden"}).css({height:a()}).prependTo(b),M.hide(),t(q).css({"float":"none"}),c(_.get("className")),d=function(){function i(){t.support.opacity===!1&&x[0].style.removeAttribute("filter")}var n,o,a=W.length;U&&(o=function(){clearTimeout(Q),L.hide(),u(ne),_.get("onComplete")},F.html(_.get("title")).show(),I.show(),a>1?("string"==typeof _.get("current")&&R.html(_.get("current").replace("{current}",A+1).replace("{total}",a)).show(),K[_.get("loop")||a-1>A?"show":"hide"]().html(_.get("next")),P[_.get("loop")||A?"show":"hide"]().html(_.get("previous")),ce(),_.get("preloading")&&t.each([h(-1),h(1)],function(){var i,n=W[this],o=new r(n,t.data(n,Y)),h=o.get("href");h&&s(o,h)&&(h=l(o,h),i=e.createElement("img"),i.src=h)})):O.hide(),_.get("iframe")?(n=_.get("createIframe"),_.get("scrolling")||(n.scrolling="no"),t(n).attr({src:_.get("href"),"class":Z+"Iframe"}).one("load",o).appendTo(I),ae.one(he,function(){n.src="//about:blank"}),_.get("fastIframe")&&t(n).trigger("load")):o(),"fade"===_.get("transition")?x.fadeTo(g,1,i):i())},"fade"===_.get("transition")?x.fadeTo(g,0,function(){J.position(0,d)}):J.position(g,d)}},J.next=function(){!$&&W[1]&&(_.get("loop")||W[A+1])&&(A=h(1),f(W[A]))},J.prev=function(){!$&&W[1]&&(_.get("loop")||A)&&(A=h(-1),f(W[A]))},J.close=function(){U&&!G&&(G=!0,U=!1,u(oe),_.get("onCleanup"),E.unbind("."+Z),v.fadeTo(_.get("fadeOut")||0,0),x.stop().fadeTo(_.get("fadeOut")||0,0,function(){x.hide(),v.hide(),u(he),I.remove(),setTimeout(function(){G=!1,u(re),_.get("onClosed")},1)}))},J.remove=function(){x&&(x.stop(),t[Y].close(),x.stop(!1,!0).remove(),v.remove(),G=!1,x=null,t("."+te).removeData(Y).removeClass(te),t(e).unbind("click."+Z).unbind("keydown."+Z))},J.element=function(){return t(_.el)},J.settings=X)})(jQuery,document,window);
6; 7/** 8 * @file 9 * Colorbox module init js. 10 */ 11 12(function ($) { 13 14Drupal.behaviors.initColorbox = { 15 attach: function (context, settings) { 16 if (!$.isFunction($.colorbox) || typeof settings.colorbox === 'undefined') { 17 return; 18 } 19 20 if (settings.colorbox.mobiledetect && window.matchMedia) { 21 // Disable Colorbox for small screens. 22 var mq = window.matchMedia("(max-device-width: " + settings.colorbox.mobiledevicewidth + ")"); 23 if (mq.matches) { 24 return; 25 } 26 } 27 28 // Use "data-colorbox-gallery" if set otherwise use "rel". 29 settings.colorbox.rel = function () { 30 if ($(this).data('colorbox-gallery')) { 31 return $(this).data('colorbox-gallery'); 32 } 33 else { 34 return $(this).attr('rel'); 35 } 36 }; 37 38 $('.colorbox', context) 39 .once('init-colorbox') 40 .colorbox(settings.colorbox); 41 42 $(context).bind('cbox_complete', function () { 43 Drupal.attachBehaviors('#cboxLoadedContent'); 44 }); 45 } 46}; 47 48})(jQuery); 49; 50/** 51 * @file 52 * Colorbox module style js. 53 */ 54 55(function ($) { 56 57Drupal.behaviors.initColorboxDefaultStyle = { 58 attach: function (context, settings) { 59 $(context).bind('cbox_complete', function () { 60 // Only run if there is a title. 61 if ($('#cboxTitle:empty', context).length == false) { 62 $('#cboxLoadedContent img', context).bind('mouseover', function () { 63 $('#cboxTitle', context).slideDown(); 64 }); 65 $('#cboxOverlay', context).bind('mouseover', function () { 66 $('#cboxTitle', context).slideUp(); 67 }); 68 } 69 else { 70 $('#cboxTitle', context).hide(); 71 } 72 }); 73 } 74}; 75 76})(jQuery); 77; 78(function($) { 79 Drupal.behaviors.custom_search = { 80 attach: function(context) { 81 82 if (!Drupal.settings.custom_search.solr) { 83 // Check if the search box is not empty on submit 84 $('form.search-form', context).submit(function(){ 85 var $this = $(this); 86 var box = $this.find('input.custom-search-box'); 87 if (box.val() != undefined && box.val() == '') { 88 $this.find('input.custom-search-box').addClass('error'); 89 return false; 90 } 91 // If basic search is hidden, copy or value to the keys 92 if ($this.find('#edit-keys').parents('div.element-invisible').attr('class') == 'element-invisible') { 93 $this.find('#edit-keys').val($this.find('#edit-or').val()); 94 $this.find('#edit-or').val(''); 95 } 96 return true; 97 }); 98 } 99 100 // Search from target 101 $('form.search-form').attr('target', Drupal.settings.custom_search.form_target); 102 103 // Displays Popup. 104 $('form.search-form input.custom-search-box', context).bind('click focus', function(e){ 105 var $parentForm = $(this).parents('form'); 106 // check if there's something in the popup and displays it 107 var popup = $parentForm.find('fieldset.custom_search-popup'); 108 if (popup.find('input,select').length && !popup.hasClass('opened')) { 109 popup.fadeIn().addClass('opened'); 110 } 111 e.stopPropagation(); 112 }); 113 $(document).bind('click focus', function(){ 114 $('fieldset.custom_search-popup').hide().removeClass('opened'); 115 }); 116 117 // Handle checkboxes 118 $('.custom-search-selector input:checkbox', context).each(function(){ 119 var el = $(this); 120 if (el.val() == 'c-all') { 121 el.change(function(){ 122 $(this).parents('.custom-search-selector').find('input:checkbox[value!=c-all]').attr('checked', false); 123 }); 124 } 125 else { 126 if (el.val().substr(0,2) == 'c-') { 127 el.change(function(){ 128 $('.custom-search-selector input:checkbox').each(function(){ 129 if ($(this).val().substr(0,2) == 'o-') { 130 $(this).attr('checked', false); 131 } 132 }); 133 $(this).parents('.custom-search-selector').find('input:checkbox[value=c-all]').attr('checked', false); 134 }); 135 } else { 136 el.change(function(){ 137 $(this).parents('.custom-search-selector').find('input
137:checkbox[value!=' + el.val() + ']').attr('checked', false); 138 }); 139 } 140 } 141 }); 142 143 // Handle popup. 144 var popup = $('fieldset.custom_search-popup:not(.custom_search-processed)', context).addClass("custom_search-processed"); 145 popup.click(function(e){ 146 e.stopPropagation(); 147 }) 148 popup.append('<a class="custom_search-popup-close" href="#">' + Drupal.t('Close') + '</a>'); 149 $('a.custom_search-popup-close').click(function(e){ 150 $('fieldset.custom_search-popup.opened').hide().removeClass('opened'); 151 e.preventDefault(); 152 }); 153 154 } 155 } 156})(jQuery); 157; 158Drupal.TBMegaMenu = Drupal.TBMegaMenu || {}; 159 160(function ($) { 161 Drupal.TBMegaMenu.oldWindowWidth = 0; 162 Drupal.TBMegaMenu.displayedMenuMobile = false; 163 Drupal.TBMegaMenu.supportedScreens = [980]; 164 Drupal.TBMegaMenu.menuResponsive = function () { 165 var windowWidth = window.innerWidth ? window.innerWidth : $(window).width(); 166 var navCollapse = $('.tb-megamenu').children('.nav-collapse'); 167 if (windowWidth < Drupal.TBMegaMenu.supportedScreens[0]) { 168 navCollapse.addClass('collapse'); 169 if (Drupal.TBMegaMenu.displayedMenuMobile) { 170 navCollapse.css({height: 'auto', overflow: 'visible'}); 171 } else { 172 navCollapse.css({height: 0, overflow: 'hidden'}); 173 } 174 } else { 175 // If width of window is greater than 980 (supported screen). 176 navCollapse.removeClass('collapse'); 177 if (navCollapse.height() <= 0) { 178 navCollapse.css({height: 'auto', overflow: 'visible'}); 179 } 180 } 181 }; 182 183 Drupal.behaviors.tbMegaMenuAction = { 184 attach: function(context) { 185 $('.tb-megamenu-button', context).once('menuIstance', function () { 186 var This = this; 187 $(This).click(function() { 188 if(parseInt($(this).parent().children('.nav-collapse').height())) { 189 $(this).parent().children('.nav-collapse').css({height: 0, overflow: 'hidden'}); 190 Drupal.TBMegaMenu.displayedMenuMobile = false; 191 } 192 else { 193 $(this).parent().children('.nav-collapse').css({height: 'auto', overflow: 'visible'}); 194 Drupal.TBMegaMenu.displayedMenuMobile = true; 195 } 196 }); 197 }); 198 199 200 var isTouch = 'ontouchstart' in window && !(/hp-tablet/gi).test(navigator.appVersion); 201 if(!isTouch){ 202 $(document).ready(function($){ 203 var mm_duration = 0; 204 $('.tb-megamenu').each (function(){ 205 if ($(this).data('duration')) { 206 mm_duration = $(this).data('duration'); 207 } 208 }); 209 var mm_timeout = mm_duration ? 100 + mm_duration : 500; 210 $('.nav > li, li.mega').hover(function(event) { 211 var $this = $(this); 212 if ($this.hasClass ('mega')) { 213 $this.addClass ('animating'); 214 clearTimeout ($this.data('animatingTimeout')); 215 $this.data('animatingTimeout', setTimeout(function(){$this.removeClass ('animating')}, mm_timeout)); 216 clearTimeout ($this.data('hoverTimeout')); 217 $this.data('hoverTimeout', setTimeout(function(){$this.addClass ('open')}, 100)); 218 } else { 219 clearTimeout ($this.data('hoverTimeout')); 220 $this.data('hoverTimeout', 221 setTimeout(function(){$this.addClass ('open')}, 100)); 222 } 223 }, 224 function(event) { 225 var $this = $(this); 226 if ($this.hasClass ('mega')) { 227 $this.addClass ('animating'); 228 clearTimeout ($this.data('animatingTimeout')); 229 $this.data('animatingTimeout', 230 setTimeout(function(){$this.removeClass ('animating')}, mm_timeout)); 231 clearTimeout ($this.data('hoverTimeout')); 232 $this.data('hoverTimeout', setTimeout(function(){$this.removeClass ('open')}, 100)); 233 } else { 234 clearTimeout ($this.data('hoverTimeout')); 235 $this.data('hoverTimeout', 236 setTimeout(function(){$this.removeClass ('open')}, 100)); 237 } 238 }); 239 }); 240 } 241 242 $(window).resize(function() { 243 var windowWidth = window.innerWidth ? window.innerWidth : $(window).width(); 244 if(windowWidth != Drupal.TBMegaMenu.oldWindowWidth){ 245 Drupal.TBMegaMenu.oldWindowWidth = windowWidth; 246 Drupal.TBMegaMenu.menuResponsive(); 247 } 248 }); 249 }, 250 } 251})(jQuery); 252 253; 254Drupal.TBMegaMenu = Drupal.TBMegaMenu || {}; 255 256(function ($) { 257 Drupal.TBMegaMenu.createTouchMenu = function(items) { 258 items.children('a').each( function() { 259 var $item = $(this); 260 var tbitem = $(this).parent(); 261 $item.click( function(event){ 262 if ($item.hasClass('tb-megamenu-clicked')) { 263 var $uri = $item.attr('href'); 264 window.location.href = $uri; 265 } 266 else { 267 event.preventDefault(); 268 $item.addClass('tb-megamenu-clicked'); 269 if(!tbitem.hasClass('open')){ 270 tbitem.addClass('open'); 271 } 272 } 273 }).closest('li').mouseleave( function(){ 274 $item.removeClass('tb-megamenu-clicked'); 275 tbitem.removeClass('open'); 276 }); 277 }); 278 /* 279 items.children('a').children('span.caret').each( function() { 280 var $item = $(this).parent(); 281 $item.click(function(event){ 282 tbitem = $item.parent(); 283 if ($item.hasClass('tb-megamenu-clicked')) { 284 Drupal.TBMegaMenu.eventStopPropagation(event); 285 if(tbitem.hasClass('open')){ 286 tbitem.removeClass('open'); 287 $item.removeClass('tb-megamenu-clicked'); 288 } 289 } 290 else { 291 Drupal.TBMegaMenu.eventStopPropagation(event); 292 $item.addClass('tb-megamenu-clicked'); 293 if(!tbitem.hasClass('open')){ 294 tbitem.addClass('open'); 295 $item.removeClass('tb-megamenu-clicked'); 296 } 297 } 298 }); 299 }); 300 */ 301 } 302 303 Drupal.TBMegaMenu.eventStopPropagation = function(event) { 304 if (event.stopPropagation) { 305 event.stopPropagation(); 306 } 307 else if (window.event) { 308 window.event.cancelBubble = true; 309 } 310 } 311 Drupal.behaviors.tbMegaMenuTouchAction = { 312 attach: function(context) { 313 var isTouch = 'ontouchstart' in window && !(/hp-tablet/gi).test(navigator.appVersion); 314 if(isTouch){ 315 $('html').addClass('touch'); 316 Drupal.TBMegaMenu.createTouchMenu($('.tb-megamenu ul.nav li.mega').has('.dropdown-menu')); 317 } 318 } 319 } 320})(jQuery); 321; 322(function ($) { 323 324 Drupal.behaviors.captcha = { 325 attach: function (context) { 326 327 // Turn off autocompletion for the CAPTCHA response field. 328 // We do it here with JavaScript (instead of directly in the markup) 329 // because this autocomplete attribute is not standard and 330 // it would break (X)HTML compliance. 331 $("#edit-captcha-response").attr("autocomplete", "off"); 332 333 } 334 }; 335 336 Drupal.behaviors.captchaAdmin = { 337 attach: function (context) {
338 // Add onclick handler to checkbox for adding a CAPTCHA description 339 // so that the textfields for the CAPTCHA description are hidden 340 // when no description should be added. 341 // @todo: div.form-item-captcha-description depends on theming, maybe 342 // it's better to add our own wrapper with id (instead of a class). 343 $("#edit-captcha-add-captcha-description").click(function() { 344 if ($("#edit-captcha-add-captcha-description").is(":checked")) { 345 // Show the CAPTCHA description textfield(s). 346 $("div.form-item-captcha-description").show('slow'); 347 } 348 else { 349 // Hide the CAPTCHA description textfield(s). 350 $("div.form-item-captcha-description").hide('slow'); 351 } 352 }); 353 // Hide the CAPTCHA description textfields if option is disabled on page load. 354 if (!$("#edit-captcha-add-captcha-description").is(":checked")) { 355 $("div.form-item-captcha-description").hide(); 356 } 357 } 358 359 }; 360 361})(jQuery); 362; 363/** 364 * @file 365 * Some basic behaviors and utility functions for Views. 366 */ 367(function ($) { 368 369 Drupal.Views = {}; 370 371 /** 372 * JQuery UI tabs, Views integration component. 373 */ 374 Drupal.behaviors.viewsTabs = { 375 attach: function (context) { 376 if ($.viewsUi && $.viewsUi.tabs) { 377 $('#views-tabset').once('views-processed').viewsTabs({ 378 selectedClass: 'active' 379 }); 380 } 381 382 $('a.views-remove-link').once('views-processed').click(function(event) { 383 var id = $(this).attr('id').replace('views-remove-link-', ''); 384 $('#views-row-' + id).hide(); 385 $('#views-removed-' + id).attr('checked', true); 386 event.preventDefault(); 387 }); 388 /** 389 * Here is to handle display deletion 390 * (checking in the hidden checkbox and hiding out the row). 391 */ 392 $('a.display-remove-link') 393 .addClass('display-processed') 394 .click(function() { 395 var id = $(this).attr('id').replace('display-remove-link-', ''); 396 $('#display-row-' + id).hide(); 397 $('#display-removed-' + id).attr('checked', true); 398 return false; 399 }); 400 } 401 }; 402 403 /** 404 * Helper function to parse a querystring. 405 */ 406 Drupal.Views.parseQueryString = function (query) { 407 var args = {}; 408 var pos = query.indexOf('?'); 409 if (pos != -1) { 410 query = query.substring(pos + 1); 411 } 412 var pairs = query.split('&'); 413 for (var i in pairs) { 414 if (typeof(pairs[i]) == 'string') { 415 var pair = pairs[i].split('='); 416 // Ignore the 'q' path argument, if present. 417 if (pair[0] != 'q' && pair[1]) { 418 args[decodeURIComponent(pair[0].replace(/\+/g, ' '))] = decodeURIComponent(pair[1].replace(/\+/g, ' ')); 419 } 420 } 421 } 422 return args; 423 }; 424 425 /** 426 * Helper function to return a view's arguments based on a path. 427 */ 428 Drupal.Views.parseViewArgs = function (href, viewPath) { 429 430 // Provide language prefix. 431 if (Drupal.settings.pathPrefix) { 432 var viewPath = Drupal.settings.pathPrefix + viewPath; 433 } 434 var returnObj = {}; 435 var path = Drupal.Views.getPath(href); 436 // Ensure we have a correct path. 437 if (viewPath && path.substring(0, viewPath.length + 1) == viewPath + '/') { 438 var args = decodeURIComponent(path.substring(viewPath.length + 1, path.length)); 439 returnObj.view_args = args; 440 returnObj.view_path = path; 441 } 442 return returnObj; 443 }; 444 445 /** 446 * Strip off the protocol plus domain from an href. 447 */ 448 Drupal.Views.pathPortion = function (href) { 449 // Remove e.g. http://example.com if present. 450 var protocol = window.location.protocol; 451 if (href.substring(0, protocol.length) == protocol) { 452 // 2 is the length of the '//' that normally follows the protocol. 453 href = href.substring(href.indexOf('/', protocol.length + 2)); 454 } 455 return href; 456 }; 457 458 /** 459 * Return the Drupal path portion of an href. 460 */ 461 Drupal.Views.getPath = function (href) { 462 href = Drupal.Views.pathPortion(href); 463 href = href.substring(Drupal.settings.basePath.length, href.length); 464 // 3 is the length of the '?q=' added to the url without clean urls. 465 if (href.substring(0, 3) == '?q=') { 466 href = href.substring(3, href.length); 467 } 468 var chars = ['#', '?', '&']; 469 for (var i in chars) { 470 if (href.indexOf(chars[i]) > -1) { 471 href = href.substr(0, href.indexOf(chars[i])); 472 } 473 } 474 return href; 475 }; 476 477})(jQuery); 478; 479(function ($) { 480 481/** 482 * A progressbar object. Initialized with the given id. Must be inserted into 483 * the DOM afterwards through progressBar.element. 484 * 485 * method is the function which will perform the HTTP request to get the 486 * progress bar state. Either "GET" or "POST". 487 * 488 * e.g. pb = new progressBar('myProgressBar'); 489 * some_element.appendChild(pb.element); 490 */ 491Drupal.progressBar = function (id, updateCallback, method, errorCallback) { 492 var pb = this; 493 this.id = id; 494 this.method = method || 'GET'; 495 this.updateCallback = updateCallback; 496 this.errorCallback = errorCallback; 497
498 // The WAI-ARIA setting aria-live="polite" will announce changes after users 499 // have completed their current activity and not interrupt the screen reader. 500 this.element = $('<div class="progress-wrapper" aria-live="polite"></div>'); 501 this.element.html('<div id ="' + id + '" class="progress progress-striped active">' + 502 '<div class="progress-bar" role="progressbar" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">' + 503 '<div class="percentage sr-only"></div>' + 504 '</div></div>' + 505 '</div><div class="percentage pull-right"></div>' + 506 '<div class="message"> </div>'); 507}; 508 509/** 510 * Set the percentage and status message for the progressbar. 511 */ 512Drupal.progressBar.prototype.setProgress = function (percentage, message) { 513 if (percentage >= 0 && percentage <= 100) { 514 $('div.progress-bar', this.element).css('width', percentage + '%'); 515 $('div.progress-bar', this.element).attr('aria-valuenow', percentage); 516 $('div.percentage', this.element).html(percentage + '%'); 517 } 518 $('div.message', this.element).html(message); 519 if (this.updateCallback) { 520 this.updateCallback(percentage, message, this); 521 } 522}; 523 524/** 525 * Start monitoring progress via Ajax. 526 */ 527Drupal.progressBar.prototype.startMonitoring = function (uri, delay) { 528 this.delay = delay; 529 this.uri = uri; 530 this.sendPing(); 531}; 532 533/** 534 * Stop monitoring progress via Ajax. 535 */ 536Drupal.progressBar.prototype.stopMonitoring = function () { 537 clearTimeout(this.timer); 538 // This allows monitoring to be stopped from within the callback. 539 this.uri = null; 540}; 541 542/** 543 * Request progress data from server. 544 */ 545Drupal.progressBar.prototype.sendPing = function () { 546 if (this.timer) { 547 clearTimeout(this.timer); 548 } 549 if (this.uri) { 550 var pb = this; 551 // When doing a post request, you need non-null data. Otherwise a 552 // HTTP 411 or HTTP 406 (with Apache mod_security) error may result. 553 $.ajax({ 554 type: this.method, 555 url: this.uri, 556 data: '', 557 dataType: 'json', 558 success: function (progress) { 559 // Display errors. 560 if (progress.status == 0) { 561 pb.displayError(progress.data); 562 return; 563 } 564 // Update display. 565 pb.setProgress(progress.percentage, progress.message); 566 // Schedule next timer. 567 pb.timer = setTimeout(function () { pb.sendPing(); }, pb.delay); 568 }, 569 error: function (xmlhttp) { 570 pb.displayError(Drupal.ajaxError(xmlhttp, pb.uri)); 571 } 572 }); 573 } 574}; 575 576/** 577 * Display errors on the page. 578 */ 579Drupal.progressBar.prototype.displayError = function (string) { 580 var error = $('<div class="alert alert-block alert-error"><a class="close" data-dismiss="alert" href="#">×</a><h4>Error message</h4></div>').append(string); 581 $(this.element).before(error).hide(); 582 583 if (this.errorCallback) { 584 this.errorCallback(this); 585 } 586}; 587 588})(jQuery); 589; 590/** 591 * @file 592 * Handles AJAX fetching of views, including filter submission and response. 593 */ 594(function ($) { 595 596 /** 597 * Attaches the AJAX behavior to exposed filter forms and key views links. 598 */ 599 Drupal.behaviors.ViewsAjaxView = {}; 600 Drupal.behaviors.ViewsAjaxView.attach = function() { 601 if (Drupal.settings && Drupal.settings.views && Drupal.settings.views.ajaxViews) { 602 $.each(Drupal.settings.views.ajaxViews, function(i, settings) { 603 Drupal.views.instances[i] = new Drupal.views.ajaxView(settings); 604 }); 605 } 606 }; 607 608 Drupal.views = {}; 609 Drupal.views.instances = {}; 610 611 /** 612 * JavaScript object for a certain view. 613 */ 614 Drupal.views.ajaxView = function(settings) { 615 var selector = '.view-dom-id-' + settings.view_dom_id; 616 this.$view = $(selector); 617 618 // Retrieve the path to use for views' ajax. 619 var ajax_path = Drupal.settings.views.ajax_path; 620 621 // If there are multiple views this might've ended up showing up multiple 622 // times. 623 if (ajax_path.constructor.toString().indexOf("Array") != -1) { 624 ajax_path = ajax_path[0]; 625 } 626 627 // Check if there are any GET parameters to send to views. 628 var queryString = window.location.search || ''; 629 if (queryString !== '') { 630 // Remove the question mark and Drupal path component if any. 631 var queryString = queryString.slice(1).replace(/q=[^&]+&?|&?render=[^&]+/, ''); 632 if (queryString !== '') { 633 // If there is a '?' in ajax_path, clean url are on and & should be 634 // used to add parameters. 635 queryString = ((/\?/.test(ajax_path)) ? '&' : '?') + queryString; 636 } 637 } 638 639 this.element_settings = { 640 url: ajax_path + queryString, 641 submit: settings, 642 setClick: true, 643 event: 'click', 644 selector: selector, 645 progress: { 646 type: 'throbber' 647 } 648 }; 649 650 this.settings = settings; 651
652 // Add the ajax to exposed forms. 653 this.$exposed_form = $('#views-exposed-form-' + settings.view_name.replace(/_/g, '-') + '-' + settings.view_display_id.replace(/_/g, '-')); 654 this.$exposed_form.once(jQuery.proxy(this.attachExposedFormAjax, this)); 655 656 // Store Drupal.ajax objects here for all pager links. 657 this.links = []; 658 659 // Add the ajax to pagers. 660 this.$view 661 .once(jQuery.proxy(this.attachPagerAjax, this)); 662 663 // Add a trigger to update this view specifically. In order to trigger a 664 // refresh use the following code. 665 // 666 // @code 667 // jQuery('.view-name').trigger('RefreshView'); 668 // @endcode 669 // Add a trigger to update this view specifically. 670 var self_settings = this.element_settings; 671 self_settings.event = 'RefreshView'; 672 this.refreshViewAjax = new Drupal.ajax(this.selector, this.$view, self_settings); 673 }; 674 675 Drupal.views.ajaxView.prototype.attachExposedFormAjax = function() { 676 var button = $('input[type=submit], button[type=submit], input[type=image]', this.$exposed_form); 677 button = button[0]; 678 679 // Call the autocomplete submit before doing AJAX. 680 $(button).click(function () { 681 if (Drupal.autocompleteSubmit) { 682 Drupal.autocompleteSubmit(); 683 } 684 }); 685 686 this.exposedFormAjax = new Drupal.ajax($(button).attr('id'), button, this.element_settings); 687 }; 688 689 /** 690 * Attach the ajax behavior to each link. 691 */ 692 Drupal.views.ajaxView.prototype.attachPagerAjax = function() { 693 this.$view.find('ul.pager > li > a, th.views-field a, .attachment .views-summary a') 694 .each(jQuery.proxy(this.attachPagerLinkAjax, this)); 695 }; 696 697 /** 698 * Attach the ajax behavior to a singe link. 699 */ 700 Drupal.views.ajaxView.prototype.attachPagerLinkAjax = function(id, link) { 701 var $link = $(link); 702 // Don't attach to pagers inside nested views. 703 if ($link.closest('.view')[0] !== this.$view[0]) { 704 return; 705 } 706 var viewData = {}; 707 var href = $link.attr('href'); 708 709 // Provide a default page if none has been set. This must be done 710 // prior to merging with settings to avoid accidentally using the 711 // page landed on instead of page 1. 712 if (typeof(viewData.page) === 'undefined') { 713 viewData.page = 0; 714 } 715 716 // Construct an object using the settings defaults and then overriding 717 // with data specific to the link. 718 $.extend( 719 viewData, 720 this.settings, 721 Drupal.Views.parseQueryString(href), 722 // Extract argument data from the URL. 723 Drupal.Views.parseViewArgs(href, this.settings.view_base_path) 724 ); 725 726 // For anchor tags, these will go to the target of the anchor rather 727 // than the usual location. 728 $.extend(viewData, Drupal.Views.parseViewArgs(href, this.settings.view_base_path)); 729 730 this.element_settings.submit = viewData; 731 this.pagerAjax = new Drupal.ajax(false, $link, this.element_settings); 732 this.links.push(this.pagerAjax); 733 }; 734 735 Drupal.ajax.prototype.commands.viewsScrollTop = function (ajax, response, status) { 736 // Scroll to the top of the view. This will allow users 737 // to browse newly loaded content after e.g. clicking a pager 738 // link. 739 var offset = $(response.selector).offset(); 740 // We can't guarantee that the scrollable object should be 741 // the body, as the view could be embedded in something 742 // more complex such as a modal popup. Recurse up the DOM 743 // and scroll the first element that has a non-zero top. 744 var scrollTarget = response.selector; 745 while ($(scrollTarget).scrollTop() == 0 && $(scrollTarget).parent()) { 746 scrollTarget = $(scrollTarget).parent(); 747 } 748 // Only scroll upward. 749 if (offset.top - 10 < $(scrollTarget).scrollTop()) { 750 $(scrollTarget).animate({scrollTop: (offset.top - 10)}, 500); 751 } 752 }; 753 754})(jQuery); 755; 756(function ($) { 757 758Drupal.googleanalytics = {}; 759 760$(document).ready(function() { 761 762 // Attach mousedown, keyup, touchstart events to document only and catch 763 // clicks on all elements. 764 $(document.body).bind("mousedown keyup touchstart", function(event) { 765 766 // Catch the closest surrounding link of a clicked element. 767 $(event.target).closest("a,area").each(function() { 768 769 // Is the clicked URL internal? 770 if (Drupal.googleanalytics.isInternal(this.href)) { 771 // Skip 'click' tracking, if custom tracking events are bound. 772 if ($(this).is('.colorbox') && (Drupal.settings.googleanalytics.trackColorbox)) {
773 // Do nothing here. The custom event will handle all tracking. 774 //console.info("Click on .colorbox item has been detected."); 775 } 776 // Is download tracking activated and the file extension configured for download tracking? 777 else if (Drupal.settings.googleanalytics.trackDownload && Drupal.googleanalytics.isDownload(this.href)) { 778 // Download link clicked. 779 ga("send", { 780 "hitType": "event", 781 "eventCategory": "Downloads", 782 "eventAction": Drupal.googleanalytics.getDownloadExtension(this.href).toUpperCase(), 783 "eventLabel": Drupal.googleanalytics.getPageUrl(this.href), 784 "transport": "beacon" 785 }); 786 } 787 else if (Drupal.googleanalytics.isInternalSpecial(this.href)) { 788 // Keep the internal URL for Google Analytics website overlay intact. 789 ga("send", { 790 "hitType": "pageview", 791 "page": Drupal.googleanalytics.getPageUrl(this.href), 792 "transport": "beacon" 793 }); 794 } 795 } 796 else { 797 if (Drupal.settings.googleanalytics.trackMailto && $(this).is("a[href^='mailto:'],area[href^='mailto:']")) { 798 // Mailto link clicked. 799 ga("send", { 800 "hitType": "event", 801 "eventCategory": "Mails", 802 "eventAction": "Click", 803 "eventLabel": this.href.substring(7), 804 "transport": "beacon" 805 }); 806 } 807 else if (Drupal.settings.googleanalytics.trackOutbound && this.href.match(/^\w+:\/\//i)) { 808 if (Drupal.settings.googleanalytics.trackDomainMode !== 2 || (Drupal.settings.googleanalytics.trackDomainMode === 2 && !Drupal.googleanalytics.isCrossDomain(this.hostname, Drupal.settings.googleanalytics.trackCrossDomains))) { 809 // External link clicked / No top-level cross domain clicked. 810 ga("send", { 811 "hitType": "event", 812 "eventCategory": "Outbound links", 813 "eventAction": "Click", 814 "eventLabel": this.href, 815 "transport": "beacon" 816 }); 817 } 818 } 819 } 820 }); 821 }); 822 823 // Track hash changes as unique pageviews, if this option has been enabled. 824 if (Drupal.settings.googleanalytics.trackUrlFragments) { 825 window.onhashchange = function() { 826 ga("send", { 827 "hitType": "pageview", 828 "page": location.pathname + location.search + location.hash 829 }); 830 }; 831 } 832 833 // Colorbox: This event triggers when the transition has completed and the 834 // newly loaded content has been revealed. 835 if (Drupal.settings.googleanalytics.trackColorbox) { 836 $(document).bind("cbox_complete", function () { 837 var href = $.colorbox.element().attr("href"); 838 if (href) { 839 ga("send", { 840 "hitType": "pageview", 841 "page": Drupal.googleanalytics.getPageUrl(href) 842 }); 843 } 844 }); 845 } 846 847}); 848 849/** 850 * Check whether the hostname is part of the cross domains or not. 851 * 852 * @param string hostname 853 * The hostname of the clicked URL. 854 * @param array crossDomains 855 * All cross domain hostnames as JS array. 856 * 857 * @return boolean 858 */ 859Drupal.googleanalytics.isCrossDomain = function (hostname, crossDomains) { 860 /** 861 * jQuery < 1.6.3 bug: $.inArray crushes IE6 and Chrome if second argument is 862 * `null` or `undefined`, https://bugs.jquery.com/ticket/10076, 863 * https://github.com/jquery/jquery/commit/a839af034db2bd934e4d4fa6758a3fed8de74174 864 * 865 * @todo: Remove/Refactor in D8 866 */ 867 if (!crossDomains) { 868 return false; 869 } 870 else { 871 return $.inArray(hostname, crossDomains) > -1 ? true : false; 872 } 873}; 874 875/** 876 * Check whether this is a download URL or not. 877 * 878 * @param string url 879 * The web url to check. 880 * 881 * @return boolean 882 */ 883Drupal.googleanalytics.isDownload = function (url) { 884 var isDownload = new RegExp("\\.(" + Drupal.settings.googleanalytics.trackDownloadExtensions + ")([\?#].*)?$", "i"); 885 return isDownload.test(url); 886}; 887 888/** 889 * Check whether this is an absolute internal URL or not. 890 * 891 * @param string url 892 * The web url to check. 893 * 894 * @return boolean 895 */ 896Drupal.googleanalytics.isInternal = function (url) { 897 var isInternal = new RegExp("^(https?):\/\/" + window.location.host, "i"); 898 return isInternal.test(url); 899}; 900 901/** 902 * Check whether this is a special URL or not. 903 * 904 * URL types: 905 * - gotwo.module /go/* links. 906 * 907 * @param string url 908 * The web url to check. 909 * 910 * @return boolean 911 */ 912Drupal.googleanalytics.isInternalSpecial = function (url) { 913 var isInternalSpecial = new RegExp("(\/go\/.*)$", "i"); 914 return isInternalSpecial.test(url); 915}; 916 917/** 918 * Extract the relative internal URL from an absolute internal URL. 919 * 920 * Examples: 921 * - https://mydomain.com/node/1 -> /node/1 922 * - https://example.com/foo/bar -> https://example.com/foo/bar 923 * 924 * @param string url 925 * The web url to check. 926 * 927 * @return string 928 * Internal website URL 929 */ 930Drupal.googleanalytics.getPageUrl = function (url) { 931 var extractInternalUrl = new RegExp("^(https?):\/\/" + window.location.host, "i"); 932 return url.replace(extractInternalUrl, ''); 933}; 934 935/** 936 * Extract the download file extension from the URL. 937 * 938 * @param string url 939 * The web url to check. 940 * 941 * @return string 942 * The file extension of the passed url. e.g. "zip", "txt" 943 */ 944Drupal.googleanalytics.getDownloadExtension = function (url) { 945 var extractDownloadextension = new RegExp("\\.(" + Drupal.settings.googleanalytics.trackDownloadExtensions + ")([\?#].*)?$", "i"); 946 var extension = extractDownloadextension.exec(url); 947 return (extension === null) ? '' : extension[1]; 948}; 949 950})(jQuery); 951;
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.