1/*! 2 * jQuery Cookie Plugin v1.3 3 * https://github.com/carhartl/jquery-cookie 4 * 5 * Copyright 2011, Klaus Hartl 6 * Dual licensed under the MIT or GPL Version 2 licenses. 7 * http://www.opensource.org/licenses/mit-license.php 8 * http://www.opensource.org/licenses/GPL-2.0 9 */ 10(function ($, document, undefined) { 11 12 var pluses = /\+/g; 13 14 function raw(s) { 15 return s; 16 } 17 18 function decoded(s) { 19 return decodeURIComponent(s.replace(pluses, ' ')); 20 } 21 22 var config = $.cookie = function (key, value, options) { 23 24 // write 25 if (value !== undefined) { 26 options = $.extend({}, config.defaults, options); 27 28 if (value === null) { 29 options.expires = -1; 30 } 31 32 if (typeof options.expires === 'number') { 33 var days = options.expires, t = options.expires = new Date(); 34 t.setDate(t.getDate() + days); 35 } 36 37 value = config.json ? JSON.stringify(value) : String(value); 38 39 return (document.cookie = [ 40 encodeURIComponent(key), '=', config.raw ? value : encodeURIComponent(value), 41 options.expires ? '; expires=' + options.expires.toUTCString() : '', // use expires attribute, max-age is not supported by IE 42 options.path ? '; path=' + options.path : '', 43 options.domain ? '; domain=' + options.domain : '', 44 options.secure ? '; secure' : '' 45 ].join('')); 46 } 47 48 // read 49 var decode = config.raw ? raw : decoded; 50 var cookies = document.cookie.split('; '); 51 for (var i = 0, l = cookies.length; i < l; i++) { 52 var parts = cookies[i].split('='); 53 if (decode(parts.shift()) === key) { 54 var cookie = decode(parts.join('=')); 55 return config.json ? JSON.parse(cookie) : cookie; 56 } 57 } 58 59 return null; 60 }; 61 62 config.defaults = {}; 63 64 $.removeCookie = function (key, options) { 65 if ($.cookie(key) !== null) { 66 $.cookie(key, null, options); 67 return true; 68 } 69 return false; 70 }; 71 72})(jQuery, document); 73 74/** 75 * jQuery.query - Query String Modification and Creation for jQuery 76 * Written by Blair Mitchelmore (blair DOT mitchelmore AT gmail DOT com) 77 * Licensed under the WTFPL (http://sam.zoy.org/wtfpl/). 78 * Date: 2009/8/13 79 * 80 * @author Blair Mitchelmore 81 * @version 2.1.7 82 * 83 **/ 84new function(settings) { 85 // Various Settings 86 var $separator = settings.separator || '&'; 87 var $spaces = settings.spaces === false ? false : true; 88 var $suffix = settings.suffix === false ? '' : '[]'; 89 var $prefix = settings.prefix === false ? false : true; 90 var $hash = $prefix ? settings.hash === true ? "#" : "?" : ""; 91 var $numbers = settings.numbers === false ? false : true; 92 93 jQuery.query = new function() { 94 var is = function(o, t) { 95 return o != undefined && o !== null && (!!t ? o.constructor == t : true); 96 }; 97 var parse = function(path) { 98 var m, rx = /\[([^[]*)\]/g, match = /^([^[]+)(\[.*\])?$/.exec(path), base = match[1], tokens = []; 99 while (m = rx.exec(match[2])) tokens.push(m[1]); 100 return [base, tokens]; 101 }; 102 var set = function(target, tokens, value) { 103 var o, token = tokens.shift(); 104 if (typeof target != 'object') target = null; 105 if (token === "") { 106 if (!target) target = []; 107 if (is(target, Array)) { 108 target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value)); 109 } else if (is(target, Object)) { 110 var i = 0; 111 while (target[i++] != null); 112 target[--i] = tokens.length == 0 ? value : set(target[i], tokens.slice(0), value); 113 } else { 114 target = []; 115 target.push(tokens.length == 0 ? value : set(null, tokens.slice(0), value)); 116 } 117 } else if (token && token.match(/^\s*[0-9]+\s*$/)) { 118 var index = parseInt(token, 10); 119 if (!target) target = []; 120 target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value); 121 } else if (token) { 122 var index = token.replace(/^\s*|\s*$/g, ""); 123 if (!target) target = {}; 124 if (is(target, Array)) { 125 var temp = {}; 126 for (var i = 0; i < target.length; ++i) { 127 temp[i] = target[i]; 128 } 129 target = temp; 130 } 131 target[index] = tokens.length == 0 ? value : set(target[index], tokens.slice(0), value); 132 } else { 133 return value; 134 } 135 return target; 136 }; 137 138 var queryObject = function(a) { 139 var self = this; 140 self.keys = {}; 141 142 if (a.queryObject) { 143 jQuery.each(a.get(), function(key, val) { 144 self.SET(key, val); 145 }); 146 } else { 147 jQuery.each(arguments, function() { 148 var q = "" + this; 149 q = q.replace(/^[?#]/,''); // remove any leading ? || # 150 q = q.replace(/[;&]$/,''); // remove any trailing & || ; 151 if ($spaces) q = q.replace(/[+]/g,' '); // replace +'s with spaces 152 153 jQuery.each(q.split(/[&;]/), function(){ 154 var key = decodeURIComponent(this.split('=')[0] || ""); 155 var val = decodeURIComponent(this.split('=')[1] || ""); 156 157 if (!key) return; 158 159 if ($numbers) { 160 if (/^[+-]?[0-9]+\.[0-9]*$/.test(val)) // simple float regex 161 val = parseFloat(val); 162 else if (/^[+-]?[0-9]+$/.test(val)) // simple int regex 163 val = parseInt(val, 10); 164 } 165 166 val = (!val && val !== 0) ? true : val; 167 168 if (val !== false && val !== true && typeof val != 'number') 169 val = val; 170 171 self.SET(key, val); 172 }); 173 }); 174 } 175 return self; 176 }; 177 178 queryObject.prototype = { 179 queryObject: true, 180 has: function(key, type) { 181 var value = this.get(key); 182 return is(value, type); 183 }, 184 GET: function(key) { 185 if (!is(key)) return this.keys; 186 var parsed = parse(key), base = parsed[0], tokens = parsed[1]; 187 var target = this.keys[base]; 188 while (target != null && tokens.length != 0) { 189 target = target[tokens.shift()]; 190 } 191 return typeof target == 'number' ? target : target || ""; 192 }, 193 get: function(key) { 194 var target = this.GET(key); 195 if (is(target, Object)) 196 return jQuery.extend(true, {}, target); 197 else if (is(target, Array)) 198 return target.slice(0); 199 return target; 200 }, 201 SET: function(key, val) { 202 var value = !is(val) ? null : val; 203 var parsed = parse(key), base = parsed[0], tokens = parsed[1]; 204 var target = this.keys[base]; 205 this.keys[base] = set(target, tokens.slice(0), value); 206 return this; 207 }, 208 set: function(key, val) { 209 return this.copy().SET(key, val); 210 }, 211 REMOVE: function(key) { 212 return this.SET(key, null).COMPACT(); 213 }, 214 remove: function(key) { 215 return this.copy().REMOVE(key); 216 }, 217 EMPTY: function() { 218 var self = this; 219 jQuery.each(self.keys, function(key, value) { 220 delete self.keys[key]; 221 }); 222 return self; 223 }, 224 load: function(url) { 225 var hash = url.replace(/^.*?[#](.+?)(?:\?.+)?$/, "$1"); 226 var search = url.replace(/^.*?[?](.+?)(?:#.+)?$/, "$1"); 227 return new queryObject(url.length == search.length ? '' : search, url.length == hash.length ? '' : hash); 228 }, 229 empty: function() { 230 return this.copy().EMPTY(); 231 }, 232 copy: function() { 233 return new queryObject(this); 234 }, 235 COMPACT: function() { 236 function build(orig) { 237 var obj = typeof orig == "object" ? is(orig, Array) ? [] : {} : orig; 238 if (typeof orig == 'object') { 239 function add(o, key, value) { 240 if (is(o, Array)) 241 o.push(value); 242 else 243 o[key] = value; 244 } 245 jQuery.each(orig, function(key, value) { 246 if (!is(value)) return true; 247 add(obj, key, build(value)); 248 }); 249 } 250 return obj;
251 } 252 this.keys = build(this.keys); 253 return this; 254 }, 255 compact: function() { 256 return this.copy().COMPACT(); 257 }, 258 toString: function() { 259 var i = 0, queryString = [], chunks = [], self = this; 260 var encode = function(str) { 261 str = str + ""; 262 if ($spaces) str = str.replace(/ /g, "+"); 263 return encodeURIComponent(str); 264 }; 265 var addFields = function(arr, key, value) { 266 if (!is(value) || value === false) return; 267 var o = [encode(key)]; 268 if (value !== true) { 269 o.push("="); 270 o.push(encode(value)); 271 } 272 arr.push(o.join("")); 273 }; 274 var build = function(obj, base) { 275 var newKey = function(key) { 276 return !base || base == "" ? [key].join("") : [base, "[", key, "]"].join(""); 277 }; 278 jQuery.each(obj, function(key, value) { 279 if (typeof value == 'object') 280 build(value, newKey(key)); 281 else 282 addFields(chunks, newKey(key), value); 283 }); 284 }; 285 286 build(this.keys); 287 288 if (chunks.length > 0) queryString.push($hash); 289 queryString.push(chunks.join($separator)); 290 291 return queryString.join(""); 292 } 293 }; 294 295 return new queryObject( 296 location.search.replace(/__proto__/g, "__PROTO__").replace(/constructor/g, "CONSTRUCTOR").replace(/prototype/g, "PROTOTYPE"), 297 location.hash.replace(/__proto__/g, "__PROTO__").replace(/constructor/g, "CONSTRUCTOR").replace(/prototype/g, "PROTOTYPE") 298 ); 299 }; 300}(jQuery.query || {}); // Pass in jQuery.query as settings object 301 302/* 303 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ 304 * 305 * Uses the built in easing capabilities added In jQuery 1.1 306 * to offer multiple easing options 307 * 308 * TERMS OF USE - jQuery Easing 309 * 310 * Open source under the BSD License. 311 * 312 * Copyright c 2008 George McGinley Smith 313 * All rights reserved. 314 * 315 * Redistribution and use in source and binary forms, with or without modification, 316 * are permitted provided that the following conditions are met: 317 * 318 * Redistributions of source code must retain the above copyright notice, this list of 319 * conditions and the following disclaimer. 320 * Redistributions in binary form must reproduce the above copyright notice, this list 321 * of conditions and the following disclaimer in the documentation and/or other materials 322 * provided with the distribution. 323 * 324 * Neither the name of the author nor the names of contributors may be used to endorse 325 * or promote products derived from this software without specific prior written permission. 326 * 327 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 328 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 329 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 330 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 331 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 332 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 333 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 334 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 335 * OF THE POSSIBILITY OF SUCH DAMAGE. 336 * 337*/ 338 339// t: current time, b: begInnIng value, c: change In value, d: duration 340jQuery.easing['jswing'] = jQuery.easing['swing']; 341 342jQuery.extend( jQuery.easing, 343{ 344 def: 'easeOutQuad', 345 swing: function (x, t, b, c, d) { 346 //alert(jQuery.easing.default); 347 return jQuery.easing[jQuery.easing.def](x, t, b, c, d); 348 }, 349 easeInQuad: function (x, t, b, c, d) { 350 return c*(t/=d)*t + b; 351 }, 352 easeOutQuad: function (x, t, b, c, d) { 353 return -c *(t/=d)*(t-2) + b; 354 }, 355 easeInOutQuad: function (x, t, b, c, d) { 356 if ((t/=d/2) < 1) return c/2*t*t + b; 357 return -c/2 * ((--t)*(t-2) - 1) + b; 358 }, 359 easeInCubic: function (x, t, b, c, d) {
vendor: 4,309 bytes, lines 360-480
360 return c*(t/=d)*t*t + b; 361 }, 362 easeOutCubic: function (x, t, b, c, d) { 363 return c*((t=t/d-1)*t*t + 1) + b; 364 }, 365 easeInOutCubic: function (x, t, b, c, d) { 366 if ((t/=d/2) < 1) return c/2*t*t*t + b; 367 return c/2*((t-=2)*t*t + 2) + b; 368 }, 369 easeInQuart: function (x, t, b, c, d) { 370 return c*(t/=d)*t*t*t + b; 371 }, 372 easeOutQuart: function (x, t, b, c, d) { 373 return -c * ((t=t/d-1)*t*t*t - 1) + b; 374 }, 375 easeInOutQuart: function (x, t, b, c, d) { 376 if ((t/=d/2) < 1) return c/2*t*t*t*t + b; 377 return -c/2 * ((t-=2)*t*t*t - 2) + b; 378 }, 379 easeInQuint: function (x, t, b, c, d) { 380 return c*(t/=d)*t*t*t*t + b; 381 }, 382 easeOutQuint: function (x, t, b, c, d) { 383 return c*((t=t/d-1)*t*t*t*t + 1) + b; 384 }, 385 easeInOutQuint: function (x, t, b, c, d) { 386 if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; 387 return c/2*((t-=2)*t*t*t*t + 2) + b; 388 }, 389 easeInSine: function (x, t, b, c, d) { 390 return -c * Math.cos(t/d * (Math.PI/2)) + c + b; 391 }, 392 easeOutSine: function (x, t, b, c, d) { 393 return c * Math.sin(t/d * (Math.PI/2)) + b; 394 }, 395 easeInOutSine: function (x, t, b, c, d) { 396 return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; 397 }, 398 easeInExpo: function (x, t, b, c, d) { 399 return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; 400 }, 401 easeOutExpo: function (x, t, b, c, d) { 402 return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; 403 }, 404 easeInOutExpo: function (x, t, b, c, d) { 405 if (t==0) return b; 406 if (t==d) return b+c; 407 if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; 408 return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; 409 }, 410 easeInCirc: function (x, t, b, c, d) { 411 return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; 412 }, 413 easeOutCirc: function (x, t, b, c, d) { 414 return c * Math.sqrt(1 - (t=t/d-1)*t) + b; 415 }, 416 easeInOutCirc: function (x, t, b, c, d) { 417 if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; 418 return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; 419 }, 420 easeInElastic: function (x, t, b, c, d) { 421 var s=1.70158;var p=0;var a=c; 422 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 423 if (a < Math.abs(c)) { a=c; var s=p/4; } 424 else var s = p/(2*Math.PI) * Math.asin (c/a); 425 return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 426 }, 427 easeOutElastic: function (x, t, b, c, d) { 428 var s=1.70158;var p=0;var a=c; 429 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 430 if (a < Math.abs(c)) { a=c; var s=p/4; } 431 else var s = p/(2*Math.PI) * Math.asin (c/a); 432 return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; 433 }, 434 easeInOutElastic: function (x, t, b, c, d) { 435 var s=1.70158;var p=0;var a=c; 436 if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); 437 if (a < Math.abs(c)) { a=c; var s=p/4; } 438 else var s = p/(2*Math.PI) * Math.asin (c/a); 439 if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 440 return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; 441 }, 442 easeInBack: function (x, t, b, c, d, s) { 443 if (s == undefined) s = 1.70158; 444 return c*(t/=d)*t*((s+1)*t - s) + b; 445 }, 446 easeOutBack: function (x, t, b, c, d, s) { 447 if (s == undefined) s = 1.70158; 448 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; 449 }, 450 easeInOutBack: function (x, t, b, c, d, s) { 451 if (s == undefined) s = 1.70158; 452 if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; 453 return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; 454 }, 455 easeInBounce: function (x, t, b, c, d) { 456 return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; 457 }, 458 easeOutBounce: function (x, t, b, c, d) { 459 if ((t/=d) < (1/2.75)) { 460 return c*(7.5625*t*t) + b; 461 } else if (t < (2/2.75)) { 462 return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; 463 } else if (t < (2.5/2.75)) { 464 return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; 465 } else { 466 return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; 467 } 468 }, 469 easeInOutBounce: function (x, t, b, c, d) { 470 if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; 471 return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; 472 } 473}); 474 475/*! jCarousel - v0.3.1 - 2014-04-26 476* http://sorgalla.com/jcarousel 477* Copyright (c) 2014 Jan Sorgalla; Licensed MIT */ 478(function($) { 479 'use strict'; 480
481 var jCarousel = $.jCarousel = {}; 482 483 jCarousel.version = '0.3.1'; 484 485 var rRelativeTarget = /^([+\-]=)?(.+)$/; 486 487 jCarousel.parseTarget = function(target) { 488 var relative = false, 489 parts = typeof target !== 'object' ? 490 rRelativeTarget.exec(target) : 491 null; 492 493 if (parts) { 494 target = parseInt(parts[2], 10) || 0; 495 496 if (parts[1]) { 497 relative = true; 498 if (parts[1] === '-=') { 499 target *= -1; 500 } 501 } 502 } else if (typeof target !== 'object') { 503 target = parseInt(target, 10) || 0; 504 } 505 506 return { 507 target: target, 508 relative: relative 509 }; 510 }; 511 512 jCarousel.detectCarousel = function(element) { 513 var carousel; 514 515 while (element.length > 0) { 516 carousel = element.filter('[data-jcarousel]'); 517 518 if (carousel.length > 0) { 519 return carousel; 520 } 521 522 carousel = element.find('[data-jcarousel]'); 523 524 if (carousel.length > 0) { 525 return carousel; 526 } 527 528 element = element.parent(); 529 } 530 531 return null; 532 }; 533 534 jCarousel.base = function(pluginName) { 535 return { 536 version: jCarousel.version, 537 _options: {}, 538 _element: null, 539 _carousel: null, 540 _init: $.noop, 541 _create: $.noop, 542 _destroy: $.noop, 543 _reload: $.noop, 544 create: function() { 545 this._element 546 .attr('data-' + pluginName.toLowerCase(), true) 547 .data(pluginName, this); 548 549 if (false === this._trigger('create')) { 550 return this; 551 } 552 553 this._create(); 554 555 this._trigger('createend'); 556 557 return this; 558 }, 559 destroy: function() { 560 if (false === this._trigger('destroy')) { 561 return this; 562 } 563 564 this._destroy(); 565 566 this._trigger('destroyend'); 567 568 this._element 569 .removeData(pluginName) 570 .removeAttr('data-' + pluginName.toLowerCase()); 571 572 return this; 573 }, 574 reload: function(options) { 575 if (false === this._trigger('reload')) { 576 return this; 577 } 578 579 if (options) { 580 this.options(options); 581 } 582 583 this._reload(); 584 585 this._trigger('reloadend'); 586 587 return this; 588 }, 589 element: function() { 590 return this._element; 591 }, 592 options: function(key, value) { 593 if (arguments.length === 0) { 594 return $.extend({}, this._options); 595 } 596 597 if (typeof key === 'string') { 598 if (typeof value === 'undefined') { 599 return typeof this._options[key] === 'undefined' ? 600 null : 601 this._options[key]; 602 } 603 604 this._options[key] = value; 605 } else { 606 this._options = $.extend({}, this._options, key); 607 } 608 609 return this; 610 }, 611 carousel: function() { 612 if (!this._carousel) { 613 this._carousel = jCarousel.detectCarousel(this.options('carousel') || this._element); 614 615 if (!this._carousel) { 616 $.error('Could not detect carousel for plugin "' + pluginName + '"'); 617 } 618 } 619 620 return this._carousel; 621 }, 622 _trigger: function(type, element, data) { 623 var event, 624 defaultPrevented = false; 625 626 data = [this].concat(data || []); 627 628 (element || this._element).each(function() { 629 event = $.Event((pluginName + ':' + type).toLowerCase()); 630 631 $(this).trigger(event, data); 632 633 if (event.isDefaultPrevented()) { 634 defaultPrevented = true; 635 } 636 }); 637 638 return !defaultPrevented; 639 } 640 }; 641 }; 642 643 jCarousel.plugin = function(pluginName, pluginPrototype) { 644 var Plugin = $[pluginName] = function(element, options) { 645 this._element = $(element); 646 this.options(options); 647 648 this._init(); 649 this.create(); 650 }; 651 652 Plugin.fn = Plugin.prototype = $.extend( 653 {}, 654 jCarousel.base(pluginName), 655 pluginPrototype 656 ); 657 658 $.fn[pluginName] = function(options) { 659 var args = Array.prototype.slice.call(arguments, 1), 660 returnValue = this; 661 662 if (typeof options === 'string') { 663 this.each(function() { 664 var instance = $(this).data(pluginName); 665 666 if (!instance) { 667 return $.error( 668 'Cannot call methods on ' + pluginName + ' prior to initialization; ' + 669 'attempted to call method "' + options + '"' 670 ); 671 } 672 673 if (!$.isFunction(instance[options]) || options.charAt(0) === '_') { 674 return $.error(
675 'No such method "' + options + '" for ' + pluginName + ' instance' 676 ); 677 } 678 679 var methodValue = instance[options].apply(instance, args); 680 681 if (methodValue !== instance && typeof methodValue !== 'undefined') { 682 returnValue = methodValue; 683 return false; 684 } 685 }); 686 } else { 687 this.each(function() { 688 var instance = $(this).data(pluginName); 689 690 if (instance instanceof Plugin) { 691 instance.reload(options); 692 } else { 693 new Plugin(this, options); 694 } 695 }); 696 } 697 698 return returnValue; 699 }; 700 701 return Plugin; 702 }; 703}(jQuery)); 704 705(function($, window) { 706 'use strict'; 707 708 var toFloat = function(val) { 709 return parseFloat(val) || 0; 710 }; 711 712 $.jCarousel.plugin('jcarousel', { 713 animating: false, 714 tail: 0, 715 inTail: false, 716 resizeTimer: null, 717 lt: null, 718 vertical: false, 719 rtl: false, 720 circular: false, 721 underflow: false, 722 relative: false, 723 724 _options: { 725 list: function() { 726 return this.element().children().eq(0); 727 }, 728 items: function() { 729 return this.list().children(); 730 }, 731 animation: 400, 732 transitions: false, 733 wrap: null, 734 vertical: null, 735 rtl: null, 736 center: false 737 }, 738 739 // Protected, don't access directly 740 _list: null, 741 _items: null, 742 _target: null, 743 _first: null, 744 _last: null, 745 _visible: null, 746 _fullyvisible: null, 747 _init: function() { 748 var self = this; 749 750 this.onWindowResize = function() { 751 if (self.resizeTimer) { 752 clearTimeout(self.resizeTimer); 753 } 754 755 self.resizeTimer = setTimeout(function() { 756 self.reload(); 757 }, 100); 758 }; 759 760 return this; 761 }, 762 _create: function() { 763 this._reload(); 764 765 $(window).on('resize.jcarousel', this.onWindowResize); 766 }, 767 _destroy: function() { 768 $(window).off('resize.jcarousel', this.onWindowResize); 769 }, 770 _reload: function() { 771 this.vertical = this.options('vertical'); 772 773 if (this.vertical == null) { 774 this.vertical = this.list().height() > this.list().width(); 775 } 776 777 this.rtl = this.options('rtl'); 778 779 if (this.rtl == null) { 780 this.rtl = (function(element) { 781 if (('' + element.attr('dir')).toLowerCase() === 'rtl') { 782 return true; 783 } 784 785 var found = false; 786 787 element.parents('[dir]').each(function() { 788 if ((/rtl/i).test($(this).attr('dir'))) { 789 found = true; 790 return false; 791 } 792 }); 793 794 return found; 795 }(this._element)); 796 } 797 798 this.lt = this.vertical ? 'top' : 'left'; 799 800 // Ensure before closest() call 801 this.relative = this.list().css('position') === 'relative'; 802 803 // Force list and items reload 804 this._list = null; 805 this._items = null; 806 807 var item = this._target && this.index(this._target) >= 0 ? 808 this._target : 809 this.closest(); 810 811 // _prepare() needs this here 812 this.circular = this.options('wrap') === 'circular'; 813 this.underflow = false; 814 815 var props = {'left': 0, 'top': 0}; 816 817 if (item.length > 0) { 818 this._prepare(item); 819 this.list().find('[data-jcarousel-clone]').remove(); 820 821 // Force items reload 822 this._items = null; 823 824 this.underflow = this._fullyvisible.length >= this.items().length; 825 this.circular = this.circular && !this.underflow; 826 827 props[this.lt] = this._position(item) + 'px'; 828 } 829 830 this.move(props); 831 832 return this; 833 }, 834 list: function() { 835 if (this._list === null) { 836 var option = this.options('list'); 837 this._list = $.isFunction(option) ? option.call(this) : this._element.find(option); 838 } 839 840 return this._list; 841 }, 842 items: function() { 843 if (this._items === null) { 844 var option = this.options('items'); 845 this._items = ($.isFunction(option) ? option.call(this) : this.list().find(option)).not('[data-jcarousel-clone]'); 846 } 847 848 return this._items; 849 }, 850 index: function(item) { 851 return this.items().index(item); 852 }, 853 closest: function() { 854 var self = this, 855 pos = this.list().position()[this.lt], 856 closest = $(), // Ensure we're returning a jQuery instance 857 stop = false, 858 lrb = this.vertical ? 'bottom' : (this.rtl && !this.relative ? 'left' : 'right'), 859 width; 860 861 if (this.rtl && this.relative && !this.vertical) { 862 pos += this.list().width() - this.clipping(); 863 } 864 865 this.items().each(function() { 866 closest = $(this); 867 868 if (stop) { 869 return false; 870 } 871 872 var dim = self.dimension(closest); 873 874 pos += dim; 875 876 if (pos >= 0) { 877 width = dim - toFloat(closest.css('margin-' + lrb)); 878 879 if ((Math.abs(pos) - dim + (width / 2)) <= 0) { 880 stop = true; 881 } else { 882 return false; 883 } 884 } 885 }); 886 887 888 return closest; 889 }, 890 target: function() { 891 return this._target; 892 }, 893 first: function() { 894 return this._first; 895 }, 896 last: function() { 897 return this._last; 898 }, 899 visible: function() { 900 return this._visible; 901 }, 902 fullyvisible: function() { 903 return this._fullyvisible; 904 }, 905 hasNext: function() { 906 if (false === this._trigger('hasnext')) { 907 return true; 908 } 909 910 var wrap = this.options('wrap'), 911 end = this.items().length - 1; 912 913 return end >= 0 && !this.underflow && 914 ((wrap && wrap !== 'first') || 915 (this.index(this._last) < end) || 916 (this.tail && !this.inTail)) ? true : false; 917 }, 918 hasPrev: function() { 919 if (false === this._trigger('hasprev')) { 920 return true; 921 } 922 923 var wrap = this.options('wrap'); 924 925 return this.items().length > 0 && !this.underflow && 926 ((wrap && wrap !== 'last') || 927 (this.index(this._first) > 0) || 928 (this.tail && this.inTail)) ? true : false; 929 }, 930 clipping: function() { 931 return this._element['inner' + (this.vertical ? 'Height' : 'Width')](); 932 }, 933 dimension: function(element) { 934 return element['outer' + (this.vertical ? 'Height' : 'Width')](true); 935 }, 936 scroll: function(target, animate, callback) { 937 if (this.animating) { 938 return this; 939 } 940 941 if (false === this._trigger('scroll', null, [target, animate])) { 942 return this; 943 } 944 945 if ($.isFunction(animate)) { 946 callback = animate; 947 animate = true; 948 } 949
950 var parsed = $.jCarousel.parseTarget(target); 951 952 if (parsed.relative) { 953 var end = this.items().length - 1, 954 scroll = Math.abs(parsed.target), 955 wrap = this.options('wrap'), 956 current, 957 first, 958 index, 959 start, 960 curr, 961 isVisible, 962 props, 963 i; 964 965 if (parsed.target > 0) { 966 var last = this.index(this._last); 967 968 if (last >= end && this.tail) { 969 if (!this.inTail) { 970 this._scrollTail(animate, callback); 971 } else { 972 if (wrap === 'both' || wrap === 'last') { 973 this._scroll(0, animate, callback); 974 } else { 975 if ($.isFunction(callback)) { 976 callback.call(this, false); 977 } 978 } 979 } 980 } else { 981 current = this.index(this._target); 982 983 if ((this.underflow && current === end && (wrap === 'circular' || wrap === 'both' || wrap === 'last')) || 984 (!this.underflow && last === end && (wrap === 'both' || wrap === 'last'))) { 985 this._scroll(0, animate, callback); 986 } else { 987 index = current + scroll; 988 989 if (this.circular && index > end) { 990 i = end; 991 curr = this.items().get(-1); 992 993 while (i++ < index) { 994 curr = this.items().eq(0); 995 isVisible = this._visible.index(curr) >= 0; 996 997 if (isVisible) { 998 curr.after(curr.clone(true).attr('data-jcarousel-clone', true)); 999 } 1000 1001 this.list().append(curr); 1002 1003 if (!isVisible) { 1004 props = {}; 1005 props[this.lt] = this.dimension(curr); 1006 this.moveBy(props); 1007 } 1008 1009 // Force items reload 1010 this._items = null; 1011 } 1012 1013 this._scroll(curr, animate, callback); 1014 } else { 1015 this._scroll(Math.min(index, end), animate, callback); 1016 } 1017 } 1018 } 1019 } else { 1020 if (this.inTail) { 1021 this._scroll(Math.max((this.index(this._first) - scroll) + 1, 0), animate, callback); 1022 } else { 1023 first = this.index(this._first); 1024 current = this.index(this._target); 1025 start = this.underflow ? current : first; 1026 index = start - scroll; 1027 1028 if (start <= 0 && ((this.underflow && wrap === 'circular') || wrap === 'both' || wrap === 'first')) { 1029 this._scroll(end, animate, callback); 1030 } else { 1031 if (this.circular && index < 0) { 1032 i = index; 1033 curr = this.items().get(0); 1034 1035 while (i++ < 0) { 1036 curr = this.items().eq(-1); 1037 isVisible = this._visible.index(curr) >= 0; 1038 1039 if (isVisible) { 1040 curr.after(curr.clone(true).attr('data-jcarousel-clone', true)); 1041 } 1042 1043 this.list().prepend(curr); 1044 1045 // Force items reload 1046 this._items = null; 1047 1048 var dim = this.dimension(curr); 1049 1050 props = {}; 1051 props[this.lt] = -dim; 1052 this.moveBy(props); 1053 1054 } 1055 1056 this._scroll(curr, animate, callback); 1057 } else { 1058 this._scroll(Math.max(index, 0), animate, callback); 1059 } 1060 } 1061 } 1062 } 1063 } else { 1064 this._scroll(parsed.target, animate, callback); 1065 } 1066 1067 this._trigger('scrollend'); 1068 1069 return this; 1070 }, 1071 moveBy: function(properties, opts) { 1072 var position = this.list().position(), 1073 multiplier = 1, 1074 correction = 0; 1075 1076 if (this.rtl && !this.vertical) { 1077 multiplier = -1; 1078 1079 if (this.relative) { 1080 correction = this.list().width() - this.clipping(); 1081 } 1082 } 1083 1084 if (properties.left) { 1085 properties.left = (position.left + correction + toFloat(properties.left) * multiplier) + 'px'; 1086 } 1087 1088 if (properties.top) { 1089 properties.top = (position.top + correction + toFloat(properties.top) * multiplier) + 'px'; 1090 } 1091 1092 return this.move(properties, opts); 1093 }, 1094 move: function(properties, opts) { 1095 opts = opts || {}; 1096 1097 var option = this.options('transitions'), 1098 transitions = !!option, 1099 transforms = !!option.transforms, 1100 transforms3d = !!option.transforms3d, 1101 duration = opts.duration || 0, 1102 list = this.list(); 1103 1104 if (!transitions && duration > 0) { 1105 list.animate(properties, opts); 1106 return; 1107 } 1108
1109 var complete = opts.complete || $.noop, 1110 css = {}; 1111 1112 if (transitions) { 1113 var backup = list.css(['transitionDuration', 'transitionTimingFunction', 'transitionProperty']), 1114 oldComplete = complete; 1115 1116 complete = function() { 1117 $(this).css(backup); 1118 oldComplete.call(this); 1119 }; 1120 css = { 1121 transitionDuration: (duration > 0 ? duration / 1000 : 0) + 's', 1122 transitionTimingFunction: option.easing || opts.easing, 1123 transitionProperty: duration > 0 ? (function() { 1124 if (transforms || transforms3d) { 1125 // We have to use 'all' because jQuery doesn't prefix 1126 // css values, like transition-property: transform; 1127 return 'all'; 1128 } 1129 1130 return properties.left ? 'left' : 'top'; 1131 })() : 'none', 1132 transform: 'none' 1133 }; 1134 } 1135 1136 if (transforms3d) { 1137 css.transform = 'translate3d(' + (properties.left || 0) + ',' + (properties.top || 0) + ',0)'; 1138 } else if (transforms) { 1139 css.transform = 'translate(' + (properties.left || 0) + ',' + (properties.top || 0) + ')'; 1140 } else { 1141 $.extend(css, properties); 1142 } 1143 1144 if (transitions && duration > 0) { 1145 list.one('transitionend webkitTransitionEnd oTransitionEnd otransitionend MSTransitionEnd', complete); 1146 } 1147 1148 list.css(css); 1149 1150 if (duration <= 0) { 1151 list.each(function() { 1152 complete.call(this); 1153 }); 1154 } 1155 }, 1156 _scroll: function(item, animate, callback) { 1157 if (this.animating) { 1158 if ($.isFunction(callback)) { 1159 callback.call(this, false); 1160 } 1161 1162 return this; 1163 } 1164 1165 if (typeof item !== 'object') { 1166 item = this.items().eq(item); 1167 } else if (typeof item.jquery === 'undefined') { 1168 item = $(item); 1169 } 1170 1171 if (item.length === 0) { 1172 if ($.isFunction(callback)) { 1173 callback.call(this, false); 1174 } 1175 1176 return this; 1177 } 1178 1179 this.inTail = false; 1180 1181 this._prepare(item); 1182 1183 var pos = this._position(item), 1184 currPos = this.list().position()[this.lt]; 1185 1186 if (pos === currPos) { 1187 if ($.isFunction(callback)) { 1188 callback.call(this, false); 1189 } 1190 1191 return this; 1192 } 1193 1194 var properties = {}; 1195 properties[this.lt] = pos + 'px'; 1196 1197 this._animate(properties, animate, callback); 1198 1199 return this; 1200 }, 1201 _scrollTail: function(animate, callback) { 1202 if (this.animating || !this.tail) { 1203 if ($.isFunction(callback)) { 1204 callback.call(this, false); 1205 } 1206 1207 return this; 1208 } 1209 1210 var pos = this.list().position()[this.lt]; 1211 1212 if (this.rtl && this.relative && !this.vertical) { 1213 pos += this.list().width() - this.clipping(); 1214 } 1215 1216 if (this.rtl && !this.vertical) { 1217 pos += this.tail; 1218 } else { 1219 pos -= this.tail; 1220 } 1221 1222 this.inTail = true; 1223 1224 var properties = {}; 1225 properties[this.lt] = pos + 'px'; 1226 1227 this._update({ 1228 target: this._target.next(), 1229 fullyvisible: this._fullyvisible.slice(1).add(this._visible.last()) 1230 }); 1231 1232 this._animate(properties, animate, callback); 1233 1234 return this; 1235 }, 1236 _animate: function(properties, animate, callback) { 1237 callback = callback || $.noop; 1238 1239 if (false === this._trigger('animate')) { 1240 callback.call(this, false); 1241 return this; 1242 } 1243 1244 this.animating = true; 1245 1246 var animation = this.options('animation'), 1247 complete = $.proxy(function() { 1248 this.animating = false; 1249 1250 var c = this.list().find('[data-jcarousel-clone]'); 1251 1252 if (c.length > 0) { 1253 c.remove(); 1254 this._reload(); 1255 } 1256 1257 this._trigger('animateend'); 1258 1259 callback.call(this, true); 1260 }, this); 1261 1262 var opts = typeof animation === 'object' ? 1263 $.extend({}, animation) : 1264 {duration: animation},
1265 oldComplete = opts.complete || $.noop; 1266 1267 if (animate === false) { 1268 opts.duration = 0; 1269 } else if (typeof $.fx.speeds[opts.duration] !== 'undefined') { 1270 opts.duration = $.fx.speeds[opts.duration]; 1271 } 1272 1273 opts.complete = function() { 1274 complete(); 1275 oldComplete.call(this); 1276 }; 1277 1278 this.move(properties, opts); 1279 1280 return this; 1281 }, 1282 _prepare: function(item) { 1283 var index = this.index(item), 1284 idx = index, 1285 wh = this.dimension(item), 1286 clip = this.clipping(), 1287 lrb = this.vertical ? 'bottom' : (this.rtl ? 'left' : 'right'), 1288 center = this.options('center'), 1289 update = { 1290 target: item, 1291 first: item, 1292 last: item, 1293 visible: item, 1294 fullyvisible: wh <= clip ? item : $() 1295 }, 1296 curr, 1297 isVisible, 1298 margin, 1299 dim; 1300 1301 if (center) { 1302 wh /= 2; 1303 clip /= 2; 1304 } 1305 1306 if (wh < clip) { 1307 while (true) { 1308 curr = this.items().eq(++idx); 1309 1310 if (curr.length === 0) { 1311 if (!this.circular) { 1312 break; 1313 } 1314 1315 curr = this.items().eq(0); 1316 1317 if (item.get(0) === curr.get(0)) { 1318 break; 1319 } 1320 1321 isVisible = this._visible.index(curr) >= 0; 1322 1323 if (isVisible) { 1324 curr.after(curr.clone(true).attr('data-jcarousel-clone', true)); 1325 } 1326 1327 this.list().append(curr); 1328 1329 if (!isVisible) { 1330 var props = {}; 1331 props[this.lt] = this.dimension(curr); 1332 this.moveBy(props); 1333 } 1334 1335 // Force items reload 1336 this._items = null; 1337 } 1338 1339 dim = this.dimension(curr); 1340 1341 if (dim === 0) { 1342 break; 1343 } 1344 1345 wh += dim; 1346 1347 update.last = curr; 1348 update.visible = update.visible.add(curr); 1349 1350 // Remove right/bottom margin from total width 1351 margin = toFloat(curr.css('margin-' + lrb)); 1352 1353 if ((wh - margin) <= clip) { 1354 update.fullyvisible = update.fullyvisible.add(curr); 1355 } 1356 1357 if (wh >= clip) { 1358 break; 1359 } 1360 } 1361 } 1362 1363 if (!this.circular && !center && wh < clip) { 1364 idx = index; 1365 1366 while (true) { 1367 if (--idx < 0) { 1368 break; 1369 } 1370 1371 curr = this.items().eq(idx); 1372 1373 if (curr.length === 0) { 1374 break; 1375 } 1376 1377 dim = this.dimension(curr); 1378 1379 if (dim === 0) { 1380 break; 1381 } 1382 1383 wh += dim; 1384 1385 update.first = curr; 1386 update.visible = update.visible.add(curr); 1387 1388 // Remove right/bottom margin from total width 1389 margin = toFloat(curr.css('margin-' + lrb)); 1390 1391 if ((wh - margin) <= clip) { 1392 update.fullyvisible = update.fullyvisible.add(curr); 1393 } 1394 1395 if (wh >= clip) { 1396 break; 1397 } 1398 } 1399 } 1400 1401 this._update(update); 1402 1403 this.tail = 0; 1404 1405 if (!center && 1406 this.options('wrap') !== 'circular' && 1407 this.options('wrap') !== 'custom' && 1408 this.index(update.last) === (this.items().length - 1)) { 1409 1410 // Remove right/bottom margin from total width 1411 wh -= toFloat(update.last.css('margin-' + lrb)); 1412 1413 if (wh > clip) { 1414 this.tail = wh - clip; 1415 } 1416 } 1417 1418 return this; 1419 }, 1420 _position: function(item) { 1421 var first = this._first, 1422 pos = first.position()[this.lt], 1423 center = this.options('center'), 1424 centerOffset = center ? (this.clipping() / 2) - (this.dimension(first) / 2) : 0; 1425 1426 if (this.rtl && !this.vertical) { 1427 if (this.relative) { 1428 pos -= this.list().width() - this.dimension(first); 1429 } else { 1430 pos -= this.clipping() - this.dimension(first); 1431 } 1432 1433 pos += centerOffset; 1434 } else { 1435 pos -= centerOffset; 1436 } 1437 1438 if (!center && 1439 (this.index(item) > this.index(first) || this.inTail) && 1440 this.tail) { 1441 pos = this.rtl && !this.vertical ? pos - this.tail : pos + this.tail; 1442 this.inTail = true; 1443 } else { 1444 this.inTail = false; 1445 } 1446 1447 return -pos; 1448 }, 1449 _update: function(update) { 1450 var self = this, 1451 current = { 1452 target: this._target || $(), 1453 first: this._first || $(), 1454 last: this._last || $(), 1455 visible: this._visible || $(), 1456 fullyvisible: this._fullyvisible || $() 1457 }, 1458 back = this.index(update.first || current.first) < this.index(current.first), 1459 key, 1460 doUpdate = function(key) { 1461 var elIn = [], 1462 elOut = []; 1463 1464 update[key].each(function() {
1465 if (current[key].index(this) < 0) { 1466 elIn.push(this); 1467 } 1468 }); 1469 1470 current[key].each(function() { 1471 if (update[key].index(this) < 0) { 1472 elOut.push(this); 1473 } 1474 }); 1475 1476 if (back) { 1477 elIn = elIn.reverse(); 1478 } else { 1479 elOut = elOut.reverse(); 1480 } 1481 1482 self._trigger(key + 'in', $(elIn)); 1483 self._trigger(key + 'out', $(elOut)); 1484 1485 self['_' + key] = update[key]; 1486 }; 1487 1488 for (key in update) { 1489 doUpdate(key); 1490 } 1491 1492 return this; 1493 } 1494 }); 1495}(jQuery, window)); 1496 1497(function($) { 1498 'use strict'; 1499 1500 $.jcarousel.fn.scrollIntoView = function(target, animate, callback) { 1501 var parsed = $.jCarousel.parseTarget(target), 1502 first = this.index(this._fullyvisible.first()), 1503 last = this.index(this._fullyvisible.last()), 1504 index; 1505 1506 if (parsed.relative) { 1507 index = parsed.target < 0 ? Math.max(0, first + parsed.target) : last + parsed.target; 1508 } else { 1509 index = typeof parsed.target !== 'object' ? parsed.target : this.index(parsed.target); 1510 } 1511 1512 if (index < first) { 1513 return this.scroll(index, animate, callback); 1514 } 1515 1516 if (index >= first && index <= last) { 1517 if ($.isFunction(callback)) { 1518 callback.call(this, false); 1519 } 1520 1521 return this; 1522 } 1523 1524 var items = this.items(), 1525 clip = this.clipping(), 1526 lrb = this.vertical ? 'bottom' : (this.rtl ? 'left' : 'right'), 1527 wh = 0, 1528 curr; 1529 1530 while (true) { 1531 curr = items.eq(index); 1532 1533 if (curr.length === 0) { 1534 break; 1535 } 1536 1537 wh += this.dimension(curr); 1538 1539 if (wh >= clip) { 1540 var margin = parseFloat(curr.css('margin-' + lrb)) || 0; 1541 if ((wh - margin) !== clip) { 1542 index++; 1543 } 1544 break; 1545 } 1546 1547 if (index <= 0) { 1548 break; 1549 } 1550 1551 index--; 1552 } 1553 1554 return this.scroll(index, animate, callback); 1555 }; 1556}(jQuery)); 1557 1558(function($) { 1559 'use strict'; 1560 1561 $.jCarousel.plugin('jcarouselControl', { 1562 _options: { 1563 target: '+=1', 1564 event: 'click', 1565 method: 'scroll' 1566 }, 1567 _active: null, 1568 _init: function() { 1569 this.onDestroy = $.proxy(function() { 1570 this._destroy(); 1571 this.carousel() 1572 .one('jcarousel:createend', $.proxy(this._create, this)); 1573 }, this); 1574 this.onReload = $.proxy(this._reload, this); 1575 this.onEvent = $.proxy(function(e) { 1576 e.preventDefault(); 1577 1578 var method = this.options('method'); 1579 1580 if ($.isFunction(method)) { 1581 method.call(this); 1582 } else { 1583 this.carousel() 1584 .jcarousel(this.options('method'), this.options('target')); 1585 } 1586 }, this); 1587 }, 1588 _create: function() { 1589 this.carousel() 1590 .one('jcarousel:destroy', this.onDestroy) 1591 .on('jcarousel:reloadend jcarousel:scrollend', this.onReload); 1592 1593 this._element 1594 .on(this.options('event') + '.jcarouselcontrol', this.onEvent); 1595 1596 this._reload(); 1597 }, 1598 _destroy: function() { 1599 this._element 1600 .off('.jcarouselcontrol', this.onEvent); 1601 1602 this.carousel() 1603 .off('jcarousel:destroy', this.onDestroy) 1604 .off('jcarousel:reloadend jcarousel:scrollend', this.onReload); 1605 }, 1606 _reload: function() {
1607 var parsed = $.jCarousel.parseTarget(this.options('target')), 1608 carousel = this.carousel(), 1609 active; 1610 1611 if (parsed.relative) { 1612 active = carousel 1613 .jcarousel(parsed.target > 0 ? 'hasNext' : 'hasPrev'); 1614 } else { 1615 var target = typeof parsed.target !== 'object' ? 1616 carousel.jcarousel('items').eq(parsed.target) : 1617 parsed.target; 1618 1619 active = carousel.jcarousel('target').index(target) >= 0; 1620 } 1621 1622 if (this._active !== active) { 1623 this._trigger(active ? 'active' : 'inactive'); 1624 this._active = active; 1625 } 1626 1627 return this; 1628 } 1629 }); 1630}(jQuery)); 1631 1632(function($) { 1633 'use strict'; 1634 1635 $.jCarousel.plugin('jcarouselPagination', { 1636 _options: { 1637 perPage: null, 1638 item: function(page) { 1639 return '<a href="#' + page + '">' + page + '</a>'; 1640 }, 1641 event: 'click', 1642 method: 'scroll' 1643 }, 1644 _carouselItems: null, 1645 _pages: {}, 1646 _items: {}, 1647 _currentPage: null, 1648 _init: function() { 1649 this.onDestroy = $.proxy(function() { 1650 this._destroy(); 1651 this.carousel() 1652 .one('jcarousel:createend', $.proxy(this._create, this)); 1653 }, this); 1654 this.onReload = $.proxy(this._reload, this); 1655 this.onScroll = $.proxy(this._update, this); 1656 }, 1657 _create: function() { 1658 this.carousel() 1659 .one('jcarousel:destroy', this.onDestroy) 1660 .on('jcarousel:reloadend', this.onReload) 1661 .on('jcarousel:scrollend', this.onScroll); 1662 1663 this._reload(); 1664 }, 1665 _destroy: function() { 1666 this._clear(); 1667 1668 this.carousel() 1669 .off('jcarousel:destroy', this.onDestroy) 1670 .off('jcarousel:reloadend', this.onReload) 1671 .off('jcarousel:scrollend', this.onScroll); 1672 1673 this._carouselItems = null; 1674 }, 1675 _reload: function() { 1676 var perPage = this.options('perPage'); 1677 1678 this._pages = {}; 1679 this._items = {}; 1680 1681 // Calculate pages 1682 if ($.isFunction(perPage)) { 1683 perPage = perPage.call(this); 1684 } 1685 1686 if (perPage == null) { 1687 this._pages = this._calculatePages(); 1688 } else { 1689 var pp = parseInt(perPage, 10) || 0, 1690 items = this._getCarouselItems(), 1691 page = 1, 1692 i = 0, 1693 curr; 1694 1695 while (true) { 1696 curr = items.eq(i++); 1697 1698 if (curr.length === 0) { 1699 break; 1700 } 1701 1702 if (!this._pages[page]) { 1703 this._pages[page] = curr; 1704 } else { 1705 this._pages[page] = this._pages[page].add(curr); 1706 } 1707 1708 if (i % pp === 0) { 1709 page++; 1710 } 1711 } 1712 } 1713 1714 this._clear(); 1715 1716 var self = this, 1717 carousel = this.carousel().data('jcarousel'), 1718 element = this._element, 1719 item = this.options('item'), 1720 numCarouselItems = this._getCarouselItems().length; 1721 1722 $.each(this._pages, function(page, carouselItems) { 1723 var currItem = self._items[page] = $(item.call(self, page, carouselItems)); 1724 1725 currItem.on(self.options('event') + '.jcarouselpagination', $.proxy(function() { 1726 var target = carouselItems.eq(0); 1727 1728 // If circular wrapping enabled, ensure correct scrolling direction 1729 if (carousel.circular) { 1730 var currentIndex = carousel.index(carousel.target()), 1731 newIndex = carousel.index(target); 1732 1733 if (parseFloat(page) > parseFloat(self._currentPage)) { 1734 if (newIndex < currentIndex) { 1735 target = '+=' + (numCarouselItems - currentIndex + newIndex); 1736 } 1737 } else { 1738 if (newIndex > currentIndex) { 1739 target = '-=' + (currentIndex + (numCarouselItems - newIndex)); 1740 } 1741 } 1742 } 1743 1744 carousel[this.options('method')](target); 1745 }, self));
1746 1747 element.append(currItem); 1748 }); 1749 1750 this._update(); 1751 }, 1752 _update: function() { 1753 var target = this.carousel().jcarousel('target'), 1754 currentPage; 1755 1756 $.each(this._pages, function(page, carouselItems) { 1757 carouselItems.each(function() { 1758 if (target.is(this)) { 1759 currentPage = page; 1760 return false; 1761 } 1762 }); 1763 1764 if (currentPage) { 1765 return false; 1766 } 1767 }); 1768 1769 if (this._currentPage !== currentPage) { 1770 this._trigger('inactive', this._items[this._currentPage]); 1771 this._trigger('active', this._items[currentPage]); 1772 } 1773 1774 this._currentPage = currentPage; 1775 }, 1776 items: function() { 1777 return this._items; 1778 }, 1779 reloadCarouselItems: function() { 1780 this._carouselItems = null; 1781 return this; 1782 }, 1783 _clear: function() { 1784 this._element.empty(); 1785 this._currentPage = null; 1786 }, 1787 _calculatePages: function() { 1788 var carousel = this.carousel().data('jcarousel'), 1789 items = this._getCarouselItems(), 1790 clip = carousel.clipping(), 1791 wh = 0, 1792 idx = 0, 1793 page = 1, 1794 pages = {}, 1795 curr; 1796 1797 while (true) { 1798 curr = items.eq(idx++); 1799 1800 if (curr.length === 0) { 1801 break; 1802 } 1803 1804 if (!pages[page]) { 1805 pages[page] = curr; 1806 } else { 1807 pages[page] = pages[page].add(curr); 1808 } 1809 1810 wh += carousel.dimension(curr); 1811 1812 if (wh >= clip) { 1813 page++; 1814 wh = 0; 1815 } 1816 } 1817 1818 return pages; 1819 }, 1820 _getCarouselItems: function() { 1821 if (!this._carouselItems) { 1822 this._carouselItems = this.carousel().jcarousel('items'); 1823 } 1824 1825 return this._carouselItems; 1826 } 1827 }); 1828}(jQuery)); 1829 1830(function($) { 1831 'use strict'; 1832 1833 $.jCarousel.plugin('jcarouselAutoscroll', { 1834 _options: { 1835 target: '+=1', 1836 interval: 3000, 1837 autostart: true 1838 }, 1839 _timer: null, 1840 _init: function () { 1841 this.onDestroy = $.proxy(function() { 1842 this._destroy(); 1843 this.carousel() 1844 .one('jcarousel:createend', $.proxy(this._create, this)); 1845 }, this); 1846 1847 this.onAnimateEnd = $.proxy(this.start, this); 1848 }, 1849 _create: function() { 1850 this.carousel() 1851 .one('jcarousel:destroy', this.onDestroy); 1852 1853 if (this.options('autostart')) { 1854 this.start(); 1855 } 1856 }, 1857 _destroy: function() { 1858 this.stop(); 1859 this.carousel() 1860 .off('jcarousel:destroy', this.onDestroy); 1861 }, 1862 start: function() { 1863 this.stop(); 1864 1865 this.carousel() 1866 .one('jcarousel:animateend', this.onAnimateEnd); 1867 1868 this._timer = setTimeout($.proxy(function() { 1869 this.carousel().jcarousel('scroll', this.options('target')); 1870 }, this), this.options('interval')); 1871 1872 return this; 1873 }, 1874 stop: function() { 1875 if (this._timer) { 1876 this._timer = clearTimeout(this._timer); 1877 } 1878 1879 this.carousel() 1880 .off('jcarousel:animateend', this.onAnimateEnd); 1881 1882 return this; 1883 } 1884 }); 1885}(jQuery)); 1886 1887 1888/*! picturefill - v3.0.2 - 2016-02-12 1889 * https://scottjehl.github.io/picturefill/ 1890 * Copyright (c) 2016 https://github.com/scottjehl/picturefill/blob/master/Authors.txt; Licensed MIT 1891 */�
vendor: 11,621 bytes, lines 1891-1892
1891 1892!function(a){var b=navigator.userAgent;a.HTMLPictureElement&&/ecko/.test(b)&&b.match(/rv\:(\d+)/)&&RegExp.$1<45&&addEventListener("resize",function(){var b,c=document.createElement("source"),d=function(a){var b,d,e=a.parentNode;"PICTURE"===e.nodeName.toUpperCase()?(b=c.cloneNode(),e.insertBefore(b,e.firstElementChild),setTimeout(function(){e.removeChild(b)})):(!a._pfLastSize||a.offsetWidth>a._pfLastSize)&&(a._pfLastSize=a.offsetWidth,d=a.sizes,a.sizes+=",100vw",setTimeout(function(){a.sizes=d}))},e=function(){var a,b=document.querySelectorAll("picture > img, img[srcset][sizes]");for(a=0;a<b.length;a++)d(b[a])},f=function(){clearTimeout(b),b=setTimeout(e,99)},g=a.matchMedia&&matchMedia("(orientation: landscape)"),h=function(){f(),g&&g.addListener&&g.addListener(f)};return c.srcset="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",/^[c|i]|d$/.test(document.readyState||"")?h():document.addEventListener("DOMContentLoaded",h),f}())}(window),function(a,b,c){"use strict";function d(a){return" "===a||" "===a||"\n"===a||"\f"===a||"\r"===a}function e(b,c){var d=new a.Image;return d.onerror=function(){A[b]=!1,ba()},d.onload=function(){A[b]=1===d.width,ba()},d.src=c,"pending"}function f(){M=!1,P=a.devicePixelRatio,N={},O={},s.DPR=P||1,Q.width=Math.max(a.innerWidth||0,z.clientWidth),Q.height=Math.max(a.innerHeight||0,z.clientHeight),Q.vw=Q.width/100,Q.vh=Q.height/100,r=[Q.height,Q.width,P].join("-"),Q.em=s.getEmValue(),Q.rem=Q.em}function g(a,b,c,d){var e,f,g,h;return"saveData"===B.algorithm?a>2.7?h=c+1:(f=b-c,e=Math.pow(a-.6,1.5),g=f*e,d&&(g+=.1*e),h=a+g):h=c>1?Math.sqrt(a*b):a,h>c}function h(a){var b,c=s.getSet(a),d=!1;"pending"!==c&&(d=r,c&&(b=s.setRes(c),s.applySetCandidate(b,a))),a[s.ns].evaled=d}function i(a,b){return a.res-b.res}function j(a,b,c){var d;return!c&&b&&(c=a[s.ns].sets,c=c&&c[c.length-1]),d=k(b,c),d&&(b=s.makeUrl(b),a[s.ns].curSrc=b,a[s.ns].curCan=d,d.res||aa(d,d.set.sizes)),d}function k(a,b){var c,d,e;if(a&&b)for(e=s.parseSet(b),a=s.makeUrl(a),c=0;c<e.length;c++)if(a===s.makeUrl(e[c].url)){d=e[c];break}return d}function l(a,b){var c,d,e,f,g=a.getElementsByTagName("source");for(c=0,d=g.length;d>c;c++)e=g[c],e[s.ns]=!0,f=e.getAttribute("srcset"),f&&b.push({srcset:f,media:e.getAttribute("media"),type:e.getAttribute("type"),sizes:e.getAttribute("sizes")})}function m(a,b){function c(b){var c,d=b.exec(a.substring(m));return d?(c=d[0],m+=c.length,c):void 0}function e(){var a,c,d,e,f,i,j,k,l,m=!1,o={};for(e=0;e<h.length;e++)f=h[e],i=f[f.length-1],j=f.substring(0,f.length-1),k=parseInt(j,10),l=parseFloat(j),X.test(j)&&"w"===i?((a||c)&&(m=!0),0===k?m=!0:a=k):Y.test(j)&&"x"===i?((a||c||d)&&(m=!0),0>l?m=!0:c=l):X.test(j)&&"h"===i?((d||c)&&(m=!0),0===k?m=!0:d=k):m=!0;m||(o.url=g,a&&(o.w=a),c&&(o.d=c),d&&(o.h=d),d||c||a||(o.d=1),1===o.d&&(b.has1x=!0),o.set=b,n.push(o))}function f(){for(c(T),i="",j="in descriptor";;){if(k=a.charAt(m),"in descriptor"===j)if(d(k))i&&(h.push(i),i="",j="after descriptor");else{if(","===k)return m+=1,i&&h.push(i),void e();if("("===k)i+=k,j="in parens";else{if(""===k)return i&&h.push(i),void e();i+=k}}else if("in parens"===j)if(")"===k)i+=k,j="in descriptor";else{if(""===k)return h.push(i),void e();i+=k}else if("after descriptor"===j)if(d(k));else{if(""===k)return void e();j="in descriptor",m-=1}m+=1}}for(var g,h,i,j,k,l=a.length,m=0,n=[];;){if(c(U),m>=l)return n;g=c(V),h=[],","===g.slice(-1)?(g=g.replace(W,""),e()):f()}}function n(a){function b(a){function b(){f&&(g.push(f),f="")}function c(){g[0]&&(h.push(g),g=[])}for(var e,f="",g=[],h=[],i=0,j=0,k=!1;;){if(e=a.charAt(j),""===e)return b(),c(),h;if(k){if("*"===e&&"/"===a[j+1]){k=!1,j+=2,b();continue}j+=1}else{if(d(e)){if(a.charAt(j-1)&&d(a.charAt(j-1))||!f){j+=1;continue}if(0===i){b(),j+=1;continue}e=" "}else if("("===e)i+=1;else if(")"===e)i-=1;else{if(","===e){b(),c(),j+=1;continue}if("/"===e&&"*"===a.charAt(j+1)){k=!0,j+=2;continue}}f+=e,j+=1}}}function c(a){return k.test(a)&&parseFloat(a)>=0?!0:l.test(a)?!0:"0"===a||"-0"===a||"+0"===a?!0:!1}var e,f,g,h,i,j,k=/^(?:[+-]?[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?(?:ch|cm|em|ex|in|mm|pc|pt|px|rem|vh|vmin|vmax|vw)$/i,l=/^calc\((?:[0-9a-z \.\+\-\*\/\(\)]+)\)$/i;for(f=b(a),g=f.length,e=0;g>e;e++)if(h=f[e],i=h[h.length-1],c(i)){if(j=i,h.pop(),0===h.length)return j;if(h=h.join(" "),s.matchesMedia(h))return j}return"100vw"}b.createElement("picture");var o,p,q,r,s={},t=!1,u=function(){},v=b.createElement("img"),w=v.getAttribute,x=v.setAttribute,y=v.removeAttribute,z=b.documentElement,A={},B={algorithm:""},C="data-pfsrc",D=C+"set",E=navigator.userAgent,F=/rident/.test(E)||/ecko/.test(E)&&E.match(/rv\:(\d+)/)&&RegExp.$1>35,G="currentSrc",H=/\s+\+?\d+(e\d+)?w/,I=/(\([^)]+\))?\s*(.+)/,J=a.picturefillCFG,K="position:absolute;left:0;visibility:hidden;display:block;padding:0;border:none;font-size:1em;width:1em;overflow:hidden;clip:rect(0px, 0px, 0px, 0px)",L="font-size:100%!important;",M=!0,N={},O={},P=a.devicePixelRatio,Q={px:1,"in":96},R=b.createElement("a"),S=!1,T=/^[ \t\n\r\u000c]+/,U=/^[, \t\n\r\u000c]+/,V=/^[^ \t\n\r\u000c]+/,W=/[,]+$/,X=/^\d+$/,Y=/^-?(?:[0-9]+|[0-9]*\.[0-9]+)(?:[eE][+-]?[0-9]+)?$/,Z=function(a,b,c,d){a.addEventListener?a.addEventListener(b,c,d||!1):a.attachEvent&&a.attachEvent("on"+b,c)},$=function(a){var b={};return function(c){return c in b||(b[c]=a(c)),b[c]}},_=function(){var a=/^([\d\.]+)(em|vw|px)$/,b=function(){for(var a=arguments,b=0,c=a[0];++b in a;)c=c.replace(a[b],a[++b]);return c},c=$(function(a){return"return "+b((a||"").toLowerCase(),/\band\b/g,"&&",/,/g,"||",/min-([a-z-\s]+):/g,"e.$1>=",/max-([a-z-\s]+):/g,"e.$1<=",/calc([^)]+)/g,"($1)",/(\d+[\.]*[\d]*)([a-z]+)/g,"($1 * e.$2)",/^(?!(e.[a-z]|[0-9\.&=|><\+\-\*\(\)\/])).*/gi,"")+";"});return function(b,d){var e;if(!(b in N))if(N[b]=!1,d&&(e=b.match(a)))N[b]=e[1]*Q[e[2]];else try{N[b]=new Function("e",c(b))(Q)}catch(f){}return N[b]}}(),aa=function(a,b){return a.w?(a.cWidth=s.calcListLength(b||"100vw"),a.res=a.w/a.cWidth):a.res=a.d,a},ba=function(a){if(t){var c,d,e,f=a||{};if(f.elements&&1===f.elements.nodeType&&("IMG"===f.elements.nodeName.toUpperCase()?f.elements=[f.elements]:(f.context=f.elements,f.elements=null)),c=f.elements||s.qsa(f.context||b,f.reevaluate||f.reselect?s.sel:s.selShort),e=c.length){for(s.setupRun(f),S=!0,d=0;e>d;d++)s.fillImg(c[d],f);s.teardownRun(f)}}};o=a.console&&console.warn?function(a){console.warn(a)}:u,G in v||(G="src"),A["image/jpeg"]=!0,A["image/gif"]=!0,A["image/png"]=!0,A["image/svg+xml"]=b.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#Image","1.1"),s.ns=("pf"+(new Date).getTime()).substr(0,9),s.supSrcset="srcset"in v,s.supSizes="sizes"in v,s.supPicture=!!a.HTMLPictureElement,s.supSrcset&&s.supPicture&&!s.supSizes&&!function(a){v.srcset="data:,a",a.src="data:,a",s.supSrcset=v.complete===a.complete,s.supPicture=s.supSrcset&&s.supPicture}(b.createElement("img")),s.supSrcset&&!s.supSizes?!function(){var a="data:image/gif;base64,R0lGODlhAgABAPAAAP///wAAACH5BAAAAAAALAAAAAACAAEAAAICBAoAOw==",c="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",d=b.createElement("img"),e=function(){var a=d.width;2===a&&(s.supSizes=!0),q=s.supSrcset&&!s.supSizes,t=!0,setTimeout(ba)};d.onload=e,d.onerror=e,d.setAttribute("sizes","9px"),d.srcset=c+" 1w,"+a+" 9w",d.src=c}():t=!0,s.selShort="picture>img,img[srcset]",s.sel=s.selShort,s.cfg=B,s.DPR=P||1,s.u=Q,s.types=A,s.setSize=u,s.makeUrl=$(function(a){return R.href=a,R.href}),s.qsa=function(a,b){return"querySelector"in a?a.querySelectorAll(b):[]},s.matchesMedia=function(){return a.matchMedia&&(matchMedia("(min-width: 0.1em)")||{}).matches?s.matchesMedia=function(a){return!a||matchMedia(a).matches}:s.matchesMedia=s.mMQ,s.matchesMedia.apply(this,arguments)},s.mMQ=function(a){return a?_(a):!0},s.calcLength=function(a){var b=_(a,!0)||!1;return 0>b&&(b=!1),b},s.supportsType=function(a){return a?A[a]:!0},s.parseSize=$(function(a){var b=(a||"").match(I);return{media:b&&b[1],length:b&&b[2]}}),s.parseSet=function(a){return a.cands||(a.cands=m(a.srcset,a)),a.cands},s.getEmValue=function(){var a;if(!p&&(a=b.body)){var c=b.createElement("div"),d=z.style.cssText,e=a.style.cssText;c.style.cssText=K,z.style.cssText=L,a.style.cssText=L,a.appendChild(c),p=c.offsetWidth,a.removeChild(c),p=parseFloat(p,10),z.style.cssText=d,a.style.cssText=e}return p||16},s.calcListLength=function(a){if(!(a in O)||B.uT){var b=s.calcLength(n(a));O[a]=b?b:Q.width}return O[a]},s.setRes=function(a){var b;if(a){b=s.parseSet(a);for(var c=0,d=b.length;d>c;c++)aa(b[c],a.sizes)}return b},s.setRes.res=aa,s.applySetCandidate=function(a,b){if(a.length){var c,d,e,f,h,k,l,m,n,o=b[s.ns],p=s.DPR;if(k=o.curSrc||b[G],l=o.curCan||j(b,k,a[0].set),l&&l.set===a[0].set&&(n=F&&!b.complete&&l.res-.1>p,n||(l.cached=!0,l.res>=p&&(h=l))),!h)for(a.sort(i),f=a.length,h=a[f-1],d=0;f>d;d++)if(c=a[d],c.res>=p){e=d-1,h=a[e]&&(n||k!==s.makeUrl(c.url))&&g(a[e].res,c.res,p,a[e].cached)?a[e]:c;break}h&&(m=s.makeUrl(h.url),o.curSrc=m,o.curCan=h,m!==k&&s.setSrc(b,h),s.setSize(b))}},s.setSrc=function(a,b){var c;a.src=b.url,"image/svg+xml"===b.set.type&&(c=a.style.width,a.style.width=a.offsetWidth+1+"px",a.offsetWidth+1&&(a.style.width=c))},s.getSet=function(a){var b,c,d,e=!1,f=a[s.ns].sets;for(b=0;b<f.length&&!e;b++)if(c=f[b],c.srcset&&s.matchesMedia(c.media)&&(d=s.supportsType(c.type))){"pending"===d&&(c=d),e=c;break}return e},s.parseSets=function(a,b,d){var e,f,g,h,i=b&&"PICTURE"===b.nodeName.toUpperCase(),j=a[s.ns];(j.src===c||d.src)&&(j.src=w.call(a,"src"),j.src?x.call(a,C,j.src):y.call(a,C)),(j.srcset===c||d.srcset||!s.supSrcset||a.srcset)&&(e=w.call(a,"srcset"),j.srcset=e,h=!0),j.sets=[],i&&(j.pic=!0,l(b,j.sets)),j.srcset?(f={srcset:j.srcset,sizes:w.call(a,"sizes")},j.sets.push(f),g=(q||j.src)&&H.test(j.srcset||""),g||!j.src||k(j.src,f)||f.has1x||(f.srcset+=", "+j.src,f.cands.push({url:j.src,d:1,set:f}))):j.src&&j.sets.push({srcset:j.src,sizes:null}),j.curCan=null,j.curSrc=c,j.supported=!(i||f&&!s.supSrcset||g&&!s.supSizes),h&&s.supSrcset&&!j.supported&&(e?(x.call(a,D,e),a.srcset=""):y.call(a,D)),j.supported&&!j.srcset&&(!j.src&&a.src||a.src!==s.makeUrl(j.src))&&(null===j.src?a.removeAttribute("src"):a.src=j.src),j.parsed=!0},s.fillImg=function(a,b){var c,d=b.reselect||b.reevaluate;a[s.ns]||(a[s.ns]={}),c=a[s.ns],(d||c.evaled!==r)&&((!c.parsed||b.reevaluate)&&s.parseSets(a,a.parentNode,b),c.supported?c.evaled=r:h(a))},s.setupRun=function(){(!S||M||P!==a.devicePixelRatio)&&f()},s.supPicture?(ba=u,s.fillImg=u):!function(){var c,d=a.attachEvent?/d$|^c/:/d$|^c|^i/,e=function(){var a=b.readyState||"";f=setTimeout(e,"loading"===a?200:999),b.body&&(s.fillImgs(),c=c||d.test(a),c&&clearTimeout(f))},f=setTimeout(e,b.body?9:99),g=function(a,b){var c,d,e=function(){var f=new Date-d;b>f?c=setTimeout(e,b-f):(c=null,a())};return function(){d=new Date,c||(c=setTimeout(e,b))}},h=z.clientHeight,i=function(){M=Math.max(a.innerWidth||0,z.clientWidth)!==Q.width||z.clientHeight!==h,h=z.clientHeight,M&&s.fillImgs()};Z(a,"resize",g(i,99)),Z(b,"readystatechange",e)}(),s.picturefill=ba,s.fillImgs=ba,s.teardownRun=u,ba._=s,a.picturefillCFG={pf:s,push:function(a){var b=a.shift();"function"==typeof s[b]?s[b].apply(s,a):(B[b]=a[0],S&&s.fillImgs({reselect:!0}))}};for(;J&&J.length;)a.picturefillCFG.push(J.shift());a.picturefill=ba,"object"==typeof module&&"object"==typeof module.exports?module.exports=ba:"function"==typeof define&&define.amd&&define("picturefill",function(){return ba}),s.supPicture||(A["image/webp"]=e("image/webp","data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA=="))}(window,document);
1892
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.