From c086f7041a94ba0ff46c17c6a0ea194a0ea131b7 Mon Sep 17 00:00:00 2001 From: Thomas Steur Date: Wed, 20 Apr 2016 12:48:17 +0000 Subject: Fix tests * Ignore idvisitor in system tests as it always changes in each test * Skip email tests in case intl extension is not installed * Update ui tests --- libs/Zend/Validate/Hostname.php | 1 + 1 file changed, 1 insertion(+) (limited to 'libs') diff --git a/libs/Zend/Validate/Hostname.php b/libs/Zend/Validate/Hostname.php index 1ca10faea9..79e9902b6e 100644 --- a/libs/Zend/Validate/Hostname.php +++ b/libs/Zend/Validate/Hostname.php @@ -491,6 +491,7 @@ class Zend_Validate_Hostname extends Zend_Validate_Abstract '家電' => array(1 => self::VALID_UNICODE_DOMAIN), '微博' => array(1 => self::VALID_UNICODE_DOMAIN), 'ابوظبي' => array(1 => self::VALID_UNICODE_DOMAIN), + '网站' => array(1 => self::VALID_UNICODE_DOMAIN), ); -- cgit v1.2.3 From 02daed6db8fb7269d1b3a466cbb32ed7fab76e85 Mon Sep 17 00:00:00 2001 From: Matthieu Aubry Date: Tue, 28 Jun 2016 17:50:40 +1200 Subject: Update JQuery to the latest 1.12.4 version (#10260) * Update JQuery to the latest 1.* version * UI tests: Updated Jquery to latest version --- libs/bower_components/jquery/.bower.json | 28 +- libs/bower_components/jquery/MIT-LICENSE.txt | 21 - libs/bower_components/jquery/bower.json | 17 +- libs/bower_components/jquery/dist/jquery.js | 4712 +++++++++++--------- libs/bower_components/jquery/dist/jquery.min.js | 10 +- libs/bower_components/jquery/dist/jquery.min.map | 2 +- libs/bower_components/jquery/src/ajax.js | 169 +- libs/bower_components/jquery/src/ajax/jsonp.js | 33 +- libs/bower_components/jquery/src/ajax/load.js | 34 +- libs/bower_components/jquery/src/ajax/parseJSON.js | 8 +- libs/bower_components/jquery/src/ajax/parseXML.js | 10 +- libs/bower_components/jquery/src/ajax/script.js | 26 +- libs/bower_components/jquery/src/ajax/var/nonce.js | 4 +- .../bower_components/jquery/src/ajax/var/rquery.js | 6 +- libs/bower_components/jquery/src/ajax/xhr.js | 83 +- libs/bower_components/jquery/src/attributes.js | 4 +- .../bower_components/jquery/src/attributes/attr.js | 132 +- .../jquery/src/attributes/classes.js | 153 +- .../bower_components/jquery/src/attributes/prop.js | 98 +- .../jquery/src/attributes/support.js | 40 +- libs/bower_components/jquery/src/attributes/val.js | 65 +- libs/bower_components/jquery/src/callbacks.js | 195 +- libs/bower_components/jquery/src/core.js | 159 +- libs/bower_components/jquery/src/core/access.js | 17 +- libs/bower_components/jquery/src/core/init.js | 48 +- libs/bower_components/jquery/src/core/parseHTML.js | 16 +- libs/bower_components/jquery/src/core/ready.js | 63 +- .../jquery/src/core/var/rsingleTag.js | 7 +- libs/bower_components/jquery/src/css.js | 181 +- .../jquery/src/css/addGetHookIf.js | 22 +- libs/bower_components/jquery/src/css/curCSS.js | 50 +- .../jquery/src/css/defaultDisplay.js | 29 +- .../jquery/src/css/hiddenVisibleSelectors.js | 34 +- libs/bower_components/jquery/src/css/support.js | 151 +- libs/bower_components/jquery/src/css/swap.js | 28 - .../jquery/src/css/var/cssExpand.js | 4 +- .../jquery/src/css/var/isHidden.js | 9 +- .../bower_components/jquery/src/css/var/rmargin.js | 6 +- .../jquery/src/css/var/rnumnonpx.js | 4 +- libs/bower_components/jquery/src/data.js | 61 +- libs/bower_components/jquery/src/data/accepts.js | 21 - libs/bower_components/jquery/src/data/support.js | 26 +- libs/bower_components/jquery/src/deferred.js | 61 +- libs/bower_components/jquery/src/deprecated.js | 25 +- libs/bower_components/jquery/src/dimensions.js | 20 +- libs/bower_components/jquery/src/effects.js | 198 +- libs/bower_components/jquery/src/effects/Tween.js | 21 +- .../jquery/src/effects/animatedSelector.js | 8 +- .../bower_components/jquery/src/effects/support.js | 19 +- libs/bower_components/jquery/src/event.js | 441 +- libs/bower_components/jquery/src/event/alias.js | 30 +- libs/bower_components/jquery/src/event/support.js | 20 +- libs/bower_components/jquery/src/exports/amd.js | 6 +- libs/bower_components/jquery/src/exports/global.js | 10 +- libs/bower_components/jquery/src/intro.js | 18 +- libs/bower_components/jquery/src/jquery.js | 10 +- libs/bower_components/jquery/src/manipulation.js | 621 +-- .../jquery/src/manipulation/_evalUrl.js | 11 +- .../jquery/src/manipulation/support.js | 58 +- .../jquery/src/manipulation/var/rcheckableType.js | 6 +- libs/bower_components/jquery/src/offset.js | 56 +- libs/bower_components/jquery/src/outro.js | 1 + libs/bower_components/jquery/src/queue.js | 38 +- libs/bower_components/jquery/src/queue/delay.js | 12 +- .../bower_components/jquery/src/selector-sizzle.js | 10 +- libs/bower_components/jquery/src/selector.js | 2 +- libs/bower_components/jquery/src/serialize.js | 43 +- .../jquery/src/sizzle/dist/sizzle.js | 2044 --------- .../jquery/src/sizzle/dist/sizzle.min.js | 3 - .../jquery/src/sizzle/dist/sizzle.min.map | 1 - libs/bower_components/jquery/src/support.js | 21 +- libs/bower_components/jquery/src/traversing.js | 91 +- .../jquery/src/traversing/findFilter.js | 26 +- .../jquery/src/traversing/var/rneedsContext.js | 4 +- libs/bower_components/jquery/src/var/class2type.js | 5 +- libs/bower_components/jquery/src/var/concat.js | 4 +- libs/bower_components/jquery/src/var/deletedIds.js | 4 +- libs/bower_components/jquery/src/var/hasOwn.js | 4 +- libs/bower_components/jquery/src/var/indexOf.js | 4 +- libs/bower_components/jquery/src/var/pnum.js | 6 +- libs/bower_components/jquery/src/var/push.js | 4 +- libs/bower_components/jquery/src/var/rnotwhite.js | 6 +- libs/bower_components/jquery/src/var/slice.js | 4 +- .../jquery/src/var/strundefined.js | 3 - libs/bower_components/jquery/src/var/support.js | 5 +- libs/bower_components/jquery/src/var/toString.js | 4 +- libs/bower_components/jquery/src/wrap.js | 48 +- 87 files changed, 4844 insertions(+), 5978 deletions(-) delete mode 100644 libs/bower_components/jquery/MIT-LICENSE.txt delete mode 100644 libs/bower_components/jquery/src/css/swap.js delete mode 100644 libs/bower_components/jquery/src/data/accepts.js delete mode 100644 libs/bower_components/jquery/src/sizzle/dist/sizzle.js delete mode 100644 libs/bower_components/jquery/src/sizzle/dist/sizzle.min.js delete mode 100644 libs/bower_components/jquery/src/sizzle/dist/sizzle.min.map delete mode 100644 libs/bower_components/jquery/src/var/strundefined.js (limited to 'libs') diff --git a/libs/bower_components/jquery/.bower.json b/libs/bower_components/jquery/.bower.json index 2575902bd8..d558e5feb6 100644 --- a/libs/bower_components/jquery/.bower.json +++ b/libs/bower_components/jquery/.bower.json @@ -1,37 +1,25 @@ { "name": "jquery", - "version": "1.11.1", "main": "dist/jquery.js", "license": "MIT", "ignore": [ - "**/.*", - "build", - "speed", - "test", - "*.md", - "AUTHORS.txt", - "Gruntfile.js", "package.json" ], - "devDependencies": { - "sizzle": "1.10.19", - "requirejs": "2.1.10", - "qunit": "1.14.0", - "sinon": "1.8.1" - }, "keywords": [ "jquery", "javascript", + "browser", "library" ], - "homepage": "https://github.com/jquery/jquery", - "_release": "1.11.1", + "homepage": "https://github.com/jquery/jquery-dist", + "version": "1.12.4", + "_release": "1.12.4", "_resolution": { "type": "version", - "tag": "1.11.1", - "commit": "0d5ec2d8ac94a419ee47a39319c43ff9a7326b50" + "tag": "1.12.4", + "commit": "5e89585e0121e72ff47de177c5ef604f3089a53d" }, - "_source": "git://github.com/jquery/jquery.git", - "_target": "~1.11.0", + "_source": "https://github.com/jquery/jquery-dist.git", + "_target": "~1", "_originalSource": "jquery" } \ No newline at end of file diff --git a/libs/bower_components/jquery/MIT-LICENSE.txt b/libs/bower_components/jquery/MIT-LICENSE.txt deleted file mode 100644 index cdd31b5c71..0000000000 --- a/libs/bower_components/jquery/MIT-LICENSE.txt +++ /dev/null @@ -1,21 +0,0 @@ -Copyright 2014 jQuery Foundation and other contributors -http://jquery.com/ - -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. diff --git a/libs/bower_components/jquery/bower.json b/libs/bower_components/jquery/bower.json index 03fad08869..95798d5ada 100644 --- a/libs/bower_components/jquery/bower.json +++ b/libs/bower_components/jquery/bower.json @@ -1,27 +1,14 @@ { "name": "jquery", - "version": "1.11.1", "main": "dist/jquery.js", "license": "MIT", "ignore": [ - "**/.*", - "build", - "speed", - "test", - "*.md", - "AUTHORS.txt", - "Gruntfile.js", "package.json" ], - "devDependencies": { - "sizzle": "1.10.19", - "requirejs": "2.1.10", - "qunit": "1.14.0", - "sinon": "1.8.1" - }, "keywords": [ "jquery", "javascript", + "browser", "library" ] -} +} \ No newline at end of file diff --git a/libs/bower_components/jquery/dist/jquery.js b/libs/bower_components/jquery/dist/jquery.js index d4b67f7e6c..7fc60fca78 100644 --- a/libs/bower_components/jquery/dist/jquery.js +++ b/libs/bower_components/jquery/dist/jquery.js @@ -1,27 +1,27 @@ /*! - * jQuery JavaScript Library v1.11.1 + * jQuery JavaScript Library v1.12.4 * http://jquery.com/ * * Includes Sizzle.js * http://sizzlejs.com/ * - * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors + * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * - * Date: 2014-05-01T17:42Z + * Date: 2016-05-20T17:17Z */ (function( global, factory ) { if ( typeof module === "object" && typeof module.exports === "object" ) { - // For CommonJS and CommonJS-like environments where a proper window is present, - // execute the factory and get jQuery - // For environments that do not inherently posses a window with a document - // (such as Node.js), expose a jQuery-making factory as module.exports - // This accentuates the need for the creation of a real window + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. // e.g. var jQuery = require("jquery")(window); - // See ticket #14549 for more info + // See ticket #14549 for more info. module.exports = global.document ? factory( global, true ) : function( w ) { @@ -37,14 +37,15 @@ // Pass this if window is not defined yet }(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { -// Can't do this because several apps including ASP.NET trace +// Support: Firefox 18+ +// Can't be in strict mode, several libs including ASP.NET trace // the stack via arguments.caller.callee and Firefox dies if // you try to trace through "use strict" call chains. (#13335) -// Support: Firefox 18+ -// - +//"use strict"; var deletedIds = []; +var document = window.document; + var slice = deletedIds.slice; var concat = deletedIds.concat; @@ -64,10 +65,11 @@ var support = {}; var - version = "1.11.1", + version = "1.12.4", // Define a local copy of jQuery jQuery = function( selector, context ) { + // The jQuery object is actually just the init constructor 'enhanced' // Need init if jQuery is called (just allow error to be thrown if not included) return new jQuery.fn.init( selector, context ); @@ -87,6 +89,7 @@ var }; jQuery.fn = jQuery.prototype = { + // The current version of jQuery being used jquery: version, @@ -130,16 +133,14 @@ jQuery.fn = jQuery.prototype = { }, // Execute a callback for every element in the matched set. - // (You can seed the arguments with an array of args, but this is - // only used internally.) - each: function( callback, args ) { - return jQuery.each( this, callback, args ); + each: function( callback ) { + return jQuery.each( this, callback ); }, map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { return callback.call( elem, i, elem ); - })); + } ) ); }, slice: function() { @@ -157,11 +158,11 @@ jQuery.fn = jQuery.prototype = { eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); }, end: function() { - return this.prevObject || this.constructor(null); + return this.prevObject || this.constructor(); }, // For internal use only. @@ -173,7 +174,7 @@ jQuery.fn = jQuery.prototype = { jQuery.extend = jQuery.fn.extend = function() { var src, copyIsArray, copy, name, options, clone, - target = arguments[0] || {}, + target = arguments[ 0 ] || {}, i = 1, length = arguments.length, deep = false; @@ -188,7 +189,7 @@ jQuery.extend = jQuery.fn.extend = function() { } // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { + if ( typeof target !== "object" && !jQuery.isFunction( target ) ) { target = {}; } @@ -199,8 +200,10 @@ jQuery.extend = jQuery.fn.extend = function() { } for ( ; i < length; i++ ) { + // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { + if ( ( options = arguments[ i ] ) != null ) { + // Extend the base object for ( name in options ) { src = target[ name ]; @@ -212,13 +215,15 @@ jQuery.extend = jQuery.fn.extend = function() { } // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = jQuery.isArray( copy ) ) ) ) { + if ( copyIsArray ) { copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; + clone = src && jQuery.isArray( src ) ? src : []; } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; + clone = src && jQuery.isPlainObject( src ) ? src : {}; } // Never move original objects, clone them @@ -236,7 +241,8 @@ jQuery.extend = jQuery.fn.extend = function() { return target; }; -jQuery.extend({ +jQuery.extend( { + // Unique for each copy of jQuery on the page expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), @@ -253,11 +259,11 @@ jQuery.extend({ // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { - return jQuery.type(obj) === "function"; + return jQuery.type( obj ) === "function"; }, isArray: Array.isArray || function( obj ) { - return jQuery.type(obj) === "array"; + return jQuery.type( obj ) === "array"; }, isWindow: function( obj ) { @@ -266,10 +272,13 @@ jQuery.extend({ }, isNumeric: function( obj ) { + // parseFloat NaNs numeric-cast false positives (null|true|false|"") // ...but misinterprets leading-number strings, particularly hex literals ("0x...") // subtraction forces infinities to NaN - return !jQuery.isArray( obj ) && obj - parseFloat( obj ) >= 0; + // adding 1 corrects loss of precision from parseFloat (#15100) + var realStringObj = obj && obj.toString(); + return !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0; }, isEmptyObject: function( obj ) { @@ -286,25 +295,27 @@ jQuery.extend({ // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well - if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { + if ( !obj || jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } try { + // Not own constructor property must be Object if ( obj.constructor && - !hasOwn.call(obj, "constructor") && - !hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { + !hasOwn.call( obj, "constructor" ) && + !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { return false; } } catch ( e ) { + // IE8,9 Will throw exceptions on certain host objects #9897 return false; } // Support: IE<9 // Handle iteration over inherited properties before own properties. - if ( support.ownLast ) { + if ( !support.ownFirst ) { for ( key in obj ) { return hasOwn.call( obj, key ); } @@ -322,20 +333,20 @@ jQuery.extend({ return obj + ""; } return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call(obj) ] || "object" : + class2type[ toString.call( obj ) ] || "object" : typeof obj; }, - // Evaluates a script in a global context // Workarounds based on findings by Jim Driscoll // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context globalEval: function( data ) { if ( data && jQuery.trim( data ) ) { + // We use execScript on Internet Explorer // We use an anonymous function so that context is window // rather than jQuery in Firefox ( window.execScript || function( data ) { - window[ "eval" ].call( window, data ); + window[ "eval" ].call( window, data ); // jscs:ignore requireDotNotation } )( data ); } }, @@ -350,49 +361,20 @@ jQuery.extend({ return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); }, - // args is for internal usage only - each: function( obj, callback, args ) { - var value, - i = 0, - length = obj.length, - isArray = isArraylike( obj ); - - if ( args ) { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.apply( obj[ i ], args ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.apply( obj[ i ], args ); + each: function( obj, callback ) { + var length, i = 0; - if ( value === false ) { - break; - } + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; } } - - // A special, fast, case for the most common use of each } else { - if ( isArray ) { - for ( ; i < length; i++ ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } - } - } else { - for ( i in obj ) { - value = callback.call( obj[ i ], i, obj[ i ] ); - - if ( value === false ) { - break; - } + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; } } } @@ -412,7 +394,7 @@ jQuery.extend({ var ret = results || []; if ( arr != null ) { - if ( isArraylike( Object(arr) ) ) { + if ( isArrayLike( Object( arr ) ) ) { jQuery.merge( ret, typeof arr === "string" ? [ arr ] : arr @@ -437,6 +419,7 @@ jQuery.extend({ i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; for ( ; i < len; i++ ) { + // Skip accessing in sparse arrays if ( i in arr && arr[ i ] === elem ) { return i; @@ -459,7 +442,7 @@ jQuery.extend({ // Support: IE<9 // Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists) if ( len !== len ) { - while ( second[j] !== undefined ) { + while ( second[ j ] !== undefined ) { first[ i++ ] = second[ j++ ]; } } @@ -490,14 +473,13 @@ jQuery.extend({ // arg is for internal usage only map: function( elems, callback, arg ) { - var value, + var length, value, i = 0, - length = elems.length, - isArray = isArraylike( elems ), ret = []; // Go through the array, translating each of the items to their new values - if ( isArray ) { + if ( isArrayLike( elems ) ) { + length = elems.length; for ( ; i < length; i++ ) { value = callback( elems[ i ], i, arg ); @@ -560,38 +542,50 @@ jQuery.extend({ // jQuery.support is not used in Core but other projects attach their // properties to it so it needs to exist. support: support -}); +} ); + +// JSHint would error on this code due to the Symbol not being defined in ES5. +// Defining this global in .jshintrc would create a danger of using the global +// unguarded in another place, it seems safer to just disable JSHint for these +// three lines. +/* jshint ignore: start */ +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ]; +} +/* jshint ignore: end */ // Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), +function( i, name ) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); +} ); + +function isArrayLike( obj ) { -function isArraylike( obj ) { - var length = obj.length, + // Support: iOS 8.2 (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, type = jQuery.type( obj ); if ( type === "function" || jQuery.isWindow( obj ) ) { return false; } - if ( obj.nodeType === 1 && length ) { - return true; - } - return type === "array" || length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj; } var Sizzle = /*! - * Sizzle CSS Selector Engine v1.10.19 + * Sizzle CSS Selector Engine v2.2.1 * http://sizzlejs.com/ * - * Copyright 2013 jQuery Foundation, Inc. and other contributors + * Copyright jQuery Foundation and other contributors * Released under the MIT license * http://jquery.org/license * - * Date: 2014-04-18 + * Date: 2015-10-17 */ (function( window ) { @@ -618,7 +612,7 @@ var i, contains, // Instance-specific data - expando = "sizzle" + -(new Date()), + expando = "sizzle" + 1 * new Date(), preferredDoc = window.document, dirruns = 0, done = 0, @@ -633,7 +627,6 @@ var i, }, // General-purpose constants - strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, // Instance methods @@ -643,12 +636,13 @@ var i, push_native = arr.push, push = arr.push, slice = arr.slice, - // Use a stripped-down indexOf if we can't use a native one - indexOf = arr.indexOf || function( elem ) { + // Use a stripped-down indexOf as it's faster than native + // http://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { var i = 0, - len = this.length; + len = list.length; for ( ; i < len; i++ ) { - if ( this[i] === elem ) { + if ( list[i] === elem ) { return i; } } @@ -659,25 +653,21 @@ var i, // Regular expressions - // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace + // http://www.w3.org/TR/css3-selectors/#whitespace whitespace = "[\\x20\\t\\r\\n\\f]", - // http://www.w3.org/TR/css3-syntax/#characters - characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", - // Loosely modeled on CSS identifier characters - // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors - // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier - identifier = characterEncoding.replace( "w", "w#" ), + // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier + identifier = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + // Operator (capture 2) "*([*^$|!~]?=)" + whitespace + // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]", - pseudos = ":(" + characterEncoding + ")(?:\\((" + + pseudos = ":(" + identifier + ")(?:\\((" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: // 1. quoted (capture 3; capture 4 or capture 5) "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + @@ -688,6 +678,7 @@ var i, ")\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), @@ -699,9 +690,9 @@ var i, ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { - "ID": new RegExp( "^#(" + characterEncoding + ")" ), - "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), - "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), "ATTR": new RegExp( "^" + attributes ), "PSEUDO": new RegExp( "^" + pseudos ), "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + @@ -739,6 +730,14 @@ var i, String.fromCharCode( high + 0x10000 ) : // Supplemental Plane codepoint (surrogate pair) String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); }; // Optimize for push.apply( _, NodeList ) @@ -771,104 +770,129 @@ try { } function Sizzle( selector, context, results, seed ) { - var match, elem, m, nodeType, - // QSA vars - i, groups, old, nid, newContext, newSelector; + var m, i, elem, nid, nidselect, match, groups, newSelector, + newContext = context && context.ownerDocument, - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; - context = context || document; results = results || []; - if ( !selector || typeof selector !== "string" ) { + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + return results; } - if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { - return []; - } + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { - if ( documentIsHTML && !seed ) { + if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { + setDocument( context ); + } + context = context || document; - // Shortcuts - if ( (match = rquickExpr.exec( selector )) ) { - // Speed-up: Sizzle("#ID") - if ( (m = match[1]) ) { - if ( nodeType === 9 ) { - elem = context.getElementById( m ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document (jQuery #6963) - if ( elem && elem.parentNode ) { - // Handle the case where IE, Opera, and Webkit return items - // by name instead of ID - if ( elem.id === m ) { - results.push( elem ); + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) { + + // ID selector + if ( (m = match[1]) ) { + + // Document context + if ( nodeType === 9 ) { + if ( (elem = context.getElementById( m )) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { return results; } + + // Element context } else { - return results; - } - } else { - // Context is not a document - if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && - contains( context, elem ) && elem.id === m ) { - results.push( elem ); - return results; + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && (elem = newContext.getElementById( m )) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } } - } - // Speed-up: Sizzle("TAG") - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; + // Type selector + } else if ( match[2] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; - // Speed-up: Sizzle(".CLASS") - } else if ( (m = match[3]) && support.getElementsByClassName && context.getElementsByClassName ) { - push.apply( results, context.getElementsByClassName( m ) ); - return results; + // Class selector + } else if ( (m = match[3]) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } } - } - // QSA path - if ( support.qsa && (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - nid = old = expando; - newContext = context; - newSelector = nodeType === 9 && selector; + // Take advantage of querySelectorAll + if ( support.qsa && + !compilerCache[ selector + " " ] && + (!rbuggyQSA || !rbuggyQSA.test( selector )) ) { - // qSA works strangely on Element-rooted queries - // We can work around this by specifying an extra ID on the root - // and working up from there (Thanks to Andrew Dupont for the technique) - // IE 8 doesn't work on object elements - if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { - groups = tokenize( selector ); + if ( nodeType !== 1 ) { + newContext = context; + newSelector = selector; - if ( (old = context.getAttribute("id")) ) { - nid = old.replace( rescape, "\\$&" ); - } else { - context.setAttribute( "id", nid ); - } - nid = "[id='" + nid + "'] "; + // qSA looks outside Element context, which is not what we want + // Thanks to Andrew Dupont for this workaround technique + // Support: IE <=8 + // Exclude object elements + } else if ( context.nodeName.toLowerCase() !== "object" ) { - i = groups.length; - while ( i-- ) { - groups[i] = nid + toSelector( groups[i] ); + // Capture the context ID, setting it first if necessary + if ( (nid = context.getAttribute( "id" )) ) { + nid = nid.replace( rescape, "\\$&" ); + } else { + context.setAttribute( "id", (nid = expando) ); + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + nidselect = ridentifier.test( nid ) ? "#" + nid : "[id='" + nid + "']"; + while ( i-- ) { + groups[i] = nidselect + " " + toSelector( groups[i] ); + } + newSelector = groups.join( "," ); + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; } - newContext = rsibling.test( selector ) && testContext( context.parentNode ) || context; - newSelector = groups.join(","); - } - if ( newSelector ) { - try { - push.apply( results, - newContext.querySelectorAll( newSelector ) - ); - return results; - } catch(qsaError) { - } finally { - if ( !old ) { - context.removeAttribute("id"); + if ( newSelector ) { + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } } } } @@ -881,7 +905,7 @@ function Sizzle( selector, context, results, seed ) { /** * Create key-value caches of limited size - * @returns {Function(string, Object)} Returns the Object data after storing it on itself with + * @returns {function(string, object)} Returns the Object data after storing it on itself with * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) * deleting the oldest entry */ @@ -936,7 +960,7 @@ function assert( fn ) { */ function addHandle( attrs, handler ) { var arr = attrs.split("|"), - i = attrs.length; + i = arr.length; while ( i-- ) { Expr.attrHandle[ arr[i] ] = handler; @@ -1022,7 +1046,7 @@ function createPositionalPseudo( fn ) { * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value */ function testContext( context ) { - return context && typeof context.getElementsByTagName !== strundefined && context; + return context && typeof context.getElementsByTagName !== "undefined" && context; } // Expose support vars for convenience @@ -1046,36 +1070,29 @@ isXML = Sizzle.isXML = function( elem ) { * @returns {Object} Returns the current document */ setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, - doc = node ? node.ownerDocument || node : preferredDoc, - parent = doc.defaultView; + var hasCompare, parent, + doc = node ? node.ownerDocument || node : preferredDoc; - // If no document and documentElement is available, return + // Return early if doc is invalid or already selected if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } - // Set our document + // Update global variables document = doc; - docElem = doc.documentElement; - - // Support tests - documentIsHTML = !isXML( doc ); + docElem = document.documentElement; + documentIsHTML = !isXML( document ); - // Support: IE>8 - // If iframe document is assigned to "document" variable and if iframe has been reloaded, - // IE will throw "permission denied" error when accessing "document" variable, see jQuery #13936 - // IE6-8 do not support the defaultView property so parent will be undefined - if ( parent && parent !== parent.top ) { - // IE11 does not have attachEvent, so all must suffer + // Support: IE 9-11, Edge + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + if ( (parent = document.defaultView) && parent.top !== parent ) { + // Support: IE 11 if ( parent.addEventListener ) { - parent.addEventListener( "unload", function() { - setDocument(); - }, false ); + parent.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only } else if ( parent.attachEvent ) { - parent.attachEvent( "onunload", function() { - setDocument(); - }); + parent.attachEvent( "onunload", unloadHandler ); } } @@ -1083,7 +1100,8 @@ setDocument = Sizzle.setDocument = function( node ) { ---------------------------------------------------------------------- */ // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties (excepting IE8 booleans) + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) support.attributes = assert(function( div ) { div.className = "i"; return !div.getAttribute("className"); @@ -1094,21 +1112,12 @@ setDocument = Sizzle.setDocument = function( node ) { // Check if getElementsByTagName("*") returns only elements support.getElementsByTagName = assert(function( div ) { - div.appendChild( doc.createComment("") ); + div.appendChild( document.createComment("") ); return !div.getElementsByTagName("*").length; }); - // Check if getElementsByClassName can be trusted - support.getElementsByClassName = rnative.test( doc.getElementsByClassName ) && assert(function( div ) { - div.innerHTML = "
"; - - // Support: Safari<4 - // Catch class over-caching - div.firstChild.className = "i"; - // Support: Opera<10 - // Catch gEBCN failure to find non-leading classes - return div.getElementsByClassName("i").length === 2; - }); + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); // Support: IE<10 // Check if getElementById returns elements by name @@ -1116,17 +1125,15 @@ setDocument = Sizzle.setDocument = function( node ) { // so use a roundabout getElementsByName test support.getById = assert(function( div ) { docElem.appendChild( div ).id = expando; - return !doc.getElementsByName || !doc.getElementsByName( expando ).length; + return !document.getElementsByName || !document.getElementsByName( expando ).length; }); // ID find and filter if ( support.getById ) { Expr.find["ID"] = function( id, context ) { - if ( typeof context.getElementById !== strundefined && documentIsHTML ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { var m = context.getElementById( id ); - // Check parentNode to catch when Blackberry 4.6 returns - // nodes that are no longer in the document #6963 - return m && m.parentNode ? [ m ] : []; + return m ? [ m ] : []; } }; Expr.filter["ID"] = function( id ) { @@ -1143,7 +1150,8 @@ setDocument = Sizzle.setDocument = function( node ) { Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { - var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode("id"); return node && node.value === attrId; }; }; @@ -1152,14 +1160,20 @@ setDocument = Sizzle.setDocument = function( node ) { // Tag Expr.find["TAG"] = support.getElementsByTagName ? function( tag, context ) { - if ( typeof context.getElementsByTagName !== strundefined ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); } } : + function( tag, context ) { var elem, tmp = [], i = 0, + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too results = context.getElementsByTagName( tag ); // Filter out possible comments @@ -1177,7 +1191,7 @@ setDocument = Sizzle.setDocument = function( node ) { // Class Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( typeof context.getElementsByClassName !== strundefined && documentIsHTML ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { return context.getElementsByClassName( className ); } }; @@ -1197,7 +1211,7 @@ setDocument = Sizzle.setDocument = function( node ) { // See http://bugs.jquery.com/ticket/13378 rbuggyQSA = []; - if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { + if ( (support.qsa = rnative.test( document.querySelectorAll )) ) { // Build QSA regex // Regex strategy adopted from Diego Perini assert(function( div ) { @@ -1206,13 +1220,15 @@ setDocument = Sizzle.setDocument = function( node ) { // setting a boolean content attribute, // since its presence should be enough // http://bugs.jquery.com/ticket/12359 - div.innerHTML = ""; + docElem.appendChild( div ).innerHTML = "" + + ""; // Support: IE8, Opera 11-12.16 // Nothing should be selected when empty strings follow ^= or $= or *= // The test attribute must be unknown in Opera but "safe" for WinRT // http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section - if ( div.querySelectorAll("[msallowclip^='']").length ) { + if ( div.querySelectorAll("[msallowcapture^='']").length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); } @@ -1222,18 +1238,30 @@ setDocument = Sizzle.setDocument = function( node ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); } + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !div.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push("~="); + } + // Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":checked").length ) { rbuggyQSA.push(":checked"); } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibing-combinator selector` fails + if ( !div.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push(".#.+[+~]"); + } }); assert(function( div ) { // Support: Windows 8 Native Apps // The type and name attributes are restricted during .innerHTML assignment - var input = doc.createElement("input"); + var input = document.createElement("input"); input.setAttribute( "type", "hidden" ); div.appendChild( input ).setAttribute( "name", "D" ); @@ -1281,7 +1309,7 @@ setDocument = Sizzle.setDocument = function( node ) { hasCompare = rnative.test( docElem.compareDocumentPosition ); // Element contains another - // Purposefully does not implement inclusive descendent + // Purposefully self-exclusive // As in, an element does not contain itself contains = hasCompare || rnative.test( docElem.contains ) ? function( a, b ) { @@ -1335,16 +1363,16 @@ setDocument = Sizzle.setDocument = function( node ) { (!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) { // Choose the first element that is related to our preferred document - if ( a === doc || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { + if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) { return -1; } - if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { + if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { return 1; } // Maintain original order return sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 0; } @@ -1366,12 +1394,12 @@ setDocument = Sizzle.setDocument = function( node ) { // Parentless nodes are either documents or disconnected if ( !aup || !bup ) { - return a === doc ? -1 : - b === doc ? 1 : + return a === document ? -1 : + b === document ? 1 : aup ? -1 : bup ? 1 : sortInput ? - ( indexOf.call( sortInput, a ) - indexOf.call( sortInput, b ) ) : + ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : 0; // If the nodes are siblings, we can do a quick check @@ -1404,7 +1432,7 @@ setDocument = Sizzle.setDocument = function( node ) { 0; }; - return doc; + return document; }; Sizzle.matches = function( expr, elements ) { @@ -1421,6 +1449,7 @@ Sizzle.matchesSelector = function( elem, expr ) { expr = expr.replace( rattributeQuotes, "='$1']" ); if ( support.matchesSelector && documentIsHTML && + !compilerCache[ expr + " " ] && ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { @@ -1434,7 +1463,7 @@ Sizzle.matchesSelector = function( elem, expr ) { elem.document && elem.document.nodeType !== 11 ) { return ret; } - } catch(e) {} + } catch (e) {} } return Sizzle( expr, document, null, [ elem ] ).length > 0; @@ -1653,7 +1682,7 @@ Expr = Sizzle.selectors = { return pattern || (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== strundefined && elem.getAttribute("class") || "" ); + return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); }); }, @@ -1675,7 +1704,7 @@ Expr = Sizzle.selectors = { operator === "^=" ? check && result.indexOf( check ) === 0 : operator === "*=" ? check && result.indexOf( check ) > -1 : operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : + operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : false; }; @@ -1694,11 +1723,12 @@ Expr = Sizzle.selectors = { } : function( elem, context, xml ) { - var cache, outerCache, node, diff, nodeIndex, start, + var cache, uniqueCache, outerCache, node, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType; + useCache = !xml && !ofType, + diff = false; if ( parent ) { @@ -1707,7 +1737,10 @@ Expr = Sizzle.selectors = { while ( dir ) { node = elem; while ( (node = node[ dir ]) ) { - if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { + if ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) { + return false; } } @@ -1721,11 +1754,21 @@ Expr = Sizzle.selectors = { // non-xml :nth-child(...) stores cache data on `parent` if ( forward && useCache ) { + // Seek `elem` from a previously-cached index - outerCache = parent[ expando ] || (parent[ expando ] = {}); - cache = outerCache[ type ] || []; - nodeIndex = cache[0] === dirruns && cache[1]; - diff = cache[0] === dirruns && cache[2]; + + // ...in a gzip-friendly way + node = parent; + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex && cache[ 2 ]; node = nodeIndex && parent.childNodes[ nodeIndex ]; while ( (node = ++nodeIndex && node && node[ dir ] || @@ -1735,29 +1778,55 @@ Expr = Sizzle.selectors = { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { - outerCache[ type ] = [ dirruns, nodeIndex, diff ]; + uniqueCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } - // Use previously-cached element index if available - } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { - diff = cache[1]; - - // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) } else { - // Use the same loop as above to seek `elem` from the start - while ( (node = ++nodeIndex && node && node[ dir ] || - (diff = nodeIndex = 0) || start.pop()) ) { + // Use previously-cached element index if available + if ( useCache ) { + // ...in a gzip-friendly way + node = elem; + outerCache = node[ expando ] || (node[ expando ] = {}); - if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { - // Cache the index of each encountered element - if ( useCache ) { - (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; - } + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + cache = uniqueCache[ type ] || []; + nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ]; + diff = nodeIndex; + } - if ( node === elem ) { - break; + // xml :nth-child(...) + // or :nth-last-child(...) or :nth(-last)?-of-type(...) + if ( diff === false ) { + // Use the same loop as above to seek `elem` from the start + while ( (node = ++nodeIndex && node && node[ dir ] || + (diff = nodeIndex = 0) || start.pop()) ) { + + if ( ( ofType ? + node.nodeName.toLowerCase() === name : + node.nodeType === 1 ) && + ++diff ) { + + // Cache the index of each encountered element + if ( useCache ) { + outerCache = node[ expando ] || (node[ expando ] = {}); + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ node.uniqueID ] || + (outerCache[ node.uniqueID ] = {}); + + uniqueCache[ type ] = [ dirruns, diff ]; + } + + if ( node === elem ) { + break; + } } } } @@ -1795,7 +1864,7 @@ Expr = Sizzle.selectors = { matched = fn( seed, argument ), i = matched.length; while ( i-- ) { - idx = indexOf.call( seed, matched[i] ); + idx = indexOf( seed, matched[i] ); seed[ idx ] = !( matches[ idx ] = matched[i] ); } }) : @@ -1834,6 +1903,8 @@ Expr = Sizzle.selectors = { function( elem, context, xml ) { input[0] = elem; matcher( input, null, xml, results ); + // Don't keep the element (issue #299) + input[0] = null; return !results.pop(); }; }), @@ -1845,6 +1916,7 @@ Expr = Sizzle.selectors = { }), "contains": markFunction(function( text ) { + text = text.replace( runescape, funescape ); return function( elem ) { return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; }; @@ -2116,10 +2188,10 @@ function addCombinator( matcher, combinator, base ) { // Check against all ancestor/preceding elements function( elem, context, xml ) { - var oldCache, outerCache, + var oldCache, uniqueCache, outerCache, newCache = [ dirruns, doneName ]; - // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching + // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching if ( xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { @@ -2132,14 +2204,19 @@ function addCombinator( matcher, combinator, base ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { outerCache = elem[ expando ] || (elem[ expando ] = {}); - if ( (oldCache = outerCache[ dir ]) && + + // Support: IE <9 only + // Defend against cloned attroperties (jQuery gh-1709) + uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {}); + + if ( (oldCache = uniqueCache[ dir ]) && oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) { // Assign to newCache so results back-propagate to previous elements return (newCache[ 2 ] = oldCache[ 2 ]); } else { // Reuse newcache so results back-propagate to previous elements - outerCache[ dir ] = newCache; + uniqueCache[ dir ] = newCache; // A match means we're done; a fail means we have to keep checking if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { @@ -2266,7 +2343,7 @@ function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postS i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { + (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { seed[temp] = !(results[temp] = elem); } @@ -2301,13 +2378,16 @@ function matcherFromTokens( tokens ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { - return indexOf.call( checkContext, elem ) > -1; + return indexOf( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { - return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( + var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( (checkContext = context).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); + // Avoid hanging onto element (issue #299) + checkContext = null; + return ret; } ]; for ( ; i < len; i++ ) { @@ -2361,18 +2441,21 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { len = elems.length; if ( outermost ) { - outermostContext = context !== document && context; + outermostContext = context === document || context || outermost; } // Add elements passing elementMatchers directly to results - // Keep `i` a string if there are no elements so `matchedCount` will be "00" below // Support: IE<9, Safari // Tolerate NodeList properties (IE: "length"; Safari: ) matching elements by id for ( ; i !== len && (elem = elems[i]) != null; i++ ) { if ( byElement && elem ) { j = 0; + if ( !context && elem.ownerDocument !== document ) { + setDocument( elem ); + xml = !documentIsHTML; + } while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context, xml ) ) { + if ( matcher( elem, context || document, xml) ) { results.push( elem ); break; } @@ -2396,8 +2479,17 @@ function matcherFromGroupMatchers( elementMatchers, setMatchers ) { } } - // Apply set filters to unmatched elements + // `i` is now the count of elements visited above, and adding it to `matchedCount` + // makes the latter nonnegative. matchedCount += i; + + // Apply set filters to unmatched elements + // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount` + // equals `i`), unless we didn't visit _any_ elements in the above loop because we have + // no element matchers and no seed. + // Incrementing an initially-string "0" `i` allows `i` to remain a string only in that + // case, which will result in a "00" `matchedCount` that differs from `i` but is also + // numerically zero. if ( bySet && i !== matchedCount ) { j = 0; while ( (matcher = setMatchers[j++]) ) { @@ -2489,10 +2581,11 @@ select = Sizzle.select = function( selector, context, results, seed ) { results = results || []; - // Try to minimize operations if there is no seed and only one group + // Try to minimize operations if there is only one selector in the list and no seed + // (the latter of which guarantees us context) if ( match.length === 1 ) { - // Take a shortcut and set the context if the root selector is an ID + // Reduce context if the leading compound selector is an ID tokens = match[0] = match[0].slice( 0 ); if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && support.getById && context.nodeType === 9 && documentIsHTML && @@ -2547,7 +2640,7 @@ select = Sizzle.select = function( selector, context, results, seed ) { context, !documentIsHTML, results, - rsibling.test( selector ) && testContext( context.parentNode ) || context + !context || rsibling.test( selector ) && testContext( context.parentNode ) || context ); return results; }; @@ -2557,7 +2650,7 @@ select = Sizzle.select = function( selector, context, results, seed ) { // Sort stability support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; -// Support: Chrome<14 +// Support: Chrome 14-35+ // Always assume duplicates if they aren't passed to the comparison function support.detectDuplicates = !!hasDuplicate; @@ -2623,17 +2716,46 @@ return Sizzle; jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.pseudos; -jQuery.unique = Sizzle.uniqueSort; +jQuery.expr[ ":" ] = jQuery.expr.pseudos; +jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; +var dir = function( elem, dir, until ) { + var matched = [], + truncate = until !== undefined; + + while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) { + if ( elem.nodeType === 1 ) { + if ( truncate && jQuery( elem ).is( until ) ) { + break; + } + matched.push( elem ); + } + } + return matched; +}; + + +var siblings = function( n, elem ) { + var matched = []; + + for ( ; n; n = n.nextSibling ) { + if ( n.nodeType === 1 && n !== elem ) { + matched.push( n ); + } + } + + return matched; +}; + + var rneedsContext = jQuery.expr.match.needsContext; -var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); +var rsingleTag = ( /^<([\w-]+)\s*\/?>(?:<\/\1>|)$/ ); @@ -2645,14 +2767,14 @@ function winnow( elements, qualifier, not ) { return jQuery.grep( elements, function( elem, i ) { /* jshint -W018 */ return !!qualifier.call( elem, i, elem ) !== not; - }); + } ); } if ( qualifier.nodeType ) { return jQuery.grep( elements, function( elem ) { return ( elem === qualifier ) !== not; - }); + } ); } @@ -2665,8 +2787,8 @@ function winnow( elements, qualifier, not ) { } return jQuery.grep( elements, function( elem ) { - return ( jQuery.inArray( elem, qualifier ) >= 0 ) !== not; - }); + return ( jQuery.inArray( elem, qualifier ) > -1 ) !== not; + } ); } jQuery.filter = function( expr, elems, not ) { @@ -2680,10 +2802,10 @@ jQuery.filter = function( expr, elems, not ) { jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { return elem.nodeType === 1; - })); + } ) ); }; -jQuery.fn.extend({ +jQuery.fn.extend( { find: function( selector ) { var i, ret = [], @@ -2691,13 +2813,13 @@ jQuery.fn.extend({ len = self.length; if ( typeof selector !== "string" ) { - return this.pushStack( jQuery( selector ).filter(function() { + return this.pushStack( jQuery( selector ).filter( function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( self[ i ], this ) ) { return true; } } - }) ); + } ) ); } for ( i = 0; i < len; i++ ) { @@ -2710,10 +2832,10 @@ jQuery.fn.extend({ return ret; }, filter: function( selector ) { - return this.pushStack( winnow(this, selector || [], false) ); + return this.pushStack( winnow( this, selector || [], false ) ); }, not: function( selector ) { - return this.pushStack( winnow(this, selector || [], true) ); + return this.pushStack( winnow( this, selector || [], true ) ); }, is: function( selector ) { return !!winnow( @@ -2727,7 +2849,7 @@ jQuery.fn.extend({ false ).length; } -}); +} ); // Initialize a jQuery object @@ -2736,15 +2858,12 @@ jQuery.fn.extend({ // A central reference to the root jQuery(document) var rootjQuery, - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - // A simple way to check for HTML strings // Prioritize #id over to avoid XSS via location.hash (#9521) // Strict HTML recognition (#11290: must start with <) rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/, - init = jQuery.fn.init = function( selector, context ) { + init = jQuery.fn.init = function( selector, context, root ) { var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false) @@ -2752,9 +2871,16 @@ var rootjQuery, return this; } + // init accepts an alternate rootjQuery + // so migrate can support jQuery.sub (gh-2101) + root = root || rootjQuery; + // Handle HTML strings if ( typeof selector === "string" ) { - if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { + if ( selector.charAt( 0 ) === "<" && + selector.charAt( selector.length - 1 ) === ">" && + selector.length >= 3 ) { + // Assume that strings that start and end with <> are HTML and skip the regex check match = [ null, selector, null ]; @@ -2763,23 +2889,24 @@ var rootjQuery, } // Match html or make sure no context is specified for #id - if ( match && (match[1] || !context) ) { + if ( match && ( match[ 1 ] || !context ) ) { // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; + if ( match[ 1 ] ) { + context = context instanceof jQuery ? context[ 0 ] : context; // scripts is true for back-compat // Intentionally let the error be thrown if parseHTML is not present jQuery.merge( this, jQuery.parseHTML( - match[1], + match[ 1 ], context && context.nodeType ? context.ownerDocument || context : document, true ) ); // HANDLE: $(html, props) - if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { + if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) { for ( match in context ) { + // Properties of context are called as methods if possible if ( jQuery.isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); @@ -2795,20 +2922,21 @@ var rootjQuery, // HANDLE: $(#id) } else { - elem = document.getElementById( match[2] ); + elem = document.getElementById( match[ 2 ] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { + // Handle the case where IE and Opera return items // by name instead of ID - if ( elem.id !== match[2] ) { + if ( elem.id !== match[ 2 ] ) { return rootjQuery.find( selector ); } // Otherwise, we inject the element directly into the jQuery object this.length = 1; - this[0] = elem; + this[ 0 ] = elem; } this.context = document; @@ -2818,7 +2946,7 @@ var rootjQuery, // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { - return ( context || rootjQuery ).find( selector ); + return ( context || root ).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) @@ -2828,15 +2956,16 @@ var rootjQuery, // HANDLE: $(DOMElement) } else if ( selector.nodeType ) { - this.context = this[0] = selector; + this.context = this[ 0 ] = selector; this.length = 1; return this; // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { - return typeof rootjQuery.ready !== "undefined" ? - rootjQuery.ready( selector ) : + return typeof root.ready !== "undefined" ? + root.ready( selector ) : + // Execute immediately if ready is not present selector( jQuery ); } @@ -2857,6 +2986,7 @@ rootjQuery = jQuery( document ); var rparentsprev = /^(?:parents|prev(?:Until|All))/, + // methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, @@ -2865,46 +2995,19 @@ var rparentsprev = /^(?:parents|prev(?:Until|All))/, prev: true }; -jQuery.extend({ - dir: function( elem, dir, until ) { - var matched = [], - cur = elem[ dir ]; - - while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { - if ( cur.nodeType === 1 ) { - matched.push( cur ); - } - cur = cur[dir]; - } - return matched; - }, - - sibling: function( n, elem ) { - var r = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - r.push( n ); - } - } - - return r; - } -}); - -jQuery.fn.extend({ +jQuery.fn.extend( { has: function( target ) { var i, targets = jQuery( target, this ), len = targets.length; - return this.filter(function() { + return this.filter( function() { for ( i = 0; i < len; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { + if ( jQuery.contains( this, targets[ i ] ) ) { return true; } } - }); + } ); }, closest: function( selectors, context ) { @@ -2917,14 +3020,15 @@ jQuery.fn.extend({ 0; for ( ; i < l; i++ ) { - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { + for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) { + // Always skip document fragments - if ( cur.nodeType < 11 && (pos ? - pos.index(cur) > -1 : + if ( cur.nodeType < 11 && ( pos ? + pos.index( cur ) > -1 : // Don't pass non-elements to Sizzle cur.nodeType === 1 && - jQuery.find.matchesSelector(cur, selectors)) ) { + jQuery.find.matchesSelector( cur, selectors ) ) ) { matched.push( cur ); break; @@ -2932,7 +3036,7 @@ jQuery.fn.extend({ } } - return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); + return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched ); }, // Determine the position of an element within @@ -2941,23 +3045,24 @@ jQuery.fn.extend({ // No argument, return index in parent if ( !elem ) { - return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; + return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; } // index in selector if ( typeof elem === "string" ) { - return jQuery.inArray( this[0], jQuery( elem ) ); + return jQuery.inArray( this[ 0 ], jQuery( elem ) ); } // Locate the position of the desired element return jQuery.inArray( + // If it receives a jQuery object, the first element is used - elem.jquery ? elem[0] : elem, this ); + elem.jquery ? elem[ 0 ] : elem, this ); }, add: function( selector, context ) { return this.pushStack( - jQuery.unique( + jQuery.uniqueSort( jQuery.merge( this.get(), jQuery( selector, context ) ) ) ); @@ -2965,10 +3070,10 @@ jQuery.fn.extend({ addBack: function( selector ) { return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) + this.prevObject : this.prevObject.filter( selector ) ); } -}); +} ); function sibling( cur, dir ) { do { @@ -2978,16 +3083,16 @@ function sibling( cur, dir ) { return cur; } -jQuery.each({ +jQuery.each( { parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); + return dir( elem, "parentNode" ); }, parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); + return dir( elem, "parentNode", until ); }, next: function( elem ) { return sibling( elem, "nextSibling" ); @@ -2996,22 +3101,22 @@ jQuery.each({ return sibling( elem, "previousSibling" ); }, nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); + return dir( elem, "nextSibling" ); }, prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); + return dir( elem, "previousSibling" ); }, nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); + return dir( elem, "nextSibling", until ); }, prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); + return dir( elem, "previousSibling", until ); }, siblings: function( elem ) { - return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); + return siblings( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { - return jQuery.sibling( elem.firstChild ); + return siblings( elem.firstChild ); }, contents: function( elem ) { return jQuery.nodeName( elem, "iframe" ) ? @@ -3031,9 +3136,10 @@ jQuery.each({ } if ( this.length > 1 ) { + // Remove duplicates if ( !guaranteedUnique[ name ] ) { - ret = jQuery.unique( ret ); + ret = jQuery.uniqueSort( ret ); } // Reverse order for parents* and prev-derivatives @@ -3044,20 +3150,17 @@ jQuery.each({ return this.pushStack( ret ); }; -}); -var rnotwhite = (/\S+/g); - +} ); +var rnotwhite = ( /\S+/g ); -// String to Object options format cache -var optionsCache = {}; -// Convert String-formatted options into Object-formatted ones and store in cache +// Convert String-formatted options into Object-formatted ones function createOptions( options ) { - var object = optionsCache[ options ] = {}; + var object = {}; jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { object[ flag ] = true; - }); + } ); return object; } @@ -3088,156 +3191,186 @@ jQuery.Callbacks = function( options ) { // Convert options from String-formatted to Object-formatted if needed // (we check in cache first) options = typeof options === "string" ? - ( optionsCache[ options ] || createOptions( options ) ) : + createOptions( options ) : jQuery.extend( {}, options ); var // Flag to know if list is currently firing firing, - // Last fire value (for non-forgettable lists) + + // Last fire value for non-forgettable lists memory, + // Flag to know if list was already fired fired, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // First callback to fire (used internally by add and fireWith) - firingStart, + + // Flag to prevent firing + locked, + // Actual callback list list = [], - // Stack of fire calls for repeatable lists - stack = !options.once && [], + + // Queue of execution data for repeatable lists + queue = [], + + // Index of currently firing callback (modified by add/remove as needed) + firingIndex = -1, + // Fire callbacks - fire = function( data ) { - memory = options.memory && data; - fired = true; - firingIndex = firingStart || 0; - firingStart = 0; - firingLength = list.length; - firing = true; - for ( ; list && firingIndex < firingLength; firingIndex++ ) { - if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { - memory = false; // To prevent further calls using add - break; + fire = function() { + + // Enforce single-firing + locked = options.once; + + // Execute callbacks for all pending executions, + // respecting firingIndex overrides and runtime changes + fired = firing = true; + for ( ; queue.length; firingIndex = -1 ) { + memory = queue.shift(); + while ( ++firingIndex < list.length ) { + + // Run callback and check for early termination + if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false && + options.stopOnFalse ) { + + // Jump to end and forget the data so .add doesn't re-fire + firingIndex = list.length; + memory = false; + } } } + + // Forget the data if we're done with it + if ( !options.memory ) { + memory = false; + } + firing = false; - if ( list ) { - if ( stack ) { - if ( stack.length ) { - fire( stack.shift() ); - } - } else if ( memory ) { + + // Clean up if we're done firing for good + if ( locked ) { + + // Keep an empty list if we have data for future add calls + if ( memory ) { list = []; + + // Otherwise, this object is spent } else { - self.disable(); + list = ""; } } }, + // Actual Callbacks object self = { + // Add a callback or a collection of callbacks to the list add: function() { if ( list ) { - // First, we save the current length - var start = list.length; - (function add( args ) { + + // If we have memory from a past run, we should fire after adding + if ( memory && !firing ) { + firingIndex = list.length - 1; + queue.push( memory ); + } + + ( function add( args ) { jQuery.each( args, function( _, arg ) { - var type = jQuery.type( arg ); - if ( type === "function" ) { + if ( jQuery.isFunction( arg ) ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } - } else if ( arg && arg.length && type !== "string" ) { + } else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) { + // Inspect recursively add( arg ); } - }); - })( arguments ); - // Do we need to add the callbacks to the - // current firing batch? - if ( firing ) { - firingLength = list.length; - // With memory, if we're not firing then - // we should call right away - } else if ( memory ) { - firingStart = start; - fire( memory ); + } ); + } )( arguments ); + + if ( memory && !firing ) { + fire(); } } return this; }, + // Remove a callback from the list remove: function() { - if ( list ) { - jQuery.each( arguments, function( _, arg ) { - var index; - while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { - list.splice( index, 1 ); - // Handle firing indexes - if ( firing ) { - if ( index <= firingLength ) { - firingLength--; - } - if ( index <= firingIndex ) { - firingIndex--; - } - } + jQuery.each( arguments, function( _, arg ) { + var index; + while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { + list.splice( index, 1 ); + + // Handle firing indexes + if ( index <= firingIndex ) { + firingIndex--; } - }); - } + } + } ); return this; }, + // Check if a given callback is in the list. // If no argument is given, return whether or not list has callbacks attached. has: function( fn ) { - return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); + return fn ? + jQuery.inArray( fn, list ) > -1 : + list.length > 0; }, + // Remove all callbacks from the list empty: function() { - list = []; - firingLength = 0; + if ( list ) { + list = []; + } return this; }, - // Have the list do nothing anymore + + // Disable .fire and .add + // Abort any current/pending executions + // Clear all callbacks and values disable: function() { - list = stack = memory = undefined; + locked = queue = []; + list = memory = ""; return this; }, - // Is it disabled? disabled: function() { return !list; }, - // Lock the list in its current state + + // Disable .fire + // Also disable .add unless we have memory (since it would have no effect) + // Abort any pending executions lock: function() { - stack = undefined; + locked = true; if ( !memory ) { self.disable(); } return this; }, - // Is it locked? locked: function() { - return !stack; + return !!locked; }, + // Call all callbacks with the given context and arguments fireWith: function( context, args ) { - if ( list && ( !fired || stack ) ) { + if ( !locked ) { args = args || []; args = [ context, args.slice ? args.slice() : args ]; - if ( firing ) { - stack.push( args ); - } else { - fire( args ); + queue.push( args ); + if ( !firing ) { + fire(); } } return this; }, + // Call all the callbacks with the given arguments fire: function() { self.fireWith( this, arguments ); return this; }, + // To know if the callbacks have already been called at least once fired: function() { return !!fired; @@ -3248,14 +3381,15 @@ jQuery.Callbacks = function( options ) { }; -jQuery.extend({ +jQuery.extend( { Deferred: function( func ) { var tuples = [ + // action, add listener, listener list, final state - [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], - [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], - [ "notify", "progress", jQuery.Callbacks("memory") ] + [ "resolve", "done", jQuery.Callbacks( "once memory" ), "resolved" ], + [ "reject", "fail", jQuery.Callbacks( "once memory" ), "rejected" ], + [ "notify", "progress", jQuery.Callbacks( "memory" ) ] ], state = "pending", promise = { @@ -3268,25 +3402,30 @@ jQuery.extend({ }, then: function( /* fnDone, fnFail, fnProgress */ ) { var fns = arguments; - return jQuery.Deferred(function( newDefer ) { + return jQuery.Deferred( function( newDefer ) { jQuery.each( tuples, function( i, tuple ) { var fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; + // deferred[ done | fail | progress ] for forwarding actions to newDefer - deferred[ tuple[1] ](function() { + deferred[ tuple[ 1 ] ]( function() { var returned = fn && fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise() + .progress( newDefer.notify ) .done( newDefer.resolve ) - .fail( newDefer.reject ) - .progress( newDefer.notify ); + .fail( newDefer.reject ); } else { - newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); + newDefer[ tuple[ 0 ] + "With" ]( + this === promise ? newDefer.promise() : this, + fn ? [ returned ] : arguments + ); } - }); - }); + } ); + } ); fns = null; - }).promise(); + } ).promise(); }, + // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { @@ -3304,11 +3443,12 @@ jQuery.extend({ stateString = tuple[ 3 ]; // promise[ done | fail | progress ] = list.add - promise[ tuple[1] ] = list.add; + promise[ tuple[ 1 ] ] = list.add; // Handle state if ( stateString ) { - list.add(function() { + list.add( function() { + // state = [ resolved | rejected ] state = stateString; @@ -3317,12 +3457,12 @@ jQuery.extend({ } // deferred[ resolve | reject | notify ] - deferred[ tuple[0] ] = function() { - deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); + deferred[ tuple[ 0 ] ] = function() { + deferred[ tuple[ 0 ] + "With" ]( this === deferred ? promise : this, arguments ); return this; }; - deferred[ tuple[0] + "With" ] = list.fireWith; - }); + deferred[ tuple[ 0 ] + "With" ] = list.fireWith; + } ); // Make the deferred a promise promise.promise( deferred ); @@ -3343,9 +3483,11 @@ jQuery.extend({ length = resolveValues.length, // the count of uncompleted subordinates - remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, + remaining = length !== 1 || + ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, - // the master Deferred. If resolveValues consist of only a single Deferred, just use that. + // the master Deferred. + // If resolveValues consist of only a single Deferred, just use that. deferred = remaining === 1 ? subordinate : jQuery.Deferred(), // Update function for both resolve and progress values @@ -3356,7 +3498,7 @@ jQuery.extend({ if ( values === progressValues ) { deferred.notifyWith( contexts, values ); - } else if ( !(--remaining) ) { + } else if ( !( --remaining ) ) { deferred.resolveWith( contexts, values ); } }; @@ -3372,9 +3514,9 @@ jQuery.extend({ for ( ; i < length; i++ ) { if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { resolveValues[ i ].promise() + .progress( updateFunc( i, progressContexts, progressValues ) ) .done( updateFunc( i, resolveContexts, resolveValues ) ) - .fail( deferred.reject ) - .progress( updateFunc( i, progressContexts, progressValues ) ); + .fail( deferred.reject ); } else { --remaining; } @@ -3388,20 +3530,22 @@ jQuery.extend({ return deferred.promise(); } -}); +} ); // The deferred used on DOM ready var readyList; jQuery.fn.ready = function( fn ) { + // Add the callback jQuery.ready.promise().done( fn ); return this; }; -jQuery.extend({ +jQuery.extend( { + // Is the DOM ready to be used? Set to true once it occurs. isReady: false, @@ -3426,11 +3570,6 @@ jQuery.extend({ return; } - // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). - if ( !document.body ) { - return setTimeout( jQuery.ready ); - } - // Remember that the DOM is ready jQuery.isReady = true; @@ -3448,15 +3587,15 @@ jQuery.extend({ jQuery( document ).off( "ready" ); } } -}); +} ); /** * Clean-up method for dom ready events */ function detach() { if ( document.addEventListener ) { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); + document.removeEventListener( "DOMContentLoaded", completed ); + window.removeEventListener( "load", completed ); } else { document.detachEvent( "onreadystatechange", completed ); @@ -3468,8 +3607,12 @@ function detach() { * The ready event handler and self cleanup method */ function completed() { + // readyState === "complete" is good enough for us to call the dom ready in oldIE - if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { + if ( document.addEventListener || + window.event.type === "load" || + document.readyState === "complete" ) { + detach(); jQuery.ready(); } @@ -3480,23 +3623,28 @@ jQuery.ready.promise = function( obj ) { readyList = jQuery.Deferred(); - // Catch cases where $(document).ready() is called after the browser event has already occurred. - // we once tried to use readyState "interactive" here, but it caused issues like the one - // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 - if ( document.readyState === "complete" ) { + // Catch cases where $(document).ready() is called + // after the browser event has already occurred. + // Support: IE6-10 + // Older IE sometimes signals "interactive" too soon + if ( document.readyState === "complete" || + ( document.readyState !== "loading" && !document.documentElement.doScroll ) ) { + // Handle it asynchronously to allow scripts the opportunity to delay ready - setTimeout( jQuery.ready ); + window.setTimeout( jQuery.ready ); // Standards-based browsers support DOMContentLoaded } else if ( document.addEventListener ) { + // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); + document.addEventListener( "DOMContentLoaded", completed ); // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); + window.addEventListener( "load", completed ); // If IE event model is used } else { + // Ensure firing before onload, maybe late but safe also for iframes document.attachEvent( "onreadystatechange", completed ); @@ -3509,18 +3657,19 @@ jQuery.ready.promise = function( obj ) { try { top = window.frameElement == null && document.documentElement; - } catch(e) {} + } catch ( e ) {} if ( top && top.doScroll ) { - (function doScrollCheck() { + ( function doScrollCheck() { if ( !jQuery.isReady ) { try { + // Use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ - top.doScroll("left"); - } catch(e) { - return setTimeout( doScrollCheck, 50 ); + top.doScroll( "left" ); + } catch ( e ) { + return window.setTimeout( doScrollCheck, 50 ); } // detach all dom ready events @@ -3529,15 +3678,16 @@ jQuery.ready.promise = function( obj ) { // and execute any waiting functions jQuery.ready(); } - })(); + } )(); } } } return readyList.promise( obj ); }; +// Kick off the DOM ready check even if the user does not +jQuery.ready.promise(); -var strundefined = typeof undefined; @@ -3547,19 +3697,21 @@ var i; for ( i in jQuery( support ) ) { break; } -support.ownLast = i !== "0"; +support.ownFirst = i === "0"; // Note: most support tests are defined in their respective modules. // false until the test is run support.inlineBlockNeedsLayout = false; // Execute ASAP in case we need to set body.style.zoom -jQuery(function() { +jQuery( function() { + // Minified: var a,b,c,d var val, div, body, container; body = document.getElementsByTagName( "body" )[ 0 ]; if ( !body || !body.style ) { + // Return for frameset docs that don't have a body return; } @@ -3570,7 +3722,8 @@ jQuery(function() { container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; body.appendChild( container ).appendChild( div ); - if ( typeof div.style.zoom !== strundefined ) { + if ( typeof div.style.zoom !== "undefined" ) { + // Support: IE<8 // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving @@ -3579,6 +3732,7 @@ jQuery(function() { support.inlineBlockNeedsLayout = val = div.offsetWidth === 3; if ( val ) { + // Prevent IE 6 from affecting layout for positioned elements #11048 // Prevent IE from shrinking the body in IE 7 mode #12869 // Support: IE<8 @@ -3587,35 +3741,25 @@ jQuery(function() { } body.removeChild( container ); -}); +} ); - - -(function() { +( function() { var div = document.createElement( "div" ); - // Execute the test only if not already executed in another module. - if (support.deleteExpando == null) { - // Support: IE<9 - support.deleteExpando = true; - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; - } + // Support: IE<9 + support.deleteExpando = true; + try { + delete div.test; + } catch ( e ) { + support.deleteExpando = false; } // Null elements to avoid leaks in IE. div = null; -})(); - - -/** - * Determines whether an object can have data - */ -jQuery.acceptData = function( elem ) { - var noData = jQuery.noData[ (elem.nodeName + " ").toLowerCase() ], +} )(); +var acceptData = function( elem ) { + var noData = jQuery.noData[ ( elem.nodeName + " " ).toLowerCase() ], nodeType = +elem.nodeType || 1; // Do not set data on non-element DOM nodes because it will not be cleared (#8335). @@ -3623,14 +3767,17 @@ jQuery.acceptData = function( elem ) { false : // Nodes accept data unless otherwise specified; rejection can be conditional - !noData || noData !== true && elem.getAttribute("classid") === noData; + !noData || noData !== true && elem.getAttribute( "classid" ) === noData; }; -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, + + +var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, rmultiDash = /([A-Z])/g; function dataAttr( elem, key, data ) { + // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { @@ -3644,11 +3791,12 @@ function dataAttr( elem, key, data ) { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : + // Only convert to a number if it doesn't change the string +data + "" === data ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; - } catch( e ) {} + } catch ( e ) {} // Make sure we set the data so it isn't changed later jQuery.data( elem, key, data ); @@ -3667,7 +3815,7 @@ function isEmptyDataObject( obj ) { for ( name in obj ) { // if the public data object is empty, the private is still empty - if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { + if ( name === "data" && jQuery.isEmptyObject( obj[ name ] ) ) { continue; } if ( name !== "toJSON" ) { @@ -3679,7 +3827,7 @@ function isEmptyDataObject( obj ) { } function internalData( elem, name, data, pvt /* Internal Use Only */ ) { - if ( !jQuery.acceptData( elem ) ) { + if ( !acceptData( elem ) ) { return; } @@ -3700,11 +3848,13 @@ function internalData( elem, name, data, pvt /* Internal Use Only */ ) { // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all - if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && data === undefined && typeof name === "string" ) { + if ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) && + data === undefined && typeof name === "string" ) { return; } if ( !id ) { + // Only DOM nodes need a new unique ID for each element since their data // ends up in the global cache if ( isNode ) { @@ -3715,6 +3865,7 @@ function internalData( elem, name, data, pvt /* Internal Use Only */ ) { } if ( !cache[ id ] ) { + // Avoid exposing jQuery metadata on plain JS objects when the object // is serialized using JSON.stringify cache[ id ] = isNode ? {} : { toJSON: jQuery.noop }; @@ -3768,7 +3919,7 @@ function internalData( elem, name, data, pvt /* Internal Use Only */ ) { } function internalRemoveData( elem, name, pvt ) { - if ( !jQuery.acceptData( elem ) ) { + if ( !acceptData( elem ) ) { return; } @@ -3804,10 +3955,11 @@ function internalRemoveData( elem, name, pvt ) { if ( name in thisCache ) { name = [ name ]; } else { - name = name.split(" "); + name = name.split( " " ); } } } else { + // If "name" is an array of keys... // When data is initially created, via ("key", "val") signature, // keys will be converted to camelCase. @@ -3819,12 +3971,12 @@ function internalRemoveData( elem, name, pvt ) { i = name.length; while ( i-- ) { - delete thisCache[ name[i] ]; + delete thisCache[ name[ i ] ]; } // If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed - if ( pvt ? !isEmptyDataObject(thisCache) : !jQuery.isEmptyObject(thisCache) ) { + if ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) { return; } } @@ -3851,13 +4003,13 @@ function internalRemoveData( elem, name, pvt ) { /* jshint eqeqeq: true */ delete cache[ id ]; - // When all else fails, null + // When all else fails, undefined } else { - cache[ id ] = null; + cache[ id ] = undefined; } } -jQuery.extend({ +jQuery.extend( { cache: {}, // The following elements (space-suffixed to avoid Object.prototype collisions) @@ -3865,12 +4017,13 @@ jQuery.extend({ noData: { "applet ": true, "embed ": true, + // ...but Flash objects (which have this classid) *can* handle expandos "object ": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" }, hasData: function( elem ) { - elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; + elem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ]; return !!elem && !isEmptyDataObject( elem ); }, @@ -3890,12 +4043,12 @@ jQuery.extend({ _removeData: function( elem, name ) { return internalRemoveData( elem, name, true ); } -}); +} ); -jQuery.fn.extend({ +jQuery.fn.extend( { data: function( key, value ) { var i, name, data, - elem = this[0], + elem = this[ 0 ], attrs = elem && elem.attributes; // Special expections of .data basically thwart jQuery.access, @@ -3915,7 +4068,7 @@ jQuery.fn.extend({ if ( attrs[ i ] ) { name = attrs[ i ].name; if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice(5) ); + name = jQuery.camelCase( name.slice( 5 ) ); dataAttr( elem, name, data[ name ] ); } } @@ -3929,17 +4082,17 @@ jQuery.fn.extend({ // Sets multiple values if ( typeof key === "object" ) { - return this.each(function() { + return this.each( function() { jQuery.data( this, key ); - }); + } ); } return arguments.length > 1 ? // Sets one value - this.each(function() { + this.each( function() { jQuery.data( this, key, value ); - }) : + } ) : // Gets one value // Try to fetch any internally stored data first @@ -3947,14 +4100,14 @@ jQuery.fn.extend({ }, removeData: function( key ) { - return this.each(function() { + return this.each( function() { jQuery.removeData( this, key ); - }); + } ); } -}); +} ); -jQuery.extend({ +jQuery.extend( { queue: function( elem, type, data ) { var queue; @@ -3964,8 +4117,8 @@ jQuery.extend({ // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { - if ( !queue || jQuery.isArray(data) ) { - queue = jQuery._data( elem, type, jQuery.makeArray(data) ); + if ( !queue || jQuery.isArray( data ) ) { + queue = jQuery._data( elem, type, jQuery.makeArray( data ) ); } else { queue.push( data ); } @@ -4009,19 +4162,20 @@ jQuery.extend({ } }, - // not intended for public consumption - generates a queueHooks object, or returns the current one + // not intended for public consumption - generates a queueHooks object, + // or returns the current one _queueHooks: function( elem, type ) { var key = type + "queueHooks"; return jQuery._data( elem, key ) || jQuery._data( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { + empty: jQuery.Callbacks( "once memory" ).add( function() { jQuery._removeData( elem, type + "queue" ); jQuery._removeData( elem, key ); - }) - }); + } ) + } ); } -}); +} ); -jQuery.fn.extend({ +jQuery.fn.extend( { queue: function( type, data ) { var setter = 2; @@ -4032,30 +4186,31 @@ jQuery.fn.extend({ } if ( arguments.length < setter ) { - return jQuery.queue( this[0], type ); + return jQuery.queue( this[ 0 ], type ); } return data === undefined ? this : - this.each(function() { + this.each( function() { var queue = jQuery.queue( this, type, data ); // ensure a hooks for this queue jQuery._queueHooks( this, type ); - if ( type === "fx" && queue[0] !== "inprogress" ) { + if ( type === "fx" && queue[ 0 ] !== "inprogress" ) { jQuery.dequeue( this, type ); } - }); + } ); }, dequeue: function( type ) { - return this.each(function() { + return this.each( function() { jQuery.dequeue( this, type ); - }); + } ); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); }, + // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, obj ) { @@ -4086,23 +4241,138 @@ jQuery.fn.extend({ resolve(); return defer.promise( obj ); } -}); -var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; +} ); + + +( function() { + var shrinkWrapBlocksVal; + + support.shrinkWrapBlocks = function() { + if ( shrinkWrapBlocksVal != null ) { + return shrinkWrapBlocksVal; + } + + // Will be changed later if needed. + shrinkWrapBlocksVal = false; + + // Minified: var b,c,d + var div, body, container; + + body = document.getElementsByTagName( "body" )[ 0 ]; + if ( !body || !body.style ) { + + // Test fired too early or in an unsupported environment, exit. + return; + } + + // Setup + div = document.createElement( "div" ); + container = document.createElement( "div" ); + container.style.cssText = "position:absolute;border:0;width:0;height:0;top:0;left:-9999px"; + body.appendChild( container ).appendChild( div ); + + // Support: IE6 + // Check if elements with layout shrink-wrap their children + if ( typeof div.style.zoom !== "undefined" ) { + + // Reset CSS: box-sizing; display; margin; border + div.style.cssText = + + // Support: Firefox<29, Android 2.3 + // Vendor-prefix box-sizing + "-webkit-box-sizing:content-box;-moz-box-sizing:content-box;" + + "box-sizing:content-box;display:block;margin:0;border:0;" + + "padding:1px;width:1px;zoom:1"; + div.appendChild( document.createElement( "div" ) ).style.width = "5px"; + shrinkWrapBlocksVal = div.offsetWidth !== 3; + } + + body.removeChild( container ); + + return shrinkWrapBlocksVal; + }; + +} )(); +var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source; + +var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ); + var cssExpand = [ "Top", "Right", "Bottom", "Left" ]; var isHidden = function( elem, el ) { + // isHidden might be called from jQuery#filter function; // in that case, element will be second argument elem = el || elem; - return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); + return jQuery.css( elem, "display" ) === "none" || + !jQuery.contains( elem.ownerDocument, elem ); }; +function adjustCSS( elem, prop, valueParts, tween ) { + var adjusted, + scale = 1, + maxIterations = 20, + currentValue = tween ? + function() { return tween.cur(); } : + function() { return jQuery.css( elem, prop, "" ); }, + initial = currentValue(), + unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), + + // Starting value computation is required for potential unit mismatches + initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) && + rcssNum.exec( jQuery.css( elem, prop ) ); + + if ( initialInUnit && initialInUnit[ 3 ] !== unit ) { + + // Trust units reported by jQuery.css + unit = unit || initialInUnit[ 3 ]; + + // Make sure we update the tween properties later on + valueParts = valueParts || []; + + // Iteratively approximate from a nonzero starting point + initialInUnit = +initial || 1; + + do { + + // If previous iteration zeroed out, double until we get *something*. + // Use string for doubling so we don't accidentally see scale as unchanged below + scale = scale || ".5"; + + // Adjust and apply + initialInUnit = initialInUnit / scale; + jQuery.style( elem, prop, initialInUnit + unit ); + + // Update scale, tolerating zero or NaN from tween.cur() + // Break the loop if scale is unchanged or perfect, or if we've just had enough. + } while ( + scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations + ); + } + + if ( valueParts ) { + initialInUnit = +initialInUnit || +initial || 0; + + // Apply relative offset (+=/-=) if specified + adjusted = valueParts[ 1 ] ? + initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] : + +valueParts[ 2 ]; + if ( tween ) { + tween.unit = unit; + tween.start = initialInUnit; + tween.end = adjusted; + } + } + return adjusted; +} + + // Multifunctional method to get and set values of a collection // The value/s can optionally be executed if it's a function -var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGet, raw ) { +var access = function( elems, fn, key, value, chainable, emptyGet, raw ) { var i = 0, length = elems.length, bulk = key == null; @@ -4111,7 +4381,7 @@ var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGe if ( jQuery.type( key ) === "object" ) { chainable = true; for ( i in key ) { - jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); + access( elems, fn, i, key[ i ], true, emptyGet, raw ); } // Sets one value @@ -4123,6 +4393,7 @@ var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGe } if ( bulk ) { + // Bulk operations run against the entire set if ( raw ) { fn.call( elems, value ); @@ -4139,7 +4410,11 @@ var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGe if ( fn ) { for ( ; i < length; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); + fn( + elems[ i ], + key, + raw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) ) + ); } } } @@ -4150,17 +4425,41 @@ var access = jQuery.access = function( elems, fn, key, value, chainable, emptyGe // Gets bulk ? fn.call( elems ) : - length ? fn( elems[0], key ) : emptyGet; + length ? fn( elems[ 0 ], key ) : emptyGet; }; -var rcheckableType = (/^(?:checkbox|radio)$/i); +var rcheckableType = ( /^(?:checkbox|radio)$/i ); +var rtagName = ( /<([\w:-]+)/ ); +var rscriptType = ( /^$|\/(?:java|ecma)script/i ); + +var rleadingWhitespace = ( /^\s+/ ); + +var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|" + + "details|dialog|figcaption|figure|footer|header|hgroup|main|" + + "mark|meter|nav|output|picture|progress|section|summary|template|time|video"; -(function() { - // Minified: var a,b,c - var input = document.createElement( "input" ), - div = document.createElement( "div" ), - fragment = document.createDocumentFragment(); + + +function createSafeFragment( document ) { + var list = nodeNames.split( "|" ), + safeFrag = document.createDocumentFragment(); + + if ( safeFrag.createElement ) { + while ( list.length ) { + safeFrag.createElement( + list.pop() + ); + } + } + return safeFrag; +} + + +( function() { + var div = document.createElement( "div" ), + fragment = document.createDocumentFragment(), + input = document.createElement( "input" ); // Setup div.innerHTML = "
a"; @@ -4195,62 +4494,267 @@ var rcheckableType = (/^(?:checkbox|radio)$/i); // #11217 - WebKit loses check when the name is after the checked attribute fragment.appendChild( div ); - div.innerHTML = ""; + + // Support: Windows Web Apps (WWA) + // `name` and `type` must use .setAttribute for WWA (#14901) + input = document.createElement( "input" ); + input.setAttribute( "type", "radio" ); + input.setAttribute( "checked", "checked" ); + input.setAttribute( "name", "t" ); + + div.appendChild( input ); // Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3 // old WebKit doesn't clone checked state correctly in fragments support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; // Support: IE<9 - // Opera does not clone events (and typeof div.attachEvent === undefined). - // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() - support.noCloneEvent = true; - if ( div.attachEvent ) { - div.attachEvent( "onclick", function() { - support.noCloneEvent = false; - }); + // Cloned elements keep attachEvent handlers, we use addEventListener on IE9+ + support.noCloneEvent = !!div.addEventListener; + + // Support: IE<9 + // Since attributes and properties are the same in IE, + // cleanData must set properties to undefined rather than use removeAttribute + div[ jQuery.expando ] = 1; + support.attributes = !div.getAttribute( jQuery.expando ); +} )(); + + +// We have to close these tags to support XHTML (#13200) +var wrapMap = { + option: [ 1, "" ], + legend: [ 1, "
", "
" ], + area: [ 1, "", "" ], + + // Support: IE8 + param: [ 1, "", "" ], + thead: [ 1, "", "
" ], + tr: [ 2, "", "
" ], + col: [ 2, "", "
" ], + td: [ 3, "", "
" ], + + // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, + // unless wrapped in a div with non-breaking characters in front of it. + _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] +}; + +// Support: IE8-IE9 +wrapMap.optgroup = wrapMap.option; + +wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; +wrapMap.th = wrapMap.td; + + +function getAll( context, tag ) { + var elems, elem, + i = 0, + found = typeof context.getElementsByTagName !== "undefined" ? + context.getElementsByTagName( tag || "*" ) : + typeof context.querySelectorAll !== "undefined" ? + context.querySelectorAll( tag || "*" ) : + undefined; - div.cloneNode( true ).click(); + if ( !found ) { + for ( found = [], elems = context.childNodes || context; + ( elem = elems[ i ] ) != null; + i++ + ) { + if ( !tag || jQuery.nodeName( elem, tag ) ) { + found.push( elem ); + } else { + jQuery.merge( found, getAll( elem, tag ) ); + } + } } - // Execute the test only if not already executed in another module. - if (support.deleteExpando == null) { - // Support: IE<9 - support.deleteExpando = true; - try { - delete div.test; - } catch( e ) { - support.deleteExpando = false; + return tag === undefined || tag && jQuery.nodeName( context, tag ) ? + jQuery.merge( [ context ], found ) : + found; +} + + +// Mark scripts as having already been evaluated +function setGlobalEval( elems, refElements ) { + var elem, + i = 0; + for ( ; ( elem = elems[ i ] ) != null; i++ ) { + jQuery._data( + elem, + "globalEval", + !refElements || jQuery._data( refElements[ i ], "globalEval" ) + ); + } +} + + +var rhtml = /<|&#?\w+;/, + rtbody = / from table fragments + if ( !support.tbody ) { + + // String was a , *may* have spurious + elem = tag === "table" && !rtbody.test( elem ) ? + tmp.firstChild : + + // String was a bare or + wrap[ 1 ] === "
" && !rtbody.test( elem ) ? + tmp : + 0; + + j = elem && elem.childNodes.length; + while ( j-- ) { + if ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), "tbody" ) && + !tbody.childNodes.length ) { + + elem.removeChild( tbody ); + } + } + } + + jQuery.merge( nodes, tmp.childNodes ); + + // Fix #12392 for WebKit and IE > 9 + tmp.textContent = ""; + + // Fix #12392 for oldIE + while ( tmp.firstChild ) { + tmp.removeChild( tmp.firstChild ); + } + + // Remember the top-level container for proper cleanup + tmp = safe.lastChild; + } + } + } + + // Fix #11356: Clear elements from fragment + if ( tmp ) { + safe.removeChild( tmp ); + } + + // Reset defaultChecked for any radios and checkboxes + // about to be appended to the DOM in IE 6/7 (#8060) + if ( !support.appendChecked ) { + jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); + } + + i = 0; + while ( ( elem = nodes[ i++ ] ) ) { + + // Skip elements already in the context collection (trac-4087) + if ( selection && jQuery.inArray( elem, selection ) > -1 ) { + if ( ignored ) { + ignored.push( elem ); + } + + continue; + } + + contains = jQuery.contains( elem.ownerDocument, elem ); + + // Append to fragment + tmp = getAll( safe.appendChild( elem ), "script" ); + + // Preserve script evaluation history + if ( contains ) { + setGlobalEval( tmp ); + } + + // Capture executables + if ( scripts ) { + j = 0; + while ( ( elem = tmp[ j++ ] ) ) { + if ( rscriptType.test( elem.type || "" ) ) { + scripts.push( elem ); + } + } } } -})(); + + tmp = null; + + return safe; +} -(function() { +( function() { var i, eventName, div = document.createElement( "div" ); - // Support: IE<9 (lack submit/change bubble), Firefox 23+ (lack focusin event) - for ( i in { submit: true, change: true, focusin: true }) { + // Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events) + for ( i in { submit: true, change: true, focusin: true } ) { eventName = "on" + i; - if ( !(support[ i + "Bubbles" ] = eventName in window) ) { + if ( !( support[ i ] = eventName in window ) ) { + // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP) div.setAttribute( eventName, "t" ); - support[ i + "Bubbles" ] = div.attributes[ eventName ].expando === false; + support[ i ] = div.attributes[ eventName ].expando === false; } } // Null elements to avoid leaks in IE. div = null; -})(); +} )(); var rformElems = /^(?:input|select|textarea)$/i, rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, + rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; + rtypenamespace = /^([^.]*)(?:\.(.+)|)/; function returnTrue() { return true; @@ -4260,12 +4764,75 @@ function returnFalse() { return false; } +// Support: IE9 +// See #13393 for more info function safeActiveElement() { try { return document.activeElement; } catch ( err ) { } } +function on( elem, types, selector, data, fn, one ) { + var origFn, type; + + // Types can be a map of types/handlers + if ( typeof types === "object" ) { + + // ( types-Object, selector, data ) + if ( typeof selector !== "string" ) { + + // ( types-Object, data ) + data = data || selector; + selector = undefined; + } + for ( type in types ) { + on( elem, type, selector, data, types[ type ], one ); + } + return elem; + } + + if ( data == null && fn == null ) { + + // ( types, fn ) + fn = selector; + data = selector = undefined; + } else if ( fn == null ) { + if ( typeof selector === "string" ) { + + // ( types, selector, fn ) + fn = data; + data = undefined; + } else { + + // ( types, data, fn ) + fn = data; + data = selector; + selector = undefined; + } + } + if ( fn === false ) { + fn = returnFalse; + } else if ( !fn ) { + return elem; + } + + if ( one === 1 ) { + origFn = fn; + fn = function( event ) { + + // Can use an empty set, since event contains the info + jQuery().off( event ); + return origFn.apply( this, arguments ); + }; + + // Use same guid so caller can remove using origFn + fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); + } + return elem.each( function() { + jQuery.event.add( this, types, fn, data, selector ); + } ); +} + /* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. @@ -4298,18 +4865,22 @@ jQuery.event = { } // Init the element's event structure and main handler, if this is the first - if ( !(events = elemData.events) ) { + if ( !( events = elemData.events ) ) { events = elemData.events = {}; } - if ( !(eventHandle = elemData.handle) ) { + if ( !( eventHandle = elemData.handle ) ) { eventHandle = elemData.handle = function( e ) { + // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded - return typeof jQuery !== strundefined && (!e || jQuery.event.triggered !== e.type) ? + return typeof jQuery !== "undefined" && + ( !e || jQuery.event.triggered !== e.type ) ? jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined; }; - // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events + + // Add elem as a property of the handle fn to prevent a memory leak + // with IE non-native events eventHandle.elem = elem; } @@ -4317,9 +4888,9 @@ jQuery.event = { types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // There *must* be a type, no attaching namespace-only handlers if ( !type ) { @@ -4336,7 +4907,7 @@ jQuery.event = { special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers - handleObj = jQuery.extend({ + handleObj = jQuery.extend( { type: type, origType: origType, data: data, @@ -4344,16 +4915,18 @@ jQuery.event = { guid: handler.guid, selector: selector, needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") + namespace: namespaces.join( "." ) }, handleObjIn ); // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { + if ( !( handlers = events[ type ] ) ) { handlers = events[ type ] = []; handlers.delegateCount = 0; // Only use addEventListener/attachEvent if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + if ( !special.setup || + special.setup.call( elem, data, namespaces, eventHandle ) === false ) { + // Bind the global event handler to the element if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false ); @@ -4395,7 +4968,7 @@ jQuery.event = { namespaces, origType, elemData = jQuery.hasData( elem ) && jQuery._data( elem ); - if ( !elemData || !(events = elemData.events) ) { + if ( !elemData || !( events = elemData.events ) ) { return; } @@ -4403,9 +4976,9 @@ jQuery.event = { types = ( types || "" ).match( rnotwhite ) || [ "" ]; t = types.length; while ( t-- ) { - tmp = rtypenamespace.exec( types[t] ) || []; - type = origType = tmp[1]; - namespaces = ( tmp[2] || "" ).split( "." ).sort(); + tmp = rtypenamespace.exec( types[ t ] ) || []; + type = origType = tmp[ 1 ]; + namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort(); // Unbind all events (on this namespace, if provided) for the element if ( !type ) { @@ -4418,7 +4991,8 @@ jQuery.event = { special = jQuery.event.special[ type ] || {}; type = ( selector ? special.delegateType : special.bindType ) || type; handlers = events[ type ] || []; - tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); + tmp = tmp[ 2 ] && + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ); // Remove matching events origCount = j = handlers.length; @@ -4428,7 +5002,8 @@ jQuery.event = { if ( ( mappedTypes || origType === handleObj.origType ) && ( !handler || handler.guid === handleObj.guid ) && ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { + ( !selector || selector === handleObj.selector || + selector === "**" && handleObj.selector ) ) { handlers.splice( j, 1 ); if ( handleObj.selector ) { @@ -4443,7 +5018,9 @@ jQuery.event = { // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( origCount && !handlers.length ) { - if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + if ( !special.teardown || + special.teardown.call( elem, namespaces, elemData.handle ) === false ) { + jQuery.removeEvent( elem, type, elemData.handle ); } @@ -4466,7 +5043,7 @@ jQuery.event = { bubbleType, special, tmp, i, eventPath = [ elem || document ], type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; + namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : []; cur = tmp = elem = elem || document; @@ -4480,13 +5057,14 @@ jQuery.event = { return; } - if ( type.indexOf(".") >= 0 ) { + if ( type.indexOf( "." ) > -1 ) { + // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); + namespaces = type.split( "." ); type = namespaces.shift(); namespaces.sort(); } - ontype = type.indexOf(":") < 0 && "on" + type; + ontype = type.indexOf( ":" ) < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string event = event[ jQuery.expando ] ? @@ -4495,9 +5073,9 @@ jQuery.event = { // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true) event.isTrigger = onlyHandlers ? 2 : 3; - event.namespace = namespaces.join("."); - event.namespace_re = event.namespace ? - new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : + event.namespace = namespaces.join( "." ); + event.rnamespace = event.namespace ? + new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null; // Clean up the event in case it is being reused @@ -4531,28 +5109,30 @@ jQuery.event = { } // Only add window if we got to document (e.g., not plain obj or detached DOM) - if ( tmp === (elem.ownerDocument || document) ) { + if ( tmp === ( elem.ownerDocument || document ) ) { eventPath.push( tmp.defaultView || tmp.parentWindow || window ); } } // Fire handlers on the event path i = 0; - while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { + while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) { event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler - handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); + handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && + jQuery._data( cur, "handle" ); + if ( handle ) { handle.apply( cur, data ); } // Native handler handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && jQuery.acceptData( cur ) ) { + if ( handle && handle.apply && acceptData( cur ) ) { event.result = handle.apply( cur, data ); if ( event.result === false ) { event.preventDefault(); @@ -4564,8 +5144,11 @@ jQuery.event = { // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { - if ( (!special._default || special._default.apply( eventPath.pop(), data ) === false) && - jQuery.acceptData( elem ) ) { + if ( + ( !special._default || + special._default.apply( eventPath.pop(), data ) === false + ) && acceptData( elem ) + ) { // Call a native DOM method on the target with the same name name as the event. // Can't use an .isFunction() check here because IE6/7 fails that test. @@ -4584,6 +5167,7 @@ jQuery.event = { try { elem[ type ](); } catch ( e ) { + // IE<9 dies on focus/blur to hidden element (#1486,#12518) // only reproducible on winXP IE8 native, not IE9 in IE8 mode } @@ -4604,14 +5188,14 @@ jQuery.event = { // Make a writable jQuery.Event from the native event object event = jQuery.event.fix( event ); - var i, ret, handleObj, matched, j, + var i, j, ret, matched, handleObj, handlerQueue = [], args = slice.call( arguments ), handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event - args[0] = event; + args[ 0 ] = event; event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired @@ -4624,24 +5208,25 @@ jQuery.event = { // Run delegates first; they may want to stop propagation beneath us i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { + while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) { event.currentTarget = matched.elem; j = 0; - while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { + while ( ( handleObj = matched.handlers[ j++ ] ) && + !event.isImmediatePropagationStopped() ) { - // Triggered event must either 1) have no namespace, or - // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). - if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { + // Triggered event must either 1) have no namespace, or 2) have namespace(s) + // a subset or equal to those in the bound event (both can have no namespace). + if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) { event.handleObj = handleObj; event.data = handleObj.data; - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); + ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle || + handleObj.handler ).apply( matched.elem, args ); if ( ret !== undefined ) { - if ( (event.result = ret) === false ) { + if ( ( event.result = ret ) === false ) { event.preventDefault(); event.stopPropagation(); } @@ -4659,15 +5244,19 @@ jQuery.event = { }, handlers: function( event, handlers ) { - var sel, handleObj, matches, i, + var i, matches, sel, handleObj, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target; + // Support (at least): Chrome, IE9 // Find delegate handlers // Black-hole SVG instance trees (#13180) - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { + // + // Support: Firefox<=42+ + // Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343) + if ( delegateCount && cur.nodeType && + ( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) { /* jshint eqeqeq: false */ for ( ; cur != this; cur = cur.parentNode || this ) { @@ -4675,7 +5264,7 @@ jQuery.event = { // Don't check non-elements (#13208) // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { + if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) { matches = []; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; @@ -4685,7 +5274,7 @@ jQuery.event = { if ( matches[ sel ] === undefined ) { matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : + jQuery( sel, this ).index( cur ) > -1 : jQuery.find( sel, this, null, [ cur ] ).length; } if ( matches[ sel ] ) { @@ -4693,7 +5282,7 @@ jQuery.event = { } } if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); + handlerQueue.push( { elem: cur, handlers: matches } ); } } } @@ -4701,7 +5290,7 @@ jQuery.event = { // Add the remaining (directly-bound) handlers if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); + handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } ); } return handlerQueue; @@ -4740,7 +5329,7 @@ jQuery.event = { event.target = originalEvent.srcElement || document; } - // Support: Chrome 23+, Safari? + // Support: Safari 6-8+ // Target should not be a text node (#504, #13143) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; @@ -4754,12 +5343,13 @@ jQuery.event = { }, // Includes some event props shared by KeyEvent and MouseEvent - props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + props: ( "altKey bubbles cancelable ctrlKey currentTarget detail eventPhase " + + "metaKey relatedTarget shiftKey target timeStamp view which" ).split( " " ), fixHooks: {}, keyHooks: { - props: "char charCode key keyCode".split(" "), + props: "char charCode key keyCode".split( " " ), filter: function( event, original ) { // Add which for key events @@ -4772,7 +5362,8 @@ jQuery.event = { }, mouseHooks: { - props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + props: ( "button buttons clientX clientY fromElement offsetX offsetY " + + "pageX pageY screenX screenY toElement" ).split( " " ), filter: function( event, original ) { var body, eventDoc, doc, button = original.button, @@ -4784,13 +5375,19 @@ jQuery.event = { doc = eventDoc.documentElement; body = eventDoc.body; - event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); - event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); + event.pageX = original.clientX + + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - + ( doc && doc.clientLeft || body && body.clientLeft || 0 ); + event.pageY = original.clientY + + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - + ( doc && doc.clientTop || body && body.clientTop || 0 ); } // Add relatedTarget, if necessary if ( !event.relatedTarget && fromElement ) { - event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; + event.relatedTarget = fromElement === event.target ? + original.toElement : + fromElement; } // Add which for click: 1 === left; 2 === middle; 3 === right @@ -4805,10 +5402,12 @@ jQuery.event = { special: { load: { + // Prevent triggered image.load events from bubbling to window.load noBubble: true }, focus: { + // Fire native event if possible so blur/focus sequence is correct trigger: function() { if ( this !== safeActiveElement() && this.focus ) { @@ -4816,6 +5415,7 @@ jQuery.event = { this.focus(); return false; } catch ( e ) { + // Support: IE<9 // If we error on focus to hidden element (#1486, #12518), // let .trigger() run the handlers @@ -4834,6 +5434,7 @@ jQuery.event = { delegateType: "focusout" }, click: { + // For checkbox, fire native event so checked state will be right trigger: function() { if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { @@ -4860,24 +5461,28 @@ jQuery.event = { } }, - simulate: function( type, elem, event, bubble ) { - // Piggyback on a donor event to simulate a different one. - // Fake originalEvent to avoid donor's stopPropagation, but if the - // simulated event prevents default then we do the same on the donor. + // Piggyback on a donor event to simulate a different one + simulate: function( type, elem, event ) { var e = jQuery.extend( new jQuery.Event(), event, { type: type, - isSimulated: true, - originalEvent: {} + isSimulated: true + + // Previously, `originalEvent: {}` was set here, so stopPropagation call + // would not be triggered on donor event, since in our own + // jQuery.event.stopPropagation function we had a check for existence of + // originalEvent.stopPropagation method, so, consequently it would be a noop. + // + // Guard for simulated events was moved to jQuery.event.stopPropagation function + // since `originalEvent` should point to the original event for the + // constancy with other events and for more focused logic } ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } + + jQuery.event.trigger( e, null, elem ); + if ( e.isDefaultPrevented() ) { event.preventDefault(); } @@ -4886,8 +5491,10 @@ jQuery.event = { jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { + + // This "if" is needed for plain objects if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); + elem.removeEventListener( type, handle ); } } : function( elem, type, handle ) { @@ -4896,8 +5503,9 @@ jQuery.removeEvent = document.removeEventListener ? if ( elem.detachEvent ) { // #8545, #7054, preventing memory leaks for custom events in IE6-8 - // detachEvent needed property on element, by name of that event, to properly expose it to GC - if ( typeof elem[ name ] === strundefined ) { + // detachEvent needed property on element, by name of that event, + // to properly expose it to GC + if ( typeof elem[ name ] === "undefined" ) { elem[ name ] = null; } @@ -4906,8 +5514,9 @@ jQuery.removeEvent = document.removeEventListener ? }; jQuery.Event = function( src, props ) { + // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { + if ( !( this instanceof jQuery.Event ) ) { return new jQuery.Event( src, props ); } @@ -4920,6 +5529,7 @@ jQuery.Event = function( src, props ) { // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && + // Support: IE < 9, Android < 4.0 src.returnValue === false ? returnTrue : @@ -4945,6 +5555,7 @@ jQuery.Event = function( src, props ) { // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { + constructor: jQuery.Event, isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse, @@ -4971,9 +5582,11 @@ jQuery.Event.prototype = { var e = this.originalEvent; this.isPropagationStopped = returnTrue; - if ( !e ) { + + if ( !e || this.isSimulated ) { return; } + // If stopPropagation exists, run it on the original event if ( e.stopPropagation ) { e.stopPropagation(); @@ -4997,7 +5610,14 @@ jQuery.Event.prototype = { }; // Create mouseenter/leave events using mouseover/out and event-time checks -jQuery.each({ +// so that event delegation works in jQuery. +// Do the same for pointerenter/pointerleave and pointerover/pointerout +// +// Support: Safari 7 only +// Safari sends mouseenter too often; see: +// https://code.google.com/p/chromium/issues/detail?id=470258 +// for the description of the bug (it existed in older Chrome versions as well). +jQuery.each( { mouseenter: "mouseover", mouseleave: "mouseout", pointerenter: "pointerover", @@ -5013,9 +5633,9 @@ jQuery.each({ related = event.relatedTarget, handleObj = event.handleObj; - // For mousenter/leave call the handler if related is outside the target. + // For mouseenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window - if ( !related || (related !== target && !jQuery.contains( target, related )) ) { + if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; @@ -5023,13 +5643,14 @@ jQuery.each({ return ret; } }; -}); +} ); // IE submit delegation -if ( !support.submitBubbles ) { +if ( !support.submit ) { jQuery.event.special.submit = { setup: function() { + // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; @@ -5037,30 +5658,42 @@ if ( !support.submitBubbles ) { // Lazy-add a submit handler when a descendant form may potentially be submitted jQuery.event.add( this, "click._submit keypress._submit", function( e ) { + // Node name check avoids a VML-related crash in IE (#9807) var elem = e.target, - form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; - if ( form && !jQuery._data( form, "submitBubbles" ) ) { + form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? + + // Support: IE <=8 + // We use jQuery.prop instead of elem.form + // to allow fixing the IE8 delegated submit issue (gh-2332) + // by 3rd party polyfills/workarounds. + jQuery.prop( elem, "form" ) : + undefined; + + if ( form && !jQuery._data( form, "submit" ) ) { jQuery.event.add( form, "submit._submit", function( event ) { - event._submit_bubble = true; - }); - jQuery._data( form, "submitBubbles", true ); + event._submitBubble = true; + } ); + jQuery._data( form, "submit", true ); } - }); + } ); + // return undefined since we don't need an event listener }, postDispatch: function( event ) { + // If form was submitted by the user, bubble the event up the tree - if ( event._submit_bubble ) { - delete event._submit_bubble; + if ( event._submitBubble ) { + delete event._submitBubble; if ( this.parentNode && !event.isTrigger ) { - jQuery.event.simulate( "submit", this.parentNode, event, true ); + jQuery.event.simulate( "submit", this.parentNode, event ); } } }, teardown: function() { + // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; @@ -5073,52 +5706,57 @@ if ( !support.submitBubbles ) { } // IE change delegation and checkbox/radio fix -if ( !support.changeBubbles ) { +if ( !support.change ) { jQuery.event.special.change = { setup: function() { if ( rformElems.test( this.nodeName ) ) { + // IE doesn't fire change on a check/radio until blur; trigger it on click // after a propertychange. Eat the blur-change in special.change.handle. // This still fires onchange a second time for check/radio after blur. if ( this.type === "checkbox" || this.type === "radio" ) { jQuery.event.add( this, "propertychange._change", function( event ) { if ( event.originalEvent.propertyName === "checked" ) { - this._just_changed = true; + this._justChanged = true; } - }); + } ); jQuery.event.add( this, "click._change", function( event ) { - if ( this._just_changed && !event.isTrigger ) { - this._just_changed = false; + if ( this._justChanged && !event.isTrigger ) { + this._justChanged = false; } + // Allow triggered, simulated change events (#11500) - jQuery.event.simulate( "change", this, event, true ); - }); + jQuery.event.simulate( "change", this, event ); + } ); } return false; } + // Delegated event; lazy-add a change handler on descendant inputs jQuery.event.add( this, "beforeactivate._change", function( e ) { var elem = e.target; - if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { + if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "change" ) ) { jQuery.event.add( elem, "change._change", function( event ) { if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { - jQuery.event.simulate( "change", this.parentNode, event, true ); + jQuery.event.simulate( "change", this.parentNode, event ); } - }); - jQuery._data( elem, "changeBubbles", true ); + } ); + jQuery._data( elem, "change", true ); } - }); + } ); }, handle: function( event ) { var elem = event.target; // Swallow native change events from checkbox/radio, we already triggered them above - if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { + if ( this !== elem || event.isSimulated || event.isTrigger || + ( elem.type !== "radio" && elem.type !== "checkbox" ) ) { + return event.handleObj.handler.apply( this, arguments ); } }, @@ -5131,14 +5769,21 @@ if ( !support.changeBubbles ) { }; } -// Create "bubbling" focus and blur events -if ( !support.focusinBubbles ) { - jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { +// Support: Firefox +// Firefox doesn't have focus(in | out) events +// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787 +// +// Support: Chrome, Safari +// focus(in | out) events fire after focus & blur events, +// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order +// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857 +if ( !support.focusin ) { + jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) { // Attach a single capturing handler on the document while someone wants focusin/focusout var handler = function( event ) { - jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); - }; + jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) ); + }; jQuery.event.special[ fix ] = { setup: function() { @@ -5162,80 +5807,34 @@ if ( !support.focusinBubbles ) { } } }; - }); + } ); } -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ one ) { - var type, origFn; - - // Types can be a map of types/handlers - if ( typeof types === "object" ) { - // ( types-Object, selector, data ) - if ( typeof selector !== "string" ) { - // ( types-Object, data ) - data = data || selector; - selector = undefined; - } - for ( type in types ) { - this.on( type, selector, data, types[ type ], one ); - } - return this; - } - - if ( data == null && fn == null ) { - // ( types, fn ) - fn = selector; - data = selector = undefined; - } else if ( fn == null ) { - if ( typeof selector === "string" ) { - // ( types, selector, fn ) - fn = data; - data = undefined; - } else { - // ( types, data, fn ) - fn = data; - data = selector; - selector = undefined; - } - } - if ( fn === false ) { - fn = returnFalse; - } else if ( !fn ) { - return this; - } +jQuery.fn.extend( { - if ( one === 1 ) { - origFn = fn; - fn = function( event ) { - // Can use an empty set, since event contains the info - jQuery().off( event ); - return origFn.apply( this, arguments ); - }; - // Use same guid so caller can remove using origFn - fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); - } - return this.each( function() { - jQuery.event.add( this, types, fn, data, selector ); - }); + on: function( types, selector, data, fn ) { + return on( this, types, selector, data, fn ); }, one: function( types, selector, data, fn ) { - return this.on( types, selector, data, fn, 1 ); + return on( this, types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { var handleObj, type; if ( types && types.preventDefault && types.handleObj ) { + // ( event ) dispatched jQuery.Event handleObj = types.handleObj; jQuery( types.delegateTarget ).off( - handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, + handleObj.namespace ? + handleObj.origType + "." + handleObj.namespace : + handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types === "object" ) { + // ( types-object [, selector] ) for ( type in types ) { this.off( type, selector, types[ type ] ); @@ -5243,6 +5842,7 @@ jQuery.fn.extend({ return this; } if ( selector === false || typeof selector === "function" ) { + // ( types [, fn] ) fn = selector; selector = undefined; @@ -5250,105 +5850,40 @@ jQuery.fn.extend({ if ( fn === false ) { fn = returnFalse; } - return this.each(function() { + return this.each( function() { jQuery.event.remove( this, types, fn, selector ); - }); + } ); }, trigger: function( type, data ) { - return this.each(function() { + return this.each( function() { jQuery.event.trigger( type, data, this ); - }); + } ); }, triggerHandler: function( type, data ) { - var elem = this[0]; + var elem = this[ 0 ]; if ( elem ) { return jQuery.event.trigger( type, data, elem, true ); } } -}); +} ); -function createSafeFragment( document ) { - var list = nodeNames.split( "|" ), - safeFrag = document.createDocumentFragment(); +var rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, + rnoshimcache = new RegExp( "<(?:" + nodeNames + ")[\\s/>]", "i" ), + rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:-]+)[^>]*)\/>/gi, - if ( safeFrag.createElement ) { - while ( list.length ) { - safeFrag.createElement( - list.pop() - ); - } - } - return safeFrag; -} + // Support: IE 10-11, Edge 10240+ + // In IE/Edge using regex groups here causes severe slowdowns. + // See https://connect.microsoft.com/IE/feedback/details/1736512/ + rnoInnerhtml = /]", "i"), - rleadingWhitespace = /^\s+/, - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rtbody = /\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - option: [ 1, "" ], - legend: [ 1, "
", "
" ], - area: [ 1, "", "" ], - param: [ 1, "", "" ], - thead: [ 1, "
", "
" ], - tr: [ 2, "", "
" ], - col: [ 2, "", "
" ], - td: [ 3, "", "
" ], - - // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, - // unless wrapped in a div with non-breaking characters in front of it. - _default: support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
", "
" ] - }, safeFragment = createSafeFragment( document ), - fragmentDiv = safeFragment.appendChild( document.createElement("div") ); - -wrapMap.optgroup = wrapMap.option; -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -function getAll( context, tag ) { - var elems, elem, - i = 0, - found = typeof context.getElementsByTagName !== strundefined ? context.getElementsByTagName( tag || "*" ) : - typeof context.querySelectorAll !== strundefined ? context.querySelectorAll( tag || "*" ) : - undefined; - - if ( !found ) { - for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { - if ( !tag || jQuery.nodeName( elem, tag ) ) { - found.push( elem ); - } else { - jQuery.merge( found, getAll( elem, tag ) ); - } - } - } - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], found ) : - found; -} - -// Used in buildFragment, fixes the defaultChecked property -function fixDefaultChecked( elem ) { - if ( rcheckableType.test( elem.type ) ) { - elem.defaultChecked = elem.checked; - } -} + fragmentDiv = safeFragment.appendChild( document.createElement( "div" ) ); // Support: IE<8 // Manipulating tables requires a tbody @@ -5356,37 +5891,27 @@ function manipulationTarget( elem, content ) { return jQuery.nodeName( elem, "table" ) && jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ? - elem.getElementsByTagName("tbody")[0] || - elem.appendChild( elem.ownerDocument.createElement("tbody") ) : + elem.getElementsByTagName( "tbody" )[ 0 ] || + elem.appendChild( elem.ownerDocument.createElement( "tbody" ) ) : elem; } // Replace/restore the type attribute of script elements for safe DOM manipulation function disableScript( elem ) { - elem.type = (jQuery.find.attr( elem, "type" ) !== null) + "/" + elem.type; + elem.type = ( jQuery.find.attr( elem, "type" ) !== null ) + "/" + elem.type; return elem; } function restoreScript( elem ) { var match = rscriptTypeMasked.exec( elem.type ); if ( match ) { - elem.type = match[1]; + elem.type = match[ 1 ]; } else { - elem.removeAttribute("type"); + elem.removeAttribute( "type" ); } return elem; } -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var elem, - i = 0; - for ( ; (elem = elems[i]) != null; i++ ) { - jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); - } -} - function cloneCopyEvent( src, dest ) { - if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { return; } @@ -5451,11 +5976,12 @@ function fixCloneNodeIssues( src, dest ) { // element in IE9, the outerHTML strategy above is not sufficient. // If the src has innerHTML and the destination does not, // copy the src.innerHTML into the dest.innerHTML. #10324 - if ( support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { + if ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) { dest.innerHTML = src.innerHTML; } } else if ( nodeName === "input" && rcheckableType.test( src.type ) ) { + // IE6-8 fails to persist the checked state of a cloned checkbox // or radio button. Worse, IE6-7 fail to give the cloned element // a checked appearance if the defaultChecked value isn't also set @@ -5480,12 +6006,137 @@ function fixCloneNodeIssues( src, dest ) { } } -jQuery.extend({ +function domManip( collection, args, callback, ignored ) { + + // Flatten any nested arrays + args = concat.apply( [], args ); + + var first, node, hasScripts, + scripts, doc, fragment, + i = 0, + l = collection.length, + iNoClone = l - 1, + value = args[ 0 ], + isFunction = jQuery.isFunction( value ); + + // We can't cloneNode fragments that contain checked, in WebKit + if ( isFunction || + ( l > 1 && typeof value === "string" && + !support.checkClone && rchecked.test( value ) ) ) { + return collection.each( function( index ) { + var self = collection.eq( index ); + if ( isFunction ) { + args[ 0 ] = value.call( this, index, self.html() ); + } + domManip( self, args, callback, ignored ); + } ); + } + + if ( l ) { + fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored ); + first = fragment.firstChild; + + if ( fragment.childNodes.length === 1 ) { + fragment = first; + } + + // Require either new content or an interest in ignored elements to invoke the callback + if ( first || ignored ) { + scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); + hasScripts = scripts.length; + + // Use the original fragment for the last item + // instead of the first because it can end up + // being emptied incorrectly in certain situations (#8070). + for ( ; i < l; i++ ) { + node = fragment; + + if ( i !== iNoClone ) { + node = jQuery.clone( node, true, true ); + + // Keep references to cloned scripts for later restoration + if ( hasScripts ) { + + // Support: Android<4.1, PhantomJS<2 + // push.apply(_, arraylike) throws on ancient WebKit + jQuery.merge( scripts, getAll( node, "script" ) ); + } + } + + callback.call( collection[ i ], node, i ); + } + + if ( hasScripts ) { + doc = scripts[ scripts.length - 1 ].ownerDocument; + + // Reenable scripts + jQuery.map( scripts, restoreScript ); + + // Evaluate executable scripts on first document insertion + for ( i = 0; i < hasScripts; i++ ) { + node = scripts[ i ]; + if ( rscriptType.test( node.type || "" ) && + !jQuery._data( node, "globalEval" ) && + jQuery.contains( doc, node ) ) { + + if ( node.src ) { + + // Optional AJAX dependency, but won't run scripts if not present + if ( jQuery._evalUrl ) { + jQuery._evalUrl( node.src ); + } + } else { + jQuery.globalEval( + ( node.text || node.textContent || node.innerHTML || "" ) + .replace( rcleanScript, "" ) + ); + } + } + } + } + + // Fix #11809: Avoid leaking memory + fragment = first = null; + } + } + + return collection; +} + +function remove( elem, selector, keepData ) { + var node, + elems = selector ? jQuery.filter( selector, elem ) : elem, + i = 0; + + for ( ; ( node = elems[ i ] ) != null; i++ ) { + + if ( !keepData && node.nodeType === 1 ) { + jQuery.cleanData( getAll( node ) ); + } + + if ( node.parentNode ) { + if ( keepData && jQuery.contains( node.ownerDocument, node ) ) { + setGlobalEval( getAll( node, "script" ) ); + } + node.parentNode.removeChild( node ); + } + } + + return elem; +} + +jQuery.extend( { + htmlPrefilter: function( html ) { + return html.replace( rxhtmlTag, "<$1>" ); + }, + clone: function( elem, dataAndEvents, deepDataAndEvents ) { var destElements, node, clone, i, srcElements, inPage = jQuery.contains( elem.ownerDocument, elem ); - if ( support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + if ( support.html5Clone || jQuery.isXMLDoc( elem ) || + !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { + clone = elem.cloneNode( true ); // IE<=8 does not properly clone detached, unknown element nodes @@ -5494,18 +6145,19 @@ jQuery.extend({ fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); } - if ( (!support.noCloneEvent || !support.noCloneChecked) && - (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { + if ( ( !support.noCloneEvent || !support.noCloneChecked ) && + ( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) { // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); // Fix all IE cloning issues - for ( i = 0; (node = srcElements[i]) != null; ++i ) { + for ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) { + // Ensure that the destination node is not null; Fixes #9587 - if ( destElements[i] ) { - fixCloneNodeIssues( node, destElements[i] ); + if ( destElements[ i ] ) { + fixCloneNodeIssues( node, destElements[ i ] ); } } } @@ -5516,8 +6168,8 @@ jQuery.extend({ srcElements = srcElements || getAll( elem ); destElements = destElements || getAll( clone ); - for ( i = 0; (node = srcElements[i]) != null; i++ ) { - cloneCopyEvent( node, destElements[i] ); + for ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) { + cloneCopyEvent( node, destElements[ i ] ); } } else { cloneCopyEvent( elem, clone ); @@ -5536,143 +6188,16 @@ jQuery.extend({ return clone; }, - buildFragment: function( elems, context, scripts, selection ) { - var j, elem, contains, - tmp, tag, tbody, wrap, - l = elems.length, - - // Ensure a safe fragment - safe = createSafeFragment( context ), - - nodes = [], - i = 0; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); - - // Convert non-html into a text node - } else if ( !rhtml.test( elem ) ) { - nodes.push( context.createTextNode( elem ) ); - - // Convert html into DOM nodes - } else { - tmp = tmp || safe.appendChild( context.createElement("div") ); - - // Deserialize a standard representation - tag = (rtagName.exec( elem ) || [ "", "" ])[ 1 ].toLowerCase(); - wrap = wrapMap[ tag ] || wrapMap._default; - - tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; - - // Descend through wrappers to the right content - j = wrap[0]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Manually add leading whitespace removed by IE - if ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { - nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); - } - - // Remove IE's autoinserted from table fragments - if ( !support.tbody ) { - - // String was a , *may* have spurious - elem = tag === "table" && !rtbody.test( elem ) ? - tmp.firstChild : - - // String was a bare or - wrap[1] === "
" && !rtbody.test( elem ) ? - tmp : - 0; - - j = elem && elem.childNodes.length; - while ( j-- ) { - if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { - elem.removeChild( tbody ); - } - } - } - - jQuery.merge( nodes, tmp.childNodes ); - - // Fix #12392 for WebKit and IE > 9 - tmp.textContent = ""; - - // Fix #12392 for oldIE - while ( tmp.firstChild ) { - tmp.removeChild( tmp.firstChild ); - } - - // Remember the top-level container for proper cleanup - tmp = safe.lastChild; - } - } - } - - // Fix #11356: Clear elements from fragment - if ( tmp ) { - safe.removeChild( tmp ); - } - - // Reset defaultChecked for any radios and checkboxes - // about to be appended to the DOM in IE 6/7 (#8060) - if ( !support.appendChecked ) { - jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); - } - - i = 0; - while ( (elem = nodes[ i++ ]) ) { - - // #4087 - If origin and destination elements are the same, and this is - // that element, do not do anything - if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { - continue; - } - - contains = jQuery.contains( elem.ownerDocument, elem ); - - // Append to fragment - tmp = getAll( safe.appendChild( elem ), "script" ); - - // Preserve script evaluation history - if ( contains ) { - setGlobalEval( tmp ); - } - - // Capture executables - if ( scripts ) { - j = 0; - while ( (elem = tmp[ j++ ]) ) { - if ( rscriptType.test( elem.type || "" ) ) { - scripts.push( elem ); - } - } - } - } - - tmp = null; - - return safe; - }, - - cleanData: function( elems, /* internal */ acceptData ) { + cleanData: function( elems, /* internal */ forceAcceptData ) { var elem, type, id, data, i = 0, internalKey = jQuery.expando, cache = jQuery.cache, - deleteExpando = support.deleteExpando, + attributes = support.attributes, special = jQuery.event.special; - for ( ; (elem = elems[i]) != null; i++ ) { - if ( acceptData || jQuery.acceptData( elem ) ) { + for ( ; ( elem = elems[ i ] ) != null; i++ ) { + if ( forceAcceptData || acceptData( elem ) ) { id = elem[ internalKey ]; data = id && cache[ id ]; @@ -5695,17 +6220,18 @@ jQuery.extend({ delete cache[ id ]; - // IE does not allow us to delete expando properties from nodes, - // nor does it have a removeAttribute function on Document nodes; - // we must handle all of these cases - if ( deleteExpando ) { - delete elem[ internalKey ]; - - } else if ( typeof elem.removeAttribute !== strundefined ) { + // Support: IE<9 + // IE does not allow us to delete expando properties from nodes + // IE creates expando attributes along with the property + // IE does not have a removeAttribute function on Document nodes + if ( !attributes && typeof elem.removeAttribute !== "undefined" ) { elem.removeAttribute( internalKey ); + // Webkit & Blink performance suffers when deleting properties + // from DOM nodes, so set to undefined instead + // https://code.google.com/p/chromium/issues/detail?id=378607 } else { - elem[ internalKey ] = null; + elem[ internalKey ] = undefined; } deletedIds.push( id ); @@ -5714,78 +6240,71 @@ jQuery.extend({ } } } -}); +} ); + +jQuery.fn.extend( { + + // Keep domManip exposed until 3.0 (gh-2225) + domManip: domManip, + + detach: function( selector ) { + return remove( this, selector, true ); + }, + + remove: function( selector ) { + return remove( this, selector ); + }, -jQuery.fn.extend({ text: function( value ) { return access( this, function( value ) { return value === undefined ? jQuery.text( this ) : - this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); + this.empty().append( + ( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value ) + ); }, null, value, arguments.length ); }, append: function() { - return this.domManip( arguments, function( elem ) { + return domManip( this, arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.appendChild( elem ); } - }); + } ); }, prepend: function() { - return this.domManip( arguments, function( elem ) { + return domManip( this, arguments, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { var target = manipulationTarget( this, elem ); target.insertBefore( elem, target.firstChild ); } - }); + } ); }, before: function() { - return this.domManip( arguments, function( elem ) { + return domManip( this, arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this ); } - }); + } ); }, after: function() { - return this.domManip( arguments, function( elem ) { + return domManip( this, arguments, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this.nextSibling ); } - }); - }, - - remove: function( selector, keepData /* Internal Use Only */ ) { - var elem, - elems = selector ? jQuery.filter( selector, this ) : this, - i = 0; - - for ( ; (elem = elems[i]) != null; i++ ) { - - if ( !keepData && elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem ) ); - } - - if ( elem.parentNode ) { - if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { - setGlobalEval( getAll( elem, "script" ) ); - } - elem.parentNode.removeChild( elem ); - } - } - - return this; + } ); }, empty: function() { var elem, i = 0; - for ( ; (elem = this[i]) != null; i++ ) { + for ( ; ( elem = this[ i ] ) != null; i++ ) { + // Remove element nodes and prevent memory leaks if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); @@ -5810,9 +6329,9 @@ jQuery.fn.extend({ dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - return this.map(function() { + return this.map( function() { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); + } ); }, html: function( value ) { @@ -5831,14 +6350,15 @@ jQuery.fn.extend({ if ( typeof value === "string" && !rnoInnerhtml.test( value ) && ( support.htmlSerialize || !rnoshimcache.test( value ) ) && ( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && - !wrapMap[ (rtagName.exec( value ) || [ "", "" ])[ 1 ].toLowerCase() ] ) { + !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - value = value.replace( rxhtmlTag, "<$1>" ); + value = jQuery.htmlPrefilter( value ); try { - for (; i < l; i++ ) { + for ( ; i < l; i++ ) { + // Remove element nodes and prevent memory leaks - elem = this[i] || {}; + elem = this[ i ] || {}; if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); elem.innerHTML = value; @@ -5848,7 +6368,7 @@ jQuery.fn.extend({ elem = 0; // If using innerHTML throws an exception, use the fallback method - } catch(e) {} + } catch ( e ) {} } if ( elem ) { @@ -5858,117 +6378,25 @@ jQuery.fn.extend({ }, replaceWith: function() { - var arg = arguments[ 0 ]; - - // Make the changes, replacing each context element with the new content - this.domManip( arguments, function( elem ) { - arg = this.parentNode; + var ignored = []; - jQuery.cleanData( getAll( this ) ); + // Make the changes, replacing each non-ignored context element with the new content + return domManip( this, arguments, function( elem ) { + var parent = this.parentNode; - if ( arg ) { - arg.replaceChild( elem, this ); + if ( jQuery.inArray( this, ignored ) < 0 ) { + jQuery.cleanData( getAll( this ) ); + if ( parent ) { + parent.replaceChild( elem, this ); + } } - }); - // Force removal if there was no new content (e.g., from empty arguments) - return arg && (arg.length || arg.nodeType) ? this : this.remove(); - }, + // Force callback invocation + }, ignored ); + } +} ); - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var first, node, hasScripts, - scripts, doc, fragment, - i = 0, - l = this.length, - set = this, - iNoClone = l - 1, - value = args[0], - isFunction = jQuery.isFunction( value ); - - // We can't cloneNode fragments that contain checked, in WebKit - if ( isFunction || - ( l > 1 && typeof value === "string" && - !support.checkClone && rchecked.test( value ) ) ) { - return this.each(function( index ) { - var self = set.eq( index ); - if ( isFunction ) { - args[0] = value.call( this, index, self.html() ); - } - self.domManip( args, callback ); - }); - } - - if ( l ) { - fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); - first = fragment.firstChild; - - if ( fragment.childNodes.length === 1 ) { - fragment = first; - } - - if ( first ) { - scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); - hasScripts = scripts.length; - - // Use the original fragment for the last item instead of the first because it can end up - // being emptied incorrectly in certain situations (#8070). - for ( ; i < l; i++ ) { - node = fragment; - - if ( i !== iNoClone ) { - node = jQuery.clone( node, true, true ); - - // Keep references to cloned scripts for later restoration - if ( hasScripts ) { - jQuery.merge( scripts, getAll( node, "script" ) ); - } - } - - callback.call( this[i], node, i ); - } - - if ( hasScripts ) { - doc = scripts[ scripts.length - 1 ].ownerDocument; - - // Reenable scripts - jQuery.map( scripts, restoreScript ); - - // Evaluate executable scripts on first document insertion - for ( i = 0; i < hasScripts; i++ ) { - node = scripts[ i ]; - if ( rscriptType.test( node.type || "" ) && - !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { - - if ( node.src ) { - // Optional AJAX dependency, but won't run scripts if not present - if ( jQuery._evalUrl ) { - jQuery._evalUrl( node.src ); - } - } else { - jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); - } - } - } - } - - // Fix #11809: Avoid leaking memory - fragment = first = null; - } - } - - return this; - } -}); - -jQuery.each({ +jQuery.each( { appendTo: "append", prependTo: "prepend", insertBefore: "before", @@ -5983,8 +6411,8 @@ jQuery.each({ last = insert.length - 1; for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone(true); - jQuery( insert[i] )[ original ]( elems ); + elems = i === last ? this : this.clone( true ); + jQuery( insert[ i ] )[ original ]( elems ); // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() push.apply( ret, elems.get() ); @@ -5992,28 +6420,29 @@ jQuery.each({ return this.pushStack( ret ); }; -}); +} ); var iframe, - elemdisplay = {}; + elemdisplay = { + + // Support: Firefox + // We have to pre-define these values for FF (#10227) + HTML: "block", + BODY: "block" + }; /** * Retrieve the actual display of a element * @param {String} name nodeName of the element * @param {Object} doc Document object */ + // Called only from within defaultDisplay function actualDisplay( name, doc ) { - var style, - elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - - // getDefaultComputedStyle might be reliably used only on attached element - display = window.getDefaultComputedStyle && ( style = window.getDefaultComputedStyle( elem[ 0 ] ) ) ? + var elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ), - // Use of this method is a temporary fix (more like optmization) until something better comes along, - // since it was removed from specification and supported only in FF - style.display : jQuery.css( elem[ 0 ], "display" ); + display = jQuery.css( elem[ 0 ], "display" ); // We don't have any data stored on the element, // so use "detach" method as fast way to get rid of the element @@ -6037,7 +6466,8 @@ function defaultDisplay( nodeName ) { if ( display === "none" || !display ) { // Use the already-created iframe if possible - iframe = (iframe || jQuery( " -

Both

- -

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
- - - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/iframe2.html b/libs/bower_components/jScrollPane/iframe2.html deleted file mode 100644 index 21398c332d..0000000000 --- a/libs/bower_components/jScrollPane/iframe2.html +++ /dev/null @@ -1,121 +0,0 @@ - - - - - jScrollPane - alternative iframe demo - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - alternative approach to implement jScrollPane with iframes

-

- This demonstration shows a different approach to the first iframe demo for - styling the scrollbars associated with an iframe. This approach requires no special code inside the - iframe content pages (e.g. iframe_content3.html and - iframe_content4.html) and instead relies on the script in the hosting - page (this page). -

-

- This approach has some shortcomings though. The mousewheel doesn't work and the calculation of the width - and height seems a little off... -

- -

Vertical only

-
- -
-

Both

-
- -
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/iframe_content1.html b/libs/bower_components/jScrollPane/iframe_content1.html deleted file mode 100644 index 74e95f221f..0000000000 --- a/libs/bower_components/jScrollPane/iframe_content1.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - jScrollPane iframe content - - - - - - - - - - - - - - - - - - - - -
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/iframe_content2.html b/libs/bower_components/jScrollPane/iframe_content2.html deleted file mode 100644 index c6b43766e1..0000000000 --- a/libs/bower_components/jScrollPane/iframe_content2.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - jScrollPane iframe content 2 - - - - - - - - - - - - - - - - - - - - -
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/iframe_content3.html b/libs/bower_components/jScrollPane/iframe_content3.html deleted file mode 100644 index 7fbdc356c0..0000000000 --- a/libs/bower_components/jScrollPane/iframe_content3.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - jScrollPane iframe content 3 - - - - - - - - -

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/iframe_content4.html b/libs/bower_components/jScrollPane/iframe_content4.html deleted file mode 100644 index 294d766b57..0000000000 --- a/libs/bower_components/jScrollPane/iframe_content4.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - jScrollPane iframe content 4 - - - - - - - - -

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/image.html b/libs/bower_components/jScrollPane/image.html deleted file mode 100644 index 05e64ccf31..0000000000 --- a/libs/bower_components/jScrollPane/image.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - jScrollPane image demo - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - image demo page

-

- This demonstration shows how jScrollPane can handle it when some slow loading images are included - in the contents of the pane. -

-

- We use autoReinitialse so that the scrollpane automatically - re-calculates the size of it's content if and when it changes. Note that use of this property adds an - overhead to your page and is subject to the same warnings on the auto - reinitialise demo page. -

-

- If you can it is better to include width and height for each image (either through width and height - attributes or via CSS) in the markup. That way you can avoid the autoReinitialise cost. See - this demo for an example of that approach. -

-
- Touring - Avalauncher - Rockies - Paper cranes - Icecream -
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/image2.html b/libs/bower_components/jScrollPane/image2.html deleted file mode 100644 index a2c4df1f13..0000000000 --- a/libs/bower_components/jScrollPane/image2.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - jScrollPane image demo 2 - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - image demo page part 2

-

- This demonstration shows how you can avoid the autoReinitialise overhead (as seen in the - first image demo) by fixing the width and height of the images inside your - scroll pane. -

-

- As you can see from the sourcecode for this page, you can set the width and height either through CSS or - using width and height attributes on the image itself. -

-
- Touring - Avalauncher - Rockies - Paper cranes - Icecream -
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/index.html b/libs/bower_components/jScrollPane/index.html deleted file mode 100644 index 81775e580e..0000000000 --- a/libs/bower_components/jScrollPane/index.html +++ /dev/null @@ -1,315 +0,0 @@ - - - - - jScrollPane - cross browser styleable scrollbars with jQuery and CSS - - - - - - - - - - - - - - - - - -
-

jScrollPane - cross browser styleable scrollbars with jQuery and CSS

-

- jScrollPane is a cross-browser jQuery plugin by - Kelvin Luck which converts a browser's default scrollbars (on - elements with a relevant overflow property) into an HTML structure which can be easily skinned with CSS. -

-

- jScrollPane is designed to be flexible but very easy to use. After you have - downloaded and included the relevant files - in the head of your document all you need to to is call one javascript function to initialise the - scrollpane. You can style the resultant scrollbars easily with CSS or choose from the existing - themes. There are a number of different examples showcasing - different features of jScrollPane and a number of ways for you to get support. -

- -

How to use

-

- It is very simple to use jScrollPane. You will need to download the necessary - files and place them on your server. Then you just need to include the relevant files in the <head> - of your document: -

-
<!-- styles needed by jScrollPane -->
-<link type="text/css" href="style/jquery.jscrollpane.css" rel="stylesheet" media="all" />
-
-<!-- latest jQuery direct from google's CDN -->
-<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js">
-</script>
-
-<!-- the mousewheel plugin - optional to provide mousewheel support -->
-<script type="text/javascript" src="script/jquery.mousewheel.js"></script>
-
-<!-- the jScrollPane script -->
-<script type="text/javascript" src="script/jquery.jscrollpane.min.js"></script>
-

- Then you just need to initialise jScrollPane on document.ready (using a selector which will find the - content you want to apply jScrollPane to): -

-
$(function()
-{
-	$('.scroll-pane').jScrollPane();
-});
-

- There are plenty of different ways to use jScrollPane - either passing in different - settings when you initialise it or by using the API. Each of these different - use cases is covered by an example linked to from below. -

- -

Download

-

- You can always find the latest code for jScrollPane on its - github page. You can either check out this entire website (including all examples) via git, or you - can use the handy github functionality to - download a zip of the repository. -

-

- The particular files that you need are: -

- - -

Simple examples/ tests

-

- These examples show very basic functionality and exist so that I can test that any changes to - jScrollPane work cross browser and don't cause any new problems. Note that these examples aren't meant - to look pretty, they merely highlight different bits of functionaity which are available. If you want - examples of jScrollPane looking good then check out the themes. -

- - -

Themes

-

- You can style jScrollPane however you like using simple CSS. To give you some ideas, here are a variety - of different themes which you are free to download and use or modify: -

-
    -
  • Lozenge - lozenge shaped sliders and small arrow buttons
  • -
- -

Support

-

- Before trying to get support please check if your problem is a known - issue or if it is mentioned in the FAQs. If your issue is a new one and - you can't find any information about it then you can try one of the following two options: -

-
    -
  • -

    - Using the StackOverflow site. This is probably the - place you are most likely to get a quick answer as many Javascript experts spend time on - the site. It also provides niceties like pretty formatting of posted sourcecode. -

    -

    - If you ask a question on the site make sure you add the tags "jquery" and "jscrollpane" as - I will be monitoring these tags to try to provide support. -

    -
  • -
  • -

    - Through the jScrollPane google group - - sign up and then you can start a discussion (either by email or through the web - interface). -

    -

    - Please remember to use the search field at the top of the group's homepage to search the - archive to find out if your question has been answered before. -

    -
  • -
-

- If you have contacted support and established that your problem is definitely a bug then you can - raise an issue on the project's github - site. -

- -

History

-

- jScrollPane was originally developed in December 2006. Since then it has been constantly updated to - fix bugs and add new features. The change history since November 2008 is available in the jScrollPane - git repository. In August 2010 a major rewrite was - undertaken, starting from a blank canvas and adding long awaited features like horizontal scrolling - and automatic reinitialisation. If you want to find old versions of jScrollPane then you can check out - the changelog. -

- -

Credits

-

- Thanks to Hoppermagic for creating the jScrollPane logo! And - thanks to Mark Reed, Philip Leff and Erwin Odendaal for - sponsoring the development of v2 of this plugin (particularly to enable horizontal scrolling). -

- - -

- jScrollPane is a personal project that is open source for anybody to use as they want to. If you (and - your clients!) like jScrollPane then please consider donating to it's ongoing development. You can do - so via Pledgie or Paypal using the images below: -

-

- - Click here to lend your support to: jScrollPane and make a donation at www.pledgie.com ! - -

-
- - - - - - - - - -
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/invisibles.html b/libs/bower_components/jScrollPane/invisibles.html deleted file mode 100644 index c006b687e9..0000000000 --- a/libs/bower_components/jScrollPane/invisibles.html +++ /dev/null @@ -1,523 +0,0 @@ - - - - - jScrollPane demo showing jScrollPane working on elements which are initially display:none - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - demo showing jScrollPane working on elements which are initially display: none

-

- This demo shows that jScrollPane works correctly on elements who are initially set to display: - none. When the element is first shown you simply have to (re)initialise the scrollpane (or you - could even use autoReinitialise if you like) and its width - and height will be calculated correctly. -

-

- Note that the majority of the custom javascript and CSS on this page is just to create basic "tabs" - functionality where you can switch between different content on the page by clicking links. You don't - need to do anything special for jScrollPane to work in this situation. -

- -

Vertical only

- -
-

- ONE amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-
-

- TWO amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-
-

- THREE amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-

Horizontal only

- -
-

- FOUR, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-
-
-

- FIVE, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-
-
-

- SIX, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-
-

Both

- -
-

- SEVEN, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-
-

- EIGHT, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-
-

- NINE, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/issues/11/after.html b/libs/bower_components/jScrollPane/issues/11/after.html deleted file mode 100644 index 775019be18..0000000000 --- a/libs/bower_components/jScrollPane/issues/11/after.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - -latest news - - - - - - - - - -
-

news

-

After three years of toil, The new Tinyfish album, The Big Red Spark, - is finally finished, and to celebrate, you'll be able to join us at The Luminaire - in Kilburn for a very special gig to launch the album on an unsuspecting world.

-

Although by this point, some people may already have suspected.

-

Support will be provided by the excellent Dec Burke and his new band, - Destroy All Monsters

-

When: Friday, 10th September
- - Where: The Luminaire (click for map)
- How much: £10 in advance (£8 CRS members advance) or £12 on the door.
- Doors open at 7:30.

-

Tickets: www.linktoticket website.co.uk

-
- - - - diff --git a/libs/bower_components/jScrollPane/issues/11/before.html b/libs/bower_components/jScrollPane/issues/11/before.html deleted file mode 100644 index ffcfa4ba8c..0000000000 --- a/libs/bower_components/jScrollPane/issues/11/before.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - - - - - -latest news - - - - - - - - - -
-

news

-

After three years of toil, The new Tinyfish album, The Big Red Spark, - is finally finished, and to celebrate, you'll be able to join us at The Luminaire - in Kilburn for a very special gig to launch the album on an unsuspecting world.

-

Although by this point, some people may already have suspected.

-

Support will be provided by the excellent Dec Burke and his new band, - Destroy All Monsters

-

When: Friday, 10th September
- - Where: The Luminaire (click for map)
- How much: £10 in advance (£8 CRS members advance) or £12 on the door.
- Doors open at 7:30.

-

Tickets: www.linktoticket website.co.uk

-
- - - - diff --git a/libs/bower_components/jScrollPane/issues/11/brs_main.css b/libs/bower_components/jScrollPane/issues/11/brs_main.css deleted file mode 100644 index d4bf825511..0000000000 --- a/libs/bower_components/jScrollPane/issues/11/brs_main.css +++ /dev/null @@ -1,301 +0,0 @@ -@charset "utf-8"; -/* CSS Document */ -@font-face { - font-family: 'HelveticaNeueThin'; - src: url('helveticaneue-thin-webfont.eot'); - src: local(''), url('helveticaneue-thin-webfont.woff') format('woff'), url('helveticaneue-thin-webfont.ttf') format('truetype'), url('helveticaneue-thin-webfont.svg#webfont2SG3yTkB') format('svg'); - font-weight: normal; - font-style: normal; - font-variant: normal; -} - -body { - font-family: 'HelveticaNeueThin',Helvetica,Arial,sans-serif; - font-weight: normal; - font-style: normal; - line-height: normal; - font-size-adjust: 0.51; - margin: 0px; - color: #fff; - background-color: #000; - overflow:hidden; -} - -P, A { - font-size: 1em; - line-height: 1.2em; -} - -P { - text-align: justify; - margin-bottom: 1.0em; -} - -a:active {color:#e0262f; text-decoration: none;} /* selected link */ -a:visited {color:#c62128; text-decoration: none;} /* visited link */ -a:link {color:#d2232a; text-decoration: none;} /* unvisited link */ -a:hover {color:#df262e; text-decoration: underline;} /* mouse over link */ - -LI LI, LI LI A, TD, TD P, BLOCKQUOTE P { - font-size: 1em; - line-height: 1.2em; -} - -TABLE { - border: none; -} - -TD { - vertical-align: top; - padding: 0px; -} - -A { - outline: none; -} - -A IMG { - border: none; -} - -object { outline:none; } - -.red { - color: #d2232a; -} - -STRONG { - color: #d2232a; - font-weight: bold; -} - -h1,h2,h3,h4,h5 { - color: #d2232a; -} - -h1 { - font-size: 1.6em; - font-weight: normal; - font-style: normal; - margin-top: 0.5em; - margin-bottom: 0.5em; -} - -h2 { - font-size: 1.3em; - font-weight: normal; - font-style: italic; - margin-top: 0.8em; - margin-bottom: 0px; -} - -h5 { - font-size: 0.8em; - margin: 0.5em 0px 0px 0px; -} - -hr { - color: #ff0000; -} - -/* ----------------- begin supersize --------------------- */ - -#loading { - position: absolute; - top: 49.5%; - left: 49.5%; - z-index: 5; - width: 24px; - height: 24px; - text-indent: -999em; - background-image: url('../__imgs/furn/loading.gif'); -} - -#supersize { - position:fixed; -} - -#supersize img, #supersize a { - height:100%; - width:100%; - position:absolute; - z-index: 0; -} - -#supersize img { - image-rendering: optimizeQuality; /* Firefox 3.6+; default behavior is identical, no need to specify */ - -ms-interpolation-mode: bicubic; /* Internet Explorer 7.0; default in IE8+ */ -} - -#supersize .prevslide, #supersize .prevslide img { - z-index: 1; -} - -#supersize .activeslide, #supersize .activeslide img { - z-index: 2; -} - -/* ------------------ end supersize ---------------------- */ - -/* ------------------- begin header ---------------------- */ - -#header { - position: absolute; - top: 15px; - width: 100%; - margin: 0px auto; - z-index: 4; - text-align: center; -} - -#header p { - text-align: center; - margin-top: 0.5em; - } - -/* -------------------- end header ----------------------- */ - -/* ------------------- begin content --------------------- */ - -#content { - z-index: 3; - background-color: #000; - background-color: rgba(0,0,0,0.9); - position: absolute; - left: 0px; - bottom: 17%; - height: 62%; - width: 45%; - border: 1px solid #555; - border-left: 0px; - padding: 0px; - padding-left: 30px; - padding-right: 20px; - overflow: auto; -} - -.frontpage #content { - visibility: hidden; -} - -.gallerypage #content { - border: none; - width: 100%; - height: 33em; - bottom: 15%; - padding: 0px; - margin: 0px; -} - -.gallerypage #content p { - text-align: center; -} - -.videopage #content { - border: none; - width: 100%; - height: 65%; - bottom: 15%; - padding: 0px; - margin: 0px; -} - -.videopage #content p { - text-align: center; -} - - -/* -------------------- end content ---------------------- */ - -/* ----------------- begin navigation -------------------- */ - -#navigate { - position: absolute; - height: 4em; - width: 100%; - padding: 0px; - margin: 0px auto; - bottom: 5%; - z-index: 3; - background-color: #000; - background-color: rgba(0,0,0,0.9); - border: 1px solid #555; - border-left: 0px; - border-right: 0px; -} - -#nav, #nav ul { - margin: 0px; - padding: 0px; - list-style-type: none; - list-style-position: outside; - position: relative; - line-height: 1.6em; -} - -#nav { - padding: 0.4em; -} - -#nav a { - display: block; - height: 1.6em; - padding: 0px 10px; - text-decoration:none; - line-height: 1.6em; - background-color: #000; - background-color: rgba(0,0,0,0.9); /* bug in Opera!!! */ -} - -#nav a:link, #nav a:active, #nav a:visited { - color: #fff; -} - -#nav a:hover { - color: #d2232a; -} - -#nav li { - float: left; - font-size: 1em; - line-height: 1.6em; -} - -#nav ul { - position:absolute; - display: none; -} - -#nav ul li a { - float: left; - font-size: 1em; - line-height: 1.6em; -} - -#nav li:hover ul ul, #nav li:hover ul ul ul, #nav li:hover ul ul ul ul { - display: none; -} - -#nav li:hover ul, #nav li li:hover ul, #nav li li li:hover ul, #nav li li li li:hover ul { - display: block; - height: 1.6em; -} - -/* ------------------ end navigation --------------------- */ - -/* ------------------ begin viewcart --------------------- */ - -#viewcart { - z-index: 4; - background-color: #000; - background-color: rgba(0,0,0,0.9); - position: absolute; - right: 10px; - bottom: 5.5%; - height: 51px; - width: 130px; - padding: 0px; - overflow: hidden; -} - -/* ------------------- end viewcart ---------------------- */ diff --git a/libs/bower_components/jScrollPane/issues/11/index.html b/libs/bower_components/jScrollPane/issues/11/index.html deleted file mode 100644 index e42743a385..0000000000 --- a/libs/bower_components/jScrollPane/issues/11/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - jScrollPane - issue 11 - - - - - - - - - - - -
-

jScrollPane - issue 11

-

- This page demonstrates the bug described in - issue 11 as reported (with nice striped down test cases) by - TinyFish. -

- -
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/issues/11/jquery.mousewheel.js b/libs/bower_components/jScrollPane/issues/11/jquery.mousewheel.js deleted file mode 100644 index 27ed2f102f..0000000000 --- a/libs/bower_components/jScrollPane/issues/11/jquery.mousewheel.js +++ /dev/null @@ -1,79 +0,0 @@ -/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) - * Licensed under the MIT License (LICENSE.txt). - * - * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. - * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. - * Thanks to: Seamus Leahy for adding deltaX and deltaY - * - * Version: 3.0.3 - * - * Requires: 1.2.2+ - */ - -(function($) { - -var types = ['DOMMouseScroll', 'mousewheel']; - -$.event.special.mousewheel = { - setup: function() { - if ( this.addEventListener ) { - for ( var i=types.length; i; ) { - this.addEventListener( types[--i], handler, false ); - } - } else { - this.onmousewheel = handler; - } - }, - - teardown: function() { - if ( this.removeEventListener ) { - for ( var i=types.length; i; ) { - this.removeEventListener( types[--i], handler, false ); - } - } else { - this.onmousewheel = null; - } - } -}; - -$.fn.extend({ - mousewheel: function(fn) { - return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); - }, - - unmousewheel: function(fn) { - return this.unbind("mousewheel", fn); - } -}); - - -function handler(event) { - var orgEvent = event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0; - - event = $.event.fix(event || window.event); - event.type = "mousewheel"; - - // Old school scrollwheel delta - if ( event.wheelDelta ) { delta = event.wheelDelta/120; } - if ( event.detail ) { delta = -event.detail/3; } - - // New school multidimensional scroll (touchpads) deltas - deltaY = delta; - - // Gecko - if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { - deltaY = 0; - deltaX = -1*delta; - } - - // Webkit - if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; } - if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; } - - // Add event and delta to the front of the arguments - args.unshift(event, delta, deltaX, deltaY); - - return $.event.handle.apply(this, args); -} - -})(jQuery); \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/issues/11/jscrollpane-2b3.css b/libs/bower_components/jScrollPane/issues/11/jscrollpane-2b3.css deleted file mode 100644 index 4b91ece526..0000000000 --- a/libs/bower_components/jScrollPane/issues/11/jscrollpane-2b3.css +++ /dev/null @@ -1,143 +0,0 @@ -/* - * CSS Styles that are needed by jScrollPane for it to operate correctly. - * - * Include this stylesheet in your site or copy and paste the styles below into your stylesheet - jScrollPane - * may not operate correctly without them. - */ - -.jspContainer -{ - overflow: hidden; - position: relative; -} - -.jspPane -{ - position: absolute; -} - -.jspVerticalBar -{ - position: absolute; - top: 0; - right: 0; - width: 16px; - height: 100%; - background: red; -} - -.jspHorizontalBar -{ - position: absolute; - bottom: 0; - left: 0; - width: 100%; - height: 16px; - background: red; -} - -.jspVerticalBar *, -.jspHorizontalBar * -{ - margin: 0; - padding: 0; -} - -.jspCap -{ - display: none; -} - -.jspHorizontalBar .jspCap -{ - float: left; -} - -.jspTrack -{ - background: #000 url(../__imgs/furn/track.gif) repeat-y center; - position: relative; -} - -.jspDrag -{ - background: #666; - border: solid #aaa 2px; - position: relative; - top: 0; - left: 0; - cursor: pointer; -} - -.jspHorizontalBar .jspTrack, -.jspHorizontalBar .jspDrag -{ - float: left; - height: 100%; -} - -.jspArrow -{ - background-color: rgba(0,0,0,0.9); - text-indent: -20000px; - display: block; - cursor: pointer; -} - -.jspArrowUp -{ - background-image: url("../__imgs/furn/arrow_up.gif"); -} - -.jspArrowDown -{ - background-image: url("../__imgs/furn/arrow_down.gif"); -} - -.jspArrow.jspDisabled -{ - cursor: default; - background: #80808d; -} - -.jspArrowUp.jspDisabled -{ - cursor: default; - background-image: url("../__imgs/furn/arrow_up.gif"); -} - -.jspArrowDown.jspDisabled -{ - cursor: default; - background-image: url("../__imgs/furn/arrow_down.gif"); -} - -.jspVerticalBar .jspArrow -{ - height: 16px; -} - -.jspHorizontalBar .jspArrow -{ - width: 16px; - float: left; - height: 100%; -} - -.jspVerticalBar .jspArrow:focus -{ - outline: none; -} - -.jspCorner -{ - background: #eeeef4; - float: left; - height: 100%; -} - -/* Yuk! CSS Hack for IE6 3 pixel bug :( */ -* html .jspCorner -{ - margin: 0 -3px 0 0; -} \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/issues/11/jscrollpane-2b3.js b/libs/bower_components/jScrollPane/issues/11/jscrollpane-2b3.js deleted file mode 100644 index b87f97e107..0000000000 --- a/libs/bower_components/jScrollPane/issues/11/jscrollpane-2b3.js +++ /dev/null @@ -1,1063 +0,0 @@ -/*! - * jScrollPane - v2.0.0beta3 - 2010-08-27 - * http://jscrollpane.kelvinluck.com/ - * - * Copyright (c) 2010 Kelvin Luck - * Dual licensed under the MIT or GPL licenses. - */ - -// Script: jScrollPane - cross browser customisable scrollbars -// -// *Version: 2.0.0beta3, Last updated: 2010-08-27* -// -// Project Home - http://jscrollpane.kelvinluck.com/ -// GitHub - http://github.com/vitch/jScrollPane -// Source - http://github.com/vitch/jScrollPane/raw/master/script/jquery.jscrollpane.js -// (Minified) - http://github.com/vitch/jScrollPane/raw/master/script/jquery.jscrollpane.min.js -// -// About: License -// -// Copyright (c) 2010 Kelvin Luck -// Dual licensed under the MIT or GPL Version 2 licenses. -// http://jscrollpane.kelvinluck.com/MIT-LICENSE.txt -// http://jscrollpane.kelvinluck.com/GPL-LICENSE.txt -// -// About: Examples -// -// All examples and demos are available through the jScrollPane example site at: -// http://jscrollpane.kelvinluck.com/ -// -// About: Support and Testing -// -// This plugin is tested on the browsers below and has been found to work reliably on them. If you run -// into a problem on one of the supported browsers then please visit the support section on the jScrollPane -// website (http://jscrollpane.kelvinluck.com/) for more information on getting support. You are also -// welcome to fork the project on GitHub if you can contribute a fix for a given issue. -// -// jQuery Versions - 1.4.2 -// Browsers Tested - Firefox 3.6.8, Safari 5, Opera 10.6, Chrome 5.0, IE 6, 7, 8 -// -// About: Release History -// -// 2.0.0beta3 - (2010-08-27) Horizontal mousewheel, mwheelIntent, keyboard support, bug fixes -// 2.0.0beta2 - (2010-08-21) Bug fixes -// 2.0.0beta1 - (2010-08-17) Rewrite to follow modern best practices and enable horizontal scrolling, initially hidden -// elements and dynamically sized elements. -// 1.x - (2006-12-31 - 2010-07-31) Initial version, hosted at googlecode, deprecated - -(function($,window,undefined){ - - $.fn.jScrollPane = function(settings) - { - // JScrollPane "class" - public methods are available through $('selector').data('jsp') - function JScrollPane(elem, s) - { - - var settings, jsp = this, pane, paneWidth, paneHeight, container, contentWidth, contentHeight, - percentInViewH, percentInViewV, isScrollableV, isScrollableH, verticalDrag, dragMaxY, - verticalDragPosition, horizontalDrag, dragMaxX, horizontalDragPosition, - verticalBar, verticalTrack, scrollbarWidth, verticalTrackHeight, verticalDragHeight, arrowUp, arrowDown, - horizontalBar, horizontalTrack, horizontalTrackWidth, horizontalDragWidth, arrowLeft, arrowRight, - reinitialiseInterval, originalPadding, originalPaddingTotalWidth, previousPaneWidth, - wasAtTop = true, wasAtLeft = true, wasAtBottom = false, wasAtRight = false, - mwEvent = $.fn.mwheelIntent ? 'mwheelIntent.jsp' : 'mousewheel.jsp'; - - originalPadding = elem.css('paddingTop') + ' ' + - elem.css('paddingRight') + ' ' + - elem.css('paddingBottom') + ' ' + - elem.css('paddingLeft'); - originalPaddingTotalWidth = (parseInt(elem.css('paddingLeft')) || 0) + - (parseInt(elem.css('paddingRight')) || 0); - - initialise(s); - - function initialise(s) - { - - var clonedElem, tempWrapper, /*firstChild, lastChild, */isMaintainingPositon, lastContentX, lastContentY, - hasContainingSpaceChanged; - - settings = s; - - if (pane == undefined) { - - elem.css( - { - 'overflow': 'hidden', - 'padding': 0 - } - ); - // TODO: Deal with where width/ height is 0 as it probably means the element is hidden and we should - // come back to it later and check once it is unhidden... - paneWidth = elem.innerWidth() + originalPaddingTotalWidth; - paneHeight = elem.innerHeight(); - - elem.width(paneWidth); - - pane = $('
').wrap( - $('
') - .css({ - 'width': paneWidth + 'px', - 'height': paneHeight + 'px' - } - ) - ); - - elem.wrapInner(pane.parent()); - // Need to get the vars after being added to the document, otherwise they reference weird - // disconnected orphan elements... - container = elem.find('>.jspContainer'); - pane = container.find('>.jspPane'); - pane.css('padding', originalPadding); - - /* - // Move any margins from the first and last children up to the container so they can still - // collapse with neighbouring elements as they would before jScrollPane - firstChild = pane.find(':first-child'); - lastChild = pane.find(':last-child'); - elem.css( - { - 'margin-top': firstChild.css('margin-top'), - 'margin-bottom': lastChild.css('margin-bottom') - } - ); - firstChild.css('margin-top', 0); - lastChild.css('margin-bottom', 0); - */ - } else { - - elem.css('width', null); - - hasContainingSpaceChanged = elem.outerWidth() + originalPaddingTotalWidth != paneWidth || elem.outerHeight() != paneHeight; - - if (hasContainingSpaceChanged) { - paneWidth = elem.innerWidth() + originalPaddingTotalWidth; - paneHeight = elem.innerHeight(); - container.css({ - 'width': paneWidth + 'px', - 'height': paneHeight + 'px' - }); - } - - previousPaneWidth = pane.innerWidth(); - - if (!hasContainingSpaceChanged && pane.outerWidth() == contentWidth && pane.outerHeight() == contentHeight) { - // Nothing has changed since we last initialised - if (isScrollableH || isScrollableV) { // If we had already set a width then re-set it - pane.css('width', previousPaneWidth + 'px'); - elem.css('width', (previousPaneWidth + originalPaddingTotalWidth) + 'px'); - } - // Then abort... - return; - } - - pane.css('width', null); - elem.css('width', (paneWidth + originalPaddingTotalWidth) + 'px'); - - container.find('>.jspVerticalBar,>.jspHorizontalBar').remove().end(); - } - - // Unfortunately it isn't that easy to find out the width of the element as it will always report the - // width as allowed by its container, regardless of overflow settings. - // A cunning workaround is to clone the element, set its position to absolute and place it in a narrow - // container. Now it will push outwards to its maxium real width... - clonedElem = pane.clone().css('position', 'absolute'); - tempWrapper = $('
').append(clonedElem); - $('body').append(tempWrapper); - contentWidth = Math.max(pane.outerWidth(), clonedElem.outerWidth()); - tempWrapper.remove(); - - contentHeight = pane.outerHeight(true); - /*alert(contentHeight); */ - percentInViewH = contentWidth / paneWidth; - percentInViewV = contentHeight / paneHeight; - isScrollableV = percentInViewV > 1; - - isScrollableH = percentInViewH > 1; - - //console.log(paneWidth, paneHeight, contentWidth, contentHeight, percentInViewH, percentInViewV, isScrollableH, isScrollableV); - - if (!(isScrollableH || isScrollableV)) { - elem.removeClass('jspScrollable'); - pane.css({ - 'top': 0, - 'width': container.width() + 'px' - }); - removeMousewheel(); - removeFocusHandler(); - removeKeyboardNav(); - unhijackInternalLinks(); - } else { - elem.addClass('jspScrollable'); - - isMaintainingPositon = settings.maintainPosition && (verticalDragPosition || horizontalDragPosition); - if (isMaintainingPositon) { - lastContentX = contentPositionX(); - lastContentY = contentPositionY(); - } - - initialiseVerticalScroll(); - initialiseHorizontalScroll(); - resizeScrollbars(); - - if (isMaintainingPositon) { - scrollToX(lastContentX); - scrollToY(lastContentY); - } - - initFocusHandler(); - initMousewheel(); - if (settings.enableKeyboardNavigation) { - initKeyboardNav(); - } - - observeHash(); - if (settings.hijackInternalLinks) { - hijackInternalLinks(); - } - } - - if (settings.autoReinitialise && !reinitialiseInterval) { - reinitialiseInterval = setInterval( - function() - { - initialise(settings); - }, - settings.autoReinitialiseDelay - ); - } else if (!settings.autoReinitialise && reinitialiseInterval) { - clearInterval(reinitialiseInterval) - } - - elem.trigger('jsp-initialised', [isScrollableH || isScrollableV]); - } - - function initialiseVerticalScroll() - { - if (isScrollableV) { - - container.append( - $('
').append( - $('
'), - $('
').append( - $('
').append( - $('
'), - $('
') - ) - ), - $('
') - ) - ); - - verticalBar = container.find('>.jspVerticalBar'); - verticalTrack = verticalBar.find('>.jspTrack'); - verticalDrag = verticalTrack.find('>.jspDrag'); - - if (settings.showArrows) { - arrowUp = $('').bind( - 'mousedown.jsp', getArrowScroll(0, -1) - ).bind('click.jsp', nil); - arrowDown = $('').bind( - 'mousedown.jsp', getArrowScroll(0, 1) - ).bind('click.jsp', nil); - if (settings.arrowScrollOnHover) { - arrowUp.bind('mouseover.jsp', getArrowScroll(0, -1, arrowUp)); - arrowDown.bind('mouseover.jsp', getArrowScroll(0, 1, arrowDown)); - } - - appendArrows(verticalTrack, settings.verticalArrowPositions, arrowUp, arrowDown); - } - - verticalTrackHeight = paneHeight; - container.find('>.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow').each( - function() - { - verticalTrackHeight -= $(this).outerHeight(); - } - ); - - - verticalDrag.hover( - function() - { - verticalDrag.addClass('jspHover'); - }, - function() - { - verticalDrag.removeClass('jspHover'); - } - ).bind( - 'mousedown.jsp', - function(e) - { - // Stop IE from allowing text selection - $('html').bind('dragstart.jsp selectstart.jsp', function() { return false; }); - - verticalDrag.addClass('jspActive'); - - var startY = e.pageY - verticalDrag.position().top; - - $('html').bind( - 'mousemove.jsp', - function(e) - { - positionDragY(e.pageY - startY, false); - } - ).bind('mouseup.jsp mouseleave.jsp', cancelDrag); - return false; - } - ); - sizeVerticalScrollbar(); - updateVerticalArrows(); - } - } - - function sizeVerticalScrollbar() - { - verticalTrack.height(verticalTrackHeight + 'px'); - verticalDragPosition = 0; - scrollbarWidth = settings.verticalGutter + verticalTrack.outerWidth(); - - // Make the pane thinner to allow for the vertical scrollbar - pane.width(paneWidth - scrollbarWidth - originalPaddingTotalWidth); - - // Add margin to the left of the pane if scrollbars are on that side (to position - // the scrollbar on the left or right set it's left or right property in CSS) - if (verticalBar.position().left == 0) { - pane.css('margin-left', scrollbarWidth + 'px'); - } - } - - function initialiseHorizontalScroll() - { - if (isScrollableH) { - - container.append( - $('
').append( - $('
'), - $('
').append( - $('
').append( - $('
'), - $('
') - ) - ), - $('
') - ) - ); - - horizontalBar = container.find('>.jspHorizontalBar'); - horizontalTrack = horizontalBar.find('>.jspTrack'); - horizontalDrag = horizontalTrack.find('>.jspDrag'); - - if (settings.showArrows) { - arrowLeft = $('').bind( - 'mousedown.jsp', getArrowScroll(-1, 0) - ).bind('click.jsp', nil); - arrowRight = $('').bind( - 'mousedown.jsp', getArrowScroll(1, 0) - ).bind('click.jsp', nil); - if (settings.arrowScrollOnHover) { - arrowLeft.bind('mouseover.jsp', getArrowScroll(-1, 0, arrowLeft)); - arrowRight.bind('mouseover.jsp', getArrowScroll(1, 0, arrowRight)); - } - appendArrows(horizontalTrack, settings.horizontalArrowPositions, arrowLeft, arrowRight); - } - - horizontalDrag.hover( - function() - { - horizontalDrag.addClass('jspHover'); - }, - function() - { - horizontalDrag.removeClass('jspHover'); - } - ).bind( - 'mousedown.jsp', - function(e) - { - // Stop IE from allowing text selection - $('html').bind('dragstart.jsp selectstart.jsp', function() { return false; }); - - horizontalDrag.addClass('jspActive'); - - var startX = e.pageX - horizontalDrag.position().left; - - $('html').bind( - 'mousemove.jsp', - function(e) - { - positionDragX(e.pageX - startX, false); - } - ).bind('mouseup.jsp mouseleave.jsp', cancelDrag); - return false; - } - ); - horizontalTrackWidth = container.innerWidth(); - sizeHorizontalScrollbar(); - updateHorizontalArrows(); - } else { - // no horizontal scroll - } - } - - function sizeHorizontalScrollbar() - { - - container.find('>.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow').each( - function() - { - horizontalTrackWidth -= $(this).outerWidth(); - } - ); - - horizontalTrack.width(horizontalTrackWidth + 'px'); - horizontalDragPosition = 0; - } - - function resizeScrollbars() - { - if (isScrollableH && isScrollableV) { - var horizontalTrackHeight = horizontalTrack.outerHeight(), - verticalTrackWidth = verticalTrack.outerWidth(); - verticalTrackHeight -= horizontalTrackHeight; - $(horizontalBar).find('>.jspCap:visible,>.jspArrow').each( - function() - { - horizontalTrackWidth += $(this).outerWidth(); - } - ); - horizontalTrackWidth -= verticalTrackWidth; - paneHeight -= verticalTrackWidth; - paneWidth -= horizontalTrackHeight; - horizontalTrack.parent().append( - $('
').css('width', horizontalTrackHeight + 'px') - ); - sizeVerticalScrollbar(); - sizeHorizontalScrollbar(); - } - // reflow content - if (isScrollableH) { - pane.width((container.outerWidth() - originalPaddingTotalWidth) + 'px'); - } - contentHeight = pane.outerHeight(); - percentInViewV = contentHeight / paneHeight; - - if (isScrollableH) { - horizontalDragWidth = 1 / percentInViewH * horizontalTrackWidth; - if (horizontalDragWidth > settings.horizontalDragMaxWidth) { - horizontalDragWidth = settings.horizontalDragMaxWidth; - } else if (horizontalDragWidth < settings.horizontalDragMinWidth) { - horizontalDragWidth = settings.horizontalDragMinWidth; - } - horizontalDrag.width(horizontalDragWidth + 'px'); - dragMaxX = horizontalTrackWidth - horizontalDragWidth; - } - if (isScrollableV) { - verticalDragHeight = 1 / percentInViewV * verticalTrackHeight; - if (verticalDragHeight > settings.verticalDragMaxHeight) { - verticalDragHeight = settings.verticalDragMaxHeight; - } else if (verticalDragHeight < settings.verticalDragMinHeight) { - verticalDragHeight = settings.verticalDragMinHeight; - } - verticalDrag.height(verticalDragHeight + 'px'); - dragMaxY = verticalTrackHeight - verticalDragHeight; - } - } - - function appendArrows(ele, p, a1, a2) - { - var p1 = "before", p2 = "after", aTemp; - - // Sniff for mac... Is there a better way to determine whether the arrows would naturally appear - // at the top or the bottom of the bar? - if (p == "os") { - p = /Mac/.test(navigator.platform) ? "after" : "split"; - } - if (p == p1) { - p2 = p; - } else if (p == p2) { - p1 = p; - aTemp = a1; - a1 = a2; - a2 = aTemp; - } - - ele[p1](a1)[p2](a2); - } - - function getArrowScroll(dirX, dirY, ele) { - return function() - { - arrowScroll(dirX, dirY, this, ele); - this.blur(); - return false; - } - } - - function arrowScroll(dirX, dirY, arrow, ele) - { - arrow = $(arrow).addClass('jspActive'); - - var eve, doScroll = function() - { - if (dirX != 0) { - positionDragX(horizontalDragPosition + dirX * settings.arrowButtonSpeed, false); - } - if (dirY != 0) { - positionDragY(verticalDragPosition + dirY * settings.arrowButtonSpeed, false); - } - }, - scrollInt = setInterval(doScroll, settings.arrowRepeatFreq); - - doScroll(); - - eve = ele == undefined ? 'mouseup.jsp' : 'mouseout.jsp'; - ele = ele || $('html'); - ele.bind( - eve, - function() - { - arrow.removeClass('jspActive'); - clearInterval(scrollInt); - ele.unbind(eve); - } - ); - } - - function cancelDrag() - { - $('html').unbind('dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp'); - - verticalDrag && verticalDrag.removeClass('jspActive'); - horizontalDrag && horizontalDrag.removeClass('jspActive'); - } - - function positionDragY(destY, animate) - { - if (!isScrollableV) { - return; - } - if (destY < 0) { - destY = 0; - } else if (destY > dragMaxY) { - destY = dragMaxY; - } - - // can't just check if(animate) because false is a valid value that could be passed in... - if (animate == undefined) { - animate = settings.animateScroll; - } - if (animate) { - jsp.animate(verticalDrag, 'top', destY, _positionDragY); - } else { - verticalDrag.css('top', destY); - _positionDragY(destY); - } - - } - - function _positionDragY(destY) - { - if (destY == undefined) { - destY = verticalDrag.position().top; - } - - container.scrollTop(0); - verticalDragPosition = destY; - - var isAtTop = verticalDragPosition == 0, - isAtBottom = verticalDragPosition == dragMaxY, - percentScrolled = destY/ dragMaxY, - destTop = -percentScrolled * (contentHeight - paneHeight); - - if (wasAtTop != isAtTop || wasAtBottom != isAtBottom) { - wasAtTop = isAtTop; - wasAtBottom = isAtBottom; - elem.trigger('jsp-arrow-change', [wasAtTop, wasAtBottom, wasAtLeft, wasAtRight]); - } - - updateVerticalArrows(isAtTop, isAtBottom); - pane.css('top', destTop); - elem.trigger('jsp-scroll-y', [-destTop, isAtTop, isAtBottom]); - } - - function positionDragX(destX, animate) - { - if (!isScrollableH) { - return; - } - if (destX < 0) { - destX = 0; - } else if (destX > dragMaxX) { - destX = dragMaxX; - } - - if (animate == undefined) { - animate = settings.animateScroll; - } - if (animate) { - jsp.animate(horizontalDrag, 'left', destX, _positionDragX); - } else { - horizontalDrag.css('left', destX); - _positionDragX(destX); - } - } - - function _positionDragX(destX) - { - if (destX == undefined) { - destX = horizontalDrag.position().left; - } - - container.scrollTop(0); - horizontalDragPosition = destX; - - var isAtLeft = horizontalDragPosition == 0, - isAtRight = horizontalDragPosition == dragMaxY, - percentScrolled = destX / dragMaxX, - destLeft = -percentScrolled * (contentWidth - paneWidth); - - if (wasAtLeft != isAtLeft || wasAtRight != isAtRight) { - wasAtLeft = isAtLeft; - wasAtRight = isAtRight; - elem.trigger('jsp-arrow-change', [wasAtTop, wasAtBottom, wasAtLeft, wasAtRight]); - } - - updateHorizontalArrows(isAtLeft, isAtRight); - pane.css('left', destLeft); - elem.trigger('jsp-scroll-x', [-destLeft, isAtLeft, isAtRight]); - } - - function updateVerticalArrows(isAtTop, isAtBottom) - { - if (settings.showArrows) { - arrowUp[isAtTop ? 'addClass' : 'removeClass']('jspDisabled'); - arrowDown[isAtBottom ? 'addClass' : 'removeClass']('jspDisabled'); - } - } - - function updateHorizontalArrows(isAtLeft, isAtRight) - { - if (settings.showArrows) { - arrowLeft[isAtLeft ? 'addClass' : 'removeClass']('jspDisabled'); - arrowRight[isAtRight ? 'addClass' : 'removeClass']('jspDisabled'); - } - } - - function scrollToY(destY, animate) - { - var percentScrolled = destY / (contentHeight - paneHeight); - positionDragY(percentScrolled * dragMaxY, animate); - } - - function scrollToX(destX, animate) - { - var percentScrolled = destX / (contentWidth - paneWidth); - positionDragX(percentScrolled * dragMaxX, animate); - } - - function scrollToElement(ele, stickToTop, animate) - { - var e, eleHeight, eleTop = 0, viewportTop, maxVisibleEleTop, destY; - - // Legal hash values aren't necessarily legal jQuery selectors so we need to catch any - // errors from the lookup... - try { - e = $(ele); - } catch (err) { - return; - } - eleHeight = e.outerHeight(); - - container.scrollTop(0); - - // loop through parents adding the offset top of any elements that are relatively positioned between - // the focused element and the jspPane so we can get the true distance from the top - // of the focused element to the top of the scrollpane... - while (!e.is('.jspPane')) { - eleTop += e.position().top; - e = e.offsetParent(); - if (/^body|html$/i.test(e[0].nodeName)) { - // we ended up too high in the document structure. Quit! - return; - } - } - - - viewportTop = contentPositionY(); - maxVisibleEleTop = viewportTop + paneHeight; - if (eleTop < viewportTop || stickToTop) { // element is above viewport - destY = eleTop - settings.verticalGutter; - } else if (eleTop + eleHeight > maxVisibleEleTop) { // element is below viewport - destY = eleTop - paneHeight + eleHeight + settings.verticalGutter; - } - if (destY) { - scrollToY(destY, animate); - } - // TODO: Implement automatic horizontal scrolling? - } - - function contentPositionX() - { - return -pane.position().left; - } - - function contentPositionY() - { - return -pane.position().top; - } - - function initMousewheel() - { - container.unbind(mwEvent).bind( - mwEvent, - function (event, delta, deltaX, deltaY) { - var dX = horizontalDragPosition, dY = verticalDragPosition; - positionDragX(horizontalDragPosition + deltaX * settings.mouseWheelSpeed, false) - positionDragY(verticalDragPosition - deltaY * settings.mouseWheelSpeed, false); - // return true if there was no movement so rest of screen can scroll - return dX == horizontalDragPosition && dY == verticalDragPosition; - } - ); - } - - function removeMousewheel() - { - container.unbind(mwEvent); - } - - function nil() - { - return false; - } - - function initFocusHandler() - { - pane.unbind('focusin.jsp').bind( - 'focusin.jsp', - function(e) - { - if(e.target === pane[0]){return;} - scrollToElement(e.target, false); - } - ); - } - - function removeFocusHandler() - { - - pane.unbind('focusin.jsp'); - } - - function initKeyboardNav() - { - var pressed, pressedTimer; - elem.attr('tabindex', 0) - .unbind('keydown.jsp') - .bind( - 'keydown.jsp', - function(e) - { - if(e.target !== elem[0]){ - return; - } - var dX = horizontalDragPosition, dY = verticalDragPosition, step = pressed ? 2 : 16; - switch(e.keyCode) { - case 40: // down - positionDragY(verticalDragPosition + step, false); - break; - case 38: // up - positionDragY(verticalDragPosition - step, false); - break; - case 34: // page down - case 32: // space - scrollToY(contentPositionY() + Math.max(32, paneHeight) - 16); - break; - case 33: // page up - scrollToY(contentPositionY() - paneHeight + 16); - break; - case 35: // end - scrollToY(contentHeight - paneHeight); - break; - case 36: // home - scrollToY(0); - break; - case 39: // right - positionDragX(horizontalDragPosition + step, false); - break; - case 37: // left - positionDragX(horizontalDragPosition - step, false); - break; - } - - if( !(dX == horizontalDragPosition && dY == verticalDragPosition) ){ - pressed = true; - clearTimeout(pressedTimer); - pressedTimer = setTimeout(function(){ - pressed = false; - }, 260); - return false; - } - } - ); - if(settings.hideFocus) { - elem.css('outline', 'none'); - if('hideFocus' in container[0]){ - elem.attr('hideFocus', true); - } - } else { - elem.css('outline', ''); - if('hideFocus' in container[0]){ - elem.attr('hideFocus', false); - } - } - } - - function removeKeyboardNav() - { - elem.attr('tabindex', '-1') - .removeAttr('tabindex') - .unbind('keydown.jsp'); - } - - function observeHash() - { - if (location.hash && location.hash.length > 1) { - var e, retryInt; - try { - e = $(location.hash); - } catch (err) { - return; - } - - if (e.length && pane.find(e)) { - // nasty workaround but it appears to take a little while before the hash has done its thing - // to the rendered page so we just wait until the container's scrollTop has been messed up. - if (container.scrollTop() == 0) { - retryInt = setInterval( - function() - { - if (container.scrollTop() > 0) { - scrollToElement(location.hash, true); - $(document).scrollTop(container.position().top); - clearInterval(retryInt); - } - }, - 50 - ) - } else { - scrollToElement(location.hash, true); - $(document).scrollTop(container.position().top); - } - } - } - } - - function unhijackInternalLinks() - { - $('a.jspHijack').unbind('click.jsp-hijack').removeClass('jspHijack'); - } - - function hijackInternalLinks() - { - unhijackInternalLinks(); - $('a[href^=#]').addClass('jspHijack').bind( - 'click.jsp-hijack', - function() - { - var uriParts = this.href.split('#'), hash; - if (uriParts.length > 1) { - hash = uriParts[1]; - if (hash.length > 0 && pane.find('#' + hash).length > 0) { - scrollToElement('#' + hash, true); - // Need to return false otherwise things mess up... Would be nice to maybe also scroll - // the window to the top of the scrollpane? - return false; - } - } - } - ) - } - - // Public API - $.extend( - jsp, - { - // Reinitialises the scroll pane (if it's internal dimensions have changed since the last time it - // was initialised). The settings object which is passed in will override any settings from the - // previous time it was initialised - if you don't pass any settings then the ones from the previous - // initialisation will be used. - reinitialise: function(s) - { - s = $.extend({}, s, settings); - initialise(s); - }, - // Scrolls the specified element (a jQuery object, DOM node or jQuery selector string) into view so - // that it can be seen within the viewport. If stickToTop is true then the element will appear at - // the top of the viewport, if it is false then the viewport will scroll as little as possible to - // show the element. You can also specify if you want animation to occur. If you don't provide this - // argument then the animateScroll value from the settings object is used instead. - scrollToElement: function(ele, stickToTop, animate) - { - scrollToElement(ele, stickToTop, animate); - }, - // Scrolls the pane so that the specified co-ordinates within the content are at the top left - // of the viewport. animate is optional and if not passed then the value of animateScroll from - // the settings object this jScrollPane was initialised with is used. - scrollTo: function(destX, destY, animate) - { - scrollToX(destX, animate); - scrollToY(destY, animate); - }, - // Scrolls the pane so that the specified co-ordinate within the content is at the left of the - // viewport. animate is optional and if not passed then the value of animateScroll from the settings - // object this jScrollPane was initialised with is used. - scrollToX: function(destX, animate) - { - scrollToX(destX, animate); - }, - // Scrolls the pane so that the specified co-ordinate within the content is at the top of the - // viewport. animate is optional and if not passed then the value of animateScroll from the settings - // object this jScrollPane was initialised with is used. - scrollToY: function(destY, animate) - { - scrollToY(destY, animate); - }, - // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then - // the value of animateScroll from the settings object this jScrollPane was initialised with is used. - scrollBy: function(deltaX, deltaY, animate) - { - jsp.scrollByX(deltaX, animate); - jsp.scrollByY(deltaY, animate); - }, - // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then - // the value of animateScroll from the settings object this jScrollPane was initialised with is used. - scrollByX: function(deltaX, animate) - { - var destX = contentPositionX() + deltaX, - percentScrolled = destX / (contentWidth - paneWidth); - positionDragX(percentScrolled * dragMaxX, animate); - }, - // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then - // the value of animateScroll from the settings object this jScrollPane was initialised with is used. - scrollByY: function(deltaY, animate) - { - var destY = contentPositionY() + deltaY, - percentScrolled = destY / (contentHeight - paneHeight); - positionDragY(percentScrolled * dragMaxY, animate); - }, - // This method is called when jScrollPane is trying to animate to a new position. You can override - // it if you want to provide advanced animation functionality. It is passed the following arguments: - // * ele - the element whose position is being animated - // * prop - the property that is being animated - // * value - the value it's being animated to - // * stepCallback - a function that you must execute each time you update the value of the property - // You can use the default implementation (below) as a starting point for your own implementation. - animate: function(ele, prop, value, stepCallback) - { - var params = {}; - params[prop] = value; - ele.animate( - params, - { - 'duration' : settings.animateDuration, - 'ease' : settings.animateEase, - 'queue' : false, - 'step' : stepCallback - } - ); - }, - // Returns the current x position of the viewport with regards to the content pane. - getContentPositionX: function() - { - return contentPositionX(); - }, - // Returns the current y position of the viewport with regards to the content pane. - getContentPositionY: function() - { - return contentPositionY(); - }, - // Returns whether or not this scrollpane has a horizontal scrollbar. - getIsScrollableH: function() - { - return isScrollableH; - }, - // Returns whether or not this scrollpane has a vertical scrollbar. - getIsScrollableV: function() - { - return isScrollableV; - }, - // Gets a reference to the content pane. It is important that you use this method if you want to - // edit the content of your jScrollPane as if you access the element directly then you may have some - // problems (as your original element has had additional elements for the scrollbars etc added into - // it). - getContentPane: function() - { - return pane; - }, - // Scrolls this jScrollPane down as far as it can currently scroll. If animate isn't passed then the - // animateScroll value from settings is used instead. - scrollToBottom: function(animate) - { - positionDragY(dragMaxY, animate); - }, - // Hijacks the links on the page which link to content inside the scrollpane. If you have changed - // the content of your page (e.g. via AJAX) and want to make sure any new anchor links to the - // contents of your scroll pane will work then call this function. - hijackInternalLinks: function() - { - hijackInternalLinks(); - } - } - ); - } - - // Pluginifying code... - - settings = $.extend({}, $.fn.jScrollPane.defaults, settings); - - var ret; - this.each( - function() - { - var elem = $(this), jspApi = elem.data('jsp'); - if (jspApi) { - jspApi.reinitialise(settings); - } else { - jspApi = new JScrollPane(elem, settings); - elem.data('jsp', jspApi); - } - ret = ret ? ret.add(elem) : elem; - } - ) - return ret; - }; - - $.fn.jScrollPane.defaults = { - 'showArrows' : false, - 'maintainPosition' : true, - 'autoReinitialise' : false, - 'autoReinitialiseDelay' : 500, - 'verticalDragMinHeight' : 0, - 'verticalDragMaxHeight' : 99999, - 'horizontalDragMinWidth' : 0, - 'horizontalDragMaxWidth' : 99999, - 'animateScroll' : false, - 'animateDuration' : 300, - 'animateEase' : 'linear', - 'hijackInternalLinks' : false, - 'verticalGutter' : 4, - 'horizontalGutter' : 4, - 'mouseWheelSpeed' : 10, - 'arrowButtonSpeed' : 10, - 'arrowRepeatFreq' : 100, - 'arrowScrollOnHover' : false, - 'verticalArrowPositions' : 'split', - 'horizontalArrowPositions' : 'split', - 'enableKeyboardNavigation' : true, - 'hideFocus' : false - }; - -})(jQuery,this); - diff --git a/libs/bower_components/jScrollPane/issues/11/native.html b/libs/bower_components/jScrollPane/issues/11/native.html deleted file mode 100644 index 2b72862b4b..0000000000 --- a/libs/bower_components/jScrollPane/issues/11/native.html +++ /dev/null @@ -1,42 +0,0 @@ - - - - - - - - - -latest news - - - - - - - - - -
-

news

-

After three years of toil, The new Tinyfish album, The Big Red Spark, - is finally finished, and to celebrate, you'll be able to join us at The Luminaire - in Kilburn for a very special gig to launch the album on an unsuspecting world.

-

Although by this point, some people may already have suspected.

-

Support will be provided by the excellent Dec Burke and his new band, - Destroy All Monsters

-

When: Friday, 10th September
- - Where: The Luminaire (click for map)
- How much: £10 in advance (£8 CRS members advance) or £12 on the door.
- Doors open at 7:30.

-

Tickets: www.linktoticket website.co.uk

-
- - - - diff --git a/libs/bower_components/jScrollPane/issues/12/after.html b/libs/bower_components/jScrollPane/issues/12/after.html deleted file mode 100644 index 039370c360..0000000000 --- a/libs/bower_components/jScrollPane/issues/12/after.html +++ /dev/null @@ -1,80 +0,0 @@ - - - - - - - -The History of Tinyfish - - - - - - - - - - -
-

The History of Tinyfish

-

It all began with a pair of broken arms and two dodgy eyes.

-

It’s 1978, the year that Jim Sanders and Simon Godfrey met at school in East Sheen (South London). Although each had been aware of the other since the age of five, the two would have been on nothing more than nodding acquaintance, save for two medical problems that forced them together and would eventually lead to the band we know today as Tinyfish.

- -

Bloody weaklings.

-

Jim had been diagnosed with a rare retinal disease which had a good chance of robbing him of his vision, and had recently undergone laser eye surgery. Simon more comedically had broken both arms after falling off a roof, leaving him with seriously weakened joints. As part of their convalescence from their respective surgeries, both boys were excused sports for six months.

-

While the rest of the kids kicked the living crap out of each other under the pretence of playing football or rugby, Jim and Simon sat on a low school wall watching the on-field carnage and eyeing one another warily. Initially Simon was the talkative one while Jim sat silently, but as soon as the subject matter turned to music, both began to find some common ground, and the conversation became a two way street.

-

Initially, Jim had been a Rock/New Wave fan who loved Thin Lizzy (above all others), but incongruously, also the Skids (who would later become Big Country) and the Rezillos (who wouldn’t). Simon on the other hand was a fan of ELO and The Sweet but both agreed that music, and in particular, rock bands, were the bee’s knees.

-

Around the same time , Simon had struck up a friendship with another boy at school called Paul Worwood, initially during school music lessons. The pair were both big fans of Dungeons and Dragons and would play the game constantly throughout their teenage years.

- -

Bloody geeks.

-

As the 70’s gave way to the 80’s and the three grew to be good friends, Jim drew Simon and Paul towards a new love; heavy metal. Over the next three years, the trio saw every metal band that played at their local venue (The Hammersmith Odeon). While the three saw the likes of Thin Lizzy, Saxon, MSG, Iron Maiden and The Scorpions, their listening tastes also encompassed bands such as Yes, Genesis, King Crimson and Magnum.

-

Jim had first played ‘Going For The One’ by Yes to Simon back in the 70's (Simon rather uncharitably dubbed it ‘f***ing Country & Western’. To be fair, Jim told Simon not to bother with Jethro Tull, as he thought they were arse... without actually having ever heard them. Twit.). Jim persevered however, and when he spun ‘A Farewell To Kings’ by Rush in an afternoon listening session, Simon was well and truly hooked. He now also likes Yes very much. Hah! Jim now also likes Jethro Tull. Hah! Hah!

- -

During their time at Richmond College (South West London), Jim and Simon met guitarist Nick Denville, and formed their first band, with Paul joining on bass soon after. Paul was the only person they knew who owned a car. They also thought he was a top bloke, and so without mentioning the car caveat, the three miscreants cajoled Paul into buying a bass guitar and an amplifier. They called themselves ‘Blackstone Edge’ and they were bloody rubbish. All they needed was a keyboard player to crown their musical ineptitude.

-

Simon’s younger brother Jem was 14 when he received his first keyboard (a Casio home synth which he put through a flanger pedal to make it sound cosmic). Jem was initially invited to rehearsals to hold the lyrics up for Jim to sing from while the rest of the band played. It soon became obvious to the guys that Jem's talents were wasted as a music stand and so he was invited into the band. This line up survived for a few months before Nick Denville left to live a happier and entirely more melodic life elsewhere.

-

Bloody kids.

-

The band continued, and Simon relentlessly poured prog music into Jem's head which was immediately absorbed by the young keyboard player. Less than six months later, Jem had learned all of Tony Banks’ keyboard solos from both Seconds Out and Three Sides Live along with Rick Wakeman's and Patrick Moraz's solos from Yesshows. With Jem's considerable technique, and the band hungry to write original music, the direction of the band was truely set towards progressive rock. The name Blackstone Edge was soon dropped in favour of ‘Freefall Warriors’ (after a story in a Doctor Who comic) which very quickly contracted simply to ‘Freefall’ and with the addition of vocalist Andrew Lovatt, the band began to rehearse in preparation for live gigs.

- -

During this time the band bumped into actor Tony Aitken who had worked during his less successful years as a supply teacher at Jim and Simon’s school in the 70’s. Tony was looking for musicians to back him in a covers band, and the guys duly offered their services (even though they then had no live experience whatsoever). The arrangement worked so well that they kept the band going for over a decade and it was there, working the pubs and clubs of southern England, that they learned the musical chops that would serve them so well in later years.

-

In parallel to their function band work, Freefall practice/writing sessions continued. As luck would have it, IQ rehearsed in the studio next door to them, and on the back of their first gig, attended by IQ’s then manager, they managed to land the support slot at IQ’s Christmas show at the Marquee Club in London. Gulp.

-

Thankfully, the band hit it off immediately with the crowd and soon managed to get a string of gigs with bands like Jadis, Ark, Galahad, Mentaur and Geoff Mann from Twelth Night. Freefall looked as though they were going to make a big impact with the prog community but after an ill-judged attempt to ‘go commercial’ in the early ‘90s, (Bloody managers!) Jim left the band and the remaining members recruited a very nice gentleman called John Boyes on guitar. However, the moment was lost and the band soon fell apart.

- -

Bloody idiots.

-

Jim and Jem briefly went on, to form Pop-proggers “Charlottes’ Web” before Jem gave up the scene to work for national radio (although Jem's involvement with prog would be re-ignited a decade later with the formation (with John Boyes) of the Prog supergroup Frost*).

-

Meanwhile, Simon and Paul formed an acoustic outfit called ‘Men Are Dead’ with keyboard player Col Alkins and lyricist/harmonica player Rob Ramsay. Simon had met Rob way back in the early 80’s at Richmond College, at the same time Freefall were making their first tentative steps in music. They became good friends and Rob was always involved at some level, either by helping out at gigs or writing the occasional lyric.

- -
-

Men Are Dead began to play gigs on London's open mic scene (where any artist can roll up and play a short set of between two and five songs) and the band proved to be extremely popular with both audience and fellow musos alike. Col left after their first album, but thankfully, Jim once again joined up with Simon and Paul as a second guitarist, along with Wayne Collier, an extraordinary drummer who played in almost every band in West London. What evolved was a prototype Tinyfish sound and much of the band’s current style comes from these early twin guitar shows.

-

The millennium came and went, and so did the name ‘Men Are Dead’. In came Simon’s alter ego ‘Simon Walsh’, a nom-de-guerre he still uses today when playing solo acoustic gigs. Whilst notching up appearances in the UK, Germany, France, Estonia and America, they recruited a third guitarist (Tim Eyles) and all looked rosy (if a little Lynyrd Skynyrd) in the garden. Behind the scenes however, things were not going well with the band. Frustration with the strict definitions of acoustic music imposed by many clubs and venues began to take their toll on both the music and musicians. Their material was becoming more complex and the songs started to push past the three minute mark, as the band's deep-seated prog influences once again made themselves felt.

- -

Finally in the late autumn of 2004, after much soul searching, Simon sent Jim an e-mail suggesting that maybe there was little more they could achieve as an acoustic unit and perhaps they should return to their progressive roots. Jim happily agreed and an invite was duly sent out to both Paul and Rob asking if they would be interested in joining, which thankfully they did.

-

Simon disbanded the acoustic band, with Tim Eyles joining the punk-pop band ‘The Random’ and the four remaining musicians assembled in Simon's loft and began writing and rehearsing. Within six weeks it was obvious that there were real possibilities in the music they were making, but the question as to how to record this new material was causing them concern. None of them could afford to go the professional route, so the decision was made to turn the loft into a studio, and try it themselves.

-

Robert had set up Lazy Gun Records several years previously, to promote both Men Are Dead and Simon Walsh, and suggested that this new band join the roster. This gave them complete artistic and financial control of their work.

-

Bloody tight bastards.

- -

Finally the subject of the name for the band reared its ugly head. There were thoughts that they could resurrect the name Freefall but that idea was soon discarded. This was a new band, and it deserved a new name (besides, someone else was now using ‘Freefall’ and they looked bigger and meaner than this band). It was Jim that quipped that they were just tiny fish compared to some of the huge prog bands still out there and within moments the name had stuck.

-

The problem remained that they were a man short for playing live shows, but in the studio, that base was covered by Simon who, happily, can play both drums and guitar in equal measure (although not at the same time). Meanwhile, the studio had taken shape and the band had found that familiar progressive chemistry once again. The smiles were back on everybody’s faces, and the band had a sound they could work to develop.

-

When the talk turned once more to live performances, Jim mentioned that he knew a drummer of many bands, the semi-Italian Leon Camfield, and after a few rehearsals (and many beers) together, Leon (for whom truely progressive music is a long held love (note King Crimson tattoo on arm)) enthusiastically joined to complete the Fab Five.

- -

So here we are in 2010. Tinyfish have gigged around the country, released both two albums, a mini-album, and a live album & DVD, and have arrived at a destination where they feel at home, and are proud of their journey to this place of better dreams.

-

Bloody pretentious tossers.

-
- - - diff --git a/libs/bower_components/jScrollPane/issues/12/after_reinit.html b/libs/bower_components/jScrollPane/issues/12/after_reinit.html deleted file mode 100644 index e61225778e..0000000000 --- a/libs/bower_components/jScrollPane/issues/12/after_reinit.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - -The History of Tinyfish - - - - - - - - - - -
-

The History of Tinyfish

-

It all began with a pair of broken arms and two dodgy eyes.

-

It’s 1978, the year that Jim Sanders and Simon Godfrey met at school in East Sheen (South London). Although each had been aware of the other since the age of five, the two would have been on nothing more than nodding acquaintance, save for two medical problems that forced them together and would eventually lead to the band we know today as Tinyfish.

- -

Bloody weaklings.

-

Jim had been diagnosed with a rare retinal disease which had a good chance of robbing him of his vision, and had recently undergone laser eye surgery. Simon more comedically had broken both arms after falling off a roof, leaving him with seriously weakened joints. As part of their convalescence from their respective surgeries, both boys were excused sports for six months.

-

While the rest of the kids kicked the living crap out of each other under the pretence of playing football or rugby, Jim and Simon sat on a low school wall watching the on-field carnage and eyeing one another warily. Initially Simon was the talkative one while Jim sat silently, but as soon as the subject matter turned to music, both began to find some common ground, and the conversation became a two way street.

-

Initially, Jim had been a Rock/New Wave fan who loved Thin Lizzy (above all others), but incongruously, also the Skids (who would later become Big Country) and the Rezillos (who wouldn’t). Simon on the other hand was a fan of ELO and The Sweet but both agreed that music, and in particular, rock bands, were the bee’s knees.

-

Around the same time , Simon had struck up a friendship with another boy at school called Paul Worwood, initially during school music lessons. The pair were both big fans of Dungeons and Dragons and would play the game constantly throughout their teenage years.

- -

Bloody geeks.

-

As the 70’s gave way to the 80’s and the three grew to be good friends, Jim drew Simon and Paul towards a new love; heavy metal. Over the next three years, the trio saw every metal band that played at their local venue (The Hammersmith Odeon). While the three saw the likes of Thin Lizzy, Saxon, MSG, Iron Maiden and The Scorpions, their listening tastes also encompassed bands such as Yes, Genesis, King Crimson and Magnum.

-

Jim had first played ‘Going For The One’ by Yes to Simon back in the 70's (Simon rather uncharitably dubbed it ‘f***ing Country & Western’. To be fair, Jim told Simon not to bother with Jethro Tull, as he thought they were arse... without actually having ever heard them. Twit.). Jim persevered however, and when he spun ‘A Farewell To Kings’ by Rush in an afternoon listening session, Simon was well and truly hooked. He now also likes Yes very much. Hah! Jim now also likes Jethro Tull. Hah! Hah!

- -

During their time at Richmond College (South West London), Jim and Simon met guitarist Nick Denville, and formed their first band, with Paul joining on bass soon after. Paul was the only person they knew who owned a car. They also thought he was a top bloke, and so without mentioning the car caveat, the three miscreants cajoled Paul into buying a bass guitar and an amplifier. They called themselves ‘Blackstone Edge’ and they were bloody rubbish. All they needed was a keyboard player to crown their musical ineptitude.

-

Simon’s younger brother Jem was 14 when he received his first keyboard (a Casio home synth which he put through a flanger pedal to make it sound cosmic). Jem was initially invited to rehearsals to hold the lyrics up for Jim to sing from while the rest of the band played. It soon became obvious to the guys that Jem's talents were wasted as a music stand and so he was invited into the band. This line up survived for a few months before Nick Denville left to live a happier and entirely more melodic life elsewhere.

-

Bloody kids.

-

The band continued, and Simon relentlessly poured prog music into Jem's head which was immediately absorbed by the young keyboard player. Less than six months later, Jem had learned all of Tony Banks’ keyboard solos from both Seconds Out and Three Sides Live along with Rick Wakeman's and Patrick Moraz's solos from Yesshows. With Jem's considerable technique, and the band hungry to write original music, the direction of the band was truely set towards progressive rock. The name Blackstone Edge was soon dropped in favour of ‘Freefall Warriors’ (after a story in a Doctor Who comic) which very quickly contracted simply to ‘Freefall’ and with the addition of vocalist Andrew Lovatt, the band began to rehearse in preparation for live gigs.

- -

During this time the band bumped into actor Tony Aitken who had worked during his less successful years as a supply teacher at Jim and Simon’s school in the 70’s. Tony was looking for musicians to back him in a covers band, and the guys duly offered their services (even though they then had no live experience whatsoever). The arrangement worked so well that they kept the band going for over a decade and it was there, working the pubs and clubs of southern England, that they learned the musical chops that would serve them so well in later years.

-

In parallel to their function band work, Freefall practice/writing sessions continued. As luck would have it, IQ rehearsed in the studio next door to them, and on the back of their first gig, attended by IQ’s then manager, they managed to land the support slot at IQ’s Christmas show at the Marquee Club in London. Gulp.

-

Thankfully, the band hit it off immediately with the crowd and soon managed to get a string of gigs with bands like Jadis, Ark, Galahad, Mentaur and Geoff Mann from Twelth Night. Freefall looked as though they were going to make a big impact with the prog community but after an ill-judged attempt to ‘go commercial’ in the early ‘90s, (Bloody managers!) Jim left the band and the remaining members recruited a very nice gentleman called John Boyes on guitar. However, the moment was lost and the band soon fell apart.

- -

Bloody idiots.

-

Jim and Jem briefly went on, to form Pop-proggers “Charlottes’ Web” before Jem gave up the scene to work for national radio (although Jem's involvement with prog would be re-ignited a decade later with the formation (with John Boyes) of the Prog supergroup Frost*).

-

Meanwhile, Simon and Paul formed an acoustic outfit called ‘Men Are Dead’ with keyboard player Col Alkins and lyricist/harmonica player Rob Ramsay. Simon had met Rob way back in the early 80’s at Richmond College, at the same time Freefall were making their first tentative steps in music. They became good friends and Rob was always involved at some level, either by helping out at gigs or writing the occasional lyric.

- -
-

Men Are Dead began to play gigs on London's open mic scene (where any artist can roll up and play a short set of between two and five songs) and the band proved to be extremely popular with both audience and fellow musos alike. Col left after their first album, but thankfully, Jim once again joined up with Simon and Paul as a second guitarist, along with Wayne Collier, an extraordinary drummer who played in almost every band in West London. What evolved was a prototype Tinyfish sound and much of the band’s current style comes from these early twin guitar shows.

-

The millennium came and went, and so did the name ‘Men Are Dead’. In came Simon’s alter ego ‘Simon Walsh’, a nom-de-guerre he still uses today when playing solo acoustic gigs. Whilst notching up appearances in the UK, Germany, France, Estonia and America, they recruited a third guitarist (Tim Eyles) and all looked rosy (if a little Lynyrd Skynyrd) in the garden. Behind the scenes however, things were not going well with the band. Frustration with the strict definitions of acoustic music imposed by many clubs and venues began to take their toll on both the music and musicians. Their material was becoming more complex and the songs started to push past the three minute mark, as the band's deep-seated prog influences once again made themselves felt.

- -

Finally in the late autumn of 2004, after much soul searching, Simon sent Jim an e-mail suggesting that maybe there was little more they could achieve as an acoustic unit and perhaps they should return to their progressive roots. Jim happily agreed and an invite was duly sent out to both Paul and Rob asking if they would be interested in joining, which thankfully they did.

-

Simon disbanded the acoustic band, with Tim Eyles joining the punk-pop band ‘The Random’ and the four remaining musicians assembled in Simon's loft and began writing and rehearsing. Within six weeks it was obvious that there were real possibilities in the music they were making, but the question as to how to record this new material was causing them concern. None of them could afford to go the professional route, so the decision was made to turn the loft into a studio, and try it themselves.

-

Robert had set up Lazy Gun Records several years previously, to promote both Men Are Dead and Simon Walsh, and suggested that this new band join the roster. This gave them complete artistic and financial control of their work.

-

Bloody tight bastards.

- -

Finally the subject of the name for the band reared its ugly head. There were thoughts that they could resurrect the name Freefall but that idea was soon discarded. This was a new band, and it deserved a new name (besides, someone else was now using ‘Freefall’ and they looked bigger and meaner than this band). It was Jim that quipped that they were just tiny fish compared to some of the huge prog bands still out there and within moments the name had stuck.

-

The problem remained that they were a man short for playing live shows, but in the studio, that base was covered by Simon who, happily, can play both drums and guitar in equal measure (although not at the same time). Meanwhile, the studio had taken shape and the band had found that familiar progressive chemistry once again. The smiles were back on everybody’s faces, and the band had a sound they could work to develop.

-

When the talk turned once more to live performances, Jim mentioned that he knew a drummer of many bands, the semi-Italian Leon Camfield, and after a few rehearsals (and many beers) together, Leon (for whom truely progressive music is a long held love (note King Crimson tattoo on arm)) enthusiastically joined to complete the Fab Five.

- -

So here we are in 2010. Tinyfish have gigged around the country, released both two albums, a mini-album, and a live album & DVD, and have arrived at a destination where they feel at home, and are proud of their journey to this place of better dreams.

-

Bloody pretentious tossers.

-
- - - diff --git a/libs/bower_components/jScrollPane/issues/12/before.html b/libs/bower_components/jScrollPane/issues/12/before.html deleted file mode 100644 index ee7402dbaa..0000000000 --- a/libs/bower_components/jScrollPane/issues/12/before.html +++ /dev/null @@ -1,72 +0,0 @@ - - - - - - - -The History of Tinyfish - - - - - - - - - - -
-

The History of Tinyfish

-

It all began with a pair of broken arms and two dodgy eyes.

-

It’s 1978, the year that Jim Sanders and Simon Godfrey met at school in East Sheen (South London). Although each had been aware of the other since the age of five, the two would have been on nothing more than nodding acquaintance, save for two medical problems that forced them together and would eventually lead to the band we know today as Tinyfish.

- -

Bloody weaklings.

-

Jim had been diagnosed with a rare retinal disease which had a good chance of robbing him of his vision, and had recently undergone laser eye surgery. Simon more comedically had broken both arms after falling off a roof, leaving him with seriously weakened joints. As part of their convalescence from their respective surgeries, both boys were excused sports for six months.

-

While the rest of the kids kicked the living crap out of each other under the pretence of playing football or rugby, Jim and Simon sat on a low school wall watching the on-field carnage and eyeing one another warily. Initially Simon was the talkative one while Jim sat silently, but as soon as the subject matter turned to music, both began to find some common ground, and the conversation became a two way street.

-

Initially, Jim had been a Rock/New Wave fan who loved Thin Lizzy (above all others), but incongruously, also the Skids (who would later become Big Country) and the Rezillos (who wouldn’t). Simon on the other hand was a fan of ELO and The Sweet but both agreed that music, and in particular, rock bands, were the bee’s knees.

-

Around the same time , Simon had struck up a friendship with another boy at school called Paul Worwood, initially during school music lessons. The pair were both big fans of Dungeons and Dragons and would play the game constantly throughout their teenage years.

- -

Bloody geeks.

-

As the 70’s gave way to the 80’s and the three grew to be good friends, Jim drew Simon and Paul towards a new love; heavy metal. Over the next three years, the trio saw every metal band that played at their local venue (The Hammersmith Odeon). While the three saw the likes of Thin Lizzy, Saxon, MSG, Iron Maiden and The Scorpions, their listening tastes also encompassed bands such as Yes, Genesis, King Crimson and Magnum.

-

Jim had first played ‘Going For The One’ by Yes to Simon back in the 70's (Simon rather uncharitably dubbed it ‘f***ing Country & Western’. To be fair, Jim told Simon not to bother with Jethro Tull, as he thought they were arse... without actually having ever heard them. Twit.). Jim persevered however, and when he spun ‘A Farewell To Kings’ by Rush in an afternoon listening session, Simon was well and truly hooked. He now also likes Yes very much. Hah! Jim now also likes Jethro Tull. Hah! Hah!

- -

During their time at Richmond College (South West London), Jim and Simon met guitarist Nick Denville, and formed their first band, with Paul joining on bass soon after. Paul was the only person they knew who owned a car. They also thought he was a top bloke, and so without mentioning the car caveat, the three miscreants cajoled Paul into buying a bass guitar and an amplifier. They called themselves ‘Blackstone Edge’ and they were bloody rubbish. All they needed was a keyboard player to crown their musical ineptitude.

-

Simon’s younger brother Jem was 14 when he received his first keyboard (a Casio home synth which he put through a flanger pedal to make it sound cosmic). Jem was initially invited to rehearsals to hold the lyrics up for Jim to sing from while the rest of the band played. It soon became obvious to the guys that Jem's talents were wasted as a music stand and so he was invited into the band. This line up survived for a few months before Nick Denville left to live a happier and entirely more melodic life elsewhere.

-

Bloody kids.

-

The band continued, and Simon relentlessly poured prog music into Jem's head which was immediately absorbed by the young keyboard player. Less than six months later, Jem had learned all of Tony Banks’ keyboard solos from both Seconds Out and Three Sides Live along with Rick Wakeman's and Patrick Moraz's solos from Yesshows. With Jem's considerable technique, and the band hungry to write original music, the direction of the band was truely set towards progressive rock. The name Blackstone Edge was soon dropped in favour of ‘Freefall Warriors’ (after a story in a Doctor Who comic) which very quickly contracted simply to ‘Freefall’ and with the addition of vocalist Andrew Lovatt, the band began to rehearse in preparation for live gigs.

- -

During this time the band bumped into actor Tony Aitken who had worked during his less successful years as a supply teacher at Jim and Simon’s school in the 70’s. Tony was looking for musicians to back him in a covers band, and the guys duly offered their services (even though they then had no live experience whatsoever). The arrangement worked so well that they kept the band going for over a decade and it was there, working the pubs and clubs of southern England, that they learned the musical chops that would serve them so well in later years.

-

In parallel to their function band work, Freefall practice/writing sessions continued. As luck would have it, IQ rehearsed in the studio next door to them, and on the back of their first gig, attended by IQ’s then manager, they managed to land the support slot at IQ’s Christmas show at the Marquee Club in London. Gulp.

-

Thankfully, the band hit it off immediately with the crowd and soon managed to get a string of gigs with bands like Jadis, Ark, Galahad, Mentaur and Geoff Mann from Twelth Night. Freefall looked as though they were going to make a big impact with the prog community but after an ill-judged attempt to ‘go commercial’ in the early ‘90s, (Bloody managers!) Jim left the band and the remaining members recruited a very nice gentleman called John Boyes on guitar. However, the moment was lost and the band soon fell apart.

- -

Bloody idiots.

-

Jim and Jem briefly went on, to form Pop-proggers “Charlottes’ Web” before Jem gave up the scene to work for national radio (although Jem's involvement with prog would be re-ignited a decade later with the formation (with John Boyes) of the Prog supergroup Frost*).

-

Meanwhile, Simon and Paul formed an acoustic outfit called ‘Men Are Dead’ with keyboard player Col Alkins and lyricist/harmonica player Rob Ramsay. Simon had met Rob way back in the early 80’s at Richmond College, at the same time Freefall were making their first tentative steps in music. They became good friends and Rob was always involved at some level, either by helping out at gigs or writing the occasional lyric.

- -
-

Men Are Dead began to play gigs on London's open mic scene (where any artist can roll up and play a short set of between two and five songs) and the band proved to be extremely popular with both audience and fellow musos alike. Col left after their first album, but thankfully, Jim once again joined up with Simon and Paul as a second guitarist, along with Wayne Collier, an extraordinary drummer who played in almost every band in West London. What evolved was a prototype Tinyfish sound and much of the band’s current style comes from these early twin guitar shows.

-

The millennium came and went, and so did the name ‘Men Are Dead’. In came Simon’s alter ego ‘Simon Walsh’, a nom-de-guerre he still uses today when playing solo acoustic gigs. Whilst notching up appearances in the UK, Germany, France, Estonia and America, they recruited a third guitarist (Tim Eyles) and all looked rosy (if a little Lynyrd Skynyrd) in the garden. Behind the scenes however, things were not going well with the band. Frustration with the strict definitions of acoustic music imposed by many clubs and venues began to take their toll on both the music and musicians. Their material was becoming more complex and the songs started to push past the three minute mark, as the band's deep-seated prog influences once again made themselves felt.

- -

Finally in the late autumn of 2004, after much soul searching, Simon sent Jim an e-mail suggesting that maybe there was little more they could achieve as an acoustic unit and perhaps they should return to their progressive roots. Jim happily agreed and an invite was duly sent out to both Paul and Rob asking if they would be interested in joining, which thankfully they did.

-

Simon disbanded the acoustic band, with Tim Eyles joining the punk-pop band ‘The Random’ and the four remaining musicians assembled in Simon's loft and began writing and rehearsing. Within six weeks it was obvious that there were real possibilities in the music they were making, but the question as to how to record this new material was causing them concern. None of them could afford to go the professional route, so the decision was made to turn the loft into a studio, and try it themselves.

-

Robert had set up Lazy Gun Records several years previously, to promote both Men Are Dead and Simon Walsh, and suggested that this new band join the roster. This gave them complete artistic and financial control of their work.

-

Bloody tight bastards.

- -

Finally the subject of the name for the band reared its ugly head. There were thoughts that they could resurrect the name Freefall but that idea was soon discarded. This was a new band, and it deserved a new name (besides, someone else was now using ‘Freefall’ and they looked bigger and meaner than this band). It was Jim that quipped that they were just tiny fish compared to some of the huge prog bands still out there and within moments the name had stuck.

-

The problem remained that they were a man short for playing live shows, but in the studio, that base was covered by Simon who, happily, can play both drums and guitar in equal measure (although not at the same time). Meanwhile, the studio had taken shape and the band had found that familiar progressive chemistry once again. The smiles were back on everybody’s faces, and the band had a sound they could work to develop.

-

When the talk turned once more to live performances, Jim mentioned that he knew a drummer of many bands, the semi-Italian Leon Camfield, and after a few rehearsals (and many beers) together, Leon (for whom truely progressive music is a long held love (note King Crimson tattoo on arm)) enthusiastically joined to complete the Fab Five.

- -

So here we are in 2010. Tinyfish have gigged around the country, released both two albums, a mini-album, and a live album & DVD, and have arrived at a destination where they feel at home, and are proud of their journey to this place of better dreams.

-

Bloody pretentious tossers.

-
- - - diff --git a/libs/bower_components/jScrollPane/issues/12/before_reinit.html b/libs/bower_components/jScrollPane/issues/12/before_reinit.html deleted file mode 100644 index 458e64530d..0000000000 --- a/libs/bower_components/jScrollPane/issues/12/before_reinit.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - - - -The History of Tinyfish - - - - - - - - - - -
-

The History of Tinyfish

-

It all began with a pair of broken arms and two dodgy eyes.

-

It’s 1978, the year that Jim Sanders and Simon Godfrey met at school in East Sheen (South London). Although each had been aware of the other since the age of five, the two would have been on nothing more than nodding acquaintance, save for two medical problems that forced them together and would eventually lead to the band we know today as Tinyfish.

- -

Bloody weaklings.

-

Jim had been diagnosed with a rare retinal disease which had a good chance of robbing him of his vision, and had recently undergone laser eye surgery. Simon more comedically had broken both arms after falling off a roof, leaving him with seriously weakened joints. As part of their convalescence from their respective surgeries, both boys were excused sports for six months.

-

While the rest of the kids kicked the living crap out of each other under the pretence of playing football or rugby, Jim and Simon sat on a low school wall watching the on-field carnage and eyeing one another warily. Initially Simon was the talkative one while Jim sat silently, but as soon as the subject matter turned to music, both began to find some common ground, and the conversation became a two way street.

-

Initially, Jim had been a Rock/New Wave fan who loved Thin Lizzy (above all others), but incongruously, also the Skids (who would later become Big Country) and the Rezillos (who wouldn’t). Simon on the other hand was a fan of ELO and The Sweet but both agreed that music, and in particular, rock bands, were the bee’s knees.

-

Around the same time , Simon had struck up a friendship with another boy at school called Paul Worwood, initially during school music lessons. The pair were both big fans of Dungeons and Dragons and would play the game constantly throughout their teenage years.

- -

Bloody geeks.

-

As the 70’s gave way to the 80’s and the three grew to be good friends, Jim drew Simon and Paul towards a new love; heavy metal. Over the next three years, the trio saw every metal band that played at their local venue (The Hammersmith Odeon). While the three saw the likes of Thin Lizzy, Saxon, MSG, Iron Maiden and The Scorpions, their listening tastes also encompassed bands such as Yes, Genesis, King Crimson and Magnum.

-

Jim had first played ‘Going For The One’ by Yes to Simon back in the 70's (Simon rather uncharitably dubbed it ‘f***ing Country & Western’. To be fair, Jim told Simon not to bother with Jethro Tull, as he thought they were arse... without actually having ever heard them. Twit.). Jim persevered however, and when he spun ‘A Farewell To Kings’ by Rush in an afternoon listening session, Simon was well and truly hooked. He now also likes Yes very much. Hah! Jim now also likes Jethro Tull. Hah! Hah!

- -

During their time at Richmond College (South West London), Jim and Simon met guitarist Nick Denville, and formed their first band, with Paul joining on bass soon after. Paul was the only person they knew who owned a car. They also thought he was a top bloke, and so without mentioning the car caveat, the three miscreants cajoled Paul into buying a bass guitar and an amplifier. They called themselves ‘Blackstone Edge’ and they were bloody rubbish. All they needed was a keyboard player to crown their musical ineptitude.

-

Simon’s younger brother Jem was 14 when he received his first keyboard (a Casio home synth which he put through a flanger pedal to make it sound cosmic). Jem was initially invited to rehearsals to hold the lyrics up for Jim to sing from while the rest of the band played. It soon became obvious to the guys that Jem's talents were wasted as a music stand and so he was invited into the band. This line up survived for a few months before Nick Denville left to live a happier and entirely more melodic life elsewhere.

-

Bloody kids.

-

The band continued, and Simon relentlessly poured prog music into Jem's head which was immediately absorbed by the young keyboard player. Less than six months later, Jem had learned all of Tony Banks’ keyboard solos from both Seconds Out and Three Sides Live along with Rick Wakeman's and Patrick Moraz's solos from Yesshows. With Jem's considerable technique, and the band hungry to write original music, the direction of the band was truely set towards progressive rock. The name Blackstone Edge was soon dropped in favour of ‘Freefall Warriors’ (after a story in a Doctor Who comic) which very quickly contracted simply to ‘Freefall’ and with the addition of vocalist Andrew Lovatt, the band began to rehearse in preparation for live gigs.

- -

During this time the band bumped into actor Tony Aitken who had worked during his less successful years as a supply teacher at Jim and Simon’s school in the 70’s. Tony was looking for musicians to back him in a covers band, and the guys duly offered their services (even though they then had no live experience whatsoever). The arrangement worked so well that they kept the band going for over a decade and it was there, working the pubs and clubs of southern England, that they learned the musical chops that would serve them so well in later years.

-

In parallel to their function band work, Freefall practice/writing sessions continued. As luck would have it, IQ rehearsed in the studio next door to them, and on the back of their first gig, attended by IQ’s then manager, they managed to land the support slot at IQ’s Christmas show at the Marquee Club in London. Gulp.

-

Thankfully, the band hit it off immediately with the crowd and soon managed to get a string of gigs with bands like Jadis, Ark, Galahad, Mentaur and Geoff Mann from Twelth Night. Freefall looked as though they were going to make a big impact with the prog community but after an ill-judged attempt to ‘go commercial’ in the early ‘90s, (Bloody managers!) Jim left the band and the remaining members recruited a very nice gentleman called John Boyes on guitar. However, the moment was lost and the band soon fell apart.

- -

Bloody idiots.

-

Jim and Jem briefly went on, to form Pop-proggers “Charlottes’ Web” before Jem gave up the scene to work for national radio (although Jem's involvement with prog would be re-ignited a decade later with the formation (with John Boyes) of the Prog supergroup Frost*).

-

Meanwhile, Simon and Paul formed an acoustic outfit called ‘Men Are Dead’ with keyboard player Col Alkins and lyricist/harmonica player Rob Ramsay. Simon had met Rob way back in the early 80’s at Richmond College, at the same time Freefall were making their first tentative steps in music. They became good friends and Rob was always involved at some level, either by helping out at gigs or writing the occasional lyric.

- -
-

Men Are Dead began to play gigs on London's open mic scene (where any artist can roll up and play a short set of between two and five songs) and the band proved to be extremely popular with both audience and fellow musos alike. Col left after their first album, but thankfully, Jim once again joined up with Simon and Paul as a second guitarist, along with Wayne Collier, an extraordinary drummer who played in almost every band in West London. What evolved was a prototype Tinyfish sound and much of the band’s current style comes from these early twin guitar shows.

-

The millennium came and went, and so did the name ‘Men Are Dead’. In came Simon’s alter ego ‘Simon Walsh’, a nom-de-guerre he still uses today when playing solo acoustic gigs. Whilst notching up appearances in the UK, Germany, France, Estonia and America, they recruited a third guitarist (Tim Eyles) and all looked rosy (if a little Lynyrd Skynyrd) in the garden. Behind the scenes however, things were not going well with the band. Frustration with the strict definitions of acoustic music imposed by many clubs and venues began to take their toll on both the music and musicians. Their material was becoming more complex and the songs started to push past the three minute mark, as the band's deep-seated prog influences once again made themselves felt.

- -

Finally in the late autumn of 2004, after much soul searching, Simon sent Jim an e-mail suggesting that maybe there was little more they could achieve as an acoustic unit and perhaps they should return to their progressive roots. Jim happily agreed and an invite was duly sent out to both Paul and Rob asking if they would be interested in joining, which thankfully they did.

-

Simon disbanded the acoustic band, with Tim Eyles joining the punk-pop band ‘The Random’ and the four remaining musicians assembled in Simon's loft and began writing and rehearsing. Within six weeks it was obvious that there were real possibilities in the music they were making, but the question as to how to record this new material was causing them concern. None of them could afford to go the professional route, so the decision was made to turn the loft into a studio, and try it themselves.

-

Robert had set up Lazy Gun Records several years previously, to promote both Men Are Dead and Simon Walsh, and suggested that this new band join the roster. This gave them complete artistic and financial control of their work.

-

Bloody tight bastards.

- -

Finally the subject of the name for the band reared its ugly head. There were thoughts that they could resurrect the name Freefall but that idea was soon discarded. This was a new band, and it deserved a new name (besides, someone else was now using ‘Freefall’ and they looked bigger and meaner than this band). It was Jim that quipped that they were just tiny fish compared to some of the huge prog bands still out there and within moments the name had stuck.

-

The problem remained that they were a man short for playing live shows, but in the studio, that base was covered by Simon who, happily, can play both drums and guitar in equal measure (although not at the same time). Meanwhile, the studio had taken shape and the band had found that familiar progressive chemistry once again. The smiles were back on everybody’s faces, and the band had a sound they could work to develop.

-

When the talk turned once more to live performances, Jim mentioned that he knew a drummer of many bands, the semi-Italian Leon Camfield, and after a few rehearsals (and many beers) together, Leon (for whom truely progressive music is a long held love (note King Crimson tattoo on arm)) enthusiastically joined to complete the Fab Five.

- -

So here we are in 2010. Tinyfish have gigged around the country, released both two albums, a mini-album, and a live album & DVD, and have arrived at a destination where they feel at home, and are proud of their journey to this place of better dreams.

-

Bloody pretentious tossers.

-
- - - diff --git a/libs/bower_components/jScrollPane/issues/12/brs_main.css b/libs/bower_components/jScrollPane/issues/12/brs_main.css deleted file mode 100644 index d4bf825511..0000000000 --- a/libs/bower_components/jScrollPane/issues/12/brs_main.css +++ /dev/null @@ -1,301 +0,0 @@ -@charset "utf-8"; -/* CSS Document */ -@font-face { - font-family: 'HelveticaNeueThin'; - src: url('helveticaneue-thin-webfont.eot'); - src: local(''), url('helveticaneue-thin-webfont.woff') format('woff'), url('helveticaneue-thin-webfont.ttf') format('truetype'), url('helveticaneue-thin-webfont.svg#webfont2SG3yTkB') format('svg'); - font-weight: normal; - font-style: normal; - font-variant: normal; -} - -body { - font-family: 'HelveticaNeueThin',Helvetica,Arial,sans-serif; - font-weight: normal; - font-style: normal; - line-height: normal; - font-size-adjust: 0.51; - margin: 0px; - color: #fff; - background-color: #000; - overflow:hidden; -} - -P, A { - font-size: 1em; - line-height: 1.2em; -} - -P { - text-align: justify; - margin-bottom: 1.0em; -} - -a:active {color:#e0262f; text-decoration: none;} /* selected link */ -a:visited {color:#c62128; text-decoration: none;} /* visited link */ -a:link {color:#d2232a; text-decoration: none;} /* unvisited link */ -a:hover {color:#df262e; text-decoration: underline;} /* mouse over link */ - -LI LI, LI LI A, TD, TD P, BLOCKQUOTE P { - font-size: 1em; - line-height: 1.2em; -} - -TABLE { - border: none; -} - -TD { - vertical-align: top; - padding: 0px; -} - -A { - outline: none; -} - -A IMG { - border: none; -} - -object { outline:none; } - -.red { - color: #d2232a; -} - -STRONG { - color: #d2232a; - font-weight: bold; -} - -h1,h2,h3,h4,h5 { - color: #d2232a; -} - -h1 { - font-size: 1.6em; - font-weight: normal; - font-style: normal; - margin-top: 0.5em; - margin-bottom: 0.5em; -} - -h2 { - font-size: 1.3em; - font-weight: normal; - font-style: italic; - margin-top: 0.8em; - margin-bottom: 0px; -} - -h5 { - font-size: 0.8em; - margin: 0.5em 0px 0px 0px; -} - -hr { - color: #ff0000; -} - -/* ----------------- begin supersize --------------------- */ - -#loading { - position: absolute; - top: 49.5%; - left: 49.5%; - z-index: 5; - width: 24px; - height: 24px; - text-indent: -999em; - background-image: url('../__imgs/furn/loading.gif'); -} - -#supersize { - position:fixed; -} - -#supersize img, #supersize a { - height:100%; - width:100%; - position:absolute; - z-index: 0; -} - -#supersize img { - image-rendering: optimizeQuality; /* Firefox 3.6+; default behavior is identical, no need to specify */ - -ms-interpolation-mode: bicubic; /* Internet Explorer 7.0; default in IE8+ */ -} - -#supersize .prevslide, #supersize .prevslide img { - z-index: 1; -} - -#supersize .activeslide, #supersize .activeslide img { - z-index: 2; -} - -/* ------------------ end supersize ---------------------- */ - -/* ------------------- begin header ---------------------- */ - -#header { - position: absolute; - top: 15px; - width: 100%; - margin: 0px auto; - z-index: 4; - text-align: center; -} - -#header p { - text-align: center; - margin-top: 0.5em; - } - -/* -------------------- end header ----------------------- */ - -/* ------------------- begin content --------------------- */ - -#content { - z-index: 3; - background-color: #000; - background-color: rgba(0,0,0,0.9); - position: absolute; - left: 0px; - bottom: 17%; - height: 62%; - width: 45%; - border: 1px solid #555; - border-left: 0px; - padding: 0px; - padding-left: 30px; - padding-right: 20px; - overflow: auto; -} - -.frontpage #content { - visibility: hidden; -} - -.gallerypage #content { - border: none; - width: 100%; - height: 33em; - bottom: 15%; - padding: 0px; - margin: 0px; -} - -.gallerypage #content p { - text-align: center; -} - -.videopage #content { - border: none; - width: 100%; - height: 65%; - bottom: 15%; - padding: 0px; - margin: 0px; -} - -.videopage #content p { - text-align: center; -} - - -/* -------------------- end content ---------------------- */ - -/* ----------------- begin navigation -------------------- */ - -#navigate { - position: absolute; - height: 4em; - width: 100%; - padding: 0px; - margin: 0px auto; - bottom: 5%; - z-index: 3; - background-color: #000; - background-color: rgba(0,0,0,0.9); - border: 1px solid #555; - border-left: 0px; - border-right: 0px; -} - -#nav, #nav ul { - margin: 0px; - padding: 0px; - list-style-type: none; - list-style-position: outside; - position: relative; - line-height: 1.6em; -} - -#nav { - padding: 0.4em; -} - -#nav a { - display: block; - height: 1.6em; - padding: 0px 10px; - text-decoration:none; - line-height: 1.6em; - background-color: #000; - background-color: rgba(0,0,0,0.9); /* bug in Opera!!! */ -} - -#nav a:link, #nav a:active, #nav a:visited { - color: #fff; -} - -#nav a:hover { - color: #d2232a; -} - -#nav li { - float: left; - font-size: 1em; - line-height: 1.6em; -} - -#nav ul { - position:absolute; - display: none; -} - -#nav ul li a { - float: left; - font-size: 1em; - line-height: 1.6em; -} - -#nav li:hover ul ul, #nav li:hover ul ul ul, #nav li:hover ul ul ul ul { - display: none; -} - -#nav li:hover ul, #nav li li:hover ul, #nav li li li:hover ul, #nav li li li li:hover ul { - display: block; - height: 1.6em; -} - -/* ------------------ end navigation --------------------- */ - -/* ------------------ begin viewcart --------------------- */ - -#viewcart { - z-index: 4; - background-color: #000; - background-color: rgba(0,0,0,0.9); - position: absolute; - right: 10px; - bottom: 5.5%; - height: 51px; - width: 130px; - padding: 0px; - overflow: hidden; -} - -/* ------------------- end viewcart ---------------------- */ diff --git a/libs/bower_components/jScrollPane/issues/12/index.html b/libs/bower_components/jScrollPane/issues/12/index.html deleted file mode 100644 index 9a6f32c8e7..0000000000 --- a/libs/bower_components/jScrollPane/issues/12/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - jScrollPane - issue 12 - - - - - - - - - - - -
-

jScrollPane - issue 12

-

- This page demonstrates the bug described in - issue 12 as reported (with nice striped down test cases) by - TinyFish. -

- -
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/issues/12/jquery.mousewheel.js b/libs/bower_components/jScrollPane/issues/12/jquery.mousewheel.js deleted file mode 100644 index 27ed2f102f..0000000000 --- a/libs/bower_components/jScrollPane/issues/12/jquery.mousewheel.js +++ /dev/null @@ -1,79 +0,0 @@ -/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net) - * Licensed under the MIT License (LICENSE.txt). - * - * Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers. - * Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix. - * Thanks to: Seamus Leahy for adding deltaX and deltaY - * - * Version: 3.0.3 - * - * Requires: 1.2.2+ - */ - -(function($) { - -var types = ['DOMMouseScroll', 'mousewheel']; - -$.event.special.mousewheel = { - setup: function() { - if ( this.addEventListener ) { - for ( var i=types.length; i; ) { - this.addEventListener( types[--i], handler, false ); - } - } else { - this.onmousewheel = handler; - } - }, - - teardown: function() { - if ( this.removeEventListener ) { - for ( var i=types.length; i; ) { - this.removeEventListener( types[--i], handler, false ); - } - } else { - this.onmousewheel = null; - } - } -}; - -$.fn.extend({ - mousewheel: function(fn) { - return fn ? this.bind("mousewheel", fn) : this.trigger("mousewheel"); - }, - - unmousewheel: function(fn) { - return this.unbind("mousewheel", fn); - } -}); - - -function handler(event) { - var orgEvent = event, args = [].slice.call( arguments, 1 ), delta = 0, returnValue = true, deltaX = 0, deltaY = 0; - - event = $.event.fix(event || window.event); - event.type = "mousewheel"; - - // Old school scrollwheel delta - if ( event.wheelDelta ) { delta = event.wheelDelta/120; } - if ( event.detail ) { delta = -event.detail/3; } - - // New school multidimensional scroll (touchpads) deltas - deltaY = delta; - - // Gecko - if ( orgEvent.axis !== undefined && orgEvent.axis === orgEvent.HORIZONTAL_AXIS ) { - deltaY = 0; - deltaX = -1*delta; - } - - // Webkit - if ( orgEvent.wheelDeltaY !== undefined ) { deltaY = orgEvent.wheelDeltaY/120; } - if ( orgEvent.wheelDeltaX !== undefined ) { deltaX = -1*orgEvent.wheelDeltaX/120; } - - // Add event and delta to the front of the arguments - args.unshift(event, delta, deltaX, deltaY); - - return $.event.handle.apply(this, args); -} - -})(jQuery); \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/issues/12/jscrollpane-2b3.css b/libs/bower_components/jScrollPane/issues/12/jscrollpane-2b3.css deleted file mode 100644 index 4b91ece526..0000000000 --- a/libs/bower_components/jScrollPane/issues/12/jscrollpane-2b3.css +++ /dev/null @@ -1,143 +0,0 @@ -/* - * CSS Styles that are needed by jScrollPane for it to operate correctly. - * - * Include this stylesheet in your site or copy and paste the styles below into your stylesheet - jScrollPane - * may not operate correctly without them. - */ - -.jspContainer -{ - overflow: hidden; - position: relative; -} - -.jspPane -{ - position: absolute; -} - -.jspVerticalBar -{ - position: absolute; - top: 0; - right: 0; - width: 16px; - height: 100%; - background: red; -} - -.jspHorizontalBar -{ - position: absolute; - bottom: 0; - left: 0; - width: 100%; - height: 16px; - background: red; -} - -.jspVerticalBar *, -.jspHorizontalBar * -{ - margin: 0; - padding: 0; -} - -.jspCap -{ - display: none; -} - -.jspHorizontalBar .jspCap -{ - float: left; -} - -.jspTrack -{ - background: #000 url(../__imgs/furn/track.gif) repeat-y center; - position: relative; -} - -.jspDrag -{ - background: #666; - border: solid #aaa 2px; - position: relative; - top: 0; - left: 0; - cursor: pointer; -} - -.jspHorizontalBar .jspTrack, -.jspHorizontalBar .jspDrag -{ - float: left; - height: 100%; -} - -.jspArrow -{ - background-color: rgba(0,0,0,0.9); - text-indent: -20000px; - display: block; - cursor: pointer; -} - -.jspArrowUp -{ - background-image: url("../__imgs/furn/arrow_up.gif"); -} - -.jspArrowDown -{ - background-image: url("../__imgs/furn/arrow_down.gif"); -} - -.jspArrow.jspDisabled -{ - cursor: default; - background: #80808d; -} - -.jspArrowUp.jspDisabled -{ - cursor: default; - background-image: url("../__imgs/furn/arrow_up.gif"); -} - -.jspArrowDown.jspDisabled -{ - cursor: default; - background-image: url("../__imgs/furn/arrow_down.gif"); -} - -.jspVerticalBar .jspArrow -{ - height: 16px; -} - -.jspHorizontalBar .jspArrow -{ - width: 16px; - float: left; - height: 100%; -} - -.jspVerticalBar .jspArrow:focus -{ - outline: none; -} - -.jspCorner -{ - background: #eeeef4; - float: left; - height: 100%; -} - -/* Yuk! CSS Hack for IE6 3 pixel bug :( */ -* html .jspCorner -{ - margin: 0 -3px 0 0; -} \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/issues/12/jscrollpane-2b3.js b/libs/bower_components/jScrollPane/issues/12/jscrollpane-2b3.js deleted file mode 100644 index b87f97e107..0000000000 --- a/libs/bower_components/jScrollPane/issues/12/jscrollpane-2b3.js +++ /dev/null @@ -1,1063 +0,0 @@ -/*! - * jScrollPane - v2.0.0beta3 - 2010-08-27 - * http://jscrollpane.kelvinluck.com/ - * - * Copyright (c) 2010 Kelvin Luck - * Dual licensed under the MIT or GPL licenses. - */ - -// Script: jScrollPane - cross browser customisable scrollbars -// -// *Version: 2.0.0beta3, Last updated: 2010-08-27* -// -// Project Home - http://jscrollpane.kelvinluck.com/ -// GitHub - http://github.com/vitch/jScrollPane -// Source - http://github.com/vitch/jScrollPane/raw/master/script/jquery.jscrollpane.js -// (Minified) - http://github.com/vitch/jScrollPane/raw/master/script/jquery.jscrollpane.min.js -// -// About: License -// -// Copyright (c) 2010 Kelvin Luck -// Dual licensed under the MIT or GPL Version 2 licenses. -// http://jscrollpane.kelvinluck.com/MIT-LICENSE.txt -// http://jscrollpane.kelvinluck.com/GPL-LICENSE.txt -// -// About: Examples -// -// All examples and demos are available through the jScrollPane example site at: -// http://jscrollpane.kelvinluck.com/ -// -// About: Support and Testing -// -// This plugin is tested on the browsers below and has been found to work reliably on them. If you run -// into a problem on one of the supported browsers then please visit the support section on the jScrollPane -// website (http://jscrollpane.kelvinluck.com/) for more information on getting support. You are also -// welcome to fork the project on GitHub if you can contribute a fix for a given issue. -// -// jQuery Versions - 1.4.2 -// Browsers Tested - Firefox 3.6.8, Safari 5, Opera 10.6, Chrome 5.0, IE 6, 7, 8 -// -// About: Release History -// -// 2.0.0beta3 - (2010-08-27) Horizontal mousewheel, mwheelIntent, keyboard support, bug fixes -// 2.0.0beta2 - (2010-08-21) Bug fixes -// 2.0.0beta1 - (2010-08-17) Rewrite to follow modern best practices and enable horizontal scrolling, initially hidden -// elements and dynamically sized elements. -// 1.x - (2006-12-31 - 2010-07-31) Initial version, hosted at googlecode, deprecated - -(function($,window,undefined){ - - $.fn.jScrollPane = function(settings) - { - // JScrollPane "class" - public methods are available through $('selector').data('jsp') - function JScrollPane(elem, s) - { - - var settings, jsp = this, pane, paneWidth, paneHeight, container, contentWidth, contentHeight, - percentInViewH, percentInViewV, isScrollableV, isScrollableH, verticalDrag, dragMaxY, - verticalDragPosition, horizontalDrag, dragMaxX, horizontalDragPosition, - verticalBar, verticalTrack, scrollbarWidth, verticalTrackHeight, verticalDragHeight, arrowUp, arrowDown, - horizontalBar, horizontalTrack, horizontalTrackWidth, horizontalDragWidth, arrowLeft, arrowRight, - reinitialiseInterval, originalPadding, originalPaddingTotalWidth, previousPaneWidth, - wasAtTop = true, wasAtLeft = true, wasAtBottom = false, wasAtRight = false, - mwEvent = $.fn.mwheelIntent ? 'mwheelIntent.jsp' : 'mousewheel.jsp'; - - originalPadding = elem.css('paddingTop') + ' ' + - elem.css('paddingRight') + ' ' + - elem.css('paddingBottom') + ' ' + - elem.css('paddingLeft'); - originalPaddingTotalWidth = (parseInt(elem.css('paddingLeft')) || 0) + - (parseInt(elem.css('paddingRight')) || 0); - - initialise(s); - - function initialise(s) - { - - var clonedElem, tempWrapper, /*firstChild, lastChild, */isMaintainingPositon, lastContentX, lastContentY, - hasContainingSpaceChanged; - - settings = s; - - if (pane == undefined) { - - elem.css( - { - 'overflow': 'hidden', - 'padding': 0 - } - ); - // TODO: Deal with where width/ height is 0 as it probably means the element is hidden and we should - // come back to it later and check once it is unhidden... - paneWidth = elem.innerWidth() + originalPaddingTotalWidth; - paneHeight = elem.innerHeight(); - - elem.width(paneWidth); - - pane = $('
').wrap( - $('
') - .css({ - 'width': paneWidth + 'px', - 'height': paneHeight + 'px' - } - ) - ); - - elem.wrapInner(pane.parent()); - // Need to get the vars after being added to the document, otherwise they reference weird - // disconnected orphan elements... - container = elem.find('>.jspContainer'); - pane = container.find('>.jspPane'); - pane.css('padding', originalPadding); - - /* - // Move any margins from the first and last children up to the container so they can still - // collapse with neighbouring elements as they would before jScrollPane - firstChild = pane.find(':first-child'); - lastChild = pane.find(':last-child'); - elem.css( - { - 'margin-top': firstChild.css('margin-top'), - 'margin-bottom': lastChild.css('margin-bottom') - } - ); - firstChild.css('margin-top', 0); - lastChild.css('margin-bottom', 0); - */ - } else { - - elem.css('width', null); - - hasContainingSpaceChanged = elem.outerWidth() + originalPaddingTotalWidth != paneWidth || elem.outerHeight() != paneHeight; - - if (hasContainingSpaceChanged) { - paneWidth = elem.innerWidth() + originalPaddingTotalWidth; - paneHeight = elem.innerHeight(); - container.css({ - 'width': paneWidth + 'px', - 'height': paneHeight + 'px' - }); - } - - previousPaneWidth = pane.innerWidth(); - - if (!hasContainingSpaceChanged && pane.outerWidth() == contentWidth && pane.outerHeight() == contentHeight) { - // Nothing has changed since we last initialised - if (isScrollableH || isScrollableV) { // If we had already set a width then re-set it - pane.css('width', previousPaneWidth + 'px'); - elem.css('width', (previousPaneWidth + originalPaddingTotalWidth) + 'px'); - } - // Then abort... - return; - } - - pane.css('width', null); - elem.css('width', (paneWidth + originalPaddingTotalWidth) + 'px'); - - container.find('>.jspVerticalBar,>.jspHorizontalBar').remove().end(); - } - - // Unfortunately it isn't that easy to find out the width of the element as it will always report the - // width as allowed by its container, regardless of overflow settings. - // A cunning workaround is to clone the element, set its position to absolute and place it in a narrow - // container. Now it will push outwards to its maxium real width... - clonedElem = pane.clone().css('position', 'absolute'); - tempWrapper = $('
').append(clonedElem); - $('body').append(tempWrapper); - contentWidth = Math.max(pane.outerWidth(), clonedElem.outerWidth()); - tempWrapper.remove(); - - contentHeight = pane.outerHeight(true); - /*alert(contentHeight); */ - percentInViewH = contentWidth / paneWidth; - percentInViewV = contentHeight / paneHeight; - isScrollableV = percentInViewV > 1; - - isScrollableH = percentInViewH > 1; - - //console.log(paneWidth, paneHeight, contentWidth, contentHeight, percentInViewH, percentInViewV, isScrollableH, isScrollableV); - - if (!(isScrollableH || isScrollableV)) { - elem.removeClass('jspScrollable'); - pane.css({ - 'top': 0, - 'width': container.width() + 'px' - }); - removeMousewheel(); - removeFocusHandler(); - removeKeyboardNav(); - unhijackInternalLinks(); - } else { - elem.addClass('jspScrollable'); - - isMaintainingPositon = settings.maintainPosition && (verticalDragPosition || horizontalDragPosition); - if (isMaintainingPositon) { - lastContentX = contentPositionX(); - lastContentY = contentPositionY(); - } - - initialiseVerticalScroll(); - initialiseHorizontalScroll(); - resizeScrollbars(); - - if (isMaintainingPositon) { - scrollToX(lastContentX); - scrollToY(lastContentY); - } - - initFocusHandler(); - initMousewheel(); - if (settings.enableKeyboardNavigation) { - initKeyboardNav(); - } - - observeHash(); - if (settings.hijackInternalLinks) { - hijackInternalLinks(); - } - } - - if (settings.autoReinitialise && !reinitialiseInterval) { - reinitialiseInterval = setInterval( - function() - { - initialise(settings); - }, - settings.autoReinitialiseDelay - ); - } else if (!settings.autoReinitialise && reinitialiseInterval) { - clearInterval(reinitialiseInterval) - } - - elem.trigger('jsp-initialised', [isScrollableH || isScrollableV]); - } - - function initialiseVerticalScroll() - { - if (isScrollableV) { - - container.append( - $('
').append( - $('
'), - $('
').append( - $('
').append( - $('
'), - $('
') - ) - ), - $('
') - ) - ); - - verticalBar = container.find('>.jspVerticalBar'); - verticalTrack = verticalBar.find('>.jspTrack'); - verticalDrag = verticalTrack.find('>.jspDrag'); - - if (settings.showArrows) { - arrowUp = $('').bind( - 'mousedown.jsp', getArrowScroll(0, -1) - ).bind('click.jsp', nil); - arrowDown = $('').bind( - 'mousedown.jsp', getArrowScroll(0, 1) - ).bind('click.jsp', nil); - if (settings.arrowScrollOnHover) { - arrowUp.bind('mouseover.jsp', getArrowScroll(0, -1, arrowUp)); - arrowDown.bind('mouseover.jsp', getArrowScroll(0, 1, arrowDown)); - } - - appendArrows(verticalTrack, settings.verticalArrowPositions, arrowUp, arrowDown); - } - - verticalTrackHeight = paneHeight; - container.find('>.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow').each( - function() - { - verticalTrackHeight -= $(this).outerHeight(); - } - ); - - - verticalDrag.hover( - function() - { - verticalDrag.addClass('jspHover'); - }, - function() - { - verticalDrag.removeClass('jspHover'); - } - ).bind( - 'mousedown.jsp', - function(e) - { - // Stop IE from allowing text selection - $('html').bind('dragstart.jsp selectstart.jsp', function() { return false; }); - - verticalDrag.addClass('jspActive'); - - var startY = e.pageY - verticalDrag.position().top; - - $('html').bind( - 'mousemove.jsp', - function(e) - { - positionDragY(e.pageY - startY, false); - } - ).bind('mouseup.jsp mouseleave.jsp', cancelDrag); - return false; - } - ); - sizeVerticalScrollbar(); - updateVerticalArrows(); - } - } - - function sizeVerticalScrollbar() - { - verticalTrack.height(verticalTrackHeight + 'px'); - verticalDragPosition = 0; - scrollbarWidth = settings.verticalGutter + verticalTrack.outerWidth(); - - // Make the pane thinner to allow for the vertical scrollbar - pane.width(paneWidth - scrollbarWidth - originalPaddingTotalWidth); - - // Add margin to the left of the pane if scrollbars are on that side (to position - // the scrollbar on the left or right set it's left or right property in CSS) - if (verticalBar.position().left == 0) { - pane.css('margin-left', scrollbarWidth + 'px'); - } - } - - function initialiseHorizontalScroll() - { - if (isScrollableH) { - - container.append( - $('
').append( - $('
'), - $('
').append( - $('
').append( - $('
'), - $('
') - ) - ), - $('
') - ) - ); - - horizontalBar = container.find('>.jspHorizontalBar'); - horizontalTrack = horizontalBar.find('>.jspTrack'); - horizontalDrag = horizontalTrack.find('>.jspDrag'); - - if (settings.showArrows) { - arrowLeft = $('').bind( - 'mousedown.jsp', getArrowScroll(-1, 0) - ).bind('click.jsp', nil); - arrowRight = $('').bind( - 'mousedown.jsp', getArrowScroll(1, 0) - ).bind('click.jsp', nil); - if (settings.arrowScrollOnHover) { - arrowLeft.bind('mouseover.jsp', getArrowScroll(-1, 0, arrowLeft)); - arrowRight.bind('mouseover.jsp', getArrowScroll(1, 0, arrowRight)); - } - appendArrows(horizontalTrack, settings.horizontalArrowPositions, arrowLeft, arrowRight); - } - - horizontalDrag.hover( - function() - { - horizontalDrag.addClass('jspHover'); - }, - function() - { - horizontalDrag.removeClass('jspHover'); - } - ).bind( - 'mousedown.jsp', - function(e) - { - // Stop IE from allowing text selection - $('html').bind('dragstart.jsp selectstart.jsp', function() { return false; }); - - horizontalDrag.addClass('jspActive'); - - var startX = e.pageX - horizontalDrag.position().left; - - $('html').bind( - 'mousemove.jsp', - function(e) - { - positionDragX(e.pageX - startX, false); - } - ).bind('mouseup.jsp mouseleave.jsp', cancelDrag); - return false; - } - ); - horizontalTrackWidth = container.innerWidth(); - sizeHorizontalScrollbar(); - updateHorizontalArrows(); - } else { - // no horizontal scroll - } - } - - function sizeHorizontalScrollbar() - { - - container.find('>.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow').each( - function() - { - horizontalTrackWidth -= $(this).outerWidth(); - } - ); - - horizontalTrack.width(horizontalTrackWidth + 'px'); - horizontalDragPosition = 0; - } - - function resizeScrollbars() - { - if (isScrollableH && isScrollableV) { - var horizontalTrackHeight = horizontalTrack.outerHeight(), - verticalTrackWidth = verticalTrack.outerWidth(); - verticalTrackHeight -= horizontalTrackHeight; - $(horizontalBar).find('>.jspCap:visible,>.jspArrow').each( - function() - { - horizontalTrackWidth += $(this).outerWidth(); - } - ); - horizontalTrackWidth -= verticalTrackWidth; - paneHeight -= verticalTrackWidth; - paneWidth -= horizontalTrackHeight; - horizontalTrack.parent().append( - $('
').css('width', horizontalTrackHeight + 'px') - ); - sizeVerticalScrollbar(); - sizeHorizontalScrollbar(); - } - // reflow content - if (isScrollableH) { - pane.width((container.outerWidth() - originalPaddingTotalWidth) + 'px'); - } - contentHeight = pane.outerHeight(); - percentInViewV = contentHeight / paneHeight; - - if (isScrollableH) { - horizontalDragWidth = 1 / percentInViewH * horizontalTrackWidth; - if (horizontalDragWidth > settings.horizontalDragMaxWidth) { - horizontalDragWidth = settings.horizontalDragMaxWidth; - } else if (horizontalDragWidth < settings.horizontalDragMinWidth) { - horizontalDragWidth = settings.horizontalDragMinWidth; - } - horizontalDrag.width(horizontalDragWidth + 'px'); - dragMaxX = horizontalTrackWidth - horizontalDragWidth; - } - if (isScrollableV) { - verticalDragHeight = 1 / percentInViewV * verticalTrackHeight; - if (verticalDragHeight > settings.verticalDragMaxHeight) { - verticalDragHeight = settings.verticalDragMaxHeight; - } else if (verticalDragHeight < settings.verticalDragMinHeight) { - verticalDragHeight = settings.verticalDragMinHeight; - } - verticalDrag.height(verticalDragHeight + 'px'); - dragMaxY = verticalTrackHeight - verticalDragHeight; - } - } - - function appendArrows(ele, p, a1, a2) - { - var p1 = "before", p2 = "after", aTemp; - - // Sniff for mac... Is there a better way to determine whether the arrows would naturally appear - // at the top or the bottom of the bar? - if (p == "os") { - p = /Mac/.test(navigator.platform) ? "after" : "split"; - } - if (p == p1) { - p2 = p; - } else if (p == p2) { - p1 = p; - aTemp = a1; - a1 = a2; - a2 = aTemp; - } - - ele[p1](a1)[p2](a2); - } - - function getArrowScroll(dirX, dirY, ele) { - return function() - { - arrowScroll(dirX, dirY, this, ele); - this.blur(); - return false; - } - } - - function arrowScroll(dirX, dirY, arrow, ele) - { - arrow = $(arrow).addClass('jspActive'); - - var eve, doScroll = function() - { - if (dirX != 0) { - positionDragX(horizontalDragPosition + dirX * settings.arrowButtonSpeed, false); - } - if (dirY != 0) { - positionDragY(verticalDragPosition + dirY * settings.arrowButtonSpeed, false); - } - }, - scrollInt = setInterval(doScroll, settings.arrowRepeatFreq); - - doScroll(); - - eve = ele == undefined ? 'mouseup.jsp' : 'mouseout.jsp'; - ele = ele || $('html'); - ele.bind( - eve, - function() - { - arrow.removeClass('jspActive'); - clearInterval(scrollInt); - ele.unbind(eve); - } - ); - } - - function cancelDrag() - { - $('html').unbind('dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp'); - - verticalDrag && verticalDrag.removeClass('jspActive'); - horizontalDrag && horizontalDrag.removeClass('jspActive'); - } - - function positionDragY(destY, animate) - { - if (!isScrollableV) { - return; - } - if (destY < 0) { - destY = 0; - } else if (destY > dragMaxY) { - destY = dragMaxY; - } - - // can't just check if(animate) because false is a valid value that could be passed in... - if (animate == undefined) { - animate = settings.animateScroll; - } - if (animate) { - jsp.animate(verticalDrag, 'top', destY, _positionDragY); - } else { - verticalDrag.css('top', destY); - _positionDragY(destY); - } - - } - - function _positionDragY(destY) - { - if (destY == undefined) { - destY = verticalDrag.position().top; - } - - container.scrollTop(0); - verticalDragPosition = destY; - - var isAtTop = verticalDragPosition == 0, - isAtBottom = verticalDragPosition == dragMaxY, - percentScrolled = destY/ dragMaxY, - destTop = -percentScrolled * (contentHeight - paneHeight); - - if (wasAtTop != isAtTop || wasAtBottom != isAtBottom) { - wasAtTop = isAtTop; - wasAtBottom = isAtBottom; - elem.trigger('jsp-arrow-change', [wasAtTop, wasAtBottom, wasAtLeft, wasAtRight]); - } - - updateVerticalArrows(isAtTop, isAtBottom); - pane.css('top', destTop); - elem.trigger('jsp-scroll-y', [-destTop, isAtTop, isAtBottom]); - } - - function positionDragX(destX, animate) - { - if (!isScrollableH) { - return; - } - if (destX < 0) { - destX = 0; - } else if (destX > dragMaxX) { - destX = dragMaxX; - } - - if (animate == undefined) { - animate = settings.animateScroll; - } - if (animate) { - jsp.animate(horizontalDrag, 'left', destX, _positionDragX); - } else { - horizontalDrag.css('left', destX); - _positionDragX(destX); - } - } - - function _positionDragX(destX) - { - if (destX == undefined) { - destX = horizontalDrag.position().left; - } - - container.scrollTop(0); - horizontalDragPosition = destX; - - var isAtLeft = horizontalDragPosition == 0, - isAtRight = horizontalDragPosition == dragMaxY, - percentScrolled = destX / dragMaxX, - destLeft = -percentScrolled * (contentWidth - paneWidth); - - if (wasAtLeft != isAtLeft || wasAtRight != isAtRight) { - wasAtLeft = isAtLeft; - wasAtRight = isAtRight; - elem.trigger('jsp-arrow-change', [wasAtTop, wasAtBottom, wasAtLeft, wasAtRight]); - } - - updateHorizontalArrows(isAtLeft, isAtRight); - pane.css('left', destLeft); - elem.trigger('jsp-scroll-x', [-destLeft, isAtLeft, isAtRight]); - } - - function updateVerticalArrows(isAtTop, isAtBottom) - { - if (settings.showArrows) { - arrowUp[isAtTop ? 'addClass' : 'removeClass']('jspDisabled'); - arrowDown[isAtBottom ? 'addClass' : 'removeClass']('jspDisabled'); - } - } - - function updateHorizontalArrows(isAtLeft, isAtRight) - { - if (settings.showArrows) { - arrowLeft[isAtLeft ? 'addClass' : 'removeClass']('jspDisabled'); - arrowRight[isAtRight ? 'addClass' : 'removeClass']('jspDisabled'); - } - } - - function scrollToY(destY, animate) - { - var percentScrolled = destY / (contentHeight - paneHeight); - positionDragY(percentScrolled * dragMaxY, animate); - } - - function scrollToX(destX, animate) - { - var percentScrolled = destX / (contentWidth - paneWidth); - positionDragX(percentScrolled * dragMaxX, animate); - } - - function scrollToElement(ele, stickToTop, animate) - { - var e, eleHeight, eleTop = 0, viewportTop, maxVisibleEleTop, destY; - - // Legal hash values aren't necessarily legal jQuery selectors so we need to catch any - // errors from the lookup... - try { - e = $(ele); - } catch (err) { - return; - } - eleHeight = e.outerHeight(); - - container.scrollTop(0); - - // loop through parents adding the offset top of any elements that are relatively positioned between - // the focused element and the jspPane so we can get the true distance from the top - // of the focused element to the top of the scrollpane... - while (!e.is('.jspPane')) { - eleTop += e.position().top; - e = e.offsetParent(); - if (/^body|html$/i.test(e[0].nodeName)) { - // we ended up too high in the document structure. Quit! - return; - } - } - - - viewportTop = contentPositionY(); - maxVisibleEleTop = viewportTop + paneHeight; - if (eleTop < viewportTop || stickToTop) { // element is above viewport - destY = eleTop - settings.verticalGutter; - } else if (eleTop + eleHeight > maxVisibleEleTop) { // element is below viewport - destY = eleTop - paneHeight + eleHeight + settings.verticalGutter; - } - if (destY) { - scrollToY(destY, animate); - } - // TODO: Implement automatic horizontal scrolling? - } - - function contentPositionX() - { - return -pane.position().left; - } - - function contentPositionY() - { - return -pane.position().top; - } - - function initMousewheel() - { - container.unbind(mwEvent).bind( - mwEvent, - function (event, delta, deltaX, deltaY) { - var dX = horizontalDragPosition, dY = verticalDragPosition; - positionDragX(horizontalDragPosition + deltaX * settings.mouseWheelSpeed, false) - positionDragY(verticalDragPosition - deltaY * settings.mouseWheelSpeed, false); - // return true if there was no movement so rest of screen can scroll - return dX == horizontalDragPosition && dY == verticalDragPosition; - } - ); - } - - function removeMousewheel() - { - container.unbind(mwEvent); - } - - function nil() - { - return false; - } - - function initFocusHandler() - { - pane.unbind('focusin.jsp').bind( - 'focusin.jsp', - function(e) - { - if(e.target === pane[0]){return;} - scrollToElement(e.target, false); - } - ); - } - - function removeFocusHandler() - { - - pane.unbind('focusin.jsp'); - } - - function initKeyboardNav() - { - var pressed, pressedTimer; - elem.attr('tabindex', 0) - .unbind('keydown.jsp') - .bind( - 'keydown.jsp', - function(e) - { - if(e.target !== elem[0]){ - return; - } - var dX = horizontalDragPosition, dY = verticalDragPosition, step = pressed ? 2 : 16; - switch(e.keyCode) { - case 40: // down - positionDragY(verticalDragPosition + step, false); - break; - case 38: // up - positionDragY(verticalDragPosition - step, false); - break; - case 34: // page down - case 32: // space - scrollToY(contentPositionY() + Math.max(32, paneHeight) - 16); - break; - case 33: // page up - scrollToY(contentPositionY() - paneHeight + 16); - break; - case 35: // end - scrollToY(contentHeight - paneHeight); - break; - case 36: // home - scrollToY(0); - break; - case 39: // right - positionDragX(horizontalDragPosition + step, false); - break; - case 37: // left - positionDragX(horizontalDragPosition - step, false); - break; - } - - if( !(dX == horizontalDragPosition && dY == verticalDragPosition) ){ - pressed = true; - clearTimeout(pressedTimer); - pressedTimer = setTimeout(function(){ - pressed = false; - }, 260); - return false; - } - } - ); - if(settings.hideFocus) { - elem.css('outline', 'none'); - if('hideFocus' in container[0]){ - elem.attr('hideFocus', true); - } - } else { - elem.css('outline', ''); - if('hideFocus' in container[0]){ - elem.attr('hideFocus', false); - } - } - } - - function removeKeyboardNav() - { - elem.attr('tabindex', '-1') - .removeAttr('tabindex') - .unbind('keydown.jsp'); - } - - function observeHash() - { - if (location.hash && location.hash.length > 1) { - var e, retryInt; - try { - e = $(location.hash); - } catch (err) { - return; - } - - if (e.length && pane.find(e)) { - // nasty workaround but it appears to take a little while before the hash has done its thing - // to the rendered page so we just wait until the container's scrollTop has been messed up. - if (container.scrollTop() == 0) { - retryInt = setInterval( - function() - { - if (container.scrollTop() > 0) { - scrollToElement(location.hash, true); - $(document).scrollTop(container.position().top); - clearInterval(retryInt); - } - }, - 50 - ) - } else { - scrollToElement(location.hash, true); - $(document).scrollTop(container.position().top); - } - } - } - } - - function unhijackInternalLinks() - { - $('a.jspHijack').unbind('click.jsp-hijack').removeClass('jspHijack'); - } - - function hijackInternalLinks() - { - unhijackInternalLinks(); - $('a[href^=#]').addClass('jspHijack').bind( - 'click.jsp-hijack', - function() - { - var uriParts = this.href.split('#'), hash; - if (uriParts.length > 1) { - hash = uriParts[1]; - if (hash.length > 0 && pane.find('#' + hash).length > 0) { - scrollToElement('#' + hash, true); - // Need to return false otherwise things mess up... Would be nice to maybe also scroll - // the window to the top of the scrollpane? - return false; - } - } - } - ) - } - - // Public API - $.extend( - jsp, - { - // Reinitialises the scroll pane (if it's internal dimensions have changed since the last time it - // was initialised). The settings object which is passed in will override any settings from the - // previous time it was initialised - if you don't pass any settings then the ones from the previous - // initialisation will be used. - reinitialise: function(s) - { - s = $.extend({}, s, settings); - initialise(s); - }, - // Scrolls the specified element (a jQuery object, DOM node or jQuery selector string) into view so - // that it can be seen within the viewport. If stickToTop is true then the element will appear at - // the top of the viewport, if it is false then the viewport will scroll as little as possible to - // show the element. You can also specify if you want animation to occur. If you don't provide this - // argument then the animateScroll value from the settings object is used instead. - scrollToElement: function(ele, stickToTop, animate) - { - scrollToElement(ele, stickToTop, animate); - }, - // Scrolls the pane so that the specified co-ordinates within the content are at the top left - // of the viewport. animate is optional and if not passed then the value of animateScroll from - // the settings object this jScrollPane was initialised with is used. - scrollTo: function(destX, destY, animate) - { - scrollToX(destX, animate); - scrollToY(destY, animate); - }, - // Scrolls the pane so that the specified co-ordinate within the content is at the left of the - // viewport. animate is optional and if not passed then the value of animateScroll from the settings - // object this jScrollPane was initialised with is used. - scrollToX: function(destX, animate) - { - scrollToX(destX, animate); - }, - // Scrolls the pane so that the specified co-ordinate within the content is at the top of the - // viewport. animate is optional and if not passed then the value of animateScroll from the settings - // object this jScrollPane was initialised with is used. - scrollToY: function(destY, animate) - { - scrollToY(destY, animate); - }, - // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then - // the value of animateScroll from the settings object this jScrollPane was initialised with is used. - scrollBy: function(deltaX, deltaY, animate) - { - jsp.scrollByX(deltaX, animate); - jsp.scrollByY(deltaY, animate); - }, - // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then - // the value of animateScroll from the settings object this jScrollPane was initialised with is used. - scrollByX: function(deltaX, animate) - { - var destX = contentPositionX() + deltaX, - percentScrolled = destX / (contentWidth - paneWidth); - positionDragX(percentScrolled * dragMaxX, animate); - }, - // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then - // the value of animateScroll from the settings object this jScrollPane was initialised with is used. - scrollByY: function(deltaY, animate) - { - var destY = contentPositionY() + deltaY, - percentScrolled = destY / (contentHeight - paneHeight); - positionDragY(percentScrolled * dragMaxY, animate); - }, - // This method is called when jScrollPane is trying to animate to a new position. You can override - // it if you want to provide advanced animation functionality. It is passed the following arguments: - // * ele - the element whose position is being animated - // * prop - the property that is being animated - // * value - the value it's being animated to - // * stepCallback - a function that you must execute each time you update the value of the property - // You can use the default implementation (below) as a starting point for your own implementation. - animate: function(ele, prop, value, stepCallback) - { - var params = {}; - params[prop] = value; - ele.animate( - params, - { - 'duration' : settings.animateDuration, - 'ease' : settings.animateEase, - 'queue' : false, - 'step' : stepCallback - } - ); - }, - // Returns the current x position of the viewport with regards to the content pane. - getContentPositionX: function() - { - return contentPositionX(); - }, - // Returns the current y position of the viewport with regards to the content pane. - getContentPositionY: function() - { - return contentPositionY(); - }, - // Returns whether or not this scrollpane has a horizontal scrollbar. - getIsScrollableH: function() - { - return isScrollableH; - }, - // Returns whether or not this scrollpane has a vertical scrollbar. - getIsScrollableV: function() - { - return isScrollableV; - }, - // Gets a reference to the content pane. It is important that you use this method if you want to - // edit the content of your jScrollPane as if you access the element directly then you may have some - // problems (as your original element has had additional elements for the scrollbars etc added into - // it). - getContentPane: function() - { - return pane; - }, - // Scrolls this jScrollPane down as far as it can currently scroll. If animate isn't passed then the - // animateScroll value from settings is used instead. - scrollToBottom: function(animate) - { - positionDragY(dragMaxY, animate); - }, - // Hijacks the links on the page which link to content inside the scrollpane. If you have changed - // the content of your page (e.g. via AJAX) and want to make sure any new anchor links to the - // contents of your scroll pane will work then call this function. - hijackInternalLinks: function() - { - hijackInternalLinks(); - } - } - ); - } - - // Pluginifying code... - - settings = $.extend({}, $.fn.jScrollPane.defaults, settings); - - var ret; - this.each( - function() - { - var elem = $(this), jspApi = elem.data('jsp'); - if (jspApi) { - jspApi.reinitialise(settings); - } else { - jspApi = new JScrollPane(elem, settings); - elem.data('jsp', jspApi); - } - ret = ret ? ret.add(elem) : elem; - } - ) - return ret; - }; - - $.fn.jScrollPane.defaults = { - 'showArrows' : false, - 'maintainPosition' : true, - 'autoReinitialise' : false, - 'autoReinitialiseDelay' : 500, - 'verticalDragMinHeight' : 0, - 'verticalDragMaxHeight' : 99999, - 'horizontalDragMinWidth' : 0, - 'horizontalDragMaxWidth' : 99999, - 'animateScroll' : false, - 'animateDuration' : 300, - 'animateEase' : 'linear', - 'hijackInternalLinks' : false, - 'verticalGutter' : 4, - 'horizontalGutter' : 4, - 'mouseWheelSpeed' : 10, - 'arrowButtonSpeed' : 10, - 'arrowRepeatFreq' : 100, - 'arrowScrollOnHover' : false, - 'verticalArrowPositions' : 'split', - 'horizontalArrowPositions' : 'split', - 'enableKeyboardNavigation' : true, - 'hideFocus' : false - }; - -})(jQuery,this); - diff --git a/libs/bower_components/jScrollPane/issues/12/native.html b/libs/bower_components/jScrollPane/issues/12/native.html deleted file mode 100644 index 54f9920f49..0000000000 --- a/libs/bower_components/jScrollPane/issues/12/native.html +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - -The History of Tinyfish - - - - - - - - - - -
-

The History of Tinyfish

-

It all began with a pair of broken arms and two dodgy eyes.

-

It’s 1978, the year that Jim Sanders and Simon Godfrey met at school in East Sheen (South London). Although each had been aware of the other since the age of five, the two would have been on nothing more than nodding acquaintance, save for two medical problems that forced them together and would eventually lead to the band we know today as Tinyfish.

- -

Bloody weaklings.

-

Jim had been diagnosed with a rare retinal disease which had a good chance of robbing him of his vision, and had recently undergone laser eye surgery. Simon more comedically had broken both arms after falling off a roof, leaving him with seriously weakened joints. As part of their convalescence from their respective surgeries, both boys were excused sports for six months.

-

While the rest of the kids kicked the living crap out of each other under the pretence of playing football or rugby, Jim and Simon sat on a low school wall watching the on-field carnage and eyeing one another warily. Initially Simon was the talkative one while Jim sat silently, but as soon as the subject matter turned to music, both began to find some common ground, and the conversation became a two way street.

-

Initially, Jim had been a Rock/New Wave fan who loved Thin Lizzy (above all others), but incongruously, also the Skids (who would later become Big Country) and the Rezillos (who wouldn’t). Simon on the other hand was a fan of ELO and The Sweet but both agreed that music, and in particular, rock bands, were the bee’s knees.

-

Around the same time , Simon had struck up a friendship with another boy at school called Paul Worwood, initially during school music lessons. The pair were both big fans of Dungeons and Dragons and would play the game constantly throughout their teenage years.

- -

Bloody geeks.

-

As the 70’s gave way to the 80’s and the three grew to be good friends, Jim drew Simon and Paul towards a new love; heavy metal. Over the next three years, the trio saw every metal band that played at their local venue (The Hammersmith Odeon). While the three saw the likes of Thin Lizzy, Saxon, MSG, Iron Maiden and The Scorpions, their listening tastes also encompassed bands such as Yes, Genesis, King Crimson and Magnum.

-

Jim had first played ‘Going For The One’ by Yes to Simon back in the 70's (Simon rather uncharitably dubbed it ‘f***ing Country & Western’. To be fair, Jim told Simon not to bother with Jethro Tull, as he thought they were arse... without actually having ever heard them. Twit.). Jim persevered however, and when he spun ‘A Farewell To Kings’ by Rush in an afternoon listening session, Simon was well and truly hooked. He now also likes Yes very much. Hah! Jim now also likes Jethro Tull. Hah! Hah!

- -

During their time at Richmond College (South West London), Jim and Simon met guitarist Nick Denville, and formed their first band, with Paul joining on bass soon after. Paul was the only person they knew who owned a car. They also thought he was a top bloke, and so without mentioning the car caveat, the three miscreants cajoled Paul into buying a bass guitar and an amplifier. They called themselves ‘Blackstone Edge’ and they were bloody rubbish. All they needed was a keyboard player to crown their musical ineptitude.

-

Simon’s younger brother Jem was 14 when he received his first keyboard (a Casio home synth which he put through a flanger pedal to make it sound cosmic). Jem was initially invited to rehearsals to hold the lyrics up for Jim to sing from while the rest of the band played. It soon became obvious to the guys that Jem's talents were wasted as a music stand and so he was invited into the band. This line up survived for a few months before Nick Denville left to live a happier and entirely more melodic life elsewhere.

-

Bloody kids.

-

The band continued, and Simon relentlessly poured prog music into Jem's head which was immediately absorbed by the young keyboard player. Less than six months later, Jem had learned all of Tony Banks’ keyboard solos from both Seconds Out and Three Sides Live along with Rick Wakeman's and Patrick Moraz's solos from Yesshows. With Jem's considerable technique, and the band hungry to write original music, the direction of the band was truely set towards progressive rock. The name Blackstone Edge was soon dropped in favour of ‘Freefall Warriors’ (after a story in a Doctor Who comic) which very quickly contracted simply to ‘Freefall’ and with the addition of vocalist Andrew Lovatt, the band began to rehearse in preparation for live gigs.

- -

During this time the band bumped into actor Tony Aitken who had worked during his less successful years as a supply teacher at Jim and Simon’s school in the 70’s. Tony was looking for musicians to back him in a covers band, and the guys duly offered their services (even though they then had no live experience whatsoever). The arrangement worked so well that they kept the band going for over a decade and it was there, working the pubs and clubs of southern England, that they learned the musical chops that would serve them so well in later years.

-

In parallel to their function band work, Freefall practice/writing sessions continued. As luck would have it, IQ rehearsed in the studio next door to them, and on the back of their first gig, attended by IQ’s then manager, they managed to land the support slot at IQ’s Christmas show at the Marquee Club in London. Gulp.

-

Thankfully, the band hit it off immediately with the crowd and soon managed to get a string of gigs with bands like Jadis, Ark, Galahad, Mentaur and Geoff Mann from Twelth Night. Freefall looked as though they were going to make a big impact with the prog community but after an ill-judged attempt to ‘go commercial’ in the early ‘90s, (Bloody managers!) Jim left the band and the remaining members recruited a very nice gentleman called John Boyes on guitar. However, the moment was lost and the band soon fell apart.

- -

Bloody idiots.

-

Jim and Jem briefly went on, to form Pop-proggers “Charlottes’ Web” before Jem gave up the scene to work for national radio (although Jem's involvement with prog would be re-ignited a decade later with the formation (with John Boyes) of the Prog supergroup Frost*).

-

Meanwhile, Simon and Paul formed an acoustic outfit called ‘Men Are Dead’ with keyboard player Col Alkins and lyricist/harmonica player Rob Ramsay. Simon had met Rob way back in the early 80’s at Richmond College, at the same time Freefall were making their first tentative steps in music. They became good friends and Rob was always involved at some level, either by helping out at gigs or writing the occasional lyric.

- -
-

Men Are Dead began to play gigs on London's open mic scene (where any artist can roll up and play a short set of between two and five songs) and the band proved to be extremely popular with both audience and fellow musos alike. Col left after their first album, but thankfully, Jim once again joined up with Simon and Paul as a second guitarist, along with Wayne Collier, an extraordinary drummer who played in almost every band in West London. What evolved was a prototype Tinyfish sound and much of the band’s current style comes from these early twin guitar shows.

-

The millennium came and went, and so did the name ‘Men Are Dead’. In came Simon’s alter ego ‘Simon Walsh’, a nom-de-guerre he still uses today when playing solo acoustic gigs. Whilst notching up appearances in the UK, Germany, France, Estonia and America, they recruited a third guitarist (Tim Eyles) and all looked rosy (if a little Lynyrd Skynyrd) in the garden. Behind the scenes however, things were not going well with the band. Frustration with the strict definitions of acoustic music imposed by many clubs and venues began to take their toll on both the music and musicians. Their material was becoming more complex and the songs started to push past the three minute mark, as the band's deep-seated prog influences once again made themselves felt.

- -

Finally in the late autumn of 2004, after much soul searching, Simon sent Jim an e-mail suggesting that maybe there was little more they could achieve as an acoustic unit and perhaps they should return to their progressive roots. Jim happily agreed and an invite was duly sent out to both Paul and Rob asking if they would be interested in joining, which thankfully they did.

-

Simon disbanded the acoustic band, with Tim Eyles joining the punk-pop band ‘The Random’ and the four remaining musicians assembled in Simon's loft and began writing and rehearsing. Within six weeks it was obvious that there were real possibilities in the music they were making, but the question as to how to record this new material was causing them concern. None of them could afford to go the professional route, so the decision was made to turn the loft into a studio, and try it themselves.

-

Robert had set up Lazy Gun Records several years previously, to promote both Men Are Dead and Simon Walsh, and suggested that this new band join the roster. This gave them complete artistic and financial control of their work.

-

Bloody tight bastards.

- -

Finally the subject of the name for the band reared its ugly head. There were thoughts that they could resurrect the name Freefall but that idea was soon discarded. This was a new band, and it deserved a new name (besides, someone else was now using ‘Freefall’ and they looked bigger and meaner than this band). It was Jim that quipped that they were just tiny fish compared to some of the huge prog bands still out there and within moments the name had stuck.

-

The problem remained that they were a man short for playing live shows, but in the studio, that base was covered by Simon who, happily, can play both drums and guitar in equal measure (although not at the same time). Meanwhile, the studio had taken shape and the band had found that familiar progressive chemistry once again. The smiles were back on everybody’s faces, and the band had a sound they could work to develop.

-

When the talk turned once more to live performances, Jim mentioned that he knew a drummer of many bands, the semi-Italian Leon Camfield, and after a few rehearsals (and many beers) together, Leon (for whom truely progressive music is a long held love (note King Crimson tattoo on arm)) enthusiastically joined to complete the Fab Five.

- -

So here we are in 2010. Tinyfish have gigged around the country, released both two albums, a mini-album, and a live album & DVD, and have arrived at a destination where they feel at home, and are proud of their journey to this place of better dreams.

-

Bloody pretentious tossers.

-
- - - diff --git a/libs/bower_components/jScrollPane/issues/12/wrapped.html b/libs/bower_components/jScrollPane/issues/12/wrapped.html deleted file mode 100644 index 863fb1cb70..0000000000 --- a/libs/bower_components/jScrollPane/issues/12/wrapped.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - -The History of Tinyfish - - - - - - - - - - -
-
-

The History of Tinyfish

-

It all began with a pair of broken arms and two dodgy eyes.

-

It’s 1978, the year that Jim Sanders and Simon Godfrey met at school in East Sheen (South London). Although each had been aware of the other since the age of five, the two would have been on nothing more than nodding acquaintance, save for two medical problems that forced them together and would eventually lead to the band we know today as Tinyfish.

- -

Bloody weaklings.

-

Jim had been diagnosed with a rare retinal disease which had a good chance of robbing him of his vision, and had recently undergone laser eye surgery. Simon more comedically had broken both arms after falling off a roof, leaving him with seriously weakened joints. As part of their convalescence from their respective surgeries, both boys were excused sports for six months.

-

While the rest of the kids kicked the living crap out of each other under the pretence of playing football or rugby, Jim and Simon sat on a low school wall watching the on-field carnage and eyeing one another warily. Initially Simon was the talkative one while Jim sat silently, but as soon as the subject matter turned to music, both began to find some common ground, and the conversation became a two way street.

-

Initially, Jim had been a Rock/New Wave fan who loved Thin Lizzy (above all others), but incongruously, also the Skids (who would later become Big Country) and the Rezillos (who wouldn’t). Simon on the other hand was a fan of ELO and The Sweet but both agreed that music, and in particular, rock bands, were the bee’s knees.

-

Around the same time , Simon had struck up a friendship with another boy at school called Paul Worwood, initially during school music lessons. The pair were both big fans of Dungeons and Dragons and would play the game constantly throughout their teenage years.

- -

Bloody geeks.

-

As the 70’s gave way to the 80’s and the three grew to be good friends, Jim drew Simon and Paul towards a new love; heavy metal. Over the next three years, the trio saw every metal band that played at their local venue (The Hammersmith Odeon). While the three saw the likes of Thin Lizzy, Saxon, MSG, Iron Maiden and The Scorpions, their listening tastes also encompassed bands such as Yes, Genesis, King Crimson and Magnum.

-

Jim had first played ‘Going For The One’ by Yes to Simon back in the 70's (Simon rather uncharitably dubbed it ‘f***ing Country & Western’. To be fair, Jim told Simon not to bother with Jethro Tull, as he thought they were arse... without actually having ever heard them. Twit.). Jim persevered however, and when he spun ‘A Farewell To Kings’ by Rush in an afternoon listening session, Simon was well and truly hooked. He now also likes Yes very much. Hah! Jim now also likes Jethro Tull. Hah! Hah!

- -

During their time at Richmond College (South West London), Jim and Simon met guitarist Nick Denville, and formed their first band, with Paul joining on bass soon after. Paul was the only person they knew who owned a car. They also thought he was a top bloke, and so without mentioning the car caveat, the three miscreants cajoled Paul into buying a bass guitar and an amplifier. They called themselves ‘Blackstone Edge’ and they were bloody rubbish. All they needed was a keyboard player to crown their musical ineptitude.

-

Simon’s younger brother Jem was 14 when he received his first keyboard (a Casio home synth which he put through a flanger pedal to make it sound cosmic). Jem was initially invited to rehearsals to hold the lyrics up for Jim to sing from while the rest of the band played. It soon became obvious to the guys that Jem's talents were wasted as a music stand and so he was invited into the band. This line up survived for a few months before Nick Denville left to live a happier and entirely more melodic life elsewhere.

-

Bloody kids.

-

The band continued, and Simon relentlessly poured prog music into Jem's head which was immediately absorbed by the young keyboard player. Less than six months later, Jem had learned all of Tony Banks’ keyboard solos from both Seconds Out and Three Sides Live along with Rick Wakeman's and Patrick Moraz's solos from Yesshows. With Jem's considerable technique, and the band hungry to write original music, the direction of the band was truely set towards progressive rock. The name Blackstone Edge was soon dropped in favour of ‘Freefall Warriors’ (after a story in a Doctor Who comic) which very quickly contracted simply to ‘Freefall’ and with the addition of vocalist Andrew Lovatt, the band began to rehearse in preparation for live gigs.

- -

During this time the band bumped into actor Tony Aitken who had worked during his less successful years as a supply teacher at Jim and Simon’s school in the 70’s. Tony was looking for musicians to back him in a covers band, and the guys duly offered their services (even though they then had no live experience whatsoever). The arrangement worked so well that they kept the band going for over a decade and it was there, working the pubs and clubs of southern England, that they learned the musical chops that would serve them so well in later years.

-

In parallel to their function band work, Freefall practice/writing sessions continued. As luck would have it, IQ rehearsed in the studio next door to them, and on the back of their first gig, attended by IQ’s then manager, they managed to land the support slot at IQ’s Christmas show at the Marquee Club in London. Gulp.

-

Thankfully, the band hit it off immediately with the crowd and soon managed to get a string of gigs with bands like Jadis, Ark, Galahad, Mentaur and Geoff Mann from Twelth Night. Freefall looked as though they were going to make a big impact with the prog community but after an ill-judged attempt to ‘go commercial’ in the early ‘90s, (Bloody managers!) Jim left the band and the remaining members recruited a very nice gentleman called John Boyes on guitar. However, the moment was lost and the band soon fell apart.

- -

Bloody idiots.

-

Jim and Jem briefly went on, to form Pop-proggers “Charlottes’ Web” before Jem gave up the scene to work for national radio (although Jem's involvement with prog would be re-ignited a decade later with the formation (with John Boyes) of the Prog supergroup Frost*).

-

Meanwhile, Simon and Paul formed an acoustic outfit called ‘Men Are Dead’ with keyboard player Col Alkins and lyricist/harmonica player Rob Ramsay. Simon had met Rob way back in the early 80’s at Richmond College, at the same time Freefall were making their first tentative steps in music. They became good friends and Rob was always involved at some level, either by helping out at gigs or writing the occasional lyric.

- -
-

Men Are Dead began to play gigs on London's open mic scene (where any artist can roll up and play a short set of between two and five songs) and the band proved to be extremely popular with both audience and fellow musos alike. Col left after their first album, but thankfully, Jim once again joined up with Simon and Paul as a second guitarist, along with Wayne Collier, an extraordinary drummer who played in almost every band in West London. What evolved was a prototype Tinyfish sound and much of the band’s current style comes from these early twin guitar shows.

-

The millennium came and went, and so did the name ‘Men Are Dead’. In came Simon’s alter ego ‘Simon Walsh’, a nom-de-guerre he still uses today when playing solo acoustic gigs. Whilst notching up appearances in the UK, Germany, France, Estonia and America, they recruited a third guitarist (Tim Eyles) and all looked rosy (if a little Lynyrd Skynyrd) in the garden. Behind the scenes however, things were not going well with the band. Frustration with the strict definitions of acoustic music imposed by many clubs and venues began to take their toll on both the music and musicians. Their material was becoming more complex and the songs started to push past the three minute mark, as the band's deep-seated prog influences once again made themselves felt.

- -

Finally in the late autumn of 2004, after much soul searching, Simon sent Jim an e-mail suggesting that maybe there was little more they could achieve as an acoustic unit and perhaps they should return to their progressive roots. Jim happily agreed and an invite was duly sent out to both Paul and Rob asking if they would be interested in joining, which thankfully they did.

-

Simon disbanded the acoustic band, with Tim Eyles joining the punk-pop band ‘The Random’ and the four remaining musicians assembled in Simon's loft and began writing and rehearsing. Within six weeks it was obvious that there were real possibilities in the music they were making, but the question as to how to record this new material was causing them concern. None of them could afford to go the professional route, so the decision was made to turn the loft into a studio, and try it themselves.

-

Robert had set up Lazy Gun Records several years previously, to promote both Men Are Dead and Simon Walsh, and suggested that this new band join the roster. This gave them complete artistic and financial control of their work.

-

Bloody tight bastards.

- -

Finally the subject of the name for the band reared its ugly head. There were thoughts that they could resurrect the name Freefall but that idea was soon discarded. This was a new band, and it deserved a new name (besides, someone else was now using ‘Freefall’ and they looked bigger and meaner than this band). It was Jim that quipped that they were just tiny fish compared to some of the huge prog bands still out there and within moments the name had stuck.

-

The problem remained that they were a man short for playing live shows, but in the studio, that base was covered by Simon who, happily, can play both drums and guitar in equal measure (although not at the same time). Meanwhile, the studio had taken shape and the band had found that familiar progressive chemistry once again. The smiles were back on everybody’s faces, and the band had a sound they could work to develop.

-

When the talk turned once more to live performances, Jim mentioned that he knew a drummer of many bands, the semi-Italian Leon Camfield, and after a few rehearsals (and many beers) together, Leon (for whom truely progressive music is a long held love (note King Crimson tattoo on arm)) enthusiastically joined to complete the Fab Five.

- -

So here we are in 2010. Tinyfish have gigged around the country, released both two albums, a mini-album, and a live album & DVD, and have arrived at a destination where they feel at home, and are proud of their journey to this place of better dreams.

-

Bloody pretentious tossers.

-
-
- - - diff --git a/libs/bower_components/jScrollPane/issues/7/after.html b/libs/bower_components/jScrollPane/issues/7/after.html deleted file mode 100644 index a91d42dace..0000000000 --- a/libs/bower_components/jScrollPane/issues/7/after.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - jScrollPane 2 reinit bug? - - - - - - - - - - - - -
-
    -
  • scrollable list box
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • - -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • - -
  • the next list item
  • -
-
- -
-
    -
  • scrollable list box
  • -
  • list item
  • - -
  • another list item
  • -
-
- -
-
    -
  • scrollable list box
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • - -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • - -
  • the next list item
  • -
-
- -
-
    -
  • scrollable list box
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • - -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • - -
  • the next list item
  • -
-
- - -

- -

In the above testcase: reinitialising jScrollPane (either via the api or simply by re-calling .jScrollPane() on the original element) strips out the width of the div.jspPane and causes a rendering issue: the absolutely-positioned div renders only as wide as its text content. The expected behavior is that it'll fill the available width, as it does on page load after the first call to .jScrollPane().

- - -

UPDATE: this is fixed for scrollable content in v2b2, but when the content is not scrollable there's still undesired rendering on first load.

- -

Additionally, padding calculations might need some tweaks. The third list box here is identical to the first two except for an added 5px of padding all the way around: note how the jspVerticalBar is partially pushed out of view.

- - - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/issues/7/before.html b/libs/bower_components/jScrollPane/issues/7/before.html deleted file mode 100644 index c703503f15..0000000000 --- a/libs/bower_components/jScrollPane/issues/7/before.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - - jScrollPane 2 reinit bug? - - - - - - - - - - - - -
-
    -
  • scrollable list box
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • - -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • - -
  • the next list item
  • -
-
- -
-
    -
  • scrollable list box
  • -
  • list item
  • - -
  • another list item
  • -
-
- -
-
    -
  • scrollable list box
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • - -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • - -
  • the next list item
  • -
-
- -
-
    -
  • scrollable list box
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • - -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • - -
  • the next list item
  • -
-
- - -

- -

In the above testcase: reinitialising jScrollPane (either via the api or simply by re-calling .jScrollPane() on the original element) strips out the width of the div.jspPane and causes a rendering issue: the absolutely-positioned div renders only as wide as its text content. The expected behavior is that it'll fill the available width, as it does on page load after the first call to .jScrollPane().

- - -

UPDATE: this is fixed for scrollable content in v2b2, but when the content is not scrollable there's still undesired rendering on first load.

- -

Additionally, padding calculations might need some tweaks. The third list box here is identical to the first two except for an added 5px of padding all the way around: note how the jspVerticalBar is partially pushed out of view.

- - - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/issues/7/index.html b/libs/bower_components/jScrollPane/issues/7/index.html deleted file mode 100644 index 7d8e95f039..0000000000 --- a/libs/bower_components/jScrollPane/issues/7/index.html +++ /dev/null @@ -1,53 +0,0 @@ - - - - - jScrollPane - issue 7 - - - - - - - - - - - -
-

jScrollPane - issue 7

-

- This page demonstrates the bug described in - issue 7 as reported (with nice striped down test cases) by Rob - Lifford. -

- -
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/issues/7/jscrollpane-2b1.css b/libs/bower_components/jScrollPane/issues/7/jscrollpane-2b1.css deleted file mode 100644 index a051caed0a..0000000000 --- a/libs/bower_components/jScrollPane/issues/7/jscrollpane-2b1.css +++ /dev/null @@ -1,120 +0,0 @@ -/* - * CSS Styles that are needed by jScrollPane for it to operate correctly. - * - * Include this stylesheet in your site or copy and paste the styles below into your stylesheet - jScrollPane - * may not operate correctly without them. - */ - -.jspContainer -{ - overflow: hidden; - position: relative; -} - -.jspPane -{ - position: absolute; -} - -.jspVerticalBar -{ - position: absolute; - top: 0; - right: 0; - width: 16px; - height: 100%; - background: red; -} - -.jspHorizontalBar -{ - position: absolute; - bottom: 0; - left: 0; - width: 100%; - height: 16px; - background: red; -} - -.jspVerticalBar *, -.jspHorizontalBar * -{ - margin: 0; - padding: 0; -} - -.jspCap -{ - display: none; -} - -.jspHorizontalBar .jspCap -{ - float: left; -} - -.jspTrack -{ - background: #dde; - position: relative; -} - -.jspDrag -{ - background: #bbd; - position: relative; - top: 0; - left: 0; - cursor: pointer; -} - -.jspHorizontalBar .jspTrack, -.jspHorizontalBar .jspDrag -{ - float: left; - height: 100%; -} - -.jspArrow -{ - background: #50506d; - text-indent: -20000px; - display: block; - cursor: pointer; -} - -.jspArrow.jspDisabled -{ - cursor: default; - background: #80808d; -} - -.jspVerticalBar .jspArrow -{ - height: 16px; -} - -.jspHorizontalBar .jspArrow -{ - width: 16px; - float: left; - height: 100%; -} - -.jspVerticalBar .jspArrow:focus -{ - outline: none; -} - -.jspCorner -{ - background: #eeeef4; - float: left; - height: 100%; -} - -/* Yuk! CSS Hack for IE6 3 pixel bug :( */ -* html .jspCorner -{ - margin: 0 -3px 0 0; -} \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/issues/7/jscrollpane-2b2.js b/libs/bower_components/jScrollPane/issues/7/jscrollpane-2b2.js deleted file mode 100644 index e8e89e3e4a..0000000000 --- a/libs/bower_components/jScrollPane/issues/7/jscrollpane-2b2.js +++ /dev/null @@ -1,947 +0,0 @@ -/*! - * jScrollPane - v2.0.0beta2 - 2010-08-19 - * http://jscrollpane.kelvinluck.com/ - * - * Copyright (c) 2010 Kelvin Luck - * Dual licensed under the MIT or GPL licenses. - */ - -// Script: jScrollPane - cross browser customisable scrollbars -// -// *Version: 2.0.0beta2, Last updated: 2010-08-19* -// -// Project Home - http://jscrollpane.kelvinluck.com/ -// GitHub - http://github.com/vitch/jScrollPane -// Source - http://github.com/vitch/jScrollPane/raw/master/script/jquery.jscrollpane.js -// (Minified) - http://github.com/vitch/jScrollPane/raw/master/script/jquery.jscrollpane.min.js -// -// About: License -// -// Copyright (c) 2010 Kelvin Luck -// Dual licensed under the MIT or GPL Version 2 licenses. -// http://jscrollpane.kelvinluck.com/MIT-LICENSE.txt -// http://jscrollpane.kelvinluck.com/GPL-LICENSE.txt -// -// About: Examples -// -// All examples and demos are available through the jScrollPane example site at: -// http://jscrollpane.kelvinluck.com/ -// -// About: Support and Testing -// -// This plugin is tested on the browsers below and has been found to work reliably on them. If you run -// into a problem on one of the supported browsers then please visit the support section on the jScrollPane -// website (http://jscrollpane.kelvinluck.com/) for more information on getting support. You are also -// welcome to fork the project on GitHub if you can contribute a fix for a given issue. -// -// jQuery Versions - 1.4.2 -// Browsers Tested - Firefox 3.6.8, Safari 5, Opera 10.6, Chrome 5.0, IE 6, 7, 8 -// -// About: Release History -// -// 2.0.0beta2 - (2010-08-19) Bug fixes -// 2.0.0beta1 - (2010-08-17) Rewrite to follow modern best practices and enable horizontal scrolling, initially hidden -// elements and dynamically sized elements. -// 1.x - (2006-12-31 - 2010-07-31) Initial version, hosted at googlecode, deprecated - -(function($,window,undefined){ - - $.fn.jScrollPane = function(settings) - { - // JScrollPane "class" - public methods are available through $('selector').data('jsp') - function JScrollPane(elem, s) - { - - var settings, jsp = this, pane, paneWidth, paneHeight, container, contentWidth, contentHeight, - percentInViewH, percentInViewV, isScrollableV, isScrollableH, verticalDrag, dragMaxY, - verticalDragPosition, horizontalDrag, dragMaxX, horizontalDragPosition, - verticalBar, verticalTrack, scrollbarWidth, verticalTrackHeight, verticalDragHeight, arrowUp, arrowDown, - horizontalBar, horizontalTrack, horizontalTrackWidth, horizontalDragWidth, arrowLeft, arrowRight, - reinitialiseInterval, originalPadding, originalPaddingTotalWidth, previousPaneWidth; - - originalPadding = elem.css('paddingTop') + ' ' + - elem.css('paddingRight') + ' ' + - elem.css('paddingBottom') + ' ' + - elem.css('paddingLeft'); - originalPaddingTotalWidth = (parseInt(elem.css('paddingLeft')) || 0) + - (parseInt(elem.css('paddingRight')) || 0); - - initialise(s); - - function initialise(s) - { - - var clonedElem, tempWrapper, /*firstChild, lastChild, */isMaintainingPositon, lastContentX, lastContentY, - hasContainingSpaceChanged; - - settings = s; - - if (pane == undefined) { - - elem.css( - { - 'overflow': 'hidden', - 'padding': 0 - } - ); - // TODO: Deal with where width/ height is 0 as it probably means the element is hidden and we should - // come back to it later and check once it is unhidden... - paneWidth = elem.innerWidth() + originalPaddingTotalWidth; - paneHeight = elem.innerHeight(); - - pane = $('
').wrap( - $('
') - .css({ - 'width': paneWidth + 'px', - 'height': paneHeight + 'px' - } - ) - ); - - elem.wrapInner(pane.parent()); - // Need to get the vars after being added to the document, otherwise they reference weird - // disconnected orphan elements... - container = elem.find('>.jspContainer'); - pane = container.find('>.jspPane'); - pane.css('padding', originalPadding); - - /* - // Move any margins from the first and last children up to the container so they can still - // collapse with neighbouring elements as they would before jScrollPane - firstChild = pane.find(':first-child'); - lastChild = pane.find(':last-child'); - elem.css( - { - 'margin-top': firstChild.css('margin-top'), - 'margin-bottom': lastChild.css('margin-bottom') - } - ); - firstChild.css('margin-top', 0); - lastChild.css('margin-bottom', 0); - */ - } else { - hasContainingSpaceChanged = elem.outerWidth() != paneWidth || elem.outerHeight() != paneHeight; - - if (hasContainingSpaceChanged) { - paneWidth = elem.innerWidth(); - paneHeight = elem.innerHeight(); - container.css({ - 'width': paneWidth + 'px', - 'height': paneHeight + 'px' - }); - } - - previousPaneWidth = pane.innerWidth(); - pane.css('width', null); - - if (!hasContainingSpaceChanged && pane.outerWidth() == contentWidth && pane.outerHeight() == contentHeight) { - // Nothing has changed since we last initialised - if (isScrollableH || isScrollableV) { // If we had already set a width then re-set it - pane.css('width', previousPaneWidth + 'px'); - } - // Then abort... - return; - } - - container.find('>.jspVerticalBar,>.jspHorizontalBar').remove().end(); - } - - // Unfortunately it isn't that easy to find out the width of the element as it will always report the - // width as allowed by its container, regardless of overflow settings. - // A cunning workaround is to clone the element, set its position to absolute and place it in a narrow - // container. Now it will push outwards to its maxium real width... - clonedElem = pane.clone().css('position', 'absolute'); - tempWrapper = $('
').append(clonedElem); - $('body').append(tempWrapper); - contentWidth = Math.max(pane.outerWidth(), clonedElem.outerWidth()); - tempWrapper.remove(); - - contentHeight = pane.outerHeight(); - percentInViewH = contentWidth / paneWidth; - percentInViewV = contentHeight / paneHeight; - isScrollableV = percentInViewV > 1; - - isScrollableH = percentInViewH > 1; - - //console.log(paneWidth, paneHeight, contentWidth, contentHeight, percentInViewH, percentInViewV, isScrollableH, isScrollableV); - - if (!(isScrollableH || isScrollableV)) { - elem.removeClass('jspScrollable'); - pane.css('top', 0); - removeMousewheel(); - removeFocusHandler(); - unhijackInternalLinks(); - } else { - elem.addClass('jspScrollable'); - - isMaintainingPositon = settings.maintainPosition && (verticalDragPosition || horizontalDragPosition); - if (isMaintainingPositon) { - lastContentX = contentPositionX(); - lastContentY = contentPositionY(); - } - - initialiseVerticalScroll(); - initialiseHorizontalScroll(); - resizeScrollbars(); - - if (isMaintainingPositon) { - scrollToX(lastContentX); - scrollToY(lastContentY); - } - - initFocusHandler(); - observeHash(); - if (settings.hijackInternalLinks) { - hijackInternalLinks(); - } - } - - if (settings.autoReinitialise && !reinitialiseInterval) { - reinitialiseInterval = setInterval( - function() - { - initialise(settings); - }, - settings.autoReinitialiseDelay - ); - } else if (!settings.autoReinitialise && reinitialiseInterval) { - clearInterval(reinitialiseInterval) - } - } - - function initialiseVerticalScroll() - { - if (isScrollableV) { - - container.append( - $('
').append( - $('
'), - $('
').append( - $('
').append( - $('
'), - $('
') - ) - ), - $('
') - ) - ); - - verticalBar = container.find('>.jspVerticalBar'); - verticalTrack = verticalBar.find('>.jspTrack'); - verticalDrag = verticalTrack.find('>.jspDrag'); - - if (settings.showArrows) { - arrowUp = $('Scroll up').bind( - 'mousedown.jsp', getArrowScroll(0, -1) - ).bind('click.jsp', nil); - arrowDown = $('Scroll down').bind( - 'mousedown.jsp', getArrowScroll(0, 1) - ).bind('click.jsp', nil); - if (settings.arrowScrollOnHover) { - arrowUp.bind('mouseover.jsp', getArrowScroll(0, -1, arrowUp)); - arrowDown.bind('mouseover.jsp', getArrowScroll(0, 1, arrowDown)); - } - - appendArrows(verticalTrack, settings.verticalArrowPositions, arrowUp, arrowDown); - } - - verticalTrackHeight = paneHeight; - container.find('>.jspVerticalBar>.jspCap:visible,>.jspVerticalBar>.jspArrow').each( - function() - { - verticalTrackHeight -= $(this).outerHeight(); - } - ); - - - verticalDrag.hover( - function() - { - verticalDrag.addClass('jspHover'); - }, - function() - { - verticalDrag.removeClass('jspHover'); - } - ).bind( - 'mousedown.jsp', - function(e) - { - // Stop IE from allowing text selection - $('html').bind('dragstart.jsp selectstart.jsp', function() { return false; }); - - verticalDrag.addClass('jspActive'); - - var startY = e.pageY - verticalDrag.position().top; - - $('html').bind( - 'mousemove.jsp', - function(e) - { - positionDragY(e.pageY - startY, false); - } - ).bind('mouseup.jsp mouseleave.jsp', cancelDrag); - return false; - } - ); - sizeVerticalScrollbar(); - updateVerticalArrows(); - initMousewheel(); - } else { - // no vertical scroll - removeMousewheel(); - } - } - - function sizeVerticalScrollbar() - { - verticalTrack.height(verticalTrackHeight + 'px'); - verticalDragPosition = 0; - scrollbarWidth = settings.verticalGutter + verticalTrack.outerWidth(); - - // Make the pane thinner to allow for the vertical scrollbar - pane.width(paneWidth - scrollbarWidth - originalPaddingTotalWidth); - - // Add margin to the left of the pane if scrollbars are on that side (to position - // the scrollbar on the left or right set it's left or right property in CSS) - if (verticalBar.position().left == 0) { - pane.css('margin-left', scrollbarWidth + 'px'); - } - } - - function initialiseHorizontalScroll() - { - if (isScrollableH) { - - container.append( - $('
').append( - $('
'), - $('
').append( - $('
').append( - $('
'), - $('
') - ) - ), - $('
') - ) - ); - - horizontalBar = container.find('>.jspHorizontalBar'); - horizontalTrack = horizontalBar.find('>.jspTrack'); - horizontalDrag = horizontalTrack.find('>.jspDrag'); - - if (settings.showArrows) { - arrowLeft = $('Scroll left').bind( - 'mousedown.jsp', getArrowScroll(-1, 0) - ).bind('click.jsp', nil); - arrowRight = $('Scroll right').bind( - 'mousedown.jsp', getArrowScroll(1, 0) - ).bind('click.jsp', nil); - if (settings.arrowScrollOnHover) { - arrowLeft.bind('mouseover.jsp', getArrowScroll(-1, 0, arrowLeft)); - arrowRight.bind('mouseover.jsp', getArrowScroll(1, 0, arrowRight)); - } - appendArrows(horizontalTrack, settings.horizontalArrowPositions, arrowLeft, arrowRight); - } - - horizontalDrag.hover( - function() - { - horizontalDrag.addClass('jspHover'); - }, - function() - { - horizontalDrag.removeClass('jspHover'); - } - ).bind( - 'mousedown.jsp', - function(e) - { - // Stop IE from allowing text selection - $('html').bind('dragstart.jsp selectstart.jsp', function() { return false; }); - - horizontalDrag.addClass('jspActive'); - - var startX = e.pageX - horizontalDrag.position().left; - - $('html').bind( - 'mousemove.jsp', - function(e) - { - positionDragX(e.pageX - startX, false); - } - ).bind('mouseup.jsp mouseleave.jsp', cancelDrag); - return false; - } - ); - horizontalTrackWidth = container.innerWidth(); - sizeHorizontalScrollbar(); - updateHorizontalArrows(); - } else { - // no horizontal scroll - } - } - - function sizeHorizontalScrollbar() - { - - container.find('>.jspHorizontalBar>.jspCap:visible,>.jspHorizontalBar>.jspArrow').each( - function() - { - horizontalTrackWidth -= $(this).outerWidth(); - } - ); - - horizontalTrack.width(horizontalTrackWidth + 'px'); - horizontalDragPosition = 0; - } - - function resizeScrollbars() - { - if (isScrollableH && isScrollableV) { - var horizontalTrackHeight = horizontalTrack.outerHeight(), - verticalTrackWidth = verticalTrack.outerWidth(); - verticalTrackHeight -= horizontalTrackHeight; - $(horizontalBar).find('>.jspCap:visible,>.jspArrow').each( - function() - { - horizontalTrackWidth += $(this).outerWidth(); - } - ); - horizontalTrackWidth -= verticalTrackWidth; - paneHeight -= verticalTrackWidth; - paneWidth -= horizontalTrackHeight; - horizontalTrack.parent().append( - $('
').css('width', horizontalTrackHeight + 'px') - ); - sizeVerticalScrollbar(); - sizeHorizontalScrollbar(); - } - // reflow content - if (isScrollableH) { - pane.width((container.outerWidth() - originalPaddingTotalWidth) + 'px'); - } - contentHeight = pane.outerHeight(); - percentInViewV = contentHeight / paneHeight; - - if (isScrollableH) { - horizontalDragWidth = 1 / percentInViewH * horizontalTrackWidth; - if (horizontalDragWidth > settings.horizontalDragMaxWidth) { - horizontalDragWidth = settings.horizontalDragMaxWidth; - } else if (horizontalDragWidth < settings.horizontalDragMinWidth) { - horizontalDragWidth = settings.horizontalDragMinWidth; - } - horizontalDrag.width(horizontalDragWidth + 'px'); - dragMaxX = horizontalTrackWidth - horizontalDragWidth; - } - if (isScrollableV) { - verticalDragHeight = 1 / percentInViewV * verticalTrackHeight; - if (verticalDragHeight > settings.verticalDragMaxHeight) { - verticalDragHeight = settings.verticalDragMaxHeight; - } else if (verticalDragHeight < settings.verticalDragMinHeight) { - verticalDragHeight = settings.verticalDragMinHeight; - } - verticalDrag.height(verticalDragHeight + 'px'); - dragMaxY = verticalTrackHeight - verticalDragHeight; - } - } - - function appendArrows(ele, p, a1, a2) - { - var p1 = "before", p2 = "after", aTemp; - - // Sniff for mac... Is there a better way to determine whether the arrows would naturally appear - // at the top or the bottom of the bar? - if (p == "os") { - p = /Mac/.test(navigator.platform) ? "after" : "split"; - } - if (p == p1) { - p2 = p; - } else if (p == p2) { - p1 = p; - aTemp = a1; - a1 = a2; - a2 = aTemp; - } - - ele[p1](a1)[p2](a2); - } - - function getArrowScroll(dirX, dirY, ele) { - return function() - { - arrowScroll(dirX, dirY, this, ele); - this.blur(); - return false; - } - } - - function arrowScroll(dirX, dirY, arrow, ele) - { - arrow = $(arrow).addClass('jspActive'); - - var eve, doScroll = function() - { - if (dirX != 0) { - positionDragX(horizontalDragPosition + dirX * settings.arrowButtonSpeed, false); - } - if (dirY != 0) { - positionDragY(verticalDragPosition + dirY * settings.arrowButtonSpeed, false); - } - }, - scrollInt = setInterval(doScroll, settings.arrowRepeatFreq); - - doScroll(); - - eve = ele == undefined ? 'mouseup.jsp' : 'mouseout.jsp'; - ele = ele || $('html'); - ele.bind( - eve, - function() - { - arrow.removeClass('jspActive'); - clearInterval(scrollInt); - ele.unbind(eve); - } - ); - } - - function cancelDrag() - { - $('html').unbind('dragstart.jsp selectstart.jsp mousemove.jsp mouseup.jsp mouseleave.jsp'); - - verticalDrag && verticalDrag.removeClass('jspActive'); - horizontalDrag && horizontalDrag.removeClass('jspActive'); - } - - function positionDragY(destY, animate) - { - if (!isScrollableV) { - return; - } - if (destY < 0) { - destY = 0; - } else if (destY > dragMaxY) { - destY = dragMaxY; - } - - // can't just check if(animate) because false is a valid value that could be passed in... - if (animate == undefined) { - animate = settings.animateScroll; - } - if (animate) { - jsp.animate(verticalDrag, 'top', destY, _positionDragY); - } else { - verticalDrag.css('top', destY); - _positionDragY(destY); - } - - } - - function _positionDragY(destY) - { - if (destY == undefined) { - destY = verticalDrag.position().top; - } - - container.scrollTop(0); - verticalDragPosition = destY; - - var isAtTop = verticalDragPosition == 0, - isAtBottom = verticalDragPosition == dragMaxY, - percentScrolled = destY/ dragMaxY, - destTop = -percentScrolled * (contentHeight - paneHeight); - - updateVerticalArrows(isAtTop, isAtBottom); - pane.css('top', destTop); - elem.trigger('jsp-scroll-y', [-destTop, isAtTop, isAtBottom]); - } - - function positionDragX(destX, animate) - { - if (!isScrollableH) { - return; - } - if (destX < 0) { - destX = 0; - } else if (destX > dragMaxX) { - destX = dragMaxX; - } - - if (animate == undefined) { - animate = settings.animateScroll; - } - if (animate) { - jsp.animate(horizontalDrag, 'left', destX, _positionDragX); - } else { - horizontalDrag.css('left', destX); - _positionDragX(destX); - } - } - - function _positionDragX(destX) - { - if (destX == undefined) { - destX = horizontalDrag.position().left; - } - - container.scrollTop(0); - horizontalDragPosition = destX; - - var isAtLeft = horizontalDragPosition == 0, - isAtRight = horizontalDragPosition == dragMaxY, - percentScrolled = destX / dragMaxX, - destLeft = -percentScrolled * (contentWidth - paneWidth); - - updateHorizontalArrows(isAtLeft, isAtRight); - pane.css('left', destLeft); - elem.trigger('jsp-scroll-x', [-destLeft, isAtLeft, isAtRight]); - } - - function updateVerticalArrows(isAtTop, isAtBottom) - { - if (settings.showArrows) { - arrowUp[isAtTop ? 'addClass' : 'removeClass']('jspDisabled'); - arrowDown[isAtBottom ? 'addClass' : 'removeClass']('jspDisabled'); - } - } - - function updateHorizontalArrows(isAtLeft, isAtRight) - { - if (settings.showArrows) { - arrowLeft[isAtLeft ? 'addClass' : 'removeClass']('jspDisabled'); - arrowRight[isAtRight ? 'addClass' : 'removeClass']('jspDisabled'); - } - } - - function scrollToY(destY, animate) - { - var percentScrolled = destY / (contentHeight - paneHeight); - positionDragY(percentScrolled * dragMaxY, animate); - } - - function scrollToX(destX, animate) - { - var percentScrolled = destX / (contentWidth - paneWidth); - positionDragX(percentScrolled * dragMaxX, animate); - } - - function scrollToElement(ele, stickToTop, animate) - { - var e, eleHeight, eleTop = 0, viewportTop, maxVisibleEleTop, destY; - - // Legal hash values aren't necessarily legal jQuery selectors so we need to catch any - // errors from the lookup... - try { - e = $(ele); - } catch (err) { - return; - } - eleHeight = e.outerHeight(); - - container.scrollTop(0); - - // loop through parents adding the offset top of any elements that are relatively positioned between - // the focused element and the jspPane so we can get the true distance from the top - // of the focused element to the top of the scrollpane... - while (!e.is('.jspPane')) { - eleTop += e.position().top; - e = e.offsetParent(); - if (/^body|html$/i.test(e[0].nodeName)) { - // we ended up too high in the document structure. Quit! - return; - } - } - - - viewportTop = contentPositionY(); - maxVisibleEleTop = viewportTop + paneHeight; - if (eleTop < viewportTop || stickToTop) { // element is above viewport - destY = eleTop - settings.verticalGutter; - } else if (eleTop + eleHeight > maxVisibleEleTop) { // element is below viewport - destY = eleTop - paneHeight + eleHeight + settings.verticalGutter; - } - if (destY) { - scrollToY(destY, animate); - } - // TODO: Implement automatic horizontal scrolling? - } - - function contentPositionX() - { - return -pane.position().left; - } - - function contentPositionY() - { - return -pane.position().top; - } - - function initMousewheel() - { - container.unbind('mousewheel.jsp').bind( - 'mousewheel.jsp', - function (event, delta) { - var d = verticalDragPosition; - positionDragY(verticalDragPosition - delta * settings.mouseWheelSpeed, false); - // return true if there was no movement so rest of screen can scroll - return d == verticalDragPosition; - } - ); - } - - function removeMousewheel() - { - container.unbind('mousewheel.jsp'); - } - - function nil() - { - return false; - } - - function initFocusHandler() - { - pane.find(':input,a').bind( - 'focus.jsp', - function() - { - scrollToElement(this, false); - } - ); - } - - function removeFocusHandler() - { - - pane.find(':input,a').unbind('focus.jsp') - } - - function observeHash() - { - if (location.hash && location.hash.length > 1) { - var e, retryInt; - try { - e = $(location.hash); - } catch (err) { - return; - } - - if (e.length && pane.find(e)) { - // nasty workaround but it appears to take a little while before the hash has done its thing - // to the rendered page so we just wait until the container's scrollTop has been messed up. - if (container.scrollTop() == 0) { - retryInt = setInterval( - function() - { - if (container.scrollTop() > 0) { - scrollToElement(location.hash, true); - $(document).scrollTop(container.position().top); - clearInterval(retryInt); - } - }, - 50 - ) - } else { - scrollToElement(location.hash, true); - $(document).scrollTop(container.position().top); - } - } - } - } - - function unhijackInternalLinks() - { - $('a.jspHijack').unbind('click.jsp-hijack').removeClass('jspHijack'); - } - - function hijackInternalLinks() - { - unhijackInternalLinks(); - $('a[href^=#]').addClass('jspHijack').bind( - 'click.jsp-hijack', - function() - { - var uriParts = this.href.split('#'), hash; - if (uriParts.length > 1) { - hash = uriParts[1]; - if (hash.length > 0 && pane.find('#' + hash).length > 0) { - scrollToElement('#' + hash, true); - // Need to return false otherwise things mess up... Would be nice to maybe also scroll - // the window to the top of the scrollpane? - return false; - } - } - } - ) - } - - // Public API - $.extend( - jsp, - { - // Reinitialises the scroll pane (if it's internal dimensions have changed since the last time it - // was initialised). The settings object which is passed in will override any settings from the - // previous time it was initialised - if you don't pass any settings then the ones from the previous - // initialisation will be used. - reinitialise: function(s) - { - s = $.extend({}, s, settings); - initialise(s); - }, - // Scrolls the specified element (a jQuery object, DOM node or jQuery selector string) into view so - // that it can be seen within the viewport. If stickToTop is true then the element will appear at - // the top of the viewport, if it is false then the viewport will scroll as little as possible to - // show the element. You can also specify if you want animation to occur. If you don't provide this - // argument then the animateScroll value from the settings object is used instead. - scrollToElement: function(ele, stickToTop, animate) - { - scrollToElement(ele, stickToTop, animate); - }, - // Scrolls the pane so that the specified co-ordinates within the content are at the top left - // of the viewport. animate is optional and if not passed then the value of animateScroll from - // the settings object this jScrollPane was initialised with is used. - scrollTo: function(destX, destY, animate) - { - scrollToX(destX, animate); - scrollToY(destY, animate); - }, - // Scrolls the pane so that the specified co-ordinate within the content is at the left of the - // viewport. animate is optional and if not passed then the value of animateScroll from the settings - // object this jScrollPane was initialised with is used. - scrollToX: function(destX, animate) - { - scrollToX(destX, animate); - }, - // Scrolls the pane so that the specified co-ordinate within the content is at the top of the - // viewport. animate is optional and if not passed then the value of animateScroll from the settings - // object this jScrollPane was initialised with is used. - scrollToY: function(destY, animate) - { - scrollToY(destY, animate); - }, - // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then - // the value of animateScroll from the settings object this jScrollPane was initialised with is used. - scrollBy: function(deltaX, deltaY, animate) - { - jsp.scrollByX(deltaX, animate); - jsp.scrollByY(deltaY, animate); - }, - // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then - // the value of animateScroll from the settings object this jScrollPane was initialised with is used. - scrollByX: function(deltaX, animate) - { - var destX = contentPositionX() + deltaX, - percentScrolled = destX / (contentWidth - paneWidth); - positionDragX(percentScrolled * dragMaxX, animate); - }, - // Scrolls the pane by the specified amount of pixels. animate is optional and if not passed then - // the value of animateScroll from the settings object this jScrollPane was initialised with is used. - scrollByY: function(deltaY, animate) - { - var destY = contentPositionY() + deltaY, - percentScrolled = destY / (contentHeight - paneHeight); - positionDragY(percentScrolled * dragMaxY, animate); - }, - // This method is called when jScrollPane is trying to animate to a new position. You can override - // it if you want to provide advanced animation functionality. It is passed the following arguments: - // * ele - the element whose position is being animated - // * prop - the property that is being animated - // * value - the value it's being animated to - // * stepCallback - a function that you must execute each time you update the value of the property - // You can use the default implementation (below) as a starting point for your own implementation. - animate: function(ele, prop, value, stepCallback) - { - var params = {}; - params[prop] = value; - ele.animate( - params, - { - 'duration' : settings.animateDuration, - 'ease' : settings.animateEase, - 'queue' : false, - 'step' : stepCallback - } - ); - }, - // Returns the current x position of the viewport with regards to the content pane. - getContentPositionX: function() - { - return contentPositionX(); - }, - // Returns the current y position of the viewport with regards to the content pane. - getContentPositionY: function() - { - return contentPositionY(); - }, - // Gets a reference to the content pane. It is important that you use this method if you want to - // edit the content of your jScrollPane as if you access the element directly then you may have some - // problems (as your original element has had additional elements for the scrollbars etc added into - // it). - getContentPane: function() - { - return pane; - }, - // Scrolls this jScrollPane down as far as it can currently scroll. If animate isn't passed then the - // animateScroll value from settings is used instead. - scrollToBottom: function(animate) - { - positionDragY(dragMaxY, animate); - }, - // Hijacks the links on the page which link to content inside the scrollpane. If you have changed - // the content of your page (e.g. via AJAX) and want to make sure any new anchor links to the - // contents of your scroll pane will work then call this function. - hijackInternalLinks: function() - { - hijackInternalLinks(); - } - } - ); - } - - // Pluginifying code... - - settings = $.extend({}, $.fn.jScrollPane.defaults, settings); - - var ret; - this.each( - function() - { - var elem = $(this), jspApi = elem.data('jsp'); - if (jspApi) { - jspApi.reinitialise(settings); - } else { - jspApi = new JScrollPane(elem, settings); - elem.data('jsp', jspApi); - } - ret = ret ? ret.add(elem) : elem; - } - ) - return ret; - }; - - $.fn.jScrollPane.defaults = { - 'showArrows' : false, - 'maintainPosition' : true, - 'autoReinitialise' : false, - 'autoReinitialiseDelay' : 500, - 'verticalDragMinHeight' : 0, - 'verticalDragMaxHeight' : 99999, - 'horizontalDragMinWidth' : 0, - 'horizontalDragMaxWidth' : 99999, - 'animateScroll' : false, - 'animateDuration' : 300, - 'animateEase' : 'linear', - 'hijackInternalLinks' : false, - 'verticalGutter' : 4, - 'horizontalGutter' : 4, - 'mouseWheelSpeed' : 10, - 'arrowButtonSpeed' : 10, - 'arrowRepeatFreq' : 100, - 'arrowScrollOnHover' : false, - 'verticalArrowPositions' : 'split', - 'horizontalArrowPositions' : 'split' - }; - -})(jQuery,this); - diff --git a/libs/bower_components/jScrollPane/issues/7/native.html b/libs/bower_components/jScrollPane/issues/7/native.html deleted file mode 100644 index 51d0c8e6dc..0000000000 --- a/libs/bower_components/jScrollPane/issues/7/native.html +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - jScrollPane 2 reinit bug? - - - - - - - - -
-
    -
  • scrollable list box
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • - -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • - -
  • the next list item
  • -
-
- -
-
    -
  • scrollable list box
  • -
  • list item
  • - -
  • another list item
  • -
-
- -
-
    -
  • scrollable list box
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • - -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • - -
  • the next list item
  • -
-
- -
-
    -
  • scrollable list box
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • - -
  • another list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • - -
  • list item
  • -
  • another list item
  • -
  • the next list item
  • -
  • the next list item
  • -
  • list item
  • -
  • another list item
  • - -
  • the next list item
  • -
-
- - -

- -

In the above testcase: reinitialising jScrollPane (either via the api or simply by re-calling .jScrollPane() on the original element) strips out the width of the div.jspPane and causes a rendering issue: the absolutely-positioned div renders only as wide as its text content. The expected behavior is that it'll fill the available width, as it does on page load after the first call to .jScrollPane().

- - -

UPDATE: this is fixed for scrollable content in v2b2, but when the content is not scrollable there's still undesired rendering on first load.

- -

Additionally, padding calculations might need some tweaks. The third list box here is identical to the first two except for an added 5px of padding all the way around: note how the jspVerticalBar is partially pushed out of view.

- - - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/known_issues.html b/libs/bower_components/jScrollPane/known_issues.html deleted file mode 100644 index 4879af3dde..0000000000 --- a/libs/bower_components/jScrollPane/known_issues.html +++ /dev/null @@ -1,62 +0,0 @@ - - - - - jScrollPane - known issues - - - - - - - - - - - -
-

jScrollPane - cross browser styleable scrollbars with jQuery and CSS

-

- This page discusses known issues with jScrollPane and provides suggested workarounds for these issues. -

-

In Opera the main window scrollbar appears when a jScrollPane contains lots of content

-

- As far as I can tell this is due to a bug in Opera. The workaround is to include something absolutely - positioned as a parent of your jScrollPane. See - this bug report (from the previous version of jScrollPane) for discussion of this problem. -

-

In Webkit browsers CSS must be included before Javascript

-

- For jScrollPane to work correctly in Webkit based browsers (e.g. Safari, Chrome, iOS and Android) then - the CSS must be included above your javascript includes. Otherwise jScrollPane can't correctly measure - the size of the item you are applying jScrollPane to. See all of the - example or theme pages for a reference as to the correct ordering - of items in your <head>. -

-

Width specified directly on an element you apply jScrollPane to will be overwritten

-

- If you apply a width to an element (e.g. via jQuery's width method or via a style attribute) then this - width will be overwritten when you reinitialise the scrollpane. Unforunately I can't find a way to avoid - this and still support percentage based widths for elements/ -

-

- As a workaround you can specify the width via a CSS class refering to a stylesheet rule. If you can't do - this (e.g. you calculate the width dynamically) you will have to wrap your element in an additional div - and apply the width to that element while setting the width of your element to 100% via the stylesheet. -

-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/less_basic.html b/libs/bower_components/jScrollPane/less_basic.html deleted file mode 100644 index 74ecee9084..0000000000 --- a/libs/bower_components/jScrollPane/less_basic.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - Less basic jScrollPane demo - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - less basic demo page

-

- This page shows some slightly more complex features of jScrollPane... Matching multiple elements but - allowing each to work independantly, reinitialising when you call it - again etc... Note that you need to use the API to getContentPane - to add and remove content (as your original element now contains the scrollbars etc). -

-

Pane 1

-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-

Pane 2

-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/mwheel_intent.html b/libs/bower_components/jScrollPane/mwheel_intent.html deleted file mode 100644 index 821f83bb99..0000000000 --- a/libs/bower_components/jScrollPane/mwheel_intent.html +++ /dev/null @@ -1,209 +0,0 @@ - - - - - jScrollPane mwheelIntent demo - - - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - mwheelIntent demo page

-

- This demonstration shows how the - mwheelIntent plugin can be used to increase the usability of jScrollPane when using the mouse wheel. - Note that when you scroll this page the body continues to scroll unless you stop scrolling and move your - mouse over a jScrollPane. -

-

- To use the mwheelIntent plugin with jScrollPane simply include it in the head of your document (as I - do above). -

- -

Vertical only

-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-

Horizontal only

-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-
-

Both

-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/override_animate.html b/libs/bower_components/jScrollPane/override_animate.html deleted file mode 100644 index 32275155b9..0000000000 --- a/libs/bower_components/jScrollPane/override_animate.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - jScrollPane override animate demo page - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - overriding animate example

-

- This example extends the scroll to animate example to show how you - can override the animate method of the jScrollPane API to implement your - own custom animation. -

-

- For the purposes of the demo we simply implement an animation which jumps to the end point (i.e. doesn't - animate at all!) but it shows how you would hook your custom code in... -

-
-
-
- scrollTo functionality - - - - - -
- -
-
- scrollBy functionality - - - - - -
- -
-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/runeimp.html b/libs/bower_components/jScrollPane/runeimp.html deleted file mode 100644 index 90010f3b01..0000000000 --- a/libs/bower_components/jScrollPane/runeimp.html +++ /dev/null @@ -1,314 +0,0 @@ - - - - - jScrollPane - RuneImp demo - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - RuneImp demo page

-

- This demonstration tries to recreate the situation described in - this support ticket to fix - the problem and verify the fix. If you view this example page with javascript disabled and then with it - enabled you will see that the result is almost identical in terms of scrollbar placement and content - padding. -

-

- After looking at this example it occured to me that the aim of the layout could probably be better served - by using margins as well as padding so I put together a follow on example. -

- -

Panes

-
-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-
-
-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-
-
-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-
-
-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/runeimp2.html b/libs/bower_components/jScrollPane/runeimp2.html deleted file mode 100644 index c1a420720f..0000000000 --- a/libs/bower_components/jScrollPane/runeimp2.html +++ /dev/null @@ -1,320 +0,0 @@ - - - - - jScrollPane - RuneImp demo 2 - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - RuneImp demo 2 page

-

- This demonstration is an extension of the RuneImp demo to verify that - jScrollPane works correctly when the gap between the sections is specified as margin on the container - (rather than padding on the element). As you can see, I still using padding on the left hand side of - the scrolling element to bring the text in from the edge but I also use margins to make the space on - the right hand side of the scrollbars. -

-

- Note that I've made the background of .scroll-pane white in this example to demonstrate that the gap - is margin rather than padding. You can also change the margin rules on .section and .last to padding and - the layout will continue to work as expected. -

- -

Panes

-
-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-
-
-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-
-
-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-
-
-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/scroll_on_left.html b/libs/bower_components/jScrollPane/scroll_on_left.html deleted file mode 100644 index 6fc1c5eaba..0000000000 --- a/libs/bower_components/jScrollPane/scroll_on_left.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - jScrollPane demo - scroll on left hand side - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - scroll on left demo

-

- This demonstration shows how you can make the jScrollPane scrollbars appear on the left hand side of - your content. You simply set "left: 0" on the .jspVerticalBar class (this overrides the "right: 0" in - the jquery.jscrollpane.css file). -

-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/scroll_to.html b/libs/bower_components/jScrollPane/scroll_to.html deleted file mode 100644 index e475ead469..0000000000 --- a/libs/bower_components/jScrollPane/scroll_to.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - jScrollPane scrollTo/ scrollBy demo page - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - scrollTo/ scrollBy page

-

- This example shows how you can use the jScrollPane API to tell a scrollpane - to scrollTo a particular place or scrollBy - a particular amount. Use the form below to experiment with this functionality: -

-
-
-
- scrollTo functionality - - - - - -
- -
-
- scrollBy functionality - - - - - -
- -
-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/scroll_to_animate.html b/libs/bower_components/jScrollPane/scroll_to_animate.html deleted file mode 100644 index 5d2dd5882a..0000000000 --- a/libs/bower_components/jScrollPane/scroll_to_animate.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - jScrollPane scrollTo/ scrollBy with animation demo page - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - scrollTo/ scrollBy with animation page

-

- This example extends the basic scrollTo/ scrollBy demo and passes - animateScroll: true in the settings. - This means that when you call scrollTo or - scrollBy the transition to the new state is animated. -

-

- Note that the animate function which is called is a property on the - jScrollPane API method. This means that you are free to overwrite it if you want to implement custom - animation settings for your paricular use case. If you just want to tweak the speed and easing of the - default animation then you can use the animateDuration and - animateEase settings properties. -

-
-
-
- scrollTo functionality - - - - - -
- -
-
- scrollBy functionality - - - - - -
- -
-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/settings.html b/libs/bower_components/jScrollPane/settings.html deleted file mode 100644 index dd62ca0105..0000000000 --- a/libs/bower_components/jScrollPane/settings.html +++ /dev/null @@ -1,200 +0,0 @@ - - - - - jScrollPane - settings object documentation - - - - - - - - - - - -
-

jScrollPane - settings object documentation

-

- This page details the various options that you can pass into the settings object when you initialise - jScrollPane. Note that there is also a number of changes you can make through the - API after the scrollpane is already initialised and a number of events you - can listen to. -

-

showArrows - boolean (default false)

-

- Whether arrows should be shown on the generated scroll pane. When set to false only the scrollbar track - and drag will be shown, if set to true then arrows buttons will also be shown. - Demo. -

-

maintainPosition - boolean (default true)

-

- Whether the scrollpane should attempt to maintain it's position whenever it is reinitialised. If true - then the viewport of the scrollpane will remain the same when it is reinitialised, if false then the - viewport will jump back up to the top when the scrollpane is reinitialised. See also - stickToBottom and stickToRight. -

-

stickToBottom- boolean (default false)

-

- If maintainPosition is true and the scrollpane is scrolled to the - bottom then the scrollpane then the scrollpane will remain scrolled to the bottom even if new content - is added to the pane which makes it taller. -

-

stickToRight- boolean (default false)

-

- If maintainPosition is true and the scrollpane is scrolled to its - right edge then the scrollpane then the scrollpane will remain scrolled to the right edge even if new - content is added to the pane which makes it wider. -

-

autoReinitialise - boolean (default false)

-

- Whether jScrollPane should automatically reinitialise itself periodically after you have initially - initialised it. This can help with instances when the size of the content of the scrollpane (or the - surrounding element) changes. However, it does involve an overhead of running a javascript function on - a timer so it is recommended only to activate where necessary. Demo. -

-

autoReinitialiseDelay - int (default 500)

-

- The number of milliseconds between each reinitialisation (if autoReinitialise - is true). -

-

verticalDragMinHeight - int (default 0)

-

- The smallest height that the vertical drag can have. The size of the drag elements is based on the - proportion of the size of the content to the size of the viewport but is contrained within the minimum - and maximum dimensions given. Demo. -

-

verticalDragMaxHeight - int (default 99999)

-

- See verticalDragMinHeight. -

-

horizontalDragMinWidth - int (default 0)

-

- See verticalDragMinHeight. -

-

horizontalDragMaxWidth - int (default 99999)

-

- See verticalDragMinHeight. -

-

contentWidth - int (default undefined)

-

- The width of the content of the scroll pane. The default value of undefined will allow jScrollPane to - calculate the width of it's content. However, in some cases you will want to disable this (e.g. to - prevent horizontal scrolling or where the calculation of the size of the content doesn't return reliable - results) -

-

animateScroll - boolean (default false)

-

- Whether to use animation when calling scrollTo or - scrollBy. You can control the animation speed and easing by using the - animateDuration and animateEase settings or if you want to exercise more - complete control then you can override the animate API method. - Demo. -

-

animateDuration - int (default 300)

-

- The number of milliseconds taken to animate to a new position (see animateScroll - ). -

-

animateEase - string (default 'linear')

-

- The type of easing to use when animating to a new position (see animateScroll - and easing). -

- -

- Whether internal links on the page should be hijacked so that if they point so content within a - jScrollPane then they automatically scroll the jScrollPane to the correct place. - Demo. -

-

verticalGutter - int (default 4)

-

- The amount of space between the side of the content and the vertical scrollbar. -

-

horizontalGutter - int (default 4)

-

- The amount of space between the bottom of the content and the horizontal scrollbar. -

-

mouseWheelSpeed - int (default 10)

-

- A multiplier which is used to control the amount that the scrollpane scrolls each time the mouse wheel - is turned. -

-

arrowButtonSpeed - int (default 10)

-

- A multiplier which is used to control the amount that the scrollpane scrolls each time on of the arrow - buttons is pressed. -

-

arrowRepeatFreq - int (default 100)

-

- The number of milliseconds between each repeated scroll event when the mouse is held down over one of - the arrow keys. -

-

arrowScrollOnHover - boolean (default false)

-

- Whether the arrow buttons should cause the jScrollPane to scroll while you are hovering over them. - Demo. -

-

- verticalArrowPositions - string [split|before|after|os] (default split) -

-

- Where the vertical arrows should appear relative to the vertical track. - Demo. -

-

- horizontalArrowPositions - string [split|before|after|os] (default split) -

-

- Where the horizontal arrows should appear relative to the horizontal track. - Demo. -

-

- enableKeyboardNavigation - boolean (default true) -

-

- Whether keyboard navigation should be enabled (e.g. whether the user can focus the scrollpane and then - use the arrow (and other) keys to navigate around. -

-

- hideFocus - boolean (default false) -

-

- Whether the focus outline should be hidden in all browsers. For best accessibility you should not change - this option. You can style the outline with the CSS property outline and outline-offset. -

-

- clickOnTrack - boolean (default true) -

-

- Whether clicking on the track (e.g. the area behind the drag) should scroll towards the point clicked on. - Defaults to true as this is the native behaviour in these situations. -

-

trackClickSpeed - int (default 30)

-

- A multiplier which is used to control the amount that the scrollpane scrolls each trackClickRepeatFreq - while the mouse button is held down over the track. -

-

trackClickRepeatFreq - int (default 100)

-

- The number of milliseconds between each repeated scroll event when the mouse is held down over the - track. -

- -
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/short.html b/libs/bower_components/jScrollPane/short.html deleted file mode 100644 index 6b216c98e6..0000000000 --- a/libs/bower_components/jScrollPane/short.html +++ /dev/null @@ -1,82 +0,0 @@ - - - - - Short jScrollPane demo - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - demo page showing "no scroll necessary"

-

- This demonstration shows how jScrollPane won't add scrollbars if you apply it to an element which - doesn't require scrolling. -

-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/themes/lozenge/image/ui-icons_222222_256x240.png b/libs/bower_components/jScrollPane/themes/lozenge/image/ui-icons_222222_256x240.png deleted file mode 100755 index b273ff111d..0000000000 Binary files a/libs/bower_components/jScrollPane/themes/lozenge/image/ui-icons_222222_256x240.png and /dev/null differ diff --git a/libs/bower_components/jScrollPane/themes/lozenge/image/ui-icons_888888_256x240.png b/libs/bower_components/jScrollPane/themes/lozenge/image/ui-icons_888888_256x240.png deleted file mode 100755 index 6d02426c11..0000000000 Binary files a/libs/bower_components/jScrollPane/themes/lozenge/image/ui-icons_888888_256x240.png and /dev/null differ diff --git a/libs/bower_components/jScrollPane/themes/lozenge/image/ui-icons_cd0a0a_256x240.png b/libs/bower_components/jScrollPane/themes/lozenge/image/ui-icons_cd0a0a_256x240.png deleted file mode 100755 index 2ab019b73e..0000000000 Binary files a/libs/bower_components/jScrollPane/themes/lozenge/image/ui-icons_cd0a0a_256x240.png and /dev/null differ diff --git a/libs/bower_components/jScrollPane/themes/lozenge/index.html b/libs/bower_components/jScrollPane/themes/lozenge/index.html deleted file mode 100644 index e2092b6d83..0000000000 --- a/libs/bower_components/jScrollPane/themes/lozenge/index.html +++ /dev/null @@ -1,337 +0,0 @@ - - - - - jScrollPane theme demo: Lozenge - - - - - - - - - - - - - - - - - - - - - - - -
-

jScrollPane - lozenge theme

-

- Lozenge is a very simple theme with rounded corners for the drag element (on browsers which support the - relevant CSS properties) and simple arrow graphics (borrowed from the jQuery UI - Lightness theme). It also supports hover and disabled - states for the various elements. -

-

Vertical only

-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-

Vertical with arrows

-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-

Horizontal only

-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-
-

Horizontal only with arrows

-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-
-

Both

-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-

Both with arrows

-
-

- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec in ligula id sem tristique ultrices - eget id neque. Duis enim turpis, tempus at accumsan vitae, lobortis id sapien. Pellentesque nec orci - mi, in pharetra ligula. Nulla facilisi. Nulla facilisi. Mauris convallis venenatis massa, quis - consectetur felis ornare quis. Sed aliquet nunc ac ante molestie ultricies. Nam pulvinar ultricies - bibendum. Vivamus diam leo, faucibus et vehicula eu, molestie sit amet dui. Proin nec orci et elit - semper ultrices. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus - mus. Sed quis urna mi, ac dignissim mauris. Quisque mollis ornare mauris, sed laoreet diam malesuada - quis. Proin vel elementum ante. Donec hendrerit arcu ac odio tincidunt posuere. Vestibulum nec risus - eu lacus semper viverra. -

-

- Vestibulum dictum consectetur magna eu egestas. Praesent molestie dapibus erat, sit amet sodales - lectus congue ut. Nam adipiscing, tortor ac blandit egestas, lorem ligula posuere ipsum, nec - faucibus nisl enim eu purus. Quisque bibendum diam quis nunc eleifend at molestie libero tincidunt. - Quisque tincidunt sapien a sapien pellentesque consequat. Mauris adipiscing venenatis augue ut - tempor. Donec auctor mattis quam quis aliquam. Nullam ultrices erat in dolor pharetra bibendum. - Suspendisse eget odio ut libero imperdiet rhoncus. Curabitur aliquet, ipsum sit amet aliquet varius, - est urna ullamcorper magna, sed eleifend libero nunc non erat. Vivamus semper turpis ac turpis - volutpat non cursus velit aliquam. Fusce id tortor id sapien porta egestas. Nulla venenatis luctus - libero et suscipit. Sed sed purus risus. Donec auctor, leo nec eleifend vehicula, lacus felis - sollicitudin est, vitae lacinia lectus urna nec libero. Aliquam pellentesque, arcu condimentum - pharetra vestibulum, lectus felis malesuada felis, vel fringilla dolor dui tempus nisi. In hac - habitasse platea dictumst. Ut imperdiet mauris vitae eros varius eget accumsan lectus adipiscing. -

-

- Quisque et massa leo, sit amet adipiscing nisi. Mauris vel condimentum dolor. Duis quis ullamcorper - eros. Proin metus dui, facilisis id bibendum sed, aliquet non ipsum. Aenean pulvinar risus eu nisi - dictum eleifend. Maecenas mattis dolor eget lectus pretium eget molestie libero auctor. Praesent sit - amet tellus sed nibh convallis semper. Curabitur nisl odio, feugiat non dapibus sed, tincidunt ut - est. Nullam erat velit, suscipit aliquet commodo sit amet, mollis in mauris. Curabitur pharetra - dictum interdum. In posuere pretium ultricies. Curabitur volutpat eros vehicula quam ultrices - varius. Proin volutpat enim a massa tempor ornare. Sed ullamcorper fermentum nisl, ac hendrerit sem - feugiat ac. Donec porttitor ullamcorper quam. Morbi pretium adipiscing quam, quis bibendum diam - congue eget. Sed at lectus at est malesuada iaculis. Sed fermentum quam dui. Donec eget ipsum dolor, - id mollis nisi. Donec fermentum vehicula porta. -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero - sit amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. - Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, - commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros - ipsum rutrum orci, sagittis tempus lacus enim ac dui. Donec non enim in turpis pulvinar facilisis. - Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna - eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis - luctus, metus -

-

- Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. - Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit - amet quam egestas semper. Aenean ultricies mi vitae est. Mauris placerat eleifend leo. -

-
-

Page javascript

-
-

The contents of this div will be replaced by the javascript added to this page

-
-

Page CSS

-
-

The contents of this div will be replaced by the CSS added to this page

-
-
- - \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/themes/lozenge/style/jquery.jscrollpane.lozenge.css b/libs/bower_components/jScrollPane/themes/lozenge/style/jquery.jscrollpane.lozenge.css deleted file mode 100644 index 7bdbffa016..0000000000 --- a/libs/bower_components/jScrollPane/themes/lozenge/style/jquery.jscrollpane.lozenge.css +++ /dev/null @@ -1,78 +0,0 @@ - -.jspHorizontalBar, -.jspVerticalBar, -.jspTrack -{ - background: #eeeef4; -} - -.jspDrag -{ - background: #bbd; - - -moz-border-radius: 10px; - -webkit-border-radius: 10px; - border-radius: 10px; -} - -.jspTrack .jspActive, -.jspTrack .jspHover, -.jspDrag:hover -{ - background: #8B8B9F; -} - - -.jspArrow -{ - background: url(../image/ui-icons_222222_256x240.png) no-repeat; - - -moz-border-radius: 10px; - -webkit-border-radius: 10px; - border-radius: 10px; -} - -.jspVerticalBar>.jspActive, -.jspArrow:hover -{ - background-image: url('../image/ui-icons_cd0a0a_256x240.png'); -} - -.jspVerticalBar>.jspDisabled, -.jspVerticalBar>.jspDisabled:hover, -.jspHorizontalBar>.jspDisabled, -.jspHorizontalBar>.jspDisabled:hover -{ - background-color: transparent; - background-image: url('../image/ui-icons_888888_256x240.png'); -} - -.jspVerticalBar .jspArrow -{ - height: 15px; -} - -.jspHorizontalBar .jspArrow -{ - width: 15px; -} - -.jspArrowUp -{ - background-position: 0 0; -} - -.jspArrowDown -{ - background-position: -64px 0 !important; -} - -.jspArrowLeft -{ - background-position: -96px 0 !important; -} - -.jspArrowRight -{ - background-position: -32px 0 !important; -} \ No newline at end of file diff --git a/libs/bower_components/jScrollPane/v1.html b/libs/bower_components/jScrollPane/v1.html deleted file mode 100644 index 4c14ae5a74..0000000000 --- a/libs/bower_components/jScrollPane/v1.html +++ /dev/null @@ -1,49 +0,0 @@ - - - - - jScrollPane version 1.x - - - - - - - - - - - - - - - - - -
-

jScrollPane version 1.x

-

- You followed a link to a page for version 1 of jScrollPane - the jQuery plugin which provides cross browser - custom scrollbars. Version 1 is now deprecated and all development/ support is concentrated on version 2 of - the plugin. I suggest that you visit the new jScrollPane homepage to find out all about version - 2 of the plugin. -

-

- If you must use version 1 of the (for example because you are updating a site that was originally built using - version 1) then you can find the old site here. -

- - \ No newline at end of file diff --git a/libs/bower_components/jquery-placeholder/demo.html b/libs/bower_components/jquery-placeholder/demo.html deleted file mode 100644 index a25df403bf..0000000000 --- a/libs/bower_components/jquery-placeholder/demo.html +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - HTML5 placeholder jQuery Plugin - - - -

HTML5 Placeholder jQuery Plugin

-

Check out the HTML5 Placeholder jQuery Plugin project page on GitHub.

-
$(function() {
$('input, textarea').placeholder();
});
-
-

-

-

-

-

-

-

-

- -

Mathias

- - - - - diff --git a/libs/bower_components/jquery-placeholder/tests/index.html b/libs/bower_components/jquery-placeholder/tests/index.html deleted file mode 100644 index 160e3e8c57..0000000000 --- a/libs/bower_components/jquery-placeholder/tests/index.html +++ /dev/null @@ -1,32 +0,0 @@ - - - - - jquery-placeholder test suite - - - - -
-
- -
-

-

-

-

-

-

-

-

- -
- - - - - - diff --git a/libs/bower_components/jquery-placeholder/tests/tests.js b/libs/bower_components/jquery-placeholder/tests/tests.js deleted file mode 100644 index f721564604..0000000000 --- a/libs/bower_components/jquery-placeholder/tests/tests.js +++ /dev/null @@ -1,134 +0,0 @@ -(function($) { - - module('jQuery#placeholder'); - - test('caches results of feature tests', function() { - strictEqual(typeof $.fn.placeholder.input, 'boolean', '$.fn.placeholder.input'); - strictEqual(typeof $.fn.placeholder.textarea, 'boolean', '$.fn.placeholder.textarea'); - }); - - if ($.fn.placeholder.input && $.fn.placeholder.textarea) { - return; - } - - var testElement = function($el) { - - var el = $el[0]; - var placeholder = el.getAttribute('placeholder'); - - strictEqual($el.placeholder(), $el, 'should be chainable'); - - strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`'); - strictEqual($el.prop('value'), '', 'propHooks works properly'); - strictEqual($el.val(), '', 'valHooks works properly'); - ok($el.hasClass('placeholder'), 'should have `placeholder` class'); - - // test on focus - $el.focus(); - strictEqual(el.value, '', '`value` should be the empty string on focus'); - strictEqual($el.prop('value'), '', 'propHooks works properly'); - strictEqual($el.val(), '', 'valHooks works properly'); - ok(!$el.hasClass('placeholder'), 'should not have `placeholder` class on focus'); - - // and unfocus (blur) again - $el.blur(); - - strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`'); - strictEqual($el.prop('value'), '', 'propHooks works properly'); - strictEqual($el.val(), '', 'valHooks works properly'); - ok($el.hasClass('placeholder'), 'should have `placeholder` class'); - - // change the value - $el.val('lorem ipsum'); - strictEqual($el.prop('value'), 'lorem ipsum', '`$el.val(string)` should change the `value` property'); - strictEqual(el.value, 'lorem ipsum', '`$el.val(string)` should change the `value` attribute'); - ok(!$el.hasClass('placeholder'), '`$el.val(string)` should remove `placeholder` class'); - - // and clear it again - $el.val(''); - strictEqual($el.prop('value'), '', '`$el.val("")` should change the `value` property'); - strictEqual(el.value, placeholder, '`$el.val("")` should change the `value` attribute'); - ok($el.hasClass('placeholder'), '`$el.val("")` should re-enable `placeholder` class'); - - // make sure the placeholder property works as expected. - strictEqual($el.prop('placeholder'), placeholder, '$el.prop(`placeholder`) should return the placeholder value'); - $el.prop('placeholder', 'new placeholder'); - strictEqual($el.prop('placeholder'), 'new placeholder', '$el.prop(`placeholder`, ) should set the placeholder value'); - strictEqual($el.value, 'new placeholder', '$el.prop(`placeholder`, ) should update the displayed placeholder value'); - $el.prop('placeholder', placeholder); - }; - - test('emulates placeholder for ', function() { - testElement( $('#input-type-text') ); - }); - - test('emulates placeholder for ', function() { - testElement( $('#input-type-search') ); - }); - - test('emulates placeholder for ', function() { - testElement( $('#input-type-email') ); - }); - - test('emulates placeholder for ', function() { - testElement( $('#input-type-url') ); - }); - - test('emulates placeholder for ', function() { - testElement( $('#input-type-tel') ); - }); - - test('emulates placeholder for ', function() { - testElement( $('#input-type-tel') ); - }); - - test('emulates placeholder for ', function() { - var selector = '#input-type-password'; - - var $el = $(selector); - var el = $el[0]; - - var placeholder = el.getAttribute('placeholder'); - - strictEqual($el.placeholder(), $el, 'should be chainable'); - - // Re-select the element, as it gets replaced by another one in some browsers - $el = $(selector); - el = $el[0]; - - strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`'); - strictEqual($el.prop('value'), '', 'propHooks works properly'); - strictEqual($el.val(), '', 'valHooks works properly'); - ok($el.hasClass('placeholder'), 'should have `placeholder` class'); - - // test on focus - $el.focus(); - - // Re-select the element, as it gets replaced by another one in some browsers - $el = $(selector); - el = $el[0]; - - strictEqual(el.value, '', '`value` should be the empty string on focus'); - strictEqual($el.prop('value'), '', 'propHooks works properly'); - strictEqual($el.val(), '', 'valHooks works properly'); - ok(!$el.hasClass('placeholder'), 'should not have `placeholder` class on focus'); - - // and unfocus (blur) again - $el.blur(); - - // Re-select the element, as it gets replaced by another one in some browsers - $el = $(selector); - el = $el[0]; - - strictEqual(el.value, placeholder, 'should set `placeholder` text as `value`'); - strictEqual($el.prop('value'), '', 'propHooks works properly'); - strictEqual($el.val(), '', 'valHooks works properly'); - ok($el.hasClass('placeholder'), 'should have `placeholder` class'); - - }); - - test('emulates placeholder for ', function() { - testElement( $('#textarea') ); - }); - -}(jQuery)); -- cgit v1.2.3 From 581ea159d5ade07d8ceec986aca34382e5e946e0 Mon Sep 17 00:00:00 2001 From: mattab Date: Thu, 30 Jun 2016 15:38:17 +1200 Subject: Remove uneeded HTML files from a JS library --- .../mousetrap/plugins/record/tests/index.html | 29 ------------ .../mousetrap/plugins/record/tests/jelly.css | 18 -------- .../mousetrap/plugins/record/tests/jelly.js | 53 ---------------------- 3 files changed, 100 deletions(-) delete mode 100644 libs/bower_components/mousetrap/plugins/record/tests/index.html delete mode 100644 libs/bower_components/mousetrap/plugins/record/tests/jelly.css delete mode 100644 libs/bower_components/mousetrap/plugins/record/tests/jelly.js (limited to 'libs') diff --git a/libs/bower_components/mousetrap/plugins/record/tests/index.html b/libs/bower_components/mousetrap/plugins/record/tests/index.html deleted file mode 100644 index 5608f09e67..0000000000 --- a/libs/bower_components/mousetrap/plugins/record/tests/index.html +++ /dev/null @@ -1,29 +0,0 @@ - - - - - Jelly - - - - - -

Jelly

- -

For testing the record extension

- -

Click "Record" to test recording a sequence.

- -
- - - - - - - - - - diff --git a/libs/bower_components/mousetrap/plugins/record/tests/jelly.css b/libs/bower_components/mousetrap/plugins/record/tests/jelly.css deleted file mode 100644 index a071c77c98..0000000000 --- a/libs/bower_components/mousetrap/plugins/record/tests/jelly.css +++ /dev/null @@ -1,18 +0,0 @@ -body { - font-family: helvetica, arial, sans-serif; - line-height: 20px; -} - -kbd { - background-color: #ccc; - display: inline-block; - padding: 0.5ex 1em; -} - -.test-record-result { - margin-top: 20px; -} - -.test-record-result span:nth-child(n+2) { - margin-left: 10px; -} diff --git a/libs/bower_components/mousetrap/plugins/record/tests/jelly.js b/libs/bower_components/mousetrap/plugins/record/tests/jelly.js deleted file mode 100644 index 57ff01a028..0000000000 --- a/libs/bower_components/mousetrap/plugins/record/tests/jelly.js +++ /dev/null @@ -1,53 +0,0 @@ -/** - * Peanut butter goes great with jelly. - * - * @author Dan Tao - */ -var Jelly = (function() { - var recordButton = $("button.test-record"), - recordResult = $("div.test-record-result"); - - function _formatSequenceAsHtml(sequence) { - var combos = [], - i; - - for (i = 0; i < sequence.length; ++i) { - combos.push('' + _formatKeysAsHtml(sequence[i].split('+')) + ''); - } - - return combos.join(' '); - } - - function _formatKeysAsHtml(keys) { - var htmlKeys = [], - i; - - for (i = 0; i < keys.length; ++i) { - htmlKeys.push('' + keys[i] + ''); - } - - return htmlKeys.join('+'); - } - - function _prepareRecordTest() { - recordButton.prop('disabled', true); - recordButton.text('Recording'); - - Mousetrap.record(function(sequence) { - recordResult.html(_formatSequenceAsHtml(sequence)); - recordButton.prop('disabled', false); - recordButton.text('Record'); - }); - - // take focus away from the button so that Mousetrap will actually - // capture keystrokes - recordButton.blur(); - } - - return { - spread: function() { - recordButton.click(_prepareRecordTest); - } - }; - -})(); -- cgit v1.2.3 From 713806da44a4bb4e9c6d3779188c83d78c8eb9b5 Mon Sep 17 00:00:00 2001 From: Jan Wroniszewski Date: Tue, 12 Jul 2016 07:26:07 +0200 Subject: installing touch-punch lib to fix dragging issue on mobiles (#10045) --- .../jqueryui-touch-punch/.bower.json | 19 +++ .../jqueryui-touch-punch/README.md | 41 +++++ .../jqueryui-touch-punch/bower.json | 10 ++ .../jqueryui-touch-punch/jquery.ui.touch-punch.js | 180 +++++++++++++++++++++ .../jquery.ui.touch-punch.min.js | 11 ++ 5 files changed, 261 insertions(+) create mode 100644 libs/bower_components/jqueryui-touch-punch/.bower.json create mode 100644 libs/bower_components/jqueryui-touch-punch/README.md create mode 100644 libs/bower_components/jqueryui-touch-punch/bower.json create mode 100644 libs/bower_components/jqueryui-touch-punch/jquery.ui.touch-punch.js create mode 100644 libs/bower_components/jqueryui-touch-punch/jquery.ui.touch-punch.min.js (limited to 'libs') diff --git a/libs/bower_components/jqueryui-touch-punch/.bower.json b/libs/bower_components/jqueryui-touch-punch/.bower.json new file mode 100644 index 0000000000..d003eeb236 --- /dev/null +++ b/libs/bower_components/jqueryui-touch-punch/.bower.json @@ -0,0 +1,19 @@ +{ + "name": "jqueryui-touch-punch", + "main": "jquery.ui.touch-punch.min.js", + "ignore": [], + "dependencies": { + "jquery": ">=1.6", + "jquery-ui": ">=1.8" + }, + "homepage": "https://github.com/furf/jquery-ui-touch-punch", + "_release": "4bc0091452", + "_resolution": { + "type": "branch", + "branch": "master", + "commit": "4bc009145202d9c7483ba85f3a236a8f3470354d" + }, + "_source": "https://github.com/furf/jquery-ui-touch-punch.git", + "_target": "master", + "_originalSource": "jqueryui-touch-punch" +} \ No newline at end of file diff --git a/libs/bower_components/jqueryui-touch-punch/README.md b/libs/bower_components/jqueryui-touch-punch/README.md new file mode 100644 index 0000000000..cff7baad70 --- /dev/null +++ b/libs/bower_components/jqueryui-touch-punch/README.md @@ -0,0 +1,41 @@ +# jQuery UI Touch Punch +## Touch Event Support for jQuery UI + +> **jQuery UI Touch Punch is a small hack that enables the use of touch events on sites using the jQuery UI user interface library.** + +_[Visit the official Touch Punch website](http://touchpunch.furf.com)._ + +Currently, [jQuery UI](http://jqueryui.com/) user interface library does not support the use of touch events in their widgets and interactions. This means that the slick UI you designed and tested in your desktop browser will fail on most, if not all, touch-enabled mobile devices, because jQuery UI listens to mouse events—mouseover, mousemove and mouseout—not touch events—touchstart, touchmove and touchend. + +That's where jQuery UI Touch Punch comes in. Touch Punch works by using [simulated events](https://developer.mozilla.org/en/DOM/document.createEvent) to map [touch events](http://www.html5rocks.com/en/mobile/touch/) to their mouse event analogs. Simply include the script on your page and your touch events will be turned into their corresponding mouse events to which jQuery UI will respond as expected. + +As I said, Touch Punch is a hack. It [duck punches](http://en.wikipedia.org/wiki/Monkey_patch) some of jQuery UI's core functionality to handle the mapping of touch events. Touch Punch works with all basic implementations of jQuery UI's interactions and widgets. However, you may find more complex cases where Touch Punch fails. If so, scroll down to learn how you can file and/or fix issues. + +This code is dual licensed under the MIT or GPL Version 2 licenses and is therefore free to use, modify and/or distribute, but if you include Touch Punch in other software packages or plugins, please include an attribution to the original software and a link to [this Touch Punch website](http://touchpunch.furf.com/). + +## Using Touch Punch is as easy as 1, 2… + +Just follow these simple steps to enable touch events in your jQuery UI app: + +1. Include jQuery and jQuery UI on your page. + + ```html + + + ``` + +2. Include Touch Punch after jQuery UI and before its first use. + + Please note that if you are using jQuery UI's components, Touch Punch must be included after jquery.ui.mouse.js, as Touch Punch modifies its behavior. + + ```html + + ``` + +3. There is no 3. Just use jQuery UI as expected and watch it work at the touch of a finger. + + ```html + + ``` + +_Tested on iPad, iPhone, Android and other touch-enabled mobile devices._ diff --git a/libs/bower_components/jqueryui-touch-punch/bower.json b/libs/bower_components/jqueryui-touch-punch/bower.json new file mode 100644 index 0000000000..ffc6b89f9a --- /dev/null +++ b/libs/bower_components/jqueryui-touch-punch/bower.json @@ -0,0 +1,10 @@ +{ + "name": "jqueryui-touch-punch", + "version": "0.2.3", + "main": "jquery.ui.touch-punch.min.js", + "ignore": [], + "dependencies": { + "jquery": ">=1.6", + "jquery-ui": ">=1.8" + } +} diff --git a/libs/bower_components/jqueryui-touch-punch/jquery.ui.touch-punch.js b/libs/bower_components/jqueryui-touch-punch/jquery.ui.touch-punch.js new file mode 100644 index 0000000000..16ce41d1ed --- /dev/null +++ b/libs/bower_components/jqueryui-touch-punch/jquery.ui.touch-punch.js @@ -0,0 +1,180 @@ +/*! + * jQuery UI Touch Punch 0.2.3 + * + * Copyright 2011–2014, Dave Furfero + * Dual licensed under the MIT or GPL Version 2 licenses. + * + * Depends: + * jquery.ui.widget.js + * jquery.ui.mouse.js + */ +(function ($) { + + // Detect touch support + $.support.touch = 'ontouchend' in document; + + // Ignore browsers without touch support + if (!$.support.touch) { + return; + } + + var mouseProto = $.ui.mouse.prototype, + _mouseInit = mouseProto._mouseInit, + _mouseDestroy = mouseProto._mouseDestroy, + touchHandled; + + /** + * Simulate a mouse event based on a corresponding touch event + * @param {Object} event A touch event + * @param {String} simulatedType The corresponding mouse event + */ + function simulateMouseEvent (event, simulatedType) { + + // Ignore multi-touch events + if (event.originalEvent.touches.length > 1) { + return; + } + + event.preventDefault(); + + var touch = event.originalEvent.changedTouches[0], + simulatedEvent = document.createEvent('MouseEvents'); + + // Initialize the simulated mouse event using the touch event's coordinates + simulatedEvent.initMouseEvent( + simulatedType, // type + true, // bubbles + true, // cancelable + window, // view + 1, // detail + touch.screenX, // screenX + touch.screenY, // screenY + touch.clientX, // clientX + touch.clientY, // clientY + false, // ctrlKey + false, // altKey + false, // shiftKey + false, // metaKey + 0, // button + null // relatedTarget + ); + + // Dispatch the simulated event to the target element + event.target.dispatchEvent(simulatedEvent); + } + + /** + * Handle the jQuery UI widget's touchstart events + * @param {Object} event The widget element's touchstart event + */ + mouseProto._touchStart = function (event) { + + var self = this; + + // Ignore the event if another widget is already being handled + if (touchHandled || !self._mouseCapture(event.originalEvent.changedTouches[0])) { + return; + } + + // Set the flag to prevent other widgets from inheriting the touch event + touchHandled = true; + + // Track movement to determine if interaction was a click + self._touchMoved = false; + + // Simulate the mouseover event + simulateMouseEvent(event, 'mouseover'); + + // Simulate the mousemove event + simulateMouseEvent(event, 'mousemove'); + + // Simulate the mousedown event + simulateMouseEvent(event, 'mousedown'); + }; + + /** + * Handle the jQuery UI widget's touchmove events + * @param {Object} event The document's touchmove event + */ + mouseProto._touchMove = function (event) { + + // Ignore event if not handled + if (!touchHandled) { + return; + } + + // Interaction was not a click + this._touchMoved = true; + + // Simulate the mousemove event + simulateMouseEvent(event, 'mousemove'); + }; + + /** + * Handle the jQuery UI widget's touchend events + * @param {Object} event The document's touchend event + */ + mouseProto._touchEnd = function (event) { + + // Ignore event if not handled + if (!touchHandled) { + return; + } + + // Simulate the mouseup event + simulateMouseEvent(event, 'mouseup'); + + // Simulate the mouseout event + simulateMouseEvent(event, 'mouseout'); + + // If the touch interaction did not move, it should trigger a click + if (!this._touchMoved) { + + // Simulate the click event + simulateMouseEvent(event, 'click'); + } + + // Unset the flag to allow other widgets to inherit the touch event + touchHandled = false; + }; + + /** + * A duck punch of the $.ui.mouse _mouseInit method to support touch events. + * This method extends the widget with bound touch event handlers that + * translate touch events to mouse events and pass them to the widget's + * original mouse event handling methods. + */ + mouseProto._mouseInit = function () { + + var self = this; + + // Delegate the touch handlers to the widget's element + self.element.bind({ + touchstart: $.proxy(self, '_touchStart'), + touchmove: $.proxy(self, '_touchMove'), + touchend: $.proxy(self, '_touchEnd') + }); + + // Call the original $.ui.mouse init method + _mouseInit.call(self); + }; + + /** + * Remove the touch event handlers + */ + mouseProto._mouseDestroy = function () { + + var self = this; + + // Delegate the touch handlers to the widget's element + self.element.unbind({ + touchstart: $.proxy(self, '_touchStart'), + touchmove: $.proxy(self, '_touchMove'), + touchend: $.proxy(self, '_touchEnd') + }); + + // Call the original $.ui.mouse destroy method + _mouseDestroy.call(self); + }; + +})(jQuery); \ No newline at end of file diff --git a/libs/bower_components/jqueryui-touch-punch/jquery.ui.touch-punch.min.js b/libs/bower_components/jqueryui-touch-punch/jquery.ui.touch-punch.min.js new file mode 100644 index 0000000000..31272ce6fd --- /dev/null +++ b/libs/bower_components/jqueryui-touch-punch/jquery.ui.touch-punch.min.js @@ -0,0 +1,11 @@ +/*! + * jQuery UI Touch Punch 0.2.3 + * + * Copyright 2011–2014, Dave Furfero + * Dual licensed under the MIT or GPL Version 2 licenses. + * + * Depends: + * jquery.ui.widget.js + * jquery.ui.mouse.js + */ +!function(a){function f(a,b){if(!(a.originalEvent.touches.length>1)){a.preventDefault();var c=a.originalEvent.changedTouches[0],d=document.createEvent("MouseEvents");d.initMouseEvent(b,!0,!0,window,1,c.screenX,c.screenY,c.clientX,c.clientY,!1,!1,!1,!1,0,null),a.target.dispatchEvent(d)}}if(a.support.touch="ontouchend"in document,a.support.touch){var e,b=a.ui.mouse.prototype,c=b._mouseInit,d=b._mouseDestroy;b._touchStart=function(a){var b=this;!e&&b._mouseCapture(a.originalEvent.changedTouches[0])&&(e=!0,b._touchMoved=!1,f(a,"mouseover"),f(a,"mousemove"),f(a,"mousedown"))},b._touchMove=function(a){e&&(this._touchMoved=!0,f(a,"mousemove"))},b._touchEnd=function(a){e&&(f(a,"mouseup"),f(a,"mouseout"),this._touchMoved||f(a,"click"),e=!1)},b._mouseInit=function(){var b=this;b.element.bind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),c.call(b)},b._mouseDestroy=function(){var b=this;b.element.unbind({touchstart:a.proxy(b,"_touchStart"),touchmove:a.proxy(b,"_touchMove"),touchend:a.proxy(b,"_touchEnd")}),d.call(b)}}}(jQuery); \ No newline at end of file -- cgit v1.2.3 From 7ca14d216ea95cbce881867a4cb953b367fb7d85 Mon Sep 17 00:00:00 2001 From: mattab Date: Tue, 23 Aug 2016 09:22:53 +1200 Subject: Fix the integration test and patch Zend Validate --- libs/Zend/Validate/Hostname.php | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'libs') diff --git a/libs/Zend/Validate/Hostname.php b/libs/Zend/Validate/Hostname.php index 79e9902b6e..1ea9800546 100644 --- a/libs/Zend/Validate/Hostname.php +++ b/libs/Zend/Validate/Hostname.php @@ -492,6 +492,12 @@ class Zend_Validate_Hostname extends Zend_Validate_Abstract '微博' => array(1 => self::VALID_UNICODE_DOMAIN), 'ابوظبي' => array(1 => self::VALID_UNICODE_DOMAIN), '网站' => array(1 => self::VALID_UNICODE_DOMAIN), + '大众汽车' => array(1 => self::VALID_UNICODE_DOMAIN), + '香格里拉' => array(1 => self::VALID_UNICODE_DOMAIN), + 'бг' => array(1 => self::VALID_UNICODE_DOMAIN), + '電訊盈科' => array(1 => self::VALID_UNICODE_DOMAIN), + 'العليان' => array(1 => self::VALID_UNICODE_DOMAIN), + '嘉里' => array(1 => self::VALID_UNICODE_DOMAIN), ); -- cgit v1.2.3