1/* 2 * ****************************************************************************** 3 * jquery.mb.components 4 * file: mbExtruder.js 5 * 6 * Copyright (c) 2001-2014. Matteo Bicocchi (Pupunzi); 7 * Open lab srl, Firenze - Italy 8 * email: [email protected] 9 * site: http://pupunzi.com 10 * blog: http://pupunzi.open-lab.com 11 * http://open-lab.com 12 * 13 * Licences: MIT, GPL 14 * http://www.opensource.org/licenses/mit-license.php 15 * http://www.gnu.org/licenses/gpl.html 16 * 17 * last modified: 08/05/14 20.00 18 * ***************************************************************************** 19 */ 20 21/*Browser detection patch*/ 22var nAgt=navigator.userAgent;if(!jQuery.browser){jQuery.browser={},jQuery.browser.mozilla=!1,jQuery.browser.webkit=!1,jQuery.browser.opera=!1,jQuery.browser.safari=!1,jQuery.browser.chrome=!1,jQuery.browser.androidStock=!1,jQuery.browser.msie=!1,jQuery.browser.ua=nAgt,jQuery.browser.name=navigator.appName,jQuery.browser.fullVersion=""+parseFloat(navigator.appVersion),jQuery.browser.majorVersion=parseInt(navigator.appVersion,10);var nameOffset,verOffset,ix;if(-1!=(verOffset=nAgt.indexOf("Opera")))jQuery.browser.opera=!0,jQuery.browser.name="Opera",jQuery.browser.fullVersion=nAgt.substring(verOffset+6),-1!=(verOffset=nAgt.indexOf("Version"))&&(jQuery.browser.fullVersion=nAgt.substring(verOffset+8));else if(-1!=(verOffset=nAgt.indexOf("OPR")))jQuery.browser.opera=!0,jQuery.browser.name="Opera",jQuery.browser.fullVersion=nAgt.substring(verOffset+4);else if(-1!=(verOffset=nAgt.indexOf("MSIE")))jQuery.browser.msie=!0,jQuery.browser.name="Microsoft Internet Explorer",jQuery.browser.fullVersion=nAgt.substring(verOffset+5);else if(-1!=nAgt.indexOf("Trident")||-1!=nAgt.indexOf("Edge")){jQuery.browser.msie=!0,jQuery.browser.name="Microsoft Internet Explorer";var start=nAgt.indexOf("rv:")+3,end=start+4;jQuery.browser.fullVersion=nAgt.substring(start,end)}else-1!=(verOffset=nAgt.indexOf("Chrome"))?(jQuery.browser.webkit=!0,jQuery.browser.chrome=!0,jQuery.browser.name="Chrome",jQuery.browser.fullVersion=nAgt.substring(verOffset+7)):nAgt.indexOf("mozilla/5.0")>-1&&nAgt.indexOf("android ")>-1&&nAgt.indexOf("applewebkit")>-1&&!(nAgt.indexOf("chrome")>-1)?(verOffset=nAgt.indexOf("Chrome"),jQuery.browser.webkit=!0,jQuery.browser.androidStock=!0,jQuery.browser.name="androidStock",jQuery.browser.fullVersion=nAgt.substring(verOffset+7)):-1!=(verOffset=nAgt.indexOf("Safari"))?(jQuery.browser.webkit=!0,jQuery.browser.safari=!0,jQuery.browser.name="Safari",jQuery.browser.fullVersion=nAgt.substring(verOffset+7),-1!=(verOffset=nAgt.indexOf("Version"))&&(jQuery.browser.fullVersion=nAgt.substring(verOffset+8))):-1!=(verOffset=nAgt.indexOf("AppleWebkit"))?(jQuery.browser.webkit=!0,jQuery.browser.safari=!0,jQuery.browser.name="Safari",jQuery.browser.fullVersion=nAgt.substring(verOffset+7),-1!=(verOffset=nAgt.indexOf("Version"))&&(jQuery.browser.fullVersion=nAgt.substring(verOffset+8))):-1!=(verOffset=nAgt.indexOf("Firefox"))?(jQuery.browser.mozilla=!0,jQuery.browser.name="Firefox",jQuery.browser.fullVersion=nAgt.substring(verOffset+8)):(nameOffset=nAgt.lastIndexOf(" ")+1)<(verOffset=nAgt.lastIndexOf("/"))&&(jQuery.browser.name=nAgt.substring(nameOffset,verOffset),jQuery.browser.fullVersion=nAgt.substring(verOffset+1),jQuery.browser.name.toLowerCase()==jQuery.browser.name.toUpperCase()&&(jQuery.browser.name=navigator.appName));-1!=(ix=jQuery.browser.fullVersion.indexOf(";"))&&(jQuery.browser.fullVersion=jQuery.browser.fullVersion.substring(0,ix)),-1!=(ix=jQuery.browser.fullVersion.indexOf(" "))&&(jQuery.browser.fullVersion=jQuery.browser.fullVersion.substring(0,ix)),jQuery.browser.majorVersion=parseInt(""+jQuery.browser.fullVersion,10),isNaN(jQuery.browser.majorVersion)&&(jQuery.browser.fullVersion=""+parseFloat(navigator.appVersion),jQuery.browser.majorVersion=parseInt(navigator.appVersion,10)),jQuery.browser.version=jQuery.browser.majorVersion}jQuery.browser.android=/Android/i.test(nAgt),jQuery.browser.blackberry=/BlackBerry|BB|PlayBook/i.test(nAgt),jQuery.browser.ios=/iPhone|iPad|iPod|webOS/i.test(nAgt),jQuery.browser.operaMobile=/Opera Mini/i.test(nAgt),jQuery.browser.windowsMobile=/IEMobile|Windows Phone/i.test(nAgt),jQuery.browser.kindle=/Kindle|Silk/i.test(nAgt),jQuery.browser.mobile=jQuery.browser.android||jQuery.browser.blackberry||jQuery.browser.ios||jQuery.browser.windowsMobile||jQuery.browser.operaMobile||jQuery.browser.kindle,jQuery.isMobile=jQuery.browser.mobile,jQuery.isTablet=jQuery.browser.mobile&&jQuery(window).width()>765,jQuery.isAndroidDefault=jQuery.browser.android&&!/chrome/i.test(nAgt); 23/* 24 * Metadata - jQuery plugin for parsing metadata from elements 25 * Copyright (c) 2006 John Resig, Yehuda Katz, Jörn Zaefferer, Paul McLanahan 26 * Dual licensed under the MIT and GPL licenses: 27 * http://www.opensource.org/licenses/mit-license.php 28 * http://www.gnu.org/licenses/gpl.html 29 */ 30 31(function(c){c.extend({metadata:{defaults:{type:"class",name:"metadata",cre:/({.*})/,single:"metadata"},setType:function(b,c){this.defaults.type=b;this.defaults.name=c},get:function(b,f){var d=c.extend({},this.defaults,f);d.single.length||(d.single="metadata");var a=c.data(b,d.single);if(a)return a;a="{}";if("class"==d.type){var e=d.cre.exec(b.className);e&&(a=e[1])}else if("elem"==d.type){if(!b.getElementsByTagName)return;e=b.getElementsByTagName(d.name);e.length&&(a=c.trim(e[0].innerHTML))}else void 0!= b.getAttribute&&(e=b.getAttribute(d.name))&&(a=e);0>a.indexOf("{")&&(a="{"+a+"}");a=eval("("+a+")");c.data(b,d.single,a);return a}}});c.fn.metadata=function(b){return c.metadata.get(this[0],b)}})(jQuery); 32 33/***************************************************************************************/ 34 35 36(function($) { 37 document.extruder=new Object(); 38 document.extruder.left = 0; 39 document.extruder.top = 0; 40 document.extruder.bottom = 0; 41 document.extruder.right = 0; 42 document.extruder.idx=0; 43 var isIE=$.browser.msie; 44 45 $.mbExtruder= { 46 author:"Matteo Bicocchi", 47 version:"2.5.5", 48 defaults:{ 49 width:350, 50 positionFixed:true, 51 sensibility:800, 52 position:"top", 53 accordionPanels:true, 54 top:"auto", 55 extruderOpacity:1, 56 flapMargin:35, 57 textOrientation:"bt", // or "tb" (top-bottom or bottom-top) 58 onExtOpen:function(){}, 59 onExtContentLoad:function(){}, 60 onExtClose:function(){},
61 hidePanelsOnClose:true, 62 closeOnClick:true, 63 closeOnExternalClick:true, 64 autoCloseTime:0, 65 autoOpenTime:0, 66 slideTimer:300 67 }, 68 69 buildMbExtruder: function(options){ 70 return this.each (function (){ 71 this.options = {}; 72 $.extend (this.options, $.mbExtruder.defaults); 73 $.extend (this.options, options); 74 75 this.idx=document.extruder.idx; 76 document.extruder.idx++; 77 var extruder,extruderContent,wrapper,extruderStyle,wrapperStyle,txt,closeTimer,openTimer; 78 extruder= $(this); 79 extruderContent=extruder.html(); 80 81 extruder.css("zIndex",100); 82 var isVertical = this.options.position=="left" || this.options.position=="right"; 83 var extW= isVertical?1: this.options.width; 84 var c= $("<div/>").addClass("extruder-content").css({overflow:"hidden", width:extW}); 85 c.append(extruderContent); 86 extruder.html(c); 87 88 var position=this.options.positionFixed?"fixed":"absolute"; 89 extruder.addClass("extruder"); 90 extruder.addClass(this.options.position); 91 var isHorizontal = this.options.position=="top" || this.options.position=="bottom"; 92 extruderStyle = 93 this.options.position=="top" ? 94 {position:position,top:0,left:"50%",marginLeft:-this.options.width/2,width:this.options.width}: 95 this.options.position=="bottom" ? 96 {position:position,bottom:0,left:"50%",marginLeft:-this.options.width/2,width:this.options.width}: 97 this.options.position=="left" ? 98 {position:position,top:0,left:0,width:1}: 99 {position:position,top:0,right:0,width:1}; 100 extruder.css(extruderStyle); 101 if(!isIE) extruder.css({opacity:this.options.extruderOpacity}); 102 extruder.wrapInner("<div class='ext_wrapper'></div>"); 103 wrapper= extruder.find(".ext_wrapper"); 104 105 wrapperStyle={position:"absolute", width:isVertical?1:this.options.width}; 106 wrapper.css(wrapperStyle); 107 108 if (isHorizontal){ 109 this.options.position=="top"? document.extruder.top++ : document.extruder.bottom++; 110 if (document.extruder.top >1 || document.extruder.bottom>1){ 111 alert("more than 1 mb.extruder on top or bottom is not supported jet... hope soon!"); 112 return; 113 } 114 } 115 116 if ($.metadata){ 117 $.metadata.setType("class"); 118 if (extruder.metadata().title) extruder.attr("extTitle",extruder.metadata().title); 119 if (extruder.metadata().url) extruder.attr("extUrl",extruder.metadata().url); 120 if (extruder.metadata().data) extruder.attr("extData",extruder.metadata().data); 121 } 122 123 var flapFooter=$("<div class='footer'/>"); 124 var flap=$("<div class='flap'><span class='flapLabel'/></div>"); 125 if (document.extruder.bottom){ 126 wrapper.prepend(flapFooter); 127 wrapper.prepend(flap); 128 }else{ 129 wrapper.append(flapFooter); 130 wrapper.append(flap); 131 } 132 133 txt=extruder.attr("extTitle")?extruder.attr("extTitle"): ""; 134 var flapLabel = extruder.find(".flapLabel"); 135 flapLabel.text(txt); 136 if(isVertical){ 137 flapLabel.html(txt).css({whiteSpace:"noWrap"}); 138 var orientation= this.options.textOrientation == "tb"; 139 var labelH=extruder.find('.flapLabel').getFlipTextDim()[1]; 140 extruder.find('.flapLabel').mbFlipText(orientation); 141 }else{ 142 flapLabel.html(txt).css({whiteSpace:"noWrap"}); 143 } 144 145 if (extruder.attr("extUrl")){ 146 extruder.setMbExtruderContent({ 147 url:extruder.attr("extUrl"), 148 data:extruder.attr("extData"), 149 callback: function(){ 150 if (extruder.get(0).options.onExtContentLoad) extruder.get(0).options.onExtContentLoad(); 151 } 152 }) 153 }else{ 154 var container=$("<div>").addClass("text").css({width:extruder.get(0).options.width-20, overflowY:"auto"}); 155 c.wrapInner(container); 156 extruder.setExtruderVoicesAction(); 157 } 158 159 flap.on("click",function(){ 160 if (!extruder.attr("isOpened")){ 161 extruder.openMbExtruder(); 162 }else{ 163 extruder.closeMbExtruder(); 164 extruder.removeAttr("isOpened"); 165 } 166 }).on("mouseenter",function(){ 167 if(extruder.get(0).options.autoOpenTime>0){ 168 openTimer=setTimeout(function(){ 169 extruder.openMbExtruder(); 170 $(document).one("click.extruder"+extruder.get(0).idx,function(){extruder.closeMbExtruder();}); 171 },extruder.get(0).options.autoOpenTime); 172 } 173 }).on("mouseleave",function(){ 174 clearTimeout(openTimer); 175 }); 176 177 c.on("mouseleave", function(e){ 178 if(extruder.get(0).options.closeOnExternalClick){ 179 180 //Chrome bug: FORMELEMENT fire mouseleave event. 181 if(!$(e.target).parents().is(".text") && !$(e.target).is("select")) 182 $(document).one("click.extruder"+extruder.get(0).idx,function(){extruder.closeMbExtruder();}); 183 } 184 closeTimer=setTimeout(function(){ 185 186 if(extruder.get(0).options.autoCloseTime > 0){ 187 extruder.closeMbExtruder(); 188 } 189 },extruder.get(0).options.autoCloseTime); 190 }).on("mouseenter", function(){ 191 clearTimeout(closeTimer);
192 $(document).off("click.extruder"+extruder.get(0).idx); 193 }); 194 195 if (isVertical){ 196 c.css({ height:"100%"}); 197 if(this.options.top=="auto") { 198 flap.css({top:100+(this.options.position=="left"?document.extruder.left:document.extruder.right)}); 199 this.options.position=="left"?document.extruder.left+=labelH+this.options.flapMargin:document.extruder.right+= labelH+this.options.flapMargin; 200 }else{ 201 flap.css({top:this.options.top}); 202 } 203 var clicDiv=$("<div/>").css({position:"absolute",top:0,left:0,width:"100%",height:"100%",background:"transparent"}); 204 flap.append(clicDiv); 205 } 206 207 this.originalWidth = this.options.width; 208 209 $(window).on("resize",function(){ 210 extruder.adjustSize(); 211 }) 212 }); 213 }, 214 215 adjustSize:function(){ 216 217 var $extruder = this; 218 var extruder = $extruder.get(0); 219 220 var isHorizontal = extruder.options.position=="top" || extruder.options.position=="bottom"; 221 222 if(isHorizontal){ 223 224 if( $(window).width() < extruder.options.width){ 225 $extruder.css({width:$(window).width(), marginLeft:0, left:0}); 226 $extruder.find(".ext_wrapper, .extruder-content, .extruder-container").css({width:"100%"}); 227 }else{ 228 $extruder.css({width:extruder.options.width, left:"50%",marginLeft:-extruder.options.width/2}); 229 $extruder.find(".ext_wrapper, .extruder-content, .extruder-container").css({width:"100%"}); 230 } 231 232 } else{ 233 234 if( ($(window).width()-80) < extruder.originalWidth){ 235 extruder.options.width = $(window).width()-80; 236 }else{ 237 extruder.options.width = extruder.originalWidth; 238 } 239 240 if($extruder.attr("isOpened")){ 241 $extruder.find('.extruder-content').css({width: extruder.options.width}); 242 $extruder.find(".ext_wrapper, .extruder-content, .extruder-container").css({width:extruder.options.width}); 243 } 244 } 245 246 }, 247 248 setMbExtruderContent: function(options){ 249 this.options = { 250 url:false, 251 data:"", 252 callback:function(){} 253 }; 254 $.extend (this.options, options); 255 if (!this.options.url || this.options.url.length==0){ 256 alert("internal error: no URL to call"); 257 return; 258 } 259 var url=this.options.url; 260 var data=this.options.data; 261 var where=$(this), voice; 262 var cb= this.options.callback; 263 var container=$("<div>").addClass("extruder-container"); 264 if (!($.browser.msie && $.browser.version<=7)) 265 container.css({width:$(this).get(0).options.width}); 266 where.find(".extruder-content").wrapInner(container); 267 $.ajax({ 268 type: "GET", 269 url: url, 270 data: data, 271 async:true, 272 dataType:"html", 273 success: function(html){ 274 where.find(".extruder-container").html(html); 275 voice=where.find(".voice"); 276 voice.hover(function(){$(this).addClass("hover");},function(){$(this).removeClass("hover");}); 277 where.setExtruderVoicesAction(); 278 if (cb) { 279 setTimeout(function(){cb();},100); 280 } 281 } 282 }); 283 }, 284 285 openMbExtruder:function(c){ 286 var extruder= $(this); 287 extruder.adjustSize(); 288 289 extruder.attr("isOpened",true); 290 $(document).off("click.extruder"+extruder.get(0).idx); 291 var opt= extruder.get(0).options; 292 extruder.addClass("isOpened"); 293 if(!isIE) extruder.css("opacity",1); 294 var position = opt.position; 295 extruder.mb_bringToFront(); 296 if (position=="top" || position=="bottom"){ 297 extruder.find('.extruder-content').slideDown( opt.slideTimer); 298 if(opt.onExtOpen) opt.onExtOpen(); 299 }else{ 300 if(!isIE) $(this).css("opacity",1); 301 extruder.find('.ext_wrapper').css({width:""}); 302 extruder.find('.extruder-content').css({overflowX:"hidden", display:"block"}); 303 extruder.find('.extruder-content').animate({ width: opt.width}, opt.slideTimer,function(){ 304 extruder.find(".extruder-container").css({width: opt.width}); 305 }); 306 if(opt.onExtOpen) opt.onExtOpen(); 307 } 308 309 if (c) { 310 setTimeout(function(){ 311 $(document).one("click.extruder"+extruder.get(0).idx,function(){extruder.closeMbExtruder();}); 312 },100); 313 } 314 315 }, 316 317 closeMbExtruder:function(){ 318 var extruder= $(this); 319 extruder.removeAttr("isOpened"); 320 var opt= extruder.get(0).options; 321 extruder.removeClass("isOpened");
322 $(document).off("click.extruder"+extruder.get(0).idx); 323 if(!isIE) extruder.css("opacity",opt.extruderOpacity); 324 if(opt.hidePanelsOnClose) extruder.hidePanelsOnClose(); 325 if (opt.position=="top" || opt.position=="bottom"){ 326 extruder.find('.extruder-content').slideUp(opt.slideTimer); 327 if(opt.onExtClose) opt.onExtClose(); 328 }else if (opt.position=="left" || opt.position=="right"){ 329 extruder.find('.extruder-content').css({overflow:"hidden"}); 330 extruder.find('.extruder-content').animate({ width: 1 }, opt.slideTimer,function(){ 331 extruder.find('.ext_wrapper').css({width:1}); 332 extruder.find('.extruder-content').css({overflow:"hidden",display:"none"}); 333 if(opt.onExtClose) opt.onExtClose(); 334 }); 335 } 336 } 337 }; 338 339 jQuery.fn.mb_bringToFront= function(){ 340 var zi=10; 341 $('*').each(function() { 342 if($(this).css("position")=="absolute" ||$(this).css("position")=="fixed"){ 343 var cur = parseInt($(this).css('zIndex')); 344 zi = cur > zi ? parseInt($(this).css('zIndex')) : zi; 345 } 346 }); 347 $(this).css('zIndex',zi+=1); 348 return zi; 349 }; 350 351 /* 352 * EXTRUDER CONTENT 353 */ 354 355 $.fn.setExtruderVoicesAction=function(){ 356 var extruder=$(this); 357 var opt=extruder.get(0).options; 358 var voices= $(this).find(".voice"); 359 voices.each(function(){ 360 var voice=$(this); 361 if ($.metadata){ 362 $.metadata.setType("class"); 363 if (voice.metadata().panel) voice.attr("panel",voice.metadata().panel); 364 if (voice.metadata().data) voice.attr("data",voice.metadata().data); 365 if (voice.metadata().disabled) voice.attr("setDisabled", voice.metadata().disabled); 366 } 367 368 if (voice.attr("setDisabled")) 369 voice.disableExtruderVoice(); 370 371 if (voice.attr("panel") && voice.attr("panel")!="false"){ 372 voice.append("<span class='settingsBtn'/>"); 373 voice.find(".settingsBtn").css({opacity:.5}); 374 voice.find(".settingsBtn").hover( 375 function(){ 376 $(this).css({opacity:1}); 377 }, 378 function(){ 379 $(this).not(".sel").css({opacity:.5}); 380 }).click(function(){ 381 if ($(this).parents().hasClass("sel")){ 382 if(opt.accordionPanels) 383 extruder.hidePanelsOnClose(); 384 else 385 $(this).closePanel(); 386 return; 387 } 388 389 if(opt.accordionPanels){ 390 extruder.find(".optionsPanel").slideUp(400,function(){$(this).remove();}); 391 voices.removeClass("sel"); 392 voices.find(".settingsBtn").removeClass("sel").css({opacity:.5}); 393 } 394 var content=$("<div class='optionsPanel'></div>"); 395 voice.after(content); 396 $.ajax({ 397 type: "GET", 398 url: voice.attr("panel"), 399 data: voice.attr("data"), 400 async:true, 401 dataType:"html", 402 success: function(html){ 403 var c= $(html); 404 content.html(c); 405 content.children().not(".text") 406 .addClass("panelVoice") 407 .click(function(){ 408 if(opt.closeOnClick) 409 extruder.closeMbExtruder(); 410 }); 411 content.slideDown(400); 412 } 413 }); 414 voice.addClass("sel"); 415 voice.find(".settingsBtn").addClass("sel").css({opacity:1}); 416 }); 417 } 418 419 if (voice.find("a").length==0 && voice.attr("panel")){ 420 voice.find(".label").not(".disabled").css("cursor","pointer").click(function(){ 421 voice.find(".settingsBtn").click(); 422 }); 423 } 424 425 if ((!voice.attr("panel") || voice.attr("panel")=="false" ) && (!voice.attr("setDisabled") || voice.attr("setDisabled")!="true")){ 426 voice.find(".label").click(function(){ 427 extruder.hidePanelsOnClose(); 428 if(opt.closeOnClick) 429 extruder.closeMbExtruder(); 430 }); 431 } 432 }); 433 }; 434 435 $.fn.disableExtruderVoice=function(){ 436 var voice=$(this); 437 var label = voice.find(".label"); 438 voice.removeClass("sel"); 439 voice.next(".optionsPanel").slideUp(400,function(){$(this).remove();}); 440 voice.attr("setDisabled",true); 441 label.css("opacity",.4); 442 voice.hover(function(){$(this).removeClass("hover");},function(){$(this).removeClass("hover");}); 443 label.addClass("disabled").css("cursor","default"); 444 voice.find(".settingsBtn").hide(); 445 voice.on("click",function(event){ 446 event.stopPropagation(); 447 return false;
448 }); 449 }; 450 451 $.fn.enableExtruderVoice=function(){ 452 var voice=$(this); 453 voice.attr("setDisabled",false); 454 voice.find(".label").css("opacity",1); 455 voice.find(".label").removeClass("disabled").css("cursor","pointer"); 456 voice.off("click"); 457 voice.find(".settingsBtn").show(); 458 }; 459 460 $.fn.hidePanelsOnClose=function(){ 461 var voices= $(this).find(".voice"); 462 $(this).find(".optionsPanel").slideUp(400,function(){$(this).remove();}); 463 voices.removeClass("sel"); 464 voices.find(".settingsBtn").removeClass("sel").css("opacity",.5); 465 }; 466 467 $.fn.openPanel=function(){ 468 var voice=$(this).hasClass("voice") ? $(this) : $(this).find(".voice"); 469 voice.each(function(){ 470 if($(this).hasClass("sel")) return; 471 $(this).find(".settingsBtn").click(); 472 }) 473 }; 474 475 $.fn.closePanel=function(){ 476 var voice=$(this).hasClass("voice") ? $(this) : $(this).parent(".voice"); 477 voice.next(".optionsPanel").slideUp(400,function(){$(this).remove();}); 478 voice.removeClass("sel"); 479 $(this).removeClass("sel").css("opacity",.5); 480 }; 481 482 $.fn.buildMbExtruder=$.mbExtruder.buildMbExtruder; 483 $.fn.setMbExtruderContent=$.mbExtruder.setMbExtruderContent; 484 $.fn.closeMbExtruder=$.mbExtruder.closeMbExtruder; 485 $.fn.openMbExtruder=$.mbExtruder.openMbExtruder; 486 $.fn.adjustSize=$.mbExtruder.adjustSize; 487 488})(jQuery);
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.