diff --git a/Docs/conf.json b/Docs/conf.json index dab97499..323aac3a 100644 --- a/Docs/conf.json +++ b/Docs/conf.json @@ -3,21 +3,38 @@ "allowUnknownTags": true }, "source": { + "Xinclude": [ "../src/Phaser.js", "../src/animation/", "../src/core/Camera.js", "../src/core/Game.js", "../src/core/Group.js", "../src/core/LinkedList.js", "../src/core/Plugin.js", "../src/core/PluginManager.js" ], "include": [ "../src/Phaser.js", "../src/animation/", "../src/core/Camera.js", "../src/core/Game.js", "../src/core/Group.js" ], "exclude": [], "includePattern": ".+\\.js(doc)?$", "excludePattern": "(^|\\/|\\\\)_" }, - "plugins": [], + "plugins" : ["plugins/markdown"], "templates": { - "cleverLinks": false, - "monospaceLinks": false + "cleverLinks" : false, + "monospaceLinks" : false, + "default" : { + "outputSourceFiles" : true + }, + "systemName" : "Phaser", + "footer" : "", + "copyright" : "Phaser Copyright © 2012-2013 Photon Storm Ltd.", + "navType" : "vertical", + "theme" : "cerulean", + "linenums" : true, + "collapseSymbols" : false, + "inverseNav" : true + }, + "markdown" : { + "parser" : "gfm", + "hardwrap" : true }, "opts": { + "template": "docstrap-master/template/", "encoding": "utf8", "destination": "./out/", "recurse": true, "private": false, - "lenient": true, + "lenient": true } } \ No newline at end of file diff --git a/Docs/docstrap-master/.gitignore b/Docs/docstrap-master/.gitignore new file mode 100644 index 00000000..85fb5cfa --- /dev/null +++ b/Docs/docstrap-master/.gitignore @@ -0,0 +1,11 @@ +node_modules* +components* +*.map +.idea* +ringojs-0.9* +dox* +testdocs* +themes* + + + diff --git a/Docs/docstrap-master/.npmignore b/Docs/docstrap-master/.npmignore new file mode 100644 index 00000000..c42e1be6 --- /dev/null +++ b/Docs/docstrap-master/.npmignore @@ -0,0 +1,6 @@ +node_modules* +components* +*.map +.idea* +npm-debug.log + diff --git a/Docs/docstrap-master/Gruntfile.js b/Docs/docstrap-master/Gruntfile.js new file mode 100644 index 00000000..6e6ee3bd --- /dev/null +++ b/Docs/docstrap-master/Gruntfile.js @@ -0,0 +1,364 @@ +"use strict"; +/** + * @fileOverview Gruntfile tasks. These tasks are intended to help you when modifying the template. If you are + * just using the template, don't sweat this stuff. To use these tasks, you must install grunt, if you haven't already, + * and install the dependencies. All of this requires node.js, of course. + * + * Install grunt: + * + * npm install -g grunt-cli + * + * Then in the directory where you found this file: + * + * npm install + * + * And you are all set. See the individual tasks for details. + * + * @module Gruntfile + * @requires path + * @requires lodash + * @requires http + * @requires async + * @requires fs + */ +var path = require( "path" ); +var sys = require( "lodash" ); +var http = require( "http" ); +var async = require( "async" ); +var fs = require( "fs" ); + +// this rather odd arrangement of composing tasks like this to make sure this works on both +// windows and linux correctly. We can't depend on Grunt or Node to normalize +// paths for us because we shell out to make this work. So we gather up +// our relative paths here, normalize them later and then pass them into +// the shell to be run by JSDoc3. + +/** + * The definition to run the development test files. This runs the files in `fixtures` with the + * project's `conf.json` file. + * @private + */ +var jsdocTestPages = { + src : ["./fixtures/*.js", "./README.md"], + dest : "./testdocs", + tutorials : "./fixtures/tutorials", + template : "./template", + config : "./template/jsdoc.conf.json", + options : " --lenient --verbose" +}; +/** + * The definition to run the sample files. This runs the files in `fixtures` with the + * sample's `conf.json` file. No task directly exposes this configuration. The `fixtures` task + * modifies this for each swatch it finds and then run the docs command against it. + * @private + */ +var jsdocExamplePages = { + src : ["./fixtures/*.js", "./README.md"], + dest : "./themes", + tutorials : "", + template : "./template", + config : "./fixtures/example.conf.json", + options : " --lenient --verbose --recurse" +}; + +/** + * This definition provides the project's main, published documentation. + * @private + */ +var projectDocs = { + src : ["./Gruntfile*.js", "./README.md", "./template/publish.js"], + dest : "./dox", + tutorials : "", + template : "./template", + config : "./template/jsdoc.conf.json", + options : " --lenient --verbose --recurse --private" +}; + +/** + * Normalizes all paths from a JSDoc task definition and and returns an executable string that can be passed to the shell. + * @param {object} jsdoc A JSDoc definition + * @returns {string} + */ +function jsdocCommand( jsdoc ) { + var cmd = []; + cmd.unshift( jsdoc.options ); + if ( jsdoc.tutorials.length > 0 ) { + cmd.push( "-u " + path.resolve( jsdoc.tutorials ) ); + } + cmd.push( "-d " + path.resolve( jsdoc.dest ) ); + cmd.push( "-t " + path.resolve( jsdoc.template ) ); + cmd.push( "-c " + path.resolve( jsdoc.config ) ); + sys.each( jsdoc.src, function ( src ) { + cmd.push( path.resolve( src ) ); + } ); + cmd.unshift( path.resolve( "./node_modules/jsdoc/jsdoc" ) ); + return cmd.join( " " ); +} + +var tasks = { + shell : { + options : { + stdout : true, + stderr : true + }, + /** + * TASK: Create the a documentation set for testing changes to the template + * @name shell:testdocs + * @memberOf module:Gruntfile + */ + testdocs : { + command : jsdocCommand( jsdocTestPages ) + }, + /** + * TASK: Create project documentation + * @name shell:dox + * @memberOf module:Gruntfile + */ + dox : { + command : jsdocCommand( projectDocs ) + } + }, + /** + * TASK: The less task creates the themed css file from main.less. The file is written to the template styles + * directory as site.[name of theme].css. Later the .conf file will look for the theme to apply based + * on this naming convention. + * @name less + * @memberOf module:Gruntfile + */ + less : { + dev : { + files : { + "template/static/styles/site.<%= jsdocConf.templates.theme %>.css" : "styles/main.less" + } + } + }, + copy : { + docs : { + files : [ + {expand : true, cwd : "dox/", src : ['**'], dest : '../docstrap-dox/'}, + {expand : true, cwd : "themes/", src : ['**'], dest : '../docstrap-dox/themes'} + ] + } + } +}; + +module.exports = function ( grunt ) { + tasks.jsdocConf = grunt.file.readJSON( 'template/jsdoc.conf.json' ); + grunt.initConfig( tasks ); + + grunt.loadNpmTasks( 'grunt-contrib-less' ); + grunt.loadNpmTasks( 'grunt-shell' ); + grunt.loadNpmTasks( 'grunt-contrib-copy' ); + + grunt.registerTask( "default", ["docs"] ); + + /** + * Builds the project's documentation + * @name docs + * @memberof module:Gruntfile + */ + grunt.registerTask( "docs", "Create the project documentation", ["shell:dox"] ); + /** + * Compile the CSS and create the project documentation + * @name dev + * @memberof module:Gruntfile + */ + grunt.registerTask( "dev", "Compile the CSS and create the project documentation", ["less","shell:dox"] ); + /** + * TASK: Builds the main less file and then generates the test documents + * @name testdocs + * @memberof module:Gruntfile + */ + grunt.registerTask( "testdocs", "Builds the main less file and then generates the test documents", ["less:dev", "shell:testdocs"] ); + /** + * TASK: Builds the whole shebang. Which means creating testdocs, the bootswatch fixtures and then resetting the + * styles directory. + * @name build + * @memberof module:Gruntfile + */ + grunt.registerTask( "build", "Builds the whole shebang. Which means creating testdocs, the bootswatch samples and then resetting the styles directory", ["testdocs", "shell:dox", "bootswatch", "examples", "apply", "copy"] ); + /** + * TASK: Applies the theme in the conf file and applies it to the styles directory. + * @name apply + * @memberof module:Gruntfile + */ + grunt.registerTask( "apply", "Applies the theme in the conf file and applies it to the styles directory", function () { + var def = { + less : "http://bootswatch.com/" + tasks.jsdocConf.templates.theme + "/bootswatch.less", + lessVariables : "http://bootswatch.com/" + tasks.jsdocConf.templates.theme + "/variables.less" + }; + grunt.registerTask( "swatch-apply", sys.partial( applyTheme, grunt, def ) ); + grunt.task.run( ["swatch-apply"] ); + } ); + /** + * TASK: Grab all Bootswatch themes and create css from each one based on the main.less in the styles directory. NOTE that this will + * leave the last swatch downloaded in the styles directory, you will want to call "apply" afterwards + * @name bootswatch + * @memberof module:Gruntfile + */ + grunt.registerTask( "bootswatch", "Grab all Bootswatch themes and create css from each one based on the main.less in the styles directory", function () { + var toRun = []; + + var done = this.async(); + getBootSwatchList( function ( err, list ) { + if ( err ) {return done( err );} + + sys.each( list.themes, function ( entry ) { + + toRun.push( "swatch" + entry.name ); + grunt.registerTask( "swatch" + entry.name, sys.partial( applyTheme, grunt, entry ) ); + + var key = "template/static/styles/site." + entry.name.toLowerCase() + ".css"; + var def = {}; + def[key] = "styles/main.less"; + tasks.less["swatch" + entry.name] = { + files : def + }; + toRun.push( "less:swatch" + entry.name ); + } ); + grunt.task.run( toRun ); + done(); + } ); + + } ); + /** + * TASK:Create fixtures from the themes. The files must have been built first from the bootswatch task. + * @name examples + * @memberof module:Gruntfile + */ + grunt.registerTask( "examples", "Create samples from the themes", function () { + var toRun = []; + var done = this.async(); + getBootSwatchList( function ( err, list ) { + if ( err ) {return done( err );} + + sys.each( list.themes, function ( entry ) { + var conf = grunt.file.readJSON( './fixtures/example.conf.json' ); + conf.templates.theme = entry.name.toLowerCase(); + grunt.file.write( "tmp/example.conf." + conf.templates.theme + ".json", JSON.stringify( conf, null, 4 ) ); + + var jsdenv = sys.cloneDeep( jsdocExamplePages ); + jsdenv.config = "./tmp/example.conf." + conf.templates.theme + ".json"; + jsdenv.dest = "./themes/" + conf.templates.theme; + tasks.shell["example" + conf.templates.theme] = { + command : jsdocCommand( jsdenv ) + }; + toRun.push( "shell:example" + conf.templates.theme ); + } ); + + grunt.registerTask( "cleanup", "", function () { + grunt.file["delete"]( "tmp/" ); + } ); + toRun.push( "cleanup" ); + grunt.task.run( toRun ); + done(); + } ); + + } ); +}; + +/** + * Applies one of the Bootswatch themes to the working `styles` directory. When you want to modify a particular theme, this where you + * get the basis for it. The files are written to `./styles/variables.less` and `./styles/bootswatch.less`. The `./styles/main.less` + * file includes them directly, so after you apply the theme, modify `main.less` to your heart's content and then run the `less` task + * as in + * + * grunt less + * + * @param {object} grunt The grunt object reference + * @param {object} definition The swatch definition files + * @param {string} definition.less The url to the `bootswatch.less` file + * @param {string} definition.lessVariables The url to the `variables.less` file + * @private + */ +function applyTheme( grunt, definition ) { + //noinspection JSHint + var done = this.async(); + async.waterfall( [ + function ( cb ) { + getBootSwatchComponent( definition.less, function ( err, swatch ) { + if ( err ) {return cb( err );} + var fullPath = path.join( __dirname, "styles/bootswatch.less" ); + fs.writeFile( fullPath, swatch.replace("http://", "//"), cb ); + } ); + }, + function ( cb ) { + getBootSwatchComponent( definition.lessVariables, function ( err, swatch ) { + if ( err ) {return cb( err );} + var fullPath = path.join( __dirname, "styles/variables.less" ); + fs.writeFile( fullPath, swatch.replace("http://", "//"), cb ); + } ); + } + ], done ); +} + +/** + * Gets the list of available Bootswatches from, well, Bootswatch. + * + * @see http://news.bootswatch.com/post/22193315172/bootswatch-api + * @param {function(err, responseBody)} done The callback when complete + * @param {?object} done.err If an error occurred, you will find it here. + * @param {object} done.responseBody This is a parsed edition of the bootswatch server's response. It's format it defined + * by the return message from [here](http://api.bootswatch.com/) + * @private + */ +function getBootSwatchList( done ) { + var options = { + hostname : 'api.bootswatch.com', + port : 80, + path : '/', + method : 'GET' + }; + var body = ""; + var req = http.request( options, function ( res ) { + res.setEncoding( 'utf8' ); + res.on( 'data', function ( chunk ) { + body += chunk; + } ); + + res.on( 'end', function () { + done( null, JSON.parse( body ) ); + } ); + res.on( 'error', function ( e ) { + done( 'problem with response: ' + e.message ); + } ); + } ); + + req.on( 'error', function ( e ) { + done( 'problem with request: ' + e.message ); + } ); + req.end(); +} + +/** + * This method will get one of the components from Bootswatch, which is generally a `less` file or a `lessVariables` file. + * + * @see http://news.bootswatch.com/post/22193315172/bootswatch-api + * @param {string} url The url to retreive from + * @param {function(err, responseText)} done The callback when complete + * @param {?object} done.err If an error occurred, you will find it here. + * @param {string} done.responseText The body of whatever was returned + * @private + */ +function getBootSwatchComponent( url, done ) { + var body = ""; + var req = http.request( url, function ( res ) { + res.setEncoding( 'utf8' ); + res.on( 'data', function ( chunk ) { + body += chunk; + } ); + + res.on( 'end', function () { + done( null, body ); + } ); + res.on( 'error', function ( e ) { + done( 'problem with response: ' + e.message ); + } ); + } ); + + req.on( 'error', function ( e ) { + done( 'problem with request: ' + e.message ); + } ); + req.end(); +} + diff --git a/Docs/docstrap-master/LICENSE.md b/Docs/docstrap-master/LICENSE.md new file mode 100644 index 00000000..f3cc7238 --- /dev/null +++ b/Docs/docstrap-master/LICENSE.md @@ -0,0 +1,22 @@ +Copyright (c) 2012-13 Terry Weiss. All rights reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. diff --git a/Docs/docstrap-master/README.md b/Docs/docstrap-master/README.md new file mode 100644 index 00000000..d47d0974 --- /dev/null +++ b/Docs/docstrap-master/README.md @@ -0,0 +1,200 @@ +# DocStrap # + +DocStrap is [Bootstrap](http://twitter.github.io/bootstrap/index.html) based template for [JSDoc3](http://usejsdoc.org/). +In addition, it includes all of the themes from [Bootswatch](http://bootswatch.com/) giving you a great deal of look +and feel options for your documentation. Additionally, it adds some options to the conf.json file that gives +you even more flexibility to tweak the template to your needs. It will also make your teeth whiter. + +## Features ## +* Fixed navigation at page top +* Right side TOC for navigation in pages +* Themed +* Customizable + +### What It Looks Like ### +Here are examples of this template with the different Bootswatch themes: + ++ [Amelia](http://terryweiss.github.io/docstrap/themes/amelia) ++ [Cerulean](http://terryweiss.github.io/docstrap/themes/cerulean) ++ [Cosmo](http://terryweiss.github.io/docstrap/themes/cosmo) ++ [Cyborg](http://terryweiss.github.io/docstrap/themes/cyborg) ++ [Flatly](http://terryweiss.github.io/docstrap/themes/flatly) ++ [Journal](http://terryweiss.github.io/docstrap/themes/journal) ++ [Readable](http://terryweiss.github.io/docstrap/themes/readable) ++ [Simplex](http://terryweiss.github.io/docstrap/themes/simplex) ++ [Slate](http://terryweiss.github.io/docstrap/themes/slate) ++ [Spacelab](http://terryweiss.github.io/docstrap/themes/spacelab) ++ [Spruce](http://terryweiss.github.io/docstrap/themes/spruce) ++ [Superhero](http://terryweiss.github.io/docstrap/themes/superhero) ++ [United](http://terryweiss.github.io/docstrap/themes/united) + +To change your theme, just change it in the `conf.json` file. See below for details. +## Ooooh, I want it! How do I get it?## +First grab the [zip file from github.](https://github.com/terryweiss/docstrap/archive/master.zip) Unzip it +to your favorite hard drive and ask JSDoc to use it. Like so: + + /jsoc mysourcefiles/* -t /template -c /conf.json -d / + +Also take a gander at [JSDoc's command line options](http://usejsdoc.org/about-commandline.html). + +## Configuring the template ## + +DocStrap ships with a `conf.json` file in the template/ directory. It is just a regular old +[JSDoc configuration file](http://usejsdoc.org/about-configuring-jsdoc.html), but with the following new options: +``` +"templates": { + "systemName" : "{string}", + "footer" : "{string}", + "copyright" : "{string}", + "navType" : "{vertical|inline}", + "theme" : "{theme}", + "linenums" : {boolean}, + "collapseSymbols" : {boolean}, + "inverseNav" : {boolean} +} +``` +### Options ### + +* __systemName__ + The name of the system being documented. This will appear in the page title for each page +* __footer__ + Any markup want to appear in the footer of each page. This is not processed at all, just printed exactly as you enter it +* __copyright__ + You can add a copyright message below the _footer_ and above the JSDoc timestamp at the bottom of the page +* __navType__ + The template uses top level navigation with dropdowns for the contents of each category. On large systems these dropdowns + can get large enough to expand beyond the page. To make the dropdowns render wider and stack the entries vertically, set this + option to `"inline"`. Otherwise set it to `"vertical"` to make them regular stacked dropdowns. +* __theme__ + This is the name of the them you want to use **in all lowercase**. The valid options are + + `amelia` + + `cerulean` + + `cosmo` + + `cyborg` + + `flatly` + + `journal` + + `readable` + + `simplex` + + `slate` + + `spacelab` + + `spruce` + + `superhero` + + `united` +* __linenums__ + When true, line numbers will appear in the source code listing. If you have + [also turned that on](http://usejsdoc.org/about-configuring-jsdoc.html). +* __collapseSymbols__ + If your pages have a large number of symbols, it can be easy to get lost in all the text. If you turn this to `true` + all of the symbols in the page will roll their contents up so that you just get a list of symbols that can be expanded + and collapsed. +* __inverseNav__ + Bootstrap navbars come in two flavors, regular and inverse where inverse is generally higher contrast. Set this to `true` to + use the inverse header. + +## Customizing DocStrap ## +No template can meet every need and customizing templates is a favorite pastime of....well, no-one, but you may need to anyway. +First make sure you have [bower](https://github.com/bower/bower) and [grunt-cli](https://github.com/gruntjs/grunt-cli) installed. +Fetch the source using `git` or grab the [zip file from github.](https://github.com/terryweiss/docstrap/archive/master.zip) and unzip +it somewhere. Everything that follows happens in the unzip directory. + +Next, prepare the environment: + + bower install + +and + + grunt install + +When that is done, you have all of the tools to start modifying the template. The template, like Bootstrap, used [less](http://lesscss.org/). +The way it works is that `./styles/main.less` pulls in the bootstrap files uncompiled so that you have access to all of bootstraps mixins, colors, +etc, that you would want. There are two more files in that directory, `variables.less`, `bootswatch.less`. These are the +theme files and you can modify them, but keep in mind that if you apply a new theme (see below) those files will be overwritten. It is best +to keep your changes to the `main.less` file. + +To compile your changes to `main.less` and any other files it loads up, + + grunt less + +The output is will be put in `./template/static/styles/site..css`. The next time you create your documentation, it +will have the new css file included. + +To apply a different template to the `styles` directory to modify, open up the `conf.json` in the template directory and +change the `theme` option to the theme you want. Then + + grunt apply + +And the new theme will be in `variables.less`, `bootswatch.less`. Don't forget to compile your changes using `grunt apply` to +get that change into the template. + +**NOTE** that these steps are not necessary to just change the theme, this is only to modify the theme. If all you want to do is +change the theme, just update conf.json with the new theme and build your docs! + +## Contributing ## +Yes! Contribute! Test! Share your ideas! Report Bugs! + +## Roadmap ## + +* Integrate Darkstrap +* Make plain old bootstrap an option (doh!) +* ~~Jump to source line numbers~~ +* Document publish.js + + +## History ## + +### v0.2.0 ### + +* Added jump to source linenumers - still a problem scrolling with fixed header +* changed syntax highlighter to [sunlight](http://sunlightjs.com/) +* Modify incoming bootswatch files to make font calls without protocol. + +### v0.1.0 ### +Initial release + + +## Notices ## +If you like DocStrap, be sure and check out these excellent projects and support them! + +[JSDoc3 is licensed under the Apache License](https://github.com/jsdoc3/jsdoc/blob/master/LICENSE.md) + +[So is Bootstrap](https://github.com/twitter/bootstrap/blob/master/LICENSE) + +[And Bootswatch](https://github.com/thomaspark/bootswatch/blob/gh-pages/LICENSE) + +[TOC is licensed under MIT](https://github.com/jgallen23/toc/blob/master/LICENSE) + +[Grunt is also MIT](https://github.com/gruntjs/grunt-cli/blob/master/LICENSE-MIT) + +DocStrap [is licensed under the MIT license.](https://github.com/terryweiss/docstrap/blob/master/LICENSE.md) + +[Sunlight uses the WTFPL](http://sunlightjs.com/) + +## License ## +DocStrap Copyright (c) 2012-2013Terry Weiss. All rights reserved. + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, +copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the +Software is furnished to do so, subject to the following +conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT +HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +OTHER DEALINGS IN THE SOFTWARE. + + + + + + diff --git a/Docs/docstrap-master/bower.json b/Docs/docstrap-master/bower.json new file mode 100644 index 00000000..316e2488 --- /dev/null +++ b/Docs/docstrap-master/bower.json @@ -0,0 +1,12 @@ +{ + "name": "ink-docstrap", + "version": "0.1.0", + "dependencies": { + "bootstrap": "~2.3.1", + "jquery": "~2.0.0", + "darkstrap": "git://github.com/danneu/darkstrap.git#~0.9.2", + "toc": "~0.1.2", + "sunlight": "https://github.com/tmont/sunlight.git", + "jquery.localScroll": "~1.2.8" + } +} diff --git a/Docs/docstrap-master/component.json b/Docs/docstrap-master/component.json new file mode 100644 index 00000000..6abff80a --- /dev/null +++ b/Docs/docstrap-master/component.json @@ -0,0 +1,10 @@ +{ + "name": "ink-docstrap", + "version": "0.1.0", + "dependencies": { + "bootstrap": "~2.3.1", + "jquery": "~2.0.0", + "darkstrap": "git://github.com/danneu/darkstrap.git#~0.9.2", + "toc": "~0.1.2" + } +} diff --git a/Docs/docstrap-master/fixtures/car.js b/Docs/docstrap-master/fixtures/car.js new file mode 100644 index 00000000..f07c8878 --- /dev/null +++ b/Docs/docstrap-master/fixtures/car.js @@ -0,0 +1,45 @@ +"use strict" +/** + @fileOverview Donec sed sapien enim. Duis elementum arcu id velit mattis sed tincidunt dolor posuere. Cras dapibus varius metus et sollicitudin. Quisque egestas placerat lacus, at lobortis mauris volutpat in. Morbi eleifend, sapien ut lobortis malesuada, nulla arcu blandit risus, quis fringilla nunc leo ac turpis. Donec vitae gravida dolor. Pellentesque accumsan, erat ac rutrum sodales, neque odio pellentesque est, vitae rutrum lorem mauris vitae justo. Sed blandit egestas mi at fringilla. Morbi at metus feugiat magna tempor vulputate. Duis dictum sagittis neque quis tempor. Morbi id est ac orci dictum porta. Phasellus tempus adipiscing convallis. + @module docstrap/car + @author Gloria Swanson + @requires lodash + */ + + +/** + * Integer quis ante ut nulla cursus vehicula id eu dolor. Phasellus ut facilisis felis. Praesent eget metus id massa pretium lobortis a et metus. Aliquam erat volutpat. Nulla ac tortor odio, quis facilisis augue. In hendrerit, lectus mollis elementum vestibulum, velit nisi aliquet orci, vitae luctus risus dui sed nisi. Donec aliquam pretium leo sed ultrices. Duis porttitor pharetra vulputate. Aenean sed neque sit amet arcu auctor placerat eget ac tellus. Proin porttitor fringilla eros quis scelerisque. Aliquam erat volutpat. + * @constructor + * @param {Boolean} hybrid Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. + * @example + * // Duis elementum arcu id velit mattis sed tincidunt dolor posuere. + * if (!(key in this.visited)) { + this.visited[key] = true; + + if (this.dependencies[key]) { + Object.keys(this.dependencies[key]).forEach(function(path) { + self.visit(path); + }); + } + + this.sorted.push(key); + } + */ +exports.Car = function (hybrid) { + + /** + * Aenean commodo lorem nec sapien suscipit quis hendrerit dui feugiat. Curabitur pretium congue sollicitudin. Nam eleifend ultricies libero vel iaculis. Maecenas vel elit vel lorem lacinia pellentesque. Vestibulum posuere suscipit lacus, sit amet volutpat erat sagittis vitae. Ut eleifend pretium nulla vitae tempor. + * @type {string} + */ + this.color = null; + +}; + + +/** + * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi congue viverra placerat. Mauris mi nibh, pulvinar ut placerat sit amet, aliquam a diam. Maecenas vitae suscipit nulla. Sed at justo nec ante lobortis fermentum. Quisque sodales libero suscipit mi malesuada pretium. Cras a lectus vitae risus semper sagittis. Sed ultrices aliquet tempus. Nulla id nisi metus, sit amet elementum tortor. Nunc tempor sem quis augue tempor sed posuere nulla volutpat. Phasellus fringilla pulvinar lorem quis venenatis. + * @param {integer} speed Phasellus ut facilisis felis. + */ +exports.Car.prototype.drive = function ( speed ) { + +}; diff --git a/Docs/docstrap-master/fixtures/example.conf.json b/Docs/docstrap-master/fixtures/example.conf.json new file mode 100644 index 00000000..ed5b736f --- /dev/null +++ b/Docs/docstrap-master/fixtures/example.conf.json @@ -0,0 +1,22 @@ +{ + "tags": { + "allowUnknownTags": true + }, + "plugins": ["plugins/markdown"], + "templates": { + "cleverLinks": false, + "monospaceLinks": false, + "default": { + "outputSourceFiles": true + }, + "systemName": "DocStrap", + "footer": "", + "copyright": "Copyright © 2012-2103 Terry Weiss, Eery Wrists. All rights reserved.", + "navType": "vertical", + "theme": "cerulean" + } , + "markdown": { + "parser": "gfm", + "hardwrap": true + } +} diff --git a/Docs/docstrap-master/fixtures/other.js b/Docs/docstrap-master/fixtures/other.js new file mode 100644 index 00000000..a37b0175 --- /dev/null +++ b/Docs/docstrap-master/fixtures/other.js @@ -0,0 +1,50 @@ +/** + * Suspendisse orci massa, hendrerit sagittis lacinia consectetur, sagittis vitae purus. Aliquam id eros diam, eget elementum turpis. Nullam tellus magna, mollis in molestie id, venenatis rhoncus est. Proin id diam justo. Nunc tempus gravida justo at lobortis. Nam vitae venenatis nisi. Donec vel odio massa. Quisque interdum metus sit amet est iaculis tincidunt. Donec bibendum blandit purus, id semper orci aliquam quis. Nam tincidunt dolor eu felis ultricies tempor. Nulla non consectetur erat. + */ +function drift() { + +} + +/** + * Suspendisse orci massa, hendrerit sagittis lacinia consectetur, sagittis vitae purus. Aliquam id eros diam, eget elementum turpis. Nullam tellus magna, mollis in molestie id, venenatis rhoncus est. Proin id diam justo. Nunc tempus gravida justo at lobortis. Nam vitae venenatis nisi. Donec vel odio massa. Quisque interdum metus sit amet est iaculis tincidunt. Donec bibendum blandit purus, id semper orci aliquam quis. Nam tincidunt dolor eu felis ultricies tempor. Nulla non consectetur erat. + */ +function trailBrake() { + +} + +/** + * Suspendisse orci massa, hendrerit sagittis lacinia consectetur, sagittis vitae purus. Aliquam id eros diam, eget elementum turpis. Nullam tellus magna, mollis in molestie id, venenatis rhoncus est. Proin id diam justo. Nunc tempus gravida justo at lobortis. Nam vitae venenatis nisi. Donec vel odio massa. Quisque interdum metus sit amet est iaculis tincidunt. Donec bibendum blandit purus, id semper orci aliquam quis. Nam tincidunt dolor eu felis ultricies tempor. Nulla non consectetur erat. + * @param {integer} bias Nulla ultricies justo ac nisi consectetur posuere. Donec ornare pharetra erat, nec facilisis dui cursus quis. Quisque porttitor porttitor orci, sed facilisis urna facilisis sed. Sed tincidunt adipiscing turpis et hendrerit. Cras posuere orci ut mauris ullamcorper vitae laoreet nisi luctus. In rutrum tristique augue. Nam eleifend dignissim dui. + */ +function brakeBias( bias ) { + +} + +/** + * Suspendisse orci massa, hendrerit sagittis lacinia consectetur, sagittis vitae purus. Aliquam id eros diam, eget elementum turpis. Nullam tellus magna, mollis in molestie id, venenatis rhoncus est. Proin id diam justo. Nunc tempus gravida justo at lobortis. Nam vitae venenatis nisi. Donec vel odio massa. Quisque interdum metus sit amet est iaculis tincidunt. Donec bibendum blandit purus, id semper orci aliquam quis. Nam tincidunt dolor eu felis ultricies tempor. Nulla non consectetur erat. + * @param {module:docstrap/car.Car} car Nulla ultricies justo ac nisi consectetur posuere. Donec ornare pharetra erat, nec facilisis dui cursus quis. Quisque porttitor porttitor orci, sed facilisis urna facilisis sed. Sed tincidunt adipiscing turpis et hendrerit. Cras posuere orci ut mauris ullamcorper vitae laoreet nisi luctus. In rutrum tristique augue. Nam eleifend dignissim dui. + * @param {string} tires Donec viverra egestas tellus non viverra. Aenean est ante, egestas sed scelerisque quis, aliquet sed lacus. Praesent non mauris neque, et adipiscing ante. Vestibulum quis quam vitae ipsum aliquet blandit. Vivamus condimentum euismod orci, in tincidunt justo rutrum faucibus. Phasellus nec lorem arcu. Donec tortor dui, facilisis in rutrum sit amet, pulvinar vitae lacus. + * @param {number} fuel Proin sodales, mi at tincidunt ornare, mi dui sagittis velit, sed dictum risus orci eu erat. Sed nunc leo, congue sed rutrum eget, lobortis ac lectus. Etiam non arcu nulla. + */ +function start( car, tires, fuel ) {} + +/** + * Sed id tristique lorem. Ut sodales turpis nec mauris gravida interdum. Cras pellentesque, purus at suscipit euismod, elit nunc cursus nisi, ut venenatis metus sapien id velit. Sed lectus orci, pharetra non pulvinar vel, ullamcorper id lorem. Donec vulputate tincidunt ipsum, ut lacinia tortor sollicitudin id. Nunc nec nibh ut felis venenatis egestas. Proin risus mauris, eleifend eget interdum in, venenatis sed velit. Praesent sodales elit ut odio viverra posuere. Donec sapien lorem, molestie in egestas eget, vulputate sed orci. Aenean elit sapien, pellentesque vitae tempor sit amet, sagittis et ligula. Mauris aliquam sapien sit amet lacus ultrices rutrum. Curabitur nec dolor sed elit varius dignissim a a lacus. Aliquam ac convallis enim. + * @namespace + */ +var teams = {}; + +/** + * Nunc faucibus lacus eget odio ultricies nec ullamcorper risus pharetra. + * @mixin + */ +var insanity = { + /** + * ras ac justo dui, at faucibus urna. Nunc tristique, velit id feugiat fermentum, dolor enim egestas erat, at vestibulum ante ipsum vel orci. Duis quis ante id justo vehicula eleifend sed et urna. Sed sapien tortor, rutrum id ultrices eu, tincidunt tincidunt mi + */ + goCrazy : function () {}, + /** + * Donec viverra egestas tellus non viverra. Aenean est ante, egestas sed scelerisque quis, aliquet sed lacus. Praesent non mauris neque, et adipiscing ante. Vestibulum quis quam vitae ipsum aliquet blandit. + */ + goSane : function () {} +}; diff --git a/Docs/docstrap-master/fixtures/person.js b/Docs/docstrap-master/fixtures/person.js new file mode 100644 index 00000000..ea573a69 --- /dev/null +++ b/Docs/docstrap-master/fixtures/person.js @@ -0,0 +1,74 @@ +"use strict" +/** + @fileOverview Donec sed sapien enim. Duis elementum arcu id velit mattis sed tincidunt dolor posuere. Cras dapibus varius metus et sollicitudin. Quisque egestas placerat lacus, at lobortis mauris volutpat in. Morbi eleifend, sapien ut lobortis malesuada, nulla arcu blandit risus, quis fringilla nunc leo ac turpis. Donec vitae gravida dolor. Pellentesque accumsan, erat ac rutrum sodales, neque odio pellentesque est, vitae rutrum lorem mauris vitae justo. Sed blandit egestas mi at fringilla. Morbi at metus feugiat magna tempor vulputate. Duis dictum sagittis neque quis tempor. Morbi id est ac orci dictum porta. Phasellus tempus adipiscing convallis. + @module docstrap/person + @author Fred Flinstone + @requires lodash + @requires docstrap/person + */ + +/** + * Integer quis ante ut nulla cursus vehicula id eu dolor. Phasellus ut facilisis felis. Praesent eget metus id massa pretium lobortis a et metus. Aliquam erat volutpat. Nulla ac tortor odio, quis facilisis augue. In hendrerit, lectus mollis elementum vestibulum, velit nisi aliquet orci, vitae luctus risus dui sed nisi. Donec aliquam pretium leo sed ultrices. Duis porttitor pharetra vulputate. Aenean sed neque sit amet arcu auctor placerat eget ac tellus. Proin porttitor fringilla eros quis scelerisque. Aliquam erat volutpat. + * @constructor + */ +exports.Person = function () { + + /** + * Aenean commodo lorem nec sapien suscipit quis hendrerit dui feugiat. Curabitur pretium congue sollicitudin. Nam eleifend ultricies libero vel iaculis. Maecenas vel elit vel lorem lacinia pellentesque. Vestibulum posuere suscipit lacus, sit amet volutpat erat sagittis vitae. Ut eleifend pretium nulla vitae tempor. + * @type {number} + */ + this.eyes = 2; + /** + * Donec tempus vestibulum nunc. Fusce at eleifend nisi. Proin nisl odio, ultrices fermentum eleifend nec, pellentesque in massa. Cras id turpis diam, vitae fringilla turpis. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam tempus urna in lacus semper sodales. Etiam a erat in augue rhoncus porta. Aenean nec odio lorem, a tristique dui. + * @type {number} + */ + this.nose = 1; + /** + * Vestibulum viverra magna nec lectus imperdiet in lacinia ante iaculis. Cras nec urna tellus, eget convallis mauris. Fusce volutpat elementum enim, vel fringilla orci elementum vehicula. Nunc in ultrices sem. Sed augue tortor, pellentesque sed suscipit sed, vehicula eu enim. + * @type {number} + */ + this.mouth = 1; +}; + +/** + * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi congue viverra placerat. Mauris mi nibh, pulvinar ut placerat sit amet, aliquam a diam. Maecenas vitae suscipit nulla. Sed at justo nec ante lobortis fermentum. Quisque sodales libero suscipit mi malesuada pretium. Cras a lectus vitae risus semper sagittis. Sed ultrices aliquet tempus. Nulla id nisi metus, sit amet elementum tortor. Nunc tempor sem quis augue tempor sed posuere nulla volutpat. Phasellus fringilla pulvinar lorem quis venenatis. + * @param {boolean} speed Phasellus ut facilisis felis. + */ +exports.Person.prototype.walk = function ( speed ) { + +}; + +/** + * Aliquam interdum lectus ac diam tincidunt vitae fringilla justo faucibus. + * @param {Boolean} well Morbi sit amet tellus at justo tempus tristique. + * @param {function(err)} done Curabitur id nulla mauris, id hendrerit magna. + * @param {object=} done.err Sed pulvinar mollis arcu, at tempus dui egestas cursus. + */ +exports.Person.prototype.think = function ( well, done ) { + +}; + +/** + * Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi congue viverra placerat. Mauris mi nibh, pulvinar ut placerat sit amet, aliquam a diam. Maecenas vitae suscipit nulla. Sed at justo nec ante lobortis fermentum. Quisque sodales libero suscipit mi malesuada pretium. Cras a lectus vitae risus semper sagittis. Sed ultrices aliquet tempus. Nulla id nisi metus, sit amet elementum tortor. Nunc tempor sem quis augue tempor sed posuere nulla volutpat. Phasellus fringilla pulvinar lorem quis venenatis. + * @returns {boolean} Sed id erat ut ipsum scelerisque venenatis at nec mauris. + * @fires module:docstrap/person.Person#sneeze + */ +exports.Person.prototype.tickle = function () { + +}; + +/** + * Neque porro quisquam est qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit. + * + * @event module:docstrap/person.Person#sneeze + * @type {object} + * @property {boolean} tissue Phasellus non justo a neque pharetra sagittis. + */ + +/** + * Nulla ultricies justo ac nisi consectetur posuere. Donec ornare pharetra erat, nec facilisis dui cursus quis. Quisque porttitor porttitor orci, sed facilisis urna facilisis sed. Sed tincidunt adipiscing turpis et hendrerit. Cras posuere orci ut mauris ullamcorper vitae laoreet nisi luctus. In rutrum tristique augue. Nam eleifend dignissim dui. + * @returns {exports.Person} + */ +exports.create = function(){ + +}; diff --git a/Docs/docstrap-master/fixtures/tutorials/Brush Teeth.md b/Docs/docstrap-master/fixtures/tutorials/Brush Teeth.md new file mode 100644 index 00000000..1ff4c061 --- /dev/null +++ b/Docs/docstrap-master/fixtures/tutorials/Brush Teeth.md @@ -0,0 +1,21 @@ +#Lorem ipsum dolor sit amet + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec viverra, tellus et fermentum tincidunt, massa ligula dignissim augue, ut aliquam tortor odio in odio. In faucibus metus metus. Curabitur est mi, fermentum lacinia tincidunt vitae, mattis sit amet neque. Quisque diam nisl, accumsan ac porta tincidunt, iaculis facilisis ipsum. Nulla facilisi. Aenean a metus tortor. Pellentesque congue, mauris vitae viverra varius, elit nunc dictum nisl, rhoncus ultrices nulla sapien at leo. Duis ultricies porttitor diam. Nulla facilisi. Nullam elementum, lorem eu imperdiet laoreet, est turpis sollicitudin velit, in porttitor justo dolor vel urna. Mauris in ante magna. Curabitur vitae lacus in magna mollis commodo. + +Fusce lacinia, mauris ac aliquam consequat, lacus urna feugiat erat, id viverra mi mi sit amet tortor. Etiam ac ornare erat. Pellentesque et neque lacus, quis posuere orci. Fusce molestie blandit velit, sit amet dictum eros pharetra vitae. In erat urna, condimentum ac feugiat id, rutrum et nisi. Cras ac velit lorem. Nulla facilisi. Maecenas dignissim nulla in turpis tempus sed rhoncus augue dapibus. Nulla feugiat, urna non sagittis laoreet, dolor metus rhoncus justo, sed semper ante lacus eget quam. Sed ac ligula magna. Sed tincidunt pulvinar neque in porta. Nullam quis lacus orci. Pellentesque ornare viverra lacus, id aliquam magna venenatis a. + +Sed id tristique lorem. Ut sodales turpis nec mauris gravida interdum. Cras pellentesque, purus at suscipit euismod, elit nunc cursus nisi, ut venenatis metus sapien id velit. Sed lectus orci, pharetra non pulvinar vel, ullamcorper id lorem. Donec vulputate tincidunt ipsum, ut lacinia tortor sollicitudin id. Nunc nec nibh ut felis venenatis egestas. Proin risus mauris, eleifend eget interdum in, venenatis sed velit. Praesent sodales elit ut odio viverra posuere. Donec sapien lorem, molestie in egestas eget, vulputate sed orci. Aenean elit sapien, pellentesque vitae tempor sit amet, sagittis et ligula. Mauris aliquam sapien sit amet lacus ultrices rutrum. Curabitur nec dolor sed elit varius dignissim a a lacus. Aliquam ac convallis enim. + +Suspendisse orci massa, hendrerit sagittis lacinia consectetur, sagittis vitae purus. Aliquam id eros diam, eget elementum turpis. Nullam tellus magna, mollis in molestie id, venenatis rhoncus est. Proin id diam justo. Nunc tempus gravida justo at lobortis. Nam vitae venenatis nisi. Donec vel odio massa. Quisque interdum metus sit amet est iaculis tincidunt. Donec bibendum blandit purus, id semper orci aliquam quis. Nam tincidunt dolor eu felis ultricies tempor. Nulla non consectetur erat. + +Nunc faucibus lacus eget odio ultricies nec ullamcorper risus pharetra. Nunc nec consequat urna. Curabitur condimentum ante vitae erat tristique vitae gravida quam dapibus. Cras ac justo dui, at faucibus urna. Nunc tristique, velit id feugiat fermentum, dolor enim egestas erat, at vestibulum ante ipsum vel orci. Duis quis ante id justo vehicula eleifend sed et urna. Sed sapien tortor, rutrum id ultrices eu, tincidunt tincidunt mi. Etiam blandit, neque eget interdum dignissim, lacus ante facilisis dolor, non viverra dui lorem vitae nibh. Morbi volutpat augue eget nulla luctus eu aliquam sem facilisis. Pellentesque sollicitudin commodo dolor sit amet vestibulum. Nam dictum posuere quam, in tincidunt erat rutrum eu. + +Etiam nec turpis purus, at lacinia sem. In commodo lacinia euismod. Curabitur tincidunt congue leo, eget iaculis orci volutpat pharetra. Fusce dignissim lacus lacus. Integer consectetur lacus rutrum risus malesuada at consectetur erat rutrum. Sed magna ipsum, fringilla eget auctor non, fringilla nec massa. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Vestibulum nec tortor id nisi luctus aliquam. Maecenas cursus tincidunt ornare. Nulla a vestibulum odio. Mauris malesuada commodo justo quis mattis. Suspendisse mauris ligula, placerat at egestas in, tincidunt quis nibh. Aliquam ullamcorper elit at augue cursus quis pellentesque purus viverra. + +Nulla ultricies justo ac nisi consectetur posuere. Donec ornare pharetra erat, nec facilisis dui cursus quis. Quisque porttitor porttitor orci, sed facilisis urna facilisis sed. Sed tincidunt adipiscing turpis et hendrerit. Cras posuere orci ut mauris ullamcorper vitae laoreet nisi luctus. In rutrum tristique augue. Nam eleifend dignissim dui. + +Donec viverra egestas tellus non viverra. Aenean est ante, egestas sed scelerisque quis, aliquet sed lacus. Praesent non mauris neque, et adipiscing ante. Vestibulum quis quam vitae ipsum aliquet blandit. Vivamus condimentum euismod orci, in tincidunt justo rutrum faucibus. Phasellus nec lorem arcu. Donec tortor dui, facilisis in rutrum sit amet, pulvinar vitae lacus. Nam sodales sem eu nunc scelerisque vitae ullamcorper dolor facilisis. Duis imperdiet nisi in magna tempor convallis. Fusce at metus augue. Quisque dictum tempus mauris, in mattis ligula dignissim ut. + +Proin sodales, mi at tincidunt ornare, mi dui sagittis velit, sed dictum risus orci eu erat. Sed nunc leo, congue sed rutrum eget, lobortis ac lectus. Etiam non arcu nulla. Vestibulum rutrum dolor pulvinar lorem posuere blandit. Sed quis sapien dui. Nunc sagittis erat commodo quam porta cursus in non erat. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Proin a molestie neque. Aliquam iaculis lacus sed neque hendrerit at dignissim ligula imperdiet. Suspendisse venenatis, lorem at luctus scelerisque, sem purus pellentesque sapien, vitae ornare ipsum quam nec dui. Mauris neque est, interdum nec pulvinar eget, dapibus eleifend tellus. Fusce non lorem tortor. Nullam eget nunc quis felis aliquam consectetur. Aliquam tristique, turpis in feugiat blandit, lectus erat condimentum tortor, non egestas nisl sapien eget nibh. + +Aliquam elit turpis, faucibus et porta et, egestas nec nibh. Sed nisl est, pharetra a eleifend a, pretium ac eros. Sed leo eros, pulvinar vel faucibus dictum, aliquet ut quam. Maecenas et felis non ligula fringilla pretium fringilla sit amet ante. Nam varius imperdiet interdum. Ut non metus mauris, vel volutpat lorem. Nullam sagittis est quis lacus feugiat fringilla. Quisque orci lorem, semper ac accumsan vitae, blandit quis velit. Proin luctus sodales ultrices. Fusce mauris erat, facilisis ut consectetur at, fringilla feugiat orci. Aliquam a nisi a neque interdum suscipit id eget purus. Pellentesque tincidunt justo ut urna posuere non molestie quam auctor. diff --git a/Docs/docstrap-master/fixtures/tutorials/Drive Car.md b/Docs/docstrap-master/fixtures/tutorials/Drive Car.md new file mode 100644 index 00000000..a1b0eb10 --- /dev/null +++ b/Docs/docstrap-master/fixtures/tutorials/Drive Car.md @@ -0,0 +1,10 @@ +#Lorem ipsum dolor sit amet + +Curabitur est mi, fermentum lacinia tincidunt vitae, mattis sit amet neque. Quisque diam nisl, accumsan ac porta tincidunt, iaculis facilisis ipsum. Nulla facilisi. Aenean a metus tortor. Pellentesque congue, mauris vitae viverra varius, elit nunc dictum nisl, rhoncus ultrices nulla sapien at leo. Duis ultricies porttitor diam. Nulla facilisi. Nullam elementum, lorem eu imperdiet laoreet, est turpis sollicitudin velit, in porttitor justo dolor vel urna. Mauris in ante magna. Curabitur vitae lacus in magna mollis commodo. + +##Fusce lacinia, mauris ac aliquam consequat +Fusce molestie blandit velit, sit amet dictum eros pharetra vitae. In erat urna, condimentum ac feugiat id, rutrum et nisi. Cras ac velit lorem. Nulla facilisi. Maecenas dignissim nulla in turpis tempus sed rhoncus augue dapibus. Nulla feugiat, urna non sagittis laoreet, dolor metus rhoncus justo, sed semper ante lacus eget quam. Sed ac ligula magna. Sed tincidunt pulvinar neque in porta. Nullam quis lacus orci. Pellentesque ornare viverra lacus, id aliquam magna venenatis a. + +Sed id tristique lorem. Ut sodales turpis nec mauris gravida interdum. Cras pellentesque, purus at suscipit euismod, elit nunc cursus nisi, ut venenatis metus sapien id velit. Sed lectus orci, pharetra non pulvinar vel, ullamcorper id lorem. Donec vulputate tincidunt ipsum, ut lacinia tortor sollicitudin id. Nunc nec nibh ut felis venenatis egestas. Proin risus mauris, eleifend eget interdum in, venenatis sed velit. Praesent sodales elit ut odio viverra posuere. Donec sapien lorem, molestie in egestas eget, vulputate sed orci. Aenean elit sapien, pellentesque vitae tempor sit amet, sagittis et ligula. Mauris aliquam sapien sit amet lacus ultrices rutrum. Curabitur nec dolor sed elit varius dignissim a a lacus. Aliquam ac convallis enim. + +Suspendisse orci massa, hendrerit sagittis lacinia consectetur, sagittis vitae purus. Aliquam id eros diam, eget elementum turpis. Nullam tellus magna, mollis in molestie id, venenatis rhoncus est. Proin id diam justo. Nunc tempus gravida justo at lobortis. Nam vitae venenatis nisi. Donec vel odio massa. Quisque interdum metus sit amet est iaculis tincidunt. Donec bibendum blandit purus, id semper orci aliquam quis. Nam tincidunt dolor eu felis ultricies tempor. Nulla non consectetur erat. diff --git a/Docs/docstrap-master/package.json b/Docs/docstrap-master/package.json new file mode 100644 index 00000000..96683c5d --- /dev/null +++ b/Docs/docstrap-master/package.json @@ -0,0 +1,36 @@ +{ + "name": "ink-docstrap", + "version": "0.2.0-0", + "decription": "A template for JSDoc3 based on Bootstrap and Bootswatch", + "devDependencies": { + "grunt": "~0.4.1", + "grunt-contrib-less": "~0.5.1", + "jsdoc": "git://github.com/jsdoc3/jsdoc.git", + "grunt-shell": "~0.2.2", + "async": "~0.2.8", + "lodash": "~1.2.1", + "grunt-contrib-copy": "~0.4.1" + }, + "license": "MIT", + "keywords": [ + "docstrap", + "jsdoc3", + "bootstrap", + "bootswatch", + "theme", + "documentation", + "jsdoc" + ], + "author": { + "name": "Terry Weiss", + "email": "me@terryweiss.net" + }, + "bugs": { + "url": "https://github.com/terryweiss/docstrap/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/terryweiss/docstrap.git" + }, + "main": "./template/publish.js" +} diff --git a/Docs/docstrap-master/styles/bootswatch.less b/Docs/docstrap-master/styles/bootswatch.less new file mode 100644 index 00000000..e4f0e4cf --- /dev/null +++ b/Docs/docstrap-master/styles/bootswatch.less @@ -0,0 +1,180 @@ +// Cerulean 2.3.2 +// Bootswatch +// ----------------------------------------------------- + + +// TYPOGRAPHY +// ----------------------------------------------------- + +@import url(//fonts.googleapis.com/css?family=Telex); + +// SCAFFOLDING +// ----------------------------------------------------- + +// NAVBAR +// ----------------------------------------------------- + +.navbar { + + .brand { + padding: 14px 20px 16px; + font-family: @headingsFontFamily; + text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2); + } + + li { + line-height: 20px; + } + + .nav > li > a { + padding: 16px 10px 14px; + font-family: @headingsFontFamily; + text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2); + } + + .search-query { + border: 1px solid darken(@linkColor, 10%); + line-height: normal; + } + + .navbar-text { + padding: 19px 10px 18px; + line-height: 13px; + color: rgba(0, 0, 0, 0.5); + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.3); + } + + &-inverse { + + .navbar-search .search-query { + color: @textColor; + } + } +} + +@media (max-width: @navbarCollapseWidth) { + + .navbar .nav-collapse { + + .nav li > a { + + font-family: @headingsFontFamily; + font-weight: normal; + color: @white; + text-shadow: 1px 1px 0 rgba(0, 0, 0, 0.2); + + &:hover { + background-color: #2B7CAC; + } + } + + .nav .active > a { + .box-shadow(none); + background-color: #2B7CAC; + } + + .dropdown-menu li > a:hover, + .dropdown-menu li > a:focus, + .dropdown-submenu:hover > a { + background-image: none; + } + + .navbar-form, + .navbar-search { + border: none; + } + + .nav-header { + color: #2B7CAC; + } + } + + .navbar-inverse .nav-collapse { + + .nav li > a { + color: @navbarInverseLinkColor; + + &:hover { + background-color: rgba(0, 0, 0, 0.1); + } + } + + .nav .active > a, + .nav > li > a:hover, + .dropdown-menu a:hover { + background-color: rgba(0, 0, 0, 0.1) !important; + } + } +} + +div.subnav { + + font-family: @headingsFontFamily; + text-shadow: 1px 1px 0 rgba(255, 255, 255, 0.2); + + &-fixed { + top: @navbarHeight + 1; + } +} + +// NAV +// ----------------------------------------------------- + +// BUTTONS +// ----------------------------------------------------- + +.btn { + #gradient > .vertical-three-colors(@white, @white, 5%, darken(@white, 0%)); + @shadow: inset 0 1px 0 rgba(255,255,255,.2), 0 1px 2px rgba(0,0,0,.05); + .box-shadow(@shadow); + + &:hover { + background-position: 0 0; + } +} + +.btn-primary { + .buttonBackground(lighten(@btnPrimaryBackground, 5%), @btnPrimaryBackground); +} + +.btn-info { + .buttonBackground(lighten(@btnInfoBackground, 5%), @btnInfoBackground); +} + +.btn-success { + .buttonBackground(lighten(@btnSuccessBackground, 5%), @btnSuccessBackground); +} + +.btn-warning { + .buttonBackground(lighten(@btnWarningBackground, 5%), @btnWarningBackground); +} + +.btn-danger { + .buttonBackground(lighten(@btnDangerBackground, 5%), @btnDangerBackground); +} + +.btn-inverse { + .buttonBackground(lighten(@btnInverseBackground, 5%), @btnInverseBackground); +} + +// TABLES +// ----------------------------------------------------- + +// FORMS +// ----------------------------------------------------- + +// DROPDOWNS +// ----------------------------------------------------- + +// ALERTS, LABELS, BADGES +// ----------------------------------------------------- + +// MISC +// ----------------------------------------------------- + +i[class^="icon-"]{ + opacity: 0.8; +} + +// MEDIA QUERIES +// ----------------------------------------------------- diff --git a/Docs/docstrap-master/styles/main.less b/Docs/docstrap-master/styles/main.less new file mode 100644 index 00000000..f1049487 --- /dev/null +++ b/Docs/docstrap-master/styles/main.less @@ -0,0 +1,152 @@ +@import "../components/bootstrap/less/bootstrap.less"; +@import "variables.less"; +@import "bootswatch.less"; + +@headerHeight: 56px; + +#main { + margin-top : @headerHeight; +} + +.navbar-fixed-top { + .navbar-inner { + padding-left : 20px; + padding-right : 20px; + } + +} + +.navbar { + .dropdown-menu { + padding : 20px; + max-height : 300px; + overflow : auto; + width : 300px; + background-color : @navbarInverseBackground; + a, a:visited { + color : @navbarInverseLinkColor; + } + a:hover { + color : @navbarInverseLinkColorHover; + background-color : @navbarInverseLinkBackgroundHover; + } + a:active { + color : @navbarInverseLinkColorActive; + background-color : @navbarInverseLinkBackgroundActive; + } + a { + padding-left : 0; + padding-right : 5px; + font-weight : 500; + font-size : 115%; + } + } + +} + +#toc { + position : fixed; + top : @headerHeight; + width : 29%; + max-height : 90%; + overflow : auto; + .border-radius(5px); + border : 1px @navbarBackground solid; + padding : 5px; + + .toc-active { + background-color : @navbarLinkBackgroundActive; + color : @navbarLinkColorActive; + .border-radius(3px); + a, a:hover, a:active, a:visited { + background-color : @navbarLinkBackgroundActive; + color : @navbarLinkColorActive; + } + } +} + +.toc-shim { + padding-top : @headerHeight; + margin-top : -@headerHeight; + display : block; +} + +.toc-h1 { + margin-left : 2px; + margin-right : 2px; +} + +.toc-h2 { + margin-left : 7px; + margin-right : 7px; +} + +.toc-h3 { + margin-left : 14px; + margin-right : 7px; +} + +.toc-h4 { + margin-left : 21px; + margin-right : 7px; +} + +.copyright { + font-size : 90%; + text-align : center; + color : @navbarInverseBackground; + width : 100%; + display : block; +} + +.jsdoc-message { + font-size : 90%; + text-align : center; + color : @navbarInverseBackground; + width : 100%; + display : block; +} + +.page-title { + font-size : 220%; + color : @navbarInverseBackground; + font-weight : 700; + padding-top : 10px; + display : block; +} + +footer { + border-top : 1px solid @navbarInverseBackgroundHighlight; + padding-top : 15px; +} + +code { + background-color : none; + border : none; + color : @orange; +} + +.buffered-name { + padding-top : @headerHeight; + margin-top : -@headerHeight; +} + + +.member-collapsed { + background-color : @navbarInverseBackground; + color : @navbarInverseText; +} + +.member-open { + background-color : inherit; + color : inherit; +} + +.member { + .transition(background-color 0.5s linear); + .transition(color 0.5s linear); + .border-radius(5px); + padding : 10px; +} + + diff --git a/Docs/docstrap-master/styles/variables.less b/Docs/docstrap-master/styles/variables.less new file mode 100644 index 00000000..4c706d68 --- /dev/null +++ b/Docs/docstrap-master/styles/variables.less @@ -0,0 +1,301 @@ +// Cerulean 2.3.2 +// Variables +// -------------------------------------------------- + + +// GLOBAL VALUES +// -------------------------------------------------- + + +// Grays +// ------------------------- +@black: #000; +@grayDarker: #222; +@grayDark: #333; +@gray: #555; +@grayLight: #999; +@grayLighter: #F5F5F5; +@white: #fff; + + +// Accent colors +// ------------------------- +@blue: #2FA4E7; +@blueDark: #033C73; +@green: #73A839; +@red: #C71C22; +@yellow: #F7B42C; +@orange: #DD5600; +@pink: #F49AC1; +@purple: #9760B3; + + +// Scaffolding +// ------------------------- +@bodyBackground: @white; +@textColor: @gray; + + +// Links +// ------------------------- +@linkColor: @blue; +@linkColorHover: darken(@linkColor, 15%); + + +// Typography +// ------------------------- +@sansFontFamily: "Helvetica Neue", Helvetica, Arial, sans-serif; +@serifFontFamily: Georgia, "Times New Roman", Times, serif; +@monoFontFamily: Menlo, Monaco, Consolas, "Courier New", monospace; + +@baseFontSize: 14px; +@baseFontFamily: @sansFontFamily; +@baseLineHeight: 20px; +@altFontFamily: @monoFontFamily; + +@headingsFontFamily: 'Telex', sans-serif; // empty to use BS default, @baseFontFamily +@headingsFontWeight: bold; // instead of browser default, bold +@headingsColor: #317EAC; // empty to use BS default, @textColor + + +// Component sizing +// ------------------------- +// Based on 14px font-size and 20px line-height + +@fontSizeLarge: @baseFontSize * 1.25; // ~18px +@fontSizeSmall: @baseFontSize * 0.85; // ~12px +@fontSizeMini: @baseFontSize * 0.75; // ~11px + +@paddingLarge: 11px 19px; // 44px +@paddingSmall: 2px 10px; // 26px +@paddingMini: 0px 6px; // 22px + +@baseBorderRadius: 4px; +@borderRadiusLarge: 6px; +@borderRadiusSmall: 3px; + + +// Tables +// ------------------------- +@tableBackground: transparent; // overall background-color +@tableBackgroundAccent: #f9f9f9; // for striping +@tableBackgroundHover: #f5f5f5; // for hover +@tableBorder: #ddd; // table and cell border + +// Buttons +// ------------------------- +@btnBackground: @white; +@btnBackgroundHighlight: darken(@white, 10%); +@btnBorder: darken(@white, 20%); + +@btnPrimaryBackground: @linkColor; +@btnPrimaryBackgroundHighlight: spin(@btnPrimaryBackground, 15%); + +@btnInfoBackground: @purple; +@btnInfoBackgroundHighlight: #2f96b4; + +@btnSuccessBackground: @green; +@btnSuccessBackgroundHighlight: #51a351; + +@btnWarningBackground: @orange; +@btnWarningBackgroundHighlight: @orange; + +@btnDangerBackground: @red; +@btnDangerBackgroundHighlight: #bd362f; + +@btnInverseBackground: @blueDark; +@btnInverseBackgroundHighlight: @grayDarker; + + +// Forms +// ------------------------- +@inputBackground: @white; +@inputBorder: #ccc; +@inputBorderRadius: @baseBorderRadius; +@inputDisabledBackground: @grayLighter; +@formActionsBackground: #f5f5f5; +@inputHeight: @baseLineHeight + 10px; // base line-height + 8px vertical padding + 2px top/bottom border + + +// Dropdowns +// ------------------------- +@dropdownBackground: @white; +@dropdownBorder: rgba(0,0,0,.2); +@dropdownDividerTop: #e5e5e5; +@dropdownDividerBottom: @white; + +@dropdownLinkColor: @grayDark; +@dropdownLinkColorHover: @white; +@dropdownLinkColorActive: @white; + +@dropdownLinkBackgroundActive: @linkColor; +@dropdownLinkBackgroundHover: @dropdownLinkBackgroundActive; + + + +// COMPONENT VARIABLES +// -------------------------------------------------- + + +// Z-index master list +// ------------------------- +// Used for a bird's eye view of components dependent on the z-axis +// Try to avoid customizing these :) +@zindexDropdown: 1000; +@zindexPopover: 1010; +@zindexTooltip: 1020; +@zindexFixedNavbar: 1030; +@zindexModalBackdrop: 1040; +@zindexModal: 1050; + + +// Sprite icons path +// ------------------------- +@iconSpritePath: "../img/glyphicons-halflings.png"; +@iconWhiteSpritePath: "../img/glyphicons-halflings-white.png"; + + +// Input placeholder text color +// ------------------------- +@placeholderText: @grayLight; + + +// Hr border color +// ------------------------- +@hrBorder: @grayLighter; + + +// Horizontal forms & lists +// ------------------------- +@horizontalComponentOffset: 180px; + + +// Wells +// ------------------------- +@wellBackground: #f5f5f5; + + +// Navbar +// ------------------------- +@navbarCollapseWidth: 979px; +@navbarCollapseDesktopWidth: @navbarCollapseWidth + 1; + +@navbarHeight: 50px; +@navbarBackgroundHighlight: lighten(@navbarBackground, 8%); +@navbarBackground: @blue; +@navbarBorder: darken(@navbarBackground, 8%); + +@navbarText: @grayLighter; +@navbarLinkColor: @white; +@navbarLinkColorHover: @white; +@navbarLinkColorActive: @navbarLinkColorHover; +@navbarLinkBackgroundHover: darken(@navbarBackground, 12%); +@navbarLinkBackgroundActive: darken(@navbarBackground, 12%); + +@navbarBrandColor: @navbarLinkColor; + +// Inverted navbar +@navbarInverseBackground: @blueDark; +@navbarInverseBackgroundHighlight: lighten(@navbarInverseBackground, 5%); +@navbarInverseBorder: darken(@navbarInverseBackground, 3%); + +@navbarInverseText: @white; +@navbarInverseLinkColor: @white; +@navbarInverseLinkColorHover: @white; +@navbarInverseLinkColorActive: @white; +@navbarInverseLinkBackgroundHover: darken(@navbarInverseBackground, 6%); +@navbarInverseLinkBackgroundActive: darken(@navbarInverseBackground, 6%); + +@navbarInverseSearchBackground: @white; +@navbarInverseSearchBackgroundFocus: @white; +@navbarInverseSearchBorder: @navbarInverseBackground; +@navbarInverseSearchPlaceholderColor: @grayLight; + +@navbarInverseBrandColor: @navbarInverseLinkColor; + + +// Pagination +// ------------------------- +@paginationBackground: #fff; +@paginationBorder: #ddd; +@paginationActiveBackground: #f5f5f5; + + +// Hero unit +// ------------------------- +@heroUnitBackground: @grayLighter; +@heroUnitHeadingColor: inherit; +@heroUnitLeadColor: inherit; + + +// Form states and alerts +// ------------------------- +@warningText: @orange; +@warningBackground: #F1CEAB; +@warningBorder: darken(spin(@warningBackground, -10), 3%); + +@errorText: darken(#C45559, 5%); +@errorBackground: #F2BDB1; +@errorBorder: darken(spin(@errorBackground, -10), 3%); + +@successText: darken(@green, 5%); +@successBackground: #D5ECBF; +@successBorder: darken(spin(@successBackground, -10), 5%); + +@infoText: darken(@blue, 10%); +@infoBackground: #A7DFF1; +@infoBorder: darken(spin(@infoBackground, -10), 7%); + + +// Tooltips and popovers +// ------------------------- +@tooltipColor: #fff; +@tooltipBackground: #000; +@tooltipArrowWidth: 5px; +@tooltipArrowColor: @tooltipBackground; + +@popoverBackground: #fff; +@popoverArrowWidth: 10px; +@popoverArrowColor: #fff; +@popoverTitleBackground: darken(@popoverBackground, 3%); + +// Special enhancement for popovers +@popoverArrowOuterWidth: @popoverArrowWidth + 1; +@popoverArrowOuterColor: rgba(0,0,0,.25); + + + +// GRID +// -------------------------------------------------- + + +// Default 940px grid +// ------------------------- +@gridColumns: 12; +@gridColumnWidth: 60px; +@gridGutterWidth: 20px; +@gridRowWidth: (@gridColumns * @gridColumnWidth) + (@gridGutterWidth * (@gridColumns - 1)); + +// 1200px min +@gridColumnWidth1200: 70px; +@gridGutterWidth1200: 30px; +@gridRowWidth1200: (@gridColumns * @gridColumnWidth1200) + (@gridGutterWidth1200 * (@gridColumns - 1)); + +// 768px-979px +@gridColumnWidth768: 42px; +@gridGutterWidth768: 20px; +@gridRowWidth768: (@gridColumns * @gridColumnWidth768) + (@gridGutterWidth768 * (@gridColumns - 1)); + + +// Fluid grid +// ------------------------- +@fluidGridColumnWidth: percentage(@gridColumnWidth/@gridRowWidth); +@fluidGridGutterWidth: percentage(@gridGutterWidth/@gridRowWidth); + +// 1200px min +@fluidGridColumnWidth1200: percentage(@gridColumnWidth1200/@gridRowWidth1200); +@fluidGridGutterWidth1200: percentage(@gridGutterWidth1200/@gridRowWidth1200); + +// 768px-979px +@fluidGridColumnWidth768: percentage(@gridColumnWidth768/@gridRowWidth768); +@fluidGridGutterWidth768: percentage(@gridGutterWidth768/@gridRowWidth768); diff --git a/Docs/docstrap-master/template/jsdoc.conf.json b/Docs/docstrap-master/template/jsdoc.conf.json new file mode 100644 index 00000000..a445deed --- /dev/null +++ b/Docs/docstrap-master/template/jsdoc.conf.json @@ -0,0 +1,25 @@ +{ + "tags" : { + "allowUnknownTags" : true + }, + "plugins" : ["plugins/markdown"], + "templates" : { + "cleverLinks" : false, + "monospaceLinks" : false, + "default" : { + "outputSourceFiles" : true + }, + "systemName" : "DocStrap", + "footer" : "", + "copyright" : "DocStrap Copyright © 2012-2013 The contributors to the JSDoc3 and DocStrap projects.", + "navType" : "vertical", + "theme" : "cerulean", + "linenums" : true, + "collapseSymbols" : false, + "inverseNav" : true + }, + "markdown" : { + "parser" : "gfm", + "hardwrap" : true + } +} diff --git a/Docs/docstrap-master/template/publish.js b/Docs/docstrap-master/template/publish.js new file mode 100644 index 00000000..555e7386 --- /dev/null +++ b/Docs/docstrap-master/template/publish.js @@ -0,0 +1,651 @@ +"use strict"; +/** + * @module template/publish + * @type {*} + */ +/*global env: true */ +var template = require( 'jsdoc/template' ), + fs = require( 'jsdoc/fs' ), + _ = require( 'underscore' ), + path = require( 'jsdoc/path' ), + taffy = require( 'taffydb' ).taffy, + handle = require( 'jsdoc/util/error' ).handle, + helper = require( 'jsdoc/util/templateHelper' ), + htmlsafe = helper.htmlsafe, + linkto = helper.linkto, + resolveAuthorLinks = helper.resolveAuthorLinks, + scopeToPunc = helper.scopeToPunc, + hasOwnProp = Object.prototype.hasOwnProperty, + conf = env.conf.templates || {}, + data, + view, + outdir = env.opts.destination; + +var globalUrl = helper.getUniqueFilename( 'global' ); +var indexUrl = helper.getUniqueFilename( 'index' ); + +var navOptions = { + systemName : conf.systemName || "Documentation", + navType : conf.navType || "vertical", + footer : conf.footer || "", + copyright : conf.copyright || "", + theme : conf.theme || "simplex", + linenums : conf.linenums, + collapseSymbols : conf.collapseSymbols || false, + inverseNav : conf.inverseNav +}; + +var navigationMaster = { + index : { + title : navOptions.systemName, + link : indexUrl, + members : [] + }, + namespace : { + title : "Namespaces", + link : helper.getUniqueFilename( "namespaces.list" ), + members : [] + }, + module : { + title : "Modules", + link : helper.getUniqueFilename( "modules.list" ), + members : [] + }, + class : { + title : "Classes", + link : helper.getUniqueFilename( 'classes.list' ), + members : [] + }, + + mixin : { + title : "Mixins", + link : helper.getUniqueFilename( "mixins.list" ), + members : [] + }, + event : { + title : "Events", + link : helper.getUniqueFilename( "events.list" ), + members : [] + }, + tutorial : { + title : "Tutorials", + link : helper.getUniqueFilename( "tutorials.list" ), + members : [] + }, + global : { + title : "Global", + link : globalUrl, + members : [] + + }, + external : { + title : "Externals", + link : helper.getUniqueFilename( "externals.list" ), + members : [] + } +}; + +function find( spec ) { + return helper.find( data, spec ); +} + +function tutoriallink( tutorial ) { + return helper.toTutorial( tutorial, null, { tag : 'em', classname : 'disabled', prefix : 'Tutorial: ' } ); +} + +function getAncestorLinks( doclet ) { + return helper.getAncestorLinks( data, doclet ); +} + +function hashToLink( doclet, hash ) { + if ( !/^(#.+)/.test( hash ) ) { return hash; } + + var url = helper.createLink( doclet ); + + url = url.replace( /(#.+|$)/, hash ); + return '' + hash + ''; +} + +function needsSignature( doclet ) { + var needsSig = false; + + // function and class definitions always get a signature + if ( doclet.kind === 'function' || doclet.kind === 'class' ) { + needsSig = true; + } + // typedefs that contain functions get a signature, too + else if ( doclet.kind === 'typedef' && doclet.type && doclet.type.names && + doclet.type.names.length ) { + for ( var i = 0, l = doclet.type.names.length; i < l; i++ ) { + if ( doclet.type.names[i].toLowerCase() === 'function' ) { + needsSig = true; + break; + } + } + } + + return needsSig; +} + +function addSignatureParams( f ) { + var params = helper.getSignatureParams( f, 'optional' ); + + f.signature = (f.signature || '') + '(' + params.join( ', ' ) + ')'; +} + +function addSignatureReturns( f ) { + var returnTypes = helper.getSignatureReturns( f ); + + f.signature = '' + (f.signature || '') + '' + '' + (returnTypes.length ? ' → {' + returnTypes.join( '|' ) + '}' : '') + ''; +} + +function addSignatureTypes( f ) { + var types = helper.getSignatureTypes( f ); + + f.signature = (f.signature || '') + '' + (types.length ? ' :' + types.join( '|' ) : '') + ''; +} + +function addAttribs( f ) { + var attribs = helper.getAttribs( f ); + + f.attribs = '' + htmlsafe( attribs.length ? '<' + attribs.join( ', ' ) + '> ' : '' ) + ''; +} + +function shortenPaths( files, commonPrefix ) { + // always use forward slashes + var regexp = new RegExp( '\\\\', 'g' ); + + Object.keys( files ).forEach( function ( file ) { + files[file].shortened = files[file].resolved.replace( commonPrefix, '' ) + .replace( regexp, '/' ); + } ); + + return files; +} + +function resolveSourcePath( filepath ) { + return path.resolve( process.cwd(), filepath ); +} + +function getPathFromDoclet( doclet ) { + if ( !doclet.meta ) { + return; + } + + var filepath = doclet.meta.path && doclet.meta.path !== 'null' ? + doclet.meta.path + '/' + doclet.meta.filename : + doclet.meta.filename; + + return filepath; +} + +function generate( docType, title, docs, filename, resolveLinks ) { + resolveLinks = resolveLinks === false ? false : true; + + var docData = { + title : title, + docs : docs, + docType : docType + }; + + var outpath = path.join( outdir, filename ), + html = view.render( 'container.tmpl', docData ); + + if ( resolveLinks ) { + html = helper.resolveLinks( html ); // turn {@link foo} into foo + } + + fs.writeFileSync( outpath, html, 'utf8' ); +} + +function generateSourceFiles( sourceFiles ) { + Object.keys( sourceFiles ).forEach( function ( file ) { + var source; + // links are keyed to the shortened path in each doclet's `meta.filename` property + var sourceOutfile = helper.getUniqueFilename( sourceFiles[file].shortened ); + helper.registerLink( sourceFiles[file].shortened, sourceOutfile ); + + try { + source = { + kind : 'source', + code : helper.htmlsafe( fs.readFileSync( sourceFiles[file].resolved, 'utf8' ) ) + }; + } + catch ( e ) { + handle( e ); + } + + generate( 'source', 'Source: ' + sourceFiles[file].shortened, [source], sourceOutfile, + false ); + } ); +} + +/** + * Look for classes or functions with the same name as modules (which indicates that the module + * exports only that class or function), then attach the classes or functions to the `module` + * property of the appropriate module doclets. The name of each class or function is also updated + * for display purposes. This function mutates the original arrays. + * + * @private + * @param {Array.} doclets - The array of classes and functions to + * check. + * @param {Array.} modules - The array of module doclets to search. + */ +function attachModuleSymbols( doclets, modules ) { + var symbols = {}; + + // build a lookup table + doclets.forEach( function ( symbol ) { + symbols[symbol.longname] = symbol; + } ); + + return modules.map( function ( module ) { + if ( symbols[module.longname] ) { + module.module = symbols[module.longname]; + module.module.name = module.module.name.replace( 'module:', 'require("' ) + '")'; + } + } ); +} + +/** + * Create the navigation sidebar. + * @param {object} members The members that will be used to create the sidebar. + * @param {array} members.classes + * @param {array} members.externals + * @param {array} members.globals + * @param {array} members.mixins + * @param {array} members.modules + * @param {array} members.namespaces + * @param {array} members.tutorials + * @param {array} members.events + * @return {string} The HTML for the navigation sidebar. + */ +function buildNav( members ) { + + var seen = {}; + var nav = navigationMaster; + if ( members.modules.length ) { + + members.modules.forEach( function ( m ) { + if ( !hasOwnProp.call( seen, m.longname ) ) { + + nav.module.members.push( linkto( m.longname, m.name ) ); + } + seen[m.longname] = true; + } ); + } + + if ( members.externals.length ) { + + members.externals.forEach( function ( e ) { + if ( !hasOwnProp.call( seen, e.longname ) ) { + + nav.external.members.push( linkto( e.longname, e.name.replace( /(^"|"$)/g, '' ) ) ); + } + seen[e.longname] = true; + } ); + } + + if ( members.classes.length ) { + + members.classes.forEach( function ( c ) { + if ( !hasOwnProp.call( seen, c.longname ) ) { + + nav.class.members.push( linkto( c.longname, c.name ) ); + } + seen[c.longname] = true; + } ); + + } + + if ( members.events.length ) { + + members.events.forEach( function ( e ) { + if ( !hasOwnProp.call( seen, e.longname ) ) { + + nav.event.members.push( linkto( e.longname, e.name ) ); + } + seen[e.longname] = true; + } ); + + } + + if ( members.namespaces.length ) { + + members.namespaces.forEach( function ( n ) { + if ( !hasOwnProp.call( seen, n.longname ) ) { + + nav.namespace.members.push( linkto( n.longname, n.name ) ); + } + seen[n.longname] = true; + } ); + + } + + if ( members.mixins.length ) { + + members.mixins.forEach( function ( m ) { + if ( !hasOwnProp.call( seen, m.longname ) ) { + + nav.mixin.members.push( linkto( m.longname, m.name ) ); + } + seen[m.longname] = true; + } ); + + } + + if ( members.tutorials.length ) { + + members.tutorials.forEach( function ( t ) { + + nav.tutorial.members.push( tutoriallink( t.name ) ); + } ); + + } + + if ( members.globals.length ) { + members.globals.forEach( function ( g ) { + if ( g.kind !== 'typedef' && !hasOwnProp.call( seen, g.longname ) ) { + + nav.global.members.push( linkto( g.longname, g.name ) ); + } + seen[g.longname] = true; + } ); + } + + var topLevelNav = []; + _.each( nav, function ( entry, name ) { + if ( entry.members.length > 0 && name !== "index" ) { + topLevelNav.push( { + title : entry.title, + link : entry.link, + members : entry.members + } ); + } + } ); + nav.topLevelNav = topLevelNav; +} + +/** + @param {TAFFY} taffyData See . + @param {object} opts + @param {Tutorial} tutorials + */ +exports.publish = function ( taffyData, opts, tutorials ) { + data = taffyData; + + conf['default'] = conf['default'] || {}; + + var templatePath = opts.template; + view = new template.Template( templatePath + '/tmpl' ); + + // claim some special filenames in advance, so the All-Powerful Overseer of Filename Uniqueness + // doesn't try to hand them out later +// var indexUrl = helper.getUniqueFilename( 'index' ); + // don't call registerLink() on this one! 'index' is also a valid longname + +// var globalUrl = helper.getUniqueFilename( 'global' ); + helper.registerLink( 'global', globalUrl ); + + // set up templating + view.layout = 'layout.tmpl'; + + // set up tutorials for helper + helper.setTutorials( tutorials ); + + data = helper.prune( data ); + data.sort( 'longname, version, since' ); + helper.addEventListeners( data ); + + var sourceFiles = {}; + var sourceFilePaths = []; + data().each( function ( doclet ) { + doclet.attribs = ''; + + if ( doclet.examples ) { + doclet.examples = doclet.examples.map( function ( example ) { + var caption, code; + + if ( example.match( /^\s*([\s\S]+?)<\/caption>(\s*[\n\r])([\s\S]+)$/i ) ) { + caption = RegExp.$1; + code = RegExp.$3; + } + + return { + caption : caption || '', + code : code || example + }; + } ); + } + if ( doclet.see ) { + doclet.see.forEach( function ( seeItem, i ) { + doclet.see[i] = hashToLink( doclet, seeItem ); + } ); + } + + // build a list of source files + var sourcePath; + var resolvedSourcePath; + if ( doclet.meta ) { + sourcePath = getPathFromDoclet( doclet ); + resolvedSourcePath = resolveSourcePath( sourcePath ); + sourceFiles[sourcePath] = { + resolved : resolvedSourcePath, + shortened : null + }; + + sourceFilePaths.push( resolvedSourcePath ); + } + } ); + + // update outdir if necessary, then create outdir + var packageInfo = ( find( {kind : 'package'} ) || [] ) [0]; + if ( packageInfo && packageInfo.name ) { + outdir = path.join( outdir, packageInfo.name, packageInfo.version ); + } + fs.mkPath( outdir ); + + // copy static files to outdir + var fromDir = path.join( templatePath, 'static' ), + staticFiles = fs.ls( fromDir, 3 ); + + staticFiles.forEach( function ( fileName ) { + var toDir = fs.toDir( fileName.replace( fromDir, outdir ) ); + fs.mkPath( toDir ); + fs.copyFileSync( fileName, toDir ); + } ); + + if ( sourceFilePaths.length ) { + sourceFiles = shortenPaths( sourceFiles, path.commonPrefix( sourceFilePaths ) ); + } + data().each( function ( doclet ) { + var url = helper.createLink( doclet ); + helper.registerLink( doclet.longname, url ); + + // replace the filename with a shortened version of the full path + var docletPath; + if ( doclet.meta ) { + docletPath = getPathFromDoclet( doclet ); + docletPath = sourceFiles[docletPath].shortened; + if ( docletPath ) { + doclet.meta.filename = docletPath; + } + } + } ); + + data().each( function ( doclet ) { + var url = helper.longnameToUrl[doclet.longname]; + + if ( url.indexOf( '#' ) > -1 ) { + doclet.id = helper.longnameToUrl[doclet.longname].split( /#/ ).pop(); + } + else { + doclet.id = doclet.name; + } + + if ( needsSignature( doclet ) ) { + addSignatureParams( doclet ); + addSignatureReturns( doclet ); + addAttribs( doclet ); + } + } ); + + // do this after the urls have all been generated + data().each( function ( doclet ) { + doclet.ancestors = getAncestorLinks( doclet ); + + if ( doclet.kind === 'member' ) { + addSignatureTypes( doclet ); + addAttribs( doclet ); + } + + if ( doclet.kind === 'constant' ) { + addSignatureTypes( doclet ); + addAttribs( doclet ); + doclet.kind = 'member'; + } + } ); + + var members = helper.getMembers( data ); + members.tutorials = tutorials.children; + + // add template helpers + view.find = find; + view.linkto = linkto; + view.resolveAuthorLinks = resolveAuthorLinks; + view.tutoriallink = tutoriallink; + view.htmlsafe = htmlsafe; + + // once for all + buildNav( members ); + view.nav = navigationMaster; + view.navOptions = navOptions; + attachModuleSymbols( find( { kind : ['class', 'function'], longname : {left : 'module:'} } ), + members.modules ); + + // only output pretty-printed source files if requested; do this before generating any other + // pages, so the other pages can link to the source files + if ( conf['default'].outputSourceFiles ) { + generateSourceFiles( sourceFiles ); + } + + if ( members.globals.length ) { + generate( 'global', 'Global', [ + {kind : 'globalobj'} + ], globalUrl ); + } + + // some browsers can't make the dropdown work + if ( view.nav.module && view.nav.module.members.length ) { + generate( 'module', view.nav.module.title, [ + {kind : 'sectionIndex', contents : view.nav.module} + ], navigationMaster.module.link ); + } + + if ( view.nav.class && view.nav.class.members.length ) { + generate( 'class', view.nav.class.title, [ + {kind : 'sectionIndex', contents : view.nav.class} + ], navigationMaster.class.link ); + } + + if ( view.nav.namespace && view.nav.namespace.members.length ) { + generate( 'namespace', view.nav.namespace.title, [ + {kind : 'sectionIndex', contents : view.nav.namespace} + ], navigationMaster.namespace.link ); + } + + if ( view.nav.mixin && view.nav.mixin.members.length ) { + generate( 'mixin', view.nav.mixin.title, [ + {kind : 'sectionIndex', contents : view.nav.mixin} + ], navigationMaster.mixin.link ); + } + + if ( view.nav.external && view.nav.external.members.length ) { + generate( 'external', view.nav.external.title, [ + {kind : 'sectionIndex', contents : view.nav.external} + ], navigationMaster.external.link ); + } + + if ( view.nav.tutorial && view.nav.tutorial.members.length ) { + generate( 'tutorial', view.nav.tutorial.title, [ + {kind : 'sectionIndex', contents : view.nav.tutorial} + ], navigationMaster.tutorial.link ); + } + + // index page displays information from package.json and lists files + var files = find( {kind : 'file'} ), + packages = find( {kind : 'package'} ); + + generate( 'index', 'Index', + packages.concat( + [ + {kind : 'mainpage', readme : opts.readme, longname : (opts.mainpagetitle) ? opts.mainpagetitle : 'Main Page'} + ] + ).concat( files ), + indexUrl ); + + // set up the lists that we'll use to generate pages + var classes = taffy( members.classes ); + var modules = taffy( members.modules ); + var namespaces = taffy( members.namespaces ); + var mixins = taffy( members.mixins ); + var externals = taffy( members.externals ); + + for ( var longname in helper.longnameToUrl ) { + if ( hasOwnProp.call( helper.longnameToUrl, longname ) ) { + var myClasses = helper.find( classes, {longname : longname} ); + if ( myClasses.length ) { + generate( 'class', 'Class: ' + myClasses[0].name, myClasses, helper.longnameToUrl[longname] ); + } + + var myModules = helper.find( modules, {longname : longname} ); + if ( myModules.length ) { + generate( 'module', 'Module: ' + myModules[0].name, myModules, helper.longnameToUrl[longname] ); + } + + var myNamespaces = helper.find( namespaces, {longname : longname} ); + if ( myNamespaces.length ) { + generate( 'namespace', 'Namespace: ' + myNamespaces[0].name, myNamespaces, helper.longnameToUrl[longname] ); + } + + var myMixins = helper.find( mixins, {longname : longname} ); + if ( myMixins.length ) { + generate( 'mixin', 'Mixin: ' + myMixins[0].name, myMixins, helper.longnameToUrl[longname] ); + } + + var myExternals = helper.find( externals, {longname : longname} ); + if ( myExternals.length ) { + generate( 'external', 'External: ' + myExternals[0].name, myExternals, helper.longnameToUrl[longname] ); + } + } + } + + // TODO: move the tutorial functions to templateHelper.js + function generateTutorial( title, tutorial, filename ) { + var tutorialData = { + title : title, + header : tutorial.title, + content : tutorial.parse(), + children : tutorial.children, + docs : null + }; + + var tutorialPath = path.join( outdir, filename ), + html = view.render( 'tutorial.tmpl', tutorialData ); + + // yes, you can use {@link} in tutorials too! + html = helper.resolveLinks( html ); // turn {@link foo} into foo + + fs.writeFileSync( tutorialPath, html, 'utf8' ); + } + + // tutorials can have only one parent so there is no risk for loops + function saveChildren( node ) { + node.children.forEach( function ( child ) { + generateTutorial( 'tutorial' + child.title, child, helper.tutorialToUrl( child.name ) ); + saveChildren( child ); + } ); + } + + saveChildren( tutorials ); +}; diff --git a/Docs/docstrap-master/template/static/img/glyphicons-halflings-white.png b/Docs/docstrap-master/template/static/img/glyphicons-halflings-white.png new file mode 100644 index 00000000..3bf6484a Binary files /dev/null and b/Docs/docstrap-master/template/static/img/glyphicons-halflings-white.png differ diff --git a/Docs/docstrap-master/template/static/img/glyphicons-halflings.png b/Docs/docstrap-master/template/static/img/glyphicons-halflings.png new file mode 100644 index 00000000..a9969993 Binary files /dev/null and b/Docs/docstrap-master/template/static/img/glyphicons-halflings.png differ diff --git a/Docs/docstrap-master/template/static/scripts/URI.js b/Docs/docstrap-master/template/static/scripts/URI.js new file mode 100644 index 00000000..91b01ee4 --- /dev/null +++ b/Docs/docstrap-master/template/static/scripts/URI.js @@ -0,0 +1,1429 @@ +/*! + * URI.js - Mutating URLs + * + * Version: 1.8.3 + * + * Author: Rodney Rehm + * Web: http://medialize.github.com/URI.js/ + * + * Licensed under + * MIT License http://www.opensource.org/licenses/mit-license + * GPL v3 http://opensource.org/licenses/GPL-3.0 + * + */ +(function(root, factory) { + // https://github.com/umdjs/umd/blob/master/returnExports.js + if (typeof exports === 'object') { + // Node + module.exports = factory(require('./punycode'), require('./IPv6'), require('./SecondLevelDomains')); + } else if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['./punycode', './IPv6', './SecondLevelDomains'], factory); + } else { + // Browser globals (root is window) + root.URI = factory(root.punycode, root.IPv6, root.SecondLevelDomains); + } +}(this, function(punycode, IPv6, SLD) { + "use strict"; + + function URI(url, base) { + // Allow instantiation without the 'new' keyword + if (!(this instanceof URI)) { + return new URI(url, base); + } + if (url === undefined) { + if (typeof location !== 'undefined') { + url = location.href + ""; + } else { + url = ""; + } + } + this.href(url); + // resolve to base according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#constructor + if (base !== undefined) { + return this.absoluteTo(base); + } + return this; + }; + var p = URI.prototype; + var hasOwn = Object.prototype.hasOwnProperty; + + function escapeRegEx(string) { + // https://github.com/medialize/URI.js/commit/85ac21783c11f8ccab06106dba9735a31a86924d#commitcomment-821963 + return string.replace(/([.*+?^=!:${}()|[\]\/\\])/g, '\\$1'); + } + + function isArray(obj) { + return String(Object.prototype.toString.call(obj)) === "[object Array]"; + } + + function filterArrayValues(data, value) { + var lookup = {}; + var i, length; + if (isArray(value)) { + for (i = 0, length = value.length; i < length; i++) { + lookup[value[i]] = true; + } + } else { + lookup[value] = true; + } + for (i = 0, length = data.length; i < length; i++) { + if (lookup[data[i]] !== undefined) { + data.splice(i, 1); + length--; + i--; + } + } + return data; + } + URI._parts = function() { + return { + protocol: null, + username: null, + password: null, + hostname: null, + urn: null, + port: null, + path: null, + query: null, + fragment: null, + // state + duplicateQueryParameters: URI.duplicateQueryParameters + }; + }; + // state: allow duplicate query parameters (a=1&a=1) + URI.duplicateQueryParameters = false; + // static properties + URI.protocol_expression = /^[a-z][a-z0-9-+-]*$/i; + URI.idn_expression = /[^a-z0-9\.-]/i; + URI.punycode_expression = /(xn--)/i; + // well, 333.444.555.666 matches, but it sure ain't no IPv4 - do we care? + URI.ip4_expression = /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/; + // credits to Rich Brown + // source: http://forums.intermapper.com/viewtopic.php?p=1096#1096 + // specification: http://www.ietf.org/rfc/rfc4291.txt + URI.ip6_expression = /^\s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)(\.(25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)){3}))|:)))(%.+)?\s*$/; + // gruber revised expression - http://rodneyrehm.de/t/url-regex.html + URI.find_uri_expression = /\b((?:[a-z][\w-]+:(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))/ig; + // http://www.iana.org/assignments/uri-schemes.html + // http://en.wikipedia.org/wiki/List_of_TCP_and_UDP_port_numbers#Well-known_ports + URI.defaultPorts = { + http: "80", + https: "443", + ftp: "21", + gopher: "70", + ws: "80", + wss: "443" + }; + // allowed hostname characters according to RFC 3986 + // ALPHA DIGIT "-" "." "_" "~" "!" "$" "&" "'" "(" ")" "*" "+" "," ";" "=" %encoded + // I've never seen a (non-IDN) hostname other than: ALPHA DIGIT . - + URI.invalid_hostname_characters = /[^a-zA-Z0-9\.-]/; + // encoding / decoding according to RFC3986 + + function strictEncodeURIComponent(string) { + // see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIComponent + return encodeURIComponent(string).replace(/[!'()*]/g, escape).replace(/\*/g, "%2A"); + } + URI.encode = strictEncodeURIComponent; + URI.decode = decodeURIComponent; + URI.iso8859 = function() { + URI.encode = escape; + URI.decode = unescape; + }; + URI.unicode = function() { + URI.encode = strictEncodeURIComponent; + URI.decode = decodeURIComponent; + }; + URI.characters = { + pathname: { + encode: { + // RFC3986 2.1: For consistency, URI producers and normalizers should + // use uppercase hexadecimal digits for all percent-encodings. + expression: /%(24|26|2B|2C|3B|3D|3A|40)/ig, + map: { + // -._~!'()* + "%24": "$", + "%26": "&", + "%2B": "+", + "%2C": ",", + "%3B": ";", + "%3D": "=", + "%3A": ":", + "%40": "@" + } + }, + decode: { + expression: /[\/\?#]/g, + map: { + "/": "%2F", + "?": "%3F", + "#": "%23" + } + } + }, + reserved: { + encode: { + // RFC3986 2.1: For consistency, URI producers and normalizers should + // use uppercase hexadecimal digits for all percent-encodings. + expression: /%(21|23|24|26|27|28|29|2A|2B|2C|2F|3A|3B|3D|3F|40|5B|5D)/ig, + map: { + // gen-delims + "%3A": ":", + "%2F": "/", + "%3F": "?", + "%23": "#", + "%5B": "[", + "%5D": "]", + "%40": "@", + // sub-delims + "%21": "!", + "%24": "$", + "%26": "&", + "%27": "'", + "%28": "(", + "%29": ")", + "%2A": "*", + "%2B": "+", + "%2C": ",", + "%3B": ";", + "%3D": "=" + } + } + } + }; + URI.encodeQuery = function(string) { + return URI.encode(string + "").replace(/%20/g, '+'); + }; + URI.decodeQuery = function(string) { + return URI.decode((string + "").replace(/\+/g, '%20')); + }; + URI.recodePath = function(string) { + var segments = (string + "").split('/'); + for (var i = 0, length = segments.length; i < length; i++) { + segments[i] = URI.encodePathSegment(URI.decode(segments[i])); + } + return segments.join('/'); + }; + URI.decodePath = function(string) { + var segments = (string + "").split('/'); + for (var i = 0, length = segments.length; i < length; i++) { + segments[i] = URI.decodePathSegment(segments[i]); + } + return segments.join('/'); + }; + // generate encode/decode path functions + var _parts = { + 'encode': 'encode', + 'decode': 'decode' + }; + var _part; + var generateAccessor = function(_group, _part) { + return function(string) { + return URI[_part](string + "").replace(URI.characters[_group][_part].expression, function(c) { + return URI.characters[_group][_part].map[c]; + }); + }; + }; + for (_part in _parts) { + URI[_part + "PathSegment"] = generateAccessor("pathname", _parts[_part]); + } + URI.encodeReserved = generateAccessor("reserved", "encode"); + URI.parse = function(string, parts) { + var pos, t; + if (!parts) { + parts = {}; + } + // [protocol"://"[username[":"password]"@"]hostname[":"port]"/"?][path]["?"querystring]["#"fragment] + // extract fragment + pos = string.indexOf('#'); + if (pos > -1) { + // escaping? + parts.fragment = string.substring(pos + 1) || null; + string = string.substring(0, pos); + } + // extract query + pos = string.indexOf('?'); + if (pos > -1) { + // escaping? + parts.query = string.substring(pos + 1) || null; + string = string.substring(0, pos); + } + // extract protocol + if (string.substring(0, 2) === '//') { + // relative-scheme + parts.protocol = ''; + string = string.substring(2); + // extract "user:pass@host:port" + string = URI.parseAuthority(string, parts); + } else { + pos = string.indexOf(':'); + if (pos > -1) { + parts.protocol = string.substring(0, pos); + if (parts.protocol && !parts.protocol.match(URI.protocol_expression)) { + // : may be within the path + parts.protocol = undefined; + } else if (parts.protocol === 'file') { + // the file scheme: does not contain an authority + string = string.substring(pos + 3); + } else if (string.substring(pos + 1, pos + 3) === '//') { + string = string.substring(pos + 3); + // extract "user:pass@host:port" + string = URI.parseAuthority(string, parts); + } else { + string = string.substring(pos + 1); + parts.urn = true; + } + } + } + // what's left must be the path + parts.path = string; + // and we're done + return parts; + }; + URI.parseHost = function(string, parts) { + // extract host:port + var pos = string.indexOf('/'); + var bracketPos; + var t; + if (pos === -1) { + pos = string.length; + } + if (string[0] === "[") { + // IPv6 host - http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-04#section-6 + // I claim most client software breaks on IPv6 anyways. To simplify things, URI only accepts + // IPv6+port in the format [2001:db8::1]:80 (for the time being) + bracketPos = string.indexOf(']'); + parts.hostname = string.substring(1, bracketPos) || null; + parts.port = string.substring(bracketPos + 2, pos) || null; + } else if (string.indexOf(':') !== string.lastIndexOf(':')) { + // IPv6 host contains multiple colons - but no port + // this notation is actually not allowed by RFC 3986, but we're a liberal parser + parts.hostname = string.substring(0, pos) || null; + parts.port = null; + } else { + t = string.substring(0, pos).split(':'); + parts.hostname = t[0] || null; + parts.port = t[1] || null; + } + if (parts.hostname && string.substring(pos)[0] !== '/') { + pos++; + string = "/" + string; + } + return string.substring(pos) || '/'; + }; + URI.parseAuthority = function(string, parts) { + string = URI.parseUserinfo(string, parts); + return URI.parseHost(string, parts); + }; + URI.parseUserinfo = function(string, parts) { + // extract username:password + var pos = string.indexOf('@'); + var firstSlash = string.indexOf('/'); + var t; + // authority@ must come before /path + if (pos > -1 && (firstSlash === -1 || pos < firstSlash)) { + t = string.substring(0, pos).split(':'); + parts.username = t[0] ? URI.decode(t[0]) : null; + t.shift(); + parts.password = t[0] ? URI.decode(t.join(':')) : null; + string = string.substring(pos + 1); + } else { + parts.username = null; + parts.password = null; + } + return string; + }; + URI.parseQuery = function(string) { + if (!string) { + return {}; + } + // throw out the funky business - "?"[name"="value"&"]+ + string = string.replace(/&+/g, '&').replace(/^\?*&*|&+$/g, ''); + if (!string) { + return {}; + } + var items = {}; + var splits = string.split('&'); + var length = splits.length; + var v, name, value; + for (var i = 0; i < length; i++) { + v = splits[i].split('='); + name = URI.decodeQuery(v.shift()); + // no "=" is null according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#collect-url-parameters + value = v.length ? URI.decodeQuery(v.join('=')) : null; + if (items[name]) { + if (typeof items[name] === "string") { + items[name] = [items[name]]; + } + items[name].push(value); + } else { + items[name] = value; + } + } + return items; + }; + URI.build = function(parts) { + var t = ""; + if (parts.protocol) { + t += parts.protocol + ":"; + } + if (!parts.urn && (t || parts.hostname)) { + t += '//'; + } + t += (URI.buildAuthority(parts) || ''); + if (typeof parts.path === "string") { + if (parts.path[0] !== '/' && typeof parts.hostname === "string") { + t += '/'; + } + t += parts.path; + } + if (typeof parts.query === "string" && parts.query) { + t += '?' + parts.query; + } + if (typeof parts.fragment === "string" && parts.fragment) { + t += '#' + parts.fragment; + } + return t; + }; + URI.buildHost = function(parts) { + var t = ""; + if (!parts.hostname) { + return ""; + } else if (URI.ip6_expression.test(parts.hostname)) { + if (parts.port) { + t += "[" + parts.hostname + "]:" + parts.port; + } else { + // don't know if we should always wrap IPv6 in [] + // the RFC explicitly says SHOULD, not MUST. + t += parts.hostname; + } + } else { + t += parts.hostname; + if (parts.port) { + t += ':' + parts.port; + } + } + return t; + }; + URI.buildAuthority = function(parts) { + return URI.buildUserinfo(parts) + URI.buildHost(parts); + }; + URI.buildUserinfo = function(parts) { + var t = ""; + if (parts.username) { + t += URI.encode(parts.username); + if (parts.password) { + t += ':' + URI.encode(parts.password); + } + t += "@"; + } + return t; + }; + URI.buildQuery = function(data, duplicates) { + // according to http://tools.ietf.org/html/rfc3986 or http://labs.apache.org/webarch/uri/rfc/rfc3986.html + // being »-._~!$&'()*+,;=:@/?« %HEX and alnum are allowed + // the RFC explicitly states ?/foo being a valid use case, no mention of parameter syntax! + // URI.js treats the query string as being application/x-www-form-urlencoded + // see http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type + var t = ""; + var unique, key, i, length; + for (key in data) { + if (hasOwn.call(data, key) && key) { + if (isArray(data[key])) { + unique = {}; + for (i = 0, length = data[key].length; i < length; i++) { + if (data[key][i] !== undefined && unique[data[key][i] + ""] === undefined) { + t += "&" + URI.buildQueryParameter(key, data[key][i]); + if (duplicates !== true) { + unique[data[key][i] + ""] = true; + } + } + } + } else if (data[key] !== undefined) { + t += '&' + URI.buildQueryParameter(key, data[key]); + } + } + } + return t.substring(1); + }; + URI.buildQueryParameter = function(name, value) { + // http://www.w3.org/TR/REC-html40/interact/forms.html#form-content-type -- application/x-www-form-urlencoded + // don't append "=" for null values, according to http://dvcs.w3.org/hg/url/raw-file/tip/Overview.html#url-parameter-serialization + return URI.encodeQuery(name) + (value !== null ? "=" + URI.encodeQuery(value) : ""); + }; + URI.addQuery = function(data, name, value) { + if (typeof name === "object") { + for (var key in name) { + if (hasOwn.call(name, key)) { + URI.addQuery(data, key, name[key]); + } + } + } else if (typeof name === "string") { + if (data[name] === undefined) { + data[name] = value; + return; + } else if (typeof data[name] === "string") { + data[name] = [data[name]]; + } + if (!isArray(value)) { + value = [value]; + } + data[name] = data[name].concat(value); + } else { + throw new TypeError("URI.addQuery() accepts an object, string as the name parameter"); + } + }; + URI.removeQuery = function(data, name, value) { + var i, length, key; + if (isArray(name)) { + for (i = 0, length = name.length; i < length; i++) { + data[name[i]] = undefined; + } + } else if (typeof name === "object") { + for (key in name) { + if (hasOwn.call(name, key)) { + URI.removeQuery(data, key, name[key]); + } + } + } else if (typeof name === "string") { + if (value !== undefined) { + if (data[name] === value) { + data[name] = undefined; + } else if (isArray(data[name])) { + data[name] = filterArrayValues(data[name], value); + } + } else { + data[name] = undefined; + } + } else { + throw new TypeError("URI.addQuery() accepts an object, string as the first parameter"); + } + }; + URI.commonPath = function(one, two) { + var length = Math.min(one.length, two.length); + var pos; + // find first non-matching character + for (pos = 0; pos < length; pos++) { + if (one[pos] !== two[pos]) { + pos--; + break; + } + } + if (pos < 1) { + return one[0] === two[0] && one[0] === '/' ? '/' : ''; + } + // revert to last / + if (one[pos] !== '/') { + pos = one.substring(0, pos).lastIndexOf('/'); + } + return one.substring(0, pos + 1); + }; + URI.withinString = function(string, callback) { + // expression used is "gruber revised" (@gruber v2) determined to be the best solution in + // a regex sprint we did a couple of ages ago at + // * http://mathiasbynens.be/demo/url-regex + // * http://rodneyrehm.de/t/url-regex.html + return string.replace(URI.find_uri_expression, callback); + }; + URI.ensureValidHostname = function(v) { + // Theoretically URIs allow percent-encoding in Hostnames (according to RFC 3986) + // they are not part of DNS and therefore ignored by URI.js + if (v.match(URI.invalid_hostname_characters)) { + // test punycode + if (!punycode) { + throw new TypeError("Hostname '" + v + "' contains characters other than [A-Z0-9.-] and Punycode.js is not available"); + } + if (punycode.toASCII(v).match(URI.invalid_hostname_characters)) { + throw new TypeError("Hostname '" + v + "' contains characters other than [A-Z0-9.-]"); + } + } + }; + p.build = function(deferBuild) { + if (deferBuild === true) { + this._deferred_build = true; + } else if (deferBuild === undefined || this._deferred_build) { + this._string = URI.build(this._parts); + this._deferred_build = false; + } + return this; + }; + p.clone = function() { + return new URI(this); + }; + p.valueOf = p.toString = function() { + return this.build(false)._string; + }; + // generate simple accessors + _parts = { + protocol: 'protocol', + username: 'username', + password: 'password', + hostname: 'hostname', + port: 'port' + }; + generateAccessor = function(_part) { + return function(v, build) { + if (v === undefined) { + return this._parts[_part] || ""; + } else { + this._parts[_part] = v; + this.build(!build); + return this; + } + }; + }; + for (_part in _parts) { + p[_part] = generateAccessor(_parts[_part]); + } + // generate accessors with optionally prefixed input + _parts = { + query: '?', + fragment: '#' + }; + generateAccessor = function(_part, _key) { + return function(v, build) { + if (v === undefined) { + return this._parts[_part] || ""; + } else { + if (v !== null) { + v = v + ""; + if (v[0] === _key) { + v = v.substring(1); + } + } + this._parts[_part] = v; + this.build(!build); + return this; + } + }; + }; + for (_part in _parts) { + p[_part] = generateAccessor(_part, _parts[_part]); + } + // generate accessors with prefixed output + _parts = { + search: ['?', 'query'], + hash: ['#', 'fragment'] + }; + generateAccessor = function(_part, _key) { + return function(v, build) { + var t = this[_part](v, build); + return typeof t === "string" && t.length ? (_key + t) : t; + }; + }; + for (_part in _parts) { + p[_part] = generateAccessor(_parts[_part][1], _parts[_part][0]); + } + p.pathname = function(v, build) { + if (v === undefined || v === true) { + var res = this._parts.path || (this._parts.urn ? '' : '/'); + return v ? URI.decodePath(res) : res; + } else { + this._parts.path = v ? URI.recodePath(v) : "/"; + this.build(!build); + return this; + } + }; + p.path = p.pathname; + p.href = function(href, build) { + var key; + if (href === undefined) { + return this.toString(); + } + this._string = ""; + this._parts = URI._parts(); + var _URI = href instanceof URI; + var _object = typeof href === "object" && (href.hostname || href.path); + // window.location is reported to be an object, but it's not the sort + // of object we're looking for: + // * location.protocol ends with a colon + // * location.query != object.search + // * location.hash != object.fragment + // simply serializing the unknown object should do the trick + // (for location, not for everything...) + if (!_URI && _object && Object.prototype.toString.call(href) !== "[object Object]") { + href = href.toString(); + } + if (typeof href === "string") { + this._parts = URI.parse(href, this._parts); + } else if (_URI || _object) { + var src = _URI ? href._parts : href; + for (key in src) { + if (hasOwn.call(this._parts, key)) { + this._parts[key] = src[key]; + } + } + } else { + throw new TypeError("invalid input"); + } + this.build(!build); + return this; + }; + // identification accessors + p.is = function(what) { + var ip = false; + var ip4 = false; + var ip6 = false; + var name = false; + var sld = false; + var idn = false; + var punycode = false; + var relative = !this._parts.urn; + if (this._parts.hostname) { + relative = false; + ip4 = URI.ip4_expression.test(this._parts.hostname); + ip6 = URI.ip6_expression.test(this._parts.hostname); + ip = ip4 || ip6; + name = !ip; + sld = name && SLD && SLD.has(this._parts.hostname); + idn = name && URI.idn_expression.test(this._parts.hostname); + punycode = name && URI.punycode_expression.test(this._parts.hostname); + } + switch (what.toLowerCase()) { + case 'relative': + return relative; + case 'absolute': + return !relative; + // hostname identification + case 'domain': + case 'name': + return name; + case 'sld': + return sld; + case 'ip': + return ip; + case 'ip4': + case 'ipv4': + case 'inet4': + return ip4; + case 'ip6': + case 'ipv6': + case 'inet6': + return ip6; + case 'idn': + return idn; + case 'url': + return !this._parts.urn; + case 'urn': + return !!this._parts.urn; + case 'punycode': + return punycode; + } + return null; + }; + // component specific input validation + var _protocol = p.protocol; + var _port = p.port; + var _hostname = p.hostname; + p.protocol = function(v, build) { + if (v !== undefined) { + if (v) { + // accept trailing :// + v = v.replace(/:(\/\/)?$/, ''); + if (v.match(/[^a-zA-z0-9\.+-]/)) { + throw new TypeError("Protocol '" + v + "' contains characters other than [A-Z0-9.+-]"); + } + } + } + return _protocol.call(this, v, build); + }; + p.scheme = p.protocol; + p.port = function(v, build) { + if (this._parts.urn) { + return v === undefined ? '' : this; + } + if (v !== undefined) { + if (v === 0) { + v = null; + } + if (v) { + v += ""; + if (v[0] === ":") { + v = v.substring(1); + } + if (v.match(/[^0-9]/)) { + throw new TypeError("Port '" + v + "' contains characters other than [0-9]"); + } + } + } + return _port.call(this, v, build); + }; + p.hostname = function(v, build) { + if (this._parts.urn) { + return v === undefined ? '' : this; + } + if (v !== undefined) { + var x = {}; + URI.parseHost(v, x); + v = x.hostname; + } + return _hostname.call(this, v, build); + }; + // compound accessors + p.host = function(v, build) { + if (this._parts.urn) { + return v === undefined ? '' : this; + } + if (v === undefined) { + return this._parts.hostname ? URI.buildHost(this._parts) : ""; + } else { + URI.parseHost(v, this._parts); + this.build(!build); + return this; + } + }; + p.authority = function(v, build) { + if (this._parts.urn) { + return v === undefined ? '' : this; + } + if (v === undefined) { + return this._parts.hostname ? URI.buildAuthority(this._parts) : ""; + } else { + URI.parseAuthority(v, this._parts); + this.build(!build); + return this; + } + }; + p.userinfo = function(v, build) { + if (this._parts.urn) { + return v === undefined ? '' : this; + } + if (v === undefined) { + if (!this._parts.username) { + return ""; + } + var t = URI.buildUserinfo(this._parts); + return t.substring(0, t.length - 1); + } else { + if (v[v.length - 1] !== '@') { + v += '@'; + } + URI.parseUserinfo(v, this._parts); + this.build(!build); + return this; + } + }; + p.resource = function(v, build) { + var parts; + if (v === undefined) { + return this.path() + this.search() + this.hash(); + } + parts = URI.parse(v); + this._parts.path = parts.path; + this._parts.query = parts.query; + this._parts.fragment = parts.fragment; + this.build(!build); + return this; + }; + // fraction accessors + p.subdomain = function(v, build) { + if (this._parts.urn) { + return v === undefined ? '' : this; + } + // convenience, return "www" from "www.example.org" + if (v === undefined) { + if (!this._parts.hostname || this.is('IP')) { + return ""; + } + // grab domain and add another segment + var end = this._parts.hostname.length - this.domain().length - 1; + return this._parts.hostname.substring(0, end) || ""; + } else { + var e = this._parts.hostname.length - this.domain().length; + var sub = this._parts.hostname.substring(0, e); + var replace = new RegExp('^' + escapeRegEx(sub)); + if (v && v[v.length - 1] !== '.') { + v += "."; + } + if (v) { + URI.ensureValidHostname(v); + } + this._parts.hostname = this._parts.hostname.replace(replace, v); + this.build(!build); + return this; + } + }; + p.domain = function(v, build) { + if (this._parts.urn) { + return v === undefined ? '' : this; + } + if (typeof v === 'boolean') { + build = v; + v = undefined; + } + // convenience, return "example.org" from "www.example.org" + if (v === undefined) { + if (!this._parts.hostname || this.is('IP')) { + return ""; + } + // if hostname consists of 1 or 2 segments, it must be the domain + var t = this._parts.hostname.match(/\./g); + if (t && t.length < 2) { + return this._parts.hostname; + } + // grab tld and add another segment + var end = this._parts.hostname.length - this.tld(build).length - 1; + end = this._parts.hostname.lastIndexOf('.', end - 1) + 1; + return this._parts.hostname.substring(end) || ""; + } else { + if (!v) { + throw new TypeError("cannot set domain empty"); + } + URI.ensureValidHostname(v); + if (!this._parts.hostname || this.is('IP')) { + this._parts.hostname = v; + } else { + var replace = new RegExp(escapeRegEx(this.domain()) + "$"); + this._parts.hostname = this._parts.hostname.replace(replace, v); + } + this.build(!build); + return this; + } + }; + p.tld = function(v, build) { + if (this._parts.urn) { + return v === undefined ? '' : this; + } + if (typeof v === 'boolean') { + build = v; + v = undefined; + } + // return "org" from "www.example.org" + if (v === undefined) { + if (!this._parts.hostname || this.is('IP')) { + return ""; + } + var pos = this._parts.hostname.lastIndexOf('.'); + var tld = this._parts.hostname.substring(pos + 1); + if (build !== true && SLD && SLD.list[tld.toLowerCase()]) { + return SLD.get(this._parts.hostname) || tld; + } + return tld; + } else { + var replace; + if (!v) { + throw new TypeError("cannot set TLD empty"); + } else if (v.match(/[^a-zA-Z0-9-]/)) { + if (SLD && SLD.is(v)) { + replace = new RegExp(escapeRegEx(this.tld()) + "$"); + this._parts.hostname = this._parts.hostname.replace(replace, v); + } else { + throw new TypeError("TLD '" + v + "' contains characters other than [A-Z0-9]"); + } + } else if (!this._parts.hostname || this.is('IP')) { + throw new ReferenceError("cannot set TLD on non-domain host"); + } else { + replace = new RegExp(escapeRegEx(this.tld()) + "$"); + this._parts.hostname = this._parts.hostname.replace(replace, v); + } + this.build(!build); + return this; + } + }; + p.directory = function(v, build) { + if (this._parts.urn) { + return v === undefined ? '' : this; + } + if (v === undefined || v === true) { + if (!this._parts.path && !this._parts.hostname) { + return ''; + } + if (this._parts.path === '/') { + return '/'; + } + var end = this._parts.path.length - this.filename().length - 1; + var res = this._parts.path.substring(0, end) || (this._parts.hostname ? "/" : ""); + return v ? URI.decodePath(res) : res; + } else { + var e = this._parts.path.length - this.filename().length; + var directory = this._parts.path.substring(0, e); + var replace = new RegExp('^' + escapeRegEx(directory)); + // fully qualifier directories begin with a slash + if (!this.is('relative')) { + if (!v) { + v = '/'; + } + if (v[0] !== '/') { + v = "/" + v; + } + } + // directories always end with a slash + if (v && v[v.length - 1] !== '/') { + v += '/'; + } + v = URI.recodePath(v); + this._parts.path = this._parts.path.replace(replace, v); + this.build(!build); + return this; + } + }; + p.filename = function(v, build) { + if (this._parts.urn) { + return v === undefined ? '' : this; + } + if (v === undefined || v === true) { + if (!this._parts.path || this._parts.path === '/') { + return ""; + } + var pos = this._parts.path.lastIndexOf('/'); + var res = this._parts.path.substring(pos + 1); + return v ? URI.decodePathSegment(res) : res; + } else { + var mutatedDirectory = false; + if (v[0] === '/') { + v = v.substring(1); + } + if (v.match(/\.?\//)) { + mutatedDirectory = true; + } + var replace = new RegExp(escapeRegEx(this.filename()) + "$"); + v = URI.recodePath(v); + this._parts.path = this._parts.path.replace(replace, v); + if (mutatedDirectory) { + this.normalizePath(build); + } else { + this.build(!build); + } + return this; + } + }; + p.suffix = function(v, build) { + if (this._parts.urn) { + return v === undefined ? '' : this; + } + if (v === undefined || v === true) { + if (!this._parts.path || this._parts.path === '/') { + return ""; + } + var filename = this.filename(); + var pos = filename.lastIndexOf('.'); + var s, res; + if (pos === -1) { + return ""; + } + // suffix may only contain alnum characters (yup, I made this up.) + s = filename.substring(pos + 1); + res = (/^[a-z0-9%]+$/i).test(s) ? s : ""; + return v ? URI.decodePathSegment(res) : res; + } else { + if (v[0] === '.') { + v = v.substring(1); + } + var suffix = this.suffix(); + var replace; + if (!suffix) { + if (!v) { + return this; + } + this._parts.path += '.' + URI.recodePath(v); + } else if (!v) { + replace = new RegExp(escapeRegEx("." + suffix) + "$"); + } else { + replace = new RegExp(escapeRegEx(suffix) + "$"); + } + if (replace) { + v = URI.recodePath(v); + this._parts.path = this._parts.path.replace(replace, v); + } + this.build(!build); + return this; + } + }; + p.segment = function(segment, v, build) { + var separator = this._parts.urn ? ':' : '/'; + var path = this.path(); + var absolute = path.substring(0, 1) === '/'; + var segments = path.split(separator); + if (typeof segment !== 'number') { + build = v; + v = segment; + segment = undefined; + } + if (segment !== undefined && typeof segment !== 'number') { + throw new Error("Bad segment '" + segment + "', must be 0-based integer"); + } + if (absolute) { + segments.shift(); + } + if (segment < 0) { + // allow negative indexes to address from the end + segment = Math.max(segments.length + segment, 0); + } + if (v === undefined) { + return segment === undefined ? segments : segments[segment]; + } else if (segment === null || segments[segment] === undefined) { + if (isArray(v)) { + segments = v; + } else if (v || (typeof v === "string" && v.length)) { + if (segments[segments.length - 1] === "") { + // empty trailing elements have to be overwritten + // to prefent results such as /foo//bar + segments[segments.length - 1] = v; + } else { + segments.push(v); + } + } + } else { + if (v || (typeof v === "string" && v.length)) { + segments[segment] = v; + } else { + segments.splice(segment, 1); + } + } + if (absolute) { + segments.unshift(""); + } + return this.path(segments.join(separator), build); + }; + // mutating query string + var q = p.query; + p.query = function(v, build) { + if (v === true) { + return URI.parseQuery(this._parts.query); + } else if (v !== undefined && typeof v !== "string") { + this._parts.query = URI.buildQuery(v, this._parts.duplicateQueryParameters); + this.build(!build); + return this; + } else { + return q.call(this, v, build); + } + }; + p.addQuery = function(name, value, build) { + var data = URI.parseQuery(this._parts.query); + URI.addQuery(data, name, value === undefined ? null : value); + this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters); + if (typeof name !== "string") { + build = value; + } + this.build(!build); + return this; + }; + p.removeQuery = function(name, value, build) { + var data = URI.parseQuery(this._parts.query); + URI.removeQuery(data, name, value); + this._parts.query = URI.buildQuery(data, this._parts.duplicateQueryParameters); + if (typeof name !== "string") { + build = value; + } + this.build(!build); + return this; + }; + p.addSearch = p.addQuery; + p.removeSearch = p.removeQuery; + // sanitizing URLs + p.normalize = function() { + if (this._parts.urn) { + return this.normalizeProtocol(false).normalizeQuery(false).normalizeFragment(false).build(); + } + return this.normalizeProtocol(false).normalizeHostname(false).normalizePort(false).normalizePath(false).normalizeQuery(false).normalizeFragment(false).build(); + }; + p.normalizeProtocol = function(build) { + if (typeof this._parts.protocol === "string") { + this._parts.protocol = this._parts.protocol.toLowerCase(); + this.build(!build); + } + return this; + }; + p.normalizeHostname = function(build) { + if (this._parts.hostname) { + if (this.is('IDN') && punycode) { + this._parts.hostname = punycode.toASCII(this._parts.hostname); + } else if (this.is('IPv6') && IPv6) { + this._parts.hostname = IPv6.best(this._parts.hostname); + } + this._parts.hostname = this._parts.hostname.toLowerCase(); + this.build(!build); + } + return this; + }; + p.normalizePort = function(build) { + // remove port of it's the protocol's default + if (typeof this._parts.protocol === "string" && this._parts.port === URI.defaultPorts[this._parts.protocol]) { + this._parts.port = null; + this.build(!build); + } + return this; + }; + p.normalizePath = function(build) { + if (this._parts.urn) { + return this; + } + if (!this._parts.path || this._parts.path === '/') { + return this; + } + var _was_relative; + var _was_relative_prefix; + var _path = this._parts.path; + var _parent, _pos; + // handle relative paths + if (_path[0] !== '/') { + if (_path[0] === '.') { + _was_relative_prefix = _path.substring(0, _path.indexOf('/')); + } + _was_relative = true; + _path = '/' + _path; + } + // resolve simples + _path = _path.replace(/(\/(\.\/)+)|\/{2,}/g, '/'); + // resolve parents + while (true) { + _parent = _path.indexOf('/../'); + if (_parent === -1) { + // no more ../ to resolve + break; + } else if (_parent === 0) { + // top level cannot be relative... + _path = _path.substring(3); + break; + } + _pos = _path.substring(0, _parent).lastIndexOf('/'); + if (_pos === -1) { + _pos = _parent; + } + _path = _path.substring(0, _pos) + _path.substring(_parent + 3); + } + // revert to relative + if (_was_relative && this.is('relative')) { + if (_was_relative_prefix) { + _path = _was_relative_prefix + _path; + } else { + _path = _path.substring(1); + } + } + _path = URI.recodePath(_path); + this._parts.path = _path; + this.build(!build); + return this; + }; + p.normalizePathname = p.normalizePath; + p.normalizeQuery = function(build) { + if (typeof this._parts.query === "string") { + if (!this._parts.query.length) { + this._parts.query = null; + } else { + this.query(URI.parseQuery(this._parts.query)); + } + this.build(!build); + } + return this; + }; + p.normalizeFragment = function(build) { + if (!this._parts.fragment) { + this._parts.fragment = null; + this.build(!build); + } + return this; + }; + p.normalizeSearch = p.normalizeQuery; + p.normalizeHash = p.normalizeFragment; + p.iso8859 = function() { + // expect unicode input, iso8859 output + var e = URI.encode; + var d = URI.decode; + URI.encode = escape; + URI.decode = decodeURIComponent; + this.normalize(); + URI.encode = e; + URI.decode = d; + return this; + }; + p.unicode = function() { + // expect iso8859 input, unicode output + var e = URI.encode; + var d = URI.decode; + URI.encode = strictEncodeURIComponent; + URI.decode = unescape; + this.normalize(); + URI.encode = e; + URI.decode = d; + return this; + }; + p.readable = function() { + var uri = this.clone(); + // removing username, password, because they shouldn't be displayed according to RFC 3986 + uri.username("").password("").normalize(); + var t = ''; + if (uri._parts.protocol) { + t += uri._parts.protocol + '://'; + } + if (uri._parts.hostname) { + if (uri.is('punycode') && punycode) { + t += punycode.toUnicode(uri._parts.hostname); + if (uri._parts.port) { + t += ":" + uri._parts.port; + } + } else { + t += uri.host(); + } + } + if (uri._parts.hostname && uri._parts.path && uri._parts.path[0] !== '/') { + t += '/'; + } + t += uri.path(true); + if (uri._parts.query) { + var q = ''; + for (var i = 0, qp = uri._parts.query.split('&'), l = qp.length; i < l; i++) { + var kv = (qp[i] || "").split('='); + q += '&' + URI.decodeQuery(kv[0]).replace(/&/g, '%26'); + if (kv[1] !== undefined) { + q += "=" + URI.decodeQuery(kv[1]).replace(/&/g, '%26'); + } + } + t += '?' + q.substring(1); + } + t += uri.hash(); + return t; + }; + // resolving relative and absolute URLs + p.absoluteTo = function(base) { + var resolved = this.clone(); + var properties = ['protocol', 'username', 'password', 'hostname', 'port']; + var basedir, i, p; + if (this._parts.urn) { + throw new Error('URNs do not have any generally defined hierachical components'); + } + if (this._parts.hostname) { + return resolved; + } + if (!(base instanceof URI)) { + base = new URI(base); + } + for (i = 0, p; p = properties[i]; i++) { + resolved._parts[p] = base._parts[p]; + } + properties = ['query', 'path']; + for (i = 0, p; p = properties[i]; i++) { + if (!resolved._parts[p] && base._parts[p]) { + resolved._parts[p] = base._parts[p]; + } + } + if (resolved.path()[0] !== '/') { + basedir = base.directory(); + resolved._parts.path = (basedir ? (basedir + '/') : '') + resolved._parts.path; + resolved.normalizePath(); + } + resolved.build(); + return resolved; + }; + p.relativeTo = function(base) { + var relative = this.clone(); + var properties = ['protocol', 'username', 'password', 'hostname', 'port']; + var common, _base, _this, _base_diff, _this_diff; + if (this._parts.urn) { + throw new Error('URNs do not have any generally defined hierachical components'); + } + if (!(base instanceof URI)) { + base = new URI(base); + } + if (this.path()[0] !== '/' || base.path()[0] !== '/') { + throw new Error('Cannot calculate common path from non-relative URLs'); + } + // determine common sub path + common = URI.commonPath(relative.path(), base.path()); + // no relation if there's nothing in common + if (!common || common === '/') { + return relative; + } + // relative paths don't have authority + for (var i = 0, p; p = properties[i]; i++) { + relative._parts[p] = null; + } + _base = base.directory(); + _this = this.directory(); + // base and this are on the same level + if (_base === _this) { + relative._parts.path = './' + relative.filename(); + return relative.build(); + } + _base_diff = _base.substring(common.length); + _this_diff = _this.substring(common.length); + // this is a descendant of base + if (_base + '/' === common) { + if (_this_diff) { + _this_diff += '/'; + } + relative._parts.path = './' + _this_diff + relative.filename(); + return relative.build(); + } + // this is a descendant of base + var parents = '../'; + var _common = new RegExp('^' + escapeRegEx(common)); + var _parents = _base.replace(_common, '/').match(/\//g).length - 1; + while (_parents--) { + parents += '../'; + } + relative._parts.path = relative._parts.path.replace(_common, parents); + return relative.build(); + }; + // comparing URIs + p.equals = function(uri) { + var one = this.clone(); + var two = new URI(uri); + var one_map = {}; + var two_map = {}; + var checked = {}; + var one_query, two_query, key; + one.normalize(); + two.normalize(); + // exact match + if (one.toString() === two.toString()) { + return true; + } + // extract query string + one_query = one.query(); + two_query = two.query(); + one.query(""); + two.query(""); + // definitely not equal if not even non-query parts match + if (one.toString() !== two.toString()) { + return false; + } + // query parameters have the same length, even if they're permutated + if (one_query.length !== two_query.length) { + return false; + } + one_map = URI.parseQuery(one_query); + two_map = URI.parseQuery(two_query); + for (key in one_map) { + if (hasOwn.call(one_map, key)) { + if (!isArray(one_map[key])) { + if (one_map[key] !== two_map[key]) { + return false; + } + } else { + if (!isArray(two_map[key])) { + return false; + } + // arrays can't be equal if they have different amount of content + if (one_map[key].length !== two_map[key].length) { + return false; + } + one_map[key].sort(); + two_map[key].sort(); + for (var i = 0, l = one_map[key].length; i < l; i++) { + if (one_map[key][i] !== two_map[key][i]) { + return false; + } + } + } + checked[key] = true; + } + } + for (key in two_map) { + if (hasOwn.call(two_map, key)) { + if (!checked[key]) { + // two contains a parameter not present in one + return false; + } + } + } + return true; + }; + // state + p.duplicateQueryParameters = function(v) { + this._parts.duplicateQueryParameters = !! v; + return this; + }; + return URI; +})); \ No newline at end of file diff --git a/Docs/docstrap-master/template/static/scripts/bootstrap-dropdown.js b/Docs/docstrap-master/template/static/scripts/bootstrap-dropdown.js new file mode 100644 index 00000000..a1d51519 --- /dev/null +++ b/Docs/docstrap-master/template/static/scripts/bootstrap-dropdown.js @@ -0,0 +1,165 @@ +/* ============================================================ + * bootstrap-dropdown.js v2.3.1 + * http://twitter.github.com/bootstrap/javascript.html#dropdowns + * ============================================================ + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============================================================ */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* DROPDOWN CLASS DEFINITION + * ========================= */ + + var toggle = '[data-toggle=dropdown]' + , Dropdown = function (element) { + var $el = $(element).on('click.dropdown.data-api', this.toggle) + $('html').on('click.dropdown.data-api', function () { + $el.parent().removeClass('open') + }) + } + + Dropdown.prototype = { + + constructor: Dropdown + + , toggle: function (e) { + var $this = $(this) + , $parent + , isActive + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + clearMenus() + + if (!isActive) { + $parent.toggleClass('open') + } + + $this.focus() + + return false + } + + , keydown: function (e) { + var $this + , $items + , $active + , $parent + , isActive + , index + + if (!/(38|40|27)/.test(e.keyCode)) return + + $this = $(this) + + e.preventDefault() + e.stopPropagation() + + if ($this.is('.disabled, :disabled')) return + + $parent = getParent($this) + + isActive = $parent.hasClass('open') + + if (!isActive || (isActive && e.keyCode == 27)) { + if (e.which == 27) $parent.find(toggle).focus() + return $this.click() + } + + $items = $('[role=menu] li:not(.divider):visible a', $parent) + + if (!$items.length) return + + index = $items.index($items.filter(':focus')) + + if (e.keyCode == 38 && index > 0) index-- // up + if (e.keyCode == 40 && index < $items.length - 1) index++ // down + if (!~index) index = 0 + + $items + .eq(index) + .focus() + } + + } + + function clearMenus() { + $(toggle).each(function () { + getParent($(this)).removeClass('open') + }) + } + + function getParent($this) { + var selector = $this.attr('data-target') + , $parent + + if (!selector) { + selector = $this.attr('href') + selector = selector && /#/.test(selector) && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + $parent = selector && $(selector) + + if (!$parent || !$parent.length) $parent = $this.parent() + + return $parent + } + + + /* DROPDOWN PLUGIN DEFINITION + * ========================== */ + + var old = $.fn.dropdown + + $.fn.dropdown = function (option) { + return this.each(function () { + var $this = $(this) + , data = $this.data('dropdown') + if (!data) $this.data('dropdown', (data = new Dropdown(this))) + if (typeof option == 'string') data[option].call($this) + }) + } + + $.fn.dropdown.Constructor = Dropdown + + + /* DROPDOWN NO CONFLICT + * ==================== */ + + $.fn.dropdown.noConflict = function () { + $.fn.dropdown = old + return this + } + + + /* APPLY TO STANDARD DROPDOWN ELEMENTS + * =================================== */ + + $(document) + .on('click.dropdown.data-api', clearMenus) + .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() }) + .on('click.dropdown-menu', function (e) { e.stopPropagation() }) + .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle) + .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown) + +}(window.jQuery); diff --git a/Docs/docstrap-master/template/static/scripts/bootstrap-tab.js b/Docs/docstrap-master/template/static/scripts/bootstrap-tab.js new file mode 100644 index 00000000..bd77eb5c --- /dev/null +++ b/Docs/docstrap-master/template/static/scripts/bootstrap-tab.js @@ -0,0 +1,144 @@ +/* ======================================================== + * bootstrap-tab.js v2.3.0 + * http://twitter.github.com/bootstrap/javascript.html#tabs + * ======================================================== + * Copyright 2012 Twitter, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ======================================================== */ + + +!function ($) { + + "use strict"; // jshint ;_; + + + /* TAB CLASS DEFINITION + * ==================== */ + + var Tab = function (element) { + this.element = $(element) + } + + Tab.prototype = { + + constructor: Tab + + , show: function () { + var $this = this.element + , $ul = $this.closest('ul:not(.dropdown-menu)') + , selector = $this.attr('data-target') + , previous + , $target + , e + + if (!selector) { + selector = $this.attr('href') + selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 + } + + if ( $this.parent('li').hasClass('active') ) return + + previous = $ul.find('.active:last a')[0] + + e = $.Event('show', { + relatedTarget: previous + }) + + $this.trigger(e) + + if (e.isDefaultPrevented()) return + + $target = $(selector) + + this.activate($this.parent('li'), $ul) + this.activate($target, $target.parent(), function () { + $this.trigger({ + type: 'shown' + , relatedTarget: previous + }) + }) + } + + , activate: function ( element, container, callback) { + var $active = container.find('> .active') + , transition = callback + && $.support.transition + && $active.hasClass('fade') + + function next() { + $active + .removeClass('active') + .find('> .dropdown-menu > .active') + .removeClass('active') + + element.addClass('active') + + if (transition) { + element[0].offsetWidth // reflow for transition + element.addClass('in') + } else { + element.removeClass('fade') + } + + if ( element.parent('.dropdown-menu') ) { + element.closest('li.dropdown').addClass('active') + } + + callback && callback() + } + + transition ? + $active.one($.support.transition.end, next) : + next() + + $active.removeClass('in') + } + } + + + /* TAB PLUGIN DEFINITION + * ===================== */ + + var old = $.fn.tab + + $.fn.tab = function ( option ) { + return this.each(function () { + var $this = $(this) + , data = $this.data('tab') + if (!data) $this.data('tab', (data = new Tab(this))) + if (typeof option == 'string') data[option]() + }) + } + + $.fn.tab.Constructor = Tab + + + /* TAB NO CONFLICT + * =============== */ + + $.fn.tab.noConflict = function () { + $.fn.tab = old + return this + } + + + /* TAB DATA-API + * ============ */ + + $(document).on('click.tab.data-api', '[data-toggle="tab"], [data-toggle="pill"]', function (e) { + e.preventDefault() + $(this).tab('show') + }) + +}(window.jQuery); \ No newline at end of file diff --git a/Docs/docstrap-master/template/static/scripts/jquery.localScroll.js b/Docs/docstrap-master/template/static/scripts/jquery.localScroll.js new file mode 100644 index 00000000..ef7cc97d --- /dev/null +++ b/Docs/docstrap-master/template/static/scripts/jquery.localScroll.js @@ -0,0 +1,130 @@ +/*! + * jQuery.LocalScroll + * Copyright (c) 2007-2013 Ariel Flesler - afleslergmailcom | http://flesler.blogspot.com + * Dual licensed under MIT and GPL. + * http://flesler.blogspot.com/2007/10/jquerylocalscroll-10.html + * @author Ariel Flesler + * @version 1.2.8 + * + * @id jQuery.fn.localScroll + * @param {Object} settings Hash of settings, it is passed in to jQuery.ScrollTo, none is required. + * @return {jQuery} Returns the same jQuery object, for chaining. + * + * @example $('ul.links').localScroll(); + * + * @example $('ul.links').localScroll({ filter:'.animated', duration:400, axis:'x' }); + * + * @example $.localScroll({ target:'#pane', axis:'xy', queue:true, event:'mouseover' }); + * + * Notes: + * - The plugin requires jQuery.ScrollTo. + * - The hash of settings, is passed to jQuery.ScrollTo, so the settings are valid for that plugin as well. + * - jQuery.localScroll can be used if the desired links, are all over the document, it accepts the same settings. + * - If the setting 'lazy' is set to true, then the binding will still work for later added anchors. + * - If onBefore returns false, the event is ignored. + */ +;(function( $ ){ + var URI = location.href.replace(/#.*/,''); // local url without hash + + var $localScroll = $.localScroll = function( settings ){ + $('body').localScroll( settings ); + }; + + // Many of these defaults, belong to jQuery.ScrollTo, check it's demo for an example of each option. + // @see http://flesler.demos.com/jquery/scrollTo/ + // The defaults are public and can be overriden. + $localScroll.defaults = { + duration:1000, // How long to animate. + axis:'y', // Which of top and left should be modified. + event:'click', // On which event to react. + stop:true, // Avoid queuing animations + target: window, // What to scroll (selector or element). The whole window by default. + reset: true // Used by $.localScroll.hash. If true, elements' scroll is resetted before actual scrolling + /* + lock:false, // ignore events if already animating + lazy:false, // if true, links can be added later, and will still work. + filter:null, // filter some anchors out of the matched elements. + hash: false // if true, the hash of the selected link, will appear on the address bar. + */ + }; + + // If the URL contains a hash, it will scroll to the pointed element + $localScroll.hash = function( settings ){ + if( location.hash ){ + settings = $.extend( {}, $localScroll.defaults, settings ); + settings.hash = false; // can't be true + + if( settings.reset ){ + var d = settings.duration; + delete settings.duration; + $(settings.target).scrollTo( 0, settings ); + settings.duration = d; + } + scroll( 0, location, settings ); + } + }; + + $.fn.localScroll = function( settings ){ + settings = $.extend( {}, $localScroll.defaults, settings ); + + return settings.lazy ? + // use event delegation, more links can be added later. + this.bind( settings.event, function( e ){ + // Could use closest(), but that would leave out jQuery -1.3.x + var a = $([e.target, e.target.parentNode]).filter(filter)[0]; + // if a valid link was clicked + if( a ) + scroll( e, a, settings ); // do scroll. + }) : + // bind concretely, to each matching link + this.find('a,area') + .filter( filter ).bind( settings.event, function(e){ + scroll( e, this, settings ); + }).end() + .end(); + + function filter(){// is this a link that points to an anchor and passes a possible filter ? href is checked to avoid a bug in FF. + return !!this.href && !!this.hash && this.href.replace(this.hash,'') == URI && (!settings.filter || $(this).is( settings.filter )); + }; + }; + + function scroll( e, link, settings ){ + var id = link.hash.slice(1), + elem = document.getElementById(id) || document.getElementsByName(id)[0]; + + if ( !elem ) + return; + + if( e ) + e.preventDefault(); + + var $target = $( settings.target ); + + if( settings.lock && $target.is(':animated') || + settings.onBefore && settings.onBefore(e, elem, $target) === false ) + return; + + if( settings.stop ) + $target._scrollable().stop(true); // remove all its animations + + if( settings.hash ){ + var attr = elem.id == id ? 'id' : 'name', + $a = $(' ').attr(attr, id).css({ + position:'absolute', + top: $(window).scrollTop(), + left: $(window).scrollLeft() + }); + + elem[attr] = ''; + $('body').prepend($a); + location = link.hash; + $a.remove(); + elem[attr] = id; + } + + $target + .scrollTo( elem, settings ) // do scroll + .trigger('notify.serialScroll',[elem]); // notify serialScroll about this change + }; + +})( jQuery ); \ No newline at end of file diff --git a/Docs/docstrap-master/template/static/scripts/jquery.min.js b/Docs/docstrap-master/template/static/scripts/jquery.min.js new file mode 100644 index 00000000..c73b79b9 --- /dev/null +++ b/Docs/docstrap-master/template/static/scripts/jquery.min.js @@ -0,0 +1,3522 @@ +/*! jQuery v1.8.3 jquery.com | jquery.org/license */ +(function(e, t) { + function _(e) { + var t = M[e] = {}; + return v.each(e.split(y), function(e, n) { + t[n] = !0 + }), t + } + + function H(e, n, r) { + if (r === t && e.nodeType === 1) { + var i = "data-" + n.replace(P, "-$1").toLowerCase(); + r = e.getAttribute(i); + if (typeof r == "string") { + try { + r = r === "true" ? !0 : r === "false" ? !1 : r === "null" ? null : +r + "" === r ? +r : D.test(r) ? v.parseJSON(r) : r + } catch (s) {} + v.data(e, n, r) + } else r = t + } + return r + } + + function B(e) { + var t; + for (t in e) { + if (t === "data" && v.isEmptyObject(e[t])) continue; + if (t !== "toJSON") return !1 + } + return !0 + } + + function et() { + return !1 + } + + function tt() { + return !0 + } + + function ut(e) { + return !e || !e.parentNode || e.parentNode.nodeType === 11 + } + + function at(e, t) { + do e = e[t]; + while (e && e.nodeType !== 1); + return e + } + + function ft(e, t, n) { + t = t || 0; + if (v.isFunction(t)) return v.grep(e, function(e, r) { + var i = !! t.call(e, r, e); + return i === n + }); + if (t.nodeType) return v.grep(e, function(e, r) { + return e === t === n + }); + if (typeof t == "string") { + var r = v.grep(e, function(e) { + return e.nodeType === 1 + }); + if (it.test(t)) return v.filter(t, r, !n); + t = v.filter(t, r) + } + return v.grep(e, function(e, r) { + return v.inArray(e, t) >= 0 === n + }) + } + + function lt(e) { + var t = ct.split("|"), + n = e.createDocumentFragment(); + if (n.createElement) while (t.length) n.createElement(t.pop()); + return n + } + + function Lt(e, t) { + return e.getElementsByTagName(t)[0] || e.appendChild(e.ownerDocument.createElement(t)) + } + + function At(e, t) { + if (t.nodeType !== 1 || !v.hasData(e)) return; + var n, r, i, s = v._data(e), + o = v._data(t, s), + u = s.events; + if (u) { + delete o.handle, o.events = {}; + for (n in u) for (r = 0, i = u[n].length; r < i; r++) v.event.add(t, n, u[n][r]) + } + o.data && (o.data = v.extend({}, o.data)) + } + + function Ot(e, t) { + var n; + if (t.nodeType !== 1) return; + t.clearAttributes && t.clearAttributes(), t.mergeAttributes && t.mergeAttributes(e), n = t.nodeName.toLowerCase(), n === "object" ? (t.parentNode && (t.outerHTML = e.outerHTML), v.support.html5Clone && e.innerHTML && !v.trim(t.innerHTML) && (t.innerHTML = e.innerHTML)) : n === "input" && Et.test(e.type) ? (t.defaultChecked = t.checked = e.checked, t.value !== e.value && (t.value = e.value)) : n === "option" ? t.selected = e.defaultSelected : n === "input" || n === "textarea" ? t.defaultValue = e.defaultValue : n === "script" && t.text !== e.text && (t.text = e.text), t.removeAttribute(v.expando) + } + + function Mt(e) { + return typeof e.getElementsByTagName != "undefined" ? e.getElementsByTagName("*") : typeof e.querySelectorAll != "undefined" ? e.querySelectorAll("*") : [] + } + + function _t(e) { + Et.test(e.type) && (e.defaultChecked = e.checked) + } + + function Qt(e, t) { + if (t in e) return t; + var n = t.charAt(0).toUpperCase() + t.slice(1), + r = t, + i = Jt.length; + while (i--) { + t = Jt[i] + n; + if (t in e) return t + } + return r + } + + function Gt(e, t) { + return e = t || e, v.css(e, "display") === "none" || !v.contains(e.ownerDocument, e) + } + + function Yt(e, t) { + var n, r, i = [], + s = 0, + o = e.length; + for (; s < o; s++) { + n = e[s]; + if (!n.style) continue; + i[s] = v._data(n, "olddisplay"), t ? (!i[s] && n.style.display === "none" && (n.style.display = ""), n.style.display === "" && Gt(n) && (i[s] = v._data(n, "olddisplay", nn(n.nodeName)))) : (r = Dt(n, "display"), !i[s] && r !== "none" && v._data(n, "olddisplay", r)) + } + for (s = 0; s < o; s++) { + n = e[s]; + if (!n.style) continue; + if (!t || n.style.display === "none" || n.style.display === "") n.style.display = t ? i[s] || "" : "none" + } + return e + } + + function Zt(e, t, n) { + var r = Rt.exec(t); + return r ? Math.max(0, r[1] - (n || 0)) + (r[2] || "px") : t + } + + function en(e, t, n, r) { + var i = n === (r ? "border" : "content") ? 4 : t === "width" ? 1 : 0, + s = 0; + for (; i < 4; i += 2) n === "margin" && (s += v.css(e, n + $t[i], !0)), r ? (n === "content" && (s -= parseFloat(Dt(e, "padding" + $t[i])) || 0), n !== "margin" && (s -= parseFloat(Dt(e, "border" + $t[i] + "Width")) || 0)) : (s += parseFloat(Dt(e, "padding" + $t[i])) || 0, n !== "padding" && (s += parseFloat(Dt(e, "border" + $t[i] + "Width")) || 0)); + return s + } + + function tn(e, t, n) { + var r = t === "width" ? e.offsetWidth : e.offsetHeight, + i = !0, + s = v.support.boxSizing && v.css(e, "boxSizing") === "border-box"; + if (r <= 0 || r == null) { + r = Dt(e, t); + if (r < 0 || r == null) r = e.style[t]; + if (Ut.test(r)) return r; + i = s && (v.support.boxSizingReliable || r === e.style[t]), r = parseFloat(r) || 0 + } + return r + en(e, t, n || (s ? "border" : "content"), i) + "px" + } + + function nn(e) { + if (Wt[e]) return Wt[e]; + var t = v("<" + e + ">").appendTo(i.body), + n = t.css("display"); + t.remove(); + if (n === "none" || n === "") { + Pt = i.body.appendChild(Pt || v.extend(i.createElement("iframe"), { + frameBorder: 0, + width: 0, + height: 0 + })); + if (!Ht || !Pt.createElement) Ht = (Pt.contentWindow || Pt.contentDocument).document, Ht.write(""), Ht.close(); + t = Ht.body.appendChild(Ht.createElement(e)), n = Dt(t, "display"), i.body.removeChild(Pt) + } + return Wt[e] = n, n + } + + function fn(e, t, n, r) { + var i; + if (v.isArray(t)) v.each(t, function(t, i) { + n || sn.test(e) ? r(e, i) : fn(e + "[" + (typeof i == "object" ? t : "") + "]", i, n, r) + }); + else if (!n && v.type(t) === "object") for (i in t) fn(e + "[" + i + "]", t[i], n, r); + else r(e, t) + } + + function Cn(e) { + return function(t, n) { + typeof t != "string" && (n = t, t = "*"); + var r, i, s, o = t.toLowerCase().split(y), + u = 0, + a = o.length; + if (v.isFunction(n)) for (; u < a; u++) r = o[u], s = /^\+/.test(r), s && (r = r.substr(1) || "*"), i = e[r] = e[r] || [], i[s ? "unshift" : "push"](n) + } + } + + function kn(e, n, r, i, s, o) { + s = s || n.dataTypes[0], o = o || {}, o[s] = !0; + var u, a = e[s], + f = 0, + l = a ? a.length : 0, + c = e === Sn; + for (; f < l && (c || !u); f++) u = a[f](n, r, i), typeof u == "string" && (!c || o[u] ? u = t : (n.dataTypes.unshift(u), u = kn(e, n, r, i, u, o))); + return (c || !u) && !o["*"] && (u = kn(e, n, r, i, "*", o)), u + } + + function Ln(e, n) { + var r, i, s = v.ajaxSettings.flatOptions || {}; + for (r in n) n[r] !== t && ((s[r] ? e : i || (i = {}))[r] = n[r]); + i && v.extend(!0, e, i) + } + + function An(e, n, r) { + var i, s, o, u, a = e.contents, + f = e.dataTypes, + l = e.responseFields; + for (s in l) s in r && (n[l[s]] = r[s]); + while (f[0] === "*") f.shift(), i === t && (i = e.mimeType || n.getResponseHeader("content-type")); + if (i) for (s in a) if (a[s] && a[s].test(i)) { + f.unshift(s); + break + } + if (f[0] in r) o = f[0]; + else { + for (s in r) { + if (!f[0] || e.converters[s + " " + f[0]]) { + o = s; + break + } + u || (u = s) + } + o = o || u + } + if (o) return o !== f[0] && f.unshift(o), r[o] + } + + function On(e, t) { + var n, r, i, s, o = e.dataTypes.slice(), + u = o[0], + a = {}, + f = 0; + e.dataFilter && (t = e.dataFilter(t, e.dataType)); + if (o[1]) for (n in e.converters) a[n.toLowerCase()] = e.converters[n]; + for (; i = o[++f];) if (i !== "*") { + if (u !== "*" && u !== i) { + n = a[u + " " + i] || a["* " + i]; + if (!n) for (r in a) { + s = r.split(" "); + if (s[1] === i) { + n = a[u + " " + s[0]] || a["* " + s[0]]; + if (n) { + n === !0 ? n = a[r] : a[r] !== !0 && (i = s[0], o.splice(f--, 0, i)); + break + } + } + } + if (n !== !0) if (n && e["throws"]) t = n(t); + else try { + t = n(t) + } catch (l) { + return { + state: "parsererror", + error: n ? l : "No conversion from " + u + " to " + i + } + } + } + u = i + } + return { + state: "success", + data: t + } + } + + function Fn() { + try { + return new e.XMLHttpRequest + } catch (t) {} + } + + function In() { + try { + return new e.ActiveXObject("Microsoft.XMLHTTP") + } catch (t) {} + } + + function $n() { + return setTimeout(function() { + qn = t + }, 0), qn = v.now() + } + + function Jn(e, t) { + v.each(t, function(t, n) { + var r = (Vn[t] || []).concat(Vn["*"]), + i = 0, + s = r.length; + for (; i < s; i++) if (r[i].call(e, t, n)) return + }) + } + + function Kn(e, t, n) { + var r, i = 0, + s = 0, + o = Xn.length, + u = v.Deferred().always(function() { + delete a.elem + }), + a = function() { + var t = qn || $n(), + n = Math.max(0, f.startTime + f.duration - t), + r = n / f.duration || 0, + i = 1 - r, + s = 0, + o = f.tweens.length; + for (; s < o; s++) f.tweens[s].run(i); + return u.notifyWith(e, [f, i, n]), i < 1 && o ? n : (u.resolveWith(e, [f]), !1) + }, + f = u.promise({ + elem: e, + props: v.extend({}, t), + opts: v.extend(!0, { + specialEasing: {} + }, n), + originalProperties: t, + originalOptions: n, + startTime: qn || $n(), + duration: n.duration, + tweens: [], + createTween: function(t, n, r) { + var i = v.Tween(e, f.opts, t, n, f.opts.specialEasing[t] || f.opts.easing); + return f.tweens.push(i), i + }, + stop: function(t) { + var n = 0, + r = t ? f.tweens.length : 0; + for (; n < r; n++) f.tweens[n].run(1); + return t ? u.resolveWith(e, [f, t]) : u.rejectWith(e, [f, t]), this + } + }), + l = f.props; + Qn(l, f.opts.specialEasing); + for (; i < o; i++) { + r = Xn[i].call(f, e, l, f.opts); + if (r) return r + } + return Jn(f, l), v.isFunction(f.opts.start) && f.opts.start.call(e, f), v.fx.timer(v.extend(a, { + anim: f, + queue: f.opts.queue, + elem: e + })), f.progress(f.opts.progress).done(f.opts.done, f.opts.complete).fail(f.opts.fail).always(f.opts.always) + } + + function Qn(e, t) { + var n, r, i, s, o; + for (n in e) { + r = v.camelCase(n), i = t[r], s = e[n], v.isArray(s) && (i = s[1], s = e[n] = s[0]), n !== r && (e[r] = s, delete e[n]), o = v.cssHooks[r]; + if (o && "expand" in o) { + s = o.expand(s), delete e[r]; + for (n in s) n in e || (e[n] = s[n], t[n] = i) + } else t[r] = i + } + } + + function Gn(e, t, n) { + var r, i, s, o, u, a, f, l, c, h = this, + p = e.style, + d = {}, + m = [], + g = e.nodeType && Gt(e); + n.queue || (l = v._queueHooks(e, "fx"), l.unqueued == null && (l.unqueued = 0, c = l.empty.fire, l.empty.fire = function() { + l.unqueued || c() + }), l.unqueued++, h.always(function() { + h.always(function() { + l.unqueued--, v.queue(e, "fx").length || l.empty.fire() + }) + })), e.nodeType === 1 && ("height" in t || "width" in t) && (n.overflow = [p.overflow, p.overflowX, p.overflowY], v.css(e, "display") === "inline" && v.css(e, "float") === "none" && (!v.support.inlineBlockNeedsLayout || nn(e.nodeName) === "inline" ? p.display = "inline-block" : p.zoom = 1)), n.overflow && (p.overflow = "hidden", v.support.shrinkWrapBlocks || h.done(function() { + p.overflow = n.overflow[0], p.overflowX = n.overflow[1], p.overflowY = n.overflow[2] + })); + for (r in t) { + s = t[r]; + if (Un.exec(s)) { + delete t[r], a = a || s === "toggle"; + if (s === (g ? "hide" : "show")) continue; + m.push(r) + } + } + o = m.length; + if (o) { + u = v._data(e, "fxshow") || v._data(e, "fxshow", {}), "hidden" in u && (g = u.hidden), a && (u.hidden = !g), g ? v(e).show() : h.done(function() { + v(e).hide() + }), h.done(function() { + var t; + v.removeData(e, "fxshow", !0); + for (t in d) v.style(e, t, d[t]) + }); + for (r = 0; r < o; r++) i = m[r], f = h.createTween(i, g ? u[i] : 0), d[i] = u[i] || v.style(e, i), i in u || (u[i] = f.start, g && (f.end = f.start, f.start = i === "width" || i === "height" ? 1 : 0)) + } + } + + function Yn(e, t, n, r, i) { + return new Yn.prototype.init(e, t, n, r, i) + } + + function Zn(e, t) { + var n, r = { + height: e + }, + i = 0; + t = t ? 1 : 0; + for (; i < 4; i += 2 - t) n = $t[i], r["margin" + n] = r["padding" + n] = e; + return t && (r.opacity = r.width = e), r + } + + function tr(e) { + return v.isWindow(e) ? e : e.nodeType === 9 ? e.defaultView || e.parentWindow : !1 + } + var n, r, i = e.document, + s = e.location, + o = e.navigator, + u = e.jQuery, + a = e.$, + f = Array.prototype.push, + l = Array.prototype.slice, + c = Array.prototype.indexOf, + h = Object.prototype.toString, + p = Object.prototype.hasOwnProperty, + d = String.prototype.trim, + v = function(e, t) { + return new v.fn.init(e, t, n) + }, + m = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source, + g = /\S/, + y = /\s+/, + b = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, + w = /^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/, + E = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, + S = /^[\],:{}\s]*$/, + x = /(?:^|:|,)(?:\s*\[)+/g, + T = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, + N = /"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g, + C = /^-ms-/, + k = /-([\da-z])/gi, + L = function(e, t) { + return (t + "").toUpperCase() + }, + A = function() { + i.addEventListener ? (i.removeEventListener("DOMContentLoaded", A, !1), v.ready()) : i.readyState === "complete" && (i.detachEvent("onreadystatechange", A), v.ready()) + }, + O = {}; + v.fn = v.prototype = { + constructor: v, + init: function(e, n, r) { + var s, o, u, a; + if (!e) return this; + if (e.nodeType) return this.context = this[0] = e, this.length = 1, this; + if (typeof e == "string") { + e.charAt(0) === "<" && e.charAt(e.length - 1) === ">" && e.length >= 3 ? s = [null, e, null] : s = w.exec(e); + if (s && (s[1] || !n)) { + if (s[1]) return n = n instanceof v ? n[0] : n, a = n && n.nodeType ? n.ownerDocument || n : i, e = v.parseHTML(s[1], a, !0), E.test(s[1]) && v.isPlainObject(n) && this.attr.call(e, n, !0), v.merge(this, e); + o = i.getElementById(s[2]); + if (o && o.parentNode) { + if (o.id !== s[2]) return r.find(e); + this.length = 1, this[0] = o + } + return this.context = i, this.selector = e, this + } + return !n || n.jquery ? (n || r).find(e) : this.constructor(n).find(e) + } + return v.isFunction(e) ? r.ready(e) : (e.selector !== t && (this.selector = e.selector, this.context = e.context), v.makeArray(e, this)) + }, + selector: "", + jquery: "1.8.3", + length: 0, + size: function() { + return this.length + }, + toArray: function() { + return l.call(this) + }, + get: function(e) { + return e == null ? this.toArray() : e < 0 ? this[this.length + e] : this[e] + }, + pushStack: function(e, t, n) { + var r = v.merge(this.constructor(), e); + return r.prevObject = this, r.context = this.context, t === "find" ? r.selector = this.selector + (this.selector ? " " : "") + n : t && (r.selector = this.selector + "." + t + "(" + n + ")"), r + }, + each: function(e, t) { + return v.each(this, e, t) + }, + ready: function(e) { + return v.ready.promise().done(e), this + }, + eq: function(e) { + return e = +e, e === -1 ? this.slice(e) : this.slice(e, e + 1) + }, + first: function() { + return this.eq(0) + }, + last: function() { + return this.eq(-1) + }, + slice: function() { + return this.pushStack(l.apply(this, arguments), "slice", l.call(arguments).join(",")) + }, + map: function(e) { + return this.pushStack(v.map(this, function(t, n) { + return e.call(t, n, t) + })) + }, + end: function() { + return this.prevObject || this.constructor(null) + }, + push: f, + sort: [].sort, + splice: [].splice + }, v.fn.init.prototype = v.fn, v.extend = v.fn.extend = function() { + var e, n, r, i, s, o, u = arguments[0] || {}, + a = 1, + f = arguments.length, + l = !1; + typeof u == "boolean" && (l = u, u = arguments[1] || {}, a = 2), typeof u != "object" && !v.isFunction(u) && (u = {}), f === a && (u = this, --a); + for (; a < f; a++) if ((e = arguments[a]) != null) for (n in e) { + r = u[n], i = e[n]; + if (u === i) continue; + l && i && (v.isPlainObject(i) || (s = v.isArray(i))) ? (s ? (s = !1, o = r && v.isArray(r) ? r : []) : o = r && v.isPlainObject(r) ? r : {}, u[n] = v.extend(l, o, i)) : i !== t && (u[n] = i) + } + return u + }, v.extend({ + noConflict: function(t) { + return e.$ === v && (e.$ = a), t && e.jQuery === v && (e.jQuery = u), v + }, + isReady: !1, + readyWait: 1, + holdReady: function(e) { + e ? v.readyWait++ : v.ready(!0) + }, + ready: function(e) { + if (e === !0 ? --v.readyWait : v.isReady) return; + if (!i.body) return setTimeout(v.ready, 1); + v.isReady = !0; + if (e !== !0 && --v.readyWait > 0) return; + r.resolveWith(i, [v]), v.fn.trigger && v(i).trigger("ready").off("ready") + }, + isFunction: function(e) { + return v.type(e) === "function" + }, + isArray: Array.isArray || + function(e) { + return v.type(e) === "array" + }, + isWindow: function(e) { + return e != null && e == e.window + }, + isNumeric: function(e) { + return !isNaN(parseFloat(e)) && isFinite(e) + }, + type: function(e) { + return e == null ? String(e) : O[h.call(e)] || "object" + }, + isPlainObject: function(e) { + if (!e || v.type(e) !== "object" || e.nodeType || v.isWindow(e)) return !1; + try { + if (e.constructor && !p.call(e, "constructor") && !p.call(e.constructor.prototype, "isPrototypeOf")) return !1 + } catch (n) { + return !1 + } + var r; + for (r in e); + return r === t || p.call(e, r) + }, + isEmptyObject: function(e) { + var t; + for (t in e) return !1; + return !0 + }, + error: function(e) { + throw new Error(e) + }, + parseHTML: function(e, t, n) { + var r; + return !e || typeof e != "string" ? null : (typeof t == "boolean" && (n = t, t = 0), t = t || i, (r = E.exec(e)) ? [t.createElement(r[1])] : (r = v.buildFragment([e], t, n ? null : []), v.merge([], (r.cacheable ? v.clone(r.fragment) : r.fragment).childNodes))) + }, + parseJSON: function(t) { + if (!t || typeof t != "string") return null; + t = v.trim(t); + if (e.JSON && e.JSON.parse) return e.JSON.parse(t); + if (S.test(t.replace(T, "@").replace(N, "]").replace(x, ""))) return (new Function("return " + t))(); + v.error("Invalid JSON: " + t) + }, + parseXML: function(n) { + var r, i; + if (!n || typeof n != "string") return null; + try { + e.DOMParser ? (i = new DOMParser, r = i.parseFromString(n, "text/xml")) : (r = new ActiveXObject("Microsoft.XMLDOM"), r.async = "false", r.loadXML(n)) + } catch (s) { + r = t + } + return (!r || !r.documentElement || r.getElementsByTagName("parsererror").length) && v.error("Invalid XML: " + n), r + }, + noop: function() {}, + globalEval: function(t) { + t && g.test(t) && (e.execScript || + function(t) { + e.eval.call(e, t) + })(t) + }, + camelCase: function(e) { + return e.replace(C, "ms-").replace(k, L) + }, + nodeName: function(e, t) { + return e.nodeName && e.nodeName.toLowerCase() === t.toLowerCase() + }, + each: function(e, n, r) { + var i, s = 0, + o = e.length, + u = o === t || v.isFunction(e); + if (r) { + if (u) { + for (i in e) if (n.apply(e[i], r) === !1) break + } else for (; s < o;) if (n.apply(e[s++], r) === !1) break + } else if (u) { + for (i in e) if (n.call(e[i], i, e[i]) === !1) break + } else for (; s < o;) if (n.call(e[s], s, e[s++]) === !1) break; + return e + }, + trim: d && !d.call("\ufeff\u00a0") ? + function(e) { + return e == null ? "" : d.call(e) + } : function(e) { + return e == null ? "" : (e + "").replace(b, "") + }, + makeArray: function(e, t) { + var n, r = t || []; + return e != null && (n = v.type(e), e.length == null || n === "string" || n === "function" || n === "regexp" || v.isWindow(e) ? f.call(r, e) : v.merge(r, e)), r + }, + inArray: function(e, t, n) { + var r; + if (t) { + if (c) return c.call(t, e, n); + r = t.length, n = n ? n < 0 ? Math.max(0, r + n) : n : 0; + for (; n < r; n++) if (n in t && t[n] === e) return n + } + return -1 + }, + merge: function(e, n) { + var r = n.length, + i = e.length, + s = 0; + if (typeof r == "number") for (; s < r; s++) e[i++] = n[s]; + else while (n[s] !== t) e[i++] = n[s++]; + return e.length = i, e + }, + grep: function(e, t, n) { + var r, i = [], + s = 0, + o = e.length; + n = !! n; + for (; s < o; s++) r = !! t(e[s], s), n !== r && i.push(e[s]); + return i + }, + map: function(e, n, r) { + var i, s, o = [], + u = 0, + a = e.length, + f = e instanceof v || a !== t && typeof a == "number" && (a > 0 && e[0] && e[a - 1] || a === 0 || v.isArray(e)); + if (f) for (; u < a; u++) i = n(e[u], u, r), i != null && (o[o.length] = i); + else for (s in e) i = n(e[s], s, r), i != null && (o[o.length] = i); + return o.concat.apply([], o) + }, + guid: 1, + proxy: function(e, n) { + var r, i, s; + return typeof n == "string" && (r = e[n], n = e, e = r), v.isFunction(e) ? (i = l.call(arguments, 2), s = function() { + return e.apply(n, i.concat(l.call(arguments))) + }, s.guid = e.guid = e.guid || v.guid++, s) : t + }, + access: function(e, n, r, i, s, o, u) { + var a, f = r == null, + l = 0, + c = e.length; + if (r && typeof r == "object") { + for (l in r) v.access(e, n, l, r[l], 1, o, i); + s = 1 + } else if (i !== t) { + a = u === t && v.isFunction(i), f && (a ? (a = n, n = function(e, t, n) { + return a.call(v(e), n) + }) : (n.call(e, i), n = null)); + if (n) for (; l < c; l++) n(e[l], r, a ? i.call(e[l], l, n(e[l], r)) : i, u); + s = 1 + } + return s ? e : f ? n.call(e) : c ? n(e[0], r) : o + }, + now: function() { + return (new Date).getTime() + } + }), v.ready.promise = function(t) { + if (!r) { + r = v.Deferred(); + if (i.readyState === "complete") setTimeout(v.ready, 1); + else if (i.addEventListener) i.addEventListener("DOMContentLoaded", A, !1), e.addEventListener("load", v.ready, !1); + else { + i.attachEvent("onreadystatechange", A), e.attachEvent("onload", v.ready); + var n = !1; + try { + n = e.frameElement == null && i.documentElement + } catch (s) {} + n && n.doScroll && + function o() { + if (!v.isReady) { + try { + n.doScroll("left") + } catch (e) { + return setTimeout(o, 50) + } + v.ready() + } + }() + } + } + return r.promise(t) + }, v.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(e, t) { + O["[object " + t + "]"] = t.toLowerCase() + }), n = v(i); + var M = {}; + v.Callbacks = function(e) { + e = typeof e == "string" ? M[e] || _(e) : v.extend({}, e); + var n, r, i, s, o, u, a = [], + f = !e.once && [], + l = function(t) { + n = e.memory && t, r = !0, u = s || 0, s = 0, o = a.length, i = !0; + for (; a && u < o; u++) if (a[u].apply(t[0], t[1]) === !1 && e.stopOnFalse) { + n = !1; + break + } + i = !1, a && (f ? f.length && l(f.shift()) : n ? a = [] : c.disable()) + }, + c = { + add: function() { + if (a) { + var t = a.length; + (function r(t) { + v.each(t, function(t, n) { + var i = v.type(n); + i === "function" ? (!e.unique || !c.has(n)) && a.push(n) : n && n.length && i !== "string" && r(n) + }) + })(arguments), i ? o = a.length : n && (s = t, l(n)) + } + return this + }, + remove: function() { + return a && v.each(arguments, function(e, t) { + var n; + while ((n = v.inArray(t, a, n)) > -1) a.splice(n, 1), i && (n <= o && o--, n <= u && u--) + }), this + }, + has: function(e) { + return v.inArray(e, a) > -1 + }, + empty: function() { + return a = [], this + }, + disable: function() { + return a = f = n = t, this + }, + disabled: function() { + return !a + }, + lock: function() { + return f = t, n || c.disable(), this + }, + locked: function() { + return !f + }, + fireWith: function(e, t) { + return t = t || [], t = [e, t.slice ? t.slice() : t], a && (!r || f) && (i ? f.push(t) : l(t)), this + }, + fire: function() { + return c.fireWith(this, arguments), this + }, + fired: function() { + return !!r + } + }; + return c + }, v.extend({ + Deferred: function(e) { + var t = [ + ["resolve", "done", v.Callbacks("once memory"), "resolved"], + ["reject", "fail", v.Callbacks("once memory"), "rejected"], + ["notify", "progress", v.Callbacks("memory")] + ], + n = "pending", + r = { + state: function() { + return n + }, + always: function() { + return i.done(arguments).fail(arguments), this + }, + then: function() { + var e = arguments; + return v.Deferred(function(n) { + v.each(t, function(t, r) { + var s = r[0], + o = e[t]; + i[r[1]](v.isFunction(o) ? + function() { + var e = o.apply(this, arguments); + e && v.isFunction(e.promise) ? e.promise().done(n.resolve).fail(n.reject).progress(n.notify) : n[s + "With"](this === i ? n : this, [e]) + } : n[s]) + }), e = null + }).promise() + }, + promise: function(e) { + return e != null ? v.extend(e, r) : r + } + }, + i = {}; + return r.pipe = r.then, v.each(t, function(e, s) { + var o = s[2], + u = s[3]; + r[s[1]] = o.add, u && o.add(function() { + n = u + }, t[e ^ 1][2].disable, t[2][2].lock), i[s[0]] = o.fire, i[s[0] + "With"] = o.fireWith + }), r.promise(i), e && e.call(i, i), i + }, + when: function(e) { + var t = 0, + n = l.call(arguments), + r = n.length, + i = r !== 1 || e && v.isFunction(e.promise) ? r : 0, + s = i === 1 ? e : v.Deferred(), + o = function(e, t, n) { + return function(r) { + t[e] = this, n[e] = arguments.length > 1 ? l.call(arguments) : r, n === u ? s.notifyWith(t, n) : --i || s.resolveWith(t, n) + } + }, + u, a, f; + if (r > 1) { + u = new Array(r), a = new Array(r), f = new Array(r); + for (; t < r; t++) n[t] && v.isFunction(n[t].promise) ? n[t].promise().done(o(t, f, n)).fail(s.reject).progress(o(t, a, u)) : --i + } + return i || s.resolveWith(f, n), s.promise() + } + }), v.support = function() { + var t, n, r, s, o, u, a, f, l, c, h, p = i.createElement("div"); + p.setAttribute("className", "t"), p.innerHTML = "
a", n = p.getElementsByTagName("*"), r = p.getElementsByTagName("a")[0]; + if (!n || !r || !n.length) return {}; + s = i.createElement("select"), o = s.appendChild(i.createElement("option")), u = p.getElementsByTagName("input")[0], r.style.cssText = "top:1px;float:left;opacity:.5", t = { + leadingWhitespace: p.firstChild.nodeType === 3, + tbody: !p.getElementsByTagName("tbody").length, + htmlSerialize: !! p.getElementsByTagName("link").length, + style: /top/.test(r.getAttribute("style")), + hrefNormalized: r.getAttribute("href") === "/a", + opacity: /^0.5/.test(r.style.opacity), + cssFloat: !! r.style.cssFloat, + checkOn: u.value === "on", + optSelected: o.selected, + getSetAttribute: p.className !== "t", + enctype: !! i.createElement("form").enctype, + html5Clone: i.createElement("nav").cloneNode(!0).outerHTML !== "<:nav>", + boxModel: i.compatMode === "CSS1Compat", + submitBubbles: !0, + changeBubbles: !0, + focusinBubbles: !1, + deleteExpando: !0, + noCloneEvent: !0, + inlineBlockNeedsLayout: !1, + shrinkWrapBlocks: !1, + reliableMarginRight: !0, + boxSizingReliable: !0, + pixelPosition: !1 + }, u.checked = !0, t.noCloneChecked = u.cloneNode(!0).checked, s.disabled = !0, t.optDisabled = !o.disabled; + try { + delete p.test + } catch (d) { + t.deleteExpando = !1 + }!p.addEventListener && p.attachEvent && p.fireEvent && (p.attachEvent("onclick", h = function() { + t.noCloneEvent = !1 + }), p.cloneNode(!0).fireEvent("onclick"), p.detachEvent("onclick", h)), u = i.createElement("input"), u.value = "t", u.setAttribute("type", "radio"), t.radioValue = u.value === "t", u.setAttribute("checked", "checked"), u.setAttribute("name", "t"), p.appendChild(u), a = i.createDocumentFragment(), a.appendChild(p.lastChild), t.checkClone = a.cloneNode(!0).cloneNode(!0).lastChild.checked, t.appendChecked = u.checked, a.removeChild(u), a.appendChild(p); + if (p.attachEvent) for (l in { + submit: !0, + change: !0, + focusin: !0 + }) f = "on" + l, c = f in p, c || (p.setAttribute(f, "return;"), c = typeof p[f] == "function"), t[l + "Bubbles"] = c; + return v(function() { + var n, r, s, o, u = "padding:0;margin:0;border:0;display:block;overflow:hidden;", + a = i.getElementsByTagName("body")[0]; + if (!a) return; + n = i.createElement("div"), n.style.cssText = "visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px", a.insertBefore(n, a.firstChild), r = i.createElement("div"), n.appendChild(r), r.innerHTML = "
t
", s = r.getElementsByTagName("td"), s[0].style.cssText = "padding:0;margin:0;border:0;display:none", c = s[0].offsetHeight === 0, s[0].style.display = "", s[1].style.display = "none", t.reliableHiddenOffsets = c && s[0].offsetHeight === 0, r.innerHTML = "", r.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;", t.boxSizing = r.offsetWidth === 4, t.doesNotIncludeMarginInBodyOffset = a.offsetTop !== 1, e.getComputedStyle && (t.pixelPosition = (e.getComputedStyle(r, null) || {}).top !== "1%", t.boxSizingReliable = (e.getComputedStyle(r, null) || { + width: "4px" + }).width === "4px", o = i.createElement("div"), o.style.cssText = r.style.cssText = u, o.style.marginRight = o.style.width = "0", r.style.width = "1px", r.appendChild(o), t.reliableMarginRight = !parseFloat((e.getComputedStyle(o, null) || {}).marginRight)), typeof r.style.zoom != "undefined" && (r.innerHTML = "", r.style.cssText = u + "width:1px;padding:1px;display:inline;zoom:1", t.inlineBlockNeedsLayout = r.offsetWidth === 3, r.style.display = "block", r.style.overflow = "visible", r.innerHTML = "
", r.firstChild.style.width = "5px", t.shrinkWrapBlocks = r.offsetWidth !== 3, n.style.zoom = 1), a.removeChild(n), n = r = s = o = null + }), a.removeChild(p), n = r = s = o = u = a = p = null, t + }(); + var D = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, + P = /([A-Z])/g; + v.extend({ + cache: {}, + deletedIds: [], + uuid: 0, + expando: "jQuery" + (v.fn.jquery + Math.random()).replace(/\D/g, ""), + noData: { + embed: !0, + object: "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", + applet: !0 + }, + hasData: function(e) { + return e = e.nodeType ? v.cache[e[v.expando]] : e[v.expando], !! e && !B(e) + }, + data: function(e, n, r, i) { + if (!v.acceptData(e)) return; + var s, o, u = v.expando, + a = typeof n == "string", + f = e.nodeType, + l = f ? v.cache : e, + c = f ? e[u] : e[u] && u; + if ((!c || !l[c] || !i && !l[c].data) && a && r === t) return; + c || (f ? e[u] = c = v.deletedIds.pop() || v.guid++ : c = u), l[c] || (l[c] = {}, f || (l[c].toJSON = v.noop)); + if (typeof n == "object" || typeof n == "function") i ? l[c] = v.extend(l[c], n) : l[c].data = v.extend(l[c].data, n); + return s = l[c], i || (s.data || (s.data = {}), s = s.data), r !== t && (s[v.camelCase(n)] = r), a ? (o = s[n], o == null && (o = s[v.camelCase(n)])) : o = s, o + }, + removeData: function(e, t, n) { + if (!v.acceptData(e)) return; + var r, i, s, o = e.nodeType, + u = o ? v.cache : e, + a = o ? e[v.expando] : v.expando; + if (!u[a]) return; + if (t) { + r = n ? u[a] : u[a].data; + if (r) { + v.isArray(t) || (t in r ? t = [t] : (t = v.camelCase(t), t in r ? t = [t] : t = t.split(" "))); + for (i = 0, s = t.length; i < s; i++) delete r[t[i]]; + if (!(n ? B : v.isEmptyObject)(r)) return + } + } + if (!n) { + delete u[a].data; + if (!B(u[a])) return + } + o ? v.cleanData([e], !0) : v.support.deleteExpando || u != u.window ? delete u[a] : u[a] = null + }, + _data: function(e, t, n) { + return v.data(e, t, n, !0) + }, + acceptData: function(e) { + var t = e.nodeName && v.noData[e.nodeName.toLowerCase()]; + return !t || t !== !0 && e.getAttribute("classid") === t + } + }), v.fn.extend({ + data: function(e, n) { + var r, i, s, o, u, a = this[0], + f = 0, + l = null; + if (e === t) { + if (this.length) { + l = v.data(a); + if (a.nodeType === 1 && !v._data(a, "parsedAttrs")) { + s = a.attributes; + for (u = s.length; f < u; f++) o = s[f].name, o.indexOf("data-") || (o = v.camelCase(o.substring(5)), H(a, o, l[o])); + v._data(a, "parsedAttrs", !0) + } + } + return l + } + return typeof e == "object" ? this.each(function() { + v.data(this, e) + }) : (r = e.split(".", 2), r[1] = r[1] ? "." + r[1] : "", i = r[1] + "!", v.access(this, function(n) { + if (n === t) return l = this.triggerHandler("getData" + i, [r[0]]), l === t && a && (l = v.data(a, e), l = H(a, e, l)), l === t && r[1] ? this.data(r[0]) : l; + r[1] = n, this.each(function() { + var t = v(this); + t.triggerHandler("setData" + i, r), v.data(this, e, n), t.triggerHandler("changeData" + i, r) + }) + }, null, n, arguments.length > 1, null, !1)) + }, + removeData: function(e) { + return this.each(function() { + v.removeData(this, e) + }) + } + }), v.extend({ + queue: function(e, t, n) { + var r; + if (e) return t = (t || "fx") + "queue", r = v._data(e, t), n && (!r || v.isArray(n) ? r = v._data(e, t, v.makeArray(n)) : r.push(n)), r || [] + }, + dequeue: function(e, t) { + t = t || "fx"; + var n = v.queue(e, t), + r = n.length, + i = n.shift(), + s = v._queueHooks(e, t), + o = function() { + v.dequeue(e, t) + }; + i === "inprogress" && (i = n.shift(), r--), i && (t === "fx" && n.unshift("inprogress"), delete s.stop, i.call(e, o, s)), !r && s && s.empty.fire() + }, + _queueHooks: function(e, t) { + var n = t + "queueHooks"; + return v._data(e, n) || v._data(e, n, { + empty: v.Callbacks("once memory").add(function() { + v.removeData(e, t + "queue", !0), v.removeData(e, n, !0) + }) + }) + } + }), v.fn.extend({ + queue: function(e, n) { + var r = 2; + return typeof e != "string" && (n = e, e = "fx", r--), arguments.length < r ? v.queue(this[0], e) : n === t ? this : this.each(function() { + var t = v.queue(this, e, n); + v._queueHooks(this, e), e === "fx" && t[0] !== "inprogress" && v.dequeue(this, e) + }) + }, + dequeue: function(e) { + return this.each(function() { + v.dequeue(this, e) + }) + }, + delay: function(e, t) { + return e = v.fx ? v.fx.speeds[e] || e : e, t = t || "fx", this.queue(t, function(t, n) { + var r = setTimeout(t, e); + n.stop = function() { + clearTimeout(r) + } + }) + }, + clearQueue: function(e) { + return this.queue(e || "fx", []) + }, + promise: function(e, n) { + var r, i = 1, + s = v.Deferred(), + o = this, + u = this.length, + a = function() { + --i || s.resolveWith(o, [o]) + }; + typeof e != "string" && (n = e, e = t), e = e || "fx"; + while (u--) r = v._data(o[u], e + "queueHooks"), r && r.empty && (i++, r.empty.add(a)); + return a(), s.promise(n) + } + }); + var j, F, I, q = /[\t\r\n]/g, + R = /\r/g, + U = /^(?:button|input)$/i, + z = /^(?:button|input|object|select|textarea)$/i, + W = /^a(?:rea|)$/i, + X = /^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i, + V = v.support.getSetAttribute; + v.fn.extend({ + attr: function(e, t) { + return v.access(this, v.attr, e, t, arguments.length > 1) + }, + removeAttr: function(e) { + return this.each(function() { + v.removeAttr(this, e) + }) + }, + prop: function(e, t) { + return v.access(this, v.prop, e, t, arguments.length > 1) + }, + removeProp: function(e) { + return e = v.propFix[e] || e, this.each(function() { + try { + this[e] = t, delete this[e] + } catch (n) {} + }) + }, + addClass: function(e) { + var t, n, r, i, s, o, u; + if (v.isFunction(e)) return this.each(function(t) { + v(this).addClass(e.call(this, t, this.className)) + }); + if (e && typeof e == "string") { + t = e.split(y); + for (n = 0, r = this.length; n < r; n++) { + i = this[n]; + if (i.nodeType === 1) if (!i.className && t.length === 1) i.className = e; + else { + s = " " + i.className + " "; + for (o = 0, u = t.length; o < u; o++) s.indexOf(" " + t[o] + " ") < 0 && (s += t[o] + " "); + i.className = v.trim(s) + } + } + } + return this + }, + removeClass: function(e) { + var n, r, i, s, o, u, a; + if (v.isFunction(e)) return this.each(function(t) { + v(this).removeClass(e.call(this, t, this.className)) + }); + if (e && typeof e == "string" || e === t) { + n = (e || "").split(y); + for (u = 0, a = this.length; u < a; u++) { + i = this[u]; + if (i.nodeType === 1 && i.className) { + r = (" " + i.className + " ").replace(q, " "); + for (s = 0, o = n.length; s < o; s++) while (r.indexOf(" " + n[s] + " ") >= 0) r = r.replace(" " + n[s] + " ", " "); + i.className = e ? v.trim(r) : "" + } + } + } + return this + }, + toggleClass: function(e, t) { + var n = typeof e, + r = typeof t == "boolean"; + return v.isFunction(e) ? this.each(function(n) { + v(this).toggleClass(e.call(this, n, this.className, t), t) + }) : this.each(function() { + if (n === "string") { + var i, s = 0, + o = v(this), + u = t, + a = e.split(y); + while (i = a[s++]) u = r ? u : !o.hasClass(i), o[u ? "addClass" : "removeClass"](i) + } else if (n === "undefined" || n === "boolean") this.className && v._data(this, "__className__", this.className), this.className = this.className || e === !1 ? "" : v._data(this, "__className__") || "" + }) + }, + hasClass: function(e) { + var t = " " + e + " ", + n = 0, + r = this.length; + for (; n < r; n++) if (this[n].nodeType === 1 && (" " + this[n].className + " ").replace(q, " ").indexOf(t) >= 0) return !0; + return !1 + }, + val: function(e) { + var n, r, i, s = this[0]; + if (!arguments.length) { + if (s) return n = v.valHooks[s.type] || v.valHooks[s.nodeName.toLowerCase()], n && "get" in n && (r = n.get(s, "value")) !== t ? r : (r = s.value, typeof r == "string" ? r.replace(R, "") : r == null ? "" : r); + return + } + return i = v.isFunction(e), this.each(function(r) { + var s, o = v(this); + if (this.nodeType !== 1) return; + i ? s = e.call(this, r, o.val()) : s = e, s == null ? s = "" : typeof s == "number" ? s += "" : v.isArray(s) && (s = v.map(s, function(e) { + return e == null ? "" : e + "" + })), n = v.valHooks[this.type] || v.valHooks[this.nodeName.toLowerCase()]; + if (!n || !("set" in n) || n.set(this, s, "value") === t) this.value = s + }) + } + }), v.extend({ + valHooks: { + option: { + get: function(e) { + var t = e.attributes.value; + return !t || t.specified ? e.value : e.text + } + }, + select: { + get: function(e) { + var t, n, r = e.options, + i = e.selectedIndex, + s = e.type === "select-one" || i < 0, + o = s ? null : [], + u = s ? i + 1 : r.length, + a = i < 0 ? u : s ? i : 0; + for (; a < u; a++) { + n = r[a]; + if ((n.selected || a === i) && (v.support.optDisabled ? !n.disabled : n.getAttribute("disabled") === null) && (!n.parentNode.disabled || !v.nodeName(n.parentNode, "optgroup"))) { + t = v(n).val(); + if (s) return t; + o.push(t) + } + } + return o + }, + set: function(e, t) { + var n = v.makeArray(t); + return v(e).find("option").each(function() { + this.selected = v.inArray(v(this).val(), n) >= 0 + }), n.length || (e.selectedIndex = -1), n + } + } + }, + attrFn: {}, + attr: function(e, n, r, i) { + var s, o, u, a = e.nodeType; + if (!e || a === 3 || a === 8 || a === 2) return; + if (i && v.isFunction(v.fn[n])) return v(e)[n](r); + if (typeof e.getAttribute == "undefined") return v.prop(e, n, r); + u = a !== 1 || !v.isXMLDoc(e), u && (n = n.toLowerCase(), o = v.attrHooks[n] || (X.test(n) ? F : j)); + if (r !== t) { + if (r === null) { + v.removeAttr(e, n); + return + } + return o && "set" in o && u && (s = o.set(e, r, n)) !== t ? s : (e.setAttribute(n, r + ""), r) + } + return o && "get" in o && u && (s = o.get(e, n)) !== null ? s : (s = e.getAttribute(n), s === null ? t : s) + }, + removeAttr: function(e, t) { + var n, r, i, s, o = 0; + if (t && e.nodeType === 1) { + r = t.split(y); + for (; o < r.length; o++) i = r[o], i && (n = v.propFix[i] || i, s = X.test(i), s || v.attr(e, i, ""), e.removeAttribute(V ? i : n), s && n in e && (e[n] = !1)) + } + }, + attrHooks: { + type: { + set: function(e, t) { + if (U.test(e.nodeName) && e.parentNode) v.error("type property can't be changed"); + else if (!v.support.radioValue && t === "radio" && v.nodeName(e, "input")) { + var n = e.value; + return e.setAttribute("type", t), n && (e.value = n), t + } + } + }, + value: { + get: function(e, t) { + return j && v.nodeName(e, "button") ? j.get(e, t) : t in e ? e.value : null + }, + set: function(e, t, n) { + if (j && v.nodeName(e, "button")) return j.set(e, t, n); + e.value = t + } + } + }, + propFix: { + tabindex: "tabIndex", + readonly: "readOnly", + "for": "htmlFor", + "class": "className", + maxlength: "maxLength", + cellspacing: "cellSpacing", + cellpadding: "cellPadding", + rowspan: "rowSpan", + colspan: "colSpan", + usemap: "useMap", + frameborder: "frameBorder", + contenteditable: "contentEditable" + }, + prop: function(e, n, r) { + var i, s, o, u = e.nodeType; + if (!e || u === 3 || u === 8 || u === 2) return; + return o = u !== 1 || !v.isXMLDoc(e), o && (n = v.propFix[n] || n, s = v.propHooks[n]), r !== t ? s && "set" in s && (i = s.set(e, r, n)) !== t ? i : e[n] = r : s && "get" in s && (i = s.get(e, n)) !== null ? i : e[n] + }, + propHooks: { + tabIndex: { + get: function(e) { + var n = e.getAttributeNode("tabindex"); + return n && n.specified ? parseInt(n.value, 10) : z.test(e.nodeName) || W.test(e.nodeName) && e.href ? 0 : t + } + } + } + }), F = { + get: function(e, n) { + var r, i = v.prop(e, n); + return i === !0 || typeof i != "boolean" && (r = e.getAttributeNode(n)) && r.nodeValue !== !1 ? n.toLowerCase() : t + }, + set: function(e, t, n) { + var r; + return t === !1 ? v.removeAttr(e, n) : (r = v.propFix[n] || n, r in e && (e[r] = !0), e.setAttribute(n, n.toLowerCase())), n + } + }, V || (I = { + name: !0, + id: !0, + coords: !0 + }, j = v.valHooks.button = { + get: function(e, n) { + var r; + return r = e.getAttributeNode(n), r && (I[n] ? r.value !== "" : r.specified) ? r.value : t + }, + set: function(e, t, n) { + var r = e.getAttributeNode(n); + return r || (r = i.createAttribute(n), e.setAttributeNode(r)), r.value = t + "" + } + }, v.each(["width", "height"], function(e, t) { + v.attrHooks[t] = v.extend(v.attrHooks[t], { + set: function(e, n) { + if (n === "") return e.setAttribute(t, "auto"), n + } + }) + }), v.attrHooks.contenteditable = { + get: j.get, + set: function(e, t, n) { + t === "" && (t = "false"), j.set(e, t, n) + } + }), v.support.hrefNormalized || v.each(["href", "src", "width", "height"], function(e, n) { + v.attrHooks[n] = v.extend(v.attrHooks[n], { + get: function(e) { + var r = e.getAttribute(n, 2); + return r === null ? t : r + } + }) + }), v.support.style || (v.attrHooks.style = { + get: function(e) { + return e.style.cssText.toLowerCase() || t + }, + set: function(e, t) { + return e.style.cssText = t + "" + } + }), v.support.optSelected || (v.propHooks.selected = v.extend(v.propHooks.selected, { + get: function(e) { + var t = e.parentNode; + return t && (t.selectedIndex, t.parentNode && t.parentNode.selectedIndex), null + } + })), v.support.enctype || (v.propFix.enctype = "encoding"), v.support.checkOn || v.each(["radio", "checkbox"], function() { + v.valHooks[this] = { + get: function(e) { + return e.getAttribute("value") === null ? "on" : e.value + } + } + }), v.each(["radio", "checkbox"], function() { + v.valHooks[this] = v.extend(v.valHooks[this], { + set: function(e, t) { + if (v.isArray(t)) return e.checked = v.inArray(v(e).val(), t) >= 0 + } + }) + }); + var $ = /^(?:textarea|input|select)$/i, + J = /^([^\.]*|)(?:\.(.+)|)$/, + K = /(?:^|\s)hover(\.\S+|)\b/, + Q = /^key/, + G = /^(?:mouse|contextmenu)|click/, + Y = /^(?:focusinfocus|focusoutblur)$/, + Z = function(e) { + return v.event.special.hover ? e : e.replace(K, "mouseenter$1 mouseleave$1") + }; + v.event = { + add: function(e, n, r, i, s) { + var o, u, a, f, l, c, h, p, d, m, g; + if (e.nodeType === 3 || e.nodeType === 8 || !n || !r || !(o = v._data(e))) return; + r.handler && (d = r, r = d.handler, s = d.selector), r.guid || (r.guid = v.guid++), a = o.events, a || (o.events = a = {}), u = o.handle, u || (o.handle = u = function(e) { + return typeof v == "undefined" || !! e && v.event.triggered === e.type ? t : v.event.dispatch.apply(u.elem, arguments) + }, u.elem = e), n = v.trim(Z(n)).split(" "); + for (f = 0; f < n.length; f++) { + l = J.exec(n[f]) || [], c = l[1], h = (l[2] || "").split(".").sort(), g = v.event.special[c] || {}, c = (s ? g.delegateType : g.bindType) || c, g = v.event.special[c] || {}, p = v.extend({ + type: c, + origType: l[1], + data: i, + handler: r, + guid: r.guid, + selector: s, + needsContext: s && v.expr.match.needsContext.test(s), + namespace: h.join(".") + }, d), m = a[c]; + if (!m) { + m = a[c] = [], m.delegateCount = 0; + if (!g.setup || g.setup.call(e, i, h, u) === !1) e.addEventListener ? e.addEventListener(c, u, !1) : e.attachEvent && e.attachEvent("on" + c, u) + } + g.add && (g.add.call(e, p), p.handler.guid || (p.handler.guid = r.guid)), s ? m.splice(m.delegateCount++, 0, p) : m.push(p), v.event.global[c] = !0 + } + e = null + }, + global: {}, + remove: function(e, t, n, r, i) { + var s, o, u, a, f, l, c, h, p, d, m, g = v.hasData(e) && v._data(e); + if (!g || !(h = g.events)) return; + t = v.trim(Z(t || "")).split(" "); + for (s = 0; s < t.length; s++) { + o = J.exec(t[s]) || [], u = a = o[1], f = o[2]; + if (!u) { + for (u in h) v.event.remove(e, u + t[s], n, r, !0); + continue + } + p = v.event.special[u] || {}, u = (r ? p.delegateType : p.bindType) || u, d = h[u] || [], l = d.length, f = f ? new RegExp("(^|\\.)" + f.split(".").sort().join("\\.(?:.*\\.|)") + "(\\.|$)") : null; + for (c = 0; c < d.length; c++) m = d[c], (i || a === m.origType) && (!n || n.guid === m.guid) && (!f || f.test(m.namespace)) && (!r || r === m.selector || r === "**" && m.selector) && (d.splice(c--, 1), m.selector && d.delegateCount--, p.remove && p.remove.call(e, m)); + d.length === 0 && l !== d.length && ((!p.teardown || p.teardown.call(e, f, g.handle) === !1) && v.removeEvent(e, u, g.handle), delete h[u]) + } + v.isEmptyObject(h) && (delete g.handle, v.removeData(e, "events", !0)) + }, + customEvent: { + getData: !0, + setData: !0, + changeData: !0 + }, + trigger: function(n, r, s, o) { + if (!s || s.nodeType !== 3 && s.nodeType !== 8) { + var u, a, f, l, c, h, p, d, m, g, y = n.type || n, + b = []; + if (Y.test(y + v.event.triggered)) return; + y.indexOf("!") >= 0 && (y = y.slice(0, -1), a = !0), y.indexOf(".") >= 0 && (b = y.split("."), y = b.shift(), b.sort()); + if ((!s || v.event.customEvent[y]) && !v.event.global[y]) return; + n = typeof n == "object" ? n[v.expando] ? n : new v.Event(y, n) : new v.Event(y), n.type = y, n.isTrigger = !0, n.exclusive = a, n.namespace = b.join("."), n.namespace_re = n.namespace ? new RegExp("(^|\\.)" + b.join("\\.(?:.*\\.|)") + "(\\.|$)") : null, h = y.indexOf(":") < 0 ? "on" + y : ""; + if (!s) { + u = v.cache; + for (f in u) u[f].events && u[f].events[y] && v.event.trigger(n, r, u[f].handle.elem, !0); + return + } + n.result = t, n.target || (n.target = s), r = r != null ? v.makeArray(r) : [], r.unshift(n), p = v.event.special[y] || {}; + if (p.trigger && p.trigger.apply(s, r) === !1) return; + m = [ + [s, p.bindType || y] + ]; + if (!o && !p.noBubble && !v.isWindow(s)) { + g = p.delegateType || y, l = Y.test(g + y) ? s : s.parentNode; + for (c = s; l; l = l.parentNode) m.push([l, g]), c = l; + c === (s.ownerDocument || i) && m.push([c.defaultView || c.parentWindow || e, g]) + } + for (f = 0; f < m.length && !n.isPropagationStopped(); f++) l = m[f][0], n.type = m[f][1], d = (v._data(l, "events") || {})[n.type] && v._data(l, "handle"), d && d.apply(l, r), d = h && l[h], d && v.acceptData(l) && d.apply && d.apply(l, r) === !1 && n.preventDefault(); + return n.type = y, !o && !n.isDefaultPrevented() && (!p._default || p._default.apply(s.ownerDocument, r) === !1) && (y !== "click" || !v.nodeName(s, "a")) && v.acceptData(s) && h && s[y] && (y !== "focus" && y !== "blur" || n.target.offsetWidth !== 0) && !v.isWindow(s) && (c = s[h], c && (s[h] = null), v.event.triggered = y, s[y](), v.event.triggered = t, c && (s[h] = c)), n.result + } + return + }, + dispatch: function(n) { + n = v.event.fix(n || e.event); + var r, i, s, o, u, a, f, c, h, p, d = (v._data(this, "events") || {})[n.type] || [], + m = d.delegateCount, + g = l.call(arguments), + y = !n.exclusive && !n.namespace, + b = v.event.special[n.type] || {}, + w = []; + g[0] = n, n.delegateTarget = this; + if (b.preDispatch && b.preDispatch.call(this, n) === !1) return; + if (m && (!n.button || n.type !== "click")) for (s = n.target; s != this; s = s.parentNode || this) if (s.disabled !== !0 || n.type !== "click") { + u = {}, f = []; + for (r = 0; r < m; r++) c = d[r], h = c.selector, u[h] === t && (u[h] = c.needsContext ? v(h, this).index(s) >= 0 : v.find(h, this, null, [s]).length), u[h] && f.push(c); + f.length && w.push({ + elem: s, + matches: f + }) + } + d.length > m && w.push({ + elem: this, + matches: d.slice(m) + }); + for (r = 0; r < w.length && !n.isPropagationStopped(); r++) { + a = w[r], n.currentTarget = a.elem; + for (i = 0; i < a.matches.length && !n.isImmediatePropagationStopped(); i++) { + c = a.matches[i]; + if (y || !n.namespace && !c.namespace || n.namespace_re && n.namespace_re.test(c.namespace)) n.data = c.data, n.handleObj = c, o = ((v.event.special[c.origType] || {}).handle || c.handler).apply(a.elem, g), o !== t && (n.result = o, o === !1 && (n.preventDefault(), n.stopPropagation())) + } + } + return b.postDispatch && b.postDispatch.call(this, n), n.result + }, + props: "attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), + fixHooks: {}, + keyHooks: { + props: "char charCode key keyCode".split(" "), + filter: function(e, t) { + return e.which == null && (e.which = t.charCode != null ? t.charCode : t.keyCode), e + } + }, + mouseHooks: { + props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), + filter: function(e, n) { + var r, s, o, u = n.button, + a = n.fromElement; + return e.pageX == null && n.clientX != null && (r = e.target.ownerDocument || i, s = r.documentElement, o = r.body, e.pageX = n.clientX + (s && s.scrollLeft || o && o.scrollLeft || 0) - (s && s.clientLeft || o && o.clientLeft || 0), e.pageY = n.clientY + (s && s.scrollTop || o && o.scrollTop || 0) - (s && s.clientTop || o && o.clientTop || 0)), !e.relatedTarget && a && (e.relatedTarget = a === e.target ? n.toElement : a), !e.which && u !== t && (e.which = u & 1 ? 1 : u & 2 ? 3 : u & 4 ? 2 : 0), e + } + }, + fix: function(e) { + if (e[v.expando]) return e; + var t, n, r = e, + s = v.event.fixHooks[e.type] || {}, + o = s.props ? this.props.concat(s.props) : this.props; + e = v.Event(r); + for (t = o.length; t;) n = o[--t], e[n] = r[n]; + return e.target || (e.target = r.srcElement || i), e.target.nodeType === 3 && (e.target = e.target.parentNode), e.metaKey = !! e.metaKey, s.filter ? s.filter(e, r) : e + }, + special: { + load: { + noBubble: !0 + }, + focus: { + delegateType: "focusin" + }, + blur: { + delegateType: "focusout" + }, + beforeunload: { + setup: function(e, t, n) { + v.isWindow(this) && (this.onbeforeunload = n) + }, + teardown: function(e, t) { + this.onbeforeunload === t && (this.onbeforeunload = null) + } + } + }, + simulate: function(e, t, n, r) { + var i = v.extend(new v.Event, n, { + type: e, + isSimulated: !0, + originalEvent: {} + }); + r ? v.event.trigger(i, null, t) : v.event.dispatch.call(t, i), i.isDefaultPrevented() && n.preventDefault() + } + }, v.event.handle = v.event.dispatch, v.removeEvent = i.removeEventListener ? + function(e, t, n) { + e.removeEventListener && e.removeEventListener(t, n, !1) + } : function(e, t, n) { + var r = "on" + t; + e.detachEvent && (typeof e[r] == "undefined" && (e[r] = null), e.detachEvent(r, n)) + }, v.Event = function(e, t) { + if (!(this instanceof v.Event)) return new v.Event(e, t); + e && e.type ? (this.originalEvent = e, this.type = e.type, this.isDefaultPrevented = e.defaultPrevented || e.returnValue === !1 || e.getPreventDefault && e.getPreventDefault() ? tt : et) : this.type = e, t && v.extend(this, t), this.timeStamp = e && e.timeStamp || v.now(), this[v.expando] = !0 + }, v.Event.prototype = { + preventDefault: function() { + this.isDefaultPrevented = tt; + var e = this.originalEvent; + if (!e) return; + e.preventDefault ? e.preventDefault() : e.returnValue = !1 + }, + stopPropagation: function() { + this.isPropagationStopped = tt; + var e = this.originalEvent; + if (!e) return; + e.stopPropagation && e.stopPropagation(), e.cancelBubble = !0 + }, + stopImmediatePropagation: function() { + this.isImmediatePropagationStopped = tt, this.stopPropagation() + }, + isDefaultPrevented: et, + isPropagationStopped: et, + isImmediatePropagationStopped: et + }, v.each({ + mouseenter: "mouseover", + mouseleave: "mouseout" + }, function(e, t) { + v.event.special[e] = { + delegateType: t, + bindType: t, + handle: function(e) { + var n, r = this, + i = e.relatedTarget, + s = e.handleObj, + o = s.selector; + if (!i || i !== r && !v.contains(r, i)) e.type = s.origType, n = s.handler.apply(this, arguments), e.type = t; + return n + } + } + }), v.support.submitBubbles || (v.event.special.submit = { + setup: function() { + if (v.nodeName(this, "form")) return !1; + v.event.add(this, "click._submit keypress._submit", function(e) { + var n = e.target, + r = v.nodeName(n, "input") || v.nodeName(n, "button") ? n.form : t; + r && !v._data(r, "_submit_attached") && (v.event.add(r, "submit._submit", function(e) { + e._submit_bubble = !0 + }), v._data(r, "_submit_attached", !0)) + }) + }, + postDispatch: function(e) { + e._submit_bubble && (delete e._submit_bubble, this.parentNode && !e.isTrigger && v.event.simulate("submit", this.parentNode, e, !0)) + }, + teardown: function() { + if (v.nodeName(this, "form")) return !1; + v.event.remove(this, "._submit") + } + }), v.support.changeBubbles || (v.event.special.change = { + setup: function() { + if ($.test(this.nodeName)) { + if (this.type === "checkbox" || this.type === "radio") v.event.add(this, "propertychange._change", function(e) { + e.originalEvent.propertyName === "checked" && (this._just_changed = !0) + }), v.event.add(this, "click._change", function(e) { + this._just_changed && !e.isTrigger && (this._just_changed = !1), v.event.simulate("change", this, e, !0) + }); + return !1 + } + v.event.add(this, "beforeactivate._change", function(e) { + var t = e.target; + $.test(t.nodeName) && !v._data(t, "_change_attached") && (v.event.add(t, "change._change", function(e) { + this.parentNode && !e.isSimulated && !e.isTrigger && v.event.simulate("change", this.parentNode, e, !0) + }), v._data(t, "_change_attached", !0)) + }) + }, + handle: function(e) { + var t = e.target; + if (this !== t || e.isSimulated || e.isTrigger || t.type !== "radio" && t.type !== "checkbox") return e.handleObj.handler.apply(this, arguments) + }, + teardown: function() { + return v.event.remove(this, "._change"), !$.test(this.nodeName) + } + }), v.support.focusinBubbles || v.each({ + focus: "focusin", + blur: "focusout" + }, function(e, t) { + var n = 0, + r = function(e) { + v.event.simulate(t, e.target, v.event.fix(e), !0) + }; + v.event.special[t] = { + setup: function() { + n++ === 0 && i.addEventListener(e, r, !0) + }, + teardown: function() { + --n === 0 && i.removeEventListener(e, r, !0) + } + } + }), v.fn.extend({ + on: function(e, n, r, i, s) { + var o, u; + if (typeof e == "object") { + typeof n != "string" && (r = r || n, n = t); + for (u in e) this.on(u, n, r, e[u], s); + return this + } + r == null && i == null ? (i = n, r = n = t) : i == null && (typeof n == "string" ? (i = r, r = t) : (i = r, r = n, n = t)); + if (i === !1) i = et; + else if (!i) return this; + return s === 1 && (o = i, i = function(e) { + return v().off(e), o.apply(this, arguments) + }, i.guid = o.guid || (o.guid = v.guid++)), this.each(function() { + v.event.add(this, e, i, r, n) + }) + }, + one: function(e, t, n, r) { + return this.on(e, t, n, r, 1) + }, + off: function(e, n, r) { + var i, s; + if (e && e.preventDefault && e.handleObj) return i = e.handleObj, v(e.delegateTarget).off(i.namespace ? i.origType + "." + i.namespace : i.origType, i.selector, i.handler), this; + if (typeof e == "object") { + for (s in e) this.off(s, n, e[s]); + return this + } + if (n === !1 || typeof n == "function") r = n, n = t; + return r === !1 && (r = et), this.each(function() { + v.event.remove(this, e, r, n) + }) + }, + bind: function(e, t, n) { + return this.on(e, null, t, n) + }, + unbind: function(e, t) { + return this.off(e, null, t) + }, + live: function(e, t, n) { + return v(this.context).on(e, this.selector, t, n), this + }, + die: function(e, t) { + return v(this.context).off(e, this.selector || "**", t), this + }, + delegate: function(e, t, n, r) { + return this.on(t, e, n, r) + }, + undelegate: function(e, t, n) { + return arguments.length === 1 ? this.off(e, "**") : this.off(t, e || "**", n) + }, + trigger: function(e, t) { + return this.each(function() { + v.event.trigger(e, t, this) + }) + }, + triggerHandler: function(e, t) { + if (this[0]) return v.event.trigger(e, t, this[0], !0) + }, + toggle: function(e) { + var t = arguments, + n = e.guid || v.guid++, + r = 0, + i = function(n) { + var i = (v._data(this, "lastToggle" + e.guid) || 0) % r; + return v._data(this, "lastToggle" + e.guid, i + 1), n.preventDefault(), t[i].apply(this, arguments) || !1 + }; + i.guid = n; + while (r < t.length) t[r++].guid = n; + return this.click(i) + }, + hover: function(e, t) { + return this.mouseenter(e).mouseleave(t || e) + } + }), v.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(e, t) { + v.fn[t] = function(e, n) { + return n == null && (n = e, e = null), arguments.length > 0 ? this.on(t, null, e, n) : this.trigger(t) + }, Q.test(t) && (v.event.fixHooks[t] = v.event.keyHooks), G.test(t) && (v.event.fixHooks[t] = v.event.mouseHooks) + }), function(e, t) { + function nt(e, t, n, r) { + n = n || [], t = t || g; + var i, s, a, f, l = t.nodeType; + if (!e || typeof e != "string") return n; + if (l !== 1 && l !== 9) return []; + a = o(t); + if (!a && !r) if (i = R.exec(e)) if (f = i[1]) { + if (l === 9) { + s = t.getElementById(f); + if (!s || !s.parentNode) return n; + if (s.id === f) return n.push(s), n + } else if (t.ownerDocument && (s = t.ownerDocument.getElementById(f)) && u(t, s) && s.id === f) return n.push(s), n + } else { + if (i[2]) return S.apply(n, x.call(t.getElementsByTagName(e), 0)), n; + if ((f = i[3]) && Z && t.getElementsByClassName) return S.apply(n, x.call(t.getElementsByClassName(f), 0)), n + } + return vt(e.replace(j, "$1"), t, n, r, a) + } + + function rt(e) { + return function(t) { + var n = t.nodeName.toLowerCase(); + return n === "input" && t.type === e + } + } + + function it(e) { + return function(t) { + var n = t.nodeName.toLowerCase(); + return (n === "input" || n === "button") && t.type === e + } + } + + function st(e) { + return N(function(t) { + return t = +t, N(function(n, r) { + var i, s = e([], n.length, t), + o = s.length; + while (o--) n[i = s[o]] && (n[i] = !(r[i] = n[i])) + }) + }) + } + + function ot(e, t, n) { + if (e === t) return n; + var r = e.nextSibling; + while (r) { + if (r === t) return -1; + r = r.nextSibling + } + return 1 + } + + function ut(e, t) { + var n, r, s, o, u, a, f, l = L[d][e + " "]; + if (l) return t ? 0 : l.slice(0); + u = e, a = [], f = i.preFilter; + while (u) { + if (!n || (r = F.exec(u))) r && (u = u.slice(r[0].length) || u), a.push(s = []); + n = !1; + if (r = I.exec(u)) s.push(n = new m(r.shift())), u = u.slice(n.length), n.type = r[0].replace(j, " "); + for (o in i.filter)(r = J[o].exec(u)) && (!f[o] || (r = f[o](r))) && (s.push(n = new m(r.shift())), u = u.slice(n.length), n.type = o, n.matches = r); + if (!n) break + } + return t ? u.length : u ? nt.error(e) : L(e, a).slice(0) + } + + function at(e, t, r) { + var i = t.dir, + s = r && t.dir === "parentNode", + o = w++; + return t.first ? + function(t, n, r) { + while (t = t[i]) if (s || t.nodeType === 1) return e(t, n, r) + } : function(t, r, u) { + if (!u) { + var a, f = b + " " + o + " ", + l = f + n; + while (t = t[i]) if (s || t.nodeType === 1) { + if ((a = t[d]) === l) return t.sizset; + if (typeof a == "string" && a.indexOf(f) === 0) { + if (t.sizset) return t + } else { + t[d] = l; + if (e(t, r, u)) return t.sizset = !0, t; + t.sizset = !1 + } + } + } else while (t = t[i]) if (s || t.nodeType === 1) if (e(t, r, u)) return t + } + } + + function ft(e) { + return e.length > 1 ? + function(t, n, r) { + var i = e.length; + while (i--) if (!e[i](t, n, r)) return !1; + return !0 + } : e[0] + } + + function lt(e, t, n, r, i) { + var s, o = [], + u = 0, + a = e.length, + f = t != null; + for (; u < a; u++) if (s = e[u]) if (!n || n(s, r, i)) o.push(s), f && t.push(u); + return o + } + + function ct(e, t, n, r, i, s) { + return r && !r[d] && (r = ct(r)), i && !i[d] && (i = ct(i, s)), N(function(s, o, u, a) { + var f, l, c, h = [], + p = [], + d = o.length, + v = s || dt(t || "*", u.nodeType ? [u] : u, []), + m = e && (s || !t) ? lt(v, h, e, u, a) : v, + g = n ? i || (s ? e : d || r) ? [] : o : m; + n && n(m, g, u, a); + if (r) { + f = lt(g, p), r(f, [], u, a), l = f.length; + while (l--) if (c = f[l]) g[p[l]] = !(m[p[l]] = c) + } + if (s) { + if (i || e) { + if (i) { + f = [], l = g.length; + while (l--)(c = g[l]) && f.push(m[l] = c); + i(null, g = [], f, a) + } + l = g.length; + while (l--)(c = g[l]) && (f = i ? T.call(s, c) : h[l]) > -1 && (s[f] = !(o[f] = c)) + } + } else g = lt(g === o ? g.splice(d, g.length) : g), i ? i(null, o, g, a) : S.apply(o, g) + }) + } + + function ht(e) { + var t, n, r, s = e.length, + o = i.relative[e[0].type], + u = o || i.relative[" "], + a = o ? 1 : 0, + f = at(function(e) { + return e === t + }, u, !0), + l = at(function(e) { + return T.call(t, e) > -1 + }, u, !0), + h = [function(e, n, r) { + return !o && (r || n !== c) || ((t = n).nodeType ? f(e, n, r) : l(e, n, r)) + }]; + for (; a < s; a++) if (n = i.relative[e[a].type]) h = [at(ft(h), n)]; + else { + n = i.filter[e[a].type].apply(null, e[a].matches); + if (n[d]) { + r = ++a; + for (; r < s; r++) if (i.relative[e[r].type]) break; + return ct(a > 1 && ft(h), a > 1 && e.slice(0, a - 1).join("").replace(j, "$1"), n, a < r && ht(e.slice(a, r)), r < s && ht(e = e.slice(r)), r < s && e.join("")) + } + h.push(n) + } + return ft(h) + } + + function pt(e, t) { + var r = t.length > 0, + s = e.length > 0, + o = function(u, a, f, l, h) { + var p, d, v, m = [], + y = 0, + w = "0", + x = u && [], + T = h != null, + N = c, + C = u || s && i.find.TAG("*", h && a.parentNode || a), + k = b += N == null ? 1 : Math.E; + T && (c = a !== g && a, n = o.el); + for (; + (p = C[w]) != null; w++) { + if (s && p) { + for (d = 0; v = e[d]; d++) if (v(p, a, f)) { + l.push(p); + break + } + T && (b = k, n = ++o.el) + } + r && ((p = !v && p) && y--, u && x.push(p)) + } + y += w; + if (r && w !== y) { + for (d = 0; v = t[d]; d++) v(x, m, a, f); + if (u) { + if (y > 0) while (w--)!x[w] && !m[w] && (m[w] = E.call(l)); + m = lt(m) + } + S.apply(l, m), T && !u && m.length > 0 && y + t.length > 1 && nt.uniqueSort(l) + } + return T && (b = k, c = N), x + }; + return o.el = 0, r ? N(o) : o + } + + function dt(e, t, n) { + var r = 0, + i = t.length; + for (; r < i; r++) nt(e, t[r], n); + return n + } + + function vt(e, t, n, r, s) { + var o, u, f, l, c, h = ut(e), + p = h.length; + if (!r && h.length === 1) { + u = h[0] = h[0].slice(0); + if (u.length > 2 && (f = u[0]).type === "ID" && t.nodeType === 9 && !s && i.relative[u[1].type]) { + t = i.find.ID(f.matches[0].replace($, ""), t, s)[0]; + if (!t) return n; + e = e.slice(u.shift().length) + } + for (o = J.POS.test(e) ? -1 : u.length - 1; o >= 0; o--) { + f = u[o]; + if (i.relative[l = f.type]) break; + if (c = i.find[l]) if (r = c(f.matches[0].replace($, ""), z.test(u[0].type) && t.parentNode || t, s)) { + u.splice(o, 1), e = r.length && u.join(""); + if (!e) return S.apply(n, x.call(r, 0)), n; + break + } + } + } + return a(e, h)(r, t, s, n, z.test(e)), n + } + + function mt() {} + var n, r, i, s, o, u, a, f, l, c, h = !0, + p = "undefined", + d = ("sizcache" + Math.random()).replace(".", ""), + m = String, + g = e.document, + y = g.documentElement, + b = 0, + w = 0, + E = [].pop, + S = [].push, + x = [].slice, + T = [].indexOf || + function(e) { + var t = 0, + n = this.length; + for (; t < n; t++) if (this[t] === e) return t; + return -1 + }, + N = function(e, t) { + return e[d] = t == null || t, e + }, + C = function() { + var e = {}, + t = []; + return N(function(n, r) { + return t.push(n) > i.cacheLength && delete e[t.shift()], e[n + " "] = r + }, e) + }, + k = C(), + L = C(), + A = C(), + O = "[\\x20\\t\\r\\n\\f]", + M = "(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+", + _ = M.replace("w", "w#"), + D = "([*^$|!~]?=)", + P = "\\[" + O + "*(" + M + ")" + O + "*(?:" + D + O + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + _ + ")|)|)" + O + "*\\]", + H = ":(" + M + ")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:" + P + ")|[^:]|\\\\.)*|.*))\\)|)", + B = ":(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + O + "*((?:-\\d)?\\d*)" + O + "*\\)|)(?=[^-]|$)", + j = new RegExp("^" + O + "+|((?:^|[^\\\\])(?:\\\\.)*)" + O + "+$", "g"), + F = new RegExp("^" + O + "*," + O + "*"), + I = new RegExp("^" + O + "*([\\x20\\t\\r\\n\\f>+~])" + O + "*"), + q = new RegExp(H), + R = /^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/, + U = /^:not/, + z = /[\x20\t\r\n\f]*[+~]/, + W = /:not\($/, + X = /h\d/i, + V = /input|select|textarea|button/i, + $ = /\\(?!\\)/g, + J = { + ID: new RegExp("^#(" + M + ")"), + CLASS: new RegExp("^\\.(" + M + ")"), + NAME: new RegExp("^\\[name=['\"]?(" + M + ")['\"]?\\]"), + TAG: new RegExp("^(" + M.replace("w", "w*") + ")"), + ATTR: new RegExp("^" + P), + PSEUDO: new RegExp("^" + H), + POS: new RegExp(B, "i"), + CHILD: new RegExp("^:(only|nth|first|last)-child(?:\\(" + O + "*(even|odd|(([+-]|)(\\d*)n|)" + O + "*(?:([+-]|)" + O + "*(\\d+)|))" + O + "*\\)|)", "i"), + needsContext: new RegExp("^" + O + "*[>+~]|" + B, "i") + }, + K = function(e) { + var t = g.createElement("div"); + try { + return e(t) + } catch (n) { + return !1 + } finally { + t = null + } + }, + Q = K(function(e) { + return e.appendChild(g.createComment("")), !e.getElementsByTagName("*").length + }), + G = K(function(e) { + return e.innerHTML = "", e.firstChild && typeof e.firstChild.getAttribute !== p && e.firstChild.getAttribute("href") === "#" + }), + Y = K(function(e) { + e.innerHTML = ""; + var t = typeof e.lastChild.getAttribute("multiple"); + return t !== "boolean" && t !== "string" + }), + Z = K(function(e) { + return e.innerHTML = "", !e.getElementsByClassName || !e.getElementsByClassName("e").length ? !1 : (e.lastChild.className = "e", e.getElementsByClassName("e").length === 2) + }), + et = K(function(e) { + e.id = d + 0, e.innerHTML = "
", y.insertBefore(e, y.firstChild); + var t = g.getElementsByName && g.getElementsByName(d).length === 2 + g.getElementsByName(d + 0).length; + return r = !g.getElementById(d), y.removeChild(e), t + }); + try { + x.call(y.childNodes, 0)[0].nodeType + } catch (tt) { + x = function(e) { + var t, n = []; + for (; t = this[e]; e++) n.push(t); + return n + } + } + nt.matches = function(e, t) { + return nt(e, null, null, t) + }, nt.matchesSelector = function(e, t) { + return nt(t, null, null, [e]).length > 0 + }, s = nt.getText = function(e) { + var t, n = "", + r = 0, + i = e.nodeType; + if (i) { + if (i === 1 || i === 9 || i === 11) { + if (typeof e.textContent == "string") return e.textContent; + for (e = e.firstChild; e; e = e.nextSibling) n += s(e) + } else if (i === 3 || i === 4) return e.nodeValue + } else for (; t = e[r]; r++) n += s(t); + return n + }, o = nt.isXML = function(e) { + var t = e && (e.ownerDocument || e).documentElement; + return t ? t.nodeName !== "HTML" : !1 + }, u = nt.contains = y.contains ? + function(e, t) { + var n = e.nodeType === 9 ? e.documentElement : e, + r = t && t.parentNode; + return e === r || !! (r && r.nodeType === 1 && n.contains && n.contains(r)) + } : y.compareDocumentPosition ? + function(e, t) { + return t && !! (e.compareDocumentPosition(t) & 16) + } : function(e, t) { + while (t = t.parentNode) if (t === e) return !0; + return !1 + }, nt.attr = function(e, t) { + var n, r = o(e); + return r || (t = t.toLowerCase()), (n = i.attrHandle[t]) ? n(e) : r || Y ? e.getAttribute(t) : (n = e.getAttributeNode(t), n ? typeof e[t] == "boolean" ? e[t] ? t : null : n.specified ? n.value : null : null) + }, i = nt.selectors = { + cacheLength: 50, + createPseudo: N, + match: J, + attrHandle: G ? {} : { + href: function(e) { + return e.getAttribute("href", 2) + }, + type: function(e) { + return e.getAttribute("type") + } + }, + find: { + ID: r ? + function(e, t, n) { + if (typeof t.getElementById !== p && !n) { + var r = t.getElementById(e); + return r && r.parentNode ? [r] : [] + } + } : function(e, n, r) { + if (typeof n.getElementById !== p && !r) { + var i = n.getElementById(e); + return i ? i.id === e || typeof i.getAttributeNode !== p && i.getAttributeNode("id").value === e ? [i] : t : [] + } + }, + TAG: Q ? + function(e, t) { + if (typeof t.getElementsByTagName !== p) return t.getElementsByTagName(e) + } : function(e, t) { + var n = t.getElementsByTagName(e); + if (e === "*") { + var r, i = [], + s = 0; + for (; r = n[s]; s++) r.nodeType === 1 && i.push(r); + return i + } + return n + }, + NAME: et && + function(e, t) { + if (typeof t.getElementsByName !== p) return t.getElementsByName(name) + }, + CLASS: Z && + function(e, t, n) { + if (typeof t.getElementsByClassName !== p && !n) return t.getElementsByClassName(e) + } + }, + relative: { + ">": { + dir: "parentNode", + first: !0 + }, + " ": { + dir: "parentNode" + }, + "+": { + dir: "previousSibling", + first: !0 + }, + "~": { + dir: "previousSibling" + } + }, + preFilter: { + ATTR: function(e) { + return e[1] = e[1].replace($, ""), e[3] = (e[4] || e[5] || "").replace($, ""), e[2] === "~=" && (e[3] = " " + e[3] + " "), e.slice(0, 4) + }, + CHILD: function(e) { + return e[1] = e[1].toLowerCase(), e[1] === "nth" ? (e[2] || nt.error(e[0]), e[3] = +(e[3] ? e[4] + (e[5] || 1) : 2 * (e[2] === "even" || e[2] === "odd")), e[4] = +(e[6] + e[7] || e[2] === "odd")) : e[2] && nt.error(e[0]), e + }, + PSEUDO: function(e) { + var t, n; + if (J.CHILD.test(e[0])) return null; + if (e[3]) e[2] = e[3]; + else if (t = e[4]) q.test(t) && (n = ut(t, !0)) && (n = t.indexOf(")", t.length - n) - t.length) && (t = t.slice(0, n), e[0] = e[0].slice(0, n)), e[2] = t; + return e.slice(0, 3) + } + }, + filter: { + ID: r ? + function(e) { + return e = e.replace($, ""), function(t) { + return t.getAttribute("id") === e + } + } : function(e) { + return e = e.replace($, ""), function(t) { + var n = typeof t.getAttributeNode !== p && t.getAttributeNode("id"); + return n && n.value === e + } + }, + TAG: function(e) { + return e === "*" ? + function() { + return !0 + } : (e = e.replace($, "").toLowerCase(), function(t) { + return t.nodeName && t.nodeName.toLowerCase() === e + }) + }, + CLASS: function(e) { + var t = k[d][e + " "]; + return t || (t = new RegExp("(^|" + O + ")" + e + "(" + O + "|$)")) && k(e, function(e) { + return t.test(e.className || typeof e.getAttribute !== p && e.getAttribute("class") || "") + }) + }, + ATTR: function(e, t, n) { + return function(r, i) { + var s = nt.attr(r, e); + return s == null ? t === "!=" : t ? (s += "", t === "=" ? s === n : t === "!=" ? s !== n : t === "^=" ? n && s.indexOf(n) === 0 : t === "*=" ? n && s.indexOf(n) > -1 : t === "$=" ? n && s.substr(s.length - n.length) === n : t === "~=" ? (" " + s + " ").indexOf(n) > -1 : t === "|=" ? s === n || s.substr(0, n.length + 1) === n + "-" : !1) : !0 + } + }, + CHILD: function(e, t, n, r) { + return e === "nth" ? + function(e) { + var t, i, s = e.parentNode; + if (n === 1 && r === 0) return !0; + if (s) { + i = 0; + for (t = s.firstChild; t; t = t.nextSibling) if (t.nodeType === 1) { + i++; + if (e === t) break + } + } + return i -= r, i === n || i % n === 0 && i / n >= 0 + } : function(t) { + var n = t; + switch (e) { + case "only": + case "first": + while (n = n.previousSibling) if (n.nodeType === 1) return !1; + if (e === "first") return !0; + n = t; + case "last": + while (n = n.nextSibling) if (n.nodeType === 1) return !1; + return !0 + } + } + }, + PSEUDO: function(e, t) { + var n, r = i.pseudos[e] || i.setFilters[e.toLowerCase()] || nt.error("unsupported pseudo: " + e); + return r[d] ? r(t) : r.length > 1 ? (n = [e, e, "", t], i.setFilters.hasOwnProperty(e.toLowerCase()) ? N(function(e, n) { + var i, s = r(e, t), + o = s.length; + while (o--) i = T.call(e, s[o]), e[i] = !(n[i] = s[o]) + }) : function(e) { + return r(e, 0, n) + }) : r + } + }, + pseudos: { + not: N(function(e) { + var t = [], + n = [], + r = a(e.replace(j, "$1")); + return r[d] ? N(function(e, t, n, i) { + var s, o = r(e, null, i, []), + u = e.length; + while (u--) if (s = o[u]) e[u] = !(t[u] = s) + }) : function(e, i, s) { + return t[0] = e, r(t, null, s, n), !n.pop() + } + }), + has: N(function(e) { + return function(t) { + return nt(e, t).length > 0 + } + }), + contains: N(function(e) { + return function(t) { + return (t.textContent || t.innerText || s(t)).indexOf(e) > -1 + } + }), + enabled: function(e) { + return e.disabled === !1 + }, + disabled: function(e) { + return e.disabled === !0 + }, + checked: function(e) { + var t = e.nodeName.toLowerCase(); + return t === "input" && !! e.checked || t === "option" && !! e.selected + }, + selected: function(e) { + return e.parentNode && e.parentNode.selectedIndex, e.selected === !0 + }, + parent: function(e) { + return !i.pseudos.empty(e) + }, + empty: function(e) { + var t; + e = e.firstChild; + while (e) { + if (e.nodeName > "@" || (t = e.nodeType) === 3 || t === 4) return !1; + e = e.nextSibling + } + return !0 + }, + header: function(e) { + return X.test(e.nodeName) + }, + text: function(e) { + var t, n; + return e.nodeName.toLowerCase() === "input" && (t = e.type) === "text" && ((n = e.getAttribute("type")) == null || n.toLowerCase() === t) + }, + radio: rt("radio"), + checkbox: rt("checkbox"), + file: rt("file"), + password: rt("password"), + image: rt("image"), + submit: it("submit"), + reset: it("reset"), + button: function(e) { + var t = e.nodeName.toLowerCase(); + return t === "input" && e.type === "button" || t === "button" + }, + input: function(e) { + return V.test(e.nodeName) + }, + focus: function(e) { + var t = e.ownerDocument; + return e === t.activeElement && (!t.hasFocus || t.hasFocus()) && !! (e.type || e.href || ~e.tabIndex) + }, + active: function(e) { + return e === e.ownerDocument.activeElement + }, + first: st(function() { + return [0] + }), + last: st(function(e, t) { + return [t - 1] + }), + eq: st(function(e, t, n) { + return [n < 0 ? n + t : n] + }), + even: st(function(e, t) { + for (var n = 0; n < t; n += 2) e.push(n); + return e + }), + odd: st(function(e, t) { + for (var n = 1; n < t; n += 2) e.push(n); + return e + }), + lt: st(function(e, t, n) { + for (var r = n < 0 ? n + t : n; --r >= 0;) e.push(r); + return e + }), + gt: st(function(e, t, n) { + for (var r = n < 0 ? n + t : n; ++r < t;) e.push(r); + return e + }) + } + }, f = y.compareDocumentPosition ? + function(e, t) { + return e === t ? (l = !0, 0) : (!e.compareDocumentPosition || !t.compareDocumentPosition ? e.compareDocumentPosition : e.compareDocumentPosition(t) & 4) ? -1 : 1 + } : function(e, t) { + if (e === t) return l = !0, 0; + if (e.sourceIndex && t.sourceIndex) return e.sourceIndex - t.sourceIndex; + var n, r, i = [], + s = [], + o = e.parentNode, + u = t.parentNode, + a = o; + if (o === u) return ot(e, t); + if (!o) return -1; + if (!u) return 1; + while (a) i.unshift(a), a = a.parentNode; + a = u; + while (a) s.unshift(a), a = a.parentNode; + n = i.length, r = s.length; + for (var f = 0; f < n && f < r; f++) if (i[f] !== s[f]) return ot(i[f], s[f]); + return f === n ? ot(e, s[f], -1) : ot(i[f], t, 1) + }, [0, 0].sort(f), h = !l, nt.uniqueSort = function(e) { + var t, n = [], + r = 1, + i = 0; + l = h, e.sort(f); + if (l) { + for (; t = e[r]; r++) t === e[r - 1] && (i = n.push(r)); + while (i--) e.splice(n[i], 1) + } + return e + }, nt.error = function(e) { + throw new Error("Syntax error, unrecognized expression: " + e) + }, a = nt.compile = function(e, t) { + var n, r = [], + i = [], + s = A[d][e + " "]; + if (!s) { + t || (t = ut(e)), n = t.length; + while (n--) s = ht(t[n]), s[d] ? r.push(s) : i.push(s); + s = A(e, pt(i, r)) + } + return s + }, g.querySelectorAll && + function() { + var e, t = vt, + n = /'|\\/g, + r = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, + i = [":focus"], + s = [":active"], + u = y.matchesSelector || y.mozMatchesSelector || y.webkitMatchesSelector || y.oMatchesSelector || y.msMatchesSelector; + K(function(e) { + e.innerHTML = "", e.querySelectorAll("[selected]").length || i.push("\\[" + O + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)"), e.querySelectorAll(":checked").length || i.push(":checked") + }), K(function(e) { + e.innerHTML = "

", e.querySelectorAll("[test^='']").length && i.push("[*^$]=" + O + "*(?:\"\"|'')"), e.innerHTML = "", e.querySelectorAll(":enabled").length || i.push(":enabled", ":disabled") + }), i = new RegExp(i.join("|")), vt = function(e, r, s, o, u) { + if (!o && !u && !i.test(e)) { + var a, f, l = !0, + c = d, + h = r, + p = r.nodeType === 9 && e; + if (r.nodeType === 1 && r.nodeName.toLowerCase() !== "object") { + a = ut(e), (l = r.getAttribute("id")) ? c = l.replace(n, "\\$&") : r.setAttribute("id", c), c = "[id='" + c + "'] ", f = a.length; + while (f--) a[f] = c + a[f].join(""); + h = z.test(e) && r.parentNode || r, p = a.join(",") + } + if (p) try { + return S.apply(s, x.call(h.querySelectorAll(p), 0)), s + } catch (v) {} finally { + l || r.removeAttribute("id") + } + } + return t(e, r, s, o, u) + }, u && (K(function(t) { + e = u.call(t, "div"); + try { + u.call(t, "[test!='']:sizzle"), s.push("!=", H) + } catch (n) {} + }), s = new RegExp(s.join("|")), nt.matchesSelector = function(t, n) { + n = n.replace(r, "='$1']"); + if (!o(t) && !s.test(n) && !i.test(n)) try { + var a = u.call(t, n); + if (a || e || t.document && t.document.nodeType !== 11) return a + } catch (f) {} + return nt(n, null, null, [t]).length > 0 + }) + }(), i.pseudos.nth = i.pseudos.eq, i.filters = mt.prototype = i.pseudos, i.setFilters = new mt, nt.attr = v.attr, v.find = nt, v.expr = nt.selectors, v.expr[":"] = v.expr.pseudos, v.unique = nt.uniqueSort, v.text = nt.getText, v.isXMLDoc = nt.isXML, v.contains = nt.contains + }(e); + var nt = /Until$/, + rt = /^(?:parents|prev(?:Until|All))/, + it = /^.[^:#\[\.,]*$/, + st = v.expr.match.needsContext, + ot = { + children: !0, + contents: !0, + next: !0, + prev: !0 + }; + v.fn.extend({ + find: function(e) { + var t, n, r, i, s, o, u = this; + if (typeof e != "string") return v(e).filter(function() { + for (t = 0, n = u.length; t < n; t++) if (v.contains(u[t], this)) return !0 + }); + o = this.pushStack("", "find", e); + for (t = 0, n = this.length; t < n; t++) { + r = o.length, v.find(e, this[t], o); + if (t > 0) for (i = r; i < o.length; i++) for (s = 0; s < r; s++) if (o[s] === o[i]) { + o.splice(i--, 1); + break + } + } + return o + }, + has: function(e) { + var t, n = v(e, this), + r = n.length; + return this.filter(function() { + for (t = 0; t < r; t++) if (v.contains(this, n[t])) return !0 + }) + }, + not: function(e) { + return this.pushStack(ft(this, e, !1), "not", e) + }, + filter: function(e) { + return this.pushStack(ft(this, e, !0), "filter", e) + }, + is: function(e) { + return !!e && (typeof e == "string" ? st.test(e) ? v(e, this.context).index(this[0]) >= 0 : v.filter(e, this).length > 0 : this.filter(e).length > 0) + }, + closest: function(e, t) { + var n, r = 0, + i = this.length, + s = [], + o = st.test(e) || typeof e != "string" ? v(e, t || this.context) : 0; + for (; r < i; r++) { + n = this[r]; + while (n && n.ownerDocument && n !== t && n.nodeType !== 11) { + if (o ? o.index(n) > -1 : v.find.matchesSelector(n, e)) { + s.push(n); + break + } + n = n.parentNode + } + } + return s = s.length > 1 ? v.unique(s) : s, this.pushStack(s, "closest", e) + }, + index: function(e) { + return e ? typeof e == "string" ? v.inArray(this[0], v(e)) : v.inArray(e.jquery ? e[0] : e, this) : this[0] && this[0].parentNode ? this.prevAll().length : -1 + }, + add: function(e, t) { + var n = typeof e == "string" ? v(e, t) : v.makeArray(e && e.nodeType ? [e] : e), + r = v.merge(this.get(), n); + return this.pushStack(ut(n[0]) || ut(r[0]) ? r : v.unique(r)) + }, + addBack: function(e) { + return this.add(e == null ? this.prevObject : this.prevObject.filter(e)) + } + }), v.fn.andSelf = v.fn.addBack, v.each({ + parent: function(e) { + var t = e.parentNode; + return t && t.nodeType !== 11 ? t : null + }, + parents: function(e) { + return v.dir(e, "parentNode") + }, + parentsUntil: function(e, t, n) { + return v.dir(e, "parentNode", n) + }, + next: function(e) { + return at(e, "nextSibling") + }, + prev: function(e) { + return at(e, "previousSibling") + }, + nextAll: function(e) { + return v.dir(e, "nextSibling") + }, + prevAll: function(e) { + return v.dir(e, "previousSibling") + }, + nextUntil: function(e, t, n) { + return v.dir(e, "nextSibling", n) + }, + prevUntil: function(e, t, n) { + return v.dir(e, "previousSibling", n) + }, + siblings: function(e) { + return v.sibling((e.parentNode || {}).firstChild, e) + }, + children: function(e) { + return v.sibling(e.firstChild) + }, + contents: function(e) { + return v.nodeName(e, "iframe") ? e.contentDocument || e.contentWindow.document : v.merge([], e.childNodes) + } + }, function(e, t) { + v.fn[e] = function(n, r) { + var i = v.map(this, t, n); + return nt.test(e) || (r = n), r && typeof r == "string" && (i = v.filter(r, i)), i = this.length > 1 && !ot[e] ? v.unique(i) : i, this.length > 1 && rt.test(e) && (i = i.reverse()), this.pushStack(i, e, l.call(arguments).join(",")) + } + }), v.extend({ + filter: function(e, t, n) { + return n && (e = ":not(" + e + ")"), t.length === 1 ? v.find.matchesSelector(t[0], e) ? [t[0]] : [] : v.find.matches(e, t) + }, + dir: function(e, n, r) { + var i = [], + s = e[n]; + while (s && s.nodeType !== 9 && (r === t || s.nodeType !== 1 || !v(s).is(r))) s.nodeType === 1 && i.push(s), s = s[n]; + return i + }, + sibling: function(e, t) { + var n = []; + for (; e; e = e.nextSibling) e.nodeType === 1 && e !== t && n.push(e); + return n + } + }); + var ct = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", + ht = / jQuery\d+="(?:null|\d+)"/g, + pt = /^\s+/, + dt = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, + vt = /<([\w:]+)/, + mt = /]", "i"), + Et = /^(?:checkbox|radio)$/, + St = /checked\s*(?:[^=]|=\s*.checked.)/i, + xt = /\/(java|ecma)script/i, + Tt = /^\s*\s*$/g, + Nt = { + option: [1, ""], + legend: [1, "
", "
"], + thead: [1, "", "
"], + tr: [2, "", "
"], + td: [3, "", "
"], + col: [2, "", "
"], + area: [1, "", ""], + _default: [0, "", ""] + }, + Ct = lt(i), + kt = Ct.appendChild(i.createElement("div")); + Nt.optgroup = Nt.option, Nt.tbody = Nt.tfoot = Nt.colgroup = Nt.caption = Nt.thead, Nt.th = Nt.td, v.support.htmlSerialize || (Nt._default = [1, "X
", "
"]), v.fn.extend({ + text: function(e) { + return v.access(this, function(e) { + return e === t ? v.text(this) : this.empty().append((this[0] && this[0].ownerDocument || i).createTextNode(e)) + }, null, e, arguments.length) + }, + wrapAll: function(e) { + if (v.isFunction(e)) return this.each(function(t) { + v(this).wrapAll(e.call(this, t)) + }); + if (this[0]) { + var t = v(e, this[0].ownerDocument).eq(0).clone(!0); + this[0].parentNode && t.insertBefore(this[0]), t.map(function() { + var e = this; + while (e.firstChild && e.firstChild.nodeType === 1) e = e.firstChild; + return e + }).append(this) + } + return this + }, + wrapInner: function(e) { + return v.isFunction(e) ? this.each(function(t) { + v(this).wrapInner(e.call(this, t)) + }) : this.each(function() { + var t = v(this), + n = t.contents(); + n.length ? n.wrapAll(e) : t.append(e) + }) + }, + wrap: function(e) { + var t = v.isFunction(e); + return this.each(function(n) { + v(this).wrapAll(t ? e.call(this, n) : e) + }) + }, + unwrap: function() { + return this.parent().each(function() { + v.nodeName(this, "body") || v(this).replaceWith(this.childNodes) + }).end() + }, + append: function() { + return this.domManip(arguments, !0, function(e) { + (this.nodeType === 1 || this.nodeType === 11) && this.appendChild(e) + }) + }, + prepend: function() { + return this.domManip(arguments, !0, function(e) { + (this.nodeType === 1 || this.nodeType === 11) && this.insertBefore(e, this.firstChild) + }) + }, + before: function() { + if (!ut(this[0])) return this.domManip(arguments, !1, function(e) { + this.parentNode.insertBefore(e, this) + }); + if (arguments.length) { + var e = v.clean(arguments); + return this.pushStack(v.merge(e, this), "before", this.selector) + } + }, + after: function() { + if (!ut(this[0])) return this.domManip(arguments, !1, function(e) { + this.parentNode.insertBefore(e, this.nextSibling) + }); + if (arguments.length) { + var e = v.clean(arguments); + return this.pushStack(v.merge(this, e), "after", this.selector) + } + }, + remove: function(e, t) { + var n, r = 0; + for (; + (n = this[r]) != null; r++) if (!e || v.filter(e, [n]).length)!t && n.nodeType === 1 && (v.cleanData(n.getElementsByTagName("*")), v.cleanData([n])), n.parentNode && n.parentNode.removeChild(n); + return this + }, + empty: function() { + var e, t = 0; + for (; + (e = this[t]) != null; t++) { + e.nodeType === 1 && v.cleanData(e.getElementsByTagName("*")); + while (e.firstChild) e.removeChild(e.firstChild) + } + return this + }, + clone: function(e, t) { + return e = e == null ? !1 : e, t = t == null ? e : t, this.map(function() { + return v.clone(this, e, t) + }) + }, + html: function(e) { + return v.access(this, function(e) { + var n = this[0] || {}, + r = 0, + i = this.length; + if (e === t) return n.nodeType === 1 ? n.innerHTML.replace(ht, "") : t; + if (typeof e == "string" && !yt.test(e) && (v.support.htmlSerialize || !wt.test(e)) && (v.support.leadingWhitespace || !pt.test(e)) && !Nt[(vt.exec(e) || ["", ""])[1].toLowerCase()]) { + e = e.replace(dt, "<$1>"); + try { + for (; r < i; r++) n = this[r] || {}, n.nodeType === 1 && (v.cleanData(n.getElementsByTagName("*")), n.innerHTML = e); + n = 0 + } catch (s) {} + } + n && this.empty().append(e) + }, null, e, arguments.length) + }, + replaceWith: function(e) { + return ut(this[0]) ? this.length ? this.pushStack(v(v.isFunction(e) ? e() : e), "replaceWith", e) : this : v.isFunction(e) ? this.each(function(t) { + var n = v(this), + r = n.html(); + n.replaceWith(e.call(this, t, r)) + }) : (typeof e != "string" && (e = v(e).detach()), this.each(function() { + var t = this.nextSibling, + n = this.parentNode; + v(this).remove(), t ? v(t).before(e) : v(n).append(e) + })) + }, + detach: function(e) { + return this.remove(e, !0) + }, + domManip: function(e, n, r) { + e = [].concat.apply([], e); + var i, s, o, u, a = 0, + f = e[0], + l = [], + c = this.length; + if (!v.support.checkClone && c > 1 && typeof f == "string" && St.test(f)) return this.each(function() { + v(this).domManip(e, n, r) + }); + if (v.isFunction(f)) return this.each(function(i) { + var s = v(this); + e[0] = f.call(this, i, n ? s.html() : t), s.domManip(e, n, r) + }); + if (this[0]) { + i = v.buildFragment(e, this, l), o = i.fragment, s = o.firstChild, o.childNodes.length === 1 && (o = s); + if (s) { + n = n && v.nodeName(s, "tr"); + for (u = i.cacheable || c - 1; a < c; a++) r.call(n && v.nodeName(this[a], "table") ? Lt(this[a], "tbody") : this[a], a === u ? o : v.clone(o, !0, !0)) + } + o = s = null, l.length && v.each(l, function(e, t) { + t.src ? v.ajax ? v.ajax({ + url: t.src, + type: "GET", + dataType: "script", + async: !1, + global: !1, + "throws": !0 + }) : v.error("no ajax") : v.globalEval((t.text || t.textContent || t.innerHTML || "").replace(Tt, "")), t.parentNode && t.parentNode.removeChild(t) + }) + } + return this + } + }), v.buildFragment = function(e, n, r) { + var s, o, u, a = e[0]; + return n = n || i, n = !n.nodeType && n[0] || n, n = n.ownerDocument || n, e.length === 1 && typeof a == "string" && a.length < 512 && n === i && a.charAt(0) === "<" && !bt.test(a) && (v.support.checkClone || !St.test(a)) && (v.support.html5Clone || !wt.test(a)) && (o = !0, s = v.fragments[a], u = s !== t), s || (s = n.createDocumentFragment(), v.clean(e, n, s, r), o && (v.fragments[a] = u && s)), { + fragment: s, + cacheable: o + } + }, v.fragments = {}, v.each({ + appendTo: "append", + prependTo: "prepend", + insertBefore: "before", + insertAfter: "after", + replaceAll: "replaceWith" + }, function(e, t) { + v.fn[e] = function(n) { + var r, i = 0, + s = [], + o = v(n), + u = o.length, + a = this.length === 1 && this[0].parentNode; + if ((a == null || a && a.nodeType === 11 && a.childNodes.length === 1) && u === 1) return o[t](this[0]), this; + for (; i < u; i++) r = (i > 0 ? this.clone(!0) : this).get(), v(o[i])[t](r), s = s.concat(r); + return this.pushStack(s, e, o.selector) + } + }), v.extend({ + clone: function(e, t, n) { + var r, i, s, o; + v.support.html5Clone || v.isXMLDoc(e) || !wt.test("<" + e.nodeName + ">") ? o = e.cloneNode(!0) : (kt.innerHTML = e.outerHTML, kt.removeChild(o = kt.firstChild)); + if ((!v.support.noCloneEvent || !v.support.noCloneChecked) && (e.nodeType === 1 || e.nodeType === 11) && !v.isXMLDoc(e)) { + Ot(e, o), r = Mt(e), i = Mt(o); + for (s = 0; r[s]; ++s) i[s] && Ot(r[s], i[s]) + } + if (t) { + At(e, o); + if (n) { + r = Mt(e), i = Mt(o); + for (s = 0; r[s]; ++s) At(r[s], i[s]) + } + } + return r = i = null, o + }, + clean: function(e, t, n, r) { + var s, o, u, a, f, l, c, h, p, d, m, g, y = t === i && Ct, + b = []; + if (!t || typeof t.createDocumentFragment == "undefined") t = i; + for (s = 0; + (u = e[s]) != null; s++) { + typeof u == "number" && (u += ""); + if (!u) continue; + if (typeof u == "string") if (!gt.test(u)) u = t.createTextNode(u); + else { + y = y || lt(t), c = t.createElement("div"), y.appendChild(c), u = u.replace(dt, "<$1>"), a = (vt.exec(u) || ["", ""])[1].toLowerCase(), f = Nt[a] || Nt._default, l = f[0], c.innerHTML = f[1] + u + f[2]; + while (l--) c = c.lastChild; + if (!v.support.tbody) { + h = mt.test(u), p = a === "table" && !h ? c.firstChild && c.firstChild.childNodes : f[1] === "" && !h ? c.childNodes : []; + for (o = p.length - 1; o >= 0; --o) v.nodeName(p[o], "tbody") && !p[o].childNodes.length && p[o].parentNode.removeChild(p[o]) + }!v.support.leadingWhitespace && pt.test(u) && c.insertBefore(t.createTextNode(pt.exec(u)[0]), c.firstChild), u = c.childNodes, c.parentNode.removeChild(c) + } + u.nodeType ? b.push(u) : v.merge(b, u) + } + c && (u = c = y = null); + if (!v.support.appendChecked) for (s = 0; + (u = b[s]) != null; s++) v.nodeName(u, "input") ? _t(u) : typeof u.getElementsByTagName != "undefined" && v.grep(u.getElementsByTagName("input"), _t); + if (n) { + m = function(e) { + if (!e.type || xt.test(e.type)) return r ? r.push(e.parentNode ? e.parentNode.removeChild(e) : e) : n.appendChild(e) + }; + for (s = 0; + (u = b[s]) != null; s++) if (!v.nodeName(u, "script") || !m(u)) n.appendChild(u), typeof u.getElementsByTagName != "undefined" && (g = v.grep(v.merge([], u.getElementsByTagName("script")), m), b.splice.apply(b, [s + 1, 0].concat(g)), s += g.length) + } + return b + }, + cleanData: function(e, t) { + var n, r, i, s, o = 0, + u = v.expando, + a = v.cache, + f = v.support.deleteExpando, + l = v.event.special; + for (; + (i = e[o]) != null; o++) if (t || v.acceptData(i)) { + r = i[u], n = r && a[r]; + if (n) { + if (n.events) for (s in n.events) l[s] ? v.event.remove(i, s) : v.removeEvent(i, s, n.handle); + a[r] && (delete a[r], f ? delete i[u] : i.removeAttribute ? i.removeAttribute(u) : i[u] = null, v.deletedIds.push(r)) + } + } + } + }), function() { + var e, t; + v.uaMatch = function(e) { + e = e.toLowerCase(); + var t = /(chrome)[ \/]([\w.]+)/.exec(e) || /(webkit)[ \/]([\w.]+)/.exec(e) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e) || /(msie) ([\w.]+)/.exec(e) || e.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(e) || []; + return { + browser: t[1] || "", + version: t[2] || "0" + } + }, e = v.uaMatch(o.userAgent), t = {}, e.browser && (t[e.browser] = !0, t.version = e.version), t.chrome ? t.webkit = !0 : t.webkit && (t.safari = !0), v.browser = t, v.sub = function() { + function e(t, n) { + return new e.fn.init(t, n) + } + v.extend(!0, e, this), e.superclass = this, e.fn = e.prototype = this(), e.fn.constructor = e, e.sub = this.sub, e.fn.init = function(r, i) { + return i && i instanceof v && !(i instanceof e) && (i = e(i)), v.fn.init.call(this, r, i, t) + }, e.fn.init.prototype = e.fn; + var t = e(i); + return e + } + }(); + var Dt, Pt, Ht, Bt = /alpha\([^)]*\)/i, + jt = /opacity=([^)]*)/, + Ft = /^(top|right|bottom|left)$/, + It = /^(none|table(?!-c[ea]).+)/, + qt = /^margin/, + Rt = new RegExp("^(" + m + ")(.*)$", "i"), + Ut = new RegExp("^(" + m + ")(?!px)[a-z%]+$", "i"), + zt = new RegExp("^([-+])=(" + m + ")", "i"), + Wt = { + BODY: "block" + }, + Xt = { + position: "absolute", + visibility: "hidden", + display: "block" + }, + Vt = { + letterSpacing: 0, + fontWeight: 400 + }, + $t = ["Top", "Right", "Bottom", "Left"], + Jt = ["Webkit", "O", "Moz", "ms"], + Kt = v.fn.toggle; + v.fn.extend({ + css: function(e, n) { + return v.access(this, function(e, n, r) { + return r !== t ? v.style(e, n, r) : v.css(e, n) + }, e, n, arguments.length > 1) + }, + show: function() { + return Yt(this, !0) + }, + hide: function() { + return Yt(this) + }, + toggle: function(e, t) { + var n = typeof e == "boolean"; + return v.isFunction(e) && v.isFunction(t) ? Kt.apply(this, arguments) : this.each(function() { + (n ? e : Gt(this)) ? v(this).show() : v(this).hide() + }) + } + }), v.extend({ + cssHooks: { + opacity: { + get: function(e, t) { + if (t) { + var n = Dt(e, "opacity"); + return n === "" ? "1" : n + } + } + } + }, + cssNumber: { + fillOpacity: !0, + fontWeight: !0, + lineHeight: !0, + opacity: !0, + orphans: !0, + widows: !0, + zIndex: !0, + zoom: !0 + }, + cssProps: { + "float": v.support.cssFloat ? "cssFloat" : "styleFloat" + }, + style: function(e, n, r, i) { + if (!e || e.nodeType === 3 || e.nodeType === 8 || !e.style) return; + var s, o, u, a = v.camelCase(n), + f = e.style; + n = v.cssProps[a] || (v.cssProps[a] = Qt(f, a)), u = v.cssHooks[n] || v.cssHooks[a]; + if (r === t) return u && "get" in u && (s = u.get(e, !1, i)) !== t ? s : f[n]; + o = typeof r, o === "string" && (s = zt.exec(r)) && (r = (s[1] + 1) * s[2] + parseFloat(v.css(e, n)), o = "number"); + if (r == null || o === "number" && isNaN(r)) return; + o === "number" && !v.cssNumber[a] && (r += "px"); + if (!u || !("set" in u) || (r = u.set(e, r, i)) !== t) try { + f[n] = r + } catch (l) {} + }, + css: function(e, n, r, i) { + var s, o, u, a = v.camelCase(n); + return n = v.cssProps[a] || (v.cssProps[a] = Qt(e.style, a)), u = v.cssHooks[n] || v.cssHooks[a], u && "get" in u && (s = u.get(e, !0, i)), s === t && (s = Dt(e, n)), s === "normal" && n in Vt && (s = Vt[n]), r || i !== t ? (o = parseFloat(s), r || v.isNumeric(o) ? o || 0 : s) : s + }, + swap: function(e, t, n) { + var r, i, s = {}; + for (i in t) s[i] = e.style[i], e.style[i] = t[i]; + r = n.call(e); + for (i in t) e.style[i] = s[i]; + return r + } + }), e.getComputedStyle ? Dt = function(t, n) { + var r, i, s, o, u = e.getComputedStyle(t, null), + a = t.style; + return u && (r = u.getPropertyValue(n) || u[n], r === "" && !v.contains(t.ownerDocument, t) && (r = v.style(t, n)), Ut.test(r) && qt.test(n) && (i = a.width, s = a.minWidth, o = a.maxWidth, a.minWidth = a.maxWidth = a.width = r, r = u.width, a.width = i, a.minWidth = s, a.maxWidth = o)), r + } : i.documentElement.currentStyle && (Dt = function(e, t) { + var n, r, i = e.currentStyle && e.currentStyle[t], + s = e.style; + return i == null && s && s[t] && (i = s[t]), Ut.test(i) && !Ft.test(t) && (n = s.left, r = e.runtimeStyle && e.runtimeStyle.left, r && (e.runtimeStyle.left = e.currentStyle.left), s.left = t === "fontSize" ? "1em" : i, i = s.pixelLeft + "px", s.left = n, r && (e.runtimeStyle.left = r)), i === "" ? "auto" : i + }), v.each(["height", "width"], function(e, t) { + v.cssHooks[t] = { + get: function(e, n, r) { + if (n) return e.offsetWidth === 0 && It.test(Dt(e, "display")) ? v.swap(e, Xt, function() { + return tn(e, t, r) + }) : tn(e, t, r) + }, + set: function(e, n, r) { + return Zt(e, n, r ? en(e, t, r, v.support.boxSizing && v.css(e, "boxSizing") === "border-box") : 0) + } + } + }), v.support.opacity || (v.cssHooks.opacity = { + get: function(e, t) { + return jt.test((t && e.currentStyle ? e.currentStyle.filter : e.style.filter) || "") ? .01 * parseFloat(RegExp.$1) + "" : t ? "1" : "" + }, + set: function(e, t) { + var n = e.style, + r = e.currentStyle, + i = v.isNumeric(t) ? "alpha(opacity=" + t * 100 + ")" : "", + s = r && r.filter || n.filter || ""; + n.zoom = 1; + if (t >= 1 && v.trim(s.replace(Bt, "")) === "" && n.removeAttribute) { + n.removeAttribute("filter"); + if (r && !r.filter) return + } + n.filter = Bt.test(s) ? s.replace(Bt, i) : s + " " + i + } + }), v(function() { + v.support.reliableMarginRight || (v.cssHooks.marginRight = { + get: function(e, t) { + return v.swap(e, { + display: "inline-block" + }, function() { + if (t) return Dt(e, "marginRight") + }) + } + }), !v.support.pixelPosition && v.fn.position && v.each(["top", "left"], function(e, t) { + v.cssHooks[t] = { + get: function(e, n) { + if (n) { + var r = Dt(e, t); + return Ut.test(r) ? v(e).position()[t] + "px" : r + } + } + } + }) + }), v.expr && v.expr.filters && (v.expr.filters.hidden = function(e) { + return e.offsetWidth === 0 && e.offsetHeight === 0 || !v.support.reliableHiddenOffsets && (e.style && e.style.display || Dt(e, "display")) === "none" + }, v.expr.filters.visible = function(e) { + return !v.expr.filters.hidden(e) + }), v.each({ + margin: "", + padding: "", + border: "Width" + }, function(e, t) { + v.cssHooks[e + t] = { + expand: function(n) { + var r, i = typeof n == "string" ? n.split(" ") : [n], + s = {}; + for (r = 0; r < 4; r++) s[e + $t[r] + t] = i[r] || i[r - 2] || i[0]; + return s + } + }, qt.test(e) || (v.cssHooks[e + t].set = Zt) + }); + var rn = /%20/g, + sn = /\[\]$/, + on = /\r?\n/g, + un = /^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i, + an = /^(?:select|textarea)/i; + v.fn.extend({ + serialize: function() { + return v.param(this.serializeArray()) + }, + serializeArray: function() { + return this.map(function() { + return this.elements ? v.makeArray(this.elements) : this + }).filter(function() { + return this.name && !this.disabled && (this.checked || an.test(this.nodeName) || un.test(this.type)) + }).map(function(e, t) { + var n = v(this).val(); + return n == null ? null : v.isArray(n) ? v.map(n, function(e, n) { + return { + name: t.name, + value: e.replace(on, "\r\n") + } + }) : { + name: t.name, + value: n.replace(on, "\r\n") + } + }).get() + } + }), v.param = function(e, n) { + var r, i = [], + s = function(e, t) { + t = v.isFunction(t) ? t() : t == null ? "" : t, i[i.length] = encodeURIComponent(e) + "=" + encodeURIComponent(t) + }; + n === t && (n = v.ajaxSettings && v.ajaxSettings.traditional); + if (v.isArray(e) || e.jquery && !v.isPlainObject(e)) v.each(e, function() { + s(this.name, this.value) + }); + else for (r in e) fn(r, e[r], n, s); + return i.join("&").replace(rn, "+") + }; + var ln, cn, hn = /#.*$/, + pn = /^(.*?):[ \t]*([^\r\n]*)\r?$/mg, + dn = /^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/, + vn = /^(?:GET|HEAD)$/, + mn = /^\/\//, + gn = /\?/, + yn = /)<[^<]*)*<\/script>/gi, + bn = /([?&])_=[^&]*/, + wn = /^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/, + En = v.fn.load, + Sn = {}, + xn = {}, + Tn = ["*/"] + ["*"]; + try { + cn = s.href + } catch (Nn) { + cn = i.createElement("a"), cn.href = "", cn = cn.href + } + ln = wn.exec(cn.toLowerCase()) || [], v.fn.load = function(e, n, r) { + if (typeof e != "string" && En) return En.apply(this, arguments); + if (!this.length) return this; + var i, s, o, u = this, + a = e.indexOf(" "); + return a >= 0 && (i = e.slice(a, e.length), e = e.slice(0, a)), v.isFunction(n) ? (r = n, n = t) : n && typeof n == "object" && (s = "POST"), v.ajax({ + url: e, + type: s, + dataType: "html", + data: n, + complete: function(e, t) { + r && u.each(r, o || [e.responseText, t, e]) + } + }).done(function(e) { + o = arguments, u.html(i ? v("
").append(e.replace(yn, "")).find(i) : e) + }), this + }, v.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function(e, t) { + v.fn[t] = function(e) { + return this.on(t, e) + } + }), v.each(["get", "post"], function(e, n) { + v[n] = function(e, r, i, s) { + return v.isFunction(r) && (s = s || i, i = r, r = t), v.ajax({ + type: n, + url: e, + data: r, + success: i, + dataType: s + }) + } + }), v.extend({ + getScript: function(e, n) { + return v.get(e, t, n, "script") + }, + getJSON: function(e, t, n) { + return v.get(e, t, n, "json") + }, + ajaxSetup: function(e, t) { + return t ? Ln(e, v.ajaxSettings) : (t = e, e = v.ajaxSettings), Ln(e, t), e + }, + ajaxSettings: { + url: cn, + isLocal: dn.test(ln[1]), + global: !0, + type: "GET", + contentType: "application/x-www-form-urlencoded; charset=UTF-8", + processData: !0, + async: !0, + accepts: { + xml: "application/xml, text/xml", + html: "text/html", + text: "text/plain", + json: "application/json, text/javascript", + "*": Tn + }, + contents: { + xml: /xml/, + html: /html/, + json: /json/ + }, + responseFields: { + xml: "responseXML", + text: "responseText" + }, + converters: { + "* text": e.String, + "text html": !0, + "text json": v.parseJSON, + "text xml": v.parseXML + }, + flatOptions: { + context: !0, + url: !0 + } + }, + ajaxPrefilter: Cn(Sn), + ajaxTransport: Cn(xn), + ajax: function(e, n) { + function T(e, n, s, a) { + var l, y, b, w, S, T = n; + if (E === 2) return; + E = 2, u && clearTimeout(u), o = t, i = a || "", x.readyState = e > 0 ? 4 : 0, s && (w = An(c, x, s)); + if (e >= 200 && e < 300 || e === 304) c.ifModified && (S = x.getResponseHeader("Last-Modified"), S && (v.lastModified[r] = S), S = x.getResponseHeader("Etag"), S && (v.etag[r] = S)), e === 304 ? (T = "notmodified", l = !0) : (l = On(c, w), T = l.state, y = l.data, b = l.error, l = !b); + else { + b = T; + if (!T || e) T = "error", e < 0 && (e = 0) + } + x.status = e, x.statusText = (n || T) + "", l ? d.resolveWith(h, [y, T, x]) : d.rejectWith(h, [x, T, b]), x.statusCode(g), g = t, f && p.trigger("ajax" + (l ? "Success" : "Error"), [x, c, l ? y : b]), m.fireWith(h, [x, T]), f && (p.trigger("ajaxComplete", [x, c]), --v.active || v.event.trigger("ajaxStop")) + } + typeof e == "object" && (n = e, e = t), n = n || {}; + var r, i, s, o, u, a, f, l, c = v.ajaxSetup({}, n), + h = c.context || c, + p = h !== c && (h.nodeType || h instanceof v) ? v(h) : v.event, + d = v.Deferred(), + m = v.Callbacks("once memory"), + g = c.statusCode || {}, + b = {}, + w = {}, + E = 0, + S = "canceled", + x = { + readyState: 0, + setRequestHeader: function(e, t) { + if (!E) { + var n = e.toLowerCase(); + e = w[n] = w[n] || e, b[e] = t + } + return this + }, + getAllResponseHeaders: function() { + return E === 2 ? i : null + }, + getResponseHeader: function(e) { + var n; + if (E === 2) { + if (!s) { + s = {}; + while (n = pn.exec(i)) s[n[1].toLowerCase()] = n[2] + } + n = s[e.toLowerCase()] + } + return n === t ? null : n + }, + overrideMimeType: function(e) { + return E || (c.mimeType = e), this + }, + abort: function(e) { + return e = e || S, o && o.abort(e), T(0, e), this + } + }; + d.promise(x), x.success = x.done, x.error = x.fail, x.complete = m.add, x.statusCode = function(e) { + if (e) { + var t; + if (E < 2) for (t in e) g[t] = [g[t], e[t]]; + else t = e[x.status], x.always(t) + } + return this + }, c.url = ((e || c.url) + "").replace(hn, "").replace(mn, ln[1] + "//"), c.dataTypes = v.trim(c.dataType || "*").toLowerCase().split(y), c.crossDomain == null && (a = wn.exec(c.url.toLowerCase()), c.crossDomain = !(!a || a[1] === ln[1] && a[2] === ln[2] && (a[3] || (a[1] === "http:" ? 80 : 443)) == (ln[3] || (ln[1] === "http:" ? 80 : 443)))), c.data && c.processData && typeof c.data != "string" && (c.data = v.param(c.data, c.traditional)), kn(Sn, c, n, x); + if (E === 2) return x; + f = c.global, c.type = c.type.toUpperCase(), c.hasContent = !vn.test(c.type), f && v.active++ === 0 && v.event.trigger("ajaxStart"); + if (!c.hasContent) { + c.data && (c.url += (gn.test(c.url) ? "&" : "?") + c.data, delete c.data), r = c.url; + if (c.cache === !1) { + var N = v.now(), + C = c.url.replace(bn, "$1_=" + N); + c.url = C + (C === c.url ? (gn.test(c.url) ? "&" : "?") + "_=" + N : "") + } + }(c.data && c.hasContent && c.contentType !== !1 || n.contentType) && x.setRequestHeader("Content-Type", c.contentType), c.ifModified && (r = r || c.url, v.lastModified[r] && x.setRequestHeader("If-Modified-Since", v.lastModified[r]), v.etag[r] && x.setRequestHeader("If-None-Match", v.etag[r])), x.setRequestHeader("Accept", c.dataTypes[0] && c.accepts[c.dataTypes[0]] ? c.accepts[c.dataTypes[0]] + (c.dataTypes[0] !== "*" ? ", " + Tn + "; q=0.01" : "") : c.accepts["*"]); + for (l in c.headers) x.setRequestHeader(l, c.headers[l]); + if (!c.beforeSend || c.beforeSend.call(h, x, c) !== !1 && E !== 2) { + S = "abort"; + for (l in { + success: 1, + error: 1, + complete: 1 + }) x[l](c[l]); + o = kn(xn, c, n, x); + if (!o) T(-1, "No Transport"); + else { + x.readyState = 1, f && p.trigger("ajaxSend", [x, c]), c.async && c.timeout > 0 && (u = setTimeout(function() { + x.abort("timeout") + }, c.timeout)); + try { + E = 1, o.send(b, T) + } catch (k) { + if (!(E < 2)) throw k; + T(-1, k) + } + } + return x + } + return x.abort() + }, + active: 0, + lastModified: {}, + etag: {} + }); + var Mn = [], + _n = /\?/, + Dn = /(=)\?(?=&|$)|\?\?/, + Pn = v.now(); + v.ajaxSetup({ + jsonp: "callback", + jsonpCallback: function() { + var e = Mn.pop() || v.expando + "_" + Pn++; + return this[e] = !0, e + } + }), v.ajaxPrefilter("json jsonp", function(n, r, i) { + var s, o, u, a = n.data, + f = n.url, + l = n.jsonp !== !1, + c = l && Dn.test(f), + h = l && !c && typeof a == "string" && !(n.contentType || "").indexOf("application/x-www-form-urlencoded") && Dn.test(a); + if (n.dataTypes[0] === "jsonp" || c || h) return s = n.jsonpCallback = v.isFunction(n.jsonpCallback) ? n.jsonpCallback() : n.jsonpCallback, o = e[s], c ? n.url = f.replace(Dn, "$1" + s) : h ? n.data = a.replace(Dn, "$1" + s) : l && (n.url += (_n.test(f) ? "&" : "?") + n.jsonp + "=" + s), n.converters["script json"] = function() { + return u || v.error(s + " was not called"), u[0] + }, n.dataTypes[0] = "json", e[s] = function() { + u = arguments + }, i.always(function() { + e[s] = o, n[s] && (n.jsonpCallback = r.jsonpCallback, Mn.push(s)), u && v.isFunction(o) && o(u[0]), u = o = t + }), "script" + }), v.ajaxSetup({ + accepts: { + script: "text/javascript, application/javascript, application/ecmascript, application/x-ecmascript" + }, + contents: { + script: /javascript|ecmascript/ + }, + converters: { + "text script": function(e) { + return v.globalEval(e), e + } + } + }), v.ajaxPrefilter("script", function(e) { + e.cache === t && (e.cache = !1), e.crossDomain && (e.type = "GET", e.global = !1) + }), v.ajaxTransport("script", function(e) { + if (e.crossDomain) { + var n, r = i.head || i.getElementsByTagName("head")[0] || i.documentElement; + return { + send: function(s, o) { + n = i.createElement("script"), n.async = "async", e.scriptCharset && (n.charset = e.scriptCharset), n.src = e.url, n.onload = n.onreadystatechange = function(e, i) { + if (i || !n.readyState || /loaded|complete/.test(n.readyState)) n.onload = n.onreadystatechange = null, r && n.parentNode && r.removeChild(n), n = t, i || o(200, "success") + }, r.insertBefore(n, r.firstChild) + }, + abort: function() { + n && n.onload(0, 1) + } + } + } + }); + var Hn, Bn = e.ActiveXObject ? + function() { + for (var e in Hn) Hn[e](0, 1) + } : !1, + jn = 0; + v.ajaxSettings.xhr = e.ActiveXObject ? + function() { + return !this.isLocal && Fn() || In() + } : Fn, function(e) { + v.extend(v.support, { + ajax: !! e, + cors: !! e && "withCredentials" in e + }) + }(v.ajaxSettings.xhr()), v.support.ajax && v.ajaxTransport(function(n) { + if (!n.crossDomain || v.support.cors) { + var r; + return { + send: function(i, s) { + var o, u, a = n.xhr(); + n.username ? a.open(n.type, n.url, n.async, n.username, n.password) : a.open(n.type, n.url, n.async); + if (n.xhrFields) for (u in n.xhrFields) a[u] = n.xhrFields[u]; + n.mimeType && a.overrideMimeType && a.overrideMimeType(n.mimeType), !n.crossDomain && !i["X-Requested-With"] && (i["X-Requested-With"] = "XMLHttpRequest"); + try { + for (u in i) a.setRequestHeader(u, i[u]) + } catch (f) {} + a.send(n.hasContent && n.data || null), r = function(e, i) { + var u, f, l, c, h; + try { + if (r && (i || a.readyState === 4)) { + r = t, o && (a.onreadystatechange = v.noop, Bn && delete Hn[o]); + if (i) a.readyState !== 4 && a.abort(); + else { + u = a.status, l = a.getAllResponseHeaders(), c = {}, h = a.responseXML, h && h.documentElement && (c.xml = h); + try { + c.text = a.responseText + } catch (p) {} + try { + f = a.statusText + } catch (p) { + f = "" + }!u && n.isLocal && !n.crossDomain ? u = c.text ? 200 : 404 : u === 1223 && (u = 204) + } + } + } catch (d) { + i || s(-1, d) + } + c && s(u, f, c, l) + }, n.async ? a.readyState === 4 ? setTimeout(r, 0) : (o = ++jn, Bn && (Hn || (Hn = {}, v(e).unload(Bn)), Hn[o] = r), a.onreadystatechange = r) : r() + }, + abort: function() { + r && r(0, 1) + } + } + } + }); + var qn, Rn, Un = /^(?:toggle|show|hide)$/, + zn = new RegExp("^(?:([-+])=|)(" + m + ")([a-z%]*)$", "i"), + Wn = /queueHooks$/, + Xn = [Gn], + Vn = { + "*": [function(e, t) { + var n, r, i = this.createTween(e, t), + s = zn.exec(t), + o = i.cur(), + u = +o || 0, + a = 1, + f = 20; + if (s) { + n = +s[2], r = s[3] || (v.cssNumber[e] ? "" : "px"); + if (r !== "px" && u) { + u = v.css(i.elem, e, !0) || n || 1; + do a = a || ".5", u /= a, v.style(i.elem, e, u + r); + while (a !== (a = i.cur() / o) && a !== 1 && --f) + } + i.unit = r, i.start = u, i.end = s[1] ? u + (s[1] + 1) * n : n + } + return i + }] + }; + v.Animation = v.extend(Kn, { + tweener: function(e, t) { + v.isFunction(e) ? (t = e, e = ["*"]) : e = e.split(" "); + var n, r = 0, + i = e.length; + for (; r < i; r++) n = e[r], Vn[n] = Vn[n] || [], Vn[n].unshift(t) + }, + prefilter: function(e, t) { + t ? Xn.unshift(e) : Xn.push(e) + } + }), v.Tween = Yn, Yn.prototype = { + constructor: Yn, + init: function(e, t, n, r, i, s) { + this.elem = e, this.prop = n, this.easing = i || "swing", this.options = t, this.start = this.now = this.cur(), this.end = r, this.unit = s || (v.cssNumber[n] ? "" : "px") + }, + cur: function() { + var e = Yn.propHooks[this.prop]; + return e && e.get ? e.get(this) : Yn.propHooks._default.get(this) + }, + run: function(e) { + var t, n = Yn.propHooks[this.prop]; + return this.options.duration ? this.pos = t = v.easing[this.easing](e, this.options.duration * e, 0, 1, this.options.duration) : this.pos = t = e, this.now = (this.end - this.start) * t + this.start, this.options.step && this.options.step.call(this.elem, this.now, this), n && n.set ? n.set(this) : Yn.propHooks._default.set(this), this + } + }, Yn.prototype.init.prototype = Yn.prototype, Yn.propHooks = { + _default: { + get: function(e) { + var t; + return e.elem[e.prop] == null || !! e.elem.style && e.elem.style[e.prop] != null ? (t = v.css(e.elem, e.prop, !1, ""), !t || t === "auto" ? 0 : t) : e.elem[e.prop] + }, + set: function(e) { + v.fx.step[e.prop] ? v.fx.step[e.prop](e) : e.elem.style && (e.elem.style[v.cssProps[e.prop]] != null || v.cssHooks[e.prop]) ? v.style(e.elem, e.prop, e.now + e.unit) : e.elem[e.prop] = e.now + } + } + }, Yn.propHooks.scrollTop = Yn.propHooks.scrollLeft = { + set: function(e) { + e.elem.nodeType && e.elem.parentNode && (e.elem[e.prop] = e.now) + } + }, v.each(["toggle", "show", "hide"], function(e, t) { + var n = v.fn[t]; + v.fn[t] = function(r, i, s) { + return r == null || typeof r == "boolean" || !e && v.isFunction(r) && v.isFunction(i) ? n.apply(this, arguments) : this.animate(Zn(t, !0), r, i, s) + } + }), v.fn.extend({ + fadeTo: function(e, t, n, r) { + return this.filter(Gt).css("opacity", 0).show().end().animate({ + opacity: t + }, e, n, r) + }, + animate: function(e, t, n, r) { + var i = v.isEmptyObject(e), + s = v.speed(t, n, r), + o = function() { + var t = Kn(this, v.extend({}, e), s); + i && t.stop(!0) + }; + return i || s.queue === !1 ? this.each(o) : this.queue(s.queue, o) + }, + stop: function(e, n, r) { + var i = function(e) { + var t = e.stop; + delete e.stop, t(r) + }; + return typeof e != "string" && (r = n, n = e, e = t), n && e !== !1 && this.queue(e || "fx", []), this.each(function() { + var t = !0, + n = e != null && e + "queueHooks", + s = v.timers, + o = v._data(this); + if (n) o[n] && o[n].stop && i(o[n]); + else for (n in o) o[n] && o[n].stop && Wn.test(n) && i(o[n]); + for (n = s.length; n--;) s[n].elem === this && (e == null || s[n].queue === e) && (s[n].anim.stop(r), t = !1, s.splice(n, 1)); + (t || !r) && v.dequeue(this, e) + }) + } + }), v.each({ + slideDown: Zn("show"), + slideUp: Zn("hide"), + slideToggle: Zn("toggle"), + fadeIn: { + opacity: "show" + }, + fadeOut: { + opacity: "hide" + }, + fadeToggle: { + opacity: "toggle" + } + }, function(e, t) { + v.fn[e] = function(e, n, r) { + return this.animate(t, e, n, r) + } + }), v.speed = function(e, t, n) { + var r = e && typeof e == "object" ? v.extend({}, e) : { + complete: n || !n && t || v.isFunction(e) && e, + duration: e, + easing: n && t || t && !v.isFunction(t) && t + }; + r.duration = v.fx.off ? 0 : typeof r.duration == "number" ? r.duration : r.duration in v.fx.speeds ? v.fx.speeds[r.duration] : v.fx.speeds._default; + if (r.queue == null || r.queue === !0) r.queue = "fx"; + return r.old = r.complete, r.complete = function() { + v.isFunction(r.old) && r.old.call(this), r.queue && v.dequeue(this, r.queue) + }, r + }, v.easing = { + linear: function(e) { + return e + }, + swing: function(e) { + return.5 - Math.cos(e * Math.PI) / 2 + } + }, v.timers = [], v.fx = Yn.prototype.init, v.fx.tick = function() { + var e, n = v.timers, + r = 0; + qn = v.now(); + for (; r < n.length; r++) e = n[r], !e() && n[r] === e && n.splice(r--, 1); + n.length || v.fx.stop(), qn = t + }, v.fx.timer = function(e) { + e() && v.timers.push(e) && !Rn && (Rn = setInterval(v.fx.tick, v.fx.interval)) + }, v.fx.interval = 13, v.fx.stop = function() { + clearInterval(Rn), Rn = null + }, v.fx.speeds = { + slow: 600, + fast: 200, + _default: 400 + }, v.fx.step = {}, v.expr && v.expr.filters && (v.expr.filters.animated = function(e) { + return v.grep(v.timers, function(t) { + return e === t.elem + }).length + }); + var er = /^(?:body|html)$/i; + v.fn.offset = function(e) { + if (arguments.length) return e === t ? this : this.each(function(t) { + v.offset.setOffset(this, e, t) + }); + var n, r, i, s, o, u, a, f = { + top: 0, + left: 0 + }, + l = this[0], + c = l && l.ownerDocument; + if (!c) return; + return (r = c.body) === l ? v.offset.bodyOffset(l) : (n = c.documentElement, v.contains(n, l) ? (typeof l.getBoundingClientRect != "undefined" && (f = l.getBoundingClientRect()), i = tr(c), s = n.clientTop || r.clientTop || 0, o = n.clientLeft || r.clientLeft || 0, u = i.pageYOffset || n.scrollTop, a = i.pageXOffset || n.scrollLeft, { + top: f.top + u - s, + left: f.left + a - o + }) : f) + }, v.offset = { + bodyOffset: function(e) { + var t = e.offsetTop, + n = e.offsetLeft; + return v.support.doesNotIncludeMarginInBodyOffset && (t += parseFloat(v.css(e, "marginTop")) || 0, n += parseFloat(v.css(e, "marginLeft")) || 0), { + top: t, + left: n + } + }, + setOffset: function(e, t, n) { + var r = v.css(e, "position"); + r === "static" && (e.style.position = "relative"); + var i = v(e), + s = i.offset(), + o = v.css(e, "top"), + u = v.css(e, "left"), + a = (r === "absolute" || r === "fixed") && v.inArray("auto", [o, u]) > -1, + f = {}, + l = {}, + c, h; + a ? (l = i.position(), c = l.top, h = l.left) : (c = parseFloat(o) || 0, h = parseFloat(u) || 0), v.isFunction(t) && (t = t.call(e, n, s)), t.top != null && (f.top = t.top - s.top + c), t.left != null && (f.left = t.left - s.left + h), "using" in t ? t.using.call(e, f) : i.css(f) + } + }, v.fn.extend({ + position: function() { + if (!this[0]) return; + var e = this[0], + t = this.offsetParent(), + n = this.offset(), + r = er.test(t[0].nodeName) ? { + top: 0, + left: 0 + } : t.offset(); + return n.top -= parseFloat(v.css(e, "marginTop")) || 0, n.left -= parseFloat(v.css(e, "marginLeft")) || 0, r.top += parseFloat(v.css(t[0], "borderTopWidth")) || 0, r.left += parseFloat(v.css(t[0], "borderLeftWidth")) || 0, { + top: n.top - r.top, + left: n.left - r.left + } + }, + offsetParent: function() { + return this.map(function() { + var e = this.offsetParent || i.body; + while (e && !er.test(e.nodeName) && v.css(e, "position") === "static") e = e.offsetParent; + return e || i.body + }) + } + }), v.each({ + scrollLeft: "pageXOffset", + scrollTop: "pageYOffset" + }, function(e, n) { + var r = /Y/.test(n); + v.fn[e] = function(i) { + return v.access(this, function(e, i, s) { + var o = tr(e); + if (s === t) return o ? n in o ? o[n] : o.document.documentElement[i] : e[i]; + o ? o.scrollTo(r ? v(o).scrollLeft() : s, r ? s : v(o).scrollTop()) : e[i] = s + }, e, i, arguments.length, null) + } + }), v.each({ + Height: "height", + Width: "width" + }, function(e, n) { + v.each({ + padding: "inner" + e, + content: n, + "": "outer" + e + }, function(r, i) { + v.fn[i] = function(i, s) { + var o = arguments.length && (r || typeof i != "boolean"), + u = r || (i === !0 || s === !0 ? "margin" : "border"); + return v.access(this, function(n, r, i) { + var s; + return v.isWindow(n) ? n.document.documentElement["client" + e] : n.nodeType === 9 ? (s = n.documentElement, Math.max(n.body["scroll" + e], s["scroll" + e], n.body["offset" + e], s["offset" + e], s["client" + e])) : i === t ? v.css(n, r, i, u) : v.style(n, r, i, u) + }, n, o ? i : t, o, null) + } + }) + }), e.jQuery = e.$ = v, typeof define == "function" && define.amd && define.amd.jQuery && define("jquery", [], function() { + return v + }) +})(window); \ No newline at end of file diff --git a/Docs/docstrap-master/template/static/scripts/jquery.scrollTo.js b/Docs/docstrap-master/template/static/scripts/jquery.scrollTo.js new file mode 100644 index 00000000..33d36157 --- /dev/null +++ b/Docs/docstrap-master/template/static/scripts/jquery.scrollTo.js @@ -0,0 +1,217 @@ +/*! + * jQuery.ScrollTo + * Copyright (c) 2007-2013 Ariel Flesler - afleslergmailcom | http://flesler.blogspot.com + * Dual licensed under MIT and GPL. + * + * @projectDescription Easy element scrolling using jQuery. + * http://flesler.blogspot.com/2007/10/jqueryscrollto.html + * @author Ariel Flesler + * @version 1.4.5 + * + * @id jQuery.scrollTo + * @id jQuery.fn.scrollTo + * @param {String, Number, DOMElement, jQuery, Object} target Where to scroll the matched elements. + * The different options for target are: + * - A number position (will be applied to all axes). + * - A string position ('44', '100px', '+=90', etc ) will be applied to all axes + * - A jQuery/DOM element ( logically, child of the element to scroll ) + * - A string selector, that will be relative to the element to scroll ( 'li:eq(2)', etc ) + * - A hash { top:x, left:y }, x and y can be any kind of number/string like above. + * - A percentage of the container's dimension/s, for example: 50% to go to the middle. + * - The string 'max' for go-to-end. + * @param {Number, Function} duration The OVERALL length of the animation, this argument can be the settings object instead. + * @param {Object,Function} settings Optional set of settings or the onAfter callback. + * @option {String} axis Which axis must be scrolled, use 'x', 'y', 'xy' or 'yx'. + * @option {Number, Function} duration The OVERALL length of the animation. + * @option {String} easing The easing method for the animation. + * @option {Boolean} margin If true, the margin of the target element will be deducted from the final position. + * @option {Object, Number} offset Add/deduct from the end position. One number for both axes or { top:x, left:y }. + * @option {Object, Number} over Add/deduct the height/width multiplied by 'over', can be { top:x, left:y } when using both axes. + * @option {Boolean} queue If true, and both axis are given, the 2nd axis will only be animated after the first one ends. + * @option {Function} onAfter Function to be called after the scrolling ends. + * @option {Function} onAfterFirst If queuing is activated, this function will be called after the first scrolling ends. + * @return {jQuery} Returns the same jQuery object, for chaining. + * + * @desc Scroll to a fixed position + * @example $('div').scrollTo( 340 ); + * + * @desc Scroll relatively to the actual position + * @example $('div').scrollTo( '+=340px', { axis:'y' } ); + * + * @desc Scroll using a selector (relative to the scrolled element) + * @example $('div').scrollTo( 'p.paragraph:eq(2)', 500, { easing:'swing', queue:true, axis:'xy' } ); + * + * @desc Scroll to a DOM element (same for jQuery object) + * @example var second_child = document.getElementById('container').firstChild.nextSibling; + * $('#container').scrollTo( second_child, { duration:500, axis:'x', onAfter:function(){ + * alert('scrolled!!'); + * }}); + * + * @desc Scroll on both axes, to different values + * @example $('div').scrollTo( { top: 300, left:'+=200' }, { axis:'xy', offset:-20 } ); + */ + +;(function( $ ){ + + var $scrollTo = $.scrollTo = function( target, duration, settings ){ + $(window).scrollTo( target, duration, settings ); + }; + + $scrollTo.defaults = { + axis:'xy', + duration: parseFloat($.fn.jquery) >= 1.3 ? 0 : 1, + limit:true + }; + + // Returns the element that needs to be animated to scroll the window. + // Kept for backwards compatibility (specially for localScroll & serialScroll) + $scrollTo.window = function( scope ){ + return $(window)._scrollable(); + }; + + // Hack, hack, hack :) + // Returns the real elements to scroll (supports window/iframes, documents and regular nodes) + $.fn._scrollable = function(){ + return this.map(function(){ + var elem = this, + isWin = !elem.nodeName || $.inArray( elem.nodeName.toLowerCase(), ['iframe','#document','html','body'] ) != -1; + + if( !isWin ) + return elem; + + var doc = (elem.contentWindow || elem).document || elem.ownerDocument || elem; + + return /webkit/i.test(navigator.userAgent) || doc.compatMode == 'BackCompat' ? + doc.body : + doc.documentElement; + }); + }; + + $.fn.scrollTo = function( target, duration, settings ){ + if( typeof duration == 'object' ){ + settings = duration; + duration = 0; + } + if( typeof settings == 'function' ) + settings = { onAfter:settings }; + + if( target == 'max' ) + target = 9e9; + + settings = $.extend( {}, $scrollTo.defaults, settings ); + // Speed is still recognized for backwards compatibility + duration = duration || settings.duration; + // Make sure the settings are given right + settings.queue = settings.queue && settings.axis.length > 1; + + if( settings.queue ) + // Let's keep the overall duration + duration /= 2; + settings.offset = both( settings.offset ); + settings.over = both( settings.over ); + + return this._scrollable().each(function(){ + // Null target yields nothing, just like jQuery does + if (target == null) return; + + var elem = this, + $elem = $(elem), + targ = target, toff, attr = {}, + win = $elem.is('html,body'); + + switch( typeof targ ){ + // A number will pass the regex + case 'number': + case 'string': + if( /^([+-]=?)?\d+(\.\d+)?(px|%)?$/.test(targ) ){ + targ = both( targ ); + // We are done + break; + } + // Relative selector, no break! + targ = $(targ,this); + if (!targ.length) return; + case 'object': + // DOMElement / jQuery + if( targ.is || targ.style ) + // Get the real position of the target + toff = (targ = $(targ)).offset(); + } + $.each( settings.axis.split(''), function( i, axis ){ + var Pos = axis == 'x' ? 'Left' : 'Top', + pos = Pos.toLowerCase(), + key = 'scroll' + Pos, + old = elem[key], + max = $scrollTo.max(elem, axis); + + if( toff ){// jQuery / DOMElement + attr[key] = toff[pos] + ( win ? 0 : old - $elem.offset()[pos] ); + + // If it's a dom element, reduce the margin + if( settings.margin ){ + attr[key] -= parseInt(targ.css('margin'+Pos)) || 0; + attr[key] -= parseInt(targ.css('border'+Pos+'Width')) || 0; + } + + attr[key] += settings.offset[pos] || 0; + + if( settings.over[pos] ) + // Scroll to a fraction of its width/height + attr[key] += targ[axis=='x'?'width':'height']() * settings.over[pos]; + }else{ + var val = targ[pos]; + // Handle percentage values + attr[key] = val.slice && val.slice(-1) == '%' ? + parseFloat(val) / 100 * max + : val; + } + + // Number or 'number' + if( settings.limit && /^\d+$/.test(attr[key]) ) + // Check the limits + attr[key] = attr[key] <= 0 ? 0 : Math.min( attr[key], max ); + + // Queueing axes + if( !i && settings.queue ){ + // Don't waste time animating, if there's no need. + if( old != attr[key] ) + // Intermediate animation + animate( settings.onAfterFirst ); + // Don't animate this axis again in the next iteration. + delete attr[key]; + } + }); + + animate( settings.onAfter ); + + function animate( callback ){ + $elem.animate( attr, duration, settings.easing, callback && function(){ + callback.call(this, target, settings); + }); + }; + + }).end(); + }; + + // Max scrolling position, works on quirks mode + // It only fails (not too badly) on IE, quirks mode. + $scrollTo.max = function( elem, axis ){ + var Dim = axis == 'x' ? 'Width' : 'Height', + scroll = 'scroll'+Dim; + + if( !$(elem).is('html,body') ) + return elem[scroll] - $(elem)[Dim.toLowerCase()](); + + var size = 'client' + Dim, + html = elem.ownerDocument.documentElement, + body = elem.ownerDocument.body; + + return Math.max( html[scroll], body[scroll] ) + - Math.min( html[size] , body[size] ); + }; + + function both( val ){ + return typeof val == 'object' ? val : { top:val, left:val }; + }; + +})( jQuery ); \ No newline at end of file diff --git a/Docs/docstrap-master/template/static/scripts/jquery.sunlight.js b/Docs/docstrap-master/template/static/scripts/jquery.sunlight.js new file mode 100644 index 00000000..03e3bfb8 --- /dev/null +++ b/Docs/docstrap-master/template/static/scripts/jquery.sunlight.js @@ -0,0 +1,18 @@ +/** + * jQuery plugin for Sunlight http://sunlightjs.com/ + * + * by Tommy Montgomery http://tmont.com/ + * licensed under WTFPL http://sam.zoy.org/wtfpl/ + */ +(function($, window){ + + $.fn.sunlight = function(options) { + var highlighter = new window.Sunlight.Highlighter(options); + this.each(function() { + highlighter.highlightNode(this); + }); + + return this; + }; + +}(jQuery, this)); \ No newline at end of file diff --git a/Docs/docstrap-master/template/static/scripts/prettify/Apache-License-2.0.txt b/Docs/docstrap-master/template/static/scripts/prettify/Apache-License-2.0.txt new file mode 100644 index 00000000..d6456956 --- /dev/null +++ b/Docs/docstrap-master/template/static/scripts/prettify/Apache-License-2.0.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/Docs/docstrap-master/template/static/scripts/prettify/jquery.min.js b/Docs/docstrap-master/template/static/scripts/prettify/jquery.min.js new file mode 100644 index 00000000..b18e05a9 --- /dev/null +++ b/Docs/docstrap-master/template/static/scripts/prettify/jquery.min.js @@ -0,0 +1,6 @@ +/*! jQuery v2.0.0 | (c) 2005, 2013 jQuery Foundation, Inc. | jquery.org/license +//@ sourceMappingURL=jquery.min.map +*/ +(function(e,undefined){var t,n,r=typeof undefined,i=e.location,o=e.document,s=o.documentElement,a=e.jQuery,u=e.$,l={},c=[],f="2.0.0",p=c.concat,h=c.push,d=c.slice,g=c.indexOf,m=l.toString,y=l.hasOwnProperty,v=f.trim,x=function(e,n){return new x.fn.init(e,n,t)},b=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,w=/\S+/g,T=/^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,k=/^-ms-/,N=/-([\da-z])/gi,E=function(e,t){return t.toUpperCase()},S=function(){o.removeEventListener("DOMContentLoaded",S,!1),e.removeEventListener("load",S,!1),x.ready()};x.fn=x.prototype={jquery:f,constructor:x,init:function(e,t,n){var r,i;if(!e)return this;if("string"==typeof e){if(r="<"===e.charAt(0)&&">"===e.charAt(e.length-1)&&e.length>=3?[null,e,null]:T.exec(e),!r||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof x?t[0]:t,x.merge(this,x.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:o,!0)),C.test(r[1])&&x.isPlainObject(t))for(r in t)x.isFunction(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return i=o.getElementById(r[2]),i&&i.parentNode&&(this.length=1,this[0]=i),this.context=o,this.selector=e,this}return e.nodeType?(this.context=this[0]=e,this.length=1,this):x.isFunction(e)?n.ready(e):(e.selector!==undefined&&(this.selector=e.selector,this.context=e.context),x.makeArray(e,this))},selector:"",length:0,toArray:function(){return d.call(this)},get:function(e){return null==e?this.toArray():0>e?this[this.length+e]:this[e]},pushStack:function(e){var t=x.merge(this.constructor(),e);return t.prevObject=this,t.context=this.context,t},each:function(e,t){return x.each(this,e,t)},ready:function(e){return x.ready.promise().done(e),this},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(e){var t=this.length,n=+e+(0>e?t:0);return this.pushStack(n>=0&&t>n?[this[n]]:[])},map:function(e){return this.pushStack(x.map(this,function(t,n){return e.call(t,n,t)}))},end:function(){return this.prevObject||this.constructor(null)},push:h,sort:[].sort,splice:[].splice},x.fn.init.prototype=x.fn,x.extend=x.fn.extend=function(){var e,t,n,r,i,o,s=arguments[0]||{},a=1,u=arguments.length,l=!1;for("boolean"==typeof s&&(l=s,s=arguments[1]||{},a=2),"object"==typeof s||x.isFunction(s)||(s={}),u===a&&(s=this,--a);u>a;a++)if(null!=(e=arguments[a]))for(t in e)n=s[t],r=e[t],s!==r&&(l&&r&&(x.isPlainObject(r)||(i=x.isArray(r)))?(i?(i=!1,o=n&&x.isArray(n)?n:[]):o=n&&x.isPlainObject(n)?n:{},s[t]=x.extend(l,o,r)):r!==undefined&&(s[t]=r));return s},x.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),noConflict:function(t){return e.$===x&&(e.$=u),t&&e.jQuery===x&&(e.jQuery=a),x},isReady:!1,readyWait:1,holdReady:function(e){e?x.readyWait++:x.ready(!0)},ready:function(e){(e===!0?--x.readyWait:x.isReady)||(x.isReady=!0,e!==!0&&--x.readyWait>0||(n.resolveWith(o,[x]),x.fn.trigger&&x(o).trigger("ready").off("ready")))},isFunction:function(e){return"function"===x.type(e)},isArray:Array.isArray,isWindow:function(e){return null!=e&&e===e.window},isNumeric:function(e){return!isNaN(parseFloat(e))&&isFinite(e)},type:function(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?l[m.call(e)]||"object":typeof e},isPlainObject:function(e){if("object"!==x.type(e)||e.nodeType||x.isWindow(e))return!1;try{if(e.constructor&&!y.call(e.constructor.prototype,"isPrototypeOf"))return!1}catch(t){return!1}return!0},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},error:function(e){throw Error(e)},parseHTML:function(e,t,n){if(!e||"string"!=typeof e)return null;"boolean"==typeof t&&(n=t,t=!1),t=t||o;var r=C.exec(e),i=!n&&[];return r?[t.createElement(r[1])]:(r=x.buildFragment([e],t,i),i&&x(i).remove(),x.merge([],r.childNodes))},parseJSON:JSON.parse,parseXML:function(e){var t,n;if(!e||"string"!=typeof e)return null;try{n=new DOMParser,t=n.parseFromString(e,"text/xml")}catch(r){t=undefined}return(!t||t.getElementsByTagName("parsererror").length)&&x.error("Invalid XML: "+e),t},noop:function(){},globalEval:function(e){var t,n=eval;e=x.trim(e),e&&(1===e.indexOf("use strict")?(t=o.createElement("script"),t.text=e,o.head.appendChild(t).parentNode.removeChild(t)):n(e))},camelCase:function(e){return e.replace(k,"ms-").replace(N,E)},nodeName:function(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()},each:function(e,t,n){var r,i=0,o=e.length,s=j(e);if(n){if(s){for(;o>i;i++)if(r=t.apply(e[i],n),r===!1)break}else for(i in e)if(r=t.apply(e[i],n),r===!1)break}else if(s){for(;o>i;i++)if(r=t.call(e[i],i,e[i]),r===!1)break}else for(i in e)if(r=t.call(e[i],i,e[i]),r===!1)break;return e},trim:function(e){return null==e?"":v.call(e)},makeArray:function(e,t){var n=t||[];return null!=e&&(j(Object(e))?x.merge(n,"string"==typeof e?[e]:e):h.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:g.call(t,e,n)},merge:function(e,t){var n=t.length,r=e.length,i=0;if("number"==typeof n)for(;n>i;i++)e[r++]=t[i];else while(t[i]!==undefined)e[r++]=t[i++];return e.length=r,e},grep:function(e,t,n){var r,i=[],o=0,s=e.length;for(n=!!n;s>o;o++)r=!!t(e[o],o),n!==r&&i.push(e[o]);return i},map:function(e,t,n){var r,i=0,o=e.length,s=j(e),a=[];if(s)for(;o>i;i++)r=t(e[i],i,n),null!=r&&(a[a.length]=r);else for(i in e)r=t(e[i],i,n),null!=r&&(a[a.length]=r);return p.apply([],a)},guid:1,proxy:function(e,t){var n,r,i;return"string"==typeof t&&(n=e[t],t=e,e=n),x.isFunction(e)?(r=d.call(arguments,2),i=function(){return e.apply(t||this,r.concat(d.call(arguments)))},i.guid=e.guid=e.guid||x.guid++,i):undefined},access:function(e,t,n,r,i,o,s){var a=0,u=e.length,l=null==n;if("object"===x.type(n)){i=!0;for(a in n)x.access(e,t,a,n[a],!0,o,s)}else if(r!==undefined&&(i=!0,x.isFunction(r)||(s=!0),l&&(s?(t.call(e,r),t=null):(l=t,t=function(e,t,n){return l.call(x(e),n)})),t))for(;u>a;a++)t(e[a],n,s?r:r.call(e[a],a,t(e[a],n)));return i?e:l?t.call(e):u?t(e[0],n):o},now:Date.now,swap:function(e,t,n,r){var i,o,s={};for(o in t)s[o]=e.style[o],e.style[o]=t[o];i=n.apply(e,r||[]);for(o in t)e.style[o]=s[o];return i}}),x.ready.promise=function(t){return n||(n=x.Deferred(),"complete"===o.readyState?setTimeout(x.ready):(o.addEventListener("DOMContentLoaded",S,!1),e.addEventListener("load",S,!1))),n.promise(t)},x.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(e,t){l["[object "+t+"]"]=t.toLowerCase()});function j(e){var t=e.length,n=x.type(e);return x.isWindow(e)?!1:1===e.nodeType&&t?!0:"array"===n||"function"!==n&&(0===t||"number"==typeof t&&t>0&&t-1 in e)}t=x(o),function(e,undefined){var t,n,r,i,o,s,a,u,l,c,f,p,h,d,g,m,y="sizzle"+-new Date,v=e.document,b={},w=0,T=0,C=ot(),k=ot(),N=ot(),E=!1,S=function(){return 0},j=typeof undefined,D=1<<31,A=[],L=A.pop,q=A.push,H=A.push,O=A.slice,F=A.indexOf||function(e){var t=0,n=this.length;for(;n>t;t++)if(this[t]===e)return t;return-1},P="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",R="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",W=M.replace("w","w#"),$="\\["+R+"*("+M+")"+R+"*(?:([*^$|!~]?=)"+R+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+W+")|)|)"+R+"*\\]",B=":("+M+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+$.replace(3,8)+")*)|.*)\\)|)",I=RegExp("^"+R+"+|((?:^|[^\\\\])(?:\\\\.)*)"+R+"+$","g"),z=RegExp("^"+R+"*,"+R+"*"),_=RegExp("^"+R+"*([>+~]|"+R+")"+R+"*"),X=RegExp(R+"*[+~]"),U=RegExp("="+R+"*([^\\]'\"]*)"+R+"*\\]","g"),Y=RegExp(B),V=RegExp("^"+W+"$"),G={ID:RegExp("^#("+M+")"),CLASS:RegExp("^\\.("+M+")"),TAG:RegExp("^("+M.replace("w","w*")+")"),ATTR:RegExp("^"+$),PSEUDO:RegExp("^"+B),CHILD:RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+R+"*(even|odd|(([+-]|)(\\d*)n|)"+R+"*(?:([+-]|)"+R+"*(\\d+)|))"+R+"*\\)|)","i"),"boolean":RegExp("^(?:"+P+")$","i"),needsContext:RegExp("^"+R+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+R+"*((?:-\\d)?\\d*)"+R+"*\\)|)(?=[^-]|$)","i")},J=/^[^{]+\{\s*\[native \w/,Q=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,K=/^(?:input|select|textarea|button)$/i,Z=/^h\d$/i,et=/'|\\/g,tt=/\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g,nt=function(e,t){var n="0x"+t-65536;return n!==n?t:0>n?String.fromCharCode(n+65536):String.fromCharCode(55296|n>>10,56320|1023&n)};try{H.apply(A=O.call(v.childNodes),v.childNodes),A[v.childNodes.length].nodeType}catch(rt){H={apply:A.length?function(e,t){q.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function it(e){return J.test(e+"")}function ot(){var e,t=[];return e=function(n,i){return t.push(n+=" ")>r.cacheLength&&delete e[t.shift()],e[n]=i}}function st(e){return e[y]=!0,e}function at(e){var t=c.createElement("div");try{return!!e(t)}catch(n){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function ut(e,t,n,r){var i,o,s,a,u,f,d,g,x,w;if((t?t.ownerDocument||t:v)!==c&&l(t),t=t||c,n=n||[],!e||"string"!=typeof e)return n;if(1!==(a=t.nodeType)&&9!==a)return[];if(p&&!r){if(i=Q.exec(e))if(s=i[1]){if(9===a){if(o=t.getElementById(s),!o||!o.parentNode)return n;if(o.id===s)return n.push(o),n}else if(t.ownerDocument&&(o=t.ownerDocument.getElementById(s))&&m(t,o)&&o.id===s)return n.push(o),n}else{if(i[2])return H.apply(n,t.getElementsByTagName(e)),n;if((s=i[3])&&b.getElementsByClassName&&t.getElementsByClassName)return H.apply(n,t.getElementsByClassName(s)),n}if(b.qsa&&(!h||!h.test(e))){if(g=d=y,x=t,w=9===a&&e,1===a&&"object"!==t.nodeName.toLowerCase()){f=gt(e),(d=t.getAttribute("id"))?g=d.replace(et,"\\$&"):t.setAttribute("id",g),g="[id='"+g+"'] ",u=f.length;while(u--)f[u]=g+mt(f[u]);x=X.test(e)&&t.parentNode||t,w=f.join(",")}if(w)try{return H.apply(n,x.querySelectorAll(w)),n}catch(T){}finally{d||t.removeAttribute("id")}}}return kt(e.replace(I,"$1"),t,n,r)}o=ut.isXML=function(e){var t=e&&(e.ownerDocument||e).documentElement;return t?"HTML"!==t.nodeName:!1},l=ut.setDocument=function(e){var t=e?e.ownerDocument||e:v;return t!==c&&9===t.nodeType&&t.documentElement?(c=t,f=t.documentElement,p=!o(t),b.getElementsByTagName=at(function(e){return e.appendChild(t.createComment("")),!e.getElementsByTagName("*").length}),b.attributes=at(function(e){return e.className="i",!e.getAttribute("className")}),b.getElementsByClassName=at(function(e){return e.innerHTML="
",e.firstChild.className="i",2===e.getElementsByClassName("i").length}),b.sortDetached=at(function(e){return 1&e.compareDocumentPosition(c.createElement("div"))}),b.getById=at(function(e){return f.appendChild(e).id=y,!t.getElementsByName||!t.getElementsByName(y).length}),b.getById?(r.find.ID=function(e,t){if(typeof t.getElementById!==j&&p){var n=t.getElementById(e);return n&&n.parentNode?[n]:[]}},r.filter.ID=function(e){var t=e.replace(tt,nt);return function(e){return e.getAttribute("id")===t}}):(r.find.ID=function(e,t){if(typeof t.getElementById!==j&&p){var n=t.getElementById(e);return n?n.id===e||typeof n.getAttributeNode!==j&&n.getAttributeNode("id").value===e?[n]:undefined:[]}},r.filter.ID=function(e){var t=e.replace(tt,nt);return function(e){var n=typeof e.getAttributeNode!==j&&e.getAttributeNode("id");return n&&n.value===t}}),r.find.TAG=b.getElementsByTagName?function(e,t){return typeof t.getElementsByTagName!==j?t.getElementsByTagName(e):undefined}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},r.find.CLASS=b.getElementsByClassName&&function(e,t){return typeof t.getElementsByClassName!==j&&p?t.getElementsByClassName(e):undefined},d=[],h=[],(b.qsa=it(t.querySelectorAll))&&(at(function(e){e.innerHTML="",e.querySelectorAll("[selected]").length||h.push("\\["+R+"*(?:value|"+P+")"),e.querySelectorAll(":checked").length||h.push(":checked")}),at(function(e){var t=c.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("t",""),e.querySelectorAll("[t^='']").length&&h.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll(":enabled").length||h.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),h.push(",.*:")})),(b.matchesSelector=it(g=f.webkitMatchesSelector||f.mozMatchesSelector||f.oMatchesSelector||f.msMatchesSelector))&&at(function(e){b.disconnectedMatch=g.call(e,"div"),g.call(e,"[s!='']:x"),d.push("!=",B)}),h=h.length&&RegExp(h.join("|")),d=d.length&&RegExp(d.join("|")),m=it(f.contains)||f.compareDocumentPosition?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},S=f.compareDocumentPosition?function(e,n){if(e===n)return E=!0,0;var r=n.compareDocumentPosition&&e.compareDocumentPosition&&e.compareDocumentPosition(n);return r?1&r||!b.sortDetached&&n.compareDocumentPosition(e)===r?e===t||m(v,e)?-1:n===t||m(v,n)?1:u?F.call(u,e)-F.call(u,n):0:4&r?-1:1:e.compareDocumentPosition?-1:1}:function(e,n){var r,i=0,o=e.parentNode,s=n.parentNode,a=[e],l=[n];if(e===n)return E=!0,0;if(!o||!s)return e===t?-1:n===t?1:o?-1:s?1:u?F.call(u,e)-F.call(u,n):0;if(o===s)return lt(e,n);r=e;while(r=r.parentNode)a.unshift(r);r=n;while(r=r.parentNode)l.unshift(r);while(a[i]===l[i])i++;return i?lt(a[i],l[i]):a[i]===v?-1:l[i]===v?1:0},c):c},ut.matches=function(e,t){return ut(e,null,null,t)},ut.matchesSelector=function(e,t){if((e.ownerDocument||e)!==c&&l(e),t=t.replace(U,"='$1']"),!(!b.matchesSelector||!p||d&&d.test(t)||h&&h.test(t)))try{var n=g.call(e,t);if(n||b.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(r){}return ut(t,c,null,[e]).length>0},ut.contains=function(e,t){return(e.ownerDocument||e)!==c&&l(e),m(e,t)},ut.attr=function(e,t){(e.ownerDocument||e)!==c&&l(e);var n=r.attrHandle[t.toLowerCase()],i=n&&n(e,t,!p);return i===undefined?b.attributes||!p?e.getAttribute(t):(i=e.getAttributeNode(t))&&i.specified?i.value:null:i},ut.error=function(e){throw Error("Syntax error, unrecognized expression: "+e)},ut.uniqueSort=function(e){var t,n=[],r=0,i=0;if(E=!b.detectDuplicates,u=!b.sortStable&&e.slice(0),e.sort(S),E){while(t=e[i++])t===e[i]&&(r=n.push(i));while(r--)e.splice(n[r],1)}return e};function lt(e,t){var n=t&&e,r=n&&(~t.sourceIndex||D)-(~e.sourceIndex||D);if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function ct(e,t,n){var r;return n?undefined:(r=e.getAttributeNode(t))&&r.specified?r.value:e[t]===!0?t.toLowerCase():null}function ft(e,t,n){var r;return n?undefined:r=e.getAttribute(t,"type"===t.toLowerCase()?1:2)}function pt(e){return function(t){var n=t.nodeName.toLowerCase();return"input"===n&&t.type===e}}function ht(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function dt(e){return st(function(t){return t=+t,st(function(n,r){var i,o=e([],n.length,t),s=o.length;while(s--)n[i=o[s]]&&(n[i]=!(r[i]=n[i]))})})}i=ut.getText=function(e){var t,n="",r=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=i(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[r];r++)n+=i(t);return n},r=ut.selectors={cacheLength:50,createPseudo:st,match:G,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(tt,nt),e[3]=(e[4]||e[5]||"").replace(tt,nt),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||ut.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&ut.error(e[0]),e},PSEUDO:function(e){var t,n=!e[5]&&e[2];return G.CHILD.test(e[0])?null:(e[4]?e[2]=e[4]:n&&Y.test(n)&&(t=gt(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(tt,nt).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=C[e+" "];return t||(t=RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&C(e,function(e){return t.test("string"==typeof e.className&&e.className||typeof e.getAttribute!==j&&e.getAttribute("class")||"")})},ATTR:function(e,t,n){return function(r){var i=ut.attr(r,e);return null==i?"!="===t:t?(i+="","="===t?i===n:"!="===t?i!==n:"^="===t?n&&0===i.indexOf(n):"*="===t?n&&i.indexOf(n)>-1:"$="===t?n&&i.slice(-n.length)===n:"~="===t?(" "+i+" ").indexOf(n)>-1:"|="===t?i===n||i.slice(0,n.length+1)===n+"-":!1):!0}},CHILD:function(e,t,n,r,i){var o="nth"!==e.slice(0,3),s="last"!==e.slice(-4),a="of-type"===t;return 1===r&&0===i?function(e){return!!e.parentNode}:function(t,n,u){var l,c,f,p,h,d,g=o!==s?"nextSibling":"previousSibling",m=t.parentNode,v=a&&t.nodeName.toLowerCase(),x=!u&&!a;if(m){if(o){while(g){f=t;while(f=f[g])if(a?f.nodeName.toLowerCase()===v:1===f.nodeType)return!1;d=g="only"===e&&!d&&"nextSibling"}return!0}if(d=[s?m.firstChild:m.lastChild],s&&x){c=m[y]||(m[y]={}),l=c[e]||[],h=l[0]===w&&l[1],p=l[0]===w&&l[2],f=h&&m.childNodes[h];while(f=++h&&f&&f[g]||(p=h=0)||d.pop())if(1===f.nodeType&&++p&&f===t){c[e]=[w,h,p];break}}else if(x&&(l=(t[y]||(t[y]={}))[e])&&l[0]===w)p=l[1];else while(f=++h&&f&&f[g]||(p=h=0)||d.pop())if((a?f.nodeName.toLowerCase()===v:1===f.nodeType)&&++p&&(x&&((f[y]||(f[y]={}))[e]=[w,p]),f===t))break;return p-=i,p===r||0===p%r&&p/r>=0}}},PSEUDO:function(e,t){var n,i=r.pseudos[e]||r.setFilters[e.toLowerCase()]||ut.error("unsupported pseudo: "+e);return i[y]?i(t):i.length>1?(n=[e,e,"",t],r.setFilters.hasOwnProperty(e.toLowerCase())?st(function(e,n){var r,o=i(e,t),s=o.length;while(s--)r=F.call(e,o[s]),e[r]=!(n[r]=o[s])}):function(e){return i(e,0,n)}):i}},pseudos:{not:st(function(e){var t=[],n=[],r=s(e.replace(I,"$1"));return r[y]?st(function(e,t,n,i){var o,s=r(e,null,i,[]),a=e.length;while(a--)(o=s[a])&&(e[a]=!(t[a]=o))}):function(e,i,o){return t[0]=e,r(t,null,o,n),!n.pop()}}),has:st(function(e){return function(t){return ut(e,t).length>0}}),contains:st(function(e){return function(t){return(t.textContent||t.innerText||i(t)).indexOf(e)>-1}}),lang:st(function(e){return V.test(e||"")||ut.error("unsupported lang: "+e),e=e.replace(tt,nt).toLowerCase(),function(t){var n;do if(n=p?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return n=n.toLowerCase(),n===e||0===n.indexOf(e+"-");while((t=t.parentNode)&&1===t.nodeType);return!1}}),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===f},focus:function(e){return e===c.activeElement&&(!c.hasFocus||c.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:function(e){return e.disabled===!1},disabled:function(e){return e.disabled===!0},checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,e.selected===!0},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeName>"@"||3===e.nodeType||4===e.nodeType)return!1;return!0},parent:function(e){return!r.pseudos.empty(e)},header:function(e){return Z.test(e.nodeName)},input:function(e){return K.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||t.toLowerCase()===e.type)},first:dt(function(){return[0]}),last:dt(function(e,t){return[t-1]}),eq:dt(function(e,t,n){return[0>n?n+t:n]}),even:dt(function(e,t){var n=0;for(;t>n;n+=2)e.push(n);return e}),odd:dt(function(e,t){var n=1;for(;t>n;n+=2)e.push(n);return e}),lt:dt(function(e,t,n){var r=0>n?n+t:n;for(;--r>=0;)e.push(r);return e}),gt:dt(function(e,t,n){var r=0>n?n+t:n;for(;t>++r;)e.push(r);return e})}};for(t in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})r.pseudos[t]=pt(t);for(t in{submit:!0,reset:!0})r.pseudos[t]=ht(t);function gt(e,t){var n,i,o,s,a,u,l,c=k[e+" "];if(c)return t?0:c.slice(0);a=e,u=[],l=r.preFilter;while(a){(!n||(i=z.exec(a)))&&(i&&(a=a.slice(i[0].length)||a),u.push(o=[])),n=!1,(i=_.exec(a))&&(n=i.shift(),o.push({value:n,type:i[0].replace(I," ")}),a=a.slice(n.length));for(s in r.filter)!(i=G[s].exec(a))||l[s]&&!(i=l[s](i))||(n=i.shift(),o.push({value:n,type:s,matches:i}),a=a.slice(n.length));if(!n)break}return t?a.length:a?ut.error(e):k(e,u).slice(0)}function mt(e){var t=0,n=e.length,r="";for(;n>t;t++)r+=e[t].value;return r}function yt(e,t,r){var i=t.dir,o=r&&"parentNode"===i,s=T++;return t.first?function(t,n,r){while(t=t[i])if(1===t.nodeType||o)return e(t,n,r)}:function(t,r,a){var u,l,c,f=w+" "+s;if(a){while(t=t[i])if((1===t.nodeType||o)&&e(t,r,a))return!0}else while(t=t[i])if(1===t.nodeType||o)if(c=t[y]||(t[y]={}),(l=c[i])&&l[0]===f){if((u=l[1])===!0||u===n)return u===!0}else if(l=c[i]=[f],l[1]=e(t,r,a)||n,l[1]===!0)return!0}}function vt(e){return e.length>1?function(t,n,r){var i=e.length;while(i--)if(!e[i](t,n,r))return!1;return!0}:e[0]}function xt(e,t,n,r,i){var o,s=[],a=0,u=e.length,l=null!=t;for(;u>a;a++)(o=e[a])&&(!n||n(o,r,i))&&(s.push(o),l&&t.push(a));return s}function bt(e,t,n,r,i,o){return r&&!r[y]&&(r=bt(r)),i&&!i[y]&&(i=bt(i,o)),st(function(o,s,a,u){var l,c,f,p=[],h=[],d=s.length,g=o||Ct(t||"*",a.nodeType?[a]:a,[]),m=!e||!o&&t?g:xt(g,p,e,a,u),y=n?i||(o?e:d||r)?[]:s:m;if(n&&n(m,y,a,u),r){l=xt(y,h),r(l,[],a,u),c=l.length;while(c--)(f=l[c])&&(y[h[c]]=!(m[h[c]]=f))}if(o){if(i||e){if(i){l=[],c=y.length;while(c--)(f=y[c])&&l.push(m[c]=f);i(null,y=[],l,u)}c=y.length;while(c--)(f=y[c])&&(l=i?F.call(o,f):p[c])>-1&&(o[l]=!(s[l]=f))}}else y=xt(y===s?y.splice(d,y.length):y),i?i(null,s,y,u):H.apply(s,y)})}function wt(e){var t,n,i,o=e.length,s=r.relative[e[0].type],u=s||r.relative[" "],l=s?1:0,c=yt(function(e){return e===t},u,!0),f=yt(function(e){return F.call(t,e)>-1},u,!0),p=[function(e,n,r){return!s&&(r||n!==a)||((t=n).nodeType?c(e,n,r):f(e,n,r))}];for(;o>l;l++)if(n=r.relative[e[l].type])p=[yt(vt(p),n)];else{if(n=r.filter[e[l].type].apply(null,e[l].matches),n[y]){for(i=++l;o>i;i++)if(r.relative[e[i].type])break;return bt(l>1&&vt(p),l>1&&mt(e.slice(0,l-1)).replace(I,"$1"),n,i>l&&wt(e.slice(l,i)),o>i&&wt(e=e.slice(i)),o>i&&mt(e))}p.push(n)}return vt(p)}function Tt(e,t){var i=0,o=t.length>0,s=e.length>0,u=function(u,l,f,p,h){var d,g,m,y=[],v=0,x="0",b=u&&[],T=null!=h,C=a,k=u||s&&r.find.TAG("*",h&&l.parentNode||l),N=w+=null==C?1:Math.random()||.1;for(T&&(a=l!==c&&l,n=i);null!=(d=k[x]);x++){if(s&&d){g=0;while(m=e[g++])if(m(d,l,f)){p.push(d);break}T&&(w=N,n=++i)}o&&((d=!m&&d)&&v--,u&&b.push(d))}if(v+=x,o&&x!==v){g=0;while(m=t[g++])m(b,y,l,f);if(u){if(v>0)while(x--)b[x]||y[x]||(y[x]=L.call(p));y=xt(y)}H.apply(p,y),T&&!u&&y.length>0&&v+t.length>1&&ut.uniqueSort(p)}return T&&(w=N,a=C),b};return o?st(u):u}s=ut.compile=function(e,t){var n,r=[],i=[],o=N[e+" "];if(!o){t||(t=gt(e)),n=t.length;while(n--)o=wt(t[n]),o[y]?r.push(o):i.push(o);o=N(e,Tt(i,r))}return o};function Ct(e,t,n){var r=0,i=t.length;for(;i>r;r++)ut(e,t[r],n);return n}function kt(e,t,n,i){var o,a,u,l,c,f=gt(e);if(!i&&1===f.length){if(a=f[0]=f[0].slice(0),a.length>2&&"ID"===(u=a[0]).type&&9===t.nodeType&&p&&r.relative[a[1].type]){if(t=(r.find.ID(u.matches[0].replace(tt,nt),t)||[])[0],!t)return n;e=e.slice(a.shift().value.length)}o=G.needsContext.test(e)?0:a.length;while(o--){if(u=a[o],r.relative[l=u.type])break;if((c=r.find[l])&&(i=c(u.matches[0].replace(tt,nt),X.test(a[0].type)&&t.parentNode||t))){if(a.splice(o,1),e=i.length&&mt(a),!e)return H.apply(n,i),n;break}}}return s(e,f)(i,t,!p,n,X.test(e)),n}r.pseudos.nth=r.pseudos.eq;function Nt(){}Nt.prototype=r.filters=r.pseudos,r.setFilters=new Nt,b.sortStable=y.split("").sort(S).join("")===y,l(),[0,0].sort(S),b.detectDuplicates=E,at(function(e){if(e.innerHTML="
","#"!==e.firstChild.getAttribute("href")){var t="type|href|height|width".split("|"),n=t.length;while(n--)r.attrHandle[t[n]]=ft}}),at(function(e){if(null!=e.getAttribute("disabled")){var t=P.split("|"),n=t.length;while(n--)r.attrHandle[t[n]]=ct}}),x.find=ut,x.expr=ut.selectors,x.expr[":"]=x.expr.pseudos,x.unique=ut.uniqueSort,x.text=ut.getText,x.isXMLDoc=ut.isXML,x.contains=ut.contains}(e);var D={};function A(e){var t=D[e]={};return x.each(e.match(w)||[],function(e,n){t[n]=!0}),t}x.Callbacks=function(e){e="string"==typeof e?D[e]||A(e):x.extend({},e);var t,n,r,i,o,s,a=[],u=!e.once&&[],l=function(f){for(t=e.memory&&f,n=!0,s=i||0,i=0,o=a.length,r=!0;a&&o>s;s++)if(a[s].apply(f[0],f[1])===!1&&e.stopOnFalse){t=!1;break}r=!1,a&&(u?u.length&&l(u.shift()):t?a=[]:c.disable())},c={add:function(){if(a){var n=a.length;(function s(t){x.each(t,function(t,n){var r=x.type(n);"function"===r?e.unique&&c.has(n)||a.push(n):n&&n.length&&"string"!==r&&s(n)})})(arguments),r?o=a.length:t&&(i=n,l(t))}return this},remove:function(){return a&&x.each(arguments,function(e,t){var n;while((n=x.inArray(t,a,n))>-1)a.splice(n,1),r&&(o>=n&&o--,s>=n&&s--)}),this},has:function(e){return e?x.inArray(e,a)>-1:!(!a||!a.length)},empty:function(){return a=[],o=0,this},disable:function(){return a=u=t=undefined,this},disabled:function(){return!a},lock:function(){return u=undefined,t||c.disable(),this},locked:function(){return!u},fireWith:function(e,t){return t=t||[],t=[e,t.slice?t.slice():t],!a||n&&!u||(r?u.push(t):l(t)),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!n}};return c},x.extend({Deferred:function(e){var t=[["resolve","done",x.Callbacks("once memory"),"resolved"],["reject","fail",x.Callbacks("once memory"),"rejected"],["notify","progress",x.Callbacks("memory")]],n="pending",r={state:function(){return n},always:function(){return i.done(arguments).fail(arguments),this},then:function(){var e=arguments;return x.Deferred(function(n){x.each(t,function(t,o){var s=o[0],a=x.isFunction(e[t])&&e[t];i[o[1]](function(){var e=a&&a.apply(this,arguments);e&&x.isFunction(e.promise)?e.promise().done(n.resolve).fail(n.reject).progress(n.notify):n[s+"With"](this===r?n.promise():this,a?[e]:arguments)})}),e=null}).promise()},promise:function(e){return null!=e?x.extend(e,r):r}},i={};return r.pipe=r.then,x.each(t,function(e,o){var s=o[2],a=o[3];r[o[1]]=s.add,a&&s.add(function(){n=a},t[1^e][2].disable,t[2][2].lock),i[o[0]]=function(){return i[o[0]+"With"](this===i?r:this,arguments),this},i[o[0]+"With"]=s.fireWith}),r.promise(i),e&&e.call(i,i),i},when:function(e){var t=0,n=d.call(arguments),r=n.length,i=1!==r||e&&x.isFunction(e.promise)?r:0,o=1===i?e:x.Deferred(),s=function(e,t,n){return function(r){t[e]=this,n[e]=arguments.length>1?d.call(arguments):r,n===a?o.notifyWith(t,n):--i||o.resolveWith(t,n)}},a,u,l;if(r>1)for(a=Array(r),u=Array(r),l=Array(r);r>t;t++)n[t]&&x.isFunction(n[t].promise)?n[t].promise().done(s(t,l,n)).fail(o.reject).progress(s(t,u,a)):--i;return i||o.resolveWith(l,n),o.promise()}}),x.support=function(t){var n=o.createElement("input"),r=o.createDocumentFragment(),i=o.createElement("div"),s=o.createElement("select"),a=s.appendChild(o.createElement("option"));return n.type?(n.type="checkbox",t.checkOn=""!==n.value,t.optSelected=a.selected,t.reliableMarginRight=!0,t.boxSizingReliable=!0,t.pixelPosition=!1,n.checked=!0,t.noCloneChecked=n.cloneNode(!0).checked,s.disabled=!0,t.optDisabled=!a.disabled,n=o.createElement("input"),n.value="t",n.type="radio",t.radioValue="t"===n.value,n.setAttribute("checked","t"),n.setAttribute("name","t"),r.appendChild(n),t.checkClone=r.cloneNode(!0).cloneNode(!0).lastChild.checked,t.focusinBubbles="onfocusin"in e,i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",t.clearCloneStyle="content-box"===i.style.backgroundClip,x(function(){var n,r,s="padding:0;margin:0;border:0;display:block;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box",a=o.getElementsByTagName("body")[0];a&&(n=o.createElement("div"),n.style.cssText="border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px",a.appendChild(n).appendChild(i),i.innerHTML="",i.style.cssText="-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%",x.swap(a,null!=a.style.zoom?{zoom:1}:{},function(){t.boxSizing=4===i.offsetWidth}),e.getComputedStyle&&(t.pixelPosition="1%"!==(e.getComputedStyle(i,null)||{}).top,t.boxSizingReliable="4px"===(e.getComputedStyle(i,null)||{width:"4px"}).width,r=i.appendChild(o.createElement("div")),r.style.cssText=i.style.cssText=s,r.style.marginRight=r.style.width="0",i.style.width="1px",t.reliableMarginRight=!parseFloat((e.getComputedStyle(r,null)||{}).marginRight)),a.removeChild(n))}),t):t}({});var L,q,H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,O=/([A-Z])/g;function F(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=x.expando+Math.random()}F.uid=1,F.accepts=function(e){return e.nodeType?1===e.nodeType||9===e.nodeType:!0},F.prototype={key:function(e){if(!F.accepts(e))return 0;var t={},n=e[this.expando];if(!n){n=F.uid++;try{t[this.expando]={value:n},Object.defineProperties(e,t)}catch(r){t[this.expando]=n,x.extend(e,t)}}return this.cache[n]||(this.cache[n]={}),n},set:function(e,t,n){var r,i=this.key(e),o=this.cache[i];if("string"==typeof t)o[t]=n;else if(x.isEmptyObject(o))this.cache[i]=t;else for(r in t)o[r]=t[r]},get:function(e,t){var n=this.cache[this.key(e)];return t===undefined?n:n[t]},access:function(e,t,n){return t===undefined||t&&"string"==typeof t&&n===undefined?this.get(e,t):(this.set(e,t,n),n!==undefined?n:t)},remove:function(e,t){var n,r,i=this.key(e),o=this.cache[i];if(t===undefined)this.cache[i]={};else{x.isArray(t)?r=t.concat(t.map(x.camelCase)):t in o?r=[t]:(r=x.camelCase(t),r=r in o?[r]:r.match(w)||[]),n=r.length;while(n--)delete o[r[n]]}},hasData:function(e){return!x.isEmptyObject(this.cache[e[this.expando]]||{})},discard:function(e){delete this.cache[this.key(e)]}},L=new F,q=new F,x.extend({acceptData:F.accepts,hasData:function(e){return L.hasData(e)||q.hasData(e)},data:function(e,t,n){return L.access(e,t,n)},removeData:function(e,t){L.remove(e,t)},_data:function(e,t,n){return q.access(e,t,n)},_removeData:function(e,t){q.remove(e,t)}}),x.fn.extend({data:function(e,t){var n,r,i=this[0],o=0,s=null;if(e===undefined){if(this.length&&(s=L.get(i),1===i.nodeType&&!q.get(i,"hasDataAttrs"))){for(n=i.attributes;n.length>o;o++)r=n[o].name,0===r.indexOf("data-")&&(r=x.camelCase(r.substring(5)),P(i,r,s[r]));q.set(i,"hasDataAttrs",!0)}return s}return"object"==typeof e?this.each(function(){L.set(this,e)}):x.access(this,function(t){var n,r=x.camelCase(e);if(i&&t===undefined){if(n=L.get(i,e),n!==undefined)return n;if(n=L.get(i,r),n!==undefined)return n;if(n=P(i,r,undefined),n!==undefined)return n}else this.each(function(){var n=L.get(this,r);L.set(this,r,t),-1!==e.indexOf("-")&&n!==undefined&&L.set(this,e,t)})},null,t,arguments.length>1,null,!0)},removeData:function(e){return this.each(function(){L.remove(this,e)})}});function P(e,t,n){var r;if(n===undefined&&1===e.nodeType)if(r="data-"+t.replace(O,"-$1").toLowerCase(),n=e.getAttribute(r),"string"==typeof n){try{n="true"===n?!0:"false"===n?!1:"null"===n?null:+n+""===n?+n:H.test(n)?JSON.parse(n):n}catch(i){}L.set(e,t,n)}else n=undefined;return n}x.extend({queue:function(e,t,n){var r;return e?(t=(t||"fx")+"queue",r=q.get(e,t),n&&(!r||x.isArray(n)?r=q.access(e,t,x.makeArray(n)):r.push(n)),r||[]):undefined},dequeue:function(e,t){t=t||"fx";var n=x.queue(e,t),r=n.length,i=n.shift(),o=x._queueHooks(e,t),s=function(){x.dequeue(e,t)};"inprogress"===i&&(i=n.shift(),r--),o.cur=i,i&&("fx"===t&&n.unshift("inprogress"),delete o.stop,i.call(e,s,o)),!r&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return q.get(e,n)||q.access(e,n,{empty:x.Callbacks("once memory").add(function(){q.remove(e,[t+"queue",n])})})}}),x.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),n>arguments.length?x.queue(this[0],e):t===undefined?this:this.each(function(){var n=x.queue(this,e,t); +x._queueHooks(this,e),"fx"===e&&"inprogress"!==n[0]&&x.dequeue(this,e)})},dequeue:function(e){return this.each(function(){x.dequeue(this,e)})},delay:function(e,t){return e=x.fx?x.fx.speeds[e]||e:e,t=t||"fx",this.queue(t,function(t,n){var r=setTimeout(t,e);n.stop=function(){clearTimeout(r)}})},clearQueue:function(e){return this.queue(e||"fx",[])},promise:function(e,t){var n,r=1,i=x.Deferred(),o=this,s=this.length,a=function(){--r||i.resolveWith(o,[o])};"string"!=typeof e&&(t=e,e=undefined),e=e||"fx";while(s--)n=q.get(o[s],e+"queueHooks"),n&&n.empty&&(r++,n.empty.add(a));return a(),i.promise(t)}});var R,M,W=/[\t\r\n]/g,$=/\r/g,B=/^(?:input|select|textarea|button)$/i;x.fn.extend({attr:function(e,t){return x.access(this,x.attr,e,t,arguments.length>1)},removeAttr:function(e){return this.each(function(){x.removeAttr(this,e)})},prop:function(e,t){return x.access(this,x.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each(function(){delete this[x.propFix[e]||e]})},addClass:function(e){var t,n,r,i,o,s=0,a=this.length,u="string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).addClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):" ")){o=0;while(i=t[o++])0>r.indexOf(" "+i+" ")&&(r+=i+" ");n.className=x.trim(r)}return this},removeClass:function(e){var t,n,r,i,o,s=0,a=this.length,u=0===arguments.length||"string"==typeof e&&e;if(x.isFunction(e))return this.each(function(t){x(this).removeClass(e.call(this,t,this.className))});if(u)for(t=(e||"").match(w)||[];a>s;s++)if(n=this[s],r=1===n.nodeType&&(n.className?(" "+n.className+" ").replace(W," "):"")){o=0;while(i=t[o++])while(r.indexOf(" "+i+" ")>=0)r=r.replace(" "+i+" "," ");n.className=e?x.trim(r):""}return this},toggleClass:function(e,t){var n=typeof e,i="boolean"==typeof t;return x.isFunction(e)?this.each(function(n){x(this).toggleClass(e.call(this,n,this.className,t),t)}):this.each(function(){if("string"===n){var o,s=0,a=x(this),u=t,l=e.match(w)||[];while(o=l[s++])u=i?u:!a.hasClass(o),a[u?"addClass":"removeClass"](o)}else(n===r||"boolean"===n)&&(this.className&&q.set(this,"__className__",this.className),this.className=this.className||e===!1?"":q.get(this,"__className__")||"")})},hasClass:function(e){var t=" "+e+" ",n=0,r=this.length;for(;r>n;n++)if(1===this[n].nodeType&&(" "+this[n].className+" ").replace(W," ").indexOf(t)>=0)return!0;return!1},val:function(e){var t,n,r,i=this[0];{if(arguments.length)return r=x.isFunction(e),this.each(function(n){var i,o=x(this);1===this.nodeType&&(i=r?e.call(this,n,o.val()):e,null==i?i="":"number"==typeof i?i+="":x.isArray(i)&&(i=x.map(i,function(e){return null==e?"":e+""})),t=x.valHooks[this.type]||x.valHooks[this.nodeName.toLowerCase()],t&&"set"in t&&t.set(this,i,"value")!==undefined||(this.value=i))});if(i)return t=x.valHooks[i.type]||x.valHooks[i.nodeName.toLowerCase()],t&&"get"in t&&(n=t.get(i,"value"))!==undefined?n:(n=i.value,"string"==typeof n?n.replace($,""):null==n?"":n)}}}),x.extend({valHooks:{option:{get:function(e){var t=e.attributes.value;return!t||t.specified?e.value:e.text}},select:{get:function(e){var t,n,r=e.options,i=e.selectedIndex,o="select-one"===e.type||0>i,s=o?null:[],a=o?i+1:r.length,u=0>i?a:o?i:0;for(;a>u;u++)if(n=r[u],!(!n.selected&&u!==i||(x.support.optDisabled?n.disabled:null!==n.getAttribute("disabled"))||n.parentNode.disabled&&x.nodeName(n.parentNode,"optgroup"))){if(t=x(n).val(),o)return t;s.push(t)}return s},set:function(e,t){var n,r,i=e.options,o=x.makeArray(t),s=i.length;while(s--)r=i[s],(r.selected=x.inArray(x(r).val(),o)>=0)&&(n=!0);return n||(e.selectedIndex=-1),o}}},attr:function(e,t,n){var i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return typeof e.getAttribute===r?x.prop(e,t,n):(1===s&&x.isXMLDoc(e)||(t=t.toLowerCase(),i=x.attrHooks[t]||(x.expr.match.boolean.test(t)?M:R)),n===undefined?i&&"get"in i&&null!==(o=i.get(e,t))?o:(o=x.find.attr(e,t),null==o?undefined:o):null!==n?i&&"set"in i&&(o=i.set(e,n,t))!==undefined?o:(e.setAttribute(t,n+""),n):(x.removeAttr(e,t),undefined))},removeAttr:function(e,t){var n,r,i=0,o=t&&t.match(w);if(o&&1===e.nodeType)while(n=o[i++])r=x.propFix[n]||n,x.expr.match.boolean.test(n)&&(e[r]=!1),e.removeAttribute(n)},attrHooks:{type:{set:function(e,t){if(!x.support.radioValue&&"radio"===t&&x.nodeName(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},propFix:{"for":"htmlFor","class":"className"},prop:function(e,t,n){var r,i,o,s=e.nodeType;if(e&&3!==s&&8!==s&&2!==s)return o=1!==s||!x.isXMLDoc(e),o&&(t=x.propFix[t]||t,i=x.propHooks[t]),n!==undefined?i&&"set"in i&&(r=i.set(e,n,t))!==undefined?r:e[t]=n:i&&"get"in i&&null!==(r=i.get(e,t))?r:e[t]},propHooks:{tabIndex:{get:function(e){return e.hasAttribute("tabindex")||B.test(e.nodeName)||e.href?e.tabIndex:-1}}}}),M={set:function(e,t,n){return t===!1?x.removeAttr(e,n):e.setAttribute(n,n),n}},x.each(x.expr.match.boolean.source.match(/\w+/g),function(e,t){var n=x.expr.attrHandle[t]||x.find.attr;x.expr.attrHandle[t]=function(e,t,r){var i=x.expr.attrHandle[t],o=r?undefined:(x.expr.attrHandle[t]=undefined)!=n(e,t,r)?t.toLowerCase():null;return x.expr.attrHandle[t]=i,o}}),x.support.optSelected||(x.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null}}),x.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){x.propFix[this.toLowerCase()]=this}),x.each(["radio","checkbox"],function(){x.valHooks[this]={set:function(e,t){return x.isArray(t)?e.checked=x.inArray(x(e).val(),t)>=0:undefined}},x.support.checkOn||(x.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})});var I=/^key/,z=/^(?:mouse|contextmenu)|click/,_=/^(?:focusinfocus|focusoutblur)$/,X=/^([^.]*)(?:\.(.+)|)$/;function U(){return!0}function Y(){return!1}function V(){try{return o.activeElement}catch(e){}}x.event={global:{},add:function(e,t,n,i,o){var s,a,u,l,c,f,p,h,d,g,m,y=q.get(e);if(y){n.handler&&(s=n,n=s.handler,o=s.selector),n.guid||(n.guid=x.guid++),(l=y.events)||(l=y.events={}),(a=y.handle)||(a=y.handle=function(e){return typeof x===r||e&&x.event.triggered===e.type?undefined:x.event.dispatch.apply(a.elem,arguments)},a.elem=e),t=(t||"").match(w)||[""],c=t.length;while(c--)u=X.exec(t[c])||[],d=m=u[1],g=(u[2]||"").split(".").sort(),d&&(p=x.event.special[d]||{},d=(o?p.delegateType:p.bindType)||d,p=x.event.special[d]||{},f=x.extend({type:d,origType:m,data:i,handler:n,guid:n.guid,selector:o,needsContext:o&&x.expr.match.needsContext.test(o),namespace:g.join(".")},s),(h=l[d])||(h=l[d]=[],h.delegateCount=0,p.setup&&p.setup.call(e,i,g,a)!==!1||e.addEventListener&&e.addEventListener(d,a,!1)),p.add&&(p.add.call(e,f),f.handler.guid||(f.handler.guid=n.guid)),o?h.splice(h.delegateCount++,0,f):h.push(f),x.event.global[d]=!0);e=null}},remove:function(e,t,n,r,i){var o,s,a,u,l,c,f,p,h,d,g,m=q.hasData(e)&&q.get(e);if(m&&(u=m.events)){t=(t||"").match(w)||[""],l=t.length;while(l--)if(a=X.exec(t[l])||[],h=g=a[1],d=(a[2]||"").split(".").sort(),h){f=x.event.special[h]||{},h=(r?f.delegateType:f.bindType)||h,p=u[h]||[],a=a[2]&&RegExp("(^|\\.)"+d.join("\\.(?:.*\\.|)")+"(\\.|$)"),s=o=p.length;while(o--)c=p[o],!i&&g!==c.origType||n&&n.guid!==c.guid||a&&!a.test(c.namespace)||r&&r!==c.selector&&("**"!==r||!c.selector)||(p.splice(o,1),c.selector&&p.delegateCount--,f.remove&&f.remove.call(e,c));s&&!p.length&&(f.teardown&&f.teardown.call(e,d,m.handle)!==!1||x.removeEvent(e,h,m.handle),delete u[h])}else for(h in u)x.event.remove(e,h+t[l],n,r,!0);x.isEmptyObject(u)&&(delete m.handle,q.remove(e,"events"))}},trigger:function(t,n,r,i){var s,a,u,l,c,f,p,h=[r||o],d=y.call(t,"type")?t.type:t,g=y.call(t,"namespace")?t.namespace.split("."):[];if(a=u=r=r||o,3!==r.nodeType&&8!==r.nodeType&&!_.test(d+x.event.triggered)&&(d.indexOf(".")>=0&&(g=d.split("."),d=g.shift(),g.sort()),c=0>d.indexOf(":")&&"on"+d,t=t[x.expando]?t:new x.Event(d,"object"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=g.join("."),t.namespace_re=t.namespace?RegExp("(^|\\.)"+g.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=undefined,t.target||(t.target=r),n=null==n?[t]:x.makeArray(n,[t]),p=x.event.special[d]||{},i||!p.trigger||p.trigger.apply(r,n)!==!1)){if(!i&&!p.noBubble&&!x.isWindow(r)){for(l=p.delegateType||d,_.test(l+d)||(a=a.parentNode);a;a=a.parentNode)h.push(a),u=a;u===(r.ownerDocument||o)&&h.push(u.defaultView||u.parentWindow||e)}s=0;while((a=h[s++])&&!t.isPropagationStopped())t.type=s>1?l:p.bindType||d,f=(q.get(a,"events")||{})[t.type]&&q.get(a,"handle"),f&&f.apply(a,n),f=c&&a[c],f&&x.acceptData(a)&&f.apply&&f.apply(a,n)===!1&&t.preventDefault();return t.type=d,i||t.isDefaultPrevented()||p._default&&p._default.apply(h.pop(),n)!==!1||!x.acceptData(r)||c&&x.isFunction(r[d])&&!x.isWindow(r)&&(u=r[c],u&&(r[c]=null),x.event.triggered=d,r[d](),x.event.triggered=undefined,u&&(r[c]=u)),t.result}},dispatch:function(e){e=x.event.fix(e);var t,n,r,i,o,s=[],a=d.call(arguments),u=(q.get(this,"events")||{})[e.type]||[],l=x.event.special[e.type]||{};if(a[0]=e,e.delegateTarget=this,!l.preDispatch||l.preDispatch.call(this,e)!==!1){s=x.event.handlers.call(this,e,u),t=0;while((i=s[t++])&&!e.isPropagationStopped()){e.currentTarget=i.elem,n=0;while((o=i.handlers[n++])&&!e.isImmediatePropagationStopped())(!e.namespace_re||e.namespace_re.test(o.namespace))&&(e.handleObj=o,e.data=o.data,r=((x.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,a),r!==undefined&&(e.result=r)===!1&&(e.preventDefault(),e.stopPropagation()))}return l.postDispatch&&l.postDispatch.call(this,e),e.result}},handlers:function(e,t){var n,r,i,o,s=[],a=t.delegateCount,u=e.target;if(a&&u.nodeType&&(!e.button||"click"!==e.type))for(;u!==this;u=u.parentNode||this)if(u.disabled!==!0||"click"!==e.type){for(r=[],n=0;a>n;n++)o=t[n],i=o.selector+" ",r[i]===undefined&&(r[i]=o.needsContext?x(i,this).index(u)>=0:x.find(i,this,null,[u]).length),r[i]&&r.push(o);r.length&&s.push({elem:u,handlers:r})}return t.length>a&&s.push({elem:this,handlers:t.slice(a)}),s},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(e,t){return null==e.which&&(e.which=null!=t.charCode?t.charCode:t.keyCode),e}},mouseHooks:{props:"button buttons clientX clientY offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(e,t){var n,r,i,s=t.button;return null==e.pageX&&null!=t.clientX&&(n=e.target.ownerDocument||o,r=n.documentElement,i=n.body,e.pageX=t.clientX+(r&&r.scrollLeft||i&&i.scrollLeft||0)-(r&&r.clientLeft||i&&i.clientLeft||0),e.pageY=t.clientY+(r&&r.scrollTop||i&&i.scrollTop||0)-(r&&r.clientTop||i&&i.clientTop||0)),e.which||s===undefined||(e.which=1&s?1:2&s?3:4&s?2:0),e}},fix:function(e){if(e[x.expando])return e;var t,n,r,i=e.type,o=e,s=this.fixHooks[i];s||(this.fixHooks[i]=s=z.test(i)?this.mouseHooks:I.test(i)?this.keyHooks:{}),r=s.props?this.props.concat(s.props):this.props,e=new x.Event(o),t=r.length;while(t--)n=r[t],e[n]=o[n];return 3===e.target.nodeType&&(e.target=e.target.parentNode),s.filter?s.filter(e,o):e},special:{load:{noBubble:!0},focus:{trigger:function(){return this!==V()&&this.focus?(this.focus(),!1):undefined},delegateType:"focusin"},blur:{trigger:function(){return this===V()&&this.blur?(this.blur(),!1):undefined},delegateType:"focusout"},click:{trigger:function(){return"checkbox"===this.type&&this.click&&x.nodeName(this,"input")?(this.click(),!1):undefined},_default:function(e){return x.nodeName(e.target,"a")}},beforeunload:{postDispatch:function(e){e.result!==undefined&&(e.originalEvent.returnValue=e.result)}}},simulate:function(e,t,n,r){var i=x.extend(new x.Event,n,{type:e,isSimulated:!0,originalEvent:{}});r?x.event.trigger(i,null,t):x.event.dispatch.call(t,i),i.isDefaultPrevented()&&n.preventDefault()}},x.removeEvent=function(e,t,n){e.removeEventListener&&e.removeEventListener(t,n,!1)},x.Event=function(e,t){return this instanceof x.Event?(e&&e.type?(this.originalEvent=e,this.type=e.type,this.isDefaultPrevented=e.defaultPrevented||e.getPreventDefault&&e.getPreventDefault()?U:Y):this.type=e,t&&x.extend(this,t),this.timeStamp=e&&e.timeStamp||x.now(),this[x.expando]=!0,undefined):new x.Event(e,t)},x.Event.prototype={isDefaultPrevented:Y,isPropagationStopped:Y,isImmediatePropagationStopped:Y,preventDefault:function(){var e=this.originalEvent;this.isDefaultPrevented=U,e&&e.preventDefault&&e.preventDefault()},stopPropagation:function(){var e=this.originalEvent;this.isPropagationStopped=U,e&&e.stopPropagation&&e.stopPropagation()},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=U,this.stopPropagation()}},x.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(e,t){x.event.special[e]={delegateType:t,bindType:t,handle:function(e){var n,r=this,i=e.relatedTarget,o=e.handleObj;return(!i||i!==r&&!x.contains(r,i))&&(e.type=o.origType,n=o.handler.apply(this,arguments),e.type=t),n}}}),x.support.focusinBubbles||x.each({focus:"focusin",blur:"focusout"},function(e,t){var n=0,r=function(e){x.event.simulate(t,e.target,x.event.fix(e),!0)};x.event.special[t]={setup:function(){0===n++&&o.addEventListener(e,r,!0)},teardown:function(){0===--n&&o.removeEventListener(e,r,!0)}}}),x.fn.extend({on:function(e,t,n,r,i){var o,s;if("object"==typeof e){"string"!=typeof t&&(n=n||t,t=undefined);for(s in e)this.on(s,t,n,e[s],i);return this}if(null==n&&null==r?(r=t,n=t=undefined):null==r&&("string"==typeof t?(r=n,n=undefined):(r=n,n=t,t=undefined)),r===!1)r=Y;else if(!r)return this;return 1===i&&(o=r,r=function(e){return x().off(e),o.apply(this,arguments)},r.guid=o.guid||(o.guid=x.guid++)),this.each(function(){x.event.add(this,e,r,n,t)})},one:function(e,t,n,r){return this.on(e,t,n,r,1)},off:function(e,t,n){var r,i;if(e&&e.preventDefault&&e.handleObj)return r=e.handleObj,x(e.delegateTarget).off(r.namespace?r.origType+"."+r.namespace:r.origType,r.selector,r.handler),this;if("object"==typeof e){for(i in e)this.off(i,t,e[i]);return this}return(t===!1||"function"==typeof t)&&(n=t,t=undefined),n===!1&&(n=Y),this.each(function(){x.event.remove(this,e,n,t)})},trigger:function(e,t){return this.each(function(){x.event.trigger(e,t,this)})},triggerHandler:function(e,t){var n=this[0];return n?x.event.trigger(e,t,n,!0):undefined}});var G=/^.[^:#\[\.,]*$/,J=x.expr.match.needsContext,Q={children:!0,contents:!0,next:!0,prev:!0};x.fn.extend({find:function(e){var t,n,r,i=this.length;if("string"!=typeof e)return t=this,this.pushStack(x(e).filter(function(){for(r=0;i>r;r++)if(x.contains(t[r],this))return!0}));for(n=[],r=0;i>r;r++)x.find(e,this[r],n);return n=this.pushStack(i>1?x.unique(n):n),n.selector=(this.selector?this.selector+" ":"")+e,n},has:function(e){var t=x(e,this),n=t.length;return this.filter(function(){var e=0;for(;n>e;e++)if(x.contains(this,t[e]))return!0})},not:function(e){return this.pushStack(Z(this,e||[],!0))},filter:function(e){return this.pushStack(Z(this,e||[],!1))},is:function(e){return!!e&&("string"==typeof e?J.test(e)?x(e,this.context).index(this[0])>=0:x.filter(e,this).length>0:this.filter(e).length>0)},closest:function(e,t){var n,r=0,i=this.length,o=[],s=J.test(e)||"string"!=typeof e?x(e,t||this.context):0;for(;i>r;r++)for(n=this[r];n&&n!==t;n=n.parentNode)if(11>n.nodeType&&(s?s.index(n)>-1:1===n.nodeType&&x.find.matchesSelector(n,e))){n=o.push(n);break}return this.pushStack(o.length>1?x.unique(o):o)},index:function(e){return e?"string"==typeof e?g.call(x(e),this[0]):g.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){var n="string"==typeof e?x(e,t):x.makeArray(e&&e.nodeType?[e]:e),r=x.merge(this.get(),n);return this.pushStack(x.unique(r))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}});function K(e,t){while((e=e[t])&&1!==e.nodeType);return e}x.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return x.dir(e,"parentNode")},parentsUntil:function(e,t,n){return x.dir(e,"parentNode",n)},next:function(e){return K(e,"nextSibling")},prev:function(e){return K(e,"previousSibling")},nextAll:function(e){return x.dir(e,"nextSibling")},prevAll:function(e){return x.dir(e,"previousSibling")},nextUntil:function(e,t,n){return x.dir(e,"nextSibling",n)},prevUntil:function(e,t,n){return x.dir(e,"previousSibling",n)},siblings:function(e){return x.sibling((e.parentNode||{}).firstChild,e)},children:function(e){return x.sibling(e.firstChild)},contents:function(e){return x.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:x.merge([],e.childNodes)}},function(e,t){x.fn[e]=function(n,r){var i=x.map(this,t,n);return"Until"!==e.slice(-5)&&(r=n),r&&"string"==typeof r&&(i=x.filter(r,i)),this.length>1&&(Q[e]||x.unique(i),"p"===e[0]&&i.reverse()),this.pushStack(i)}}),x.extend({filter:function(e,t,n){var r=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===r.nodeType?x.find.matchesSelector(r,e)?[r]:[]:x.find.matches(e,x.grep(t,function(e){return 1===e.nodeType}))},dir:function(e,t,n){var r=[],i=n!==undefined;while((e=e[t])&&9!==e.nodeType)if(1===e.nodeType){if(i&&x(e).is(n))break;r.push(e)}return r},sibling:function(e,t){var n=[];for(;e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n}});function Z(e,t,n){if(x.isFunction(t))return x.grep(e,function(e,r){return!!t.call(e,r,e)!==n});if(t.nodeType)return x.grep(e,function(e){return e===t!==n});if("string"==typeof t){if(G.test(t))return x.filter(t,e,n);t=x.filter(t,e)}return x.grep(e,function(e){return g.call(t,e)>=0!==n})}var et=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,tt=/<([\w:]+)/,nt=/<|&#?\w+;/,rt=/<(?:script|style|link)/i,it=/^(?:checkbox|radio)$/i,ot=/checked\s*(?:[^=]|=\s*.checked.)/i,st=/^$|\/(?:java|ecma)script/i,at=/^true\/(.*)/,ut=/^\s*\s*$/g,lt={option:[1,""],thead:[1,"
","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};lt.optgroup=lt.option,lt.tbody=lt.tfoot=lt.colgroup=lt.caption=lt.col=lt.thead,lt.th=lt.td,x.fn.extend({text:function(e){return x.access(this,function(e){return e===undefined?x.text(this):this.empty().append((this[0]&&this[0].ownerDocument||o).createTextNode(e))},null,e,arguments.length)},append:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=ct(this,e);t.appendChild(e)}})},prepend:function(){return this.domManip(arguments,function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=ct(this,e);t.insertBefore(e,t.firstChild)}})},before:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this)})},after:function(){return this.domManip(arguments,function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)})},remove:function(e,t){var n,r=e?x.filter(e,this):this,i=0;for(;null!=(n=r[i]);i++)t||1!==n.nodeType||x.cleanData(gt(n)),n.parentNode&&(t&&x.contains(n.ownerDocument,n)&&ht(gt(n,"script")),n.parentNode.removeChild(n));return this},empty:function(){var e,t=0;for(;null!=(e=this[t]);t++)1===e.nodeType&&(x.cleanData(gt(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null==e?!1:e,t=null==t?e:t,this.map(function(){return x.clone(this,e,t)})},html:function(e){return x.access(this,function(e){var t=this[0]||{},n=0,r=this.length;if(e===undefined&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!rt.test(e)&&!lt[(tt.exec(e)||["",""])[1].toLowerCase()]){e=e.replace(et,"<$1>");try{for(;r>n;n++)t=this[n]||{},1===t.nodeType&&(x.cleanData(gt(t,!1)),t.innerHTML=e);t=0}catch(i){}}t&&this.empty().append(e)},null,e,arguments.length)},replaceWith:function(){var e=x.map(this,function(e){return[e.nextSibling,e.parentNode]}),t=0;return this.domManip(arguments,function(n){var r=e[t++],i=e[t++];i&&(x(this).remove(),i.insertBefore(n,r))},!0),t?this:this.remove()},detach:function(e){return this.remove(e,!0)},domManip:function(e,t,n){e=p.apply([],e);var r,i,o,s,a,u,l=0,c=this.length,f=this,h=c-1,d=e[0],g=x.isFunction(d);if(g||!(1>=c||"string"!=typeof d||x.support.checkClone)&&ot.test(d))return this.each(function(r){var i=f.eq(r);g&&(e[0]=d.call(this,r,i.html())),i.domManip(e,t,n)});if(c&&(r=x.buildFragment(e,this[0].ownerDocument,!1,!n&&this),i=r.firstChild,1===r.childNodes.length&&(r=i),i)){for(o=x.map(gt(r,"script"),ft),s=o.length;c>l;l++)a=r,l!==h&&(a=x.clone(a,!0,!0),s&&x.merge(o,gt(a,"script"))),t.call(this[l],a,l);if(s)for(u=o[o.length-1].ownerDocument,x.map(o,pt),l=0;s>l;l++)a=o[l],st.test(a.type||"")&&!q.access(a,"globalEval")&&x.contains(u,a)&&(a.src?x._evalUrl(a.src):x.globalEval(a.textContent.replace(ut,"")))}return this}}),x.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(e,t){x.fn[e]=function(e){var n,r=[],i=x(e),o=i.length-1,s=0;for(;o>=s;s++)n=s===o?this:this.clone(!0),x(i[s])[t](n),h.apply(r,n.get());return this.pushStack(r)}}),x.extend({clone:function(e,t,n){var r,i,o,s,a=e.cloneNode(!0),u=x.contains(e.ownerDocument,e);if(!(x.support.noCloneChecked||1!==e.nodeType&&11!==e.nodeType||x.isXMLDoc(e)))for(s=gt(a),o=gt(e),r=0,i=o.length;i>r;r++)mt(o[r],s[r]);if(t)if(n)for(o=o||gt(e),s=s||gt(a),r=0,i=o.length;i>r;r++)dt(o[r],s[r]);else dt(e,a);return s=gt(a,"script"),s.length>0&&ht(s,!u&>(e,"script")),a},buildFragment:function(e,t,n,r){var i,o,s,a,u,l,c=0,f=e.length,p=t.createDocumentFragment(),h=[];for(;f>c;c++)if(i=e[c],i||0===i)if("object"===x.type(i))x.merge(h,i.nodeType?[i]:i);else if(nt.test(i)){o=o||p.appendChild(t.createElement("div")),s=(tt.exec(i)||["",""])[1].toLowerCase(),a=lt[s]||lt._default,o.innerHTML=a[1]+i.replace(et,"<$1>")+a[2],l=a[0];while(l--)o=o.firstChild;x.merge(h,o.childNodes),o=p.firstChild,o.textContent=""}else h.push(t.createTextNode(i));p.textContent="",c=0;while(i=h[c++])if((!r||-1===x.inArray(i,r))&&(u=x.contains(i.ownerDocument,i),o=gt(p.appendChild(i),"script"),u&&ht(o),n)){l=0;while(i=o[l++])st.test(i.type||"")&&n.push(i)}return p},cleanData:function(e){var t,n,r,i=e.length,o=0,s=x.event.special;for(;i>o;o++){if(n=e[o],x.acceptData(n)&&(t=q.access(n)))for(r in t.events)s[r]?x.event.remove(n,r):x.removeEvent(n,r,t.handle);L.discard(n),q.discard(n)}},_evalUrl:function(e){return x.ajax({url:e,type:"GET",dataType:"text",async:!1,global:!1,success:x.globalEval})}});function ct(e,t){return x.nodeName(e,"table")&&x.nodeName(1===t.nodeType?t:t.firstChild,"tr")?e.getElementsByTagName("tbody")[0]||e.appendChild(e.ownerDocument.createElement("tbody")):e}function ft(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function pt(e){var t=at.exec(e.type);return t?e.type=t[1]:e.removeAttribute("type"),e}function ht(e,t){var n=e.length,r=0;for(;n>r;r++)q.set(e[r],"globalEval",!t||q.get(t[r],"globalEval"))}function dt(e,t){var n,r,i,o,s,a,u,l;if(1===t.nodeType){if(q.hasData(e)&&(o=q.access(e),s=x.extend({},o),l=o.events,q.set(t,s),l)){delete s.handle,s.events={};for(i in l)for(n=0,r=l[i].length;r>n;n++)x.event.add(t,i,l[i][n])}L.hasData(e)&&(a=L.access(e),u=x.extend({},a),L.set(t,u))}}function gt(e,t){var n=e.getElementsByTagName?e.getElementsByTagName(t||"*"):e.querySelectorAll?e.querySelectorAll(t||"*"):[];return t===undefined||t&&x.nodeName(e,t)?x.merge([e],n):n}function mt(e,t){var n=t.nodeName.toLowerCase();"input"===n&&it.test(e.type)?t.checked=e.checked:("input"===n||"textarea"===n)&&(t.defaultValue=e.defaultValue)}x.fn.extend({wrapAll:function(e){var t;return x.isFunction(e)?this.each(function(t){x(this).wrapAll(e.call(this,t))}):(this[0]&&(t=x(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map(function(){var e=this;while(e.firstElementChild)e=e.firstElementChild;return e}).append(this)),this)},wrapInner:function(e){return x.isFunction(e)?this.each(function(t){x(this).wrapInner(e.call(this,t))}):this.each(function(){var t=x(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)})},wrap:function(e){var t=x.isFunction(e);return this.each(function(n){x(this).wrapAll(t?e.call(this,n):e)})},unwrap:function(){return this.parent().each(function(){x.nodeName(this,"body")||x(this).replaceWith(this.childNodes)}).end()}});var yt,vt,xt=/^(none|table(?!-c[ea]).+)/,bt=/^margin/,wt=RegExp("^("+b+")(.*)$","i"),Tt=RegExp("^("+b+")(?!px)[a-z%]+$","i"),Ct=RegExp("^([+-])=("+b+")","i"),kt={BODY:"block"},Nt={position:"absolute",visibility:"hidden",display:"block"},Et={letterSpacing:0,fontWeight:400},St=["Top","Right","Bottom","Left"],jt=["Webkit","O","Moz","ms"];function Dt(e,t){if(t in e)return t;var n=t.charAt(0).toUpperCase()+t.slice(1),r=t,i=jt.length;while(i--)if(t=jt[i]+n,t in e)return t;return r}function At(e,t){return e=t||e,"none"===x.css(e,"display")||!x.contains(e.ownerDocument,e)}function Lt(t){return e.getComputedStyle(t,null)}function qt(e,t){var n,r,i,o=[],s=0,a=e.length;for(;a>s;s++)r=e[s],r.style&&(o[s]=q.get(r,"olddisplay"),n=r.style.display,t?(o[s]||"none"!==n||(r.style.display=""),""===r.style.display&&At(r)&&(o[s]=q.access(r,"olddisplay",Pt(r.nodeName)))):o[s]||(i=At(r),(n&&"none"!==n||!i)&&q.set(r,"olddisplay",i?n:x.css(r,"display"))));for(s=0;a>s;s++)r=e[s],r.style&&(t&&"none"!==r.style.display&&""!==r.style.display||(r.style.display=t?o[s]||"":"none"));return e}x.fn.extend({css:function(e,t){return x.access(this,function(e,t,n){var r,i,o={},s=0;if(x.isArray(t)){for(r=Lt(e),i=t.length;i>s;s++)o[t[s]]=x.css(e,t[s],!1,r);return o}return n!==undefined?x.style(e,t,n):x.css(e,t)},e,t,arguments.length>1)},show:function(){return qt(this,!0)},hide:function(){return qt(this)},toggle:function(e){var t="boolean"==typeof e;return this.each(function(){(t?e:At(this))?x(this).show():x(this).hide()})}}),x.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=yt(e,"opacity");return""===n?"1":n}}}},cssNumber:{columnCount:!0,fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(e,t,n,r){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var i,o,s,a=x.camelCase(t),u=e.style;return t=x.cssProps[a]||(x.cssProps[a]=Dt(u,a)),s=x.cssHooks[t]||x.cssHooks[a],n===undefined?s&&"get"in s&&(i=s.get(e,!1,r))!==undefined?i:u[t]:(o=typeof n,"string"===o&&(i=Ct.exec(n))&&(n=(i[1]+1)*i[2]+parseFloat(x.css(e,t)),o="number"),null==n||"number"===o&&isNaN(n)||("number"!==o||x.cssNumber[a]||(n+="px"),x.support.clearCloneStyle||""!==n||0!==t.indexOf("background")||(u[t]="inherit"),s&&"set"in s&&(n=s.set(e,n,r))===undefined||(u[t]=n)),undefined)}},css:function(e,t,n,r){var i,o,s,a=x.camelCase(t);return t=x.cssProps[a]||(x.cssProps[a]=Dt(e.style,a)),s=x.cssHooks[t]||x.cssHooks[a],s&&"get"in s&&(i=s.get(e,!0,n)),i===undefined&&(i=yt(e,t,r)),"normal"===i&&t in Et&&(i=Et[t]),""===n||n?(o=parseFloat(i),n===!0||x.isNumeric(o)?o||0:i):i}}),yt=function(e,t,n){var r,i,o,s=n||Lt(e),a=s?s.getPropertyValue(t)||s[t]:undefined,u=e.style;return s&&(""!==a||x.contains(e.ownerDocument,e)||(a=x.style(e,t)),Tt.test(a)&&bt.test(t)&&(r=u.width,i=u.minWidth,o=u.maxWidth,u.minWidth=u.maxWidth=u.width=a,a=s.width,u.width=r,u.minWidth=i,u.maxWidth=o)),a};function Ht(e,t,n){var r=wt.exec(t);return r?Math.max(0,r[1]-(n||0))+(r[2]||"px"):t}function Ot(e,t,n,r,i){var o=n===(r?"border":"content")?4:"width"===t?1:0,s=0;for(;4>o;o+=2)"margin"===n&&(s+=x.css(e,n+St[o],!0,i)),r?("content"===n&&(s-=x.css(e,"padding"+St[o],!0,i)),"margin"!==n&&(s-=x.css(e,"border"+St[o]+"Width",!0,i))):(s+=x.css(e,"padding"+St[o],!0,i),"padding"!==n&&(s+=x.css(e,"border"+St[o]+"Width",!0,i)));return s}function Ft(e,t,n){var r=!0,i="width"===t?e.offsetWidth:e.offsetHeight,o=Lt(e),s=x.support.boxSizing&&"border-box"===x.css(e,"boxSizing",!1,o);if(0>=i||null==i){if(i=yt(e,t,o),(0>i||null==i)&&(i=e.style[t]),Tt.test(i))return i;r=s&&(x.support.boxSizingReliable||i===e.style[t]),i=parseFloat(i)||0}return i+Ot(e,t,n||(s?"border":"content"),r,o)+"px"}function Pt(e){var t=o,n=kt[e];return n||(n=Rt(e,t),"none"!==n&&n||(vt=(vt||x("