From 2396a4832376b6d539b13428a4580641c5cafa1c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Sko=C5=99epa?= <jakub@skorepa.info> Date: Sat, 19 Mar 2016 16:00:14 +0100 Subject: [PATCH] Remove unnecessary lightbox files + add link to "How to submit changes" fixes #21 --- theme/static/theme/lightbox2/CONTRIBUTING.md | 12 - theme/static/theme/lightbox2/Gruntfile.js | 83 - theme/static/theme/lightbox2/LICENSE | 21 - theme/static/theme/lightbox2/README.md | 122 - theme/static/theme/lightbox2/bower.json | 33 - .../theme/lightbox2/dist/css/lightbox.css | 206 - .../lightbox2/dist/js/lightbox-plus-jquery.js | 9664 ----------------- .../dist/js/lightbox-plus-jquery.min.js | 38 - .../dist/js/lightbox-plus-jquery.min.map | 1 - .../theme/lightbox2/dist/js/lightbox.js | 453 - .../theme/lightbox2/dist/js/lightbox.min.map | 1 - .../theme/lightbox2/examples/index.html | 37 - theme/static/theme/lightbox2/package.json | 40 - .../theme/lightbox2/src/css/lightbox.css | 206 - .../theme/lightbox2/src/images/close.png | Bin 280 -> 0 bytes .../theme/lightbox2/src/images/loading.gif | Bin 8476 -> 0 bytes .../theme/lightbox2/src/images/next.png | Bin 1350 -> 0 bytes .../theme/lightbox2/src/images/prev.png | Bin 1360 -> 0 bytes .../static/theme/lightbox2/src/js/lightbox.js | 453 - theme/templates/partials/base.html.nunj | 3 +- theme/templates/partials/search.html.nunj | 26 +- 21 files changed, 16 insertions(+), 11383 deletions(-) delete mode 100644 theme/static/theme/lightbox2/CONTRIBUTING.md delete mode 100644 theme/static/theme/lightbox2/Gruntfile.js delete mode 100644 theme/static/theme/lightbox2/LICENSE delete mode 100644 theme/static/theme/lightbox2/README.md delete mode 100644 theme/static/theme/lightbox2/bower.json delete mode 100644 theme/static/theme/lightbox2/dist/css/lightbox.css delete mode 100644 theme/static/theme/lightbox2/dist/js/lightbox-plus-jquery.js delete mode 100644 theme/static/theme/lightbox2/dist/js/lightbox-plus-jquery.min.js delete mode 100644 theme/static/theme/lightbox2/dist/js/lightbox-plus-jquery.min.map delete mode 100644 theme/static/theme/lightbox2/dist/js/lightbox.js delete mode 100644 theme/static/theme/lightbox2/dist/js/lightbox.min.map delete mode 100644 theme/static/theme/lightbox2/examples/index.html delete mode 100644 theme/static/theme/lightbox2/package.json delete mode 100644 theme/static/theme/lightbox2/src/css/lightbox.css delete mode 100644 theme/static/theme/lightbox2/src/images/close.png delete mode 100644 theme/static/theme/lightbox2/src/images/loading.gif delete mode 100644 theme/static/theme/lightbox2/src/images/next.png delete mode 100644 theme/static/theme/lightbox2/src/images/prev.png delete mode 100644 theme/static/theme/lightbox2/src/js/lightbox.js diff --git a/theme/static/theme/lightbox2/CONTRIBUTING.md b/theme/static/theme/lightbox2/CONTRIBUTING.md deleted file mode 100644 index 1e277486..00000000 --- a/theme/static/theme/lightbox2/CONTRIBUTING.md +++ /dev/null @@ -1,12 +0,0 @@ -# Contributing to Lightbox2 - -## Found a bug? - -[Search through existing Github Issues](https://github.com/lokesh/lightbox2/issues) that have been reported to avoid creating a duplicate issue. If your bug has not been reported, create a new issue with the following details: - -- What version of Lightbox2 you are using -- Information on which browsers and operating systems you have reproduced the bug on -- Steps to reproduce the bug -- A link to your production site where the bug is visible or all relevant HTML, CSS, and Javascript required to recreate the bug - -All of the above are required. diff --git a/theme/static/theme/lightbox2/Gruntfile.js b/theme/static/theme/lightbox2/Gruntfile.js deleted file mode 100644 index 6eea00c4..00000000 --- a/theme/static/theme/lightbox2/Gruntfile.js +++ /dev/null @@ -1,83 +0,0 @@ -module.exports = function(grunt) { - - grunt.initConfig({ - concat: { - dist: { - src: ['bower_components/jquery/dist/jquery.js', 'src/js/lightbox.js'], - dest: 'dist/js/lightbox-plus-jquery.js', - }, - }, - connect: { - server: { - options: { - port: 8000 - } - } - }, - copy: { - dist: { - files: [ - { - expand: true, - cwd: 'src/', - src: ['**'], - dest: 'dist/' - } - ], - }, - }, - jshint: { - all: [ - 'src/js/lightbox.js' - ], - options: { - jshintrc: true - } - }, - jscs: { - src: [ - 'src/js/lightbox.js' - ], - options: { - config: ".jscsrc" - } - }, - uglify: { - options: { - preserveComments: 'some', - sourceMap: true - }, - dist: { - files: { - 'dist/js/lightbox.min.js': ['src/js/lightbox.js'], - 'dist/js/lightbox-plus-jquery.min.js': ['dist/js/lightbox-plus-jquery.js'] - } - } - }, - watch: { - jshint: { - files: ['src/js/lightbox.js'], - tasks: ['jshint', 'jscs'] - } - }, - cssmin: { - minify: { - src: 'dist/css/lightbox.css', - dest: 'dist/css/lightbox.min.css' - } - } - }); - - grunt.loadNpmTasks('grunt-contrib-concat'); - grunt.loadNpmTasks('grunt-contrib-connect'); - grunt.loadNpmTasks('grunt-contrib-copy'); - grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-contrib-watch'); - grunt.loadNpmTasks('grunt-contrib-cssmin'); - grunt.loadNpmTasks("grunt-jscs"); - - grunt.registerTask('default', ['connect', 'watch']); - grunt.registerTask('test', ['jshint', 'jscs']); - grunt.registerTask('build', ['jshint', 'jscs', 'copy:dist', 'concat', 'uglify', 'cssmin:minify']); -}; diff --git a/theme/static/theme/lightbox2/LICENSE b/theme/static/theme/lightbox2/LICENSE deleted file mode 100644 index 0b34e121..00000000 --- a/theme/static/theme/lightbox2/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Lokesh Dhakar - -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/theme/static/theme/lightbox2/README.md b/theme/static/theme/lightbox2/README.md deleted file mode 100644 index 35bc6384..00000000 --- a/theme/static/theme/lightbox2/README.md +++ /dev/null @@ -1,122 +0,0 @@ -# Lightbox2 - -The original lightbox script. Eight years later — still going strong! - -Lightbox is small javascript library used to overlay images on top of the current page. It's a snap to setup and works on all modern browsers. - -For demos and usage instructions, visit [lokeshdhakar.com/projects/lightbox2/](http://lokeshdhakar.com/projects/lightbox2/). - -by [Lokesh Dhakar](http://www.lokeshdhakar.com) - - -## Roadmap - -### Actively being worked on - -- **Maintenance.** Get open Issues and PRs number down. - -### Not on the roadmap - -- **HTML or video content.** The goal of the script from the start has been to provide a better image viewing experience and I am planning on staying focused on that vision. Don't worry though there are plenty of alternative scripts a google away for those who need HTML or video content support. - -### v3.0 - In Brainstorming Phase - -- Add touch gesture support. -- Rewrite animations for performance and flexibility. -- Optimize layout for mobile. -- Optimize layout for screens of varying densities. -- Use inline SVG for UI elements. -- Do not initialize automatically and allow multiple instances. -- Add event handlers. -- Allow the setting of options from HTML. -- Allow instantiation with jQuery plugin syntax. -- If one of the two options, maxWidth or maxHeight, is set, maintain aspect ratio. -- Evaluate start, end, and transition animations. -- Evaluate preloading and caching. -- Evaluate droppping jQuery requirement. -- If user attempts to go forward when at end of image set, animation (shake?) indicating the end or option to close Lightbox. - - -## Changelog - -### v2.8.2 - 2015-12-13 - -- [Add] npm support. ```npm install --save lightbox2``` -- [Add] Add option to disable vertical scrolling [#487](https://github.com/lokesh/lightbox2/pull/487) Thanks [blacksunshineCoding](https://github.com/blacksunshineCoding) -- [Fix] When horizontal scrolling is on page the overlay is not covering entire page [#485](https://github.com/lokesh/lightbox2/pull/485) Thanks [@manuel-io](https://github.com/manuel-io) -- [Change] Add css minify task to Gruntfile.js and removedlegacy css vendor prefixes for border-radius. [#470](https://github.com/lokesh/lightbox2/pull/470) Thanks [ajerez](https://github.com/ajerez) - - -### v2.8.1 - 2015-07-09 - -- [Fix] Change AMD jQuery require statement to use all lowercase. [#464](https://github.com/lokesh/lightbox2/pull/464) Thanks [@vtforester](https://github.com/vtforester) - -### v2.8.0 - 2015-06-29 - -- [Add] UMD support (AMD, CommonJS, fallback to global export).[#461](https://github.com/lokesh/lightbox2/pull/461) -- [Add] option method for setting options. [#461](https://github.com/lokesh/lightbox2/commit/d708fbd716aaa90e01ba4198944c8955e7283d87) -- [Add] CONTRIBUTING.md - -### v2.7.4 - 2015-06-23 - -- [Change] Revert jquery dep version to 2.x from 1.x. Added note to Lightbox page about using jQuery 1.x to get IE6, 7, and 8 support. -- [Fix] Preserve author and license comments from lightbox.js in minified files. - -### v2.7.3 - 2015-06-22 - -- [Add] Barebone HTML file with examples /examples/index.html. -- [Add] jquery.lightbox.js which concatenates jQuery and Lightbox. This is for those who are Bower averse or want an extra easy install. - -### v2.7.2 - 2015-06-16 - -- [Add] maxWidth and maxHeight options added [#197](https://github.com/lokesh/lightbox2/pull/197) -- [Add] Enable target attribute in caption links [#299](https://github.com/lokesh/lightbox2/pull/299) -- [Change] Switched to The MIT License from Creative Commons Attribution 4.0 International License. -- [Change] Add CSS and images to bower.json main property. -- [Change] Dropped version property from bower.json. [#453](https://github.com/lokesh/lightbox2/pull/453) -- [Change] Use src -> dist folder structure for build. -- [Fix] Remove empty src attribute from img tag [#287](https://github.com/lokesh/lightbox2/pull/287) -- [Fix] Correct grammatical error in comment [#224](https://github.com/lokesh/lightbox2/pull/224) -- [Fix] Clear the jquery animation queue before hiding the .lb-loader [#309](https://github.com/lokesh/lightbox2/pull/309) -- [Remove] Remove releases's zips from repo. - -### v2.7.1 - 2014-03-30 - -- [Fix] Enable links in captions - -### v2.7.0 - 2014-03-29 - -- [Add] Support for data-title attribute for the caption. - Thanks [@copycut](https://github.com/copycut) -- [Add] New option to enable always visible prev and next arrows -- [Change] Rewrite Coffeescript code into plain ole Javascript -- [Change] Updated jQuery to v1.10.2 -- [Fix] prev/next arrows not appearing in IE9 and IE 10 - Thanks [@rebizu](https://github.com/rebizu) -- [Fix] Support wrap around option w/keyboard actions. Thanks [@vovayatsyuk](https://github.com/vovayatsyuk) - -### v2.6.0 - 2013-07-06 - -- [Add] Added wraparound option -- [Add] Added fitImagesInViewport option - now mobile friendly -- [Add] Added showImageNumber label -- [Add] Compatibility with html5shiv -- [Add] Html5 valid using new data-lightbox attribute -- [Add] Compatibility with hmtl5shiv and modernizr -- [Add] Support jquery 1.9+ -- [Change] Move reference to loading and close images into css -- [Change] Cache jquery objects - -### v2.5.0 - 2012-04-11 - -- [Change] Switch to jQuery from Prototype and Scriptaculous -- [Change] Switch from Javacript to Coffeescript -- [Change] Switch from CSS to SASS -- [Add] Repo created on Github - - -## How to deploy - -- Update version number in ```src/lightbox.js``` -- Update README.md Changelog with release date -- grunt build -- Push to Github repo -- Create a new Github release along with tag. Naming convention for both ```v2.8.1``` diff --git a/theme/static/theme/lightbox2/bower.json b/theme/static/theme/lightbox2/bower.json deleted file mode 100644 index 061f982e..00000000 --- a/theme/static/theme/lightbox2/bower.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "name": "lightbox2", - "homepage": "http://lokeshdhakar.com/projects/lightbox2/", - "authors": [ - "Lokesh Dhakar <lokesh.dhakar@gmail.com>" - ], - "description": "The original Lightbox script. Uses jQuery.", - "main": [ - "./dist/js/lightbox.js", - "./dist/css/lightbox.css", - "./dist/images/close.png", - "./dist/images/loading.gif", - "./dist/images/next.png", - "./dist/images/prev.png" - ], - "keywords": [ - "lightbox", - "lightbox2", - "overlay", - "gallery", - "slideshow", - "images" - ], - "license": "MIT", - "ignore": [ - "**/.*", - "node_modules", - "bower_components" - ], - "dependencies": { - "jquery": "~2" - } -} diff --git a/theme/static/theme/lightbox2/dist/css/lightbox.css b/theme/static/theme/lightbox2/dist/css/lightbox.css deleted file mode 100644 index 56d3cfba..00000000 --- a/theme/static/theme/lightbox2/dist/css/lightbox.css +++ /dev/null @@ -1,206 +0,0 @@ -/* Preload images */ -body:after { - content: url(../images/close.png) url(../images/loading.gif) url(../images/prev.png) url(../images/next.png); - display: none; -} - -body.lb-disable-scrolling { - overflow: hidden; -} - -.lightboxOverlay { - position: absolute; - top: 0; - left: 0; - z-index: 9999; - background-color: black; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); - opacity: 0.8; - display: none; -} - -.lightbox { - position: absolute; - left: 0; - width: 100%; - z-index: 10000; - text-align: center; - line-height: 0; - font-weight: normal; -} - -.lightbox .lb-image { - display: block; - height: auto; - max-width: inherit; - border-radius: 3px; -} - -.lightbox a img { - border: none; -} - -.lb-outerContainer { - position: relative; - background-color: white; - *zoom: 1; - width: 250px; - height: 250px; - margin: 0 auto; - border-radius: 4px; -} - -.lb-outerContainer:after { - content: ""; - display: table; - clear: both; -} - -.lb-container { - padding: 4px; -} - -.lb-loader { - position: absolute; - top: 43%; - left: 0; - height: 25%; - width: 100%; - text-align: center; - line-height: 0; -} - -.lb-cancel { - display: block; - width: 32px; - height: 32px; - margin: 0 auto; - background: url(../images/loading.gif) no-repeat; -} - -.lb-nav { - position: absolute; - top: 0; - left: 0; - height: 100%; - width: 100%; - z-index: 10; -} - -.lb-container > .nav { - left: 0; -} - -.lb-nav a { - outline: none; - background-image: url('data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='); -} - -.lb-prev, .lb-next { - height: 100%; - cursor: pointer; - display: block; -} - -.lb-nav a.lb-prev { - width: 34%; - left: 0; - float: left; - background: url(../images/prev.png) left 48% no-repeat; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); - opacity: 0; - -webkit-transition: opacity 0.6s; - -moz-transition: opacity 0.6s; - -o-transition: opacity 0.6s; - transition: opacity 0.6s; -} - -.lb-nav a.lb-prev:hover { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); - opacity: 1; -} - -.lb-nav a.lb-next { - width: 64%; - right: 0; - float: right; - background: url(../images/next.png) right 48% no-repeat; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); - opacity: 0; - -webkit-transition: opacity 0.6s; - -moz-transition: opacity 0.6s; - -o-transition: opacity 0.6s; - transition: opacity 0.6s; -} - -.lb-nav a.lb-next:hover { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); - opacity: 1; -} - -.lb-dataContainer { - margin: 0 auto; - padding-top: 5px; - *zoom: 1; - width: 100%; - -moz-border-radius-bottomleft: 4px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomright: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.lb-dataContainer:after { - content: ""; - display: table; - clear: both; -} - -.lb-data { - padding: 0 4px; - color: #ccc; -} - -.lb-data .lb-details { - width: 85%; - float: left; - text-align: left; - line-height: 1.1em; -} - -.lb-data .lb-caption { - font-size: 13px; - font-weight: bold; - line-height: 1em; -} - -.lb-data .lb-number { - display: block; - clear: left; - padding-bottom: 1em; - font-size: 12px; - color: #999999; -} - -.lb-data .lb-close { - display: block; - float: right; - width: 30px; - height: 30px; - background: url(../images/close.png) top right no-repeat; - text-align: right; - outline: none; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); - opacity: 0.7; - -webkit-transition: opacity 0.2s; - -moz-transition: opacity 0.2s; - -o-transition: opacity 0.2s; - transition: opacity 0.2s; -} - -.lb-data .lb-close:hover { - cursor: pointer; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); - opacity: 1; -} diff --git a/theme/static/theme/lightbox2/dist/js/lightbox-plus-jquery.js b/theme/static/theme/lightbox2/dist/js/lightbox-plus-jquery.js deleted file mode 100644 index 1d5d81df..00000000 --- a/theme/static/theme/lightbox2/dist/js/lightbox-plus-jquery.js +++ /dev/null @@ -1,9664 +0,0 @@ -/*! - * jQuery JavaScript Library v2.1.4 - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2015-04-28T16:01Z - */ - -(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 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. - module.exports = global.document ? - factory( global, true ) : - function( w ) { - if ( !w.document ) { - throw new Error( "jQuery requires a window with a document" ); - } - return factory( w ); - }; - } else { - factory( global ); - } - -// Pass this if window is not defined yet -}(typeof window !== "undefined" ? window : this, function( window, noGlobal ) { - -// 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) -// - -var arr = []; - -var slice = arr.slice; - -var concat = arr.concat; - -var push = arr.push; - -var indexOf = arr.indexOf; - -var class2type = {}; - -var toString = class2type.toString; - -var hasOwn = class2type.hasOwnProperty; - -var support = {}; - - - -var - // Use the correct document accordingly with window argument (sandbox) - document = window.document, - - version = "2.1.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 ); - }, - - // Support: Android<4.1 - // Make sure we trim BOM and NBSP - rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, - - // Matches dashed string for camelizing - rmsPrefix = /^-ms-/, - rdashAlpha = /-([\da-z])/gi, - - // Used by jQuery.camelCase as callback to replace() - fcamelCase = function( all, letter ) { - return letter.toUpperCase(); - }; - -jQuery.fn = jQuery.prototype = { - // The current version of jQuery being used - jquery: version, - - constructor: jQuery, - - // Start with an empty selector - selector: "", - - // The default length of a jQuery object is 0 - length: 0, - - toArray: function() { - return slice.call( this ); - }, - - // Get the Nth element in the matched element set OR - // Get the whole matched element set as a clean array - get: function( num ) { - return num != null ? - - // Return just the one element from the set - ( num < 0 ? this[ num + this.length ] : this[ num ] ) : - - // Return all the elements in a clean array - slice.call( this ); - }, - - // Take an array of elements and push it onto the stack - // (returning the new matched element set) - pushStack: function( elems ) { - - // Build a new jQuery matched element set - var ret = jQuery.merge( this.constructor(), elems ); - - // Add the old object onto the stack (as a reference) - ret.prevObject = this; - ret.context = this.context; - - // Return the newly-formed element set - return ret; - }, - - // 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 ); - }, - - map: function( callback ) { - return this.pushStack( jQuery.map(this, function( elem, i ) { - return callback.call( elem, i, elem ); - })); - }, - - slice: function() { - return this.pushStack( slice.apply( this, arguments ) ); - }, - - first: function() { - return this.eq( 0 ); - }, - - last: function() { - return this.eq( -1 ); - }, - - eq: function( i ) { - var len = this.length, - j = +i + ( i < 0 ? len : 0 ); - return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); - }, - - end: function() { - return this.prevObject || this.constructor(null); - }, - - // For internal use only. - // Behaves like an Array's method, not like a jQuery method. - push: push, - sort: arr.sort, - splice: arr.splice -}; - -jQuery.extend = jQuery.fn.extend = function() { - var options, name, src, copy, copyIsArray, clone, - target = arguments[0] || {}, - i = 1, - length = arguments.length, - deep = false; - - // Handle a deep copy situation - if ( typeof target === "boolean" ) { - deep = target; - - // Skip the boolean and the target - target = arguments[ i ] || {}; - i++; - } - - // Handle case when target is a string or something (possible in deep copy) - if ( typeof target !== "object" && !jQuery.isFunction(target) ) { - target = {}; - } - - // Extend jQuery itself if only one argument is passed - if ( i === length ) { - target = this; - i--; - } - - for ( ; i < length; i++ ) { - // Only deal with non-null/undefined values - if ( (options = arguments[ i ]) != null ) { - // Extend the base object - for ( name in options ) { - src = target[ name ]; - copy = options[ name ]; - - // Prevent never-ending loop - if ( target === copy ) { - continue; - } - - // Recurse if we're merging plain objects or arrays - if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { - if ( copyIsArray ) { - copyIsArray = false; - clone = src && jQuery.isArray(src) ? src : []; - - } else { - clone = src && jQuery.isPlainObject(src) ? src : {}; - } - - // Never move original objects, clone them - target[ name ] = jQuery.extend( deep, clone, copy ); - - // Don't bring in undefined values - } else if ( copy !== undefined ) { - target[ name ] = copy; - } - } - } - } - - // Return the modified object - return target; -}; - -jQuery.extend({ - // Unique for each copy of jQuery on the page - expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), - - // Assume jQuery is ready without the ready module - isReady: true, - - error: function( msg ) { - throw new Error( msg ); - }, - - noop: function() {}, - - isFunction: function( obj ) { - return jQuery.type(obj) === "function"; - }, - - isArray: Array.isArray, - - isWindow: function( obj ) { - return obj != null && obj === obj.window; - }, - - 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 - // adding 1 corrects loss of precision from parseFloat (#15100) - return !jQuery.isArray( obj ) && (obj - parseFloat( obj ) + 1) >= 0; - }, - - isPlainObject: function( obj ) { - // Not plain objects: - // - Any object or value whose internal [[Class]] property is not "[object Object]" - // - DOM nodes - // - window - if ( jQuery.type( obj ) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { - return false; - } - - if ( obj.constructor && - !hasOwn.call( obj.constructor.prototype, "isPrototypeOf" ) ) { - return false; - } - - // If the function hasn't returned already, we're confident that - // |obj| is a plain object, created by {} or constructed with new Object - return true; - }, - - isEmptyObject: function( obj ) { - var name; - for ( name in obj ) { - return false; - } - return true; - }, - - type: function( obj ) { - if ( obj == null ) { - return obj + ""; - } - // Support: Android<4.0, iOS<6 (functionish RegExp) - return typeof obj === "object" || typeof obj === "function" ? - class2type[ toString.call(obj) ] || "object" : - typeof obj; - }, - - // Evaluates a script in a global context - globalEval: function( code ) { - var script, - indirect = eval; - - code = jQuery.trim( code ); - - if ( code ) { - // If the code includes a valid, prologue position - // strict mode pragma, execute code by injecting a - // script tag into the document. - if ( code.indexOf("use strict") === 1 ) { - script = document.createElement("script"); - script.text = code; - document.head.appendChild( script ).parentNode.removeChild( script ); - } else { - // Otherwise, avoid the DOM node creation, insertion - // and removal by using an indirect global eval - indirect( code ); - } - } - }, - - // Convert dashed to camelCase; used by the css and data modules - // Support: IE9-11+ - // Microsoft forgot to hump their vendor prefix (#9572) - camelCase: function( string ) { - return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); - }, - - nodeName: function( elem, name ) { - 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 ); - - if ( value === 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; - } - } - } - } - - return obj; - }, - - // Support: Android<4.1 - trim: function( text ) { - return text == null ? - "" : - ( text + "" ).replace( rtrim, "" ); - }, - - // results is for internal usage only - makeArray: function( arr, results ) { - var ret = results || []; - - if ( arr != null ) { - if ( isArraylike( Object(arr) ) ) { - jQuery.merge( ret, - typeof arr === "string" ? - [ arr ] : arr - ); - } else { - push.call( ret, arr ); - } - } - - return ret; - }, - - inArray: function( elem, arr, i ) { - return arr == null ? -1 : indexOf.call( arr, elem, i ); - }, - - merge: function( first, second ) { - var len = +second.length, - j = 0, - i = first.length; - - for ( ; j < len; j++ ) { - first[ i++ ] = second[ j ]; - } - - first.length = i; - - return first; - }, - - grep: function( elems, callback, invert ) { - var callbackInverse, - matches = [], - i = 0, - length = elems.length, - callbackExpect = !invert; - - // Go through the array, only saving the items - // that pass the validator function - for ( ; i < length; i++ ) { - callbackInverse = !callback( elems[ i ], i ); - if ( callbackInverse !== callbackExpect ) { - matches.push( elems[ i ] ); - } - } - - return matches; - }, - - // arg is for internal usage only - map: function( elems, callback, arg ) { - var 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 ) { - for ( ; i < length; i++ ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - - // Go through every key on the object, - } else { - for ( i in elems ) { - value = callback( elems[ i ], i, arg ); - - if ( value != null ) { - ret.push( value ); - } - } - } - - // Flatten any nested arrays - return concat.apply( [], ret ); - }, - - // A global GUID counter for objects - guid: 1, - - // Bind a function to a context, optionally partially applying any - // arguments. - proxy: function( fn, context ) { - var tmp, args, proxy; - - if ( typeof context === "string" ) { - tmp = fn[ context ]; - context = fn; - fn = tmp; - } - - // Quick check to determine if target is callable, in the spec - // this throws a TypeError, but we will just return undefined. - if ( !jQuery.isFunction( fn ) ) { - return undefined; - } - - // Simulated bind - args = slice.call( arguments, 2 ); - proxy = function() { - return fn.apply( context || this, args.concat( slice.call( arguments ) ) ); - }; - - // Set the guid of unique handler to the same of original handler, so it can be removed - proxy.guid = fn.guid = fn.guid || jQuery.guid++; - - return proxy; - }, - - now: Date.now, - - // jQuery.support is not used in Core but other projects attach their - // properties to it so it needs to exist. - support: support -}); - -// Populate the class2type map -jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { - class2type[ "[object " + name + "]" ] = name.toLowerCase(); -}); - -function isArraylike( obj ) { - - // 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 = "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 v2.2.0-pre - * http://sizzlejs.com/ - * - * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2014-12-16 - */ -(function( window ) { - -var i, - support, - Expr, - getText, - isXML, - tokenize, - compile, - select, - outermostContext, - sortInput, - hasDuplicate, - - // Local document vars - setDocument, - document, - docElem, - documentIsHTML, - rbuggyQSA, - rbuggyMatches, - matches, - contains, - - // Instance-specific data - expando = "sizzle" + 1 * new Date(), - preferredDoc = window.document, - dirruns = 0, - done = 0, - classCache = createCache(), - tokenCache = createCache(), - compilerCache = createCache(), - sortOrder = function( a, b ) { - if ( a === b ) { - hasDuplicate = true; - } - return 0; - }, - - // General-purpose constants - MAX_NEGATIVE = 1 << 31, - - // Instance methods - hasOwn = ({}).hasOwnProperty, - arr = [], - pop = arr.pop, - push_native = arr.push, - push = arr.push, - slice = arr.slice, - // 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 = list.length; - for ( ; i < len; i++ ) { - if ( list[i] === elem ) { - return i; - } - } - return -1; - }, - - booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped", - - // Regular expressions - - // Whitespace characters 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#" ), - - // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors - attributes = "\\[" + whitespace + "*(" + characterEncoding + ")(?:" + whitespace + - // Operator (capture 2) - "*([*^$|!~]?=)" + whitespace + - // "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]" - "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + - "*\\]", - - pseudos = ":(" + characterEncoding + ")(?:\\((" + - // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: - // 1. quoted (capture 3; capture 4 or capture 5) - "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + - // 2. simple (capture 6) - "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + - // 3. anything else (capture 2) - ".*" + - ")\\)|)", - - // 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 + "*" ), - rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ), - - rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ), - - rpseudo = new RegExp( pseudos ), - ridentifier = new RegExp( "^" + identifier + "$" ), - - matchExpr = { - "ID": new RegExp( "^#(" + characterEncoding + ")" ), - "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), - "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), - "ATTR": new RegExp( "^" + attributes ), - "PSEUDO": new RegExp( "^" + pseudos ), - "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + - "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + - "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), - "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), - // For use in libraries implementing .is() - // We use this for POS matching in `select` - "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + - whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) - }, - - rinputs = /^(?:input|select|textarea|button)$/i, - rheader = /^h\d$/i, - - rnative = /^[^{]+\{\s*\[native \w/, - - // Easily-parseable/retrievable ID or TAG or CLASS selectors - rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, - - rsibling = /[+~]/, - rescape = /'|\\/g, - - // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters - runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ), - funescape = function( _, escaped, escapedWhitespace ) { - var high = "0x" + escaped - 0x10000; - // NaN means non-codepoint - // Support: Firefox<24 - // Workaround erroneous numeric interpretation of +"0x" - return high !== high || escapedWhitespace ? - escaped : - high < 0 ? - // BMP codepoint - 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 ) -try { - push.apply( - (arr = slice.call( preferredDoc.childNodes )), - preferredDoc.childNodes - ); - // Support: Android<4.0 - // Detect silently failing push.apply - arr[ preferredDoc.childNodes.length ].nodeType; -} catch ( e ) { - push = { apply: arr.length ? - - // Leverage slice if possible - function( target, els ) { - push_native.apply( target, slice.call(els) ); - } : - - // Support: IE<9 - // Otherwise append directly - function( target, els ) { - var j = target.length, - i = 0; - // Can't trust NodeList.length - while ( (target[j++] = els[i++]) ) {} - target.length = j - 1; - } - }; -} - -function Sizzle( selector, context, results, seed ) { - var match, elem, m, nodeType, - // QSA vars - i, groups, old, nid, newContext, newSelector; - - if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { - setDocument( context ); - } - - context = context || document; - results = results || []; - nodeType = context.nodeType; - - if ( typeof selector !== "string" || !selector || - nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { - - return results; - } - - if ( !seed && documentIsHTML ) { - - // Try to shortcut find operations when possible (e.g., not under DocumentFragment) - if ( nodeType !== 11 && (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 ); - return results; - } - } 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; - } - } - - // Speed-up: Sizzle("TAG") - } else if ( match[2] ) { - push.apply( results, context.getElementsByTagName( selector ) ); - return results; - - // Speed-up: Sizzle(".CLASS") - } else if ( (m = match[3]) && support.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 !== 1 && 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 ( (old = context.getAttribute("id")) ) { - nid = old.replace( rescape, "\\$&" ); - } else { - context.setAttribute( "id", nid ); - } - nid = "[id='" + nid + "'] "; - - i = groups.length; - while ( i-- ) { - groups[i] = nid + toSelector( groups[i] ); - } - 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"); - } - } - } - } - } - - // All others - return select( selector.replace( rtrim, "$1" ), context, results, seed ); -} - -/** - * Create key-value caches of limited size - * @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 - */ -function createCache() { - var keys = []; - - function cache( key, value ) { - // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) - if ( keys.push( key + " " ) > Expr.cacheLength ) { - // Only keep the most recent entries - delete cache[ keys.shift() ]; - } - return (cache[ key + " " ] = value); - } - return cache; -} - -/** - * Mark a function for special use by Sizzle - * @param {Function} fn The function to mark - */ -function markFunction( fn ) { - fn[ expando ] = true; - return fn; -} - -/** - * Support testing using an element - * @param {Function} fn Passed the created div and expects a boolean result - */ -function assert( fn ) { - var div = document.createElement("div"); - - try { - return !!fn( div ); - } catch (e) { - return false; - } finally { - // Remove from its parent by default - if ( div.parentNode ) { - div.parentNode.removeChild( div ); - } - // release memory in IE - div = null; - } -} - -/** - * Adds the same handler for all of the specified attrs - * @param {String} attrs Pipe-separated list of attributes - * @param {Function} handler The method that will be applied - */ -function addHandle( attrs, handler ) { - var arr = attrs.split("|"), - i = attrs.length; - - while ( i-- ) { - Expr.attrHandle[ arr[i] ] = handler; - } -} - -/** - * Checks document order of two siblings - * @param {Element} a - * @param {Element} b - * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b - */ -function siblingCheck( a, b ) { - var cur = b && a, - diff = cur && a.nodeType === 1 && b.nodeType === 1 && - ( ~b.sourceIndex || MAX_NEGATIVE ) - - ( ~a.sourceIndex || MAX_NEGATIVE ); - - // Use IE sourceIndex if available on both nodes - if ( diff ) { - return diff; - } - - // Check if b follows a - if ( cur ) { - while ( (cur = cur.nextSibling) ) { - if ( cur === b ) { - return -1; - } - } - } - - return a ? 1 : -1; -} - -/** - * Returns a function to use in pseudos for input types - * @param {String} type - */ -function createInputPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for buttons - * @param {String} type - */ -function createButtonPseudo( type ) { - return function( elem ) { - var name = elem.nodeName.toLowerCase(); - return (name === "input" || name === "button") && elem.type === type; - }; -} - -/** - * Returns a function to use in pseudos for positionals - * @param {Function} fn - */ -function createPositionalPseudo( fn ) { - return markFunction(function( argument ) { - argument = +argument; - return markFunction(function( seed, matches ) { - var j, - matchIndexes = fn( [], seed.length, argument ), - i = matchIndexes.length; - - // Match elements found at the specified indexes - while ( i-- ) { - if ( seed[ (j = matchIndexes[i]) ] ) { - seed[j] = !(matches[j] = seed[j]); - } - } - }); - }); -} - -/** - * Checks a node for validity as a Sizzle context - * @param {Element|Object=} context - * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value - */ -function testContext( context ) { - return context && typeof context.getElementsByTagName !== "undefined" && context; -} - -// Expose support vars for convenience -support = Sizzle.support = {}; - -/** - * Detects XML nodes - * @param {Element|Object} elem An element or a document - * @returns {Boolean} True iff elem is a non-HTML XML node - */ -isXML = Sizzle.isXML = function( elem ) { - // documentElement is verified for cases where it doesn't yet exist - // (such as loading iframes in IE - #4833) - var documentElement = elem && (elem.ownerDocument || elem).documentElement; - return documentElement ? documentElement.nodeName !== "HTML" : false; -}; - -/** - * Sets document-related variables once based on the current document - * @param {Element|Object} [doc] An element or document object to use to set the document - * @returns {Object} Returns the current document - */ -setDocument = Sizzle.setDocument = function( node ) { - var hasCompare, parent, - doc = node ? node.ownerDocument || node : preferredDoc; - - // If no document and documentElement is available, return - if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { - return document; - } - - // Set our document - document = doc; - docElem = doc.documentElement; - parent = doc.defaultView; - - // 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 - if ( parent.addEventListener ) { - parent.addEventListener( "unload", unloadHandler, false ); - } else if ( parent.attachEvent ) { - parent.attachEvent( "onunload", unloadHandler ); - } - } - - /* Support tests - ---------------------------------------------------------------------- */ - documentIsHTML = !isXML( doc ); - - /* Attributes - ---------------------------------------------------------------------- */ - - // Support: IE<8 - // Verify that getAttribute really returns attributes and not properties - // (excepting IE8 booleans) - support.attributes = assert(function( div ) { - div.className = "i"; - return !div.getAttribute("className"); - }); - - /* getElement(s)By* - ---------------------------------------------------------------------- */ - - // Check if getElementsByTagName("*") returns only elements - support.getElementsByTagName = assert(function( div ) { - div.appendChild( doc.createComment("") ); - return !div.getElementsByTagName("*").length; - }); - - // Support: IE<9 - support.getElementsByClassName = rnative.test( doc.getElementsByClassName ); - - // Support: IE<10 - // Check if getElementById returns elements by name - // The broken getElementById methods don't pick up programatically-set names, - // so use a roundabout getElementsByName test - support.getById = assert(function( div ) { - docElem.appendChild( div ).id = expando; - return !doc.getElementsByName || !doc.getElementsByName( expando ).length; - }); - - // ID find and filter - if ( support.getById ) { - Expr.find["ID"] = function( id, context ) { - 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 ] : []; - } - }; - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - return elem.getAttribute("id") === attrId; - }; - }; - } else { - // Support: IE6/7 - // getElementById is not reliable as a find shortcut - delete Expr.find["ID"]; - - Expr.filter["ID"] = function( id ) { - var attrId = id.replace( runescape, funescape ); - return function( elem ) { - var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id"); - return node && node.value === attrId; - }; - }; - } - - // Tag - Expr.find["TAG"] = support.getElementsByTagName ? - function( tag, context ) { - 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 - if ( tag === "*" ) { - while ( (elem = results[i++]) ) { - if ( elem.nodeType === 1 ) { - tmp.push( elem ); - } - } - - return tmp; - } - return results; - }; - - // Class - Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) { - if ( documentIsHTML ) { - return context.getElementsByClassName( className ); - } - }; - - /* QSA/matchesSelector - ---------------------------------------------------------------------- */ - - // QSA and matchesSelector support - - // matchesSelector(:active) reports false when true (IE9/Opera 11.5) - rbuggyMatches = []; - - // qSa(:focus) reports false when true (Chrome 21) - // We allow this because of a bug in IE8/9 that throws an error - // whenever `document.activeElement` is accessed on an iframe - // So, we allow :focus to pass through QSA all the time to avoid the IE error - // See http://bugs.jquery.com/ticket/13378 - rbuggyQSA = []; - - if ( (support.qsa = rnative.test( doc.querySelectorAll )) ) { - // Build QSA regex - // Regex strategy adopted from Diego Perini - assert(function( div ) { - // Select is set to empty string on purpose - // This is to test IE's treatment of not explicitly - // setting a boolean content attribute, - // since its presence should be enough - // http://bugs.jquery.com/ticket/12359 - docElem.appendChild( div ).innerHTML = "<a id='" + expando + "'></a>" + - "<select id='" + expando + "-\f]' msallowcapture=''>" + - "<option selected=''></option></select>"; - - // 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("[msallowcapture^='']").length ) { - rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); - } - - // Support: IE8 - // Boolean attributes and "value" are not treated correctly - if ( !div.querySelectorAll("[selected]").length ) { - rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); - } - - // Support: Chrome<29, Android<4.2+, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.7+ - 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"); - input.setAttribute( "type", "hidden" ); - div.appendChild( input ).setAttribute( "name", "D" ); - - // Support: IE8 - // Enforce case-sensitivity of name attribute - if ( div.querySelectorAll("[name=d]").length ) { - rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); - } - - // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) - // IE8 throws error here and will not see later tests - if ( !div.querySelectorAll(":enabled").length ) { - rbuggyQSA.push( ":enabled", ":disabled" ); - } - - // Opera 10-11 does not throw on post-comma invalid pseudos - div.querySelectorAll("*,:x"); - rbuggyQSA.push(",.*:"); - }); - } - - if ( (support.matchesSelector = rnative.test( (matches = docElem.matches || - docElem.webkitMatchesSelector || - docElem.mozMatchesSelector || - docElem.oMatchesSelector || - docElem.msMatchesSelector) )) ) { - - assert(function( div ) { - // Check to see if it's possible to do matchesSelector - // on a disconnected node (IE 9) - support.disconnectedMatch = matches.call( div, "div" ); - - // This should fail with an exception - // Gecko does not error, returns false instead - matches.call( div, "[s!='']:x" ); - rbuggyMatches.push( "!=", pseudos ); - }); - } - - rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") ); - rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") ); - - /* Contains - ---------------------------------------------------------------------- */ - hasCompare = rnative.test( docElem.compareDocumentPosition ); - - // Element contains another - // Purposefully does not implement inclusive descendent - // As in, an element does not contain itself - contains = hasCompare || rnative.test( docElem.contains ) ? - function( a, b ) { - var adown = a.nodeType === 9 ? a.documentElement : a, - bup = b && b.parentNode; - return a === bup || !!( bup && bup.nodeType === 1 && ( - adown.contains ? - adown.contains( bup ) : - a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 - )); - } : - function( a, b ) { - if ( b ) { - while ( (b = b.parentNode) ) { - if ( b === a ) { - return true; - } - } - } - return false; - }; - - /* Sorting - ---------------------------------------------------------------------- */ - - // Document order sorting - sortOrder = hasCompare ? - function( a, b ) { - - // Flag for duplicate removal - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - // Sort on method existence if only one input has compareDocumentPosition - var compare = !a.compareDocumentPosition - !b.compareDocumentPosition; - if ( compare ) { - return compare; - } - - // Calculate position if both inputs belong to the same document - compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ? - a.compareDocumentPosition( b ) : - - // Otherwise we know they are disconnected - 1; - - // Disconnected nodes - if ( compare & 1 || - (!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) ) { - return -1; - } - if ( b === doc || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) { - return 1; - } - - // Maintain original order - return sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - } - - return compare & 4 ? -1 : 1; - } : - function( a, b ) { - // Exit early if the nodes are identical - if ( a === b ) { - hasDuplicate = true; - return 0; - } - - var cur, - i = 0, - aup = a.parentNode, - bup = b.parentNode, - ap = [ a ], - bp = [ b ]; - - // Parentless nodes are either documents or disconnected - if ( !aup || !bup ) { - return a === doc ? -1 : - b === doc ? 1 : - aup ? -1 : - bup ? 1 : - sortInput ? - ( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) : - 0; - - // If the nodes are siblings, we can do a quick check - } else if ( aup === bup ) { - return siblingCheck( a, b ); - } - - // Otherwise we need full lists of their ancestors for comparison - cur = a; - while ( (cur = cur.parentNode) ) { - ap.unshift( cur ); - } - cur = b; - while ( (cur = cur.parentNode) ) { - bp.unshift( cur ); - } - - // Walk down the tree looking for a discrepancy - while ( ap[i] === bp[i] ) { - i++; - } - - return i ? - // Do a sibling check if the nodes have a common ancestor - siblingCheck( ap[i], bp[i] ) : - - // Otherwise nodes in our document sort first - ap[i] === preferredDoc ? -1 : - bp[i] === preferredDoc ? 1 : - 0; - }; - - return doc; -}; - -Sizzle.matches = function( expr, elements ) { - return Sizzle( expr, null, null, elements ); -}; - -Sizzle.matchesSelector = function( elem, expr ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - // Make sure that attribute selectors are quoted - expr = expr.replace( rattributeQuotes, "='$1']" ); - - if ( support.matchesSelector && documentIsHTML && - ( !rbuggyMatches || !rbuggyMatches.test( expr ) ) && - ( !rbuggyQSA || !rbuggyQSA.test( expr ) ) ) { - - try { - var ret = matches.call( elem, expr ); - - // IE 9's matchesSelector returns false on disconnected nodes - if ( ret || support.disconnectedMatch || - // As well, disconnected nodes are said to be in a document - // fragment in IE 9 - elem.document && elem.document.nodeType !== 11 ) { - return ret; - } - } catch (e) {} - } - - return Sizzle( expr, document, null, [ elem ] ).length > 0; -}; - -Sizzle.contains = function( context, elem ) { - // Set document vars if needed - if ( ( context.ownerDocument || context ) !== document ) { - setDocument( context ); - } - return contains( context, elem ); -}; - -Sizzle.attr = function( elem, name ) { - // Set document vars if needed - if ( ( elem.ownerDocument || elem ) !== document ) { - setDocument( elem ); - } - - var fn = Expr.attrHandle[ name.toLowerCase() ], - // Don't get fooled by Object.prototype properties (jQuery #13807) - val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ? - fn( elem, name, !documentIsHTML ) : - undefined; - - return val !== undefined ? - val : - support.attributes || !documentIsHTML ? - elem.getAttribute( name ) : - (val = elem.getAttributeNode(name)) && val.specified ? - val.value : - null; -}; - -Sizzle.error = function( msg ) { - throw new Error( "Syntax error, unrecognized expression: " + msg ); -}; - -/** - * Document sorting and removing duplicates - * @param {ArrayLike} results - */ -Sizzle.uniqueSort = function( results ) { - var elem, - duplicates = [], - j = 0, - i = 0; - - // Unless we *know* we can detect duplicates, assume their presence - hasDuplicate = !support.detectDuplicates; - sortInput = !support.sortStable && results.slice( 0 ); - results.sort( sortOrder ); - - if ( hasDuplicate ) { - while ( (elem = results[i++]) ) { - if ( elem === results[ i ] ) { - j = duplicates.push( i ); - } - } - while ( j-- ) { - results.splice( duplicates[ j ], 1 ); - } - } - - // Clear input after sorting to release objects - // See https://github.com/jquery/sizzle/pull/225 - sortInput = null; - - return results; -}; - -/** - * Utility function for retrieving the text value of an array of DOM nodes - * @param {Array|Element} elem - */ -getText = Sizzle.getText = function( elem ) { - var node, - ret = "", - i = 0, - nodeType = elem.nodeType; - - if ( !nodeType ) { - // If no nodeType, this is expected to be an array - while ( (node = elem[i++]) ) { - // Do not traverse comment nodes - ret += getText( node ); - } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { - // Use textContent for elements - // innerText usage removed for consistency of new lines (jQuery #11153) - if ( typeof elem.textContent === "string" ) { - return elem.textContent; - } else { - // Traverse its children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - ret += getText( elem ); - } - } - } else if ( nodeType === 3 || nodeType === 4 ) { - return elem.nodeValue; - } - // Do not include comment or processing instruction nodes - - return ret; -}; - -Expr = Sizzle.selectors = { - - // Can be adjusted by the user - cacheLength: 50, - - createPseudo: markFunction, - - match: matchExpr, - - attrHandle: {}, - - find: {}, - - relative: { - ">": { dir: "parentNode", first: true }, - " ": { dir: "parentNode" }, - "+": { dir: "previousSibling", first: true }, - "~": { dir: "previousSibling" } - }, - - preFilter: { - "ATTR": function( match ) { - match[1] = match[1].replace( runescape, funescape ); - - // Move the given value to match[3] whether quoted or unquoted - match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape ); - - if ( match[2] === "~=" ) { - match[3] = " " + match[3] + " "; - } - - return match.slice( 0, 4 ); - }, - - "CHILD": function( match ) { - /* matches from matchExpr["CHILD"] - 1 type (only|nth|...) - 2 what (child|of-type) - 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) - 4 xn-component of xn+y argument ([+-]?\d*n|) - 5 sign of xn-component - 6 x of xn-component - 7 sign of y-component - 8 y of y-component - */ - match[1] = match[1].toLowerCase(); - - if ( match[1].slice( 0, 3 ) === "nth" ) { - // nth-* requires argument - if ( !match[3] ) { - Sizzle.error( match[0] ); - } - - // numeric x and y parameters for Expr.filter.CHILD - // remember that false/true cast respectively to 0/1 - match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); - match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); - - // other types prohibit arguments - } else if ( match[3] ) { - Sizzle.error( match[0] ); - } - - return match; - }, - - "PSEUDO": function( match ) { - var excess, - unquoted = !match[6] && match[2]; - - if ( matchExpr["CHILD"].test( match[0] ) ) { - return null; - } - - // Accept quoted arguments as-is - if ( match[3] ) { - match[2] = match[4] || match[5] || ""; - - // Strip excess characters from unquoted arguments - } else if ( unquoted && rpseudo.test( unquoted ) && - // Get excess from tokenize (recursively) - (excess = tokenize( unquoted, true )) && - // advance to the next closing parenthesis - (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { - - // excess is a negative index - match[0] = match[0].slice( 0, excess ); - match[2] = unquoted.slice( 0, excess ); - } - - // Return only captures needed by the pseudo filter method (type and argument) - return match.slice( 0, 3 ); - } - }, - - filter: { - - "TAG": function( nodeNameSelector ) { - var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase(); - return nodeNameSelector === "*" ? - function() { return true; } : - function( elem ) { - return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; - }; - }, - - "CLASS": function( className ) { - var pattern = classCache[ className + " " ]; - - return pattern || - (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && - classCache( className, function( elem ) { - return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" ); - }); - }, - - "ATTR": function( name, operator, check ) { - return function( elem ) { - var result = Sizzle.attr( elem, name ); - - if ( result == null ) { - return operator === "!="; - } - if ( !operator ) { - return true; - } - - result += ""; - - return operator === "=" ? result === check : - operator === "!=" ? result !== check : - operator === "^=" ? check && result.indexOf( check ) === 0 : - operator === "*=" ? check && result.indexOf( check ) > -1 : - operator === "$=" ? check && result.slice( -check.length ) === check : - operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 : - operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : - false; - }; - }, - - "CHILD": function( type, what, argument, first, last ) { - var simple = type.slice( 0, 3 ) !== "nth", - forward = type.slice( -4 ) !== "last", - ofType = what === "of-type"; - - return first === 1 && last === 0 ? - - // Shortcut for :nth-*(n) - function( elem ) { - return !!elem.parentNode; - } : - - function( elem, context, xml ) { - var cache, outerCache, node, diff, nodeIndex, start, - dir = simple !== forward ? "nextSibling" : "previousSibling", - parent = elem.parentNode, - name = ofType && elem.nodeName.toLowerCase(), - useCache = !xml && !ofType; - - if ( parent ) { - - // :(first|last|only)-(child|of-type) - if ( simple ) { - while ( dir ) { - node = elem; - while ( (node = node[ dir ]) ) { - if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { - return false; - } - } - // Reverse direction for :only-* (if we haven't yet done so) - start = dir = type === "only" && !start && "nextSibling"; - } - return true; - } - - start = [ forward ? parent.firstChild : parent.lastChild ]; - - // 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]; - node = nodeIndex && parent.childNodes[ nodeIndex ]; - - while ( (node = ++nodeIndex && node && node[ dir ] || - - // Fallback to seeking `elem` from the start - (diff = nodeIndex = 0) || start.pop()) ) { - - // When found, cache indexes on `parent` and break - if ( node.nodeType === 1 && ++diff && node === elem ) { - outerCache[ 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()) ) { - - 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 ]; - } - - if ( node === elem ) { - break; - } - } - } - } - - // Incorporate the offset, then check against cycle size - diff -= last; - return diff === first || ( diff % first === 0 && diff / first >= 0 ); - } - }; - }, - - "PSEUDO": function( pseudo, argument ) { - // pseudo-class names are case-insensitive - // http://www.w3.org/TR/selectors/#pseudo-classes - // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters - // Remember that setFilters inherits from pseudos - var args, - fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || - Sizzle.error( "unsupported pseudo: " + pseudo ); - - // The user may use createPseudo to indicate that - // arguments are needed to create the filter function - // just as Sizzle does - if ( fn[ expando ] ) { - return fn( argument ); - } - - // But maintain support for old signatures - if ( fn.length > 1 ) { - args = [ pseudo, pseudo, "", argument ]; - return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? - markFunction(function( seed, matches ) { - var idx, - matched = fn( seed, argument ), - i = matched.length; - while ( i-- ) { - idx = indexOf( seed, matched[i] ); - seed[ idx ] = !( matches[ idx ] = matched[i] ); - } - }) : - function( elem ) { - return fn( elem, 0, args ); - }; - } - - return fn; - } - }, - - pseudos: { - // Potentially complex pseudos - "not": markFunction(function( selector ) { - // Trim the selector passed to compile - // to avoid treating leading and trailing - // spaces as combinators - var input = [], - results = [], - matcher = compile( selector.replace( rtrim, "$1" ) ); - - return matcher[ expando ] ? - markFunction(function( seed, matches, context, xml ) { - var elem, - unmatched = matcher( seed, null, xml, [] ), - i = seed.length; - - // Match elements unmatched by `matcher` - while ( i-- ) { - if ( (elem = unmatched[i]) ) { - seed[i] = !(matches[i] = elem); - } - } - }) : - 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(); - }; - }), - - "has": markFunction(function( selector ) { - return function( elem ) { - return Sizzle( selector, elem ).length > 0; - }; - }), - - "contains": markFunction(function( text ) { - text = text.replace( runescape, funescape ); - return function( elem ) { - return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; - }; - }), - - // "Whether an element is represented by a :lang() selector - // is based solely on the element's language value - // being equal to the identifier C, - // or beginning with the identifier C immediately followed by "-". - // The matching of C against the element's language value is performed case-insensitively. - // The identifier C does not have to be a valid language name." - // http://www.w3.org/TR/selectors/#lang-pseudo - "lang": markFunction( function( lang ) { - // lang value must be a valid identifier - if ( !ridentifier.test(lang || "") ) { - Sizzle.error( "unsupported lang: " + lang ); - } - lang = lang.replace( runescape, funescape ).toLowerCase(); - return function( elem ) { - var elemLang; - do { - if ( (elemLang = documentIsHTML ? - elem.lang : - elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) { - - elemLang = elemLang.toLowerCase(); - return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; - } - } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); - return false; - }; - }), - - // Miscellaneous - "target": function( elem ) { - var hash = window.location && window.location.hash; - return hash && hash.slice( 1 ) === elem.id; - }, - - "root": function( elem ) { - return elem === docElem; - }, - - "focus": function( elem ) { - return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); - }, - - // Boolean properties - "enabled": function( elem ) { - return elem.disabled === false; - }, - - "disabled": function( elem ) { - return elem.disabled === true; - }, - - "checked": function( elem ) { - // In CSS3, :checked should return both checked and selected elements - // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked - var nodeName = elem.nodeName.toLowerCase(); - return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); - }, - - "selected": function( elem ) { - // Accessing this property makes selected-by-default - // options in Safari work properly - if ( elem.parentNode ) { - elem.parentNode.selectedIndex; - } - - return elem.selected === true; - }, - - // Contents - "empty": function( elem ) { - // http://www.w3.org/TR/selectors/#empty-pseudo - // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5), - // but not by others (comment: 8; processing instruction: 7; etc.) - // nodeType < 6 works because attributes (2) do not appear as children - for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { - if ( elem.nodeType < 6 ) { - return false; - } - } - return true; - }, - - "parent": function( elem ) { - return !Expr.pseudos["empty"]( elem ); - }, - - // Element/input types - "header": function( elem ) { - return rheader.test( elem.nodeName ); - }, - - "input": function( elem ) { - return rinputs.test( elem.nodeName ); - }, - - "button": function( elem ) { - var name = elem.nodeName.toLowerCase(); - return name === "input" && elem.type === "button" || name === "button"; - }, - - "text": function( elem ) { - var attr; - return elem.nodeName.toLowerCase() === "input" && - elem.type === "text" && - - // Support: IE<8 - // New HTML5 attribute values (e.g., "search") appear with elem.type === "text" - ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" ); - }, - - // Position-in-collection - "first": createPositionalPseudo(function() { - return [ 0 ]; - }), - - "last": createPositionalPseudo(function( matchIndexes, length ) { - return [ length - 1 ]; - }), - - "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { - return [ argument < 0 ? argument + length : argument ]; - }), - - "even": createPositionalPseudo(function( matchIndexes, length ) { - var i = 0; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "odd": createPositionalPseudo(function( matchIndexes, length ) { - var i = 1; - for ( ; i < length; i += 2 ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; --i >= 0; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }), - - "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { - var i = argument < 0 ? argument + length : argument; - for ( ; ++i < length; ) { - matchIndexes.push( i ); - } - return matchIndexes; - }) - } -}; - -Expr.pseudos["nth"] = Expr.pseudos["eq"]; - -// Add button/input type pseudos -for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { - Expr.pseudos[ i ] = createInputPseudo( i ); -} -for ( i in { submit: true, reset: true } ) { - Expr.pseudos[ i ] = createButtonPseudo( i ); -} - -// Easy API for creating new setFilters -function setFilters() {} -setFilters.prototype = Expr.filters = Expr.pseudos; -Expr.setFilters = new setFilters(); - -tokenize = Sizzle.tokenize = function( selector, parseOnly ) { - var matched, match, tokens, type, - soFar, groups, preFilters, - cached = tokenCache[ selector + " " ]; - - if ( cached ) { - return parseOnly ? 0 : cached.slice( 0 ); - } - - soFar = selector; - groups = []; - preFilters = Expr.preFilter; - - while ( soFar ) { - - // Comma and first run - if ( !matched || (match = rcomma.exec( soFar )) ) { - if ( match ) { - // Don't consume trailing commas as valid - soFar = soFar.slice( match[0].length ) || soFar; - } - groups.push( (tokens = []) ); - } - - matched = false; - - // Combinators - if ( (match = rcombinators.exec( soFar )) ) { - matched = match.shift(); - tokens.push({ - value: matched, - // Cast descendant combinators to space - type: match[0].replace( rtrim, " " ) - }); - soFar = soFar.slice( matched.length ); - } - - // Filters - for ( type in Expr.filter ) { - if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || - (match = preFilters[ type ]( match ))) ) { - matched = match.shift(); - tokens.push({ - value: matched, - type: type, - matches: match - }); - soFar = soFar.slice( matched.length ); - } - } - - if ( !matched ) { - break; - } - } - - // Return the length of the invalid excess - // if we're just parsing - // Otherwise, throw an error or return tokens - return parseOnly ? - soFar.length : - soFar ? - Sizzle.error( selector ) : - // Cache the tokens - tokenCache( selector, groups ).slice( 0 ); -}; - -function toSelector( tokens ) { - var i = 0, - len = tokens.length, - selector = ""; - for ( ; i < len; i++ ) { - selector += tokens[i].value; - } - return selector; -} - -function addCombinator( matcher, combinator, base ) { - var dir = combinator.dir, - checkNonElements = base && dir === "parentNode", - doneName = done++; - - return combinator.first ? - // Check against closest ancestor/preceding element - function( elem, context, xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - return matcher( elem, context, xml ); - } - } - } : - - // Check against all ancestor/preceding elements - function( elem, context, xml ) { - var oldCache, outerCache, - newCache = [ dirruns, doneName ]; - - // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching - if ( xml ) { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - if ( matcher( elem, context, xml ) ) { - return true; - } - } - } - } else { - while ( (elem = elem[ dir ]) ) { - if ( elem.nodeType === 1 || checkNonElements ) { - outerCache = elem[ expando ] || (elem[ expando ] = {}); - if ( (oldCache = outerCache[ 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; - - // A match means we're done; a fail means we have to keep checking - if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) { - return true; - } - } - } - } - } - }; -} - -function elementMatcher( matchers ) { - return matchers.length > 1 ? - function( elem, context, xml ) { - var i = matchers.length; - while ( i-- ) { - if ( !matchers[i]( elem, context, xml ) ) { - return false; - } - } - return true; - } : - matchers[0]; -} - -function multipleContexts( selector, contexts, results ) { - var i = 0, - len = contexts.length; - for ( ; i < len; i++ ) { - Sizzle( selector, contexts[i], results ); - } - return results; -} - -function condense( unmatched, map, filter, context, xml ) { - var elem, - newUnmatched = [], - i = 0, - len = unmatched.length, - mapped = map != null; - - for ( ; i < len; i++ ) { - if ( (elem = unmatched[i]) ) { - if ( !filter || filter( elem, context, xml ) ) { - newUnmatched.push( elem ); - if ( mapped ) { - map.push( i ); - } - } - } - } - - return newUnmatched; -} - -function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { - if ( postFilter && !postFilter[ expando ] ) { - postFilter = setMatcher( postFilter ); - } - if ( postFinder && !postFinder[ expando ] ) { - postFinder = setMatcher( postFinder, postSelector ); - } - return markFunction(function( seed, results, context, xml ) { - var temp, i, elem, - preMap = [], - postMap = [], - preexisting = results.length, - - // Get initial elements from seed or context - elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), - - // Prefilter to get matcher input, preserving a map for seed-results synchronization - matcherIn = preFilter && ( seed || !selector ) ? - condense( elems, preMap, preFilter, context, xml ) : - elems, - - matcherOut = matcher ? - // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, - postFinder || ( seed ? preFilter : preexisting || postFilter ) ? - - // ...intermediate processing is necessary - [] : - - // ...otherwise use results directly - results : - matcherIn; - - // Find primary matches - if ( matcher ) { - matcher( matcherIn, matcherOut, context, xml ); - } - - // Apply postFilter - if ( postFilter ) { - temp = condense( matcherOut, postMap ); - postFilter( temp, [], context, xml ); - - // Un-match failing elements by moving them back to matcherIn - i = temp.length; - while ( i-- ) { - if ( (elem = temp[i]) ) { - matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); - } - } - } - - if ( seed ) { - if ( postFinder || preFilter ) { - if ( postFinder ) { - // Get the final matcherOut by condensing this intermediate into postFinder contexts - temp = []; - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) ) { - // Restore matcherIn since elem is not yet a final match - temp.push( (matcherIn[i] = elem) ); - } - } - postFinder( null, (matcherOut = []), temp, xml ); - } - - // Move matched elements from seed to results to keep them synchronized - i = matcherOut.length; - while ( i-- ) { - if ( (elem = matcherOut[i]) && - (temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) { - - seed[temp] = !(results[temp] = elem); - } - } - } - - // Add elements to results, through postFinder if defined - } else { - matcherOut = condense( - matcherOut === results ? - matcherOut.splice( preexisting, matcherOut.length ) : - matcherOut - ); - if ( postFinder ) { - postFinder( null, results, matcherOut, xml ); - } else { - push.apply( results, matcherOut ); - } - } - }); -} - -function matcherFromTokens( tokens ) { - var checkContext, matcher, j, - len = tokens.length, - leadingRelative = Expr.relative[ tokens[0].type ], - implicitRelative = leadingRelative || Expr.relative[" "], - i = leadingRelative ? 1 : 0, - - // The foundational matcher ensures that elements are reachable from top-level context(s) - matchContext = addCombinator( function( elem ) { - return elem === checkContext; - }, implicitRelative, true ), - matchAnyContext = addCombinator( function( elem ) { - return indexOf( checkContext, elem ) > -1; - }, implicitRelative, true ), - matchers = [ function( elem, context, xml ) { - 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++ ) { - if ( (matcher = Expr.relative[ tokens[i].type ]) ) { - matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; - } else { - matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); - - // Return special upon seeing a positional matcher - if ( matcher[ expando ] ) { - // Find the next relative operator (if any) for proper handling - j = ++i; - for ( ; j < len; j++ ) { - if ( Expr.relative[ tokens[j].type ] ) { - break; - } - } - return setMatcher( - i > 1 && elementMatcher( matchers ), - i > 1 && toSelector( - // If the preceding token was a descendant combinator, insert an implicit any-element `*` - tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" }) - ).replace( rtrim, "$1" ), - matcher, - i < j && matcherFromTokens( tokens.slice( i, j ) ), - j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), - j < len && toSelector( tokens ) - ); - } - matchers.push( matcher ); - } - } - - return elementMatcher( matchers ); -} - -function matcherFromGroupMatchers( elementMatchers, setMatchers ) { - var bySet = setMatchers.length > 0, - byElement = elementMatchers.length > 0, - superMatcher = function( seed, context, xml, results, outermost ) { - var elem, j, matcher, - matchedCount = 0, - i = "0", - unmatched = seed && [], - setMatched = [], - contextBackup = outermostContext, - // We must always have either seed elements or outermost context - elems = seed || byElement && Expr.find["TAG"]( "*", outermost ), - // Use integer dirruns iff this is the outermost matcher - dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1), - len = elems.length; - - if ( outermost ) { - outermostContext = context !== document && context; - } - - // 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: <number>) matching elements by id - for ( ; i !== len && (elem = elems[i]) != null; i++ ) { - if ( byElement && elem ) { - j = 0; - while ( (matcher = elementMatchers[j++]) ) { - if ( matcher( elem, context, xml ) ) { - results.push( elem ); - break; - } - } - if ( outermost ) { - dirruns = dirrunsUnique; - } - } - - // Track unmatched elements for set filters - if ( bySet ) { - // They will have gone through all possible matchers - if ( (elem = !matcher && elem) ) { - matchedCount--; - } - - // Lengthen the array for every element, matched or not - if ( seed ) { - unmatched.push( elem ); - } - } - } - - // Apply set filters to unmatched elements - matchedCount += i; - if ( bySet && i !== matchedCount ) { - j = 0; - while ( (matcher = setMatchers[j++]) ) { - matcher( unmatched, setMatched, context, xml ); - } - - if ( seed ) { - // Reintegrate element matches to eliminate the need for sorting - if ( matchedCount > 0 ) { - while ( i-- ) { - if ( !(unmatched[i] || setMatched[i]) ) { - setMatched[i] = pop.call( results ); - } - } - } - - // Discard index placeholder values to get only actual matches - setMatched = condense( setMatched ); - } - - // Add matches to results - push.apply( results, setMatched ); - - // Seedless set matches succeeding multiple successful matchers stipulate sorting - if ( outermost && !seed && setMatched.length > 0 && - ( matchedCount + setMatchers.length ) > 1 ) { - - Sizzle.uniqueSort( results ); - } - } - - // Override manipulation of globals by nested matchers - if ( outermost ) { - dirruns = dirrunsUnique; - outermostContext = contextBackup; - } - - return unmatched; - }; - - return bySet ? - markFunction( superMatcher ) : - superMatcher; -} - -compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) { - var i, - setMatchers = [], - elementMatchers = [], - cached = compilerCache[ selector + " " ]; - - if ( !cached ) { - // Generate a function of recursive functions that can be used to check each element - if ( !match ) { - match = tokenize( selector ); - } - i = match.length; - while ( i-- ) { - cached = matcherFromTokens( match[i] ); - if ( cached[ expando ] ) { - setMatchers.push( cached ); - } else { - elementMatchers.push( cached ); - } - } - - // Cache the compiled function - cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); - - // Save selector and tokenization - cached.selector = selector; - } - return cached; -}; - -/** - * A low-level selection function that works with Sizzle's compiled - * selector functions - * @param {String|Function} selector A selector or a pre-compiled - * selector function built with Sizzle.compile - * @param {Element} context - * @param {Array} [results] - * @param {Array} [seed] A set of elements to match against - */ -select = Sizzle.select = function( selector, context, results, seed ) { - var i, tokens, token, type, find, - compiled = typeof selector === "function" && selector, - match = !seed && tokenize( (selector = compiled.selector || selector) ); - - results = results || []; - - // Try to minimize operations if there is no seed and only one group - if ( match.length === 1 ) { - - // Take a shortcut and set the context if the root 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 && - Expr.relative[ tokens[1].type ] ) { - - context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0]; - if ( !context ) { - return results; - - // Precompiled matchers will still verify ancestry, so step up a level - } else if ( compiled ) { - context = context.parentNode; - } - - selector = selector.slice( tokens.shift().value.length ); - } - - // Fetch a seed set for right-to-left matching - i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; - while ( i-- ) { - token = tokens[i]; - - // Abort if we hit a combinator - if ( Expr.relative[ (type = token.type) ] ) { - break; - } - if ( (find = Expr.find[ type ]) ) { - // Search, expanding context for leading sibling combinators - if ( (seed = find( - token.matches[0].replace( runescape, funescape ), - rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context - )) ) { - - // If seed is empty or no tokens remain, we can return early - tokens.splice( i, 1 ); - selector = seed.length && toSelector( tokens ); - if ( !selector ) { - push.apply( results, seed ); - return results; - } - - break; - } - } - } - } - - // Compile and execute a filtering function if one is not provided - // Provide `match` to avoid retokenization if we modified the selector above - ( compiled || compile( selector, match ) )( - seed, - context, - !documentIsHTML, - results, - rsibling.test( selector ) && testContext( context.parentNode ) || context - ); - return results; -}; - -// One-time assignments - -// Sort stability -support.sortStable = expando.split("").sort( sortOrder ).join("") === expando; - -// Support: Chrome 14-35+ -// Always assume duplicates if they aren't passed to the comparison function -support.detectDuplicates = !!hasDuplicate; - -// Initialize against the default document -setDocument(); - -// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27) -// Detached nodes confoundingly follow *each other* -support.sortDetached = assert(function( div1 ) { - // Should return 1, but returns 4 (following) - return div1.compareDocumentPosition( document.createElement("div") ) & 1; -}); - -// Support: IE<8 -// Prevent attribute/property "interpolation" -// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx -if ( !assert(function( div ) { - div.innerHTML = "<a href='#'></a>"; - return div.firstChild.getAttribute("href") === "#" ; -}) ) { - addHandle( "type|href|height|width", function( elem, name, isXML ) { - if ( !isXML ) { - return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 ); - } - }); -} - -// Support: IE<9 -// Use defaultValue in place of getAttribute("value") -if ( !support.attributes || !assert(function( div ) { - div.innerHTML = "<input/>"; - div.firstChild.setAttribute( "value", "" ); - return div.firstChild.getAttribute( "value" ) === ""; -}) ) { - addHandle( "value", function( elem, name, isXML ) { - if ( !isXML && elem.nodeName.toLowerCase() === "input" ) { - return elem.defaultValue; - } - }); -} - -// Support: IE<9 -// Use getAttributeNode to fetch booleans when getAttribute lies -if ( !assert(function( div ) { - return div.getAttribute("disabled") == null; -}) ) { - addHandle( booleans, function( elem, name, isXML ) { - var val; - if ( !isXML ) { - return elem[ name ] === true ? name.toLowerCase() : - (val = elem.getAttributeNode( name )) && val.specified ? - val.value : - null; - } - }); -} - -return Sizzle; - -})( window ); - - - -jQuery.find = Sizzle; -jQuery.expr = Sizzle.selectors; -jQuery.expr[":"] = jQuery.expr.pseudos; -jQuery.unique = Sizzle.uniqueSort; -jQuery.text = Sizzle.getText; -jQuery.isXMLDoc = Sizzle.isXML; -jQuery.contains = Sizzle.contains; - - - -var rneedsContext = jQuery.expr.match.needsContext; - -var rsingleTag = (/^<(\w+)\s*\/?>(?:<\/\1>|)$/); - - - -var risSimple = /^.[^:#\[\.,]*$/; - -// Implement the identical functionality for filter and not -function winnow( elements, qualifier, not ) { - if ( jQuery.isFunction( qualifier ) ) { - 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; - }); - - } - - if ( typeof qualifier === "string" ) { - if ( risSimple.test( qualifier ) ) { - return jQuery.filter( qualifier, elements, not ); - } - - qualifier = jQuery.filter( qualifier, elements ); - } - - return jQuery.grep( elements, function( elem ) { - return ( indexOf.call( qualifier, elem ) >= 0 ) !== not; - }); -} - -jQuery.filter = function( expr, elems, not ) { - var elem = elems[ 0 ]; - - if ( not ) { - expr = ":not(" + expr + ")"; - } - - return elems.length === 1 && elem.nodeType === 1 ? - jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] : - jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) { - return elem.nodeType === 1; - })); -}; - -jQuery.fn.extend({ - find: function( selector ) { - var i, - len = this.length, - ret = [], - self = this; - - if ( typeof selector !== "string" ) { - 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++ ) { - jQuery.find( selector, self[ i ], ret ); - } - - // Needed because $( selector, context ) becomes $( context ).find( selector ) - ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); - ret.selector = this.selector ? this.selector + " " + selector : selector; - return ret; - }, - filter: function( selector ) { - return this.pushStack( winnow(this, selector || [], false) ); - }, - not: function( selector ) { - return this.pushStack( winnow(this, selector || [], true) ); - }, - is: function( selector ) { - return !!winnow( - this, - - // If this is a positional/relative selector, check membership in the returned set - // so $("p:first").is("p:last") won't return true for a doc with two "p". - typeof selector === "string" && rneedsContext.test( selector ) ? - jQuery( selector ) : - selector || [], - false - ).length; - } -}); - - -// Initialize a jQuery object - - -// A central reference to the root jQuery(document) -var rootjQuery, - - // A simple way to check for HTML strings - // Prioritize #id over <tag> 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 ) { - var match, elem; - - // HANDLE: $(""), $(null), $(undefined), $(false) - if ( !selector ) { - return this; - } - - // Handle HTML strings - if ( typeof selector === "string" ) { - if ( selector[0] === "<" && selector[ 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 ]; - - } else { - match = rquickExpr.exec( selector ); - } - - // Match html or make sure no context is specified for #id - if ( match && (match[1] || !context) ) { - - // HANDLE: $(html) -> $(array) - if ( match[1] ) { - context = context instanceof jQuery ? context[0] : context; - - // Option to run scripts is true for back-compat - // Intentionally let the error be thrown if parseHTML is not present - jQuery.merge( this, jQuery.parseHTML( - match[1], - context && context.nodeType ? context.ownerDocument || context : document, - true - ) ); - - // HANDLE: $(html, props) - 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 ] ); - - // ...and otherwise set as attributes - } else { - this.attr( match, context[ match ] ); - } - } - } - - return this; - - // HANDLE: $(#id) - } else { - elem = document.getElementById( match[2] ); - - // Support: Blackberry 4.6 - // gEBID returns nodes no longer in the document (#6963) - if ( elem && elem.parentNode ) { - // Inject the element directly into the jQuery object - this.length = 1; - this[0] = elem; - } - - this.context = document; - this.selector = selector; - return this; - } - - // HANDLE: $(expr, $(...)) - } else if ( !context || context.jquery ) { - return ( context || rootjQuery ).find( selector ); - - // HANDLE: $(expr, context) - // (which is just equivalent to: $(context).find(expr) - } else { - return this.constructor( context ).find( selector ); - } - - // HANDLE: $(DOMElement) - } else if ( selector.nodeType ) { - 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 ) : - // Execute immediately if ready is not present - selector( jQuery ); - } - - if ( selector.selector !== undefined ) { - this.selector = selector.selector; - this.context = selector.context; - } - - return jQuery.makeArray( selector, this ); - }; - -// Give the init function the jQuery prototype for later instantiation -init.prototype = jQuery.fn; - -// Initialize central reference -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, - contents: true, - next: true, - prev: true - }; - -jQuery.extend({ - 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; - }, - - sibling: function( n, elem ) { - var matched = []; - - for ( ; n; n = n.nextSibling ) { - if ( n.nodeType === 1 && n !== elem ) { - matched.push( n ); - } - } - - return matched; - } -}); - -jQuery.fn.extend({ - has: function( target ) { - var targets = jQuery( target, this ), - l = targets.length; - - return this.filter(function() { - var i = 0; - for ( ; i < l; i++ ) { - if ( jQuery.contains( this, targets[i] ) ) { - return true; - } - } - }); - }, - - closest: function( selectors, context ) { - var cur, - i = 0, - l = this.length, - matched = [], - pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? - jQuery( selectors, context || this.context ) : - 0; - - for ( ; i < l; i++ ) { - for ( cur = this[i]; cur && cur !== context; cur = cur.parentNode ) { - // Always skip document fragments - if ( cur.nodeType < 11 && (pos ? - pos.index(cur) > -1 : - - // Don't pass non-elements to Sizzle - cur.nodeType === 1 && - jQuery.find.matchesSelector(cur, selectors)) ) { - - matched.push( cur ); - break; - } - } - } - - return this.pushStack( matched.length > 1 ? jQuery.unique( matched ) : matched ); - }, - - // Determine the position of an element within the set - index: function( elem ) { - - // No argument, return index in parent - if ( !elem ) { - return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1; - } - - // Index in selector - if ( typeof elem === "string" ) { - return indexOf.call( jQuery( elem ), this[ 0 ] ); - } - - // Locate the position of the desired element - return indexOf.call( this, - - // If it receives a jQuery object, the first element is used - elem.jquery ? elem[ 0 ] : elem - ); - }, - - add: function( selector, context ) { - return this.pushStack( - jQuery.unique( - jQuery.merge( this.get(), jQuery( selector, context ) ) - ) - ); - }, - - addBack: function( selector ) { - return this.add( selector == null ? - this.prevObject : this.prevObject.filter(selector) - ); - } -}); - -function sibling( cur, dir ) { - while ( (cur = cur[dir]) && cur.nodeType !== 1 ) {} - return cur; -} - -jQuery.each({ - parent: function( elem ) { - var parent = elem.parentNode; - return parent && parent.nodeType !== 11 ? parent : null; - }, - parents: function( elem ) { - return jQuery.dir( elem, "parentNode" ); - }, - parentsUntil: function( elem, i, until ) { - return jQuery.dir( elem, "parentNode", until ); - }, - next: function( elem ) { - return sibling( elem, "nextSibling" ); - }, - prev: function( elem ) { - return sibling( elem, "previousSibling" ); - }, - nextAll: function( elem ) { - return jQuery.dir( elem, "nextSibling" ); - }, - prevAll: function( elem ) { - return jQuery.dir( elem, "previousSibling" ); - }, - nextUntil: function( elem, i, until ) { - return jQuery.dir( elem, "nextSibling", until ); - }, - prevUntil: function( elem, i, until ) { - return jQuery.dir( elem, "previousSibling", until ); - }, - siblings: function( elem ) { - return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); - }, - children: function( elem ) { - return jQuery.sibling( elem.firstChild ); - }, - contents: function( elem ) { - return elem.contentDocument || jQuery.merge( [], elem.childNodes ); - } -}, function( name, fn ) { - jQuery.fn[ name ] = function( until, selector ) { - var matched = jQuery.map( this, fn, until ); - - if ( name.slice( -5 ) !== "Until" ) { - selector = until; - } - - if ( selector && typeof selector === "string" ) { - matched = jQuery.filter( selector, matched ); - } - - if ( this.length > 1 ) { - // Remove duplicates - if ( !guaranteedUnique[ name ] ) { - jQuery.unique( matched ); - } - - // Reverse order for parents* and prev-derivatives - if ( rparentsprev.test( name ) ) { - matched.reverse(); - } - } - - return this.pushStack( matched ); - }; -}); -var rnotwhite = (/\S+/g); - - - -// String to Object options format cache -var optionsCache = {}; - -// Convert String-formatted options into Object-formatted ones and store in cache -function createOptions( options ) { - var object = optionsCache[ options ] = {}; - jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) { - object[ flag ] = true; - }); - return object; -} - -/* - * Create a callback list using the following parameters: - * - * options: an optional list of space-separated options that will change how - * the callback list behaves or a more traditional option object - * - * By default a callback list will act like an event callback list and can be - * "fired" multiple times. - * - * Possible options: - * - * once: will ensure the callback list can only be fired once (like a Deferred) - * - * memory: will keep track of previous values and will call any callback added - * after the list has been fired right away with the latest "memorized" - * values (like a Deferred) - * - * unique: will ensure a callback can only be added once (no duplicate in the list) - * - * stopOnFalse: interrupt callings when a callback returns false - * - */ -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 ) ) : - jQuery.extend( {}, options ); - - var // Last fire value (for non-forgettable lists) - memory, - // Flag to know if list was already fired - fired, - // Flag to know if list is currently firing - firing, - // First callback to fire (used internally by add and fireWith) - firingStart, - // End of the loop when firing - firingLength, - // Index of currently firing callback (modified by remove if needed) - firingIndex, - // Actual callback list - list = [], - // Stack of fire calls for repeatable lists - stack = !options.once && [], - // 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; - } - } - firing = false; - if ( list ) { - if ( stack ) { - if ( stack.length ) { - fire( stack.shift() ); - } - } else if ( memory ) { - list = []; - } else { - self.disable(); - } - } - }, - // 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 ) { - jQuery.each( args, function( _, arg ) { - var type = jQuery.type( arg ); - if ( type === "function" ) { - if ( !options.unique || !self.has( arg ) ) { - list.push( arg ); - } - } else if ( arg && arg.length && type !== "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 ); - } - } - 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--; - } - } - } - }); - } - 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 ); - }, - // Remove all callbacks from the list - empty: function() { - list = []; - firingLength = 0; - return this; - }, - // Have the list do nothing anymore - disable: function() { - list = stack = memory = undefined; - return this; - }, - // Is it disabled? - disabled: function() { - return !list; - }, - // Lock the list in its current state - lock: function() { - stack = undefined; - if ( !memory ) { - self.disable(); - } - return this; - }, - // Is it locked? - locked: function() { - return !stack; - }, - // Call all callbacks with the given context and arguments - fireWith: function( context, args ) { - if ( list && ( !fired || stack ) ) { - args = args || []; - args = [ context, args.slice ? args.slice() : args ]; - if ( firing ) { - stack.push( args ); - } else { - fire( args ); - } - } - 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; - } - }; - - return self; -}; - - -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") ] - ], - state = "pending", - promise = { - state: function() { - return state; - }, - always: function() { - deferred.done( arguments ).fail( arguments ); - return this; - }, - then: function( /* fnDone, fnFail, fnProgress */ ) { - var fns = arguments; - 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() { - var returned = fn && fn.apply( this, arguments ); - if ( returned && jQuery.isFunction( returned.promise ) ) { - returned.promise() - .done( newDefer.resolve ) - .fail( newDefer.reject ) - .progress( newDefer.notify ); - } else { - newDefer[ tuple[ 0 ] + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); - } - }); - }); - fns = null; - }).promise(); - }, - // Get a promise for this deferred - // If obj is provided, the promise aspect is added to the object - promise: function( obj ) { - return obj != null ? jQuery.extend( obj, promise ) : promise; - } - }, - deferred = {}; - - // Keep pipe for back-compat - promise.pipe = promise.then; - - // Add list-specific methods - jQuery.each( tuples, function( i, tuple ) { - var list = tuple[ 2 ], - stateString = tuple[ 3 ]; - - // promise[ done | fail | progress ] = list.add - promise[ tuple[1] ] = list.add; - - // Handle state - if ( stateString ) { - list.add(function() { - // state = [ resolved | rejected ] - state = stateString; - - // [ reject_list | resolve_list ].disable; progress_list.lock - }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); - } - - // deferred[ resolve | reject | notify ] - deferred[ tuple[0] ] = function() { - deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); - return this; - }; - deferred[ tuple[0] + "With" ] = list.fireWith; - }); - - // Make the deferred a promise - promise.promise( deferred ); - - // Call given func if any - if ( func ) { - func.call( deferred, deferred ); - } - - // All done! - return deferred; - }, - - // Deferred helper - when: function( subordinate /* , ..., subordinateN */ ) { - var i = 0, - resolveValues = slice.call( arguments ), - length = resolveValues.length, - - // the count of uncompleted subordinates - remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, - - // 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 - updateFunc = function( i, contexts, values ) { - return function( value ) { - contexts[ i ] = this; - values[ i ] = arguments.length > 1 ? slice.call( arguments ) : value; - if ( values === progressValues ) { - deferred.notifyWith( contexts, values ); - } else if ( !( --remaining ) ) { - deferred.resolveWith( contexts, values ); - } - }; - }, - - progressValues, progressContexts, resolveContexts; - - // Add listeners to Deferred subordinates; treat others as resolved - if ( length > 1 ) { - progressValues = new Array( length ); - progressContexts = new Array( length ); - resolveContexts = new Array( length ); - for ( ; i < length; i++ ) { - if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { - resolveValues[ i ].promise() - .done( updateFunc( i, resolveContexts, resolveValues ) ) - .fail( deferred.reject ) - .progress( updateFunc( i, progressContexts, progressValues ) ); - } else { - --remaining; - } - } - } - - // If we're not waiting on anything, resolve the master - if ( !remaining ) { - deferred.resolveWith( resolveContexts, resolveValues ); - } - - 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({ - // Is the DOM ready to be used? Set to true once it occurs. - isReady: false, - - // A counter to track how many items to wait for before - // the ready event fires. See #6781 - readyWait: 1, - - // Hold (or release) the ready event - holdReady: function( hold ) { - if ( hold ) { - jQuery.readyWait++; - } else { - jQuery.ready( true ); - } - }, - - // Handle when the DOM is ready - ready: function( wait ) { - - // Abort if there are pending holds or we're already ready - if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { - return; - } - - // Remember that the DOM is ready - jQuery.isReady = true; - - // If a normal DOM Ready event fired, decrement, and wait if need be - if ( wait !== true && --jQuery.readyWait > 0 ) { - return; - } - - // If there are functions bound, to execute - readyList.resolveWith( document, [ jQuery ] ); - - // Trigger any bound ready events - if ( jQuery.fn.triggerHandler ) { - jQuery( document ).triggerHandler( "ready" ); - jQuery( document ).off( "ready" ); - } - } -}); - -/** - * The ready event handler and self cleanup method - */ -function completed() { - document.removeEventListener( "DOMContentLoaded", completed, false ); - window.removeEventListener( "load", completed, false ); - jQuery.ready(); -} - -jQuery.ready.promise = function( obj ) { - if ( !readyList ) { - - 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" ) { - // Handle it asynchronously to allow scripts the opportunity to delay ready - setTimeout( jQuery.ready ); - - } else { - - // Use the handy event callback - document.addEventListener( "DOMContentLoaded", completed, false ); - - // A fallback to window.onload, that will always work - window.addEventListener( "load", completed, false ); - } - } - return readyList.promise( obj ); -}; - -// Kick off the DOM ready check even if the user does not -jQuery.ready.promise(); - - - - -// 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 i = 0, - len = elems.length, - bulk = key == null; - - // Sets many values - if ( jQuery.type( key ) === "object" ) { - chainable = true; - for ( i in key ) { - jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); - } - - // Sets one value - } else if ( value !== undefined ) { - chainable = true; - - if ( !jQuery.isFunction( value ) ) { - raw = true; - } - - if ( bulk ) { - // Bulk operations run against the entire set - if ( raw ) { - fn.call( elems, value ); - fn = null; - - // ...except when executing function values - } else { - bulk = fn; - fn = function( elem, key, value ) { - return bulk.call( jQuery( elem ), value ); - }; - } - } - - if ( fn ) { - for ( ; i < len; i++ ) { - fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); - } - } - } - - return chainable ? - elems : - - // Gets - bulk ? - fn.call( elems ) : - len ? fn( elems[0], key ) : emptyGet; -}; - - -/** - * Determines whether an object can have data - */ -jQuery.acceptData = function( owner ) { - // Accepts only: - // - Node - // - Node.ELEMENT_NODE - // - Node.DOCUMENT_NODE - // - Object - // - Any - /* jshint -W018 */ - return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType ); -}; - - -function Data() { - // Support: Android<4, - // Old WebKit does not have Object.preventExtensions/freeze method, - // return new empty object instead with no [[set]] accessor - Object.defineProperty( this.cache = {}, 0, { - get: function() { - return {}; - } - }); - - this.expando = jQuery.expando + Data.uid++; -} - -Data.uid = 1; -Data.accepts = jQuery.acceptData; - -Data.prototype = { - key: function( owner ) { - // We can accept data for non-element nodes in modern browsers, - // but we should not, see #8335. - // Always return the key for a frozen object. - if ( !Data.accepts( owner ) ) { - return 0; - } - - var descriptor = {}, - // Check if the owner object already has a cache key - unlock = owner[ this.expando ]; - - // If not, create one - if ( !unlock ) { - unlock = Data.uid++; - - // Secure it in a non-enumerable, non-writable property - try { - descriptor[ this.expando ] = { value: unlock }; - Object.defineProperties( owner, descriptor ); - - // Support: Android<4 - // Fallback to a less secure definition - } catch ( e ) { - descriptor[ this.expando ] = unlock; - jQuery.extend( owner, descriptor ); - } - } - - // Ensure the cache object - if ( !this.cache[ unlock ] ) { - this.cache[ unlock ] = {}; - } - - return unlock; - }, - set: function( owner, data, value ) { - var prop, - // There may be an unlock assigned to this node, - // if there is no entry for this "owner", create one inline - // and set the unlock as though an owner entry had always existed - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - // Handle: [ owner, key, value ] args - if ( typeof data === "string" ) { - cache[ data ] = value; - - // Handle: [ owner, { properties } ] args - } else { - // Fresh assignments by object are shallow copied - if ( jQuery.isEmptyObject( cache ) ) { - jQuery.extend( this.cache[ unlock ], data ); - // Otherwise, copy the properties one-by-one to the cache object - } else { - for ( prop in data ) { - cache[ prop ] = data[ prop ]; - } - } - } - return cache; - }, - get: function( owner, key ) { - // Either a valid cache is found, or will be created. - // New caches will be created and the unlock returned, - // allowing direct access to the newly created - // empty data object. A valid owner object must be provided. - var cache = this.cache[ this.key( owner ) ]; - - return key === undefined ? - cache : cache[ key ]; - }, - access: function( owner, key, value ) { - var stored; - // In cases where either: - // - // 1. No key was specified - // 2. A string key was specified, but no value provided - // - // Take the "read" path and allow the get method to determine - // which value to return, respectively either: - // - // 1. The entire cache object - // 2. The data stored at the key - // - if ( key === undefined || - ((key && typeof key === "string") && value === undefined) ) { - - stored = this.get( owner, key ); - - return stored !== undefined ? - stored : this.get( owner, jQuery.camelCase(key) ); - } - - // [*]When the key is not a string, or both a key and value - // are specified, set or extend (existing objects) with either: - // - // 1. An object of properties - // 2. A key and value - // - this.set( owner, key, value ); - - // Since the "set" path can have two possible entry points - // return the expected data based on which path was taken[*] - return value !== undefined ? value : key; - }, - remove: function( owner, key ) { - var i, name, camel, - unlock = this.key( owner ), - cache = this.cache[ unlock ]; - - if ( key === undefined ) { - this.cache[ unlock ] = {}; - - } else { - // Support array or space separated string of keys - if ( jQuery.isArray( key ) ) { - // If "name" is an array of keys... - // When data is initially created, via ("key", "val") signature, - // keys will be converted to camelCase. - // Since there is no way to tell _how_ a key was added, remove - // both plain key and camelCase key. #12786 - // This will only penalize the array argument path. - name = key.concat( key.map( jQuery.camelCase ) ); - } else { - camel = jQuery.camelCase( key ); - // Try the string as a key before any manipulation - if ( key in cache ) { - name = [ key, camel ]; - } else { - // If a key with the spaces exists, use it. - // Otherwise, create an array by matching non-whitespace - name = camel; - name = name in cache ? - [ name ] : ( name.match( rnotwhite ) || [] ); - } - } - - i = name.length; - while ( i-- ) { - delete cache[ name[ i ] ]; - } - } - }, - hasData: function( owner ) { - return !jQuery.isEmptyObject( - this.cache[ owner[ this.expando ] ] || {} - ); - }, - discard: function( owner ) { - if ( owner[ this.expando ] ) { - delete this.cache[ owner[ this.expando ] ]; - } - } -}; -var data_priv = new Data(); - -var data_user = new Data(); - - - -// Implementation Summary -// -// 1. Enforce API surface and semantic compatibility with 1.9.x branch -// 2. Improve the module's maintainability by reducing the storage -// paths to a single mechanism. -// 3. Use the same single mechanism to support "private" and "user" data. -// 4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData) -// 5. Avoid exposing implementation details on user objects (eg. expando properties) -// 6. Provide a clear path for implementation upgrade to WeakMap in 2014 - -var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/, - rmultiDash = /([A-Z])/g; - -function dataAttr( elem, key, data ) { - var name; - - // If nothing was found internally, try to fetch any - // data from the HTML5 data-* attribute - if ( data === undefined && elem.nodeType === 1 ) { - name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); - data = elem.getAttribute( name ); - - if ( typeof data === "string" ) { - try { - 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 ) {} - - // Make sure we set the data so it isn't changed later - data_user.set( elem, key, data ); - } else { - data = undefined; - } - } - return data; -} - -jQuery.extend({ - hasData: function( elem ) { - return data_user.hasData( elem ) || data_priv.hasData( elem ); - }, - - data: function( elem, name, data ) { - return data_user.access( elem, name, data ); - }, - - removeData: function( elem, name ) { - data_user.remove( elem, name ); - }, - - // TODO: Now that all calls to _data and _removeData have been replaced - // with direct calls to data_priv methods, these can be deprecated. - _data: function( elem, name, data ) { - return data_priv.access( elem, name, data ); - }, - - _removeData: function( elem, name ) { - data_priv.remove( elem, name ); - } -}); - -jQuery.fn.extend({ - data: function( key, value ) { - var i, name, data, - elem = this[ 0 ], - attrs = elem && elem.attributes; - - // Gets all values - if ( key === undefined ) { - if ( this.length ) { - data = data_user.get( elem ); - - if ( elem.nodeType === 1 && !data_priv.get( elem, "hasDataAttrs" ) ) { - i = attrs.length; - while ( i-- ) { - - // Support: IE11+ - // The attrs elements can be null (#14894) - if ( attrs[ i ] ) { - name = attrs[ i ].name; - if ( name.indexOf( "data-" ) === 0 ) { - name = jQuery.camelCase( name.slice(5) ); - dataAttr( elem, name, data[ name ] ); - } - } - } - data_priv.set( elem, "hasDataAttrs", true ); - } - } - - return data; - } - - // Sets multiple values - if ( typeof key === "object" ) { - return this.each(function() { - data_user.set( this, key ); - }); - } - - return access( this, function( value ) { - var data, - camelKey = jQuery.camelCase( key ); - - // The calling jQuery object (element matches) is not empty - // (and therefore has an element appears at this[ 0 ]) and the - // `value` parameter was not undefined. An empty jQuery object - // will result in `undefined` for elem = this[ 0 ] which will - // throw an exception if an attempt to read a data cache is made. - if ( elem && value === undefined ) { - // Attempt to get data from the cache - // with the key as-is - data = data_user.get( elem, key ); - if ( data !== undefined ) { - return data; - } - - // Attempt to get data from the cache - // with the key camelized - data = data_user.get( elem, camelKey ); - if ( data !== undefined ) { - return data; - } - - // Attempt to "discover" the data in - // HTML5 custom data-* attrs - data = dataAttr( elem, camelKey, undefined ); - if ( data !== undefined ) { - return data; - } - - // We tried really hard, but the data doesn't exist. - return; - } - - // Set the data... - this.each(function() { - // First, attempt to store a copy or reference of any - // data that might've been store with a camelCased key. - var data = data_user.get( this, camelKey ); - - // For HTML5 data-* attribute interop, we have to - // store property names with dashes in a camelCase form. - // This might not apply to all properties...* - data_user.set( this, camelKey, value ); - - // *... In the case of properties that might _actually_ - // have dashes, we need to also store a copy of that - // unchanged property. - if ( key.indexOf("-") !== -1 && data !== undefined ) { - data_user.set( this, key, value ); - } - }); - }, null, value, arguments.length > 1, null, true ); - }, - - removeData: function( key ) { - return this.each(function() { - data_user.remove( this, key ); - }); - } -}); - - -jQuery.extend({ - queue: function( elem, type, data ) { - var queue; - - if ( elem ) { - type = ( type || "fx" ) + "queue"; - queue = data_priv.get( elem, type ); - - // Speed up dequeue by getting out quickly if this is just a lookup - if ( data ) { - if ( !queue || jQuery.isArray( data ) ) { - queue = data_priv.access( elem, type, jQuery.makeArray(data) ); - } else { - queue.push( data ); - } - } - return queue || []; - } - }, - - dequeue: function( elem, type ) { - type = type || "fx"; - - var queue = jQuery.queue( elem, type ), - startLength = queue.length, - fn = queue.shift(), - hooks = jQuery._queueHooks( elem, type ), - next = function() { - jQuery.dequeue( elem, type ); - }; - - // If the fx queue is dequeued, always remove the progress sentinel - if ( fn === "inprogress" ) { - fn = queue.shift(); - startLength--; - } - - if ( fn ) { - - // Add a progress sentinel to prevent the fx queue from being - // automatically dequeued - if ( type === "fx" ) { - queue.unshift( "inprogress" ); - } - - // Clear up the last queue stop function - delete hooks.stop; - fn.call( elem, next, hooks ); - } - - if ( !startLength && hooks ) { - hooks.empty.fire(); - } - }, - - // Not public - generate a queueHooks object, or return the current one - _queueHooks: function( elem, type ) { - var key = type + "queueHooks"; - return data_priv.get( elem, key ) || data_priv.access( elem, key, { - empty: jQuery.Callbacks("once memory").add(function() { - data_priv.remove( elem, [ type + "queue", key ] ); - }) - }); - } -}); - -jQuery.fn.extend({ - queue: function( type, data ) { - var setter = 2; - - if ( typeof type !== "string" ) { - data = type; - type = "fx"; - setter--; - } - - if ( arguments.length < setter ) { - return jQuery.queue( this[0], type ); - } - - return data === undefined ? - this : - 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" ) { - jQuery.dequeue( this, type ); - } - }); - }, - dequeue: function( type ) { - 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 ) { - var tmp, - count = 1, - defer = jQuery.Deferred(), - elements = this, - i = this.length, - resolve = function() { - if ( !( --count ) ) { - defer.resolveWith( elements, [ elements ] ); - } - }; - - if ( typeof type !== "string" ) { - obj = type; - type = undefined; - } - type = type || "fx"; - - while ( i-- ) { - tmp = data_priv.get( elements[ i ], type + "queueHooks" ); - if ( tmp && tmp.empty ) { - count++; - tmp.empty.add( resolve ); - } - } - resolve(); - return defer.promise( obj ); - } -}); -var pnum = (/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/).source; - -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 ); - }; - -var rcheckableType = (/^(?:checkbox|radio)$/i); - - - -(function() { - var fragment = document.createDocumentFragment(), - div = fragment.appendChild( document.createElement( "div" ) ), - input = document.createElement( "input" ); - - // Support: Safari<=5.1 - // Check state lost if the name is set (#11217) - // Support: Windows Web Apps (WWA) - // `name` and `type` must use .setAttribute for WWA (#14901) - input.setAttribute( "type", "radio" ); - input.setAttribute( "checked", "checked" ); - input.setAttribute( "name", "t" ); - - div.appendChild( input ); - - // Support: Safari<=5.1, Android<4.2 - // Older WebKit doesn't clone checked state correctly in fragments - support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked; - - // Support: IE<=11+ - // Make sure textarea (and checkbox) defaultValue is properly cloned - div.innerHTML = "<textarea>x</textarea>"; - support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue; -})(); -var strundefined = typeof undefined; - - - -support.focusinBubbles = "onfocusin" in window; - - -var - rkeyEvent = /^key/, - rmouseEvent = /^(?:mouse|pointer|contextmenu)|click/, - rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, - rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; - -function returnTrue() { - return true; -} - -function returnFalse() { - return false; -} - -function safeActiveElement() { - try { - return document.activeElement; - } catch ( err ) { } -} - -/* - * Helper functions for managing events -- not part of the public interface. - * Props to Dean Edwards' addEvent library for many of the ideas. - */ -jQuery.event = { - - global: {}, - - add: function( elem, types, handler, data, selector ) { - - var handleObjIn, eventHandle, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.get( elem ); - - // Don't attach events to noData or text/comment nodes (but allow plain objects) - if ( !elemData ) { - return; - } - - // Caller can pass in an object of custom data in lieu of the handler - if ( handler.handler ) { - handleObjIn = handler; - handler = handleObjIn.handler; - selector = handleObjIn.selector; - } - - // Make sure that the handler has a unique ID, used to find/remove it later - if ( !handler.guid ) { - handler.guid = jQuery.guid++; - } - - // Init the element's event structure and main handler, if this is the first - if ( !(events = elemData.events) ) { - events = elemData.events = {}; - } - 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 && jQuery.event.triggered !== e.type ? - jQuery.event.dispatch.apply( elem, arguments ) : undefined; - }; - } - - // Handle multiple events separated by a space - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - 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 ) { - continue; - } - - // If event changes its type, use the special event handlers for the changed type - special = jQuery.event.special[ type ] || {}; - - // If selector defined, determine special event api type, otherwise given type - type = ( selector ? special.delegateType : special.bindType ) || type; - - // Update special based on newly reset type - special = jQuery.event.special[ type ] || {}; - - // handleObj is passed to all event handlers - handleObj = jQuery.extend({ - type: type, - origType: origType, - data: data, - handler: handler, - guid: handler.guid, - selector: selector, - needsContext: selector && jQuery.expr.match.needsContext.test( selector ), - namespace: namespaces.join(".") - }, handleObjIn ); - - // Init the event handler queue if we're the first - if ( !(handlers = events[ type ]) ) { - handlers = events[ type ] = []; - handlers.delegateCount = 0; - - // Only use addEventListener if the special events handler returns false - if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { - if ( elem.addEventListener ) { - elem.addEventListener( type, eventHandle, false ); - } - } - } - - if ( special.add ) { - special.add.call( elem, handleObj ); - - if ( !handleObj.handler.guid ) { - handleObj.handler.guid = handler.guid; - } - } - - // Add to the element's handler list, delegates in front - if ( selector ) { - handlers.splice( handlers.delegateCount++, 0, handleObj ); - } else { - handlers.push( handleObj ); - } - - // Keep track of which events have ever been used, for event optimization - jQuery.event.global[ type ] = true; - } - - }, - - // Detach an event or set of events from an element - remove: function( elem, types, handler, selector, mappedTypes ) { - - var j, origCount, tmp, - events, t, handleObj, - special, handlers, type, namespaces, origType, - elemData = data_priv.hasData( elem ) && data_priv.get( elem ); - - if ( !elemData || !(events = elemData.events) ) { - return; - } - - // Once for each type.namespace in types; type may be omitted - types = ( types || "" ).match( rnotwhite ) || [ "" ]; - t = types.length; - while ( t-- ) { - 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 ) { - for ( type in events ) { - jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); - } - continue; - } - - special = jQuery.event.special[ type ] || {}; - type = ( selector ? special.delegateType : special.bindType ) || type; - handlers = events[ type ] || []; - tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); - - // Remove matching events - origCount = j = handlers.length; - while ( j-- ) { - handleObj = handlers[ j ]; - - if ( ( mappedTypes || origType === handleObj.origType ) && - ( !handler || handler.guid === handleObj.guid ) && - ( !tmp || tmp.test( handleObj.namespace ) ) && - ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { - handlers.splice( j, 1 ); - - if ( handleObj.selector ) { - handlers.delegateCount--; - } - if ( special.remove ) { - special.remove.call( elem, handleObj ); - } - } - } - - // 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 ) { - jQuery.removeEvent( elem, type, elemData.handle ); - } - - delete events[ type ]; - } - } - - // Remove the expando if it's no longer used - if ( jQuery.isEmptyObject( events ) ) { - delete elemData.handle; - data_priv.remove( elem, "events" ); - } - }, - - trigger: function( event, data, elem, onlyHandlers ) { - - var i, cur, tmp, bubbleType, ontype, handle, special, - eventPath = [ elem || document ], - type = hasOwn.call( event, "type" ) ? event.type : event, - namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; - - cur = tmp = elem = elem || document; - - // Don't do events on text and comment nodes - if ( elem.nodeType === 3 || elem.nodeType === 8 ) { - return; - } - - // focus/blur morphs to focusin/out; ensure we're not firing them right now - if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { - return; - } - - if ( type.indexOf(".") >= 0 ) { - // Namespaced trigger; create a regexp to match event type in handle() - namespaces = type.split("."); - type = namespaces.shift(); - namespaces.sort(); - } - 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 ] ? - event : - new jQuery.Event( type, typeof event === "object" && 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("\\.(?:.*\\.|)") + "(\\.|$)" ) : - null; - - // Clean up the event in case it is being reused - event.result = undefined; - if ( !event.target ) { - event.target = elem; - } - - // Clone any incoming data and prepend the event, creating the handler arg list - data = data == null ? - [ event ] : - jQuery.makeArray( data, [ event ] ); - - // Allow special events to draw outside the lines - special = jQuery.event.special[ type ] || {}; - if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { - return; - } - - // Determine event propagation path in advance, per W3C events spec (#9951) - // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) - if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { - - bubbleType = special.delegateType || type; - if ( !rfocusMorph.test( bubbleType + type ) ) { - cur = cur.parentNode; - } - for ( ; cur; cur = cur.parentNode ) { - eventPath.push( cur ); - tmp = cur; - } - - // Only add window if we got to document (e.g., not plain obj or detached DOM) - 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() ) { - - event.type = i > 1 ? - bubbleType : - special.bindType || type; - - // jQuery handler - handle = ( data_priv.get( cur, "events" ) || {} )[ event.type ] && data_priv.get( cur, "handle" ); - if ( handle ) { - handle.apply( cur, data ); - } - - // Native handler - handle = ontype && cur[ ontype ]; - if ( handle && handle.apply && jQuery.acceptData( cur ) ) { - event.result = handle.apply( cur, data ); - if ( event.result === false ) { - event.preventDefault(); - } - } - } - event.type = type; - - // 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 ) ) { - - // Call a native DOM method on the target with the same name name as the event. - // Don't do default actions on window, that's where global variables be (#6170) - if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) { - - // Don't re-trigger an onFOO event when we call its FOO() method - tmp = elem[ ontype ]; - - if ( tmp ) { - elem[ ontype ] = null; - } - - // Prevent re-triggering of the same event, since we already bubbled it above - jQuery.event.triggered = type; - elem[ type ](); - jQuery.event.triggered = undefined; - - if ( tmp ) { - elem[ ontype ] = tmp; - } - } - } - } - - return event.result; - }, - - dispatch: function( event ) { - - // Make a writable jQuery.Event from the native event object - event = jQuery.event.fix( event ); - - var i, j, ret, matched, handleObj, - handlerQueue = [], - args = slice.call( arguments ), - handlers = ( data_priv.get( 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; - event.delegateTarget = this; - - // Call the preDispatch hook for the mapped type, and let it bail if desired - if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { - return; - } - - // Determine handlers - handlerQueue = jQuery.event.handlers.call( this, event, handlers ); - - // Run delegates first; they may want to stop propagation beneath us - i = 0; - while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { - event.currentTarget = matched.elem; - - j = 0; - 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 ) ) { - - event.handleObj = handleObj; - event.data = handleObj.data; - - ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) - .apply( matched.elem, args ); - - if ( ret !== undefined ) { - if ( (event.result = ret) === false ) { - event.preventDefault(); - event.stopPropagation(); - } - } - } - } - } - - // Call the postDispatch hook for the mapped type - if ( special.postDispatch ) { - special.postDispatch.call( this, event ); - } - - return event.result; - }, - - handlers: function( event, handlers ) { - var i, matches, sel, handleObj, - handlerQueue = [], - delegateCount = handlers.delegateCount, - cur = event.target; - - // Find delegate handlers - // Black-hole SVG <use> instance trees (#13180) - // Avoid non-left-click bubbling in Firefox (#3861) - if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { - - for ( ; cur !== this; cur = cur.parentNode || this ) { - - // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) - if ( cur.disabled !== true || event.type !== "click" ) { - matches = []; - for ( i = 0; i < delegateCount; i++ ) { - handleObj = handlers[ i ]; - - // Don't conflict with Object.prototype properties (#13203) - sel = handleObj.selector + " "; - - if ( matches[ sel ] === undefined ) { - matches[ sel ] = handleObj.needsContext ? - jQuery( sel, this ).index( cur ) >= 0 : - jQuery.find( sel, this, null, [ cur ] ).length; - } - if ( matches[ sel ] ) { - matches.push( handleObj ); - } - } - if ( matches.length ) { - handlerQueue.push({ elem: cur, handlers: matches }); - } - } - } - } - - // Add the remaining (directly-bound) handlers - if ( delegateCount < handlers.length ) { - handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); - } - - return handlerQueue; - }, - - // Includes some event props shared by KeyEvent and MouseEvent - props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), - - fixHooks: {}, - - keyHooks: { - props: "char charCode key keyCode".split(" "), - filter: function( event, original ) { - - // Add which for key events - if ( event.which == null ) { - event.which = original.charCode != null ? original.charCode : original.keyCode; - } - - return event; - } - }, - - mouseHooks: { - props: "button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "), - filter: function( event, original ) { - var eventDoc, doc, body, - button = original.button; - - // Calculate pageX/Y if missing and clientX/Y available - if ( event.pageX == null && original.clientX != null ) { - eventDoc = event.target.ownerDocument || document; - 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 ); - } - - // Add which for click: 1 === left; 2 === middle; 3 === right - // Note: button is not normalized, so don't use it - if ( !event.which && button !== undefined ) { - event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); - } - - return event; - } - }, - - fix: function( event ) { - if ( event[ jQuery.expando ] ) { - return event; - } - - // Create a writable copy of the event object and normalize some properties - var i, prop, copy, - type = event.type, - originalEvent = event, - fixHook = this.fixHooks[ type ]; - - if ( !fixHook ) { - this.fixHooks[ type ] = fixHook = - rmouseEvent.test( type ) ? this.mouseHooks : - rkeyEvent.test( type ) ? this.keyHooks : - {}; - } - copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; - - event = new jQuery.Event( originalEvent ); - - i = copy.length; - while ( i-- ) { - prop = copy[ i ]; - event[ prop ] = originalEvent[ prop ]; - } - - // Support: Cordova 2.5 (WebKit) (#13255) - // All events should have a target; Cordova deviceready doesn't - if ( !event.target ) { - event.target = document; - } - - // Support: Safari 6.0+, Chrome<28 - // Target should not be a text node (#504, #13143) - if ( event.target.nodeType === 3 ) { - event.target = event.target.parentNode; - } - - return fixHook.filter ? fixHook.filter( event, originalEvent ) : 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 ) { - this.focus(); - return false; - } - }, - delegateType: "focusin" - }, - blur: { - trigger: function() { - if ( this === safeActiveElement() && this.blur ) { - this.blur(); - return false; - } - }, - delegateType: "focusout" - }, - click: { - // For checkbox, fire native event so checked state will be right - trigger: function() { - if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) { - this.click(); - return false; - } - }, - - // For cross-browser consistency, don't fire native .click() on links - _default: function( event ) { - return jQuery.nodeName( event.target, "a" ); - } - }, - - beforeunload: { - postDispatch: function( event ) { - - // Support: Firefox 20+ - // Firefox doesn't alert if the returnValue field is not set. - if ( event.result !== undefined && event.originalEvent ) { - event.originalEvent.returnValue = event.result; - } - } - } - }, - - 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. - var e = jQuery.extend( - new jQuery.Event(), - event, - { - type: type, - isSimulated: true, - originalEvent: {} - } - ); - if ( bubble ) { - jQuery.event.trigger( e, null, elem ); - } else { - jQuery.event.dispatch.call( elem, e ); - } - if ( e.isDefaultPrevented() ) { - event.preventDefault(); - } - } -}; - -jQuery.removeEvent = function( elem, type, handle ) { - if ( elem.removeEventListener ) { - elem.removeEventListener( type, handle, false ); - } -}; - -jQuery.Event = function( src, props ) { - // Allow instantiation without the 'new' keyword - if ( !(this instanceof jQuery.Event) ) { - return new jQuery.Event( src, props ); - } - - // Event object - if ( src && src.type ) { - this.originalEvent = src; - this.type = src.type; - - // Events bubbling up the document may have been marked as prevented - // by a handler lower down the tree; reflect the correct value. - this.isDefaultPrevented = src.defaultPrevented || - src.defaultPrevented === undefined && - // Support: Android<4.0 - src.returnValue === false ? - returnTrue : - returnFalse; - - // Event type - } else { - this.type = src; - } - - // Put explicitly provided properties onto the event object - if ( props ) { - jQuery.extend( this, props ); - } - - // Create a timestamp if incoming event doesn't have one - this.timeStamp = src && src.timeStamp || jQuery.now(); - - // Mark it as fixed - this[ jQuery.expando ] = true; -}; - -// 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 = { - isDefaultPrevented: returnFalse, - isPropagationStopped: returnFalse, - isImmediatePropagationStopped: returnFalse, - - preventDefault: function() { - var e = this.originalEvent; - - this.isDefaultPrevented = returnTrue; - - if ( e && e.preventDefault ) { - e.preventDefault(); - } - }, - stopPropagation: function() { - var e = this.originalEvent; - - this.isPropagationStopped = returnTrue; - - if ( e && e.stopPropagation ) { - e.stopPropagation(); - } - }, - stopImmediatePropagation: function() { - var e = this.originalEvent; - - this.isImmediatePropagationStopped = returnTrue; - - if ( e && e.stopImmediatePropagation ) { - e.stopImmediatePropagation(); - } - - this.stopPropagation(); - } -}; - -// Create mouseenter/leave events using mouseover/out and event-time checks -// Support: Chrome 15+ -jQuery.each({ - mouseenter: "mouseover", - mouseleave: "mouseout", - pointerenter: "pointerover", - pointerleave: "pointerout" -}, function( orig, fix ) { - jQuery.event.special[ orig ] = { - delegateType: fix, - bindType: fix, - - handle: function( event ) { - var ret, - target = this, - related = event.relatedTarget, - handleObj = event.handleObj; - - // For mousenter/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 )) ) { - event.type = handleObj.origType; - ret = handleObj.handler.apply( this, arguments ); - event.type = fix; - } - return ret; - } - }; -}); - -// Support: Firefox, Chrome, Safari -// Create "bubbling" focus and blur events -if ( !support.focusinBubbles ) { - 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.special[ fix ] = { - setup: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ); - - if ( !attaches ) { - doc.addEventListener( orig, handler, true ); - } - data_priv.access( doc, fix, ( attaches || 0 ) + 1 ); - }, - teardown: function() { - var doc = this.ownerDocument || this, - attaches = data_priv.access( doc, fix ) - 1; - - if ( !attaches ) { - doc.removeEventListener( orig, handler, true ); - data_priv.remove( doc, fix ); - - } else { - data_priv.access( doc, fix, attaches ); - } - } - }; - }); -} - -jQuery.fn.extend({ - - on: function( types, selector, data, fn, /*INTERNAL*/ 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 ) { - 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; - } - - 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 ); - }); - }, - one: function( types, selector, data, fn ) { - return this.on( 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.selector, - handleObj.handler - ); - return this; - } - if ( typeof types === "object" ) { - // ( types-object [, selector] ) - for ( type in types ) { - this.off( type, selector, types[ type ] ); - } - return this; - } - if ( selector === false || typeof selector === "function" ) { - // ( types [, fn] ) - fn = selector; - selector = undefined; - } - if ( fn === false ) { - fn = returnFalse; - } - return this.each(function() { - jQuery.event.remove( this, types, fn, selector ); - }); - }, - - trigger: function( type, data ) { - return this.each(function() { - jQuery.event.trigger( type, data, this ); - }); - }, - triggerHandler: function( type, data ) { - var elem = this[0]; - if ( elem ) { - return jQuery.event.trigger( type, data, elem, true ); - } - } -}); - - -var - rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, - rtagName = /<([\w:]+)/, - rhtml = /<|&#?\w+;/, - rnoInnerhtml = /<(?:script|style|link)/i, - // checked="checked" or checked - rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i, - rscriptType = /^$|\/(?:java|ecma)script/i, - rscriptTypeMasked = /^true\/(.*)/, - rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g, - - // We have to close these tags to support XHTML (#13200) - wrapMap = { - - // Support: IE9 - option: [ 1, "<select multiple='multiple'>", "</select>" ], - - thead: [ 1, "<table>", "</table>" ], - col: [ 2, "<table><colgroup>", "</colgroup></table>" ], - tr: [ 2, "<table><tbody>", "</tbody></table>" ], - td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ], - - _default: [ 0, "", "" ] - }; - -// Support: IE9 -wrapMap.optgroup = wrapMap.option; - -wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; -wrapMap.th = wrapMap.td; - -// Support: 1.x compatibility -// Manipulating tables requires a tbody -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; -} - -// Replace/restore the type attribute of script elements for safe DOM manipulation -function disableScript( elem ) { - elem.type = (elem.getAttribute("type") !== null) + "/" + elem.type; - return elem; -} -function restoreScript( elem ) { - var match = rscriptTypeMasked.exec( elem.type ); - - if ( match ) { - elem.type = match[ 1 ]; - } else { - elem.removeAttribute("type"); - } - - return elem; -} - -// Mark scripts as having already been evaluated -function setGlobalEval( elems, refElements ) { - var i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - data_priv.set( - elems[ i ], "globalEval", !refElements || data_priv.get( refElements[ i ], "globalEval" ) - ); - } -} - -function cloneCopyEvent( src, dest ) { - var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events; - - if ( dest.nodeType !== 1 ) { - return; - } - - // 1. Copy private data: events, handlers, etc. - if ( data_priv.hasData( src ) ) { - pdataOld = data_priv.access( src ); - pdataCur = data_priv.set( dest, pdataOld ); - events = pdataOld.events; - - if ( events ) { - delete pdataCur.handle; - pdataCur.events = {}; - - for ( type in events ) { - for ( i = 0, l = events[ type ].length; i < l; i++ ) { - jQuery.event.add( dest, type, events[ type ][ i ] ); - } - } - } - } - - // 2. Copy user data - if ( data_user.hasData( src ) ) { - udataOld = data_user.access( src ); - udataCur = jQuery.extend( {}, udataOld ); - - data_user.set( dest, udataCur ); - } -} - -function getAll( context, tag ) { - var ret = context.getElementsByTagName ? context.getElementsByTagName( tag || "*" ) : - context.querySelectorAll ? context.querySelectorAll( tag || "*" ) : - []; - - return tag === undefined || tag && jQuery.nodeName( context, tag ) ? - jQuery.merge( [ context ], ret ) : - ret; -} - -// Fix IE bugs, see support tests -function fixInput( src, dest ) { - var nodeName = dest.nodeName.toLowerCase(); - - // Fails to persist the checked state of a cloned checkbox or radio button. - if ( nodeName === "input" && rcheckableType.test( src.type ) ) { - dest.checked = src.checked; - - // Fails to return the selected option to the default selected state when cloning options - } else if ( nodeName === "input" || nodeName === "textarea" ) { - dest.defaultValue = src.defaultValue; - } -} - -jQuery.extend({ - clone: function( elem, dataAndEvents, deepDataAndEvents ) { - var i, l, srcElements, destElements, - clone = elem.cloneNode( true ), - inPage = jQuery.contains( elem.ownerDocument, elem ); - - // Fix IE cloning issues - if ( !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 ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - fixInput( srcElements[ i ], destElements[ i ] ); - } - } - - // Copy the events from the original to the clone - if ( dataAndEvents ) { - if ( deepDataAndEvents ) { - srcElements = srcElements || getAll( elem ); - destElements = destElements || getAll( clone ); - - for ( i = 0, l = srcElements.length; i < l; i++ ) { - cloneCopyEvent( srcElements[ i ], destElements[ i ] ); - } - } else { - cloneCopyEvent( elem, clone ); - } - } - - // Preserve script evaluation history - destElements = getAll( clone, "script" ); - if ( destElements.length > 0 ) { - setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); - } - - // Return the cloned set - return clone; - }, - - buildFragment: function( elems, context, scripts, selection ) { - var elem, tmp, tag, wrap, contains, j, - fragment = context.createDocumentFragment(), - nodes = [], - i = 0, - l = elems.length; - - for ( ; i < l; i++ ) { - elem = elems[ i ]; - - if ( elem || elem === 0 ) { - - // Add nodes directly - if ( jQuery.type( elem ) === "object" ) { - // Support: QtWebKit, PhantomJS - // push.apply(_, arraylike) throws on ancient WebKit - 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 || fragment.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></$2>" ) + wrap[ 2 ]; - - // Descend through wrappers to the right content - j = wrap[ 0 ]; - while ( j-- ) { - tmp = tmp.lastChild; - } - - // Support: QtWebKit, PhantomJS - // push.apply(_, arraylike) throws on ancient WebKit - jQuery.merge( nodes, tmp.childNodes ); - - // Remember the top-level container - tmp = fragment.firstChild; - - // Ensure the created nodes are orphaned (#12392) - tmp.textContent = ""; - } - } - } - - // Remove wrapper from fragment - fragment.textContent = ""; - - 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( fragment.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 ); - } - } - } - } - - return fragment; - }, - - cleanData: function( elems ) { - var data, elem, type, key, - special = jQuery.event.special, - i = 0; - - for ( ; (elem = elems[ i ]) !== undefined; i++ ) { - if ( jQuery.acceptData( elem ) ) { - key = elem[ data_priv.expando ]; - - if ( key && (data = data_priv.cache[ key ]) ) { - if ( data.events ) { - for ( type in data.events ) { - if ( special[ type ] ) { - jQuery.event.remove( elem, type ); - - // This is a shortcut to avoid jQuery.event.remove's overhead - } else { - jQuery.removeEvent( elem, type, data.handle ); - } - } - } - if ( data_priv.cache[ key ] ) { - // Discard any remaining `private` data - delete data_priv.cache[ key ]; - } - } - } - // Discard any remaining `user` data - delete data_user.cache[ elem[ data_user.expando ] ]; - } - } -}); - -jQuery.fn.extend({ - text: function( value ) { - return access( this, function( value ) { - return value === undefined ? - jQuery.text( this ) : - this.empty().each(function() { - if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { - this.textContent = value; - } - }); - }, null, value, arguments.length ); - }, - - append: function() { - return this.domManip( 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 ) { - 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 ) { - if ( this.parentNode ) { - this.parentNode.insertBefore( elem, this ); - } - }); - }, - - after: function() { - return this.domManip( 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++ ) { - if ( elem.nodeType === 1 ) { - - // Prevent memory leaks - jQuery.cleanData( getAll( elem, false ) ); - - // Remove any remaining nodes - elem.textContent = ""; - } - } - - return this; - }, - - clone: function( dataAndEvents, deepDataAndEvents ) { - dataAndEvents = dataAndEvents == null ? false : dataAndEvents; - deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; - - return this.map(function() { - return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); - }); - }, - - html: function( value ) { - return access( this, function( value ) { - var elem = this[ 0 ] || {}, - i = 0, - l = this.length; - - if ( value === undefined && elem.nodeType === 1 ) { - return elem.innerHTML; - } - - // See if we can take a shortcut and just use innerHTML - if ( typeof value === "string" && !rnoInnerhtml.test( value ) && - !wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) { - - value = value.replace( rxhtmlTag, "<$1></$2>" ); - - try { - for ( ; i < l; i++ ) { - elem = this[ i ] || {}; - - // Remove element nodes and prevent memory leaks - if ( elem.nodeType === 1 ) { - jQuery.cleanData( getAll( elem, false ) ); - elem.innerHTML = value; - } - } - - elem = 0; - - // If using innerHTML throws an exception, use the fallback method - } catch( e ) {} - } - - if ( elem ) { - this.empty().append( value ); - } - }, null, value, arguments.length ); - }, - - 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; - - jQuery.cleanData( getAll( this ) ); - - if ( arg ) { - arg.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(); - }, - - detach: function( selector ) { - return this.remove( selector, true ); - }, - - domManip: function( args, callback ) { - - // Flatten any nested arrays - args = concat.apply( [], args ); - - var fragment, first, scripts, hasScripts, node, doc, - 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 ) { - // Support: QtWebKit - // jQuery.merge because push.apply(_, arraylike) throws - 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 || "" ) && - !data_priv.access( 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.textContent.replace( rcleanScript, "" ) ); - } - } - } - } - } - } - - return this; - } -}); - -jQuery.each({ - appendTo: "append", - prependTo: "prepend", - insertBefore: "before", - insertAfter: "after", - replaceAll: "replaceWith" -}, function( name, original ) { - jQuery.fn[ name ] = function( selector ) { - var elems, - ret = [], - insert = jQuery( selector ), - last = insert.length - 1, - i = 0; - - for ( ; i <= last; i++ ) { - elems = i === last ? this : this.clone( true ); - jQuery( insert[ i ] )[ original ]( elems ); - - // Support: QtWebKit - // .get() because push.apply(_, arraylike) throws - push.apply( ret, elems.get() ); - } - - return this.pushStack( ret ); - }; -}); - - -var iframe, - elemdisplay = {}; - -/** - * 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 ] ) ) ? - - // Use of this method is a temporary fix (more like optimization) until something better comes along, - // since it was removed from specification and supported only in FF - style.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 - elem.detach(); - - return display; -} - -/** - * Try to determine the default display value of an element - * @param {String} nodeName - */ -function defaultDisplay( nodeName ) { - var doc = document, - display = elemdisplay[ nodeName ]; - - if ( !display ) { - display = actualDisplay( nodeName, doc ); - - // If the simple way fails, read from inside an iframe - if ( display === "none" || !display ) { - - // Use the already-created iframe if possible - iframe = (iframe || jQuery( "<iframe frameborder='0' width='0' height='0'/>" )).appendTo( doc.documentElement ); - - // Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse - doc = iframe[ 0 ].contentDocument; - - // Support: IE - doc.write(); - doc.close(); - - display = actualDisplay( nodeName, doc ); - iframe.detach(); - } - - // Store the correct default display - elemdisplay[ nodeName ] = display; - } - - return display; -} -var rmargin = (/^margin/); - -var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" ); - -var getStyles = function( elem ) { - // Support: IE<=11+, Firefox<=30+ (#15098, #14150) - // IE throws on elements created in popups - // FF meanwhile throws on frame elements through "defaultView.getComputedStyle" - if ( elem.ownerDocument.defaultView.opener ) { - return elem.ownerDocument.defaultView.getComputedStyle( elem, null ); - } - - return window.getComputedStyle( elem, null ); - }; - - - -function curCSS( elem, name, computed ) { - var width, minWidth, maxWidth, ret, - style = elem.style; - - computed = computed || getStyles( elem ); - - // Support: IE9 - // getPropertyValue is only needed for .css('filter') (#12537) - if ( computed ) { - ret = computed.getPropertyValue( name ) || computed[ name ]; - } - - if ( computed ) { - - if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { - ret = jQuery.style( elem, name ); - } - - // Support: iOS < 6 - // A tribute to the "awesome hack by Dean Edwards" - // iOS < 6 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels - // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values - if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { - - // Remember the original values - width = style.width; - minWidth = style.minWidth; - maxWidth = style.maxWidth; - - // Put in the new values to get a computed value out - style.minWidth = style.maxWidth = style.width = ret; - ret = computed.width; - - // Revert the changed values - style.width = width; - style.minWidth = minWidth; - style.maxWidth = maxWidth; - } - } - - return ret !== undefined ? - // Support: IE - // IE returns zIndex value as an integer. - ret + "" : - ret; -} - - -function addGetHookIf( conditionFn, hookFn ) { - // Define the hook, we'll check on the first run if it's really needed. - return { - get: function() { - if ( conditionFn() ) { - // Hook not needed (or it's not possible to use it due - // to missing dependency), remove it. - delete this.get; - return; - } - - // Hook needed; redefine it so that the support test is not executed again. - return (this.get = hookFn).apply( this, arguments ); - } - }; -} - - -(function() { - var pixelPositionVal, boxSizingReliableVal, - docElem = document.documentElement, - container = document.createElement( "div" ), - div = document.createElement( "div" ); - - if ( !div.style ) { - return; - } - - // Support: IE9-11+ - // Style of cloned element affects source element cloned (#8908) - div.style.backgroundClip = "content-box"; - div.cloneNode( true ).style.backgroundClip = ""; - support.clearCloneStyle = div.style.backgroundClip === "content-box"; - - container.style.cssText = "border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;" + - "position:absolute"; - container.appendChild( div ); - - // Executing both pixelPosition & boxSizingReliable tests require only one layout - // so they're executed at the same time to save the second computation. - function computePixelPositionAndBoxSizingReliable() { - div.style.cssText = - // Support: Firefox<29, Android 2.3 - // Vendor-prefix box-sizing - "-webkit-box-sizing:border-box;-moz-box-sizing:border-box;" + - "box-sizing:border-box;display:block;margin-top:1%;top:1%;" + - "border:1px;padding:1px;width:4px;position:absolute"; - div.innerHTML = ""; - docElem.appendChild( container ); - - var divStyle = window.getComputedStyle( div, null ); - pixelPositionVal = divStyle.top !== "1%"; - boxSizingReliableVal = divStyle.width === "4px"; - - docElem.removeChild( container ); - } - - // Support: node.js jsdom - // Don't assume that getComputedStyle is a property of the global object - if ( window.getComputedStyle ) { - jQuery.extend( support, { - pixelPosition: function() { - - // This test is executed only once but we still do memoizing - // since we can use the boxSizingReliable pre-computing. - // No need to check if the test was already performed, though. - computePixelPositionAndBoxSizingReliable(); - return pixelPositionVal; - }, - boxSizingReliable: function() { - if ( boxSizingReliableVal == null ) { - computePixelPositionAndBoxSizingReliable(); - } - return boxSizingReliableVal; - }, - reliableMarginRight: function() { - - // Support: Android 2.3 - // Check if div with explicit width and no margin-right incorrectly - // gets computed margin-right based on width of container. (#3333) - // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right - // This support function is only executed once so no memoizing is needed. - var ret, - marginDiv = div.appendChild( document.createElement( "div" ) ); - - // Reset CSS: box-sizing; display; margin; border; padding - marginDiv.style.cssText = 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:0"; - marginDiv.style.marginRight = marginDiv.style.width = "0"; - div.style.width = "1px"; - docElem.appendChild( container ); - - ret = !parseFloat( window.getComputedStyle( marginDiv, null ).marginRight ); - - docElem.removeChild( container ); - div.removeChild( marginDiv ); - - return ret; - } - }); - } -})(); - - -// A method for quickly swapping in/out CSS properties to get correct calculations. -jQuery.swap = function( elem, options, callback, args ) { - var ret, name, - old = {}; - - // Remember the old values, and insert the new ones - for ( name in options ) { - old[ name ] = elem.style[ name ]; - elem.style[ name ] = options[ name ]; - } - - ret = callback.apply( elem, args || [] ); - - // Revert the old values - for ( name in options ) { - elem.style[ name ] = old[ name ]; - } - - return ret; -}; - - -var - // Swappable if display is none or starts with table except "table", "table-cell", or "table-caption" - // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display - rdisplayswap = /^(none|table(?!-c[ea]).+)/, - rnumsplit = new RegExp( "^(" + pnum + ")(.*)$", "i" ), - rrelNum = new RegExp( "^([+-])=(" + pnum + ")", "i" ), - - cssShow = { position: "absolute", visibility: "hidden", display: "block" }, - cssNormalTransform = { - letterSpacing: "0", - fontWeight: "400" - }, - - cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; - -// Return a css property mapped to a potentially vendor prefixed property -function vendorPropName( style, name ) { - - // Shortcut for names that are not vendor prefixed - if ( name in style ) { - return name; - } - - // Check for vendor prefixed names - var capName = name[0].toUpperCase() + name.slice(1), - origName = name, - i = cssPrefixes.length; - - while ( i-- ) { - name = cssPrefixes[ i ] + capName; - if ( name in style ) { - return name; - } - } - - return origName; -} - -function setPositiveNumber( elem, value, subtract ) { - var matches = rnumsplit.exec( value ); - return matches ? - // Guard against undefined "subtract", e.g., when used as in cssHooks - Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : - value; -} - -function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { - var i = extra === ( isBorderBox ? "border" : "content" ) ? - // If we already have the right measurement, avoid augmentation - 4 : - // Otherwise initialize for horizontal or vertical properties - name === "width" ? 1 : 0, - - val = 0; - - for ( ; i < 4; i += 2 ) { - // Both box models exclude margin, so add it if we want it - if ( extra === "margin" ) { - val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); - } - - if ( isBorderBox ) { - // border-box includes padding, so remove it if we want content - if ( extra === "content" ) { - val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - } - - // At this point, extra isn't border nor margin, so remove border - if ( extra !== "margin" ) { - val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } else { - // At this point, extra isn't content, so add padding - val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); - - // At this point, extra isn't content nor padding, so add border - if ( extra !== "padding" ) { - val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); - } - } - } - - return val; -} - -function getWidthOrHeight( elem, name, extra ) { - - // Start with offset property, which is equivalent to the border-box value - var valueIsBorderBox = true, - val = name === "width" ? elem.offsetWidth : elem.offsetHeight, - styles = getStyles( elem ), - isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; - - // Some non-html elements return undefined for offsetWidth, so check for null/undefined - // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 - // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 - if ( val <= 0 || val == null ) { - // Fall back to computed then uncomputed css if necessary - val = curCSS( elem, name, styles ); - if ( val < 0 || val == null ) { - val = elem.style[ name ]; - } - - // Computed unit is not pixels. Stop here and return. - if ( rnumnonpx.test(val) ) { - return val; - } - - // Check for style in case a browser which returns unreliable values - // for getComputedStyle silently falls back to the reliable elem.style - valueIsBorderBox = isBorderBox && - ( support.boxSizingReliable() || val === elem.style[ name ] ); - - // Normalize "", auto, and prepare for extra - val = parseFloat( val ) || 0; - } - - // Use the active box-sizing model to add/subtract irrelevant styles - return ( val + - augmentWidthOrHeight( - elem, - name, - extra || ( isBorderBox ? "border" : "content" ), - valueIsBorderBox, - styles - ) - ) + "px"; -} - -function showHide( elements, show ) { - var display, elem, hidden, - values = [], - index = 0, - length = elements.length; - - for ( ; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - - values[ index ] = data_priv.get( elem, "olddisplay" ); - display = elem.style.display; - if ( show ) { - // Reset the inline display of this element to learn if it is - // being hidden by cascaded rules or not - if ( !values[ index ] && display === "none" ) { - elem.style.display = ""; - } - - // Set elements which have been overridden with display: none - // in a stylesheet to whatever the default browser style is - // for such an element - if ( elem.style.display === "" && isHidden( elem ) ) { - values[ index ] = data_priv.access( elem, "olddisplay", defaultDisplay(elem.nodeName) ); - } - } else { - hidden = isHidden( elem ); - - if ( display !== "none" || !hidden ) { - data_priv.set( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); - } - } - } - - // Set the display of most of the elements in a second loop - // to avoid the constant reflow - for ( index = 0; index < length; index++ ) { - elem = elements[ index ]; - if ( !elem.style ) { - continue; - } - if ( !show || elem.style.display === "none" || elem.style.display === "" ) { - elem.style.display = show ? values[ index ] || "" : "none"; - } - } - - return elements; -} - -jQuery.extend({ - - // Add in style property hooks for overriding the default - // behavior of getting and setting a style property - cssHooks: { - opacity: { - get: function( elem, computed ) { - if ( computed ) { - - // We should always get a number back from opacity - var ret = curCSS( elem, "opacity" ); - return ret === "" ? "1" : ret; - } - } - } - }, - - // Don't automatically add "px" to these possibly-unitless properties - cssNumber: { - "columnCount": true, - "fillOpacity": true, - "flexGrow": true, - "flexShrink": true, - "fontWeight": true, - "lineHeight": true, - "opacity": true, - "order": true, - "orphans": true, - "widows": true, - "zIndex": true, - "zoom": true - }, - - // Add in properties whose names you wish to fix before - // setting or getting the value - cssProps: { - "float": "cssFloat" - }, - - // Get and set the style property on a DOM Node - style: function( elem, name, value, extra ) { - - // Don't set styles on text and comment nodes - if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { - return; - } - - // Make sure that we're working with the right name - var ret, type, hooks, - origName = jQuery.camelCase( name ), - style = elem.style; - - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); - - // Gets hook for the prefixed version, then unprefixed version - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // Check if we're setting a value - if ( value !== undefined ) { - type = typeof value; - - // Convert "+=" or "-=" to relative numbers (#7345) - if ( type === "string" && (ret = rrelNum.exec( value )) ) { - value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); - // Fixes bug #9237 - type = "number"; - } - - // Make sure that null and NaN values aren't set (#7116) - if ( value == null || value !== value ) { - return; - } - - // If a number, add 'px' to the (except for certain CSS properties) - if ( type === "number" && !jQuery.cssNumber[ origName ] ) { - value += "px"; - } - - // Support: IE9-11+ - // background-* props affect original clone's values - if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) { - style[ name ] = "inherit"; - } - - // If a hook was provided, use that value, otherwise just set the specified value - if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { - style[ name ] = value; - } - - } else { - // If a hook was provided get the non-computed value from there - if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { - return ret; - } - - // Otherwise just get the value from the style object - return style[ name ]; - } - }, - - css: function( elem, name, extra, styles ) { - var val, num, hooks, - origName = jQuery.camelCase( name ); - - // Make sure that we're working with the right name - name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); - - // Try prefixed name followed by the unprefixed name - hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; - - // If a hook was provided get the computed value from there - if ( hooks && "get" in hooks ) { - val = hooks.get( elem, true, extra ); - } - - // Otherwise, if a way to get the computed value exists, use that - if ( val === undefined ) { - val = curCSS( elem, name, styles ); - } - - // Convert "normal" to computed value - if ( val === "normal" && name in cssNormalTransform ) { - val = cssNormalTransform[ name ]; - } - - // Make numeric if forced or a qualifier was provided and val looks numeric - if ( extra === "" || extra ) { - num = parseFloat( val ); - return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; - } - return val; - } -}); - -jQuery.each([ "height", "width" ], function( i, name ) { - jQuery.cssHooks[ name ] = { - get: function( elem, computed, extra ) { - if ( computed ) { - - // Certain elements can have dimension info if we invisibly show them - // but it must have a current display style that would benefit - return rdisplayswap.test( jQuery.css( elem, "display" ) ) && elem.offsetWidth === 0 ? - jQuery.swap( elem, cssShow, function() { - return getWidthOrHeight( elem, name, extra ); - }) : - getWidthOrHeight( elem, name, extra ); - } - }, - - set: function( elem, value, extra ) { - var styles = extra && getStyles( elem ); - return setPositiveNumber( elem, value, extra ? - augmentWidthOrHeight( - elem, - name, - extra, - jQuery.css( elem, "boxSizing", false, styles ) === "border-box", - styles - ) : 0 - ); - } - }; -}); - -// Support: Android 2.3 -jQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight, - function( elem, computed ) { - if ( computed ) { - return jQuery.swap( elem, { "display": "inline-block" }, - curCSS, [ elem, "marginRight" ] ); - } - } -); - -// These hooks are used by animate to expand properties -jQuery.each({ - margin: "", - padding: "", - border: "Width" -}, function( prefix, suffix ) { - jQuery.cssHooks[ prefix + suffix ] = { - expand: function( value ) { - var i = 0, - expanded = {}, - - // Assumes a single number if not a string - parts = typeof value === "string" ? value.split(" ") : [ value ]; - - for ( ; i < 4; i++ ) { - expanded[ prefix + cssExpand[ i ] + suffix ] = - parts[ i ] || parts[ i - 2 ] || parts[ 0 ]; - } - - return expanded; - } - }; - - if ( !rmargin.test( prefix ) ) { - jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber; - } -}); - -jQuery.fn.extend({ - css: function( name, value ) { - return access( this, function( elem, name, value ) { - var styles, len, - map = {}, - i = 0; - - if ( jQuery.isArray( name ) ) { - styles = getStyles( elem ); - len = name.length; - - for ( ; i < len; i++ ) { - map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); - } - - return map; - } - - return value !== undefined ? - jQuery.style( elem, name, value ) : - jQuery.css( elem, name ); - }, name, value, arguments.length > 1 ); - }, - show: function() { - return showHide( this, true ); - }, - hide: function() { - return showHide( this ); - }, - toggle: function( state ) { - if ( typeof state === "boolean" ) { - return state ? this.show() : this.hide(); - } - - return this.each(function() { - if ( isHidden( this ) ) { - jQuery( this ).show(); - } else { - jQuery( this ).hide(); - } - }); - } -}); - - -function Tween( elem, options, prop, end, easing ) { - return new Tween.prototype.init( elem, options, prop, end, easing ); -} -jQuery.Tween = Tween; - -Tween.prototype = { - constructor: Tween, - init: function( elem, options, prop, end, easing, unit ) { - this.elem = elem; - this.prop = prop; - this.easing = easing || "swing"; - this.options = options; - this.start = this.now = this.cur(); - this.end = end; - this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" ); - }, - cur: function() { - var hooks = Tween.propHooks[ this.prop ]; - - return hooks && hooks.get ? - hooks.get( this ) : - Tween.propHooks._default.get( this ); - }, - run: function( percent ) { - var eased, - hooks = Tween.propHooks[ this.prop ]; - - if ( this.options.duration ) { - this.pos = eased = jQuery.easing[ this.easing ]( - percent, this.options.duration * percent, 0, 1, this.options.duration - ); - } else { - this.pos = eased = percent; - } - this.now = ( this.end - this.start ) * eased + this.start; - - if ( this.options.step ) { - this.options.step.call( this.elem, this.now, this ); - } - - if ( hooks && hooks.set ) { - hooks.set( this ); - } else { - Tween.propHooks._default.set( this ); - } - return this; - } -}; - -Tween.prototype.init.prototype = Tween.prototype; - -Tween.propHooks = { - _default: { - get: function( tween ) { - var result; - - if ( tween.elem[ tween.prop ] != null && - (!tween.elem.style || tween.elem.style[ tween.prop ] == null) ) { - return tween.elem[ tween.prop ]; - } - - // Passing an empty string as a 3rd parameter to .css will automatically - // attempt a parseFloat and fallback to a string if the parse fails. - // Simple values such as "10px" are parsed to Float; - // complex values such as "rotate(1rad)" are returned as-is. - result = jQuery.css( tween.elem, tween.prop, "" ); - // Empty strings, null, undefined and "auto" are converted to 0. - return !result || result === "auto" ? 0 : result; - }, - set: function( tween ) { - // Use step hook for back compat. - // Use cssHook if its there. - // Use .style if available and use plain properties where available. - if ( jQuery.fx.step[ tween.prop ] ) { - jQuery.fx.step[ tween.prop ]( tween ); - } else if ( tween.elem.style && ( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null || jQuery.cssHooks[ tween.prop ] ) ) { - jQuery.style( tween.elem, tween.prop, tween.now + tween.unit ); - } else { - tween.elem[ tween.prop ] = tween.now; - } - } - } -}; - -// Support: IE9 -// Panic based approach to setting things on disconnected nodes -Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = { - set: function( tween ) { - if ( tween.elem.nodeType && tween.elem.parentNode ) { - tween.elem[ tween.prop ] = tween.now; - } - } -}; - -jQuery.easing = { - linear: function( p ) { - return p; - }, - swing: function( p ) { - return 0.5 - Math.cos( p * Math.PI ) / 2; - } -}; - -jQuery.fx = Tween.prototype.init; - -// Back Compat <1.8 extension point -jQuery.fx.step = {}; - - - - -var - fxNow, timerId, - rfxtypes = /^(?:toggle|show|hide)$/, - rfxnum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" ), - rrun = /queueHooks$/, - animationPrefilters = [ defaultPrefilter ], - tweeners = { - "*": [ function( prop, value ) { - var tween = this.createTween( prop, value ), - target = tween.cur(), - parts = rfxnum.exec( value ), - unit = parts && parts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ), - - // Starting value computation is required for potential unit mismatches - start = ( jQuery.cssNumber[ prop ] || unit !== "px" && +target ) && - rfxnum.exec( jQuery.css( tween.elem, prop ) ), - scale = 1, - maxIterations = 20; - - if ( start && start[ 3 ] !== unit ) { - // Trust units reported by jQuery.css - unit = unit || start[ 3 ]; - - // Make sure we update the tween properties later on - parts = parts || []; - - // Iteratively approximate from a nonzero starting point - start = +target || 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 - start = start / scale; - jQuery.style( tween.elem, prop, start + 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 = tween.cur() / target) && scale !== 1 && --maxIterations ); - } - - // Update tween properties - if ( parts ) { - start = tween.start = +start || +target || 0; - tween.unit = unit; - // If a +=/-= token was provided, we're doing a relative animation - tween.end = parts[ 1 ] ? - start + ( parts[ 1 ] + 1 ) * parts[ 2 ] : - +parts[ 2 ]; - } - - return tween; - } ] - }; - -// Animations created synchronously will run synchronously -function createFxNow() { - setTimeout(function() { - fxNow = undefined; - }); - return ( fxNow = jQuery.now() ); -} - -// Generate parameters to create a standard animation -function genFx( type, includeWidth ) { - var which, - i = 0, - attrs = { height: type }; - - // If we include width, step value is 1 to do all cssExpand values, - // otherwise step value is 2 to skip over Left and Right - includeWidth = includeWidth ? 1 : 0; - for ( ; i < 4 ; i += 2 - includeWidth ) { - which = cssExpand[ i ]; - attrs[ "margin" + which ] = attrs[ "padding" + which ] = type; - } - - if ( includeWidth ) { - attrs.opacity = attrs.width = type; - } - - return attrs; -} - -function createTween( value, prop, animation ) { - var tween, - collection = ( tweeners[ prop ] || [] ).concat( tweeners[ "*" ] ), - index = 0, - length = collection.length; - for ( ; index < length; index++ ) { - if ( (tween = collection[ index ].call( animation, prop, value )) ) { - - // We're done with this property - return tween; - } - } -} - -function defaultPrefilter( elem, props, opts ) { - /* jshint validthis: true */ - var prop, value, toggle, tween, hooks, oldfire, display, checkDisplay, - anim = this, - orig = {}, - style = elem.style, - hidden = elem.nodeType && isHidden( elem ), - dataShow = data_priv.get( elem, "fxshow" ); - - // Handle queue: false promises - if ( !opts.queue ) { - hooks = jQuery._queueHooks( elem, "fx" ); - if ( hooks.unqueued == null ) { - hooks.unqueued = 0; - oldfire = hooks.empty.fire; - hooks.empty.fire = function() { - if ( !hooks.unqueued ) { - oldfire(); - } - }; - } - hooks.unqueued++; - - anim.always(function() { - // Ensure the complete handler is called before this completes - anim.always(function() { - hooks.unqueued--; - if ( !jQuery.queue( elem, "fx" ).length ) { - hooks.empty.fire(); - } - }); - }); - } - - // Height/width overflow pass - if ( elem.nodeType === 1 && ( "height" in props || "width" in props ) ) { - // Make sure that nothing sneaks out - // Record all 3 overflow attributes because IE9-10 do not - // change the overflow attribute when overflowX and - // overflowY are set to the same value - opts.overflow = [ style.overflow, style.overflowX, style.overflowY ]; - - // Set display property to inline-block for height/width - // animations on inline elements that are having width/height animated - display = jQuery.css( elem, "display" ); - - // Test default display if display is currently "none" - checkDisplay = display === "none" ? - data_priv.get( elem, "olddisplay" ) || defaultDisplay( elem.nodeName ) : display; - - if ( checkDisplay === "inline" && jQuery.css( elem, "float" ) === "none" ) { - style.display = "inline-block"; - } - } - - if ( opts.overflow ) { - style.overflow = "hidden"; - anim.always(function() { - style.overflow = opts.overflow[ 0 ]; - style.overflowX = opts.overflow[ 1 ]; - style.overflowY = opts.overflow[ 2 ]; - }); - } - - // show/hide pass - for ( prop in props ) { - value = props[ prop ]; - if ( rfxtypes.exec( value ) ) { - delete props[ prop ]; - toggle = toggle || value === "toggle"; - if ( value === ( hidden ? "hide" : "show" ) ) { - - // If there is dataShow left over from a stopped hide or show and we are going to proceed with show, we should pretend to be hidden - if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) { - hidden = true; - } else { - continue; - } - } - orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop ); - - // Any non-fx value stops us from restoring the original display value - } else { - display = undefined; - } - } - - if ( !jQuery.isEmptyObject( orig ) ) { - if ( dataShow ) { - if ( "hidden" in dataShow ) { - hidden = dataShow.hidden; - } - } else { - dataShow = data_priv.access( elem, "fxshow", {} ); - } - - // Store state if its toggle - enables .stop().toggle() to "reverse" - if ( toggle ) { - dataShow.hidden = !hidden; - } - if ( hidden ) { - jQuery( elem ).show(); - } else { - anim.done(function() { - jQuery( elem ).hide(); - }); - } - anim.done(function() { - var prop; - - data_priv.remove( elem, "fxshow" ); - for ( prop in orig ) { - jQuery.style( elem, prop, orig[ prop ] ); - } - }); - for ( prop in orig ) { - tween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim ); - - if ( !( prop in dataShow ) ) { - dataShow[ prop ] = tween.start; - if ( hidden ) { - tween.end = tween.start; - tween.start = prop === "width" || prop === "height" ? 1 : 0; - } - } - } - - // If this is a noop like .hide().hide(), restore an overwritten display value - } else if ( (display === "none" ? defaultDisplay( elem.nodeName ) : display) === "inline" ) { - style.display = display; - } -} - -function propFilter( props, specialEasing ) { - var index, name, easing, value, hooks; - - // camelCase, specialEasing and expand cssHook pass - for ( index in props ) { - name = jQuery.camelCase( index ); - easing = specialEasing[ name ]; - value = props[ index ]; - if ( jQuery.isArray( value ) ) { - easing = value[ 1 ]; - value = props[ index ] = value[ 0 ]; - } - - if ( index !== name ) { - props[ name ] = value; - delete props[ index ]; - } - - hooks = jQuery.cssHooks[ name ]; - if ( hooks && "expand" in hooks ) { - value = hooks.expand( value ); - delete props[ name ]; - - // Not quite $.extend, this won't overwrite existing keys. - // Reusing 'index' because we have the correct "name" - for ( index in value ) { - if ( !( index in props ) ) { - props[ index ] = value[ index ]; - specialEasing[ index ] = easing; - } - } - } else { - specialEasing[ name ] = easing; - } - } -} - -function Animation( elem, properties, options ) { - var result, - stopped, - index = 0, - length = animationPrefilters.length, - deferred = jQuery.Deferred().always( function() { - // Don't match elem in the :animated selector - delete tick.elem; - }), - tick = function() { - if ( stopped ) { - return false; - } - var currentTime = fxNow || createFxNow(), - remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ), - // Support: Android 2.3 - // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497) - temp = remaining / animation.duration || 0, - percent = 1 - temp, - index = 0, - length = animation.tweens.length; - - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( percent ); - } - - deferred.notifyWith( elem, [ animation, percent, remaining ]); - - if ( percent < 1 && length ) { - return remaining; - } else { - deferred.resolveWith( elem, [ animation ] ); - return false; - } - }, - animation = deferred.promise({ - elem: elem, - props: jQuery.extend( {}, properties ), - opts: jQuery.extend( true, { specialEasing: {} }, options ), - originalProperties: properties, - originalOptions: options, - startTime: fxNow || createFxNow(), - duration: options.duration, - tweens: [], - createTween: function( prop, end ) { - var tween = jQuery.Tween( elem, animation.opts, prop, end, - animation.opts.specialEasing[ prop ] || animation.opts.easing ); - animation.tweens.push( tween ); - return tween; - }, - stop: function( gotoEnd ) { - var index = 0, - // If we are going to the end, we want to run all the tweens - // otherwise we skip this part - length = gotoEnd ? animation.tweens.length : 0; - if ( stopped ) { - return this; - } - stopped = true; - for ( ; index < length ; index++ ) { - animation.tweens[ index ].run( 1 ); - } - - // Resolve when we played the last frame; otherwise, reject - if ( gotoEnd ) { - deferred.resolveWith( elem, [ animation, gotoEnd ] ); - } else { - deferred.rejectWith( elem, [ animation, gotoEnd ] ); - } - return this; - } - }), - props = animation.props; - - propFilter( props, animation.opts.specialEasing ); - - for ( ; index < length ; index++ ) { - result = animationPrefilters[ index ].call( animation, elem, props, animation.opts ); - if ( result ) { - return result; - } - } - - jQuery.map( props, createTween, animation ); - - if ( jQuery.isFunction( animation.opts.start ) ) { - animation.opts.start.call( elem, animation ); - } - - jQuery.fx.timer( - jQuery.extend( tick, { - elem: elem, - anim: animation, - queue: animation.opts.queue - }) - ); - - // attach callbacks from options - return animation.progress( animation.opts.progress ) - .done( animation.opts.done, animation.opts.complete ) - .fail( animation.opts.fail ) - .always( animation.opts.always ); -} - -jQuery.Animation = jQuery.extend( Animation, { - - tweener: function( props, callback ) { - if ( jQuery.isFunction( props ) ) { - callback = props; - props = [ "*" ]; - } else { - props = props.split(" "); - } - - var prop, - index = 0, - length = props.length; - - for ( ; index < length ; index++ ) { - prop = props[ index ]; - tweeners[ prop ] = tweeners[ prop ] || []; - tweeners[ prop ].unshift( callback ); - } - }, - - prefilter: function( callback, prepend ) { - if ( prepend ) { - animationPrefilters.unshift( callback ); - } else { - animationPrefilters.push( callback ); - } - } -}); - -jQuery.speed = function( speed, easing, fn ) { - var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : { - complete: fn || !fn && easing || - jQuery.isFunction( speed ) && speed, - duration: speed, - easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing - }; - - opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration : - opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default; - - // Normalize opt.queue - true/undefined/null -> "fx" - if ( opt.queue == null || opt.queue === true ) { - opt.queue = "fx"; - } - - // Queueing - opt.old = opt.complete; - - opt.complete = function() { - if ( jQuery.isFunction( opt.old ) ) { - opt.old.call( this ); - } - - if ( opt.queue ) { - jQuery.dequeue( this, opt.queue ); - } - }; - - return opt; -}; - -jQuery.fn.extend({ - fadeTo: function( speed, to, easing, callback ) { - - // Show any hidden elements after setting opacity to 0 - return this.filter( isHidden ).css( "opacity", 0 ).show() - - // Animate to the value specified - .end().animate({ opacity: to }, speed, easing, callback ); - }, - animate: function( prop, speed, easing, callback ) { - var empty = jQuery.isEmptyObject( prop ), - optall = jQuery.speed( speed, easing, callback ), - doAnimation = function() { - // Operate on a copy of prop so per-property easing won't be lost - var anim = Animation( this, jQuery.extend( {}, prop ), optall ); - - // Empty animations, or finishing resolves immediately - if ( empty || data_priv.get( this, "finish" ) ) { - anim.stop( true ); - } - }; - doAnimation.finish = doAnimation; - - return empty || optall.queue === false ? - this.each( doAnimation ) : - this.queue( optall.queue, doAnimation ); - }, - stop: function( type, clearQueue, gotoEnd ) { - var stopQueue = function( hooks ) { - var stop = hooks.stop; - delete hooks.stop; - stop( gotoEnd ); - }; - - if ( typeof type !== "string" ) { - gotoEnd = clearQueue; - clearQueue = type; - type = undefined; - } - if ( clearQueue && type !== false ) { - this.queue( type || "fx", [] ); - } - - return this.each(function() { - var dequeue = true, - index = type != null && type + "queueHooks", - timers = jQuery.timers, - data = data_priv.get( this ); - - if ( index ) { - if ( data[ index ] && data[ index ].stop ) { - stopQueue( data[ index ] ); - } - } else { - for ( index in data ) { - if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) { - stopQueue( data[ index ] ); - } - } - } - - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && (type == null || timers[ index ].queue === type) ) { - timers[ index ].anim.stop( gotoEnd ); - dequeue = false; - timers.splice( index, 1 ); - } - } - - // Start the next in the queue if the last step wasn't forced. - // Timers currently will call their complete callbacks, which - // will dequeue but only if they were gotoEnd. - if ( dequeue || !gotoEnd ) { - jQuery.dequeue( this, type ); - } - }); - }, - finish: function( type ) { - if ( type !== false ) { - type = type || "fx"; - } - return this.each(function() { - var index, - data = data_priv.get( this ), - queue = data[ type + "queue" ], - hooks = data[ type + "queueHooks" ], - timers = jQuery.timers, - length = queue ? queue.length : 0; - - // Enable finishing flag on private data - data.finish = true; - - // Empty the queue first - jQuery.queue( this, type, [] ); - - if ( hooks && hooks.stop ) { - hooks.stop.call( this, true ); - } - - // Look for any active animations, and finish them - for ( index = timers.length; index--; ) { - if ( timers[ index ].elem === this && timers[ index ].queue === type ) { - timers[ index ].anim.stop( true ); - timers.splice( index, 1 ); - } - } - - // Look for any animations in the old queue and finish them - for ( index = 0; index < length; index++ ) { - if ( queue[ index ] && queue[ index ].finish ) { - queue[ index ].finish.call( this ); - } - } - - // Turn off finishing flag - delete data.finish; - }); - } -}); - -jQuery.each([ "toggle", "show", "hide" ], function( i, name ) { - var cssFn = jQuery.fn[ name ]; - jQuery.fn[ name ] = function( speed, easing, callback ) { - return speed == null || typeof speed === "boolean" ? - cssFn.apply( this, arguments ) : - this.animate( genFx( name, true ), speed, easing, callback ); - }; -}); - -// Generate shortcuts for custom animations -jQuery.each({ - slideDown: genFx("show"), - slideUp: genFx("hide"), - slideToggle: genFx("toggle"), - fadeIn: { opacity: "show" }, - fadeOut: { opacity: "hide" }, - fadeToggle: { opacity: "toggle" } -}, function( name, props ) { - jQuery.fn[ name ] = function( speed, easing, callback ) { - return this.animate( props, speed, easing, callback ); - }; -}); - -jQuery.timers = []; -jQuery.fx.tick = function() { - var timer, - i = 0, - timers = jQuery.timers; - - fxNow = jQuery.now(); - - for ( ; i < timers.length; i++ ) { - timer = timers[ i ]; - // Checks the timer has not already been removed - if ( !timer() && timers[ i ] === timer ) { - timers.splice( i--, 1 ); - } - } - - if ( !timers.length ) { - jQuery.fx.stop(); - } - fxNow = undefined; -}; - -jQuery.fx.timer = function( timer ) { - jQuery.timers.push( timer ); - if ( timer() ) { - jQuery.fx.start(); - } else { - jQuery.timers.pop(); - } -}; - -jQuery.fx.interval = 13; - -jQuery.fx.start = function() { - if ( !timerId ) { - timerId = setInterval( jQuery.fx.tick, jQuery.fx.interval ); - } -}; - -jQuery.fx.stop = function() { - clearInterval( timerId ); - timerId = null; -}; - -jQuery.fx.speeds = { - slow: 600, - fast: 200, - // Default speed - _default: 400 -}; - - -// Based off of the plugin by Clint Helfers, with permission. -// http://blindsignals.com/index.php/2009/07/jquery-delay/ -jQuery.fn.delay = function( time, type ) { - time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; - type = type || "fx"; - - return this.queue( type, function( next, hooks ) { - var timeout = setTimeout( next, time ); - hooks.stop = function() { - clearTimeout( timeout ); - }; - }); -}; - - -(function() { - var input = document.createElement( "input" ), - select = document.createElement( "select" ), - opt = select.appendChild( document.createElement( "option" ) ); - - input.type = "checkbox"; - - // Support: iOS<=5.1, Android<=4.2+ - // Default value for a checkbox should be "on" - support.checkOn = input.value !== ""; - - // Support: IE<=11+ - // Must access selectedIndex to make default options select - support.optSelected = opt.selected; - - // Support: Android<=2.3 - // Options inside disabled selects are incorrectly marked as disabled - select.disabled = true; - support.optDisabled = !opt.disabled; - - // Support: IE<=11+ - // An input loses its value after becoming a radio - input = document.createElement( "input" ); - input.value = "t"; - input.type = "radio"; - support.radioValue = input.value === "t"; -})(); - - -var nodeHook, boolHook, - attrHandle = jQuery.expr.attrHandle; - -jQuery.fn.extend({ - attr: function( name, value ) { - return access( this, jQuery.attr, name, value, arguments.length > 1 ); - }, - - removeAttr: function( name ) { - return this.each(function() { - jQuery.removeAttr( this, name ); - }); - } -}); - -jQuery.extend({ - attr: function( elem, name, value ) { - var hooks, ret, - nType = elem.nodeType; - - // don't get/set attributes on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - // Fallback to prop when attributes are not supported - if ( typeof elem.getAttribute === strundefined ) { - return jQuery.prop( elem, name, value ); - } - - // All attributes are lowercase - // Grab necessary hook if one is defined - if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) { - name = name.toLowerCase(); - hooks = jQuery.attrHooks[ name ] || - ( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook ); - } - - if ( value !== undefined ) { - - if ( value === null ) { - jQuery.removeAttr( elem, name ); - - } else if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { - return ret; - - } else { - elem.setAttribute( name, value + "" ); - return value; - } - - } else if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { - return ret; - - } else { - ret = jQuery.find.attr( elem, name ); - - // Non-existent attributes return null, we normalize to undefined - return ret == null ? - undefined : - ret; - } - }, - - removeAttr: function( elem, value ) { - var name, propName, - i = 0, - attrNames = value && value.match( rnotwhite ); - - if ( attrNames && elem.nodeType === 1 ) { - while ( (name = attrNames[i++]) ) { - propName = jQuery.propFix[ name ] || name; - - // Boolean attributes get special treatment (#10870) - if ( jQuery.expr.match.bool.test( name ) ) { - // Set corresponding property to false - elem[ propName ] = false; - } - - elem.removeAttribute( name ); - } - } - }, - - attrHooks: { - type: { - set: function( elem, value ) { - if ( !support.radioValue && value === "radio" && - jQuery.nodeName( elem, "input" ) ) { - var val = elem.value; - elem.setAttribute( "type", value ); - if ( val ) { - elem.value = val; - } - return value; - } - } - } - } -}); - -// Hooks for boolean attributes -boolHook = { - set: function( elem, value, name ) { - if ( value === false ) { - // Remove boolean attributes when set to false - jQuery.removeAttr( elem, name ); - } else { - elem.setAttribute( name, name ); - } - return name; - } -}; -jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) { - var getter = attrHandle[ name ] || jQuery.find.attr; - - attrHandle[ name ] = function( elem, name, isXML ) { - var ret, handle; - if ( !isXML ) { - // Avoid an infinite loop by temporarily removing this function from the getter - handle = attrHandle[ name ]; - attrHandle[ name ] = ret; - ret = getter( elem, name, isXML ) != null ? - name.toLowerCase() : - null; - attrHandle[ name ] = handle; - } - return ret; - }; -}); - - - - -var rfocusable = /^(?:input|select|textarea|button)$/i; - -jQuery.fn.extend({ - prop: function( name, value ) { - return access( this, jQuery.prop, name, value, arguments.length > 1 ); - }, - - removeProp: function( name ) { - return this.each(function() { - delete this[ jQuery.propFix[ name ] || name ]; - }); - } -}); - -jQuery.extend({ - propFix: { - "for": "htmlFor", - "class": "className" - }, - - prop: function( elem, name, value ) { - var ret, hooks, notxml, - nType = elem.nodeType; - - // Don't get/set properties on text, comment and attribute nodes - if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { - return; - } - - notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); - - if ( notxml ) { - // Fix name and attach hooks - name = jQuery.propFix[ name ] || name; - hooks = jQuery.propHooks[ name ]; - } - - if ( value !== undefined ) { - return hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ? - ret : - ( elem[ name ] = value ); - - } else { - return hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ? - ret : - elem[ name ]; - } - }, - - propHooks: { - tabIndex: { - get: function( elem ) { - return elem.hasAttribute( "tabindex" ) || rfocusable.test( elem.nodeName ) || elem.href ? - elem.tabIndex : - -1; - } - } - } -}); - -if ( !support.optSelected ) { - jQuery.propHooks.selected = { - get: function( elem ) { - var parent = elem.parentNode; - if ( parent && parent.parentNode ) { - parent.parentNode.selectedIndex; - } - return null; - } - }; -} - -jQuery.each([ - "tabIndex", - "readOnly", - "maxLength", - "cellSpacing", - "cellPadding", - "rowSpan", - "colSpan", - "useMap", - "frameBorder", - "contentEditable" -], function() { - jQuery.propFix[ this.toLowerCase() ] = this; -}); - - - - -var rclass = /[\t\r\n\f]/g; - -jQuery.fn.extend({ - addClass: function( value ) { - var classes, elem, cur, clazz, j, finalValue, - proceed = typeof value === "string" && value, - i = 0, - len = this.length; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).addClass( value.call( this, j, this.className ) ); - }); - } - - if ( proceed ) { - // The disjunction here is for better compressibility (see removeClass) - classes = ( value || "" ).match( rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - " " - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - if ( cur.indexOf( " " + clazz + " " ) < 0 ) { - cur += clazz + " "; - } - } - - // only assign if different to avoid unneeded rendering. - finalValue = jQuery.trim( cur ); - if ( elem.className !== finalValue ) { - elem.className = finalValue; - } - } - } - } - - return this; - }, - - removeClass: function( value ) { - var classes, elem, cur, clazz, j, finalValue, - proceed = arguments.length === 0 || typeof value === "string" && value, - i = 0, - len = this.length; - - if ( jQuery.isFunction( value ) ) { - return this.each(function( j ) { - jQuery( this ).removeClass( value.call( this, j, this.className ) ); - }); - } - if ( proceed ) { - classes = ( value || "" ).match( rnotwhite ) || []; - - for ( ; i < len; i++ ) { - elem = this[ i ]; - // This expression is here for better compressibility (see addClass) - cur = elem.nodeType === 1 && ( elem.className ? - ( " " + elem.className + " " ).replace( rclass, " " ) : - "" - ); - - if ( cur ) { - j = 0; - while ( (clazz = classes[j++]) ) { - // Remove *all* instances - while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { - cur = cur.replace( " " + clazz + " ", " " ); - } - } - - // Only assign if different to avoid unneeded rendering. - finalValue = value ? jQuery.trim( cur ) : ""; - if ( elem.className !== finalValue ) { - elem.className = finalValue; - } - } - } - } - - return this; - }, - - toggleClass: function( value, stateVal ) { - var type = typeof value; - - if ( typeof stateVal === "boolean" && type === "string" ) { - return stateVal ? this.addClass( value ) : this.removeClass( value ); - } - - if ( jQuery.isFunction( value ) ) { - return this.each(function( i ) { - jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); - }); - } - - return this.each(function() { - if ( type === "string" ) { - // Toggle individual class names - var className, - i = 0, - self = jQuery( this ), - classNames = value.match( rnotwhite ) || []; - - while ( (className = classNames[ i++ ]) ) { - // Check each className given, space separated list - if ( self.hasClass( className ) ) { - self.removeClass( className ); - } else { - self.addClass( className ); - } - } - - // Toggle whole class name - } else if ( type === strundefined || type === "boolean" ) { - if ( this.className ) { - // store className if set - data_priv.set( this, "__className__", this.className ); - } - - // If the element has a class name or if we're passed `false`, - // then remove the whole classname (if there was one, the above saved it). - // Otherwise bring back whatever was previously saved (if anything), - // falling back to the empty string if nothing was stored. - this.className = this.className || value === false ? "" : data_priv.get( this, "__className__" ) || ""; - } - }); - }, - - hasClass: function( selector ) { - var className = " " + selector + " ", - i = 0, - l = this.length; - for ( ; i < l; i++ ) { - if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { - return true; - } - } - - return false; - } -}); - - - - -var rreturn = /\r/g; - -jQuery.fn.extend({ - val: function( value ) { - var hooks, ret, isFunction, - elem = this[0]; - - if ( !arguments.length ) { - if ( elem ) { - hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; - - if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { - return ret; - } - - ret = elem.value; - - return typeof ret === "string" ? - // Handle most common string cases - ret.replace(rreturn, "") : - // Handle cases where value is null/undef or number - ret == null ? "" : ret; - } - - return; - } - - isFunction = jQuery.isFunction( value ); - - return this.each(function( i ) { - var val; - - if ( this.nodeType !== 1 ) { - return; - } - - if ( isFunction ) { - val = value.call( this, i, jQuery( this ).val() ); - } else { - val = value; - } - - // Treat null/undefined as ""; convert numbers to string - if ( val == null ) { - val = ""; - - } else if ( typeof val === "number" ) { - val += ""; - - } else if ( jQuery.isArray( val ) ) { - val = jQuery.map( val, function( value ) { - return value == null ? "" : value + ""; - }); - } - - hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; - - // If set returns undefined, fall back to normal setting - if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { - this.value = val; - } - }); - } -}); - -jQuery.extend({ - valHooks: { - option: { - get: function( elem ) { - var val = jQuery.find.attr( elem, "value" ); - return val != null ? - val : - // Support: IE10-11+ - // option.text throws exceptions (#14686, #14858) - jQuery.trim( jQuery.text( elem ) ); - } - }, - select: { - get: function( elem ) { - var value, option, - options = elem.options, - index = elem.selectedIndex, - one = elem.type === "select-one" || index < 0, - values = one ? null : [], - max = one ? index + 1 : options.length, - i = index < 0 ? - max : - one ? index : 0; - - // Loop through all the selected options - for ( ; i < max; i++ ) { - option = options[ i ]; - - // IE6-9 doesn't update selected after form reset (#2551) - if ( ( option.selected || i === index ) && - // Don't return options that are disabled or in a disabled optgroup - ( support.optDisabled ? !option.disabled : option.getAttribute( "disabled" ) === null ) && - ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { - - // Get the specific value for the option - value = jQuery( option ).val(); - - // We don't need an array for one selects - if ( one ) { - return value; - } - - // Multi-Selects return an array - values.push( value ); - } - } - - return values; - }, - - set: function( elem, value ) { - var optionSet, option, - options = elem.options, - values = jQuery.makeArray( value ), - i = options.length; - - while ( i-- ) { - option = options[ i ]; - if ( (option.selected = jQuery.inArray( option.value, values ) >= 0) ) { - optionSet = true; - } - } - - // Force browsers to behave consistently when non-matching value is set - if ( !optionSet ) { - elem.selectedIndex = -1; - } - return values; - } - } - } -}); - -// Radios and checkboxes getter/setter -jQuery.each([ "radio", "checkbox" ], function() { - jQuery.valHooks[ this ] = { - set: function( elem, value ) { - if ( jQuery.isArray( value ) ) { - return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); - } - } - }; - if ( !support.checkOn ) { - jQuery.valHooks[ this ].get = function( elem ) { - return elem.getAttribute("value") === null ? "on" : elem.value; - }; - } -}); - - - - -// Return jQuery for attributes-only inclusion - - -jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " + - "mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " + - "change select submit keydown keypress keyup error contextmenu").split(" "), function( i, name ) { - - // Handle event binding - jQuery.fn[ name ] = function( data, fn ) { - return arguments.length > 0 ? - this.on( name, null, data, fn ) : - this.trigger( name ); - }; -}); - -jQuery.fn.extend({ - hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); - }, - - bind: function( types, data, fn ) { - return this.on( types, null, data, fn ); - }, - unbind: function( types, fn ) { - return this.off( types, null, fn ); - }, - - delegate: function( selector, types, data, fn ) { - return this.on( types, selector, data, fn ); - }, - undelegate: function( selector, types, fn ) { - // ( namespace ) or ( selector, types [, fn] ) - return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); - } -}); - - -var nonce = jQuery.now(); - -var rquery = (/\?/); - - - -// Support: Android 2.3 -// Workaround failure to string-cast null input -jQuery.parseJSON = function( data ) { - return JSON.parse( data + "" ); -}; - - -// Cross-browser xml parsing -jQuery.parseXML = function( data ) { - var xml, tmp; - if ( !data || typeof data !== "string" ) { - return null; - } - - // Support: IE9 - try { - tmp = new DOMParser(); - xml = tmp.parseFromString( data, "text/xml" ); - } catch ( e ) { - xml = undefined; - } - - if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) { - jQuery.error( "Invalid XML: " + data ); - } - return xml; -}; - - -var - rhash = /#.*$/, - rts = /([?&])_=[^&]*/, - rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg, - // #7653, #8125, #8152: local protocol detection - rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/, - rnoContent = /^(?:GET|HEAD)$/, - rprotocol = /^\/\//, - rurl = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/, - - /* Prefilters - * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example) - * 2) These are called: - * - BEFORE asking for a transport - * - AFTER param serialization (s.data is a string if s.processData is true) - * 3) key is the dataType - * 4) the catchall symbol "*" can be used - * 5) execution will start with transport dataType and THEN continue down to "*" if needed - */ - prefilters = {}, - - /* Transports bindings - * 1) key is the dataType - * 2) the catchall symbol "*" can be used - * 3) selection will start with transport dataType and THEN go to "*" if needed - */ - transports = {}, - - // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression - allTypes = "*/".concat( "*" ), - - // Document location - ajaxLocation = window.location.href, - - // Segment location into parts - ajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || []; - -// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport -function addToPrefiltersOrTransports( structure ) { - - // dataTypeExpression is optional and defaults to "*" - return function( dataTypeExpression, func ) { - - if ( typeof dataTypeExpression !== "string" ) { - func = dataTypeExpression; - dataTypeExpression = "*"; - } - - var dataType, - i = 0, - dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || []; - - if ( jQuery.isFunction( func ) ) { - // For each dataType in the dataTypeExpression - while ( (dataType = dataTypes[i++]) ) { - // Prepend if requested - if ( dataType[0] === "+" ) { - dataType = dataType.slice( 1 ) || "*"; - (structure[ dataType ] = structure[ dataType ] || []).unshift( func ); - - // Otherwise append - } else { - (structure[ dataType ] = structure[ dataType ] || []).push( func ); - } - } - } - }; -} - -// Base inspection function for prefilters and transports -function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) { - - var inspected = {}, - seekingTransport = ( structure === transports ); - - function inspect( dataType ) { - var selected; - inspected[ dataType ] = true; - jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) { - var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR ); - if ( typeof dataTypeOrTransport === "string" && !seekingTransport && !inspected[ dataTypeOrTransport ] ) { - options.dataTypes.unshift( dataTypeOrTransport ); - inspect( dataTypeOrTransport ); - return false; - } else if ( seekingTransport ) { - return !( selected = dataTypeOrTransport ); - } - }); - return selected; - } - - return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" ); -} - -// A special extend for ajax options -// that takes "flat" options (not to be deep extended) -// Fixes #9887 -function ajaxExtend( target, src ) { - var key, deep, - flatOptions = jQuery.ajaxSettings.flatOptions || {}; - - for ( key in src ) { - if ( src[ key ] !== undefined ) { - ( flatOptions[ key ] ? target : ( deep || (deep = {}) ) )[ key ] = src[ key ]; - } - } - if ( deep ) { - jQuery.extend( true, target, deep ); - } - - return target; -} - -/* Handles responses to an ajax request: - * - finds the right dataType (mediates between content-type and expected dataType) - * - returns the corresponding response - */ -function ajaxHandleResponses( s, jqXHR, responses ) { - - var ct, type, finalDataType, firstDataType, - contents = s.contents, - dataTypes = s.dataTypes; - - // Remove auto dataType and get content-type in the process - while ( dataTypes[ 0 ] === "*" ) { - dataTypes.shift(); - if ( ct === undefined ) { - ct = s.mimeType || jqXHR.getResponseHeader("Content-Type"); - } - } - - // Check if we're dealing with a known content-type - if ( ct ) { - for ( type in contents ) { - if ( contents[ type ] && contents[ type ].test( ct ) ) { - dataTypes.unshift( type ); - break; - } - } - } - - // Check to see if we have a response for the expected dataType - if ( dataTypes[ 0 ] in responses ) { - finalDataType = dataTypes[ 0 ]; - } else { - // Try convertible dataTypes - for ( type in responses ) { - if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[0] ] ) { - finalDataType = type; - break; - } - if ( !firstDataType ) { - firstDataType = type; - } - } - // Or just use first one - finalDataType = finalDataType || firstDataType; - } - - // If we found a dataType - // We add the dataType to the list if needed - // and return the corresponding response - if ( finalDataType ) { - if ( finalDataType !== dataTypes[ 0 ] ) { - dataTypes.unshift( finalDataType ); - } - return responses[ finalDataType ]; - } -} - -/* Chain conversions given the request and the original response - * Also sets the responseXXX fields on the jqXHR instance - */ -function ajaxConvert( s, response, jqXHR, isSuccess ) { - var conv2, current, conv, tmp, prev, - converters = {}, - // Work with a copy of dataTypes in case we need to modify it for conversion - dataTypes = s.dataTypes.slice(); - - // Create converters map with lowercased keys - if ( dataTypes[ 1 ] ) { - for ( conv in s.converters ) { - converters[ conv.toLowerCase() ] = s.converters[ conv ]; - } - } - - current = dataTypes.shift(); - - // Convert to each sequential dataType - while ( current ) { - - if ( s.responseFields[ current ] ) { - jqXHR[ s.responseFields[ current ] ] = response; - } - - // Apply the dataFilter if provided - if ( !prev && isSuccess && s.dataFilter ) { - response = s.dataFilter( response, s.dataType ); - } - - prev = current; - current = dataTypes.shift(); - - if ( current ) { - - // There's only work to do if current dataType is non-auto - if ( current === "*" ) { - - current = prev; - - // Convert response if prev dataType is non-auto and differs from current - } else if ( prev !== "*" && prev !== current ) { - - // Seek a direct converter - conv = converters[ prev + " " + current ] || converters[ "* " + current ]; - - // If none found, seek a pair - if ( !conv ) { - for ( conv2 in converters ) { - - // If conv2 outputs current - tmp = conv2.split( " " ); - if ( tmp[ 1 ] === current ) { - - // If prev can be converted to accepted input - conv = converters[ prev + " " + tmp[ 0 ] ] || - converters[ "* " + tmp[ 0 ] ]; - if ( conv ) { - // Condense equivalence converters - if ( conv === true ) { - conv = converters[ conv2 ]; - - // Otherwise, insert the intermediate dataType - } else if ( converters[ conv2 ] !== true ) { - current = tmp[ 0 ]; - dataTypes.unshift( tmp[ 1 ] ); - } - break; - } - } - } - } - - // Apply converter (if not an equivalence) - if ( conv !== true ) { - - // Unless errors are allowed to bubble, catch and return them - if ( conv && s[ "throws" ] ) { - response = conv( response ); - } else { - try { - response = conv( response ); - } catch ( e ) { - return { state: "parsererror", error: conv ? e : "No conversion from " + prev + " to " + current }; - } - } - } - } - } - } - - return { state: "success", data: response }; -} - -jQuery.extend({ - - // Counter for holding the number of active queries - active: 0, - - // Last-Modified header cache for next request - lastModified: {}, - etag: {}, - - ajaxSettings: { - url: ajaxLocation, - type: "GET", - isLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ), - global: true, - processData: true, - async: true, - contentType: "application/x-www-form-urlencoded; charset=UTF-8", - /* - timeout: 0, - data: null, - dataType: null, - username: null, - password: null, - cache: null, - throws: false, - traditional: false, - headers: {}, - */ - - accepts: { - "*": allTypes, - text: "text/plain", - html: "text/html", - xml: "application/xml, text/xml", - json: "application/json, text/javascript" - }, - - contents: { - xml: /xml/, - html: /html/, - json: /json/ - }, - - responseFields: { - xml: "responseXML", - text: "responseText", - json: "responseJSON" - }, - - // Data converters - // Keys separate source (or catchall "*") and destination types with a single space - converters: { - - // Convert anything to text - "* text": String, - - // Text to html (true = no transformation) - "text html": true, - - // Evaluate text as a json expression - "text json": jQuery.parseJSON, - - // Parse text as xml - "text xml": jQuery.parseXML - }, - - // For options that shouldn't be deep extended: - // you can add your own custom options here if - // and when you create one that shouldn't be - // deep extended (see ajaxExtend) - flatOptions: { - url: true, - context: true - } - }, - - // Creates a full fledged settings object into target - // with both ajaxSettings and settings fields. - // If target is omitted, writes into ajaxSettings. - ajaxSetup: function( target, settings ) { - return settings ? - - // Building a settings object - ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) : - - // Extending ajaxSettings - ajaxExtend( jQuery.ajaxSettings, target ); - }, - - ajaxPrefilter: addToPrefiltersOrTransports( prefilters ), - ajaxTransport: addToPrefiltersOrTransports( transports ), - - // Main method - ajax: function( url, options ) { - - // If url is an object, simulate pre-1.5 signature - if ( typeof url === "object" ) { - options = url; - url = undefined; - } - - // Force options to be an object - options = options || {}; - - var transport, - // URL without anti-cache param - cacheURL, - // Response headers - responseHeadersString, - responseHeaders, - // timeout handle - timeoutTimer, - // Cross-domain detection vars - parts, - // To know if global events are to be dispatched - fireGlobals, - // Loop variable - i, - // Create the final options object - s = jQuery.ajaxSetup( {}, options ), - // Callbacks context - callbackContext = s.context || s, - // Context for global events is callbackContext if it is a DOM node or jQuery collection - globalEventContext = s.context && ( callbackContext.nodeType || callbackContext.jquery ) ? - jQuery( callbackContext ) : - jQuery.event, - // Deferreds - deferred = jQuery.Deferred(), - completeDeferred = jQuery.Callbacks("once memory"), - // Status-dependent callbacks - statusCode = s.statusCode || {}, - // Headers (they are sent all at once) - requestHeaders = {}, - requestHeadersNames = {}, - // The jqXHR state - state = 0, - // Default abort message - strAbort = "canceled", - // Fake xhr - jqXHR = { - readyState: 0, - - // Builds headers hashtable if needed - getResponseHeader: function( key ) { - var match; - if ( state === 2 ) { - if ( !responseHeaders ) { - responseHeaders = {}; - while ( (match = rheaders.exec( responseHeadersString )) ) { - responseHeaders[ match[1].toLowerCase() ] = match[ 2 ]; - } - } - match = responseHeaders[ key.toLowerCase() ]; - } - return match == null ? null : match; - }, - - // Raw string - getAllResponseHeaders: function() { - return state === 2 ? responseHeadersString : null; - }, - - // Caches the header - setRequestHeader: function( name, value ) { - var lname = name.toLowerCase(); - if ( !state ) { - name = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name; - requestHeaders[ name ] = value; - } - return this; - }, - - // Overrides response content-type header - overrideMimeType: function( type ) { - if ( !state ) { - s.mimeType = type; - } - return this; - }, - - // Status-dependent callbacks - statusCode: function( map ) { - var code; - if ( map ) { - if ( state < 2 ) { - for ( code in map ) { - // Lazy-add the new callback in a way that preserves old ones - statusCode[ code ] = [ statusCode[ code ], map[ code ] ]; - } - } else { - // Execute the appropriate callbacks - jqXHR.always( map[ jqXHR.status ] ); - } - } - return this; - }, - - // Cancel the request - abort: function( statusText ) { - var finalText = statusText || strAbort; - if ( transport ) { - transport.abort( finalText ); - } - done( 0, finalText ); - return this; - } - }; - - // Attach deferreds - deferred.promise( jqXHR ).complete = completeDeferred.add; - jqXHR.success = jqXHR.done; - jqXHR.error = jqXHR.fail; - - // Remove hash character (#7531: and string promotion) - // Add protocol if not provided (prefilters might expect it) - // Handle falsy url in the settings object (#10093: consistency with old signature) - // We also use the url parameter if available - s.url = ( ( url || s.url || ajaxLocation ) + "" ).replace( rhash, "" ) - .replace( rprotocol, ajaxLocParts[ 1 ] + "//" ); - - // Alias method option to type as per ticket #12004 - s.type = options.method || options.type || s.method || s.type; - - // Extract dataTypes list - s.dataTypes = jQuery.trim( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ]; - - // A cross-domain request is in order when we have a protocol:host:port mismatch - if ( s.crossDomain == null ) { - parts = rurl.exec( s.url.toLowerCase() ); - s.crossDomain = !!( parts && - ( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] || - ( parts[ 3 ] || ( parts[ 1 ] === "http:" ? "80" : "443" ) ) !== - ( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === "http:" ? "80" : "443" ) ) ) - ); - } - - // Convert data if not already a string - if ( s.data && s.processData && typeof s.data !== "string" ) { - s.data = jQuery.param( s.data, s.traditional ); - } - - // Apply prefilters - inspectPrefiltersOrTransports( prefilters, s, options, jqXHR ); - - // If request was aborted inside a prefilter, stop there - if ( state === 2 ) { - return jqXHR; - } - - // We can fire global events as of now if asked to - // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118) - fireGlobals = jQuery.event && s.global; - - // Watch for a new set of requests - if ( fireGlobals && jQuery.active++ === 0 ) { - jQuery.event.trigger("ajaxStart"); - } - - // Uppercase the type - s.type = s.type.toUpperCase(); - - // Determine if request has content - s.hasContent = !rnoContent.test( s.type ); - - // Save the URL in case we're toying with the If-Modified-Since - // and/or If-None-Match header later on - cacheURL = s.url; - - // More options handling for requests with no content - if ( !s.hasContent ) { - - // If data is available, append data to url - if ( s.data ) { - cacheURL = ( s.url += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data ); - // #9682: remove data so that it's not used in an eventual retry - delete s.data; - } - - // Add anti-cache in url if needed - if ( s.cache === false ) { - s.url = rts.test( cacheURL ) ? - - // If there is already a '_' parameter, set its value - cacheURL.replace( rts, "$1_=" + nonce++ ) : - - // Otherwise add one to the end - cacheURL + ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + nonce++; - } - } - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - if ( jQuery.lastModified[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] ); - } - if ( jQuery.etag[ cacheURL ] ) { - jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] ); - } - } - - // Set the correct header, if data is being sent - if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) { - jqXHR.setRequestHeader( "Content-Type", s.contentType ); - } - - // Set the Accepts header for the server, depending on the dataType - jqXHR.setRequestHeader( - "Accept", - s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[0] ] ? - s.accepts[ s.dataTypes[0] ] + ( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) : - s.accepts[ "*" ] - ); - - // Check for headers option - for ( i in s.headers ) { - jqXHR.setRequestHeader( i, s.headers[ i ] ); - } - - // Allow custom headers/mimetypes and early abort - if ( s.beforeSend && ( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) { - // Abort if not done already and return - return jqXHR.abort(); - } - - // Aborting is no longer a cancellation - strAbort = "abort"; - - // Install callbacks on deferreds - for ( i in { success: 1, error: 1, complete: 1 } ) { - jqXHR[ i ]( s[ i ] ); - } - - // Get transport - transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR ); - - // If no transport, we auto-abort - if ( !transport ) { - done( -1, "No Transport" ); - } else { - jqXHR.readyState = 1; - - // Send global event - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] ); - } - // Timeout - if ( s.async && s.timeout > 0 ) { - timeoutTimer = setTimeout(function() { - jqXHR.abort("timeout"); - }, s.timeout ); - } - - try { - state = 1; - transport.send( requestHeaders, done ); - } catch ( e ) { - // Propagate exception as error if not done - if ( state < 2 ) { - done( -1, e ); - // Simply rethrow otherwise - } else { - throw e; - } - } - } - - // Callback for when everything is done - function done( status, nativeStatusText, responses, headers ) { - var isSuccess, success, error, response, modified, - statusText = nativeStatusText; - - // Called once - if ( state === 2 ) { - return; - } - - // State is "done" now - state = 2; - - // Clear timeout if it exists - if ( timeoutTimer ) { - clearTimeout( timeoutTimer ); - } - - // Dereference transport for early garbage collection - // (no matter how long the jqXHR object will be used) - transport = undefined; - - // Cache response headers - responseHeadersString = headers || ""; - - // Set readyState - jqXHR.readyState = status > 0 ? 4 : 0; - - // Determine if successful - isSuccess = status >= 200 && status < 300 || status === 304; - - // Get response data - if ( responses ) { - response = ajaxHandleResponses( s, jqXHR, responses ); - } - - // Convert no matter what (that way responseXXX fields are always set) - response = ajaxConvert( s, response, jqXHR, isSuccess ); - - // If successful, handle type chaining - if ( isSuccess ) { - - // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode. - if ( s.ifModified ) { - modified = jqXHR.getResponseHeader("Last-Modified"); - if ( modified ) { - jQuery.lastModified[ cacheURL ] = modified; - } - modified = jqXHR.getResponseHeader("etag"); - if ( modified ) { - jQuery.etag[ cacheURL ] = modified; - } - } - - // if no content - if ( status === 204 || s.type === "HEAD" ) { - statusText = "nocontent"; - - // if not modified - } else if ( status === 304 ) { - statusText = "notmodified"; - - // If we have data, let's convert it - } else { - statusText = response.state; - success = response.data; - error = response.error; - isSuccess = !error; - } - } else { - // Extract error from statusText and normalize for non-aborts - error = statusText; - if ( status || !statusText ) { - statusText = "error"; - if ( status < 0 ) { - status = 0; - } - } - } - - // Set data for the fake xhr object - jqXHR.status = status; - jqXHR.statusText = ( nativeStatusText || statusText ) + ""; - - // Success/Error - if ( isSuccess ) { - deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] ); - } else { - deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] ); - } - - // Status-dependent callbacks - jqXHR.statusCode( statusCode ); - statusCode = undefined; - - if ( fireGlobals ) { - globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError", - [ jqXHR, s, isSuccess ? success : error ] ); - } - - // Complete - completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] ); - - if ( fireGlobals ) { - globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] ); - // Handle the global AJAX counter - if ( !( --jQuery.active ) ) { - jQuery.event.trigger("ajaxStop"); - } - } - } - - return jqXHR; - }, - - getJSON: function( url, data, callback ) { - return jQuery.get( url, data, callback, "json" ); - }, - - getScript: function( url, callback ) { - return jQuery.get( url, undefined, callback, "script" ); - } -}); - -jQuery.each( [ "get", "post" ], function( i, method ) { - jQuery[ method ] = function( url, data, callback, type ) { - // Shift arguments if data argument was omitted - if ( jQuery.isFunction( data ) ) { - type = type || callback; - callback = data; - data = undefined; - } - - return jQuery.ajax({ - url: url, - type: method, - dataType: type, - data: data, - success: callback - }); - }; -}); - - -jQuery._evalUrl = function( url ) { - return jQuery.ajax({ - url: url, - type: "GET", - dataType: "script", - async: false, - global: false, - "throws": true - }); -}; - - -jQuery.fn.extend({ - wrapAll: function( html ) { - var wrap; - - if ( jQuery.isFunction( html ) ) { - return this.each(function( i ) { - jQuery( this ).wrapAll( html.call(this, i) ); - }); - } - - if ( this[ 0 ] ) { - - // The elements to wrap the target around - wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true ); - - if ( this[ 0 ].parentNode ) { - wrap.insertBefore( this[ 0 ] ); - } - - wrap.map(function() { - var elem = this; - - while ( elem.firstElementChild ) { - elem = elem.firstElementChild; - } - - return elem; - }).append( this ); - } - - return this; - }, - - wrapInner: function( html ) { - if ( jQuery.isFunction( html ) ) { - return this.each(function( i ) { - jQuery( this ).wrapInner( html.call(this, i) ); - }); - } - - return this.each(function() { - var self = jQuery( this ), - contents = self.contents(); - - if ( contents.length ) { - contents.wrapAll( html ); - - } else { - self.append( html ); - } - }); - }, - - wrap: function( html ) { - var isFunction = jQuery.isFunction( html ); - - return this.each(function( i ) { - jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); - }); - }, - - unwrap: function() { - return this.parent().each(function() { - if ( !jQuery.nodeName( this, "body" ) ) { - jQuery( this ).replaceWith( this.childNodes ); - } - }).end(); - } -}); - - -jQuery.expr.filters.hidden = function( elem ) { - // Support: Opera <= 12.12 - // Opera reports offsetWidths and offsetHeights less than zero on some elements - return elem.offsetWidth <= 0 && elem.offsetHeight <= 0; -}; -jQuery.expr.filters.visible = function( elem ) { - return !jQuery.expr.filters.hidden( elem ); -}; - - - - -var r20 = /%20/g, - rbracket = /\[\]$/, - rCRLF = /\r?\n/g, - rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i, - rsubmittable = /^(?:input|select|textarea|keygen)/i; - -function buildParams( prefix, obj, traditional, add ) { - var name; - - if ( jQuery.isArray( obj ) ) { - // Serialize array item. - jQuery.each( obj, function( i, v ) { - if ( traditional || rbracket.test( prefix ) ) { - // Treat each array item as a scalar. - add( prefix, v ); - - } else { - // Item is non-scalar (array or object), encode its numeric index. - buildParams( prefix + "[" + ( typeof v === "object" ? i : "" ) + "]", v, traditional, add ); - } - }); - - } else if ( !traditional && jQuery.type( obj ) === "object" ) { - // Serialize object item. - for ( name in obj ) { - buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add ); - } - - } else { - // Serialize scalar item. - add( prefix, obj ); - } -} - -// Serialize an array of form elements or a set of -// key/values into a query string -jQuery.param = function( a, traditional ) { - var prefix, - s = [], - add = function( key, value ) { - // If value is a function, invoke it and return its value - value = jQuery.isFunction( value ) ? value() : ( value == null ? "" : value ); - s[ s.length ] = encodeURIComponent( key ) + "=" + encodeURIComponent( value ); - }; - - // Set traditional to true for jQuery <= 1.3.2 behavior. - if ( traditional === undefined ) { - traditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional; - } - - // If an array was passed in, assume that it is an array of form elements. - if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) { - // Serialize the form elements - jQuery.each( a, function() { - add( this.name, this.value ); - }); - - } else { - // If traditional, encode the "old" way (the way 1.3.2 or older - // did it), otherwise encode params recursively. - for ( prefix in a ) { - buildParams( prefix, a[ prefix ], traditional, add ); - } - } - - // Return the resulting serialization - return s.join( "&" ).replace( r20, "+" ); -}; - -jQuery.fn.extend({ - serialize: function() { - return jQuery.param( this.serializeArray() ); - }, - serializeArray: function() { - return this.map(function() { - // Can add propHook for "elements" to filter or add form elements - var elements = jQuery.prop( this, "elements" ); - return elements ? jQuery.makeArray( elements ) : this; - }) - .filter(function() { - var type = this.type; - - // Use .is( ":disabled" ) so that fieldset[disabled] works - return this.name && !jQuery( this ).is( ":disabled" ) && - rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) && - ( this.checked || !rcheckableType.test( type ) ); - }) - .map(function( i, elem ) { - var val = jQuery( this ).val(); - - return val == null ? - null : - jQuery.isArray( val ) ? - jQuery.map( val, function( val ) { - return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }) : - { name: elem.name, value: val.replace( rCRLF, "\r\n" ) }; - }).get(); - } -}); - - -jQuery.ajaxSettings.xhr = function() { - try { - return new XMLHttpRequest(); - } catch( e ) {} -}; - -var xhrId = 0, - xhrCallbacks = {}, - xhrSuccessStatus = { - // file protocol always yields status code 0, assume 200 - 0: 200, - // Support: IE9 - // #1450: sometimes IE returns 1223 when it should be 204 - 1223: 204 - }, - xhrSupported = jQuery.ajaxSettings.xhr(); - -// Support: IE9 -// Open requests must be manually aborted on unload (#5280) -// See https://support.microsoft.com/kb/2856746 for more info -if ( window.attachEvent ) { - window.attachEvent( "onunload", function() { - for ( var key in xhrCallbacks ) { - xhrCallbacks[ key ](); - } - }); -} - -support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported ); -support.ajax = xhrSupported = !!xhrSupported; - -jQuery.ajaxTransport(function( options ) { - var callback; - - // Cross domain only allowed if supported through XMLHttpRequest - if ( support.cors || xhrSupported && !options.crossDomain ) { - return { - send: function( headers, complete ) { - var i, - xhr = options.xhr(), - id = ++xhrId; - - xhr.open( options.type, options.url, options.async, options.username, options.password ); - - // Apply custom fields if provided - if ( options.xhrFields ) { - for ( i in options.xhrFields ) { - xhr[ i ] = options.xhrFields[ i ]; - } - } - - // Override mime type if needed - if ( options.mimeType && xhr.overrideMimeType ) { - xhr.overrideMimeType( options.mimeType ); - } - - // X-Requested-With header - // For cross-domain requests, seeing as conditions for a preflight are - // akin to a jigsaw puzzle, we simply never set it to be sure. - // (it can always be set on a per-request basis or even using ajaxSetup) - // For same-domain requests, won't change header if already provided. - if ( !options.crossDomain && !headers["X-Requested-With"] ) { - headers["X-Requested-With"] = "XMLHttpRequest"; - } - - // Set headers - for ( i in headers ) { - xhr.setRequestHeader( i, headers[ i ] ); - } - - // Callback - callback = function( type ) { - return function() { - if ( callback ) { - delete xhrCallbacks[ id ]; - callback = xhr.onload = xhr.onerror = null; - - if ( type === "abort" ) { - xhr.abort(); - } else if ( type === "error" ) { - complete( - // file: protocol always yields status 0; see #8605, #14207 - xhr.status, - xhr.statusText - ); - } else { - complete( - xhrSuccessStatus[ xhr.status ] || xhr.status, - xhr.statusText, - // Support: IE9 - // Accessing binary-data responseText throws an exception - // (#11426) - typeof xhr.responseText === "string" ? { - text: xhr.responseText - } : undefined, - xhr.getAllResponseHeaders() - ); - } - } - }; - }; - - // Listen to events - xhr.onload = callback(); - xhr.onerror = callback("error"); - - // Create the abort callback - callback = xhrCallbacks[ id ] = callback("abort"); - - try { - // Do send the request (this may raise an exception) - xhr.send( options.hasContent && options.data || null ); - } catch ( e ) { - // #14683: Only rethrow if this hasn't been notified as an error yet - if ( callback ) { - throw e; - } - } - }, - - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -}); - - - - -// Install script dataType -jQuery.ajaxSetup({ - accepts: { - script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" - }, - contents: { - script: /(?:java|ecma)script/ - }, - converters: { - "text script": function( text ) { - jQuery.globalEval( text ); - return text; - } - } -}); - -// Handle cache's special case and crossDomain -jQuery.ajaxPrefilter( "script", function( s ) { - if ( s.cache === undefined ) { - s.cache = false; - } - if ( s.crossDomain ) { - s.type = "GET"; - } -}); - -// Bind script tag hack transport -jQuery.ajaxTransport( "script", function( s ) { - // This transport only deals with cross domain requests - if ( s.crossDomain ) { - var script, callback; - return { - send: function( _, complete ) { - script = jQuery("<script>").prop({ - async: true, - charset: s.scriptCharset, - src: s.url - }).on( - "load error", - callback = function( evt ) { - script.remove(); - callback = null; - if ( evt ) { - complete( evt.type === "error" ? 404 : 200, evt.type ); - } - } - ); - document.head.appendChild( script[ 0 ] ); - }, - abort: function() { - if ( callback ) { - callback(); - } - } - }; - } -}); - - - - -var oldCallbacks = [], - rjsonp = /(=)\?(?=&|$)|\?\?/; - -// Default jsonp settings -jQuery.ajaxSetup({ - jsonp: "callback", - jsonpCallback: function() { - var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) ); - this[ callback ] = true; - return callback; - } -}); - -// Detect, normalize options and install callbacks for jsonp requests -jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) { - - var callbackName, overwritten, responseContainer, - jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ? - "url" : - typeof s.data === "string" && !( s.contentType || "" ).indexOf("application/x-www-form-urlencoded") && rjsonp.test( s.data ) && "data" - ); - - // Handle iff the expected data type is "jsonp" or we have a parameter to set - if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) { - - // Get callback name, remembering preexisting value associated with it - callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ? - s.jsonpCallback() : - s.jsonpCallback; - - // Insert callback into url or form data - if ( jsonProp ) { - s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName ); - } else if ( s.jsonp !== false ) { - s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName; - } - - // Use data converter to retrieve json after script execution - s.converters["script json"] = function() { - if ( !responseContainer ) { - jQuery.error( callbackName + " was not called" ); - } - return responseContainer[ 0 ]; - }; - - // force json dataType - s.dataTypes[ 0 ] = "json"; - - // Install callback - overwritten = window[ callbackName ]; - window[ callbackName ] = function() { - responseContainer = arguments; - }; - - // Clean-up function (fires after converters) - jqXHR.always(function() { - // Restore preexisting value - window[ callbackName ] = overwritten; - - // Save back as free - if ( s[ callbackName ] ) { - // make sure that re-using the options doesn't screw things around - s.jsonpCallback = originalSettings.jsonpCallback; - - // save the callback name for future use - oldCallbacks.push( callbackName ); - } - - // Call if it was a function and we have a response - if ( responseContainer && jQuery.isFunction( overwritten ) ) { - overwritten( responseContainer[ 0 ] ); - } - - responseContainer = overwritten = undefined; - }); - - // Delegate to script - return "script"; - } -}); - - - - -// data: string of html -// context (optional): If specified, the fragment will be created in this context, defaults to document -// keepScripts (optional): If true, will include scripts passed in the html string -jQuery.parseHTML = function( data, context, keepScripts ) { - if ( !data || typeof data !== "string" ) { - return null; - } - if ( typeof context === "boolean" ) { - keepScripts = context; - context = false; - } - context = context || document; - - var parsed = rsingleTag.exec( data ), - scripts = !keepScripts && []; - - // Single tag - if ( parsed ) { - return [ context.createElement( parsed[1] ) ]; - } - - parsed = jQuery.buildFragment( [ data ], context, scripts ); - - if ( scripts && scripts.length ) { - jQuery( scripts ).remove(); - } - - return jQuery.merge( [], parsed.childNodes ); -}; - - -// Keep a copy of the old load method -var _load = jQuery.fn.load; - -/** - * Load a url into a page - */ -jQuery.fn.load = function( url, params, callback ) { - if ( typeof url !== "string" && _load ) { - return _load.apply( this, arguments ); - } - - var selector, type, response, - self = this, - off = url.indexOf(" "); - - if ( off >= 0 ) { - selector = jQuery.trim( url.slice( off ) ); - url = url.slice( 0, off ); - } - - // If it's a function - if ( jQuery.isFunction( params ) ) { - - // We assume that it's the callback - callback = params; - params = undefined; - - // Otherwise, build a param string - } else if ( params && typeof params === "object" ) { - type = "POST"; - } - - // If we have elements to modify, make the request - if ( self.length > 0 ) { - jQuery.ajax({ - url: url, - - // if "type" variable is undefined, then "GET" method will be used - type: type, - dataType: "html", - data: params - }).done(function( responseText ) { - - // Save response for use in complete callback - response = arguments; - - self.html( selector ? - - // If a selector was specified, locate the right elements in a dummy div - // Exclude scripts to avoid IE 'Permission Denied' errors - jQuery("<div>").append( jQuery.parseHTML( responseText ) ).find( selector ) : - - // Otherwise use the full result - responseText ); - - }).complete( callback && function( jqXHR, status ) { - self.each( callback, response || [ jqXHR.responseText, status, jqXHR ] ); - }); - } - - return this; -}; - - - - -// Attach a bunch of functions for handling common AJAX events -jQuery.each( [ "ajaxStart", "ajaxStop", "ajaxComplete", "ajaxError", "ajaxSuccess", "ajaxSend" ], function( i, type ) { - jQuery.fn[ type ] = function( fn ) { - return this.on( type, fn ); - }; -}); - - - - -jQuery.expr.filters.animated = function( elem ) { - return jQuery.grep(jQuery.timers, function( fn ) { - return elem === fn.elem; - }).length; -}; - - - - -var docElem = window.document.documentElement; - -/** - * Gets a window from an element - */ -function getWindow( elem ) { - return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView; -} - -jQuery.offset = { - setOffset: function( elem, options, i ) { - var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition, - position = jQuery.css( elem, "position" ), - curElem = jQuery( elem ), - props = {}; - - // Set position first, in-case top/left are set even on static elem - if ( position === "static" ) { - elem.style.position = "relative"; - } - - curOffset = curElem.offset(); - curCSSTop = jQuery.css( elem, "top" ); - curCSSLeft = jQuery.css( elem, "left" ); - calculatePosition = ( position === "absolute" || position === "fixed" ) && - ( curCSSTop + curCSSLeft ).indexOf("auto") > -1; - - // Need to be able to calculate position if either - // top or left is auto and position is either absolute or fixed - if ( calculatePosition ) { - curPosition = curElem.position(); - curTop = curPosition.top; - curLeft = curPosition.left; - - } else { - curTop = parseFloat( curCSSTop ) || 0; - curLeft = parseFloat( curCSSLeft ) || 0; - } - - if ( jQuery.isFunction( options ) ) { - options = options.call( elem, i, curOffset ); - } - - if ( options.top != null ) { - props.top = ( options.top - curOffset.top ) + curTop; - } - if ( options.left != null ) { - props.left = ( options.left - curOffset.left ) + curLeft; - } - - if ( "using" in options ) { - options.using.call( elem, props ); - - } else { - curElem.css( props ); - } - } -}; - -jQuery.fn.extend({ - offset: function( options ) { - if ( arguments.length ) { - return options === undefined ? - this : - this.each(function( i ) { - jQuery.offset.setOffset( this, options, i ); - }); - } - - var docElem, win, - elem = this[ 0 ], - box = { top: 0, left: 0 }, - doc = elem && elem.ownerDocument; - - if ( !doc ) { - return; - } - - docElem = doc.documentElement; - - // Make sure it's not a disconnected DOM node - if ( !jQuery.contains( docElem, elem ) ) { - return box; - } - - // Support: BlackBerry 5, iOS 3 (original iPhone) - // If we don't have gBCR, just use 0,0 rather than error - if ( typeof elem.getBoundingClientRect !== strundefined ) { - box = elem.getBoundingClientRect(); - } - win = getWindow( doc ); - return { - top: box.top + win.pageYOffset - docElem.clientTop, - left: box.left + win.pageXOffset - docElem.clientLeft - }; - }, - - position: function() { - if ( !this[ 0 ] ) { - return; - } - - var offsetParent, offset, - elem = this[ 0 ], - parentOffset = { top: 0, left: 0 }; - - // Fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is its only offset parent - if ( jQuery.css( elem, "position" ) === "fixed" ) { - // Assume getBoundingClientRect is there when computed position is fixed - offset = elem.getBoundingClientRect(); - - } else { - // Get *real* offsetParent - offsetParent = this.offsetParent(); - - // Get correct offsets - offset = this.offset(); - if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) { - parentOffset = offsetParent.offset(); - } - - // Add offsetParent borders - parentOffset.top += jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ); - parentOffset.left += jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true ); - } - - // Subtract parent offsets and element margins - return { - top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ), - left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true ) - }; - }, - - offsetParent: function() { - return this.map(function() { - var offsetParent = this.offsetParent || docElem; - - while ( offsetParent && ( !jQuery.nodeName( offsetParent, "html" ) && jQuery.css( offsetParent, "position" ) === "static" ) ) { - offsetParent = offsetParent.offsetParent; - } - - return offsetParent || docElem; - }); - } -}); - -// Create scrollLeft and scrollTop methods -jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) { - var top = "pageYOffset" === prop; - - jQuery.fn[ method ] = function( val ) { - return access( this, function( elem, method, val ) { - var win = getWindow( elem ); - - if ( val === undefined ) { - return win ? win[ prop ] : elem[ method ]; - } - - if ( win ) { - win.scrollTo( - !top ? val : window.pageXOffset, - top ? val : window.pageYOffset - ); - - } else { - elem[ method ] = val; - } - }, method, val, arguments.length, null ); - }; -}); - -// Support: Safari<7+, Chrome<37+ -// Add the top/left cssHooks using jQuery.fn.position -// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084 -// Blink bug: https://code.google.com/p/chromium/issues/detail?id=229280 -// getComputedStyle returns percent when specified for top/left/bottom/right; -// rather than make the css module depend on the offset module, just check for it here -jQuery.each( [ "top", "left" ], function( i, prop ) { - jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition, - function( elem, computed ) { - if ( computed ) { - computed = curCSS( elem, prop ); - // If curCSS returns percentage, fallback to offset - return rnumnonpx.test( computed ) ? - jQuery( elem ).position()[ prop ] + "px" : - computed; - } - } - ); -}); - - -// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods -jQuery.each( { Height: "height", Width: "width" }, function( name, type ) { - jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name }, function( defaultExtra, funcName ) { - // Margin is only for outerHeight, outerWidth - jQuery.fn[ funcName ] = function( margin, value ) { - var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ), - extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" ); - - return access( this, function( elem, type, value ) { - var doc; - - if ( jQuery.isWindow( elem ) ) { - // As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there - // isn't a whole lot we can do. See pull request at this URL for discussion: - // https://github.com/jquery/jquery/pull/764 - return elem.document.documentElement[ "client" + name ]; - } - - // Get document width or height - if ( elem.nodeType === 9 ) { - doc = elem.documentElement; - - // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height], - // whichever is greatest - return Math.max( - elem.body[ "scroll" + name ], doc[ "scroll" + name ], - elem.body[ "offset" + name ], doc[ "offset" + name ], - doc[ "client" + name ] - ); - } - - return value === undefined ? - // Get width or height on the element, requesting but not forcing parseFloat - jQuery.css( elem, type, extra ) : - - // Set width or height on the element - jQuery.style( elem, type, value, extra ); - }, type, chainable ? margin : undefined, chainable, null ); - }; - }); -}); - - -// The number of elements contained in the matched element set -jQuery.fn.size = function() { - return this.length; -}; - -jQuery.fn.andSelf = jQuery.fn.addBack; - - - - -// Register as a named AMD module, since jQuery can be concatenated with other -// files that may use define, but not via a proper concatenation script that -// understands anonymous AMD modules. A named AMD is safest and most robust -// way to register. Lowercase jquery is used because AMD module names are -// derived from file names, and jQuery is normally delivered in a lowercase -// file name. Do this after creating the global so that if an AMD module wants -// to call noConflict to hide this version of jQuery, it will work. - -// Note that for maximum portability, libraries that are not jQuery should -// declare themselves as anonymous modules, and avoid setting a global if an -// AMD loader is present. jQuery is a special case. For more information, see -// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon - -if ( typeof define === "function" && define.amd ) { - define( "jquery", [], function() { - return jQuery; - }); -} - - - - -var - // Map over jQuery in case of overwrite - _jQuery = window.jQuery, - - // Map over the $ in case of overwrite - _$ = window.$; - -jQuery.noConflict = function( deep ) { - if ( window.$ === jQuery ) { - window.$ = _$; - } - - if ( deep && window.jQuery === jQuery ) { - window.jQuery = _jQuery; - } - - return jQuery; -}; - -// Expose jQuery and $ identifiers, even in AMD -// (#7102#comment:10, https://github.com/jquery/jquery/pull/557) -// and CommonJS for browser emulators (#13566) -if ( typeof noGlobal === strundefined ) { - window.jQuery = window.$ = jQuery; -} - - - - -return jQuery; - -})); - -/*! - * Lightbox v2.8.2 - * by Lokesh Dhakar - * - * More info: - * http://lokeshdhakar.com/projects/lightbox2/ - * - * Copyright 2007, 2015 Lokesh Dhakar - * Released under the MIT license - * https://github.com/lokesh/lightbox2/blob/master/LICENSE - */ - -// Uses Node, AMD or browser globals to create a module. -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['jquery'], factory); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require('jquery')); - } else { - // Browser globals (root is window) - root.lightbox = factory(root.jQuery); - } -}(this, function ($) { - - function Lightbox(options) { - this.album = []; - this.currentImageIndex = void 0; - this.init(); - - // options - this.options = $.extend({}, this.constructor.defaults); - this.option(options); - } - - // Descriptions of all options available on the demo site: - // http://lokeshdhakar.com/projects/lightbox2/index.html#options - Lightbox.defaults = { - albumLabel: 'Image %1 of %2', - alwaysShowNavOnTouchDevices: false, - fadeDuration: 500, - fitImagesInViewport: true, - // maxWidth: 800, - // maxHeight: 600, - positionFromTop: 50, - resizeDuration: 700, - showImageNumberLabel: true, - wrapAround: false, - disableScrolling: false - }; - - Lightbox.prototype.option = function(options) { - $.extend(this.options, options); - }; - - Lightbox.prototype.imageCountLabel = function(currentImageNum, totalImages) { - return this.options.albumLabel.replace(/%1/g, currentImageNum).replace(/%2/g, totalImages); - }; - - Lightbox.prototype.init = function() { - this.enable(); - this.build(); - }; - - // Loop through anchors and areamaps looking for either data-lightbox attributes or rel attributes - // that contain 'lightbox'. When these are clicked, start lightbox. - Lightbox.prototype.enable = function() { - var self = this; - $('body').on('click', 'a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]', function(event) { - self.start($(event.currentTarget)); - return false; - }); - }; - - // Build html for the lightbox and the overlay. - // Attach event handlers to the new DOM elements. click click click - Lightbox.prototype.build = function() { - var self = this; - $('<div id="lightboxOverlay" class="lightboxOverlay"></div><div id="lightbox" class="lightbox"><div class="lb-outerContainer"><div class="lb-container"><img class="lb-image" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" /><div class="lb-nav"><a class="lb-prev" href="" ></a><a class="lb-next" href="" ></a></div><div class="lb-loader"><a class="lb-cancel"></a></div></div></div><div class="lb-dataContainer"><div class="lb-data"><div class="lb-details"><span class="lb-caption"></span><span class="lb-number"></span></div><div class="lb-closeContainer"><a class="lb-close"></a></div></div></div></div>').appendTo($('body')); - - // Cache jQuery objects - this.$lightbox = $('#lightbox'); - this.$overlay = $('#lightboxOverlay'); - this.$outerContainer = this.$lightbox.find('.lb-outerContainer'); - this.$container = this.$lightbox.find('.lb-container'); - - // Store css values for future lookup - this.containerTopPadding = parseInt(this.$container.css('padding-top'), 10); - this.containerRightPadding = parseInt(this.$container.css('padding-right'), 10); - this.containerBottomPadding = parseInt(this.$container.css('padding-bottom'), 10); - this.containerLeftPadding = parseInt(this.$container.css('padding-left'), 10); - - // Attach event handlers to the newly minted DOM elements - this.$overlay.hide().on('click', function() { - self.end(); - return false; - }); - - this.$lightbox.hide().on('click', function(event) { - if ($(event.target).attr('id') === 'lightbox') { - self.end(); - } - return false; - }); - - this.$outerContainer.on('click', function(event) { - if ($(event.target).attr('id') === 'lightbox') { - self.end(); - } - return false; - }); - - this.$lightbox.find('.lb-prev').on('click', function() { - if (self.currentImageIndex === 0) { - self.changeImage(self.album.length - 1); - } else { - self.changeImage(self.currentImageIndex - 1); - } - return false; - }); - - this.$lightbox.find('.lb-next').on('click', function() { - if (self.currentImageIndex === self.album.length - 1) { - self.changeImage(0); - } else { - self.changeImage(self.currentImageIndex + 1); - } - return false; - }); - - this.$lightbox.find('.lb-loader, .lb-close').on('click', function() { - self.end(); - return false; - }); - }; - - // Show overlay and lightbox. If the image is part of a set, add siblings to album array. - Lightbox.prototype.start = function($link) { - var self = this; - var $window = $(window); - - $window.on('resize', $.proxy(this.sizeOverlay, this)); - - $('select, object, embed').css({ - visibility: 'hidden' - }); - - this.sizeOverlay(); - - this.album = []; - var imageNumber = 0; - - function addToAlbum($link) { - self.album.push({ - link: $link.attr('href'), - title: $link.attr('data-title') || $link.attr('title') - }); - } - - // Support both data-lightbox attribute and rel attribute implementations - var dataLightboxValue = $link.attr('data-lightbox'); - var $links; - - if (dataLightboxValue) { - $links = $($link.prop('tagName') + '[data-lightbox="' + dataLightboxValue + '"]'); - for (var i = 0; i < $links.length; i = ++i) { - addToAlbum($($links[i])); - if ($links[i] === $link[0]) { - imageNumber = i; - } - } - } else { - if ($link.attr('rel') === 'lightbox') { - // If image is not part of a set - addToAlbum($link); - } else { - // If image is part of a set - $links = $($link.prop('tagName') + '[rel="' + $link.attr('rel') + '"]'); - for (var j = 0; j < $links.length; j = ++j) { - addToAlbum($($links[j])); - if ($links[j] === $link[0]) { - imageNumber = j; - } - } - } - } - - // Position Lightbox - var top = $window.scrollTop() + this.options.positionFromTop; - var left = $window.scrollLeft(); - this.$lightbox.css({ - top: top + 'px', - left: left + 'px' - }).fadeIn(this.options.fadeDuration); - - // Disable scrolling of the page while open - if (this.options.disableScrolling) { - $('body').addClass('lb-disable-scrolling'); - } - - this.changeImage(imageNumber); - }; - - // Hide most UI elements in preparation for the animated resizing of the lightbox. - Lightbox.prototype.changeImage = function(imageNumber) { - var self = this; - - this.disableKeyboardNav(); - var $image = this.$lightbox.find('.lb-image'); - - this.$overlay.fadeIn(this.options.fadeDuration); - - $('.lb-loader').fadeIn('slow'); - this.$lightbox.find('.lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption').hide(); - - this.$outerContainer.addClass('animating'); - - // When image to show is preloaded, we send the width and height to sizeContainer() - var preloader = new Image(); - preloader.onload = function() { - var $preloader; - var imageHeight; - var imageWidth; - var maxImageHeight; - var maxImageWidth; - var windowHeight; - var windowWidth; - - $image.attr('src', self.album[imageNumber].link); - - $preloader = $(preloader); - - $image.width(preloader.width); - $image.height(preloader.height); - - if (self.options.fitImagesInViewport) { - // Fit image inside the viewport. - // Take into account the border around the image and an additional 10px gutter on each side. - - windowWidth = $(window).width(); - windowHeight = $(window).height(); - maxImageWidth = windowWidth - self.containerLeftPadding - self.containerRightPadding - 20; - maxImageHeight = windowHeight - self.containerTopPadding - self.containerBottomPadding - 120; - - // Check if image size is larger then maxWidth|maxHeight in settings - if (self.options.maxWidth && self.options.maxWidth < maxImageWidth) { - maxImageWidth = self.options.maxWidth; - } - if (self.options.maxHeight && self.options.maxHeight < maxImageWidth) { - maxImageHeight = self.options.maxHeight; - } - - // Is there a fitting issue? - if ((preloader.width > maxImageWidth) || (preloader.height > maxImageHeight)) { - if ((preloader.width / maxImageWidth) > (preloader.height / maxImageHeight)) { - imageWidth = maxImageWidth; - imageHeight = parseInt(preloader.height / (preloader.width / imageWidth), 10); - $image.width(imageWidth); - $image.height(imageHeight); - } else { - imageHeight = maxImageHeight; - imageWidth = parseInt(preloader.width / (preloader.height / imageHeight), 10); - $image.width(imageWidth); - $image.height(imageHeight); - } - } - } - self.sizeContainer($image.width(), $image.height()); - }; - - preloader.src = this.album[imageNumber].link; - this.currentImageIndex = imageNumber; - }; - - // Stretch overlay to fit the viewport - Lightbox.prototype.sizeOverlay = function() { - this.$overlay - .width($(document).width()) - .height($(document).height()); - }; - - // Animate the size of the lightbox to fit the image we are showing - Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight) { - var self = this; - - var oldWidth = this.$outerContainer.outerWidth(); - var oldHeight = this.$outerContainer.outerHeight(); - var newWidth = imageWidth + this.containerLeftPadding + this.containerRightPadding; - var newHeight = imageHeight + this.containerTopPadding + this.containerBottomPadding; - - function postResize() { - self.$lightbox.find('.lb-dataContainer').width(newWidth); - self.$lightbox.find('.lb-prevLink').height(newHeight); - self.$lightbox.find('.lb-nextLink').height(newHeight); - self.showImage(); - } - - if (oldWidth !== newWidth || oldHeight !== newHeight) { - this.$outerContainer.animate({ - width: newWidth, - height: newHeight - }, this.options.resizeDuration, 'swing', function() { - postResize(); - }); - } else { - postResize(); - } - }; - - // Display the image and its details and begin preload neighboring images. - Lightbox.prototype.showImage = function() { - this.$lightbox.find('.lb-loader').stop(true).hide(); - this.$lightbox.find('.lb-image').fadeIn('slow'); - - this.updateNav(); - this.updateDetails(); - this.preloadNeighboringImages(); - this.enableKeyboardNav(); - }; - - // Display previous and next navigation if appropriate. - Lightbox.prototype.updateNav = function() { - // Check to see if the browser supports touch events. If so, we take the conservative approach - // and assume that mouse hover events are not supported and always show prev/next navigation - // arrows in image sets. - var alwaysShowNav = false; - try { - document.createEvent('TouchEvent'); - alwaysShowNav = (this.options.alwaysShowNavOnTouchDevices) ? true : false; - } catch (e) {} - - this.$lightbox.find('.lb-nav').show(); - - if (this.album.length > 1) { - if (this.options.wrapAround) { - if (alwaysShowNav) { - this.$lightbox.find('.lb-prev, .lb-next').css('opacity', '1'); - } - this.$lightbox.find('.lb-prev, .lb-next').show(); - } else { - if (this.currentImageIndex > 0) { - this.$lightbox.find('.lb-prev').show(); - if (alwaysShowNav) { - this.$lightbox.find('.lb-prev').css('opacity', '1'); - } - } - if (this.currentImageIndex < this.album.length - 1) { - this.$lightbox.find('.lb-next').show(); - if (alwaysShowNav) { - this.$lightbox.find('.lb-next').css('opacity', '1'); - } - } - } - } - }; - - // Display caption, image number, and closing button. - Lightbox.prototype.updateDetails = function() { - var self = this; - - // Enable anchor clicks in the injected caption html. - // Thanks Nate Wright for the fix. @https://github.com/NateWr - if (typeof this.album[this.currentImageIndex].title !== 'undefined' && - this.album[this.currentImageIndex].title !== '') { - this.$lightbox.find('.lb-caption') - .html(this.album[this.currentImageIndex].title) - .fadeIn('fast') - .find('a').on('click', function(event) { - if ($(this).attr('target') !== undefined) { - window.open($(this).attr('href'), $(this).attr('target')); - } else { - location.href = $(this).attr('href'); - } - }); - } - - if (this.album.length > 1 && this.options.showImageNumberLabel) { - var labelText = this.imageCountLabel(this.currentImageIndex + 1, this.album.length); - this.$lightbox.find('.lb-number').text(labelText).fadeIn('fast'); - } else { - this.$lightbox.find('.lb-number').hide(); - } - - this.$outerContainer.removeClass('animating'); - - this.$lightbox.find('.lb-dataContainer').fadeIn(this.options.resizeDuration, function() { - return self.sizeOverlay(); - }); - }; - - // Preload previous and next images in set. - Lightbox.prototype.preloadNeighboringImages = function() { - if (this.album.length > this.currentImageIndex + 1) { - var preloadNext = new Image(); - preloadNext.src = this.album[this.currentImageIndex + 1].link; - } - if (this.currentImageIndex > 0) { - var preloadPrev = new Image(); - preloadPrev.src = this.album[this.currentImageIndex - 1].link; - } - }; - - Lightbox.prototype.enableKeyboardNav = function() { - $(document).on('keyup.keyboard', $.proxy(this.keyboardAction, this)); - }; - - Lightbox.prototype.disableKeyboardNav = function() { - $(document).off('.keyboard'); - }; - - Lightbox.prototype.keyboardAction = function(event) { - var KEYCODE_ESC = 27; - var KEYCODE_LEFTARROW = 37; - var KEYCODE_RIGHTARROW = 39; - - var keycode = event.keyCode; - var key = String.fromCharCode(keycode).toLowerCase(); - if (keycode === KEYCODE_ESC || key.match(/x|o|c/)) { - this.end(); - } else if (key === 'p' || keycode === KEYCODE_LEFTARROW) { - if (this.currentImageIndex !== 0) { - this.changeImage(this.currentImageIndex - 1); - } else if (this.options.wrapAround && this.album.length > 1) { - this.changeImage(this.album.length - 1); - } - } else if (key === 'n' || keycode === KEYCODE_RIGHTARROW) { - if (this.currentImageIndex !== this.album.length - 1) { - this.changeImage(this.currentImageIndex + 1); - } else if (this.options.wrapAround && this.album.length > 1) { - this.changeImage(0); - } - } - }; - - // Closing time. :-( - Lightbox.prototype.end = function() { - this.disableKeyboardNav(); - $(window).off('resize', this.sizeOverlay); - this.$lightbox.fadeOut(this.options.fadeDuration); - this.$overlay.fadeOut(this.options.fadeDuration); - $('select, object, embed').css({ - visibility: 'visible' - }); - if (this.options.disableScrolling) { - $('body').removeClass('lb-disable-scrolling'); - } - }; - - return new Lightbox(); -})); diff --git a/theme/static/theme/lightbox2/dist/js/lightbox-plus-jquery.min.js b/theme/static/theme/lightbox2/dist/js/lightbox-plus-jquery.min.js deleted file mode 100644 index faf12cca..00000000 --- a/theme/static/theme/lightbox2/dist/js/lightbox-plus-jquery.min.js +++ /dev/null @@ -1,38 +0,0 @@ -/*! - * jQuery JavaScript Library v2.1.4 - * http://jquery.com/ - * - * Includes Sizzle.js - * http://sizzlejs.com/ - * - * Copyright 2005, 2014 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2015-04-28T16:01Z - */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){function c(a){var b="length"in a&&a.length,c=_.type(a);return"function"===c||_.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}function d(a,b,c){if(_.isFunction(b))return _.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return _.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(ha.test(b))return _.filter(b,a,c);b=_.filter(b,a)}return _.grep(a,function(a){return U.call(b,a)>=0!==c})}function e(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function f(a){var b=oa[a]={};return _.each(a.match(na)||[],function(a,c){b[c]=!0}),b}function g(){Z.removeEventListener("DOMContentLoaded",g,!1),a.removeEventListener("load",g,!1),_.ready()}function h(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=_.expando+h.uid++}function i(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(ua,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:ta.test(c)?_.parseJSON(c):c}catch(e){}sa.set(a,b,c)}else c=void 0;return c}function j(){return!0}function k(){return!1}function l(){try{return Z.activeElement}catch(a){}}function m(a,b){return _.nodeName(a,"table")&&_.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function n(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function o(a){var b=Ka.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function p(a,b){for(var c=0,d=a.length;d>c;c++)ra.set(a[c],"globalEval",!b||ra.get(b[c],"globalEval"))}function q(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(ra.hasData(a)&&(f=ra.access(a),g=ra.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)_.event.add(b,e,j[e][c])}sa.hasData(a)&&(h=sa.access(a),i=_.extend({},h),sa.set(b,i))}}function r(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&_.nodeName(a,b)?_.merge([a],c):c}function s(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ya.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function t(b,c){var d,e=_(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:_.css(e[0],"display");return e.detach(),f}function u(a){var b=Z,c=Oa[a];return c||(c=t(a,b),"none"!==c&&c||(Na=(Na||_("<iframe frameborder='0' width='0' height='0'/>")).appendTo(b.documentElement),b=Na[0].contentDocument,b.write(),b.close(),c=t(a,b),Na.detach()),Oa[a]=c),c}function v(a,b,c){var d,e,f,g,h=a.style;return c=c||Ra(a),c&&(g=c.getPropertyValue(b)||c[b]),c&&(""!==g||_.contains(a.ownerDocument,a)||(g=_.style(a,b)),Qa.test(g)&&Pa.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function w(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}function x(a,b){if(b in a)return b;for(var c=b[0].toUpperCase()+b.slice(1),d=b,e=Xa.length;e--;)if(b=Xa[e]+c,b in a)return b;return d}function y(a,b,c){var d=Ta.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function z(a,b,c,d,e){for(var f=c===(d?"border":"content")?4:"width"===b?1:0,g=0;4>f;f+=2)"margin"===c&&(g+=_.css(a,c+wa[f],!0,e)),d?("content"===c&&(g-=_.css(a,"padding"+wa[f],!0,e)),"margin"!==c&&(g-=_.css(a,"border"+wa[f]+"Width",!0,e))):(g+=_.css(a,"padding"+wa[f],!0,e),"padding"!==c&&(g+=_.css(a,"border"+wa[f]+"Width",!0,e)));return g}function A(a,b,c){var d=!0,e="width"===b?a.offsetWidth:a.offsetHeight,f=Ra(a),g="border-box"===_.css(a,"boxSizing",!1,f);if(0>=e||null==e){if(e=v(a,b,f),(0>e||null==e)&&(e=a.style[b]),Qa.test(e))return e;d=g&&(Y.boxSizingReliable()||e===a.style[b]),e=parseFloat(e)||0}return e+z(a,b,c||(g?"border":"content"),d,f)+"px"}function B(a,b){for(var c,d,e,f=[],g=0,h=a.length;h>g;g++)d=a[g],d.style&&(f[g]=ra.get(d,"olddisplay"),c=d.style.display,b?(f[g]||"none"!==c||(d.style.display=""),""===d.style.display&&xa(d)&&(f[g]=ra.access(d,"olddisplay",u(d.nodeName)))):(e=xa(d),"none"===c&&e||ra.set(d,"olddisplay",e?c:_.css(d,"display"))));for(g=0;h>g;g++)d=a[g],d.style&&(b&&"none"!==d.style.display&&""!==d.style.display||(d.style.display=b?f[g]||"":"none"));return a}function C(a,b,c,d,e){return new C.prototype.init(a,b,c,d,e)}function D(){return setTimeout(function(){Ya=void 0}),Ya=_.now()}function E(a,b){var c,d=0,e={height:a};for(b=b?1:0;4>d;d+=2-b)c=wa[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function F(a,b,c){for(var d,e=(cb[b]||[]).concat(cb["*"]),f=0,g=e.length;g>f;f++)if(d=e[f].call(c,b,a))return d}function G(a,b,c){var d,e,f,g,h,i,j,k,l=this,m={},n=a.style,o=a.nodeType&&xa(a),p=ra.get(a,"fxshow");c.queue||(h=_._queueHooks(a,"fx"),null==h.unqueued&&(h.unqueued=0,i=h.empty.fire,h.empty.fire=function(){h.unqueued||i()}),h.unqueued++,l.always(function(){l.always(function(){h.unqueued--,_.queue(a,"fx").length||h.empty.fire()})})),1===a.nodeType&&("height"in b||"width"in b)&&(c.overflow=[n.overflow,n.overflowX,n.overflowY],j=_.css(a,"display"),k="none"===j?ra.get(a,"olddisplay")||u(a.nodeName):j,"inline"===k&&"none"===_.css(a,"float")&&(n.display="inline-block")),c.overflow&&(n.overflow="hidden",l.always(function(){n.overflow=c.overflow[0],n.overflowX=c.overflow[1],n.overflowY=c.overflow[2]}));for(d in b)if(e=b[d],$a.exec(e)){if(delete b[d],f=f||"toggle"===e,e===(o?"hide":"show")){if("show"!==e||!p||void 0===p[d])continue;o=!0}m[d]=p&&p[d]||_.style(a,d)}else j=void 0;if(_.isEmptyObject(m))"inline"===("none"===j?u(a.nodeName):j)&&(n.display=j);else{p?"hidden"in p&&(o=p.hidden):p=ra.access(a,"fxshow",{}),f&&(p.hidden=!o),o?_(a).show():l.done(function(){_(a).hide()}),l.done(function(){var b;ra.remove(a,"fxshow");for(b in m)_.style(a,b,m[b])});for(d in m)g=F(o?p[d]:0,d,l),d in p||(p[d]=g.start,o&&(g.end=g.start,g.start="width"===d||"height"===d?1:0))}}function H(a,b){var c,d,e,f,g;for(c in a)if(d=_.camelCase(c),e=b[d],f=a[c],_.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=_.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function I(a,b,c){var d,e,f=0,g=bb.length,h=_.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=Ya||D(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;i>g;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),1>f&&i?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:_.extend({},b),opts:_.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:Ya||D(),duration:c.duration,tweens:[],createTween:function(b,c){var d=_.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;d>c;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;for(H(k,j.opts.specialEasing);g>f;f++)if(d=bb[f].call(j,a,k,j.opts))return d;return _.map(k,F,j),_.isFunction(j.opts.start)&&j.opts.start.call(a,j),_.fx.timer(_.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function J(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(na)||[];if(_.isFunction(c))for(;d=f[e++];)"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function K(a,b,c,d){function e(h){var i;return f[h]=!0,_.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||g||f[j]?g?!(i=j):void 0:(b.dataTypes.unshift(j),e(j),!1)}),i}var f={},g=a===tb;return e(b.dataTypes[0])||!f["*"]&&e("*")}function L(a,b){var c,d,e=_.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&_.extend(!0,a,d),a}function M(a,b,c){for(var d,e,f,g,h=a.contents,i=a.dataTypes;"*"===i[0];)i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}return f?(f!==i[0]&&i.unshift(f),c[f]):void 0}function N(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];for(f=k.shift();f;)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}function O(a,b,c,d){var e;if(_.isArray(b))_.each(b,function(b,e){c||yb.test(a)?d(a,e):O(a+"["+("object"==typeof e?b:"")+"]",e,c,d)});else if(c||"object"!==_.type(b))d(a,b);else for(e in b)O(a+"["+e+"]",b[e],c,d)}function P(a){return _.isWindow(a)?a:9===a.nodeType&&a.defaultView}var Q=[],R=Q.slice,S=Q.concat,T=Q.push,U=Q.indexOf,V={},W=V.toString,X=V.hasOwnProperty,Y={},Z=a.document,$="2.1.4",_=function(a,b){return new _.fn.init(a,b)},aa=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,ba=/^-ms-/,ca=/-([\da-z])/gi,da=function(a,b){return b.toUpperCase()};_.fn=_.prototype={jquery:$,constructor:_,selector:"",length:0,toArray:function(){return R.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:R.call(this)},pushStack:function(a){var b=_.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return _.each(this,a,b)},map:function(a){return this.pushStack(_.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(R.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:T,sort:Q.sort,splice:Q.splice},_.extend=_.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||_.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(_.isPlainObject(d)||(e=_.isArray(d)))?(e?(e=!1,f=c&&_.isArray(c)?c:[]):f=c&&_.isPlainObject(c)?c:{},g[b]=_.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},_.extend({expando:"jQuery"+($+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===_.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return!_.isArray(a)&&a-parseFloat(a)+1>=0},isPlainObject:function(a){return"object"!==_.type(a)||a.nodeType||_.isWindow(a)?!1:a.constructor&&!X.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?V[W.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=_.trim(a),a&&(1===a.indexOf("use strict")?(b=Z.createElement("script"),b.text=a,Z.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(ba,"ms-").replace(ca,da)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,d){var e,f=0,g=a.length,h=c(a);if(d){if(h)for(;g>f&&(e=b.apply(a[f],d),e!==!1);f++);else for(f in a)if(e=b.apply(a[f],d),e===!1)break}else if(h)for(;g>f&&(e=b.call(a[f],f,a[f]),e!==!1);f++);else for(f in a)if(e=b.call(a[f],f,a[f]),e===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(aa,"")},makeArray:function(a,b){var d=b||[];return null!=a&&(c(Object(a))?_.merge(d,"string"==typeof a?[a]:a):T.call(d,a)),d},inArray:function(a,b,c){return null==b?-1:U.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,d){var e,f=0,g=a.length,h=c(a),i=[];if(h)for(;g>f;f++)e=b(a[f],f,d),null!=e&&i.push(e);else for(f in a)e=b(a[f],f,d),null!=e&&i.push(e);return S.apply([],i)},guid:1,proxy:function(a,b){var c,d,e;return"string"==typeof b&&(c=a[b],b=a,a=c),_.isFunction(a)?(d=R.call(arguments,2),e=function(){return a.apply(b||this,d.concat(R.call(arguments)))},e.guid=a.guid=a.guid||_.guid++,e):void 0},now:Date.now,support:Y}),_.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){V["[object "+b+"]"]=b.toLowerCase()});var ea=/*! - * Sizzle CSS Selector Engine v2.2.0-pre - * http://sizzlejs.com/ - * - * Copyright 2008, 2014 jQuery Foundation, Inc. and other contributors - * Released under the MIT license - * http://jquery.org/license - * - * Date: 2014-12-16 - */ -function(a){function b(a,b,c,d){var e,f,g,h,i,j,l,n,o,p;if((b?b.ownerDocument||b:O)!==G&&F(b),b=b||G,c=c||[],h=b.nodeType,"string"!=typeof a||!a||1!==h&&9!==h&&11!==h)return c;if(!d&&I){if(11!==h&&(e=sa.exec(a)))if(g=e[1]){if(9===h){if(f=b.getElementById(g),!f||!f.parentNode)return c;if(f.id===g)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(g))&&M(b,f)&&f.id===g)return c.push(f),c}else{if(e[2])return $.apply(c,b.getElementsByTagName(a)),c;if((g=e[3])&&v.getElementsByClassName)return $.apply(c,b.getElementsByClassName(g)),c}if(v.qsa&&(!J||!J.test(a))){if(n=l=N,o=b,p=1!==h&&a,1===h&&"object"!==b.nodeName.toLowerCase()){for(j=z(a),(l=b.getAttribute("id"))?n=l.replace(ua,"\\$&"):b.setAttribute("id",n),n="[id='"+n+"'] ",i=j.length;i--;)j[i]=n+m(j[i]);o=ta.test(a)&&k(b.parentNode)||b,p=j.join(",")}if(p)try{return $.apply(c,o.querySelectorAll(p)),c}catch(q){}finally{l||b.removeAttribute("id")}}}return B(a.replace(ia,"$1"),b,c,d)}function c(){function a(c,d){return b.push(c+" ")>w.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function d(a){return a[N]=!0,a}function e(a){var b=G.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function f(a,b){for(var c=a.split("|"),d=a.length;d--;)w.attrHandle[c[d]]=b}function g(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||V)-(~a.sourceIndex||V);if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function h(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function i(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function j(a){return d(function(b){return b=+b,d(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function k(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}function l(){}function m(a){for(var b=0,c=a.length,d="";c>b;b++)d+=a[b].value;return d}function n(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=Q++;return b.first?function(b,c,f){for(;b=b[d];)if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[P,f];if(g){for(;b=b[d];)if((1===b.nodeType||e)&&a(b,c,g))return!0}else for(;b=b[d];)if(1===b.nodeType||e){if(i=b[N]||(b[N]={}),(h=i[d])&&h[0]===P&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function o(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function p(a,c,d){for(var e=0,f=c.length;f>e;e++)b(a,c[e],d);return d}function q(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function r(a,b,c,e,f,g){return e&&!e[N]&&(e=r(e)),f&&!f[N]&&(f=r(f,g)),d(function(d,g,h,i){var j,k,l,m=[],n=[],o=g.length,r=d||p(b||"*",h.nodeType?[h]:h,[]),s=!a||!d&&b?r:q(r,m,a,h,i),t=c?f||(d?a:o||e)?[]:g:s;if(c&&c(s,t,h,i),e)for(j=q(t,n),e(j,[],h,i),k=j.length;k--;)(l=j[k])&&(t[n[k]]=!(s[n[k]]=l));if(d){if(f||a){if(f){for(j=[],k=t.length;k--;)(l=t[k])&&j.push(s[k]=l);f(null,t=[],j,i)}for(k=t.length;k--;)(l=t[k])&&(j=f?aa(d,l):m[k])>-1&&(d[j]=!(g[j]=l))}}else t=q(t===g?t.splice(o,t.length):t),f?f(null,g,t,i):$.apply(g,t)})}function s(a){for(var b,c,d,e=a.length,f=w.relative[a[0].type],g=f||w.relative[" "],h=f?1:0,i=n(function(a){return a===b},g,!0),j=n(function(a){return aa(b,a)>-1},g,!0),k=[function(a,c,d){var e=!f&&(d||c!==C)||((b=c).nodeType?i(a,c,d):j(a,c,d));return b=null,e}];e>h;h++)if(c=w.relative[a[h].type])k=[n(o(k),c)];else{if(c=w.filter[a[h].type].apply(null,a[h].matches),c[N]){for(d=++h;e>d&&!w.relative[a[d].type];d++);return r(h>1&&o(k),h>1&&m(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ia,"$1"),c,d>h&&s(a.slice(h,d)),e>d&&s(a=a.slice(d)),e>d&&m(a))}k.push(c)}return o(k)}function t(a,c){var e=c.length>0,f=a.length>0,g=function(d,g,h,i,j){var k,l,m,n=0,o="0",p=d&&[],r=[],s=C,t=d||f&&w.find.TAG("*",j),u=P+=null==s?1:Math.random()||.1,v=t.length;for(j&&(C=g!==G&&g);o!==v&&null!=(k=t[o]);o++){if(f&&k){for(l=0;m=a[l++];)if(m(k,g,h)){i.push(k);break}j&&(P=u)}e&&((k=!m&&k)&&n--,d&&p.push(k))}if(n+=o,e&&o!==n){for(l=0;m=c[l++];)m(p,r,g,h);if(d){if(n>0)for(;o--;)p[o]||r[o]||(r[o]=Y.call(i));r=q(r)}$.apply(i,r),j&&!d&&r.length>0&&n+c.length>1&&b.uniqueSort(i)}return j&&(P=u,C=s),p};return e?d(g):g}var u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N="sizzle"+1*new Date,O=a.document,P=0,Q=0,R=c(),S=c(),T=c(),U=function(a,b){return a===b&&(E=!0),0},V=1<<31,W={}.hasOwnProperty,X=[],Y=X.pop,Z=X.push,$=X.push,_=X.slice,aa=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},ba="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",ca="[\\x20\\t\\r\\n\\f]",da="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",ea=da.replace("w","w#"),fa="\\["+ca+"*("+da+")(?:"+ca+"*([*^$|!~]?=)"+ca+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+ea+"))|)"+ca+"*\\]",ga=":("+da+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+fa+")*)|.*)\\)|)",ha=new RegExp(ca+"+","g"),ia=new RegExp("^"+ca+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ca+"+$","g"),ja=new RegExp("^"+ca+"*,"+ca+"*"),ka=new RegExp("^"+ca+"*([>+~]|"+ca+")"+ca+"*"),la=new RegExp("="+ca+"*([^\\]'\"]*?)"+ca+"*\\]","g"),ma=new RegExp(ga),na=new RegExp("^"+ea+"$"),oa={ID:new RegExp("^#("+da+")"),CLASS:new RegExp("^\\.("+da+")"),TAG:new RegExp("^("+da.replace("w","w*")+")"),ATTR:new RegExp("^"+fa),PSEUDO:new RegExp("^"+ga),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ca+"*(even|odd|(([+-]|)(\\d*)n|)"+ca+"*(?:([+-]|)"+ca+"*(\\d+)|))"+ca+"*\\)|)","i"),bool:new RegExp("^(?:"+ba+")$","i"),needsContext:new RegExp("^"+ca+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ca+"*((?:-\\d)?\\d*)"+ca+"*\\)|)(?=[^-]|$)","i")},pa=/^(?:input|select|textarea|button)$/i,qa=/^h\d$/i,ra=/^[^{]+\{\s*\[native \w/,sa=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ta=/[+~]/,ua=/'|\\/g,va=new RegExp("\\\\([\\da-f]{1,6}"+ca+"?|("+ca+")|.)","ig"),wa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},xa=function(){F()};try{$.apply(X=_.call(O.childNodes),O.childNodes),X[O.childNodes.length].nodeType}catch(ya){$={apply:X.length?function(a,b){Z.apply(a,_.call(b))}:function(a,b){for(var c=a.length,d=0;a[c++]=b[d++];);a.length=c-1}}}v=b.support={},y=b.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},F=b.setDocument=function(a){var b,c,d=a?a.ownerDocument||a:O;return d!==G&&9===d.nodeType&&d.documentElement?(G=d,H=d.documentElement,c=d.defaultView,c&&c!==c.top&&(c.addEventListener?c.addEventListener("unload",xa,!1):c.attachEvent&&c.attachEvent("onunload",xa)),I=!y(d),v.attributes=e(function(a){return a.className="i",!a.getAttribute("className")}),v.getElementsByTagName=e(function(a){return a.appendChild(d.createComment("")),!a.getElementsByTagName("*").length}),v.getElementsByClassName=ra.test(d.getElementsByClassName),v.getById=e(function(a){return H.appendChild(a).id=N,!d.getElementsByName||!d.getElementsByName(N).length}),v.getById?(w.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&I){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},w.filter.ID=function(a){var b=a.replace(va,wa);return function(a){return a.getAttribute("id")===b}}):(delete w.find.ID,w.filter.ID=function(a){var b=a.replace(va,wa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),w.find.TAG=v.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):v.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){for(;c=f[e++];)1===c.nodeType&&d.push(c);return d}return f},w.find.CLASS=v.getElementsByClassName&&function(a,b){return I?b.getElementsByClassName(a):void 0},K=[],J=[],(v.qsa=ra.test(d.querySelectorAll))&&(e(function(a){H.appendChild(a).innerHTML="<a id='"+N+"'></a><select id='"+N+"-\f]' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&J.push("[*^$]="+ca+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||J.push("\\["+ca+"*(?:value|"+ba+")"),a.querySelectorAll("[id~="+N+"-]").length||J.push("~="),a.querySelectorAll(":checked").length||J.push(":checked"),a.querySelectorAll("a#"+N+"+*").length||J.push(".#.+[+~]")}),e(function(a){var b=d.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&J.push("name"+ca+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||J.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),J.push(",.*:")})),(v.matchesSelector=ra.test(L=H.matches||H.webkitMatchesSelector||H.mozMatchesSelector||H.oMatchesSelector||H.msMatchesSelector))&&e(function(a){v.disconnectedMatch=L.call(a,"div"),L.call(a,"[s!='']:x"),K.push("!=",ga)}),J=J.length&&new RegExp(J.join("|")),K=K.length&&new RegExp(K.join("|")),b=ra.test(H.compareDocumentPosition),M=b||ra.test(H.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)for(;b=b.parentNode;)if(b===a)return!0;return!1},U=b?function(a,b){if(a===b)return E=!0,0;var c=!a.compareDocumentPosition-!b.compareDocumentPosition;return c?c:(c=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&c||!v.sortDetached&&b.compareDocumentPosition(a)===c?a===d||a.ownerDocument===O&&M(O,a)?-1:b===d||b.ownerDocument===O&&M(O,b)?1:D?aa(D,a)-aa(D,b):0:4&c?-1:1)}:function(a,b){if(a===b)return E=!0,0;var c,e=0,f=a.parentNode,h=b.parentNode,i=[a],j=[b];if(!f||!h)return a===d?-1:b===d?1:f?-1:h?1:D?aa(D,a)-aa(D,b):0;if(f===h)return g(a,b);for(c=a;c=c.parentNode;)i.unshift(c);for(c=b;c=c.parentNode;)j.unshift(c);for(;i[e]===j[e];)e++;return e?g(i[e],j[e]):i[e]===O?-1:j[e]===O?1:0},d):G},b.matches=function(a,c){return b(a,null,null,c)},b.matchesSelector=function(a,c){if((a.ownerDocument||a)!==G&&F(a),c=c.replace(la,"='$1']"),v.matchesSelector&&I&&(!K||!K.test(c))&&(!J||!J.test(c)))try{var d=L.call(a,c);if(d||v.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return b(c,G,null,[a]).length>0},b.contains=function(a,b){return(a.ownerDocument||a)!==G&&F(a),M(a,b)},b.attr=function(a,b){(a.ownerDocument||a)!==G&&F(a);var c=w.attrHandle[b.toLowerCase()],d=c&&W.call(w.attrHandle,b.toLowerCase())?c(a,b,!I):void 0;return void 0!==d?d:v.attributes||!I?a.getAttribute(b):(d=a.getAttributeNode(b))&&d.specified?d.value:null},b.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},b.uniqueSort=function(a){var b,c=[],d=0,e=0;if(E=!v.detectDuplicates,D=!v.sortStable&&a.slice(0),a.sort(U),E){for(;b=a[e++];)b===a[e]&&(d=c.push(e));for(;d--;)a.splice(c[d],1)}return D=null,a},x=b.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(1===e||9===e||11===e){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=x(a)}else if(3===e||4===e)return a.nodeValue}else for(;b=a[d++];)c+=x(b);return c},w=b.selectors={cacheLength:50,createPseudo:d,match:oa,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(va,wa),a[3]=(a[3]||a[4]||a[5]||"").replace(va,wa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||b.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&b.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return oa.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&ma.test(c)&&(b=z(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(va,wa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=R[a+" "];return b||(b=new RegExp("(^|"+ca+")"+a+"("+ca+"|$)"))&&R(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,c,d){return function(e){var f=b.attr(e,a);return null==f?"!="===c:c?(f+="","="===c?f===d:"!="===c?f!==d:"^="===c?d&&0===f.indexOf(d):"*="===c?d&&f.indexOf(d)>-1:"$="===c?d&&f.slice(-d.length)===d:"~="===c?(" "+f.replace(ha," ")+" ").indexOf(d)>-1:"|="===c?f===d||f.slice(0,d.length+1)===d+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){for(;p;){for(l=b;l=l[p];)if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){for(k=q[N]||(q[N]={}),j=k[a]||[],n=j[0]===P&&j[1],m=j[0]===P&&j[2],l=n&&q.childNodes[n];l=++n&&l&&l[p]||(m=n=0)||o.pop();)if(1===l.nodeType&&++m&&l===b){k[a]=[P,n,m];break}}else if(s&&(j=(b[N]||(b[N]={}))[a])&&j[0]===P)m=j[1];else for(;(l=++n&&l&&l[p]||(m=n=0)||o.pop())&&((h?l.nodeName.toLowerCase()!==r:1!==l.nodeType)||!++m||(s&&((l[N]||(l[N]={}))[a]=[P,m]),l!==b)););return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,c){var e,f=w.pseudos[a]||w.setFilters[a.toLowerCase()]||b.error("unsupported pseudo: "+a);return f[N]?f(c):f.length>1?(e=[a,a,"",c],w.setFilters.hasOwnProperty(a.toLowerCase())?d(function(a,b){for(var d,e=f(a,c),g=e.length;g--;)d=aa(a,e[g]),a[d]=!(b[d]=e[g])}):function(a){return f(a,0,e)}):f}},pseudos:{not:d(function(a){var b=[],c=[],e=A(a.replace(ia,"$1"));return e[N]?d(function(a,b,c,d){for(var f,g=e(a,null,d,[]),h=a.length;h--;)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,d,f){return b[0]=a,e(b,null,f,c),b[0]=null,!c.pop()}}),has:d(function(a){return function(c){return b(a,c).length>0}}),contains:d(function(a){return a=a.replace(va,wa),function(b){return(b.textContent||b.innerText||x(b)).indexOf(a)>-1}}),lang:d(function(a){return na.test(a||"")||b.error("unsupported lang: "+a),a=a.replace(va,wa).toLowerCase(),function(b){var c;do if(c=I?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===H},focus:function(a){return a===G.activeElement&&(!G.hasFocus||G.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!w.pseudos.empty(a)},header:function(a){return qa.test(a.nodeName)},input:function(a){return pa.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:j(function(){return[0]}),last:j(function(a,b){return[b-1]}),eq:j(function(a,b,c){return[0>c?c+b:c]}),even:j(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:j(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:j(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:j(function(a,b,c){for(var d=0>c?c+b:c;++d<b;)a.push(d);return a})}},w.pseudos.nth=w.pseudos.eq;for(u in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[u]=h(u);for(u in{submit:!0,reset:!0})w.pseudos[u]=i(u);return l.prototype=w.filters=w.pseudos,w.setFilters=new l,z=b.tokenize=function(a,c){var d,e,f,g,h,i,j,k=S[a+" "];if(k)return c?0:k.slice(0);for(h=a,i=[],j=w.preFilter;h;){(!d||(e=ja.exec(h)))&&(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),d=!1,(e=ka.exec(h))&&(d=e.shift(),f.push({value:d,type:e[0].replace(ia," ")}),h=h.slice(d.length));for(g in w.filter)!(e=oa[g].exec(h))||j[g]&&!(e=j[g](e))||(d=e.shift(),f.push({value:d,type:g,matches:e}),h=h.slice(d.length));if(!d)break}return c?h.length:h?b.error(a):S(a,i).slice(0)},A=b.compile=function(a,b){var c,d=[],e=[],f=T[a+" "];if(!f){for(b||(b=z(a)),c=b.length;c--;)f=s(b[c]),f[N]?d.push(f):e.push(f);f=T(a,t(e,d)),f.selector=a}return f},B=b.select=function(a,b,c,d){var e,f,g,h,i,j="function"==typeof a&&a,l=!d&&z(a=j.selector||a);if(c=c||[],1===l.length){if(f=l[0]=l[0].slice(0),f.length>2&&"ID"===(g=f[0]).type&&v.getById&&9===b.nodeType&&I&&w.relative[f[1].type]){if(b=(w.find.ID(g.matches[0].replace(va,wa),b)||[])[0],!b)return c;j&&(b=b.parentNode),a=a.slice(f.shift().value.length)}for(e=oa.needsContext.test(a)?0:f.length;e--&&(g=f[e],!w.relative[h=g.type]);)if((i=w.find[h])&&(d=i(g.matches[0].replace(va,wa),ta.test(f[0].type)&&k(b.parentNode)||b))){if(f.splice(e,1),a=d.length&&m(f),!a)return $.apply(c,d),c;break}}return(j||A(a,l))(d,b,!I,c,ta.test(a)&&k(b.parentNode)||b),c},v.sortStable=N.split("").sort(U).join("")===N,v.detectDuplicates=!!E,F(),v.sortDetached=e(function(a){return 1&a.compareDocumentPosition(G.createElement("div"))}),e(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||f("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),v.attributes&&e(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||f("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),e(function(a){return null==a.getAttribute("disabled")})||f(ba,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),b}(a);_.find=ea,_.expr=ea.selectors,_.expr[":"]=_.expr.pseudos,_.unique=ea.uniqueSort,_.text=ea.getText,_.isXMLDoc=ea.isXML,_.contains=ea.contains;var fa=_.expr.match.needsContext,ga=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,ha=/^.[^:#\[\.,]*$/;_.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?_.find.matchesSelector(d,a)?[d]:[]:_.find.matches(a,_.grep(b,function(a){return 1===a.nodeType}))},_.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(_(a).filter(function(){for(b=0;c>b;b++)if(_.contains(e[b],this))return!0}));for(b=0;c>b;b++)_.find(a,e[b],d);return d=this.pushStack(c>1?_.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(d(this,a||[],!1))},not:function(a){return this.pushStack(d(this,a||[],!0))},is:function(a){return!!d(this,"string"==typeof a&&fa.test(a)?_(a):a||[],!1).length}});var ia,ja=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,ka=_.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:ja.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||ia).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof _?b[0]:b,_.merge(this,_.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:Z,!0)),ga.test(c[1])&&_.isPlainObject(b))for(c in b)_.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=Z.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=Z,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):_.isFunction(a)?"undefined"!=typeof ia.ready?ia.ready(a):a(_):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),_.makeArray(a,this))};ka.prototype=_.fn,ia=_(Z);var la=/^(?:parents|prev(?:Until|All))/,ma={children:!0,contents:!0,next:!0,prev:!0};_.extend({dir:function(a,b,c){for(var d=[],e=void 0!==c;(a=a[b])&&9!==a.nodeType;)if(1===a.nodeType){if(e&&_(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),_.fn.extend({has:function(a){var b=_(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(_.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=fa.test(a)||"string"!=typeof a?_(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&_.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?_.unique(f):f)},index:function(a){return a?"string"==typeof a?U.call(_(a),this[0]):U.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(_.unique(_.merge(this.get(),_(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}}),_.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return _.dir(a,"parentNode")},parentsUntil:function(a,b,c){return _.dir(a,"parentNode",c)},next:function(a){return e(a,"nextSibling")},prev:function(a){return e(a,"previousSibling")},nextAll:function(a){return _.dir(a,"nextSibling")},prevAll:function(a){return _.dir(a,"previousSibling")},nextUntil:function(a,b,c){return _.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return _.dir(a,"previousSibling",c)},siblings:function(a){return _.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return _.sibling(a.firstChild)},contents:function(a){return a.contentDocument||_.merge([],a.childNodes)}},function(a,b){_.fn[a]=function(c,d){var e=_.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=_.filter(d,e)),this.length>1&&(ma[a]||_.unique(e),la.test(a)&&e.reverse()),this.pushStack(e)}});var na=/\S+/g,oa={};_.Callbacks=function(a){a="string"==typeof a?oa[a]||f(a):_.extend({},a);var b,c,d,e,g,h,i=[],j=!a.once&&[],k=function(f){for(b=a.memory&&f,c=!0,h=e||0,e=0,g=i.length,d=!0;i&&g>h;h++)if(i[h].apply(f[0],f[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,i&&(j?j.length&&k(j.shift()):b?i=[]:l.disable())},l={add:function(){if(i){var c=i.length;!function f(b){_.each(b,function(b,c){var d=_.type(c);"function"===d?a.unique&&l.has(c)||i.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),d?g=i.length:b&&(e=c,k(b))}return this},remove:function(){return i&&_.each(arguments,function(a,b){for(var c;(c=_.inArray(b,i,c))>-1;)i.splice(c,1),d&&(g>=c&&g--,h>=c&&h--)}),this},has:function(a){return a?_.inArray(a,i)>-1:!(!i||!i.length)},empty:function(){return i=[],g=0,this},disable:function(){return i=j=b=void 0,this},disabled:function(){return!i},lock:function(){return j=void 0,b||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return!i||c&&!j||(b=b||[],b=[a,b.slice?b.slice():b],d?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!c}};return l},_.extend({Deferred:function(a){var b=[["resolve","done",_.Callbacks("once memory"),"resolved"],["reject","fail",_.Callbacks("once memory"),"rejected"],["notify","progress",_.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return _.Deferred(function(c){_.each(b,function(b,f){var g=_.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&_.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?_.extend(a,d):d}},e={};return d.pipe=d.then,_.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b,c,d,e=0,f=R.call(arguments),g=f.length,h=1!==g||a&&_.isFunction(a.promise)?g:0,i=1===h?a:_.Deferred(),j=function(a,c,d){return function(e){c[a]=this,d[a]=arguments.length>1?R.call(arguments):e,d===b?i.notifyWith(c,d):--h||i.resolveWith(c,d)}};if(g>1)for(b=new Array(g),c=new Array(g),d=new Array(g);g>e;e++)f[e]&&_.isFunction(f[e].promise)?f[e].promise().done(j(e,d,f)).fail(i.reject).progress(j(e,c,b)):--h;return h||i.resolveWith(d,f),i.promise()}});var pa;_.fn.ready=function(a){return _.ready.promise().done(a),this},_.extend({isReady:!1,readyWait:1,holdReady:function(a){a?_.readyWait++:_.ready(!0)},ready:function(a){(a===!0?--_.readyWait:_.isReady)||(_.isReady=!0,a!==!0&&--_.readyWait>0||(pa.resolveWith(Z,[_]),_.fn.triggerHandler&&(_(Z).triggerHandler("ready"),_(Z).off("ready"))))}}),_.ready.promise=function(b){return pa||(pa=_.Deferred(),"complete"===Z.readyState?setTimeout(_.ready):(Z.addEventListener("DOMContentLoaded",g,!1),a.addEventListener("load",g,!1))),pa.promise(b)},_.ready.promise();var qa=_.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===_.type(c)){e=!0;for(h in c)_.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,_.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(_(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};_.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType},h.uid=1,h.accepts=_.acceptData,h.prototype={key:function(a){if(!h.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=h.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,_.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(_.isEmptyObject(f))_.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,_.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{_.isArray(b)?d=b.concat(b.map(_.camelCase)):(e=_.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(na)||[])),c=d.length;for(;c--;)delete g[d[c]]}},hasData:function(a){return!_.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var ra=new h,sa=new h,ta=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,ua=/([A-Z])/g;_.extend({hasData:function(a){return sa.hasData(a)||ra.hasData(a)},data:function(a,b,c){return sa.access(a,b,c)},removeData:function(a,b){sa.remove(a,b)},_data:function(a,b,c){return ra.access(a,b,c)},_removeData:function(a,b){ra.remove(a,b)}}),_.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=sa.get(f),1===f.nodeType&&!ra.get(f,"hasDataAttrs"))){for(c=g.length;c--;)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=_.camelCase(d.slice(5)),i(f,d,e[d])));ra.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){sa.set(this,a)}):qa(this,function(b){var c,d=_.camelCase(a);if(f&&void 0===b){if(c=sa.get(f,a),void 0!==c)return c;if(c=sa.get(f,d),void 0!==c)return c;if(c=i(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=sa.get(this,d);sa.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&sa.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){sa.remove(this,a)})}}),_.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=ra.get(a,b),c&&(!d||_.isArray(c)?d=ra.access(a,b,_.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=_.queue(a,b),d=c.length,e=c.shift(),f=_._queueHooks(a,b),g=function(){_.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return ra.get(a,c)||ra.access(a,c,{empty:_.Callbacks("once memory").add(function(){ra.remove(a,[b+"queue",c])})})}}),_.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?_.queue(this[0],a):void 0===b?this:this.each(function(){var c=_.queue(this,a,b);_._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&_.dequeue(this,a)})},dequeue:function(a){return this.each(function(){_.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=_.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};for("string"!=typeof a&&(b=a,a=void 0),a=a||"fx";g--;)c=ra.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var va=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,wa=["Top","Right","Bottom","Left"],xa=function(a,b){return a=b||a,"none"===_.css(a,"display")||!_.contains(a.ownerDocument,a)},ya=/^(?:checkbox|radio)$/i;!function(){var a=Z.createDocumentFragment(),b=a.appendChild(Z.createElement("div")),c=Z.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),Y.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",Y.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var za="undefined";Y.focusinBubbles="onfocusin"in a;var Aa=/^key/,Ba=/^(?:mouse|pointer|contextmenu)|click/,Ca=/^(?:focusinfocus|focusoutblur)$/,Da=/^([^.]*)(?:\.(.+)|)$/;_.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ra.get(a);if(q)for(c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=_.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return typeof _!==za&&_.event.triggered!==b.type?_.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(na)||[""],j=b.length;j--;)h=Da.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=_.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=_.event.special[n]||{},k=_.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&_.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),_.event.global[n]=!0)},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=ra.hasData(a)&&ra.get(a);if(q&&(i=q.events)){for(b=(b||"").match(na)||[""],j=b.length;j--;)if(h=Da.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){for(l=_.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;f--;)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||_.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)_.event.remove(a,n+b[j],c,d,!0);_.isEmptyObject(i)&&(delete q.handle,ra.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,j,k,l,m=[d||Z],n=X.call(b,"type")?b.type:b,o=X.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||Z,3!==d.nodeType&&8!==d.nodeType&&!Ca.test(n+_.event.triggered)&&(n.indexOf(".")>=0&&(o=n.split("."),n=o.shift(),o.sort()),j=n.indexOf(":")<0&&"on"+n,b=b[_.expando]?b:new _.Event(n,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=o.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d), -c=null==c?[b]:_.makeArray(c,[b]),l=_.event.special[n]||{},e||!l.trigger||l.trigger.apply(d,c)!==!1)){if(!e&&!l.noBubble&&!_.isWindow(d)){for(i=l.delegateType||n,Ca.test(i+n)||(g=g.parentNode);g;g=g.parentNode)m.push(g),h=g;h===(d.ownerDocument||Z)&&m.push(h.defaultView||h.parentWindow||a)}for(f=0;(g=m[f++])&&!b.isPropagationStopped();)b.type=f>1?i:l.bindType||n,k=(ra.get(g,"events")||{})[b.type]&&ra.get(g,"handle"),k&&k.apply(g,c),k=j&&g[j],k&&k.apply&&_.acceptData(g)&&(b.result=k.apply(g,c),b.result===!1&&b.preventDefault());return b.type=n,e||b.isDefaultPrevented()||l._default&&l._default.apply(m.pop(),c)!==!1||!_.acceptData(d)||j&&_.isFunction(d[n])&&!_.isWindow(d)&&(h=d[j],h&&(d[j]=null),_.event.triggered=n,d[n](),_.event.triggered=void 0,h&&(d[j]=h)),b.result}},dispatch:function(a){a=_.event.fix(a);var b,c,d,e,f,g=[],h=R.call(arguments),i=(ra.get(this,"events")||{})[a.type]||[],j=_.event.special[a.type]||{};if(h[0]=a,a.delegateTarget=this,!j.preDispatch||j.preDispatch.call(this,a)!==!1){for(g=_.event.handlers.call(this,a,i),b=0;(e=g[b++])&&!a.isPropagationStopped();)for(a.currentTarget=e.elem,c=0;(f=e.handlers[c++])&&!a.isImmediatePropagationStopped();)(!a.namespace_re||a.namespace_re.test(f.namespace))&&(a.handleObj=f,a.data=f.data,d=((_.event.special[f.origType]||{}).handle||f.handler).apply(e.elem,h),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()));return j.postDispatch&&j.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?_(e,this).index(i)>=0:_.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h<b.length&&g.push({elem:this,handlers:b.slice(h)}),g},props:"altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return null==a.which&&(a.which=null!=b.charCode?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,b){var c,d,e,f=b.button;return null==a.pageX&&null!=b.clientX&&(c=a.target.ownerDocument||Z,d=c.documentElement,e=c.body,a.pageX=b.clientX+(d&&d.scrollLeft||e&&e.scrollLeft||0)-(d&&d.clientLeft||e&&e.clientLeft||0),a.pageY=b.clientY+(d&&d.scrollTop||e&&e.scrollTop||0)-(d&&d.clientTop||e&&e.clientTop||0)),a.which||void 0===f||(a.which=1&f?1:2&f?3:4&f?2:0),a}},fix:function(a){if(a[_.expando])return a;var b,c,d,e=a.type,f=a,g=this.fixHooks[e];for(g||(this.fixHooks[e]=g=Ba.test(e)?this.mouseHooks:Aa.test(e)?this.keyHooks:{}),d=g.props?this.props.concat(g.props):this.props,a=new _.Event(f),b=d.length;b--;)c=d[b],a[c]=f[c];return a.target||(a.target=Z),3===a.target.nodeType&&(a.target=a.target.parentNode),g.filter?g.filter(a,f):a},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==l()&&this.focus?(this.focus(),!1):void 0},delegateType:"focusin"},blur:{trigger:function(){return this===l()&&this.blur?(this.blur(),!1):void 0},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&_.nodeName(this,"input")?(this.click(),!1):void 0},_default:function(a){return _.nodeName(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}},simulate:function(a,b,c,d){var e=_.extend(new _.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?_.event.trigger(e,null,b):_.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},_.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)},_.Event=function(a,b){return this instanceof _.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?j:k):this.type=a,b&&_.extend(this,b),this.timeStamp=a&&a.timeStamp||_.now(),void(this[_.expando]=!0)):new _.Event(a,b)},_.Event.prototype={isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=j,a&&a.preventDefault&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=j,a&&a.stopPropagation&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=j,a&&a.stopImmediatePropagation&&a.stopImmediatePropagation(),this.stopPropagation()}},_.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){_.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return(!e||e!==d&&!_.contains(d,e))&&(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),Y.focusinBubbles||_.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){_.event.simulate(b,a.target,_.event.fix(a),!0)};_.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=ra.access(d,b);e||d.addEventListener(a,c,!0),ra.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=ra.access(d,b)-1;e?ra.access(d,b,e):(d.removeEventListener(a,c,!0),ra.remove(d,b))}}}),_.fn.extend({on:function(a,b,c,d,e){var f,g;if("object"==typeof a){"string"!=typeof b&&(c=c||b,b=void 0);for(g in a)this.on(g,b,c,a[g],e);return this}if(null==c&&null==d?(d=b,c=b=void 0):null==d&&("string"==typeof b?(d=c,c=void 0):(d=c,c=b,b=void 0)),d===!1)d=k;else if(!d)return this;return 1===e&&(f=d,d=function(a){return _().off(a),f.apply(this,arguments)},d.guid=f.guid||(f.guid=_.guid++)),this.each(function(){_.event.add(this,a,d,c,b)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,_(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return(b===!1||"function"==typeof b)&&(c=b,b=void 0),c===!1&&(c=k),this.each(function(){_.event.remove(this,a,c,b)})},trigger:function(a,b){return this.each(function(){_.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];return c?_.event.trigger(a,b,c,!0):void 0}});var Ea=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,Fa=/<([\w:]+)/,Ga=/<|&#?\w+;/,Ha=/<(?:script|style|link)/i,Ia=/checked\s*(?:[^=]|=\s*.checked.)/i,Ja=/^$|\/(?:java|ecma)script/i,Ka=/^true\/(.*)/,La=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g,Ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};Ma.optgroup=Ma.option,Ma.tbody=Ma.tfoot=Ma.colgroup=Ma.caption=Ma.thead,Ma.th=Ma.td,_.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=_.contains(a.ownerDocument,a);if(!(Y.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||_.isXMLDoc(a)))for(g=r(h),f=r(a),d=0,e=f.length;e>d;d++)s(f[d],g[d]);if(b)if(c)for(f=f||r(a),g=g||r(h),d=0,e=f.length;e>d;d++)q(f[d],g[d]);else q(a,h);return g=r(h,"script"),g.length>0&&p(g,!i&&r(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;n>m;m++)if(e=a[m],e||0===e)if("object"===_.type(e))_.merge(l,e.nodeType?[e]:e);else if(Ga.test(e)){for(f=f||k.appendChild(b.createElement("div")),g=(Fa.exec(e)||["",""])[1].toLowerCase(),h=Ma[g]||Ma._default,f.innerHTML=h[1]+e.replace(Ea,"<$1></$2>")+h[2],j=h[0];j--;)f=f.lastChild;_.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));for(k.textContent="",m=0;e=l[m++];)if((!d||-1===_.inArray(e,d))&&(i=_.contains(e.ownerDocument,e),f=r(k.appendChild(e),"script"),i&&p(f),c))for(j=0;e=f[j++];)Ja.test(e.type||"")&&c.push(e);return k},cleanData:function(a){for(var b,c,d,e,f=_.event.special,g=0;void 0!==(c=a[g]);g++){if(_.acceptData(c)&&(e=c[ra.expando],e&&(b=ra.cache[e]))){if(b.events)for(d in b.events)f[d]?_.event.remove(c,d):_.removeEvent(c,d,b.handle);ra.cache[e]&&delete ra.cache[e]}delete sa.cache[c[sa.expando]]}}}),_.fn.extend({text:function(a){return qa(this,function(a){return void 0===a?_.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=m(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=m(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?_.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||_.cleanData(r(c)),c.parentNode&&(b&&_.contains(c.ownerDocument,c)&&p(r(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(_.cleanData(r(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return _.clone(this,a,b)})},html:function(a){return qa(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Ha.test(a)&&!Ma[(Fa.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Ea,"<$1></$2>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(_.cleanData(r(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,_.cleanData(r(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=S.apply([],a);var c,d,e,f,g,h,i=0,j=this.length,k=this,l=j-1,m=a[0],p=_.isFunction(m);if(p||j>1&&"string"==typeof m&&!Y.checkClone&&Ia.test(m))return this.each(function(c){var d=k.eq(c);p&&(a[0]=m.call(this,c,d.html())),d.domManip(a,b)});if(j&&(c=_.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(e=_.map(r(c,"script"),n),f=e.length;j>i;i++)g=c,i!==l&&(g=_.clone(g,!0,!0),f&&_.merge(e,r(g,"script"))),b.call(this[i],g,i);if(f)for(h=e[e.length-1].ownerDocument,_.map(e,o),i=0;f>i;i++)g=e[i],Ja.test(g.type||"")&&!ra.access(g,"globalEval")&&_.contains(h,g)&&(g.src?_._evalUrl&&_._evalUrl(g.src):_.globalEval(g.textContent.replace(La,"")))}return this}}),_.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){_.fn[a]=function(a){for(var c,d=[],e=_(a),f=e.length-1,g=0;f>=g;g++)c=g===f?this:this.clone(!0),_(e[g])[b](c),T.apply(d,c.get());return this.pushStack(d)}});var Na,Oa={},Pa=/^margin/,Qa=new RegExp("^("+va+")(?!px)[a-z%]+$","i"),Ra=function(b){return b.ownerDocument.defaultView.opener?b.ownerDocument.defaultView.getComputedStyle(b,null):a.getComputedStyle(b,null)};!function(){function b(){g.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;display:block;margin-top:1%;top:1%;border:1px;padding:1px;width:4px;position:absolute",g.innerHTML="",e.appendChild(f);var b=a.getComputedStyle(g,null);c="1%"!==b.top,d="4px"===b.width,e.removeChild(f)}var c,d,e=Z.documentElement,f=Z.createElement("div"),g=Z.createElement("div");g.style&&(g.style.backgroundClip="content-box",g.cloneNode(!0).style.backgroundClip="",Y.clearCloneStyle="content-box"===g.style.backgroundClip,f.style.cssText="border:0;width:0;height:0;top:0;left:-9999px;margin-top:1px;position:absolute",f.appendChild(g),a.getComputedStyle&&_.extend(Y,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return null==d&&b(),d},reliableMarginRight:function(){var b,c=g.appendChild(Z.createElement("div"));return c.style.cssText=g.style.cssText="-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;display:block;margin:0;border:0;padding:0",c.style.marginRight=c.style.width="0",g.style.width="1px",e.appendChild(f),b=!parseFloat(a.getComputedStyle(c,null).marginRight),e.removeChild(f),g.removeChild(c),b}}))}(),_.swap=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};var Sa=/^(none|table(?!-c[ea]).+)/,Ta=new RegExp("^("+va+")(.*)$","i"),Ua=new RegExp("^([+-])=("+va+")","i"),Va={position:"absolute",visibility:"hidden",display:"block"},Wa={letterSpacing:"0",fontWeight:"400"},Xa=["Webkit","O","Moz","ms"];_.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=v(a,"opacity");return""===c?"1":c}}}},cssNumber:{columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=_.camelCase(b),i=a.style;return b=_.cssProps[h]||(_.cssProps[h]=x(i,h)),g=_.cssHooks[b]||_.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:i[b]:(f=typeof c,"string"===f&&(e=Ua.exec(c))&&(c=(e[1]+1)*e[2]+parseFloat(_.css(a,b)),f="number"),null!=c&&c===c&&("number"!==f||_.cssNumber[h]||(c+="px"),Y.clearCloneStyle||""!==c||0!==b.indexOf("background")||(i[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=_.camelCase(b);return b=_.cssProps[h]||(_.cssProps[h]=x(a.style,h)),g=_.cssHooks[b]||_.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=v(a,b,d)),"normal"===e&&b in Wa&&(e=Wa[b]),""===c||c?(f=parseFloat(e),c===!0||_.isNumeric(f)?f||0:e):e}}),_.each(["height","width"],function(a,b){_.cssHooks[b]={get:function(a,c,d){return c?Sa.test(_.css(a,"display"))&&0===a.offsetWidth?_.swap(a,Va,function(){return A(a,b,d)}):A(a,b,d):void 0},set:function(a,c,d){var e=d&&Ra(a);return y(a,c,d?z(a,b,d,"border-box"===_.css(a,"boxSizing",!1,e),e):0)}}}),_.cssHooks.marginRight=w(Y.reliableMarginRight,function(a,b){return b?_.swap(a,{display:"inline-block"},v,[a,"marginRight"]):void 0}),_.each({margin:"",padding:"",border:"Width"},function(a,b){_.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+wa[d]+b]=f[d]||f[d-2]||f[0];return e}},Pa.test(a)||(_.cssHooks[a+b].set=y)}),_.fn.extend({css:function(a,b){return qa(this,function(a,b,c){var d,e,f={},g=0;if(_.isArray(b)){for(d=Ra(a),e=b.length;e>g;g++)f[b[g]]=_.css(a,b[g],!1,d);return f}return void 0!==c?_.style(a,b,c):_.css(a,b)},a,b,arguments.length>1)},show:function(){return B(this,!0)},hide:function(){return B(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){xa(this)?_(this).show():_(this).hide()})}}),_.Tween=C,C.prototype={constructor:C,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(_.cssNumber[c]?"":"px")},cur:function(){var a=C.propHooks[this.prop];return a&&a.get?a.get(this):C.propHooks._default.get(this)},run:function(a){var b,c=C.propHooks[this.prop];return this.options.duration?this.pos=b=_.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):C.propHooks._default.set(this),this}},C.prototype.init.prototype=C.prototype,C.propHooks={_default:{get:function(a){var b;return null==a.elem[a.prop]||a.elem.style&&null!=a.elem.style[a.prop]?(b=_.css(a.elem,a.prop,""),b&&"auto"!==b?b:0):a.elem[a.prop]},set:function(a){_.fx.step[a.prop]?_.fx.step[a.prop](a):a.elem.style&&(null!=a.elem.style[_.cssProps[a.prop]]||_.cssHooks[a.prop])?_.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},C.propHooks.scrollTop=C.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},_.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},_.fx=C.prototype.init,_.fx.step={};var Ya,Za,$a=/^(?:toggle|show|hide)$/,_a=new RegExp("^(?:([+-])=|)("+va+")([a-z%]*)$","i"),ab=/queueHooks$/,bb=[G],cb={"*":[function(a,b){var c=this.createTween(a,b),d=c.cur(),e=_a.exec(b),f=e&&e[3]||(_.cssNumber[a]?"":"px"),g=(_.cssNumber[a]||"px"!==f&&+d)&&_a.exec(_.css(c.elem,a)),h=1,i=20;if(g&&g[3]!==f){f=f||g[3],e=e||[],g=+d||1;do h=h||".5",g/=h,_.style(c.elem,a,g+f);while(h!==(h=c.cur()/d)&&1!==h&&--i)}return e&&(g=c.start=+g||+d||0,c.unit=f,c.end=e[1]?g+(e[1]+1)*e[2]:+e[2]),c}]};_.Animation=_.extend(I,{tweener:function(a,b){_.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");for(var c,d=0,e=a.length;e>d;d++)c=a[d],cb[c]=cb[c]||[],cb[c].unshift(b)},prefilter:function(a,b){b?bb.unshift(a):bb.push(a)}}),_.speed=function(a,b,c){var d=a&&"object"==typeof a?_.extend({},a):{complete:c||!c&&b||_.isFunction(a)&&a,duration:a,easing:c&&b||b&&!_.isFunction(b)&&b};return d.duration=_.fx.off?0:"number"==typeof d.duration?d.duration:d.duration in _.fx.speeds?_.fx.speeds[d.duration]:_.fx.speeds._default,(null==d.queue||d.queue===!0)&&(d.queue="fx"),d.old=d.complete,d.complete=function(){_.isFunction(d.old)&&d.old.call(this),d.queue&&_.dequeue(this,d.queue)},d},_.fn.extend({fadeTo:function(a,b,c,d){return this.filter(xa).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=_.isEmptyObject(a),f=_.speed(b,c,d),g=function(){var b=I(this,_.extend({},a),f);(e||ra.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=_.timers,g=ra.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&ab.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));(b||!c)&&_.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=ra.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=_.timers,g=d?d.length:0;for(c.finish=!0,_.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;g>b;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),_.each(["toggle","show","hide"],function(a,b){var c=_.fn[b];_.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(E(b,!0),a,d,e)}}),_.each({slideDown:E("show"),slideUp:E("hide"),slideToggle:E("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){_.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),_.timers=[],_.fx.tick=function(){var a,b=0,c=_.timers;for(Ya=_.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||_.fx.stop(),Ya=void 0},_.fx.timer=function(a){_.timers.push(a),a()?_.fx.start():_.timers.pop()},_.fx.interval=13,_.fx.start=function(){Za||(Za=setInterval(_.fx.tick,_.fx.interval))},_.fx.stop=function(){clearInterval(Za),Za=null},_.fx.speeds={slow:600,fast:200,_default:400},_.fn.delay=function(a,b){return a=_.fx?_.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},function(){var a=Z.createElement("input"),b=Z.createElement("select"),c=b.appendChild(Z.createElement("option"));a.type="checkbox",Y.checkOn=""!==a.value,Y.optSelected=c.selected,b.disabled=!0,Y.optDisabled=!c.disabled,a=Z.createElement("input"),a.value="t",a.type="radio",Y.radioValue="t"===a.value}();var db,eb,fb=_.expr.attrHandle;_.fn.extend({attr:function(a,b){return qa(this,_.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){_.removeAttr(this,a)})}}),_.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(a&&3!==f&&8!==f&&2!==f)return typeof a.getAttribute===za?_.prop(a,b,c):(1===f&&_.isXMLDoc(a)||(b=b.toLowerCase(),d=_.attrHooks[b]||(_.expr.match.bool.test(b)?eb:db)),void 0===c?d&&"get"in d&&null!==(e=d.get(a,b))?e:(e=_.find.attr(a,b),null==e?void 0:e):null!==c?d&&"set"in d&&void 0!==(e=d.set(a,c,b))?e:(a.setAttribute(b,c+""),c):void _.removeAttr(a,b))},removeAttr:function(a,b){var c,d,e=0,f=b&&b.match(na);if(f&&1===a.nodeType)for(;c=f[e++];)d=_.propFix[c]||c,_.expr.match.bool.test(c)&&(a[d]=!1),a.removeAttribute(c)},attrHooks:{type:{set:function(a,b){if(!Y.radioValue&&"radio"===b&&_.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}}}),eb={set:function(a,b,c){return b===!1?_.removeAttr(a,c):a.setAttribute(c,c),c}},_.each(_.expr.match.bool.source.match(/\w+/g),function(a,b){var c=fb[b]||_.find.attr;fb[b]=function(a,b,d){var e,f;return d||(f=fb[b],fb[b]=e,e=null!=c(a,b,d)?b.toLowerCase():null,fb[b]=f),e}});var gb=/^(?:input|select|textarea|button)$/i;_.fn.extend({prop:function(a,b){return qa(this,_.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[_.propFix[a]||a]})}}),_.extend({propFix:{"for":"htmlFor","class":"className"},prop:function(a,b,c){var d,e,f,g=a.nodeType;if(a&&3!==g&&8!==g&&2!==g)return f=1!==g||!_.isXMLDoc(a),f&&(b=_.propFix[b]||b,e=_.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){return a.hasAttribute("tabindex")||gb.test(a.nodeName)||a.href?a.tabIndex:-1}}}}),Y.optSelected||(_.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null}}),_.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){_.propFix[this.toLowerCase()]=this});var hb=/[\t\r\n\f]/g;_.fn.extend({addClass:function(a){var b,c,d,e,f,g,h="string"==typeof a&&a,i=0,j=this.length;if(_.isFunction(a))return this.each(function(b){_(this).addClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(na)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(hb," "):" ")){for(f=0;e=b[f++];)d.indexOf(" "+e+" ")<0&&(d+=e+" ");g=_.trim(d),c.className!==g&&(c.className=g)}return this},removeClass:function(a){var b,c,d,e,f,g,h=0===arguments.length||"string"==typeof a&&a,i=0,j=this.length;if(_.isFunction(a))return this.each(function(b){_(this).removeClass(a.call(this,b,this.className))});if(h)for(b=(a||"").match(na)||[];j>i;i++)if(c=this[i],d=1===c.nodeType&&(c.className?(" "+c.className+" ").replace(hb," "):"")){for(f=0;e=b[f++];)for(;d.indexOf(" "+e+" ")>=0;)d=d.replace(" "+e+" "," ");g=a?_.trim(d):"",c.className!==g&&(c.className=g)}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):_.isFunction(a)?this.each(function(c){_(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if("string"===c)for(var b,d=0,e=_(this),f=a.match(na)||[];b=f[d++];)e.hasClass(b)?e.removeClass(b):e.addClass(b);else(c===za||"boolean"===c)&&(this.className&&ra.set(this,"__className__",this.className),this.className=this.className||a===!1?"":ra.get(this,"__className__")||"")})},hasClass:function(a){for(var b=" "+a+" ",c=0,d=this.length;d>c;c++)if(1===this[c].nodeType&&(" "+this[c].className+" ").replace(hb," ").indexOf(b)>=0)return!0;return!1}});var ib=/\r/g;_.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=_.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,_(this).val()):a,null==e?e="":"number"==typeof e?e+="":_.isArray(e)&&(e=_.map(e,function(a){return null==a?"":a+""})),b=_.valHooks[this.type]||_.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=_.valHooks[e.type]||_.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(ib,""):null==c?"":c)}}}),_.extend({valHooks:{option:{get:function(a){var b=_.find.attr(a,"value");return null!=b?b:_.trim(_.text(a))}},select:{get:function(a){for(var b,c,d=a.options,e=a.selectedIndex,f="select-one"===a.type||0>e,g=f?null:[],h=f?e+1:d.length,i=0>e?h:f?e:0;h>i;i++)if(c=d[i],(c.selected||i===e)&&(Y.optDisabled?!c.disabled:null===c.getAttribute("disabled"))&&(!c.parentNode.disabled||!_.nodeName(c.parentNode,"optgroup"))){if(b=_(c).val(),f)return b;g.push(b)}return g},set:function(a,b){for(var c,d,e=a.options,f=_.makeArray(b),g=e.length;g--;)d=e[g],(d.selected=_.inArray(d.value,f)>=0)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),_.each(["radio","checkbox"],function(){_.valHooks[this]={set:function(a,b){return _.isArray(b)?a.checked=_.inArray(_(a).val(),b)>=0:void 0}},Y.checkOn||(_.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})}),_.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){_.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),_.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}});var jb=_.now(),kb=/\?/;_.parseJSON=function(a){return JSON.parse(a+"")},_.parseXML=function(a){var b,c;if(!a||"string"!=typeof a)return null;try{c=new DOMParser,b=c.parseFromString(a,"text/xml")}catch(d){b=void 0}return(!b||b.getElementsByTagName("parsererror").length)&&_.error("Invalid XML: "+a),b};var lb=/#.*$/,mb=/([?&])_=[^&]*/,nb=/^(.*?):[ \t]*([^\r\n]*)$/gm,ob=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,pb=/^(?:GET|HEAD)$/,qb=/^\/\//,rb=/^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/,sb={},tb={},ub="*/".concat("*"),vb=a.location.href,wb=rb.exec(vb.toLowerCase())||[];_.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:vb,type:"GET",isLocal:ob.test(wb[1]),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":ub,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":_.parseJSON,"text xml":_.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?L(L(a,_.ajaxSettings),b):L(_.ajaxSettings,a)},ajaxPrefilter:J(sb),ajaxTransport:J(tb),ajax:function(a,b){function c(a,b,c,g){var i,k,r,s,u,w=b;2!==t&&(t=2,h&&clearTimeout(h),d=void 0,f=g||"",v.readyState=a>0?4:0,i=a>=200&&300>a||304===a,c&&(s=M(l,v,c)),s=N(l,s,v,i),i?(l.ifModified&&(u=v.getResponseHeader("Last-Modified"),u&&(_.lastModified[e]=u),u=v.getResponseHeader("etag"),u&&(_.etag[e]=u)),204===a||"HEAD"===l.type?w="nocontent":304===a?w="notmodified":(w=s.state,k=s.data,r=s.error,i=!r)):(r=w,(a||!w)&&(w="error",0>a&&(a=0))),v.status=a,v.statusText=(b||w)+"",i?o.resolveWith(m,[k,w,v]):o.rejectWith(m,[v,w,r]),v.statusCode(q),q=void 0,j&&n.trigger(i?"ajaxSuccess":"ajaxError",[v,l,i?k:r]),p.fireWith(m,[v,w]),j&&(n.trigger("ajaxComplete",[v,l]),--_.active||_.event.trigger("ajaxStop")))}"object"==typeof a&&(b=a,a=void 0),b=b||{};var d,e,f,g,h,i,j,k,l=_.ajaxSetup({},b),m=l.context||l,n=l.context&&(m.nodeType||m.jquery)?_(m):_.event,o=_.Deferred(),p=_.Callbacks("once memory"),q=l.statusCode||{},r={},s={},t=0,u="canceled",v={readyState:0,getResponseHeader:function(a){var b;if(2===t){if(!g)for(g={};b=nb.exec(f);)g[b[1].toLowerCase()]=b[2];b=g[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return 2===t?f:null},setRequestHeader:function(a,b){var c=a.toLowerCase();return t||(a=s[c]=s[c]||a,r[a]=b),this},overrideMimeType:function(a){return t||(l.mimeType=a),this},statusCode:function(a){var b;if(a)if(2>t)for(b in a)q[b]=[q[b],a[b]];else v.always(a[v.status]);return this},abort:function(a){var b=a||u;return d&&d.abort(b),c(0,b),this}};if(o.promise(v).complete=p.add,v.success=v.done,v.error=v.fail,l.url=((a||l.url||vb)+"").replace(lb,"").replace(qb,wb[1]+"//"),l.type=b.method||b.type||l.method||l.type,l.dataTypes=_.trim(l.dataType||"*").toLowerCase().match(na)||[""],null==l.crossDomain&&(i=rb.exec(l.url.toLowerCase()),l.crossDomain=!(!i||i[1]===wb[1]&&i[2]===wb[2]&&(i[3]||("http:"===i[1]?"80":"443"))===(wb[3]||("http:"===wb[1]?"80":"443")))),l.data&&l.processData&&"string"!=typeof l.data&&(l.data=_.param(l.data,l.traditional)),K(sb,l,b,v),2===t)return v;j=_.event&&l.global,j&&0===_.active++&&_.event.trigger("ajaxStart"),l.type=l.type.toUpperCase(),l.hasContent=!pb.test(l.type),e=l.url,l.hasContent||(l.data&&(e=l.url+=(kb.test(e)?"&":"?")+l.data,delete l.data),l.cache===!1&&(l.url=mb.test(e)?e.replace(mb,"$1_="+jb++):e+(kb.test(e)?"&":"?")+"_="+jb++)),l.ifModified&&(_.lastModified[e]&&v.setRequestHeader("If-Modified-Since",_.lastModified[e]),_.etag[e]&&v.setRequestHeader("If-None-Match",_.etag[e])),(l.data&&l.hasContent&&l.contentType!==!1||b.contentType)&&v.setRequestHeader("Content-Type",l.contentType),v.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+("*"!==l.dataTypes[0]?", "+ub+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)v.setRequestHeader(k,l.headers[k]);if(l.beforeSend&&(l.beforeSend.call(m,v,l)===!1||2===t))return v.abort();u="abort";for(k in{success:1,error:1,complete:1})v[k](l[k]);if(d=K(tb,l,b,v)){v.readyState=1,j&&n.trigger("ajaxSend",[v,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){v.abort("timeout")},l.timeout));try{t=1,d.send(r,c)}catch(w){if(!(2>t))throw w;c(-1,w)}}else c(-1,"No Transport");return v},getJSON:function(a,b,c){return _.get(a,b,c,"json")},getScript:function(a,b){return _.get(a,void 0,b,"script")}}),_.each(["get","post"],function(a,b){_[b]=function(a,c,d,e){return _.isFunction(c)&&(e=e||d,d=c,c=void 0),_.ajax({url:a,type:b,dataType:e,data:c,success:d})}}),_._evalUrl=function(a){return _.ajax({url:a,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0})},_.fn.extend({wrapAll:function(a){var b;return _.isFunction(a)?this.each(function(b){_(this).wrapAll(a.call(this,b))}):(this[0]&&(b=_(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){for(var a=this;a.firstElementChild;)a=a.firstElementChild;return a}).append(this)),this)},wrapInner:function(a){return _.isFunction(a)?this.each(function(b){_(this).wrapInner(a.call(this,b))}):this.each(function(){var b=_(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=_.isFunction(a);return this.each(function(c){_(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){_.nodeName(this,"body")||_(this).replaceWith(this.childNodes)}).end()}}),_.expr.filters.hidden=function(a){return a.offsetWidth<=0&&a.offsetHeight<=0},_.expr.filters.visible=function(a){return!_.expr.filters.hidden(a)};var xb=/%20/g,yb=/\[\]$/,zb=/\r?\n/g,Ab=/^(?:submit|button|image|reset|file)$/i,Bb=/^(?:input|select|textarea|keygen)/i;_.param=function(a,b){var c,d=[],e=function(a,b){b=_.isFunction(b)?b():null==b?"":b, -d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};if(void 0===b&&(b=_.ajaxSettings&&_.ajaxSettings.traditional),_.isArray(a)||a.jquery&&!_.isPlainObject(a))_.each(a,function(){e(this.name,this.value)});else for(c in a)O(c,a[c],b,e);return d.join("&").replace(xb,"+")},_.fn.extend({serialize:function(){return _.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=_.prop(this,"elements");return a?_.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!_(this).is(":disabled")&&Bb.test(this.nodeName)&&!Ab.test(a)&&(this.checked||!ya.test(a))}).map(function(a,b){var c=_(this).val();return null==c?null:_.isArray(c)?_.map(c,function(a){return{name:b.name,value:a.replace(zb,"\r\n")}}):{name:b.name,value:c.replace(zb,"\r\n")}}).get()}}),_.ajaxSettings.xhr=function(){try{return new XMLHttpRequest}catch(a){}};var Cb=0,Db={},Eb={0:200,1223:204},Fb=_.ajaxSettings.xhr();a.attachEvent&&a.attachEvent("onunload",function(){for(var a in Db)Db[a]()}),Y.cors=!!Fb&&"withCredentials"in Fb,Y.ajax=Fb=!!Fb,_.ajaxTransport(function(a){var b;return Y.cors||Fb&&!a.crossDomain?{send:function(c,d){var e,f=a.xhr(),g=++Cb;if(f.open(a.type,a.url,a.async,a.username,a.password),a.xhrFields)for(e in a.xhrFields)f[e]=a.xhrFields[e];a.mimeType&&f.overrideMimeType&&f.overrideMimeType(a.mimeType),a.crossDomain||c["X-Requested-With"]||(c["X-Requested-With"]="XMLHttpRequest");for(e in c)f.setRequestHeader(e,c[e]);b=function(a){return function(){b&&(delete Db[g],b=f.onload=f.onerror=null,"abort"===a?f.abort():"error"===a?d(f.status,f.statusText):d(Eb[f.status]||f.status,f.statusText,"string"==typeof f.responseText?{text:f.responseText}:void 0,f.getAllResponseHeaders()))}},f.onload=b(),f.onerror=b("error"),b=Db[g]=b("abort");try{f.send(a.hasContent&&a.data||null)}catch(h){if(b)throw h}},abort:function(){b&&b()}}:void 0}),_.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/(?:java|ecma)script/},converters:{"text script":function(a){return _.globalEval(a),a}}}),_.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),_.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(d,e){b=_("<script>").prop({async:!0,charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&e("error"===a.type?404:200,a.type)}),Z.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Gb=[],Hb=/(=)\?(?=&|$)|\?\?/;_.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Gb.pop()||_.expando+"_"+jb++;return this[a]=!0,a}}),_.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Hb.test(b.url)?"url":"string"==typeof b.data&&!(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Hb.test(b.data)&&"data");return h||"jsonp"===b.dataTypes[0]?(e=b.jsonpCallback=_.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Hb,"$1"+e):b.jsonp!==!1&&(b.url+=(kb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||_.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Gb.push(e)),g&&_.isFunction(f)&&f(g[0]),g=f=void 0}),"script"):void 0}),_.parseHTML=function(a,b,c){if(!a||"string"!=typeof a)return null;"boolean"==typeof b&&(c=b,b=!1),b=b||Z;var d=ga.exec(a),e=!c&&[];return d?[b.createElement(d[1])]:(d=_.buildFragment([a],b,e),e&&e.length&&_(e).remove(),_.merge([],d.childNodes))};var Ib=_.fn.load;_.fn.load=function(a,b,c){if("string"!=typeof a&&Ib)return Ib.apply(this,arguments);var d,e,f,g=this,h=a.indexOf(" ");return h>=0&&(d=_.trim(a.slice(h)),a=a.slice(0,h)),_.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&_.ajax({url:a,type:e,dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?_("<div>").append(_.parseHTML(a)).find(d):a)}).complete(c&&function(a,b){g.each(c,f||[a.responseText,b,a])}),this},_.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){_.fn[b]=function(a){return this.on(b,a)}}),_.expr.filters.animated=function(a){return _.grep(_.timers,function(b){return a===b.elem}).length};var Jb=a.document.documentElement;_.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=_.css(a,"position"),l=_(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=_.css(a,"top"),i=_.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),_.isFunction(b)&&(b=b.call(a,c,h)),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},_.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){_.offset.setOffset(this,a,b)});var b,c,d=this[0],e={top:0,left:0},f=d&&d.ownerDocument;if(f)return b=f.documentElement,_.contains(b,d)?(typeof d.getBoundingClientRect!==za&&(e=d.getBoundingClientRect()),c=P(f),{top:e.top+c.pageYOffset-b.clientTop,left:e.left+c.pageXOffset-b.clientLeft}):e},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===_.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),_.nodeName(a[0],"html")||(d=a.offset()),d.top+=_.css(a[0],"borderTopWidth",!0),d.left+=_.css(a[0],"borderLeftWidth",!0)),{top:b.top-d.top-_.css(c,"marginTop",!0),left:b.left-d.left-_.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||Jb;a&&!_.nodeName(a,"html")&&"static"===_.css(a,"position");)a=a.offsetParent;return a||Jb})}}),_.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(b,c){var d="pageYOffset"===c;_.fn[b]=function(e){return qa(this,function(b,e,f){var g=P(b);return void 0===f?g?g[c]:b[e]:void(g?g.scrollTo(d?a.pageXOffset:f,d?f:a.pageYOffset):b[e]=f)},b,e,arguments.length,null)}}),_.each(["top","left"],function(a,b){_.cssHooks[b]=w(Y.pixelPosition,function(a,c){return c?(c=v(a,b),Qa.test(c)?_(a).position()[b]+"px":c):void 0})}),_.each({Height:"height",Width:"width"},function(a,b){_.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){_.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return qa(this,function(b,c,d){var e;return _.isWindow(b)?b.document.documentElement["client"+a]:9===b.nodeType?(e=b.documentElement,Math.max(b.body["scroll"+a],e["scroll"+a],b.body["offset"+a],e["offset"+a],e["client"+a])):void 0===d?_.css(b,c,g):_.style(b,c,d,g)},b,f?d:void 0,f,null)}})}),_.fn.size=function(){return this.length},_.fn.andSelf=_.fn.addBack,"function"==typeof define&&define.amd&&define("jquery",[],function(){return _});var Kb=a.jQuery,Lb=a.$;return _.noConflict=function(b){return a.$===_&&(a.$=Lb),b&&a.jQuery===_&&(a.jQuery=Kb),_},typeof b===za&&(a.jQuery=a.$=_),_}),/*! - * Lightbox v2.8.2 - * by Lokesh Dhakar - * - * More info: - * http://lokeshdhakar.com/projects/lightbox2/ - * - * Copyright 2007, 2015 Lokesh Dhakar - * Released under the MIT license - * https://github.com/lokesh/lightbox2/blob/master/LICENSE - */ -function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof exports?module.exports=b(require("jquery")):a.lightbox=b(a.jQuery)}(this,function(a){function b(b){this.album=[],this.currentImageIndex=void 0,this.init(),this.options=a.extend({},this.constructor.defaults),this.option(b)}return b.defaults={albumLabel:"Image %1 of %2",alwaysShowNavOnTouchDevices:!1,fadeDuration:500,fitImagesInViewport:!0,positionFromTop:50,resizeDuration:700,showImageNumberLabel:!0,wrapAround:!1,disableScrolling:!1},b.prototype.option=function(b){a.extend(this.options,b)},b.prototype.imageCountLabel=function(a,b){return this.options.albumLabel.replace(/%1/g,a).replace(/%2/g,b)},b.prototype.init=function(){this.enable(),this.build()},b.prototype.enable=function(){var b=this;a("body").on("click","a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]",function(c){return b.start(a(c.currentTarget)),!1})},b.prototype.build=function(){var b=this;a('<div id="lightboxOverlay" class="lightboxOverlay"></div><div id="lightbox" class="lightbox"><div class="lb-outerContainer"><div class="lb-container"><img class="lb-image" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" /><div class="lb-nav"><a class="lb-prev" href="" ></a><a class="lb-next" href="" ></a></div><div class="lb-loader"><a class="lb-cancel"></a></div></div></div><div class="lb-dataContainer"><div class="lb-data"><div class="lb-details"><span class="lb-caption"></span><span class="lb-number"></span></div><div class="lb-closeContainer"><a class="lb-close"></a></div></div></div></div>').appendTo(a("body")),this.$lightbox=a("#lightbox"),this.$overlay=a("#lightboxOverlay"),this.$outerContainer=this.$lightbox.find(".lb-outerContainer"),this.$container=this.$lightbox.find(".lb-container"),this.containerTopPadding=parseInt(this.$container.css("padding-top"),10),this.containerRightPadding=parseInt(this.$container.css("padding-right"),10),this.containerBottomPadding=parseInt(this.$container.css("padding-bottom"),10),this.containerLeftPadding=parseInt(this.$container.css("padding-left"),10),this.$overlay.hide().on("click",function(){return b.end(),!1}),this.$lightbox.hide().on("click",function(c){return"lightbox"===a(c.target).attr("id")&&b.end(),!1}),this.$outerContainer.on("click",function(c){return"lightbox"===a(c.target).attr("id")&&b.end(),!1}),this.$lightbox.find(".lb-prev").on("click",function(){return 0===b.currentImageIndex?b.changeImage(b.album.length-1):b.changeImage(b.currentImageIndex-1),!1}),this.$lightbox.find(".lb-next").on("click",function(){return b.currentImageIndex===b.album.length-1?b.changeImage(0):b.changeImage(b.currentImageIndex+1),!1}),this.$lightbox.find(".lb-loader, .lb-close").on("click",function(){return b.end(),!1})},b.prototype.start=function(b){function c(a){d.album.push({link:a.attr("href"),title:a.attr("data-title")||a.attr("title")})}var d=this,e=a(window);e.on("resize",a.proxy(this.sizeOverlay,this)),a("select, object, embed").css({visibility:"hidden"}),this.sizeOverlay(),this.album=[];var f,g=0,h=b.attr("data-lightbox");if(h){f=a(b.prop("tagName")+'[data-lightbox="'+h+'"]');for(var i=0;i<f.length;i=++i)c(a(f[i])),f[i]===b[0]&&(g=i)}else if("lightbox"===b.attr("rel"))c(b);else{f=a(b.prop("tagName")+'[rel="'+b.attr("rel")+'"]');for(var j=0;j<f.length;j=++j)c(a(f[j])),f[j]===b[0]&&(g=j)}var k=e.scrollTop()+this.options.positionFromTop,l=e.scrollLeft();this.$lightbox.css({top:k+"px",left:l+"px"}).fadeIn(this.options.fadeDuration),this.options.disableScrolling&&a("body").addClass("lb-disable-scrolling"),this.changeImage(g)},b.prototype.changeImage=function(b){var c=this;this.disableKeyboardNav();var d=this.$lightbox.find(".lb-image");this.$overlay.fadeIn(this.options.fadeDuration),a(".lb-loader").fadeIn("slow"),this.$lightbox.find(".lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption").hide(),this.$outerContainer.addClass("animating");var e=new Image;e.onload=function(){var f,g,h,i,j,k,l;d.attr("src",c.album[b].link),f=a(e),d.width(e.width),d.height(e.height),c.options.fitImagesInViewport&&(l=a(window).width(),k=a(window).height(),j=l-c.containerLeftPadding-c.containerRightPadding-20,i=k-c.containerTopPadding-c.containerBottomPadding-120,c.options.maxWidth&&c.options.maxWidth<j&&(j=c.options.maxWidth),c.options.maxHeight&&c.options.maxHeight<j&&(i=c.options.maxHeight),(e.width>j||e.height>i)&&(e.width/j>e.height/i?(h=j,g=parseInt(e.height/(e.width/h),10),d.width(h),d.height(g)):(g=i,h=parseInt(e.width/(e.height/g),10),d.width(h),d.height(g)))),c.sizeContainer(d.width(),d.height())},e.src=this.album[b].link,this.currentImageIndex=b},b.prototype.sizeOverlay=function(){this.$overlay.width(a(document).width()).height(a(document).height())},b.prototype.sizeContainer=function(a,b){function c(){d.$lightbox.find(".lb-dataContainer").width(g),d.$lightbox.find(".lb-prevLink").height(h),d.$lightbox.find(".lb-nextLink").height(h),d.showImage()}var d=this,e=this.$outerContainer.outerWidth(),f=this.$outerContainer.outerHeight(),g=a+this.containerLeftPadding+this.containerRightPadding,h=b+this.containerTopPadding+this.containerBottomPadding;e!==g||f!==h?this.$outerContainer.animate({width:g,height:h},this.options.resizeDuration,"swing",function(){c()}):c()},b.prototype.showImage=function(){this.$lightbox.find(".lb-loader").stop(!0).hide(),this.$lightbox.find(".lb-image").fadeIn("slow"),this.updateNav(),this.updateDetails(),this.preloadNeighboringImages(),this.enableKeyboardNav()},b.prototype.updateNav=function(){var a=!1;try{document.createEvent("TouchEvent"),a=this.options.alwaysShowNavOnTouchDevices?!0:!1}catch(b){}this.$lightbox.find(".lb-nav").show(),this.album.length>1&&(this.options.wrapAround?(a&&this.$lightbox.find(".lb-prev, .lb-next").css("opacity","1"),this.$lightbox.find(".lb-prev, .lb-next").show()):(this.currentImageIndex>0&&(this.$lightbox.find(".lb-prev").show(),a&&this.$lightbox.find(".lb-prev").css("opacity","1")),this.currentImageIndex<this.album.length-1&&(this.$lightbox.find(".lb-next").show(),a&&this.$lightbox.find(".lb-next").css("opacity","1"))))},b.prototype.updateDetails=function(){var b=this;if("undefined"!=typeof this.album[this.currentImageIndex].title&&""!==this.album[this.currentImageIndex].title&&this.$lightbox.find(".lb-caption").html(this.album[this.currentImageIndex].title).fadeIn("fast").find("a").on("click",function(b){void 0!==a(this).attr("target")?window.open(a(this).attr("href"),a(this).attr("target")):location.href=a(this).attr("href")}),this.album.length>1&&this.options.showImageNumberLabel){var c=this.imageCountLabel(this.currentImageIndex+1,this.album.length);this.$lightbox.find(".lb-number").text(c).fadeIn("fast")}else this.$lightbox.find(".lb-number").hide();this.$outerContainer.removeClass("animating"),this.$lightbox.find(".lb-dataContainer").fadeIn(this.options.resizeDuration,function(){return b.sizeOverlay()})},b.prototype.preloadNeighboringImages=function(){if(this.album.length>this.currentImageIndex+1){var a=new Image;a.src=this.album[this.currentImageIndex+1].link}if(this.currentImageIndex>0){var b=new Image;b.src=this.album[this.currentImageIndex-1].link}},b.prototype.enableKeyboardNav=function(){a(document).on("keyup.keyboard",a.proxy(this.keyboardAction,this))},b.prototype.disableKeyboardNav=function(){a(document).off(".keyboard")},b.prototype.keyboardAction=function(a){var b=27,c=37,d=39,e=a.keyCode,f=String.fromCharCode(e).toLowerCase();e===b||f.match(/x|o|c/)?this.end():"p"===f||e===c?0!==this.currentImageIndex?this.changeImage(this.currentImageIndex-1):this.options.wrapAround&&this.album.length>1&&this.changeImage(this.album.length-1):("n"===f||e===d)&&(this.currentImageIndex!==this.album.length-1?this.changeImage(this.currentImageIndex+1):this.options.wrapAround&&this.album.length>1&&this.changeImage(0))},b.prototype.end=function(){this.disableKeyboardNav(),a(window).off("resize",this.sizeOverlay),this.$lightbox.fadeOut(this.options.fadeDuration),this.$overlay.fadeOut(this.options.fadeDuration),a("select, object, embed").css({visibility:"visible"}),this.options.disableScrolling&&a("body").removeClass("lb-disable-scrolling")},new b}); -//# sourceMappingURL=lightbox-plus-jquery.min.map \ No newline at end of file diff --git a/theme/static/theme/lightbox2/dist/js/lightbox-plus-jquery.min.map b/theme/static/theme/lightbox2/dist/js/lightbox-plus-jquery.min.map deleted file mode 100644 index 353b45c9..00000000 --- a/theme/static/theme/lightbox2/dist/js/lightbox-plus-jquery.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["lightbox-plus-jquery.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","isArraylike","obj","length","type","jQuery","isWindow","nodeType","winnow","elements","qualifier","not","isFunction","grep","elem","i","call","risSimple","test","filter","indexOf","sibling","cur","dir","createOptions","options","object","optionsCache","each","match","rnotwhite","_","flag","completed","removeEventListener","ready","Data","Object","defineProperty","cache","get","expando","uid","dataAttr","key","data","name","undefined","replace","rmultiDash","toLowerCase","getAttribute","rbrace","parseJSON","e","data_user","set","returnTrue","returnFalse","safeActiveElement","activeElement","err","manipulationTarget","content","nodeName","firstChild","getElementsByTagName","appendChild","ownerDocument","createElement","disableScript","restoreScript","rscriptTypeMasked","exec","removeAttribute","setGlobalEval","elems","refElements","l","data_priv","cloneCopyEvent","src","dest","pdataOld","pdataCur","udataOld","udataCur","events","hasData","access","handle","event","add","extend","getAll","context","tag","ret","querySelectorAll","merge","fixInput","rcheckableType","checked","defaultValue","actualDisplay","doc","style","appendTo","body","display","getDefaultComputedStyle","css","detach","defaultDisplay","elemdisplay","iframe","documentElement","contentDocument","write","close","curCSS","computed","width","minWidth","maxWidth","getStyles","getPropertyValue","contains","rnumnonpx","rmargin","addGetHookIf","conditionFn","hookFn","apply","arguments","vendorPropName","capName","toUpperCase","slice","origName","cssPrefixes","setPositiveNumber","value","subtract","matches","rnumsplit","Math","max","augmentWidthOrHeight","extra","isBorderBox","styles","val","cssExpand","getWidthOrHeight","valueIsBorderBox","offsetWidth","offsetHeight","support","boxSizingReliable","parseFloat","showHide","show","hidden","values","index","isHidden","Tween","prop","end","easing","prototype","init","createFxNow","setTimeout","fxNow","now","genFx","includeWidth","which","attrs","height","opacity","createTween","animation","tween","collection","tweeners","concat","defaultPrefilter","props","opts","toggle","hooks","oldfire","checkDisplay","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","overflow","overflowX","overflowY","rfxtypes","isEmptyObject","done","hide","remove","start","propFilter","specialEasing","camelCase","isArray","cssHooks","expand","Animation","properties","result","stopped","animationPrefilters","deferred","Deferred","tick","currentTime","remaining","startTime","duration","temp","percent","tweens","run","notifyWith","resolveWith","promise","originalProperties","originalOptions","push","stop","gotoEnd","rejectWith","map","fx","timer","progress","complete","fail","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","selected","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","ct","finalDataType","firstDataType","contents","shift","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","tmp","prev","responseFields","dataFilter","split","state","error","buildParams","prefix","traditional","v","rbracket","getWindow","defaultView","arr","class2type","toString","hasOwn","hasOwnProperty","version","selector","fn","rtrim","rmsPrefix","rdashAlpha","fcamelCase","all","letter","jquery","constructor","toArray","num","pushStack","prevObject","callback","args","first","eq","last","len","j","sort","splice","copy","copyIsArray","clone","isPlainObject","random","isReady","msg","noop","Array","isNumeric","globalEval","code","script","indirect","eval","trim","text","head","parentNode","removeChild","string","makeArray","results","inArray","second","invert","callbackInverse","callbackExpect","arg","guid","proxy","Date","Sizzle","seed","m","groups","old","nid","newContext","newSelector","preferredDoc","setDocument","documentIsHTML","rquickExpr","getElementById","id","getElementsByClassName","qsa","rbuggyQSA","tokenize","rescape","setAttribute","toSelector","rsibling","testContext","join","qsaError","select","createCache","keys","Expr","cacheLength","markFunction","assert","div","addHandle","handler","attrHandle","siblingCheck","a","b","diff","sourceIndex","MAX_NEGATIVE","nextSibling","createInputPseudo","createButtonPseudo","createPositionalPseudo","argument","matchIndexes","setFilters","tokens","addCombinator","matcher","combinator","base","checkNonElements","doneName","xml","oldCache","outerCache","newCache","dirruns","elementMatcher","matchers","multipleContexts","contexts","condense","unmatched","newUnmatched","mapped","setMatcher","preFilter","postFilter","postFinder","postSelector","preMap","postMap","preexisting","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","relative","implicitRelative","matchContext","matchAnyContext","outermostContext","matcherFromGroupMatchers","elementMatchers","setMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","find","dirrunsUnique","pop","uniqueSort","getText","isXML","compile","sortInput","hasDuplicate","docElem","rbuggyMatches","classCache","tokenCache","compilerCache","sortOrder","push_native","list","booleans","whitespace","characterEncoding","identifier","attributes","pseudos","rwhitespace","RegExp","rcomma","rcombinators","rattributeQuotes","rpseudo","ridentifier","matchExpr","ID","CLASS","TAG","ATTR","PSEUDO","CHILD","bool","needsContext","rinputs","rheader","rnative","runescape","funescape","escaped","escapedWhitespace","high","String","fromCharCode","unloadHandler","childNodes","els","node","hasCompare","parent","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","attrId","getAttributeNode","innerHTML","input","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","expr","attr","specified","duplicates","detectDuplicates","sortStable","textContent","nodeValue","selectors","createPseudo",">"," ","+","~","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","nodeIndex","useCache","lastChild","pseudo","idx","matched","has","innerText","lang","elemLang","hash","location","root","focus","hasFocus","href","tabIndex","enabled","disabled","selectedIndex","header","button","even","odd","lt","gt","radio","checkbox","file","password","image","submit","reset","filters","parseOnly","soFar","preFilters","cached","token","compiled","div1","unique","isXMLDoc","rneedsContext","rsingleTag","self","is","rootjQuery","parseHTML","rparentsprev","guaranteedUnique","children","next","until","truncate","n","targets","closest","pos","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","reverse","Callbacks","memory","fired","firing","firingStart","firingLength","firingIndex","stack","once","stopOnFalse","disable","lock","locked","fireWith","tuples","then","fns","newDefer","tuple","returned","resolve","reject","notify","pipe","stateString","when","subordinate","progressValues","progressContexts","resolveContexts","resolveValues","updateFunc","readyList","readyWait","holdReady","hold","wait","triggerHandler","off","readyState","chainable","emptyGet","raw","bulk","acceptData","owner","accepts","descriptor","unlock","defineProperties","stored","camel","discard","removeData","_data","_removeData","camelKey","dequeue","startLength","setter","clearQueue","count","defer","pnum","source","el","fragment","createDocumentFragment","checkClone","cloneNode","noCloneChecked","strundefined","focusinBubbles","rkeyEvent","rmouseEvent","rfocusMorph","rtypenamespace","types","handleObjIn","eventHandle","t","handleObj","special","handlers","namespaces","origType","elemData","triggered","dispatch","delegateType","bindType","namespace","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","trigger","onlyHandlers","bubbleType","ontype","eventPath","Event","isTrigger","namespace_re","noBubble","parentWindow","isPropagationStopped","preventDefault","isDefaultPrevented","_default","fix","handlerQueue","delegateTarget","preDispatch","currentTarget","isImmediatePropagationStopped","stopPropagation","postDispatch","sel","fixHooks","keyHooks","original","charCode","keyCode","mouseHooks","eventDoc","pageX","clientX","scrollLeft","clientLeft","pageY","clientY","scrollTop","clientTop","originalEvent","fixHook","load","blur","click","beforeunload","returnValue","simulate","bubble","isSimulated","defaultPrevented","timeStamp","stopImmediatePropagation","mouseenter","mouseleave","pointerenter","pointerleave","related","relatedTarget","attaches","on","one","origFn","rxhtmlTag","rtagName","rhtml","rnoInnerhtml","rchecked","rscriptType","rcleanScript","wrapMap","option","thead","col","tr","td","optgroup","tbody","tfoot","colgroup","caption","th","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","buildFragment","scripts","selection","wrap","nodes","createTextNode","cleanData","append","domManip","prepend","insertBefore","before","after","keepData","html","replaceWith","replaceChild","hasScripts","iNoClone","_evalUrl","prependTo","insertAfter","replaceAll","insert","opener","getComputedStyle","computePixelPositionAndBoxSizingReliable","cssText","container","divStyle","pixelPositionVal","boxSizingReliableVal","backgroundClip","clearCloneStyle","pixelPosition","reliableMarginRight","marginDiv","marginRight","swap","rdisplayswap","rrelNum","cssShow","position","visibility","cssNormalTransform","letterSpacing","fontWeight","cssNumber","columnCount","fillOpacity","flexGrow","flexShrink","lineHeight","order","orphans","widows","zIndex","zoom","cssProps","float","margin","padding","border","suffix","expanded","parts","unit","propHooks","eased","step","linear","p","swing","cos","PI","timerId","rfxnum","rrun","*","scale","maxIterations","tweener","prefilter","speed","opt","speeds","fadeTo","to","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","interval","setInterval","clearInterval","slow","fast","delay","time","timeout","clearTimeout","checkOn","optSelected","optDisabled","radioValue","nodeHook","boolHook","removeAttr","nType","attrHooks","propName","attrNames","propFix","getter","rfocusable","removeProp","for","class","notxml","hasAttribute","rclass","addClass","classes","clazz","finalValue","proceed","removeClass","toggleClass","stateVal","classNames","hasClass","rreturn","valHooks","optionSet","hover","fnOver","fnOut","bind","unbind","delegate","undelegate","nonce","rquery","JSON","parse","parseXML","DOMParser","parseFromString","rhash","rts","rheaders","rlocalProtocol","rnoContent","rprotocol","rurl","prefilters","allTypes","ajaxLocation","ajaxLocParts","active","lastModified","etag","url","isLocal","processData","async","contentType","json","* text","text html","text json","text xml","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","status","nativeStatusText","headers","success","modified","statusText","timeoutTimer","transport","responseHeadersString","ifModified","cacheURL","callbackContext","statusCode","fireGlobals","globalEventContext","completeDeferred","responseHeaders","requestHeaders","requestHeadersNames","strAbort","getAllResponseHeaders","setRequestHeader","lname","overrideMimeType","abort","finalText","method","crossDomain","param","hasContent","beforeSend","send","getJSON","getScript","throws","wrapAll","firstElementChild","wrapInner","unwrap","visible","r20","rCRLF","rsubmitterTypes","rsubmittable","encodeURIComponent","serialize","serializeArray","xhr","XMLHttpRequest","xhrId","xhrCallbacks","xhrSuccessStatus",0,1223,"xhrSupported","cors","open","username","xhrFields","onload","onerror","responseText","text script","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","keepScripts","parsed","_load","params","animated","offset","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","calculatePosition","curElem","left","using","win","box","getBoundingClientRect","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","","defaultExtra","funcName","size","andSelf","define","amd","_jQuery","_$","$","noConflict","require","lightbox","Lightbox","album","currentImageIndex","defaults","albumLabel","alwaysShowNavOnTouchDevices","fadeDuration","fitImagesInViewport","positionFromTop","resizeDuration","showImageNumberLabel","wrapAround","disableScrolling","imageCountLabel","currentImageNum","totalImages","enable","build","$lightbox","$overlay","$outerContainer","$container","containerTopPadding","parseInt","containerRightPadding","containerBottomPadding","containerLeftPadding","changeImage","$link","addToAlbum","link","title","$window","sizeOverlay","$links","imageNumber","dataLightboxValue","disableKeyboardNav","$image","preloader","Image","$preloader","imageHeight","imageWidth","maxImageHeight","maxImageWidth","windowHeight","windowWidth","maxHeight","sizeContainer","postResize","newWidth","newHeight","showImage","oldWidth","outerWidth","oldHeight","outerHeight","updateNav","updateDetails","preloadNeighboringImages","enableKeyboardNav","alwaysShowNav","createEvent","labelText","preloadNext","preloadPrev","keyboardAction","KEYCODE_ESC","KEYCODE_LEFTARROW","KEYCODE_RIGHTARROW","keycode"],"mappings":"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","file":"lightbox-plus-jquery.min.js"} \ No newline at end of file diff --git a/theme/static/theme/lightbox2/dist/js/lightbox.js b/theme/static/theme/lightbox2/dist/js/lightbox.js deleted file mode 100644 index 352bb863..00000000 --- a/theme/static/theme/lightbox2/dist/js/lightbox.js +++ /dev/null @@ -1,453 +0,0 @@ -/*! - * Lightbox v2.8.2 - * by Lokesh Dhakar - * - * More info: - * http://lokeshdhakar.com/projects/lightbox2/ - * - * Copyright 2007, 2015 Lokesh Dhakar - * Released under the MIT license - * https://github.com/lokesh/lightbox2/blob/master/LICENSE - */ - -// Uses Node, AMD or browser globals to create a module. -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['jquery'], factory); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require('jquery')); - } else { - // Browser globals (root is window) - root.lightbox = factory(root.jQuery); - } -}(this, function ($) { - - function Lightbox(options) { - this.album = []; - this.currentImageIndex = void 0; - this.init(); - - // options - this.options = $.extend({}, this.constructor.defaults); - this.option(options); - } - - // Descriptions of all options available on the demo site: - // http://lokeshdhakar.com/projects/lightbox2/index.html#options - Lightbox.defaults = { - albumLabel: 'Image %1 of %2', - alwaysShowNavOnTouchDevices: false, - fadeDuration: 500, - fitImagesInViewport: true, - // maxWidth: 800, - // maxHeight: 600, - positionFromTop: 50, - resizeDuration: 700, - showImageNumberLabel: true, - wrapAround: false, - disableScrolling: false - }; - - Lightbox.prototype.option = function(options) { - $.extend(this.options, options); - }; - - Lightbox.prototype.imageCountLabel = function(currentImageNum, totalImages) { - return this.options.albumLabel.replace(/%1/g, currentImageNum).replace(/%2/g, totalImages); - }; - - Lightbox.prototype.init = function() { - this.enable(); - this.build(); - }; - - // Loop through anchors and areamaps looking for either data-lightbox attributes or rel attributes - // that contain 'lightbox'. When these are clicked, start lightbox. - Lightbox.prototype.enable = function() { - var self = this; - $('body').on('click', 'a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]', function(event) { - self.start($(event.currentTarget)); - return false; - }); - }; - - // Build html for the lightbox and the overlay. - // Attach event handlers to the new DOM elements. click click click - Lightbox.prototype.build = function() { - var self = this; - $('<div id="lightboxOverlay" class="lightboxOverlay"></div><div id="lightbox" class="lightbox"><div class="lb-outerContainer"><div class="lb-container"><img class="lb-image" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" /><div class="lb-nav"><a class="lb-prev" href="" ></a><a class="lb-next" href="" ></a></div><div class="lb-loader"><a class="lb-cancel"></a></div></div></div><div class="lb-dataContainer"><div class="lb-data"><div class="lb-details"><span class="lb-caption"></span><span class="lb-number"></span></div><div class="lb-closeContainer"><a class="lb-close"></a></div></div></div></div>').appendTo($('body')); - - // Cache jQuery objects - this.$lightbox = $('#lightbox'); - this.$overlay = $('#lightboxOverlay'); - this.$outerContainer = this.$lightbox.find('.lb-outerContainer'); - this.$container = this.$lightbox.find('.lb-container'); - - // Store css values for future lookup - this.containerTopPadding = parseInt(this.$container.css('padding-top'), 10); - this.containerRightPadding = parseInt(this.$container.css('padding-right'), 10); - this.containerBottomPadding = parseInt(this.$container.css('padding-bottom'), 10); - this.containerLeftPadding = parseInt(this.$container.css('padding-left'), 10); - - // Attach event handlers to the newly minted DOM elements - this.$overlay.hide().on('click', function() { - self.end(); - return false; - }); - - this.$lightbox.hide().on('click', function(event) { - if ($(event.target).attr('id') === 'lightbox') { - self.end(); - } - return false; - }); - - this.$outerContainer.on('click', function(event) { - if ($(event.target).attr('id') === 'lightbox') { - self.end(); - } - return false; - }); - - this.$lightbox.find('.lb-prev').on('click', function() { - if (self.currentImageIndex === 0) { - self.changeImage(self.album.length - 1); - } else { - self.changeImage(self.currentImageIndex - 1); - } - return false; - }); - - this.$lightbox.find('.lb-next').on('click', function() { - if (self.currentImageIndex === self.album.length - 1) { - self.changeImage(0); - } else { - self.changeImage(self.currentImageIndex + 1); - } - return false; - }); - - this.$lightbox.find('.lb-loader, .lb-close').on('click', function() { - self.end(); - return false; - }); - }; - - // Show overlay and lightbox. If the image is part of a set, add siblings to album array. - Lightbox.prototype.start = function($link) { - var self = this; - var $window = $(window); - - $window.on('resize', $.proxy(this.sizeOverlay, this)); - - $('select, object, embed').css({ - visibility: 'hidden' - }); - - this.sizeOverlay(); - - this.album = []; - var imageNumber = 0; - - function addToAlbum($link) { - self.album.push({ - link: $link.attr('href'), - title: $link.attr('data-title') || $link.attr('title') - }); - } - - // Support both data-lightbox attribute and rel attribute implementations - var dataLightboxValue = $link.attr('data-lightbox'); - var $links; - - if (dataLightboxValue) { - $links = $($link.prop('tagName') + '[data-lightbox="' + dataLightboxValue + '"]'); - for (var i = 0; i < $links.length; i = ++i) { - addToAlbum($($links[i])); - if ($links[i] === $link[0]) { - imageNumber = i; - } - } - } else { - if ($link.attr('rel') === 'lightbox') { - // If image is not part of a set - addToAlbum($link); - } else { - // If image is part of a set - $links = $($link.prop('tagName') + '[rel="' + $link.attr('rel') + '"]'); - for (var j = 0; j < $links.length; j = ++j) { - addToAlbum($($links[j])); - if ($links[j] === $link[0]) { - imageNumber = j; - } - } - } - } - - // Position Lightbox - var top = $window.scrollTop() + this.options.positionFromTop; - var left = $window.scrollLeft(); - this.$lightbox.css({ - top: top + 'px', - left: left + 'px' - }).fadeIn(this.options.fadeDuration); - - // Disable scrolling of the page while open - if (this.options.disableScrolling) { - $('body').addClass('lb-disable-scrolling'); - } - - this.changeImage(imageNumber); - }; - - // Hide most UI elements in preparation for the animated resizing of the lightbox. - Lightbox.prototype.changeImage = function(imageNumber) { - var self = this; - - this.disableKeyboardNav(); - var $image = this.$lightbox.find('.lb-image'); - - this.$overlay.fadeIn(this.options.fadeDuration); - - $('.lb-loader').fadeIn('slow'); - this.$lightbox.find('.lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption').hide(); - - this.$outerContainer.addClass('animating'); - - // When image to show is preloaded, we send the width and height to sizeContainer() - var preloader = new Image(); - preloader.onload = function() { - var $preloader; - var imageHeight; - var imageWidth; - var maxImageHeight; - var maxImageWidth; - var windowHeight; - var windowWidth; - - $image.attr('src', self.album[imageNumber].link); - - $preloader = $(preloader); - - $image.width(preloader.width); - $image.height(preloader.height); - - if (self.options.fitImagesInViewport) { - // Fit image inside the viewport. - // Take into account the border around the image and an additional 10px gutter on each side. - - windowWidth = $(window).width(); - windowHeight = $(window).height(); - maxImageWidth = windowWidth - self.containerLeftPadding - self.containerRightPadding - 20; - maxImageHeight = windowHeight - self.containerTopPadding - self.containerBottomPadding - 120; - - // Check if image size is larger then maxWidth|maxHeight in settings - if (self.options.maxWidth && self.options.maxWidth < maxImageWidth) { - maxImageWidth = self.options.maxWidth; - } - if (self.options.maxHeight && self.options.maxHeight < maxImageWidth) { - maxImageHeight = self.options.maxHeight; - } - - // Is there a fitting issue? - if ((preloader.width > maxImageWidth) || (preloader.height > maxImageHeight)) { - if ((preloader.width / maxImageWidth) > (preloader.height / maxImageHeight)) { - imageWidth = maxImageWidth; - imageHeight = parseInt(preloader.height / (preloader.width / imageWidth), 10); - $image.width(imageWidth); - $image.height(imageHeight); - } else { - imageHeight = maxImageHeight; - imageWidth = parseInt(preloader.width / (preloader.height / imageHeight), 10); - $image.width(imageWidth); - $image.height(imageHeight); - } - } - } - self.sizeContainer($image.width(), $image.height()); - }; - - preloader.src = this.album[imageNumber].link; - this.currentImageIndex = imageNumber; - }; - - // Stretch overlay to fit the viewport - Lightbox.prototype.sizeOverlay = function() { - this.$overlay - .width($(document).width()) - .height($(document).height()); - }; - - // Animate the size of the lightbox to fit the image we are showing - Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight) { - var self = this; - - var oldWidth = this.$outerContainer.outerWidth(); - var oldHeight = this.$outerContainer.outerHeight(); - var newWidth = imageWidth + this.containerLeftPadding + this.containerRightPadding; - var newHeight = imageHeight + this.containerTopPadding + this.containerBottomPadding; - - function postResize() { - self.$lightbox.find('.lb-dataContainer').width(newWidth); - self.$lightbox.find('.lb-prevLink').height(newHeight); - self.$lightbox.find('.lb-nextLink').height(newHeight); - self.showImage(); - } - - if (oldWidth !== newWidth || oldHeight !== newHeight) { - this.$outerContainer.animate({ - width: newWidth, - height: newHeight - }, this.options.resizeDuration, 'swing', function() { - postResize(); - }); - } else { - postResize(); - } - }; - - // Display the image and its details and begin preload neighboring images. - Lightbox.prototype.showImage = function() { - this.$lightbox.find('.lb-loader').stop(true).hide(); - this.$lightbox.find('.lb-image').fadeIn('slow'); - - this.updateNav(); - this.updateDetails(); - this.preloadNeighboringImages(); - this.enableKeyboardNav(); - }; - - // Display previous and next navigation if appropriate. - Lightbox.prototype.updateNav = function() { - // Check to see if the browser supports touch events. If so, we take the conservative approach - // and assume that mouse hover events are not supported and always show prev/next navigation - // arrows in image sets. - var alwaysShowNav = false; - try { - document.createEvent('TouchEvent'); - alwaysShowNav = (this.options.alwaysShowNavOnTouchDevices) ? true : false; - } catch (e) {} - - this.$lightbox.find('.lb-nav').show(); - - if (this.album.length > 1) { - if (this.options.wrapAround) { - if (alwaysShowNav) { - this.$lightbox.find('.lb-prev, .lb-next').css('opacity', '1'); - } - this.$lightbox.find('.lb-prev, .lb-next').show(); - } else { - if (this.currentImageIndex > 0) { - this.$lightbox.find('.lb-prev').show(); - if (alwaysShowNav) { - this.$lightbox.find('.lb-prev').css('opacity', '1'); - } - } - if (this.currentImageIndex < this.album.length - 1) { - this.$lightbox.find('.lb-next').show(); - if (alwaysShowNav) { - this.$lightbox.find('.lb-next').css('opacity', '1'); - } - } - } - } - }; - - // Display caption, image number, and closing button. - Lightbox.prototype.updateDetails = function() { - var self = this; - - // Enable anchor clicks in the injected caption html. - // Thanks Nate Wright for the fix. @https://github.com/NateWr - if (typeof this.album[this.currentImageIndex].title !== 'undefined' && - this.album[this.currentImageIndex].title !== '') { - this.$lightbox.find('.lb-caption') - .html(this.album[this.currentImageIndex].title) - .fadeIn('fast') - .find('a').on('click', function(event) { - if ($(this).attr('target') !== undefined) { - window.open($(this).attr('href'), $(this).attr('target')); - } else { - location.href = $(this).attr('href'); - } - }); - } - - if (this.album.length > 1 && this.options.showImageNumberLabel) { - var labelText = this.imageCountLabel(this.currentImageIndex + 1, this.album.length); - this.$lightbox.find('.lb-number').text(labelText).fadeIn('fast'); - } else { - this.$lightbox.find('.lb-number').hide(); - } - - this.$outerContainer.removeClass('animating'); - - this.$lightbox.find('.lb-dataContainer').fadeIn(this.options.resizeDuration, function() { - return self.sizeOverlay(); - }); - }; - - // Preload previous and next images in set. - Lightbox.prototype.preloadNeighboringImages = function() { - if (this.album.length > this.currentImageIndex + 1) { - var preloadNext = new Image(); - preloadNext.src = this.album[this.currentImageIndex + 1].link; - } - if (this.currentImageIndex > 0) { - var preloadPrev = new Image(); - preloadPrev.src = this.album[this.currentImageIndex - 1].link; - } - }; - - Lightbox.prototype.enableKeyboardNav = function() { - $(document).on('keyup.keyboard', $.proxy(this.keyboardAction, this)); - }; - - Lightbox.prototype.disableKeyboardNav = function() { - $(document).off('.keyboard'); - }; - - Lightbox.prototype.keyboardAction = function(event) { - var KEYCODE_ESC = 27; - var KEYCODE_LEFTARROW = 37; - var KEYCODE_RIGHTARROW = 39; - - var keycode = event.keyCode; - var key = String.fromCharCode(keycode).toLowerCase(); - if (keycode === KEYCODE_ESC || key.match(/x|o|c/)) { - this.end(); - } else if (key === 'p' || keycode === KEYCODE_LEFTARROW) { - if (this.currentImageIndex !== 0) { - this.changeImage(this.currentImageIndex - 1); - } else if (this.options.wrapAround && this.album.length > 1) { - this.changeImage(this.album.length - 1); - } - } else if (key === 'n' || keycode === KEYCODE_RIGHTARROW) { - if (this.currentImageIndex !== this.album.length - 1) { - this.changeImage(this.currentImageIndex + 1); - } else if (this.options.wrapAround && this.album.length > 1) { - this.changeImage(0); - } - } - }; - - // Closing time. :-( - Lightbox.prototype.end = function() { - this.disableKeyboardNav(); - $(window).off('resize', this.sizeOverlay); - this.$lightbox.fadeOut(this.options.fadeDuration); - this.$overlay.fadeOut(this.options.fadeDuration); - $('select, object, embed').css({ - visibility: 'visible' - }); - if (this.options.disableScrolling) { - $('body').removeClass('lb-disable-scrolling'); - } - }; - - return new Lightbox(); -})); diff --git a/theme/static/theme/lightbox2/dist/js/lightbox.min.map b/theme/static/theme/lightbox2/dist/js/lightbox.min.map deleted file mode 100644 index b4356408..00000000 --- a/theme/static/theme/lightbox2/dist/js/lightbox.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["../../src/js/lightbox.js"],"names":["root","factory","define","amd","exports","module","require","lightbox","jQuery","this","$","Lightbox","options","album","currentImageIndex","init","extend","constructor","defaults","option","albumLabel","alwaysShowNavOnTouchDevices","fadeDuration","fitImagesInViewport","positionFromTop","resizeDuration","showImageNumberLabel","wrapAround","disableScrolling","prototype","imageCountLabel","currentImageNum","totalImages","replace","enable","build","self","on","event","start","currentTarget","appendTo","$lightbox","$overlay","$outerContainer","find","$container","containerTopPadding","parseInt","css","containerRightPadding","containerBottomPadding","containerLeftPadding","hide","end","target","attr","changeImage","length","$link","addToAlbum","push","link","title","$window","window","proxy","sizeOverlay","visibility","$links","imageNumber","dataLightboxValue","prop","i","j","top","scrollTop","left","scrollLeft","fadeIn","addClass","disableKeyboardNav","$image","preloader","Image","onload","$preloader","imageHeight","imageWidth","maxImageHeight","maxImageWidth","windowHeight","windowWidth","width","height","maxWidth","maxHeight","sizeContainer","src","document","postResize","newWidth","newHeight","showImage","oldWidth","outerWidth","oldHeight","outerHeight","animate","stop","updateNav","updateDetails","preloadNeighboringImages","enableKeyboardNav","alwaysShowNav","createEvent","e","show","html","undefined","open","location","href","labelText","text","removeClass","preloadNext","preloadPrev","keyboardAction","off","KEYCODE_ESC","KEYCODE_LEFTARROW","KEYCODE_RIGHTARROW","keycode","keyCode","key","String","fromCharCode","toLowerCase","match","fadeOut"],"mappings":"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","file":"lightbox.min.js"} \ No newline at end of file diff --git a/theme/static/theme/lightbox2/examples/index.html b/theme/static/theme/lightbox2/examples/index.html deleted file mode 100644 index 1312c7f4..00000000 --- a/theme/static/theme/lightbox2/examples/index.html +++ /dev/null @@ -1,37 +0,0 @@ -<!DOCTYPE html> -<html lang="en-us"> -<head> - <meta charset="utf-8"> - <title>Lightbox Example</title> - <link rel="stylesheet" href="../dist/css/lightbox.min.css"> -</head> -<body> - - <section> - <h3>Two Individual Images</h3> - <div> - <a class="example-image-link" href="http://lokeshdhakar.com/projects/lightbox2/images/image-1.jpg" data-lightbox="example-1"><img class="example-image" src="http://lokeshdhakar.com/projects/lightbox2/images/thumb-1.jpg" alt="image-1" /></a> - <a class="example-image-link" href="http://lokeshdhakar.com/projects/lightbox2/images/image-2.jpg" data-lightbox="example-2" data-title="Optional caption."><img class="example-image" src="http://lokeshdhakar.com/projects/lightbox2/images/thumb-2.jpg" alt="image-1"/></a> - </div> - - <hr /> - - <h3>A Four Image Set</h3> - <div> - <a class="example-image-link" href="http://lokeshdhakar.com/projects/lightbox2/images/image-3.jpg" data-lightbox="example-set" data-title="Click the right half of the image to move forward."><img class="example-image" src="http://lokeshdhakar.com/projects/lightbox2/images/thumb-3.jpg" alt=""/></a> - <a class="example-image-link" href="http://lokeshdhakar.com/projects/lightbox2/images/image-4.jpg" data-lightbox="example-set" data-title="Or press the right arrow on your keyboard."><img class="example-image" src="http://lokeshdhakar.com/projects/lightbox2/images/thumb-4.jpg" alt="" /></a> - <a class="example-image-link" href="http://lokeshdhakar.com/projects/lightbox2/images/image-5.jpg" data-lightbox="example-set" data-title="The next image in the set is preloaded as you're viewing."><img class="example-image" src="http://lokeshdhakar.com/projects/lightbox2/images/thumb-5.jpg" alt="" /></a> - <a class="example-image-link" href="http://lokeshdhakar.com/projects/lightbox2/images/image-6.jpg" data-lightbox="example-set" data-title="Click anywhere outside the image or the X to the right to close."><img class="example-image" src="http://lokeshdhakar.com/projects/lightbox2/images/thumb-6.jpg" alt="" /></a> - </div> - </section> - - <section> - <p> - For more information, visit <a href="http://lokeshdhakar.com/projects/lightbox2/">http://lokeshdhakar.com/projects/lightbox2/</a> - </p> - </section> - - <script src="../dist/js/lightbox-plus-jquery.min.js"></script> - -</body> -</html> diff --git a/theme/static/theme/lightbox2/package.json b/theme/static/theme/lightbox2/package.json deleted file mode 100644 index 2bc806d0..00000000 --- a/theme/static/theme/lightbox2/package.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "name": "lightbox2", - "version": "2.8.2", - "author": "Lokesh Dhakar <lokesh.dhakar@gmail.com>", - "description": "The original Lightbox script. Uses jQuery.", - "keywords": [ - "lightbox", - "lightbox2", - "overlay", - "gallery", - "slideshow", - "images" - ], - "homepage": "http://lokeshdhakar.com/projects/lightbox2/", - "main": "./dist/js/lightbox.js", - "repository": { - "type": "git", - "url": "https://github.com/lokesh/lightbox2.git" - }, - "bugs": { - "url": "https://github.com/lokesh/lightbox2/issues" - }, - "licenses": [ - { - "type": "MIT", - "url": "https://raw.githubusercontent.com/lokesh/lightbox2/master/LICENSE" - } - ], - "devDependencies": { - "grunt": "^0.4.5", - "grunt-contrib-concat": "^0.5.1", - "grunt-contrib-connect": "^0.7.1", - "grunt-contrib-copy": "^0.8.0", - "grunt-contrib-cssmin": "^0.12.3", - "grunt-contrib-jshint": "^0.11.2", - "grunt-contrib-uglify": "~0.4.0", - "grunt-contrib-watch": "^0.5.3", - "grunt-jscs": "^1.8.0" - } -} diff --git a/theme/static/theme/lightbox2/src/css/lightbox.css b/theme/static/theme/lightbox2/src/css/lightbox.css deleted file mode 100644 index 56d3cfba..00000000 --- a/theme/static/theme/lightbox2/src/css/lightbox.css +++ /dev/null @@ -1,206 +0,0 @@ -/* Preload images */ -body:after { - content: url(../images/close.png) url(../images/loading.gif) url(../images/prev.png) url(../images/next.png); - display: none; -} - -body.lb-disable-scrolling { - overflow: hidden; -} - -.lightboxOverlay { - position: absolute; - top: 0; - left: 0; - z-index: 9999; - background-color: black; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80); - opacity: 0.8; - display: none; -} - -.lightbox { - position: absolute; - left: 0; - width: 100%; - z-index: 10000; - text-align: center; - line-height: 0; - font-weight: normal; -} - -.lightbox .lb-image { - display: block; - height: auto; - max-width: inherit; - border-radius: 3px; -} - -.lightbox a img { - border: none; -} - -.lb-outerContainer { - position: relative; - background-color: white; - *zoom: 1; - width: 250px; - height: 250px; - margin: 0 auto; - border-radius: 4px; -} - -.lb-outerContainer:after { - content: ""; - display: table; - clear: both; -} - -.lb-container { - padding: 4px; -} - -.lb-loader { - position: absolute; - top: 43%; - left: 0; - height: 25%; - width: 100%; - text-align: center; - line-height: 0; -} - -.lb-cancel { - display: block; - width: 32px; - height: 32px; - margin: 0 auto; - background: url(../images/loading.gif) no-repeat; -} - -.lb-nav { - position: absolute; - top: 0; - left: 0; - height: 100%; - width: 100%; - z-index: 10; -} - -.lb-container > .nav { - left: 0; -} - -.lb-nav a { - outline: none; - background-image: url('data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=='); -} - -.lb-prev, .lb-next { - height: 100%; - cursor: pointer; - display: block; -} - -.lb-nav a.lb-prev { - width: 34%; - left: 0; - float: left; - background: url(../images/prev.png) left 48% no-repeat; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); - opacity: 0; - -webkit-transition: opacity 0.6s; - -moz-transition: opacity 0.6s; - -o-transition: opacity 0.6s; - transition: opacity 0.6s; -} - -.lb-nav a.lb-prev:hover { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); - opacity: 1; -} - -.lb-nav a.lb-next { - width: 64%; - right: 0; - float: right; - background: url(../images/next.png) right 48% no-repeat; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0); - opacity: 0; - -webkit-transition: opacity 0.6s; - -moz-transition: opacity 0.6s; - -o-transition: opacity 0.6s; - transition: opacity 0.6s; -} - -.lb-nav a.lb-next:hover { - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); - opacity: 1; -} - -.lb-dataContainer { - margin: 0 auto; - padding-top: 5px; - *zoom: 1; - width: 100%; - -moz-border-radius-bottomleft: 4px; - -webkit-border-bottom-left-radius: 4px; - border-bottom-left-radius: 4px; - -moz-border-radius-bottomright: 4px; - -webkit-border-bottom-right-radius: 4px; - border-bottom-right-radius: 4px; -} - -.lb-dataContainer:after { - content: ""; - display: table; - clear: both; -} - -.lb-data { - padding: 0 4px; - color: #ccc; -} - -.lb-data .lb-details { - width: 85%; - float: left; - text-align: left; - line-height: 1.1em; -} - -.lb-data .lb-caption { - font-size: 13px; - font-weight: bold; - line-height: 1em; -} - -.lb-data .lb-number { - display: block; - clear: left; - padding-bottom: 1em; - font-size: 12px; - color: #999999; -} - -.lb-data .lb-close { - display: block; - float: right; - width: 30px; - height: 30px; - background: url(../images/close.png) top right no-repeat; - text-align: right; - outline: none; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70); - opacity: 0.7; - -webkit-transition: opacity 0.2s; - -moz-transition: opacity 0.2s; - -o-transition: opacity 0.2s; - transition: opacity 0.2s; -} - -.lb-data .lb-close:hover { - cursor: pointer; - filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100); - opacity: 1; -} diff --git a/theme/static/theme/lightbox2/src/images/close.png b/theme/static/theme/lightbox2/src/images/close.png deleted file mode 100644 index 20baa1db5fdf9e22655a0f851c4401d36b9e7ef9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 280 zcmeAS@N?(olHy`uVBq!ia0vp^(jd&i3?z4Pv7`ejn*g5>*Z=?j1DSvS{%vY%YG`Nx zvLV3R+Z)1I1qQoz?eg;S^6>Bg3hv&$d*{xbK#iaC4$A=f!X-g|!3<viR<C9d^Pa}T zz5l?;sZ&Kyo#brmssTz@c)B=-RK(R@^5kn!5O4{U5)GX5`(L?e=j`)~vRL;_FbJ8k zt3@yT#pJrkH(UDNY}k5n&(Vn)&N`plx9tp9**SgJq@pivD*cvQANDU;c&<@JsnbJg zQipZN3k3y^3iE1*BzX>vbDHnnh5Xg#OL;K8su!;fw4MC7hH<+BPou~5EnOggc)I$z JtaD0e0ssdsYEA$E diff --git a/theme/static/theme/lightbox2/src/images/loading.gif b/theme/static/theme/lightbox2/src/images/loading.gif deleted file mode 100644 index 5087c2a644223a95984baefdb74f39a287fdfd9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8476 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 RnWV*E-bE@bR5tKG{|l0mV6p%J diff --git a/theme/static/theme/lightbox2/src/images/next.png b/theme/static/theme/lightbox2/src/images/next.png deleted file mode 100644 index 08365ac84d29be71b6b8f4481cdbbcae54a36033..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1350 zcmV-M1-bf(P)<h;3K|Lk000e1NJLTq001%o001or1^@s6?7ukw000FINkl<Zcmd6s zOH5o<7{|RccZMr4&|(p1a2_pT&|0Teu^ONQ&VW*CYNIW*S{HU<h-s{vxa1W;7rcp) z1QV9v#)wEk7n+zx!XsgW3PTf3Fzz5gcq3)}Px6s`x$z#-q&cT2`2{kZS^V;S|L>f8 zdBn6d!UpU>C+xsRJkS-7#~%ph#U&iTNk2*E;TO?Z1q_f1j)KRCBftd=+M_*;A{yZU z$shxGK`uB+1nIM5AcgkYxR7!Y)=H0(L;#%Dbv<er#v9-get#98<&)48R54vFqfR6h zJPA&RLZR!ElaqILcX#);x3~WtA0MC0&d$Dpznufm05@>4%BUA%!9D_VoK9zCVPRo5 zZdy}QQ-An;zMI%n44!2&PLfeBqLWAl$U`f=zO}Wr8~>k$D$V=-{tvP56%Ya*kj7<H zS45{N6@*B|=H}*l++s~nPyZPR1U|vuQYOROOj9l5qM#R4S68>JtgNhB$;{2o{p0m| zKgHfMCL<UCa>JesvcM@2Ei5ej95R-bnVp^e+vD+k%qk-o0P@d~bl?RqfbwWG+P1W` zv|%MPHa0ek0q_xJ<`i(V%4n)YY#@oImk+!M%FD{i+Lo7>x2$9^0PZ3)x3IT_rkRJ! zsJd&}O)_UeMQLei=ic7lzLg9{^IfV;lw<@0K#qt;GEQnUKgnDuE-vm^U0q$XlEI-l zmz9-ui_4e?fIJZ<!zvS?HmfKoC}=^Otqa;L=61W8jA;PK6rsg4bChJxg7X*v?V<sI z%EYM6N(2Kyj)+BO{8X9OFaX+7nN2I1iHV7M3;?<T2nK*G5n48u86U_8=fmM}>)P7d zhM>*nQ5oK5+2#QtTZ9h)KAJ0VXtrVitP3g=V*?<>+Kgo6if|d;X8AM#66eguAp_th z_J+YzAd{Yb>_C$(!e#gXco|%ZL?T}<E-s2P^BXer9<`W{T1;0Z!Uups&+>Vo4BWsp z`#KhjS)Ma9Gc&&<SMS>G_T!W{C$Om$v9Y}5(3pK6d^RvJ@K;>0`uqDk9S%o;zN=J3 z13LBi<8)4xgAeNJ>VDnX*|ECD?DzEae3O)v6wx&8pdt>X86k;dAQu#YYqhntKZ+{R z+1WXSeHXzQcBZHZJ5_?RK@x@Fa!pOm_acd|uC7t+yGqhIAOj>x7hw{-66e5`hK7dQ zB8j%Pwh?6FKq8O6Por1jIl?58nM4>=HZ?Vk2pslXTU&42Y_>}5Euiml2~Fk|g-c|z zOk8ekY#bFybaZt5fPGa=A`>KY30WfMU<VH}QD0v#Y$r%0GI5QhNy1zS2_hB}Mc^$2 zd+4xWlSCK<StWF-&m%n8Od<@fw6wJRB$7yELf7>wk`7vBLWYPr6G2c6s@mJze?CNF zR2*!XZ&7$9?myU9#le;<;-p*c3Gfnl6Tu!n<eW%k;%#xT<-ci60UmG$H`I%`c6=+6 z=<DmdqiNc8YQH=tLBUq{?l&Fepw~-qiyaY3^!E1tVi?9dbi(I}Gokq33W5`Rl%`W5 z2nsSGzamT|2$2gGBKx?-j$luvSwj4JR84E0Kt76whldk4+IvjmUUzr*cZu`l{w36e z-3?B<T&_rSbMqHNLqk)8gM(A}{VNDo&@+0j;KWug!XIC=!P6iFo&(R*&r`q;G6ca^ zDq?=AkVcQOUT~c7(r4+w5KE{Rv9aJAAQhw$DZmi?n?Sk9e}Z2lG@JNbrT_o{07*qo IM6N<$g3XU*=l}o! diff --git a/theme/static/theme/lightbox2/src/images/prev.png b/theme/static/theme/lightbox2/src/images/prev.png deleted file mode 100644 index 329fa98602d277fa342e88dd2e00f963e33cf54d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1360 zcmV-W1+V&vP)<h;3K|Lk000e1NJLTq001%o001or1^@s6?7ukw000FSNkl<Zcmd6s zTTEP46ox%BXNFVCa4Qr6=Yobo6~-H_4Gc3d16rx6jamv?AMAr6rfJp0M{WW1fjcph zV8SE#Vnhm{51N=p0+8^6I!sM8!T1IN!W}8&Kgrt7WQViI7(JVve1RNRntrVHuXBd; zP$UxhPxv2>i7*3|Fw-@KcyLa-2$Qe?D}5!IlP{tG6==W)Qo$J_4J6UeScjC8CZYfn zuz=Gb1K5EZJW1r!wRDh3wMrD(BD{nOlEA|xP^_xzi<+ig0k7iwAg(<PTqJXfjoL{O zVV$snZ15B)%gxQbF*7qWx3{<V*TKQT;oRKZU603eon#&%X{jQ-gf&K@2>2Zi$Ibcq z`ClU3SzcZaS*_LpY90frYyrp?VG_w82Y5h*)9Jj0-~PSGF=uyo_W)z|3hD|#I*F*V zL=<kEm_((^<@#`8Vd1xk&e_@7*@8$lWhf1(vO2;Cn@LpJ?e>qBmX`k1lUQG0->9#z z??7z{1>Po6gbOxxA}1&3gHR~+hd^Shw6ydS)CNHz$O4J7!mhARkVGM<K(ODRo}Lcr zNvy7}ZU=+GF4SHG&jUM1k#!$YxN#~1<;cWs1p8M#iM6%0-Kwf8CUFipXj>%!laV5P zu$e?K+6k;!U5UfP!=uW|%3jn~gY%q(*??y)L9j_8D=X_ZZgxw05*r&En|{B)2ep?- z!b#&~B?-kq5iZyyk)53#9jCBhoVH3zN;;?$=YWgr1W6bmq7&@$=s2Mh;W)wWM(xYs zJV~T+nZPkXL?_r42==Yn+1Y!7PV6AqQHhtR6VBr@VT1@D?A(}ON5@H5VsmqI+voFj zQYVTj*enw!fMc8plVIcIVZlZx!h&E&Z+4w56Kp$i!8S}p0cLOtWP-<m55c|}C)nEv zb{9z$1E(O^hKZ;&QVvjrOuU0m{G=zbva+%h2n0Su?G<o=1)G;JT7*54r<l#=Jk0ys zi;Igt>q&&e;Z1C(FHnC2RDl9;254NcrHQ0kEEd=B@NjQLa7IQ(en;)c;9XG8J}8O9 zZQN*CK#HO$c?k&#fq{X6FY&XZ<3#rN_m7&Intnw6d*C7{1ZOE@Do|vKm}Bl8&w$Il zy}e_i&NMbQev7&~;05_0gJdWp@<b9qI*p1K)b{oDO^IY08XE4P?hQ~%GL#jrGX~#B z*b2^|0DF;{+ODpyNs&xTOUndmuYxkJGbCf62pxr!$p<ASlc}b&vvcCu%+P6TYnw!E z4e-UtBr+L8ML3y6kjZ4gwVs}yZ$vV!t*uiuW-K$AoQ$C&d}o-97t}#Un3?A0=82fh zxWx;=xX&YMOlRCQHg*4C0gR#Ub&}VSF+fC+88`5%s(OtwqkB3!I=-U?;NxUeS+5mD z3qaVJ?(XjIquBy}lHoFAtcYj<)c%VFz;y-~C?Z+_Z{j`^Zvl*>?ltfNcod`os|*o- z0Wg^Y;8zso`q0qO-8hdkU*XC6GCls}fYVZ6EAW{inKDh&-WnVn{2|U$^CYsxo|aSO z{Ownq88;}UZ8k-jIoYojI2o0f0X2APo+O#$L@rS+iOB3oe3`5L{rz9#-@Xsnxj#NW zeg`@6QsCu}R-7k*d~gB(;p+DG_RmL0N9V`J#^&+;r#71{KyP@n<%d1~0!Rl=Pzas{ z&(T*8cmm{dAB*LR2xK%Go3p?U@(4R!OXmMbAzwuN8bYJ-NhXr$n&rVr(fJ!hydyMn S-YhKu0000<MNUMnLSTX^M0dpi diff --git a/theme/static/theme/lightbox2/src/js/lightbox.js b/theme/static/theme/lightbox2/src/js/lightbox.js deleted file mode 100644 index 352bb863..00000000 --- a/theme/static/theme/lightbox2/src/js/lightbox.js +++ /dev/null @@ -1,453 +0,0 @@ -/*! - * Lightbox v2.8.2 - * by Lokesh Dhakar - * - * More info: - * http://lokeshdhakar.com/projects/lightbox2/ - * - * Copyright 2007, 2015 Lokesh Dhakar - * Released under the MIT license - * https://github.com/lokesh/lightbox2/blob/master/LICENSE - */ - -// Uses Node, AMD or browser globals to create a module. -(function (root, factory) { - if (typeof define === 'function' && define.amd) { - // AMD. Register as an anonymous module. - define(['jquery'], factory); - } else if (typeof exports === 'object') { - // Node. Does not work with strict CommonJS, but - // only CommonJS-like environments that support module.exports, - // like Node. - module.exports = factory(require('jquery')); - } else { - // Browser globals (root is window) - root.lightbox = factory(root.jQuery); - } -}(this, function ($) { - - function Lightbox(options) { - this.album = []; - this.currentImageIndex = void 0; - this.init(); - - // options - this.options = $.extend({}, this.constructor.defaults); - this.option(options); - } - - // Descriptions of all options available on the demo site: - // http://lokeshdhakar.com/projects/lightbox2/index.html#options - Lightbox.defaults = { - albumLabel: 'Image %1 of %2', - alwaysShowNavOnTouchDevices: false, - fadeDuration: 500, - fitImagesInViewport: true, - // maxWidth: 800, - // maxHeight: 600, - positionFromTop: 50, - resizeDuration: 700, - showImageNumberLabel: true, - wrapAround: false, - disableScrolling: false - }; - - Lightbox.prototype.option = function(options) { - $.extend(this.options, options); - }; - - Lightbox.prototype.imageCountLabel = function(currentImageNum, totalImages) { - return this.options.albumLabel.replace(/%1/g, currentImageNum).replace(/%2/g, totalImages); - }; - - Lightbox.prototype.init = function() { - this.enable(); - this.build(); - }; - - // Loop through anchors and areamaps looking for either data-lightbox attributes or rel attributes - // that contain 'lightbox'. When these are clicked, start lightbox. - Lightbox.prototype.enable = function() { - var self = this; - $('body').on('click', 'a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]', function(event) { - self.start($(event.currentTarget)); - return false; - }); - }; - - // Build html for the lightbox and the overlay. - // Attach event handlers to the new DOM elements. click click click - Lightbox.prototype.build = function() { - var self = this; - $('<div id="lightboxOverlay" class="lightboxOverlay"></div><div id="lightbox" class="lightbox"><div class="lb-outerContainer"><div class="lb-container"><img class="lb-image" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" /><div class="lb-nav"><a class="lb-prev" href="" ></a><a class="lb-next" href="" ></a></div><div class="lb-loader"><a class="lb-cancel"></a></div></div></div><div class="lb-dataContainer"><div class="lb-data"><div class="lb-details"><span class="lb-caption"></span><span class="lb-number"></span></div><div class="lb-closeContainer"><a class="lb-close"></a></div></div></div></div>').appendTo($('body')); - - // Cache jQuery objects - this.$lightbox = $('#lightbox'); - this.$overlay = $('#lightboxOverlay'); - this.$outerContainer = this.$lightbox.find('.lb-outerContainer'); - this.$container = this.$lightbox.find('.lb-container'); - - // Store css values for future lookup - this.containerTopPadding = parseInt(this.$container.css('padding-top'), 10); - this.containerRightPadding = parseInt(this.$container.css('padding-right'), 10); - this.containerBottomPadding = parseInt(this.$container.css('padding-bottom'), 10); - this.containerLeftPadding = parseInt(this.$container.css('padding-left'), 10); - - // Attach event handlers to the newly minted DOM elements - this.$overlay.hide().on('click', function() { - self.end(); - return false; - }); - - this.$lightbox.hide().on('click', function(event) { - if ($(event.target).attr('id') === 'lightbox') { - self.end(); - } - return false; - }); - - this.$outerContainer.on('click', function(event) { - if ($(event.target).attr('id') === 'lightbox') { - self.end(); - } - return false; - }); - - this.$lightbox.find('.lb-prev').on('click', function() { - if (self.currentImageIndex === 0) { - self.changeImage(self.album.length - 1); - } else { - self.changeImage(self.currentImageIndex - 1); - } - return false; - }); - - this.$lightbox.find('.lb-next').on('click', function() { - if (self.currentImageIndex === self.album.length - 1) { - self.changeImage(0); - } else { - self.changeImage(self.currentImageIndex + 1); - } - return false; - }); - - this.$lightbox.find('.lb-loader, .lb-close').on('click', function() { - self.end(); - return false; - }); - }; - - // Show overlay and lightbox. If the image is part of a set, add siblings to album array. - Lightbox.prototype.start = function($link) { - var self = this; - var $window = $(window); - - $window.on('resize', $.proxy(this.sizeOverlay, this)); - - $('select, object, embed').css({ - visibility: 'hidden' - }); - - this.sizeOverlay(); - - this.album = []; - var imageNumber = 0; - - function addToAlbum($link) { - self.album.push({ - link: $link.attr('href'), - title: $link.attr('data-title') || $link.attr('title') - }); - } - - // Support both data-lightbox attribute and rel attribute implementations - var dataLightboxValue = $link.attr('data-lightbox'); - var $links; - - if (dataLightboxValue) { - $links = $($link.prop('tagName') + '[data-lightbox="' + dataLightboxValue + '"]'); - for (var i = 0; i < $links.length; i = ++i) { - addToAlbum($($links[i])); - if ($links[i] === $link[0]) { - imageNumber = i; - } - } - } else { - if ($link.attr('rel') === 'lightbox') { - // If image is not part of a set - addToAlbum($link); - } else { - // If image is part of a set - $links = $($link.prop('tagName') + '[rel="' + $link.attr('rel') + '"]'); - for (var j = 0; j < $links.length; j = ++j) { - addToAlbum($($links[j])); - if ($links[j] === $link[0]) { - imageNumber = j; - } - } - } - } - - // Position Lightbox - var top = $window.scrollTop() + this.options.positionFromTop; - var left = $window.scrollLeft(); - this.$lightbox.css({ - top: top + 'px', - left: left + 'px' - }).fadeIn(this.options.fadeDuration); - - // Disable scrolling of the page while open - if (this.options.disableScrolling) { - $('body').addClass('lb-disable-scrolling'); - } - - this.changeImage(imageNumber); - }; - - // Hide most UI elements in preparation for the animated resizing of the lightbox. - Lightbox.prototype.changeImage = function(imageNumber) { - var self = this; - - this.disableKeyboardNav(); - var $image = this.$lightbox.find('.lb-image'); - - this.$overlay.fadeIn(this.options.fadeDuration); - - $('.lb-loader').fadeIn('slow'); - this.$lightbox.find('.lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption').hide(); - - this.$outerContainer.addClass('animating'); - - // When image to show is preloaded, we send the width and height to sizeContainer() - var preloader = new Image(); - preloader.onload = function() { - var $preloader; - var imageHeight; - var imageWidth; - var maxImageHeight; - var maxImageWidth; - var windowHeight; - var windowWidth; - - $image.attr('src', self.album[imageNumber].link); - - $preloader = $(preloader); - - $image.width(preloader.width); - $image.height(preloader.height); - - if (self.options.fitImagesInViewport) { - // Fit image inside the viewport. - // Take into account the border around the image and an additional 10px gutter on each side. - - windowWidth = $(window).width(); - windowHeight = $(window).height(); - maxImageWidth = windowWidth - self.containerLeftPadding - self.containerRightPadding - 20; - maxImageHeight = windowHeight - self.containerTopPadding - self.containerBottomPadding - 120; - - // Check if image size is larger then maxWidth|maxHeight in settings - if (self.options.maxWidth && self.options.maxWidth < maxImageWidth) { - maxImageWidth = self.options.maxWidth; - } - if (self.options.maxHeight && self.options.maxHeight < maxImageWidth) { - maxImageHeight = self.options.maxHeight; - } - - // Is there a fitting issue? - if ((preloader.width > maxImageWidth) || (preloader.height > maxImageHeight)) { - if ((preloader.width / maxImageWidth) > (preloader.height / maxImageHeight)) { - imageWidth = maxImageWidth; - imageHeight = parseInt(preloader.height / (preloader.width / imageWidth), 10); - $image.width(imageWidth); - $image.height(imageHeight); - } else { - imageHeight = maxImageHeight; - imageWidth = parseInt(preloader.width / (preloader.height / imageHeight), 10); - $image.width(imageWidth); - $image.height(imageHeight); - } - } - } - self.sizeContainer($image.width(), $image.height()); - }; - - preloader.src = this.album[imageNumber].link; - this.currentImageIndex = imageNumber; - }; - - // Stretch overlay to fit the viewport - Lightbox.prototype.sizeOverlay = function() { - this.$overlay - .width($(document).width()) - .height($(document).height()); - }; - - // Animate the size of the lightbox to fit the image we are showing - Lightbox.prototype.sizeContainer = function(imageWidth, imageHeight) { - var self = this; - - var oldWidth = this.$outerContainer.outerWidth(); - var oldHeight = this.$outerContainer.outerHeight(); - var newWidth = imageWidth + this.containerLeftPadding + this.containerRightPadding; - var newHeight = imageHeight + this.containerTopPadding + this.containerBottomPadding; - - function postResize() { - self.$lightbox.find('.lb-dataContainer').width(newWidth); - self.$lightbox.find('.lb-prevLink').height(newHeight); - self.$lightbox.find('.lb-nextLink').height(newHeight); - self.showImage(); - } - - if (oldWidth !== newWidth || oldHeight !== newHeight) { - this.$outerContainer.animate({ - width: newWidth, - height: newHeight - }, this.options.resizeDuration, 'swing', function() { - postResize(); - }); - } else { - postResize(); - } - }; - - // Display the image and its details and begin preload neighboring images. - Lightbox.prototype.showImage = function() { - this.$lightbox.find('.lb-loader').stop(true).hide(); - this.$lightbox.find('.lb-image').fadeIn('slow'); - - this.updateNav(); - this.updateDetails(); - this.preloadNeighboringImages(); - this.enableKeyboardNav(); - }; - - // Display previous and next navigation if appropriate. - Lightbox.prototype.updateNav = function() { - // Check to see if the browser supports touch events. If so, we take the conservative approach - // and assume that mouse hover events are not supported and always show prev/next navigation - // arrows in image sets. - var alwaysShowNav = false; - try { - document.createEvent('TouchEvent'); - alwaysShowNav = (this.options.alwaysShowNavOnTouchDevices) ? true : false; - } catch (e) {} - - this.$lightbox.find('.lb-nav').show(); - - if (this.album.length > 1) { - if (this.options.wrapAround) { - if (alwaysShowNav) { - this.$lightbox.find('.lb-prev, .lb-next').css('opacity', '1'); - } - this.$lightbox.find('.lb-prev, .lb-next').show(); - } else { - if (this.currentImageIndex > 0) { - this.$lightbox.find('.lb-prev').show(); - if (alwaysShowNav) { - this.$lightbox.find('.lb-prev').css('opacity', '1'); - } - } - if (this.currentImageIndex < this.album.length - 1) { - this.$lightbox.find('.lb-next').show(); - if (alwaysShowNav) { - this.$lightbox.find('.lb-next').css('opacity', '1'); - } - } - } - } - }; - - // Display caption, image number, and closing button. - Lightbox.prototype.updateDetails = function() { - var self = this; - - // Enable anchor clicks in the injected caption html. - // Thanks Nate Wright for the fix. @https://github.com/NateWr - if (typeof this.album[this.currentImageIndex].title !== 'undefined' && - this.album[this.currentImageIndex].title !== '') { - this.$lightbox.find('.lb-caption') - .html(this.album[this.currentImageIndex].title) - .fadeIn('fast') - .find('a').on('click', function(event) { - if ($(this).attr('target') !== undefined) { - window.open($(this).attr('href'), $(this).attr('target')); - } else { - location.href = $(this).attr('href'); - } - }); - } - - if (this.album.length > 1 && this.options.showImageNumberLabel) { - var labelText = this.imageCountLabel(this.currentImageIndex + 1, this.album.length); - this.$lightbox.find('.lb-number').text(labelText).fadeIn('fast'); - } else { - this.$lightbox.find('.lb-number').hide(); - } - - this.$outerContainer.removeClass('animating'); - - this.$lightbox.find('.lb-dataContainer').fadeIn(this.options.resizeDuration, function() { - return self.sizeOverlay(); - }); - }; - - // Preload previous and next images in set. - Lightbox.prototype.preloadNeighboringImages = function() { - if (this.album.length > this.currentImageIndex + 1) { - var preloadNext = new Image(); - preloadNext.src = this.album[this.currentImageIndex + 1].link; - } - if (this.currentImageIndex > 0) { - var preloadPrev = new Image(); - preloadPrev.src = this.album[this.currentImageIndex - 1].link; - } - }; - - Lightbox.prototype.enableKeyboardNav = function() { - $(document).on('keyup.keyboard', $.proxy(this.keyboardAction, this)); - }; - - Lightbox.prototype.disableKeyboardNav = function() { - $(document).off('.keyboard'); - }; - - Lightbox.prototype.keyboardAction = function(event) { - var KEYCODE_ESC = 27; - var KEYCODE_LEFTARROW = 37; - var KEYCODE_RIGHTARROW = 39; - - var keycode = event.keyCode; - var key = String.fromCharCode(keycode).toLowerCase(); - if (keycode === KEYCODE_ESC || key.match(/x|o|c/)) { - this.end(); - } else if (key === 'p' || keycode === KEYCODE_LEFTARROW) { - if (this.currentImageIndex !== 0) { - this.changeImage(this.currentImageIndex - 1); - } else if (this.options.wrapAround && this.album.length > 1) { - this.changeImage(this.album.length - 1); - } - } else if (key === 'n' || keycode === KEYCODE_RIGHTARROW) { - if (this.currentImageIndex !== this.album.length - 1) { - this.changeImage(this.currentImageIndex + 1); - } else if (this.options.wrapAround && this.album.length > 1) { - this.changeImage(0); - } - } - }; - - // Closing time. :-( - Lightbox.prototype.end = function() { - this.disableKeyboardNav(); - $(window).off('resize', this.sizeOverlay); - this.$lightbox.fadeOut(this.options.fadeDuration); - this.$overlay.fadeOut(this.options.fadeDuration); - $('select, object, embed').css({ - visibility: 'visible' - }); - if (this.options.disableScrolling) { - $('body').removeClass('lb-disable-scrolling'); - } - }; - - return new Lightbox(); -})); diff --git a/theme/templates/partials/base.html.nunj b/theme/templates/partials/base.html.nunj index 4eb7410f..00825790 100644 --- a/theme/templates/partials/base.html.nunj +++ b/theme/templates/partials/base.html.nunj @@ -149,7 +149,8 @@ <div class="container s6"> <a class="orange-text text-lighten-3" target="_blank" href="https://git.ok1kvk.cz/">Gitlab</a> | <a class="orange-text text-lighten-3" target="_blank" href="https://ok1kvk.cz/forum">Fórum</a> | - <a class="orange-text text-lighten-3" href="/clanek/webkamera/">Webkamera</a> + <a class="orange-text text-lighten-3" href="/clanek/webkamera/">Webkamera</a> | + <a class="orange-text text-lighten-3" href="/clanek/jak-nahlasit-chybu/">Jak nahlásit chybu</a> {% block footerlink %} {% endblock %} <div style="display:inline-block; height: 1em"> diff --git a/theme/templates/partials/search.html.nunj b/theme/templates/partials/search.html.nunj index 41a33f36..47b68e74 100644 --- a/theme/templates/partials/search.html.nunj +++ b/theme/templates/partials/search.html.nunj @@ -17,22 +17,24 @@ <div id="search-overlay" style="display:none"></div> <script> function debounce(func, wait, immediate) { - var timeout; - return function() { - var context = this, args = arguments; - var later = function() { - timeout = null; - if (!immediate) func.apply(context, args); - }; - var callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - if (callNow) func.apply(context, args); - }; + var timeout; + return function() { + var context = this, args = arguments; + var later = function() { + timeout = null; + if (!immediate) func.apply(context, args); + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) func.apply(context, args); + }; }; var myCallback = function() { var doRender = function() { + var csc = new google.search.CustomSearchControl; + .setLinkTarget (google.search.Search.LINK_TARGET_SELF); google.search.cse.element.render({ div: "searchresults", tag: 'searchresults-only', -- GitLab