From 616397c8d61b2b19485f40e7d2fad8a422b87e33 Mon Sep 17 00:00:00 2001 From: Zach Wise Date: Sat, 21 Apr 2012 21:43:27 -0500 Subject: [PATCH] Moved to new lib folder --- source/js/AES.js | 463 --------------------------------- source/js/bootstrap-tooltip.js | 270 ------------------- source/js/jQuery/easing.js | 205 --------------- source/js/lazyload.js | 391 ---------------------------- 4 files changed, 1329 deletions(-) delete mode 100644 source/js/AES.js delete mode 100644 source/js/bootstrap-tooltip.js delete mode 100644 source/js/jQuery/easing.js delete mode 100644 source/js/lazyload.js diff --git a/source/js/AES.js b/source/js/AES.js deleted file mode 100644 index 958a31a..0000000 --- a/source/js/AES.js +++ /dev/null @@ -1,463 +0,0 @@ -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -/* AES implementation in JavaScript (c) Chris Veness 2005-2011 */ -/* - see http://csrc.nist.gov/publications/PubsFIPS.html#197 */ -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - -var Aes = {}; // Aes namespace - -/** - * AES Cipher function: encrypt 'input' state with Rijndael algorithm - * applies Nr rounds (10/12/14) using key schedule w for 'add round key' stage - * - * @param {Number[]} input 16-byte (128-bit) input state array - * @param {Number[][]} w Key schedule as 2D byte-array (Nr+1 x Nb bytes) - * @returns {Number[]} Encrypted output state array - */ -Aes.cipher = function(input, w) { // main Cipher function [§5.1] - var Nb = 4; // block size (in words): no of columns in state (fixed at 4 for AES) - var Nr = w.length/Nb - 1; // no of rounds: 10/12/14 for 128/192/256-bit keys - - var state = [[],[],[],[]]; // initialise 4xNb byte-array 'state' with input [§3.4] - for (var i=0; i<4*Nb; i++) state[i%4][Math.floor(i/4)] = input[i]; - - state = Aes.addRoundKey(state, w, 0, Nb); - - for (var round=1; round 6 && i%Nk == 4) { - temp = Aes.subWord(temp); - } - for (var t=0; t<4; t++) w[i][t] = w[i-Nk][t] ^ temp[t]; - } - - return w; -} - -/* - * ---- remaining routines are private, not called externally ---- - */ - -Aes.subBytes = function(s, Nb) { // apply SBox to state S [§5.1.1] - for (var r=0; r<4; r++) { - for (var c=0; c>> i*8) & 0xff; - for (var i=0; i<2; i++) counterBlock[i+2] = (nonceRnd >>> i*8) & 0xff; - for (var i=0; i<4; i++) counterBlock[i+4] = (nonceSec >>> i*8) & 0xff; - - // and convert it to a string to go on the front of the ciphertext - var ctrTxt = ''; - for (var i=0; i<8; i++) ctrTxt += String.fromCharCode(counterBlock[i]); - - // generate key schedule - an expansion of the key into distinct Key Rounds for each round - var keySchedule = Aes.keyExpansion(key); - - var blockCount = Math.ceil(plaintext.length/blockSize); - var ciphertxt = new Array(blockCount); // ciphertext as array of strings - - for (var b=0; b>> c*8) & 0xff; - for (var c=0; c<4; c++) counterBlock[15-c-4] = (b/0x100000000 >>> c*8) - - var cipherCntr = Aes.cipher(counterBlock, keySchedule); // -- encrypt counter block -- - - // block size is reduced on final block - var blockLength = b>> c*8) & 0xff; - for (var c=0; c<4; c++) counterBlock[15-c-4] = (((b+1)/0x100000000-1) >>> c*8) & 0xff; - - var cipherCntr = Aes.cipher(counterBlock, keySchedule); // encrypt counter block - - var plaintxtByte = new Array(ciphertext[b].length); - for (var i=0; i 0) { while (c++ < 3) { pad += '='; plain += '\0'; } } - // note: doing padding here saves us doing special-case packing for trailing 1 or 2 chars - - for (c=0; c>18 & 0x3f; - h2 = bits>>12 & 0x3f; - h3 = bits>>6 & 0x3f; - h4 = bits & 0x3f; - - // use hextets to index into code string - e[c/3] = b64.charAt(h1) + b64.charAt(h2) + b64.charAt(h3) + b64.charAt(h4); - } - coded = e.join(''); // join() is far faster than repeated string concatenation in IE - - // replace 'A's from padded nulls with '='s - coded = coded.slice(0, coded.length-pad.length) + pad; - - return coded; -} - -/** - * Decode string from Base64, as defined by RFC 4648 [http://tools.ietf.org/html/rfc4648] - * (instance method extending String object). As per RFC 4648, newlines are not catered for. - * - * @param {String} str The string to be decoded from base-64 - * @param {Boolean} [utf8decode=false] Flag to indicate whether str is Unicode string to be decoded - * from UTF8 after conversion from base64 - * @returns {String} decoded string - */ -Base64.decode = function(str, utf8decode) { - utf8decode = (typeof utf8decode == 'undefined') ? false : utf8decode; - var o1, o2, o3, h1, h2, h3, h4, bits, d=[], plain, coded; - var b64 = Base64.code; - - coded = utf8decode ? str.decodeUTF8() : str; - - - for (var c=0; c>>16 & 0xff; - o2 = bits>>>8 & 0xff; - o3 = bits & 0xff; - - d[c/4] = String.fromCharCode(o1, o2, o3); - // check for padding - if (h4 == 0x40) d[c/4] = String.fromCharCode(o1, o2); - if (h3 == 0x40) d[c/4] = String.fromCharCode(o1); - } - plain = d.join(''); // join() is far faster than repeated string concatenation in IE - - return utf8decode ? plain.decodeUTF8() : plain; -} - - -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ -/* Utf8 class: encode / decode between multi-byte Unicode characters and UTF-8 multiple */ -/* single-byte character encoding (c) Chris Veness 2002-2011 */ -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ - -var Utf8 = {}; // Utf8 namespace - -/** - * Encode multi-byte Unicode string into utf-8 multiple single-byte characters - * (BMP / basic multilingual plane only) - * - * Chars in range U+0080 - U+07FF are encoded in 2 chars, U+0800 - U+FFFF in 3 chars - * - * @param {String} strUni Unicode string to be encoded as UTF-8 - * @returns {String} encoded string - */ -Utf8.encode = function(strUni) { - // use regular expressions & String.replace callback function for better efficiency - // than procedural approaches - var strUtf = strUni.replace( - /[\u0080-\u07ff]/g, // U+0080 - U+07FF => 2 bytes 110yyyyy, 10zzzzzz - function(c) { - var cc = c.charCodeAt(0); - return String.fromCharCode(0xc0 | cc>>6, 0x80 | cc&0x3f); } - ); - strUtf = strUtf.replace( - /[\u0800-\uffff]/g, // U+0800 - U+FFFF => 3 bytes 1110xxxx, 10yyyyyy, 10zzzzzz - function(c) { - var cc = c.charCodeAt(0); - return String.fromCharCode(0xe0 | cc>>12, 0x80 | cc>>6&0x3F, 0x80 | cc&0x3f); } - ); - return strUtf; -} - -/** - * Decode utf-8 encoded string back into multi-byte Unicode characters - * - * @param {String} strUtf UTF-8 string to be decoded back to Unicode - * @returns {String} decoded string - */ -Utf8.decode = function(strUtf) { - // note: decode 3-byte chars first as decoded 2-byte strings could appear to be 3-byte char! - var strUni = strUtf.replace( - /[\u00e0-\u00ef][\u0080-\u00bf][\u0080-\u00bf]/g, // 3-byte chars - function(c) { // (note parentheses for precence) - var cc = ((c.charCodeAt(0)&0x0f)<<12) | ((c.charCodeAt(1)&0x3f)<<6) | ( c.charCodeAt(2)&0x3f); - return String.fromCharCode(cc); } - ); - strUni = strUni.replace( - /[\u00c0-\u00df][\u0080-\u00bf]/g, // 2-byte chars - function(c) { // (note parentheses for precence) - var cc = (c.charCodeAt(0)&0x1f)<<6 | c.charCodeAt(1)&0x3f; - return String.fromCharCode(cc); } - ); - return strUni; -} - -/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */ \ No newline at end of file diff --git a/source/js/bootstrap-tooltip.js b/source/js/bootstrap-tooltip.js deleted file mode 100644 index d76e51e..0000000 --- a/source/js/bootstrap-tooltip.js +++ /dev/null @@ -1,270 +0,0 @@ -/* =========================================================== - * bootstrap-tooltip.js v2.0.1 - * http://twitter.github.com/bootstrap/javascript.html#tooltips - * Inspired by the original jQuery.tipsy by Jason Frame - * =========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - -!function( $ ) { - - "use strict" - - /* TOOLTIP PUBLIC CLASS DEFINITION - * =============================== */ - - var Tooltip = function ( element, options ) { - this.init('tooltip', element, options) - } - - Tooltip.prototype = { - - constructor: Tooltip - - , init: function ( type, element, options ) { - var eventIn - , eventOut - - this.type = type - this.$element = $(element) - this.options = this.getOptions(options) - this.enabled = true - - if (this.options.trigger != 'manual') { - eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus' - eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur' - this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this)) - this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this)) - } - - this.options.selector ? - (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) : - this.fixTitle() - } - - , getOptions: function ( options ) { - options = $.extend({}, $.fn[this.type].defaults, options, this.$element.data()) - - if (options.delay && typeof options.delay == 'number') { - options.delay = { - show: options.delay - , hide: options.delay - } - } - - return options - } - - , enter: function ( e ) { - var self = $(e.currentTarget)[this.type](this._options).data(this.type) - - if (!self.options.delay || !self.options.delay.show) { - self.show() - } else { - self.hoverState = 'in' - setTimeout(function() { - if (self.hoverState == 'in') { - self.show() - } - }, self.options.delay.show) - } - } - - , leave: function ( e ) { - var self = $(e.currentTarget)[this.type](this._options).data(this.type) - - if (!self.options.delay || !self.options.delay.hide) { - self.hide() - } else { - self.hoverState = 'out' - setTimeout(function() { - if (self.hoverState == 'out') { - self.hide() - } - }, self.options.delay.hide) - } - } - - , show: function () { - var $tip - , inside - , pos - , actualWidth - , actualHeight - , placement - , tp - - if (this.hasContent() && this.enabled) { - $tip = this.tip() - this.setContent() - - if (this.options.animation) { - $tip.addClass('fade') - } - - placement = typeof this.options.placement == 'function' ? - this.options.placement.call(this, $tip[0], this.$element[0]) : - this.options.placement - - inside = /in/.test(placement) - - $tip - .remove() - .css({ top: 0, left: 0, display: 'block' }) - .appendTo(inside ? this.$element : document.body) - - pos = this.getPosition(inside) - - actualWidth = $tip[0].offsetWidth - actualHeight = $tip[0].offsetHeight - - switch (inside ? placement.split(' ')[1] : placement) { - case 'bottom': - tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2} - break - case 'top': - tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2} - break - case 'left': - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth} - break - case 'right': - tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width} - break - } - - $tip - .css(tp) - .addClass(placement) - .addClass('in') - } - } - - , setContent: function () { - var $tip = this.tip() - $tip.find('.tooltip-inner').html(this.getTitle()) - $tip.removeClass('fade in top bottom left right') - } - - , hide: function () { - var that = this - , $tip = this.tip() - - $tip.removeClass('in') - - function removeWithAnimation() { - var timeout = setTimeout(function () { - $tip.off($.support.transition.end).remove() - }, 500) - - $tip.one($.support.transition.end, function () { - clearTimeout(timeout) - $tip.remove() - }) - } - - $.support.transition && this.$tip.hasClass('fade') ? - removeWithAnimation() : - $tip.remove() - } - - , fixTitle: function () { - var $e = this.$element - if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') { - $e.attr('data-original-title', $e.attr('title') || '').removeAttr('title') - } - } - - , hasContent: function () { - return this.getTitle() - } - - , getPosition: function (inside) { - return $.extend({}, (inside ? {top: 0, left: 0} : this.$element.offset()), { - width: this.$element[0].offsetWidth - , height: this.$element[0].offsetHeight - }) - } - - , getTitle: function () { - var title - , $e = this.$element - , o = this.options - - title = $e.attr('data-original-title') - || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title) - - title = title.toString().replace(/(^\s*|\s*$)/, "") - - return title - } - - , tip: function () { - return this.$tip = this.$tip || $(this.options.template) - } - - , validate: function () { - if (!this.$element[0].parentNode) { - this.hide() - this.$element = null - this.options = null - } - } - - , enable: function () { - this.enabled = true - } - - , disable: function () { - this.enabled = false - } - - , toggleEnabled: function () { - this.enabled = !this.enabled - } - - , toggle: function () { - this[this.tip().hasClass('in') ? 'hide' : 'show']() - } - - } - - - /* TOOLTIP PLUGIN DEFINITION - * ========================= */ - - $.fn.tooltip = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('tooltip') - , options = typeof option == 'object' && option - if (!data) $this.data('tooltip', (data = new Tooltip(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.tooltip.Constructor = Tooltip - - $.fn.tooltip.defaults = { - animation: true - , delay: 0 - , selector: false - , placement: 'top' - , trigger: 'hover' - , title: '' - , template: '
' - } - -}( window.jQuery ); \ No newline at end of file diff --git a/source/js/jQuery/easing.js b/source/js/jQuery/easing.js deleted file mode 100644 index eea539e..0000000 --- a/source/js/jQuery/easing.js +++ /dev/null @@ -1,205 +0,0 @@ -/* - * jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/ - * - * Uses the built in easing capabilities added In jQuery 1.1 - * to offer multiple easing options - * - * TERMS OF USE - jQuery Easing - * - * Open source under the BSD License. - * - * Copyright © 2008 George McGinley Smith - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * -*/ - -// t: current time, b: begInnIng value, c: change In value, d: duration -jQuery.easing['jswing'] = jQuery.easing['swing']; - -jQuery.extend( jQuery.easing, -{ - def: 'easeOutQuad', - swing: function (x, t, b, c, d) { - //alert(jQuery.easing.default); - return jQuery.easing[jQuery.easing.def](x, t, b, c, d); - }, - easeInQuad: function (x, t, b, c, d) { - return c*(t/=d)*t + b; - }, - easeOutQuad: function (x, t, b, c, d) { - return -c *(t/=d)*(t-2) + b; - }, - easeInOutQuad: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t + b; - return -c/2 * ((--t)*(t-2) - 1) + b; - }, - easeInCubic: function (x, t, b, c, d) { - return c*(t/=d)*t*t + b; - }, - easeOutCubic: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t + 1) + b; - }, - easeInOutCubic: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t + b; - return c/2*((t-=2)*t*t + 2) + b; - }, - easeInQuart: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t + b; - }, - easeOutQuart: function (x, t, b, c, d) { - return -c * ((t=t/d-1)*t*t*t - 1) + b; - }, - easeInOutQuart: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t + b; - return -c/2 * ((t-=2)*t*t*t - 2) + b; - }, - easeInQuint: function (x, t, b, c, d) { - return c*(t/=d)*t*t*t*t + b; - }, - easeOutQuint: function (x, t, b, c, d) { - return c*((t=t/d-1)*t*t*t*t + 1) + b; - }, - easeInOutQuint: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; - return c/2*((t-=2)*t*t*t*t + 2) + b; - }, - easeInSine: function (x, t, b, c, d) { - return -c * Math.cos(t/d * (Math.PI/2)) + c + b; - }, - easeOutSine: function (x, t, b, c, d) { - return c * Math.sin(t/d * (Math.PI/2)) + b; - }, - easeInOutSine: function (x, t, b, c, d) { - return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; - }, - easeInExpo: function (x, t, b, c, d) { - return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; - }, - easeOutExpo: function (x, t, b, c, d) { - return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; - }, - easeInOutExpo: function (x, t, b, c, d) { - if (t==0) return b; - if (t==d) return b+c; - if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; - return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; - }, - easeInCirc: function (x, t, b, c, d) { - return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; - }, - easeOutCirc: function (x, t, b, c, d) { - return c * Math.sqrt(1 - (t=t/d-1)*t) + b; - }, - easeInOutCirc: function (x, t, b, c, d) { - if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; - return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; - }, - easeInElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - }, - easeOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; - }, - easeInOutElastic: function (x, t, b, c, d) { - var s=1.70158;var p=0;var a=c; - if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); - if (a < Math.abs(c)) { a=c; var s=p/4; } - else var s = p/(2*Math.PI) * Math.asin (c/a); - if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; - return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; - }, - easeInBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*(t/=d)*t*((s+1)*t - s) + b; - }, - easeOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; - }, - easeInOutBack: function (x, t, b, c, d, s) { - if (s == undefined) s = 1.70158; - if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; - return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; - }, - easeInBounce: function (x, t, b, c, d) { - return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b; - }, - easeOutBounce: function (x, t, b, c, d) { - if ((t/=d) < (1/2.75)) { - return c*(7.5625*t*t) + b; - } else if (t < (2/2.75)) { - return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; - } else if (t < (2.5/2.75)) { - return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; - } else { - return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; - } - }, - easeInOutBounce: function (x, t, b, c, d) { - if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b; - return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b; - } -}); - -/* - * - * TERMS OF USE - EASING EQUATIONS - * - * Open source under the BSD License. - * - * Copyright © 2001 Robert Penner - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, - * are permitted provided that the following conditions are met: - * - * Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright notice, this list - * of conditions and the following disclaimer in the documentation and/or other materials - * provided with the distribution. - * - * Neither the name of the author nor the names of contributors may be used to endorse - * or promote products derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE - * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE - * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED - * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED - * OF THE POSSIBILITY OF SUCH DAMAGE. - * - */ \ No newline at end of file diff --git a/source/js/lazyload.js b/source/js/lazyload.js deleted file mode 100644 index 2e80f0c..0000000 --- a/source/js/lazyload.js +++ /dev/null @@ -1,391 +0,0 @@ -/*jslint browser: true, eqeqeq: true, bitwise: true, newcap: true, immed: true, regexp: false */ - -/** -LazyLoad makes it easy and painless to lazily load one or more external -JavaScript or CSS files on demand either during or after the rendering of a web -page. - -Supported browsers include Firefox 2+, IE6+, Safari 3+ (including Mobile -Safari), Google Chrome, and Opera 9+. Other browsers may or may not work and -are not officially supported. - -Visit https://github.com/rgrove/lazyload/ for more info. - -Copyright (c) 2011 Ryan Grove -All rights reserved. - -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the 'Software'), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of -the Software, and to permit persons to whom the Software is furnished to do so, -subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR -COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER -IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN -CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -@module lazyload -@class LazyLoad -@static -@version 2.0.3 (git) -*/ - -LazyLoad = (function (doc) { - // -- Private Variables ------------------------------------------------------ - - // User agent and feature test information. - var env, - - // Reference to the element (populated lazily). - head, - - // Requests currently in progress, if any. - pending = {}, - - // Number of times we've polled to check whether a pending stylesheet has - // finished loading. If this gets too high, we're probably stalled. - pollCount = 0, - - // Queued requests. - queue = {css: [], js: []}, - - // Reference to the browser's list of stylesheets. - styleSheets = doc.styleSheets; - - // -- Private Methods -------------------------------------------------------- - - /** - Creates and returns an HTML element with the specified name and attributes. - - @method createNode - @param {String} name element name - @param {Object} attrs name/value mapping of element attributes - @return {HTMLElement} - @private - */ - function createNode(name, attrs) { - var node = doc.createElement(name), attr; - - for (attr in attrs) { - if (attrs.hasOwnProperty(attr)) { - node.setAttribute(attr, attrs[attr]); - } - } - - return node; - } - - /** - Called when the current pending resource of the specified type has finished - loading. Executes the associated callback (if any) and loads the next - resource in the queue. - - @method finish - @param {String} type resource type ('css' or 'js') - @private - */ - function finish(type) { - var p = pending[type], - callback, - urls; - - if (p) { - callback = p.callback; - urls = p.urls; - - urls.shift(); - pollCount = 0; - - // If this is the last of the pending URLs, execute the callback and - // start the next request in the queue (if any). - if (!urls.length) { - callback && callback.call(p.context, p.obj); - pending[type] = null; - queue[type].length && load(type); - } - } - } - - /** - Populates the env variable with user agent and feature test - information. - - @method getEnv - @private - */ - function getEnv() { - var ua = navigator.userAgent; - - env = { - // True if this browser supports disabling async mode on dynamically - // created script nodes. See - // http://wiki.whatwg.org/wiki/Dynamic_Script_Execution_Order - async: doc.createElement('script').async === true - }; - - (env.webkit = /AppleWebKit\//.test(ua)) - || (env.ie = /MSIE/.test(ua)) - || (env.opera = /Opera/.test(ua)) - || (env.gecko = /Gecko\//.test(ua)) - || (env.unknown = true); - } - - /** - Loads the specified resources, or the next resource of the specified type - in the queue if no resources are specified. If a resource of the specified - type is already being loaded, the new request will be queued until the - first request has been finished. - - When an array of resource URLs is specified, those URLs will be loaded in - parallel if it is possible to do so while preserving execution order. All - browsers support parallel loading of CSS, but only Firefox and Opera - support parallel loading of scripts. In other browsers, scripts will be - queued and loaded one at a time to ensure correct execution order. - - @method load - @param {String} type resource type ('css' or 'js') - @param {String|Array} urls (optional) URL or array of URLs to load - @param {Function} callback (optional) callback function to execute when the - resource is loaded - @param {Object} obj (optional) object to pass to the callback function - @param {Object} context (optional) if provided, the callback function will - be executed in this object's context - @private - */ - function load(type, urls, callback, obj, context) { - var _finish = function () { finish(type); }, - isCSS = type === 'css', - nodes = [], - i, len, node, p, pendingUrls, url; - - env || getEnv(); - - if (urls) { - // If urls is a string, wrap it in an array. Otherwise assume it's an - // array and create a copy of it so modifications won't be made to the - // original. - urls = typeof urls === 'string' ? [urls] : urls.concat(); - - // Create a request object for each URL. If multiple URLs are specified, - // the callback will only be executed after all URLs have been loaded. - // - // Sadly, Firefox and Opera are the only browsers capable of loading - // scripts in parallel while preserving execution order. In all other - // browsers, scripts must be loaded sequentially. - // - // All browsers respect CSS specificity based on the order of the link - // elements in the DOM, regardless of the order in which the stylesheets - // are actually downloaded. - if (isCSS || env.async || env.gecko || env.opera) { - // Load in parallel. - queue[type].push({ - urls : urls, - callback: callback, - obj : obj, - context : context - }); - } else { - // Load sequentially. - for (i = 0, len = urls.length; i < len; ++i) { - queue[type].push({ - urls : [urls[i]], - callback: i === len - 1 ? callback : null, // callback is only added to the last URL - obj : obj, - context : context - }); - } - } - } - - // If a previous load request of this type is currently in progress, we'll - // wait our turn. Otherwise, grab the next item in the queue. - if (pending[type] || !(p = pending[type] = queue[type].shift())) { - return; - } - - head || (head = doc.head || doc.getElementsByTagName('head')[0]); - pendingUrls = p.urls; - - for (i = 0, len = pendingUrls.length; i < len; ++i) { - url = pendingUrls[i]; - - if (isCSS) { - node = env.gecko ? createNode('style') : createNode('link', { - href: url, - rel : 'stylesheet' - }); - } else { - node = createNode('script', {src: url}); - node.async = false; - } - - node.className = 'lazyload'; - node.setAttribute('charset', 'utf-8'); - - if (env.ie && !isCSS) { - node.onreadystatechange = function () { - if (/loaded|complete/.test(node.readyState)) { - node.onreadystatechange = null; - _finish(); - } - }; - } else if (isCSS && (env.gecko || env.webkit)) { - // Gecko and WebKit don't support the onload event on link nodes. - if (env.webkit) { - // In WebKit, we can poll for changes to document.styleSheets to - // figure out when stylesheets have loaded. - p.urls[i] = node.href; // resolve relative URLs (or polling won't work) - pollWebKit(); - } else { - // In Gecko, we can import the requested URL into a