1/*global define:false require:false */ 2(function (name, context, definition) { 3 if (typeof module != 'undefined' && module.exports) module.exports = definition(); 4 else if (typeof define == 'function' && define.amd) define(definition); 5 else context[name] = definition(); 6})('jquery-scrollto', this, function(){ 7 // Prepare 8 var jQuery, $, ScrollTo; 9 jQuery = $ = window.jQuery || require('jquery'); 10 11 // Fix scrolling animations on html/body on safari 12 $.propHooks.scrollTop = $.propHooks.scrollLeft = { 13 get: function(elem,prop) { 14 var result = null; 15 if ( elem.tagName === 'HTML' || elem.tagName === 'BODY' ) { 16 if ( prop === 'scrollLeft' ) { 17 result = window.scrollX; 18 } else if ( prop === 'scrollTop' ) { 19 result = window.scrollY; 20 } 21 } 22 if ( result == null ) { 23 result = elem[prop]; 24 } 25 return result; 26 } 27 }; 28 $.Tween.propHooks.scrollTop = $.Tween.propHooks.scrollLeft = { 29 get: function(tween) { 30 return $.propHooks.scrollTop.get(tween.elem, tween.prop); 31 }, 32 set: function(tween) { 33 // Our safari fix 34 if ( tween.elem.tagName === 'HTML' || tween.elem.tagName === 'BODY' ) { 35 // Defaults 36 tween.options.bodyScrollLeft = (tween.options.bodyScrollLeft || window.scrollX); 37 tween.options.bodyScrollTop = (tween.options.bodyScrollTop || window.scrollY); 38 39 // Apply 40 if ( tween.prop === 'scrollLeft' ) { 41 tween.options.bodyScrollLeft = Math.round(tween.now); 42 } 43 else if ( tween.prop === 'scrollTop' ) { 44 tween.options.bodyScrollTop = Math.round(tween.now); 45 } 46 47 // Apply 48 window.scrollTo(tween.options.bodyScrollLeft, tween.options.bodyScrollTop); 49 } 50 // jQuery's IE8 Fix 51 else if ( tween.elem.nodeType && tween.elem.parentNode ) { 52 tween.elem[ tween.prop ] = tween.now; 53 } 54 } 55 }; 56 57 // jQuery ScrollTo 58 ScrollTo = { 59 // Configuration 60 config: { 61 duration: 400, 62 easing: 'swing', 63 callback: undefined, 64 durationMode: 'each', 65 offsetTop: 0, 66 offsetLeft: 0 67 }, 68 69 // Set Configuration 70 configure: function(options){ 71 // Apply Options to Config 72 $.extend(ScrollTo.config, options||{}); 73 74 // Chain 75 return this; 76 }, 77 78 // Perform the Scroll Animation for the Collections 79 // We use $inline here, so we can determine the actual offset start for each overflow:scroll item 80 // Each collection is for each overflow:scroll item 81 scroll: function(collections, config){ 82 // Prepare 83 var collection, $container, container, $target, $inline, position, containerTagName, 84 containerScrollTop, containerScrollLeft, 85 containerScrollTopEnd, containerScrollLeftEnd, 86 startOffsetTop, targetOffsetTop, targetOffsetTopAdjusted, 87 startOffsetLeft, targetOffsetLeft, targetOffsetLeftAdjusted, 88 scrollOptions, 89 callback; 90 91 // Determine the Scroll 92 collection = collections.pop(); 93 $container = collection.$container; 94 $target = collection.$target; 95 containerTagName = $container.prop('tagName'); 96 97 // Prepare the Inline Element of the Container 98 $inline = $('<span/>').css({ 99 'position': 'absolute', 100 'top': '0px', 101 'left': '0px' 102 }); 103 position = $container.css('position'); 104 105 // Insert the Inline Element of the Container 106 $container.css({position:'relative'}); 107 $inline.appendTo($container); 108 109 // Determine the top offset 110 startOffsetTop = $inline.offset().top; 111 targetOffsetTop = $target.offset().top; 112 targetOffsetTopAdjusted = targetOffsetTop - startOffsetTop - parseInt(config.offsetTop,10); 113 114 // Determine the left offset 115 startOffsetLeft = $inline.offset().left; 116 targetOffsetLeft = $target.offset().left; 117 targetOffsetLeftAdjusted = targetOffsetLeft - startOffsetLeft - parseInt(config.offsetLeft,10); 118 119 // Determine current scroll positions 120 containerScrollTop = $container.prop('scrollTop'); 121 containerScrollLeft = $container.prop('scrollLeft'); 122 123 // Reset the Inline Element of the Container 124 $inline.remove(); 125 $container.css({position:position}); 126 127 // Prepare the scroll options 128 scrollOptions = {}; 129 130 // Prepare the callback 131 callback = function(event){ 132 // Check 133 if ( collections.length === 0 ) { 134 // Callback 135 if ( typeof config.callback === 'function' ) { 136 config.callback(); 137 } 138 } 139 else { 140 // Recurse 141 ScrollTo.scroll(collections,config); 142 } 143 // Return true 144 return true; 145 }; 146 147 // Handle if we only want to scroll if we are outside the viewport 148 if ( config.onlyIfOutside ) { 149 // Determine current scroll positions 150 containerScrollTopEnd = containerScrollTop + $container.height(); 151 containerScrollLeftEnd = containerScrollLeft + $container.width(); 152 153 // Check if we are in the range of the visible area of the container 154 if ( containerScrollTop < targetOffsetTopAdjusted && targetOffsetTopAdjusted < containerScrollTopEnd ) { 155 targetOffsetTopAdjusted = containerScrollTop; 156 } 157 if ( containerScrollLeft < targetOffsetLeftAdjusted && targetOffsetLeftAdjusted < containerScrollLeftEnd ) { 158 targetOffsetLeftAdjusted = containerScrollLeft; 159 } 160 } 161 162 // Determine the scroll options 163 if ( targetOffsetTopAdjusted !== containerScrollTop ) { 164 scrollOptions.scrollTop = targetOffsetTopAdjusted; 165 } 166 if ( targetOffsetLeftAdjusted !== containerScrollLeft ) { 167 scrollOptions.scrollLeft = targetOffsetLeftAdjusted; 168 } 169 170 // Check to see if the scroll is necessary 171 if ( $container.prop('scrollHeight') === $container.width() ) { 172 delete scrollOptions.scrollTop; 173 } 174 if ( $container.prop('scrollWidth') === $container.width() ) { 175 delete scrollOptions.scrollLeft; 176 } 177 178 // Perform the scroll 179 if ( scrollOptions.scrollTop != null || scrollOptions.scrollLeft != null ) { 180 $container.animate(scrollOptions, { 181 duration: config.duration, 182 easing: config.easing, 183 complete: callback 184 }); 185 } 186 else { 187 callback(); 188 } 189 190 // Return true 191 return true; 192 }, 193 194 // ScrollTo the Element using the Options 195 fn: function(options){ 196 // Prepare 197 var collections, config, $container, container; 198 collections = []; 199 200 // Prepare 201 var $target = $(this); 202 if ( $target.length === 0 ) { 203 // Chain 204 return this; 205 } 206 207 // Handle Options 208 config = $.extend({},ScrollTo.config,options); 209 210 // Fetch 211 $container = $target.parent(); 212 container = $container.get(0); 213 214 // Cycle through the containers 215 while ( ($container.length === 1) && (container !== document.body) && (container !== document) ) { 216 // Check Container for scroll differences 217 var containerScrollTop, containerScrollLeft; 218 containerScrollTop = $container.css('overflow-y') !== 'visible' && container.scrollHeight !== container.clientHeight; 219 containerScrollLeft = $container.css('overflow-x') !== 'visible' && container.scrollWidth !== container.clientWidth; 220 if ( containerScrollTop || containerScrollLeft ) { 221 // Push the Collection 222 collections.push({ 223 '$container': $container, 224 '$target': $target 225 }); 226 // Update the Target 227 $target = $container; 228 } 229 // Update the Container 230 $container = $container.parent(); 231 container = $container.get(0); 232 } 233 234 // Add the final collection 235 collections.push({ 236 '$container': $('html'), 237 // document.body doesn't work in firefox, html works for all 238 // internet explorer starts at the beggining 239 '$target': $target 240 }); 241 242 // Adjust the Config 243 if ( config.durationMode === 'all' ) { 244 config.duration /= collections.length; 245 } 246 247 // Handle 248 ScrollTo.scroll(collections,config); 249 250 // Chain 251 return this; 252 } 253 }; 254 255 // Apply our extensions to jQuery 256 $.ScrollTo = $.ScrollTo || ScrollTo; 257 $.fn.ScrollTo = $.fn.ScrollTo || ScrollTo.fn; 258 259 // Export 260 return ScrollTo; 261}); 262 263/* 264 * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ 265 * 266 * Uses the built in easing capabilities added In jQuery 1.1 267 * to offer multiple easing options 268 * 269 * TERMS OF USE - jQuery Easing 270 * 271 * Open source under the BSD License. 272 * 273 * Copyright é 2008 George McGinley Smith 274 * All rights reserved. 275 * 276 * Redistribution and use in source and binary forms, with or without modification, 277 * are permitted provided that the following conditions are met: 278 * 279 * Redistributions of source code must retain the above copyright notice, this list of 280 * conditions and the following disclaimer. 281 * Redistributions in binary form must reproduce the above copyright notice, this list 282 * of conditions and the following disclaimer in the documentation and/or other materials 283 * provided with the distribution. 284 * 285 * Neither the name of the author nor the names of contributors may be used to endorse 286 * or promote products derived from this software without specific prior written permission. 287 * 288 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 289 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 290 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 291 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
vendor: 5,091 bytes, lines 292-437
292 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 293 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 294 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 295 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 296 * OF THE POSSIBILITY OF SUCH DAMAGE. 297 * 298*/ 299 300// t: current time, b: begInnIng value, c: change In value, d: duration 301jQuery.easing['jswing'] = jQuery.easing['swing']; 302 303jQuery.extend( jQuery.easing, 304{ 305 def: 'easeOutQuad', 306 swing: function (x, t, b, c, d) { 307 //alert(jQuery.easing.default); 308 return jQuery.easing[jQuery.easing.def](x, t, b, c, d); 309 }, 310 easeInQuad: function (x, t, b, c, d) { 311 return c*(t/=d)*t + b; 312 }, 313 easeOutQuad: function (x, t, b, c, d) { 314 return -c *(t/=d)*(t-2) + b; 315 }, 316 easeInOutQuad: function (x, t, b, c, d) { 317 if ((t/=d/2) < 1) return c/2*t*t + b; 318 return -c/2 * ((--t)*(t-2) - 1) + b; 319 }, 320 easeInCubic: function (x, t, b, c, d) { 321 return c*(t/=d)*t*t + b; 322 }, 323 easeOutCubic: function (x, t, b, c, d) { 324 return c*((t=t/d-1)*t*t + 1) + b; 325 }, 326 easeInOutCubic: function (x, t, b, c, d) { 327 if ((t/=d/2) < 1) return c/2*t*t*t + b; 328 return c/2*((t-=2)*t*t + 2) + b; 329 }, 330 easeInQuart: function (x, t, b, c, d) { 331 return c*(t/=d)*t*t*t + b; 332 }, 333 easeOutQuart: function (x, t, b, c, d) { 334 return -c * ((t=t/d-1)*t*t*t - 1) + b; 335 }, 336 easeInOutQuart: function (x, t, b, c, d) { 337 if ((t/=d/2) < 1) return c/2*t*t*t*t + b; 338 return -c/2 * ((t-=2)*t*t*t - 2) + b; 339 }, 340 easeInQuint: function (x, t, b, c, d) { 341 return c*(t/=d)*t*t*t*t + b; 342 }, 343 easeOutQuint: function (x, t, b, c, d) { 344 return c*((t=t/d-1)*t*t*t*t + 1) + b; 345 }, 346 easeInOutQuint: function (x, t, b, c, d) { 347 if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; 348 return c/2*((t-=2)*t*t*t*t + 2) + b; 349 }, 350 easeInSine: function (x, t, b, c, d) { 351 return -c * Math.cos(t/d * (Math.PI/2)) + c + b; 352 }, 353 easeOutSine: function (x, t, b, c, d) { 354 return c * Math.sin(t/d * (Math.PI/2)) + b; 355 }, 356 easeInOutSine: function (x, t, b, c, d) { 357 return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; 358 }, 359 easeInExpo: function (x, t, b, c, d) { 360 return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; 361 }, 362 easeOutExpo: function (x, t, b, c, d) { 363 return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; 364 }, 365 easeInOutExpo: function (x, t, b, c, d) { 366 if (t==0) return b; 367 if (t==d) return b+c; 368 if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; 369 return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; 370 }, 371 easeInCirc: function (x, t, b, c, d) { 372 return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; 373 }, 374 easeOutCirc: function (x, t, b, c, d) { 375 return c * Math.sqrt(1 - (t=t/d-1)*t) + b; 376 }, 377 easeInOutCirc: function (x, t, b, c, d) { 378 if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; 379 return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; 380 }, 381 easeInElastic: function (x, t, b, c, d) { 382 var s=1.70158;var p=0;var a=c; 383 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 384 if (a < Math.abs(c)) { a=c; var s=p/4; } 385 else var s = p/(2*Math.PI) * Math.asin (c/a); 386 return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 387 }, 388 easeOutElastic: function (x, t, b, c, d) { 389 var s=1.70158;var p=0;var a=c; 390 if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; 391 if (a < Math.abs(c)) { a=c; var s=p/4; } 392 else var s = p/(2*Math.PI) * Math.asin (c/a); 393 return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; 394 }, 395 easeInOutElastic: function (x, t, b, c, d) { 396 var s=1.70158;var p=0;var a=c; 397 if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); 398 if (a < Math.abs(c)) { a=c; var s=p/4; } 399 else var s = p/(2*Math.PI) * Math.asin (c/a); 400 if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; 401 return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; 402 }, 403 easeInBack: function (x, t, b, c, d, s) { 404 if (s == undefined) s = 1.70158; 405 return c*(t/=d)*t*((s+1)*t - s) + b; 406 }, 407 easeOutBack: function (x, t, b, c, d, s) { 408 if (s == undefined) s = 1.70158; 409 return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; 410 }, 411 easeInOutBack: function (x, t, b, c, d, s) { 412 if (s == undefined) s = 1.70158; 413 if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; 414 return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; 415 }, 416 easeInBounce: function (x, t, b, c, d) { 417 return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; 418 }, 419 easeOutBounce: function (x, t, b, c, d) { 420 if ((t/=d) < (1/2.75)) { 421 return c*(7.5625*t*t) + b; 422 } else if (t < (2/2.75)) { 423 return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; 424 } else if (t < (2.5/2.75)) { 425 return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; 426 } else { 427 return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; 428 } 429 }, 430 easeInOutBounce: function (x, t, b, c, d) { 431 if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; 432 return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; 433 } 434}); 435 436/* 437 *
438 * TERMS OF USE - EASING EQUATIONS 439 * 440 * Open source under the BSD License. 441 * 442 * Copyright é 2001 Robert Penner 443 * All rights reserved. 444 * 445 * Redistribution and use in source and binary forms, with or without modification, 446 * are permitted provided that the following conditions are met: 447 * 448 * Redistributions of source code must retain the above copyright notice, this list of 449 * conditions and the following disclaimer. 450 * Redistributions in binary form must reproduce the above copyright notice, this list 451 * of conditions and the following disclaimer in the documentation and/or other materials 452 * provided with the distribution. 453 * 454 * Neither the name of the author nor the names of contributors may be used to endorse 455 * or promote products derived from this software without specific prior written permission. 456 * 457 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 458 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 459 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 460 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 461 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 462 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 463 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 464 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 465 * OF THE POSSIBILITY OF SUCH DAMAGE. 466 * 467 */ 468 469 /* 470 * jquery.tappable.js version 0.2 471 * 472 * More responsive (iOS-like) touch behaviour for buttons and other 'tappable' UI 473 * elements, instead of Mobile Safari's 300ms delay and ugly grey overlay: 474 * 475 * - A 'touched' class is added to the element as soon as it is tapped (or, in 476 * the case of a "long tap" - when the user keeps their finger down for a 477 * moment - after a specified delay). 478 * 479 * - The supplied callback is called as soon as the user lifts their finger. 480 * 481 * - The class is removed, and firing of the callback cancelled, if the user moves 482 * their finger (though this can be disabled). 483 * 484 * - If the browser doesn't support touch events, it falls back to click events. 485 * 486 * More detailed explanation of behaviour and background: 487 * http://aanandprasad.com/articles/jquery-tappable/ 488 * 489 * See it in action here: http://nnnnext.com 490 * 491 * I recommend that you add a `-webkit-tap-highlight-color: rgba(0,0,0,0)` 492 * style rule to any elements you wish to make tappable, to hide the ugly grey 493 * click overlay. 494 * 495 * Tested on iOS 4.3 and some version of Android, I don't know. Leave me alone. 496 * 497 * Basic usage: 498 * 499 * $(element).tappable(function() { console.log("Hello World!") }) 500 * 501 * Advanced usage: 502 * 503 * $(element).tappable({ 504 * callback: function() { console.log("Hello World!") }, 505 * cancelOnMove: false, 506 * touchDelay: 150, 507 * onlyIf: function(el) { return $(el).hasClass('enabled') } 508 * }) 509 * 510 * Options: 511 * 512 * cancelOnMove: If truthy, then as soon as the user moves their finger, the 513 * 'touched' class is removed from the element. When they lift 514 * their finger, the callback will *not* be fired. Defaults to 515 * true. 516 * 517 * touchDelay: Time to wait (ms) before adding the 'touched' class when the 518 * user performs a "long tap". Best employed on elements that the 519 * user is likely to touch while scrolling. Around 150 will work 520 * well. Defaults to 0. 521 * 522 * onlyIf: Function to run as soon as the user touches the element, to 523 * determine whether to do anything. If it returns a falsy value, 524 * the 'touched' class will not be added and the callback will 525 * not be fired. 526 * 527 */ 528 529;(function($) { 530 var touchSupported = ('ontouchstart' in window) 531 532 $.fn.tappable = function(options) { 533 var cancelOnMove = true, 534 onlyIf = function() { return true }, 535 touchDelay = 0, 536 callback 537 538 switch(typeof options) { 539 case 'function': 540 callback = options 541 break; 542 case 'object': 543 callback = options.callback 544 545 if (typeof options.cancelOnMove != 'undefined') { 546 cancelOnMove = options.cancelOnMove 547 } 548 549 if (typeof options.onlyIf != 'undefined') { 550 onlyIf = options.onlyIf 551 } 552 553 if (typeof options.touchDelay != 'undefined') { 554 touchDelay = options.touchDelay 555 } 556 557 break; 558 } 559 560 var fireCallback = function(el, event) { 561 if (typeof callback == 'function' && onlyIf(el)) { 562 callback.call(el, event) 563 } 564 } 565 566 if (touchSupported) { 567 this.bind('touchstart', function(event) { 568 var el = this 569 570 if (onlyIf(this)) { 571 $(el).addClass('touch-started') 572 573 window.setTimeout(function() { 574 if ($(el).hasClass('touch-started')) { 575 $(el).addClass('touched') 576 } 577 }, touchDelay) 578 } 579 580 return true 581 }) 582 583 this.bind('touchend', function(event) { 584 var el = this 585 586 if ($(el).hasClass('touch-started')) { 587 $(el) 588 .removeClass('touched') 589 .removeClass('touch-started') 590 591 fireCallback(el, event) 592 } 593 594 return true 595 }) 596 597 this.bind('click', function(event) { 598 event.preventDefault() 599 }) 600 601 if (cancelOnMove) { 602 this.bind('touchmove', function() { 603 $(this) 604 .removeClass('touched') 605 .removeClass('touch-started') 606 }) 607 } 608 } else if (typeof callback == 'function') { 609 this.bind('click', function(event) { 610 if (onlyIf(this)) { 611 callback.call(this, event) 612 } 613 }) 614 } 615 616 return this 617 } 618})(jQuery); 619 620/** 621 * @preserve JSizes - JQuery plugin v0.33 622 * 623 * Licensed under the revised BSD License. 624 * Copyright 2008-2010 Bram Stein 625 * All rights reserved. 626 */ 627/*global jQuery*/ 628(function ($) { 629 'use strict'; 630 var num = function (value) { 631 return parseInt(value, 10) || 0; 632 }; 633 634 /** 635 * Sets or gets the values for min-width, min-height, max-width 636 * and max-height. 637 */ 638 $.each(['min', 'max'], function (i, name) { 639 $.fn[name + 'Size'] = function (value) { 640 var width, height; 641 if (value) { 642 if (value.width !== undefined) { 643 this.css(name + '-width', value.width); 644 } 645 if (value.height !== undefined) { 646 this.css(name + '-height', value.height); 647 } 648 } else { 649 width = this.css(name + '-width'); 650 height = this.css(name + '-height'); 651 // Apparently: 652 // * Opera returns -1px instead of none 653 // * IE6 returns undefined instead of none 654 return {'width': (name === 'max' && (width === undefined || width === 'none' || num(width) === -1) && Number.MAX_VALUE) || num(width), 655 'height': (name === 'max' && (height === undefined || height === 'none' || num(height) === -1) && Number.MAX_VALUE) || num(height)}; 656 } 657 return this; 658 }; 659 }); 660 661 /** 662 * Returns whether or not an element is visible. 663 */ 664 $.fn.isVisible = function () { 665 return this.is(':visible'); 666 }; 667 668 /** 669 * Sets or gets the values for border, margin and padding. 670 */ 671 $.each(['border', 'margin', 'padding'], function (i, name) { 672 $.fn[name] = function (value) { 673 if (value) {
674 if (value.top !== undefined) { 675 this.css(name + '-top' + (name === 'border' ? '-width' : ''), value.top); 676 } 677 if (value.bottom !== undefined) { 678 this.css(name + '-bottom' + (name === 'border' ? '-width' : ''), value.bottom); 679 } 680 if (value.left !== undefined) { 681 this.css(name + '-left' + (name === 'border' ? '-width' : ''), value.left); 682 } 683 if (value.right !== undefined) { 684 this.css(name + '-right' + (name === 'border' ? '-width' : ''), value.right); 685 } 686 } else { 687 return {top: num(this.css(name + '-top' + (name === 'border' ? '-width' : ''))), 688 bottom: num(this.css(name + '-bottom' + (name === 'border' ? '-width' : ''))), 689 left: num(this.css(name + '-left' + (name === 'border' ? '-width' : ''))), 690 right: num(this.css(name + '-right' + (name === 'border' ? '-width' : '')))}; 691 } 692 return this; 693 }; 694 }); 695}(jQuery)); 696/*! 697 * jQuery TextChange Plugin 698 * http://www.zurb.com/playground/jquery-text-change-custom-event 699 * 700 * Copyright 2010, ZURB 701 * Released under the MIT License 702 */ 703 (function(a){a.event.special.textchange={setup:function(){a(this).data("lastValue",this.contentEditable==="true"?a(this).html():a(this).val());a(this).bind("keyup.textchange",a.event.special.textchange.handler);a(this).bind("cut.textchange paste.textchange input.textchange",a.event.special.textchange.delayedHandler)},teardown:function(){a(this).unbind(".textchange")},handler:function(){a.event.special.textchange.triggerIfChanged(a(this))},delayedHandler:function(){var c=a(this);setTimeout(function(){a.event.special.textchange.triggerIfChanged(c)}, 704 25)},triggerIfChanged:function(a){var b=a[0].contentEditable==="true"?a.html():a.val();b!==a.data("lastValue")&&(a.trigger("textchange",[a.data("lastValue")]),a.data("lastValue",b))}};a.event.special.hastext={setup:function(){a(this).bind("textchange",a.event.special.hastext.handler)},teardown:function(){a(this).unbind("textchange",a.event.special.hastext.handler)},handler:function(c,b){b===""&&b!==a(this).val()&&a(this).trigger("hastext")}};a.event.special.notext={setup:function(){a(this).bind("textchange", 705 a.event.special.notext.handler)},teardown:function(){a(this).unbind("textchange",a.event.special.notext.handler)},handler:function(c,b){a(this).val()===""&&a(this).val()!==b&&a(this).trigger("notext")}}})(jQuery); 706 707/* 708 * jQuery replaceText - v1.1 - 11/21/2009 709 * http://benalman.com/projects/jquery-replacetext-plugin/ 710 * 711 * Copyright (c) 2009 "Cowboy" Ben Alman 712 * Dual licensed under the MIT and GPL licenses. 713 * http://benalman.com/about/license/ 714 */ 715(function($){$.fn.replaceText=function(b,a,c){return this.each(function(){var f=this.firstChild,g,e,d=[];if(f){do{if(f.nodeType===3){g=f.nodeValue;e=g.replace(b,a);if(e!==g){if(!c&&/</.test(e)){$(f).before(e);d.push(f)}else{f.nodeValue=e}}}}while(f=f.nextSibling)}d.length&&$(d).remove()})}})(jQuery); 716 717/* 718 * jQuery mmenu v4.3.1 719 * @requires jQuery 1.7.0 or later 720 * 721 * mmenu.frebsite.nl 722 * 723 * Copyright (c) Fred Heusschen 724 * www.frebsite.nl 725 * 726 * Dual licensed under the MIT and GPL licenses. 727 * http://en.wikipedia.org/wiki/MIT_License 728 * http://en.wikipedia.org/wiki/GNU_General_Public_License 729 */ 730!function(e){function s(s,n,t){if(t){if("object"!=typeof s&&(s={}),"boolean"!=typeof s.isMenu){var i=t.children();s.isMenu=1==i.length&&i.is(n.panelNodetype)}return s}s=e.extend(!0,{},e[a].defaults,s),("top"==s.position||"bottom"==s.position)&&("back"==s.zposition||"next"==s.zposition)&&(e[a].deprecated('Using position "'+s.position+'" in combination with zposition "'+s.zposition+'"','zposition "front"'),s.zposition="front");for(var o=["position","zposition","modal","moveBackground"],l=0,d=o.length;d>l;l++)"undefined"!=typeof s[o[l]]&&(e[a].deprecated('The option "'+o[l]+'"',"offCanvas."+o[l]),s.offCanvas=s.offCanvas||{},s.offCanvas[o[l]]=s[o[l]]);return s}function n(s){s=e.extend(!0,{},e[a].configuration,s);for(var n=["panel","list","selected","label","spacer"],t=0,i=n.length;i>t;t++)"undefined"!=typeof s[n[t]+"Class"]&&(e[a].deprecated('The configuration option "'+n[t]+'Class"',"classNames."+n[t]),s.classNames[n[t]]=s[n[t]+"Class"]);if("undefined"!=typeof s.counterClass&&(e[a].deprecated('The configuration option "counterClass"',"classNames.c
730ounters.counter"),s.classNames.counters=s.classNames.counters||{},s.classNames.counters.counter=s.counterClass),"undefined"!=typeof s.collapsedClass&&(e[a].deprecated('The configuration option "collapsedClass"',"classNames.labels.collapsed"),s.classNames.labels=s.classNames.labels||{},s.classNames.labels.collapsed=s.collapsedClass),"undefined"!=typeof s.header)for(var n=["panelHeader","panelNext","panelPrev"],t=0,i=n.length;i>t;t++)"undefined"!=typeof s.header[n[t]+"Class"]&&(e[a].deprecated('The configuration option "header.'+n[t]+'Class"',"classNames.header."+n[t]),s.classNames.header=s.classNames.header||{},s.classNames.header[n[t]]=s.header[n[t]+"Class"]);for(var n=["pageNodetype","pageSelector","menuWrapperSelector","menuInjectMethod"],t=0,i=n.length;i>t;t++)"undefined"!=typeof s[n[t]]&&(e[a].deprecated('The configuration option "'+n[t]+'"',"offCanvas."+n[t]),s.offCanvas=s.offCanvas||{},s.offCanvas[n[t]]=s[n[t]]);return s}function t(){u=!0,c.$wndw=e(window),c.$html=e("html"),c.$body=e("body"),e.each([l,d,r],function(e,s){s.add=function(e){e=e.split(" ");for(var n in e)s[e[n]]=s.mm(e[n])}}),l.mm=function(e){return"mm-"+e},l.add("wrapper menu ismenu inline panel list subtitle selected label spacer current highest hidden opened subopened subopen fullsubopen subclose"),l.umm=function(e){return"mm-"==e.slice(0,3)&&(e=e.slice(3)),e},d.mm=function(e){return"mm-"+e},d.add("parent"),r.mm=function(e){return e+".mm"},r.add("toggle open close setSelected transitionend webkitTransitionEnd mousedown mouseup touchstart touchmove touchend scroll resize click keydown keyup"),e[a]._c=l,e[a]._d=d,e[a]._e=r,e[a].glbl=c}function i(s,n){if(s.hasClass(l.current))return!1;var t=e("."+l.panel,n),i=t.filter("."+l.current);return t.removeClass(l.highest).removeClass(l.current).not(s).not(i).addClass(l.hidden),s.hasClass(l.opened)?i.addClass(l.highest).removeClass(l.opened).removeClass(l.subopened):(s.addClass(l.highest),i.addClass(l.subopened)),s.removeClass(l.hidden).addClass(l.current),setTimeout(function(){s.removeClass(l.subopened).addClass(l.opened)},25),"open"}var a="mmenu",o="4.3.1";if(!e[a]){var l={},d={},r={},u=!1,c={$wndw:null,$html:null,$body:null};e[a]=function(e,s,n){return this.$menu=e,this.opts=s,this.conf=n,this.vars={},this._init(),this},e[a].uniqueId=0,e[a].prototype={_init:function(){if(this.opts=s(this.opts,this.conf,this.$menu),this._initMenu(),this._initPanels(),this._initLinks(),this._bindCustomEvents(),e[a].addons)for(var n=0;n<e[a].addons.length;n++)"function"==typeof this["_addon_"+e[a].addons[n]]&&this["_addon_"+e[a].addons[n]]()},_bindCustomEvents:function(){var s=this,n=this.$menu.find(this.opts.isMenu&&!this.opts.slidingSubmenus?"ul, ol":"."+l.panel);n.off(r.toggle+" "+r.open+" "+r.close).on(r.toggle+" "+r.open+" "+r.close,function(e){e.stopPropagation()}),this.opts.slidingSubmenus?n.on(r.open,function(){return i(e(this),s.$menu)}):n.on(r.toggle,function(){var s=e(this);return s.triggerHandler(s.parent().hasClass(l.opened)?r.close:r.open)}).on(r.open,function(){return e(this).parent().addClass(l.opened),"open"}).on(r.close,function(){return e(this).parent().removeClass(l.opened),"close"})},_initMenu:function(){this.opts.offCanvas&&this.conf.clone&&(this.$menu=this.$menu.clone(!0),this.$menu.add(this.$menu.find("*")).filter("[id]").each(function(){e(this).attr("id",l.mm(e(this).attr("id")))})),this.$menu.contents().each(function(){3==e(this)[0].nodeType&&e(this).remove()}),this.$menu.parent().addClass(l.wrapper);var s=[l.menu];s.push(l.mm(this.opts.slidingSubmenus?"horizontal":"vertical")),this.opts.classes&&s.push(this.opts.classes),this.opts.isMenu&&s.push(l.ismenu),this.$menu.addClass(s.join(" "))},_initPanels:function(){var s=this;this.__refactorClass(e("."+this.conf.classNames.list,this.$menu),this.conf.classNames.list,"list"),this.opts.isMenu&&e("ul, ol",this.$menu).not(".mm-nolist").addClass(l.list);var n=e("."+l.list+" > li",this.$menu);this.__refactorClass(n,this.conf.classNames.selected,"selected"),this.__refactorClass(n,this.conf.classNames.label,"label"),this.__refactorClass(n,this.conf.classNames.spacer,"spacer"),n.off(r.setSelected).on(r.setSelected,function(s,t){s.stopPropagation(),n.removeClass(l.selected),"boolean"!=typeof t&&(t=!0),t&&e(this).addClass(l.selected)}),this.__refactorClass(e("."+this.conf.classNames.panel,this.$menu),this.conf.classNames.panel,"panel"),this.$menu.children().filter(this.conf.panelNodetype).add(this.$menu.find("."+l.list).children().children().filter(this.conf.panelNodetype)).addClass(l.panel);var t=e("."+l.panel,this.$menu);t.each(function(){var n=e(this),t=n.attr("id")||s.__getUniqueId();n.attr("id",t)}),t.find("."+l.panel).each(function(){var n=e(this),t=n.is("ul, ol")?
730n:n.find("ul ,ol").first(),i=n.parent(),a=i.find("> a, > span"),o=i.closest("."+l.panel);if(n.data(d.parent,i),i.parent().is("."+l.list)){var r=e('<a class="'+l.subopen+'" href="#'+n.attr("id")+'" />').insertBefore(a);a.is("a")||r.addClass(l.fullsubopen),s.opts.slidingSubmenus&&t.prepend('<li class="'+l.subtitle+'"><a class="'+l.subclose+'" href="#'+o.attr("id")+'">'+a.text()+"</a></li>")}});var i=this.opts.slidingSubmenus?r.open:r.toggle;if(t.each(function(){var n=e(this),t=n.attr("id");e('a[href="#'+t+'"]',s.$menu).off(r.click).on(r.click,function(e){e.preventDefault(),n.trigger(i)})}),this.opts.slidingSubmenus){var a=e("."+l.list+" > li."+l.selected,this.$menu);a.parents("li").removeClass(l.selected).end().add(a.parents("li")).each(function(){var s=e(this),n=s.find("> ."+l.panel);n.length&&(s.parents("."+l.panel).addClass(l.subopened),n.addClass(l.opened))}).closest("."+l.panel).addClass(l.opened).parents("."+l.panel).addClass(l.subopened)}else{var a=e("li."+l.selected,this.$menu);a.parents("li").removeClass(l.selected).end().add(a.parents("li")).addClass(l.opened)}var o=t.filter("."+l.opened);o.length||(o=t.first()),o.addClass(l.opened).last().addClass(l.current),this.opts.slidingSubmenus&&t.not(o.last()).addClass(l.hidden).end().find("."+l.panel).appendTo(this.$menu)},_initLinks:function(){var s=this;e("."+l.list+" > li > a",this.$menu).not("."+l.subopen).not("."+l.subclose).not('[rel="external"]').not('[target="_blank"]').off(r.click).on(r.click,function(n){var t=e(this),i=t.attr("href");s.__valueOrFn(s.opts.onClick.setSelected,t)&&t.parent().trigger(r.setSelected);var a=s.__valueOrFn(s.opts.onClick.preventDefault,t,"#"==i.slice(0,1));a&&n.preventDefault(),s.__valueOrFn(s.opts.onClick.blockUI,t,!a)&&c.$html.addClass(l.blocking),s.__valueOrFn(s.opts.onClick.close,t,a)&&s.$menu.triggerHandler(r.close)})},_update:function(e){if(this.updates||(this.updates=[]),"function"==typeof e)this.updates.push(e);else for(var s=0,n=this.updates.length;n>s;s++)this.updates[s].call(this,e)},__valueOrFn:function(e,s,n){return"function"==typeof e?e.call(s[0]):"undefined"==typeof e&&"undefined"!=typeof n?n:e},__refactorClass:function(e,s,n){e.filter("."+s).removeClass(s).addClass(l[n])},__transitionend:function(e,s,n){var t=!1,i=function(){t||s.call(e[0]),t=!0};e.one(r.transitionend,i),e.one(r.webkitTransitionEnd,i),setTimeout(i,1.1*n)},__getUniqueId:function(){return l.mm(e[a].uniqueId++)}},e.fn[a]=function(i,o){return u||t(),i=s(i,o),o=n(o),this.each(function(){var s=e(this);s.data(a)||s.data(a,new e[a](s,i,o))})},e[a].version=o,e[a].defaults={classes:"",slidingSubmenus:!0,onClick:{setSelected:!0}},e[a].configuration={panelNodetype:"ul, ol, div",transitionDuration:400,classNames:{panel:"Panle",list:"List",selected:"Selected",label:"Label",spacer:"Spacer"}},function(){var s=window.document,n=window.navigator.userAgent,t="ontouchstart"in s,i="WebkitOverflowScrolling"in s.documentElement.style,o=function(){return n.indexOf("Android")>=0?2.4>parseFloat(n.slice(n.indexOf("Android")+8)):!1}();e[a].support={touch:t,oldAndroidBrowser:o,overflowscrolling:function(){return t?i?!0:o?!1:!0:!0}()}}(),e[a].debug=function(){},e[a].deprecated=function(e,s){"undefined"!=typeof console&&"undefined"!=typeof console.warn&&console.warn("MMENU: "+e+" is deprecated, use "+s+" instead.")}}}(jQuery); 731/* 732 * jQuery mmenu offCanvas addon 733 * mmenu.frebsite.nl 734 * 735 * Copyright (c) Fred Heusschen 736 * www.frebsite.nl 737 */ 738!function(e){function o(e){return e}function t(e){return"string"!=typeof e.pageSelector&&(e.pageSelector="> "+e.pageNodetype),e}function n(){u=!0,s=e[r]._c,i=e[r]._d,a=e[r]._e,s.add("offcanvas modal background opening blocker page"),i.add("style"),a.add("opening opened closing closed setPage"),p=e[r].glbl,p.$allMenus=(p.$allMenus||e()).add(this.$menu),p.$wndw.on(a.keydown,function(e){return p.$html.hasClass(s.opened)&&9==e.keyCode?(e.preventDefault(),!1):void 0});var o=0;p.$wndw.on(a.resize,function(e,t){if(t||p.$html.hasClass(s.opened)){var n=p.$wndw.height();(t||n!=o)&&(o=n,p.$page.css("minHeight",n))}})}var s,i,a,p,r="mmenu",l="offCanvas",u=!1;e[r].prototype["_addon_"+l]=function(){if(!this.opts[l])return this;u||n(),this.opts[l]=o(this.opts[l]),this.conf[l]=t(this.conf[l]),this.vars.opened=!1;var e=this.opts[l],i=this.conf[l],a=[s.offcanvas];"left"!=e.position&&a.push(s.mm(e.position)),"back"!=e.zposition&&a.push(s.mm(e.zposition)),this.$menu.addClass(a.join(" ")).parent().removeClass(s.wrapper),this[l+"_initPage"](p.$page),this[l+"_initBlocker"](),this[l+"_initOpenClose"](),this[l+"_bindCustomEvents"](),this.$menu[i.menuInjectMethod+"To"](i.menuWrapperSelector)},e[r].addons=e[r].addons||[],e[r].addons.push(l),e[r].defaults[l]={position:"left",zposition:"back",modal:!1,moveBackgroun
738d:!0},e[r].configuration[l]={pageNodetype:"div",pageSelector:null,menuWrapperSelector:"body",menuInjectMethod:"prepend"},e[r].prototype.open=function(){if(this.vars.opened)return!1;var e=this;return this._openSetup(),setTimeout(function(){e._openFinish()},25),"open"},e[r].prototype._openSetup=function(){p.$allMenus.not(this.$menu).trigger(a.close),p.$page.data(i.style,p.$page.attr("style")||""),p.$wndw.trigger(a.resize,[!0]);var e=[s.opened];this.opts[l].modal&&e.push(s.modal),this.opts[l].moveBackground&&e.push(s.background),"left"!=this.opts[l].position&&e.push(s.mm(this.opts[l].position)),"back"!=this.opts[l].zposition&&e.push(s.mm(this.opts[l].zposition)),this.opts.classes&&e.push(this.opts.classes),p.$html.addClass(e.join(" ")),this.$menu.addClass(s.current+" "+s.opened)},e[r].prototype._openFinish=function(){var e=this;this.__transitionend(p.$page,function(){e.$menu.trigger(a.opened)},this.conf.transitionDuration),this.vars.opened=!0,p.$html.addClass(s.opening),this.$menu.trigger(a.opening)},e[r].prototype.close=function(){if(!this.vars.opened)return!1;var e=this;return this.__transitionend(p.$page,function(){e.$menu.removeClass(s.current).removeClass(s.opened),p.$html.removeClass(s.opened).removeClass(s.modal).removeClass(s.background).removeClass(s.mm(e.opts[l].position)).removeClass(s.mm(e.opts[l].zposition)),e.opts.classes&&p.$html.removeClass(e.opts.classes),p.$page.attr("style",p.$page.data(i.style)),e.vars.opened=!1,e.$menu.trigger(a.closed)},this.conf.transitionDuration),p.$html.removeClass(s.opening),this.$menu.trigger(a.closing),"close"},e[r].prototype[l+"_initBlocker"]=function(){var o=this;p.$blck||(p.$blck=e('<div id="'+s.blocker+'" />').appendTo(p.$body)),p.$blck.off(a.touchstart).on(a.touchstart,function(e){e.preventDefault(),e.stopPropagation(),p.$blck.trigger(a.mousedown)}).on(a.mousedown,function(e){e.preventDefault(),p.$html.hasClass(s.modal)||o.close()})},e[r].prototype[l+"_initPage"]=function(o){o||(o=e(this.conf[l].pageSelector,p.$body),o.length>1&&(e[r].debug("Multiple nodes found for the page-node, all nodes are wrapped in one <"+this.conf[l].pageNodetype+">."),o=o.wrapAll("<"+this.conf[l].pageNodetype+" />").parent())),o.addClass(s.page),p.$page=o},e[r].prototype[l+"_initOpenClose"]=function(){var o=this,t=this.$menu.attr("id");t&&t.length&&(this.conf.clone&&(t=s.umm(t)),e('a[href="#'+t+'"]').off(a.click).on(a.click,function(e){e.preventDefault(),o.open()}));var t=p.$page.attr("id");t&&t.length&&e('a[href="#'+t+'"]').on(a.click,function(e){e.preventDefault(),o.close()})},e[r].prototype[l+"_bindCustomEvents"]=function(){var e=this,o=a.open+" "+a.opening+" "+a.opened+" "+a.close+" "+a.closing+" "+a.closed+" "+a.setPage;this.$menu.off(o).on(o,function(e){e.stopPropagation()}),this.$menu.on(a.open,function(){e.open()}).on(a.close,function(){e.close()}).on(a.setPage,function(o,t){e[l+"_initPage"](t),e[l+"_initOpenClose"]()})}}(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.