diff --git a/.gitignore b/.gitignore index c4ab21861..0de481a26 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ .DS_Store */**/.DS_Store node_modules/ -components \ No newline at end of file +components +node_modules +bower_components \ No newline at end of file diff --git a/API.js b/API.js new file mode 100644 index 000000000..dbf3c8b63 --- /dev/null +++ b/API.js @@ -0,0 +1,113 @@ +// API + +// Epub Rendition +// > Package (book) +// - Manifest (files) +// - Metadata (info) +// - Spine (order) +// - Navagation (toc) + +// Need to split out rendering and book completely +// Something like +var epub = ePub("moby-dick.epub"); +var epub = ePub("s3path/ip/moby-dick.opf"); + +var rendition = ePub.Paginate(epub); + +var rendition = ePub.Render.Paginated(book); +var rendition = ePub.Render.Scrolling(book); + +ePub.renderer.register(EPUBJS.Paginate); + +// Returns a Scroll Controller, Attachs to a document (or window?) +var epub = ePub("moby-dick.epub"); + +var epub = ePub(); +var book = epub.open(_url) + return epub + +// Creates a Book Package object, parses manifest +var book = epub.open("moby-dick.epub"); +var book = epub.open("META-INF/container.xml"); +var book = epub.open("package.opf"); //-- maybe, not in spec? + // Set the store + + // Unzip if needed + + // Get the container + + // Get the package path + book = new Book("path/to/book/package.opf", store); + unpacked = book.unpack(); + + return unpacked + +book.unpack() + book.manifest + book.metadata + book.spine + book.navigation.toc + // book.navigation.landmarks + // book.navigation.lot + return book + +// Loads a chapter of the Book +var section = book.spine.get(1); +var section = book.spine.get("chap1.html"); +var section = book.spine.get("#id1234"); + +// Alias for spine +var section = book.section("epubcfi(/6/30[id-id2640702])"); +var section = book.section(1); + +book.loaded.navigation.then() +book.navigation.get() +book.navigation.get("#toc-chap-1") +book.navigation.get("chap1.html") + +// Returns the straight html of the chapter +//-- When does the chapter content processing happen? +section.render() + +// Returns a new renderer +var rendition = epub.renderer(book, type); + return new Renderer(book, type) + +// Render to a div +rendition.attachTo("elementID"); +// or +body.appendChild(rendition.container); + +// Display the provided chapter +rendition.display(chapter); + +// Rendering sugar ? +epub.renderTo("elementID", _type); + rendition = epub.renderer(book, _type); + rendition.attachTo("elementID"); + epub.display(); + return rendition; + +epub.display(); +epub.display(1); +epub.display("chapt1.html#something"); +epub.display("epubcfi(/6/30[id-id2640702]!2/4/1:0)"); + section = book.section(_arg); + rendition.display(section); + section.render(); + section.load(); + return rendition; + +epub.rendition.backwards(); +epub.rendition.forwards(); + +epub.rendition.addStyle(); +epub.rendition.addStyles(); + + +epub.find("query"); +section.find("query"); + +epub.on("noAuth", function(){ + +}); \ No newline at end of file diff --git a/Gruntfile.js b/Gruntfile.js index 035334c59..e9f1acf75 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -1,92 +1,32 @@ module.exports = function(grunt) { - // Project configuration. - grunt.initConfig({ - pkg: '', - meta: { - banner: '/*! <%= pkg.name %> - v<%= pkg.version %> - ' + - '<%= grunt.template.today("yyyy-mm-dd") %> */' - }, - concat_sourcemap : { - 'build/epub_no_underscore.js': ['', 'libs/rsvp/rsvp.js', 'src/*.js'], - 'build/epub.js': ['', 'libs/underscore/underscore-min.js', 'libs/rsvp/rsvp.js', 'src/*.js'], - 'build/reader.js': ['', 'reader_src/reader.js', 'reader_src/controllers/*.js'], - 'build/hooks.js': ['', 'hooks/default/*.js'] - }, - uglify: { - my_target: { - options: { - preserveComments: 'some', - sourceMap: true - }, - files: { - 'build/epub.min.js': ['build/epub.js'], - 'build/reader.min.js': ['build/reader.js'], - 'build/hooks.min.js': ['build/hooks.js'], - 'build/libs/zip.min.js': ['libs/zip/zip.js', 'libs/zip/zip-fs.js', 'libs/zip/zip-ext.js', 'libs/zip/mime-types.js'], - 'build/libs/inflate.js': ['libs/zip/inflate.js'] - } - } - }, - copy: { - main: { - files: [ - {src: 'build/epub.js', dest: 'reader/js/epub.min.js'}, - {src: 'build/hooks.min.js', dest: 'reader/js/hooks.min.js'}, - {src: 'build/reader.min.js', dest: 'reader/js/reader.min.js'}, - {src: 'build/epub.min.map', dest: 'reader/js/epub.js.map'}, - {src: 'build/hooks.min.map', dest: 'reader/js/hooks.js.map'}, - {src: 'build/reader.js.map', dest: 'reader/js/hooks.js.map'}, - {src: 'build/zip/*', dest: 'reader/js/libs/', filter: 'isFile'}, - {src: 'libs/jquery/jquery-2.1.0.min.js', dest:'reader/js/libs/jquery-2.1.0.min.js'}, - {src: 'libs/screenfull.min.js', dest: 'reader/js/libs/screenfull.min.js'}, - {src: 'reader_src/plugins/search.js', dest: 'reader/js/plugins/search.js'}, - {src: 'reader_src/plugins/hypothesis.js', dest: 'reader/js/plugins/hypothesis.js'}, - {src: 'hooks/extensions/highlight.js', dest: 'reader/js/hooks/extensions/highlight.js'} - - ] - }, - }, - jshint: { - all: ['src/**/*.js'],//, 'reader/**/*.js'] - options : { - // Environments - "browser": true, - "devel": true, - "worker": true, - - // Enforcing - //"maxlen": 80, - //"quotmark": "single", - "trailing": true, - "strict": false, - - // Relaxing - "boss": true, - "funcscope": true, - "globalstrict": true, - "loopfunc": true, - "maxerr": 1000, - "nonstandard": true, - "sub": true, - "validthis": true, - - "globals": { - "_": false, - "define" : false, - "module" : false - } - } - } - }); - - grunt.loadNpmTasks('grunt-contrib-concat'); - grunt.loadNpmTasks('grunt-contrib-uglify'); - grunt.loadNpmTasks('grunt-contrib-jshint'); - grunt.loadNpmTasks('grunt-concat-sourcemap'); - grunt.loadNpmTasks('grunt-contrib-copy'); - - // Default task(s). - grunt.registerTask('default', ['jshint', 'concat_sourcemap', 'uglify', 'copy']); -}; + // Project configuration. + grunt.initConfig({ + pkg: grunt.file.readJSON('package.json'), + uglify: { + options: { + banner: '/*! <%= pkg.name %> <%= grunt.template.today("yyyy-mm-dd") %> */\n' + }, + build: { + src: 'src/<%= pkg.name %>.js', + dest: 'build/<%= pkg.name %>.min.js' + } + }, + connect: { + server: { + options: { + port: 9001, + base: '.' + } + } + } + }); + grunt.loadNpmTasks('grunt-contrib-uglify'); + grunt.loadNpmTasks('grunt-contrib-connect'); + + // Default task(s). + grunt.registerTask('default', ['uglify']); + grunt.registerTask('serve', ['connect']); + +}; \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 963525bae..000000000 --- a/README.md +++ /dev/null @@ -1,186 +0,0 @@ -Epub.js -================================ - -![FuturePress Views](http://fchasen.com/futurepress/fp.png) - -Epub.js is a JavaScript library for rendering ePub documents in the browser, across many devices. - -Epub.js provides an interface for common ebook functions (such as rendering, persistence and pagination) without the need to develop a dedicated application or plugin. Importantly, it has an incredibly permissive [Free BSD](http://en.wikipedia.org/wiki/BSD_licenses) license. - -[Try it while reading Moby Dick](http://futurepress.github.com/epub.js/reader/) - - -Why EPUB -------------------------- - -![Why EPUB](http://fchasen.com/futurepress/whyepub.png) - -The [EPUB standard](http://www.idpf.org/epub/30/spec/epub30-overview.html) is a widely used and easily convertible format. Many books are currently in this format, and it is convertible to many other formats (such as PDF, Mobi and iBooks). - -An unzipped ePUB3 is a collection of HTML5 files, CSS, images and other media – just like any other website. However, it enforces a schema of book components, which allows us to render a book and its parts based on a controlled vocabulary. - -More specifically, the ePUB schema standardizes the table of contents, provides a manifest that enables the caching of the entire book, and separates the storage of the content from how it’s displayed. - -Getting Started -------------------------- - -Get the minified code from the build folder: - -```html - -``` - -If you plan on using compressed (zipped) epubs (any .epub file) include the minified version of [zip.js](http://gildas-lormeau.github.io/zip.js/) - -Also make sure to set ```EPUBJS.filePath``` to the directory containing ```inflate.js``` - -```html - - - - -``` - -Setup a element to render to: - -```html -
-
-
-``` - -Create the new ePub, and then render it to that element: - -```html - -``` - -See the [Documentation](https://github.com/futurepress/epub.js/blob/master/documentation/README.md) to view events and methods for getting the books contents. - -The [Examples](https://github.com/futurepress/epub.js/tree/master/examples) are likely the best place to learn how to use the library. - - -Recent Updates -------------------------- -+ v2 splits the render method from the layout and renderer. Currently only iframe rendering is supported, but this change will allow for new render methods in the future. See the breaking changes to the renderer [here](https://github.com/futurepress/epub.js/blob/master/documentation/README.md#renderer). - -+ Work-in-progress pagination support using EPUB page-lists. See a [usage example](http://futurepress.github.io/epub.js/examples/pagination.html). ```renderer:pageChanged``` has changed to ```renderer:locationChanged``` and a ```book:pageChanged``` event was added to pass pagination events. - -+ Moved [Demo Reader](http://futurepress.github.com/epub.js/demo/) to ```/reader/``` and the source to ```/reader_src/```. - -+ Updated CFI handling to support text offsets. CFIs return wrapped like: ```"epubcfi(/6/12[xepigraph_001]!4/2/28/2/1:0)"```. Ranges to be added soon. - -+ Added support for [EPUB properties](http://www.idpf.org/epub/fxl/#property-orientation). This can be overridden in the settings and default to ```{spread: 'reflowable', layout: 'auto', orientation: 'auto'}``` - -+ Updated [Documentation](https://github.com/futurepress/epub.js/blob/master/documentation/README.md) - -+ Many more [Tests](http://futurepress.github.io/epub.js/tests/) - - -Running Locally -------------------------- - -install [node.js](http://nodejs.org/) - -install the project dependences with npm -```javascript -npm install -``` - -then you can run the reader locally with the command - -```javascript -node server.js -``` - -* [dev.html](http://localhost:8080/reader/dev.html) will pull from the source files and should be used during development. -* [index.html](http://localhost:8080/reader/index.html) will use the minified production libraries in the build/ folder. - -Examples -------------------------- - -+ [Single](http://futurepress.github.io/epub.js/examples/single.html) -+ [Basic](http://futurepress.github.io/epub.js/examples/basic.html) -+ [Contained Epub](http://futurepress.github.io/epub.js/examples/contained.html) -+ [Promises](http://futurepress.github.io/epub.js/examples/promises.html) -+ [Fixed Width & Height](http://futurepress.github.io/epub.js/examples/fixed.html) -+ [Custom Element](http://futurepress.github.io/epub.js/examples/custom-elements.html) -+ [MathML with MathJAX](http://futurepress.github.io/epub.js/examples/mathml.html) -+ [Annotations with Hypothes.is](http://futurepress.github.io/epub.js/examples/hypothesis.html) -+ [Pagination](http://futurepress.github.io/epub.js/examples/pagination.html) - -[View All Examples](http://futurepress.github.io/epub.js/examples/) - -Testing -------------------------- - -Once you start a server you can run the [QUnit](http://qunitjs.com/) tests at [http://localhost:8080/tests/](http://localhost:8080/tests/) - -You can download the test books from https://github.com/futurepress/books by running: -``` -git submodule update --init --recursive -``` - -Then you can pull the latest with: -``` -git submodule foreach git pull origin master -``` - -Building for Distribution -------------------------- - -Builds are concatenated and minified using [gruntjs](http://gruntjs.com/getting-started) - -To generate a new build run - -```javascript -grunt -``` - -Hooks -------------------------- - -Similar to a plugins, Epub.js implements events that can be "hooked" into. Thus you can interact with and manipulate the contents of the book. - -Examples of this functionality is loading videos from YouTube links before displaying a chapters contents or implementing annotation. - -Hooks require a event to latch onto and a callback for when they are finished. - -Example hook: - -```javascript -EPUBJS.Hooks.register("beforeChapterDisplay").example = function(callback, renderer){ - - var elements = render.doc.querySelectorAll('[video]'), - items = Array.prototype.slice.call(elements); - - items.forEach(function(item){ - //-- do something with the video item - } - - if(callback) callback(); - -} -``` - -Additional Resources -------------------------- - -[Epub.js Developer Mailing List](https://groups.google.com/forum/#!forum/epubjs) - -IRC Server: freenode.net Channel: #epub.js - -Follow us on twitter: @Epubjs - -+ http://twitter.com/#!/Epubjs - -Other -------------------------- - -EPUB is a registered trademark of the [IDPF](http://idpf.org/). - diff --git a/bower.json b/bower.json new file mode 100644 index 000000000..71f52afa5 --- /dev/null +++ b/bower.json @@ -0,0 +1,31 @@ +{ + "name": "epubjs", + "version": "0.3.0", + "authors": [ + "Fred Chasen " + ], + "description": "Enhanced eBooks in the browser.", + "main": "lib/epub.js", + "moduleType": [ + "amd", + "globals", + "node" + ], + "keywords": [ + "epub" + ], + "license": "MIT", + "homepage": "futurepress.org", + "ignore": [ + "**/.*", + "node_modules", + "bower_components", + "test", + "tests" + ], + "devDependencies": { + "qunit": "~1.14.0", + "jquery": "~2.1.1", + "rsvp": "~3.0.8" + } +} diff --git a/build/epub.js b/build/epub.js deleted file mode 100644 index 7ca835eed..000000000 --- a/build/epub.js +++ /dev/null @@ -1,7343 +0,0 @@ -(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,d=e.filter,g=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,_=Object.keys,j=i.bind,w=function(n){return n instanceof w?n:this instanceof w?(this._wrapped=n,void 0):new w(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=w),exports._=w):n._=w,w.VERSION="1.4.4";var A=w.each=w.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a in n)if(w.has(n,a)&&t.call(e,n[a],a,n)===r)return};w.map=w.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e[e.length]=t.call(r,n,u,i)}),e)};var O="Reduce of empty array with no initial value";w.reduce=w.foldl=w.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=w.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},w.reduceRight=w.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=w.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=w.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},w.find=w.detect=function(n,t,r){var e;return E(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},w.filter=w.select=function(n,t,r){var e=[];return null==n?e:d&&n.filter===d?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&(e[e.length]=n)}),e)},w.reject=function(n,t,r){return w.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},w.every=w.all=function(n,t,e){t||(t=w.identity);var u=!0;return null==n?u:g&&n.every===g?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var E=w.some=w.any=function(n,t,e){t||(t=w.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};w.contains=w.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:E(n,function(n){return n===t})},w.invoke=function(n,t){var r=o.call(arguments,2),e=w.isFunction(t);return w.map(n,function(n){return(e?t:n[t]).apply(n,r)})},w.pluck=function(n,t){return w.map(n,function(n){return n[t]})},w.where=function(n,t,r){return w.isEmpty(t)?r?null:[]:w[r?"find":"filter"](n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},w.findWhere=function(n,t){return w.where(n,t,!0)},w.max=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.max.apply(Math,n);if(!t&&w.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>=e.computed&&(e={value:n,computed:a})}),e.value},w.min=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.min.apply(Math,n);if(!t&&w.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;e.computed>a&&(e={value:n,computed:a})}),e.value},w.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=w.random(r++),e[r-1]=e[t],e[t]=n}),e};var k=function(n){return w.isFunction(n)?n:function(t){return t[n]}};w.sortBy=function(n,t,r){var e=k(t);return w.pluck(w.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.indexi;){var o=i+a>>>1;u>r.call(e,n[o])?i=o+1:a=o}return i},w.toArray=function(n){return n?w.isArray(n)?o.call(n):n.length===+n.length?w.map(n,w.identity):w.values(n):[]},w.size=function(n){return null==n?0:n.length===+n.length?n.length:w.keys(n).length},w.first=w.head=w.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},w.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},w.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},w.rest=w.tail=w.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},w.compact=function(n){return w.filter(n,w.identity)};var R=function(n,t,r){return A(n,function(n){w.isArray(n)?t?a.apply(r,n):R(n,t,r):r.push(n)}),r};w.flatten=function(n,t){return R(n,t,[])},w.without=function(n){return w.difference(n,o.call(arguments,1))},w.uniq=w.unique=function(n,t,r,e){w.isFunction(t)&&(e=r,r=t,t=!1);var u=r?w.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:w.contains(a,r))||(a.push(r),i.push(n[e]))}),i},w.union=function(){return w.uniq(c.apply(e,arguments))},w.intersection=function(n){var t=o.call(arguments,1);return w.filter(w.uniq(n),function(n){return w.every(t,function(t){return w.indexOf(t,n)>=0})})},w.difference=function(n){var t=c.apply(e,o.call(arguments,1));return w.filter(n,function(n){return!w.contains(t,n)})},w.zip=function(){for(var n=o.call(arguments),t=w.max(w.pluck(n,"length")),r=Array(t),e=0;t>e;e++)r[e]=w.pluck(n,""+e);return r},w.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},w.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=w.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},w.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},w.range=function(n,t,r){1>=arguments.length&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=Array(e);e>u;)i[u++]=n,n+=r;return i},w.bind=function(n,t){if(n.bind===j&&j)return j.apply(n,o.call(arguments,1));var r=o.call(arguments,2);return function(){return n.apply(t,r.concat(o.call(arguments)))}},w.partial=function(n){var t=o.call(arguments,1);return function(){return n.apply(this,t.concat(o.call(arguments)))}},w.bindAll=function(n){var t=o.call(arguments,1);return 0===t.length&&(t=w.functions(n)),A(t,function(t){n[t]=w.bind(n[t],n)}),n},w.memoize=function(n,t){var r={};return t||(t=w.identity),function(){var e=t.apply(this,arguments);return w.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},w.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},w.defer=function(n){return w.delay.apply(w,[n,1].concat(o.call(arguments,1)))},w.throttle=function(n,t){var r,e,u,i,a=0,o=function(){a=new Date,u=null,i=n.apply(r,e)};return function(){var c=new Date,l=t-(c-a);return r=this,e=arguments,0>=l?(clearTimeout(u),u=null,a=c,i=n.apply(r,e)):u||(u=setTimeout(o,l)),i}},w.debounce=function(n,t,r){var e,u;return function(){var i=this,a=arguments,o=function(){e=null,r||(u=n.apply(i,a))},c=r&&!e;return clearTimeout(e),e=setTimeout(o,t),c&&(u=n.apply(i,a)),u}},w.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},w.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},w.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},w.after=function(n,t){return 0>=n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},w.keys=_||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)w.has(n,r)&&(t[t.length]=r);return t},w.values=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push(n[r]);return t},w.pairs=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push([r,n[r]]);return t},w.invert=function(n){var t={};for(var r in n)w.has(n,r)&&(t[n[r]]=r);return t},w.functions=w.methods=function(n){var t=[];for(var r in n)w.isFunction(n[r])&&t.push(r);return t.sort()},w.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},w.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},w.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)w.contains(r,u)||(t[u]=n[u]);return t},w.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)null==n[r]&&(n[r]=t[r])}),n},w.clone=function(n){return w.isObject(n)?w.isArray(n)?n.slice():w.extend({},n):n},w.tap=function(n,t){return t(n),n};var I=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof w&&(n=n._wrapped),t instanceof w&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==t+"";case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;r.push(n),e.push(t);var a=0,o=!0;if("[object Array]"==u){if(a=n.length,o=a==t.length)for(;a--&&(o=I(n[a],t[a],r,e)););}else{var c=n.constructor,f=t.constructor;if(c!==f&&!(w.isFunction(c)&&c instanceof c&&w.isFunction(f)&&f instanceof f))return!1;for(var s in n)if(w.has(n,s)&&(a++,!(o=w.has(t,s)&&I(n[s],t[s],r,e))))break;if(o){for(s in t)if(w.has(t,s)&&!a--)break;o=!a}}return r.pop(),e.pop(),o};w.isEqual=function(n,t){return I(n,t,[],[])},w.isEmpty=function(n){if(null==n)return!0;if(w.isArray(n)||w.isString(n))return 0===n.length;for(var t in n)if(w.has(n,t))return!1;return!0},w.isElement=function(n){return!(!n||1!==n.nodeType)},w.isArray=x||function(n){return"[object Array]"==l.call(n)},w.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){w["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),w.isArguments(arguments)||(w.isArguments=function(n){return!(!n||!w.has(n,"callee"))}),"function"!=typeof/./&&(w.isFunction=function(n){return"function"==typeof n}),w.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},w.isNaN=function(n){return w.isNumber(n)&&n!=+n},w.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},w.isNull=function(n){return null===n},w.isUndefined=function(n){return n===void 0},w.has=function(n,t){return f.call(n,t)},w.noConflict=function(){return n._=t,this},w.identity=function(n){return n},w.times=function(n,t,r){for(var e=Array(n),u=0;n>u;u++)e[u]=t.call(r,u);return e},w.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))};var M={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};M.unescape=w.invert(M.escape);var S={escape:RegExp("["+w.keys(M.escape).join("")+"]","g"),unescape:RegExp("("+w.keys(M.unescape).join("|")+")","g")};w.each(["escape","unescape"],function(n){w[n]=function(t){return null==t?"":(""+t).replace(S[n],function(t){return M[n][t]})}}),w.result=function(n,t){if(null==n)return null;var r=n[t];return w.isFunction(r)?r.call(n):r},w.mixin=function(n){A(w.functions(n),function(t){var r=w[t]=n[t];w.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),D.call(this,r.apply(w,n))}})};var N=0;w.uniqueId=function(n){var t=++N+"";return n?n+t:t},w.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var T=/(.)^/,q={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},B=/\\|'|\r|\n|\t|\u2028|\u2029/g;w.template=function(n,t,r){var e;r=w.defaults({},r,w.templateSettings);var u=RegExp([(r.escape||T).source,(r.interpolate||T).source,(r.evaluate||T).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(B,function(n){return"\\"+q[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,w);var c=function(n){return e.call(this,n,w)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},w.chain=function(n){return w(n).chain()};var D=function(n){return this._chain?w(n).chain():n};w.mixin(w),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];w.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],D.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];w.prototype[n]=function(){return D.call(this,t.apply(this._wrapped,arguments))}}),w.extend(w.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this); -(function(global) { -var define, requireModule, require, requirejs; - -(function() { - var registry = {}, seen = {}; - - define = function(name, deps, callback) { - registry[name] = { deps: deps, callback: callback }; - }; - - requirejs = require = requireModule = function(name) { - requirejs._eak_seen = registry; - - if (seen[name]) { return seen[name]; } - seen[name] = {}; - - if (!registry[name]) { - throw new Error("Could not find module " + name); - } - - var mod = registry[name], - deps = mod.deps, - callback = mod.callback, - reified = [], - exports; - - for (var i=0, l=deps.length; i 1; - }; - - RSVP.filter(promises, filterFn).then(function(result){ - // result is [ 2, 3 ] - }); - ``` - - If any of the `promises` given to `RSVP.filter` are rejected, the first promise - that is rejected will be given as an argument to the returned promises's - rejection handler. For example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.reject(new Error("2")); - var promise3 = RSVP.reject(new Error("3")); - var promises = [ promise1, promise2, promise3 ]; - - var filterFn = function(item){ - return item > 1; - }; - - RSVP.filter(promises, filterFn).then(function(array){ - // Code here never runs because there are rejected promises! - }, function(reason) { - // reason.message === "2" - }); - ``` - - `RSVP.filter` will also wait for any promises returned from `filterFn`. - For instance, you may want to fetch a list of users then return a subset - of those users based on some asynchronous operation: - - ```javascript - - var alice = { name: 'alice' }; - var bob = { name: 'bob' }; - var users = [ alice, bob ]; - - var promises = users.map(function(user){ - return RSVP.resolve(user); - }); - - var filterFn = function(user){ - // Here, Alice has permissions to create a blog post, but Bob does not. - return getPrivilegesForUser(user).then(function(privs){ - return privs.can_create_blog_post === true; - }); - }; - RSVP.filter(promises, filterFn).then(function(users){ - // true, because the server told us only Alice can create a blog post. - users.length === 1; - // false, because Alice is the only user present in `users` - users[0] === bob; - }); - ``` - - @method filter - @for RSVP - @param {Array} promises - @param {Function} filterFn - function to be called on each resolved value to - filter the final results. - @param {String} label optional string describing the promise. Useful for - tooling. - @return {Promise} - */ - function filter(promises, filterFn, label) { - if (!isArray(promises)) { - throw new TypeError('You must pass an array to filter.'); - } - - if (!isFunction(filterFn)){ - throw new TypeError("You must pass a function to filter's second argument."); - } - - return all(promises, label).then(function(values){ - return map(promises, filterFn, label).then(function(filterResults){ - var i, - valuesLen = values.length, - filtered = []; - - for (i = 0; i < valuesLen; i++){ - if(filterResults[i]) filtered.push(values[i]); - } - return filtered; - }); - }); - } - - __exports__["default"] = filter; - }); -define("rsvp/hash", - ["./promise","./utils","exports"], - function(__dependency1__, __dependency2__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - var isNonThenable = __dependency2__.isNonThenable; - var keysOf = __dependency2__.keysOf; - - /** - `RSVP.hash` is similar to `RSVP.all`, but takes an object instead of an array - for its `promises` argument. - - Returns a promise that is fulfilled when all the given promises have been - fulfilled, or rejected if any of them become rejected. The returned promise - is fulfilled with a hash that has the same key names as the `promises` object - argument. If any of the values in the object are not promises, they will - simply be copied over to the fulfilled object. - - Example: - - ```javascript - var promises = { - myPromise: RSVP.resolve(1), - yourPromise: RSVP.resolve(2), - theirPromise: RSVP.resolve(3), - notAPromise: 4 - }; - - RSVP.hash(promises).then(function(hash){ - // hash here is an object that looks like: - // { - // myPromise: 1, - // yourPromise: 2, - // theirPromise: 3, - // notAPromise: 4 - // } - }); - ```` - - If any of the `promises` given to `RSVP.hash` are rejected, the first promise - that is rejected will be given as as the first argument, or as the reason to - the rejection handler. For example: - - ```javascript - var promises = { - myPromise: RSVP.resolve(1), - rejectedPromise: RSVP.reject(new Error("rejectedPromise")), - anotherRejectedPromise: RSVP.reject(new Error("anotherRejectedPromise")), - }; - - RSVP.hash(promises).then(function(hash){ - // Code here never runs because there are rejected promises! - }, function(reason) { - // reason.message === "rejectedPromise" - }); - ``` - - An important note: `RSVP.hash` is intended for plain JavaScript objects that - are just a set of keys and values. `RSVP.hash` will NOT preserve prototype - chains. - - Example: - - ```javascript - function MyConstructor(){ - this.example = RSVP.resolve("Example"); - } - - MyConstructor.prototype = { - protoProperty: RSVP.resolve("Proto Property") - }; - - var myObject = new MyConstructor(); - - RSVP.hash(myObject).then(function(hash){ - // protoProperty will not be present, instead you will just have an - // object that looks like: - // { - // example: "Example" - // } - // - // hash.hasOwnProperty('protoProperty'); // false - // 'undefined' === typeof hash.protoProperty - }); - ``` - - @method hash - @for RSVP - @param {Object} promises - @param {String} label - optional string that describes the promise. - Useful for tooling. - @return {Promise} promise that is fulfilled when all properties of `promises` - have been fulfilled, or rejected if any of them become rejected. - */ - __exports__["default"] = function hash(object, label) { - return new Promise(function(resolve, reject){ - var results = {}; - var keys = keysOf(object); - var remaining = keys.length; - var entry, property; - - if (remaining === 0) { - resolve(results); - return; - } - - function fulfilledTo(property) { - return function(value) { - results[property] = value; - if (--remaining === 0) { - resolve(results); - } - }; - } - - function onRejection(reason) { - remaining = 0; - reject(reason); - } - - for (var i = 0; i < keys.length; i++) { - property = keys[i]; - entry = object[property]; - - if (isNonThenable(entry)) { - results[property] = entry; - if (--remaining === 0) { - resolve(results); - } - } else { - Promise.cast(entry).then(fulfilledTo(property), onRejection); - } - } - }); - }; - }); -define("rsvp/instrument", - ["./config","./utils","exports"], - function(__dependency1__, __dependency2__, __exports__) { - "use strict"; - var config = __dependency1__.config; - var now = __dependency2__.now; - - __exports__["default"] = function instrument(eventName, promise, child) { - // instrumentation should not disrupt normal usage. - try { - config.trigger(eventName, { - guid: promise._guidKey + promise._id, - eventName: eventName, - detail: promise._detail, - childGuid: child && promise._guidKey + child._id, - label: promise._label, - timeStamp: now(), - stack: new Error(promise._label).stack - }); - } catch(error) { - setTimeout(function(){ - throw error; - }, 0); - } - }; - }); -define("rsvp/map", - ["./promise","./all","./utils","exports"], - function(__dependency1__, __dependency2__, __dependency3__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - var all = __dependency2__["default"]; - var isArray = __dependency3__.isArray; - var isFunction = __dependency3__.isFunction; - - /** - - `RSVP.map` is similar to JavaScript's native `map` method, except that it - waits for all promises to become fulfilled before running the `mapFn` on - each item in given to `promises`. `RSVP.map` returns a promise that will - become fulfilled with the result of running `mapFn` on the values the promises - become fulfilled with. - - For example: - - ```javascript - - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.resolve(2); - var promise3 = RSVP.resolve(3); - var promises = [ promise1, promise2, promise3 ]; - - var mapFn = function(item){ - return item + 1; - }; - - RSVP.map(promises, mapFn).then(function(result){ - // result is [ 2, 3, 4 ] - }); - ``` - - If any of the `promises` given to `RSVP.map` are rejected, the first promise - that is rejected will be given as an argument to the returned promises's - rejection handler. For example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.reject(new Error("2")); - var promise3 = RSVP.reject(new Error("3")); - var promises = [ promise1, promise2, promise3 ]; - - var mapFn = function(item){ - return item + 1; - }; - - RSVP.map(promises, mapFn).then(function(array){ - // Code here never runs because there are rejected promises! - }, function(reason) { - // reason.message === "2" - }); - ``` - - `RSVP.map` will also wait if a promise is returned from `mapFn`. For example, - say you want to get all comments from a set of blog posts, but you need - the blog posts first becuase they contain a url to those comments. - - ```javscript - - var mapFn = function(blogPost){ - // getComments does some ajax and returns an RSVP.Promise that is fulfilled - // with some comments data - return getComments(blogPost.comments_url); - }; - - // getBlogPosts does some ajax and returns an RSVP.Promise that is fulfilled - // with some blog post data - RSVP.map(getBlogPosts(), mapFn).then(function(comments){ - // comments is the result of asking the server for the comments - // of all blog posts returned from getBlogPosts() - }); - ``` - - @method map - @for RSVP - @param {Array} promises - @param {Function} mapFn function to be called on each fulfilled promise. - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} promise that is fulfilled with the result of calling - `mapFn` on each fulfilled promise or value when they become fulfilled. - The promise will be rejected if any of the given `promises` become rejected. - */ - __exports__["default"] = function map(promises, mapFn, label) { - - if (!isArray(promises)) { - throw new TypeError('You must pass an array to map.'); - } - - if (!isFunction(mapFn)){ - throw new TypeError("You must pass a function to map's second argument."); - } - - return all(promises, label).then(function(results){ - var resultLen = results.length, - mappedResults = [], - i; - - for (i = 0; i < resultLen; i++){ - mappedResults.push(mapFn(results[i])); - } - - return all(mappedResults, label); - }); - }; - }); -define("rsvp/node", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - var slice = Array.prototype.slice; - - function makeNodeCallbackFor(resolve, reject) { - return function (error, value) { - if (error) { - reject(error); - } else if (arguments.length > 2) { - resolve(slice.call(arguments, 1)); - } else { - resolve(value); - } - }; - } - - /** - `RSVP.denodeify` takes a "node-style" function and returns a function that - will return an `RSVP.Promise`. You can use `denodeify` in Node.js or the - browser when you'd prefer to use promises over using callbacks. For example, - `denodeify` transforms the following: - - ```javascript - var fs = require('fs'); - - fs.readFile('myfile.txt', function(err, data){ - if (err) return handleError(err); - handleData(data); - }); - ``` - - into: - - ```javascript - var fs = require('fs'); - - var readFile = RSVP.denodeify(fs.readFile); - - readFile('myfile.txt').then(handleData, handleError); - ``` - - Using `denodeify` makes it easier to compose asynchronous operations instead - of using callbacks. For example, instead of: - - ```javascript - var fs = require('fs'); - var log = require('some-async-logger'); - - fs.readFile('myfile.txt', function(err, data){ - if (err) return handleError(err); - fs.writeFile('myfile2.txt', data, function(err){ - if (err) throw err; - log('success', function(err) { - if (err) throw err; - }); - }); - }); - ``` - - You can chain the operations together using `then` from the returned promise: - - ```javascript - var fs = require('fs'); - var denodeify = RSVP.denodeify; - var readFile = denodeify(fs.readFile); - var writeFile = denodeify(fs.writeFile); - var log = denodeify(require('some-async-logger')); - - readFile('myfile.txt').then(function(data){ - return writeFile('myfile2.txt', data); - }).then(function(){ - return log('SUCCESS'); - }).then(function(){ - // success handler - }, function(reason){ - // rejection handler - }); - ``` - - @method denodeify - @for RSVP - @param {Function} nodeFunc a "node-style" function that takes a callback as - its last argument. The callback expects an error to be passed as its first - argument (if an error occurred, otherwise null), and the value from the - operation as its second argument ("function(err, value){ }"). - @param {Any} binding optional argument for binding the "this" value when - calling the `nodeFunc` function. - @return {Function} a function that wraps `nodeFunc` to return an - `RSVP.Promise` - */ - __exports__["default"] = function denodeify(nodeFunc, binding) { - return function() { - var nodeArgs = slice.call(arguments), resolve, reject; - var thisArg = this || binding; - - return new Promise(function(resolve, reject) { - Promise.all(nodeArgs).then(function(nodeArgs) { - try { - nodeArgs.push(makeNodeCallbackFor(resolve, reject)); - nodeFunc.apply(thisArg, nodeArgs); - } catch(e) { - reject(e); - } - }); - }); - }; - }; - }); -define("rsvp/promise", - ["./config","./events","./instrument","./utils","./promise/cast","./promise/all","./promise/race","./promise/resolve","./promise/reject","exports"], - function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) { - "use strict"; - var config = __dependency1__.config; - var EventTarget = __dependency2__["default"]; - var instrument = __dependency3__["default"]; - var objectOrFunction = __dependency4__.objectOrFunction; - var isFunction = __dependency4__.isFunction; - var now = __dependency4__.now; - var cast = __dependency5__["default"]; - var all = __dependency6__["default"]; - var race = __dependency7__["default"]; - var Resolve = __dependency8__["default"]; - var Reject = __dependency9__["default"]; - - var guidKey = 'rsvp_' + now() + '-'; - var counter = 0; - - function noop() {} - - __exports__["default"] = Promise; - - - /** - - Promise objects represent the eventual result of an asynchronous operation. The - primary way of interacting with a promise is through its `then` method, which - registers callbacks to receive either a promise’s eventual value or the reason - why the promise cannot be fulfilled. - - Terminology - ----------- - - - `promise` is an object or function with a `then` method whose behavior conforms to this specification. - - `thenable` is an object or function that defines a `then` method. - - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). - - `exception` is a value that is thrown using the throw statement. - - `reason` is a value that indicates why a promise was rejected. - - `settled` the final resting state of a promise, fulfilled or rejected. - - A promise can be in one of three states: pending, fulfilled, or rejected. - - - Basic Usage: - ------------ - - ```js - var promise = new Promise(function(resolve, reject) { - // on success - resolve(value); - - // on failure - reject(reason); - }); - - promise.then(function(value) { - // on fulfillment - }, function(reason) { - // on rejection - }); - ``` - - Advanced Usage: - --------------- - - Promises shine when abstracting away asynchronous interactions such as - `XMLHttpRequest`s. - - ```js - function getJSON(url) { - return new Promise(function(resolve, reject){ - var xhr = new XMLHttpRequest(); - - xhr.open('GET', url); - xhr.onreadystatechange = handler; - xhr.responseType = 'json'; - xhr.setRequestHeader('Accept', 'application/json'); - xhr.send(); - - function handler() { - if (this.readyState === this.DONE) { - if (this.status === 200) { - resolve(this.response); - } else { - reject(new Error("getJSON: `" + url + "` failed with status: [" + this.status + "]"); - } - } - }; - }); - } - - getJSON('/posts.json').then(function(json) { - // on fulfillment - }, function(reason) { - // on rejection - }); - ``` - - Unlike callbacks, promises are great composable primitives. - - ```js - Promise.all([ - getJSON('/posts'), - getJSON('/comments') - ]).then(function(values){ - values[0] // => postsJSON - values[1] // => commentsJSON - - return values; - }); - ``` - - @class Promise - @param {function} - @param {String} label optional string for labeling the promise. - Useful for tooling. - @constructor - */ - function Promise(resolver, label) { - if (!isFunction(resolver)) { - throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); - } - - if (!(this instanceof Promise)) { - throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); - } - - this._id = counter++; - this._label = label; - this._subscribers = []; - - if (config.instrument) { - instrument('created', this); - } - - if (noop !== resolver) { - invokeResolver(resolver, this); - } - } - - function invokeResolver(resolver, promise) { - function resolvePromise(value) { - resolve(promise, value); - } - - function rejectPromise(reason) { - reject(promise, reason); - } - - try { - resolver(resolvePromise, rejectPromise); - } catch(e) { - rejectPromise(e); - } - } - - Promise.cast = cast; - Promise.all = all; - Promise.race = race; - Promise.resolve = Resolve; - Promise.reject = Reject; - - var PENDING = void 0; - var SEALED = 0; - var FULFILLED = 1; - var REJECTED = 2; - - function subscribe(parent, child, onFulfillment, onRejection) { - var subscribers = parent._subscribers; - var length = subscribers.length; - - subscribers[length] = child; - subscribers[length + FULFILLED] = onFulfillment; - subscribers[length + REJECTED] = onRejection; - } - - function publish(promise, settled) { - var child, callback, subscribers = promise._subscribers, detail = promise._detail; - - if (config.instrument) { - instrument(settled === FULFILLED ? 'fulfilled' : 'rejected', promise); - } - - for (var i = 0; i < subscribers.length; i += 3) { - child = subscribers[i]; - callback = subscribers[i + settled]; - - invokeCallback(settled, child, callback, detail); - } - - promise._subscribers = null; - } - - Promise.prototype = { - /** - @property constructor - */ - constructor: Promise, - - _id: undefined, - _guidKey: guidKey, - _label: undefined, - - _state: undefined, - _detail: undefined, - _subscribers: undefined, - - _onerror: function (reason) { - config.trigger('error', reason); - }, - - /** - - A promise represents the eventual result of an asynchronous operation. The - primary way of interacting with a promise is through its `then` method, which - registers callbacks to receive either a promise's eventual value or the reason - why the promise cannot be fulfilled. - - ```js - findUser().then(function(user){ - // user is available - }, function(reason){ - // user is unavailable, and you are given the reason why - }); - ``` - - Chaining - -------- - - The return value of `then` is itself a promise. This second, "downstream" - promise is resolved with the return value of the first promise's fulfillment - or rejection handler, or rejected if the handler throws an exception. - - ```js - findUser().then(function (user) { - return user.name; - }, function (reason) { - return "default name"; - }).then(function (userName) { - // If `findUser` fulfilled, `userName` will be the user's name, otherwise it - // will be `"default name"` - }); - - findUser().then(function (user) { - throw "Found user, but still unhappy"; - }, function (reason) { - throw "`findUser` rejected and we're unhappy"; - }).then(function (value) { - // never reached - }, function (reason) { - // if `findUser` fulfilled, `reason` will be "Found user, but still unhappy". - // If `findUser` rejected, `reason` will be "`findUser` rejected and we're unhappy". - }); - ``` - If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. - - ```js - findUser().then(function (user) { - throw new PedagogicalException("Upstream error"); - }).then(function (value) { - // never reached - }).then(function (value) { - // never reached - }, function (reason) { - // The `PedgagocialException` is propagated all the way down to here - }); - ``` - - Assimilation - ------------ - - Sometimes the value you want to propagate to a downstream promise can only be - retrieved asynchronously. This can be achieved by returning a promise in the - fulfillment or rejection handler. The downstream promise will then be pending - until the returned promise is settled. This is called *assimilation*. - - ```js - findUser().then(function (user) { - return findCommentsByAuthor(user); - }).then(function (comments) { - // The user's comments are now available - }); - ``` - - If the assimliated promise rejects, then the downstream promise will also reject. - - ```js - findUser().then(function (user) { - return findCommentsByAuthor(user); - }).then(function (comments) { - // If `findCommentsByAuthor` fulfills, we'll have the value here - }, function (reason) { - // If `findCommentsByAuthor` rejects, we'll have the reason here - }); - ``` - - Simple Example - -------------- - - Synchronous Example - - ```javascript - var result; - - try { - result = findResult(); - // success - } catch(reason) { - // failure - } - ``` - - Errback Example - - ```js - findResult(function(result, err){ - if (err) { - // failure - } else { - // success - } - }); - ``` - - Promise Example; - - ```javacsript - findResult().then(function(result){ - - }, function(reason){ - - }); - ``` - - Advanced Example - -------------- - - Synchronous Example - - ```javascript - var author, books; - - try { - author = findAuthor(); - books = findBooksByAuthor(author); - // success - } catch(reason) { - // failure - } - ``` - - Errback Example - - ```js - - function foundBooks(books) { - - } - - function failure(reason) { - - } - - findAuthor(function(author, err){ - if (err) { - failure(err); - // failure - } else { - try { - findBoooksByAuthor(author, function(books, err) { - if (err) { - failure(err); - } else { - try { - foundBooks(books); - } catch(reason) { - failure(reason); - } - } - }); - } catch(error) { - failure(err); - } - // success - } - }); - ``` - - Promise Example; - - ```javacsript - findAuthor(). - then(findBooksByAuthor). - then(function(books){ - // found books - }).catch(function(reason){ - // something went wrong; - }); - ``` - - @method then - @param {Function} onFulfillment - @param {Function} onRejection - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} - */ - then: function(onFulfillment, onRejection, label) { - var promise = this; - this._onerror = null; - - var thenPromise = new this.constructor(noop, label); - - if (this._state) { - var callbacks = arguments; - config.async(function invokePromiseCallback() { - invokeCallback(promise._state, thenPromise, callbacks[promise._state - 1], promise._detail); - }); - } else { - subscribe(this, thenPromise, onFulfillment, onRejection); - } - - if (config.instrument) { - instrument('chained', promise, thenPromise); - } - - return thenPromise; - }, - - /** - `catch` is simply sugar for `then(null, onRejection)` which makes it the same - as the catch block, of a try/catch statement. - - ```js - function findAuthor(){ - throw new Error("couldn't find that author"); - } - - // synchronous - try { - findAuthor(); - } catch(reason) { - - } - - // async with promises - findAuthor().catch(function(reason){ - // something went wrong; - }); - ``` - - @method catch - @param {Function} onRejection - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} - */ - 'catch': function(onRejection, label) { - return this.then(null, onRejection, label); - }, - - /** - `finally` will be invoked regardless of the promise's fate just as native - try/catch/finally behaves - - ```js - findAuthor() { - if (Math.random() > 0.5) { - throw new Error(); - } - return new Author(); - } - - try { - return findAuthor(); // succeed or fail - } catch(error) { - return findOtherAuther(); - } finally { - // always runs - // doesn't effect the return value - } - - findAuthor().finally(function(){ - // author was either found, or not - }); - ``` - - @method finally - @param {Function} callback - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} - */ - 'finally': function(callback, label) { - var constructor = this.constructor; - - return this.then(function(value) { - return constructor.cast(callback()).then(function(){ - return value; - }); - }, function(reason) { - return constructor.cast(callback()).then(function(){ - throw reason; - }); - }, label); - } - }; - - function invokeCallback(settled, promise, callback, detail) { - var hasCallback = isFunction(callback), - value, error, succeeded, failed; - - if (hasCallback) { - try { - value = callback(detail); - succeeded = true; - } catch(e) { - failed = true; - error = e; - } - } else { - value = detail; - succeeded = true; - } - - if (handleThenable(promise, value)) { - return; - } else if (hasCallback && succeeded) { - resolve(promise, value); - } else if (failed) { - reject(promise, error); - } else if (settled === FULFILLED) { - resolve(promise, value); - } else if (settled === REJECTED) { - reject(promise, value); - } - } - - function handleThenable(promise, value) { - var then = null, - resolved; - - try { - if (promise === value) { - throw new TypeError("A promises callback cannot return that same promise."); - } - - if (objectOrFunction(value)) { - then = value.then; - - if (isFunction(then)) { - then.call(value, function(val) { - if (resolved) { return true; } - resolved = true; - - if (value !== val) { - resolve(promise, val); - } else { - fulfill(promise, val); - } - }, function(val) { - if (resolved) { return true; } - resolved = true; - - reject(promise, val); - }, 'derived from: ' + (promise._label || ' unknown promise')); - - return true; - } - } - } catch (error) { - if (resolved) { return true; } - reject(promise, error); - return true; - } - - return false; - } - - function resolve(promise, value) { - if (promise === value) { - fulfill(promise, value); - } else if (!handleThenable(promise, value)) { - fulfill(promise, value); - } - } - - function fulfill(promise, value) { - if (promise._state !== PENDING) { return; } - promise._state = SEALED; - promise._detail = value; - - config.async(publishFulfillment, promise); - } - - function reject(promise, reason) { - if (promise._state !== PENDING) { return; } - promise._state = SEALED; - promise._detail = reason; - - config.async(publishRejection, promise); - } - - function publishFulfillment(promise) { - publish(promise, promise._state = FULFILLED); - } - - function publishRejection(promise) { - if (promise._onerror) { - promise._onerror(promise._detail); - } - - publish(promise, promise._state = REJECTED); - } - }); -define("rsvp/promise/all", - ["../utils","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var isArray = __dependency1__.isArray; - var isNonThenable = __dependency1__.isNonThenable; - - /** - - `RSVP.Promise.all` returns a new promise which is fulfilled with an array of - fulfillment values for the passed promises, or rejects with the reason of the - first passed promise that rejects. It casts all elements of the passed iterable - to promises as it runs this algorithm. - - Example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.resolve(2); - var promise3 = RSVP.resolve(3); - var promises = [ promise1, promise2, promise3 ]; - - RSVP.Promise.all(promises).then(function(array){ - // The array here would be [ 1, 2, 3 ]; - }); - ``` - - If any of the `promises` given to `RSVP.all` are rejected, the first promise - that is rejected will be given as an argument to the returned promises's - rejection handler. For example: - - Example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.reject(new Error("2")); - var promise3 = RSVP.reject(new Error("3")); - var promises = [ promise1, promise2, promise3 ]; - - RSVP.Promise.all(promises).then(function(array){ - // Code here never runs because there are rejected promises! - }, function(error) { - // error.message === "2" - }); - ``` - - @method all - @for RSVP.Promise - @param {Array} promises - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} promise that is fulfilled when all `promises` have been - fulfilled, or rejected if any of them become rejected. - */ - __exports__["default"] = function all(entries, label) { - - /*jshint validthis:true */ - var Constructor = this; - - return new Constructor(function(resolve, reject) { - if (!isArray(entries)) { - throw new TypeError('You must pass an array to all.'); - } - - var remaining = entries.length; - var results = new Array(remaining); - var entry, pending = true; - - if (remaining === 0) { - resolve(results); - return; - } - - function fulfillmentAt(index) { - return function(value) { - results[index] = value; - if (--remaining === 0) { - resolve(results); - } - }; - } - - function onRejection(reason) { - remaining = 0; - reject(reason); - } - - for (var index = 0; index < entries.length; index++) { - entry = entries[index]; - if (isNonThenable(entry)) { - results[index] = entry; - if (--remaining === 0) { - resolve(results); - } - } else { - Constructor.cast(entry).then(fulfillmentAt(index), onRejection); - } - } - }, label); - }; - }); -define("rsvp/promise/cast", - ["exports"], - function(__exports__) { - "use strict"; - /** - - `RSVP.Promise.cast` cast coerces its argument to a promise, or returns the - argument if it is already a promise which shares a constructor with the caster; - - Example: - - ```javascript - var promise = RSVP.Promise.resolve(1); - var casted = RSVP.Promise.cast(promise); - - console.log(promise === casted); // true - ``` - - In the case of a promise whose constructor does not match, it is assimilated. - The resulting promise will fulfill or reject based on the outcome of the - promise being casted. - - In the case of a non-promise, a promise which will fulfill with that value is - returned. - - Example: - - ```javascript - var value = 1; // could be a number, boolean, string, undefined... - var casted = RSVP.Promise.cast(value); - - console.log(value === casted); // false - console.log(casted instanceof RSVP.Promise) // true - - casted.then(function(val) { - val === value // => true - }); - ``` - - `RSVP.Promise.cast` is similar to `RSVP.Promise.resolve`, but `RSVP.Promise.cast` differs in the - following ways: - - * `RSVP.Promise.cast` serves as a memory-efficient way of getting a promise, when you - have something that could either be a promise or a value. RSVP.resolve - will have the same effect but will create a new promise wrapper if the - argument is a promise. - * `RSVP.Promise.cast` is a way of casting incoming thenables or promise subclasses to - promises of the exact class specified, so that the resulting object's `then` is - ensured to have the behavior of the constructor you are calling cast on (i.e., RSVP.Promise). - - @method cast - @for RSVP.Promise - @param {Object} object to be casted - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} promise - */ - - __exports__["default"] = function cast(object, label) { - /*jshint validthis:true */ - var Constructor = this; - - if (object && typeof object === 'object' && object.constructor === Constructor) { - return object; - } - - return new Constructor(function(resolve) { - resolve(object); - }, label); - }; - }); -define("rsvp/promise/race", - ["../utils","exports"], - function(__dependency1__, __exports__) { - "use strict"; - /* global toString */ - - var isArray = __dependency1__.isArray; - var isFunction = __dependency1__.isFunction; - var isNonThenable = __dependency1__.isNonThenable; - - /** - `RSVP.Promise.race` returns a new promise which is settled in the same way as the - first passed promise to settle. - - Example: - - ```javascript - var promise1 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - resolve("promise 1"); - }, 200); - }); - - var promise2 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - resolve("promise 2"); - }, 100); - }); - - RSVP.Promise.race([promise1, promise2]).then(function(result){ - // result === "promise 2" because it was resolved before promise1 - // was resolved. - }); - ``` - - `RSVP.Promise.race` is deterministic in that only the state of the first - completed promise matters. For example, even if other promises given to the - `promises` array argument are resolved, but the first completed promise has - become rejected before the other promises became fulfilled, the returned - promise will become rejected: - - ```javascript - var promise1 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - resolve("promise 1"); - }, 200); - }); - - var promise2 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - reject(new Error("promise 2")); - }, 100); - }); - - RSVP.Promise.race([promise1, promise2]).then(function(result){ - // Code here never runs because there are rejected promises! - }, function(reason){ - // reason.message === "promise2" because promise 2 became rejected before - // promise 1 became fulfilled - }); - ``` - - @method race - @for RSVP.Promise - @param {Array} promises array of promises to observe - @param {String} label optional string for describing the promise returned. - Useful for tooling. - @return {Promise} a promise which settles in the same way as the first passed - promise to settle. - */ - __exports__["default"] = function race(entries, label) { - /*jshint validthis:true */ - var Constructor = this, entry; - - return new Constructor(function(resolve, reject) { - if (!isArray(entries)) { - throw new TypeError('You must pass an array to race.'); - } - - var pending = true; - - function onFulfillment(value) { if (pending) { pending = false; resolve(value); } } - function onRejection(reason) { if (pending) { pending = false; reject(reason); } } - - for (var i = 0; i < entries.length; i++) { - entry = entries[i]; - if (isNonThenable(entry)) { - pending = false; - resolve(entry); - return; - } else { - Constructor.cast(entry).then(onFulfillment, onRejection); - } - } - }, label); - }; - }); -define("rsvp/promise/reject", - ["exports"], - function(__exports__) { - "use strict"; - /** - `RSVP.Promise.reject` returns a promise rejected with the passed `reason`. - It is essentially shorthand for the following: - - ```javascript - var promise = new RSVP.Promise(function(resolve, reject){ - reject(new Error('WHOOPS')); - }); - - promise.then(function(value){ - // Code here doesn't run because the promise is rejected! - }, function(reason){ - // reason.message === 'WHOOPS' - }); - ``` - - Instead of writing the above, your code now simply becomes the following: - - ```javascript - var promise = RSVP.Promise.reject(new Error('WHOOPS')); - - promise.then(function(value){ - // Code here doesn't run because the promise is rejected! - }, function(reason){ - // reason.message === 'WHOOPS' - }); - ``` - - @method reject - @for RSVP.Promise - @param {Any} reason value that the returned promise will be rejected with. - @param {String} label optional string for identifying the returned promise. - Useful for tooling. - @return {Promise} a promise rejected with the given `reason`. - */ - __exports__["default"] = function reject(reason, label) { - /*jshint validthis:true */ - var Constructor = this; - - return new Constructor(function (resolve, reject) { - reject(reason); - }, label); - }; - }); -define("rsvp/promise/resolve", - ["exports"], - function(__exports__) { - "use strict"; - /** - `RSVP.Promise.resolve` returns a promise that will become fulfilled with the passed - `value`. It is essentially shorthand for the following: - - ```javascript - var promise = new RSVP.Promise(function(resolve, reject){ - resolve(1); - }); - - promise.then(function(value){ - // value === 1 - }); - ``` - - Instead of writing the above, your code now simply becomes the following: - - ```javascript - var promise = RSVP.Promise.resolve(1); - - promise.then(function(value){ - // value === 1 - }); - ``` - - @method resolve - @for RSVP.Promise - @param {Any} value value that the returned promise will be resolved with - @param {String} label optional string for identifying the returned promise. - Useful for tooling. - @return {Promise} a promise that will become fulfilled with the given - `value` - */ - __exports__["default"] = function resolve(value, label) { - /*jshint validthis:true */ - var Constructor = this; - - return new Constructor(function(resolve, reject) { - resolve(value); - }, label); - }; - }); -define("rsvp/race", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - __exports__["default"] = function race(array, label) { - return Promise.race(array, label); - }; - }); -define("rsvp/reject", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - __exports__["default"] = function reject(reason, label) { - return Promise.reject(reason, label); - }; - }); -define("rsvp/resolve", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - __exports__["default"] = function resolve(value, label) { - return Promise.resolve(value, label); - }; - }); -define("rsvp/rethrow", - ["exports"], - function(__exports__) { - "use strict"; - /** - `RSVP.rethrow` will rethrow an error on the next turn of the JavaScript event - loop in order to aid debugging. - - Promises A+ specifies that any exceptions that occur with a promise must be - caught by the promises implementation and bubbled to the last handler. For - this reason, it is recommended that you always specify a second rejection - handler function to `then`. However, `RSVP.rethrow` will throw the exception - outside of the promise, so it bubbles up to your console if in the browser, - or domain/cause uncaught exception in Node. `rethrow` will throw the error - again so the error can be handled by the promise. - - ```javascript - function throws(){ - throw new Error('Whoops!'); - } - - var promise = new RSVP.Promise(function(resolve, reject){ - throws(); - }); - - promise.catch(RSVP.rethrow).then(function(){ - // Code here doesn't run because the promise became rejected due to an - // error! - }, function (err){ - // handle the error here - }); - ``` - - The 'Whoops' error will be thrown on the next turn of the event loop - and you can watch for it in your console. You can also handle it using a - rejection handler given to `.then` or `.catch` on the returned promise. - - @method rethrow - @for RSVP - @param {Error} reason reason the promise became rejected. - @throws Error - */ - __exports__["default"] = function rethrow(reason) { - setTimeout(function() { - throw reason; - }); - throw reason; - }; - }); -define("rsvp/utils", - ["exports"], - function(__exports__) { - "use strict"; - function objectOrFunction(x) { - return typeof x === "function" || (typeof x === "object" && x !== null); - } - - __exports__.objectOrFunction = objectOrFunction;function isFunction(x) { - return typeof x === "function"; - } - - __exports__.isFunction = isFunction;function isNonThenable(x) { - return !objectOrFunction(x); - } - - __exports__.isNonThenable = isNonThenable;function isArray(x) { - return Object.prototype.toString.call(x) === "[object Array]"; - } - - __exports__.isArray = isArray;// Date.now is not available in browsers < IE9 - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now#Compatibility - var now = Date.now || function() { return new Date().getTime(); }; - __exports__.now = now; - var keysOf = Object.keys || function(object) { - var result = []; - - for (var prop in object) { - result.push(prop); - } - - return result; - }; - __exports__.keysOf = keysOf; - }); -define("rsvp", - ["./rsvp/promise","./rsvp/events","./rsvp/node","./rsvp/all","./rsvp/all_settled","./rsvp/race","./rsvp/hash","./rsvp/rethrow","./rsvp/defer","./rsvp/config","./rsvp/map","./rsvp/resolve","./rsvp/reject","./rsvp/asap","./rsvp/filter","exports"], - function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - var EventTarget = __dependency2__["default"]; - var denodeify = __dependency3__["default"]; - var all = __dependency4__["default"]; - var allSettled = __dependency5__["default"]; - var race = __dependency6__["default"]; - var hash = __dependency7__["default"]; - var rethrow = __dependency8__["default"]; - var defer = __dependency9__["default"]; - var config = __dependency10__.config; - var configure = __dependency10__.configure; - var map = __dependency11__["default"]; - var resolve = __dependency12__["default"]; - var reject = __dependency13__["default"]; - var asap = __dependency14__["default"]; - var filter = __dependency15__["default"]; - - config.async = asap; // default async is asap; - - function async(callback, arg) { - config.async(callback, arg); - } - - function on() { - config.on.apply(config, arguments); - } - - function off() { - config.off.apply(config, arguments); - } - - // Set up instrumentation through `window.__PROMISE_INTRUMENTATION__` - if (typeof window !== 'undefined' && typeof window.__PROMISE_INSTRUMENTATION__ === 'object') { - var callbacks = window.__PROMISE_INSTRUMENTATION__; - configure('instrument', true); - for (var eventName in callbacks) { - if (callbacks.hasOwnProperty(eventName)) { - on(eventName, callbacks[eventName]); - } - } - } - - __exports__.Promise = Promise; - __exports__.EventTarget = EventTarget; - __exports__.all = all; - __exports__.allSettled = allSettled; - __exports__.race = race; - __exports__.hash = hash; - __exports__.rethrow = rethrow; - __exports__.defer = defer; - __exports__.denodeify = denodeify; - __exports__.configure = configure; - __exports__.on = on; - __exports__.off = off; - __exports__.resolve = resolve; - __exports__.reject = reject; - __exports__.async = async; - __exports__.map = map; - __exports__.filter = filter; - }); -global.RSVP = requireModule('rsvp'); -}(window)); -'use strict'; - -var EPUBJS = EPUBJS || {}; -EPUBJS.VERSION = "0.2.1"; - -EPUBJS.plugins = EPUBJS.plugins || {}; - -EPUBJS.filePath = EPUBJS.filePath || "/epubjs/"; - -EPUBJS.Render = {}; - -(function(root) { - - var previousEpub = root.ePub || {}; - - var ePub = root.ePub = function() { - var bookPath, options; - - //-- var book = ePub("path/to/book.epub", { restore: true }) - if(typeof(arguments[0]) != 'undefined' && - typeof arguments[0] === 'string') { - - bookPath = arguments[0]; - - if( arguments[1] && typeof arguments[1] === 'object' ) { - options = arguments[1]; - options.bookPath = bookPath; - } else { - options = { 'bookPath' : bookPath }; - } - - } - - /* - * var book = ePub({ bookPath: "path/to/book.epub", restore: true }); - * - * - OR - - * - * var book = ePub({ restore: true }); - * book.open("path/to/book.epub"); - */ - - if( arguments[0] && typeof arguments[0] === 'object' ) { - options = arguments[0]; - } - - - return new EPUBJS.Book(options); - }; - - _.extend(ePub, { - noConflict : function() { - root.ePub = previousEpub; - return this; - } - }); - - //exports to multiple environments - if (typeof define === 'function' && define.amd) - //AMD - define(function(){ return ePub; }); - else if (typeof module != "undefined" && module.exports) - //Node - module.exports = ePub; - -})(window); - -EPUBJS.Book = function(options){ - - var book = this; - - this.settings = _.defaults(options || {}, { - bookPath : null, - bookKey : null, - packageUrl : null, - storage: false, //-- true (auto) or false (none) | override: 'ram', 'websqldatabase', 'indexeddb', 'filesystem' - fromStorage : false, - saved : false, - online : true, - contained : false, - width : null, - height: null, - layoutOveride : null, // Default: { spread: 'reflowable', layout: 'auto', orientation: 'auto'} - orientation : null, - minSpreadWidth: 800, //-- overridden by spread: none (never) / both (always) - gap: "auto", //-- "auto" or int - version: 1, - restore: false, - reload : false, - goto : false, - styles : {}, - headTags : {}, - withCredentials: false, - render_method: "Iframe" - }); - - this.settings.EPUBJSVERSION = EPUBJS.VERSION; - - this.spinePos = 0; - this.stored = false; - - //-- All Book events for listening - /* - book:ready - book:stored - book:online - book:offline - book:pageChanged - book:loadFailed - book:loadChapterFailed - */ - - //-- Adds Hook methods to the Book prototype - // Hooks will all return before triggering the callback. - // EPUBJS.Hooks.mixin(this); - //-- Get pre-registered hooks for events - // this.getHooks("beforeChapterDisplay"); - - this.online = this.settings.online || navigator.onLine; - this.networkListeners(); - - this.store = false; //-- False if not using storage; - - //-- Determine storage method - //-- Override options: none | ram | websqldatabase | indexeddb | filesystem - - if(this.settings.storage !== false){ - this.storage = new fileStorage.storage(this.settings.storage); - } - - this.ready = { - manifest: new RSVP.defer(), - spine: new RSVP.defer(), - metadata: new RSVP.defer(), - cover: new RSVP.defer(), - toc: new RSVP.defer(), - pageList: new RSVP.defer() - }; - - this.readyPromises = [ - this.ready.manifest.promise, - this.ready.spine.promise, - this.ready.metadata.promise, - this.ready.cover.promise, - this.ready.toc.promise - ]; - - this.pageList = []; - this.pagination = new EPUBJS.Pagination(); - this.pageListReady = this.ready.pageList.promise; - - this.ready.all = RSVP.all(this.readyPromises); - - this.ready.all.then(this._ready.bind(this)); - - // Queue for methods used before rendering - this.isRendered = false; - this._q = EPUBJS.core.queue(this); - // Queue for rendering - this._rendering = false; - this._displayQ = EPUBJS.core.queue(this); - // Queue for going to another location - this._moving = false; - this._gotoQ = EPUBJS.core.queue(this); - - /** - * Creates a new renderer. - * The renderer will handle displaying the content using the method provided in the settings - */ - this.renderer = new EPUBJS.Renderer(this.settings.render_method); - //-- Set the width at which to switch from spreads to single pages - this.renderer.setMinSpreadWidth(this.settings.minSpreadWidth); - this.renderer.setGap(this.settings.gap); - //-- Pass through the renderer events - this.listenToRenderer(this.renderer); - - this.defer_opened = new RSVP.defer(); - this.opened = this.defer_opened.promise; - // BookUrl is optional, but if present start loading process - if(typeof this.settings.bookPath === 'string') { - this.open(this.settings.bookPath, this.settings.reload); - } - - window.addEventListener("beforeunload", this.unload.bind(this), false); - - //-- Listen for these promises: - //-- book.opened.then() - //-- book.rendered.then() -}; - -//-- Check bookUrl and start parsing book Assets or load them from storage -EPUBJS.Book.prototype.open = function(bookPath, forceReload){ - var book = this, - epubpackage, - opened = new RSVP.defer(); - - this.settings.bookPath = bookPath; - - //-- Get a absolute URL from the book path - this.bookUrl = this.urlFrom(bookPath); - - if(this.settings.contained || this.isContained(bookPath)){ - - this.settings.contained = this.contained = true; - - this.bookUrl = ''; - - epubpackage = this.unarchive(bookPath). - then(function(){ - return book.loadPackage(); - }); - - } else { - epubpackage = this.loadPackage(); - } - - if(this.settings.restore && !forceReload && localStorage){ - //-- Will load previous package json, or re-unpack if error - epubpackage.then(function(packageXml) { - var identifier = book.packageIdentifier(packageXml); - var restored = book.restore(identifier); - - if(!restored) { - book.unpack(packageXml); - } - opened.resolve(); - book.defer_opened.resolve(); - }); - - }else{ - - //-- Get package information from epub opf - epubpackage.then(function(packageXml) { - book.unpack(packageXml); - opened.resolve(); - book.defer_opened.resolve(); - }); - } - - //-- If there is network connection, store the books contents - if(this.online && this.settings.storage && !this.settings.contained){ - if(!this.settings.stored) opened.then(book.storeOffline()); - } - - this._registerReplacements(this.renderer); - - return opened.promise; - -}; - -EPUBJS.Book.prototype.loadPackage = function(_containerPath){ - var book = this, - parse = new EPUBJS.Parser(), - containerPath = _containerPath || "META-INF/container.xml", - containerXml, - packageXml; - - if(!this.settings.packageUrl) { //-- provide the packageUrl to skip this step - packageXml = book.loadXml(book.bookUrl + containerPath). - then(function(containerXml){ - return parse.container(containerXml); // Container has path to content - }). - then(function(paths){ - book.settings.contentsPath = book.bookUrl + paths.basePath; - book.settings.packageUrl = book.bookUrl + paths.packagePath; - book.settings.encoding = paths.encoding; - return book.loadXml(book.settings.packageUrl); // Containes manifest, spine and metadata - }); - } else { - packageXml = book.loadXml(book.settings.packageUrl); - } - - packageXml.catch(function(error) { - // handle errors in either of the two requests - console.error("Could not load book at: "+ containerPath); - book.trigger("book:loadFailed", containerPath); - }); - return packageXml; -}; - -EPUBJS.Book.prototype.packageIdentifier = function(packageXml){ - var book = this, - parse = new EPUBJS.Parser(); - - return parse.identifier(packageXml); -}; - -EPUBJS.Book.prototype.unpack = function(packageXml){ - var book = this, - parse = new EPUBJS.Parser(); - - book.contents = parse.packageContents(packageXml, book.settings.contentsPath); // Extract info from contents - - book.manifest = book.contents.manifest; - book.spine = book.contents.spine; - book.spineIndexByURL = book.contents.spineIndexByURL; - book.metadata = book.contents.metadata; - if(!book.settings.bookKey) { - book.settings.bookKey = book.generateBookKey(book.metadata.identifier); - } - - //-- Set Globbal Layout setting based on metadata - book.globalLayoutProperties = book.parseLayoutProperties(book.metadata); - - book.cover = book.contents.cover = book.settings.contentsPath + book.contents.coverPath; - - book.spineNodeIndex = book.contents.spineNodeIndex; - - book.ready.manifest.resolve(book.contents.manifest); - book.ready.spine.resolve(book.contents.spine); - book.ready.metadata.resolve(book.contents.metadata); - book.ready.cover.resolve(book.contents.cover); - - - //-- Load the TOC, optional; either the EPUB3 XHTML Navigation file or the EPUB2 NCX file - if(book.contents.navPath) { - book.settings.navUrl = book.settings.contentsPath + book.contents.navPath; - - book.loadXml(book.settings.navUrl). - then(function(navHtml){ - return parse.nav(navHtml, book.spineIndexByURL, book.spine); // Grab Table of Contents - }).then(function(toc){ - book.toc = book.contents.toc = toc; - book.ready.toc.resolve(book.contents.toc); - }, function(error) { - book.ready.toc.resolve(false); - }); - - // Load the optional pageList - book.loadXml(book.settings.navUrl). - then(function(navHtml){ - return parse.pageList(navHtml, book.spineIndexByURL, book.spine); - }).then(function(pageList){ - var epubcfi = new EPUBJS.EpubCFI(); - var wait = 0; // need to generate a cfi - - // No pageList found - if(pageList.length === 0) { - return; - } - - book.pageList = book.contents.pageList = pageList; - - // Replace HREFs with CFI - book.pageList.forEach(function(pg){ - if(!pg.cfi) { - wait += 1; - epubcfi.generateCfiFromHref(pg.href, book).then(function(cfi){ - pg.cfi = cfi; - pg.packageUrl = book.settings.packageUrl; - - wait -= 1; - if(wait === 0) { - book.pagination.process(book.pageList); - book.ready.pageList.resolve(book.pageList); - } - }); - } - }); - - if(!wait) { - book.pagination.process(book.pageList); - book.ready.pageList.resolve(book.pageList); - } - - }, function(error) { - book.ready.pageList.resolve([]); - }); - } else if(book.contents.tocPath) { - book.settings.tocUrl = book.settings.contentsPath + book.contents.tocPath; - - book.loadXml(book.settings.tocUrl). - then(function(tocXml){ - return parse.toc(tocXml, book.spineIndexByURL, book.spine); // Grab Table of Contents - }).then(function(toc){ - book.toc = book.contents.toc = toc; - book.ready.toc.resolve(book.contents.toc); - }, function(error) { - book.ready.toc.resolve(false); - }); - - } else { - book.ready.toc.resolve(false); - } - -}; - -EPUBJS.Book.prototype.createHiddenRender = function(renderer, _width, _height) { - var box = this.element.getBoundingClientRect(); - var width = _width || this.settings.width || box.width; - var height = _height || this.settings.height || box.height; - var hiddenContainer; - var hiddenEl; - renderer.setMinSpreadWidth(this.settings.minSpreadWidth); - renderer.setGap(this.settings.gap); - - this._registerReplacements(renderer); - if(this.settings.forceSingle) { - renderer.forceSingle(true); - } - - hiddenContainer = document.createElement("div"); - hiddenContainer.style.visibility = "hidden"; - hiddenContainer.style.overflow = "hidden"; - hiddenContainer.style.width = "0"; - hiddenContainer.style.height = "0"; - this.element.appendChild(hiddenContainer); - - hiddenEl = document.createElement("div"); - hiddenEl.style.visibility = "hidden"; - hiddenEl.style.overflow = "hidden"; - hiddenEl.style.width = width + "px";//"0"; - hiddenEl.style.height = height +"px"; //"0"; - hiddenContainer.appendChild(hiddenEl); - - renderer.initialize(hiddenEl); - return hiddenContainer; -}; - -// Generates the pageList array by loading every chapter and paging through them -EPUBJS.Book.prototype.generatePageList = function(width, height){ - var pageList = []; - var pager = new EPUBJS.Renderer(this.settings.render_method, false); //hidden - var hiddenContainer = this.createHiddenRender(pager, width, height); - var deferred = new RSVP.defer(); - var spinePos = -1; - var spineLength = this.spine.length; - var totalPages = 0; - var currentPage = 0; - var nextChapter = function(deferred){ - var chapter; - var next = spinePos + 1; - var done = deferred || new RSVP.defer(); - var loaded; - if(next >= spineLength) { - done.resolve(); - } else { - spinePos = next; - chapter = new EPUBJS.Chapter(this.spine[spinePos], this.store); - pager.displayChapter(chapter, this.globalLayoutProperties).then(function(chap){ - pager.pageMap.forEach(function(item){ - currentPage += 1; - pageList.push({ - "cfi" : item.start, - "page" : currentPage - }); - - }); - - if(pager.pageMap.length % 2 > 0 && - pager.spreads) { - currentPage += 1; // Handle Spreads - pageList.push({ - "cfi" : pager.pageMap[pager.pageMap.length - 1].end, - "page" : currentPage - }); - } - - // Load up the next chapter - setTimeout(function(){ - nextChapter(done); - }, 1); - }); - } - return done.promise; - }.bind(this); - - var finished = nextChapter().then(function(){ - pager.remove(); - this.element.removeChild(hiddenContainer); - deferred.resolve(pageList); - }.bind(this)); - - return deferred.promise; -}; - -// Render out entire book and generate the pagination -// Width and Height are optional and will default to the current dimensions -EPUBJS.Book.prototype.generatePagination = function(width, height) { - var book = this; - var defered = new RSVP.defer(); - - this.ready.spine.promise.then(function(){ - book.generatePageList(width, height).then(function(pageList){ - book.pageList = book.contents.pageList = pageList; - book.pagination.process(pageList); - book.ready.pageList.resolve(book.pageList); - defered.resolve(book.pageList); - }); - }); - - return defered.promise; -}; - -// Process the pagination from a JSON array containing the pagelist -EPUBJS.Book.prototype.loadPagination = function(pagelistJSON) { - var pageList = JSON.parse(pagelistJSON); - - if(pageList && pageList.length) { - this.pageList = pageList; - this.pagination.process(this.pageList); - this.ready.pageList.resolve(this.pageList); - } - return this.pageList; -}; - -EPUBJS.Book.prototype.getPageList = function() { - return this.ready.pageList.promise; -}; - -EPUBJS.Book.prototype.getMetadata = function() { - return this.ready.metadata.promise; -}; - -EPUBJS.Book.prototype.getToc = function() { - return this.ready.toc.promise; -}; - -/* Private Helpers */ - -//-- Listeners for browser events -EPUBJS.Book.prototype.networkListeners = function(){ - var book = this; - - window.addEventListener("offline", function(e) { - book.online = false; - book.trigger("book:offline"); - }, false); - - window.addEventListener("online", function(e) { - book.online = true; - book.trigger("book:online"); - }, false); - -}; - -// Listen to all events the renderer triggers and pass them as book events -EPUBJS.Book.prototype.listenToRenderer = function(renderer){ - var book = this; - renderer.Events.forEach(function(eventName){ - renderer.on(eventName, function(e){ - book.trigger(eventName, e); - }); - }); - - renderer.on("renderer:visibleRangeChanged", function(range) { - var startPage, endPage, percent; - var pageRange = []; - - if(this.pageList.length > 0) { - startPage = this.pagination.pageFromCfi(range.start); - percent = this.pagination.percentageFromPage(startPage); - pageRange.push(startPage); - - if(range.end) { - endPage = this.pagination.pageFromCfi(range.end); - //if(startPage != endPage) { - pageRange.push(endPage); - //} - } - this.trigger("book:pageChanged", { - "anchorPage": startPage, - "percentage": percent, - "pageRange" : pageRange - }); - - // TODO: Add event for first and last page. - // (though last is going to be hard, since it could be several reflowed pages long) - } - }.bind(this)); - - renderer.on("render:loaded", this.loadChange.bind(this)); -}; - -// Listens for load events from the Renderer and checks against the current chapter -// Prevents the Render from loading a different chapter when back button is pressed -EPUBJS.Book.prototype.loadChange = function(url){ - var uri = EPUBJS.core.uri(url); - var chapter; - - if(this.currentChapter) { - chapter = EPUBJS.core.uri(this.currentChapter.absolute); - } - - if(!this._rendering && this.currentChapter && uri.path != chapter.path){ - console.warn("Miss Match", uri.path, this.currentChapter.absolute); - this.goto(uri.filename); - } -}; - -EPUBJS.Book.prototype.unlistenToRenderer = function(renderer){ - renderer.Events.forEach(function(eventName){ - renderer.off(eventName); - } ); -}; - -//-- Choose between a request from store or a request from network -EPUBJS.Book.prototype.loadXml = function(url){ - if(this.settings.fromStorage) { - return this.storage.getXml(url, this.settings.encoding); - } else if(this.settings.contained) { - return this.zip.getXml(url, this.settings.encoding); - }else{ - return EPUBJS.core.request(url, 'xml', this.settings.withCredentials); - } -}; - -//-- Turns a url into a absolute url -EPUBJS.Book.prototype.urlFrom = function(bookPath){ - var uri = EPUBJS.core.uri(bookPath), - absolute = uri.protocol, - fromRoot = uri.path[0] == "/", - location = window.location, - //-- Get URL orgin, try for native or combine - origin = location.origin || location.protocol + "//" + location.host, - baseTag = document.getElementsByTagName('base'), - base; - - - //-- Check is Base tag is set - - if(baseTag.length) { - base = baseTag[0].href; - } - - //-- 1. Check if url is absolute - if(uri.protocol){ - return uri.origin + uri.path; - } - - //-- 2. Check if url starts with /, add base url - if(!absolute && fromRoot){ - return (base || origin) + uri.path; - } - - //-- 3. Or find full path to url and add that - if(!absolute && !fromRoot){ - return EPUBJS.core.resolveUrl(base || location.pathname, uri.path); - } - -}; - - -EPUBJS.Book.prototype.unarchive = function(bookPath){ - var book = this, - unarchived; - - //-- Must use storage - // if(this.settings.storage == false ){ - // this.settings.storage = true; - // this.storage = new fileStorage.storage(); - // } - - this.zip = new EPUBJS.Unarchiver(); - this.store = this.zip; // Use zip storaged in ram - return this.zip.openZip(bookPath); -}; - -//-- Checks if url has a .epub or .zip extension -EPUBJS.Book.prototype.isContained = function(bookUrl){ - var uri = EPUBJS.core.uri(bookUrl); - - if(uri.extension && (uri.extension == "epub" || uri.extension == "zip")){ - return true; - } - - return false; -}; - -//-- Checks if the book can be retrieved from localStorage -EPUBJS.Book.prototype.isSaved = function(bookKey) { - var storedSettings; - - if(!localStorage) { - return false; - } - - storedSettings = localStorage.getItem(bookKey); - - if( !localStorage || - storedSettings === null) { - return false; - } else { - return true; - } -}; - -// Generates the Book Key using the identifer in the manifest or other string provided -EPUBJS.Book.prototype.generateBookKey = function(identifier){ - return "epubjs:" + EPUBJS.VERSION + ":" + window.location.host + ":" + identifier; -}; - -EPUBJS.Book.prototype.saveContents = function(){ - if(!localStorage) { - return false; - } - localStorage.setItem(this.settings.bookKey, JSON.stringify(this.contents)); -}; - -EPUBJS.Book.prototype.removeSavedContents = function() { - if(!localStorage) { - return false; - } - localStorage.removeItem(this.settings.bookKey); -}; - - - -//-- Takes a string or a element -EPUBJS.Book.prototype.renderTo = function(elem){ - var book = this, - rendered; - - if(_.isElement(elem)) { - this.element = elem; - } else if (typeof elem == "string") { - this.element = EPUBJS.core.getEl(elem); - } else { - console.error("Not an Element"); - return; - } - - rendered = this.opened. - then(function(){ - // book.render = new EPUBJS.Renderer[this.settings.renderer](book); - book.renderer.initialize(book.element, book.settings.width, book.settings.height); - book._rendered(); - return book.startDisplay(); - }); - - // rendered.then(null, function(error) { console.error(error); }); - - return rendered; -}; - -EPUBJS.Book.prototype.startDisplay = function(){ - var display; - - if(this.settings.goto) { - display = this.goto(this.settings.goto); - }else if(this.settings.previousLocationCfi) { - display = this.gotoCfi(this.settings.previousLocationCfi); - }else{ - display = this.displayChapter(this.spinePos); - } - - return display; -}; - -EPUBJS.Book.prototype.restore = function(identifier){ - - var book = this, - fetch = ['manifest', 'spine', 'metadata', 'cover', 'toc', 'spineNodeIndex', 'spineIndexByURL', 'globalLayoutProperties'], - reject = false, - bookKey = this.generateBookKey(identifier), - fromStore = localStorage.getItem(bookKey), - len = fetch.length, - i; - - if(this.settings.clearSaved) reject = true; - - if(!reject && fromStore != 'undefined' && fromStore !== null){ - book.contents = JSON.parse(fromStore); - - for(i = 0; i < len; i++) { - var item = fetch[i]; - - if(!book.contents[item]) { - reject = true; - break; - } - book[item] = book.contents[item]; - } - } - - if(reject || !fromStore || !this.contents || !this.settings.contentsPath){ - return false; - }else{ - this.settings.bookKey = bookKey; - this.ready.manifest.resolve(this.manifest); - this.ready.spine.resolve(this.spine); - this.ready.metadata.resolve(this.metadata); - this.ready.cover.resolve(this.cover); - this.ready.toc.resolve(this.toc); - return true; - } - -}; - -EPUBJS.Book.prototype.displayChapter = function(chap, end, deferred){ - var book = this, - render, - cfi, - pos, - store, - defer = deferred || new RSVP.defer(); - - var chapter; - - if(!this.isRendered) { - this._q.enqueue("displayChapter", arguments); - // Reject for now. TODO: pass promise to queue - defer.reject({ - message : "Rendering", - stack : new Error().stack - }); - return defer.promise; - } - - - if(this._rendering || this._rendering) { - // Pass along the current defer - this._displayQ.enqueue("displayChapter", [chap, end, defer]); - return defer.promise; - } - - if(_.isNumber(chap)){ - pos = chap; - }else{ - cfi = new EPUBJS.EpubCFI(chap); - pos = cfi.spinePos; - } - - if(pos < 0 || pos >= this.spine.length){ - console.warn("Not A Valid Location"); - pos = 0; - end = false; - cfi = false; - } - - //-- Create a new chapter - chapter = new EPUBJS.Chapter(this.spine[pos], this.store); - - this._rendering = true; - - render = book.renderer.displayChapter(chapter, this.globalLayoutProperties); - if(cfi) { - book.renderer.gotoCfi(cfi); - } else if(end) { - book.renderer.lastPage(); - } - //-- Success, Clear render queue - render.then(function(rendered){ - // var inwait; - //-- Set the book's spine position - book.spinePos = pos; - - defer.resolve(book.renderer); - - if(!book.settings.fromStorage && - !book.settings.contained) { - book.preloadNextChapter(); - } - - book.currentChapter = chapter; - book._rendering = false; - book._displayQ.dequeue(); - if(book._displayQ.length() === 0) { - book._gotoQ.dequeue(); - } - - }, function(error) { - // handle errors in either of the two requests - console.error("Could not load Chapter: "+ chapter.absolute); - book.trigger("book:chapterLoadFailed", chapter.absolute); - book._rendering = false; - defer.reject(error); - }); - - return defer.promise; -}; - -EPUBJS.Book.prototype.nextPage = function(){ - var next; - - if(!this.isRendered) return this._q.enqueue("nextPage", arguments); - - next = this.renderer.nextPage(); - - if(!next){ - return this.nextChapter(); - } -}; - -EPUBJS.Book.prototype.prevPage = function() { - var prev; - - if(!this.isRendered) return this._q.enqueue("prevPage", arguments); - - prev = this.renderer.prevPage(); - - if(!prev){ - return this.prevChapter(); - } -}; - -EPUBJS.Book.prototype.nextChapter = function() { - var next; - if (this.spinePos < this.spine.length - 1) { - next = this.spinePos + 1; - while (this.spine[next] && this.spine[next].linear && this.spine[next].linear == 'no') { - next++; - } - if (next < this.spine.length - 1) { - return this.displayChapter(next); - } else { - this.trigger("book:atEnd"); - } - - } else { - this.trigger("book:atEnd"); - } -}; - -EPUBJS.Book.prototype.prevChapter = function() { - var prev; - if (this.spinePos > 0) { - prev = this.spinePos - 1; - while (this.spine[prev] && this.spine[prev].linear && this.spine[prev].linear == 'no') { - prev--; - } - if (prev >= 0) { - return this.displayChapter(prev, true); - } else { - this.trigger("book:atStart"); - } - - } else { - this.trigger("book:atStart"); - } -}; - -EPUBJS.Book.prototype.getCurrentLocationCfi = function() { - if(!this.isRendered) return false; - return this.renderer.currentLocationCfi; -}; - -EPUBJS.Book.prototype.goto = function(target){ - - if(target.indexOf("epubcfi(") === 0) { - return this.gotoCfi(target); - } else if(target.indexOf("%") === target.length-1) { - return this.gotoPercentage(parseInt(target.substring(0, target.length-1))/100); - } else if(typeof target === "number" || isNaN(target) === false){ - return this.gotoPage(target); - } else { - return this.gotoHref(target); - } - -}; - -EPUBJS.Book.prototype.gotoCfi = function(cfiString, defer){ - var cfi, - spinePos, - spineItem, - rendered, - deferred = defer || new RSVP.defer(); - - if(!this.isRendered) { - console.warn("Not yet Rendered"); - this.settings.previousLocationCfi = cfiString; - return false; - } - - // Currently going to a chapter - if(this._moving || this._rendering) { - console.warn("Renderer is moving"); - this._gotoQ.enqueue("gotoCfi", [cfiString, deferred]); - return false; - } - - cfi = new EPUBJS.EpubCFI(cfiString); - spinePos = cfi.spinePos; - - if(spinePos == -1) { - return false; - } - - spineItem = this.spine[spinePos]; - promise = deferred.promise; - this._moving = true; - //-- If same chapter only stay on current chapter - if(this.currentChapter && this.spinePos === spinePos){ - this.renderer.gotoCfi(cfi); - this._moving = false; - deferred.resolve(this.renderer.currentLocationCfi); - } else { - - if(!spineItem || spinePos == -1) { - spinePos = 0; - spineItem = this.spine[spinePos]; - } - - this.currentChapter = new EPUBJS.Chapter(spineItem, this.store); - - if(this.currentChapter) { - this.spinePos = spinePos; - render = this.renderer.displayChapter(this.currentChapter, this.globalLayoutProperties); - - this.renderer.gotoCfi(cfi); - render.then(function(rendered){ - this._moving = false; - deferred.resolve(rendered.currentLocationCfi); - }.bind(this)); - } - } - - promise.then(function(){ - this._gotoQ.dequeue(); - }.bind(this)); - - return promise; -}; - -EPUBJS.Book.prototype.gotoHref = function(url, defer){ - var split, chapter, section, relativeURL, spinePos; - var deferred = defer || new RSVP.defer(); - - if(!this.isRendered) { - this.settings.goto = url; - return false; - } - - // Currently going to a chapter - if(this._moving || this._rendering) { - this._gotoQ.enqueue("gotoHref", [url, deferred]); - return false; - } - - split = url.split("#"); - chapter = split[0]; - section = split[1] || false; - // absoluteURL = (chapter.search("://") === -1) ? (this.settings.contentsPath + chapter) : chapter; - relativeURL = chapter.replace(this.settings.contentsPath, ''); - spinePos = this.spineIndexByURL[relativeURL]; - - //-- If link fragment only stay on current chapter - if(!chapter){ - spinePos = this.currentChapter ? this.currentChapter.spinePos : 0; - } - - //-- Check that URL is present in the index, or stop - if(typeof(spinePos) != "number") return false; - - if(!this.currentChapter || spinePos != this.currentChapter.spinePos){ - //-- Load new chapter if different than current - return this.displayChapter(spinePos).then(function(){ - if(section){ - this.renderer.section(section); - } - deferred.resolve(this.renderer.currentLocationCfi); - }.bind(this)); - }else{ - //-- Goto section - if(section) { - this.renderer.section(section); - } else { - // Or jump to the start - this.renderer.firstPage(); - } - deferred.resolve(this.renderer.currentLocationCfi); - } - - deferred.promise.then(function(){ - this._gotoQ.dequeue(); - }.bind(this)); - - return deferred.promise; -}; - -EPUBJS.Book.prototype.gotoPage = function(pg){ - var cfi = this.pagination.cfiFromPage(pg); - return this.gotoCfi(cfi); -}; - -EPUBJS.Book.prototype.gotoPercentage = function(percent){ - var pg = this.pagination.pageFromPercentage(percent); - return this.gotoPage(pg); -}; - -EPUBJS.Book.prototype.preloadNextChapter = function() { - var next; - var chap = this.spinePos + 1; - - if(chap >= this.spine.length){ - return false; - } - - next = new EPUBJS.Chapter(this.spine[chap]); - if(next) { - EPUBJS.core.request(next.absolute); - } -}; - - -EPUBJS.Book.prototype.storeOffline = function() { - var book = this, - assets = _.values(this.manifest); - - //-- Creates a queue of all items to load - return EPUBJS.storage.batch(assets). - then(function(){ - book.settings.stored = true; - book.trigger("book:stored"); - }); -}; - -EPUBJS.Book.prototype.availableOffline = function() { - return this.settings.stored > 0 ? true : false; -}; - -/* -EPUBJS.Book.prototype.fromStorage = function(stored) { - - if(this.contained) return; - - if(!stored){ - this.online = true; - this.tell("book:online"); - }else{ - if(!this.availableOffline){ - //-- If book hasn't been cached yet, store offline - this.storeOffline(function(){ - this.online = false; - this.tell("book:offline"); - }.bind(this)); - - }else{ - this.online = false; - this.tell("book:offline"); - } - } - -} -*/ - -EPUBJS.Book.prototype.setStyle = function(style, val, prefixed) { - var noreflow = ["color", "background", "background-color"]; - - if(!this.isRendered) return this._q.enqueue("setStyle", arguments); - - this.settings.styles[style] = val; - - this.renderer.setStyle(style, val, prefixed); - - if(noreflow.indexOf(style) === -1) { - clearTimeout(this.reformatTimeout); - this.reformatTimeout = setTimeout(function(){ - this.renderer.reformat(); - }.bind(this), 10); - } -}; - -EPUBJS.Book.prototype.removeStyle = function(style) { - if(!this.isRendered) return this._q.enqueue("removeStyle", arguments); - this.renderer.removeStyle(style); - this.renderer.reformat(); - delete this.settings.styles[style]; -}; - -EPUBJS.Book.prototype.addHeadTag = function(tag, attrs) { - if(!this.isRendered) return this._q.enqueue("addHeadTag", arguments); - this.settings.headTags[tag] = attrs; -}; - -EPUBJS.Book.prototype.useSpreads = function(use) { - console.warn("useSpreads is deprecated, use forceSingle or set a layoutOveride instead"); - if(use === false) { - this.forceSingle(true); - } else { - this.forceSingle(false); - } -}; - -EPUBJS.Book.prototype.forceSingle = function(use) { - this.renderer.forceSingle(use); - this.settings.forceSingle = use; - if(this.isRendered) { - this.renderer.reformat(); - } -}; - -EPUBJS.Book.prototype.setMinSpreadWidth = function(width) { - this.settings.minSpreadWidth = width; - if(this.isRendered) { - this.renderer.setMinSpreadWidth(this.settings.minSpreadWidth); - this.renderer.reformat(); - } -}; - -EPUBJS.Book.prototype.setGap = function(gap) { - this.settings.gap = gap; - if(this.isRendered) { - this.renderer.setGap(this.settings.gap); - this.renderer.reformat(); - } -}; - -EPUBJS.Book.prototype.chapter = function(path) { - var spinePos = this.spineIndexByURL[path]; - var spineItem; - var chapter; - - if(spinePos){ - spineItem = this.spine[spinePos]; - chapter = new EPUBJS.Chapter(spineItem, this.store); - chapter.load(); - } - return chapter; -}; - -EPUBJS.Book.prototype.unload = function(){ - - if(this.settings.restore && localStorage) { - this.saveContents(); - } - - this.unlistenToRenderer(this.renderer); - - this.trigger("book:unload"); -}; - -EPUBJS.Book.prototype.destroy = function() { - - window.removeEventListener("beforeunload", this.unload); - - if(this.currentChapter) this.currentChapter.unload(); - - this.unload(); - - if(this.render) this.render.remove(); - -}; - -EPUBJS.Book.prototype._ready = function() { - - this.trigger("book:ready"); - -}; - -EPUBJS.Book.prototype._rendered = function(err) { - var book = this; - - this.isRendered = true; - this.trigger("book:rendered"); - - this._q.flush(); -}; - - -EPUBJS.Book.prototype.applyStyles = function(renderer, callback){ - // if(!this.isRendered) return this._q.enqueue("applyStyles", arguments); - renderer.applyStyles(this.settings.styles); - callback(); -}; - -EPUBJS.Book.prototype.applyHeadTags = function(renderer, callback){ - // if(!this.isRendered) return this._q.enqueue("applyHeadTags", arguments); - renderer.applyHeadTags(this.settings.headTags); - callback(); -}; - -EPUBJS.Book.prototype._registerReplacements = function(renderer){ - renderer.registerHook("beforeChapterDisplay", this.applyStyles.bind(this, renderer), true); - renderer.registerHook("beforeChapterDisplay", this.applyHeadTags.bind(this, renderer), true); - renderer.registerHook("beforeChapterDisplay", EPUBJS.replace.hrefs.bind(this), true); - - if(this._needsAssetReplacement()) { - - renderer.registerHook("beforeChapterDisplay", [ - EPUBJS.replace.head, - EPUBJS.replace.resources, - EPUBJS.replace.svg - ], true); - - } - -}; - -EPUBJS.Book.prototype._needsAssetReplacement = function(){ - if(this.settings.fromStorage) { - - //-- Filesystem api links are relative, so no need to replace them - if(this.storage.getStorageType() == "filesystem") { - return false; - } - - return true; - - } else if(this.settings.contained) { - - return true; - - } else { - - return false; - - } -}; - - -//-- http://www.idpf.org/epub/fxl/ -EPUBJS.Book.prototype.parseLayoutProperties = function(metadata){ - var layout = (this.layoutOveride && this.layoutOveride.layout) || metadata.layout || "reflowable"; - var spread = (this.layoutOveride && this.layoutOveride.spread) || metadata.spread || "auto"; - var orientation = (this.layoutOveride && this.layoutOveride.orientation) || metadata.orientation || "auto"; - return { - layout : layout, - spread : spread, - orientation : orientation - }; -}; - -//-- Enable binding events to book -RSVP.EventTarget.mixin(EPUBJS.Book.prototype); - -//-- Handle RSVP Errors -RSVP.on('error', function(event) { - //console.error(event, event.detail); -}); - -RSVP.configure('instrument', true); //-- true | will logging out all RSVP rejections -// RSVP.on('created', listener); -// RSVP.on('chained', listener); -// RSVP.on('fulfilled', listener); -RSVP.on('rejected', function(event){ - console.error(event.detail.message, event.detail.stack); -}); - -EPUBJS.Chapter = function(spineObject, store){ - this.href = spineObject.href; - this.absolute = spineObject.url; - this.id = spineObject.id; - this.spinePos = spineObject.index; - this.cfiBase = spineObject.cfiBase; - this.properties = spineObject.properties; - this.manifestProperties = spineObject.manifestProperties; - this.linear = spineObject.linear; - this.pages = 1; - this.store = store; - this.epubcfi = new EPUBJS.EpubCFI(); - this.deferred = new RSVP.defer(); - this.loaded = this.deferred.promise; -}; - - -EPUBJS.Chapter.prototype.load = function(_store){ - var store = _store || this.store; - var promise; - // if(this.store && (!this.book.online || this.book.contained)) - if(store){ - promise = store.get(this.href); - }else{ - promise = EPUBJS.core.request(this.absolute, 'xml'); - } - - promise.then(function(xml){ - this.setDocument(xml); - }.bind(this)); - - return promise; -}; - -EPUBJS.Chapter.prototype.url = function(_store){ - var deferred = new RSVP.defer(); - var store = _store || this.store; - var loaded; - var chapter = this; - var url; - - if(store){ - if(!this.tempUrl) { - store.getUrl(this.absolute).then(function(url){ - chapter.tempUrl = url; - deferred.resolve(url); - }); - } else { - url = this.tempUrl; - deferred.resolve(url); - } - }else{ - url = this.absolute; - deferred.resolve(url); - } - /* - loaded = EPUBJS.core.request(url, 'xml', false); - loaded.then(function(contents){ - chapter.contents = contents; - deferred.resolve(chapter.absolute); - }, function(error){ - deferred.reject(error); - }); - */ - - return deferred.promise; -}; - -EPUBJS.Chapter.prototype.setPages = function(num){ - this.pages = num; -}; - -EPUBJS.Chapter.prototype.getPages = function(num){ - return this.pages; -}; - -EPUBJS.Chapter.prototype.getID = function(){ - return this.ID; -}; - -EPUBJS.Chapter.prototype.unload = function(store){ - this.document = null; - if(this.tempUrl && store) { - store.revokeUrl(this.tempUrl); - this.tempUrl = false; - } -}; - -EPUBJS.Chapter.prototype.setDocument = function(_document){ - this.document = _document.implementation.createDocument( - _document.namespaceURI, //namespace to use - null, //empty document - _document.doctype //doctype (null for XML) - ); - this.contents = this.document.importNode( - _document.documentElement, //node to import - true //clone its descendants - ); - this.document.appendChild(this.contents); - this.deferred.resolve(this.contents); -}; - -EPUBJS.Chapter.prototype.cfiFromRange = function(_range) { - var range; - var startXpath, endXpath; - var startContainer, endContainer; - var cleanTextContent, cleanEndTextContent; - - // Check for Contents - if(!this.document) return; - startXpath = EPUBJS.core.getElementXPath(_range.startContainer); - // console.log(startContainer) - endXpath = EPUBJS.core.getElementXPath(_range.endContainer); - startContainer = this.document.evaluate(startXpath, this.document, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - - if(!_range.collapsed) { - endContainer = this.document.evaluate(endXpath, this.document, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - } - - range = this.document.createRange(); - // Find Exact Range in original document - if(startContainer) { - try { - range.setStart(startContainer, _range.startOffset); - if(!_range.collapsed && endContainer) { - range.setEnd(endContainer, _range.endOffset); - } - } catch (e) { - console.log("missed"); - startContainer = false; - } - - } - - // Fuzzy Match - if(!startContainer) { - console.log("not found, try fuzzy match"); - cleanStartTextContent = EPUBJS.core.cleanStringForXpath(_range.startContainer.textContent); - startXpath = "//text()[contains(.," + cleanStartTextContent + ")]"; - - startContainer = this.document.evaluate(startXpath, this.document, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - - if(startContainer){ - // console.log("Found with Fuzzy"); - range.setStart(startContainer, _range.startOffset); - - if(!_range.collapsed) { - cleanEndTextContent = EPUBJS.core.cleanStringForXpath(_range.endContainer.textContent); - endXpath = "//text()[contains(.," + cleanEndTextContent + ")]"; - endContainer = this.document.evaluate(endXpath, this.document, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - if(endContainer) { - range.setEnd(endContainer, _range.endOffset); - } - } - - } - } - - // Generate the Cfi - return this.epubcfi.generateCfiFromRange(range, this.cfiBase); -}; - -EPUBJS.Chapter.prototype.find = function(_query){ - var chapter = this; - var matches = []; - var query = _query.toLowerCase(); - //var xpath = this.document.evaluate(".//text()[contains(translate(., '"+query.toUpperCase()+"', '"+query+"'),'"+query+"')]", this.document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); - var find = function(node){ - // Search String - var text = node.textContent.toLowerCase(); - var range = chapter.document.createRange(); - var cfi; - var pos; - var last = -1; - - while (pos != -1) { - pos = text.indexOf(query, last + 1); - - if(pos != -1) { - // If Found, Create Range - range = chapter.document.createRange(); - range.setStart(node, pos); - range.setEnd(node, pos + query.length); - - //Generate CFI - cfi = chapter.cfiFromRange(range); - //Add CFI to list - matches.push(cfi); - } - - last = pos; - } - - }; - - // Grab text nodes - - /* - for ( var i=0 ; i < xpath.snapshotLength; i++ ) { - find(xpath.snapshotItem(i)); - } - */ - - this.textSprint(this.document, function(node){ - find(node); - }); - - - // Return List of CFIs - return matches; -}; - - -EPUBJS.Chapter.prototype.textSprint = function(root, func) { - var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, { - acceptNode: function (node) { - if ( ! /^\s*$/.test(node.data) ) { - return NodeFilter.FILTER_ACCEPT; - } else { - return NodeFilter.FILTER_REJECT; - } - } - }, false); - var node; - while ((node = treeWalker.nextNode())) { - func(node); - } - -}; -var EPUBJS = EPUBJS || {}; -EPUBJS.core = {}; - -//-- Get a element for an id -EPUBJS.core.getEl = function(elem) { - return document.getElementById(elem); -}; - -//-- Get all elements for a class -EPUBJS.core.getEls = function(classes) { - return document.getElementsByClassName(classes); -}; - -EPUBJS.core.request = function(url, type, withCredentials) { - var supportsURL = window.URL; - var BLOB_RESPONSE = supportsURL ? "blob" : "arraybuffer"; - - var deferred = new RSVP.defer(); - - var xhr = new XMLHttpRequest(); - - //-- Check from PDF.js: - // https://github.com/mozilla/pdf.js/blob/master/web/compatibility.js - var xhrPrototype = XMLHttpRequest.prototype; - - if (!('overrideMimeType' in xhrPrototype)) { - // IE10 might have response, but not overrideMimeType - Object.defineProperty(xhrPrototype, 'overrideMimeType', { - value: function xmlHttpRequestOverrideMimeType(mimeType) {} - }); - } - if(withCredentials) { - xhr.withCredentials = true; - } - xhr.open("GET", url, true); - xhr.onreadystatechange = handler; - - if(type == 'blob'){ - xhr.responseType = BLOB_RESPONSE; - } - - if(type == "json") { - xhr.setRequestHeader("Accept", "application/json"); - } - - if(type == 'xml') { - xhr.overrideMimeType('text/xml'); - } - - xhr.send(); - - function handler() { - if (this.readyState === this.DONE) { - if (this.status === 200 || this.responseXML ) { //-- Firefox is reporting 0 for blob urls - var r; - - if(type == 'xml'){ - r = this.responseXML; - }else - if(type == 'json'){ - r = JSON.parse(this.response); - }else - if(type == 'blob'){ - - if(supportsURL) { - r = this.response; - } else { - //-- Safari doesn't support responseType blob, so create a blob from arraybuffer - r = new Blob([this.response]); - } - - }else{ - r = this.response; - } - - deferred.resolve(r); - } else { - deferred.reject({ - message : this.response, - stack : new Error().stack - }); - } - } - } - - return deferred.promise; -}; - -EPUBJS.core.toArray = function(obj) { - var arr = []; - - for (var member in obj) { - var newitm; - if ( obj.hasOwnProperty(member) ) { - newitm = obj[member]; - newitm.ident = member; - arr.push(newitm); - } - } - - return arr; -}; - -//-- Parse the different parts of a url, returning a object -EPUBJS.core.uri = function(url){ - var uri = { - protocol : '', - host : '', - path : '', - origin : '', - directory : '', - base : '', - filename : '', - extension : '', - fragment : '', - href : url - }, - doubleSlash = url.indexOf('://'), - search = url.indexOf('?'), - fragment = url.indexOf("#"), - withoutProtocol, - dot, - firstSlash; - - if(fragment != -1) { - uri.fragment = url.slice(fragment + 1); - url = url.slice(0, fragment); - } - - if(search != -1) { - uri.search = url.slice(search + 1); - url = url.slice(0, search); - href = url; - } - - if(doubleSlash != -1) { - uri.protocol = url.slice(0, doubleSlash); - withoutProtocol = url.slice(doubleSlash+3); - firstSlash = withoutProtocol.indexOf('/'); - - if(firstSlash === -1) { - uri.host = uri.path; - uri.path = ""; - } else { - uri.host = withoutProtocol.slice(0, firstSlash); - uri.path = withoutProtocol.slice(firstSlash); - } - - - uri.origin = uri.protocol + "://" + uri.host; - - uri.directory = EPUBJS.core.folder(uri.path); - - uri.base = uri.origin + uri.directory; - // return origin; - } else { - uri.path = url; - uri.directory = EPUBJS.core.folder(url); - uri.base = uri.directory; - } - - //-- Filename - uri.filename = url.replace(uri.base, ''); - dot = uri.filename.lastIndexOf('.'); - if(dot != -1) { - uri.extension = uri.filename.slice(dot+1); - } - return uri; -}; - -//-- Parse out the folder, will return everything before the last slash - -EPUBJS.core.folder = function(url){ - - var lastSlash = url.lastIndexOf('/'); - - if(lastSlash == -1) var folder = ''; - - folder = url.slice(0, lastSlash + 1); - - return folder; - -}; - -//-- https://github.com/ebidel/filer.js/blob/master/src/filer.js#L128 -EPUBJS.core.dataURLToBlob = function(dataURL) { - var BASE64_MARKER = ';base64,', - parts, contentType, raw, rawLength, uInt8Array; - - if (dataURL.indexOf(BASE64_MARKER) == -1) { - parts = dataURL.split(','); - contentType = parts[0].split(':')[1]; - raw = parts[1]; - - return new Blob([raw], {type: contentType}); - } - - parts = dataURL.split(BASE64_MARKER); - contentType = parts[0].split(':')[1]; - raw = window.atob(parts[1]); - rawLength = raw.length; - - uInt8Array = new Uint8Array(rawLength); - - for (var i = 0; i < rawLength; ++i) { - uInt8Array[i] = raw.charCodeAt(i); - } - - return new Blob([uInt8Array], {type: contentType}); -}; - -//-- Load scripts async: http://stackoverflow.com/questions/7718935/load-scripts-asynchronously -EPUBJS.core.addScript = function(src, callback, target) { - var s, r; - r = false; - s = document.createElement('script'); - s.type = 'text/javascript'; - s.async = false; - s.src = src; - s.onload = s.onreadystatechange = function() { - if ( !r && (!this.readyState || this.readyState == 'complete') ) { - r = true; - if(callback) callback(); - } - }; - target = target || document.body; - target.appendChild(s); -}; - -EPUBJS.core.addScripts = function(srcArr, callback, target) { - var total = srcArr.length, - curr = 0, - cb = function(){ - curr++; - if(total == curr){ - if(callback) callback(); - }else{ - EPUBJS.core.addScript(srcArr[curr], cb, target); - } - }; - - EPUBJS.core.addScript(srcArr[curr], cb, target); -}; - -EPUBJS.core.addCss = function(src, callback, target) { - var s, r; - r = false; - s = document.createElement('link'); - s.type = 'text/css'; - s.rel = "stylesheet"; - s.href = src; - s.onload = s.onreadystatechange = function() { - if ( !r && (!this.readyState || this.readyState == 'complete') ) { - r = true; - if(callback) callback(); - } - }; - target = target || document.body; - target.appendChild(s); -}; - -EPUBJS.core.prefixed = function(unprefixed) { - var vendors = ["Webkit", "Moz", "O", "ms" ], - prefixes = ['-Webkit-', '-moz-', '-o-', '-ms-'], - upper = unprefixed[0].toUpperCase() + unprefixed.slice(1), - length = vendors.length; - - if (typeof(document.body.style[unprefixed]) != 'undefined') { - return unprefixed; - } - - for ( var i=0; i < length; i++ ) { - if (typeof(document.body.style[vendors[i] + upper]) != 'undefined') { - return vendors[i] + upper; - } - } - - return unprefixed; -}; - -EPUBJS.core.resolveUrl = function(base, path) { - var url, - segments = [], - uri = EPUBJS.core.uri(path), - folders = base.split("/"), - paths; - - if(uri.host) { - return path; - } - - folders.pop(); - - paths = path.split("/"); - paths.forEach(function(p){ - if(p === ".."){ - folders.pop(); - }else{ - segments.push(p); - } - }); - - url = folders.concat(segments); - - return url.join("/"); -}; - -// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript -EPUBJS.core.uuid = function() { - var d = new Date().getTime(); - var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { - var r = (d + Math.random()*16)%16 | 0; - d = Math.floor(d/16); - return (c=='x' ? r : (r&0x7|0x8)).toString(16); - }); - return uuid; -}; - -// Fast quicksort insert for sorted array -- based on: -// http://stackoverflow.com/questions/1344500/efficient-way-to-insert-a-number-into-a-sorted-array-of-numbers -EPUBJS.core.insert = function(item, array, compareFunction) { - var location = EPUBJS.core.locationOf(item, array, compareFunction); - array.splice(location, 0, item); - - return location; -}; - -EPUBJS.core.locationOf = function(item, array, compareFunction, _start, _end) { - var start = _start || 0; - var end = _end || array.length; - var pivot = parseInt(start + (end - start) / 2); - var compared; - if(!compareFunction){ - compareFunction = function(a, b) { - if(a > b) return 1; - if(a < b) return -1; - if(a = b) return 0; - }; - } - if(end-start <= 0) { - return pivot; - } - - compared = compareFunction(array[pivot], item); - if(end-start === 1) { - return compared > 0 ? pivot : pivot + 1; - } - - if(compared === 0) { - return pivot; - } - if(compared === -1) { - return EPUBJS.core.locationOf(item, array, compareFunction, pivot, end); - } else{ - return EPUBJS.core.locationOf(item, array, compareFunction, start, pivot); - } -}; - -EPUBJS.core.indexOfSorted = function(item, array, compareFunction, _start, _end) { - var start = _start || 0; - var end = _end || array.length; - var pivot = parseInt(start + (end - start) / 2); - var compared; - if(!compareFunction){ - compareFunction = function(a, b) { - if(a > b) return 1; - if(a < b) return -1; - if(a = b) return 0; - }; - } - if(end-start <= 0) { - return -1; // Not found - } - - compared = compareFunction(array[pivot], item); - if(end-start === 1) { - return compared === 0 ? pivot : -1; - } - if(compared === 0) { - return pivot; // Found - } - if(compared === -1) { - return EPUBJS.core.indexOfSorted(item, array, compareFunction, pivot, end); - } else{ - return EPUBJS.core.indexOfSorted(item, array, compareFunction, start, pivot); - } -}; - - -EPUBJS.core.queue = function(_scope){ - var _q = []; - var scope = _scope; - // Add an item to the queue - var enqueue = function(funcName, args, context) { - _q.push({ - "funcName" : funcName, - "args" : args, - "context" : context - }); - return _q; - }; - // Run one item - var dequeue = function(){ - var inwait; - if(_q.length) { - inwait = _q.shift(); - // Defer to any current tasks - // setTimeout(function(){ - scope[inwait.funcName].apply(inwait.context || scope, inwait.args); - // }, 0); - } - }; - - // Run All - var flush = function(){ - while(_q.length) { - dequeue(); - } - }; - // Clear all items in wait - var clear = function(){ - _q = []; - }; - - var length = function(){ - return _q.length; - }; - - return { - "enqueue" : enqueue, - "dequeue" : dequeue, - "flush" : flush, - "clear" : clear, - "length" : length - }; -}; - -// From: https://code.google.com/p/fbug/source/browse/branches/firebug1.10/content/firebug/lib/xpath.js -/** - * Gets an XPath for an element which describes its hierarchical location. - */ -EPUBJS.core.getElementXPath = function(element) { - if (element && element.id) { - return '//*[@id="' + element.id + '"]'; - } else { - return EPUBJS.core.getElementTreeXPath(element); - } -}; - -EPUBJS.core.getElementTreeXPath = function(element) { - var paths = []; - var isXhtml = (element.ownerDocument.documentElement.getAttribute('xmlns') === "http://www.w3.org/1999/xhtml"); - var index, nodeName, tagName, pathIndex; - - if(element.nodeType === Node.TEXT_NODE){ - // index = Array.prototype.indexOf.call(element.parentNode.childNodes, element) + 1; - index = EPUBJS.core.indexOfTextNode(element) + 1; - - paths.push("text()["+index+"]"); - element = element.parentNode; - } - - // Use nodeName (instead of localName) so namespace prefix is included (if any). - for (; element && element.nodeType == 1; element = element.parentNode) - { - index = 0; - for (var sibling = element.previousSibling; sibling; sibling = sibling.previousSibling) - { - // Ignore document type declaration. - if (sibling.nodeType == Node.DOCUMENT_TYPE_NODE) { - continue; - } - if (sibling.nodeName == element.nodeName) { - ++index; - } - } - nodeName = element.nodeName.toLowerCase(); - tagName = (isXhtml ? "xhtml:" + nodeName : nodeName); - pathIndex = (index ? "[" + (index+1) + "]" : ""); - paths.splice(0, 0, tagName + pathIndex); - } - - return paths.length ? "./" + paths.join("/") : null; -}; - -EPUBJS.core.nsResolver = function(prefix) { - var ns = { - 'xhtml' : 'http://www.w3.org/1999/xhtml', - 'epub': 'http://www.idpf.org/2007/ops' - }; - return ns[prefix] || null; -}; - -//https://stackoverflow.com/questions/13482352/xquery-looking-for-text-with-single-quote/13483496#13483496 -EPUBJS.core.cleanStringForXpath = function(str) { - var parts = str.match(/[^'"]+|['"]/g); - parts = parts.map(function(part){ - if (part === "'") { - return '\"\'\"'; // output "'" - } - - if (part === '"') { - return "\'\"\'"; // output '"' - } - return "\'" + part + "\'"; - }); - return "concat(\'\'," + parts.join(",") + ")"; -}; - -EPUBJS.core.indexOfTextNode = function(textNode){ - var parent = textNode.parentNode; - var children = parent.childNodes; - var sib; - var index = -1; - for (var i = 0; i < children.length; i++) { - sib = children[i]; - if(sib.nodeType === Node.TEXT_NODE){ - index++; - } - if(sib == textNode) break; - } - - return index; -}; -EPUBJS.EpubCFI = function(cfiStr){ - if(cfiStr) return this.parse(cfiStr); -}; - -EPUBJS.EpubCFI.prototype.generateChapterComponent = function(_spineNodeIndex, _pos, id) { - var pos = parseInt(_pos), - spineNodeIndex = _spineNodeIndex + 1, - cfi = '/'+spineNodeIndex+'/'; - - cfi += (pos + 1) * 2; - - if(id) cfi += "[" + id + "]"; - - //cfi += "!"; - - return cfi; -}; - -EPUBJS.EpubCFI.prototype.generatePathComponent = function(steps) { - var parts = []; - - steps.forEach(function(part){ - var segment = ''; - segment += (part.index + 1) * 2; - - if(part.id) { - segment += "[" + part.id + "]"; - } - - parts.push(segment); - }); - - return parts.join('/'); -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromElement = function(element, chapter) { - var steps = this.pathTo(element); - var path = this.generatePathComponent(steps); - if(!path.length) { - // Start of Chapter - return "epubcfi(" + chapter + "!/4/)"; - } else { - // First Text Node - return "epubcfi(" + chapter + "!" + path + "/1:0)"; - } -}; - -EPUBJS.EpubCFI.prototype.pathTo = function(node) { - var stack = [], - children; - - while(node && node.parentNode !== null && node.parentNode.nodeType != 9) { - children = node.parentNode.children; - - stack.unshift({ - 'id' : node.id, - // 'classList' : node.classList, - 'tagName' : node.tagName, - 'index' : children ? Array.prototype.indexOf.call(children, node) : 0 - }); - - node = node.parentNode; - } - - return stack; -}; - -EPUBJS.EpubCFI.prototype.getChapterComponent = function(cfiStr) { - - var splitStr = cfiStr.split("!"); - - return splitStr[0]; -}; - -EPUBJS.EpubCFI.prototype.getPathComponent = function(cfiStr) { - - var splitStr = cfiStr.split("!"); - var pathComponent = splitStr[1] ? splitStr[1].split(":") : ''; - - return pathComponent[0]; -}; - -EPUBJS.EpubCFI.prototype.getCharecterOffsetComponent = function(cfiStr) { - var splitStr = cfiStr.split(":"); - return splitStr[1] || ''; -}; - - -EPUBJS.EpubCFI.prototype.parse = function(cfiStr) { - var cfi = {}, - chapSegment, - chapterComponent, - pathComponent, - charecterOffsetComponent, - assertion, - chapId, - path, - end, - endInt, - text, - parseStep = function(part){ - var type, index, has_brackets, id; - - type = "element"; - index = parseInt(part) / 2 - 1; - has_brackets = part.match(/\[(.*)\]/); - if(has_brackets && has_brackets[1]){ - id = has_brackets[1]; - } - - return { - "type" : type, - 'index' : index, - 'id' : id || false - }; - }; - - if(typeof cfiStr !== "string") { - return {spinePos: -1}; - } - - cfi.str = cfiStr; - - if(cfiStr.indexOf("epubcfi(") === 0 && cfiStr[cfiStr.length-1] === ")") { - // Remove intial epubcfi( and ending ) - cfiStr = cfiStr.slice(8, cfiStr.length-1); - } - - chapterComponent = this.getChapterComponent(cfiStr); - pathComponent = this.getPathComponent(cfiStr) || ''; - charecterOffsetComponent = this.getCharecterOffsetComponent(cfiStr); - // Make sure this is a valid cfi or return - if(!chapterComponent) { - return {spinePos: -1}; - } - - // Chapter segment is always the second one - chapSegment = chapterComponent.split("/")[2] || ''; - if(!chapSegment) return {spinePos:-1}; - - cfi.spinePos = (parseInt(chapSegment) / 2 - 1 ) || 0; - - chapId = chapSegment.match(/\[(.*)\]/); - - cfi.spineId = chapId ? chapId[1] : false; - - if(pathComponent.indexOf(',') != -1) { - // Handle ranges -- not supported yet - console.warn("CFI Ranges are not supported"); - } - - path = pathComponent.split('/'); - end = path.pop(); - - cfi.steps = []; - - path.forEach(function(part){ - var step; - - if(part) { - step = parseStep(part); - cfi.steps.push(step); - } - }); - - //-- Check if END is a text node or element - endInt = parseInt(end); - if(!isNaN(endInt)) { - - if(endInt % 2 === 0) { // Even = is an element - cfi.steps.push(parseStep(end)); - } else { - cfi.steps.push({ - "type" : "text", - 'index' : (endInt - 1 ) / 2 - }); - } - - } - - assertion = charecterOffsetComponent.match(/\[(.*)\]/); - if(assertion && assertion[1]){ - cfi.characterOffset = parseInt(charecterOffsetComponent.split('[')[0]); - // We arent handling these assertions yet - cfi.textLocationAssertion = assertion[1]; - } else { - cfi.characterOffset = parseInt(charecterOffsetComponent); - } - - return cfi; -}; - -EPUBJS.EpubCFI.prototype.addMarker = function(cfi, _doc, _marker) { - var doc = _doc || document; - var marker = _marker || this.createMarker(doc); - var parent; - var lastStep; - var text; - var split; - - if(typeof cfi === 'string') { - cfi = this.parse(cfi); - } - // Get the terminal step - lastStep = cfi.steps[cfi.steps.length-1]; - - // check spinePos - if(cfi.spinePos === -1) { - // Not a valid CFI - return false; - } - - // Find the CFI elements parent - parent = this.findParent(cfi, doc); - - if(!parent) { - // CFI didn't return an element - // Maybe it isnt in the current chapter? - return false; - } - - if(lastStep && lastStep.type === "text") { - text = parent.childNodes[lastStep.index]; - if(cfi.characterOffset){ - split = text.splitText(cfi.characterOffset); - marker.classList.add("EPUBJS-CFI-SPLIT"); - parent.insertBefore(marker, split); - } else { - parent.insertBefore(marker, text); - } - } else { - parent.insertBefore(marker, parent.firstChild); - } - - return marker; -}; - -EPUBJS.EpubCFI.prototype.createMarker = function(_doc) { - var doc = _doc || document; - var element = doc.createElement('span'); - element.id = "EPUBJS-CFI-MARKER:"+ EPUBJS.core.uuid(); - element.classList.add("EPUBJS-CFI-MARKER"); - - return element; -}; - -EPUBJS.EpubCFI.prototype.removeMarker = function(marker, _doc) { - var doc = _doc || document; - // var id = marker.id; - - // Cleanup textnodes if they were split - if(marker.classList.contains("EPUBJS-CFI-SPLIT")){ - nextSib = marker.nextSibling; - prevSib = marker.previousSibling; - if(nextSib && - prevSib && - nextSib.nodeType === 3 && - prevSib.nodeType === 3){ - - prevSib.textContent += nextSib.textContent; - marker.parentNode.removeChild(nextSib); - } - marker.parentNode.removeChild(marker); - } else if(marker.classList.contains("EPUBJS-CFI-MARKER")) { - // Remove only elements added as markers - marker.parentNode.removeChild(marker); - } - -}; - -EPUBJS.EpubCFI.prototype.findParent = function(cfi, _doc) { - var doc = _doc || document, - element = doc.getElementsByTagName('html')[0], - children = Array.prototype.slice.call(element.children), - num, index, part, sections, - text, textBegin, textEnd; - - if(typeof cfi === 'string') { - cfi = this.parse(cfi); - } - - sections = cfi.steps.slice(0); // Clone steps array - if(!sections.length) { - return doc.getElementsByTagName('body')[0]; - } - - while(sections && sections.length > 0) { - part = sections.shift(); - // Find textNodes Parent - if(part.type === "text") { - text = element.childNodes[part.index]; - element = text.parentNode || element; - // Find element by id if present - } else if(part.id){ - element = doc.getElementById(part.id); - // Find element in parent - }else{ - element = children[part.index]; - } - // Element can't be found - if(typeof element === "undefined") { - console.error("No Element For", part, cfi.str); - return false; - } - // Get current element children and continue through steps - children = Array.prototype.slice.call(element.children); - } - - return element; -}; - -EPUBJS.EpubCFI.prototype.compare = function(cfiOne, cfiTwo) { - if(typeof cfiOne === 'string') { - cfiOne = new EPUBJS.EpubCFI(cfiOne); - } - if(typeof cfiTwo === 'string') { - cfiTwo = new EPUBJS.EpubCFI(cfiTwo); - } - // Compare Spine Positions - if(cfiOne.spinePos > cfiTwo.spinePos) { - return 1; - } - if(cfiOne.spinePos < cfiTwo.spinePos) { - return -1; - } - - - // Compare Each Step in the First item - for (var i = 0; i < cfiOne.steps.length; i++) { - if(!cfiTwo.steps[i]) { - return 1; - } - if(cfiOne.steps[i].index > cfiTwo.steps[i].index) { - return 1; - } - if(cfiOne.steps[i].index < cfiTwo.steps[i].index) { - return -1; - } - // Otherwise continue checking - } - - // All steps in First present in Second - if(cfiOne.steps.length < cfiTwo.steps.length) { - return -1; - } - - // Compare the charecter offset of the text node - if(cfiOne.characterOffset > cfiTwo.characterOffset) { - return 1; - } - if(cfiOne.characterOffset < cfiTwo.characterOffset) { - return -1; - } - - // CFI's are equal - return 0; -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromHref = function(href, book) { - var uri = EPUBJS.core.uri(href); - var path = uri.path; - var fragment = uri.fragment; - var spinePos = book.spineIndexByURL[path]; - var loaded; - var deferred = new RSVP.defer(); - var epubcfi = new EPUBJS.EpubCFI(); - var spineItem; - - if(typeof spinePos !== "undefined"){ - spineItem = book.spine[spinePos]; - loaded = book.loadXml(spineItem.url); - loaded.then(function(doc){ - var element = doc.getElementById(fragment); - var cfi; - cfi = epubcfi.generateCfiFromElement(element, spineItem.cfiBase); - deferred.resolve(cfi); - }); - } - - return deferred.promise; -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromTextNode = function(anchor, offset, base) { - var parent = anchor.parentNode; - var steps = this.pathTo(parent); - var path = this.generatePathComponent(steps); - var index = 1 + (2 * Array.prototype.indexOf.call(parent.childNodes, anchor)); - return "epubcfi(" + base + "!" + path + "/"+index+":"+(offset || 0)+")"; -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromRangeAnchor = function(range, base) { - var anchor = range.anchorNode; - var offset = range.anchorOffset; - return this.generateCfiFromTextNode(anchor, offset, base); -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromRange = function(range, base) { - var start, startElement, startSteps, startPath, startOffset, startIndex; - var end, endElement, endSteps, endPath, endOffset, endIndex; - - start = range.startContainer; - - if(start.nodeType === 3) { // text node - startElement = start.parentNode; - //startIndex = 1 + (2 * Array.prototype.indexOf.call(startElement.childNodes, start)); - startIndex = 1 + (2 * EPUBJS.core.indexOfTextNode(start)); - startSteps = this.pathTo(startElement); - } else if(range.collapsed) { - return this.generateCfiFromElement(start, base); // single element - } else { - startSteps = this.pathTo(start); - } - - startPath = this.generatePathComponent(startSteps); - startOffset = range.startOffset; - - if(!range.collapsed) { - end = range.endContainer; - - if(end.nodeType === 3) { // text node - endElement = end.parentNode; - // endIndex = 1 + (2 * Array.prototype.indexOf.call(endElement.childNodes, end)); - endIndex = 1 + (2 * EPUBJS.core.indexOfTextNode(end)); - - endSteps = this.pathTo(endElement); - } else { - endSteps = this.pathTo(end); - } - - endPath = this.generatePathComponent(endSteps); - endOffset = range.endOffset; - - return "epubcfi(" + base + "!" + startPath + "/" + startIndex + ":" + startOffset + "," + endPath + "/" + endIndex + ":" + endOffset + ")"; - - } else { - return "epubcfi(" + base + "!" + startPath + "/"+ startIndex +":"+ startOffset +")"; - } -}; - -EPUBJS.EpubCFI.prototype.generateXpathFromSteps = function(steps) { - var xpath = [".", "*"]; - - steps.forEach(function(step){ - var position = step.index + 1; - - if(step.id){ - xpath.push("*[position()=" + position + " and @id='" + step.id + "']"); - } else if(step.type === "text") { - xpath.push("text()[" + position + "]"); - } else { - xpath.push("*[" + position + "]"); - } - }); - - return xpath.join("/"); -}; - - -EPUBJS.EpubCFI.prototype.generateRangeFromCfi = function(cfi, _doc) { - var doc = _doc || document; - var range = doc.createRange(); - var lastStep; - var xpath; - var startContainer; - var textLength; - - if(typeof cfi === 'string') { - cfi = this.parse(cfi); - } - - // check spinePos - if(cfi.spinePos === -1) { - // Not a valid CFI - return false; - } - - xpath = this.generateXpathFromSteps(cfi.steps); - - // Get the terminal step - lastStep = cfi.steps[cfi.steps.length-1]; - startContainer = doc.evaluate(xpath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - - if(!startContainer) { - return null; - } - - if(startContainer && cfi.characterOffset >= 0) { - textLength = startContainer.length; - - if(cfi.characterOffset < textLength) { - range.setStart(startContainer, cfi.characterOffset); - range.setEnd(startContainer, textLength ); - } else { - console.debug("offset greater than length:", cfi.characterOffset, textLength); - range.setStart(startContainer, textLength - 1 ); - range.setEnd(startContainer, textLength ); - } - } else if(startContainer) { - range.selectNode(startContainer); - } - // doc.defaultView.getSelection().addRange(range); - return range; -}; - -EPUBJS.Events = function(obj, el){ - - this.events = {}; - - if(!el){ - this.el = document.createElement('div'); - }else{ - this.el = el; - } - - obj.createEvent = this.createEvent; - obj.tell = this.tell; - obj.listen = this.listen; - obj.deafen = this.deafen; - obj.listenUntil = this.listenUntil; - - return this; -}; - -EPUBJS.Events.prototype.createEvent = function(evt){ - var e = new CustomEvent(evt); - this.events[evt] = e; - return e; -}; - -EPUBJS.Events.prototype.tell = function(evt, msg){ - var e; - - if(!this.events[evt]){ - console.warn("No event:", evt, "defined yet, creating."); - e = this.createEvent(evt); - }else{ - e = this.events[evt]; - } - - if(msg) e.msg = msg; - this.el.dispatchEvent(e); - -}; - -EPUBJS.Events.prototype.listen = function(evt, func, bindto){ - if(!this.events[evt]){ - console.warn("No event:", evt, "defined yet, creating."); - this.createEvent(evt); - return; - } - - if(bindto){ - this.el.addEventListener(evt, func.bind(bindto), false); - }else{ - this.el.addEventListener(evt, func, false); - } - -}; - -EPUBJS.Events.prototype.deafen = function(evt, func){ - this.el.removeEventListener(evt, func, false); -}; - -EPUBJS.Events.prototype.listenUntil = function(OnEvt, OffEvt, func, bindto){ - this.listen(OnEvt, func, bindto); - - function unlisten(){ - this.deafen(OnEvt, func); - this.deafen(OffEvt, unlisten); - } - - this.listen(OffEvt, unlisten, this); -}; -EPUBJS.hooks = {}; -EPUBJS.Hooks = (function(){ - function hooks(){} - - //-- Get pre-registered hooks - hooks.prototype.getHooks = function(){ - var plugs; - this.hooks = {}; - Array.prototype.slice.call(arguments).forEach(function(arg){ - this.hooks[arg] = []; - }, this); - - for (var plugType in this.hooks) { - plugs = _.values(EPUBJS.hooks[plugType]); - - plugs.forEach(function(hook){ - this.registerHook(plugType, hook); - }, this); - } - }; - - //-- Hooks allow for injecting async functions that must all complete before continuing - // Functions must have a callback as their first argument. - hooks.prototype.registerHook = function(type, toAdd, toFront){ - - if(typeof(this.hooks[type]) != "undefined"){ - - if(typeof(toAdd) === "function"){ - if(toFront) { - this.hooks[type].unshift(toAdd); - }else{ - this.hooks[type].push(toAdd); - } - }else if(Array.isArray(toAdd)){ - toAdd.forEach(function(hook){ - if(toFront) { - this.hooks[type].unshift(hook); - }else{ - this.hooks[type].push(hook); - } - }, this); - } - }else{ - //-- Allows for undefined hooks, but maybe this should error? - this.hooks[type] = [func]; - } - }; - - hooks.prototype.triggerHooks = function(type, callback, passed){ - var hooks, count; - - if(typeof(this.hooks[type]) == "undefined") return false; - - hooks = this.hooks[type]; - - count = hooks.length; - if(count === 0 && callback) { - callback(); - } - - function countdown(){ - count--; - if(count <= 0 && callback) callback(); - } - - hooks.forEach(function(hook){ - hook(countdown, passed); - }); - }; - - return { - register: function(name) { - if(EPUBJS.hooks[name] === undefined) { EPUBJS.hooks[name] = {}; } - if(typeof EPUBJS.hooks[name] !== 'object') { throw "Already registered: "+name; } - return EPUBJS.hooks[name]; - }, - mixin: function(object) { - for (var prop in hooks.prototype) { - object[prop] = hooks.prototype[prop]; - } - } - }; -})(); - - -EPUBJS.Layout = EPUBJS.Layout || {}; - -EPUBJS.Layout.Reflowable = function(){ - this.documentElement = null; - this.spreadWidth = null; -}; - -EPUBJS.Layout.Reflowable.prototype.format = function(documentElement, _width, _height, _gap){ - // Get the prefixed CSS commands - var columnAxis = EPUBJS.core.prefixed('columnAxis'); - var columnGap = EPUBJS.core.prefixed('columnGap'); - var columnWidth = EPUBJS.core.prefixed('columnWidth'); - var columnFill = EPUBJS.core.prefixed('columnFill'); - - //-- Check the width and create even width columns - var width = Math.floor(_width); - // var width = (fullWidth % 2 === 0) ? fullWidth : fullWidth - 0; // Not needed for single - var section = Math.floor(width / 8); - var gap = (_gap >= 0) ? _gap : ((section % 2 === 0) ? section : section - 1); - this.documentElement = documentElement; - //-- Single Page - this.spreadWidth = (width + gap); - - - documentElement.style.overflow = "hidden"; - - // Must be set to the new calculated width or the columns will be off - documentElement.style.width = width + "px"; - - //-- Adjust height - documentElement.style.height = _height + "px"; - - //-- Add columns - documentElement.style[columnAxis] = "horizontal"; - documentElement.style[columnFill] = "auto"; - documentElement.style[columnWidth] = width+"px"; - documentElement.style[columnGap] = gap+"px"; - this.colWidth = width; - this.gap = gap; - - return { - pageWidth : this.spreadWidth, - pageHeight : _height - }; -}; - -EPUBJS.Layout.Reflowable.prototype.calculatePages = function() { - var totalWidth, displayedPages; - this.documentElement.style.width = "auto"; //-- reset width for calculations - totalWidth = this.documentElement.scrollWidth; - displayedPages = Math.ceil(totalWidth / this.spreadWidth); - - return { - displayedPages : displayedPages, - pageCount : displayedPages - }; -}; - -EPUBJS.Layout.ReflowableSpreads = function(){ - this.documentElement = null; - this.spreadWidth = null; -}; - -EPUBJS.Layout.ReflowableSpreads.prototype.format = function(documentElement, _width, _height, _gap){ - var columnAxis = EPUBJS.core.prefixed('columnAxis'); - var columnGap = EPUBJS.core.prefixed('columnGap'); - var columnWidth = EPUBJS.core.prefixed('columnWidth'); - var columnFill = EPUBJS.core.prefixed('columnFill'); - - var divisor = 2, - cutoff = 800; - - //-- Check the width and create even width columns - var fullWidth = Math.floor(_width); - var width = (fullWidth % 2 === 0) ? fullWidth : fullWidth - 1; - - var section = Math.floor(width / 8); - var gap = (_gap >= 0) ? _gap : ((section % 2 === 0) ? section : section - 1); - - //-- Double Page - var colWidth = Math.floor((width - gap) / divisor); - - this.documentElement = documentElement; - this.spreadWidth = (colWidth + gap) * divisor; - - - documentElement.style.overflow = "hidden"; - - // Must be set to the new calculated width or the columns will be off - documentElement.style.width = width + "px"; - - //-- Adjust height - documentElement.style.height = _height + "px"; - - //-- Add columns - documentElement.style[columnAxis] = "horizontal"; - documentElement.style[columnFill] = "auto"; - documentElement.style[columnGap] = gap+"px"; - documentElement.style[columnWidth] = colWidth+"px"; - - this.colWidth = colWidth; - this.gap = gap; - return { - pageWidth : this.spreadWidth, - pageHeight : _height - }; -}; - -EPUBJS.Layout.ReflowableSpreads.prototype.calculatePages = function() { - var totalWidth = this.documentElement.scrollWidth; - var displayedPages = Math.ceil(totalWidth / this.spreadWidth); - - //-- Add a page to the width of the document to account an for odd number of pages - this.documentElement.style.width = totalWidth + this.spreadWidth + "px"; - return { - displayedPages : displayedPages, - pageCount : displayedPages * 2 - }; -}; - -EPUBJS.Layout.Fixed = function(){ - this.documentElement = null; -}; - -EPUBJS.Layout.Fixed = function(documentElement, _width, _height, _gap){ - var columnWidth = EPUBJS.core.prefixed('columnWidth'); - var viewport = documentElement.querySelector("[name=viewport"); - var content; - var contents; - var width, height; - - this.documentElement = documentElement; - /** - * check for the viewport size - * - */ - if(viewport && viewport.hasAttribute("content")) { - content = viewport.getAttribute("content"); - contents = content.split(','); - if(contents[0]){ - width = contents[0].replace("width=", ''); - } - if(contents[1]){ - height = contents[1].replace("height=", ''); - } - } - - //-- Adjust width and height - documentElement.style.width = width + "px" || "auto"; - documentElement.style.height = height + "px" || "auto"; - - //-- Remove columns - documentElement.style[columnWidth] = "auto"; - - //-- Scroll - documentElement.style.overflow = "auto"; - - this.colWidth = width; - this.gap = 0; - - return { - pageWidth : width, - pageHeight : height - }; - -}; - -EPUBJS.Layout.Fixed.prototype.calculatePages = function(){ - return { - displayedPages : 1, - pageCount : 1 - }; -}; - -EPUBJS.Pagination = function(pageList) { - this.pages = []; - this.locations = []; - this.epubcfi = new EPUBJS.EpubCFI(); - if(pageList && pageList.length) { - this.process(pageList); - } -}; - -EPUBJS.Pagination.prototype.process = function(pageList){ - pageList.forEach(function(item){ - this.pages.push(item.page); - this.locations.push(item.cfi); - }, this); - - this.pageList = pageList; - this.firstPage = parseInt(this.pages[0]); - this.lastPage = parseInt(this.pages[this.pages.length-1]); - this.totalPages = this.lastPage - this.firstPage; -}; - -EPUBJS.Pagination.prototype.pageFromCfi = function(cfi){ - var pg = -1; - - // Check if the pageList has not been set yet - if(this.locations.length === 0) { - return -1; - } - - // TODO: check if CFI is valid? - - // check if the cfi is in the location list - // var index = this.locations.indexOf(cfi); - var index = EPUBJS.core.indexOfSorted(cfi, this.locations, this.epubcfi.compare); - if(index != -1 && index < (this.pages.length-1) ) { - pg = this.pages[index]; - } else { - // Otherwise add it to the list of locations - // Insert it in the correct position in the locations page - //index = EPUBJS.core.insert(cfi, this.locations, this.epubcfi.compare); - index = EPUBJS.core.locationOf(cfi, this.locations, this.epubcfi.compare); - // Get the page at the location just before the new one, or return the first - pg = index-1 >= 0 ? this.pages[index-1] : this.pages[0]; - pg = this.pages[index]; - if(pg !== undefined) { - // Add the new page in so that the locations and page array match up - //this.pages.splice(index, 0, pg); - } else { - pg = -1; - } - - } - return pg; -}; - -EPUBJS.Pagination.prototype.cfiFromPage = function(pg){ - var cfi = -1; - // check that pg is an int - if(typeof pg != "number"){ - pg = parseInt(pg); - } - - // check if the cfi is in the page list - // Pages could be unsorted. - var index = this.pages.indexOf(pg); - if(index != -1) { - cfi = this.locations[index]; - } - // TODO: handle pages not in the list - return cfi; -}; - -EPUBJS.Pagination.prototype.pageFromPercentage = function(percent){ - var pg = Math.round(this.totalPages * percent); - return pg; -}; - -// Returns a value between 0 - 1 corresponding to the location of a page -EPUBJS.Pagination.prototype.percentageFromPage = function(pg){ - var percentage = (pg - this.firstPage) / this.totalPages; - return Math.round(percentage * 1000) / 1000; -}; - -// Returns a value between 0 - 1 corresponding to the location of a cfi -EPUBJS.Pagination.prototype.percentageFromCfi = function(cfi){ - var pg = this.pageFromCfi(cfi); - var percentage = this.percentageFromPage(pg); - return percentage; -}; -EPUBJS.Parser = function(baseUrl){ - this.baseUrl = baseUrl || ''; -}; - -EPUBJS.Parser.prototype.container = function(containerXml){ - //-- - var rootfile, fullpath, folder, encoding; - - if(!containerXml) { - console.error("Container File Not Found"); - return; - } - - rootfile = containerXml.querySelector("rootfile"); - - if(!rootfile) { - console.error("No RootFile Found"); - return; - } - - fullpath = rootfile.getAttribute('full-path'); - folder = EPUBJS.core.uri(fullpath).directory; - encoding = containerXml.xmlEncoding; - - //-- Now that we have the path we can parse the contents - return { - 'packagePath' : fullpath, - 'basePath' : folder, - 'encoding' : encoding - }; -}; - -EPUBJS.Parser.prototype.identifier = function(packageXml){ - var metadataNode; - - if(!packageXml) { - console.error("Package File Not Found"); - return; - } - - metadataNode = packageXml.querySelector("metadata"); - - if(!metadataNode) { - console.error("No Metadata Found"); - return; - } - - return this.getElementText(metadataNode, "identifier"); -}; - -EPUBJS.Parser.prototype.packageContents = function(packageXml, baseUrl){ - var parse = this; - var metadataNode, manifestNode, spineNode; - var manifest, navPath, tocPath, coverPath; - var spineNodeIndex; - var spine; - var spineIndexByURL; - - if(baseUrl) this.baseUrl = baseUrl; - - if(!packageXml) { - console.error("Package File Not Found"); - return; - } - - metadataNode = packageXml.querySelector("metadata"); - if(!metadataNode) { - console.error("No Metadata Found"); - return; - } - - manifestNode = packageXml.querySelector("manifest"); - if(!manifestNode) { - console.error("No Manifest Found"); - return; - } - - spineNode = packageXml.querySelector("spine"); - if(!spineNode) { - console.error("No Spine Found"); - return; - } - - manifest = parse.manifest(manifestNode); - navPath = parse.findNavPath(manifestNode); - tocPath = parse.findTocPath(manifestNode); - coverPath = parse.findCoverPath(manifestNode); - - spineNodeIndex = Array.prototype.indexOf.call(spineNode.parentNode.childNodes, spineNode); - - spine = parse.spine(spineNode, manifest); - - spineIndexByURL = {}; - spine.forEach(function(item){ - spineIndexByURL[item.href] = item.index; - }); - - return { - 'metadata' : parse.metadata(metadataNode), - 'spine' : spine, - 'manifest' : manifest, - 'navPath' : navPath, - 'tocPath' : tocPath, - 'coverPath': coverPath, - 'spineNodeIndex' : spineNodeIndex, - 'spineIndexByURL' : spineIndexByURL - }; -}; - -//-- Find TOC NAV: media-type="application/xhtml+xml" href="toc.ncx" -EPUBJS.Parser.prototype.findNavPath = function(manifestNode){ - var node = manifestNode.querySelector("item[properties^='nav']"); - return node ? node.getAttribute('href') : false; -}; - -//-- Find TOC NCX: media-type="application/x-dtbncx+xml" href="toc.ncx" -EPUBJS.Parser.prototype.findTocPath = function(manifestNode){ - var node = manifestNode.querySelector("item[media-type='application/x-dtbncx+xml']"); - return node ? node.getAttribute('href') : false; -}; - -//-- Find Cover: -EPUBJS.Parser.prototype.findCoverPath = function(manifestNode){ - var node = manifestNode.querySelector("item[properties='cover-image']"); - return node ? node.getAttribute('href') : false; -}; - -//-- Expanded to match Readium web components -EPUBJS.Parser.prototype.metadata = function(xml){ - var metadata = {}, - p = this; - - metadata.bookTitle = p.getElementText(xml, 'title'); - metadata.creator = p.getElementText(xml, 'creator'); - metadata.description = p.getElementText(xml, 'description'); - - metadata.pubdate = p.getElementText(xml, 'date'); - - metadata.publisher = p.getElementText(xml, 'publisher'); - - metadata.identifier = p.getElementText(xml, "identifier"); - metadata.language = p.getElementText(xml, "language"); - metadata.rights = p.getElementText(xml, "rights"); - - metadata.modified_date = p.querySelectorText(xml, "meta[property='dcterms:modified']"); - metadata.layout = p.querySelectorText(xml, "meta[property='rendition:layout']"); - metadata.orientation = p.querySelectorText(xml, "meta[property='rendition:orientation']"); - metadata.spread = p.querySelectorText(xml, "meta[property='rendition:spread']"); - // metadata.page_prog_dir = packageXml.querySelector("spine").getAttribute("page-progression-direction"); - - return metadata; -}; - -EPUBJS.Parser.prototype.getElementText = function(xml, tag){ - var found = xml.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/", tag), - el; - - if(!found || found.length === 0) return ''; - - el = found[0]; - - if(el.childNodes.length){ - return el.childNodes[0].nodeValue; - } - - return ''; - -}; - -EPUBJS.Parser.prototype.querySelectorText = function(xml, q){ - var el = xml.querySelector(q); - - if(el && el.childNodes.length){ - return el.childNodes[0].nodeValue; - } - - return ''; -}; - -EPUBJS.Parser.prototype.manifest = function(manifestXml){ - var baseUrl = this.baseUrl, - manifest = {}; - - //-- Turn items into an array - var selected = manifestXml.querySelectorAll("item"), - items = Array.prototype.slice.call(selected); - - //-- Create an object with the id as key - items.forEach(function(item){ - var id = item.getAttribute('id'), - href = item.getAttribute('href') || '', - type = item.getAttribute('media-type') || '', - properties = item.getAttribute('properties') || ''; - - manifest[id] = { - 'href' : href, - 'url' : baseUrl + href, //-- Absolute URL for loading with a web worker - 'type' : type, - 'properties' : properties - }; - - }); - - return manifest; - -}; - -EPUBJS.Parser.prototype.spine = function(spineXml, manifest){ - var spine = []; - - var selected = spineXml.getElementsByTagName("itemref"), - items = Array.prototype.slice.call(selected); - - var spineNodeIndex = Array.prototype.indexOf.call(spineXml.parentNode.childNodes, spineXml); - - var epubcfi = new EPUBJS.EpubCFI(); - - //-- Add to array to mantain ordering and cross reference with manifest - items.forEach(function(item, index){ - var Id = item.getAttribute('idref'); - var cfiBase = epubcfi.generateChapterComponent(spineNodeIndex, index, Id); - var props = item.getAttribute('properties') || ''; - var propArray = props.length ? props.split(' ') : []; - var manifestProps = manifest[Id].properties; - var manifestPropArray = manifestProps.length ? manifestProps.split(' ') : []; - var vert = { - 'id' : Id, - 'linear' : item.getAttribute('linear') || '', - 'properties' : propArray, - 'manifestProperties' : manifestPropArray, - 'href' : manifest[Id].href, - 'url' : manifest[Id].url, - 'index' : index, - 'cfiBase' : cfiBase, - 'cfi' : "epub(" + cfiBase + ")" - }; - spine.push(vert); - }); - - return spine; -}; - -EPUBJS.Parser.prototype.nav = function(navHtml, spineIndexByURL, bookSpine){ - var navEl = navHtml.querySelector('nav[*|type="toc"]'), //-- [*|type="toc"] * Doesn't seem to work - idCounter = 0; - - if(!navEl) return []; - - // Implements `> ol > li` - function findListItems(parent){ - var items = []; - - Array.prototype.slice.call(parent.childNodes).forEach(function(node){ - if('ol' == node.tagName){ - Array.prototype.slice.call(node.childNodes).forEach(function(item){ - if('li' == item.tagName){ - items.push(item); - } - }); - } - }); - - return items; - - } - - // Implements `> a, > span` - function findAnchorOrSpan(parent){ - var item = null; - - Array.prototype.slice.call(parent.childNodes).forEach(function(node){ - if('a' == node.tagName || 'span' == node.tagName){ - item = node; - } - }); - - return item; - } - - function getTOC(parent){ - var list = [], - nodes = findListItems(parent), - items = Array.prototype.slice.call(nodes), - length = items.length, - node; - - if(length === 0) return false; - - items.forEach(function(item){ - var id = item.getAttribute('id') || false, - content = findAnchorOrSpan(item), - href = content.getAttribute('href') || '', - text = content.textContent || "", - split = href.split("#"), - baseUrl = split[0], - subitems = getTOC(item), - spinePos = spineIndexByURL[baseUrl], - spineItem = bookSpine[spinePos], - cfi = spineItem ? spineItem.cfi : ''; - - if(!id) { - if(spinePos) { - spineItem = bookSpine[spinePos]; - id = spineItem.id; - cfi = spineItem.cfi; - } else { - id = 'epubjs-autogen-toc-id-' + (idCounter++); - } - } - - item.setAttribute('id', id); // Ensure all elements have an id - list.push({ - "id": id, - "href": href, - "label": text, - "subitems" : subitems, - "parent" : parent ? parent.getAttribute('id') : null, - "cfi" : cfi - }); - - }); - - return list; - } - - return getTOC(navEl); -}; - -EPUBJS.Parser.prototype.toc = function(tocXml, spineIndexByURL, bookSpine){ - var navMap = tocXml.querySelector("navMap"); - if(!navMap) return []; - - function getTOC(parent){ - var list = [], - nodes = parent.querySelectorAll("navPoint"), - items = Array.prototype.slice.call(nodes).reverse(), - length = items.length, - iter = length, - node; - - if(length === 0) return []; - - items.forEach(function(item){ - var id = item.getAttribute('id') || false, - content = item.querySelector("content"), - src = content.getAttribute('src'), - navLabel = item.querySelector("navLabel"), - text = navLabel.textContent ? navLabel.textContent : "", - split = src.split("#"), - baseUrl = split[0], - spinePos = spineIndexByURL[baseUrl], - spineItem = bookSpine[spinePos], - subitems = getTOC(item), - cfi = spineItem ? spineItem.cfi : ''; - - if(!id) { - if(spinePos) { - spineItem = bookSpine[spinePos]; - id = spineItem.id; - cfi = spineItem.cfi; - } else { - id = 'epubjs-autogen-toc-id-' + (idCounter++); - } - } - - - list.unshift({ - "id": id, - "href": src, - "label": text, - "spinePos": spinePos, - "subitems" : subitems, - "parent" : parent ? parent.getAttribute('id') : null, - "cfi" : cfi - }); - - }); - - return list; - } - - return getTOC(navMap); -}; - -EPUBJS.Parser.prototype.pageList = function(navHtml, spineIndexByURL, bookSpine){ - var navEl = navHtml.querySelector('nav[*|type="page-list"]'), - idCounter = 0; - - if(!navEl) return []; - - // Implements `> ol > li` - function findListItems(parent){ - var items = []; - - Array.prototype.slice.call(parent.childNodes).forEach(function(node){ - if('ol' == node.tagName){ - Array.prototype.slice.call(node.childNodes).forEach(function(item){ - if('li' == item.tagName){ - items.push(item); - } - }); - } - }); - - return items; - - } - - // Implements `> a, > span` - function findAnchorOrSpan(parent){ - var item = null; - - Array.prototype.slice.call(parent.childNodes).forEach(function(node){ - if('a' == node.tagName || 'span' == node.tagName){ - item = node; - } - }); - - return item; - } - - function getPages(parent){ - var list = [], - nodes = findListItems(parent), - items = Array.prototype.slice.call(nodes), - length = items.length, - node; - - if(length === 0) return false; - - items.forEach(function(item){ - var id = item.getAttribute('id') || false, - content = findAnchorOrSpan(item), - href = content.getAttribute('href') || '', - text = content.textContent || "", - page = parseInt(text), - isCfi = href.indexOf("epubcfi"), - split, - packageUrl, - cfi; - - if(isCfi != -1) { - split = href.split("#"); - packageUrl = split[0]; - cfi = split.length > 1 ? split[1] : false; - list.push({ - "cfi" : cfi, - "href" : href, - "packageUrl" : packageUrl, - "page" : page - }); - } else { - list.push({ - "href" : href, - "page" : page - }); - } - - }); - - return list; - } - - return getPages(navEl); -}; - -EPUBJS.Render.Iframe = function() { - this.iframe = null; - this.document = null; - this.window = null; - this.docEl = null; - this.bodyEl = null; - - this.leftPos = 0; - this.pageWidth = 0; -}; - -//-- Build up any html needed -EPUBJS.Render.Iframe.prototype.create = function(){ - this.iframe = document.createElement('iframe'); - this.iframe.id = "epubjs-iframe:" + EPUBJS.core.uuid(); - this.iframe.scrolling = "no"; - this.iframe.seamless = "seamless"; - // Back up if seamless isn't supported - this.iframe.style.border = "none"; - - this.iframe.addEventListener("load", this.loaded.bind(this), false); - return this.iframe; -}; - -/** -* Sets the source of the iframe with the given URL string -* Takes: URL string -* Returns: promise with document element -*/ -EPUBJS.Render.Iframe.prototype.load = function(url){ - var render = this, - deferred = new RSVP.defer(); - - this.iframe.contentWindow.location.replace(url); - // Reset the scroll position - render.leftPos = 0; - - if(this.window) { - this.unload(); - } - - this.iframe.onload = function(e) { - render.document = render.iframe.contentDocument; - render.docEl = render.document.documentElement; - render.headEl = render.document.head; - render.bodyEl = render.document.body; - render.window = render.iframe.contentWindow; - - render.window.addEventListener("resize", render.resized.bind(render), false); - - //-- Clear Margins - if(render.bodyEl) { - render.bodyEl.style.margin = "0"; - } - - deferred.resolve(render.docEl); - }; - - this.iframe.onerror = function(e) { - //console.error("Error Loading Contents", e); - deferred.reject({ - message : "Error Loading Contents: " + e, - stack : new Error().stack - }); - }; - return deferred.promise; -}; - - -EPUBJS.Render.Iframe.prototype.loaded = function(v){ - var url = this.iframe.contentWindow.location.href; - if(url != "about:blank"){ - this.trigger("render:loaded", url); - } -}; - -// Resize the iframe to the given width and height -EPUBJS.Render.Iframe.prototype.resize = function(width, height){ - var iframeBox; - - if(!this.iframe) return; - - this.iframe.height = height; - - if(!isNaN(width) && width % 2 !== 0){ - width += 1; //-- Prevent cutting off edges of text in columns - } - - this.iframe.width = width; - // Get the fractional height and width of the iframe - // Default to orginal if bounding rect is 0 - this.width = this.iframe.getBoundingClientRect().width || width; - this.height = this.iframe.getBoundingClientRect().height || height; -}; - - -EPUBJS.Render.Iframe.prototype.resized = function(e){ - // Get the fractional height and width of the iframe - this.width = this.iframe.getBoundingClientRect().width; - this.height = this.iframe.getBoundingClientRect().height; -}; - -EPUBJS.Render.Iframe.prototype.totalWidth = function(){ - return this.docEl.scrollWidth; -}; - -EPUBJS.Render.Iframe.prototype.totalHeight = function(){ - return this.docEl.scrollHeight; -}; - -EPUBJS.Render.Iframe.prototype.setPageDimensions = function(pageWidth, pageHeight){ - this.pageWidth = pageWidth; - this.pageHeight = pageHeight; - //-- Add a page to the width of the document to account an for odd number of pages - // this.docEl.style.width = this.docEl.scrollWidth + pageWidth + "px"; -}; - -EPUBJS.Render.Iframe.prototype.setLeft = function(leftPos){ - // this.bodyEl.style.marginLeft = -leftPos + "px"; - // this.docEl.style.marginLeft = -leftPos + "px"; - // this.docEl.style[EPUBJS.Render.Iframe.transform] = 'translate('+ (-leftPos) + 'px, 0)'; - this.document.defaultView.scrollTo(leftPos, 0); -}; - -EPUBJS.Render.Iframe.prototype.setStyle = function(style, val, prefixed){ - if(prefixed) { - style = EPUBJS.core.prefixed(style); - } - - if(this.bodyEl) this.bodyEl.style[style] = val; -}; - -EPUBJS.Render.Iframe.prototype.removeStyle = function(style){ - - if(this.bodyEl) this.bodyEl.style[style] = ''; - -}; - -EPUBJS.Render.Iframe.prototype.addHeadTag = function(tag, attrs) { - var tagEl = document.createElement(tag); - - for(var attr in attrs) { - tagEl[attr] = attrs[attr]; - } - - if(this.headEl) this.headEl.appendChild(tagEl); -}; - -EPUBJS.Render.Iframe.prototype.page = function(pg){ - this.leftPos = this.pageWidth * (pg-1); //-- pages start at 1 - this.setLeft(this.leftPos); -}; - -//-- Show the page containing an Element -EPUBJS.Render.Iframe.prototype.getPageNumberByElement = function(el){ - var left, pg; - if(!el) return; - - left = this.leftPos + el.getBoundingClientRect().left; //-- Calculate left offset compaired to scrolled position - - pg = Math.floor(left / this.pageWidth) + 1; //-- pages start at 1 - - return pg; -}; - -//-- Show the page containing an Element -EPUBJS.Render.Iframe.prototype.getPageNumberByRect = function(boundingClientRect){ - var left, pg; - - left = this.leftPos + boundingClientRect.left; //-- Calculate left offset compaired to scrolled position - pg = Math.floor(left / this.pageWidth) + 1; //-- pages start at 1 - - return pg; -}; - -// Return the root element of the content -EPUBJS.Render.Iframe.prototype.getBaseElement = function(){ - return this.bodyEl; -}; - -// Checks if an element is on the screen -EPUBJS.Render.Iframe.prototype.isElementVisible = function(el){ - var rect; - var left; - - if(el && typeof el.getBoundingClientRect === 'function'){ - rect = el.getBoundingClientRect(); - left = rect.left; //+ rect.width; - if( rect.width !== 0 && - rect.height !== 0 && // Element not visible - left >= 0 && - left < this.pageWidth ) { - return true; - } - } - - return false; -}; - - -EPUBJS.Render.Iframe.prototype.scroll = function(bool){ - if(bool) { - this.iframe.scrolling = "yes"; - } else { - this.iframe.scrolling = "no"; - } -}; - -// Cleanup event listeners -EPUBJS.Render.Iframe.prototype.unload = function(){ - this.window.removeEventListener("resize", this.resized); -}; - -//-- Enable binding events to Render -RSVP.EventTarget.mixin(EPUBJS.Render.Iframe.prototype); -EPUBJS.Renderer = function(renderMethod, hidden) { - // Dom events to listen for - this.listenedEvents = ["keydown", "keyup", "keypressed", "mouseup", "mousedown", "click"]; - this.upEvent = "mouseup"; - this.downEvent = "mousedown"; - if('ontouchstart' in document.documentElement) { - this.listenedEvents.push("touchstart", "touchend"); - this.upEvent = "touchend"; - this.downEvent = "touchstart"; - } - /** - * Setup a render method. - * Options are: Iframe - */ - if(renderMethod && typeof(EPUBJS.Render[renderMethod]) != "undefined"){ - this.render = new EPUBJS.Render[renderMethod](); - } else { - console.error("Not a Valid Rendering Method"); - } - - // Listen for load events - this.render.on("render:loaded", this.loaded.bind(this)); - - // Cached for replacement urls from storage - this.caches = {}; - - // Blank Cfi for Parsing - this.epubcfi = new EPUBJS.EpubCFI(); - - this.spreads = true; - this.isForcedSingle = false; - this.resized = _.debounce(this.onResized.bind(this), 100); - - this.layoutSettings = {}; - - this.hidden = hidden || false; - //-- Adds Hook methods to the Book prototype - // Hooks will all return before triggering the callback. - EPUBJS.Hooks.mixin(this); - //-- Get pre-registered hooks for events - this.getHooks("beforeChapterDisplay"); - - //-- Queue up page changes if page map isn't ready - this._q = EPUBJS.core.queue(this); - - this._moving = false; - -}; - -//-- Renderer events for listening -EPUBJS.Renderer.prototype.Events = [ - "renderer:keydown", - "renderer:keyup", - "renderer:keypressed", - "renderer:mouseup", - "renderer:mousedown", - "renderer:click", - "renderer:touchstart", - "renderer:touchend", - "renderer:selected", - "renderer:chapterUnloaded", - "renderer:chapterDisplayed", - "renderer:locationChanged", - "renderer:visibleLocationChanged", - "renderer:resized", - "renderer:spreads" -]; - -/** -* Creates an element to render to. -* Resizes to passed width and height or to the elements size -*/ -EPUBJS.Renderer.prototype.initialize = function(element, width, height){ - this.container = element; - this.element = this.render.create(); - - this.initWidth = width; - this.initHeight = height; - - this.width = width || this.container.clientWidth; - this.height = height || this.container.clientHeight; - - this.container.appendChild(this.element); - - if(width && height){ - this.render.resize(this.width, this.height); - } else { - this.render.resize('100%', '100%'); - } - -}; - -/** -* Display a chapter -* Takes: chapter object, global layout settings -* Returns: Promise with passed Renderer after pages has loaded -*/ -EPUBJS.Renderer.prototype.displayChapter = function(chapter, globalLayout){ - var store = false; - if(this._moving) { - console.error("Rendering In Progress"); - return; - } - this._moving = true; - // Get the url string from the chapter (may be from storage) - return chapter.url(). - then(function(url) { - - // Unload the previous chapter listener - if(this.currentChapter) { - this.currentChapter.unload(); // Remove stored blobs - - if(this.render.window){ - this.render.window.removeEventListener("resize", this.resized); - } - - this.removeEventListeners(); - this.removeSelectionListeners(); - this.trigger("renderer:chapterUnloaded"); - this.contents = null; - this.doc = null; - this.pageMap = null; - } - - this.currentChapter = chapter; - this.chapterPos = 1; - this.currentChapterCfiBase = chapter.cfiBase; - - this.layoutSettings = this.reconcileLayoutSettings(globalLayout, chapter.properties); - return this.load(url); - - }.bind(this)); - -}; - -/** -* Loads a url (string) and renders it, -* attaching event listeners and triggering hooks. -* Returns: Promise with the rendered contents. -*/ - -EPUBJS.Renderer.prototype.load = function(url){ - var deferred = new RSVP.defer(); - var loaded; - - // Switch to the required layout method for the settings - this.layoutMethod = this.determineLayout(this.layoutSettings); - this.layout = new EPUBJS.Layout[this.layoutMethod](); - - this.visible(false); - - render = this.render.load(url); - - render.then(function(contents) { - var formated; - this.currentChapter.setDocument(this.render.document); - this.contents = contents; - this.doc = this.render.document; - - // Format the contents using the current layout method - this.formated = this.layout.format(contents, this.render.width, this.render.height, this.gap); - this.render.setPageDimensions(this.formated.pageWidth, this.formated.pageHeight); - - // window.addEventListener("orientationchange", this.onResized.bind(this), false); - if(!this.initWidth && !this.initHeight){ - this.render.window.addEventListener("resize", this.resized, false); - } - - this.addEventListeners(); - this.addSelectionListeners(); - - //-- Trigger registered hooks before displaying - this.beforeDisplay(function(){ - var pages = this.layout.calculatePages(); - var msg = this.currentChapter; - var queued = this._q.length(); - this._moving = false; - - this.updatePages(pages); - - this.visibleRangeCfi = this.getVisibleRangeCfi(); - this.currentLocationCfi = this.visibleRangeCfi.start; - - if(queued === 0) { - this.trigger("renderer:locationChanged", this.currentLocationCfi); - this.trigger("renderer:visibleRangeChanged", this.visibleRangeCfi); - } - - msg.cfi = this.currentLocationCfi; //TODO: why is this cfi passed to chapterDisplayed - this.trigger("renderer:chapterDisplayed", msg); - - this.visible(true); - - deferred.resolve(this); //-- why does this return the renderer? - }.bind(this)); - - }.bind(this)); - - return deferred.promise; -}; - -EPUBJS.Renderer.prototype.loaded = function(url){ - this.trigger("render:loaded", url); - // var uri = EPUBJS.core.uri(url); - // var relative = uri.path.replace(book.bookUrl, ''); - // console.log(url, uri, relative); -}; - -/** -* Reconciles the current chapters layout properies with -* the global layout properities. -* Takes: global layout settings object, chapter properties string -* Returns: Object with layout properties -*/ -EPUBJS.Renderer.prototype.reconcileLayoutSettings = function(global, chapter){ - var settings = {}; - - //-- Get the global defaults - for (var attr in global) { - if (global.hasOwnProperty(attr)){ - settings[attr] = global[attr]; - } - } - //-- Get the chapter's display type - chapter.forEach(function(prop){ - var rendition = prop.replace("rendition:", ''); - var split = rendition.indexOf("-"); - var property, value; - - if(split != -1){ - property = rendition.slice(0, split); - value = rendition.slice(split+1); - - settings[property] = value; - } - }); - return settings; -}; - -/** -* Uses the settings to determine which Layout Method is needed -* Triggers events based on the method choosen -* Takes: Layout settings object -* Returns: String of appropriate for EPUBJS.Layout function -*/ -EPUBJS.Renderer.prototype.determineLayout = function(settings){ - // Default is layout: reflowable & spread: auto - var spreads = this.determineSpreads(this.minSpreadWidth); - var layoutMethod = spreads ? "ReflowableSpreads" : "Reflowable"; - var scroll = false; - - if(settings.layout === "pre-paginated") { - layoutMethod = "Fixed"; - scroll = true; - spreads = false; - } - - if(settings.layout === "reflowable" && settings.spread === "none") { - layoutMethod = "Reflowable"; - scroll = false; - spreads = false; - } - - if(settings.layout === "reflowable" && settings.spread === "both") { - layoutMethod = "ReflowableSpreads"; - scroll = false; - spreads = true; - } - - this.spreads = spreads; - this.render.scroll(scroll); - this.trigger("renderer:spreads", spreads); - return layoutMethod; -}; - -// Shortcut to trigger the hook before displaying the chapter -EPUBJS.Renderer.prototype.beforeDisplay = function(callback, renderer){ - this.triggerHooks("beforeChapterDisplay", callback, this); -}; - -// Update the renderer with the information passed by the layout -EPUBJS.Renderer.prototype.updatePages = function(layout){ - this.pageMap = this.mapPage(); - // this.displayedPages = layout.displayedPages; - - if (this.spreads) { - this.displayedPages = Math.ceil(this.pageMap.length / 2); - } else { - this.displayedPages = this.pageMap.length; - } - - // this.currentChapter.pages = layout.pageCount; - this.currentChapter.pages = this.pageMap.length; - - this._q.flush(); -}; - -// Apply the layout again and jump back to the previous cfi position -EPUBJS.Renderer.prototype.reformat = function(){ - var renderer = this; - var formated, pages; - if(!this.contents) return; - - spreads = this.determineSpreads(this.minSpreadWidth); - // Only re-layout if the spreads have switched - if(spreads != this.spreads){ - this.spreads = spreads; - this.layoutMethod = this.determineLayout(this.layoutSettings); - this.layout = new EPUBJS.Layout[this.layoutMethod](); - } - - this.formated = this.layout.format(this.contents, this.render.width, this.render.height, this.gap); - this.render.setPageDimensions(this.formated.pageWidth, this.formated.pageHeight); - - pages = renderer.layout.calculatePages(); - renderer.updatePages(pages); - - // Give the css styles time to update - clearTimeout(this.timeoutTillCfi); - this.timeoutTillCfi = setTimeout(function(){ - //-- Go to current page after formating - if(renderer.currentLocationCfi){ - renderer.gotoCfi(renderer.currentLocationCfi); - } - this.timeoutTillCfi = null; - }, 10); - -}; - -// Hide and show the render's container . -EPUBJS.Renderer.prototype.visible = function(bool){ - if(typeof(bool) === "undefined") { - return this.element.style.visibility; - } - - if(bool === true && !this.hidden){ - this.element.style.visibility = "visible"; - }else if(bool === false){ - this.element.style.visibility = "hidden"; - } -}; - -// Remove the render element and clean up listeners -EPUBJS.Renderer.prototype.remove = function() { - if(this.render.window) { - this.render.unload(); - this.render.window.removeEventListener("resize", this.resized); - this.removeEventListeners(); - this.removeSelectionListeners(); - } - - this.container.removeChild(this.element); -}; - -//-- STYLES - -EPUBJS.Renderer.prototype.applyStyles = function(styles) { - for (var style in styles) { - this.render.setStyle(style, styles[style]); - } -}; - -EPUBJS.Renderer.prototype.setStyle = function(style, val, prefixed){ - this.render.setStyle(style, val, prefixed); -}; - -EPUBJS.Renderer.prototype.removeStyle = function(style){ - this.render.removeStyle(style); -}; - -//-- HEAD TAGS -EPUBJS.Renderer.prototype.applyHeadTags = function(headTags) { - for ( var headTag in headTags ) { - this.render.addHeadTag(headTag, headTags[headTag]); - } -}; - -//-- NAVIGATION - -EPUBJS.Renderer.prototype.page = function(pg){ - if(!this.pageMap) { - console.warn("pageMap not set, queuing"); - this._q.enqueue("page", arguments); - return true; - } - - if(pg >= 1 && pg <= this.displayedPages){ - this.chapterPos = pg; - - this.render.page(pg); - this.visibleRangeCfi = this.getVisibleRangeCfi(); - this.currentLocationCfi = this.visibleRangeCfi.start; - this.trigger("renderer:locationChanged", this.currentLocationCfi); - this.trigger("renderer:visibleRangeChanged", this.visibleRangeCfi); - - return true; - } - //-- Return false if page is greater than the total - return false; -}; - -// Short cut to find next page's cfi starting at the last visible element -/* -EPUBJS.Renderer.prototype.nextPage = function(){ - var pg = this.chapterPos + 1; - if(pg <= this.displayedPages){ - this.chapterPos = pg; - - this.render.page(pg); - - this.currentLocationCfi = this.getPageCfi(this.visibileEl); - this.trigger("renderer:locationChanged", this.currentLocationCfi); - - return true; - } - //-- Return false if page is greater than the total - return false; -}; -*/ -EPUBJS.Renderer.prototype.nextPage = function(){ - return this.page(this.chapterPos + 1); -}; - -EPUBJS.Renderer.prototype.prevPage = function(){ - return this.page(this.chapterPos - 1); -}; - -//-- Show the page containing an Element -EPUBJS.Renderer.prototype.pageByElement = function(el){ - var pg; - if(!el) return; - - pg = this.render.getPageNumberByElement(el); - this.page(pg); -}; - -// Jump to the last page of the chapter -EPUBJS.Renderer.prototype.lastPage = function(){ - if(this._moving) { - return this._q.enqueue("lastPage", arguments); - } - - this.page(this.displayedPages); -}; - -// Jump to the first page of the chapter -EPUBJS.Renderer.prototype.firstPage = function(){ - this.page(1); -}; - -//-- Find a section by fragement id -EPUBJS.Renderer.prototype.section = function(fragment){ - var el = this.doc.getElementById(fragment), - left, pg; - - if(el){ - this.pageByElement(el); - } - -}; - -EPUBJS.Renderer.prototype.firstElementisTextNode = function(node) { - var children = node.childNodes; - var leng = children.length; - - if(leng && - children[0] && // First Child - children[0].nodeType === 3 && // This is a textNodes - children[0].textContent.trim().length) { // With non whitespace or return charecters - return true; - } - return false; -}; - -// Walk the node tree from a start element to next visible element -EPUBJS.Renderer.prototype.walk = function(node, x, y) { - var r, children, leng, - startNode = node, - prevNode, - stack = [startNode]; - - var STOP = 10000, ITER=0; - - while(!r && stack.length) { - node = stack.shift(); - if( this.containsPoint(node, x, y) && this.firstElementisTextNode(node)) { - r = node; - } - - if(!r && node && node.childElementCount > 0){ - children = node.children; - if (children && children.length) { - leng = children.length ? children.length : 0; - } else { - return r; - } - for (var i = leng-1; i >= 0; i--) { - if(children[i] != prevNode) stack.unshift(children[i]); - } - } - - if(!r && stack.length === 0 && startNode && startNode.parentNode !== null){ - stack.push(startNode.parentNode); - prevNode = startNode; - startNode = startNode.parentNode; - } - - - ITER++; - if(ITER > STOP) { - console.error("ENDLESS LOOP"); - break; - } - - } - - return r; -}; - -// Checks if an element is on the screen -EPUBJS.Renderer.prototype.containsPoint = function(el, x, y){ - var rect; - var left; - if(el && typeof el.getBoundingClientRect === 'function'){ - rect = el.getBoundingClientRect(); - // console.log(el, rect, x, y); - - if( rect.width !== 0 && - rect.height !== 0 && // Element not visible - rect.left >= x && - x <= rect.left + rect.width) { - return true; - } - } - - return false; -}; - -EPUBJS.Renderer.prototype.textSprint = function(root, func) { - var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, { - acceptNode: function (node) { - if ( ! /^\s*$/.test(node.data) ) { - return NodeFilter.FILTER_ACCEPT; - } else { - return NodeFilter.FILTER_REJECT; - } - } - }, false); - var node; - while ((node = treeWalker.nextNode())) { - func(node); - } - -}; - -EPUBJS.Renderer.prototype.sprint = function(root, func) { - var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, null, false); - var node; - while ((node = treeWalker.nextNode())) { - func(node); - } - -}; - -EPUBJS.Renderer.prototype.mapPage = function(){ - var renderer = this; - var map = [{ start: null, end: null }]; - var root = this.render.getBaseElement(); - var page = 1; - var width = this.layout.colWidth + this.layout.gap; - var offset = this.formated.pageWidth * (this.chapterPos-1); - var limit = (width * page) - offset;// (width * page) - offset; - var elLimit = 0; - var prevRange; - var cfi; - var check = function(node) { - var elPos; - var elRange; - var children = Array.prototype.slice.call(node.childNodes); - if (node.nodeType == Node.ELEMENT_NODE) { - // elPos = node.getBoundingClientRect(); - elRange = document.createRange(); - elRange.selectNodeContents(node); - elPos = elRange.getBoundingClientRect(); - - if(!elPos || (elPos.width === 0 && elPos.height === 0)) { - return; - } - - //-- Element starts new Col - if(elPos.left > elLimit) { - children.forEach(function(node){ - if(node.nodeType == Node.TEXT_NODE && - node.textContent.trim().length) { - checkText(node); - } - }); - } - - //-- Element Spans new Col - if(elPos.right > elLimit) { - children.forEach(function(node){ - if(node.nodeType == Node.TEXT_NODE && - node.textContent.trim().length) { - checkText(node); - } - }); - } - } - - }; - var checkText = function(node){ - var ranges = renderer.splitTextNodeIntoWordsRanges(node); - ranges.forEach(function(range){ - var pos = range.getBoundingClientRect(); - - if(!pos || (pos.width === 0 && pos.height === 0)) { - return; - } - - if(pos.left + pos.width < limit) { - if(!map[page-1].start){ - range.collapse(true); - cfi = renderer.currentChapter.cfiFromRange(range); - map[page-1].start = cfi; - } - } else { - if(prevRange){ - prevRange.collapse(true); - cfi = renderer.currentChapter.cfiFromRange(prevRange); - map[page-1].end = cfi; - } - - range.collapse(true); - cfi = renderer.currentChapter.cfiFromRange(range); - map.push({ - start: cfi, - end: null - }); - - page += 1; - limit = (width * page) - offset; - elLimit = limit; - } - - prevRange = range; - }); - - - }; - - this.sprint(root, check); - // this.textSprint(root, checkText); - - if(prevRange){ - prevRange.collapse(true); - - cfi = renderer.currentChapter.cfiFromRange(prevRange); - map[page-1].end = cfi; - } - - // Handle empty map - if(map.length === 1 && !map[0].start) { - range = this.doc.createRange(); - range.selectNodeContents(root); - range.collapse(true); - - cfi = renderer.currentChapter.cfiFromRange(range); - map[0].start = cfi; - map[0].end = cfi; - } - - // clean up - prevRange = null; - ranges = null; - range = null; - root = null; - - return map; -}; - - -EPUBJS.Renderer.prototype.splitTextNodeIntoWordsRanges = function(node){ - var ranges = []; - var text = node.textContent.trim(); - var range; - var rect; - var list; - pos = text.indexOf(" "); - - if(pos === -1) { - range = this.doc.createRange(); - range.selectNodeContents(node); - return [range]; - } - - range = this.doc.createRange(); - range.setStart(node, 0); - range.setEnd(node, pos); - ranges.push(range); - range = false; - - while ( pos != -1 ) { - - pos = text.indexOf(" ", pos + 1); - if(pos > 0) { - - if(range) { - range.setEnd(node, pos); - ranges.push(range); - } - - range = this.doc.createRange(); - range.setStart(node, pos+1); - } - } - - if(range) { - range.setEnd(node, text.length); - ranges.push(range); - } - - return ranges; -}; - -EPUBJS.Renderer.prototype.rangePosition = function(range){ - var rect; - var list; - - list = range.getClientRects(); - - if(list.length) { - rect = list[0]; - return rect; - } - - return null; -}; - -/* -// Get the cfi of the current page -EPUBJS.Renderer.prototype.getPageCfi = function(prevEl){ - var range = this.doc.createRange(); - var position; - // TODO : this might need to take margin / padding into account? - var x = 1;//this.formated.pageWidth/2; - var y = 1;//;this.formated.pageHeight/2; - - range = this.getRange(x, y); - - // var test = this.doc.defaultView.getSelection(); - // var r = this.doc.createRange(); - // test.removeAllRanges(); - // r.setStart(range.startContainer, range.startOffset); - // r.setEnd(range.startContainer, range.startOffset + 1); - // test.addRange(r); - - return this.currentChapter.cfiFromRange(range); -}; -*/ - -// Get the cfi of the current page -EPUBJS.Renderer.prototype.getPageCfi = function(){ - var pg; - if (this.spreads) { - pg = this.chapterPos*2; - startRange = this.pageMap[pg-2]; - } else { - pg = this.chapterPos; - startRange = this.pageMap[pg-1]; - } - return this.pageMap[(this.chapterPos * 2) -1].start; -}; - -EPUBJS.Renderer.prototype.getRange = function(x, y, forceElement){ - var range = this.doc.createRange(); - var position; - forceElement = true; // temp override - if(typeof document.caretPositionFromPoint !== "undefined" && !forceElement){ - position = this.doc.caretPositionFromPoint(x, y); - range.setStart(position.offsetNode, position.offset); - } else if(typeof document.caretRangeFromPoint !== "undefined" && !forceElement){ - range = this.doc.caretRangeFromPoint(x, y); - } else { - this.visibileEl = this.findElementAfter(x, y); - range.setStart(this.visibileEl, 1); - } - - // var test = this.doc.defaultView.getSelection(); - // var r = this.doc.createRange(); - // test.removeAllRanges(); - // r.setStart(range.startContainer, range.startOffset); - // r.setEnd(range.startContainer, range.startOffset + 1); - // test.addRange(r); - return range; -}; - -/* -EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(prevEl){ - var startX = 0; - var startY = 0; - var endX = this.width-1; - var endY = this.height-1; - var startRange = this.getRange(startX, startY); - var endRange = this.getRange(endX, endY); //fix if carret not avail - var startCfi = this.currentChapter.cfiFromRange(startRange); - var endCfi; - if(endRange) { - endCfi = this.currentChapter.cfiFromRange(endRange); - } - - return { - start: startCfi, - end: endCfi || false - }; -}; -*/ - -EPUBJS.Renderer.prototype.pagesInCurrentChapter = function() { - var pgs; - var length; - - if(!this.pageMap) { - console.warn("page map not loaded"); - return false; - } - - length = this.pageMap.length; - - if(this.spreads){ - pgs = Math.ceil(length / 2); - } else { - pgs = length; - } - - return pgs; -}; - -EPUBJS.Renderer.prototype.currentRenderedPage = function(){ - var pg; - - if(!this.pageMap) { - console.warn("page map not loaded"); - return false; - } - - if (this.spreads && this.layout.pageCount > 1) { - pg = this.chapterPos*2; - } else { - pg = this.chapterPos; - } - - return pg; -}; - -EPUBJS.Renderer.prototype.getRenderedPagesLeft = function(){ - var pg; - var lastPage; - var pagesLeft; - - if(!this.pageMap) { - console.warn("page map not loaded"); - return false; - } - - lastPage = this.pageMap.length; - - if (this.spreads) { - pg = this.chapterPos*2; - } else { - pg = this.chapterPos; - } - - pagesLeft = lastPage - pg; - return pagesLeft; - -}; - -EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(){ - var pg; - var startRange, endRange; - - if(!this.pageMap) { - console.warn("page map not loaded"); - return false; - } - - if (this.spreads) { - pg = this.chapterPos*2; - startRange = this.pageMap[pg-2]; - endRange = startRange; - - if(this.layout.pageCount > 1) { - endRange = this.pageMap[pg-1]; - } - } else { - pg = this.chapterPos; - startRange = this.pageMap[pg-1]; - endRange = startRange; - } - - if(!startRange) { - console.warn("page range miss:", pg, this.pageMap); - startRange = this.pageMap[this.pageMap.length-1]; - endRange = startRange; - } - - return { - start: startRange.start, - end: endRange.end - }; -}; - -// Goto a cfi position in the current chapter -EPUBJS.Renderer.prototype.gotoCfi = function(cfi){ - var pg; - var marker; - var range; - - if(this._moving){ - return this._q.enqueue("gotoCfi", arguments); - } - - if(_.isString(cfi)){ - cfi = this.epubcfi.parse(cfi); - } - - if(typeof document.evaluate === 'undefined') { - marker = this.epubcfi.addMarker(cfi, this.doc); - if(marker) { - pg = this.render.getPageNumberByElement(marker); - // Must Clean up Marker before going to page - this.epubcfi.removeMarker(marker, this.doc); - this.page(pg); - } - } else { - range = this.epubcfi.generateRangeFromCfi(cfi, this.doc); - if(range) { - pg = this.render.getPageNumberByRect(range.getBoundingClientRect()); - this.page(pg); - } - } -}; - -// Walk nodes until a visible element is found -EPUBJS.Renderer.prototype.findFirstVisible = function(startEl){ - var el = startEl || this.render.getBaseElement(); - var found; - found = this.walk(el); - - if(found) { - return found; - }else{ - return startEl; - } - -}; -// TODO: remove me - unsused -EPUBJS.Renderer.prototype.findElementAfter = function(x, y, startEl){ - var el = startEl || this.render.getBaseElement(); - var found; - found = this.walk(el, x, y); - if(found) { - return found; - }else{ - return el; - } - -}; - -/* -EPUBJS.Renderer.prototype.route = function(hash, callback){ - var location = window.location.hash.replace('#/', ''); - if(this.useHash && location.length && location != this.prevLocation){ - this.show(location, callback); - this.prevLocation = location; - return true; - } - return false; -} - -EPUBJS.Renderer.prototype.hideHashChanges = function(){ - this.useHash = false; -} - -*/ - -EPUBJS.Renderer.prototype.resize = function(width, height, setSize){ - var spreads; - - this.width = width; - this.height = height; - - if(setSize !== false) { - this.render.resize(this.width, this.height); - } - - - - if(this.contents){ - this.reformat(); - } - - this.trigger("renderer:resized", { - width: this.width, - height: this.height - }); -}; - -//-- Listeners for events in the frame - -EPUBJS.Renderer.prototype.onResized = function(e) { - var width = this.container.clientWidth; - var height = this.container.clientHeight; - - this.resize(width, height, false); -}; - -EPUBJS.Renderer.prototype.addEventListeners = function(){ - if(!this.render.document) { - return; - } - this.listenedEvents.forEach(function(eventName){ - this.render.document.addEventListener(eventName, this.triggerEvent.bind(this), false); - }, this); - -}; - -EPUBJS.Renderer.prototype.removeEventListeners = function(){ - if(!this.render.document) { - return; - } - this.listenedEvents.forEach(function(eventName){ - this.render.document.removeEventListener(eventName, this.triggerEvent, false); - }, this); - -}; - -// Pass browser events -EPUBJS.Renderer.prototype.triggerEvent = function(e){ - this.trigger("renderer:"+e.type, e); -}; - -EPUBJS.Renderer.prototype.addSelectionListeners = function(){ - this.render.document.addEventListener("selectionchange", this.onSelectionChange.bind(this), false); -}; - -EPUBJS.Renderer.prototype.removeSelectionListeners = function(){ - if(!this.render.document) { - return; - } - this.doc.removeEventListener("selectionchange", this.onSelectionChange, false); -}; - -EPUBJS.Renderer.prototype.onSelectionChange = function(e){ - if (this.selectionEndTimeout) { - clearTimeout(this.selectionEndTimeout); - } - this.selectionEndTimeout = setTimeout(function() { - this.selectedRange = this.render.window.getSelection(); - this.trigger("renderer:selected", this.selectedRange); - }.bind(this), 500); -}; - - -//-- Spreads - -EPUBJS.Renderer.prototype.setMinSpreadWidth = function(width){ - this.minSpreadWidth = width; - this.spreads = this.determineSpreads(width); -}; - -EPUBJS.Renderer.prototype.determineSpreads = function(cutoff){ - if(this.isForcedSingle || !cutoff || this.width < cutoff) { - return false; //-- Single Page - }else{ - return true; //-- Double Page - } -}; - -EPUBJS.Renderer.prototype.forceSingle = function(bool){ - if(bool) { - this.isForcedSingle = true; - // this.spreads = false; - } else { - this.isForcedSingle = false; - // this.spreads = this.determineSpreads(this.minSpreadWidth); - } -}; - -EPUBJS.Renderer.prototype.setGap = function(gap){ - this.gap = gap; //-- False == auto gap -}; - -//-- Content Replacements - -EPUBJS.Renderer.prototype.replace = function(query, func, finished, progress){ - var items = this.contents.querySelectorAll(query), - resources = Array.prototype.slice.call(items), - count = resources.length; - - - if(count === 0) { - finished(false); - return; - } - resources.forEach(function(item){ - var called = false; - var after = function(result, full){ - if(called === false) { - count--; - if(progress) progress(result, full, count); - if(count <= 0 && finished) finished(true); - called = true; - } - }; - - func(item, after); - - }.bind(this)); - -}; - -EPUBJS.Renderer.prototype.replaceWithStored = function(query, attr, func, callback) { - var _oldUrls, - _newUrls = {}, - _store = this.currentChapter.store, - _cache = this.caches[query], - _uri = EPUBJS.core.uri(this.currentChapter.absolute), - _chapterBase = _uri.base, - _attr = attr, - _wait = 2000, - progress = function(url, full, count) { - _newUrls[full] = url; - }, - finished = function(notempty) { - if(callback) callback(); - - _.each(_oldUrls, function(url){ - _store.revokeUrl(url); - }); - - _cache = _newUrls; - }; - - if(!_store) return; - - if(!_cache) _cache = {}; - _oldUrls = _.clone(_cache); - - this.replace(query, function(link, done){ - var src = link.getAttribute(_attr), - full = EPUBJS.core.resolveUrl(_chapterBase, src); - - var replaceUrl = function(url) { - var timeout; - link.onload = function(){ - clearTimeout(timeout); - done(url, full); - }; - - link.onerror = function(e){ - clearTimeout(timeout); - done(url, full); - console.error(e); - }; - - if(query == "image") { - //-- SVG needs this to trigger a load event - link.setAttribute("externalResourcesRequired", "true"); - } - - if(query == "link[href]" && link.getAttribute("rel") !== "stylesheet") { - //-- Only Stylesheet links seem to have a load events, just continue others - done(url, full); - } - - link.setAttribute(_attr, url); - - //-- If elements never fire Load Event, should continue anyways - timeout = setTimeout(function(){ - done(url, full); - }, _wait); - - }; - - if(full in _oldUrls){ - replaceUrl(_oldUrls[full]); - _newUrls[full] = _oldUrls[full]; - delete _oldUrls[full]; - }else{ - func(_store, full, replaceUrl, link); - } - - }, finished, progress); -}; - -//-- Enable binding events to Renderer -RSVP.EventTarget.mixin(EPUBJS.Renderer.prototype); - -var EPUBJS = EPUBJS || {}; -EPUBJS.replace = {}; - -//-- Replaces the relative links within the book to use our internal page changer -EPUBJS.replace.hrefs = function(callback, renderer){ - var book = this; - var replacments = function(link, done){ - var href = link.getAttribute("href"), - isRelative = href.search("://"), - directory, - relative; - - if(isRelative != -1){ - - link.setAttribute("target", "_blank"); - - }else{ - - directory = EPUBJS.core.uri(renderer.render.window.location.href).directory; - relative = EPUBJS.core.resolveUrl(directory, href); - - link.onclick = function(){ - book.goto(relative); - return false; - }; - - } - done(); - - }; - - renderer.replace("a[href]", replacments, callback); - -}; - -EPUBJS.replace.head = function(callback, renderer) { - - renderer.replaceWithStored("link[href]", "href", EPUBJS.replace.links, callback); - -}; - - -//-- Replaces assets src's to point to stored version if browser is offline -EPUBJS.replace.resources = function(callback, renderer){ - //srcs = this.doc.querySelectorAll('[src]'); - renderer.replaceWithStored("[src]", "src", EPUBJS.replace.srcs, callback); - -}; - -EPUBJS.replace.svg = function(callback, renderer) { - - renderer.replaceWithStored("image", "xlink:href", function(_store, full, done){ - _store.getUrl(full).then(done); - }, callback); - -}; - -EPUBJS.replace.srcs = function(_store, full, done){ - - _store.getUrl(full).then(done); - -}; - -//-- Replaces links in head, such as stylesheets - link[href] -EPUBJS.replace.links = function(_store, full, done, link){ - //-- Handle replacing urls in CSS - if(link.getAttribute("rel") === "stylesheet") { - EPUBJS.replace.stylesheets(_store, full).then(function(url, full){ - // done - setTimeout(function(){ - done(url, full); - }, 5); //-- Allow for css to apply before displaying chapter - }); - }else{ - _store.getUrl(full).then(done); - } -}; - -EPUBJS.replace.stylesheets = function(_store, full) { - var deferred = new RSVP.defer(); - - if(!_store) return; - - _store.getText(full).then(function(text){ - var url; - - EPUBJS.replace.cssUrls(_store, full, text).then(function(newText){ - var _URL = window.URL || window.webkitURL || window.mozURL; - - var blob = new Blob([newText], { "type" : "text\/css" }), - url = _URL.createObjectURL(blob); - - deferred.resolve(url); - - }, function(e) { - console.error(e); - }); - - }); - - return deferred.promise; -}; - -EPUBJS.replace.cssUrls = function(_store, base, text){ - var deferred = new RSVP.defer(), - promises = [], - matches = text.match(/url\(\'?\"?([^\'|^\"^\)]*)\'?\"?\)/g); - - if(!_store) return; - - if(!matches){ - deferred.resolve(text); - return deferred.promise; - } - - matches.forEach(function(str){ - var full = EPUBJS.core.resolveUrl(base, str.replace(/url\(|[|\)|\'|\"]/g, '')); - var replaced = _store.getUrl(full).then(function(url){ - text = text.replace(str, 'url("'+url+'")'); - }); - - promises.push(replaced); - }); - - RSVP.all(promises).then(function(){ - deferred.resolve(text); - }); - - return deferred.promise; -}; - -EPUBJS.Unarchiver = function(url){ - - this.libPath = EPUBJS.filePath; - this.zipUrl = url; - this.loadLib(); - this.urlCache = {}; - - this.zipFs = new zip.fs.FS(); - - return this.promise; - -}; - -//-- Load the zip lib and set the workerScriptsPath -EPUBJS.Unarchiver.prototype.loadLib = function(callback){ - if(typeof(zip) == "undefined") console.error("Zip lib not loaded"); - - /* - //-- load script - EPUBJS.core.loadScript(this.libPath+"zip.js", function(){ - //-- Tell zip where it is located - zip.workerScriptsPath = this.libPath; - callback(); - }.bind(this)); - */ - // console.log(this.libPath) - zip.workerScriptsPath = this.libPath; -}; - -EPUBJS.Unarchiver.prototype.openZip = function(zipUrl, callback){ - var deferred = new RSVP.defer(); - var zipFs = this.zipFs; - zipFs.importHttpContent(zipUrl, false, function() { - deferred.resolve(zipFs); - }, this.failed); - - return deferred.promise; -}; - -EPUBJS.Unarchiver.prototype.getXml = function(url, encoding){ - - return this.getText(url, encoding). - then(function(text){ - var parser = new DOMParser(); - return parser.parseFromString(text, "application/xml"); - }); - -}; - -EPUBJS.Unarchiver.prototype.getUrl = function(url, mime){ - var unarchiver = this; - var deferred = new RSVP.defer(); - var decodededUrl = window.decodeURIComponent(url); - var entry = this.zipFs.find(decodededUrl); - var _URL = window.URL || window.webkitURL || window.mozURL; - - if(!entry) { - deferred.reject({ - message : "File not found in the epub: " + url, - stack : new Error().stack - }); - return deferred.promise; - } - - if(url in this.urlCache) { - deferred.resolve(this.urlCache[url]); - return deferred.promise; - } - - entry.getBlob(mime || zip.getMimeType(entry.name), function(blob){ - var tempUrl = _URL.createObjectURL(blob); - deferred.resolve(tempUrl); - unarchiver.urlCache[url] = tempUrl; - }); - - return deferred.promise; -}; - -EPUBJS.Unarchiver.prototype.getText = function(url, encoding){ - var unarchiver = this; - var deferred = new RSVP.defer(); - var decodededUrl = window.decodeURIComponent(url); - var entry = this.zipFs.find(decodededUrl); - var _URL = window.URL || window.webkitURL || window.mozURL; - - if(!entry) { - console.warn("File not found in the contained epub:", url); - return deferred.promise; - } - - entry.getText(function(text){ - deferred.resolve(text); - }, null, null, encoding || 'UTF-8'); - - return deferred.promise; -}; - -EPUBJS.Unarchiver.prototype.revokeUrl = function(url){ - var _URL = window.URL || window.webkitURL || window.mozURL; - var fromCache = unarchiver.urlCache[url]; - if(fromCache) _URL.revokeObjectURL(fromCache); -}; - -EPUBJS.Unarchiver.prototype.failed = function(error){ - console.error(error); -}; - -EPUBJS.Unarchiver.prototype.afterSaved = function(error){ - this.callback(); -}; - -EPUBJS.Unarchiver.prototype.toStorage = function(entries){ - var timeout = 0, - delay = 20, - that = this, - count = entries.length; - - function callback(){ - count--; - if(count === 0) that.afterSaved(); - } - - entries.forEach(function(entry){ - - setTimeout(function(entry){ - that.saveEntryFileToStorage(entry, callback); - }, timeout, entry); - - timeout += delay; - }); - - console.log("time", timeout); - - //entries.forEach(this.saveEntryFileToStorage.bind(this)); -}; - -EPUBJS.Unarchiver.prototype.saveEntryFileToStorage = function(entry, callback){ - var that = this; - entry.getData(new zip.BlobWriter(), function(blob) { - EPUBJS.storage.save(entry.filename, blob, callback); - }); -}; - -//# sourceMappingURL=epub.js.map \ No newline at end of file diff --git a/build/epub.js.map b/build/epub.js.map deleted file mode 100644 index 5a13a3afb..000000000 --- a/build/epub.js.map +++ /dev/null @@ -1,24 +0,0 @@ -{ - "version": 3, - "file": "epub.js", - "sources": [ - "libs/underscore/underscore-min.js", - "libs/rsvp/rsvp.js", - "src/base.js", - "src/book.js", - "src/chapter.js", - "src/core.js", - "src/epubcfi.js", - "src/events.js", - "src/hooks.js", - "src/layout.js", - "src/pagination.js", - "src/parser.js", - "src/render_iframe.js", - "src/renderer.js", - "src/replace.js", - "src/unarchiver.js" - ], - "names": [], - "mappings": "AAAA,0oa;ACAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,Y;ACtoEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5uCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACpOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;AC3gBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uD;ACtNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9qCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA" -} \ No newline at end of file diff --git a/build/epub.min.js b/build/epub.min.js deleted file mode 100644 index 0f61ee31e..000000000 --- a/build/epub.min.js +++ /dev/null @@ -1,4 +0,0 @@ -(function(){var a=this,b=a._,c={},d=Array.prototype,e=Object.prototype,f=Function.prototype,g=d.push,h=d.slice,i=d.concat,j=e.toString,k=e.hasOwnProperty,l=d.forEach,m=d.map,n=d.reduce,o=d.reduceRight,p=d.filter,q=d.every,r=d.some,s=d.indexOf,t=d.lastIndexOf,u=Array.isArray,v=Object.keys,w=f.bind,x=function(a){return a instanceof x?a:this instanceof x?void(this._wrapped=a):new x(a)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=x),exports._=x):a._=x,x.VERSION="1.4.4";var y=x.each=x.forEach=function(a,b,d){if(null!=a)if(l&&a.forEach===l)a.forEach(b,d);else if(a.length===+a.length){for(var e=0,f=a.length;f>e;e++)if(b.call(d,a[e],e,a)===c)return}else for(var g in a)if(x.has(a,g)&&b.call(d,a[g],g,a)===c)return};x.map=x.collect=function(a,b,c){var d=[];return null==a?d:m&&a.map===m?a.map(b,c):(y(a,function(a,e,f){d[d.length]=b.call(c,a,e,f)}),d)};var z="Reduce of empty array with no initial value";x.reduce=x.foldl=x.inject=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),n&&a.reduce===n)return d&&(b=x.bind(b,d)),e?a.reduce(b,c):a.reduce(b);if(y(a,function(a,f,g){e?c=b.call(d,c,a,f,g):(c=a,e=!0)}),!e)throw new TypeError(z);return c},x.reduceRight=x.foldr=function(a,b,c,d){var e=arguments.length>2;if(null==a&&(a=[]),o&&a.reduceRight===o)return d&&(b=x.bind(b,d)),e?a.reduceRight(b,c):a.reduceRight(b);var f=a.length;if(f!==+f){var g=x.keys(a);f=g.length}if(y(a,function(h,i,j){i=g?g[--f]:--f,e?c=b.call(d,c,a[i],i,j):(c=a[i],e=!0)}),!e)throw new TypeError(z);return c},x.find=x.detect=function(a,b,c){var d;return A(a,function(a,e,f){return b.call(c,a,e,f)?(d=a,!0):void 0}),d},x.filter=x.select=function(a,b,c){var d=[];return null==a?d:p&&a.filter===p?a.filter(b,c):(y(a,function(a,e,f){b.call(c,a,e,f)&&(d[d.length]=a)}),d)},x.reject=function(a,b,c){return x.filter(a,function(a,d,e){return!b.call(c,a,d,e)},c)},x.every=x.all=function(a,b,d){b||(b=x.identity);var e=!0;return null==a?e:q&&a.every===q?a.every(b,d):(y(a,function(a,f,g){return(e=e&&b.call(d,a,f,g))?void 0:c}),!!e)};var A=x.some=x.any=function(a,b,d){b||(b=x.identity);var e=!1;return null==a?e:r&&a.some===r?a.some(b,d):(y(a,function(a,f,g){return e||(e=b.call(d,a,f,g))?c:void 0}),!!e)};x.contains=x.include=function(a,b){return null==a?!1:s&&a.indexOf===s?-1!=a.indexOf(b):A(a,function(a){return a===b})},x.invoke=function(a,b){var c=h.call(arguments,2),d=x.isFunction(b);return x.map(a,function(a){return(d?b:a[b]).apply(a,c)})},x.pluck=function(a,b){return x.map(a,function(a){return a[b]})},x.where=function(a,b,c){return x.isEmpty(b)?c?null:[]:x[c?"find":"filter"](a,function(a){for(var c in b)if(b[c]!==a[c])return!1;return!0})},x.findWhere=function(a,b){return x.where(a,b,!0)},x.max=function(a,b,c){if(!b&&x.isArray(a)&&a[0]===+a[0]&&65535>a.length)return Math.max.apply(Math,a);if(!b&&x.isEmpty(a))return-1/0;var d={computed:-1/0,value:-1/0};return y(a,function(a,e,f){var g=b?b.call(c,a,e,f):a;g>=d.computed&&(d={value:a,computed:g})}),d.value},x.min=function(a,b,c){if(!b&&x.isArray(a)&&a[0]===+a[0]&&65535>a.length)return Math.min.apply(Math,a);if(!b&&x.isEmpty(a))return 1/0;var d={computed:1/0,value:1/0};return y(a,function(a,e,f){var g=b?b.call(c,a,e,f):a;d.computed>g&&(d={value:a,computed:g})}),d.value},x.shuffle=function(a){var b,c=0,d=[];return y(a,function(a){b=x.random(c++),d[c-1]=d[b],d[b]=a}),d};var B=function(a){return x.isFunction(a)?a:function(b){return b[a]}};x.sortBy=function(a,b,c){var d=B(b);return x.pluck(x.map(a,function(a,b,e){return{value:a,index:b,criteria:d.call(c,a,b,e)}}).sort(function(a,b){var c=a.criteria,d=b.criteria;if(c!==d){if(c>d||void 0===c)return 1;if(d>c||void 0===d)return-1}return a.indexf;){var h=f+g>>>1;e>c.call(d,a[h])?f=h+1:g=h}return f},x.toArray=function(a){return a?x.isArray(a)?h.call(a):a.length===+a.length?x.map(a,x.identity):x.values(a):[]},x.size=function(a){return null==a?0:a.length===+a.length?a.length:x.keys(a).length},x.first=x.head=x.take=function(a,b,c){return null==a?void 0:null==b||c?a[0]:h.call(a,0,b)},x.initial=function(a,b,c){return h.call(a,0,a.length-(null==b||c?1:b))},x.last=function(a,b,c){return null==a?void 0:null==b||c?a[a.length-1]:h.call(a,Math.max(a.length-b,0))},x.rest=x.tail=x.drop=function(a,b,c){return h.call(a,null==b||c?1:b)},x.compact=function(a){return x.filter(a,x.identity)};var D=function(a,b,c){return y(a,function(a){x.isArray(a)?b?g.apply(c,a):D(a,b,c):c.push(a)}),c};x.flatten=function(a,b){return D(a,b,[])},x.without=function(a){return x.difference(a,h.call(arguments,1))},x.uniq=x.unique=function(a,b,c,d){x.isFunction(b)&&(d=c,c=b,b=!1);var e=c?x.map(a,c,d):a,f=[],g=[];return y(e,function(c,d){(b?d&&g[g.length-1]===c:x.contains(g,c))||(g.push(c),f.push(a[d]))}),f},x.union=function(){return x.uniq(i.apply(d,arguments))},x.intersection=function(a){var b=h.call(arguments,1);return x.filter(x.uniq(a),function(a){return x.every(b,function(b){return x.indexOf(b,a)>=0})})},x.difference=function(a){var b=i.apply(d,h.call(arguments,1));return x.filter(a,function(a){return!x.contains(b,a)})},x.zip=function(){for(var a=h.call(arguments),b=x.max(x.pluck(a,"length")),c=Array(b),d=0;b>d;d++)c[d]=x.pluck(a,""+d);return c},x.object=function(a,b){if(null==a)return{};for(var c={},d=0,e=a.length;e>d;d++)b?c[a[d]]=b[d]:c[a[d][0]]=a[d][1];return c},x.indexOf=function(a,b,c){if(null==a)return-1;var d=0,e=a.length;if(c){if("number"!=typeof c)return d=x.sortedIndex(a,b),a[d]===b?d:-1;d=0>c?Math.max(0,e+c):c}if(s&&a.indexOf===s)return a.indexOf(b,c);for(;e>d;d++)if(a[d]===b)return d;return-1},x.lastIndexOf=function(a,b,c){if(null==a)return-1;var d=null!=c;if(t&&a.lastIndexOf===t)return d?a.lastIndexOf(b,c):a.lastIndexOf(b);for(var e=d?c:a.length;e--;)if(a[e]===b)return e;return-1},x.range=function(a,b,c){1>=arguments.length&&(b=a||0,a=0),c=arguments[2]||1;for(var d=Math.max(Math.ceil((b-a)/c),0),e=0,f=Array(d);d>e;)f[e++]=a,a+=c;return f},x.bind=function(a,b){if(a.bind===w&&w)return w.apply(a,h.call(arguments,1));var c=h.call(arguments,2);return function(){return a.apply(b,c.concat(h.call(arguments)))}},x.partial=function(a){var b=h.call(arguments,1);return function(){return a.apply(this,b.concat(h.call(arguments)))}},x.bindAll=function(a){var b=h.call(arguments,1);return 0===b.length&&(b=x.functions(a)),y(b,function(b){a[b]=x.bind(a[b],a)}),a},x.memoize=function(a,b){var c={};return b||(b=x.identity),function(){var d=b.apply(this,arguments);return x.has(c,d)?c[d]:c[d]=a.apply(this,arguments)}},x.delay=function(a,b){var c=h.call(arguments,2);return setTimeout(function(){return a.apply(null,c)},b)},x.defer=function(a){return x.delay.apply(x,[a,1].concat(h.call(arguments,1)))},x.throttle=function(a,b){var c,d,e,f,g=0,h=function(){g=new Date,e=null,f=a.apply(c,d)};return function(){var i=new Date,j=b-(i-g);return c=this,d=arguments,0>=j?(clearTimeout(e),e=null,g=i,f=a.apply(c,d)):e||(e=setTimeout(h,j)),f}},x.debounce=function(a,b,c){var d,e;return function(){var f=this,g=arguments,h=function(){d=null,c||(e=a.apply(f,g))},i=c&&!d;return clearTimeout(d),d=setTimeout(h,b),i&&(e=a.apply(f,g)),e}},x.once=function(a){var b,c=!1;return function(){return c?b:(c=!0,b=a.apply(this,arguments),a=null,b)}},x.wrap=function(a,b){return function(){var c=[a];return g.apply(c,arguments),b.apply(this,c)}},x.compose=function(){var a=arguments;return function(){for(var b=arguments,c=a.length-1;c>=0;c--)b=[a[c].apply(this,b)];return b[0]}},x.after=function(a,b){return 0>=a?b():function(){return 1>--a?b.apply(this,arguments):void 0}},x.keys=v||function(a){if(a!==Object(a))throw new TypeError("Invalid object");var b=[];for(var c in a)x.has(a,c)&&(b[b.length]=c);return b},x.values=function(a){var b=[];for(var c in a)x.has(a,c)&&b.push(a[c]);return b},x.pairs=function(a){var b=[];for(var c in a)x.has(a,c)&&b.push([c,a[c]]);return b},x.invert=function(a){var b={};for(var c in a)x.has(a,c)&&(b[a[c]]=c);return b},x.functions=x.methods=function(a){var b=[];for(var c in a)x.isFunction(a[c])&&b.push(c);return b.sort()},x.extend=function(a){return y(h.call(arguments,1),function(b){if(b)for(var c in b)a[c]=b[c]}),a},x.pick=function(a){var b={},c=i.apply(d,h.call(arguments,1));return y(c,function(c){c in a&&(b[c]=a[c])}),b},x.omit=function(a){var b={},c=i.apply(d,h.call(arguments,1));for(var e in a)x.contains(c,e)||(b[e]=a[e]);return b},x.defaults=function(a){return y(h.call(arguments,1),function(b){if(b)for(var c in b)null==a[c]&&(a[c]=b[c])}),a},x.clone=function(a){return x.isObject(a)?x.isArray(a)?a.slice():x.extend({},a):a},x.tap=function(a,b){return b(a),a};var E=function(a,b,c,d){if(a===b)return 0!==a||1/a==1/b;if(null==a||null==b)return a===b;a instanceof x&&(a=a._wrapped),b instanceof x&&(b=b._wrapped);var e=j.call(a);if(e!=j.call(b))return!1;switch(e){case"[object String]":return a==b+"";case"[object Number]":return a!=+a?b!=+b:0==a?1/a==1/b:a==+b;case"[object Date]":case"[object Boolean]":return+a==+b;case"[object RegExp]":return a.source==b.source&&a.global==b.global&&a.multiline==b.multiline&&a.ignoreCase==b.ignoreCase}if("object"!=typeof a||"object"!=typeof b)return!1;for(var f=c.length;f--;)if(c[f]==a)return d[f]==b;c.push(a),d.push(b);var g=0,h=!0;if("[object Array]"==e){if(g=a.length,h=g==b.length)for(;g--&&(h=E(a[g],b[g],c,d)););}else{var i=a.constructor,k=b.constructor;if(i!==k&&!(x.isFunction(i)&&i instanceof i&&x.isFunction(k)&&k instanceof k))return!1;for(var l in a)if(x.has(a,l)&&(g++,!(h=x.has(b,l)&&E(a[l],b[l],c,d))))break;if(h){for(l in b)if(x.has(b,l)&&!g--)break;h=!g}}return c.pop(),d.pop(),h};x.isEqual=function(a,b){return E(a,b,[],[])},x.isEmpty=function(a){if(null==a)return!0;if(x.isArray(a)||x.isString(a))return 0===a.length;for(var b in a)if(x.has(a,b))return!1;return!0},x.isElement=function(a){return!(!a||1!==a.nodeType)},x.isArray=u||function(a){return"[object Array]"==j.call(a)},x.isObject=function(a){return a===Object(a)},y(["Arguments","Function","String","Number","Date","RegExp"],function(a){x["is"+a]=function(b){return j.call(b)=="[object "+a+"]"}}),x.isArguments(arguments)||(x.isArguments=function(a){return!(!a||!x.has(a,"callee"))}),"function"!=typeof/./&&(x.isFunction=function(a){return"function"==typeof a}),x.isFinite=function(a){return isFinite(a)&&!isNaN(parseFloat(a))},x.isNaN=function(a){return x.isNumber(a)&&a!=+a},x.isBoolean=function(a){return a===!0||a===!1||"[object Boolean]"==j.call(a)},x.isNull=function(a){return null===a},x.isUndefined=function(a){return void 0===a},x.has=function(a,b){return k.call(a,b)},x.noConflict=function(){return a._=b,this},x.identity=function(a){return a},x.times=function(a,b,c){for(var d=Array(a),e=0;a>e;e++)d[e]=b.call(c,e);return d},x.random=function(a,b){return null==b&&(b=a,a=0),a+Math.floor(Math.random()*(b-a+1))};var F={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};F.unescape=x.invert(F.escape);var G={escape:RegExp("["+x.keys(F.escape).join("")+"]","g"),unescape:RegExp("("+x.keys(F.unescape).join("|")+")","g")};x.each(["escape","unescape"],function(a){x[a]=function(b){return null==b?"":(""+b).replace(G[a],function(b){return F[a][b]})}}),x.result=function(a,b){if(null==a)return null;var c=a[b];return x.isFunction(c)?c.call(a):c},x.mixin=function(a){y(x.functions(a),function(b){var c=x[b]=a[b];x.prototype[b]=function(){var a=[this._wrapped];return g.apply(a,arguments),L.call(this,c.apply(x,a))}})};var H=0;x.uniqueId=function(a){var b=++H+"";return a?a+b:b},x.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var I=/(.)^/,J={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},K=/\\|'|\r|\n|\t|\u2028|\u2029/g;x.template=function(a,b,c){var d;c=x.defaults({},c,x.templateSettings);var e=RegExp([(c.escape||I).source,(c.interpolate||I).source,(c.evaluate||I).source].join("|")+"|$","g"),f=0,g="__p+='";a.replace(e,function(b,c,d,e,h){return g+=a.slice(f,h).replace(K,function(a){return"\\"+J[a]}),c&&(g+="'+\n((__t=("+c+"))==null?'':_.escape(__t))+\n'"),d&&(g+="'+\n((__t=("+d+"))==null?'':__t)+\n'"),e&&(g+="';\n"+e+"\n__p+='"),f=h+b.length,b}),g+="';\n",c.variable||(g="with(obj||{}){\n"+g+"}\n"),g="var __t,__p='',__j=Array.prototype.join,print=function(){__p+=__j.call(arguments,'');};\n"+g+"return __p;\n";try{d=Function(c.variable||"obj","_",g)}catch(h){throw h.source=g,h}if(b)return d(b,x);var i=function(a){return d.call(this,a,x)};return i.source="function("+(c.variable||"obj")+"){\n"+g+"}",i},x.chain=function(a){return x(a).chain()};var L=function(a){return this._chain?x(a).chain():a};x.mixin(x),y(["pop","push","reverse","shift","sort","splice","unshift"],function(a){var b=d[a];x.prototype[a]=function(){var c=this._wrapped;return b.apply(c,arguments),"shift"!=a&&"splice"!=a||0!==c.length||delete c[0],L.call(this,c)}}),y(["concat","join","slice"],function(a){var b=d[a];x.prototype[a]=function(){return L.call(this,b.apply(this._wrapped,arguments))}}),x.extend(x.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this),function(a){var b,c,d,e;!function(){var a={},f={};b=function(b,c,d){a[b]={deps:c,callback:d}},e=d=c=function(b){function d(a){if("."!==a.charAt(0))return a;for(var c=a.split("/"),d=b.split("/").slice(0,-1),e=0,f=c.length;f>e;e++){var g=c[e];if(".."===g)d.pop();else{if("."===g)continue;d.push(g)}}return d.join("/")}if(e._eak_seen=a,f[b])return f[b];if(f[b]={},!a[b])throw new Error("Could not find module "+b);for(var g,h=a[b],i=h.deps,j=h.callback,k=[],l=0,m=i.length;m>l;l++)k.push("exports"===i[l]?g={}:c(d(i[l])));var n=j.apply(this,k);return f[b]=g||n}}(),b("rsvp/all",["./promise","exports"],function(a,b){"use strict";var c=a["default"];b["default"]=function(a,b){return c.all(a,b)}}),b("rsvp/all_settled",["./promise","./utils","exports"],function(a,b,c){"use strict";function d(a){return{state:"fulfilled",value:a}}function e(a){return{state:"rejected",reason:a}}var f=a["default"],g=b.isArray,h=b.isNonThenable;c["default"]=function(a,b){return new f(function(b){function c(a){return function(b){j(a,d(b))}}function i(a){return function(b){j(a,e(b))}}function j(a,c){m[a]=c,0===--l&&b(m)}if(!g(a))throw new TypeError("You must pass an array to allSettled.");var k,l=a.length;if(0===l)return void b([]);for(var m=new Array(l),n=0;nc;c++)if(a[c]===b)return c;return-1},c=function(a){var b=a._promiseCallbacks;return b||(b=a._promiseCallbacks={}),b};a["default"]={mixin:function(a){return a.on=this.on,a.off=this.off,a.trigger=this.trigger,a._promiseCallbacks=void 0,a},on:function(a,d){var e,f=c(this);e=f[a],e||(e=f[a]=[]),-1===b(e,d)&&e.push(d)},off:function(a,d){var e,f,g=c(this);return d?(e=g[a],f=b(e,d),void(-1!==f&&e.splice(f,1))):void(g[a]=[])},trigger:function(a,b){var d,e,f=c(this);if(d=f[a])for(var g=0;gb;b++)a[b]&&e.push(d[b]);return e})})}var f=a["default"],g=b["default"],h=c.isFunction,i=c.isArray;d["default"]=e}),b("rsvp/hash",["./promise","./utils","exports"],function(a,b,c){"use strict";var d=a["default"],e=b.isNonThenable,f=b.keysOf;c["default"]=function(a){return new d(function(b,c){function g(a){return function(c){k[a]=c,0===--m&&b(k)}}function h(a){m=0,c(a)}var i,j,k={},l=f(a),m=l.length;if(0===m)return void b(k);for(var n=0;nd;d++)g.push(b(a[d]));return e(g,c)})}}),b("rsvp/node",["./promise","exports"],function(a,b){"use strict";function c(a,b){return function(c,d){c?b(c):a(arguments.length>2?e.call(arguments,1):d)}}var d=a["default"],e=Array.prototype.slice;b["default"]=function(a,b){return function(){var f=e.call(arguments),g=this||b;return new d(function(b,e){d.all(f).then(function(d){try{d.push(c(b,e)),a.apply(g,d)}catch(f){e(f)}})})}}}),b("rsvp/promise",["./config","./events","./instrument","./utils","./promise/cast","./promise/all","./promise/race","./promise/resolve","./promise/reject","exports"],function(a,b,c,d,e,f,g,h,i,j){"use strict";function k(){}function l(a,b){if(!z(a))throw new TypeError("You must pass a resolver function as the first argument to the promise constructor");if(!(this instanceof l))throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.");this._id=H++,this._label=b,this._subscribers=[],w.instrument&&x("created",this),k!==a&&m(a,this)}function m(a,b){function c(a){r(b,a)}function d(a){t(b,a)}try{a(c,d)}catch(e){d(e)}}function n(a,b,c,d){var e=a._subscribers,f=e.length;e[f]=b,e[f+K]=c,e[f+L]=d}function o(a,b){var c,d,e=a._subscribers,f=a._detail;w.instrument&&x(b===K?"fulfilled":"rejected",a);for(var g=0;g=h?f.resolve():(g=e,b=new EPUBJS.Chapter(this.spine[g],this.store),d.displayChapter(b,this.globalLayoutProperties).then(function(){d.pageMap.forEach(function(a){i+=1,c.push({cfi:a.start,page:i})}),d.pageMap.length%2>0&&d.spreads&&(i+=1,c.push({cfi:d.pageMap[d.pageMap.length-1].end,page:i})),setTimeout(function(){j(f)},1)})),f.promise}.bind(this);j().then(function(){d.remove(),this.element.removeChild(e),f.resolve(c)}.bind(this))}return f.promise},EPUBJS.Book.prototype.generatePagination=function(a,b){var c=this,d=new RSVP.defer;return this.ready.spine.promise.then(function(){c.generatePageList(a,b).then(function(a){c.pageList=c.contents.pageList=a,c.pagination.process(a),c.ready.pageList.resolve(c.pageList),d.resolve(c.pageList)})}),d.promise},EPUBJS.Book.prototype.loadPagination=function(a){var b=JSON.parse(a);return b&&b.length&&(this.pageList=b,this.pagination.process(this.pageList),this.ready.pageList.resolve(this.pageList)),this.pageList},EPUBJS.Book.prototype.getPageList=function(){return this.ready.pageList.promise},EPUBJS.Book.prototype.getMetadata=function(){return this.ready.metadata.promise},EPUBJS.Book.prototype.getToc=function(){return this.ready.toc.promise -},EPUBJS.Book.prototype.networkListeners=function(){var a=this;window.addEventListener("offline",function(){a.online=!1,a.trigger("book:offline")},!1),window.addEventListener("online",function(){a.online=!0,a.trigger("book:online")},!1)},EPUBJS.Book.prototype.listenToRenderer=function(a){var b=this;a.Events.forEach(function(c){a.on(c,function(a){b.trigger(c,a)})}),a.on("renderer:visibleRangeChanged",function(a){var b,c,d,e=[];this.pageList.length>0&&(b=this.pagination.pageFromCfi(a.start),d=this.pagination.percentageFromPage(b),e.push(b),a.end&&(c=this.pagination.pageFromCfi(a.end),e.push(c)),this.trigger("book:pageChanged",{anchorPage:b,percentage:d,pageRange:e}))}.bind(this)),a.on("render:loaded",this.loadChange.bind(this))},EPUBJS.Book.prototype.loadChange=function(a){var b,c=EPUBJS.core.uri(a);this.currentChapter&&(b=EPUBJS.core.uri(this.currentChapter.absolute)),!this._rendering&&this.currentChapter&&c.path!=b.path&&(console.warn("Miss Match",c.path,this.currentChapter.absolute),this.goto(c.filename))},EPUBJS.Book.prototype.unlistenToRenderer=function(a){a.Events.forEach(function(b){a.off(b)})},EPUBJS.Book.prototype.loadXml=function(a){return this.settings.fromStorage?this.storage.getXml(a,this.settings.encoding):this.settings.contained?this.zip.getXml(a,this.settings.encoding):EPUBJS.core.request(a,"xml",this.settings.withCredentials)},EPUBJS.Book.prototype.urlFrom=function(a){var b,c=EPUBJS.core.uri(a),d=c.protocol,e="/"==c.path[0],f=window.location,g=f.origin||f.protocol+"//"+f.host,h=document.getElementsByTagName("base");return h.length&&(b=h[0].href),c.protocol?c.origin+c.path:!d&&e?(b||g)+c.path:d||e?void 0:EPUBJS.core.resolveUrl(b||f.pathname,c.path)},EPUBJS.Book.prototype.unarchive=function(a){return this.zip=new EPUBJS.Unarchiver,this.store=this.zip,this.zip.openZip(a)},EPUBJS.Book.prototype.isContained=function(a){var b=EPUBJS.core.uri(a);return!b.extension||"epub"!=b.extension&&"zip"!=b.extension?!1:!0},EPUBJS.Book.prototype.isSaved=function(a){var b;return localStorage?(b=localStorage.getItem(a),localStorage&&null!==b?!0:!1):!1},EPUBJS.Book.prototype.generateBookKey=function(a){return"epubjs:"+EPUBJS.VERSION+":"+window.location.host+":"+a},EPUBJS.Book.prototype.saveContents=function(){return localStorage?void localStorage.setItem(this.settings.bookKey,JSON.stringify(this.contents)):!1},EPUBJS.Book.prototype.removeSavedContents=function(){return localStorage?void localStorage.removeItem(this.settings.bookKey):!1},EPUBJS.Book.prototype.renderTo=function(a){var b,c=this;if(_.isElement(a))this.element=a;else{if("string"!=typeof a)return void console.error("Not an Element");this.element=EPUBJS.core.getEl(a)}return b=this.opened.then(function(){return c.renderer.initialize(c.element,c.settings.width,c.settings.height),c._rendered(),c.startDisplay()})},EPUBJS.Book.prototype.startDisplay=function(){var a;return a=this.settings.goto?this.goto(this.settings.goto):this.settings.previousLocationCfi?this.gotoCfi(this.settings.previousLocationCfi):this.displayChapter(this.spinePos)},EPUBJS.Book.prototype.restore=function(a){var b,c=this,d=["manifest","spine","metadata","cover","toc","spineNodeIndex","spineIndexByURL","globalLayoutProperties"],e=!1,f=this.generateBookKey(a),g=localStorage.getItem(f),h=d.length;if(this.settings.clearSaved&&(e=!0),!e&&"undefined"!=g&&null!==g)for(c.contents=JSON.parse(g),b=0;h>b;b++){var i=d[b];if(!c.contents[i]){e=!0;break}c[i]=c.contents[i]}return!e&&g&&this.contents&&this.settings.contentsPath?(this.settings.bookKey=f,this.ready.manifest.resolve(this.manifest),this.ready.spine.resolve(this.spine),this.ready.metadata.resolve(this.metadata),this.ready.cover.resolve(this.cover),this.ready.toc.resolve(this.toc),!0):!1},EPUBJS.Book.prototype.displayChapter=function(a,b,c){var d,e,f,g,h=this,i=c||new RSVP.defer;return this.isRendered?this._rendering||this._rendering?(this._displayQ.enqueue("displayChapter",[a,b,i]),i.promise):(_.isNumber(a)?f=a:(e=new EPUBJS.EpubCFI(a),f=e.spinePos),(0>f||f>=this.spine.length)&&(console.warn("Not A Valid Location"),f=0,b=!1,e=!1),g=new EPUBJS.Chapter(this.spine[f],this.store),this._rendering=!0,d=h.renderer.displayChapter(g,this.globalLayoutProperties),e?h.renderer.gotoCfi(e):b&&h.renderer.lastPage(),d.then(function(){h.spinePos=f,i.resolve(h.renderer),h.settings.fromStorage||h.settings.contained||h.preloadNextChapter(),h.currentChapter=g,h._rendering=!1,h._displayQ.dequeue(),0===h._displayQ.length()&&h._gotoQ.dequeue()},function(a){console.error("Could not load Chapter: "+g.absolute),h.trigger("book:chapterLoadFailed",g.absolute),h._rendering=!1,i.reject(a)}),i.promise):(this._q.enqueue("displayChapter",arguments),i.reject({message:"Rendering",stack:(new Error).stack}),i.promise)},EPUBJS.Book.prototype.nextPage=function(){var a;return this.isRendered?(a=this.renderer.nextPage(),a?void 0:this.nextChapter()):this._q.enqueue("nextPage",arguments)},EPUBJS.Book.prototype.prevPage=function(){var a;return this.isRendered?(a=this.renderer.prevPage(),a?void 0:this.prevChapter()):this._q.enqueue("prevPage",arguments)},EPUBJS.Book.prototype.nextChapter=function(){var a;if(this.spinePos0){for(a=this.spinePos-1;this.spine[a]&&this.spine[a].linear&&"no"==this.spine[a].linear;)a--;if(a>=0)return this.displayChapter(a,!0);this.trigger("book:atStart")}else this.trigger("book:atStart")},EPUBJS.Book.prototype.getCurrentLocationCfi=function(){return this.isRendered?this.renderer.currentLocationCfi:!1},EPUBJS.Book.prototype.goto=function(a){return 0===a.indexOf("epubcfi(")?this.gotoCfi(a):a.indexOf("%")===a.length-1?this.gotoPercentage(parseInt(a.substring(0,a.length-1))/100):"number"==typeof a||isNaN(a)===!1?this.gotoPage(a):this.gotoHref(a)},EPUBJS.Book.prototype.gotoCfi=function(a,b){var c,d,e,f=b||new RSVP.defer;return this.isRendered?this._moving||this._rendering?(console.warn("Renderer is moving"),this._gotoQ.enqueue("gotoCfi",[a,f]),!1):(c=new EPUBJS.EpubCFI(a),d=c.spinePos,-1==d?!1:(e=this.spine[d],promise=f.promise,this._moving=!0,this.currentChapter&&this.spinePos===d?(this.renderer.gotoCfi(c),this._moving=!1,f.resolve(this.renderer.currentLocationCfi)):(e&&-1!=d||(d=0,e=this.spine[d]),this.currentChapter=new EPUBJS.Chapter(e,this.store),this.currentChapter&&(this.spinePos=d,render=this.renderer.displayChapter(this.currentChapter,this.globalLayoutProperties),this.renderer.gotoCfi(c),render.then(function(a){this._moving=!1,f.resolve(a.currentLocationCfi)}.bind(this)))),promise.then(function(){this._gotoQ.dequeue()}.bind(this)),promise)):(console.warn("Not yet Rendered"),this.settings.previousLocationCfi=a,!1)},EPUBJS.Book.prototype.gotoHref=function(a,b){var c,d,e,f,g,h=b||new RSVP.defer;return this.isRendered?this._moving||this._rendering?(this._gotoQ.enqueue("gotoHref",[a,h]),!1):(c=a.split("#"),d=c[0],e=c[1]||!1,f=d.replace(this.settings.contentsPath,""),g=this.spineIndexByURL[f],d||(g=this.currentChapter?this.currentChapter.spinePos:0),"number"!=typeof g?!1:this.currentChapter&&g==this.currentChapter.spinePos?(e?this.renderer.section(e):this.renderer.firstPage(),h.resolve(this.renderer.currentLocationCfi),h.promise.then(function(){this._gotoQ.dequeue()}.bind(this)),h.promise):this.displayChapter(g).then(function(){e&&this.renderer.section(e),h.resolve(this.renderer.currentLocationCfi)}.bind(this))):(this.settings.goto=a,!1)},EPUBJS.Book.prototype.gotoPage=function(a){var b=this.pagination.cfiFromPage(a);return this.gotoCfi(b)},EPUBJS.Book.prototype.gotoPercentage=function(a){var b=this.pagination.pageFromPercentage(a);return this.gotoPage(b)},EPUBJS.Book.prototype.preloadNextChapter=function(){var a,b=this.spinePos+1;return b>=this.spine.length?!1:(a=new EPUBJS.Chapter(this.spine[b]),void(a&&EPUBJS.core.request(a.absolute)))},EPUBJS.Book.prototype.storeOffline=function(){var a=this,b=_.values(this.manifest);return EPUBJS.storage.batch(b).then(function(){a.settings.stored=!0,a.trigger("book:stored")})},EPUBJS.Book.prototype.availableOffline=function(){return this.settings.stored>0?!0:!1},EPUBJS.Book.prototype.setStyle=function(a,b,c){var d=["color","background","background-color"];return this.isRendered?(this.settings.styles[a]=b,this.renderer.setStyle(a,b,c),void(-1===d.indexOf(a)&&(clearTimeout(this.reformatTimeout),this.reformatTimeout=setTimeout(function(){this.renderer.reformat()}.bind(this),10)))):this._q.enqueue("setStyle",arguments)},EPUBJS.Book.prototype.removeStyle=function(a){return this.isRendered?(this.renderer.removeStyle(a),this.renderer.reformat(),void delete this.settings.styles[a]):this._q.enqueue("removeStyle",arguments)},EPUBJS.Book.prototype.addHeadTag=function(a,b){return this.isRendered?void(this.settings.headTags[a]=b):this._q.enqueue("addHeadTag",arguments)},EPUBJS.Book.prototype.useSpreads=function(a){console.warn("useSpreads is deprecated, use forceSingle or set a layoutOveride instead"),this.forceSingle(a===!1?!0:!1)},EPUBJS.Book.prototype.forceSingle=function(a){this.renderer.forceSingle(a),this.settings.forceSingle=a,this.isRendered&&this.renderer.reformat()},EPUBJS.Book.prototype.setMinSpreadWidth=function(a){this.settings.minSpreadWidth=a,this.isRendered&&(this.renderer.setMinSpreadWidth(this.settings.minSpreadWidth),this.renderer.reformat())},EPUBJS.Book.prototype.setGap=function(a){this.settings.gap=a,this.isRendered&&(this.renderer.setGap(this.settings.gap),this.renderer.reformat())},EPUBJS.Book.prototype.chapter=function(a){var b,c,d=this.spineIndexByURL[a];return d&&(b=this.spine[d],c=new EPUBJS.Chapter(b,this.store),c.load()),c},EPUBJS.Book.prototype.unload=function(){this.settings.restore&&localStorage&&this.saveContents(),this.unlistenToRenderer(this.renderer),this.trigger("book:unload")},EPUBJS.Book.prototype.destroy=function(){window.removeEventListener("beforeunload",this.unload),this.currentChapter&&this.currentChapter.unload(),this.unload(),this.render&&this.render.remove()},EPUBJS.Book.prototype._ready=function(){this.trigger("book:ready")},EPUBJS.Book.prototype._rendered=function(){this.isRendered=!0,this.trigger("book:rendered"),this._q.flush()},EPUBJS.Book.prototype.applyStyles=function(a,b){a.applyStyles(this.settings.styles),b()},EPUBJS.Book.prototype.applyHeadTags=function(a,b){a.applyHeadTags(this.settings.headTags),b()},EPUBJS.Book.prototype._registerReplacements=function(a){a.registerHook("beforeChapterDisplay",this.applyStyles.bind(this,a),!0),a.registerHook("beforeChapterDisplay",this.applyHeadTags.bind(this,a),!0),a.registerHook("beforeChapterDisplay",EPUBJS.replace.hrefs.bind(this),!0),this._needsAssetReplacement()&&a.registerHook("beforeChapterDisplay",[EPUBJS.replace.head,EPUBJS.replace.resources,EPUBJS.replace.svg],!0)},EPUBJS.Book.prototype._needsAssetReplacement=function(){return this.settings.fromStorage?"filesystem"==this.storage.getStorageType()?!1:!0:this.settings.contained?!0:!1},EPUBJS.Book.prototype.parseLayoutProperties=function(a){var b=this.layoutOveride&&this.layoutOveride.layout||a.layout||"reflowable",c=this.layoutOveride&&this.layoutOveride.spread||a.spread||"auto",d=this.layoutOveride&&this.layoutOveride.orientation||a.orientation||"auto";return{layout:b,spread:c,orientation:d}},RSVP.EventTarget.mixin(EPUBJS.Book.prototype),RSVP.on("error",function(){}),RSVP.configure("instrument",!0),RSVP.on("rejected",function(a){console.error(a.detail.message,a.detail.stack)}),EPUBJS.Chapter=function(a,b){this.href=a.href,this.absolute=a.url,this.id=a.id,this.spinePos=a.index,this.cfiBase=a.cfiBase,this.properties=a.properties,this.manifestProperties=a.manifestProperties,this.linear=a.linear,this.pages=1,this.store=b,this.epubcfi=new EPUBJS.EpubCFI,this.deferred=new RSVP.defer,this.loaded=this.deferred.promise},EPUBJS.Chapter.prototype.load=function(a){var b,c=a||this.store;return b=c?c.get(this.href):EPUBJS.core.request(this.absolute,"xml"),b.then(function(a){this.setDocument(a)}.bind(this)),b},EPUBJS.Chapter.prototype.url=function(a){var b,c=new RSVP.defer,d=a||this.store,e=this;return d?this.tempUrl?(b=this.tempUrl,c.resolve(b)):d.getUrl(this.absolute).then(function(a){e.tempUrl=a,c.resolve(a)}):(b=this.absolute,c.resolve(b)),c.promise},EPUBJS.Chapter.prototype.setPages=function(a){this.pages=a},EPUBJS.Chapter.prototype.getPages=function(){return this.pages},EPUBJS.Chapter.prototype.getID=function(){return this.ID},EPUBJS.Chapter.prototype.unload=function(a){this.document=null,this.tempUrl&&a&&(a.revokeUrl(this.tempUrl),this.tempUrl=!1)},EPUBJS.Chapter.prototype.setDocument=function(a){this.document=a.implementation.createDocument(a.namespaceURI,null,a.doctype),this.contents=this.document.importNode(a.documentElement,!0),this.document.appendChild(this.contents),this.deferred.resolve(this.contents)},EPUBJS.Chapter.prototype.cfiFromRange=function(a){var b,c,d,e,f,g;if(this.document){if(c=EPUBJS.core.getElementXPath(a.startContainer),d=EPUBJS.core.getElementXPath(a.endContainer),e=this.document.evaluate(c,this.document,EPUBJS.core.nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue,a.collapsed||(f=this.document.evaluate(d,this.document,EPUBJS.core.nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue),b=this.document.createRange(),e)try{b.setStart(e,a.startOffset),!a.collapsed&&f&&b.setEnd(f,a.endOffset)}catch(h){console.log("missed"),e=!1}return e||(console.log("not found, try fuzzy match"),cleanStartTextContent=EPUBJS.core.cleanStringForXpath(a.startContainer.textContent),c="//text()[contains(.,"+cleanStartTextContent+")]",e=this.document.evaluate(c,this.document,EPUBJS.core.nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue,e&&(b.setStart(e,a.startOffset),a.collapsed||(g=EPUBJS.core.cleanStringForXpath(a.endContainer.textContent),d="//text()[contains(.,"+g+")]",f=this.document.evaluate(d,this.document,EPUBJS.core.nsResolver,XPathResult.FIRST_ORDERED_NODE_TYPE,null).singleNodeValue,f&&b.setEnd(f,a.endOffset)))),this.epubcfi.generateCfiFromRange(b,this.cfiBase)}},EPUBJS.Chapter.prototype.find=function(a){var b=this,c=[],d=a.toLowerCase(),e=function(a){for(var e,f,g=a.textContent.toLowerCase(),h=b.document.createRange(),i=-1;-1!=f;)f=g.indexOf(d,i+1),-1!=f&&(h=b.document.createRange(),h.setStart(a,f),h.setEnd(a,f+d.length),e=b.cfiFromRange(h),c.push(e)),i=f};return this.textSprint(this.document,function(a){e(a)}),c},EPUBJS.Chapter.prototype.textSprint=function(a,b){for(var c,d=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,{acceptNode:function(a){return/^\s*$/.test(a.data)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}},!1);c=d.nextNode();)b(c)};var EPUBJS=EPUBJS||{};EPUBJS.core={},EPUBJS.core.getEl=function(a){return document.getElementById(a)},EPUBJS.core.getEls=function(a){return document.getElementsByClassName(a)},EPUBJS.core.request=function(a,b,c){function d(){if(this.readyState===this.DONE)if(200===this.status||this.responseXML){var a;a="xml"==b?this.responseXML:"json"==b?JSON.parse(this.response):"blob"==b?e?this.response:new Blob([this.response]):this.response,g.resolve(a)}else g.reject({message:this.response,stack:(new Error).stack})}var e=window.URL,f=e?"blob":"arraybuffer",g=new RSVP.defer,h=new XMLHttpRequest,i=XMLHttpRequest.prototype;return"overrideMimeType"in i||Object.defineProperty(i,"overrideMimeType",{value:function(){}}),c&&(h.withCredentials=!0),h.open("GET",a,!0),h.onreadystatechange=d,"blob"==b&&(h.responseType=f),"json"==b&&h.setRequestHeader("Accept","application/json"),"xml"==b&&h.overrideMimeType("text/xml"),h.send(),g.promise},EPUBJS.core.toArray=function(a){var b=[];for(var c in a){var d;a.hasOwnProperty(c)&&(d=a[c],d.ident=c,b.push(d))}return b},EPUBJS.core.uri=function(a){var b,c,d,e={protocol:"",host:"",path:"",origin:"",directory:"",base:"",filename:"",extension:"",fragment:"",href:a},f=a.indexOf("://"),g=a.indexOf("?"),h=a.indexOf("#");return-1!=h&&(e.fragment=a.slice(h+1),a=a.slice(0,h)),-1!=g&&(e.search=a.slice(g+1),a=a.slice(0,g),href=a),-1!=f?(e.protocol=a.slice(0,f),b=a.slice(f+3),d=b.indexOf("/"),-1===d?(e.host=e.path,e.path=""):(e.host=b.slice(0,d),e.path=b.slice(d)),e.origin=e.protocol+"://"+e.host,e.directory=EPUBJS.core.folder(e.path),e.base=e.origin+e.directory):(e.path=a,e.directory=EPUBJS.core.folder(a),e.base=e.directory),e.filename=a.replace(e.base,""),c=e.filename.lastIndexOf("."),-1!=c&&(e.extension=e.filename.slice(c+1)),e},EPUBJS.core.folder=function(a){var b=a.lastIndexOf("/");if(-1==b)var c="";return c=a.slice(0,b+1)},EPUBJS.core.dataURLToBlob=function(a){var b,c,d,e,f,g=";base64,";if(-1==a.indexOf(g))return b=a.split(","),c=b[0].split(":")[1],d=b[1],new Blob([d],{type:c});b=a.split(g),c=b[0].split(":")[1],d=window.atob(b[1]),e=d.length,f=new Uint8Array(e);for(var h=0;e>h;++h)f[h]=d.charCodeAt(h);return new Blob([f],{type:c})},EPUBJS.core.addScript=function(a,b,c){var d,e;e=!1,d=document.createElement("script"),d.type="text/javascript",d.async=!1,d.src=a,d.onload=d.onreadystatechange=function(){e||this.readyState&&"complete"!=this.readyState||(e=!0,b&&b())},c=c||document.body,c.appendChild(d)},EPUBJS.core.addScripts=function(a,b,c){var d=a.length,e=0,f=function(){e++,d==e?b&&b():EPUBJS.core.addScript(a[e],f,c)};EPUBJS.core.addScript(a[e],f,c)},EPUBJS.core.addCss=function(a,b,c){var d,e;e=!1,d=document.createElement("link"),d.type="text/css",d.rel="stylesheet",d.href=a,d.onload=d.onreadystatechange=function(){e||this.readyState&&"complete"!=this.readyState||(e=!0,b&&b())},c=c||document.body,c.appendChild(d)},EPUBJS.core.prefixed=function(a){var b=["Webkit","Moz","O","ms"],c=a[0].toUpperCase()+a.slice(1),d=b.length;if("undefined"!=typeof document.body.style[a])return a;for(var e=0;d>e;e++)if("undefined"!=typeof document.body.style[b[e]+c])return b[e]+c;return a},EPUBJS.core.resolveUrl=function(a,b){var c,d,e=[],f=EPUBJS.core.uri(b),g=a.split("/");return f.host?b:(g.pop(),d=b.split("/"),d.forEach(function(a){".."===a?g.pop():e.push(a)}),c=g.concat(e),c.join("/"))},EPUBJS.core.uuid=function(){var a=(new Date).getTime(),b="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,function(b){var c=(a+16*Math.random())%16|0;return a=Math.floor(a/16),("x"==b?c:7&c|8).toString(16)});return b},EPUBJS.core.insert=function(a,b,c){var d=EPUBJS.core.locationOf(a,b,c);return b.splice(d,0,a),d},EPUBJS.core.locationOf=function(a,b,c,d,e){var f,g=d||0,h=e||b.length,i=parseInt(g+(h-g)/2);return c||(c=function(a,b){return a>b?1:b>a?-1:(a=b)?0:void 0}),0>=h-g?i:(f=c(b[i],a),h-g===1?f>0?i:i+1:0===f?i:-1===f?EPUBJS.core.locationOf(a,b,c,i,h):EPUBJS.core.locationOf(a,b,c,g,i))},EPUBJS.core.indexOfSorted=function(a,b,c,d,e){var f,g=d||0,h=e||b.length,i=parseInt(g+(h-g)/2);return c||(c=function(a,b){return a>b?1:b>a?-1:(a=b)?0:void 0}),0>=h-g?-1:(f=c(b[i],a),h-g===1?0===f?i:-1:0===f?i:-1===f?EPUBJS.core.indexOfSorted(a,b,c,i,h):EPUBJS.core.indexOfSorted(a,b,c,g,i))},EPUBJS.core.queue=function(a){var b=[],c=a,d=function(a,c,d){return b.push({funcName:a,args:c,context:d}),b},e=function(){var a;b.length&&(a=b.shift(),c[a.funcName].apply(a.context||c,a.args))},f=function(){for(;b.length;)e()},g=function(){b=[]},h=function(){return b.length};return{enqueue:d,dequeue:e,flush:f,clear:g,length:h}},EPUBJS.core.getElementXPath=function(a){return a&&a.id?'//*[@id="'+a.id+'"]':EPUBJS.core.getElementTreeXPath(a)},EPUBJS.core.getElementTreeXPath=function(a){var b,c,d,e,f=[],g="http://www.w3.org/1999/xhtml"===a.ownerDocument.documentElement.getAttribute("xmlns");for(a.nodeType===Node.TEXT_NODE&&(b=EPUBJS.core.indexOfTextNode(a)+1,f.push("text()["+b+"]"),a=a.parentNode);a&&1==a.nodeType;a=a.parentNode){b=0;for(var h=a.previousSibling;h;h=h.previousSibling)h.nodeType!=Node.DOCUMENT_TYPE_NODE&&h.nodeName==a.nodeName&&++b;c=a.nodeName.toLowerCase(),d=g?"xhtml:"+c:c,e=b?"["+(b+1)+"]":"",f.splice(0,0,d+e)}return f.length?"./"+f.join("/"):null},EPUBJS.core.nsResolver=function(a){var b={xhtml:"http://www.w3.org/1999/xhtml",epub:"http://www.idpf.org/2007/ops"};return b[a]||null},EPUBJS.core.cleanStringForXpath=function(a){var b=a.match(/[^'"]+|['"]/g);return b=b.map(function(a){return"'"===a?'"\'"':'"'===a?"'\"'":"'"+a+"'"}),"concat('',"+b.join(",")+")"},EPUBJS.core.indexOfTextNode=function(a){for(var b,c=a.parentNode,d=c.childNodes,e=-1,f=0;f0;){if(c=d.shift(),"text"===c.type?(e=g.childNodes[c.index],g=e.parentNode||g):g=c.id?f.getElementById(c.id):h[c.index],"undefined"==typeof g)return console.error("No Element For",c,a.str),!1;h=Array.prototype.slice.call(g.children)}return g},EPUBJS.EpubCFI.prototype.compare=function(a,b){if("string"==typeof a&&(a=new EPUBJS.EpubCFI(a)),"string"==typeof b&&(b=new EPUBJS.EpubCFI(b)),a.spinePos>b.spinePos)return 1;if(a.spinePosb.steps[c].index)return 1;if(a.steps[c].indexb.characterOffset?1:a.characterOffset=0?(f=e.length,a.characterOffset=f&&b&&b()}var e,f;return"undefined"==typeof this.hooks[a]?!1:(e=this.hooks[a],f=e.length,0===f&&b&&b(),void e.forEach(function(a){a(d,c)}))},{register:function(a){if(void 0===EPUBJS.hooks[a]&&(EPUBJS.hooks[a]={}),"object"!=typeof EPUBJS.hooks[a])throw"Already registered: "+a;return EPUBJS.hooks[a]},mixin:function(b){for(var c in a.prototype)b[c]=a.prototype[c]}}}(),EPUBJS.Layout=EPUBJS.Layout||{},EPUBJS.Layout.Reflowable=function(){this.documentElement=null,this.spreadWidth=null},EPUBJS.Layout.Reflowable.prototype.format=function(a,b,c,d){var e=EPUBJS.core.prefixed("columnAxis"),f=EPUBJS.core.prefixed("columnGap"),g=EPUBJS.core.prefixed("columnWidth"),h=EPUBJS.core.prefixed("columnFill"),i=Math.floor(b),j=Math.floor(i/8),k=d>=0?d:j%2===0?j:j-1;return this.documentElement=a,this.spreadWidth=i+k,a.style.overflow="hidden",a.style.width=i+"px",a.style.height=c+"px",a.style[e]="horizontal",a.style[h]="auto",a.style[g]=i+"px",a.style[f]=k+"px",this.colWidth=i,this.gap=k,{pageWidth:this.spreadWidth,pageHeight:c}},EPUBJS.Layout.Reflowable.prototype.calculatePages=function(){var a,b;return this.documentElement.style.width="auto",a=this.documentElement.scrollWidth,b=Math.ceil(a/this.spreadWidth),{displayedPages:b,pageCount:b}},EPUBJS.Layout.ReflowableSpreads=function(){this.documentElement=null,this.spreadWidth=null},EPUBJS.Layout.ReflowableSpreads.prototype.format=function(a,b,c,d){var e=EPUBJS.core.prefixed("columnAxis"),f=EPUBJS.core.prefixed("columnGap"),g=EPUBJS.core.prefixed("columnWidth"),h=EPUBJS.core.prefixed("columnFill"),i=2,j=Math.floor(b),k=j%2===0?j:j-1,l=Math.floor(k/8),m=d>=0?d:l%2===0?l:l-1,n=Math.floor((k-m)/i);return this.documentElement=a,this.spreadWidth=(n+m)*i,a.style.overflow="hidden",a.style.width=k+"px",a.style.height=c+"px",a.style[e]="horizontal",a.style[h]="auto",a.style[f]=m+"px",a.style[g]=n+"px",this.colWidth=n,this.gap=m,{pageWidth:this.spreadWidth,pageHeight:c}},EPUBJS.Layout.ReflowableSpreads.prototype.calculatePages=function(){var a=this.documentElement.scrollWidth,b=Math.ceil(a/this.spreadWidth);return this.documentElement.style.width=a+this.spreadWidth+"px",{displayedPages:b,pageCount:2*b}},EPUBJS.Layout.Fixed=function(){this.documentElement=null},EPUBJS.Layout.Fixed=function(a){var b,c,d,e,f=EPUBJS.core.prefixed("columnWidth"),g=a.querySelector("[name=viewport");return this.documentElement=a,g&&g.hasAttribute("content")&&(b=g.getAttribute("content"),c=b.split(","),c[0]&&(d=c[0].replace("width=","")),c[1]&&(e=c[1].replace("height=",""))),a.style.width=d+"px"||"auto",a.style.height=e+"px"||"auto",a.style[f]="auto",a.style.overflow="auto",this.colWidth=d,this.gap=0,{pageWidth:d,pageHeight:e}},EPUBJS.Layout.Fixed.prototype.calculatePages=function(){return{displayedPages:1,pageCount:1}},EPUBJS.Pagination=function(a){this.pages=[],this.locations=[],this.epubcfi=new EPUBJS.EpubCFI,a&&a.length&&this.process(a)},EPUBJS.Pagination.prototype.process=function(a){a.forEach(function(a){this.pages.push(a.page),this.locations.push(a.cfi)},this),this.pageList=a,this.firstPage=parseInt(this.pages[0]),this.lastPage=parseInt(this.pages[this.pages.length-1]),this.totalPages=this.lastPage-this.firstPage},EPUBJS.Pagination.prototype.pageFromCfi=function(a){var b=-1;if(0===this.locations.length)return-1;var c=EPUBJS.core.indexOfSorted(a,this.locations,this.epubcfi.compare);return-1!=c&&c=0?this.pages[c-1]:this.pages[0],b=this.pages[c],void 0!==b||(b=-1)),b},EPUBJS.Pagination.prototype.cfiFromPage=function(a){var b=-1;"number"!=typeof a&&(a=parseInt(a));var c=this.pages.indexOf(a);return-1!=c&&(b=this.locations[c]),b},EPUBJS.Pagination.prototype.pageFromPercentage=function(a){var b=Math.round(this.totalPages*a);return b},EPUBJS.Pagination.prototype.percentageFromPage=function(a){var b=(a-this.firstPage)/this.totalPages; -return Math.round(1e3*b)/1e3},EPUBJS.Pagination.prototype.percentageFromCfi=function(a){var b=this.pageFromCfi(a),c=this.percentageFromPage(b);return c},EPUBJS.Parser=function(a){this.baseUrl=a||""},EPUBJS.Parser.prototype.container=function(a){var b,c,d,e;return a?(b=a.querySelector("rootfile"))?(c=b.getAttribute("full-path"),d=EPUBJS.core.uri(c).directory,e=a.xmlEncoding,{packagePath:c,basePath:d,encoding:e}):void console.error("No RootFile Found"):void console.error("Container File Not Found")},EPUBJS.Parser.prototype.identifier=function(a){var b;return a?(b=a.querySelector("metadata"),b?this.getElementText(b,"identifier"):void console.error("No Metadata Found")):void console.error("Package File Not Found")},EPUBJS.Parser.prototype.packageContents=function(a,b){var c,d,e,f,g,h,i,j,k,l,m=this;return b&&(this.baseUrl=b),a?(c=a.querySelector("metadata"))?(d=a.querySelector("manifest"))?(e=a.querySelector("spine"))?(f=m.manifest(d),g=m.findNavPath(d),h=m.findTocPath(d),i=m.findCoverPath(d),j=Array.prototype.indexOf.call(e.parentNode.childNodes,e),k=m.spine(e,f),l={},k.forEach(function(a){l[a.href]=a.index}),{metadata:m.metadata(c),spine:k,manifest:f,navPath:g,tocPath:h,coverPath:i,spineNodeIndex:j,spineIndexByURL:l}):void console.error("No Spine Found"):void console.error("No Manifest Found"):void console.error("No Metadata Found"):void console.error("Package File Not Found")},EPUBJS.Parser.prototype.findNavPath=function(a){var b=a.querySelector("item[properties^='nav']");return b?b.getAttribute("href"):!1},EPUBJS.Parser.prototype.findTocPath=function(a){var b=a.querySelector("item[media-type='application/x-dtbncx+xml']");return b?b.getAttribute("href"):!1},EPUBJS.Parser.prototype.findCoverPath=function(a){var b=a.querySelector("item[properties='cover-image']");return b?b.getAttribute("href"):!1},EPUBJS.Parser.prototype.metadata=function(a){var b={},c=this;return b.bookTitle=c.getElementText(a,"title"),b.creator=c.getElementText(a,"creator"),b.description=c.getElementText(a,"description"),b.pubdate=c.getElementText(a,"date"),b.publisher=c.getElementText(a,"publisher"),b.identifier=c.getElementText(a,"identifier"),b.language=c.getElementText(a,"language"),b.rights=c.getElementText(a,"rights"),b.modified_date=c.querySelectorText(a,"meta[property='dcterms:modified']"),b.layout=c.querySelectorText(a,"meta[property='rendition:layout']"),b.orientation=c.querySelectorText(a,"meta[property='rendition:orientation']"),b.spread=c.querySelectorText(a,"meta[property='rendition:spread']"),b},EPUBJS.Parser.prototype.getElementText=function(a,b){var c,d=a.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/",b);return d&&0!==d.length?(c=d[0],c.childNodes.length?c.childNodes[0].nodeValue:""):""},EPUBJS.Parser.prototype.querySelectorText=function(a,b){var c=a.querySelector(b);return c&&c.childNodes.length?c.childNodes[0].nodeValue:""},EPUBJS.Parser.prototype.manifest=function(a){var b=this.baseUrl,c={},d=a.querySelectorAll("item"),e=Array.prototype.slice.call(d);return e.forEach(function(a){var d=a.getAttribute("id"),e=a.getAttribute("href")||"",f=a.getAttribute("media-type")||"",g=a.getAttribute("properties")||"";c[d]={href:e,url:b+e,type:f,properties:g}}),c},EPUBJS.Parser.prototype.spine=function(a,b){var c=[],d=a.getElementsByTagName("itemref"),e=Array.prototype.slice.call(d),f=Array.prototype.indexOf.call(a.parentNode.childNodes,a),g=new EPUBJS.EpubCFI;return e.forEach(function(a,d){var e=a.getAttribute("idref"),h=g.generateChapterComponent(f,d,e),i=a.getAttribute("properties")||"",j=i.length?i.split(" "):[],k=b[e].properties,l=k.length?k.split(" "):[],m={id:e,linear:a.getAttribute("linear")||"",properties:j,manifestProperties:l,href:b[e].href,url:b[e].url,index:d,cfiBase:h,cfi:"epub("+h+")"};c.push(m)}),c},EPUBJS.Parser.prototype.nav=function(a,b,c){function d(a){var b=[];return Array.prototype.slice.call(a.childNodes).forEach(function(a){"ol"==a.tagName&&Array.prototype.slice.call(a.childNodes).forEach(function(a){"li"==a.tagName&&b.push(a)})}),b}function e(a){var b=null;return Array.prototype.slice.call(a.childNodes).forEach(function(a){("a"==a.tagName||"span"==a.tagName)&&(b=a)}),b}function f(a){var g=[],i=d(a),j=Array.prototype.slice.call(i),k=j.length;return 0===k?!1:(j.forEach(function(d){var i=d.getAttribute("id")||!1,j=e(d),k=j.getAttribute("href")||"",l=j.textContent||"",m=k.split("#"),n=m[0],o=f(d),p=b[n],q=c[p],r=q?q.cfi:"";i||(p?(q=c[p],i=q.id,r=q.cfi):i="epubjs-autogen-toc-id-"+h++),d.setAttribute("id",i),g.push({id:i,href:k,label:l,subitems:o,parent:a?a.getAttribute("id"):null,cfi:r})}),g)}var g=a.querySelector('nav[*|type="toc"]'),h=0;return g?f(g):[]},EPUBJS.Parser.prototype.toc=function(a,b,c){function d(a){var e=[],f=a.querySelectorAll("navPoint"),g=Array.prototype.slice.call(f).reverse(),h=g.length;return 0===h?[]:(g.forEach(function(f){var g=f.getAttribute("id")||!1,h=f.querySelector("content"),i=h.getAttribute("src"),j=f.querySelector("navLabel"),k=j.textContent?j.textContent:"",l=i.split("#"),m=l[0],n=b[m],o=c[n],p=d(f),q=o?o.cfi:"";g||(n?(o=c[n],g=o.id,q=o.cfi):g="epubjs-autogen-toc-id-"+idCounter++),e.unshift({id:g,href:i,label:k,spinePos:n,subitems:p,parent:a?a.getAttribute("id"):null,cfi:q})}),e)}var e=a.querySelector("navMap");return e?d(e):[]},EPUBJS.Parser.prototype.pageList=function(a){function b(a){var b=[];return Array.prototype.slice.call(a.childNodes).forEach(function(a){"ol"==a.tagName&&Array.prototype.slice.call(a.childNodes).forEach(function(a){"li"==a.tagName&&b.push(a)})}),b}function c(a){var b=null;return Array.prototype.slice.call(a.childNodes).forEach(function(a){("a"==a.tagName||"span"==a.tagName)&&(b=a)}),b}function d(a){var d=[],e=b(a),f=Array.prototype.slice.call(e),g=f.length;return 0===g?!1:(f.forEach(function(a){var b,e,f,g=(a.getAttribute("id")||!1,c(a)),h=g.getAttribute("href")||"",i=g.textContent||"",j=parseInt(i),k=h.indexOf("epubcfi");-1!=k?(b=h.split("#"),e=b[0],f=b.length>1?b[1]:!1,d.push({cfi:f,href:h,packageUrl:e,page:j})):d.push({href:h,page:j})}),d)}var e=a.querySelector('nav[*|type="page-list"]');return e?d(e):[]},EPUBJS.Render.Iframe=function(){this.iframe=null,this.document=null,this.window=null,this.docEl=null,this.bodyEl=null,this.leftPos=0,this.pageWidth=0},EPUBJS.Render.Iframe.prototype.create=function(){return this.iframe=document.createElement("iframe"),this.iframe.id="epubjs-iframe:"+EPUBJS.core.uuid(),this.iframe.scrolling="no",this.iframe.seamless="seamless",this.iframe.style.border="none",this.iframe.addEventListener("load",this.loaded.bind(this),!1),this.iframe},EPUBJS.Render.Iframe.prototype.load=function(a){var b=this,c=new RSVP.defer;return this.iframe.contentWindow.location.replace(a),b.leftPos=0,this.window&&this.unload(),this.iframe.onload=function(){b.document=b.iframe.contentDocument,b.docEl=b.document.documentElement,b.headEl=b.document.head,b.bodyEl=b.document.body,b.window=b.iframe.contentWindow,b.window.addEventListener("resize",b.resized.bind(b),!1),b.bodyEl&&(b.bodyEl.style.margin="0"),c.resolve(b.docEl)},this.iframe.onerror=function(a){c.reject({message:"Error Loading Contents: "+a,stack:(new Error).stack})},c.promise},EPUBJS.Render.Iframe.prototype.loaded=function(){var a=this.iframe.contentWindow.location.href;"about:blank"!=a&&this.trigger("render:loaded",a)},EPUBJS.Render.Iframe.prototype.resize=function(a,b){this.iframe&&(this.iframe.height=b,isNaN(a)||a%2===0||(a+=1),this.iframe.width=a,this.width=this.iframe.getBoundingClientRect().width||a,this.height=this.iframe.getBoundingClientRect().height||b)},EPUBJS.Render.Iframe.prototype.resized=function(){this.width=this.iframe.getBoundingClientRect().width,this.height=this.iframe.getBoundingClientRect().height},EPUBJS.Render.Iframe.prototype.totalWidth=function(){return this.docEl.scrollWidth},EPUBJS.Render.Iframe.prototype.totalHeight=function(){return this.docEl.scrollHeight},EPUBJS.Render.Iframe.prototype.setPageDimensions=function(a,b){this.pageWidth=a,this.pageHeight=b},EPUBJS.Render.Iframe.prototype.setLeft=function(a){this.document.defaultView.scrollTo(a,0)},EPUBJS.Render.Iframe.prototype.setStyle=function(a,b,c){c&&(a=EPUBJS.core.prefixed(a)),this.bodyEl&&(this.bodyEl.style[a]=b)},EPUBJS.Render.Iframe.prototype.removeStyle=function(a){this.bodyEl&&(this.bodyEl.style[a]="")},EPUBJS.Render.Iframe.prototype.addHeadTag=function(a,b){var c=document.createElement(a);for(var d in b)c[d]=b[d];this.headEl&&this.headEl.appendChild(c)},EPUBJS.Render.Iframe.prototype.page=function(a){this.leftPos=this.pageWidth*(a-1),this.setLeft(this.leftPos)},EPUBJS.Render.Iframe.prototype.getPageNumberByElement=function(a){var b,c;if(a)return b=this.leftPos+a.getBoundingClientRect().left,c=Math.floor(b/this.pageWidth)+1},EPUBJS.Render.Iframe.prototype.getPageNumberByRect=function(a){var b,c;return b=this.leftPos+a.left,c=Math.floor(b/this.pageWidth)+1},EPUBJS.Render.Iframe.prototype.getBaseElement=function(){return this.bodyEl},EPUBJS.Render.Iframe.prototype.isElementVisible=function(a){var b,c;return a&&"function"==typeof a.getBoundingClientRect&&(b=a.getBoundingClientRect(),c=b.left,0!==b.width&&0!==b.height&&c>=0&&c=1&&a<=this.displayedPages?(this.chapterPos=a,this.render.page(a),this.visibleRangeCfi=this.getVisibleRangeCfi(),this.currentLocationCfi=this.visibleRangeCfi.start,this.trigger("renderer:locationChanged",this.currentLocationCfi),this.trigger("renderer:visibleRangeChanged",this.visibleRangeCfi),!0):!1:(console.warn("pageMap not set, queuing"),this._q.enqueue("page",arguments),!0)},EPUBJS.Renderer.prototype.nextPage=function(){return this.page(this.chapterPos+1)},EPUBJS.Renderer.prototype.prevPage=function(){return this.page(this.chapterPos-1)},EPUBJS.Renderer.prototype.pageByElement=function(a){var b;a&&(b=this.render.getPageNumberByElement(a),this.page(b))},EPUBJS.Renderer.prototype.lastPage=function(){return this._moving?this._q.enqueue("lastPage",arguments):void this.page(this.displayedPages)},EPUBJS.Renderer.prototype.firstPage=function(){this.page(1)},EPUBJS.Renderer.prototype.section=function(a){var b=this.doc.getElementById(a);b&&this.pageByElement(b)},EPUBJS.Renderer.prototype.firstElementisTextNode=function(a){var b=a.childNodes,c=b.length;return c&&b[0]&&3===b[0].nodeType&&b[0].textContent.trim().length?!0:!1},EPUBJS.Renderer.prototype.walk=function(a,b,c){for(var d,e,f,g,h=a,i=[h],j=1e4,k=0;!d&&i.length;){if(a=i.shift(),this.containsPoint(a,b,c)&&this.firstElementisTextNode(a)&&(d=a),!d&&a&&a.childElementCount>0){if(e=a.children,!e||!e.length)return d;f=e.length?e.length:0;for(var l=f-1;l>=0;l--)e[l]!=g&&i.unshift(e[l])}if(!d&&0===i.length&&h&&null!==h.parentNode&&(i.push(h.parentNode),g=h,h=h.parentNode),k++,k>j){console.error("ENDLESS LOOP");break}}return d},EPUBJS.Renderer.prototype.containsPoint=function(a,b){var c;return a&&"function"==typeof a.getBoundingClientRect&&(c=a.getBoundingClientRect(),0!==c.width&&0!==c.height&&c.left>=b&&b<=c.left+c.width)?!0:!1},EPUBJS.Renderer.prototype.textSprint=function(a,b){for(var c,d=document.createTreeWalker(a,NodeFilter.SHOW_TEXT,{acceptNode:function(a){return/^\s*$/.test(a.data)?NodeFilter.FILTER_REJECT:NodeFilter.FILTER_ACCEPT}},!1);c=d.nextNode();)b(c)},EPUBJS.Renderer.prototype.sprint=function(a,b){for(var c,d=document.createTreeWalker(a,NodeFilter.SHOW_ELEMENT,null,!1);c=d.nextNode();)b(c)},EPUBJS.Renderer.prototype.mapPage=function(){var a,b,c=this,d=[{start:null,end:null}],e=this.render.getBaseElement(),f=1,g=this.layout.colWidth+this.layout.gap,h=this.formated.pageWidth*(this.chapterPos-1),i=g*f-h,j=0,k=function(a){var b,c,d=Array.prototype.slice.call(a.childNodes);if(a.nodeType==Node.ELEMENT_NODE){if(c=document.createRange(),c.selectNodeContents(a),b=c.getBoundingClientRect(),!b||0===b.width&&0===b.height)return;b.left>j&&d.forEach(function(a){a.nodeType==Node.TEXT_NODE&&a.textContent.trim().length&&l(a)}),b.right>j&&d.forEach(function(a){a.nodeType==Node.TEXT_NODE&&a.textContent.trim().length&&l(a)})}},l=function(e){var k=c.splitTextNodeIntoWordsRanges(e);k.forEach(function(e){var k=e.getBoundingClientRect();!k||0===k.width&&0===k.height||(k.left+k.width0&&(b&&(b.setEnd(a,pos),c.push(b)),b=this.doc.createRange(),b.setStart(a,pos+1));return b&&(b.setEnd(a,d.length),c.push(b)),c},EPUBJS.Renderer.prototype.rangePosition=function(a){var b,c;return c=a.getClientRects(),c.length?b=c[0]:null},EPUBJS.Renderer.prototype.getPageCfi=function(){var a;return this.spreads?(a=2*this.chapterPos,startRange=this.pageMap[a-2]):(a=this.chapterPos,startRange=this.pageMap[a-1]),this.pageMap[2*this.chapterPos-1].start},EPUBJS.Renderer.prototype.getRange=function(a,b,c){var d,e=this.doc.createRange();return c=!0,"undefined"==typeof document.caretPositionFromPoint||c?"undefined"==typeof document.caretRangeFromPoint||c?(this.visibileEl=this.findElementAfter(a,b),e.setStart(this.visibileEl,1)):e=this.doc.caretRangeFromPoint(a,b):(d=this.doc.caretPositionFromPoint(a,b),e.setStart(d.offsetNode,d.offset)),e},EPUBJS.Renderer.prototype.pagesInCurrentChapter=function(){var a,b;return this.pageMap?(b=this.pageMap.length,a=this.spreads?Math.ceil(b/2):b):(console.warn("page map not loaded"),!1)},EPUBJS.Renderer.prototype.currentRenderedPage=function(){var a;return this.pageMap?a=this.spreads&&this.layout.pageCount>1?2*this.chapterPos:this.chapterPos:(console.warn("page map not loaded"),!1)},EPUBJS.Renderer.prototype.getRenderedPagesLeft=function(){var a,b,c;return this.pageMap?(b=this.pageMap.length,a=this.spreads?2*this.chapterPos:this.chapterPos,c=b-a):(console.warn("page map not loaded"),!1)},EPUBJS.Renderer.prototype.getVisibleRangeCfi=function(){var a,b,c;return this.pageMap?(this.spreads?(a=2*this.chapterPos,b=this.pageMap[a-2],c=b,this.layout.pageCount>1&&(c=this.pageMap[a-1])):(a=this.chapterPos,b=this.pageMap[a-1],c=b),b||(console.warn("page range miss:",a,this.pageMap),b=this.pageMap[this.pageMap.length-1],c=b),{start:b.start,end:c.end}):(console.warn("page map not loaded"),!1)},EPUBJS.Renderer.prototype.gotoCfi=function(a){var b,c,d;return this._moving?this._q.enqueue("gotoCfi",arguments):(_.isString(a)&&(a=this.epubcfi.parse(a)),void("undefined"==typeof document.evaluate?(c=this.epubcfi.addMarker(a,this.doc),c&&(b=this.render.getPageNumberByElement(c),this.epubcfi.removeMarker(c,this.doc),this.page(b))):(d=this.epubcfi.generateRangeFromCfi(a,this.doc),d&&(b=this.render.getPageNumberByRect(d.getBoundingClientRect()),this.page(b)))))},EPUBJS.Renderer.prototype.findFirstVisible=function(a){var b,c=a||this.render.getBaseElement();return b=this.walk(c),b?b:a},EPUBJS.Renderer.prototype.findElementAfter=function(a,b,c){var d,e=c||this.render.getBaseElement();return d=this.walk(e,a,b),d?d:e},EPUBJS.Renderer.prototype.resize=function(a,b,c){this.width=a,this.height=b,c!==!1&&this.render.resize(this.width,this.height),this.contents&&this.reformat(),this.trigger("renderer:resized",{width:this.width,height:this.height})},EPUBJS.Renderer.prototype.onResized=function(){var a=this.container.clientWidth,b=this.container.clientHeight;this.resize(a,b,!1)},EPUBJS.Renderer.prototype.addEventListeners=function(){this.render.document&&this.listenedEvents.forEach(function(a){this.render.document.addEventListener(a,this.triggerEvent.bind(this),!1)},this)},EPUBJS.Renderer.prototype.removeEventListeners=function(){this.render.document&&this.listenedEvents.forEach(function(a){this.render.document.removeEventListener(a,this.triggerEvent,!1)},this)},EPUBJS.Renderer.prototype.triggerEvent=function(a){this.trigger("renderer:"+a.type,a)},EPUBJS.Renderer.prototype.addSelectionListeners=function(){this.render.document.addEventListener("selectionchange",this.onSelectionChange.bind(this),!1)},EPUBJS.Renderer.prototype.removeSelectionListeners=function(){this.render.document&&this.doc.removeEventListener("selectionchange",this.onSelectionChange,!1)},EPUBJS.Renderer.prototype.onSelectionChange=function(){this.selectionEndTimeout&&clearTimeout(this.selectionEndTimeout),this.selectionEndTimeout=setTimeout(function(){this.selectedRange=this.render.window.getSelection(),this.trigger("renderer:selected",this.selectedRange)}.bind(this),500)},EPUBJS.Renderer.prototype.setMinSpreadWidth=function(a){this.minSpreadWidth=a,this.spreads=this.determineSpreads(a)},EPUBJS.Renderer.prototype.determineSpreads=function(a){return this.isForcedSingle||!a||this.width=g&&c&&c(!0),e=!0)};b(a,f)}.bind(this))},EPUBJS.Renderer.prototype.replaceWithStored=function(a,b,c,d){var e,f={},g=this.currentChapter.store,h=this.caches[a],i=EPUBJS.core.uri(this.currentChapter.absolute),j=i.base,k=b,l=2e3,m=function(a,b){f[b]=a},n=function(){d&&d(),_.each(e,function(a){g.revokeUrl(a)}),h=f};g&&(h||(h={}),e=_.clone(h),this.replace(a,function(b,d){var h=b.getAttribute(k),i=EPUBJS.core.resolveUrl(j,h),m=function(c){var e;b.onload=function(){clearTimeout(e),d(c,i)},b.onerror=function(a){clearTimeout(e),d(c,i),console.error(a)},"image"==a&&b.setAttribute("externalResourcesRequired","true"),"link[href]"==a&&"stylesheet"!==b.getAttribute("rel")&&d(c,i),b.setAttribute(k,c),e=setTimeout(function(){d(c,i)},l)};i in e?(m(e[i]),f[i]=e[i],delete e[i]):c(g,i,m,b)},n,m))},RSVP.EventTarget.mixin(EPUBJS.Renderer.prototype);var EPUBJS=EPUBJS||{};EPUBJS.replace={},EPUBJS.replace.hrefs=function(a,b){var c=this,d=function(a,d){var e,f,g=a.getAttribute("href"),h=g.search("://");-1!=h?a.setAttribute("target","_blank"):(e=EPUBJS.core.uri(b.render.window.location.href).directory,f=EPUBJS.core.resolveUrl(e,g),a.onclick=function(){return c.goto(f),!1}),d()};b.replace("a[href]",d,a)},EPUBJS.replace.head=function(a,b){b.replaceWithStored("link[href]","href",EPUBJS.replace.links,a)},EPUBJS.replace.resources=function(a,b){b.replaceWithStored("[src]","src",EPUBJS.replace.srcs,a)},EPUBJS.replace.svg=function(a,b){b.replaceWithStored("image","xlink:href",function(a,b,c){a.getUrl(b).then(c)},a)},EPUBJS.replace.srcs=function(a,b,c){a.getUrl(b).then(c)},EPUBJS.replace.links=function(a,b,c,d){"stylesheet"===d.getAttribute("rel")?EPUBJS.replace.stylesheets(a,b).then(function(a,b){setTimeout(function(){c(a,b)},5)}):a.getUrl(b).then(c)},EPUBJS.replace.stylesheets=function(a,b){var c=new RSVP.defer;if(a)return a.getText(b).then(function(d){EPUBJS.replace.cssUrls(a,b,d).then(function(a){var b=window.URL||window.webkitURL||window.mozURL,d=new Blob([a],{type:"text/css"}),e=b.createObjectURL(d);c.resolve(e)},function(a){console.error(a)})}),c.promise},EPUBJS.replace.cssUrls=function(a,b,c){var d=new RSVP.defer,e=[],f=c.match(/url\(\'?\"?([^\'|^\"^\)]*)\'?\"?\)/g);if(a)return f?(f.forEach(function(d){var f=EPUBJS.core.resolveUrl(b,d.replace(/url\(|[|\)|\'|\"]/g,"")),g=a.getUrl(f).then(function(a){c=c.replace(d,'url("'+a+'")')});e.push(g)}),RSVP.all(e).then(function(){d.resolve(c)}),d.promise):(d.resolve(c),d.promise)},EPUBJS.Unarchiver=function(a){return this.libPath=EPUBJS.filePath,this.zipUrl=a,this.loadLib(),this.urlCache={},this.zipFs=new zip.fs.FS,this.promise},EPUBJS.Unarchiver.prototype.loadLib=function(){"undefined"==typeof zip&&console.error("Zip lib not loaded"),zip.workerScriptsPath=this.libPath},EPUBJS.Unarchiver.prototype.openZip=function(a){var b=new RSVP.defer,c=this.zipFs;return c.importHttpContent(a,!1,function(){b.resolve(c)},this.failed),b.promise},EPUBJS.Unarchiver.prototype.getXml=function(a,b){return this.getText(a,b).then(function(a){var b=new DOMParser;return b.parseFromString(a,"application/xml")})},EPUBJS.Unarchiver.prototype.getUrl=function(a,b){var c=this,d=new RSVP.defer,e=window.decodeURIComponent(a),f=this.zipFs.find(e),g=window.URL||window.webkitURL||window.mozURL;return f?a in this.urlCache?(d.resolve(this.urlCache[a]),d.promise):(f.getBlob(b||zip.getMimeType(f.name),function(b){var e=g.createObjectURL(b);d.resolve(e),c.urlCache[a]=e}),d.promise):(d.reject({message:"File not found in the epub: "+a,stack:(new Error).stack}),d.promise)},EPUBJS.Unarchiver.prototype.getText=function(a,b){{var c=new RSVP.defer,d=window.decodeURIComponent(a),e=this.zipFs.find(d);window.URL||window.webkitURL||window.mozURL}return e?(e.getText(function(a){c.resolve(a)},null,null,b||"UTF-8"),c.promise):(console.warn("File not found in the contained epub:",a),c.promise)},EPUBJS.Unarchiver.prototype.revokeUrl=function(a){var b=window.URL||window.webkitURL||window.mozURL,c=unarchiver.urlCache[a];c&&b.revokeObjectURL(c)},EPUBJS.Unarchiver.prototype.failed=function(a){console.error(a)},EPUBJS.Unarchiver.prototype.afterSaved=function(){this.callback()},EPUBJS.Unarchiver.prototype.toStorage=function(a){function b(){f--,0===f&&e.afterSaved()}var c=0,d=20,e=this,f=a.length;a.forEach(function(a){setTimeout(function(a){e.saveEntryFileToStorage(a,b)},c,a),c+=d}),console.log("time",c)},EPUBJS.Unarchiver.prototype.saveEntryFileToStorage=function(a,b){a.getData(new zip.BlobWriter,function(c){EPUBJS.storage.save(a.filename,c,b)})}; -//# sourceMappingURL=epub.min.map \ No newline at end of file diff --git a/build/epub.min.map b/build/epub.min.map deleted file mode 100644 index d43aa253e..000000000 --- a/build/epub.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"epub.min.js","sources":["epub.js"],"names":["n","this","t","_","r","e","Array","prototype","u","Object","i","Function","a","push","o","slice","c","concat","l","toString","f","hasOwnProperty","s","forEach","p","map","h","reduce","v","reduceRight","d","filter","g","every","m","some","y","indexOf","b","lastIndexOf","x","isArray","keys","j","bind","w","_wrapped","exports","module","VERSION","A","each","length","call","has","collect","O","foldl","inject","arguments","TypeError","foldr","find","detect","E","select","reject","all","identity","any","contains","include","invoke","isFunction","apply","pluck","where","isEmpty","findWhere","max","Math","computed","value","min","shuffle","random","k","sortBy","index","criteria","sort","F","groupBy","countBy","sortedIndex","toArray","values","size","first","head","take","initial","last","rest","tail","drop","compact","R","flatten","without","difference","uniq","unique","union","intersection","zip","object","range","ceil","partial","bindAll","functions","memoize","delay","setTimeout","defer","throttle","Date","clearTimeout","debounce","once","wrap","compose","after","pairs","invert","methods","extend","pick","omit","defaults","clone","isObject","tap","I","source","global","multiline","ignoreCase","constructor","pop","isEqual","isString","isElement","nodeType","isArguments","isFinite","isNaN","parseFloat","isNumber","isBoolean","isNull","isUndefined","noConflict","times","floor","M","escape","&","<",">","\"","'","/","unescape","S","RegExp","join","replace","result","mixin","D","N","uniqueId","templateSettings","evaluate","interpolate","T","q","\\","\r","\n","\t","
","
","B","template","variable","chain","_chain","define","requireModule","require","requirejs","registry","seen","name","deps","callback","resolve","child","charAt","parts","split","parentBase","part","_eak_seen","Error","mod","reified","__dependency1__","__exports__","Promise","array","label","__dependency2__","fulfilled","state","rejected","reason","isNonThenable","entries","fulfilledResolver","resolveAll","rejectedResolver","results","remaining","entry","cast","then","useNextTick","process","nextTick","flush","useMutationObserver","iterations","observer","BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","useSetTimeout","queue","tuple","arg","scheduleFlush","browserGlobal","window","MutationObserver","WebKitMutationObserver","configure","config","on","EventTarget","instrument","deferred","promise","callbacks","callbacksFor","_promiseCallbacks","off","trigger","undefined","eventName","allCallbacks","splice","options","__dependency3__","promises","filterFn","filterResults","valuesLen","filtered","keysOf","fulfilledTo","property","onRejection","now","guid","_guidKey","_id","detail","_detail","childGuid","_label","timeStamp","stack","error","mapFn","resultLen","mappedResults","makeNodeCallbackFor","nodeFunc","binding","nodeArgs","thisArg","__dependency4__","__dependency5__","__dependency6__","__dependency7__","__dependency8__","__dependency9__","noop","resolver","counter","_subscribers","invokeResolver","resolvePromise","rejectPromise","subscribe","parent","onFulfillment","subscribers","FULFILLED","REJECTED","publish","settled","invokeCallback","succeeded","failed","hasCallback","handleThenable","resolved","objectOrFunction","val","fulfill","_state","PENDING","SEALED","async","publishFulfillment","publishRejection","_onerror","race","Resolve","Reject","guidKey","thenPromise","catch","finally","Constructor","fulfillmentAt","pending","getTime","prop","__dependency10__","__dependency11__","__dependency12__","__dependency13__","__dependency14__","__dependency15__","denodeify","allSettled","hash","rethrow","asap","__PROMISE_INSTRUMENTATION__","RSVP","EPUBJS","plugins","filePath","Render","root","previousEpub","ePub","bookPath","Book","amd","settings","bookKey","packageUrl","storage","fromStorage","saved","online","contained","width","height","layoutOveride","orientation","minSpreadWidth","gap","version","restore","reload","goto","styles","headTags","withCredentials","render_method","EPUBJSVERSION","spinePos","stored","navigator","onLine","networkListeners","store","fileStorage","ready","manifest","spine","metadata","cover","toc","pageList","readyPromises","pagination","Pagination","pageListReady","_ready","isRendered","_q","core","_rendering","_displayQ","_moving","_gotoQ","renderer","Renderer","setMinSpreadWidth","setGap","listenToRenderer","defer_opened","opened","open","addEventListener","unload","forceReload","epubpackage","book","bookUrl","urlFrom","isContained","unarchive","loadPackage","localStorage","packageXml","identifier","packageIdentifier","restored","unpack","storeOffline","_registerReplacements","_containerPath","parse","Parser","containerPath","loadXml","containerXml","container","paths","contentsPath","basePath","packagePath","encoding","console","contents","packageContents","spineIndexByURL","generateBookKey","globalLayoutProperties","parseLayoutProperties","coverPath","spineNodeIndex","navPath","navUrl","navHtml","nav","epubcfi","EpubCFI","wait","pg","cfi","generateCfiFromHref","href","tocPath","tocUrl","tocXml","createHiddenRender","_width","_height","hiddenContainer","hiddenEl","box","element","getBoundingClientRect","forceSingle","createElement","style","visibility","overflow","appendChild","initialize","generatePageList","pager","spineLength","currentPage","nextChapter","chapter","next","done","Chapter","displayChapter","pageMap","item","start","page","spreads","end","remove","removeChild","generatePagination","defered","loadPagination","pagelistJSON","JSON","getPageList","getMetadata","getToc","Events","startPage","endPage","percent","pageRange","pageFromCfi","percentageFromPage","anchorPage","percentage","loadChange","url","uri","currentChapter","absolute","path","warn","filename","unlistenToRenderer","getXml","request","base","protocol","fromRoot","location","origin","host","baseTag","getElementsByTagName","resolveUrl","pathname","Unarchiver","openZip","extension","isSaved","storedSettings","getItem","saveContents","setItem","stringify","removeSavedContents","removeItem","renderTo","elem","rendered","getEl","_rendered","startDisplay","display","previousLocationCfi","gotoCfi","fetch","fromStore","len","clearSaved","chap","render","pos","enqueue","lastPage","preloadNextChapter","dequeue","message","nextPage","prevPage","prev","prevChapter","linear","getCurrentLocationCfi","currentLocationCfi","target","gotoPercentage","parseInt","substring","gotoPage","gotoHref","cfiString","spineItem","section","relativeURL","firstPage","cfiFromPage","pageFromPercentage","assets","batch","availableOffline","setStyle","prefixed","noreflow","reformatTimeout","reformat","removeStyle","addHeadTag","tag","attrs","useSpreads","use","load","destroy","removeEventListener","applyStyles","applyHeadTags","registerHook","hrefs","_needsAssetReplacement","resources","svg","getStorageType","layout","spread","event","spineObject","id","cfiBase","properties","manifestProperties","pages","loaded","_store","get","xml","setDocument","tempUrl","getUrl","setPages","num","getPages","getID","ID","revokeUrl","_document","implementation","createDocument","namespaceURI","doctype","importNode","documentElement","cfiFromRange","_range","startXpath","endXpath","startContainer","endContainer","cleanEndTextContent","getElementXPath","nsResolver","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","collapsed","createRange","setStart","startOffset","setEnd","endOffset","log","cleanStartTextContent","cleanStringForXpath","textContent","generateCfiFromRange","_query","matches","query","toLowerCase","text","textSprint","func","treeWalker","createTreeWalker","NodeFilter","SHOW_TEXT","acceptNode","test","FILTER_REJECT","FILTER_ACCEPT","nextNode","getElementById","getEls","classes","getElementsByClassName","type","handler","readyState","DONE","status","responseXML","response","supportsURL","Blob","URL","BLOB_RESPONSE","xhr","XMLHttpRequest","xhrPrototype","defineProperty","onreadystatechange","responseType","setRequestHeader","overrideMimeType","send","obj","arr","member","newitm","ident","withoutProtocol","dot","firstSlash","directory","fragment","doubleSlash","search","folder","lastSlash","dataURLToBlob","dataURL","contentType","raw","rawLength","uInt8Array","BASE64_MARKER","atob","Uint8Array","charCodeAt","addScript","src","onload","body","addScripts","srcArr","total","curr","cb","addCss","rel","unprefixed","vendors","upper","toUpperCase","segments","folders","uuid","insert","compareFunction","locationOf","_start","_end","compared","pivot","indexOfSorted","_scope","scope","funcName","args","context","inwait","shift","clear","getElementTreeXPath","nodeName","tagName","pathIndex","isXhtml","ownerDocument","getAttribute","Node","TEXT_NODE","indexOfTextNode","parentNode","sibling","previousSibling","DOCUMENT_TYPE_NODE","prefix","ns","xhtml","epub","str","match","textNode","sib","children","childNodes","cfiStr","generateChapterComponent","_spineNodeIndex","_pos","generatePathComponent","steps","segment","generateCfiFromElement","pathTo","unshift","getChapterComponent","splitStr","getPathComponent","pathComponent","getCharecterOffsetComponent","chapSegment","chapterComponent","charecterOffsetComponent","assertion","chapId","endInt","parseStep","has_brackets","spineId","step","characterOffset","textLocationAssertion","addMarker","_doc","_marker","lastStep","doc","marker","createMarker","findParent","splitText","classList","add","insertBefore","firstChild","removeMarker","nextSib","nextSibling","prevSib","sections","compare","cfiOne","cfiTwo","generateCfiFromTextNode","anchor","offset","generateCfiFromRangeAnchor","anchorNode","anchorOffset","startElement","startSteps","startPath","startIndex","endElement","endSteps","endPath","endIndex","generateXpathFromSteps","xpath","position","generateRangeFromCfi","textLength","debug","selectNode","el","events","createEvent","tell","listen","deafen","listenUntil","evt","CustomEvent","msg","dispatchEvent","bindto","OnEvt","OffEvt","unlisten","hooks","Hooks","getHooks","plugs","plugType","hook","toAdd","toFront","triggerHooks","passed","countdown","count","register","Layout","Reflowable","spreadWidth","format","_gap","columnAxis","columnGap","columnWidth","columnFill","colWidth","pageWidth","pageHeight","calculatePages","totalWidth","displayedPages","scrollWidth","pageCount","ReflowableSpreads","divisor","fullWidth","Fixed","content","viewport","querySelector","hasAttribute","locations","totalPages","round","percentageFromCfi","baseUrl","rootfile","fullpath","xmlEncoding","metadataNode","getElementText","manifestNode","spineNode","findNavPath","findTocPath","findCoverPath","bookTitle","creator","description","pubdate","publisher","language","rights","modified_date","querySelectorText","found","getElementsByTagNameNS","nodeValue","manifestXml","selected","querySelectorAll","items","spineXml","Id","props","propArray","manifestProps","manifestPropArray","vert","bookSpine","findListItems","findAnchorOrSpan","getTOC","list","nodes","subitems","idCounter","setAttribute","navEl","reverse","navLabel","navMap","isCfi","Iframe","iframe","docEl","bodyEl","leftPos","create","scrolling","seamless","border","contentWindow","contentDocument","headEl","resized","margin","onerror","resize","totalHeight","scrollHeight","setPageDimensions","setLeft","defaultView","scrollTo","tagEl","attr","getPageNumberByElement","left","getPageNumberByRect","boundingClientRect","getBaseElement","isElementVisible","rect","scroll","bool","renderMethod","hidden","listenedEvents","upEvent","downEvent","caches","isForcedSingle","onResized","layoutSettings","initWidth","initHeight","clientWidth","clientHeight","globalLayout","removeEventListeners","removeSelectionListeners","chapterPos","currentChapterCfiBase","reconcileLayoutSettings","layoutMethod","determineLayout","visible","formated","addEventListeners","addSelectionListeners","beforeDisplay","queued","updatePages","visibleRangeCfi","getVisibleRangeCfi","rendition","determineSpreads","mapPage","timeoutTillCfi","headTag","pageByElement","firstElementisTextNode","leng","trim","walk","prevNode","startNode","STOP","ITER","containsPoint","childElementCount","sprint","SHOW_ELEMENT","prevRange","limit","elLimit","check","elPos","elRange","ELEMENT_NODE","selectNodeContents","checkText","right","ranges","splitTextNodeIntoWordsRanges","collapse","rangePosition","getClientRects","getPageCfi","startRange","getRange","forceElement","caretPositionFromPoint","caretRangeFromPoint","visibileEl","findElementAfter","offsetNode","pagesInCurrentChapter","pgs","currentRenderedPage","getRenderedPagesLeft","pagesLeft","endRange","findFirstVisible","startEl","setSize","triggerEvent","onSelectionChange","selectionEndTimeout","selectedRange","getSelection","cutoff","finished","progress","called","full","replaceWithStored","_oldUrls","_newUrls","_cache","_uri","_chapterBase","_attr","_wait","link","replaceUrl","timeout","replacments","relative","isRelative","onclick","links","srcs","stylesheets","getText","cssUrls","newText","_URL","webkitURL","mozURL","blob","createObjectURL","replaced","libPath","zipUrl","loadLib","urlCache","zipFs","fs","FS","workerScriptsPath","importHttpContent","parser","DOMParser","parseFromString","mime","unarchiver","decodededUrl","decodeURIComponent","getBlob","getMimeType","fromCache","revokeObjectURL","afterSaved","toStorage","that","saveEntryFileToStorage","getData","BlobWriter","save"],"mappings":"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"} \ No newline at end of file diff --git a/build/epub_no_underscore.js b/build/epub_no_underscore.js deleted file mode 100644 index b9bf5220c..000000000 --- a/build/epub_no_underscore.js +++ /dev/null @@ -1,7342 +0,0 @@ -(function(global) { -var define, requireModule, require, requirejs; - -(function() { - var registry = {}, seen = {}; - - define = function(name, deps, callback) { - registry[name] = { deps: deps, callback: callback }; - }; - - requirejs = require = requireModule = function(name) { - requirejs._eak_seen = registry; - - if (seen[name]) { return seen[name]; } - seen[name] = {}; - - if (!registry[name]) { - throw new Error("Could not find module " + name); - } - - var mod = registry[name], - deps = mod.deps, - callback = mod.callback, - reified = [], - exports; - - for (var i=0, l=deps.length; i 1; - }; - - RSVP.filter(promises, filterFn).then(function(result){ - // result is [ 2, 3 ] - }); - ``` - - If any of the `promises` given to `RSVP.filter` are rejected, the first promise - that is rejected will be given as an argument to the returned promises's - rejection handler. For example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.reject(new Error("2")); - var promise3 = RSVP.reject(new Error("3")); - var promises = [ promise1, promise2, promise3 ]; - - var filterFn = function(item){ - return item > 1; - }; - - RSVP.filter(promises, filterFn).then(function(array){ - // Code here never runs because there are rejected promises! - }, function(reason) { - // reason.message === "2" - }); - ``` - - `RSVP.filter` will also wait for any promises returned from `filterFn`. - For instance, you may want to fetch a list of users then return a subset - of those users based on some asynchronous operation: - - ```javascript - - var alice = { name: 'alice' }; - var bob = { name: 'bob' }; - var users = [ alice, bob ]; - - var promises = users.map(function(user){ - return RSVP.resolve(user); - }); - - var filterFn = function(user){ - // Here, Alice has permissions to create a blog post, but Bob does not. - return getPrivilegesForUser(user).then(function(privs){ - return privs.can_create_blog_post === true; - }); - }; - RSVP.filter(promises, filterFn).then(function(users){ - // true, because the server told us only Alice can create a blog post. - users.length === 1; - // false, because Alice is the only user present in `users` - users[0] === bob; - }); - ``` - - @method filter - @for RSVP - @param {Array} promises - @param {Function} filterFn - function to be called on each resolved value to - filter the final results. - @param {String} label optional string describing the promise. Useful for - tooling. - @return {Promise} - */ - function filter(promises, filterFn, label) { - if (!isArray(promises)) { - throw new TypeError('You must pass an array to filter.'); - } - - if (!isFunction(filterFn)){ - throw new TypeError("You must pass a function to filter's second argument."); - } - - return all(promises, label).then(function(values){ - return map(promises, filterFn, label).then(function(filterResults){ - var i, - valuesLen = values.length, - filtered = []; - - for (i = 0; i < valuesLen; i++){ - if(filterResults[i]) filtered.push(values[i]); - } - return filtered; - }); - }); - } - - __exports__["default"] = filter; - }); -define("rsvp/hash", - ["./promise","./utils","exports"], - function(__dependency1__, __dependency2__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - var isNonThenable = __dependency2__.isNonThenable; - var keysOf = __dependency2__.keysOf; - - /** - `RSVP.hash` is similar to `RSVP.all`, but takes an object instead of an array - for its `promises` argument. - - Returns a promise that is fulfilled when all the given promises have been - fulfilled, or rejected if any of them become rejected. The returned promise - is fulfilled with a hash that has the same key names as the `promises` object - argument. If any of the values in the object are not promises, they will - simply be copied over to the fulfilled object. - - Example: - - ```javascript - var promises = { - myPromise: RSVP.resolve(1), - yourPromise: RSVP.resolve(2), - theirPromise: RSVP.resolve(3), - notAPromise: 4 - }; - - RSVP.hash(promises).then(function(hash){ - // hash here is an object that looks like: - // { - // myPromise: 1, - // yourPromise: 2, - // theirPromise: 3, - // notAPromise: 4 - // } - }); - ```` - - If any of the `promises` given to `RSVP.hash` are rejected, the first promise - that is rejected will be given as as the first argument, or as the reason to - the rejection handler. For example: - - ```javascript - var promises = { - myPromise: RSVP.resolve(1), - rejectedPromise: RSVP.reject(new Error("rejectedPromise")), - anotherRejectedPromise: RSVP.reject(new Error("anotherRejectedPromise")), - }; - - RSVP.hash(promises).then(function(hash){ - // Code here never runs because there are rejected promises! - }, function(reason) { - // reason.message === "rejectedPromise" - }); - ``` - - An important note: `RSVP.hash` is intended for plain JavaScript objects that - are just a set of keys and values. `RSVP.hash` will NOT preserve prototype - chains. - - Example: - - ```javascript - function MyConstructor(){ - this.example = RSVP.resolve("Example"); - } - - MyConstructor.prototype = { - protoProperty: RSVP.resolve("Proto Property") - }; - - var myObject = new MyConstructor(); - - RSVP.hash(myObject).then(function(hash){ - // protoProperty will not be present, instead you will just have an - // object that looks like: - // { - // example: "Example" - // } - // - // hash.hasOwnProperty('protoProperty'); // false - // 'undefined' === typeof hash.protoProperty - }); - ``` - - @method hash - @for RSVP - @param {Object} promises - @param {String} label - optional string that describes the promise. - Useful for tooling. - @return {Promise} promise that is fulfilled when all properties of `promises` - have been fulfilled, or rejected if any of them become rejected. - */ - __exports__["default"] = function hash(object, label) { - return new Promise(function(resolve, reject){ - var results = {}; - var keys = keysOf(object); - var remaining = keys.length; - var entry, property; - - if (remaining === 0) { - resolve(results); - return; - } - - function fulfilledTo(property) { - return function(value) { - results[property] = value; - if (--remaining === 0) { - resolve(results); - } - }; - } - - function onRejection(reason) { - remaining = 0; - reject(reason); - } - - for (var i = 0; i < keys.length; i++) { - property = keys[i]; - entry = object[property]; - - if (isNonThenable(entry)) { - results[property] = entry; - if (--remaining === 0) { - resolve(results); - } - } else { - Promise.cast(entry).then(fulfilledTo(property), onRejection); - } - } - }); - }; - }); -define("rsvp/instrument", - ["./config","./utils","exports"], - function(__dependency1__, __dependency2__, __exports__) { - "use strict"; - var config = __dependency1__.config; - var now = __dependency2__.now; - - __exports__["default"] = function instrument(eventName, promise, child) { - // instrumentation should not disrupt normal usage. - try { - config.trigger(eventName, { - guid: promise._guidKey + promise._id, - eventName: eventName, - detail: promise._detail, - childGuid: child && promise._guidKey + child._id, - label: promise._label, - timeStamp: now(), - stack: new Error(promise._label).stack - }); - } catch(error) { - setTimeout(function(){ - throw error; - }, 0); - } - }; - }); -define("rsvp/map", - ["./promise","./all","./utils","exports"], - function(__dependency1__, __dependency2__, __dependency3__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - var all = __dependency2__["default"]; - var isArray = __dependency3__.isArray; - var isFunction = __dependency3__.isFunction; - - /** - - `RSVP.map` is similar to JavaScript's native `map` method, except that it - waits for all promises to become fulfilled before running the `mapFn` on - each item in given to `promises`. `RSVP.map` returns a promise that will - become fulfilled with the result of running `mapFn` on the values the promises - become fulfilled with. - - For example: - - ```javascript - - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.resolve(2); - var promise3 = RSVP.resolve(3); - var promises = [ promise1, promise2, promise3 ]; - - var mapFn = function(item){ - return item + 1; - }; - - RSVP.map(promises, mapFn).then(function(result){ - // result is [ 2, 3, 4 ] - }); - ``` - - If any of the `promises` given to `RSVP.map` are rejected, the first promise - that is rejected will be given as an argument to the returned promises's - rejection handler. For example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.reject(new Error("2")); - var promise3 = RSVP.reject(new Error("3")); - var promises = [ promise1, promise2, promise3 ]; - - var mapFn = function(item){ - return item + 1; - }; - - RSVP.map(promises, mapFn).then(function(array){ - // Code here never runs because there are rejected promises! - }, function(reason) { - // reason.message === "2" - }); - ``` - - `RSVP.map` will also wait if a promise is returned from `mapFn`. For example, - say you want to get all comments from a set of blog posts, but you need - the blog posts first becuase they contain a url to those comments. - - ```javscript - - var mapFn = function(blogPost){ - // getComments does some ajax and returns an RSVP.Promise that is fulfilled - // with some comments data - return getComments(blogPost.comments_url); - }; - - // getBlogPosts does some ajax and returns an RSVP.Promise that is fulfilled - // with some blog post data - RSVP.map(getBlogPosts(), mapFn).then(function(comments){ - // comments is the result of asking the server for the comments - // of all blog posts returned from getBlogPosts() - }); - ``` - - @method map - @for RSVP - @param {Array} promises - @param {Function} mapFn function to be called on each fulfilled promise. - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} promise that is fulfilled with the result of calling - `mapFn` on each fulfilled promise or value when they become fulfilled. - The promise will be rejected if any of the given `promises` become rejected. - */ - __exports__["default"] = function map(promises, mapFn, label) { - - if (!isArray(promises)) { - throw new TypeError('You must pass an array to map.'); - } - - if (!isFunction(mapFn)){ - throw new TypeError("You must pass a function to map's second argument."); - } - - return all(promises, label).then(function(results){ - var resultLen = results.length, - mappedResults = [], - i; - - for (i = 0; i < resultLen; i++){ - mappedResults.push(mapFn(results[i])); - } - - return all(mappedResults, label); - }); - }; - }); -define("rsvp/node", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - var slice = Array.prototype.slice; - - function makeNodeCallbackFor(resolve, reject) { - return function (error, value) { - if (error) { - reject(error); - } else if (arguments.length > 2) { - resolve(slice.call(arguments, 1)); - } else { - resolve(value); - } - }; - } - - /** - `RSVP.denodeify` takes a "node-style" function and returns a function that - will return an `RSVP.Promise`. You can use `denodeify` in Node.js or the - browser when you'd prefer to use promises over using callbacks. For example, - `denodeify` transforms the following: - - ```javascript - var fs = require('fs'); - - fs.readFile('myfile.txt', function(err, data){ - if (err) return handleError(err); - handleData(data); - }); - ``` - - into: - - ```javascript - var fs = require('fs'); - - var readFile = RSVP.denodeify(fs.readFile); - - readFile('myfile.txt').then(handleData, handleError); - ``` - - Using `denodeify` makes it easier to compose asynchronous operations instead - of using callbacks. For example, instead of: - - ```javascript - var fs = require('fs'); - var log = require('some-async-logger'); - - fs.readFile('myfile.txt', function(err, data){ - if (err) return handleError(err); - fs.writeFile('myfile2.txt', data, function(err){ - if (err) throw err; - log('success', function(err) { - if (err) throw err; - }); - }); - }); - ``` - - You can chain the operations together using `then` from the returned promise: - - ```javascript - var fs = require('fs'); - var denodeify = RSVP.denodeify; - var readFile = denodeify(fs.readFile); - var writeFile = denodeify(fs.writeFile); - var log = denodeify(require('some-async-logger')); - - readFile('myfile.txt').then(function(data){ - return writeFile('myfile2.txt', data); - }).then(function(){ - return log('SUCCESS'); - }).then(function(){ - // success handler - }, function(reason){ - // rejection handler - }); - ``` - - @method denodeify - @for RSVP - @param {Function} nodeFunc a "node-style" function that takes a callback as - its last argument. The callback expects an error to be passed as its first - argument (if an error occurred, otherwise null), and the value from the - operation as its second argument ("function(err, value){ }"). - @param {Any} binding optional argument for binding the "this" value when - calling the `nodeFunc` function. - @return {Function} a function that wraps `nodeFunc` to return an - `RSVP.Promise` - */ - __exports__["default"] = function denodeify(nodeFunc, binding) { - return function() { - var nodeArgs = slice.call(arguments), resolve, reject; - var thisArg = this || binding; - - return new Promise(function(resolve, reject) { - Promise.all(nodeArgs).then(function(nodeArgs) { - try { - nodeArgs.push(makeNodeCallbackFor(resolve, reject)); - nodeFunc.apply(thisArg, nodeArgs); - } catch(e) { - reject(e); - } - }); - }); - }; - }; - }); -define("rsvp/promise", - ["./config","./events","./instrument","./utils","./promise/cast","./promise/all","./promise/race","./promise/resolve","./promise/reject","exports"], - function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) { - "use strict"; - var config = __dependency1__.config; - var EventTarget = __dependency2__["default"]; - var instrument = __dependency3__["default"]; - var objectOrFunction = __dependency4__.objectOrFunction; - var isFunction = __dependency4__.isFunction; - var now = __dependency4__.now; - var cast = __dependency5__["default"]; - var all = __dependency6__["default"]; - var race = __dependency7__["default"]; - var Resolve = __dependency8__["default"]; - var Reject = __dependency9__["default"]; - - var guidKey = 'rsvp_' + now() + '-'; - var counter = 0; - - function noop() {} - - __exports__["default"] = Promise; - - - /** - - Promise objects represent the eventual result of an asynchronous operation. The - primary way of interacting with a promise is through its `then` method, which - registers callbacks to receive either a promise’s eventual value or the reason - why the promise cannot be fulfilled. - - Terminology - ----------- - - - `promise` is an object or function with a `then` method whose behavior conforms to this specification. - - `thenable` is an object or function that defines a `then` method. - - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). - - `exception` is a value that is thrown using the throw statement. - - `reason` is a value that indicates why a promise was rejected. - - `settled` the final resting state of a promise, fulfilled or rejected. - - A promise can be in one of three states: pending, fulfilled, or rejected. - - - Basic Usage: - ------------ - - ```js - var promise = new Promise(function(resolve, reject) { - // on success - resolve(value); - - // on failure - reject(reason); - }); - - promise.then(function(value) { - // on fulfillment - }, function(reason) { - // on rejection - }); - ``` - - Advanced Usage: - --------------- - - Promises shine when abstracting away asynchronous interactions such as - `XMLHttpRequest`s. - - ```js - function getJSON(url) { - return new Promise(function(resolve, reject){ - var xhr = new XMLHttpRequest(); - - xhr.open('GET', url); - xhr.onreadystatechange = handler; - xhr.responseType = 'json'; - xhr.setRequestHeader('Accept', 'application/json'); - xhr.send(); - - function handler() { - if (this.readyState === this.DONE) { - if (this.status === 200) { - resolve(this.response); - } else { - reject(new Error("getJSON: `" + url + "` failed with status: [" + this.status + "]"); - } - } - }; - }); - } - - getJSON('/posts.json').then(function(json) { - // on fulfillment - }, function(reason) { - // on rejection - }); - ``` - - Unlike callbacks, promises are great composable primitives. - - ```js - Promise.all([ - getJSON('/posts'), - getJSON('/comments') - ]).then(function(values){ - values[0] // => postsJSON - values[1] // => commentsJSON - - return values; - }); - ``` - - @class Promise - @param {function} - @param {String} label optional string for labeling the promise. - Useful for tooling. - @constructor - */ - function Promise(resolver, label) { - if (!isFunction(resolver)) { - throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); - } - - if (!(this instanceof Promise)) { - throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); - } - - this._id = counter++; - this._label = label; - this._subscribers = []; - - if (config.instrument) { - instrument('created', this); - } - - if (noop !== resolver) { - invokeResolver(resolver, this); - } - } - - function invokeResolver(resolver, promise) { - function resolvePromise(value) { - resolve(promise, value); - } - - function rejectPromise(reason) { - reject(promise, reason); - } - - try { - resolver(resolvePromise, rejectPromise); - } catch(e) { - rejectPromise(e); - } - } - - Promise.cast = cast; - Promise.all = all; - Promise.race = race; - Promise.resolve = Resolve; - Promise.reject = Reject; - - var PENDING = void 0; - var SEALED = 0; - var FULFILLED = 1; - var REJECTED = 2; - - function subscribe(parent, child, onFulfillment, onRejection) { - var subscribers = parent._subscribers; - var length = subscribers.length; - - subscribers[length] = child; - subscribers[length + FULFILLED] = onFulfillment; - subscribers[length + REJECTED] = onRejection; - } - - function publish(promise, settled) { - var child, callback, subscribers = promise._subscribers, detail = promise._detail; - - if (config.instrument) { - instrument(settled === FULFILLED ? 'fulfilled' : 'rejected', promise); - } - - for (var i = 0; i < subscribers.length; i += 3) { - child = subscribers[i]; - callback = subscribers[i + settled]; - - invokeCallback(settled, child, callback, detail); - } - - promise._subscribers = null; - } - - Promise.prototype = { - /** - @property constructor - */ - constructor: Promise, - - _id: undefined, - _guidKey: guidKey, - _label: undefined, - - _state: undefined, - _detail: undefined, - _subscribers: undefined, - - _onerror: function (reason) { - config.trigger('error', reason); - }, - - /** - - A promise represents the eventual result of an asynchronous operation. The - primary way of interacting with a promise is through its `then` method, which - registers callbacks to receive either a promise's eventual value or the reason - why the promise cannot be fulfilled. - - ```js - findUser().then(function(user){ - // user is available - }, function(reason){ - // user is unavailable, and you are given the reason why - }); - ``` - - Chaining - -------- - - The return value of `then` is itself a promise. This second, "downstream" - promise is resolved with the return value of the first promise's fulfillment - or rejection handler, or rejected if the handler throws an exception. - - ```js - findUser().then(function (user) { - return user.name; - }, function (reason) { - return "default name"; - }).then(function (userName) { - // If `findUser` fulfilled, `userName` will be the user's name, otherwise it - // will be `"default name"` - }); - - findUser().then(function (user) { - throw "Found user, but still unhappy"; - }, function (reason) { - throw "`findUser` rejected and we're unhappy"; - }).then(function (value) { - // never reached - }, function (reason) { - // if `findUser` fulfilled, `reason` will be "Found user, but still unhappy". - // If `findUser` rejected, `reason` will be "`findUser` rejected and we're unhappy". - }); - ``` - If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. - - ```js - findUser().then(function (user) { - throw new PedagogicalException("Upstream error"); - }).then(function (value) { - // never reached - }).then(function (value) { - // never reached - }, function (reason) { - // The `PedgagocialException` is propagated all the way down to here - }); - ``` - - Assimilation - ------------ - - Sometimes the value you want to propagate to a downstream promise can only be - retrieved asynchronously. This can be achieved by returning a promise in the - fulfillment or rejection handler. The downstream promise will then be pending - until the returned promise is settled. This is called *assimilation*. - - ```js - findUser().then(function (user) { - return findCommentsByAuthor(user); - }).then(function (comments) { - // The user's comments are now available - }); - ``` - - If the assimliated promise rejects, then the downstream promise will also reject. - - ```js - findUser().then(function (user) { - return findCommentsByAuthor(user); - }).then(function (comments) { - // If `findCommentsByAuthor` fulfills, we'll have the value here - }, function (reason) { - // If `findCommentsByAuthor` rejects, we'll have the reason here - }); - ``` - - Simple Example - -------------- - - Synchronous Example - - ```javascript - var result; - - try { - result = findResult(); - // success - } catch(reason) { - // failure - } - ``` - - Errback Example - - ```js - findResult(function(result, err){ - if (err) { - // failure - } else { - // success - } - }); - ``` - - Promise Example; - - ```javacsript - findResult().then(function(result){ - - }, function(reason){ - - }); - ``` - - Advanced Example - -------------- - - Synchronous Example - - ```javascript - var author, books; - - try { - author = findAuthor(); - books = findBooksByAuthor(author); - // success - } catch(reason) { - // failure - } - ``` - - Errback Example - - ```js - - function foundBooks(books) { - - } - - function failure(reason) { - - } - - findAuthor(function(author, err){ - if (err) { - failure(err); - // failure - } else { - try { - findBoooksByAuthor(author, function(books, err) { - if (err) { - failure(err); - } else { - try { - foundBooks(books); - } catch(reason) { - failure(reason); - } - } - }); - } catch(error) { - failure(err); - } - // success - } - }); - ``` - - Promise Example; - - ```javacsript - findAuthor(). - then(findBooksByAuthor). - then(function(books){ - // found books - }).catch(function(reason){ - // something went wrong; - }); - ``` - - @method then - @param {Function} onFulfillment - @param {Function} onRejection - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} - */ - then: function(onFulfillment, onRejection, label) { - var promise = this; - this._onerror = null; - - var thenPromise = new this.constructor(noop, label); - - if (this._state) { - var callbacks = arguments; - config.async(function invokePromiseCallback() { - invokeCallback(promise._state, thenPromise, callbacks[promise._state - 1], promise._detail); - }); - } else { - subscribe(this, thenPromise, onFulfillment, onRejection); - } - - if (config.instrument) { - instrument('chained', promise, thenPromise); - } - - return thenPromise; - }, - - /** - `catch` is simply sugar for `then(null, onRejection)` which makes it the same - as the catch block, of a try/catch statement. - - ```js - function findAuthor(){ - throw new Error("couldn't find that author"); - } - - // synchronous - try { - findAuthor(); - } catch(reason) { - - } - - // async with promises - findAuthor().catch(function(reason){ - // something went wrong; - }); - ``` - - @method catch - @param {Function} onRejection - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} - */ - 'catch': function(onRejection, label) { - return this.then(null, onRejection, label); - }, - - /** - `finally` will be invoked regardless of the promise's fate just as native - try/catch/finally behaves - - ```js - findAuthor() { - if (Math.random() > 0.5) { - throw new Error(); - } - return new Author(); - } - - try { - return findAuthor(); // succeed or fail - } catch(error) { - return findOtherAuther(); - } finally { - // always runs - // doesn't effect the return value - } - - findAuthor().finally(function(){ - // author was either found, or not - }); - ``` - - @method finally - @param {Function} callback - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} - */ - 'finally': function(callback, label) { - var constructor = this.constructor; - - return this.then(function(value) { - return constructor.cast(callback()).then(function(){ - return value; - }); - }, function(reason) { - return constructor.cast(callback()).then(function(){ - throw reason; - }); - }, label); - } - }; - - function invokeCallback(settled, promise, callback, detail) { - var hasCallback = isFunction(callback), - value, error, succeeded, failed; - - if (hasCallback) { - try { - value = callback(detail); - succeeded = true; - } catch(e) { - failed = true; - error = e; - } - } else { - value = detail; - succeeded = true; - } - - if (handleThenable(promise, value)) { - return; - } else if (hasCallback && succeeded) { - resolve(promise, value); - } else if (failed) { - reject(promise, error); - } else if (settled === FULFILLED) { - resolve(promise, value); - } else if (settled === REJECTED) { - reject(promise, value); - } - } - - function handleThenable(promise, value) { - var then = null, - resolved; - - try { - if (promise === value) { - throw new TypeError("A promises callback cannot return that same promise."); - } - - if (objectOrFunction(value)) { - then = value.then; - - if (isFunction(then)) { - then.call(value, function(val) { - if (resolved) { return true; } - resolved = true; - - if (value !== val) { - resolve(promise, val); - } else { - fulfill(promise, val); - } - }, function(val) { - if (resolved) { return true; } - resolved = true; - - reject(promise, val); - }, 'derived from: ' + (promise._label || ' unknown promise')); - - return true; - } - } - } catch (error) { - if (resolved) { return true; } - reject(promise, error); - return true; - } - - return false; - } - - function resolve(promise, value) { - if (promise === value) { - fulfill(promise, value); - } else if (!handleThenable(promise, value)) { - fulfill(promise, value); - } - } - - function fulfill(promise, value) { - if (promise._state !== PENDING) { return; } - promise._state = SEALED; - promise._detail = value; - - config.async(publishFulfillment, promise); - } - - function reject(promise, reason) { - if (promise._state !== PENDING) { return; } - promise._state = SEALED; - promise._detail = reason; - - config.async(publishRejection, promise); - } - - function publishFulfillment(promise) { - publish(promise, promise._state = FULFILLED); - } - - function publishRejection(promise) { - if (promise._onerror) { - promise._onerror(promise._detail); - } - - publish(promise, promise._state = REJECTED); - } - }); -define("rsvp/promise/all", - ["../utils","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var isArray = __dependency1__.isArray; - var isNonThenable = __dependency1__.isNonThenable; - - /** - - `RSVP.Promise.all` returns a new promise which is fulfilled with an array of - fulfillment values for the passed promises, or rejects with the reason of the - first passed promise that rejects. It casts all elements of the passed iterable - to promises as it runs this algorithm. - - Example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.resolve(2); - var promise3 = RSVP.resolve(3); - var promises = [ promise1, promise2, promise3 ]; - - RSVP.Promise.all(promises).then(function(array){ - // The array here would be [ 1, 2, 3 ]; - }); - ``` - - If any of the `promises` given to `RSVP.all` are rejected, the first promise - that is rejected will be given as an argument to the returned promises's - rejection handler. For example: - - Example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.reject(new Error("2")); - var promise3 = RSVP.reject(new Error("3")); - var promises = [ promise1, promise2, promise3 ]; - - RSVP.Promise.all(promises).then(function(array){ - // Code here never runs because there are rejected promises! - }, function(error) { - // error.message === "2" - }); - ``` - - @method all - @for RSVP.Promise - @param {Array} promises - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} promise that is fulfilled when all `promises` have been - fulfilled, or rejected if any of them become rejected. - */ - __exports__["default"] = function all(entries, label) { - - /*jshint validthis:true */ - var Constructor = this; - - return new Constructor(function(resolve, reject) { - if (!isArray(entries)) { - throw new TypeError('You must pass an array to all.'); - } - - var remaining = entries.length; - var results = new Array(remaining); - var entry, pending = true; - - if (remaining === 0) { - resolve(results); - return; - } - - function fulfillmentAt(index) { - return function(value) { - results[index] = value; - if (--remaining === 0) { - resolve(results); - } - }; - } - - function onRejection(reason) { - remaining = 0; - reject(reason); - } - - for (var index = 0; index < entries.length; index++) { - entry = entries[index]; - if (isNonThenable(entry)) { - results[index] = entry; - if (--remaining === 0) { - resolve(results); - } - } else { - Constructor.cast(entry).then(fulfillmentAt(index), onRejection); - } - } - }, label); - }; - }); -define("rsvp/promise/cast", - ["exports"], - function(__exports__) { - "use strict"; - /** - - `RSVP.Promise.cast` cast coerces its argument to a promise, or returns the - argument if it is already a promise which shares a constructor with the caster; - - Example: - - ```javascript - var promise = RSVP.Promise.resolve(1); - var casted = RSVP.Promise.cast(promise); - - console.log(promise === casted); // true - ``` - - In the case of a promise whose constructor does not match, it is assimilated. - The resulting promise will fulfill or reject based on the outcome of the - promise being casted. - - In the case of a non-promise, a promise which will fulfill with that value is - returned. - - Example: - - ```javascript - var value = 1; // could be a number, boolean, string, undefined... - var casted = RSVP.Promise.cast(value); - - console.log(value === casted); // false - console.log(casted instanceof RSVP.Promise) // true - - casted.then(function(val) { - val === value // => true - }); - ``` - - `RSVP.Promise.cast` is similar to `RSVP.Promise.resolve`, but `RSVP.Promise.cast` differs in the - following ways: - - * `RSVP.Promise.cast` serves as a memory-efficient way of getting a promise, when you - have something that could either be a promise or a value. RSVP.resolve - will have the same effect but will create a new promise wrapper if the - argument is a promise. - * `RSVP.Promise.cast` is a way of casting incoming thenables or promise subclasses to - promises of the exact class specified, so that the resulting object's `then` is - ensured to have the behavior of the constructor you are calling cast on (i.e., RSVP.Promise). - - @method cast - @for RSVP.Promise - @param {Object} object to be casted - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} promise - */ - - __exports__["default"] = function cast(object, label) { - /*jshint validthis:true */ - var Constructor = this; - - if (object && typeof object === 'object' && object.constructor === Constructor) { - return object; - } - - return new Constructor(function(resolve) { - resolve(object); - }, label); - }; - }); -define("rsvp/promise/race", - ["../utils","exports"], - function(__dependency1__, __exports__) { - "use strict"; - /* global toString */ - - var isArray = __dependency1__.isArray; - var isFunction = __dependency1__.isFunction; - var isNonThenable = __dependency1__.isNonThenable; - - /** - `RSVP.Promise.race` returns a new promise which is settled in the same way as the - first passed promise to settle. - - Example: - - ```javascript - var promise1 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - resolve("promise 1"); - }, 200); - }); - - var promise2 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - resolve("promise 2"); - }, 100); - }); - - RSVP.Promise.race([promise1, promise2]).then(function(result){ - // result === "promise 2" because it was resolved before promise1 - // was resolved. - }); - ``` - - `RSVP.Promise.race` is deterministic in that only the state of the first - completed promise matters. For example, even if other promises given to the - `promises` array argument are resolved, but the first completed promise has - become rejected before the other promises became fulfilled, the returned - promise will become rejected: - - ```javascript - var promise1 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - resolve("promise 1"); - }, 200); - }); - - var promise2 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - reject(new Error("promise 2")); - }, 100); - }); - - RSVP.Promise.race([promise1, promise2]).then(function(result){ - // Code here never runs because there are rejected promises! - }, function(reason){ - // reason.message === "promise2" because promise 2 became rejected before - // promise 1 became fulfilled - }); - ``` - - @method race - @for RSVP.Promise - @param {Array} promises array of promises to observe - @param {String} label optional string for describing the promise returned. - Useful for tooling. - @return {Promise} a promise which settles in the same way as the first passed - promise to settle. - */ - __exports__["default"] = function race(entries, label) { - /*jshint validthis:true */ - var Constructor = this, entry; - - return new Constructor(function(resolve, reject) { - if (!isArray(entries)) { - throw new TypeError('You must pass an array to race.'); - } - - var pending = true; - - function onFulfillment(value) { if (pending) { pending = false; resolve(value); } } - function onRejection(reason) { if (pending) { pending = false; reject(reason); } } - - for (var i = 0; i < entries.length; i++) { - entry = entries[i]; - if (isNonThenable(entry)) { - pending = false; - resolve(entry); - return; - } else { - Constructor.cast(entry).then(onFulfillment, onRejection); - } - } - }, label); - }; - }); -define("rsvp/promise/reject", - ["exports"], - function(__exports__) { - "use strict"; - /** - `RSVP.Promise.reject` returns a promise rejected with the passed `reason`. - It is essentially shorthand for the following: - - ```javascript - var promise = new RSVP.Promise(function(resolve, reject){ - reject(new Error('WHOOPS')); - }); - - promise.then(function(value){ - // Code here doesn't run because the promise is rejected! - }, function(reason){ - // reason.message === 'WHOOPS' - }); - ``` - - Instead of writing the above, your code now simply becomes the following: - - ```javascript - var promise = RSVP.Promise.reject(new Error('WHOOPS')); - - promise.then(function(value){ - // Code here doesn't run because the promise is rejected! - }, function(reason){ - // reason.message === 'WHOOPS' - }); - ``` - - @method reject - @for RSVP.Promise - @param {Any} reason value that the returned promise will be rejected with. - @param {String} label optional string for identifying the returned promise. - Useful for tooling. - @return {Promise} a promise rejected with the given `reason`. - */ - __exports__["default"] = function reject(reason, label) { - /*jshint validthis:true */ - var Constructor = this; - - return new Constructor(function (resolve, reject) { - reject(reason); - }, label); - }; - }); -define("rsvp/promise/resolve", - ["exports"], - function(__exports__) { - "use strict"; - /** - `RSVP.Promise.resolve` returns a promise that will become fulfilled with the passed - `value`. It is essentially shorthand for the following: - - ```javascript - var promise = new RSVP.Promise(function(resolve, reject){ - resolve(1); - }); - - promise.then(function(value){ - // value === 1 - }); - ``` - - Instead of writing the above, your code now simply becomes the following: - - ```javascript - var promise = RSVP.Promise.resolve(1); - - promise.then(function(value){ - // value === 1 - }); - ``` - - @method resolve - @for RSVP.Promise - @param {Any} value value that the returned promise will be resolved with - @param {String} label optional string for identifying the returned promise. - Useful for tooling. - @return {Promise} a promise that will become fulfilled with the given - `value` - */ - __exports__["default"] = function resolve(value, label) { - /*jshint validthis:true */ - var Constructor = this; - - return new Constructor(function(resolve, reject) { - resolve(value); - }, label); - }; - }); -define("rsvp/race", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - __exports__["default"] = function race(array, label) { - return Promise.race(array, label); - }; - }); -define("rsvp/reject", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - __exports__["default"] = function reject(reason, label) { - return Promise.reject(reason, label); - }; - }); -define("rsvp/resolve", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - __exports__["default"] = function resolve(value, label) { - return Promise.resolve(value, label); - }; - }); -define("rsvp/rethrow", - ["exports"], - function(__exports__) { - "use strict"; - /** - `RSVP.rethrow` will rethrow an error on the next turn of the JavaScript event - loop in order to aid debugging. - - Promises A+ specifies that any exceptions that occur with a promise must be - caught by the promises implementation and bubbled to the last handler. For - this reason, it is recommended that you always specify a second rejection - handler function to `then`. However, `RSVP.rethrow` will throw the exception - outside of the promise, so it bubbles up to your console if in the browser, - or domain/cause uncaught exception in Node. `rethrow` will throw the error - again so the error can be handled by the promise. - - ```javascript - function throws(){ - throw new Error('Whoops!'); - } - - var promise = new RSVP.Promise(function(resolve, reject){ - throws(); - }); - - promise.catch(RSVP.rethrow).then(function(){ - // Code here doesn't run because the promise became rejected due to an - // error! - }, function (err){ - // handle the error here - }); - ``` - - The 'Whoops' error will be thrown on the next turn of the event loop - and you can watch for it in your console. You can also handle it using a - rejection handler given to `.then` or `.catch` on the returned promise. - - @method rethrow - @for RSVP - @param {Error} reason reason the promise became rejected. - @throws Error - */ - __exports__["default"] = function rethrow(reason) { - setTimeout(function() { - throw reason; - }); - throw reason; - }; - }); -define("rsvp/utils", - ["exports"], - function(__exports__) { - "use strict"; - function objectOrFunction(x) { - return typeof x === "function" || (typeof x === "object" && x !== null); - } - - __exports__.objectOrFunction = objectOrFunction;function isFunction(x) { - return typeof x === "function"; - } - - __exports__.isFunction = isFunction;function isNonThenable(x) { - return !objectOrFunction(x); - } - - __exports__.isNonThenable = isNonThenable;function isArray(x) { - return Object.prototype.toString.call(x) === "[object Array]"; - } - - __exports__.isArray = isArray;// Date.now is not available in browsers < IE9 - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now#Compatibility - var now = Date.now || function() { return new Date().getTime(); }; - __exports__.now = now; - var keysOf = Object.keys || function(object) { - var result = []; - - for (var prop in object) { - result.push(prop); - } - - return result; - }; - __exports__.keysOf = keysOf; - }); -define("rsvp", - ["./rsvp/promise","./rsvp/events","./rsvp/node","./rsvp/all","./rsvp/all_settled","./rsvp/race","./rsvp/hash","./rsvp/rethrow","./rsvp/defer","./rsvp/config","./rsvp/map","./rsvp/resolve","./rsvp/reject","./rsvp/asap","./rsvp/filter","exports"], - function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - var EventTarget = __dependency2__["default"]; - var denodeify = __dependency3__["default"]; - var all = __dependency4__["default"]; - var allSettled = __dependency5__["default"]; - var race = __dependency6__["default"]; - var hash = __dependency7__["default"]; - var rethrow = __dependency8__["default"]; - var defer = __dependency9__["default"]; - var config = __dependency10__.config; - var configure = __dependency10__.configure; - var map = __dependency11__["default"]; - var resolve = __dependency12__["default"]; - var reject = __dependency13__["default"]; - var asap = __dependency14__["default"]; - var filter = __dependency15__["default"]; - - config.async = asap; // default async is asap; - - function async(callback, arg) { - config.async(callback, arg); - } - - function on() { - config.on.apply(config, arguments); - } - - function off() { - config.off.apply(config, arguments); - } - - // Set up instrumentation through `window.__PROMISE_INTRUMENTATION__` - if (typeof window !== 'undefined' && typeof window.__PROMISE_INSTRUMENTATION__ === 'object') { - var callbacks = window.__PROMISE_INSTRUMENTATION__; - configure('instrument', true); - for (var eventName in callbacks) { - if (callbacks.hasOwnProperty(eventName)) { - on(eventName, callbacks[eventName]); - } - } - } - - __exports__.Promise = Promise; - __exports__.EventTarget = EventTarget; - __exports__.all = all; - __exports__.allSettled = allSettled; - __exports__.race = race; - __exports__.hash = hash; - __exports__.rethrow = rethrow; - __exports__.defer = defer; - __exports__.denodeify = denodeify; - __exports__.configure = configure; - __exports__.on = on; - __exports__.off = off; - __exports__.resolve = resolve; - __exports__.reject = reject; - __exports__.async = async; - __exports__.map = map; - __exports__.filter = filter; - }); -global.RSVP = requireModule('rsvp'); -}(window)); -'use strict'; - -var EPUBJS = EPUBJS || {}; -EPUBJS.VERSION = "0.2.1"; - -EPUBJS.plugins = EPUBJS.plugins || {}; - -EPUBJS.filePath = EPUBJS.filePath || "/epubjs/"; - -EPUBJS.Render = {}; - -(function(root) { - - var previousEpub = root.ePub || {}; - - var ePub = root.ePub = function() { - var bookPath, options; - - //-- var book = ePub("path/to/book.epub", { restore: true }) - if(typeof(arguments[0]) != 'undefined' && - typeof arguments[0] === 'string') { - - bookPath = arguments[0]; - - if( arguments[1] && typeof arguments[1] === 'object' ) { - options = arguments[1]; - options.bookPath = bookPath; - } else { - options = { 'bookPath' : bookPath }; - } - - } - - /* - * var book = ePub({ bookPath: "path/to/book.epub", restore: true }); - * - * - OR - - * - * var book = ePub({ restore: true }); - * book.open("path/to/book.epub"); - */ - - if( arguments[0] && typeof arguments[0] === 'object' ) { - options = arguments[0]; - } - - - return new EPUBJS.Book(options); - }; - - _.extend(ePub, { - noConflict : function() { - root.ePub = previousEpub; - return this; - } - }); - - //exports to multiple environments - if (typeof define === 'function' && define.amd) - //AMD - define(function(){ return ePub; }); - else if (typeof module != "undefined" && module.exports) - //Node - module.exports = ePub; - -})(window); - -EPUBJS.Book = function(options){ - - var book = this; - - this.settings = _.defaults(options || {}, { - bookPath : null, - bookKey : null, - packageUrl : null, - storage: false, //-- true (auto) or false (none) | override: 'ram', 'websqldatabase', 'indexeddb', 'filesystem' - fromStorage : false, - saved : false, - online : true, - contained : false, - width : null, - height: null, - layoutOveride : null, // Default: { spread: 'reflowable', layout: 'auto', orientation: 'auto'} - orientation : null, - minSpreadWidth: 800, //-- overridden by spread: none (never) / both (always) - gap: "auto", //-- "auto" or int - version: 1, - restore: false, - reload : false, - goto : false, - styles : {}, - headTags : {}, - withCredentials: false, - render_method: "Iframe" - }); - - this.settings.EPUBJSVERSION = EPUBJS.VERSION; - - this.spinePos = 0; - this.stored = false; - - //-- All Book events for listening - /* - book:ready - book:stored - book:online - book:offline - book:pageChanged - book:loadFailed - book:loadChapterFailed - */ - - //-- Adds Hook methods to the Book prototype - // Hooks will all return before triggering the callback. - // EPUBJS.Hooks.mixin(this); - //-- Get pre-registered hooks for events - // this.getHooks("beforeChapterDisplay"); - - this.online = this.settings.online || navigator.onLine; - this.networkListeners(); - - this.store = false; //-- False if not using storage; - - //-- Determine storage method - //-- Override options: none | ram | websqldatabase | indexeddb | filesystem - - if(this.settings.storage !== false){ - this.storage = new fileStorage.storage(this.settings.storage); - } - - this.ready = { - manifest: new RSVP.defer(), - spine: new RSVP.defer(), - metadata: new RSVP.defer(), - cover: new RSVP.defer(), - toc: new RSVP.defer(), - pageList: new RSVP.defer() - }; - - this.readyPromises = [ - this.ready.manifest.promise, - this.ready.spine.promise, - this.ready.metadata.promise, - this.ready.cover.promise, - this.ready.toc.promise - ]; - - this.pageList = []; - this.pagination = new EPUBJS.Pagination(); - this.pageListReady = this.ready.pageList.promise; - - this.ready.all = RSVP.all(this.readyPromises); - - this.ready.all.then(this._ready.bind(this)); - - // Queue for methods used before rendering - this.isRendered = false; - this._q = EPUBJS.core.queue(this); - // Queue for rendering - this._rendering = false; - this._displayQ = EPUBJS.core.queue(this); - // Queue for going to another location - this._moving = false; - this._gotoQ = EPUBJS.core.queue(this); - - /** - * Creates a new renderer. - * The renderer will handle displaying the content using the method provided in the settings - */ - this.renderer = new EPUBJS.Renderer(this.settings.render_method); - //-- Set the width at which to switch from spreads to single pages - this.renderer.setMinSpreadWidth(this.settings.minSpreadWidth); - this.renderer.setGap(this.settings.gap); - //-- Pass through the renderer events - this.listenToRenderer(this.renderer); - - this.defer_opened = new RSVP.defer(); - this.opened = this.defer_opened.promise; - // BookUrl is optional, but if present start loading process - if(typeof this.settings.bookPath === 'string') { - this.open(this.settings.bookPath, this.settings.reload); - } - - window.addEventListener("beforeunload", this.unload.bind(this), false); - - //-- Listen for these promises: - //-- book.opened.then() - //-- book.rendered.then() -}; - -//-- Check bookUrl and start parsing book Assets or load them from storage -EPUBJS.Book.prototype.open = function(bookPath, forceReload){ - var book = this, - epubpackage, - opened = new RSVP.defer(); - - this.settings.bookPath = bookPath; - - //-- Get a absolute URL from the book path - this.bookUrl = this.urlFrom(bookPath); - - if(this.settings.contained || this.isContained(bookPath)){ - - this.settings.contained = this.contained = true; - - this.bookUrl = ''; - - epubpackage = this.unarchive(bookPath). - then(function(){ - return book.loadPackage(); - }); - - } else { - epubpackage = this.loadPackage(); - } - - if(this.settings.restore && !forceReload && localStorage){ - //-- Will load previous package json, or re-unpack if error - epubpackage.then(function(packageXml) { - var identifier = book.packageIdentifier(packageXml); - var restored = book.restore(identifier); - - if(!restored) { - book.unpack(packageXml); - } - opened.resolve(); - book.defer_opened.resolve(); - }); - - }else{ - - //-- Get package information from epub opf - epubpackage.then(function(packageXml) { - book.unpack(packageXml); - opened.resolve(); - book.defer_opened.resolve(); - }); - } - - //-- If there is network connection, store the books contents - if(this.online && this.settings.storage && !this.settings.contained){ - if(!this.settings.stored) opened.then(book.storeOffline()); - } - - this._registerReplacements(this.renderer); - - return opened.promise; - -}; - -EPUBJS.Book.prototype.loadPackage = function(_containerPath){ - var book = this, - parse = new EPUBJS.Parser(), - containerPath = _containerPath || "META-INF/container.xml", - containerXml, - packageXml; - - if(!this.settings.packageUrl) { //-- provide the packageUrl to skip this step - packageXml = book.loadXml(book.bookUrl + containerPath). - then(function(containerXml){ - return parse.container(containerXml); // Container has path to content - }). - then(function(paths){ - book.settings.contentsPath = book.bookUrl + paths.basePath; - book.settings.packageUrl = book.bookUrl + paths.packagePath; - book.settings.encoding = paths.encoding; - return book.loadXml(book.settings.packageUrl); // Containes manifest, spine and metadata - }); - } else { - packageXml = book.loadXml(book.settings.packageUrl); - } - - packageXml.catch(function(error) { - // handle errors in either of the two requests - console.error("Could not load book at: "+ containerPath); - book.trigger("book:loadFailed", containerPath); - }); - return packageXml; -}; - -EPUBJS.Book.prototype.packageIdentifier = function(packageXml){ - var book = this, - parse = new EPUBJS.Parser(); - - return parse.identifier(packageXml); -}; - -EPUBJS.Book.prototype.unpack = function(packageXml){ - var book = this, - parse = new EPUBJS.Parser(); - - book.contents = parse.packageContents(packageXml, book.settings.contentsPath); // Extract info from contents - - book.manifest = book.contents.manifest; - book.spine = book.contents.spine; - book.spineIndexByURL = book.contents.spineIndexByURL; - book.metadata = book.contents.metadata; - if(!book.settings.bookKey) { - book.settings.bookKey = book.generateBookKey(book.metadata.identifier); - } - - //-- Set Globbal Layout setting based on metadata - book.globalLayoutProperties = book.parseLayoutProperties(book.metadata); - - book.cover = book.contents.cover = book.settings.contentsPath + book.contents.coverPath; - - book.spineNodeIndex = book.contents.spineNodeIndex; - - book.ready.manifest.resolve(book.contents.manifest); - book.ready.spine.resolve(book.contents.spine); - book.ready.metadata.resolve(book.contents.metadata); - book.ready.cover.resolve(book.contents.cover); - - - //-- Load the TOC, optional; either the EPUB3 XHTML Navigation file or the EPUB2 NCX file - if(book.contents.navPath) { - book.settings.navUrl = book.settings.contentsPath + book.contents.navPath; - - book.loadXml(book.settings.navUrl). - then(function(navHtml){ - return parse.nav(navHtml, book.spineIndexByURL, book.spine); // Grab Table of Contents - }).then(function(toc){ - book.toc = book.contents.toc = toc; - book.ready.toc.resolve(book.contents.toc); - }, function(error) { - book.ready.toc.resolve(false); - }); - - // Load the optional pageList - book.loadXml(book.settings.navUrl). - then(function(navHtml){ - return parse.pageList(navHtml, book.spineIndexByURL, book.spine); - }).then(function(pageList){ - var epubcfi = new EPUBJS.EpubCFI(); - var wait = 0; // need to generate a cfi - - // No pageList found - if(pageList.length === 0) { - return; - } - - book.pageList = book.contents.pageList = pageList; - - // Replace HREFs with CFI - book.pageList.forEach(function(pg){ - if(!pg.cfi) { - wait += 1; - epubcfi.generateCfiFromHref(pg.href, book).then(function(cfi){ - pg.cfi = cfi; - pg.packageUrl = book.settings.packageUrl; - - wait -= 1; - if(wait === 0) { - book.pagination.process(book.pageList); - book.ready.pageList.resolve(book.pageList); - } - }); - } - }); - - if(!wait) { - book.pagination.process(book.pageList); - book.ready.pageList.resolve(book.pageList); - } - - }, function(error) { - book.ready.pageList.resolve([]); - }); - } else if(book.contents.tocPath) { - book.settings.tocUrl = book.settings.contentsPath + book.contents.tocPath; - - book.loadXml(book.settings.tocUrl). - then(function(tocXml){ - return parse.toc(tocXml, book.spineIndexByURL, book.spine); // Grab Table of Contents - }).then(function(toc){ - book.toc = book.contents.toc = toc; - book.ready.toc.resolve(book.contents.toc); - }, function(error) { - book.ready.toc.resolve(false); - }); - - } else { - book.ready.toc.resolve(false); - } - -}; - -EPUBJS.Book.prototype.createHiddenRender = function(renderer, _width, _height) { - var box = this.element.getBoundingClientRect(); - var width = _width || this.settings.width || box.width; - var height = _height || this.settings.height || box.height; - var hiddenContainer; - var hiddenEl; - renderer.setMinSpreadWidth(this.settings.minSpreadWidth); - renderer.setGap(this.settings.gap); - - this._registerReplacements(renderer); - if(this.settings.forceSingle) { - renderer.forceSingle(true); - } - - hiddenContainer = document.createElement("div"); - hiddenContainer.style.visibility = "hidden"; - hiddenContainer.style.overflow = "hidden"; - hiddenContainer.style.width = "0"; - hiddenContainer.style.height = "0"; - this.element.appendChild(hiddenContainer); - - hiddenEl = document.createElement("div"); - hiddenEl.style.visibility = "hidden"; - hiddenEl.style.overflow = "hidden"; - hiddenEl.style.width = width + "px";//"0"; - hiddenEl.style.height = height +"px"; //"0"; - hiddenContainer.appendChild(hiddenEl); - - renderer.initialize(hiddenEl); - return hiddenContainer; -}; - -// Generates the pageList array by loading every chapter and paging through them -EPUBJS.Book.prototype.generatePageList = function(width, height){ - var pageList = []; - var pager = new EPUBJS.Renderer(this.settings.render_method, false); //hidden - var hiddenContainer = this.createHiddenRender(pager, width, height); - var deferred = new RSVP.defer(); - var spinePos = -1; - var spineLength = this.spine.length; - var totalPages = 0; - var currentPage = 0; - var nextChapter = function(deferred){ - var chapter; - var next = spinePos + 1; - var done = deferred || new RSVP.defer(); - var loaded; - if(next >= spineLength) { - done.resolve(); - } else { - spinePos = next; - chapter = new EPUBJS.Chapter(this.spine[spinePos], this.store); - pager.displayChapter(chapter, this.globalLayoutProperties).then(function(chap){ - pager.pageMap.forEach(function(item){ - currentPage += 1; - pageList.push({ - "cfi" : item.start, - "page" : currentPage - }); - - }); - - if(pager.pageMap.length % 2 > 0 && - pager.spreads) { - currentPage += 1; // Handle Spreads - pageList.push({ - "cfi" : pager.pageMap[pager.pageMap.length - 1].end, - "page" : currentPage - }); - } - - // Load up the next chapter - setTimeout(function(){ - nextChapter(done); - }, 1); - }); - } - return done.promise; - }.bind(this); - - var finished = nextChapter().then(function(){ - pager.remove(); - this.element.removeChild(hiddenContainer); - deferred.resolve(pageList); - }.bind(this)); - - return deferred.promise; -}; - -// Render out entire book and generate the pagination -// Width and Height are optional and will default to the current dimensions -EPUBJS.Book.prototype.generatePagination = function(width, height) { - var book = this; - var defered = new RSVP.defer(); - - this.ready.spine.promise.then(function(){ - book.generatePageList(width, height).then(function(pageList){ - book.pageList = book.contents.pageList = pageList; - book.pagination.process(pageList); - book.ready.pageList.resolve(book.pageList); - defered.resolve(book.pageList); - }); - }); - - return defered.promise; -}; - -// Process the pagination from a JSON array containing the pagelist -EPUBJS.Book.prototype.loadPagination = function(pagelistJSON) { - var pageList = JSON.parse(pagelistJSON); - - if(pageList && pageList.length) { - this.pageList = pageList; - this.pagination.process(this.pageList); - this.ready.pageList.resolve(this.pageList); - } - return this.pageList; -}; - -EPUBJS.Book.prototype.getPageList = function() { - return this.ready.pageList.promise; -}; - -EPUBJS.Book.prototype.getMetadata = function() { - return this.ready.metadata.promise; -}; - -EPUBJS.Book.prototype.getToc = function() { - return this.ready.toc.promise; -}; - -/* Private Helpers */ - -//-- Listeners for browser events -EPUBJS.Book.prototype.networkListeners = function(){ - var book = this; - - window.addEventListener("offline", function(e) { - book.online = false; - book.trigger("book:offline"); - }, false); - - window.addEventListener("online", function(e) { - book.online = true; - book.trigger("book:online"); - }, false); - -}; - -// Listen to all events the renderer triggers and pass them as book events -EPUBJS.Book.prototype.listenToRenderer = function(renderer){ - var book = this; - renderer.Events.forEach(function(eventName){ - renderer.on(eventName, function(e){ - book.trigger(eventName, e); - }); - }); - - renderer.on("renderer:visibleRangeChanged", function(range) { - var startPage, endPage, percent; - var pageRange = []; - - if(this.pageList.length > 0) { - startPage = this.pagination.pageFromCfi(range.start); - percent = this.pagination.percentageFromPage(startPage); - pageRange.push(startPage); - - if(range.end) { - endPage = this.pagination.pageFromCfi(range.end); - //if(startPage != endPage) { - pageRange.push(endPage); - //} - } - this.trigger("book:pageChanged", { - "anchorPage": startPage, - "percentage": percent, - "pageRange" : pageRange - }); - - // TODO: Add event for first and last page. - // (though last is going to be hard, since it could be several reflowed pages long) - } - }.bind(this)); - - renderer.on("render:loaded", this.loadChange.bind(this)); -}; - -// Listens for load events from the Renderer and checks against the current chapter -// Prevents the Render from loading a different chapter when back button is pressed -EPUBJS.Book.prototype.loadChange = function(url){ - var uri = EPUBJS.core.uri(url); - var chapter; - - if(this.currentChapter) { - chapter = EPUBJS.core.uri(this.currentChapter.absolute); - } - - if(!this._rendering && this.currentChapter && uri.path != chapter.path){ - console.warn("Miss Match", uri.path, this.currentChapter.absolute); - this.goto(uri.filename); - } -}; - -EPUBJS.Book.prototype.unlistenToRenderer = function(renderer){ - renderer.Events.forEach(function(eventName){ - renderer.off(eventName); - } ); -}; - -//-- Choose between a request from store or a request from network -EPUBJS.Book.prototype.loadXml = function(url){ - if(this.settings.fromStorage) { - return this.storage.getXml(url, this.settings.encoding); - } else if(this.settings.contained) { - return this.zip.getXml(url, this.settings.encoding); - }else{ - return EPUBJS.core.request(url, 'xml', this.settings.withCredentials); - } -}; - -//-- Turns a url into a absolute url -EPUBJS.Book.prototype.urlFrom = function(bookPath){ - var uri = EPUBJS.core.uri(bookPath), - absolute = uri.protocol, - fromRoot = uri.path[0] == "/", - location = window.location, - //-- Get URL orgin, try for native or combine - origin = location.origin || location.protocol + "//" + location.host, - baseTag = document.getElementsByTagName('base'), - base; - - - //-- Check is Base tag is set - - if(baseTag.length) { - base = baseTag[0].href; - } - - //-- 1. Check if url is absolute - if(uri.protocol){ - return uri.origin + uri.path; - } - - //-- 2. Check if url starts with /, add base url - if(!absolute && fromRoot){ - return (base || origin) + uri.path; - } - - //-- 3. Or find full path to url and add that - if(!absolute && !fromRoot){ - return EPUBJS.core.resolveUrl(base || location.pathname, uri.path); - } - -}; - - -EPUBJS.Book.prototype.unarchive = function(bookPath){ - var book = this, - unarchived; - - //-- Must use storage - // if(this.settings.storage == false ){ - // this.settings.storage = true; - // this.storage = new fileStorage.storage(); - // } - - this.zip = new EPUBJS.Unarchiver(); - this.store = this.zip; // Use zip storaged in ram - return this.zip.openZip(bookPath); -}; - -//-- Checks if url has a .epub or .zip extension -EPUBJS.Book.prototype.isContained = function(bookUrl){ - var uri = EPUBJS.core.uri(bookUrl); - - if(uri.extension && (uri.extension == "epub" || uri.extension == "zip")){ - return true; - } - - return false; -}; - -//-- Checks if the book can be retrieved from localStorage -EPUBJS.Book.prototype.isSaved = function(bookKey) { - var storedSettings; - - if(!localStorage) { - return false; - } - - storedSettings = localStorage.getItem(bookKey); - - if( !localStorage || - storedSettings === null) { - return false; - } else { - return true; - } -}; - -// Generates the Book Key using the identifer in the manifest or other string provided -EPUBJS.Book.prototype.generateBookKey = function(identifier){ - return "epubjs:" + EPUBJS.VERSION + ":" + window.location.host + ":" + identifier; -}; - -EPUBJS.Book.prototype.saveContents = function(){ - if(!localStorage) { - return false; - } - localStorage.setItem(this.settings.bookKey, JSON.stringify(this.contents)); -}; - -EPUBJS.Book.prototype.removeSavedContents = function() { - if(!localStorage) { - return false; - } - localStorage.removeItem(this.settings.bookKey); -}; - - - -//-- Takes a string or a element -EPUBJS.Book.prototype.renderTo = function(elem){ - var book = this, - rendered; - - if(_.isElement(elem)) { - this.element = elem; - } else if (typeof elem == "string") { - this.element = EPUBJS.core.getEl(elem); - } else { - console.error("Not an Element"); - return; - } - - rendered = this.opened. - then(function(){ - // book.render = new EPUBJS.Renderer[this.settings.renderer](book); - book.renderer.initialize(book.element, book.settings.width, book.settings.height); - book._rendered(); - return book.startDisplay(); - }); - - // rendered.then(null, function(error) { console.error(error); }); - - return rendered; -}; - -EPUBJS.Book.prototype.startDisplay = function(){ - var display; - - if(this.settings.goto) { - display = this.goto(this.settings.goto); - }else if(this.settings.previousLocationCfi) { - display = this.gotoCfi(this.settings.previousLocationCfi); - }else{ - display = this.displayChapter(this.spinePos); - } - - return display; -}; - -EPUBJS.Book.prototype.restore = function(identifier){ - - var book = this, - fetch = ['manifest', 'spine', 'metadata', 'cover', 'toc', 'spineNodeIndex', 'spineIndexByURL', 'globalLayoutProperties'], - reject = false, - bookKey = this.generateBookKey(identifier), - fromStore = localStorage.getItem(bookKey), - len = fetch.length, - i; - - if(this.settings.clearSaved) reject = true; - - if(!reject && fromStore != 'undefined' && fromStore !== null){ - book.contents = JSON.parse(fromStore); - - for(i = 0; i < len; i++) { - var item = fetch[i]; - - if(!book.contents[item]) { - reject = true; - break; - } - book[item] = book.contents[item]; - } - } - - if(reject || !fromStore || !this.contents || !this.settings.contentsPath){ - return false; - }else{ - this.settings.bookKey = bookKey; - this.ready.manifest.resolve(this.manifest); - this.ready.spine.resolve(this.spine); - this.ready.metadata.resolve(this.metadata); - this.ready.cover.resolve(this.cover); - this.ready.toc.resolve(this.toc); - return true; - } - -}; - -EPUBJS.Book.prototype.displayChapter = function(chap, end, deferred){ - var book = this, - render, - cfi, - pos, - store, - defer = deferred || new RSVP.defer(); - - var chapter; - - if(!this.isRendered) { - this._q.enqueue("displayChapter", arguments); - // Reject for now. TODO: pass promise to queue - defer.reject({ - message : "Rendering", - stack : new Error().stack - }); - return defer.promise; - } - - - if(this._rendering || this._rendering) { - // Pass along the current defer - this._displayQ.enqueue("displayChapter", [chap, end, defer]); - return defer.promise; - } - - if(_.isNumber(chap)){ - pos = chap; - }else{ - cfi = new EPUBJS.EpubCFI(chap); - pos = cfi.spinePos; - } - - if(pos < 0 || pos >= this.spine.length){ - console.warn("Not A Valid Location"); - pos = 0; - end = false; - cfi = false; - } - - //-- Create a new chapter - chapter = new EPUBJS.Chapter(this.spine[pos], this.store); - - this._rendering = true; - - render = book.renderer.displayChapter(chapter, this.globalLayoutProperties); - if(cfi) { - book.renderer.gotoCfi(cfi); - } else if(end) { - book.renderer.lastPage(); - } - //-- Success, Clear render queue - render.then(function(rendered){ - // var inwait; - //-- Set the book's spine position - book.spinePos = pos; - - defer.resolve(book.renderer); - - if(!book.settings.fromStorage && - !book.settings.contained) { - book.preloadNextChapter(); - } - - book.currentChapter = chapter; - book._rendering = false; - book._displayQ.dequeue(); - if(book._displayQ.length() === 0) { - book._gotoQ.dequeue(); - } - - }, function(error) { - // handle errors in either of the two requests - console.error("Could not load Chapter: "+ chapter.absolute); - book.trigger("book:chapterLoadFailed", chapter.absolute); - book._rendering = false; - defer.reject(error); - }); - - return defer.promise; -}; - -EPUBJS.Book.prototype.nextPage = function(){ - var next; - - if(!this.isRendered) return this._q.enqueue("nextPage", arguments); - - next = this.renderer.nextPage(); - - if(!next){ - return this.nextChapter(); - } -}; - -EPUBJS.Book.prototype.prevPage = function() { - var prev; - - if(!this.isRendered) return this._q.enqueue("prevPage", arguments); - - prev = this.renderer.prevPage(); - - if(!prev){ - return this.prevChapter(); - } -}; - -EPUBJS.Book.prototype.nextChapter = function() { - var next; - if (this.spinePos < this.spine.length - 1) { - next = this.spinePos + 1; - while (this.spine[next] && this.spine[next].linear && this.spine[next].linear == 'no') { - next++; - } - if (next < this.spine.length - 1) { - return this.displayChapter(next); - } else { - this.trigger("book:atEnd"); - } - - } else { - this.trigger("book:atEnd"); - } -}; - -EPUBJS.Book.prototype.prevChapter = function() { - var prev; - if (this.spinePos > 0) { - prev = this.spinePos - 1; - while (this.spine[prev] && this.spine[prev].linear && this.spine[prev].linear == 'no') { - prev--; - } - if (prev >= 0) { - return this.displayChapter(prev, true); - } else { - this.trigger("book:atStart"); - } - - } else { - this.trigger("book:atStart"); - } -}; - -EPUBJS.Book.prototype.getCurrentLocationCfi = function() { - if(!this.isRendered) return false; - return this.renderer.currentLocationCfi; -}; - -EPUBJS.Book.prototype.goto = function(target){ - - if(target.indexOf("epubcfi(") === 0) { - return this.gotoCfi(target); - } else if(target.indexOf("%") === target.length-1) { - return this.gotoPercentage(parseInt(target.substring(0, target.length-1))/100); - } else if(typeof target === "number" || isNaN(target) === false){ - return this.gotoPage(target); - } else { - return this.gotoHref(target); - } - -}; - -EPUBJS.Book.prototype.gotoCfi = function(cfiString, defer){ - var cfi, - spinePos, - spineItem, - rendered, - deferred = defer || new RSVP.defer(); - - if(!this.isRendered) { - console.warn("Not yet Rendered"); - this.settings.previousLocationCfi = cfiString; - return false; - } - - // Currently going to a chapter - if(this._moving || this._rendering) { - console.warn("Renderer is moving"); - this._gotoQ.enqueue("gotoCfi", [cfiString, deferred]); - return false; - } - - cfi = new EPUBJS.EpubCFI(cfiString); - spinePos = cfi.spinePos; - - if(spinePos == -1) { - return false; - } - - spineItem = this.spine[spinePos]; - promise = deferred.promise; - this._moving = true; - //-- If same chapter only stay on current chapter - if(this.currentChapter && this.spinePos === spinePos){ - this.renderer.gotoCfi(cfi); - this._moving = false; - deferred.resolve(this.renderer.currentLocationCfi); - } else { - - if(!spineItem || spinePos == -1) { - spinePos = 0; - spineItem = this.spine[spinePos]; - } - - this.currentChapter = new EPUBJS.Chapter(spineItem, this.store); - - if(this.currentChapter) { - this.spinePos = spinePos; - render = this.renderer.displayChapter(this.currentChapter, this.globalLayoutProperties); - - this.renderer.gotoCfi(cfi); - render.then(function(rendered){ - this._moving = false; - deferred.resolve(rendered.currentLocationCfi); - }.bind(this)); - } - } - - promise.then(function(){ - this._gotoQ.dequeue(); - }.bind(this)); - - return promise; -}; - -EPUBJS.Book.prototype.gotoHref = function(url, defer){ - var split, chapter, section, relativeURL, spinePos; - var deferred = defer || new RSVP.defer(); - - if(!this.isRendered) { - this.settings.goto = url; - return false; - } - - // Currently going to a chapter - if(this._moving || this._rendering) { - this._gotoQ.enqueue("gotoHref", [url, deferred]); - return false; - } - - split = url.split("#"); - chapter = split[0]; - section = split[1] || false; - // absoluteURL = (chapter.search("://") === -1) ? (this.settings.contentsPath + chapter) : chapter; - relativeURL = chapter.replace(this.settings.contentsPath, ''); - spinePos = this.spineIndexByURL[relativeURL]; - - //-- If link fragment only stay on current chapter - if(!chapter){ - spinePos = this.currentChapter ? this.currentChapter.spinePos : 0; - } - - //-- Check that URL is present in the index, or stop - if(typeof(spinePos) != "number") return false; - - if(!this.currentChapter || spinePos != this.currentChapter.spinePos){ - //-- Load new chapter if different than current - return this.displayChapter(spinePos).then(function(){ - if(section){ - this.renderer.section(section); - } - deferred.resolve(this.renderer.currentLocationCfi); - }.bind(this)); - }else{ - //-- Goto section - if(section) { - this.renderer.section(section); - } else { - // Or jump to the start - this.renderer.firstPage(); - } - deferred.resolve(this.renderer.currentLocationCfi); - } - - deferred.promise.then(function(){ - this._gotoQ.dequeue(); - }.bind(this)); - - return deferred.promise; -}; - -EPUBJS.Book.prototype.gotoPage = function(pg){ - var cfi = this.pagination.cfiFromPage(pg); - return this.gotoCfi(cfi); -}; - -EPUBJS.Book.prototype.gotoPercentage = function(percent){ - var pg = this.pagination.pageFromPercentage(percent); - return this.gotoPage(pg); -}; - -EPUBJS.Book.prototype.preloadNextChapter = function() { - var next; - var chap = this.spinePos + 1; - - if(chap >= this.spine.length){ - return false; - } - - next = new EPUBJS.Chapter(this.spine[chap]); - if(next) { - EPUBJS.core.request(next.absolute); - } -}; - - -EPUBJS.Book.prototype.storeOffline = function() { - var book = this, - assets = _.values(this.manifest); - - //-- Creates a queue of all items to load - return EPUBJS.storage.batch(assets). - then(function(){ - book.settings.stored = true; - book.trigger("book:stored"); - }); -}; - -EPUBJS.Book.prototype.availableOffline = function() { - return this.settings.stored > 0 ? true : false; -}; - -/* -EPUBJS.Book.prototype.fromStorage = function(stored) { - - if(this.contained) return; - - if(!stored){ - this.online = true; - this.tell("book:online"); - }else{ - if(!this.availableOffline){ - //-- If book hasn't been cached yet, store offline - this.storeOffline(function(){ - this.online = false; - this.tell("book:offline"); - }.bind(this)); - - }else{ - this.online = false; - this.tell("book:offline"); - } - } - -} -*/ - -EPUBJS.Book.prototype.setStyle = function(style, val, prefixed) { - var noreflow = ["color", "background", "background-color"]; - - if(!this.isRendered) return this._q.enqueue("setStyle", arguments); - - this.settings.styles[style] = val; - - this.renderer.setStyle(style, val, prefixed); - - if(noreflow.indexOf(style) === -1) { - clearTimeout(this.reformatTimeout); - this.reformatTimeout = setTimeout(function(){ - this.renderer.reformat(); - }.bind(this), 10); - } -}; - -EPUBJS.Book.prototype.removeStyle = function(style) { - if(!this.isRendered) return this._q.enqueue("removeStyle", arguments); - this.renderer.removeStyle(style); - this.renderer.reformat(); - delete this.settings.styles[style]; -}; - -EPUBJS.Book.prototype.addHeadTag = function(tag, attrs) { - if(!this.isRendered) return this._q.enqueue("addHeadTag", arguments); - this.settings.headTags[tag] = attrs; -}; - -EPUBJS.Book.prototype.useSpreads = function(use) { - console.warn("useSpreads is deprecated, use forceSingle or set a layoutOveride instead"); - if(use === false) { - this.forceSingle(true); - } else { - this.forceSingle(false); - } -}; - -EPUBJS.Book.prototype.forceSingle = function(use) { - this.renderer.forceSingle(use); - this.settings.forceSingle = use; - if(this.isRendered) { - this.renderer.reformat(); - } -}; - -EPUBJS.Book.prototype.setMinSpreadWidth = function(width) { - this.settings.minSpreadWidth = width; - if(this.isRendered) { - this.renderer.setMinSpreadWidth(this.settings.minSpreadWidth); - this.renderer.reformat(); - } -}; - -EPUBJS.Book.prototype.setGap = function(gap) { - this.settings.gap = gap; - if(this.isRendered) { - this.renderer.setGap(this.settings.gap); - this.renderer.reformat(); - } -}; - -EPUBJS.Book.prototype.chapter = function(path) { - var spinePos = this.spineIndexByURL[path]; - var spineItem; - var chapter; - - if(spinePos){ - spineItem = this.spine[spinePos]; - chapter = new EPUBJS.Chapter(spineItem, this.store); - chapter.load(); - } - return chapter; -}; - -EPUBJS.Book.prototype.unload = function(){ - - if(this.settings.restore && localStorage) { - this.saveContents(); - } - - this.unlistenToRenderer(this.renderer); - - this.trigger("book:unload"); -}; - -EPUBJS.Book.prototype.destroy = function() { - - window.removeEventListener("beforeunload", this.unload); - - if(this.currentChapter) this.currentChapter.unload(); - - this.unload(); - - if(this.render) this.render.remove(); - -}; - -EPUBJS.Book.prototype._ready = function() { - - this.trigger("book:ready"); - -}; - -EPUBJS.Book.prototype._rendered = function(err) { - var book = this; - - this.isRendered = true; - this.trigger("book:rendered"); - - this._q.flush(); -}; - - -EPUBJS.Book.prototype.applyStyles = function(renderer, callback){ - // if(!this.isRendered) return this._q.enqueue("applyStyles", arguments); - renderer.applyStyles(this.settings.styles); - callback(); -}; - -EPUBJS.Book.prototype.applyHeadTags = function(renderer, callback){ - // if(!this.isRendered) return this._q.enqueue("applyHeadTags", arguments); - renderer.applyHeadTags(this.settings.headTags); - callback(); -}; - -EPUBJS.Book.prototype._registerReplacements = function(renderer){ - renderer.registerHook("beforeChapterDisplay", this.applyStyles.bind(this, renderer), true); - renderer.registerHook("beforeChapterDisplay", this.applyHeadTags.bind(this, renderer), true); - renderer.registerHook("beforeChapterDisplay", EPUBJS.replace.hrefs.bind(this), true); - - if(this._needsAssetReplacement()) { - - renderer.registerHook("beforeChapterDisplay", [ - EPUBJS.replace.head, - EPUBJS.replace.resources, - EPUBJS.replace.svg - ], true); - - } - -}; - -EPUBJS.Book.prototype._needsAssetReplacement = function(){ - if(this.settings.fromStorage) { - - //-- Filesystem api links are relative, so no need to replace them - if(this.storage.getStorageType() == "filesystem") { - return false; - } - - return true; - - } else if(this.settings.contained) { - - return true; - - } else { - - return false; - - } -}; - - -//-- http://www.idpf.org/epub/fxl/ -EPUBJS.Book.prototype.parseLayoutProperties = function(metadata){ - var layout = (this.layoutOveride && this.layoutOveride.layout) || metadata.layout || "reflowable"; - var spread = (this.layoutOveride && this.layoutOveride.spread) || metadata.spread || "auto"; - var orientation = (this.layoutOveride && this.layoutOveride.orientation) || metadata.orientation || "auto"; - return { - layout : layout, - spread : spread, - orientation : orientation - }; -}; - -//-- Enable binding events to book -RSVP.EventTarget.mixin(EPUBJS.Book.prototype); - -//-- Handle RSVP Errors -RSVP.on('error', function(event) { - //console.error(event, event.detail); -}); - -RSVP.configure('instrument', true); //-- true | will logging out all RSVP rejections -// RSVP.on('created', listener); -// RSVP.on('chained', listener); -// RSVP.on('fulfilled', listener); -RSVP.on('rejected', function(event){ - console.error(event.detail.message, event.detail.stack); -}); - -EPUBJS.Chapter = function(spineObject, store){ - this.href = spineObject.href; - this.absolute = spineObject.url; - this.id = spineObject.id; - this.spinePos = spineObject.index; - this.cfiBase = spineObject.cfiBase; - this.properties = spineObject.properties; - this.manifestProperties = spineObject.manifestProperties; - this.linear = spineObject.linear; - this.pages = 1; - this.store = store; - this.epubcfi = new EPUBJS.EpubCFI(); - this.deferred = new RSVP.defer(); - this.loaded = this.deferred.promise; -}; - - -EPUBJS.Chapter.prototype.load = function(_store){ - var store = _store || this.store; - var promise; - // if(this.store && (!this.book.online || this.book.contained)) - if(store){ - promise = store.get(this.href); - }else{ - promise = EPUBJS.core.request(this.absolute, 'xml'); - } - - promise.then(function(xml){ - this.setDocument(xml); - }.bind(this)); - - return promise; -}; - -EPUBJS.Chapter.prototype.url = function(_store){ - var deferred = new RSVP.defer(); - var store = _store || this.store; - var loaded; - var chapter = this; - var url; - - if(store){ - if(!this.tempUrl) { - store.getUrl(this.absolute).then(function(url){ - chapter.tempUrl = url; - deferred.resolve(url); - }); - } else { - url = this.tempUrl; - deferred.resolve(url); - } - }else{ - url = this.absolute; - deferred.resolve(url); - } - /* - loaded = EPUBJS.core.request(url, 'xml', false); - loaded.then(function(contents){ - chapter.contents = contents; - deferred.resolve(chapter.absolute); - }, function(error){ - deferred.reject(error); - }); - */ - - return deferred.promise; -}; - -EPUBJS.Chapter.prototype.setPages = function(num){ - this.pages = num; -}; - -EPUBJS.Chapter.prototype.getPages = function(num){ - return this.pages; -}; - -EPUBJS.Chapter.prototype.getID = function(){ - return this.ID; -}; - -EPUBJS.Chapter.prototype.unload = function(store){ - this.document = null; - if(this.tempUrl && store) { - store.revokeUrl(this.tempUrl); - this.tempUrl = false; - } -}; - -EPUBJS.Chapter.prototype.setDocument = function(_document){ - this.document = _document.implementation.createDocument( - _document.namespaceURI, //namespace to use - null, //empty document - _document.doctype //doctype (null for XML) - ); - this.contents = this.document.importNode( - _document.documentElement, //node to import - true //clone its descendants - ); - this.document.appendChild(this.contents); - this.deferred.resolve(this.contents); -}; - -EPUBJS.Chapter.prototype.cfiFromRange = function(_range) { - var range; - var startXpath, endXpath; - var startContainer, endContainer; - var cleanTextContent, cleanEndTextContent; - - // Check for Contents - if(!this.document) return; - startXpath = EPUBJS.core.getElementXPath(_range.startContainer); - // console.log(startContainer) - endXpath = EPUBJS.core.getElementXPath(_range.endContainer); - startContainer = this.document.evaluate(startXpath, this.document, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - - if(!_range.collapsed) { - endContainer = this.document.evaluate(endXpath, this.document, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - } - - range = this.document.createRange(); - // Find Exact Range in original document - if(startContainer) { - try { - range.setStart(startContainer, _range.startOffset); - if(!_range.collapsed && endContainer) { - range.setEnd(endContainer, _range.endOffset); - } - } catch (e) { - console.log("missed"); - startContainer = false; - } - - } - - // Fuzzy Match - if(!startContainer) { - console.log("not found, try fuzzy match"); - cleanStartTextContent = EPUBJS.core.cleanStringForXpath(_range.startContainer.textContent); - startXpath = "//text()[contains(.," + cleanStartTextContent + ")]"; - - startContainer = this.document.evaluate(startXpath, this.document, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - - if(startContainer){ - // console.log("Found with Fuzzy"); - range.setStart(startContainer, _range.startOffset); - - if(!_range.collapsed) { - cleanEndTextContent = EPUBJS.core.cleanStringForXpath(_range.endContainer.textContent); - endXpath = "//text()[contains(.," + cleanEndTextContent + ")]"; - endContainer = this.document.evaluate(endXpath, this.document, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - if(endContainer) { - range.setEnd(endContainer, _range.endOffset); - } - } - - } - } - - // Generate the Cfi - return this.epubcfi.generateCfiFromRange(range, this.cfiBase); -}; - -EPUBJS.Chapter.prototype.find = function(_query){ - var chapter = this; - var matches = []; - var query = _query.toLowerCase(); - //var xpath = this.document.evaluate(".//text()[contains(translate(., '"+query.toUpperCase()+"', '"+query+"'),'"+query+"')]", this.document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); - var find = function(node){ - // Search String - var text = node.textContent.toLowerCase(); - var range = chapter.document.createRange(); - var cfi; - var pos; - var last = -1; - - while (pos != -1) { - pos = text.indexOf(query, last + 1); - - if(pos != -1) { - // If Found, Create Range - range = chapter.document.createRange(); - range.setStart(node, pos); - range.setEnd(node, pos + query.length); - - //Generate CFI - cfi = chapter.cfiFromRange(range); - //Add CFI to list - matches.push(cfi); - } - - last = pos; - } - - }; - - // Grab text nodes - - /* - for ( var i=0 ; i < xpath.snapshotLength; i++ ) { - find(xpath.snapshotItem(i)); - } - */ - - this.textSprint(this.document, function(node){ - find(node); - }); - - - // Return List of CFIs - return matches; -}; - - -EPUBJS.Chapter.prototype.textSprint = function(root, func) { - var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, { - acceptNode: function (node) { - if ( ! /^\s*$/.test(node.data) ) { - return NodeFilter.FILTER_ACCEPT; - } else { - return NodeFilter.FILTER_REJECT; - } - } - }, false); - var node; - while ((node = treeWalker.nextNode())) { - func(node); - } - -}; -var EPUBJS = EPUBJS || {}; -EPUBJS.core = {}; - -//-- Get a element for an id -EPUBJS.core.getEl = function(elem) { - return document.getElementById(elem); -}; - -//-- Get all elements for a class -EPUBJS.core.getEls = function(classes) { - return document.getElementsByClassName(classes); -}; - -EPUBJS.core.request = function(url, type, withCredentials) { - var supportsURL = window.URL; - var BLOB_RESPONSE = supportsURL ? "blob" : "arraybuffer"; - - var deferred = new RSVP.defer(); - - var xhr = new XMLHttpRequest(); - - //-- Check from PDF.js: - // https://github.com/mozilla/pdf.js/blob/master/web/compatibility.js - var xhrPrototype = XMLHttpRequest.prototype; - - if (!('overrideMimeType' in xhrPrototype)) { - // IE10 might have response, but not overrideMimeType - Object.defineProperty(xhrPrototype, 'overrideMimeType', { - value: function xmlHttpRequestOverrideMimeType(mimeType) {} - }); - } - if(withCredentials) { - xhr.withCredentials = true; - } - xhr.open("GET", url, true); - xhr.onreadystatechange = handler; - - if(type == 'blob'){ - xhr.responseType = BLOB_RESPONSE; - } - - if(type == "json") { - xhr.setRequestHeader("Accept", "application/json"); - } - - if(type == 'xml') { - xhr.overrideMimeType('text/xml'); - } - - xhr.send(); - - function handler() { - if (this.readyState === this.DONE) { - if (this.status === 200 || this.responseXML ) { //-- Firefox is reporting 0 for blob urls - var r; - - if(type == 'xml'){ - r = this.responseXML; - }else - if(type == 'json'){ - r = JSON.parse(this.response); - }else - if(type == 'blob'){ - - if(supportsURL) { - r = this.response; - } else { - //-- Safari doesn't support responseType blob, so create a blob from arraybuffer - r = new Blob([this.response]); - } - - }else{ - r = this.response; - } - - deferred.resolve(r); - } else { - deferred.reject({ - message : this.response, - stack : new Error().stack - }); - } - } - } - - return deferred.promise; -}; - -EPUBJS.core.toArray = function(obj) { - var arr = []; - - for (var member in obj) { - var newitm; - if ( obj.hasOwnProperty(member) ) { - newitm = obj[member]; - newitm.ident = member; - arr.push(newitm); - } - } - - return arr; -}; - -//-- Parse the different parts of a url, returning a object -EPUBJS.core.uri = function(url){ - var uri = { - protocol : '', - host : '', - path : '', - origin : '', - directory : '', - base : '', - filename : '', - extension : '', - fragment : '', - href : url - }, - doubleSlash = url.indexOf('://'), - search = url.indexOf('?'), - fragment = url.indexOf("#"), - withoutProtocol, - dot, - firstSlash; - - if(fragment != -1) { - uri.fragment = url.slice(fragment + 1); - url = url.slice(0, fragment); - } - - if(search != -1) { - uri.search = url.slice(search + 1); - url = url.slice(0, search); - href = url; - } - - if(doubleSlash != -1) { - uri.protocol = url.slice(0, doubleSlash); - withoutProtocol = url.slice(doubleSlash+3); - firstSlash = withoutProtocol.indexOf('/'); - - if(firstSlash === -1) { - uri.host = uri.path; - uri.path = ""; - } else { - uri.host = withoutProtocol.slice(0, firstSlash); - uri.path = withoutProtocol.slice(firstSlash); - } - - - uri.origin = uri.protocol + "://" + uri.host; - - uri.directory = EPUBJS.core.folder(uri.path); - - uri.base = uri.origin + uri.directory; - // return origin; - } else { - uri.path = url; - uri.directory = EPUBJS.core.folder(url); - uri.base = uri.directory; - } - - //-- Filename - uri.filename = url.replace(uri.base, ''); - dot = uri.filename.lastIndexOf('.'); - if(dot != -1) { - uri.extension = uri.filename.slice(dot+1); - } - return uri; -}; - -//-- Parse out the folder, will return everything before the last slash - -EPUBJS.core.folder = function(url){ - - var lastSlash = url.lastIndexOf('/'); - - if(lastSlash == -1) var folder = ''; - - folder = url.slice(0, lastSlash + 1); - - return folder; - -}; - -//-- https://github.com/ebidel/filer.js/blob/master/src/filer.js#L128 -EPUBJS.core.dataURLToBlob = function(dataURL) { - var BASE64_MARKER = ';base64,', - parts, contentType, raw, rawLength, uInt8Array; - - if (dataURL.indexOf(BASE64_MARKER) == -1) { - parts = dataURL.split(','); - contentType = parts[0].split(':')[1]; - raw = parts[1]; - - return new Blob([raw], {type: contentType}); - } - - parts = dataURL.split(BASE64_MARKER); - contentType = parts[0].split(':')[1]; - raw = window.atob(parts[1]); - rawLength = raw.length; - - uInt8Array = new Uint8Array(rawLength); - - for (var i = 0; i < rawLength; ++i) { - uInt8Array[i] = raw.charCodeAt(i); - } - - return new Blob([uInt8Array], {type: contentType}); -}; - -//-- Load scripts async: http://stackoverflow.com/questions/7718935/load-scripts-asynchronously -EPUBJS.core.addScript = function(src, callback, target) { - var s, r; - r = false; - s = document.createElement('script'); - s.type = 'text/javascript'; - s.async = false; - s.src = src; - s.onload = s.onreadystatechange = function() { - if ( !r && (!this.readyState || this.readyState == 'complete') ) { - r = true; - if(callback) callback(); - } - }; - target = target || document.body; - target.appendChild(s); -}; - -EPUBJS.core.addScripts = function(srcArr, callback, target) { - var total = srcArr.length, - curr = 0, - cb = function(){ - curr++; - if(total == curr){ - if(callback) callback(); - }else{ - EPUBJS.core.addScript(srcArr[curr], cb, target); - } - }; - - EPUBJS.core.addScript(srcArr[curr], cb, target); -}; - -EPUBJS.core.addCss = function(src, callback, target) { - var s, r; - r = false; - s = document.createElement('link'); - s.type = 'text/css'; - s.rel = "stylesheet"; - s.href = src; - s.onload = s.onreadystatechange = function() { - if ( !r && (!this.readyState || this.readyState == 'complete') ) { - r = true; - if(callback) callback(); - } - }; - target = target || document.body; - target.appendChild(s); -}; - -EPUBJS.core.prefixed = function(unprefixed) { - var vendors = ["Webkit", "Moz", "O", "ms" ], - prefixes = ['-Webkit-', '-moz-', '-o-', '-ms-'], - upper = unprefixed[0].toUpperCase() + unprefixed.slice(1), - length = vendors.length; - - if (typeof(document.body.style[unprefixed]) != 'undefined') { - return unprefixed; - } - - for ( var i=0; i < length; i++ ) { - if (typeof(document.body.style[vendors[i] + upper]) != 'undefined') { - return vendors[i] + upper; - } - } - - return unprefixed; -}; - -EPUBJS.core.resolveUrl = function(base, path) { - var url, - segments = [], - uri = EPUBJS.core.uri(path), - folders = base.split("/"), - paths; - - if(uri.host) { - return path; - } - - folders.pop(); - - paths = path.split("/"); - paths.forEach(function(p){ - if(p === ".."){ - folders.pop(); - }else{ - segments.push(p); - } - }); - - url = folders.concat(segments); - - return url.join("/"); -}; - -// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript -EPUBJS.core.uuid = function() { - var d = new Date().getTime(); - var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { - var r = (d + Math.random()*16)%16 | 0; - d = Math.floor(d/16); - return (c=='x' ? r : (r&0x7|0x8)).toString(16); - }); - return uuid; -}; - -// Fast quicksort insert for sorted array -- based on: -// http://stackoverflow.com/questions/1344500/efficient-way-to-insert-a-number-into-a-sorted-array-of-numbers -EPUBJS.core.insert = function(item, array, compareFunction) { - var location = EPUBJS.core.locationOf(item, array, compareFunction); - array.splice(location, 0, item); - - return location; -}; - -EPUBJS.core.locationOf = function(item, array, compareFunction, _start, _end) { - var start = _start || 0; - var end = _end || array.length; - var pivot = parseInt(start + (end - start) / 2); - var compared; - if(!compareFunction){ - compareFunction = function(a, b) { - if(a > b) return 1; - if(a < b) return -1; - if(a = b) return 0; - }; - } - if(end-start <= 0) { - return pivot; - } - - compared = compareFunction(array[pivot], item); - if(end-start === 1) { - return compared > 0 ? pivot : pivot + 1; - } - - if(compared === 0) { - return pivot; - } - if(compared === -1) { - return EPUBJS.core.locationOf(item, array, compareFunction, pivot, end); - } else{ - return EPUBJS.core.locationOf(item, array, compareFunction, start, pivot); - } -}; - -EPUBJS.core.indexOfSorted = function(item, array, compareFunction, _start, _end) { - var start = _start || 0; - var end = _end || array.length; - var pivot = parseInt(start + (end - start) / 2); - var compared; - if(!compareFunction){ - compareFunction = function(a, b) { - if(a > b) return 1; - if(a < b) return -1; - if(a = b) return 0; - }; - } - if(end-start <= 0) { - return -1; // Not found - } - - compared = compareFunction(array[pivot], item); - if(end-start === 1) { - return compared === 0 ? pivot : -1; - } - if(compared === 0) { - return pivot; // Found - } - if(compared === -1) { - return EPUBJS.core.indexOfSorted(item, array, compareFunction, pivot, end); - } else{ - return EPUBJS.core.indexOfSorted(item, array, compareFunction, start, pivot); - } -}; - - -EPUBJS.core.queue = function(_scope){ - var _q = []; - var scope = _scope; - // Add an item to the queue - var enqueue = function(funcName, args, context) { - _q.push({ - "funcName" : funcName, - "args" : args, - "context" : context - }); - return _q; - }; - // Run one item - var dequeue = function(){ - var inwait; - if(_q.length) { - inwait = _q.shift(); - // Defer to any current tasks - // setTimeout(function(){ - scope[inwait.funcName].apply(inwait.context || scope, inwait.args); - // }, 0); - } - }; - - // Run All - var flush = function(){ - while(_q.length) { - dequeue(); - } - }; - // Clear all items in wait - var clear = function(){ - _q = []; - }; - - var length = function(){ - return _q.length; - }; - - return { - "enqueue" : enqueue, - "dequeue" : dequeue, - "flush" : flush, - "clear" : clear, - "length" : length - }; -}; - -// From: https://code.google.com/p/fbug/source/browse/branches/firebug1.10/content/firebug/lib/xpath.js -/** - * Gets an XPath for an element which describes its hierarchical location. - */ -EPUBJS.core.getElementXPath = function(element) { - if (element && element.id) { - return '//*[@id="' + element.id + '"]'; - } else { - return EPUBJS.core.getElementTreeXPath(element); - } -}; - -EPUBJS.core.getElementTreeXPath = function(element) { - var paths = []; - var isXhtml = (element.ownerDocument.documentElement.getAttribute('xmlns') === "http://www.w3.org/1999/xhtml"); - var index, nodeName, tagName, pathIndex; - - if(element.nodeType === Node.TEXT_NODE){ - // index = Array.prototype.indexOf.call(element.parentNode.childNodes, element) + 1; - index = EPUBJS.core.indexOfTextNode(element) + 1; - - paths.push("text()["+index+"]"); - element = element.parentNode; - } - - // Use nodeName (instead of localName) so namespace prefix is included (if any). - for (; element && element.nodeType == 1; element = element.parentNode) - { - index = 0; - for (var sibling = element.previousSibling; sibling; sibling = sibling.previousSibling) - { - // Ignore document type declaration. - if (sibling.nodeType == Node.DOCUMENT_TYPE_NODE) { - continue; - } - if (sibling.nodeName == element.nodeName) { - ++index; - } - } - nodeName = element.nodeName.toLowerCase(); - tagName = (isXhtml ? "xhtml:" + nodeName : nodeName); - pathIndex = (index ? "[" + (index+1) + "]" : ""); - paths.splice(0, 0, tagName + pathIndex); - } - - return paths.length ? "./" + paths.join("/") : null; -}; - -EPUBJS.core.nsResolver = function(prefix) { - var ns = { - 'xhtml' : 'http://www.w3.org/1999/xhtml', - 'epub': 'http://www.idpf.org/2007/ops' - }; - return ns[prefix] || null; -}; - -//https://stackoverflow.com/questions/13482352/xquery-looking-for-text-with-single-quote/13483496#13483496 -EPUBJS.core.cleanStringForXpath = function(str) { - var parts = str.match(/[^'"]+|['"]/g); - parts = parts.map(function(part){ - if (part === "'") { - return '\"\'\"'; // output "'" - } - - if (part === '"') { - return "\'\"\'"; // output '"' - } - return "\'" + part + "\'"; - }); - return "concat(\'\'," + parts.join(",") + ")"; -}; - -EPUBJS.core.indexOfTextNode = function(textNode){ - var parent = textNode.parentNode; - var children = parent.childNodes; - var sib; - var index = -1; - for (var i = 0; i < children.length; i++) { - sib = children[i]; - if(sib.nodeType === Node.TEXT_NODE){ - index++; - } - if(sib == textNode) break; - } - - return index; -}; -EPUBJS.EpubCFI = function(cfiStr){ - if(cfiStr) return this.parse(cfiStr); -}; - -EPUBJS.EpubCFI.prototype.generateChapterComponent = function(_spineNodeIndex, _pos, id) { - var pos = parseInt(_pos), - spineNodeIndex = _spineNodeIndex + 1, - cfi = '/'+spineNodeIndex+'/'; - - cfi += (pos + 1) * 2; - - if(id) cfi += "[" + id + "]"; - - //cfi += "!"; - - return cfi; -}; - -EPUBJS.EpubCFI.prototype.generatePathComponent = function(steps) { - var parts = []; - - steps.forEach(function(part){ - var segment = ''; - segment += (part.index + 1) * 2; - - if(part.id) { - segment += "[" + part.id + "]"; - } - - parts.push(segment); - }); - - return parts.join('/'); -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromElement = function(element, chapter) { - var steps = this.pathTo(element); - var path = this.generatePathComponent(steps); - if(!path.length) { - // Start of Chapter - return "epubcfi(" + chapter + "!/4/)"; - } else { - // First Text Node - return "epubcfi(" + chapter + "!" + path + "/1:0)"; - } -}; - -EPUBJS.EpubCFI.prototype.pathTo = function(node) { - var stack = [], - children; - - while(node && node.parentNode !== null && node.parentNode.nodeType != 9) { - children = node.parentNode.children; - - stack.unshift({ - 'id' : node.id, - // 'classList' : node.classList, - 'tagName' : node.tagName, - 'index' : children ? Array.prototype.indexOf.call(children, node) : 0 - }); - - node = node.parentNode; - } - - return stack; -}; - -EPUBJS.EpubCFI.prototype.getChapterComponent = function(cfiStr) { - - var splitStr = cfiStr.split("!"); - - return splitStr[0]; -}; - -EPUBJS.EpubCFI.prototype.getPathComponent = function(cfiStr) { - - var splitStr = cfiStr.split("!"); - var pathComponent = splitStr[1] ? splitStr[1].split(":") : ''; - - return pathComponent[0]; -}; - -EPUBJS.EpubCFI.prototype.getCharecterOffsetComponent = function(cfiStr) { - var splitStr = cfiStr.split(":"); - return splitStr[1] || ''; -}; - - -EPUBJS.EpubCFI.prototype.parse = function(cfiStr) { - var cfi = {}, - chapSegment, - chapterComponent, - pathComponent, - charecterOffsetComponent, - assertion, - chapId, - path, - end, - endInt, - text, - parseStep = function(part){ - var type, index, has_brackets, id; - - type = "element"; - index = parseInt(part) / 2 - 1; - has_brackets = part.match(/\[(.*)\]/); - if(has_brackets && has_brackets[1]){ - id = has_brackets[1]; - } - - return { - "type" : type, - 'index' : index, - 'id' : id || false - }; - }; - - if(typeof cfiStr !== "string") { - return {spinePos: -1}; - } - - cfi.str = cfiStr; - - if(cfiStr.indexOf("epubcfi(") === 0 && cfiStr[cfiStr.length-1] === ")") { - // Remove intial epubcfi( and ending ) - cfiStr = cfiStr.slice(8, cfiStr.length-1); - } - - chapterComponent = this.getChapterComponent(cfiStr); - pathComponent = this.getPathComponent(cfiStr) || ''; - charecterOffsetComponent = this.getCharecterOffsetComponent(cfiStr); - // Make sure this is a valid cfi or return - if(!chapterComponent) { - return {spinePos: -1}; - } - - // Chapter segment is always the second one - chapSegment = chapterComponent.split("/")[2] || ''; - if(!chapSegment) return {spinePos:-1}; - - cfi.spinePos = (parseInt(chapSegment) / 2 - 1 ) || 0; - - chapId = chapSegment.match(/\[(.*)\]/); - - cfi.spineId = chapId ? chapId[1] : false; - - if(pathComponent.indexOf(',') != -1) { - // Handle ranges -- not supported yet - console.warn("CFI Ranges are not supported"); - } - - path = pathComponent.split('/'); - end = path.pop(); - - cfi.steps = []; - - path.forEach(function(part){ - var step; - - if(part) { - step = parseStep(part); - cfi.steps.push(step); - } - }); - - //-- Check if END is a text node or element - endInt = parseInt(end); - if(!isNaN(endInt)) { - - if(endInt % 2 === 0) { // Even = is an element - cfi.steps.push(parseStep(end)); - } else { - cfi.steps.push({ - "type" : "text", - 'index' : (endInt - 1 ) / 2 - }); - } - - } - - assertion = charecterOffsetComponent.match(/\[(.*)\]/); - if(assertion && assertion[1]){ - cfi.characterOffset = parseInt(charecterOffsetComponent.split('[')[0]); - // We arent handling these assertions yet - cfi.textLocationAssertion = assertion[1]; - } else { - cfi.characterOffset = parseInt(charecterOffsetComponent); - } - - return cfi; -}; - -EPUBJS.EpubCFI.prototype.addMarker = function(cfi, _doc, _marker) { - var doc = _doc || document; - var marker = _marker || this.createMarker(doc); - var parent; - var lastStep; - var text; - var split; - - if(typeof cfi === 'string') { - cfi = this.parse(cfi); - } - // Get the terminal step - lastStep = cfi.steps[cfi.steps.length-1]; - - // check spinePos - if(cfi.spinePos === -1) { - // Not a valid CFI - return false; - } - - // Find the CFI elements parent - parent = this.findParent(cfi, doc); - - if(!parent) { - // CFI didn't return an element - // Maybe it isnt in the current chapter? - return false; - } - - if(lastStep && lastStep.type === "text") { - text = parent.childNodes[lastStep.index]; - if(cfi.characterOffset){ - split = text.splitText(cfi.characterOffset); - marker.classList.add("EPUBJS-CFI-SPLIT"); - parent.insertBefore(marker, split); - } else { - parent.insertBefore(marker, text); - } - } else { - parent.insertBefore(marker, parent.firstChild); - } - - return marker; -}; - -EPUBJS.EpubCFI.prototype.createMarker = function(_doc) { - var doc = _doc || document; - var element = doc.createElement('span'); - element.id = "EPUBJS-CFI-MARKER:"+ EPUBJS.core.uuid(); - element.classList.add("EPUBJS-CFI-MARKER"); - - return element; -}; - -EPUBJS.EpubCFI.prototype.removeMarker = function(marker, _doc) { - var doc = _doc || document; - // var id = marker.id; - - // Cleanup textnodes if they were split - if(marker.classList.contains("EPUBJS-CFI-SPLIT")){ - nextSib = marker.nextSibling; - prevSib = marker.previousSibling; - if(nextSib && - prevSib && - nextSib.nodeType === 3 && - prevSib.nodeType === 3){ - - prevSib.textContent += nextSib.textContent; - marker.parentNode.removeChild(nextSib); - } - marker.parentNode.removeChild(marker); - } else if(marker.classList.contains("EPUBJS-CFI-MARKER")) { - // Remove only elements added as markers - marker.parentNode.removeChild(marker); - } - -}; - -EPUBJS.EpubCFI.prototype.findParent = function(cfi, _doc) { - var doc = _doc || document, - element = doc.getElementsByTagName('html')[0], - children = Array.prototype.slice.call(element.children), - num, index, part, sections, - text, textBegin, textEnd; - - if(typeof cfi === 'string') { - cfi = this.parse(cfi); - } - - sections = cfi.steps.slice(0); // Clone steps array - if(!sections.length) { - return doc.getElementsByTagName('body')[0]; - } - - while(sections && sections.length > 0) { - part = sections.shift(); - // Find textNodes Parent - if(part.type === "text") { - text = element.childNodes[part.index]; - element = text.parentNode || element; - // Find element by id if present - } else if(part.id){ - element = doc.getElementById(part.id); - // Find element in parent - }else{ - element = children[part.index]; - } - // Element can't be found - if(typeof element === "undefined") { - console.error("No Element For", part, cfi.str); - return false; - } - // Get current element children and continue through steps - children = Array.prototype.slice.call(element.children); - } - - return element; -}; - -EPUBJS.EpubCFI.prototype.compare = function(cfiOne, cfiTwo) { - if(typeof cfiOne === 'string') { - cfiOne = new EPUBJS.EpubCFI(cfiOne); - } - if(typeof cfiTwo === 'string') { - cfiTwo = new EPUBJS.EpubCFI(cfiTwo); - } - // Compare Spine Positions - if(cfiOne.spinePos > cfiTwo.spinePos) { - return 1; - } - if(cfiOne.spinePos < cfiTwo.spinePos) { - return -1; - } - - - // Compare Each Step in the First item - for (var i = 0; i < cfiOne.steps.length; i++) { - if(!cfiTwo.steps[i]) { - return 1; - } - if(cfiOne.steps[i].index > cfiTwo.steps[i].index) { - return 1; - } - if(cfiOne.steps[i].index < cfiTwo.steps[i].index) { - return -1; - } - // Otherwise continue checking - } - - // All steps in First present in Second - if(cfiOne.steps.length < cfiTwo.steps.length) { - return -1; - } - - // Compare the charecter offset of the text node - if(cfiOne.characterOffset > cfiTwo.characterOffset) { - return 1; - } - if(cfiOne.characterOffset < cfiTwo.characterOffset) { - return -1; - } - - // CFI's are equal - return 0; -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromHref = function(href, book) { - var uri = EPUBJS.core.uri(href); - var path = uri.path; - var fragment = uri.fragment; - var spinePos = book.spineIndexByURL[path]; - var loaded; - var deferred = new RSVP.defer(); - var epubcfi = new EPUBJS.EpubCFI(); - var spineItem; - - if(typeof spinePos !== "undefined"){ - spineItem = book.spine[spinePos]; - loaded = book.loadXml(spineItem.url); - loaded.then(function(doc){ - var element = doc.getElementById(fragment); - var cfi; - cfi = epubcfi.generateCfiFromElement(element, spineItem.cfiBase); - deferred.resolve(cfi); - }); - } - - return deferred.promise; -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromTextNode = function(anchor, offset, base) { - var parent = anchor.parentNode; - var steps = this.pathTo(parent); - var path = this.generatePathComponent(steps); - var index = 1 + (2 * Array.prototype.indexOf.call(parent.childNodes, anchor)); - return "epubcfi(" + base + "!" + path + "/"+index+":"+(offset || 0)+")"; -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromRangeAnchor = function(range, base) { - var anchor = range.anchorNode; - var offset = range.anchorOffset; - return this.generateCfiFromTextNode(anchor, offset, base); -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromRange = function(range, base) { - var start, startElement, startSteps, startPath, startOffset, startIndex; - var end, endElement, endSteps, endPath, endOffset, endIndex; - - start = range.startContainer; - - if(start.nodeType === 3) { // text node - startElement = start.parentNode; - //startIndex = 1 + (2 * Array.prototype.indexOf.call(startElement.childNodes, start)); - startIndex = 1 + (2 * EPUBJS.core.indexOfTextNode(start)); - startSteps = this.pathTo(startElement); - } else if(range.collapsed) { - return this.generateCfiFromElement(start, base); // single element - } else { - startSteps = this.pathTo(start); - } - - startPath = this.generatePathComponent(startSteps); - startOffset = range.startOffset; - - if(!range.collapsed) { - end = range.endContainer; - - if(end.nodeType === 3) { // text node - endElement = end.parentNode; - // endIndex = 1 + (2 * Array.prototype.indexOf.call(endElement.childNodes, end)); - endIndex = 1 + (2 * EPUBJS.core.indexOfTextNode(end)); - - endSteps = this.pathTo(endElement); - } else { - endSteps = this.pathTo(end); - } - - endPath = this.generatePathComponent(endSteps); - endOffset = range.endOffset; - - return "epubcfi(" + base + "!" + startPath + "/" + startIndex + ":" + startOffset + "," + endPath + "/" + endIndex + ":" + endOffset + ")"; - - } else { - return "epubcfi(" + base + "!" + startPath + "/"+ startIndex +":"+ startOffset +")"; - } -}; - -EPUBJS.EpubCFI.prototype.generateXpathFromSteps = function(steps) { - var xpath = [".", "*"]; - - steps.forEach(function(step){ - var position = step.index + 1; - - if(step.id){ - xpath.push("*[position()=" + position + " and @id='" + step.id + "']"); - } else if(step.type === "text") { - xpath.push("text()[" + position + "]"); - } else { - xpath.push("*[" + position + "]"); - } - }); - - return xpath.join("/"); -}; - - -EPUBJS.EpubCFI.prototype.generateRangeFromCfi = function(cfi, _doc) { - var doc = _doc || document; - var range = doc.createRange(); - var lastStep; - var xpath; - var startContainer; - var textLength; - - if(typeof cfi === 'string') { - cfi = this.parse(cfi); - } - - // check spinePos - if(cfi.spinePos === -1) { - // Not a valid CFI - return false; - } - - xpath = this.generateXpathFromSteps(cfi.steps); - - // Get the terminal step - lastStep = cfi.steps[cfi.steps.length-1]; - startContainer = doc.evaluate(xpath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - - if(!startContainer) { - return null; - } - - if(startContainer && cfi.characterOffset >= 0) { - textLength = startContainer.length; - - if(cfi.characterOffset < textLength) { - range.setStart(startContainer, cfi.characterOffset); - range.setEnd(startContainer, textLength ); - } else { - console.debug("offset greater than length:", cfi.characterOffset, textLength); - range.setStart(startContainer, textLength - 1 ); - range.setEnd(startContainer, textLength ); - } - } else if(startContainer) { - range.selectNode(startContainer); - } - // doc.defaultView.getSelection().addRange(range); - return range; -}; - -EPUBJS.Events = function(obj, el){ - - this.events = {}; - - if(!el){ - this.el = document.createElement('div'); - }else{ - this.el = el; - } - - obj.createEvent = this.createEvent; - obj.tell = this.tell; - obj.listen = this.listen; - obj.deafen = this.deafen; - obj.listenUntil = this.listenUntil; - - return this; -}; - -EPUBJS.Events.prototype.createEvent = function(evt){ - var e = new CustomEvent(evt); - this.events[evt] = e; - return e; -}; - -EPUBJS.Events.prototype.tell = function(evt, msg){ - var e; - - if(!this.events[evt]){ - console.warn("No event:", evt, "defined yet, creating."); - e = this.createEvent(evt); - }else{ - e = this.events[evt]; - } - - if(msg) e.msg = msg; - this.el.dispatchEvent(e); - -}; - -EPUBJS.Events.prototype.listen = function(evt, func, bindto){ - if(!this.events[evt]){ - console.warn("No event:", evt, "defined yet, creating."); - this.createEvent(evt); - return; - } - - if(bindto){ - this.el.addEventListener(evt, func.bind(bindto), false); - }else{ - this.el.addEventListener(evt, func, false); - } - -}; - -EPUBJS.Events.prototype.deafen = function(evt, func){ - this.el.removeEventListener(evt, func, false); -}; - -EPUBJS.Events.prototype.listenUntil = function(OnEvt, OffEvt, func, bindto){ - this.listen(OnEvt, func, bindto); - - function unlisten(){ - this.deafen(OnEvt, func); - this.deafen(OffEvt, unlisten); - } - - this.listen(OffEvt, unlisten, this); -}; -EPUBJS.hooks = {}; -EPUBJS.Hooks = (function(){ - function hooks(){} - - //-- Get pre-registered hooks - hooks.prototype.getHooks = function(){ - var plugs; - this.hooks = {}; - Array.prototype.slice.call(arguments).forEach(function(arg){ - this.hooks[arg] = []; - }, this); - - for (var plugType in this.hooks) { - plugs = _.values(EPUBJS.hooks[plugType]); - - plugs.forEach(function(hook){ - this.registerHook(plugType, hook); - }, this); - } - }; - - //-- Hooks allow for injecting async functions that must all complete before continuing - // Functions must have a callback as their first argument. - hooks.prototype.registerHook = function(type, toAdd, toFront){ - - if(typeof(this.hooks[type]) != "undefined"){ - - if(typeof(toAdd) === "function"){ - if(toFront) { - this.hooks[type].unshift(toAdd); - }else{ - this.hooks[type].push(toAdd); - } - }else if(Array.isArray(toAdd)){ - toAdd.forEach(function(hook){ - if(toFront) { - this.hooks[type].unshift(hook); - }else{ - this.hooks[type].push(hook); - } - }, this); - } - }else{ - //-- Allows for undefined hooks, but maybe this should error? - this.hooks[type] = [func]; - } - }; - - hooks.prototype.triggerHooks = function(type, callback, passed){ - var hooks, count; - - if(typeof(this.hooks[type]) == "undefined") return false; - - hooks = this.hooks[type]; - - count = hooks.length; - if(count === 0 && callback) { - callback(); - } - - function countdown(){ - count--; - if(count <= 0 && callback) callback(); - } - - hooks.forEach(function(hook){ - hook(countdown, passed); - }); - }; - - return { - register: function(name) { - if(EPUBJS.hooks[name] === undefined) { EPUBJS.hooks[name] = {}; } - if(typeof EPUBJS.hooks[name] !== 'object') { throw "Already registered: "+name; } - return EPUBJS.hooks[name]; - }, - mixin: function(object) { - for (var prop in hooks.prototype) { - object[prop] = hooks.prototype[prop]; - } - } - }; -})(); - - -EPUBJS.Layout = EPUBJS.Layout || {}; - -EPUBJS.Layout.Reflowable = function(){ - this.documentElement = null; - this.spreadWidth = null; -}; - -EPUBJS.Layout.Reflowable.prototype.format = function(documentElement, _width, _height, _gap){ - // Get the prefixed CSS commands - var columnAxis = EPUBJS.core.prefixed('columnAxis'); - var columnGap = EPUBJS.core.prefixed('columnGap'); - var columnWidth = EPUBJS.core.prefixed('columnWidth'); - var columnFill = EPUBJS.core.prefixed('columnFill'); - - //-- Check the width and create even width columns - var width = Math.floor(_width); - // var width = (fullWidth % 2 === 0) ? fullWidth : fullWidth - 0; // Not needed for single - var section = Math.floor(width / 8); - var gap = (_gap >= 0) ? _gap : ((section % 2 === 0) ? section : section - 1); - this.documentElement = documentElement; - //-- Single Page - this.spreadWidth = (width + gap); - - - documentElement.style.overflow = "hidden"; - - // Must be set to the new calculated width or the columns will be off - documentElement.style.width = width + "px"; - - //-- Adjust height - documentElement.style.height = _height + "px"; - - //-- Add columns - documentElement.style[columnAxis] = "horizontal"; - documentElement.style[columnFill] = "auto"; - documentElement.style[columnWidth] = width+"px"; - documentElement.style[columnGap] = gap+"px"; - this.colWidth = width; - this.gap = gap; - - return { - pageWidth : this.spreadWidth, - pageHeight : _height - }; -}; - -EPUBJS.Layout.Reflowable.prototype.calculatePages = function() { - var totalWidth, displayedPages; - this.documentElement.style.width = "auto"; //-- reset width for calculations - totalWidth = this.documentElement.scrollWidth; - displayedPages = Math.ceil(totalWidth / this.spreadWidth); - - return { - displayedPages : displayedPages, - pageCount : displayedPages - }; -}; - -EPUBJS.Layout.ReflowableSpreads = function(){ - this.documentElement = null; - this.spreadWidth = null; -}; - -EPUBJS.Layout.ReflowableSpreads.prototype.format = function(documentElement, _width, _height, _gap){ - var columnAxis = EPUBJS.core.prefixed('columnAxis'); - var columnGap = EPUBJS.core.prefixed('columnGap'); - var columnWidth = EPUBJS.core.prefixed('columnWidth'); - var columnFill = EPUBJS.core.prefixed('columnFill'); - - var divisor = 2, - cutoff = 800; - - //-- Check the width and create even width columns - var fullWidth = Math.floor(_width); - var width = (fullWidth % 2 === 0) ? fullWidth : fullWidth - 1; - - var section = Math.floor(width / 8); - var gap = (_gap >= 0) ? _gap : ((section % 2 === 0) ? section : section - 1); - - //-- Double Page - var colWidth = Math.floor((width - gap) / divisor); - - this.documentElement = documentElement; - this.spreadWidth = (colWidth + gap) * divisor; - - - documentElement.style.overflow = "hidden"; - - // Must be set to the new calculated width or the columns will be off - documentElement.style.width = width + "px"; - - //-- Adjust height - documentElement.style.height = _height + "px"; - - //-- Add columns - documentElement.style[columnAxis] = "horizontal"; - documentElement.style[columnFill] = "auto"; - documentElement.style[columnGap] = gap+"px"; - documentElement.style[columnWidth] = colWidth+"px"; - - this.colWidth = colWidth; - this.gap = gap; - return { - pageWidth : this.spreadWidth, - pageHeight : _height - }; -}; - -EPUBJS.Layout.ReflowableSpreads.prototype.calculatePages = function() { - var totalWidth = this.documentElement.scrollWidth; - var displayedPages = Math.ceil(totalWidth / this.spreadWidth); - - //-- Add a page to the width of the document to account an for odd number of pages - this.documentElement.style.width = totalWidth + this.spreadWidth + "px"; - return { - displayedPages : displayedPages, - pageCount : displayedPages * 2 - }; -}; - -EPUBJS.Layout.Fixed = function(){ - this.documentElement = null; -}; - -EPUBJS.Layout.Fixed = function(documentElement, _width, _height, _gap){ - var columnWidth = EPUBJS.core.prefixed('columnWidth'); - var viewport = documentElement.querySelector("[name=viewport"); - var content; - var contents; - var width, height; - - this.documentElement = documentElement; - /** - * check for the viewport size - * - */ - if(viewport && viewport.hasAttribute("content")) { - content = viewport.getAttribute("content"); - contents = content.split(','); - if(contents[0]){ - width = contents[0].replace("width=", ''); - } - if(contents[1]){ - height = contents[1].replace("height=", ''); - } - } - - //-- Adjust width and height - documentElement.style.width = width + "px" || "auto"; - documentElement.style.height = height + "px" || "auto"; - - //-- Remove columns - documentElement.style[columnWidth] = "auto"; - - //-- Scroll - documentElement.style.overflow = "auto"; - - this.colWidth = width; - this.gap = 0; - - return { - pageWidth : width, - pageHeight : height - }; - -}; - -EPUBJS.Layout.Fixed.prototype.calculatePages = function(){ - return { - displayedPages : 1, - pageCount : 1 - }; -}; - -EPUBJS.Pagination = function(pageList) { - this.pages = []; - this.locations = []; - this.epubcfi = new EPUBJS.EpubCFI(); - if(pageList && pageList.length) { - this.process(pageList); - } -}; - -EPUBJS.Pagination.prototype.process = function(pageList){ - pageList.forEach(function(item){ - this.pages.push(item.page); - this.locations.push(item.cfi); - }, this); - - this.pageList = pageList; - this.firstPage = parseInt(this.pages[0]); - this.lastPage = parseInt(this.pages[this.pages.length-1]); - this.totalPages = this.lastPage - this.firstPage; -}; - -EPUBJS.Pagination.prototype.pageFromCfi = function(cfi){ - var pg = -1; - - // Check if the pageList has not been set yet - if(this.locations.length === 0) { - return -1; - } - - // TODO: check if CFI is valid? - - // check if the cfi is in the location list - // var index = this.locations.indexOf(cfi); - var index = EPUBJS.core.indexOfSorted(cfi, this.locations, this.epubcfi.compare); - if(index != -1 && index < (this.pages.length-1) ) { - pg = this.pages[index]; - } else { - // Otherwise add it to the list of locations - // Insert it in the correct position in the locations page - //index = EPUBJS.core.insert(cfi, this.locations, this.epubcfi.compare); - index = EPUBJS.core.locationOf(cfi, this.locations, this.epubcfi.compare); - // Get the page at the location just before the new one, or return the first - pg = index-1 >= 0 ? this.pages[index-1] : this.pages[0]; - pg = this.pages[index]; - if(pg !== undefined) { - // Add the new page in so that the locations and page array match up - //this.pages.splice(index, 0, pg); - } else { - pg = -1; - } - - } - return pg; -}; - -EPUBJS.Pagination.prototype.cfiFromPage = function(pg){ - var cfi = -1; - // check that pg is an int - if(typeof pg != "number"){ - pg = parseInt(pg); - } - - // check if the cfi is in the page list - // Pages could be unsorted. - var index = this.pages.indexOf(pg); - if(index != -1) { - cfi = this.locations[index]; - } - // TODO: handle pages not in the list - return cfi; -}; - -EPUBJS.Pagination.prototype.pageFromPercentage = function(percent){ - var pg = Math.round(this.totalPages * percent); - return pg; -}; - -// Returns a value between 0 - 1 corresponding to the location of a page -EPUBJS.Pagination.prototype.percentageFromPage = function(pg){ - var percentage = (pg - this.firstPage) / this.totalPages; - return Math.round(percentage * 1000) / 1000; -}; - -// Returns a value between 0 - 1 corresponding to the location of a cfi -EPUBJS.Pagination.prototype.percentageFromCfi = function(cfi){ - var pg = this.pageFromCfi(cfi); - var percentage = this.percentageFromPage(pg); - return percentage; -}; -EPUBJS.Parser = function(baseUrl){ - this.baseUrl = baseUrl || ''; -}; - -EPUBJS.Parser.prototype.container = function(containerXml){ - //-- - var rootfile, fullpath, folder, encoding; - - if(!containerXml) { - console.error("Container File Not Found"); - return; - } - - rootfile = containerXml.querySelector("rootfile"); - - if(!rootfile) { - console.error("No RootFile Found"); - return; - } - - fullpath = rootfile.getAttribute('full-path'); - folder = EPUBJS.core.uri(fullpath).directory; - encoding = containerXml.xmlEncoding; - - //-- Now that we have the path we can parse the contents - return { - 'packagePath' : fullpath, - 'basePath' : folder, - 'encoding' : encoding - }; -}; - -EPUBJS.Parser.prototype.identifier = function(packageXml){ - var metadataNode; - - if(!packageXml) { - console.error("Package File Not Found"); - return; - } - - metadataNode = packageXml.querySelector("metadata"); - - if(!metadataNode) { - console.error("No Metadata Found"); - return; - } - - return this.getElementText(metadataNode, "identifier"); -}; - -EPUBJS.Parser.prototype.packageContents = function(packageXml, baseUrl){ - var parse = this; - var metadataNode, manifestNode, spineNode; - var manifest, navPath, tocPath, coverPath; - var spineNodeIndex; - var spine; - var spineIndexByURL; - - if(baseUrl) this.baseUrl = baseUrl; - - if(!packageXml) { - console.error("Package File Not Found"); - return; - } - - metadataNode = packageXml.querySelector("metadata"); - if(!metadataNode) { - console.error("No Metadata Found"); - return; - } - - manifestNode = packageXml.querySelector("manifest"); - if(!manifestNode) { - console.error("No Manifest Found"); - return; - } - - spineNode = packageXml.querySelector("spine"); - if(!spineNode) { - console.error("No Spine Found"); - return; - } - - manifest = parse.manifest(manifestNode); - navPath = parse.findNavPath(manifestNode); - tocPath = parse.findTocPath(manifestNode); - coverPath = parse.findCoverPath(manifestNode); - - spineNodeIndex = Array.prototype.indexOf.call(spineNode.parentNode.childNodes, spineNode); - - spine = parse.spine(spineNode, manifest); - - spineIndexByURL = {}; - spine.forEach(function(item){ - spineIndexByURL[item.href] = item.index; - }); - - return { - 'metadata' : parse.metadata(metadataNode), - 'spine' : spine, - 'manifest' : manifest, - 'navPath' : navPath, - 'tocPath' : tocPath, - 'coverPath': coverPath, - 'spineNodeIndex' : spineNodeIndex, - 'spineIndexByURL' : spineIndexByURL - }; -}; - -//-- Find TOC NAV: media-type="application/xhtml+xml" href="toc.ncx" -EPUBJS.Parser.prototype.findNavPath = function(manifestNode){ - var node = manifestNode.querySelector("item[properties^='nav']"); - return node ? node.getAttribute('href') : false; -}; - -//-- Find TOC NCX: media-type="application/x-dtbncx+xml" href="toc.ncx" -EPUBJS.Parser.prototype.findTocPath = function(manifestNode){ - var node = manifestNode.querySelector("item[media-type='application/x-dtbncx+xml']"); - return node ? node.getAttribute('href') : false; -}; - -//-- Find Cover: -EPUBJS.Parser.prototype.findCoverPath = function(manifestNode){ - var node = manifestNode.querySelector("item[properties='cover-image']"); - return node ? node.getAttribute('href') : false; -}; - -//-- Expanded to match Readium web components -EPUBJS.Parser.prototype.metadata = function(xml){ - var metadata = {}, - p = this; - - metadata.bookTitle = p.getElementText(xml, 'title'); - metadata.creator = p.getElementText(xml, 'creator'); - metadata.description = p.getElementText(xml, 'description'); - - metadata.pubdate = p.getElementText(xml, 'date'); - - metadata.publisher = p.getElementText(xml, 'publisher'); - - metadata.identifier = p.getElementText(xml, "identifier"); - metadata.language = p.getElementText(xml, "language"); - metadata.rights = p.getElementText(xml, "rights"); - - metadata.modified_date = p.querySelectorText(xml, "meta[property='dcterms:modified']"); - metadata.layout = p.querySelectorText(xml, "meta[property='rendition:layout']"); - metadata.orientation = p.querySelectorText(xml, "meta[property='rendition:orientation']"); - metadata.spread = p.querySelectorText(xml, "meta[property='rendition:spread']"); - // metadata.page_prog_dir = packageXml.querySelector("spine").getAttribute("page-progression-direction"); - - return metadata; -}; - -EPUBJS.Parser.prototype.getElementText = function(xml, tag){ - var found = xml.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/", tag), - el; - - if(!found || found.length === 0) return ''; - - el = found[0]; - - if(el.childNodes.length){ - return el.childNodes[0].nodeValue; - } - - return ''; - -}; - -EPUBJS.Parser.prototype.querySelectorText = function(xml, q){ - var el = xml.querySelector(q); - - if(el && el.childNodes.length){ - return el.childNodes[0].nodeValue; - } - - return ''; -}; - -EPUBJS.Parser.prototype.manifest = function(manifestXml){ - var baseUrl = this.baseUrl, - manifest = {}; - - //-- Turn items into an array - var selected = manifestXml.querySelectorAll("item"), - items = Array.prototype.slice.call(selected); - - //-- Create an object with the id as key - items.forEach(function(item){ - var id = item.getAttribute('id'), - href = item.getAttribute('href') || '', - type = item.getAttribute('media-type') || '', - properties = item.getAttribute('properties') || ''; - - manifest[id] = { - 'href' : href, - 'url' : baseUrl + href, //-- Absolute URL for loading with a web worker - 'type' : type, - 'properties' : properties - }; - - }); - - return manifest; - -}; - -EPUBJS.Parser.prototype.spine = function(spineXml, manifest){ - var spine = []; - - var selected = spineXml.getElementsByTagName("itemref"), - items = Array.prototype.slice.call(selected); - - var spineNodeIndex = Array.prototype.indexOf.call(spineXml.parentNode.childNodes, spineXml); - - var epubcfi = new EPUBJS.EpubCFI(); - - //-- Add to array to mantain ordering and cross reference with manifest - items.forEach(function(item, index){ - var Id = item.getAttribute('idref'); - var cfiBase = epubcfi.generateChapterComponent(spineNodeIndex, index, Id); - var props = item.getAttribute('properties') || ''; - var propArray = props.length ? props.split(' ') : []; - var manifestProps = manifest[Id].properties; - var manifestPropArray = manifestProps.length ? manifestProps.split(' ') : []; - var vert = { - 'id' : Id, - 'linear' : item.getAttribute('linear') || '', - 'properties' : propArray, - 'manifestProperties' : manifestPropArray, - 'href' : manifest[Id].href, - 'url' : manifest[Id].url, - 'index' : index, - 'cfiBase' : cfiBase, - 'cfi' : "epub(" + cfiBase + ")" - }; - spine.push(vert); - }); - - return spine; -}; - -EPUBJS.Parser.prototype.nav = function(navHtml, spineIndexByURL, bookSpine){ - var navEl = navHtml.querySelector('nav[*|type="toc"]'), //-- [*|type="toc"] * Doesn't seem to work - idCounter = 0; - - if(!navEl) return []; - - // Implements `> ol > li` - function findListItems(parent){ - var items = []; - - Array.prototype.slice.call(parent.childNodes).forEach(function(node){ - if('ol' == node.tagName){ - Array.prototype.slice.call(node.childNodes).forEach(function(item){ - if('li' == item.tagName){ - items.push(item); - } - }); - } - }); - - return items; - - } - - // Implements `> a, > span` - function findAnchorOrSpan(parent){ - var item = null; - - Array.prototype.slice.call(parent.childNodes).forEach(function(node){ - if('a' == node.tagName || 'span' == node.tagName){ - item = node; - } - }); - - return item; - } - - function getTOC(parent){ - var list = [], - nodes = findListItems(parent), - items = Array.prototype.slice.call(nodes), - length = items.length, - node; - - if(length === 0) return false; - - items.forEach(function(item){ - var id = item.getAttribute('id') || false, - content = findAnchorOrSpan(item), - href = content.getAttribute('href') || '', - text = content.textContent || "", - split = href.split("#"), - baseUrl = split[0], - subitems = getTOC(item), - spinePos = spineIndexByURL[baseUrl], - spineItem = bookSpine[spinePos], - cfi = spineItem ? spineItem.cfi : ''; - - if(!id) { - if(spinePos) { - spineItem = bookSpine[spinePos]; - id = spineItem.id; - cfi = spineItem.cfi; - } else { - id = 'epubjs-autogen-toc-id-' + (idCounter++); - } - } - - item.setAttribute('id', id); // Ensure all elements have an id - list.push({ - "id": id, - "href": href, - "label": text, - "subitems" : subitems, - "parent" : parent ? parent.getAttribute('id') : null, - "cfi" : cfi - }); - - }); - - return list; - } - - return getTOC(navEl); -}; - -EPUBJS.Parser.prototype.toc = function(tocXml, spineIndexByURL, bookSpine){ - var navMap = tocXml.querySelector("navMap"); - if(!navMap) return []; - - function getTOC(parent){ - var list = [], - nodes = parent.querySelectorAll("navPoint"), - items = Array.prototype.slice.call(nodes).reverse(), - length = items.length, - iter = length, - node; - - if(length === 0) return []; - - items.forEach(function(item){ - var id = item.getAttribute('id') || false, - content = item.querySelector("content"), - src = content.getAttribute('src'), - navLabel = item.querySelector("navLabel"), - text = navLabel.textContent ? navLabel.textContent : "", - split = src.split("#"), - baseUrl = split[0], - spinePos = spineIndexByURL[baseUrl], - spineItem = bookSpine[spinePos], - subitems = getTOC(item), - cfi = spineItem ? spineItem.cfi : ''; - - if(!id) { - if(spinePos) { - spineItem = bookSpine[spinePos]; - id = spineItem.id; - cfi = spineItem.cfi; - } else { - id = 'epubjs-autogen-toc-id-' + (idCounter++); - } - } - - - list.unshift({ - "id": id, - "href": src, - "label": text, - "spinePos": spinePos, - "subitems" : subitems, - "parent" : parent ? parent.getAttribute('id') : null, - "cfi" : cfi - }); - - }); - - return list; - } - - return getTOC(navMap); -}; - -EPUBJS.Parser.prototype.pageList = function(navHtml, spineIndexByURL, bookSpine){ - var navEl = navHtml.querySelector('nav[*|type="page-list"]'), - idCounter = 0; - - if(!navEl) return []; - - // Implements `> ol > li` - function findListItems(parent){ - var items = []; - - Array.prototype.slice.call(parent.childNodes).forEach(function(node){ - if('ol' == node.tagName){ - Array.prototype.slice.call(node.childNodes).forEach(function(item){ - if('li' == item.tagName){ - items.push(item); - } - }); - } - }); - - return items; - - } - - // Implements `> a, > span` - function findAnchorOrSpan(parent){ - var item = null; - - Array.prototype.slice.call(parent.childNodes).forEach(function(node){ - if('a' == node.tagName || 'span' == node.tagName){ - item = node; - } - }); - - return item; - } - - function getPages(parent){ - var list = [], - nodes = findListItems(parent), - items = Array.prototype.slice.call(nodes), - length = items.length, - node; - - if(length === 0) return false; - - items.forEach(function(item){ - var id = item.getAttribute('id') || false, - content = findAnchorOrSpan(item), - href = content.getAttribute('href') || '', - text = content.textContent || "", - page = parseInt(text), - isCfi = href.indexOf("epubcfi"), - split, - packageUrl, - cfi; - - if(isCfi != -1) { - split = href.split("#"); - packageUrl = split[0]; - cfi = split.length > 1 ? split[1] : false; - list.push({ - "cfi" : cfi, - "href" : href, - "packageUrl" : packageUrl, - "page" : page - }); - } else { - list.push({ - "href" : href, - "page" : page - }); - } - - }); - - return list; - } - - return getPages(navEl); -}; - -EPUBJS.Render.Iframe = function() { - this.iframe = null; - this.document = null; - this.window = null; - this.docEl = null; - this.bodyEl = null; - - this.leftPos = 0; - this.pageWidth = 0; -}; - -//-- Build up any html needed -EPUBJS.Render.Iframe.prototype.create = function(){ - this.iframe = document.createElement('iframe'); - this.iframe.id = "epubjs-iframe:" + EPUBJS.core.uuid(); - this.iframe.scrolling = "no"; - this.iframe.seamless = "seamless"; - // Back up if seamless isn't supported - this.iframe.style.border = "none"; - - this.iframe.addEventListener("load", this.loaded.bind(this), false); - return this.iframe; -}; - -/** -* Sets the source of the iframe with the given URL string -* Takes: URL string -* Returns: promise with document element -*/ -EPUBJS.Render.Iframe.prototype.load = function(url){ - var render = this, - deferred = new RSVP.defer(); - - this.iframe.contentWindow.location.replace(url); - // Reset the scroll position - render.leftPos = 0; - - if(this.window) { - this.unload(); - } - - this.iframe.onload = function(e) { - render.document = render.iframe.contentDocument; - render.docEl = render.document.documentElement; - render.headEl = render.document.head; - render.bodyEl = render.document.body; - render.window = render.iframe.contentWindow; - - render.window.addEventListener("resize", render.resized.bind(render), false); - - //-- Clear Margins - if(render.bodyEl) { - render.bodyEl.style.margin = "0"; - } - - deferred.resolve(render.docEl); - }; - - this.iframe.onerror = function(e) { - //console.error("Error Loading Contents", e); - deferred.reject({ - message : "Error Loading Contents: " + e, - stack : new Error().stack - }); - }; - return deferred.promise; -}; - - -EPUBJS.Render.Iframe.prototype.loaded = function(v){ - var url = this.iframe.contentWindow.location.href; - if(url != "about:blank"){ - this.trigger("render:loaded", url); - } -}; - -// Resize the iframe to the given width and height -EPUBJS.Render.Iframe.prototype.resize = function(width, height){ - var iframeBox; - - if(!this.iframe) return; - - this.iframe.height = height; - - if(!isNaN(width) && width % 2 !== 0){ - width += 1; //-- Prevent cutting off edges of text in columns - } - - this.iframe.width = width; - // Get the fractional height and width of the iframe - // Default to orginal if bounding rect is 0 - this.width = this.iframe.getBoundingClientRect().width || width; - this.height = this.iframe.getBoundingClientRect().height || height; -}; - - -EPUBJS.Render.Iframe.prototype.resized = function(e){ - // Get the fractional height and width of the iframe - this.width = this.iframe.getBoundingClientRect().width; - this.height = this.iframe.getBoundingClientRect().height; -}; - -EPUBJS.Render.Iframe.prototype.totalWidth = function(){ - return this.docEl.scrollWidth; -}; - -EPUBJS.Render.Iframe.prototype.totalHeight = function(){ - return this.docEl.scrollHeight; -}; - -EPUBJS.Render.Iframe.prototype.setPageDimensions = function(pageWidth, pageHeight){ - this.pageWidth = pageWidth; - this.pageHeight = pageHeight; - //-- Add a page to the width of the document to account an for odd number of pages - // this.docEl.style.width = this.docEl.scrollWidth + pageWidth + "px"; -}; - -EPUBJS.Render.Iframe.prototype.setLeft = function(leftPos){ - // this.bodyEl.style.marginLeft = -leftPos + "px"; - // this.docEl.style.marginLeft = -leftPos + "px"; - // this.docEl.style[EPUBJS.Render.Iframe.transform] = 'translate('+ (-leftPos) + 'px, 0)'; - this.document.defaultView.scrollTo(leftPos, 0); -}; - -EPUBJS.Render.Iframe.prototype.setStyle = function(style, val, prefixed){ - if(prefixed) { - style = EPUBJS.core.prefixed(style); - } - - if(this.bodyEl) this.bodyEl.style[style] = val; -}; - -EPUBJS.Render.Iframe.prototype.removeStyle = function(style){ - - if(this.bodyEl) this.bodyEl.style[style] = ''; - -}; - -EPUBJS.Render.Iframe.prototype.addHeadTag = function(tag, attrs) { - var tagEl = document.createElement(tag); - - for(var attr in attrs) { - tagEl[attr] = attrs[attr]; - } - - if(this.headEl) this.headEl.appendChild(tagEl); -}; - -EPUBJS.Render.Iframe.prototype.page = function(pg){ - this.leftPos = this.pageWidth * (pg-1); //-- pages start at 1 - this.setLeft(this.leftPos); -}; - -//-- Show the page containing an Element -EPUBJS.Render.Iframe.prototype.getPageNumberByElement = function(el){ - var left, pg; - if(!el) return; - - left = this.leftPos + el.getBoundingClientRect().left; //-- Calculate left offset compaired to scrolled position - - pg = Math.floor(left / this.pageWidth) + 1; //-- pages start at 1 - - return pg; -}; - -//-- Show the page containing an Element -EPUBJS.Render.Iframe.prototype.getPageNumberByRect = function(boundingClientRect){ - var left, pg; - - left = this.leftPos + boundingClientRect.left; //-- Calculate left offset compaired to scrolled position - pg = Math.floor(left / this.pageWidth) + 1; //-- pages start at 1 - - return pg; -}; - -// Return the root element of the content -EPUBJS.Render.Iframe.prototype.getBaseElement = function(){ - return this.bodyEl; -}; - -// Checks if an element is on the screen -EPUBJS.Render.Iframe.prototype.isElementVisible = function(el){ - var rect; - var left; - - if(el && typeof el.getBoundingClientRect === 'function'){ - rect = el.getBoundingClientRect(); - left = rect.left; //+ rect.width; - if( rect.width !== 0 && - rect.height !== 0 && // Element not visible - left >= 0 && - left < this.pageWidth ) { - return true; - } - } - - return false; -}; - - -EPUBJS.Render.Iframe.prototype.scroll = function(bool){ - if(bool) { - this.iframe.scrolling = "yes"; - } else { - this.iframe.scrolling = "no"; - } -}; - -// Cleanup event listeners -EPUBJS.Render.Iframe.prototype.unload = function(){ - this.window.removeEventListener("resize", this.resized); -}; - -//-- Enable binding events to Render -RSVP.EventTarget.mixin(EPUBJS.Render.Iframe.prototype); -EPUBJS.Renderer = function(renderMethod, hidden) { - // Dom events to listen for - this.listenedEvents = ["keydown", "keyup", "keypressed", "mouseup", "mousedown", "click"]; - this.upEvent = "mouseup"; - this.downEvent = "mousedown"; - if('ontouchstart' in document.documentElement) { - this.listenedEvents.push("touchstart", "touchend"); - this.upEvent = "touchend"; - this.downEvent = "touchstart"; - } - /** - * Setup a render method. - * Options are: Iframe - */ - if(renderMethod && typeof(EPUBJS.Render[renderMethod]) != "undefined"){ - this.render = new EPUBJS.Render[renderMethod](); - } else { - console.error("Not a Valid Rendering Method"); - } - - // Listen for load events - this.render.on("render:loaded", this.loaded.bind(this)); - - // Cached for replacement urls from storage - this.caches = {}; - - // Blank Cfi for Parsing - this.epubcfi = new EPUBJS.EpubCFI(); - - this.spreads = true; - this.isForcedSingle = false; - this.resized = _.debounce(this.onResized.bind(this), 100); - - this.layoutSettings = {}; - - this.hidden = hidden || false; - //-- Adds Hook methods to the Book prototype - // Hooks will all return before triggering the callback. - EPUBJS.Hooks.mixin(this); - //-- Get pre-registered hooks for events - this.getHooks("beforeChapterDisplay"); - - //-- Queue up page changes if page map isn't ready - this._q = EPUBJS.core.queue(this); - - this._moving = false; - -}; - -//-- Renderer events for listening -EPUBJS.Renderer.prototype.Events = [ - "renderer:keydown", - "renderer:keyup", - "renderer:keypressed", - "renderer:mouseup", - "renderer:mousedown", - "renderer:click", - "renderer:touchstart", - "renderer:touchend", - "renderer:selected", - "renderer:chapterUnloaded", - "renderer:chapterDisplayed", - "renderer:locationChanged", - "renderer:visibleLocationChanged", - "renderer:resized", - "renderer:spreads" -]; - -/** -* Creates an element to render to. -* Resizes to passed width and height or to the elements size -*/ -EPUBJS.Renderer.prototype.initialize = function(element, width, height){ - this.container = element; - this.element = this.render.create(); - - this.initWidth = width; - this.initHeight = height; - - this.width = width || this.container.clientWidth; - this.height = height || this.container.clientHeight; - - this.container.appendChild(this.element); - - if(width && height){ - this.render.resize(this.width, this.height); - } else { - this.render.resize('100%', '100%'); - } - -}; - -/** -* Display a chapter -* Takes: chapter object, global layout settings -* Returns: Promise with passed Renderer after pages has loaded -*/ -EPUBJS.Renderer.prototype.displayChapter = function(chapter, globalLayout){ - var store = false; - if(this._moving) { - console.error("Rendering In Progress"); - return; - } - this._moving = true; - // Get the url string from the chapter (may be from storage) - return chapter.url(). - then(function(url) { - - // Unload the previous chapter listener - if(this.currentChapter) { - this.currentChapter.unload(); // Remove stored blobs - - if(this.render.window){ - this.render.window.removeEventListener("resize", this.resized); - } - - this.removeEventListeners(); - this.removeSelectionListeners(); - this.trigger("renderer:chapterUnloaded"); - this.contents = null; - this.doc = null; - this.pageMap = null; - } - - this.currentChapter = chapter; - this.chapterPos = 1; - this.currentChapterCfiBase = chapter.cfiBase; - - this.layoutSettings = this.reconcileLayoutSettings(globalLayout, chapter.properties); - return this.load(url); - - }.bind(this)); - -}; - -/** -* Loads a url (string) and renders it, -* attaching event listeners and triggering hooks. -* Returns: Promise with the rendered contents. -*/ - -EPUBJS.Renderer.prototype.load = function(url){ - var deferred = new RSVP.defer(); - var loaded; - - // Switch to the required layout method for the settings - this.layoutMethod = this.determineLayout(this.layoutSettings); - this.layout = new EPUBJS.Layout[this.layoutMethod](); - - this.visible(false); - - render = this.render.load(url); - - render.then(function(contents) { - var formated; - this.currentChapter.setDocument(this.render.document); - this.contents = contents; - this.doc = this.render.document; - - // Format the contents using the current layout method - this.formated = this.layout.format(contents, this.render.width, this.render.height, this.gap); - this.render.setPageDimensions(this.formated.pageWidth, this.formated.pageHeight); - - // window.addEventListener("orientationchange", this.onResized.bind(this), false); - if(!this.initWidth && !this.initHeight){ - this.render.window.addEventListener("resize", this.resized, false); - } - - this.addEventListeners(); - this.addSelectionListeners(); - - //-- Trigger registered hooks before displaying - this.beforeDisplay(function(){ - var pages = this.layout.calculatePages(); - var msg = this.currentChapter; - var queued = this._q.length(); - this._moving = false; - - this.updatePages(pages); - - this.visibleRangeCfi = this.getVisibleRangeCfi(); - this.currentLocationCfi = this.visibleRangeCfi.start; - - if(queued === 0) { - this.trigger("renderer:locationChanged", this.currentLocationCfi); - this.trigger("renderer:visibleRangeChanged", this.visibleRangeCfi); - } - - msg.cfi = this.currentLocationCfi; //TODO: why is this cfi passed to chapterDisplayed - this.trigger("renderer:chapterDisplayed", msg); - - this.visible(true); - - deferred.resolve(this); //-- why does this return the renderer? - }.bind(this)); - - }.bind(this)); - - return deferred.promise; -}; - -EPUBJS.Renderer.prototype.loaded = function(url){ - this.trigger("render:loaded", url); - // var uri = EPUBJS.core.uri(url); - // var relative = uri.path.replace(book.bookUrl, ''); - // console.log(url, uri, relative); -}; - -/** -* Reconciles the current chapters layout properies with -* the global layout properities. -* Takes: global layout settings object, chapter properties string -* Returns: Object with layout properties -*/ -EPUBJS.Renderer.prototype.reconcileLayoutSettings = function(global, chapter){ - var settings = {}; - - //-- Get the global defaults - for (var attr in global) { - if (global.hasOwnProperty(attr)){ - settings[attr] = global[attr]; - } - } - //-- Get the chapter's display type - chapter.forEach(function(prop){ - var rendition = prop.replace("rendition:", ''); - var split = rendition.indexOf("-"); - var property, value; - - if(split != -1){ - property = rendition.slice(0, split); - value = rendition.slice(split+1); - - settings[property] = value; - } - }); - return settings; -}; - -/** -* Uses the settings to determine which Layout Method is needed -* Triggers events based on the method choosen -* Takes: Layout settings object -* Returns: String of appropriate for EPUBJS.Layout function -*/ -EPUBJS.Renderer.prototype.determineLayout = function(settings){ - // Default is layout: reflowable & spread: auto - var spreads = this.determineSpreads(this.minSpreadWidth); - var layoutMethod = spreads ? "ReflowableSpreads" : "Reflowable"; - var scroll = false; - - if(settings.layout === "pre-paginated") { - layoutMethod = "Fixed"; - scroll = true; - spreads = false; - } - - if(settings.layout === "reflowable" && settings.spread === "none") { - layoutMethod = "Reflowable"; - scroll = false; - spreads = false; - } - - if(settings.layout === "reflowable" && settings.spread === "both") { - layoutMethod = "ReflowableSpreads"; - scroll = false; - spreads = true; - } - - this.spreads = spreads; - this.render.scroll(scroll); - this.trigger("renderer:spreads", spreads); - return layoutMethod; -}; - -// Shortcut to trigger the hook before displaying the chapter -EPUBJS.Renderer.prototype.beforeDisplay = function(callback, renderer){ - this.triggerHooks("beforeChapterDisplay", callback, this); -}; - -// Update the renderer with the information passed by the layout -EPUBJS.Renderer.prototype.updatePages = function(layout){ - this.pageMap = this.mapPage(); - // this.displayedPages = layout.displayedPages; - - if (this.spreads) { - this.displayedPages = Math.ceil(this.pageMap.length / 2); - } else { - this.displayedPages = this.pageMap.length; - } - - // this.currentChapter.pages = layout.pageCount; - this.currentChapter.pages = this.pageMap.length; - - this._q.flush(); -}; - -// Apply the layout again and jump back to the previous cfi position -EPUBJS.Renderer.prototype.reformat = function(){ - var renderer = this; - var formated, pages; - if(!this.contents) return; - - spreads = this.determineSpreads(this.minSpreadWidth); - // Only re-layout if the spreads have switched - if(spreads != this.spreads){ - this.spreads = spreads; - this.layoutMethod = this.determineLayout(this.layoutSettings); - this.layout = new EPUBJS.Layout[this.layoutMethod](); - } - - this.formated = this.layout.format(this.contents, this.render.width, this.render.height, this.gap); - this.render.setPageDimensions(this.formated.pageWidth, this.formated.pageHeight); - - pages = renderer.layout.calculatePages(); - renderer.updatePages(pages); - - // Give the css styles time to update - clearTimeout(this.timeoutTillCfi); - this.timeoutTillCfi = setTimeout(function(){ - //-- Go to current page after formating - if(renderer.currentLocationCfi){ - renderer.gotoCfi(renderer.currentLocationCfi); - } - this.timeoutTillCfi = null; - }, 10); - -}; - -// Hide and show the render's container . -EPUBJS.Renderer.prototype.visible = function(bool){ - if(typeof(bool) === "undefined") { - return this.element.style.visibility; - } - - if(bool === true && !this.hidden){ - this.element.style.visibility = "visible"; - }else if(bool === false){ - this.element.style.visibility = "hidden"; - } -}; - -// Remove the render element and clean up listeners -EPUBJS.Renderer.prototype.remove = function() { - if(this.render.window) { - this.render.unload(); - this.render.window.removeEventListener("resize", this.resized); - this.removeEventListeners(); - this.removeSelectionListeners(); - } - - this.container.removeChild(this.element); -}; - -//-- STYLES - -EPUBJS.Renderer.prototype.applyStyles = function(styles) { - for (var style in styles) { - this.render.setStyle(style, styles[style]); - } -}; - -EPUBJS.Renderer.prototype.setStyle = function(style, val, prefixed){ - this.render.setStyle(style, val, prefixed); -}; - -EPUBJS.Renderer.prototype.removeStyle = function(style){ - this.render.removeStyle(style); -}; - -//-- HEAD TAGS -EPUBJS.Renderer.prototype.applyHeadTags = function(headTags) { - for ( var headTag in headTags ) { - this.render.addHeadTag(headTag, headTags[headTag]); - } -}; - -//-- NAVIGATION - -EPUBJS.Renderer.prototype.page = function(pg){ - if(!this.pageMap) { - console.warn("pageMap not set, queuing"); - this._q.enqueue("page", arguments); - return true; - } - - if(pg >= 1 && pg <= this.displayedPages){ - this.chapterPos = pg; - - this.render.page(pg); - this.visibleRangeCfi = this.getVisibleRangeCfi(); - this.currentLocationCfi = this.visibleRangeCfi.start; - this.trigger("renderer:locationChanged", this.currentLocationCfi); - this.trigger("renderer:visibleRangeChanged", this.visibleRangeCfi); - - return true; - } - //-- Return false if page is greater than the total - return false; -}; - -// Short cut to find next page's cfi starting at the last visible element -/* -EPUBJS.Renderer.prototype.nextPage = function(){ - var pg = this.chapterPos + 1; - if(pg <= this.displayedPages){ - this.chapterPos = pg; - - this.render.page(pg); - - this.currentLocationCfi = this.getPageCfi(this.visibileEl); - this.trigger("renderer:locationChanged", this.currentLocationCfi); - - return true; - } - //-- Return false if page is greater than the total - return false; -}; -*/ -EPUBJS.Renderer.prototype.nextPage = function(){ - return this.page(this.chapterPos + 1); -}; - -EPUBJS.Renderer.prototype.prevPage = function(){ - return this.page(this.chapterPos - 1); -}; - -//-- Show the page containing an Element -EPUBJS.Renderer.prototype.pageByElement = function(el){ - var pg; - if(!el) return; - - pg = this.render.getPageNumberByElement(el); - this.page(pg); -}; - -// Jump to the last page of the chapter -EPUBJS.Renderer.prototype.lastPage = function(){ - if(this._moving) { - return this._q.enqueue("lastPage", arguments); - } - - this.page(this.displayedPages); -}; - -// Jump to the first page of the chapter -EPUBJS.Renderer.prototype.firstPage = function(){ - this.page(1); -}; - -//-- Find a section by fragement id -EPUBJS.Renderer.prototype.section = function(fragment){ - var el = this.doc.getElementById(fragment), - left, pg; - - if(el){ - this.pageByElement(el); - } - -}; - -EPUBJS.Renderer.prototype.firstElementisTextNode = function(node) { - var children = node.childNodes; - var leng = children.length; - - if(leng && - children[0] && // First Child - children[0].nodeType === 3 && // This is a textNodes - children[0].textContent.trim().length) { // With non whitespace or return charecters - return true; - } - return false; -}; - -// Walk the node tree from a start element to next visible element -EPUBJS.Renderer.prototype.walk = function(node, x, y) { - var r, children, leng, - startNode = node, - prevNode, - stack = [startNode]; - - var STOP = 10000, ITER=0; - - while(!r && stack.length) { - node = stack.shift(); - if( this.containsPoint(node, x, y) && this.firstElementisTextNode(node)) { - r = node; - } - - if(!r && node && node.childElementCount > 0){ - children = node.children; - if (children && children.length) { - leng = children.length ? children.length : 0; - } else { - return r; - } - for (var i = leng-1; i >= 0; i--) { - if(children[i] != prevNode) stack.unshift(children[i]); - } - } - - if(!r && stack.length === 0 && startNode && startNode.parentNode !== null){ - stack.push(startNode.parentNode); - prevNode = startNode; - startNode = startNode.parentNode; - } - - - ITER++; - if(ITER > STOP) { - console.error("ENDLESS LOOP"); - break; - } - - } - - return r; -}; - -// Checks if an element is on the screen -EPUBJS.Renderer.prototype.containsPoint = function(el, x, y){ - var rect; - var left; - if(el && typeof el.getBoundingClientRect === 'function'){ - rect = el.getBoundingClientRect(); - // console.log(el, rect, x, y); - - if( rect.width !== 0 && - rect.height !== 0 && // Element not visible - rect.left >= x && - x <= rect.left + rect.width) { - return true; - } - } - - return false; -}; - -EPUBJS.Renderer.prototype.textSprint = function(root, func) { - var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, { - acceptNode: function (node) { - if ( ! /^\s*$/.test(node.data) ) { - return NodeFilter.FILTER_ACCEPT; - } else { - return NodeFilter.FILTER_REJECT; - } - } - }, false); - var node; - while ((node = treeWalker.nextNode())) { - func(node); - } - -}; - -EPUBJS.Renderer.prototype.sprint = function(root, func) { - var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, null, false); - var node; - while ((node = treeWalker.nextNode())) { - func(node); - } - -}; - -EPUBJS.Renderer.prototype.mapPage = function(){ - var renderer = this; - var map = [{ start: null, end: null }]; - var root = this.render.getBaseElement(); - var page = 1; - var width = this.layout.colWidth + this.layout.gap; - var offset = this.formated.pageWidth * (this.chapterPos-1); - var limit = (width * page) - offset;// (width * page) - offset; - var elLimit = 0; - var prevRange; - var cfi; - var check = function(node) { - var elPos; - var elRange; - var children = Array.prototype.slice.call(node.childNodes); - if (node.nodeType == Node.ELEMENT_NODE) { - // elPos = node.getBoundingClientRect(); - elRange = document.createRange(); - elRange.selectNodeContents(node); - elPos = elRange.getBoundingClientRect(); - - if(!elPos || (elPos.width === 0 && elPos.height === 0)) { - return; - } - - //-- Element starts new Col - if(elPos.left > elLimit) { - children.forEach(function(node){ - if(node.nodeType == Node.TEXT_NODE && - node.textContent.trim().length) { - checkText(node); - } - }); - } - - //-- Element Spans new Col - if(elPos.right > elLimit) { - children.forEach(function(node){ - if(node.nodeType == Node.TEXT_NODE && - node.textContent.trim().length) { - checkText(node); - } - }); - } - } - - }; - var checkText = function(node){ - var ranges = renderer.splitTextNodeIntoWordsRanges(node); - ranges.forEach(function(range){ - var pos = range.getBoundingClientRect(); - - if(!pos || (pos.width === 0 && pos.height === 0)) { - return; - } - - if(pos.left + pos.width < limit) { - if(!map[page-1].start){ - range.collapse(true); - cfi = renderer.currentChapter.cfiFromRange(range); - map[page-1].start = cfi; - } - } else { - if(prevRange){ - prevRange.collapse(true); - cfi = renderer.currentChapter.cfiFromRange(prevRange); - map[page-1].end = cfi; - } - - range.collapse(true); - cfi = renderer.currentChapter.cfiFromRange(range); - map.push({ - start: cfi, - end: null - }); - - page += 1; - limit = (width * page) - offset; - elLimit = limit; - } - - prevRange = range; - }); - - - }; - - this.sprint(root, check); - // this.textSprint(root, checkText); - - if(prevRange){ - prevRange.collapse(true); - - cfi = renderer.currentChapter.cfiFromRange(prevRange); - map[page-1].end = cfi; - } - - // Handle empty map - if(map.length === 1 && !map[0].start) { - range = this.doc.createRange(); - range.selectNodeContents(root); - range.collapse(true); - - cfi = renderer.currentChapter.cfiFromRange(range); - map[0].start = cfi; - map[0].end = cfi; - } - - // clean up - prevRange = null; - ranges = null; - range = null; - root = null; - - return map; -}; - - -EPUBJS.Renderer.prototype.splitTextNodeIntoWordsRanges = function(node){ - var ranges = []; - var text = node.textContent.trim(); - var range; - var rect; - var list; - pos = text.indexOf(" "); - - if(pos === -1) { - range = this.doc.createRange(); - range.selectNodeContents(node); - return [range]; - } - - range = this.doc.createRange(); - range.setStart(node, 0); - range.setEnd(node, pos); - ranges.push(range); - range = false; - - while ( pos != -1 ) { - - pos = text.indexOf(" ", pos + 1); - if(pos > 0) { - - if(range) { - range.setEnd(node, pos); - ranges.push(range); - } - - range = this.doc.createRange(); - range.setStart(node, pos+1); - } - } - - if(range) { - range.setEnd(node, text.length); - ranges.push(range); - } - - return ranges; -}; - -EPUBJS.Renderer.prototype.rangePosition = function(range){ - var rect; - var list; - - list = range.getClientRects(); - - if(list.length) { - rect = list[0]; - return rect; - } - - return null; -}; - -/* -// Get the cfi of the current page -EPUBJS.Renderer.prototype.getPageCfi = function(prevEl){ - var range = this.doc.createRange(); - var position; - // TODO : this might need to take margin / padding into account? - var x = 1;//this.formated.pageWidth/2; - var y = 1;//;this.formated.pageHeight/2; - - range = this.getRange(x, y); - - // var test = this.doc.defaultView.getSelection(); - // var r = this.doc.createRange(); - // test.removeAllRanges(); - // r.setStart(range.startContainer, range.startOffset); - // r.setEnd(range.startContainer, range.startOffset + 1); - // test.addRange(r); - - return this.currentChapter.cfiFromRange(range); -}; -*/ - -// Get the cfi of the current page -EPUBJS.Renderer.prototype.getPageCfi = function(){ - var pg; - if (this.spreads) { - pg = this.chapterPos*2; - startRange = this.pageMap[pg-2]; - } else { - pg = this.chapterPos; - startRange = this.pageMap[pg-1]; - } - return this.pageMap[(this.chapterPos * 2) -1].start; -}; - -EPUBJS.Renderer.prototype.getRange = function(x, y, forceElement){ - var range = this.doc.createRange(); - var position; - forceElement = true; // temp override - if(typeof document.caretPositionFromPoint !== "undefined" && !forceElement){ - position = this.doc.caretPositionFromPoint(x, y); - range.setStart(position.offsetNode, position.offset); - } else if(typeof document.caretRangeFromPoint !== "undefined" && !forceElement){ - range = this.doc.caretRangeFromPoint(x, y); - } else { - this.visibileEl = this.findElementAfter(x, y); - range.setStart(this.visibileEl, 1); - } - - // var test = this.doc.defaultView.getSelection(); - // var r = this.doc.createRange(); - // test.removeAllRanges(); - // r.setStart(range.startContainer, range.startOffset); - // r.setEnd(range.startContainer, range.startOffset + 1); - // test.addRange(r); - return range; -}; - -/* -EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(prevEl){ - var startX = 0; - var startY = 0; - var endX = this.width-1; - var endY = this.height-1; - var startRange = this.getRange(startX, startY); - var endRange = this.getRange(endX, endY); //fix if carret not avail - var startCfi = this.currentChapter.cfiFromRange(startRange); - var endCfi; - if(endRange) { - endCfi = this.currentChapter.cfiFromRange(endRange); - } - - return { - start: startCfi, - end: endCfi || false - }; -}; -*/ - -EPUBJS.Renderer.prototype.pagesInCurrentChapter = function() { - var pgs; - var length; - - if(!this.pageMap) { - console.warn("page map not loaded"); - return false; - } - - length = this.pageMap.length; - - if(this.spreads){ - pgs = Math.ceil(length / 2); - } else { - pgs = length; - } - - return pgs; -}; - -EPUBJS.Renderer.prototype.currentRenderedPage = function(){ - var pg; - - if(!this.pageMap) { - console.warn("page map not loaded"); - return false; - } - - if (this.spreads && this.layout.pageCount > 1) { - pg = this.chapterPos*2; - } else { - pg = this.chapterPos; - } - - return pg; -}; - -EPUBJS.Renderer.prototype.getRenderedPagesLeft = function(){ - var pg; - var lastPage; - var pagesLeft; - - if(!this.pageMap) { - console.warn("page map not loaded"); - return false; - } - - lastPage = this.pageMap.length; - - if (this.spreads) { - pg = this.chapterPos*2; - } else { - pg = this.chapterPos; - } - - pagesLeft = lastPage - pg; - return pagesLeft; - -}; - -EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(){ - var pg; - var startRange, endRange; - - if(!this.pageMap) { - console.warn("page map not loaded"); - return false; - } - - if (this.spreads) { - pg = this.chapterPos*2; - startRange = this.pageMap[pg-2]; - endRange = startRange; - - if(this.layout.pageCount > 1) { - endRange = this.pageMap[pg-1]; - } - } else { - pg = this.chapterPos; - startRange = this.pageMap[pg-1]; - endRange = startRange; - } - - if(!startRange) { - console.warn("page range miss:", pg, this.pageMap); - startRange = this.pageMap[this.pageMap.length-1]; - endRange = startRange; - } - - return { - start: startRange.start, - end: endRange.end - }; -}; - -// Goto a cfi position in the current chapter -EPUBJS.Renderer.prototype.gotoCfi = function(cfi){ - var pg; - var marker; - var range; - - if(this._moving){ - return this._q.enqueue("gotoCfi", arguments); - } - - if(_.isString(cfi)){ - cfi = this.epubcfi.parse(cfi); - } - - if(typeof document.evaluate === 'undefined') { - marker = this.epubcfi.addMarker(cfi, this.doc); - if(marker) { - pg = this.render.getPageNumberByElement(marker); - // Must Clean up Marker before going to page - this.epubcfi.removeMarker(marker, this.doc); - this.page(pg); - } - } else { - range = this.epubcfi.generateRangeFromCfi(cfi, this.doc); - if(range) { - pg = this.render.getPageNumberByRect(range.getBoundingClientRect()); - this.page(pg); - } - } -}; - -// Walk nodes until a visible element is found -EPUBJS.Renderer.prototype.findFirstVisible = function(startEl){ - var el = startEl || this.render.getBaseElement(); - var found; - found = this.walk(el); - - if(found) { - return found; - }else{ - return startEl; - } - -}; -// TODO: remove me - unsused -EPUBJS.Renderer.prototype.findElementAfter = function(x, y, startEl){ - var el = startEl || this.render.getBaseElement(); - var found; - found = this.walk(el, x, y); - if(found) { - return found; - }else{ - return el; - } - -}; - -/* -EPUBJS.Renderer.prototype.route = function(hash, callback){ - var location = window.location.hash.replace('#/', ''); - if(this.useHash && location.length && location != this.prevLocation){ - this.show(location, callback); - this.prevLocation = location; - return true; - } - return false; -} - -EPUBJS.Renderer.prototype.hideHashChanges = function(){ - this.useHash = false; -} - -*/ - -EPUBJS.Renderer.prototype.resize = function(width, height, setSize){ - var spreads; - - this.width = width; - this.height = height; - - if(setSize !== false) { - this.render.resize(this.width, this.height); - } - - - - if(this.contents){ - this.reformat(); - } - - this.trigger("renderer:resized", { - width: this.width, - height: this.height - }); -}; - -//-- Listeners for events in the frame - -EPUBJS.Renderer.prototype.onResized = function(e) { - var width = this.container.clientWidth; - var height = this.container.clientHeight; - - this.resize(width, height, false); -}; - -EPUBJS.Renderer.prototype.addEventListeners = function(){ - if(!this.render.document) { - return; - } - this.listenedEvents.forEach(function(eventName){ - this.render.document.addEventListener(eventName, this.triggerEvent.bind(this), false); - }, this); - -}; - -EPUBJS.Renderer.prototype.removeEventListeners = function(){ - if(!this.render.document) { - return; - } - this.listenedEvents.forEach(function(eventName){ - this.render.document.removeEventListener(eventName, this.triggerEvent, false); - }, this); - -}; - -// Pass browser events -EPUBJS.Renderer.prototype.triggerEvent = function(e){ - this.trigger("renderer:"+e.type, e); -}; - -EPUBJS.Renderer.prototype.addSelectionListeners = function(){ - this.render.document.addEventListener("selectionchange", this.onSelectionChange.bind(this), false); -}; - -EPUBJS.Renderer.prototype.removeSelectionListeners = function(){ - if(!this.render.document) { - return; - } - this.doc.removeEventListener("selectionchange", this.onSelectionChange, false); -}; - -EPUBJS.Renderer.prototype.onSelectionChange = function(e){ - if (this.selectionEndTimeout) { - clearTimeout(this.selectionEndTimeout); - } - this.selectionEndTimeout = setTimeout(function() { - this.selectedRange = this.render.window.getSelection(); - this.trigger("renderer:selected", this.selectedRange); - }.bind(this), 500); -}; - - -//-- Spreads - -EPUBJS.Renderer.prototype.setMinSpreadWidth = function(width){ - this.minSpreadWidth = width; - this.spreads = this.determineSpreads(width); -}; - -EPUBJS.Renderer.prototype.determineSpreads = function(cutoff){ - if(this.isForcedSingle || !cutoff || this.width < cutoff) { - return false; //-- Single Page - }else{ - return true; //-- Double Page - } -}; - -EPUBJS.Renderer.prototype.forceSingle = function(bool){ - if(bool) { - this.isForcedSingle = true; - // this.spreads = false; - } else { - this.isForcedSingle = false; - // this.spreads = this.determineSpreads(this.minSpreadWidth); - } -}; - -EPUBJS.Renderer.prototype.setGap = function(gap){ - this.gap = gap; //-- False == auto gap -}; - -//-- Content Replacements - -EPUBJS.Renderer.prototype.replace = function(query, func, finished, progress){ - var items = this.contents.querySelectorAll(query), - resources = Array.prototype.slice.call(items), - count = resources.length; - - - if(count === 0) { - finished(false); - return; - } - resources.forEach(function(item){ - var called = false; - var after = function(result, full){ - if(called === false) { - count--; - if(progress) progress(result, full, count); - if(count <= 0 && finished) finished(true); - called = true; - } - }; - - func(item, after); - - }.bind(this)); - -}; - -EPUBJS.Renderer.prototype.replaceWithStored = function(query, attr, func, callback) { - var _oldUrls, - _newUrls = {}, - _store = this.currentChapter.store, - _cache = this.caches[query], - _uri = EPUBJS.core.uri(this.currentChapter.absolute), - _chapterBase = _uri.base, - _attr = attr, - _wait = 2000, - progress = function(url, full, count) { - _newUrls[full] = url; - }, - finished = function(notempty) { - if(callback) callback(); - - _.each(_oldUrls, function(url){ - _store.revokeUrl(url); - }); - - _cache = _newUrls; - }; - - if(!_store) return; - - if(!_cache) _cache = {}; - _oldUrls = _.clone(_cache); - - this.replace(query, function(link, done){ - var src = link.getAttribute(_attr), - full = EPUBJS.core.resolveUrl(_chapterBase, src); - - var replaceUrl = function(url) { - var timeout; - link.onload = function(){ - clearTimeout(timeout); - done(url, full); - }; - - link.onerror = function(e){ - clearTimeout(timeout); - done(url, full); - console.error(e); - }; - - if(query == "image") { - //-- SVG needs this to trigger a load event - link.setAttribute("externalResourcesRequired", "true"); - } - - if(query == "link[href]" && link.getAttribute("rel") !== "stylesheet") { - //-- Only Stylesheet links seem to have a load events, just continue others - done(url, full); - } - - link.setAttribute(_attr, url); - - //-- If elements never fire Load Event, should continue anyways - timeout = setTimeout(function(){ - done(url, full); - }, _wait); - - }; - - if(full in _oldUrls){ - replaceUrl(_oldUrls[full]); - _newUrls[full] = _oldUrls[full]; - delete _oldUrls[full]; - }else{ - func(_store, full, replaceUrl, link); - } - - }, finished, progress); -}; - -//-- Enable binding events to Renderer -RSVP.EventTarget.mixin(EPUBJS.Renderer.prototype); - -var EPUBJS = EPUBJS || {}; -EPUBJS.replace = {}; - -//-- Replaces the relative links within the book to use our internal page changer -EPUBJS.replace.hrefs = function(callback, renderer){ - var book = this; - var replacments = function(link, done){ - var href = link.getAttribute("href"), - isRelative = href.search("://"), - directory, - relative; - - if(isRelative != -1){ - - link.setAttribute("target", "_blank"); - - }else{ - - directory = EPUBJS.core.uri(renderer.render.window.location.href).directory; - relative = EPUBJS.core.resolveUrl(directory, href); - - link.onclick = function(){ - book.goto(relative); - return false; - }; - - } - done(); - - }; - - renderer.replace("a[href]", replacments, callback); - -}; - -EPUBJS.replace.head = function(callback, renderer) { - - renderer.replaceWithStored("link[href]", "href", EPUBJS.replace.links, callback); - -}; - - -//-- Replaces assets src's to point to stored version if browser is offline -EPUBJS.replace.resources = function(callback, renderer){ - //srcs = this.doc.querySelectorAll('[src]'); - renderer.replaceWithStored("[src]", "src", EPUBJS.replace.srcs, callback); - -}; - -EPUBJS.replace.svg = function(callback, renderer) { - - renderer.replaceWithStored("image", "xlink:href", function(_store, full, done){ - _store.getUrl(full).then(done); - }, callback); - -}; - -EPUBJS.replace.srcs = function(_store, full, done){ - - _store.getUrl(full).then(done); - -}; - -//-- Replaces links in head, such as stylesheets - link[href] -EPUBJS.replace.links = function(_store, full, done, link){ - //-- Handle replacing urls in CSS - if(link.getAttribute("rel") === "stylesheet") { - EPUBJS.replace.stylesheets(_store, full).then(function(url, full){ - // done - setTimeout(function(){ - done(url, full); - }, 5); //-- Allow for css to apply before displaying chapter - }); - }else{ - _store.getUrl(full).then(done); - } -}; - -EPUBJS.replace.stylesheets = function(_store, full) { - var deferred = new RSVP.defer(); - - if(!_store) return; - - _store.getText(full).then(function(text){ - var url; - - EPUBJS.replace.cssUrls(_store, full, text).then(function(newText){ - var _URL = window.URL || window.webkitURL || window.mozURL; - - var blob = new Blob([newText], { "type" : "text\/css" }), - url = _URL.createObjectURL(blob); - - deferred.resolve(url); - - }, function(e) { - console.error(e); - }); - - }); - - return deferred.promise; -}; - -EPUBJS.replace.cssUrls = function(_store, base, text){ - var deferred = new RSVP.defer(), - promises = [], - matches = text.match(/url\(\'?\"?([^\'|^\"^\)]*)\'?\"?\)/g); - - if(!_store) return; - - if(!matches){ - deferred.resolve(text); - return deferred.promise; - } - - matches.forEach(function(str){ - var full = EPUBJS.core.resolveUrl(base, str.replace(/url\(|[|\)|\'|\"]/g, '')); - var replaced = _store.getUrl(full).then(function(url){ - text = text.replace(str, 'url("'+url+'")'); - }); - - promises.push(replaced); - }); - - RSVP.all(promises).then(function(){ - deferred.resolve(text); - }); - - return deferred.promise; -}; - -EPUBJS.Unarchiver = function(url){ - - this.libPath = EPUBJS.filePath; - this.zipUrl = url; - this.loadLib(); - this.urlCache = {}; - - this.zipFs = new zip.fs.FS(); - - return this.promise; - -}; - -//-- Load the zip lib and set the workerScriptsPath -EPUBJS.Unarchiver.prototype.loadLib = function(callback){ - if(typeof(zip) == "undefined") console.error("Zip lib not loaded"); - - /* - //-- load script - EPUBJS.core.loadScript(this.libPath+"zip.js", function(){ - //-- Tell zip where it is located - zip.workerScriptsPath = this.libPath; - callback(); - }.bind(this)); - */ - // console.log(this.libPath) - zip.workerScriptsPath = this.libPath; -}; - -EPUBJS.Unarchiver.prototype.openZip = function(zipUrl, callback){ - var deferred = new RSVP.defer(); - var zipFs = this.zipFs; - zipFs.importHttpContent(zipUrl, false, function() { - deferred.resolve(zipFs); - }, this.failed); - - return deferred.promise; -}; - -EPUBJS.Unarchiver.prototype.getXml = function(url, encoding){ - - return this.getText(url, encoding). - then(function(text){ - var parser = new DOMParser(); - return parser.parseFromString(text, "application/xml"); - }); - -}; - -EPUBJS.Unarchiver.prototype.getUrl = function(url, mime){ - var unarchiver = this; - var deferred = new RSVP.defer(); - var decodededUrl = window.decodeURIComponent(url); - var entry = this.zipFs.find(decodededUrl); - var _URL = window.URL || window.webkitURL || window.mozURL; - - if(!entry) { - deferred.reject({ - message : "File not found in the epub: " + url, - stack : new Error().stack - }); - return deferred.promise; - } - - if(url in this.urlCache) { - deferred.resolve(this.urlCache[url]); - return deferred.promise; - } - - entry.getBlob(mime || zip.getMimeType(entry.name), function(blob){ - var tempUrl = _URL.createObjectURL(blob); - deferred.resolve(tempUrl); - unarchiver.urlCache[url] = tempUrl; - }); - - return deferred.promise; -}; - -EPUBJS.Unarchiver.prototype.getText = function(url, encoding){ - var unarchiver = this; - var deferred = new RSVP.defer(); - var decodededUrl = window.decodeURIComponent(url); - var entry = this.zipFs.find(decodededUrl); - var _URL = window.URL || window.webkitURL || window.mozURL; - - if(!entry) { - console.warn("File not found in the contained epub:", url); - return deferred.promise; - } - - entry.getText(function(text){ - deferred.resolve(text); - }, null, null, encoding || 'UTF-8'); - - return deferred.promise; -}; - -EPUBJS.Unarchiver.prototype.revokeUrl = function(url){ - var _URL = window.URL || window.webkitURL || window.mozURL; - var fromCache = unarchiver.urlCache[url]; - if(fromCache) _URL.revokeObjectURL(fromCache); -}; - -EPUBJS.Unarchiver.prototype.failed = function(error){ - console.error(error); -}; - -EPUBJS.Unarchiver.prototype.afterSaved = function(error){ - this.callback(); -}; - -EPUBJS.Unarchiver.prototype.toStorage = function(entries){ - var timeout = 0, - delay = 20, - that = this, - count = entries.length; - - function callback(){ - count--; - if(count === 0) that.afterSaved(); - } - - entries.forEach(function(entry){ - - setTimeout(function(entry){ - that.saveEntryFileToStorage(entry, callback); - }, timeout, entry); - - timeout += delay; - }); - - console.log("time", timeout); - - //entries.forEach(this.saveEntryFileToStorage.bind(this)); -}; - -EPUBJS.Unarchiver.prototype.saveEntryFileToStorage = function(entry, callback){ - var that = this; - entry.getData(new zip.BlobWriter(), function(blob) { - EPUBJS.storage.save(entry.filename, blob, callback); - }); -}; - -//# sourceMappingURL=epub_no_underscore.js.map \ No newline at end of file diff --git a/build/epub_no_underscore.js.map b/build/epub_no_underscore.js.map deleted file mode 100644 index 20451a229..000000000 --- a/build/epub_no_underscore.js.map +++ /dev/null @@ -1,23 +0,0 @@ -{ - "version": 3, - "file": "epub_no_underscore.js", - "sources": [ - "libs/rsvp/rsvp.js", - "src/base.js", - "src/book.js", - "src/chapter.js", - "src/core.js", - "src/epubcfi.js", - "src/events.js", - "src/hooks.js", - "src/layout.js", - "src/pagination.js", - "src/parser.js", - "src/render_iframe.js", - "src/renderer.js", - "src/replace.js", - "src/unarchiver.js" - ], - "names": [], - "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,Y;ACtoEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5uCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACpOA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;AC3gBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACpEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5KA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACxFA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,uD;ACtNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9qCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;;ACjIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA" -} \ No newline at end of file diff --git a/build/hooks.js b/build/hooks.js deleted file mode 100644 index fad6409fa..000000000 --- a/build/hooks.js +++ /dev/null @@ -1,318 +0,0 @@ -EPUBJS.Hooks.register("beforeChapterDisplay").endnotes = function(callback, renderer){ - - var notes = renderer.contents.querySelectorAll('a[href]'), - items = Array.prototype.slice.call(notes), //[].slice.call() - attr = "epub:type", - type = "noteref", - folder = EPUBJS.core.folder(location.pathname), - cssPath = (folder + EPUBJS.cssPath) || folder, - popups = {}; - - EPUBJS.core.addCss(cssPath + "popup.css", false, renderer.render.document.head); - - - items.forEach(function(item){ - var epubType = item.getAttribute(attr), - href, - id, - el, - pop, - pos, - left, - top, - txt; - - if(epubType != type) return; - - href = item.getAttribute("href"); - id = href.replace("#", ''); - el = renderer.render.document.getElementById(id); - - - item.addEventListener("mouseover", showPop, false); - item.addEventListener("mouseout", hidePop, false); - - function showPop(){ - var poppos, - iheight = renderer.height, - iwidth = renderer.width, - tip, - pop, - maxHeight = 225, - itemRect; - - if(!txt) { - pop = el.cloneNode(true); - txt = pop.querySelector("p"); - } - - // chapter.replaceLinks.bind(this) //TODO:Fred - update? - //-- create a popup with endnote inside of it - if(!popups[id]) { - popups[id] = document.createElement("div"); - popups[id].setAttribute("class", "popup"); - - pop_content = document.createElement("div"); - - popups[id].appendChild(pop_content); - - pop_content.appendChild(txt); - pop_content.setAttribute("class", "pop_content"); - - renderer.render.document.body.appendChild(popups[id]); - - //-- TODO: will these leak memory? - Fred - popups[id].addEventListener("mouseover", onPop, false); - popups[id].addEventListener("mouseout", offPop, false); - - //-- Add hide on page change - // chapter.book.listenUntil("book:pageChanged", "book:chapterDestroy", hidePop); - // chapter.book.listenUntil("book:pageChanged", "book:chapterDestroy", offPop); - renderer.on("renderer:pageChanged", hidePop, this); - renderer.on("renderer:pageChanged", offPop, this); - // chapter.book.on("renderer:chapterDestroy", hidePop, this); - } - - pop = popups[id]; - - - //-- get location of item - itemRect = item.getBoundingClientRect(); - left = itemRect.left; - top = itemRect.top; - - //-- show the popup - pop.classList.add("show"); - - //-- locations of popup - popRect = pop.getBoundingClientRect(); - - //-- position the popup - pop.style.left = left - popRect.width / 2 + "px"; - pop.style.top = top + "px"; - - - //-- Adjust max height - if(maxHeight > iheight / 2.5) { - maxHeight = iheight / 2.5; - pop_content.style.maxHeight = maxHeight + "px"; - } - - //-- switch above / below - if(popRect.height + top >= iheight - 25) { - pop.style.top = top - popRect.height + "px"; - pop.classList.add("above"); - }else{ - pop.classList.remove("above"); - } - - //-- switch left - if(left - popRect.width <= 0) { - pop.style.left = left + "px"; - pop.classList.add("left"); - }else{ - pop.classList.remove("left"); - } - - //-- switch right - if(left + popRect.width / 2 >= iwidth) { - //-- TEMP MOVE: 300 - pop.style.left = left - 300 + "px"; - - popRect = pop.getBoundingClientRect(); - pop.style.left = left - popRect.width + "px"; - //-- switch above / below again - if(popRect.height + top >= iheight - 25) { - pop.style.top = top - popRect.height + "px"; - pop.classList.add("above"); - }else{ - pop.classList.remove("above"); - } - - pop.classList.add("right"); - }else{ - pop.classList.remove("right"); - } - - - } - - function onPop(){ - popups[id].classList.add("on"); - } - - function offPop(){ - popups[id].classList.remove("on"); - } - - function hidePop(){ - setTimeout(function(){ - popups[id].classList.remove("show"); - }, 100); - } - - }); - - - if(callback) callback(); - -} - -EPUBJS.Hooks.register("beforeChapterDisplay").mathml = function(callback, renderer){ - - // check of currentChapter properties contains 'mathml' - if(renderer.currentChapter.manifestProperties.indexOf("mathml") !== -1 ){ - - // Assign callback to be inside iframe window - renderer.iframe.contentWindow.mathmlCallback = callback; - - // add MathJax config script tag to the renderer body - var s = document.createElement("script"); - s.type = 'text/x-mathjax-config'; - s.innerHTML = '\ - MathJax.Hub.Register.StartupHook("End",function () { \ - window.mathmlCallback(); \ - });\ - MathJax.Hub.Config({jax: ["input/TeX","input/MathML","output/SVG"],extensions: ["tex2jax.js","mml2jax.js","MathEvents.js"],TeX: {extensions: ["noErrors.js","noUndefined.js","autoload-all.js"]},MathMenu: {showRenderer: false},menuSettings: {zoom: "Click"},messageStyle: "none"}); \ - '; - renderer.doc.body.appendChild(s); - // add MathJax.js to renderer head - EPUBJS.core.addScript("http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML", null, renderer.doc.head); - - } else { - if(callback) callback(); - } -} - -EPUBJS.Hooks.register("beforeChapterDisplay").smartimages = function(callback, renderer){ - var images = renderer.contents.querySelectorAll('img'), - items = Array.prototype.slice.call(images), - iheight = renderer.height,//chapter.bodyEl.clientHeight,//chapter.doc.body.getBoundingClientRect().height, - oheight; - - if(renderer.layoutSettings.layout != "reflowable") { - callback(); - return; //-- Only adjust images for reflowable text - } - - items.forEach(function(item){ - - function size() { - var itemRect = item.getBoundingClientRect(), - rectHeight = itemRect.height, - top = itemRect.top, - oHeight = item.getAttribute('data-height'), - height = oHeight || rectHeight, - newHeight, - fontSize = Number(getComputedStyle(item, "").fontSize.match(/(\d*(\.\d*)?)px/)[1]), - fontAdjust = fontSize ? fontSize / 2 : 0; - - iheight = renderer.contents.clientHeight; - if(top < 0) top = 0; - - if(height + top >= iheight) { - - if(top < iheight/2) { - // Remove top and half font-size from height to keep container from overflowing - newHeight = iheight - top - fontAdjust; - item.style.maxHeight = newHeight + "px"; - item.style.width= "auto"; - }else{ - if(height > iheight) { - item.style.maxHeight = iheight + "px"; - item.style.width= "auto"; - itemRect = item.getBoundingClientRect(); - height = itemRect.height; - } - item.style.display = "block"; - item.style["WebkitColumnBreakBefore"] = "always"; - item.style["breakBefore"] = "column"; - - } - - item.setAttribute('data-height', newHeight); - - }else{ - item.style.removeProperty('max-height'); - item.style.removeProperty('margin-top'); - } - } - - item.addEventListener('load', size, false); - - renderer.on("renderer:resized", size); - - renderer.on("renderer:chapterUnloaded", function(){ - item.removeEventListener('load', size); - renderer.off("renderer:resized", size); - }); - - size(); - - }); - - if(callback) callback(); - -} - -EPUBJS.Hooks.register("beforeChapterDisplay").transculsions = function(callback, renderer){ - /* - - */ - - var trans = renderer.contents.querySelectorAll('[transclusion]'), - items = Array.prototype.slice.call(trans); - - items.forEach(function(item){ - var src = item.getAttribute("ref"), - iframe = document.createElement('iframe'), - orginal_width = item.getAttribute("width"), - orginal_height = item.getAttribute("height"), - parent = item.parentNode, - width = orginal_width, - height = orginal_height, - ratio; - - - function size() { - width = orginal_width; - height = orginal_height; - - if(width > chapter.colWidth){ - ratio = chapter.colWidth / width; - - width = chapter.colWidth; - height = height * ratio; - } - - iframe.width = width; - iframe.height = height; - } - - - size(); - - //-- resize event - - - renderer.listenUntil("renderer:resized", "renderer:chapterUnloaded", size); - - iframe.src = src; - - // - parent.replaceChild(iframe, item); - - - }); - - - - - if(callback) callback(); - - -} - -//# sourceMappingURL=hooks.js.map \ No newline at end of file diff --git a/build/hooks.js.map b/build/hooks.js.map deleted file mode 100644 index 91c094410..000000000 --- a/build/hooks.js.map +++ /dev/null @@ -1,12 +0,0 @@ -{ - "version": 3, - "file": "hooks.js", - "sources": [ - "hooks/default/endnotes.js", - "hooks/default/mathml.js", - "hooks/default/smartimages.js", - "hooks/default/transculsions.js" - ], - "names": [], - "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9JA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA" -} \ No newline at end of file diff --git a/build/hooks.min.js b/build/hooks.min.js deleted file mode 100644 index 33049a99d..000000000 --- a/build/hooks.min.js +++ /dev/null @@ -1,2 +0,0 @@ -EPUBJS.Hooks.register("beforeChapterDisplay").endnotes=function(a,b){var c=b.contents.querySelectorAll("a[href]"),d=Array.prototype.slice.call(c),e="epub:type",f="noteref",g=EPUBJS.core.folder(location.pathname),h=g+EPUBJS.cssPath||g,i={};EPUBJS.core.addCss(h+"popup.css",!1,b.render.document.head),d.forEach(function(a){function c(){var c,e,f=b.height,j=b.width,p=225;o||(c=l.cloneNode(!0),o=c.querySelector("p")),i[k]||(i[k]=document.createElement("div"),i[k].setAttribute("class","popup"),pop_content=document.createElement("div"),i[k].appendChild(pop_content),pop_content.appendChild(o),pop_content.setAttribute("class","pop_content"),b.render.document.body.appendChild(i[k]),i[k].addEventListener("mouseover",d,!1),i[k].addEventListener("mouseout",g,!1),b.on("renderer:pageChanged",h,this),b.on("renderer:pageChanged",g,this)),c=i[k],e=a.getBoundingClientRect(),m=e.left,n=e.top,c.classList.add("show"),popRect=c.getBoundingClientRect(),c.style.left=m-popRect.width/2+"px",c.style.top=n+"px",p>f/2.5&&(p=f/2.5,pop_content.style.maxHeight=p+"px"),popRect.height+n>=f-25?(c.style.top=n-popRect.height+"px",c.classList.add("above")):c.classList.remove("above"),m-popRect.width<=0?(c.style.left=m+"px",c.classList.add("left")):c.classList.remove("left"),m+popRect.width/2>=j?(c.style.left=m-300+"px",popRect=c.getBoundingClientRect(),c.style.left=m-popRect.width+"px",popRect.height+n>=f-25?(c.style.top=n-popRect.height+"px",c.classList.add("above")):c.classList.remove("above"),c.classList.add("right")):c.classList.remove("right")}function d(){i[k].classList.add("on")}function g(){i[k].classList.remove("on")}function h(){setTimeout(function(){i[k].classList.remove("show")},100)}var j,k,l,m,n,o,p=a.getAttribute(e);p==f&&(j=a.getAttribute("href"),k=j.replace("#",""),l=b.render.document.getElementById(k),a.addEventListener("mouseover",c,!1),a.addEventListener("mouseout",h,!1))}),a&&a()},EPUBJS.Hooks.register("beforeChapterDisplay").mathml=function(a,b){if(-1!==b.currentChapter.manifestProperties.indexOf("mathml")){b.iframe.contentWindow.mathmlCallback=a;var c=document.createElement("script");c.type="text/x-mathjax-config",c.innerHTML=' MathJax.Hub.Register.StartupHook("End",function () { window.mathmlCallback(); }); MathJax.Hub.Config({jax: ["input/TeX","input/MathML","output/SVG"],extensions: ["tex2jax.js","mml2jax.js","MathEvents.js"],TeX: {extensions: ["noErrors.js","noUndefined.js","autoload-all.js"]},MathMenu: {showRenderer: false},menuSettings: {zoom: "Click"},messageStyle: "none"}); ',b.doc.body.appendChild(c),EPUBJS.core.addScript("http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML",null,b.doc.head)}else a&&a()},EPUBJS.Hooks.register("beforeChapterDisplay").smartimages=function(a,b){var c=b.contents.querySelectorAll("img"),d=Array.prototype.slice.call(c),e=b.height;return"reflowable"!=b.layoutSettings.layout?void a():(d.forEach(function(a){function c(){var c,d=a.getBoundingClientRect(),f=d.height,g=d.top,h=a.getAttribute("data-height"),i=h||f,j=Number(getComputedStyle(a,"").fontSize.match(/(\d*(\.\d*)?)px/)[1]),k=j?j/2:0;e=b.contents.clientHeight,0>g&&(g=0),i+g>=e?(e/2>g?(c=e-g-k,a.style.maxHeight=c+"px",a.style.width="auto"):(i>e&&(a.style.maxHeight=e+"px",a.style.width="auto",d=a.getBoundingClientRect(),i=d.height),a.style.display="block",a.style.WebkitColumnBreakBefore="always",a.style.breakBefore="column"),a.setAttribute("data-height",c)):(a.style.removeProperty("max-height"),a.style.removeProperty("margin-top"))}a.addEventListener("load",c,!1),b.on("renderer:resized",c),b.on("renderer:chapterUnloaded",function(){a.removeEventListener("load",c),b.off("renderer:resized",c)}),c()}),void(a&&a()))},EPUBJS.Hooks.register("beforeChapterDisplay").transculsions=function(a,b){var c=b.contents.querySelectorAll("[transclusion]"),d=Array.prototype.slice.call(c);d.forEach(function(a){function c(){j=g,k=h,j>chapter.colWidth&&(d=chapter.colWidth/j,j=chapter.colWidth,k*=d),f.width=j,f.height=k}var d,e=a.getAttribute("ref"),f=document.createElement("iframe"),g=a.getAttribute("width"),h=a.getAttribute("height"),i=a.parentNode,j=g,k=h;c(),b.listenUntil("renderer:resized","renderer:chapterUnloaded",c),f.src=e,i.replaceChild(f,a)}),a&&a()}; -//# sourceMappingURL=hooks.min.map \ No newline at end of file diff --git a/build/hooks.min.map b/build/hooks.min.map deleted file mode 100644 index 783dac9d3..000000000 --- a/build/hooks.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"hooks.min.js","sources":["hooks.js"],"names":["EPUBJS","Hooks","register","endnotes","callback","renderer","notes","contents","querySelectorAll","items","Array","prototype","slice","call","attr","type","folder","core","location","pathname","cssPath","popups","addCss","render","document","head","forEach","item","showPop","pop","itemRect","iheight","height","iwidth","width","maxHeight","txt","el","cloneNode","querySelector","id","createElement","setAttribute","pop_content","appendChild","body","addEventListener","onPop","offPop","on","hidePop","this","getBoundingClientRect","left","top","classList","add","popRect","style","remove","setTimeout","href","epubType","getAttribute","replace","getElementById","mathml","currentChapter","manifestProperties","indexOf","iframe","contentWindow","mathmlCallback","s","innerHTML","doc","addScript","smartimages","images","layoutSettings","layout","size","newHeight","rectHeight","oHeight","fontSize","Number","getComputedStyle","match","fontAdjust","clientHeight","display","removeProperty","removeEventListener","off","transculsions","trans","orginal_width","orginal_height","chapter","colWidth","ratio","src","parent","parentNode","listenUntil","replaceChild"],"mappings":"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"} \ No newline at end of file diff --git a/build/libs/inflate.js b/build/libs/inflate.js deleted file mode 100644 index 5bf3eedc6..000000000 --- a/build/libs/inflate.js +++ /dev/null @@ -1,2 +0,0 @@ -!function(a){function b(){function a(a,b,c,d,j,k,l,n,p,r,s){var t,u,v,w,x,y,z,A,C,D,E,F,G,H,I;D=0,x=c;do e[a[b+D]]++,D++,x--;while(0!==x);if(e[0]==c)return l[0]=-1,n[0]=0,i;for(A=n[0],y=1;B>=y&&0===e[y];y++);for(z=y,y>A&&(A=y),x=B;0!==x&&0===e[x];x--);for(v=x,A>x&&(A=x),n[0]=A,H=1<y;y++,H<<=1)if((H-=e[y])<0)return m;if((H-=e[x])<0)return m;for(e[x]+=H,h[1]=y=0,D=1,G=2;0!==--x;)h[G]=y+=e[D],G++,D++;x=0,D=0;do 0!==(y=a[b+D])&&(s[h[y]++]=x),D++;while(++x=z;z++)for(t=e[z];0!==t--;){for(;z>F+A;){if(w++,F+=A,I=v-F,I=I>A?A:I,(u=1<<(y=z-F))>t+1&&(u-=t+1,G=z,I>y))for(;++yq)return m;g[w]=E=r[0],r[0]+=I,0!==w?(h[w]=x,f[0]=y,f[1]=A,y=x>>>F-A,f[2]=E-g[w-1]-y,p.set(f,3*(g[w-1]+y))):l[0]=E}for(f[1]=z-F,D>=c?f[0]=192:s[D]>>F;I>y;y+=u)p.set(f,3*(E+y));for(y=1<>>=1)x^=y;for(x^=y,C=(1<b;b++)d[b]=0;for(b=0;B+1>b;b++)e[b]=0;for(b=0;3>b;b++)f[b]=0;g.set(e.subarray(0,B),0),h.set(e.subarray(0,B+1),0)}var c,d,e,f,g,h,j=this;j.inflate_trees_bits=function(e,f,g,h,i){var j;return b(19),c[0]=0,j=a(e,0,19,19,null,null,g,f,h,c,d),j==m?i.msg="oversubscribed dynamic bit lengths tree":(j==o||0===f[0])&&(i.msg="incomplete dynamic bit lengths tree",j=m),j},j.inflate_trees_dynamic=function(e,f,g,h,j,k,l,p,q){var r;return b(288),c[0]=0,r=a(g,0,e,257,x,y,k,h,p,c,d),r!=i||0===h[0]?(r==m?q.msg="oversubscribed literal/length tree":r!=n&&(q.msg="incomplete literal/length tree",r=m),r):(b(288),r=a(g,e,f,0,z,A,l,j,p,c,d),r!=i||0===j[0]&&e>257?(r==m?q.msg="oversubscribed distance tree":r==o?(q.msg="incomplete distance tree",r=m):r!=n&&(q.msg="empty distance tree with lengths",r=m),r):i)}}function c(){function a(a,b,c,d,e,f,g,h){var k,l,n,o,q,r,s,t,u,v,w,x,y,z,A,B;s=h.next_in_index,t=h.avail_in,q=g.bitb,r=g.bitk,u=g.write,v=ur;)t--,q|=(255&h.read_byte(s++))<>=l[B+1],r-=l[B+1],0!==(16&o)){for(o&=15,y=l[B+2]+(q&p[o]),q>>=o,r-=o;15>r;)t--,q|=(255&h.read_byte(s++))<>=l[B+1],r-=l[B+1],0!==(16&o)){for(o&=15;o>r;)t--,q|=(255&h.read_byte(s++))<>=o,r-=o,v-=y,u>=z)A=u-z,u-A>0&&2>u-A?(g.window[u++]=g.window[A++],g.window[u++]=g.window[A++],y-=2):(g.window.set(g.window.subarray(A,A+2),u),u+=2,A+=2,y-=2);else{A=u-z;do A+=g.end;while(0>A);if(o=g.end-A,y>o){if(y-=o,u-A>0&&o>u-A){do g.window[u++]=g.window[A++];while(0!==--o)}else g.window.set(g.window.subarray(A,A+o),u),u+=o,A+=o,o=0;A=0}}if(u-A>0&&y>u-A){do g.window[u++]=g.window[A++];while(0!==--y)}else g.window.set(g.window.subarray(A,A+y),u),u+=y,A+=y,y=0;break}if(0!==(64&o))return h.msg="invalid distance code",y=h.avail_in-t,y=y>r>>3?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,h.avail_in=t,h.total_in+=s-h.next_in_index,h.next_in_index=s,g.write=u,m;k+=l[B+2],k+=q&p[o],B=3*(n+k),o=l[B]}break}if(0!==(64&o))return 0!==(32&o)?(y=h.avail_in-t,y=y>r>>3?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,h.avail_in=t,h.total_in+=s-h.next_in_index,h.next_in_index=s,g.write=u,j):(h.msg="invalid literal/length code",y=h.avail_in-t,y=y>r>>3?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,h.avail_in=t,h.total_in+=s-h.next_in_index,h.next_in_index=s,g.write=u,m);if(k+=l[B+2],k+=q&p[o],B=3*(n+k),0===(o=l[B])){q>>=l[B+1],r-=l[B+1],g.window[u++]=l[B+2],v--;break}}else q>>=l[B+1],r-=l[B+1],g.window[u++]=l[B+2],v--}while(v>=258&&t>=10);return y=h.avail_in-t,y=y>r>>3?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,h.avail_in=t,h.total_in+=s-h.next_in_index,h.next_in_index=s,g.write=u,i}var b,c,d,e,f=this,g=0,h=0,k=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0;f.init=function(a,f,g,h,i,j){b=C,r=a,s=f,d=g,t=h,e=i,u=j,c=null},f.proc=function(f,v,w){var x,y,z,A,B,M,N,O=0,P=0,Q=0;for(Q=v.next_in_index,A=v.avail_in,O=f.bitb,P=f.bitk,B=f.write,M=B=258&&A>=10&&(f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,w=a(r,s,d,t,e,u,f,v),Q=v.next_in_index,A=v.avail_in,O=f.bitb,P=f.bitk,B=f.write,M=BP;){if(0===A)return f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,f.inflate_flush(v,w);w=i,A--,O|=(255&v.read_byte(Q++))<>>=c[y+1],P-=c[y+1],z=c[y],0===z){n=c[y+2],b=I;break}if(0!==(16&z)){o=15&z,g=c[y+2],b=E;break}if(0===(64&z)){k=z,h=y/3+c[y+2];break}if(0!==(32&z)){b=J;break}return b=L,v.msg="invalid literal/length code",w=m,f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,f.inflate_flush(v,w);case E:for(x=o;x>P;){if(0===A)return f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,f.inflate_flush(v,w);w=i,A--,O|=(255&v.read_byte(Q++))<>=x,P-=x,k=s,c=e,h=u,b=F;case F:for(x=k;x>P;){if(0===A)return f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,f.inflate_flush(v,w);w=i,A--,O|=(255&v.read_byte(Q++))<>=c[y+1],P-=c[y+1],z=c[y],0!==(16&z)){o=15&z,q=c[y+2],b=G;break}if(0===(64&z)){k=z,h=y/3+c[y+2];break}return b=L,v.msg="invalid distance code",w=m,f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,f.inflate_flush(v,w);case G:for(x=o;x>P;){if(0===A)return f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,f.inflate_flush(v,w);w=i,A--,O|=(255&v.read_byte(Q++))<>=x,P-=x,b=H;case H:for(N=B-q;0>N;)N+=f.end;for(;0!==g;){if(0===M&&(B==f.end&&0!==f.read&&(B=0,M=B7&&(P-=8,A++,Q--),f.write=B,w=f.inflate_flush(v,w),B=f.write,M=Ba.avail_out&&(c=a.avail_out),0!==c&&b==o&&(b=i),a.avail_out-=c,a.total_out+=c,a.next_out.set(f.window.subarray(e,e+c),d),d+=c,e+=c,e==f.end&&(e=0,f.write==f.end&&(f.write=0),c=f.write-e,c>a.avail_out&&(c=a.avail_out),0!==c&&b==o&&(b=i),a.avail_out-=c,a.total_out+=c,a.next_out.set(f.window.subarray(e,e+c),d),d+=c,e+=c),a.next_out_index=d,f.read=e,b},f.proc=function(a,c){var d,o,q,w,y,z,A,B;for(w=a.next_in_index,y=a.avail_in,o=f.bitb,q=f.bitk,z=f.write,A=zq;){if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);c=i,y--,o|=(255&a.read_byte(w++))<>>1){case 0:o>>>=3,q-=3,d=7&q,o>>>=d,q-=d,g=O;break;case 1:var C=[],D=[],E=[[]],F=[[]];b.inflate_trees_fixed(C,D,E,F),t.init(C[0],D[0],E[0],0,F[0],0),o>>>=3,q-=3,g=T;break;case 2:o>>>=3,q-=3,g=Q;break;case 3:return o>>>=3,q-=3,g=W,a.msg="invalid block type",c=m,f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c)}break;case O:for(;32>q;){if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);c=i,y--,o|=(255&a.read_byte(w++))<>>16&65535)!=(65535&o))return g=W,a.msg="invalid stored block lengths",c=m,f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);h=65535&o,o=q=0,g=0!==h?P:0!==u?U:N;break;case P:if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);if(0===A&&(z==f.end&&0!==f.read&&(z=0,A=zy&&(d=y),d>A&&(d=A),f.window.set(a.read_buf(w,d),z),w+=d,y-=d,z+=d,A-=d,0!==(h-=d))break;g=0!==u?U:N;break;case Q:for(;14>q;){if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);c=i,y--,o|=(255&a.read_byte(w++))<29||(d>>5&31)>29)return g=W,a.msg="too many length or distance symbols",c=m,f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);if(d=258+(31&d)+(d>>5&31),!e||e.lengthB;B++)e[B]=0;o>>>=14,q-=14,n=0,g=R;case R:for(;4+(k>>>10)>n;){for(;3>q;){if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);c=i,y--,o|=(255&a.read_byte(w++))<>>=3,q-=3}for(;19>n;)e[M[n++]]=0;if(r[0]=7,d=x.inflate_trees_bits(e,r,s,v,a),d!=i)return c=d,c==m&&(e=null,g=W),f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);n=0,g=S;case S:for(;;){if(d=k,!(258+(31&d)+(d>>5&31)>n))break;var G,H;for(d=r[0];d>q;){if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);c=i,y--,o|=(255&a.read_byte(w++))<H)o>>>=d,q-=d,e[n++]=H;else{for(B=18==H?7:H-14,G=18==H?11:3;d+B>q;){if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);c=i,y--,o|=(255&a.read_byte(w++))<>>=d,q-=d,G+=o&p[B],o>>>=B,q-=B,B=n,d=k,B+G>258+(31&d)+(d>>5&31)||16==H&&1>B)return e=null,g=W,a.msg="invalid bit length repeat",c=m,f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);H=16==H?e[B-1]:0;do e[B++]=H;while(0!==--G);n=B}}s[0]=-1;var I=[],J=[],K=[],L=[];if(I[0]=9,J[0]=6,d=k,d=x.inflate_trees_dynamic(257+(31&d),1+(d>>5&31),e,I,J,K,L,v,a),d!=i)return d==m&&(e=null,g=W),c=d,f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);t.init(I[0],J[0],v,K[0],v,L[0]),g=T;case T:if(f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,(c=t.proc(f,a,c))!=j)return f.inflate_flush(a,c);if(c=i,t.free(a),w=a.next_in_index,y=a.avail_in,o=f.bitb,q=f.bitk,z=f.write,A=ze||e>15?(b.inflateEnd(c),l):(b.wbits=e,c.istate.blocks=new d(c,1<>4)+8>a.istate.wbits){a.istate.mode=gb,a.msg="invalid window size",a.istate.marker=5;break}a.istate.mode=$;case $:if(0===a.avail_in)return c;if(c=b,a.avail_in--,a.total_in++,d=255&a.read_byte(a.next_in_index++),((a.istate.method<<8)+d)%31!==0){a.istate.mode=gb,a.msg="incorrect header check",a.istate.marker=5;break}if(0===(d&X)){a.istate.mode=eb;break}a.istate.mode=_;case _:if(0===a.avail_in)return c;c=b,a.avail_in--,a.total_in++,a.istate.need=(255&a.read_byte(a.next_in_index++))<<24&4278190080,a.istate.mode=ab;case ab:if(0===a.avail_in)return c;c=b,a.avail_in--,a.total_in++,a.istate.need+=(255&a.read_byte(a.next_in_index++))<<16&16711680,a.istate.mode=bb;case bb:if(0===a.avail_in)return c;c=b,a.avail_in--,a.total_in++,a.istate.need+=(255&a.read_byte(a.next_in_index++))<<8&65280,a.istate.mode=cb;case cb:return 0===a.avail_in?c:(c=b,a.avail_in--,a.total_in++,a.istate.need+=255&a.read_byte(a.next_in_index++),a.istate.mode=db,k);case db:return a.istate.mode=gb,a.msg="need dictionary",a.istate.marker=0,l;case eb:if(c=a.istate.blocks.proc(a,c),c==m){a.istate.mode=gb,a.istate.marker=0;break}if(c==i&&(c=b),c!=j)return c;c=b,a.istate.blocks.reset(a,a.istate.was),a.istate.mode=fb;case fb:return j;case gb:return m;default:return l}},b.inflateSetDictionary=function(a,b,c){var d=0,e=c;return a&&a.istate&&a.istate.mode==db?(e>=1<e;)b.read_byte(d)==hb[e]?e++:e=0!==b.read_byte(d)?0:4-e,d++,c--;return b.total_in+=d-b.next_in_index,b.next_in_index=d,b.avail_in=c,b.istate.marker=e,4!=e?m:(f=b.total_in,g=b.total_out,a(b),b.total_in=f,b.total_out=g,b.istate.mode=eb,i)},b.inflateSyncPoint=function(a){return a&&a.istate&&a.istate.blocks?a.istate.blocks.sync_point():l}}function f(){}function g(){var a=this,b=new f,c=512,d=r,e=new Uint8Array(c),g=!1;b.inflateInit(),b.next_out=e,a.append=function(a,f){var h,k,l=[],m=0,n=0,p=0;if(0!==a.length){b.next_in_index=0,b.next_in=a,b.avail_in=a.length;do{if(b.next_out_index=0,b.avail_out=c,0!==b.avail_in||g||(b.next_in_index=0,g=!0),h=b.inflate(d),g&&h==o)return-1;if(h!=i&&h!=j)throw"inflating: "+b.msg;if((g||h==j)&&b.avail_in==a.length)return-1;b.next_out_index&&l.push(b.next_out_index==c?new Uint8Array(e):new Uint8Array(e.subarray(0,b.next_out_index))),p+=b.next_out_index,f&&b.next_in_index>0&&b.next_in_index!=m&&(f(b.next_in_index),m=b.next_in_index)}while(b.avail_in>0||0===b.avail_out);return k=new Uint8Array(p),l.forEach(function(a){k.set(a,n),n+=a.length}),k}},a.flush=function(){b.inflateEnd()}}var h=15,i=0,j=1,k=2,l=-2,m=-3,n=-4,o=-5,p=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],q=1440,r=0,s=4,t=9,u=5,v=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],w=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],x=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],y=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,112,112],z=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],A=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],B=15;b.inflate_trees_fixed=function(a,b,c,d){return a[0]=t,b[0]=u,c[0]=v,d[0]=w,i};var C=0,D=1,E=2,F=3,G=4,H=5,I=6,J=7,K=8,L=9,M=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],N=0,O=1,P=2,Q=3,R=4,S=5,T=6,U=7,V=8,W=9,X=32,Y=8,Z=0,$=1,_=2,ab=3,bb=4,cb=5,db=6,eb=7,fb=12,gb=13,hb=[0,0,255,255];f.prototype={inflateInit:function(a){var b=this;return b.istate=new e,a||(a=h),b.istate.inflateInit(b,a)},inflate:function(a){var b=this;return b.istate?b.istate.inflate(b,a):l},inflateEnd:function(){var a=this;if(!a.istate)return l;var b=a.istate.inflateEnd(a);return a.istate=null,b},inflateSync:function(){var a=this;return a.istate?a.istate.inflateSync(a):l},inflateSetDictionary:function(a,b){var c=this;return c.istate?c.istate.inflateSetDictionary(c,a,b):l},read_byte:function(a){var b=this;return b.next_in.subarray(a,a+1)[0]},read_buf:function(a,b){var c=this;return c.next_in.subarray(a,a+b)}};var ib;a.zip?a.zip.Inflater=g:(ib=new g,a.addEventListener("message",function(b){var c=b.data;c.append&&a.postMessage({onappend:!0,data:ib.append(c.data,function(b){a.postMessage({progress:!0,current:b})})}),c.flush&&(ib.flush(),a.postMessage({onflush:!0}))},!1))}(this); -//# sourceMappingURL=inflate.map \ No newline at end of file diff --git a/build/libs/inflate.map b/build/libs/inflate.map deleted file mode 100644 index dc483173d..000000000 --- a/build/libs/inflate.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"inflate.js","sources":["../../libs/zip/inflate.js"],"names":["obj","InfTree","huft_build","b","bindex","n","s","d","e","t","m","hp","hn","v","a","f","g","h","i","j","k","l","mask","p","q","w","xp","y","z","c","Z_OK","BMAX","Z_DATA_ERROR","x","u","MANY","r","set","Z_BUF_ERROR","initWorkArea","vsize","Int32Array","length","subarray","that","this","inflate_trees_bits","bb","tb","result","msg","inflate_trees_dynamic","nl","nd","bl","bd","tl","td","cplens","cplext","Z_MEM_ERROR","cpdist","cpdext","InfCodes","inflate_fast","tl_index","td_index","tp","tp_index","ml","md","tp_index_t_3","next_in_index","avail_in","bitb","bitk","write","read","end","inflate_mask","read_byte","window","total_in","Z_STREAM_END","mode","tree","ltree","dtree","len","tree_index","need","lit","get","dist","lbits","dbits","ltree_index","dtree_index","init","START","proc","tindex","WASH","BADCODE","LEN","inflate_flush","LIT","LENEXT","DIST","DISTEXT","COPY","END","Z_STREAM_ERROR","free","InfBlocks","blens","TYPE","left","table","index","codes","last","hufts","check","inftree","Uint8Array","reset","CODES","next_out_index","avail_out","total_out","next_out","LENS","inflate_trees_fixed","TABLE","BADBLOCKS","STORED","DRY","read_buf","BTREE","border","DTREE","bl_","bd_","tl_","td_","DONELOCKS","set_dictionary","start","sync_point","Inflate","inflateReset","istate","BLOCKS","blocks","method","was","marker","wbits","inflateEnd","inflateInit","inflate","next_in","Z_FINISH","METHOD","Z_DEFLATED","BAD","FLAG","PRESET_DICT","DICT4","DICT3","DICT2","DICT1","DICT0","Z_NEED_DICT","DONE","inflateSetDictionary","dictionary","dictLength","inflateSync","mark","inflateSyncPoint","ZStream","Inflater","bufsize","flush","Z_NO_FLUSH","buf","nomoreinput","append","data","onprogress","err","array","buffers","lastIndex","bufferIndex","bufferSize","push","forEach","chunk","MAX_BITS","fixed_bl","fixed_bd","fixed_tl","fixed_td","prototype","bits","ret","size","inflater","zip","addEventListener","event","message","postMessage","onappend","current","progress","onflush"],"mappings":"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,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAC9I,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAC9I,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAC9I,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAC/I,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAC/I,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EACjJ,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAC/I,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAC7I,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAC/I,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAC7I,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAChJ,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAC/I,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAC/I,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAC/I,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAC9I,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAC9I,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAC/I,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAChJ,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EACjJ,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EACjJ,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAChJ,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EACjJ,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EACjJ,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAC/I,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,EACjJ,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EACjJ,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EACjJ,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EACjJ,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EACjJ,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EACjJ,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAChJ,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,IAAK,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAChJ,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAChJ,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,GAAI,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,IAAK,EAAG,EAAG,GAAI,EAAG,EAAG,KACxGC,GAAa,GAAI,EAAG,EAAG,GAAI,EAAG,IAAK,GAAI,EAAG,GAAI,GAAI,EAAG,KAAM,GAAI,EAAG,EAAG,GAAI,EAAG,KAAM,GAAI,EAAG,GAAI,GAAI,EAAG,MAAO,GAAI,EAAG,EAAG,GAAI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"} \ No newline at end of file diff --git a/build/libs/screenfull.min.js b/build/libs/screenfull.min.js deleted file mode 100644 index 6f5eaf336..000000000 --- a/build/libs/screenfull.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! -* screenfull -* v1.1.0 - 2013-09-06 -* https://github.com/sindresorhus/screenfull.js -* (c) Sindre Sorhus; MIT License -*/ -!function(a,b){"use strict";var c="undefined"!=typeof Element&&"ALLOW_KEYBOARD_INPUT"in Element,d=function(){for(var a,c,d=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenchange","MSFullscreenerror"]],e=0,f=d.length,g={};f>e;e++)if(a=d[e],a&&a[1]in b){for(e=0,c=a.length;c>e;e++)g[d[0][e]]=a[e];return g}return!1}(),e={request:function(a){var e=d.requestFullscreen;a=a||b.documentElement,/5\.1[\.\d]* Safari/.test(navigator.userAgent)?a[e]():a[e](c&&Element.ALLOW_KEYBOARD_INPUT)},exit:function(){b[d.exitFullscreen]()},toggle:function(a){this.isFullscreen?this.exit():this.request(a)},onchange:function(){},onerror:function(){},raw:d};return d?(Object.defineProperties(e,{isFullscreen:{get:function(){return!!b[d.fullscreenElement]}},element:{enumerable:!0,get:function(){return b[d.fullscreenElement]}},enabled:{enumerable:!0,get:function(){return!!b[d.fullscreenEnabled]}}}),b.addEventListener(d.fullscreenchange,function(a){e.onchange.call(e,a)}),b.addEventListener(d.fullscreenerror,function(a){e.onerror.call(e,a)}),a.screenfull=e,void 0):(a.screenfull=!1,void 0)}(window,document); \ No newline at end of file diff --git a/build/libs/zip.min.js b/build/libs/zip.min.js deleted file mode 100644 index 0e9ec88c2..000000000 --- a/build/libs/zip.min.js +++ /dev/null @@ -1,30 +0,0 @@ -/*! - Copyright (c) 2013 Gildas Lormeau. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the distribution. - - 3. The names of the authors may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, - INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -!function(a){function b(){var a=-1,b=this;b.append=function(c){var d,e=b.table;for(d=0;d>>8^e[255&(a^c[d])]},b.get=function(){return~a}}function c(a,b,c){return a.slice?a.slice(b,b+c):a.webkitSlice?a.webkitSlice(b,b+c):a.mozSlice?a.mozSlice(b,b+c):a.msSlice?a.msSlice(b,b+c):void 0}function d(a,b){var c,d;return c=new ArrayBuffer(a),d=new Uint8Array(c),b&&d.set(b,0),{buffer:c,array:d,view:new DataView(c)}}function e(){}function f(a){function b(b,c){var f=new Blob([a],{type:M});d=new h(f),d.init(function(){e.size=d.size,b()},c)}function c(a,b,c,e){d.readUint8Array(a,b,c,e)}var d,e=this;e.size=0,e.init=b,e.readUint8Array=c}function g(b){function c(a){for(var c=b.length;"="==b.charAt(c-1);)c--;f=b.indexOf(",")+1,g.size=Math.floor(.75*(c-f)),a()}function e(c,e,g){var h,i=d(e),j=4*Math.floor(c/3),k=4*Math.ceil((c+e)/3),l=a.atob(b.substring(j+f,k+f)),m=c-3*Math.floor(j/4);for(h=m;m+e>h;h++)i.array[h-m]=l.charCodeAt(h);g(i.array)}var f,g=this;g.size=0,g.init=c,g.readUint8Array=e}function h(a){function b(b){this.size=a.size,b()}function d(b,d,e,f){var g=new FileReader;g.onload=function(a){e(new Uint8Array(a.target.result))},g.onerror=f,g.readAsArrayBuffer(c(a,b,d))}var e=this;e.size=0,e.init=b,e.readUint8Array=d}function i(){}function j(a){function b(a){e=new Blob([],{type:M}),a()}function c(a,b){e=new Blob([e,A?a:a.buffer],{type:M}),b()}function d(b,c){var d=new FileReader;d.onload=function(a){b(a.target.result)},d.onerror=c,d.readAsText(e,a)}var e,f=this;f.init=b,f.writeUint8Array=c,f.getData=d}function k(b){function c(a){g+="data:"+(b||"")+";base64,",a()}function d(b,c){var d,e=h.length,f=h;for(h="",d=0;d<3*Math.floor((e+b.length)/3)-e;d++)f+=String.fromCharCode(b[d]);for(;d2?g+=a.btoa(f):h=f,c()}function e(b){b(g+a.btoa(h))}var f=this,g="",h="";f.init=c,f.writeUint8Array=d,f.getData=e}function l(a){function b(b){e=new Blob([],{type:a}),b()}function c(b,c){e=new Blob([e,A?b:b.buffer],{type:a}),c()}function d(a){a(e)}var e,f=this;f.init=b,f.writeUint8Array=c,f.getData=d}function m(a,b,c,d,e,f,g,h,i,j){function k(){a.removeEventListener(N,l,!1),h(o)}function l(a){var b=a.data,d=b.data;b.onappend&&(o+=d.length,c.writeUint8Array(d,function(){f(!1,d),m()},j)),b.onflush&&(d?(o+=d.length,c.writeUint8Array(d,function(){f(!1,d),k()},j)):k()),b.progress&&g&&g(n+b.current,e)}function m(){n=p*J,e>n?b.readUint8Array(d+n,Math.min(J,e-n),function(b){a.postMessage({append:!0,data:b}),p++,g&&g(n,e),f(!0,b)},i):a.postMessage({flush:!0})}var n,o,p=0;o=0,a.addEventListener(N,l,!1),m()}function n(a,b,c,d,e,f,g,h,i,j){function k(){var o;l=m*J,e>l?b.readUint8Array(d+l,Math.min(J,e-l),function(b){var h=a.append(b,function(){g&&g(d+l,e)});n+=h.length,f(!0,b),c.writeUint8Array(h,function(){f(!1,h),m++,setTimeout(k,1)},j),g&&g(l,e)},i):(o=a.flush(),o?(n+=o.length,c.writeUint8Array(o,function(){f(!1,o),h(n)},j)):h(n))}var l,m=0,n=0;k()}function o(c,d,e,f,g,h,i,j,k){function l(a,b){g&&!a&&q.append(b)}function o(a){h(a,q.get())}var p,q=new b;return a.zip.useWebWorkers?(p=new Worker(a.zip.workerScriptsPath+K),m(p,c,d,e,f,l,i,o,j,k)):n(new a.zip.Inflater,c,d,e,f,l,i,o,j,k),p}function p(c,d,e,f,g,h,i){function j(a,b){a&&p.append(b)}function k(a){f(a,p.get())}function l(){o.removeEventListener(N,l,!1),m(o,c,d,0,c.size,j,g,k,h,i)}var o,p=new b;return a.zip.useWebWorkers?(o=new Worker(a.zip.workerScriptsPath+L),o.addEventListener(N,l,!1),o.postMessage({init:!0,level:e})):n(new a.zip.Deflater,c,d,0,c.size,j,g,k,h,i),o}function q(a,c,d,e,f,g,h,i,j){function k(){var b=l*J;e>b?a.readUint8Array(d+b,Math.min(J,e-b),function(a){f&&m.append(a),h&&h(b,e,a),c.writeUint8Array(a,function(){l++,k()},j)},i):g(e,m.get())}var l=0,m=new b;k()}function r(a){var b,c,d="",e=["Ç","ü","é","â","ä","à","å","ç","ê","ë","è","ï","î","ì","Ä","Å","É","æ","Æ","ô","ö","ò","û","ù","ÿ","Ö","Ü","ø","£","Ø","×","ƒ","á","í","ó","ú","ñ","Ñ","ª","º","¿","®","¬","½","¼","¡","«","»","_","_","_","¦","¦","Á","Â","À","©","¦","¦","+","+","¢","¥","+","+","-","-","+","-","+","ã","Ã","+","+","-","-","¦","-","+","¤","ð","Ð","Ê","Ë","È","i","Í","Î","Ï","+","+","_","_","¦","Ì","_","Ó","ß","Ô","Ò","õ","Õ","µ","þ","Þ","Ú","Û","Ù","ý","Ý","¯","´","­","±","_","¾","¶","§","÷","¸","°","¨","·","¹","³","²","_"," "];for(b=0;b127?e[c-128]:String.fromCharCode(c);return d}function s(a){return decodeURIComponent(escape(a))}function t(a){var b,c="";for(b=0;b>16,c=65535&a;try{return new Date(1980+((65024&b)>>9),((480&b)>>5)-1,31&b,(63488&c)>>11,(2016&c)>>5,2*(31&c),0)}catch(d){}}function v(a,b,c,d,e){return a.version=b.view.getUint16(c,!0),a.bitFlag=b.view.getUint16(c+2,!0),a.compressionMethod=b.view.getUint16(c+4,!0),a.lastModDateRaw=b.view.getUint32(c+6,!0),a.lastModDate=u(a.lastModDateRaw),1===(1&a.bitFlag)?void e(C):((d||8!=(8&a.bitFlag))&&(a.crc32=b.view.getUint32(c+10,!0),a.compressedSize=b.view.getUint32(c+14,!0),a.uncompressedSize=b.view.getUint32(c+18,!0)),4294967295===a.compressedSize||4294967295===a.uncompressedSize?void e(D):(a.filenameLength=b.view.getUint16(c+22,!0),void(a.extraFieldLength=b.view.getUint16(c+24,!0))))}function w(a,b){function c(){}function e(c,f){a.readUint8Array(a.size-c,c,function(a){var b=d(a.length,a).view;1347093766!=b.getUint32(0)?e(c+1,f):f(b)},function(){b(E)})}return c.prototype.getData=function(c,e,f,g){function h(a,b){m&&m.terminate(),m=null,a&&a(b)}function i(a){var b=d(4);return b.view.setUint32(0,a),n.crc32==b.view.getUint32(0)}function j(a,b){g&&!i(b)?k():c.getData(function(a){h(e,a)})}function k(){h(b,H)}function l(){h(b,G)}var m,n=this;a.readUint8Array(n.offset,30,function(e){var h,i=d(e.length,e);return 1347093252!=i.view.getUint32(0)?void b(B):(v(n,i,4,!1,b),h=n.offset+30+n.filenameLength+n.extraFieldLength,void c.init(function(){0===n.compressionMethod?q(a,c,h,n.compressedSize,g,j,f,k,l):m=o(a,c,h,n.compressedSize,g,j,f,k,l)},l))},k)},{getEntries:function(f){return a.size<22?void b(B):void e(22,function(e){var g,h;g=e.getUint32(16,!0),h=e.getUint16(8,!0),a.readUint8Array(g,a.size-g,function(a){var e,g,i,j,k=0,l=[],m=d(a.length,a);for(e=0;h>e;e++){if(g=new c,1347092738!=m.view.getUint32(k))return void b(B);v(g,m,k+6,!0,b),g.commentLength=m.view.getUint16(k+32,!0),g.directory=16==(16&m.view.getUint8(k+38)),g.offset=m.view.getUint32(k+42,!0),i=t(m.array.subarray(k+46,k+46+g.filenameLength)),g.filename=2048===(2048&g.bitFlag)?s(i):r(i),g.directory||"/"!=g.filename.charAt(g.filename.length-1)||(g.directory=!0),j=t(m.array.subarray(k+46+g.filenameLength+g.extraFieldLength,k+46+g.filenameLength+g.extraFieldLength+g.commentLength)),g.comment=2048===(2048&g.bitFlag)?s(j):r(j),l.push(g),k+=46+g.filenameLength+g.extraFieldLength+g.commentLength}f(l)},function(){b(E)})})},close:function(a){a&&a()}}}function x(a){return unescape(encodeURIComponent(a))}function y(a){var b,c=[];for(b=0;ba;a++){for(c=a,b=0;8>b;b++)1&c?c=c>>>1^3988292384:c>>>=1;d[a]=c}return d}(),f.prototype=new e,f.prototype.constructor=f,g.prototype=new e,g.prototype.constructor=g,h.prototype=new e,h.prototype.constructor=h,i.prototype.getData=function(a){a(this.data)},j.prototype=new i,j.prototype.constructor=j,k.prototype=new i,k.prototype.constructor=k,l.prototype=new i,l.prototype.constructor=l,a.zip={Reader:e,Writer:i,BlobReader:h,Data64URIReader:g,TextReader:f,BlobWriter:l,Data64URIWriter:k,TextWriter:j,createReader:function(a,b,c){a.init(function(){b(w(a,c))},c)},createWriter:function(a,b,c,d){a.init(function(){b(z(a,c,d))},c)},workerScriptsPath:"",useWebWorkers:!0}}(this),function(){function a(a){function b(b){this.size=a.uncompressedSize,b()}function c(b){f.data?b():a.getData(new r,function(a){f.data=a,e=new v(a),b()},null,f.checkCrc32)}function d(a,b,d,f){c(function(){e.readUint8Array(a,b,d,f)},f)}var e,f=this;f.size=0,f.init=b,f.readUint8Array=d}function b(a){function b(a){c+=a.uncompressedSize||0,a.children.forEach(b)}var c=0;return b(a),c}function c(a,b,d){function e(){g++,g -1 ) return; - - this.settings.bookmarks.push(cfi); - - this.trigger("reader:bookmarked", cfi); -}; - -EPUBJS.Reader.prototype.removeBookmark = function(cfi) { - var bookmark = this.isBookmarked(cfi); - if( bookmark === -1 ) return; - - delete this.settings.bookmarks[bookmark]; - - this.trigger("reader:unbookmarked", bookmark); -}; - -EPUBJS.Reader.prototype.isBookmarked = function(cfi) { - var bookmarks = this.settings.bookmarks; - - return bookmarks.indexOf(cfi); -}; - -/* -EPUBJS.Reader.prototype.searchBookmarked = function(cfi) { - var bookmarks = this.settings.bookmarks, - len = bookmarks.length, - i; - - for(i = 0; i < len; i++) { - if (bookmarks[i]['cfi'] === cfi) return i; - } - return -1; -}; -*/ - -EPUBJS.Reader.prototype.clearBookmarks = function() { - this.settings.bookmarks = []; -}; - -//-- Notes -EPUBJS.Reader.prototype.addNote = function(note) { - this.settings.annotations.push(note); -}; - -EPUBJS.Reader.prototype.removeNote = function(note) { - var index = this.settings.annotations.indexOf(note); - if( index === -1 ) return; - - delete this.settings.annotations[index]; - -}; - -EPUBJS.Reader.prototype.clearNotes = function() { - this.settings.annotations = []; -}; - -//-- Settings -EPUBJS.Reader.prototype.setBookKey = function(identifier){ - if(!this.settings.bookKey) { - this.settings.bookKey = "epubjsreader:" + EPUBJS.VERSION + ":" + window.location.host + ":" + identifier; - } - return this.settings.bookKey; -}; - -//-- Checks if the book setting can be retrieved from localStorage -EPUBJS.Reader.prototype.isSaved = function(bookPath) { - var storedSettings; - - if(!localStorage) { - return false; - } - - storedSettings = localStorage.getItem(this.settings.bookKey); - - if(storedSettings === null) { - return false; - } else { - return true; - } -}; - -EPUBJS.Reader.prototype.removeSavedSettings = function() { - if(!localStorage) { - return false; - } - - localStorage.removeItem(this.settings.bookKey); -}; - -EPUBJS.Reader.prototype.applySavedSettings = function() { - var stored; - - if(!localStorage) { - return false; - } - - stored = JSON.parse(localStorage.getItem(this.settings.bookKey)); - - if(stored) { - this.settings = _.defaults(this.settings, stored); - return true; - } else { - return false; - } -}; - -EPUBJS.Reader.prototype.saveSettings = function(){ - if(this.book) { - this.settings.previousLocationCfi = this.book.getCurrentLocationCfi(); - } - - if(!localStorage) { - return false; - } - - localStorage.setItem(this.settings.bookKey, JSON.stringify(this.settings)); -}; - -EPUBJS.Reader.prototype.unload = function(){ - if(this.settings.restore && localStorage) { - this.saveSettings(); - } -}; - - -EPUBJS.Reader.prototype.hashChanged = function(){ - var hash = window.location.hash.slice(1); - this.book.goto(hash); -}; - -EPUBJS.Reader.prototype.selectedRange = function(range){ - var epubcfi = new EPUBJS.EpubCFI(); - var cfi = epubcfi.generateCfiFromRangeAnchor(range, this.book.renderer.currentChapter.cfiBase); - var cfiFragment = "#"+cfi; - - // Update the History Location - if(this.settings.history && - window.location.hash != cfiFragment) { - // Add CFI fragment to the history - history.pushState({}, '', cfiFragment); - this.currentLocationCfi = cfi; - } -}; - -//-- Enable binding events to reader -RSVP.EventTarget.mixin(EPUBJS.Reader.prototype); -EPUBJS.reader.BookmarksController = function() { - var reader = this; - var book = this.book; - - var $bookmarks = $("#bookmarksView"), - $list = $bookmarks.find("#bookmarks"); - - var docfrag = document.createDocumentFragment(); - - var show = function() { - $bookmarks.show(); - }; - - var hide = function() { - $bookmarks.hide(); - }; - - var counter = 0; - - var createBookmarkItem = function(cfi) { - var listitem = document.createElement("li"), - link = document.createElement("a"); - - listitem.id = "bookmark-"+counter; - listitem.classList.add('list_item'); - - //-- TODO: Parse Cfi - link.textContent = cfi; - link.href = cfi; - - link.classList.add('bookmark_link'); - - link.addEventListener("click", function(event){ - var cfi = this.getAttribute('href'); - book.gotoCfi(cfi); - event.preventDefault(); - }, false); - - listitem.appendChild(link); - - counter++; - - return listitem; - }; - - this.settings.bookmarks.forEach(function(cfi) { - var bookmark = createBookmarkItem(cfi); - docfrag.appendChild(bookmark); - }); - - $list.append(docfrag); - - this.on("reader:bookmarked", function(cfi) { - var item = createBookmarkItem(cfi); - $list.append(item); - }); - - this.on("reader:unbookmarked", function(index) { - var $item = $("#bookmark-"+index); - $item.remove(); - }); - - return { - "show" : show, - "hide" : hide - }; -}; -EPUBJS.reader.ControlsController = function(book) { - var reader = this; - - var $store = $("#store"), - $fullscreen = $("#fullscreen"), - $fullscreenicon = $("#fullscreenicon"), - $cancelfullscreenicon = $("#cancelfullscreenicon"), - $slider = $("#slider"), - $main = $("#main"), - $sidebar = $("#sidebar"), - $settings = $("#setting"), - $bookmark = $("#bookmark"); - - var goOnline = function() { - reader.offline = false; - // $store.attr("src", $icon.data("save")); - }; - - var goOffline = function() { - reader.offline = true; - // $store.attr("src", $icon.data("saved")); - }; - - var fullscreen = false; - - book.on("book:online", goOnline); - book.on("book:offline", goOffline); - - $slider.on("click", function () { - if(reader.sidebarOpen) { - reader.SidebarController.hide(); - $slider.addClass("icon-menu"); - $slider.removeClass("icon-right"); - } else { - reader.SidebarController.show(); - $slider.addClass("icon-right"); - $slider.removeClass("icon-menu"); - } - }); - - $fullscreen.on("click", function() { - screenfull.toggle($('#container')[0]); - }); - - if(screenfull) { - document.addEventListener(screenfull.raw.fullscreenchange, function() { - fullscreen = screenfull.isFullscreen; - if(fullscreen) { - $fullscreen - .addClass("icon-resize-small") - .removeClass("icon-resize-full"); - } else { - $fullscreen - .addClass("icon-resize-full") - .removeClass("icon-resize-small"); - } - }); - } - - $settings.on("click", function() { - reader.SettingsController.show(); - }); - - $bookmark.on("click", function() { - var cfi = reader.book.getCurrentLocationCfi(); - var bookmarked = reader.isBookmarked(cfi); - - if(bookmarked === -1) { //-- Add bookmark - reader.addBookmark(cfi); - $bookmark - .addClass("icon-bookmark") - .removeClass("icon-bookmark-empty"); - } else { //-- Remove Bookmark - reader.removeBookmark(cfi); - $bookmark - .removeClass("icon-bookmark") - .addClass("icon-bookmark-empty"); - } - - }); - - book.on('renderer:locationChanged', function(cfi){ - var cfiFragment = "#" + cfi; - //-- Check if bookmarked - var bookmarked = reader.isBookmarked(cfi); - if(bookmarked === -1) { //-- Not bookmarked - $bookmark - .removeClass("icon-bookmark") - .addClass("icon-bookmark-empty"); - } else { //-- Bookmarked - $bookmark - .addClass("icon-bookmark") - .removeClass("icon-bookmark-empty"); - } - - reader.currentLocationCfi = cfi; - - // Update the History Location - if(reader.settings.history && - window.location.hash != cfiFragment) { - // Add CFI fragment to the history - history.pushState({}, '', cfiFragment); - } - }); - - book.on('book:pageChanged', function(location){ - // console.log("page", location.page, location.percentage) - }); - - return { - - }; -}; -EPUBJS.reader.MetaController = function(meta) { - var title = meta.bookTitle, - author = meta.creator; - - var $title = $("#book-title"), - $author = $("#chapter-title"), - $dash = $("#title-seperator"); - - document.title = title+" – "+author; - - $title.html(title); - $author.html(author); - $dash.show(); -}; -EPUBJS.reader.NotesController = function() { - var book = this.book; - var reader = this; - var $notesView = $("#notesView"); - var $notes = $("#notes"); - var $text = $("#note-text"); - var $anchor = $("#note-anchor"); - var annotations = reader.settings.annotations; - var renderer = book.renderer; - var popups = []; - var epubcfi = new EPUBJS.EpubCFI(); - - var show = function() { - $notesView.show(); - }; - - var hide = function() { - $notesView.hide(); - } - - var insertAtPoint = function(e) { - var range; - var textNode; - var offset; - var doc = book.renderer.doc; - var cfi; - var annotation; - - // standard - if (doc.caretPositionFromPoint) { - range = doc.caretPositionFromPoint(e.clientX, e.clientY); - textNode = range.offsetNode; - offset = range.offset; - // WebKit - } else if (doc.caretRangeFromPoint) { - range = doc.caretRangeFromPoint(e.clientX, e.clientY); - textNode = range.startContainer; - offset = range.startOffset; - } - - if (textNode.nodeType !== 3) { - for (var i=0; i < textNode.childNodes.length; i++) { - if (textNode.childNodes[i].nodeType == 3) { - textNode = textNode.childNodes[i]; - break; - } - } - } - - // Find the end of the sentance - offset = textNode.textContent.indexOf(".", offset); - if(offset === -1){ - offset = textNode.length; // Last item - } else { - offset += 1; // After the period - } - - cfi = epubcfi.generateCfiFromTextNode(textNode, offset, book.renderer.currentChapter.cfiBase); - - annotation = { - annotatedAt: new Date(), - anchor: cfi, - body: $text.val() - } - - // add to list - reader.addNote(annotation); - - // attach - addAnnotation(annotation); - placeMarker(annotation); - - // clear - $text.val(''); - $anchor.text("Attach"); - $text.prop("disabled", false); - - book.off("renderer:click", insertAtPoint); - - }; - - var addAnnotation = function(annotation){ - var note = document.createElement("li"); - var link = document.createElement("a"); - - note.innerHTML = annotation.body; - // note.setAttribute("ref", annotation.anchor); - link.innerHTML = " context »"; - link.href = "#"+annotation.anchor; - link.onclick = function(){ - book.gotoCfi(annotation.anchor); - return false; - }; - - note.appendChild(link); - $notes.append(note); - - }; - - var placeMarker = function(annotation){ - var doc = book.renderer.doc; - var marker = document.createElement("span"); - var mark = document.createElement("a"); - marker.classList.add("footnotesuperscript", "reader_generated"); - - marker.style.verticalAlign = "super"; - marker.style.fontSize = ".75em"; - // marker.style.position = "relative"; - marker.style.lineHeight = "1em"; - - // mark.style.display = "inline-block"; - mark.style.padding = "2px"; - mark.style.backgroundColor = "#fffa96"; - mark.style.borderRadius = "5px"; - mark.style.cursor = "pointer"; - - marker.id = "note-"+EPUBJS.core.uuid(); - mark.innerHTML = annotations.indexOf(annotation) + 1 + "[Reader]"; - - marker.appendChild(mark); - epubcfi.addMarker(annotation.anchor, doc, marker); - - markerEvents(marker, annotation.body); - } - - var markerEvents = function(item, txt){ - var id = item.id; - - var showPop = function(){ - var poppos, - iheight = renderer.height, - iwidth = renderer.width, - tip, - pop, - maxHeight = 225, - itemRect, - left, - top, - pos; - - - //-- create a popup with endnote inside of it - if(!popups[id]) { - popups[id] = document.createElement("div"); - popups[id].setAttribute("class", "popup"); - - pop_content = document.createElement("div"); - - popups[id].appendChild(pop_content); - - pop_content.innerHTML = txt; - pop_content.setAttribute("class", "pop_content"); - - renderer.render.document.body.appendChild(popups[id]); - - //-- TODO: will these leak memory? - Fred - popups[id].addEventListener("mouseover", onPop, false); - popups[id].addEventListener("mouseout", offPop, false); - - //-- Add hide on page change - renderer.on("renderer:locationChanged", hidePop, this); - renderer.on("renderer:locationChanged", offPop, this); - // chapter.book.on("renderer:chapterDestroy", hidePop, this); - } - - pop = popups[id]; - - - //-- get location of item - itemRect = item.getBoundingClientRect(); - left = itemRect.left; - top = itemRect.top; - - //-- show the popup - pop.classList.add("show"); - - //-- locations of popup - popRect = pop.getBoundingClientRect(); - - //-- position the popup - pop.style.left = left - popRect.width / 2 + "px"; - pop.style.top = top + "px"; - - - //-- Adjust max height - if(maxHeight > iheight / 2.5) { - maxHeight = iheight / 2.5; - pop_content.style.maxHeight = maxHeight + "px"; - } - - //-- switch above / below - if(popRect.height + top >= iheight - 25) { - pop.style.top = top - popRect.height + "px"; - pop.classList.add("above"); - }else{ - pop.classList.remove("above"); - } - - //-- switch left - if(left - popRect.width <= 0) { - pop.style.left = left + "px"; - pop.classList.add("left"); - }else{ - pop.classList.remove("left"); - } - - //-- switch right - if(left + popRect.width / 2 >= iwidth) { - //-- TEMP MOVE: 300 - pop.style.left = left - 300 + "px"; - - popRect = pop.getBoundingClientRect(); - pop.style.left = left - popRect.width + "px"; - //-- switch above / below again - if(popRect.height + top >= iheight - 25) { - pop.style.top = top - popRect.height + "px"; - pop.classList.add("above"); - }else{ - pop.classList.remove("above"); - } - - pop.classList.add("right"); - }else{ - pop.classList.remove("right"); - } - - } - - var onPop = function(){ - popups[id].classList.add("on"); - } - - var offPop = function(){ - popups[id].classList.remove("on"); - } - - var hidePop = function(){ - setTimeout(function(){ - popups[id].classList.remove("show"); - }, 100); - } - - var openSidebar = function(){ - reader.ReaderController.slideOut(); - show(); - }; - - item.addEventListener("mouseover", showPop, false); - item.addEventListener("mouseout", hidePop, false); - item.addEventListener("click", openSidebar, false); - - } - $anchor.on("click", function(e){ - - $anchor.text("Cancel"); - $text.prop("disabled", "true"); - // listen for selection - book.on("renderer:click", insertAtPoint); - - }); - - annotations.forEach(function(note) { - addAnnotation(note); - }); - - - renderer.registerHook("beforeChapterDisplay", function(callback, renderer){ - var chapter = renderer.currentChapter; - annotations.forEach(function(note) { - var cfi = epubcfi.parse(note.anchor); - if(cfi.spinePos === chapter.spinePos) { - try { - placeMarker(note); - } catch(e) { - console.log("anchoring failed", note.anchor); - } - } - }); - callback(); - }, true); - - - return { - "show" : show, - "hide" : hide - }; -}; -EPUBJS.reader.ReaderController = function(book) { - var $main = $("#main"), - $divider = $("#divider"), - $loader = $("#loader"), - $next = $("#next"), - $prev = $("#prev"); - var reader = this; - var book = this.book; - var slideIn = function() { - var currentPosition = book.getCurrentLocationCfi(); - if (reader.settings.sidebarReflow){ - $main.removeClass('single'); - $main.one("transitionend", function(){ - book.gotoCfi(currentPosition); - }); - } else { - $main.removeClass("closed"); - } - }; - - var slideOut = function() { - var currentPosition = book.getCurrentLocationCfi(); - if (reader.settings.sidebarReflow){ - $main.addClass('single'); - $main.one("transitionend", function(){ - book.gotoCfi(currentPosition); - }); - } else { - $main.addClass("closed"); - } - }; - - var showLoader = function() { - $loader.show(); - hideDivider(); - }; - - var hideLoader = function() { - $loader.hide(); - - //-- If the book is using spreads, show the divider - // if(book.settings.spreads) { - // showDivider(); - // } - }; - - var showDivider = function() { - $divider.addClass("show"); - }; - - var hideDivider = function() { - $divider.removeClass("show"); - }; - - var keylock = false; - - var arrowKeys = function(e) { - if(e.keyCode == 37) { - book.prevPage(); - $prev.addClass("active"); - - keylock = true; - setTimeout(function(){ - keylock = false; - $prev.removeClass("active"); - }, 100); - - e.preventDefault(); - } - if(e.keyCode == 39) { - book.nextPage(); - $next.addClass("active"); - - keylock = true; - setTimeout(function(){ - keylock = false; - $next.removeClass("active"); - }, 100); - - e.preventDefault(); - } - } - - document.addEventListener('keydown', arrowKeys, false); - - $next.on("click", function(e){ - book.nextPage(); - e.preventDefault(); - }); - - $prev.on("click", function(e){ - book.prevPage(); - e.preventDefault(); - }); - - book.on("renderer:spreads", function(bool){ - if(bool) { - showDivider(); - } else { - hideDivider(); - } - }); - - // book.on("book:atStart", function(){ - // $prev.addClass("disabled"); - // }); - // - // book.on("book:atEnd", function(){ - // $next.addClass("disabled"); - // }); - - return { - "slideOut" : slideOut, - "slideIn" : slideIn, - "showLoader" : showLoader, - "hideLoader" : hideLoader, - "showDivider" : showDivider, - "hideDivider" : hideDivider, - "arrowKeys" : arrowKeys - }; -}; -EPUBJS.reader.SettingsController = function() { - var book = this.book; - var reader = this; - var $settings = $("#settings-modal"), - $overlay = $(".overlay"); - - var show = function() { - $settings.addClass("md-show"); - }; - - var hide = function() { - $settings.removeClass("md-show"); - }; - - var $sidebarReflowSetting = $('#sidebarReflow'); - - $sidebarReflowSetting.on('click', function() { - reader.settings.sidebarReflow = !reader.settings.sidebarReflow; - }); - - $settings.find(".closer").on("click", function() { - hide(); - }); - - $overlay.on("click", function() { - hide(); - }); - - return { - "show" : show, - "hide" : hide - }; -}; -EPUBJS.reader.SidebarController = function(book) { - var reader = this; - - var $sidebar = $("#sidebar"), - $panels = $("#panels"); - - var activePanel = "Toc"; - - var changePanelTo = function(viewName) { - var controllerName = viewName + "Controller"; - - if(activePanel == viewName || typeof reader[controllerName] === 'undefined' ) return; - reader[activePanel+ "Controller"].hide(); - reader[controllerName].show(); - activePanel = viewName; - - $panels.find('.active').removeClass("active"); - $panels.find("#show-" + viewName ).addClass("active"); - }; - - var getActivePanel = function() { - return activePanel; - }; - - var show = function() { - reader.sidebarOpen = true; - reader.ReaderController.slideOut(); - $sidebar.addClass("open"); - } - - var hide = function() { - reader.sidebarOpen = false; - reader.ReaderController.slideIn(); - $sidebar.removeClass("open"); - } - - $panels.find(".show_view").on("click", function(event) { - var view = $(this).data("view"); - - changePanelTo(view); - event.preventDefault(); - }); - - return { - 'show' : show, - 'hide' : hide, - 'getActivePanel' : getActivePanel, - 'changePanelTo' : changePanelTo - }; -}; -EPUBJS.reader.TocController = function(toc) { - var book = this.book; - - var $list = $("#tocView"), - docfrag = document.createDocumentFragment(); - - var currentChapter = false; - - var generateTocItems = function(toc, level) { - var container = document.createElement("ul"); - - if(!level) level = 1; - - toc.forEach(function(chapter) { - var listitem = document.createElement("li"), - link = document.createElement("a"); - toggle = document.createElement("a"); - - var subitems; - - listitem.id = "toc-"+chapter.id; - listitem.classList.add('list_item'); - - link.textContent = chapter.label; - link.href = chapter.href; - - link.classList.add('toc_link'); - - listitem.appendChild(link); - - if(chapter.subitems.length > 0) { - level++; - subitems = generateTocItems(chapter.subitems, level); - toggle.classList.add('toc_toggle'); - - listitem.insertBefore(toggle, link); - listitem.appendChild(subitems); - } - - - container.appendChild(listitem); - - }); - - return container; - }; - - var onShow = function() { - $list.show(); - }; - - var onHide = function() { - $list.hide(); - }; - - var chapterChange = function(e) { - var id = e.id, - $item = $list.find("#toc-"+id), - $current = $list.find(".currentChapter"), - $open = $list.find('.openChapter'); - - if($item.length){ - - if($item != $current && $item.has(currentChapter).length > 0) { - $current.removeClass("currentChapter"); - } - - $item.addClass("currentChapter"); - - // $open.removeClass("openChapter"); - $item.parents('li').addClass("openChapter"); - } - }; - - book.on('renderer:chapterDisplayed', chapterChange); - - var tocitems = generateTocItems(toc); - - docfrag.appendChild(tocitems); - - $list.append(docfrag); - $list.find(".toc_link").on("click", function(event){ - var url = this.getAttribute('href'); - - event.preventDefault(); - - //-- Provide the Book with the url to show - // The Url must be found in the books manifest - book.goto(url); - - $list.find(".currentChapter") - .addClass("openChapter") - .removeClass("currentChapter"); - - $(this).parent('li').addClass("currentChapter"); - - }); - - $list.find(".toc_toggle").on("click", function(event){ - var $el = $(this).parent('li'), - open = $el.hasClass("openChapter"); - - event.preventDefault(); - if(open){ - $el.removeClass("openChapter"); - } else { - $el.addClass("openChapter"); - } - }); - - return { - "show" : onShow, - "hide" : onHide - }; -}; - -//# sourceMappingURL=reader.js.map \ No newline at end of file diff --git a/build/reader.js.map b/build/reader.js.map deleted file mode 100644 index 122e1b0e4..000000000 --- a/build/reader.js.map +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 3, - "file": "reader.js", - "sources": [ - "reader_src/reader.js", - "reader_src/controllers/bookmarks_controller.js", - "reader_src/controllers/controls_controller.js", - "reader_src/controllers/meta_controller.js", - "reader_src/controllers/notes_controller.js", - "reader_src/controllers/reader_controller.js", - "reader_src/controllers/settings_controller.js", - "reader_src/controllers/sidebar_controller.js", - "reader_src/controllers/toc_controller.js" - ], - "names": [], - "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gD;ACjUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;AC9RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA" -} \ No newline at end of file diff --git a/build/reader.min.js b/build/reader.min.js deleted file mode 100644 index 4c607fe21..000000000 --- a/build/reader.min.js +++ /dev/null @@ -1,2 +0,0 @@ -EPUBJS.reader={},EPUBJS.reader.plugins={},function(a){var b=a.ePubReader||{},c=a.ePubReader=function(a,b){return new EPUBJS.Reader(a,b)};_.extend(c,{noConflict:function(){return a.ePubReader=b,this}}),"function"==typeof define&&define.amd?define(function(){return Reader}):"undefined"!=typeof module&&module.exports&&(module.exports=c)}(window,jQuery),EPUBJS.Reader=function(a,b){var c,d,e,f=this,g=$("#viewer"),h=window.location.search;this.settings=_.defaults(b||{},{bookPath:a,restore:!0,reload:!1,bookmarks:null,annotations:null,contained:null,bookKey:null,styles:null,sidebarReflow:!1,generatePagination:!1,history:!0}),h&&(e=h.slice(1).split("&"),e.forEach(function(a){var b=a.split("="),c=b[0],d=b[1]||"";f.settings[c]=d})),this.setBookKey(this.settings.bookPath),this.settings.restore&&this.isSaved()&&this.applySavedSettings(),this.settings.styles=this.settings.styles||{fontSize:"100%"},this.book=c=new EPUBJS.Book({bookPath:this.settings.bookPath,restore:this.settings.restore,reload:this.settings.reload,contained:this.settings.contained,bookKey:this.settings.bookKey,styles:this.settings.styles}),this.settings.previousLocationCfi&&c.gotoCfi(this.settings.previousLocationCfi),this.offline=!1,this.sidebarOpen=!1,this.settings.bookmarks||(this.settings.bookmarks=[]),this.settings.annotations||(this.settings.annotations=[]),this.settings.generatePagination&&c.generatePagination(g.width(),g.height()),c.renderTo("viewer"),f.ReaderController=EPUBJS.reader.ReaderController.call(f,c),f.SettingsController=EPUBJS.reader.SettingsController.call(f,c),f.ControlsController=EPUBJS.reader.ControlsController.call(f,c),f.SidebarController=EPUBJS.reader.SidebarController.call(f,c),f.BookmarksController=EPUBJS.reader.BookmarksController.call(f,c),f.NotesController=EPUBJS.reader.NotesController.call(f,c);for(d in EPUBJS.reader.plugins)EPUBJS.reader.plugins.hasOwnProperty(d)&&(f[d]=EPUBJS.reader.plugins[d].call(f,c));return c.ready.all.then(function(){f.ReaderController.hideLoader()}),c.getMetadata().then(function(a){f.MetaController=EPUBJS.reader.MetaController.call(f,a)}),c.getToc().then(function(a){f.TocController=EPUBJS.reader.TocController.call(f,a)}),window.addEventListener("beforeunload",this.unload.bind(this),!1),window.addEventListener("hashchange",this.hashChanged.bind(this),!1),document.addEventListener("keydown",this.adjustFontSize.bind(this),!1),c.on("renderer:keydown",this.adjustFontSize.bind(this)),c.on("renderer:keydown",f.ReaderController.arrowKeys.bind(this)),c.on("renderer:selected",this.selectedRange.bind(this)),this},EPUBJS.Reader.prototype.adjustFontSize=function(a){var b,c=2,d=187,e=189,f=48,g=a.ctrlKey||a.metaKey;this.settings.styles&&(this.settings.styles.fontSize||(this.settings.styles.fontSize="100%"),b=parseInt(this.settings.styles.fontSize.slice(0,-1)),g&&a.keyCode==d&&(a.preventDefault(),this.book.setStyle("fontSize",b+c+"%")),g&&a.keyCode==e&&(a.preventDefault(),this.book.setStyle("fontSize",b-c+"%")),g&&a.keyCode==f&&(a.preventDefault(),this.book.setStyle("fontSize","100%")))},EPUBJS.Reader.prototype.addBookmark=function(a){var b=this.isBookmarked(a);b>-1||(this.settings.bookmarks.push(a),this.trigger("reader:bookmarked",a))},EPUBJS.Reader.prototype.removeBookmark=function(a){var b=this.isBookmarked(a);-1!==b&&(delete this.settings.bookmarks[b],this.trigger("reader:unbookmarked",b))},EPUBJS.Reader.prototype.isBookmarked=function(a){var b=this.settings.bookmarks;return b.indexOf(a)},EPUBJS.Reader.prototype.clearBookmarks=function(){this.settings.bookmarks=[]},EPUBJS.Reader.prototype.addNote=function(a){this.settings.annotations.push(a)},EPUBJS.Reader.prototype.removeNote=function(a){var b=this.settings.annotations.indexOf(a);-1!==b&&delete this.settings.annotations[b]},EPUBJS.Reader.prototype.clearNotes=function(){this.settings.annotations=[]},EPUBJS.Reader.prototype.setBookKey=function(a){return this.settings.bookKey||(this.settings.bookKey="epubjsreader:"+EPUBJS.VERSION+":"+window.location.host+":"+a),this.settings.bookKey},EPUBJS.Reader.prototype.isSaved=function(){var a;return localStorage?(a=localStorage.getItem(this.settings.bookKey),null===a?!1:!0):!1},EPUBJS.Reader.prototype.removeSavedSettings=function(){return localStorage?void localStorage.removeItem(this.settings.bookKey):!1},EPUBJS.Reader.prototype.applySavedSettings=function(){var a;return localStorage?(a=JSON.parse(localStorage.getItem(this.settings.bookKey)),a?(this.settings=_.defaults(this.settings,a),!0):!1):!1},EPUBJS.Reader.prototype.saveSettings=function(){return this.book&&(this.settings.previousLocationCfi=this.book.getCurrentLocationCfi()),localStorage?void localStorage.setItem(this.settings.bookKey,JSON.stringify(this.settings)):!1},EPUBJS.Reader.prototype.unload=function(){this.settings.restore&&localStorage&&this.saveSettings()},EPUBJS.Reader.prototype.hashChanged=function(){var a=window.location.hash.slice(1);this.book.goto(a)},EPUBJS.Reader.prototype.selectedRange=function(a){var b=new EPUBJS.EpubCFI,c=b.generateCfiFromRangeAnchor(a,this.book.renderer.currentChapter.cfiBase),d="#"+c;this.settings.history&&window.location.hash!=d&&(history.pushState({},"",d),this.currentLocationCfi=c)},RSVP.EventTarget.mixin(EPUBJS.Reader.prototype),EPUBJS.reader.BookmarksController=function(){var a=this.book,b=$("#bookmarksView"),c=b.find("#bookmarks"),d=document.createDocumentFragment(),e=function(){b.show()},f=function(){b.hide()},g=0,h=function(b){var c=document.createElement("li"),d=document.createElement("a");return c.id="bookmark-"+g,c.classList.add("list_item"),d.textContent=b,d.href=b,d.classList.add("bookmark_link"),d.addEventListener("click",function(b){var c=this.getAttribute("href");a.gotoCfi(c),b.preventDefault()},!1),c.appendChild(d),g++,c};return this.settings.bookmarks.forEach(function(a){var b=h(a);d.appendChild(b)}),c.append(d),this.on("reader:bookmarked",function(a){var b=h(a);c.append(b)}),this.on("reader:unbookmarked",function(a){var b=$("#bookmark-"+a);b.remove()}),{show:e,hide:f}},EPUBJS.reader.ControlsController=function(a){var b=this,c=($("#store"),$("#fullscreen")),d=($("#fullscreenicon"),$("#cancelfullscreenicon"),$("#slider")),e=($("#main"),$("#sidebar"),$("#setting")),f=$("#bookmark"),g=function(){b.offline=!1},h=function(){b.offline=!0},i=!1;return a.on("book:online",g),a.on("book:offline",h),d.on("click",function(){b.sidebarOpen?(b.SidebarController.hide(),d.addClass("icon-menu"),d.removeClass("icon-right")):(b.SidebarController.show(),d.addClass("icon-right"),d.removeClass("icon-menu"))}),c.on("click",function(){screenfull.toggle($("#container")[0])}),screenfull&&document.addEventListener(screenfull.raw.fullscreenchange,function(){i=screenfull.isFullscreen,i?c.addClass("icon-resize-small").removeClass("icon-resize-full"):c.addClass("icon-resize-full").removeClass("icon-resize-small")}),e.on("click",function(){b.SettingsController.show()}),f.on("click",function(){var a=b.book.getCurrentLocationCfi(),c=b.isBookmarked(a);-1===c?(b.addBookmark(a),f.addClass("icon-bookmark").removeClass("icon-bookmark-empty")):(b.removeBookmark(a),f.removeClass("icon-bookmark").addClass("icon-bookmark-empty"))}),a.on("renderer:locationChanged",function(a){var c="#"+a,d=b.isBookmarked(a);-1===d?f.removeClass("icon-bookmark").addClass("icon-bookmark-empty"):f.addClass("icon-bookmark").removeClass("icon-bookmark-empty"),b.currentLocationCfi=a,b.settings.history&&window.location.hash!=c&&history.pushState({},"",c)}),a.on("book:pageChanged",function(){}),{}},EPUBJS.reader.MetaController=function(a){var b=a.bookTitle,c=a.creator,d=$("#book-title"),e=$("#chapter-title"),f=$("#title-seperator");document.title=b+" – "+c,d.html(b),e.html(c),f.show()},EPUBJS.reader.NotesController=function(){var a=this.book,b=this,c=$("#notesView"),d=$("#notes"),e=$("#note-text"),f=$("#note-anchor"),g=b.settings.annotations,h=a.renderer,i=[],j=new EPUBJS.EpubCFI,k=function(){c.show()},l=function(){c.hide()},m=function(c){var d,g,h,i,k,l=a.renderer.doc;if(l.caretPositionFromPoint?(d=l.caretPositionFromPoint(c.clientX,c.clientY),g=d.offsetNode,h=d.offset):l.caretRangeFromPoint&&(d=l.caretRangeFromPoint(c.clientX,c.clientY),g=d.startContainer,h=d.startOffset),3!==g.nodeType)for(var p=0;pm/2.5&&(o=m/2.5,pop_content.style.maxHeight=o+"px"),popRect.height+l>=m-25?(b.style.top=l-popRect.height+"px",b.classList.add("above")):b.classList.remove("above"),k-popRect.width<=0?(b.style.left=k+"px",b.classList.add("left")):b.classList.remove("left"),k+popRect.width/2>=n?(b.style.left=k-300+"px",popRect=b.getBoundingClientRect(),b.style.left=k-popRect.width+"px",popRect.height+l>=m-25?(b.style.top=l-popRect.height+"px",b.classList.add("above")):b.classList.remove("above"),b.classList.add("right")):b.classList.remove("right")},f=function(){i[d].classList.add("on")},g=function(){i[d].classList.remove("on")},j=function(){setTimeout(function(){i[d].classList.remove("show")},100)},l=function(){b.ReaderController.slideOut(),k()};a.addEventListener("mouseover",e,!1),a.addEventListener("mouseout",j,!1),a.addEventListener("click",l,!1)};return f.on("click",function(){f.text("Cancel"),e.prop("disabled","true"),a.on("renderer:click",m)}),g.forEach(function(a){n(a)}),h.registerHook("beforeChapterDisplay",function(a,b){var c=b.currentChapter;g.forEach(function(a){var b=j.parse(a.anchor);if(b.spinePos===c.spinePos)try{o(a)}catch(d){console.log("anchoring failed",a.anchor)}}),a()},!0),{show:k,hide:l}},EPUBJS.reader.ReaderController=function(a){var b=$("#main"),c=$("#divider"),d=$("#loader"),e=$("#next"),f=$("#prev"),g=this,a=this.book,h=function(){var c=a.getCurrentLocationCfi();g.settings.sidebarReflow?(b.removeClass("single"),b.one("transitionend",function(){a.gotoCfi(c)})):b.removeClass("closed")},i=function(){var c=a.getCurrentLocationCfi();g.settings.sidebarReflow?(b.addClass("single"),b.one("transitionend",function(){a.gotoCfi(c)})):b.addClass("closed")},j=function(){d.show(),m()},k=function(){d.hide()},l=function(){c.addClass("show")},m=function(){c.removeClass("show")},n=!1,o=function(b){37==b.keyCode&&(a.prevPage(),f.addClass("active"),n=!0,setTimeout(function(){n=!1,f.removeClass("active")},100),b.preventDefault()),39==b.keyCode&&(a.nextPage(),e.addClass("active"),n=!0,setTimeout(function(){n=!1,e.removeClass("active")},100),b.preventDefault())};return document.addEventListener("keydown",o,!1),e.on("click",function(b){a.nextPage(),b.preventDefault()}),f.on("click",function(b){a.prevPage(),b.preventDefault()}),a.on("renderer:spreads",function(a){a?l():m()}),{slideOut:i,slideIn:h,showLoader:j,hideLoader:k,showDivider:l,hideDivider:m,arrowKeys:o}},EPUBJS.reader.SettingsController=function(){var a=(this.book,this),b=$("#settings-modal"),c=$(".overlay"),d=function(){b.addClass("md-show")},e=function(){b.removeClass("md-show")},f=$("#sidebarReflow");return f.on("click",function(){a.settings.sidebarReflow=!a.settings.sidebarReflow}),b.find(".closer").on("click",function(){e()}),c.on("click",function(){e()}),{show:d,hide:e}},EPUBJS.reader.SidebarController=function(){var a=this,b=$("#sidebar"),c=$("#panels"),d="Toc",e=function(b){var e=b+"Controller";d!=b&&"undefined"!=typeof a[e]&&(a[d+"Controller"].hide(),a[e].show(),d=b,c.find(".active").removeClass("active"),c.find("#show-"+b).addClass("active"))},f=function(){return d},g=function(){a.sidebarOpen=!0,a.ReaderController.slideOut(),b.addClass("open")},h=function(){a.sidebarOpen=!1,a.ReaderController.slideIn(),b.removeClass("open")};return c.find(".show_view").on("click",function(a){var b=$(this).data("view");e(b),a.preventDefault()}),{show:g,hide:h,getActivePanel:f,changePanelTo:e}},EPUBJS.reader.TocController=function(a){var b=this.book,c=$("#tocView"),d=document.createDocumentFragment(),e=!1,f=function(a,b){var c=document.createElement("ul");return b||(b=1),a.forEach(function(a){var d=document.createElement("li"),e=document.createElement("a");toggle=document.createElement("a");var g;d.id="toc-"+a.id,d.classList.add("list_item"),e.textContent=a.label,e.href=a.href,e.classList.add("toc_link"),d.appendChild(e),a.subitems.length>0&&(b++,g=f(a.subitems,b),toggle.classList.add("toc_toggle"),d.insertBefore(toggle,e),d.appendChild(g)),c.appendChild(d)}),c},g=function(){c.show()},h=function(){c.hide()},i=function(a){{var b=a.id,d=c.find("#toc-"+b),f=c.find(".currentChapter");c.find(".openChapter")}d.length&&(d!=f&&d.has(e).length>0&&f.removeClass("currentChapter"),d.addClass("currentChapter"),d.parents("li").addClass("openChapter"))};b.on("renderer:chapterDisplayed",i);var j=f(a);return d.appendChild(j),c.append(d),c.find(".toc_link").on("click",function(a){var d=this.getAttribute("href");a.preventDefault(),b.goto(d),c.find(".currentChapter").addClass("openChapter").removeClass("currentChapter"),$(this).parent("li").addClass("currentChapter")}),c.find(".toc_toggle").on("click",function(a){var b=$(this).parent("li"),c=b.hasClass("openChapter");a.preventDefault(),c?b.removeClass("openChapter"):b.addClass("openChapter")}),{show:g,hide:h}}; -//# sourceMappingURL=reader.min.map \ No newline at end of file diff --git a/build/reader.min.map b/build/reader.min.map deleted file mode 100644 index 826c43977..000000000 --- a/build/reader.min.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"reader.min.js","sources":["reader.js"],"names":["EPUBJS","reader","plugins","root","previousReader","ePubReader","path","options","Reader","_","extend","noConflict","this","define","amd","module","exports","window","jQuery","bookPath","_options","book","plugin","parameters","$viewer","$","search","location","settings","defaults","restore","reload","bookmarks","annotations","contained","bookKey","styles","sidebarReflow","generatePagination","history","slice","split","forEach","p","name","value","setBookKey","isSaved","applySavedSettings","fontSize","Book","previousLocationCfi","gotoCfi","offline","sidebarOpen","width","height","renderTo","ReaderController","call","SettingsController","ControlsController","SidebarController","BookmarksController","NotesController","hasOwnProperty","ready","all","then","hideLoader","getMetadata","meta","MetaController","getToc","toc","TocController","addEventListener","unload","bind","hashChanged","document","adjustFontSize","on","arrowKeys","selectedRange","prototype","e","interval","PLUS","MINUS","ZERO","MOD","ctrlKey","metaKey","parseInt","keyCode","preventDefault","setStyle","addBookmark","cfi","present","isBookmarked","push","trigger","removeBookmark","bookmark","indexOf","clearBookmarks","addNote","note","removeNote","index","clearNotes","identifier","VERSION","host","storedSettings","localStorage","getItem","removeSavedSettings","removeItem","stored","JSON","parse","saveSettings","getCurrentLocationCfi","setItem","stringify","hash","goto","range","epubcfi","EpubCFI","generateCfiFromRangeAnchor","renderer","currentChapter","cfiBase","cfiFragment","pushState","currentLocationCfi","RSVP","EventTarget","mixin","$bookmarks","$list","find","docfrag","createDocumentFragment","show","hide","counter","createBookmarkItem","listitem","createElement","link","id","classList","add","textContent","href","event","getAttribute","appendChild","append","item","$item","remove","$fullscreen","$slider","$settings","$bookmark","goOnline","goOffline","fullscreen","addClass","removeClass","screenfull","toggle","raw","fullscreenchange","isFullscreen","bookmarked","title","bookTitle","author","creator","$title","$author","$dash","html","$notesView","$notes","$text","$anchor","popups","insertAtPoint","textNode","offset","annotation","doc","caretPositionFromPoint","clientX","clientY","offsetNode","caretRangeFromPoint","startContainer","startOffset","nodeType","i","childNodes","length","generateCfiFromTextNode","annotatedAt","Date","anchor","body","val","addAnnotation","placeMarker","text","prop","off","innerHTML","onclick","marker","mark","style","verticalAlign","lineHeight","padding","backgroundColor","borderRadius","cursor","core","uuid","addMarker","markerEvents","txt","showPop","pop","itemRect","left","top","iheight","iwidth","maxHeight","setAttribute","pop_content","render","onPop","offPop","hidePop","getBoundingClientRect","popRect","setTimeout","openSidebar","slideOut","registerHook","callback","chapter","spinePos","console","log","$main","$divider","$loader","$next","$prev","slideIn","currentPosition","one","showLoader","hideDivider","showDivider","keylock","prevPage","nextPage","bool","$overlay","$sidebarReflowSetting","$sidebar","$panels","activePanel","changePanelTo","viewName","controllerName","getActivePanel","view","data","generateTocItems","level","container","subitems","label","insertBefore","onShow","onHide","chapterChange","$current","has","parents","tocitems","url","parent","$el","open","hasClass"],"mappings":"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"} \ No newline at end of file diff --git a/documentation/README.md b/documentation/README.md deleted file mode 100644 index c1a7b9832..000000000 --- a/documentation/README.md +++ /dev/null @@ -1,185 +0,0 @@ -# EPUB.JS Documentation - -## Methods - -#### ePub(bookPath, options) - -Creates a new EPUBJS.Book() - -bookPath is a optional convience method -that will start loading the book at that given path -```javascript -var Book = ePub("url/to/book/"); // With default options -``` - -```javascript -var Book = ePub({ restore: true }); -Book.open("url/to/book/"); // Books can be opened later -``` - -Options: - -```javascript -{ - bookPath : null, - version: 1, // Changing will cause stored Book information to be reloaded - restore: false, // Skips parsing epub contents, loading from localstorage instead - storage: false, // true (auto) or false (none) | override: 'ram', 'websqldatabase', 'indexeddb', 'filesystem' - spreads: true, // Displays two columns - fixedLayout : false, //-- Will turn off pagination - styles : {}, // Styles to be applied to epub - width : false, - height: false, -} - -``` - -Intially you'll probably just want to turn on restore. - -The width and height will be set to the containing element's dimensions. - -```javascript -var Book = ePub("url/to/book/", { restore: true }); -``` - -The following examples will refer to this ePub variable as ```Book```. - -#### Book.open(bookPath) - -Will open and parse a book at the given path. - -```javascript -var Book = ePub({ restore: true }); -Book.open("url/to/book/"); // Books can be opened later -``` - -Books can be compressed epub. -See section X for additional information about handling these - -```javascript -Book.open("url/to/book.epub"); -``` - - -#### Book.renderTo(element) - -Appends the iframe that will contain the rendered book to a element. - -Returns a promise with the render object after the first chapter has been loaded - -```javascript - -var Book = ePub("url/to/book/", { restore: true }); - -var $el = document.getElementById("div-id"); -Book.renderTo($el); -``` - -renderTo can take a element id as a string. - -```javascript -var Book = ePub("url/to/book/"); -Book.renderTo("div-id"); -``` - -#### Book.nextPage() -#### Book.prevPage() - -Changes the page the book is on. - -If on the first or last page of a chapter, the next chapter will be loaded. - -```html -
-
-``` - -if the book has not been rendered yet, page changes will have no effect. - -#### Book.displayChapter(chap, end) - -Loads book chapter at a given spine position or epub CFI string. - -Returns a promise with the render after the given chapter has been loaded. - -```javascript -Book.displayChapter('/6/4[chap01ref]!/4[body01]/10'); -``` - -Setting End to true will advance to the last page of the chapter. - -```javascript -Book.displayChapter(3, true); -``` - -#### Book.goto(url) - -Loads book chapter that has the given url. - -Returns a promise with the render after the given chapter has been loaded - -```javascript -var skip = Book.goto("chapter_001.xhtml"); -skip.then(function(){ - console.log("On Chapter 1"); -}) -``` -This is often used to create a table of contents, with links to specific chapters. - -#### Book.setStyle(style, val, prefixed) - -Adds style to be attached to the body element rendered book. - -One common use is increasing font-size. - -```javascript -Book.setStyle("font-size", "1.2em"); -``` - -#### Book.removeStyle(style) - -Removes a style from the rendered book - -#### Book.destroy() - -Remove the appended iframe and cleans up event listeners. - -### Promises - -#### Book.getMetadata() - -```javascript -Book.getMetadata().then(function(meta){ - document.title = meta.bookTitle+" – "+meta.creator; -}); -``` - -#### Book.getToc() - -```javascript -Book.getToc().then(function(toc){ - console.log(toc); -}); -``` - -## Events - -book:ready - -book:stored - -book:online - -book:offline - - -renderer:resized - -renderer:pageChanged - -renderer:chapterDisplayed - -renderer:chapterUnloaded - - - diff --git a/examples/android-patch.html b/examples/android-patch.html deleted file mode 100644 index 917795b2d..000000000 --- a/examples/android-patch.html +++ /dev/null @@ -1,132 +0,0 @@ - - - - - - Basic ePubJS Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- - - - diff --git a/examples/annotator.html b/examples/annotator.html deleted file mode 100755 index 0c30449da..000000000 --- a/examples/annotator.html +++ /dev/null @@ -1,102 +0,0 @@ - - - - - - ePubJS Annotator Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- -
- - - - diff --git a/examples/backbone.html b/examples/backbone.html deleted file mode 100644 index 94aa35416..000000000 --- a/examples/backbone.html +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - ePubJS Promises Example - - - - - - - - - - - - - - - -
- -
- -
- -
- - - - diff --git a/examples/basic-dev.html b/examples/basic-dev.html index 1e4d9c722..aa6225fc0 100644 --- a/examples/basic-dev.html +++ b/examples/basic-dev.html @@ -1,128 +1,135 @@ - - - - Basic ePubJS Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- - - + + + EPUB.js Basic Example + + + + + + + + + + + + + + + + +
+ + + + + + diff --git a/examples/basic.css b/examples/basic.css deleted file mode 100644 index a6eb64bf0..000000000 --- a/examples/basic.css +++ /dev/null @@ -1,64 +0,0 @@ -body { - overflow: hidden; -} - -#main { - position: absolute; - width: 100%; - height: 100%; -} - -#area { - width: 80%; - height: 80%; - margin: 5% auto; - max-width: 1250px; -} - -#area iframe { - border: none; -} - -#prev { - left: 40px; -} - -#next { - right: 40px; -} - -.arrow { - position: absolute; - top: 50%; - margin-top: -32px; - font-size: 64px; - color: #E2E2E2; - font-family: arial, sans-serif; - font-weight: bold; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} - -.arrow:hover { - color: #777; -} - -.arrow:active { - color: #000; -} - -#loader { - position: absolute; - z-index: 10; - left: 50%; - top: 50%; - margin: -33px 0 0 -33px; -} - -#toc { - position: absolute; - top: 0; - left: 0; -} \ No newline at end of file diff --git a/examples/basic.html b/examples/basic.html deleted file mode 100644 index 920f6964e..000000000 --- a/examples/basic.html +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - Basic ePubJS Example - - - - - - - - - - - - - -
- -
- -
- - - - diff --git a/examples/contained.html b/examples/contained.html deleted file mode 100644 index 9a78f1128..000000000 --- a/examples/contained.html +++ /dev/null @@ -1,45 +0,0 @@ - - - - - Contained ePub Example - - - - - - - - - - - - - - - - - -
- -
- -
- - - - diff --git a/examples/custom-elements.html b/examples/custom-elements.html deleted file mode 100644 index 8d1166037..000000000 --- a/examples/custom-elements.html +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - Polymer custom-elements ePubJS Example - - - - - - - - - - - - - - - - - -
- -
- -
- -
- - - - diff --git a/examples/fixed.html b/examples/fixed.html deleted file mode 100644 index e9e140476..000000000 --- a/examples/fixed.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - Basic ePubJS Example - - - - - - - - - - - - - - - -
- -
-
-
- -
- - - - diff --git a/examples/hypothesis.html b/examples/hypothesis.html deleted file mode 100755 index 0cf17ae62..000000000 --- a/examples/hypothesis.html +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-
- -
-
- Menu -
-
- -   –   - -
- -
- -
- -
- - -
-
- -
- - diff --git a/examples/index.html b/examples/index.html deleted file mode 100644 index 9dcc4ad3b..000000000 --- a/examples/index.html +++ /dev/null @@ -1,98 +0,0 @@ - - - - - - ePubJS Examples - - - - - - - - - - - - - - diff --git a/examples/mathml.html b/examples/mathml.html deleted file mode 100755 index 2697bb234..000000000 --- a/examples/mathml.html +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - Basic ePubJS Example - - - - - - - - - - - - - -
- -
- -
- - - - diff --git a/examples/page_list.json b/examples/page_list.json deleted file mode 100644 index 35d6a250b..000000000 --- a/examples/page_list.json +++ /dev/null @@ -1 +0,0 @@ -[{"cfi":"epubcfi(/6/2[cover]!4/1:0)","page":1},{"cfi":"epubcfi(/6/4[titlepage]!4/1:0)","page":2},{"cfi":"epubcfi(/6/6[brief-toc]!4/1:0)","page":3},{"cfi":"epubcfi(/6/8[xpreface_001]!4/1:0)","page":4},{"cfi":"epubcfi(/6/10[xintroduction_001]!4/1:0)","page":5},{"cfi":"epubcfi(/6/12[xepigraph_001]!4/2/2/1:0)","page":6},{"cfi":"epubcfi(/6/12[xepigraph_001]!4/2/18/1:0)","page":7},{"cfi":"epubcfi(/6/12[xepigraph_001]!4/2/34/1:0)","page":8},{"cfi":"epubcfi(/6/12[xepigraph_001]!4/2/54/1:0)","page":9},{"cfi":"epubcfi(/6/12[xepigraph_001]!4/2/70/1:0)","page":10},{"cfi":"epubcfi(/6/12[xepigraph_001]!4/2/1:0)","page":11},{"cfi":"epubcfi(/6/12[xepigraph_001]!4/2/102/1:0)","page":12},{"cfi":"epubcfi(/6/12[xepigraph_001]!4/2/116/1:0)","page":13},{"cfi":"epubcfi(/6/12[xepigraph_001]!4/2/130/1:0)","page":14},{"cfi":"epubcfi(/6/12[xepigraph_001]!4/2/140/1:0)","page":15},{"cfi":"epubcfi(/6/12[xepigraph_001]!4/2/154/1:0)","page":16},{"cfi":"epubcfi(/6/14[xchapter_001]!4/2/2/1:0)","page":17},{"cfi":"epubcfi(/6/14[xchapter_001]!4/2/1:0)","page":18},{"cfi":"epubcfi(/6/14[xchapter_001]!4/2/18/1:0)","page":19},{"cfi":"epubcfi(/6/14[xchapter_001]!4/2/26/1:0)","page":20},{"cfi":"epubcfi(/6/16[xchapter_002]!4/2/2/1:0)","page":21},{"cfi":"epubcfi(/6/16[xchapter_002]!4/2/1:0)","page":22},{"cfi":"epubcfi(/6/18[xchapter_003]!4/2/2/1:0)","page":23},{"cfi":"epubcfi(/6/18[xchapter_003]!4/2/10/1:0)","page":24},{"cfi":"epubcfi(/6/18[xchapter_003]!4/2/24/1:0)","page":25},{"cfi":"epubcfi(/6/18[xchapter_003]!4/2/46/1:0)","page":26},{"cfi":"epubcfi(/6/18[xchapter_003]!4/2/1:0)","page":27},{"cfi":"epubcfi(/6/18[xchapter_003]!4/2/90/1:0)","page":28},{"cfi":"epubcfi(/6/18[xchapter_003]!4/2/104/1:0)","page":29},{"cfi":"epubcfi(/6/18[xchapter_003]!4/2/112/1:0)","page":30},{"cfi":"epubcfi(/6/18[xchapter_003]!4/2/118/1:0)","page":31},{"cfi":"epubcfi(/6/18[xchapter_003]!4/2/132/1:0)","page":32},{"cfi":"epubcfi(/6/20[xchapter_004]!4/2/2/1:0)","page":33},{"cfi":"epubcfi(/6/20[xchapter_004]!4/2/1:0)","page":34},{"cfi":"epubcfi(/6/20[xchapter_004]!4/2/12/1:0)","page":35},{"cfi":"epubcfi(/6/22[xchapter_005]!4/1:0)","page":36},{"cfi":"epubcfi(/6/24[xchapter_006]!4/1:0)","page":37},{"cfi":"epubcfi(/6/24[xchapter_006]!4/2/14/1:0)","page":38},{"cfi":"epubcfi(/6/26[xchapter_007]!4/1:0)","page":39},{"cfi":"epubcfi(/6/26[xchapter_007]!4/2/16/1:0)","page":40},{"cfi":"epubcfi(/6/28[xchapter_008]!4/1:0)","page":41},{"cfi":"epubcfi(/6/28[xchapter_008]!4/2/10/1:0)","page":42},{"cfi":"epubcfi(/6/30[xchapter_009]!4/2/2/1:0)","page":43},{"cfi":"epubcfi(/6/30[xchapter_009]!4/2/18/1:0)","page":44},{"cfi":"epubcfi(/6/30[xchapter_009]!4/2/1:0)","page":45},{"cfi":"epubcfi(/6/30[xchapter_009]!4/2/26/1:0)","page":46},{"cfi":"epubcfi(/6/30[xchapter_009]!4/2/34/1:0)","page":47},{"cfi":"epubcfi(/6/30[xchapter_009]!4/2/44/1:0)","page":48},{"cfi":"epubcfi(/6/32[xchapter_010]!4/2/2/1:0)","page":49},{"cfi":"epubcfi(/6/32[xchapter_010]!4/2/1:0)","page":50},{"cfi":"epubcfi(/6/32[xchapter_010]!4/2/18/1:0)","page":51},{"cfi":"epubcfi(/6/34[xchapter_011]!4/1:0)","page":52},{"cfi":"epubcfi(/6/36[xchapter_012]!4/1:0)","page":53},{"cfi":"epubcfi(/6/36[xchapter_012]!4/2/12/1:0)","page":54},{"cfi":"epubcfi(/6/38[xchapter_013]!4/2/2/1:0)","page":55},{"cfi":"epubcfi(/6/38[xchapter_013]!4/2/1:0)","page":56},{"cfi":"epubcfi(/6/38[xchapter_013]!4/2/18/1:0)","page":57},{"cfi":"epubcfi(/6/40[xchapter_014]!4/1:0)","page":58},{"cfi":"epubcfi(/6/42[xchapter_015]!4/2/2/1:0)","page":59},{"cfi":"epubcfi(/6/42[xchapter_015]!4/2/1:0)","page":60},{"cfi":"epubcfi(/6/44[xchapter_016]!4/2/2/1:0)","page":61},{"cfi":"epubcfi(/6/44[xchapter_016]!4/2/10/1:0)","page":62},{"cfi":"epubcfi(/6/44[xchapter_016]!4/2/16/1:0)","page":63},{"cfi":"epubcfi(/6/44[xchapter_016]!4/2/54/1:0)","page":64},{"cfi":"epubcfi(/6/44[xchapter_016]!4/2/1:0)","page":65},{"cfi":"epubcfi(/6/44[xchapter_016]!4/2/92/1:0)","page":66},{"cfi":"epubcfi(/6/44[xchapter_016]!4/2/112/1:0)","page":67},{"cfi":"epubcfi(/6/44[xchapter_016]!4/2/128/1:0)","page":68},{"cfi":"epubcfi(/6/44[xchapter_016]!4/2/154/1:0)","page":69},{"cfi":"epubcfi(/6/46[xchapter_017]!4/2/2/1:0)","page":70},{"cfi":"epubcfi(/6/46[xchapter_017]!4/2/1:0)","page":71},{"cfi":"epubcfi(/6/46[xchapter_017]!4/2/36/1:0)","page":72},{"cfi":"epubcfi(/6/46[xchapter_017]!4/2/54/1:0)","page":73},{"cfi":"epubcfi(/6/48[xchapter_018]!4/2/2/1:0)","page":74},{"cfi":"epubcfi(/6/48[xchapter_018]!4/2/1:0)","page":75},{"cfi":"epubcfi(/6/50[xchapter_019]!4/2/2/1:0)","page":76},{"cfi":"epubcfi(/6/50[xchapter_019]!4/2/1:0)","page":77},{"cfi":"epubcfi(/6/52[xchapter_020]!4/1:0)","page":78},{"cfi":"epubcfi(/6/52[xchapter_020]!4/2/14/1:0)","page":79},{"cfi":"epubcfi(/6/54[xchapter_021]!4/2/2/1:0)","page":80},{"cfi":"epubcfi(/6/54[xchapter_021]!4/2/1:0)","page":81},{"cfi":"epubcfi(/6/56[xchapter_022]!4/2/2/1:0)","page":82},{"cfi":"epubcfi(/6/56[xchapter_022]!4/2/1:0)","page":83},{"cfi":"epubcfi(/6/56[xchapter_022]!4/2/36/1:0)","page":84},{"cfi":"epubcfi(/6/58[xchapter_023]!4/1:0)","page":85},{"cfi":"epubcfi(/6/60[xchapter_024]!4/2/2/1:0)","page":86},{"cfi":"epubcfi(/6/60[xchapter_024]!4/2/1:0)","page":87},{"cfi":"epubcfi(/6/60[xchapter_024]!4/2/24/1:0)","page":88},{"cfi":"epubcfi(/6/62[xchapter_025]!4/1:0)","page":89},{"cfi":"epubcfi(/6/64[xchapter_026]!4/2/2/1:0)","page":90},{"cfi":"epubcfi(/6/64[xchapter_026]!4/2/1:0)","page":91},{"cfi":"epubcfi(/6/66[xchapter_027]!4/2/2/1:0)","page":92},{"cfi":"epubcfi(/6/66[xchapter_027]!4/2/1:0)","page":93},{"cfi":"epubcfi(/6/66[xchapter_027]!4/2/20/1:0)","page":94},{"cfi":"epubcfi(/6/68[xchapter_028]!4/2/2/1:0)","page":95},{"cfi":"epubcfi(/6/68[xchapter_028]!4/2/1:0)","page":96},{"cfi":"epubcfi(/6/70[xchapter_029]!4/2/2/1:0)","page":97},{"cfi":"epubcfi(/6/70[xchapter_029]!4/2/1:0)","page":98},{"cfi":"epubcfi(/6/72[xchapter_030]!4/1:0)","page":99},{"cfi":"epubcfi(/6/74[xchapter_031]!4/1:0)","page":100},{"cfi":"epubcfi(/6/76[xchapter_032]!4/2/2/1:0)","page":101},{"cfi":"epubcfi(/6/76[xchapter_032]!4/2/18/1:0)","page":102},{"cfi":"epubcfi(/6/76[xchapter_032]!4/2/28/1:0)","page":103},{"cfi":"epubcfi(/6/76[xchapter_032]!4/2/44/1:0)","page":104},{"cfi":"epubcfi(/6/76[xchapter_032]!4/2/1:0)","page":105},{"cfi":"epubcfi(/6/76[xchapter_032]!4/2/56/1:0)","page":106},{"cfi":"epubcfi(/6/76[xchapter_032]!4/2/70/1:0)","page":107},{"cfi":"epubcfi(/6/76[xchapter_032]!4/2/74/1:0)","page":108},{"cfi":"epubcfi(/6/76[xchapter_032]!4/2/88/1:0)","page":109},{"cfi":"epubcfi(/6/78[xchapter_033]!4/1:0)","page":110},{"cfi":"epubcfi(/6/78[xchapter_033]!4/2/12/1:0)","page":111},{"cfi":"epubcfi(/6/80[xchapter_034]!4/2/2/1:0)","page":112},{"cfi":"epubcfi(/6/80[xchapter_034]!4/2/1:0)","page":113},{"cfi":"epubcfi(/6/80[xchapter_034]!4/2/16/1:0)","page":114},{"cfi":"epubcfi(/6/80[xchapter_034]!4/2/20/1:0)","page":115},{"cfi":"epubcfi(/6/82[xchapter_035]!4/2/2/1:0)","page":116},{"cfi":"epubcfi(/6/82[xchapter_035]!4/2/10/1:0)","page":117},{"cfi":"epubcfi(/6/82[xchapter_035]!4/2/1:0)","page":118},{"cfi":"epubcfi(/6/82[xchapter_035]!4/2/16/1:0)","page":119},{"cfi":"epubcfi(/6/84[xchapter_036]!4/2/2/1:0)","page":120},{"cfi":"epubcfi(/6/84[xchapter_036]!4/2/26/1:0)","page":121},{"cfi":"epubcfi(/6/84[xchapter_036]!4/2/1:0)","page":122},{"cfi":"epubcfi(/6/84[xchapter_036]!4/2/82/1:0)","page":123},{"cfi":"epubcfi(/6/84[xchapter_036]!4/2/92/1:0)","page":124},{"cfi":"epubcfi(/6/86[xchapter_037]!4/1:0)","page":125},{"cfi":"epubcfi(/6/88[xchapter_038]!4/1:0)","page":126},{"cfi":"epubcfi(/6/90[xchapter_039]!4/1:0)","page":127},{"cfi":"epubcfi(/6/92[xchapter_040]!4/2/2/1:0)","page":128},{"cfi":"epubcfi(/6/92[xchapter_040]!4/2/1:0)","page":129},{"cfi":"epubcfi(/6/92[xchapter_040]!4/2/58/1:0)","page":130},{"cfi":"epubcfi(/6/94[xchapter_041]!4/2/2/1:0)","page":131},{"cfi":"epubcfi(/6/94[xchapter_041]!4/2/10/1:0)","page":132},{"cfi":"epubcfi(/6/94[xchapter_041]!4/2/16/1:0)","page":133},{"cfi":"epubcfi(/6/94[xchapter_041]!4/2/1:0)","page":134},{"cfi":"epubcfi(/6/94[xchapter_041]!4/2/40/1:0)","page":135},{"cfi":"epubcfi(/6/94[xchapter_041]!4/2/44/1:0)","page":136},{"cfi":"epubcfi(/6/96[xchapter_042]!4/2/2/1:0)","page":137},{"cfi":"epubcfi(/6/96[xchapter_042]!4/2/10/1:0)","page":138},{"cfi":"epubcfi(/6/96[xchapter_042]!4/2/20/1:0)","page":139},{"cfi":"epubcfi(/6/96[xchapter_042]!4/2/1:0)","page":140},{"cfi":"epubcfi(/6/96[xchapter_042]!4/2/42/1:0)","page":141},{"cfi":"epubcfi(/6/96[xchapter_042]!4/2/50/1:0)","page":142},{"cfi":"epubcfi(/6/98[xchapter_043]!4/1:0)","page":143},{"cfi":"epubcfi(/6/100[xchapter_044]!4/2/2/1:0)","page":144},{"cfi":"epubcfi(/6/100[xchapter_044]!4/2/1:0)","page":145},{"cfi":"epubcfi(/6/100[xchapter_044]!4/2/22/1:0)","page":146},{"cfi":"epubcfi(/6/100[xchapter_044]!4/2/26/1:0)","page":147},{"cfi":"epubcfi(/6/102[xchapter_045]!4/2/2/1:0)","page":148},{"cfi":"epubcfi(/6/102[xchapter_045]!4/2/10/1:0)","page":149},{"cfi":"epubcfi(/6/102[xchapter_045]!4/2/1:0)","page":150},{"cfi":"epubcfi(/6/102[xchapter_045]!4/2/28/1:0)","page":151},{"cfi":"epubcfi(/6/102[xchapter_045]!4/2/38/1:0)","page":152},{"cfi":"epubcfi(/6/102[xchapter_045]!4/2/46/1:0)","page":153},{"cfi":"epubcfi(/6/104[xchapter_046]!4/1:0)","page":154},{"cfi":"epubcfi(/6/104[xchapter_046]!4/2/8/1:0)","page":155},{"cfi":"epubcfi(/6/106[xchapter_047]!4/1:0)","page":156},{"cfi":"epubcfi(/6/106[xchapter_047]!4/2/10/1:0)","page":157},{"cfi":"epubcfi(/6/108[xchapter_048]!4/2/2/1:0)","page":158},{"cfi":"epubcfi(/6/108[xchapter_048]!4/2/26/1:0)","page":159},{"cfi":"epubcfi(/6/108[xchapter_048]!4/2/40/1:0)","page":160},{"cfi":"epubcfi(/6/108[xchapter_048]!4/2/1:0)","page":161},{"cfi":"epubcfi(/6/108[xchapter_048]!4/2/66/1:0)","page":162},{"cfi":"epubcfi(/6/108[xchapter_048]!4/2/80/1:0)","page":163},{"cfi":"epubcfi(/6/108[xchapter_048]!4/2/98/1:0)","page":164},{"cfi":"epubcfi(/6/110[xchapter_049]!4/1:0)","page":165},{"cfi":"epubcfi(/6/112[xchapter_050]!4/1:0)","page":166},{"cfi":"epubcfi(/6/112[xchapter_050]!4/2/16/1:0)","page":167},{"cfi":"epubcfi(/6/114[xchapter_051]!4/2/2/1:0)","page":168},{"cfi":"epubcfi(/6/114[xchapter_051]!4/2/1:0)","page":169},{"cfi":"epubcfi(/6/114[xchapter_051]!4/2/22/1:0)","page":170},{"cfi":"epubcfi(/6/116[xchapter_052]!4/1:0)","page":171},{"cfi":"epubcfi(/6/118[xchapter_053]!4/2/2/1:0)","page":172},{"cfi":"epubcfi(/6/118[xchapter_053]!4/2/1:0)","page":173},{"cfi":"epubcfi(/6/118[xchapter_053]!4/2/18/1:0)","page":174},{"cfi":"epubcfi(/6/120[xchapter_054]!4/2/2/1:0)","page":175},{"cfi":"epubcfi(/6/120[xchapter_054]!4/2/14/1:0)","page":176},{"cfi":"epubcfi(/6/120[xchapter_054]!4/2/22/1:0)","page":177},{"cfi":"epubcfi(/6/120[xchapter_054]!4/2/26/1:0)","page":178},{"cfi":"epubcfi(/6/120[xchapter_054]!4/2/40/1:0)","page":179},{"cfi":"epubcfi(/6/120[xchapter_054]!4/2/50/1:0)","page":180},{"cfi":"epubcfi(/6/120[xchapter_054]!4/2/1:0)","page":181},{"cfi":"epubcfi(/6/120[xchapter_054]!4/2/84/1:0)","page":182},{"cfi":"epubcfi(/6/120[xchapter_054]!4/2/106/1:0)","page":183},{"cfi":"epubcfi(/6/120[xchapter_054]!4/2/120/1:0)","page":184},{"cfi":"epubcfi(/6/120[xchapter_054]!4/2/142/1:0)","page":185},{"cfi":"epubcfi(/6/120[xchapter_054]!4/2/168/1:0)","page":186},{"cfi":"epubcfi(/6/120[xchapter_054]!4/2/182/1:0)","page":187},{"cfi":"epubcfi(/6/122[xchapter_055]!4/2/2/1:0)","page":188},{"cfi":"epubcfi(/6/122[xchapter_055]!4/2/1:0)","page":189},{"cfi":"epubcfi(/6/122[xchapter_055]!4/2/20/1:0)","page":190},{"cfi":"epubcfi(/6/124[xchapter_056]!4/2/2/1:0)","page":191},{"cfi":"epubcfi(/6/124[xchapter_056]!4/2/1:0)","page":192},{"cfi":"epubcfi(/6/126[xchapter_057]!4/1:0)","page":193},{"cfi":"epubcfi(/6/126[xchapter_057]!4/2/16/1:0)","page":194},{"cfi":"epubcfi(/6/128[xchapter_058]!4/1:0)","page":195},{"cfi":"epubcfi(/6/128[xchapter_058]!4/2/16/1:0)","page":196},{"cfi":"epubcfi(/6/130[xchapter_059]!4/1:0)","page":197},{"cfi":"epubcfi(/6/130[xchapter_059]!4/2/16/1:0)","page":198},{"cfi":"epubcfi(/6/132[xchapter_060]!4/2/2/1:0)","page":199},{"cfi":"epubcfi(/6/132[xchapter_060]!4/2/1:0)","page":200},{"cfi":"epubcfi(/6/134[xchapter_061]!4/2/2/1:0)","page":201},{"cfi":"epubcfi(/6/134[xchapter_061]!4/2/1:0)","page":202},{"cfi":"epubcfi(/6/134[xchapter_061]!4/2/32/1:0)","page":203},{"cfi":"epubcfi(/6/136[xchapter_062]!4/1:0)","page":204},{"cfi":"epubcfi(/6/138[xchapter_063]!4/1:0)","page":205},{"cfi":"epubcfi(/6/140[xchapter_064]!4/2/2/1:0)","page":206},{"cfi":"epubcfi(/6/140[xchapter_064]!4/2/12/1:0)","page":207},{"cfi":"epubcfi(/6/140[xchapter_064]!4/2/1:0)","page":208},{"cfi":"epubcfi(/6/140[xchapter_064]!4/2/44/1:0)","page":209},{"cfi":"epubcfi(/6/140[xchapter_064]!4/2/84/1:0)","page":210},{"cfi":"epubcfi(/6/142[xchapter_065]!4/1:0)","page":211},{"cfi":"epubcfi(/6/142[xchapter_065]!4/2/12/1:0)","page":212},{"cfi":"epubcfi(/6/144[xchapter_066]!4/1:0)","page":213},{"cfi":"epubcfi(/6/146[xchapter_067]!4/1:0)","page":214},{"cfi":"epubcfi(/6/148[xchapter_068]!4/2/2/1:0)","page":215},{"cfi":"epubcfi(/6/148[xchapter_068]!4/2/1:0)","page":216},{"cfi":"epubcfi(/6/150[xchapter_069]!4/1:0)","page":217},{"cfi":"epubcfi(/6/152[xchapter_070]!4/1:0)","page":218},{"cfi":"epubcfi(/6/152[xchapter_070]!4/2/16/1:0)","page":219},{"cfi":"epubcfi(/6/154[xchapter_071]!4/2/2/1:0)","page":220},{"cfi":"epubcfi(/6/154[xchapter_071]!4/2/16/1:0)","page":221},{"cfi":"epubcfi(/6/154[xchapter_071]!4/2/1:0)","page":222},{"cfi":"epubcfi(/6/154[xchapter_071]!4/2/40/1:0)","page":223},{"cfi":"epubcfi(/6/156[xchapter_072]!4/2/2/1:0)","page":224},{"cfi":"epubcfi(/6/156[xchapter_072]!4/2/1:0)","page":225},{"cfi":"epubcfi(/6/156[xchapter_072]!4/2/20/1:0)","page":226},{"cfi":"epubcfi(/6/158[xchapter_073]!4/2/2/1:0)","page":227},{"cfi":"epubcfi(/6/158[xchapter_073]!4/2/1:0)","page":228},{"cfi":"epubcfi(/6/158[xchapter_073]!4/2/42/1:0)","page":229},{"cfi":"epubcfi(/6/158[xchapter_073]!4/2/72/1:0)","page":230},{"cfi":"epubcfi(/6/160[xchapter_074]!4/2/2/1:0)","page":231},{"cfi":"epubcfi(/6/160[xchapter_074]!4/2/1:0)","page":232},{"cfi":"epubcfi(/6/160[xchapter_074]!4/2/22/1:0)","page":233},{"cfi":"epubcfi(/6/162[xchapter_075]!4/2/2/1:0)","page":234},{"cfi":"epubcfi(/6/162[xchapter_075]!4/2/1:0)","page":235},{"cfi":"epubcfi(/6/164[xchapter_076]!4/1:0)","page":236},{"cfi":"epubcfi(/6/164[xchapter_076]!4/2/8/1:0)","page":237},{"cfi":"epubcfi(/6/166[xchapter_077]!4/1:0)","page":238},{"cfi":"epubcfi(/6/168[xchapter_078]!4/2/2/1:0)","page":239},{"cfi":"epubcfi(/6/168[xchapter_078]!4/2/1:0)","page":240},{"cfi":"epubcfi(/6/168[xchapter_078]!4/2/24/1:0)","page":241},{"cfi":"epubcfi(/6/170[xchapter_079]!4/1:0)","page":242},{"cfi":"epubcfi(/6/170[xchapter_079]!4/2/10/1:0)","page":243},{"cfi":"epubcfi(/6/172[xchapter_080]!4/1:0)","page":244},{"cfi":"epubcfi(/6/172[xchapter_080]!4/2/12/1:0)","page":245},{"cfi":"epubcfi(/6/174[xchapter_081]!4/2/2/1:0)","page":246},{"cfi":"epubcfi(/6/174[xchapter_081]!4/2/24/1:0)","page":247},{"cfi":"epubcfi(/6/174[xchapter_081]!4/2/40/1:0)","page":248},{"cfi":"epubcfi(/6/174[xchapter_081]!4/2/1:0)","page":249},{"cfi":"epubcfi(/6/174[xchapter_081]!4/2/62/1:0)","page":250},{"cfi":"epubcfi(/6/174[xchapter_081]!4/2/74/1:0)","page":251},{"cfi":"epubcfi(/6/174[xchapter_081]!4/2/86/1:0)","page":252},{"cfi":"epubcfi(/6/176[xchapter_082]!4/2/2/1:0)","page":253},{"cfi":"epubcfi(/6/176[xchapter_082]!4/2/1:0)","page":254},{"cfi":"epubcfi(/6/178[xchapter_083]!4/1:0)","page":255},{"cfi":"epubcfi(/6/180[xchapter_084]!4/1:0)","page":256},{"cfi":"epubcfi(/6/182[xchapter_085]!4/2/2/1:0)","page":257},{"cfi":"epubcfi(/6/182[xchapter_085]!4/2/1:0)","page":258},{"cfi":"epubcfi(/6/182[xchapter_085]!4/2/16/1:0)","page":259},{"cfi":"epubcfi(/6/184[xchapter_086]!4/2/2/1:0)","page":260},{"cfi":"epubcfi(/6/184[xchapter_086]!4/2/1:0)","page":261},{"cfi":"epubcfi(/6/184[xchapter_086]!4/2/26/1:0)","page":262},{"cfi":"epubcfi(/6/186[xchapter_087]!4/2/2/1:0)","page":263},{"cfi":"epubcfi(/6/186[xchapter_087]!4/2/12/1:0)","page":264},{"cfi":"epubcfi(/6/186[xchapter_087]!4/2/20/1:0)","page":265},{"cfi":"epubcfi(/6/186[xchapter_087]!4/2/30/1:0)","page":266},{"cfi":"epubcfi(/6/186[xchapter_087]!4/2/1:0)","page":267},{"cfi":"epubcfi(/6/186[xchapter_087]!4/2/42/1:0)","page":268},{"cfi":"epubcfi(/6/186[xchapter_087]!4/2/48/1:0)","page":269},{"cfi":"epubcfi(/6/186[xchapter_087]!4/2/62/1:0)","page":270},{"cfi":"epubcfi(/6/188[xchapter_088]!4/2/2/1:0)","page":271},{"cfi":"epubcfi(/6/188[xchapter_088]!4/2/1:0)","page":272},{"cfi":"epubcfi(/6/190[xchapter_089]!4/2/2/1:0)","page":273},{"cfi":"epubcfi(/6/190[xchapter_089]!4/2/1:0)","page":274},{"cfi":"epubcfi(/6/190[xchapter_089]!4/2/30/1:0)","page":275},{"cfi":"epubcfi(/6/192[xchapter_090]!4/1:0)","page":276},{"cfi":"epubcfi(/6/192[xchapter_090]!4/2/20/1:0)","page":277},{"cfi":"epubcfi(/6/194[xchapter_091]!4/2/2/1:0)","page":278},{"cfi":"epubcfi(/6/194[xchapter_091]!4/2/16/1:0)","page":279},{"cfi":"epubcfi(/6/194[xchapter_091]!4/2/1:0)","page":280},{"cfi":"epubcfi(/6/194[xchapter_091]!4/2/64/1:0)","page":281},{"cfi":"epubcfi(/6/196[xchapter_092]!4/1:0)","page":282},{"cfi":"epubcfi(/6/196[xchapter_092]!4/2/14/1:0)","page":283},{"cfi":"epubcfi(/6/198[xchapter_093]!4/2/2/1:0)","page":284},{"cfi":"epubcfi(/6/198[xchapter_093]!4/2/1:0)","page":285},{"cfi":"epubcfi(/6/198[xchapter_093]!4/2/24/1:0)","page":286},{"cfi":"epubcfi(/6/200[xchapter_094]!4/2/2/1:0)","page":287},{"cfi":"epubcfi(/6/200[xchapter_094]!4/2/1:0)","page":288},{"cfi":"epubcfi(/6/202[xchapter_095]!4/1:0)","page":289},{"cfi":"epubcfi(/6/204[xchapter_096]!4/2/2/1:0)","page":290},{"cfi":"epubcfi(/6/204[xchapter_096]!4/2/1:0)","page":291},{"cfi":"epubcfi(/6/204[xchapter_096]!4/2/20/1:0)","page":292},{"cfi":"epubcfi(/6/206[xchapter_097]!4/1:0)","page":293},{"cfi":"epubcfi(/6/208[xchapter_098]!4/1:0)","page":294},{"cfi":"epubcfi(/6/208[xchapter_098]!4/2/12/1:0)","page":295},{"cfi":"epubcfi(/6/210[xchapter_099]!4/2/2/1:0)","page":296},{"cfi":"epubcfi(/6/210[xchapter_099]!4/2/1:0)","page":297},{"cfi":"epubcfi(/6/210[xchapter_099]!4/2/20/1:0)","page":298},{"cfi":"epubcfi(/6/210[xchapter_099]!4/2/26/1:0)","page":299},{"cfi":"epubcfi(/6/212[xchapter_100]!4/2/2/1:0)","page":300},{"cfi":"epubcfi(/6/212[xchapter_100]!4/2/20/1:0)","page":301},{"cfi":"epubcfi(/6/212[xchapter_100]!4/2/1:0)","page":302},{"cfi":"epubcfi(/6/212[xchapter_100]!4/2/54/1:0)","page":303},{"cfi":"epubcfi(/6/212[xchapter_100]!4/2/76/1:0)","page":304},{"cfi":"epubcfi(/6/214[xchapter_101]!4/2/2/1:0)","page":305},{"cfi":"epubcfi(/6/214[xchapter_101]!4/2/1:0)","page":306},{"cfi":"epubcfi(/6/214[xchapter_101]!4/2/18/1:0)","page":307},{"cfi":"epubcfi(/6/216[xchapter_102]!4/2/2/1:0)","page":308},{"cfi":"epubcfi(/6/216[xchapter_102]!4/2/1:0)","page":309},{"cfi":"epubcfi(/6/216[xchapter_102]!4/2/24/1:0)","page":310},{"cfi":"epubcfi(/6/218[xchapter_103]!4/1:0)","page":311},{"cfi":"epubcfi(/6/218[xchapter_103]!4/2/18/1:0)","page":312},{"cfi":"epubcfi(/6/220[xchapter_104]!4/2/2/1:0)","page":313},{"cfi":"epubcfi(/6/220[xchapter_104]!4/2/1:0)","page":314},{"cfi":"epubcfi(/6/220[xchapter_104]!4/2/18/1:0)","page":315},{"cfi":"epubcfi(/6/222[xchapter_105]!4/2/2/1:0)","page":316},{"cfi":"epubcfi(/6/222[xchapter_105]!4/2/1:0)","page":317},{"cfi":"epubcfi(/6/222[xchapter_105]!4/2/24/1:0)","page":318},{"cfi":"epubcfi(/6/224[xchapter_106]!4/1:0)","page":319},{"cfi":"epubcfi(/6/224[xchapter_106]!4/2/10/1:0)","page":320},{"cfi":"epubcfi(/6/226[xchapter_107]!4/1:0)","page":321},{"cfi":"epubcfi(/6/226[xchapter_107]!4/2/12/1:0)","page":322},{"cfi":"epubcfi(/6/228[xchapter_108]!4/2/2/1:0)","page":323},{"cfi":"epubcfi(/6/228[xchapter_108]!4/2/1:0)","page":324},{"cfi":"epubcfi(/6/228[xchapter_108]!4/2/66/1:0)","page":325},{"cfi":"epubcfi(/6/230[xchapter_109]!4/1:0)","page":326},{"cfi":"epubcfi(/6/230[xchapter_109]!4/2/28/1:0)","page":327},{"cfi":"epubcfi(/6/232[xchapter_110]!4/2/2/1:0)","page":328},{"cfi":"epubcfi(/6/232[xchapter_110]!4/2/1:0)","page":329},{"cfi":"epubcfi(/6/232[xchapter_110]!4/2/22/1:0)","page":330},{"cfi":"epubcfi(/6/232[xchapter_110]!4/2/34/1:0)","page":331},{"cfi":"epubcfi(/6/234[xchapter_111]!4/1:0)","page":332},{"cfi":"epubcfi(/6/236[xchapter_112]!4/1:0)","page":333},{"cfi":"epubcfi(/6/236[xchapter_112]!4/2/12/1:0)","page":334},{"cfi":"epubcfi(/6/238[xchapter_113]!4/2/2/1:0)","page":335},{"cfi":"epubcfi(/6/238[xchapter_113]!4/2/1:0)","page":336},{"cfi":"epubcfi(/6/240[xchapter_114]!4/1:0)","page":337},{"cfi":"epubcfi(/6/242[xchapter_115]!4/1:0)","page":338},{"cfi":"epubcfi(/6/242[xchapter_115]!4/2/14/1:0)","page":339},{"cfi":"epubcfi(/6/244[xchapter_116]!4/1:0)","page":340},{"cfi":"epubcfi(/6/246[xchapter_117]!4/1:0)","page":341},{"cfi":"epubcfi(/6/248[xchapter_118]!4/1:0)","page":342},{"cfi":"epubcfi(/6/248[xchapter_118]!4/2/10/1:0)","page":343},{"cfi":"epubcfi(/6/250[xchapter_119]!4/2/2/1:0)","page":344},{"cfi":"epubcfi(/6/250[xchapter_119]!4/2/18/1:0)","page":345},{"cfi":"epubcfi(/6/250[xchapter_119]!4/2/1:0)","page":346},{"cfi":"epubcfi(/6/250[xchapter_119]!4/2/64/1:0)","page":347},{"cfi":"epubcfi(/6/252[xchapter_120]!4/1:0)","page":348},{"cfi":"epubcfi(/6/254[xchapter_121]!4/1:0)","page":349},{"cfi":"epubcfi(/6/256[xchapter_122]!4/1:0)","page":350},{"cfi":"epubcfi(/6/258[xchapter_123]!4/2/2/1:0)","page":351},{"cfi":"epubcfi(/6/258[xchapter_123]!4/2/1:0)","page":352},{"cfi":"epubcfi(/6/260[xchapter_124]!4/2/2/1:0)","page":353},{"cfi":"epubcfi(/6/260[xchapter_124]!4/2/1:0)","page":354},{"cfi":"epubcfi(/6/262[xchapter_125]!4/2/2/1:0)","page":355},{"cfi":"epubcfi(/6/262[xchapter_125]!4/2/1:0)","page":356},{"cfi":"epubcfi(/6/264[xchapter_126]!4/2/2/1:0)","page":357},{"cfi":"epubcfi(/6/264[xchapter_126]!4/2/1:0)","page":358},{"cfi":"epubcfi(/6/266[xchapter_127]!4/1:0)","page":359},{"cfi":"epubcfi(/6/268[xchapter_128]!4/2/2/1:0)","page":360},{"cfi":"epubcfi(/6/268[xchapter_128]!4/2/1:0)","page":361},{"cfi":"epubcfi(/6/270[xchapter_129]!4/1:0)","page":362},{"cfi":"epubcfi(/6/272[xchapter_130]!4/2/2/1:0)","page":363},{"cfi":"epubcfi(/6/272[xchapter_130]!4/2/1:0)","page":364},{"cfi":"epubcfi(/6/272[xchapter_130]!4/2/22/1:0)","page":365},{"cfi":"epubcfi(/6/274[xchapter_131]!4/1:0)","page":366},{"cfi":"epubcfi(/6/276[xchapter_132]!4/2/2/1:0)","page":367},{"cfi":"epubcfi(/6/276[xchapter_132]!4/2/1:0)","page":368},{"cfi":"epubcfi(/6/276[xchapter_132]!4/2/30/1:0)","page":369},{"cfi":"epubcfi(/6/278[xchapter_133]!4/2/2/1:0)","page":370},{"cfi":"epubcfi(/6/278[xchapter_133]!4/2/26/1:0)","page":371},{"cfi":"epubcfi(/6/278[xchapter_133]!4/2/40/1:0)","page":372},{"cfi":"epubcfi(/6/278[xchapter_133]!4/2/1:0)","page":373},{"cfi":"epubcfi(/6/278[xchapter_133]!4/2/64/1:0)","page":374},{"cfi":"epubcfi(/6/278[xchapter_133]!4/2/82/1:0)","page":375},{"cfi":"epubcfi(/6/280[xchapter_134]!4/2/2/1:0)","page":376},{"cfi":"epubcfi(/6/280[xchapter_134]!4/2/14/1:0)","page":377},{"cfi":"epubcfi(/6/280[xchapter_134]!4/2/1:0)","page":378},{"cfi":"epubcfi(/6/280[xchapter_134]!4/2/44/1:0)","page":379},{"cfi":"epubcfi(/6/280[xchapter_134]!4/2/54/1:0)","page":380},{"cfi":"epubcfi(/6/280[xchapter_134]!4/2/90/1:0)","page":381},{"cfi":"epubcfi(/6/282[xchapter_135]!4/2/2/1:0)","page":382},{"cfi":"epubcfi(/6/282[xchapter_135]!4/2/10/1:0)","page":383},{"cfi":"epubcfi(/6/282[xchapter_135]!4/2/28/1:0)","page":384},{"cfi":"epubcfi(/6/282[xchapter_135]!4/2/1:0)","page":385},{"cfi":"epubcfi(/6/282[xchapter_135]!4/2/76/1:0)","page":386},{"cfi":"epubcfi(/6/282[xchapter_135]!4/2/90/1:0)","page":387},{"cfi":"epubcfi(/6/282[xchapter_135]!4/2/110/1:0)","page":388},{"cfi":"epubcfi(/6/282[xchapter_135]!4/2/124/1:0)","page":389},{"cfi":"epubcfi(/6/284[xchapter_136]!4/1:0)","page":390},{"cfi":"epubcfi(/6/286[copyright]!4/1:0)","page":391},{"cfi":"epubcfi(/6/288[toc]!4/2/2/1:0)","page":392},{"cfi":"epubcfi(/6/288[toc]!4/2/1:0)","page":393},{"cfi":"epubcfi(/6/288[toc]!4/2/4[toc]/2/204[toc-chapter_098]/1:0)","page":394}] \ No newline at end of file diff --git a/examples/pagination.html b/examples/pagination.html deleted file mode 100644 index 76d8652b0..000000000 --- a/examples/pagination.html +++ /dev/null @@ -1,207 +0,0 @@ - - - - - - Basic ePubJS Example - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
- -
- / 0 -
-
- - - - diff --git a/examples/promises.html b/examples/promises.html deleted file mode 100644 index ca5f8f717..000000000 --- a/examples/promises.html +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - ePubJS Promises Example - - - - - - - - - - - - -
- -
- -
- -
- - - - diff --git a/examples/search.html b/examples/search.html deleted file mode 100755 index 897aaf85c..000000000 --- a/examples/search.html +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- Menu -
-
- -   –   - -
- -
- -
- -
- - -
-
- -
- - diff --git a/examples/single.html b/examples/single.html deleted file mode 100644 index 81e75c5ae..000000000 --- a/examples/single.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - - Basic ePubJS Example - - - - - - - - - - - - - - - -
- -
-
-
- -
- - - - diff --git a/hooks/default/endnotes.js b/hooks/default/endnotes.js deleted file mode 100644 index 2991722c7..000000000 --- a/hooks/default/endnotes.js +++ /dev/null @@ -1,159 +0,0 @@ -EPUBJS.Hooks.register("beforeChapterDisplay").endnotes = function(callback, renderer){ - - var notes = renderer.contents.querySelectorAll('a[href]'), - items = Array.prototype.slice.call(notes), //[].slice.call() - attr = "epub:type", - type = "noteref", - folder = EPUBJS.core.folder(location.pathname), - cssPath = (folder + EPUBJS.cssPath) || folder, - popups = {}; - - EPUBJS.core.addCss(cssPath + "popup.css", false, renderer.render.document.head); - - - items.forEach(function(item){ - var epubType = item.getAttribute(attr), - href, - id, - el, - pop, - pos, - left, - top, - txt; - - if(epubType != type) return; - - href = item.getAttribute("href"); - id = href.replace("#", ''); - el = renderer.render.document.getElementById(id); - - - item.addEventListener("mouseover", showPop, false); - item.addEventListener("mouseout", hidePop, false); - - function showPop(){ - var poppos, - iheight = renderer.height, - iwidth = renderer.width, - tip, - pop, - maxHeight = 225, - itemRect; - - if(!txt) { - pop = el.cloneNode(true); - txt = pop.querySelector("p"); - } - - // chapter.replaceLinks.bind(this) //TODO:Fred - update? - //-- create a popup with endnote inside of it - if(!popups[id]) { - popups[id] = document.createElement("div"); - popups[id].setAttribute("class", "popup"); - - pop_content = document.createElement("div"); - - popups[id].appendChild(pop_content); - - pop_content.appendChild(txt); - pop_content.setAttribute("class", "pop_content"); - - renderer.render.document.body.appendChild(popups[id]); - - //-- TODO: will these leak memory? - Fred - popups[id].addEventListener("mouseover", onPop, false); - popups[id].addEventListener("mouseout", offPop, false); - - //-- Add hide on page change - // chapter.book.listenUntil("book:pageChanged", "book:chapterDestroy", hidePop); - // chapter.book.listenUntil("book:pageChanged", "book:chapterDestroy", offPop); - renderer.on("renderer:pageChanged", hidePop, this); - renderer.on("renderer:pageChanged", offPop, this); - // chapter.book.on("renderer:chapterDestroy", hidePop, this); - } - - pop = popups[id]; - - - //-- get location of item - itemRect = item.getBoundingClientRect(); - left = itemRect.left; - top = itemRect.top; - - //-- show the popup - pop.classList.add("show"); - - //-- locations of popup - popRect = pop.getBoundingClientRect(); - - //-- position the popup - pop.style.left = left - popRect.width / 2 + "px"; - pop.style.top = top + "px"; - - - //-- Adjust max height - if(maxHeight > iheight / 2.5) { - maxHeight = iheight / 2.5; - pop_content.style.maxHeight = maxHeight + "px"; - } - - //-- switch above / below - if(popRect.height + top >= iheight - 25) { - pop.style.top = top - popRect.height + "px"; - pop.classList.add("above"); - }else{ - pop.classList.remove("above"); - } - - //-- switch left - if(left - popRect.width <= 0) { - pop.style.left = left + "px"; - pop.classList.add("left"); - }else{ - pop.classList.remove("left"); - } - - //-- switch right - if(left + popRect.width / 2 >= iwidth) { - //-- TEMP MOVE: 300 - pop.style.left = left - 300 + "px"; - - popRect = pop.getBoundingClientRect(); - pop.style.left = left - popRect.width + "px"; - //-- switch above / below again - if(popRect.height + top >= iheight - 25) { - pop.style.top = top - popRect.height + "px"; - pop.classList.add("above"); - }else{ - pop.classList.remove("above"); - } - - pop.classList.add("right"); - }else{ - pop.classList.remove("right"); - } - - - } - - function onPop(){ - popups[id].classList.add("on"); - } - - function offPop(){ - popups[id].classList.remove("on"); - } - - function hidePop(){ - setTimeout(function(){ - popups[id].classList.remove("show"); - }, 100); - } - - }); - - - if(callback) callback(); - -} diff --git a/hooks/default/mathml.js b/hooks/default/mathml.js deleted file mode 100644 index 6037cde27..000000000 --- a/hooks/default/mathml.js +++ /dev/null @@ -1,25 +0,0 @@ -EPUBJS.Hooks.register("beforeChapterDisplay").mathml = function(callback, renderer){ - - // check of currentChapter properties contains 'mathml' - if(renderer.currentChapter.manifestProperties.indexOf("mathml") !== -1 ){ - - // Assign callback to be inside iframe window - renderer.iframe.contentWindow.mathmlCallback = callback; - - // add MathJax config script tag to the renderer body - var s = document.createElement("script"); - s.type = 'text/x-mathjax-config'; - s.innerHTML = '\ - MathJax.Hub.Register.StartupHook("End",function () { \ - window.mathmlCallback(); \ - });\ - MathJax.Hub.Config({jax: ["input/TeX","input/MathML","output/SVG"],extensions: ["tex2jax.js","mml2jax.js","MathEvents.js"],TeX: {extensions: ["noErrors.js","noUndefined.js","autoload-all.js"]},MathMenu: {showRenderer: false},menuSettings: {zoom: "Click"},messageStyle: "none"}); \ - '; - renderer.doc.body.appendChild(s); - // add MathJax.js to renderer head - EPUBJS.core.addScript("http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML", null, renderer.doc.head); - - } else { - if(callback) callback(); - } -} diff --git a/hooks/default/smartimages.js b/hooks/default/smartimages.js deleted file mode 100644 index a7cb108ee..000000000 --- a/hooks/default/smartimages.js +++ /dev/null @@ -1,70 +0,0 @@ -EPUBJS.Hooks.register("beforeChapterDisplay").smartimages = function(callback, renderer){ - var images = renderer.contents.querySelectorAll('img'), - items = Array.prototype.slice.call(images), - iheight = renderer.height,//chapter.bodyEl.clientHeight,//chapter.doc.body.getBoundingClientRect().height, - oheight; - - if(renderer.layoutSettings.layout != "reflowable") { - callback(); - return; //-- Only adjust images for reflowable text - } - - items.forEach(function(item){ - - function size() { - var itemRect = item.getBoundingClientRect(), - rectHeight = itemRect.height, - top = itemRect.top, - oHeight = item.getAttribute('data-height'), - height = oHeight || rectHeight, - newHeight, - fontSize = Number(getComputedStyle(item, "").fontSize.match(/(\d*(\.\d*)?)px/)[1]), - fontAdjust = fontSize ? fontSize / 2 : 0; - - iheight = renderer.contents.clientHeight; - if(top < 0) top = 0; - - if(height + top >= iheight) { - - if(top < iheight/2) { - // Remove top and half font-size from height to keep container from overflowing - newHeight = iheight - top - fontAdjust; - item.style.maxHeight = newHeight + "px"; - item.style.width= "auto"; - }else{ - if(height > iheight) { - item.style.maxHeight = iheight + "px"; - item.style.width= "auto"; - itemRect = item.getBoundingClientRect(); - height = itemRect.height; - } - item.style.display = "block"; - item.style["WebkitColumnBreakBefore"] = "always"; - item.style["breakBefore"] = "column"; - - } - - item.setAttribute('data-height', newHeight); - - }else{ - item.style.removeProperty('max-height'); - item.style.removeProperty('margin-top'); - } - } - - item.addEventListener('load', size, false); - - renderer.on("renderer:resized", size); - - renderer.on("renderer:chapterUnloaded", function(){ - item.removeEventListener('load', size); - renderer.off("renderer:resized", size); - }); - - size(); - - }); - - if(callback) callback(); - -} diff --git a/hooks/default/transculsions.js b/hooks/default/transculsions.js deleted file mode 100644 index 2c2a5693d..000000000 --- a/hooks/default/transculsions.js +++ /dev/null @@ -1,59 +0,0 @@ -EPUBJS.Hooks.register("beforeChapterDisplay").transculsions = function(callback, renderer){ - /* - - */ - - var trans = renderer.contents.querySelectorAll('[transclusion]'), - items = Array.prototype.slice.call(trans); - - items.forEach(function(item){ - var src = item.getAttribute("ref"), - iframe = document.createElement('iframe'), - orginal_width = item.getAttribute("width"), - orginal_height = item.getAttribute("height"), - parent = item.parentNode, - width = orginal_width, - height = orginal_height, - ratio; - - - function size() { - width = orginal_width; - height = orginal_height; - - if(width > chapter.colWidth){ - ratio = chapter.colWidth / width; - - width = chapter.colWidth; - height = height * ratio; - } - - iframe.width = width; - iframe.height = height; - } - - - size(); - - //-- resize event - - - renderer.listenUntil("renderer:resized", "renderer:chapterUnloaded", size); - - iframe.src = src; - - // - parent.replaceChild(iframe, item); - - - }); - - - - - if(callback) callback(); - - -} diff --git a/hooks/extensions/annotate.js b/hooks/extensions/annotate.js deleted file mode 100644 index 482547c53..000000000 --- a/hooks/extensions/annotate.js +++ /dev/null @@ -1,108 +0,0 @@ -EPUBJS.Hooks.register("beforeChapterDisplay").annotate = function(callback, chapter){ - - - var chap = chapter.bodyEl, - server = 'http://127.0.0.1:5000/'; - files = [ - EPUBJS.filePath + "libs/jquery-1.9.0.js", - EPUBJS.filePath + "libs/jquery-migrate-1.1.1.js", - EPUBJS.filePath + "libs/annotator-full.js" - ]; - - - //EPUBJS.core.loadScripts(files, annotate, chapter.doc.head); - // $(chapter.doc.body).annotator().annotator('setupPlugins', {}, { - - // Filter:false, - // Store: { - // annotationData: { - // 'uri': chapter.path - // }, - // loadFromSearch: { - // 'limit': 100, - // 'uri': chapter.path - // } - // } - - // }); - Util.mousePosition = function(e, offsetEl) { - var offset; - offset = $(offsetEl).position(); - return { - top: e.pageY, - left: e.pageX - }; - }; - - devAnnotator = new Annotator(chapter.doc.body) - .addPlugin('Auth', { - tokenUrl: 'http://annotateit.org/api/token',//'http://localhost:5001/api/token' - }) - .addPlugin('Unsupported') - .addPlugin('AnnotateItPermissions') - .addPlugin('Store', { - prefix: 'http://annotateit.org/api',//'http://localhost:5000', - loadFromSearch: { - uri: chapter.currentChapter.href - }, - annotationData: { - uri: chapter.currentChapter.href - } - }); - - // devAnnotator.plugins.Auth.withToken(function (tok) { - // console.log(tok); - // }) - - EPUBJS.core.addCss("../libs/annotator/css/annotator.css", false, chapter.doc.head); - - if(callback) callback(); - - function annotate(){ - EPUBJS.core.addCss("css/annotator.css", false, chapter.doc.head); - - var s = document.createElement("script"); - s.type = 'text/javascript'; - - var a = "jQuery.migrateTrace = false;"; - //a += "console.log(document.getElementById('c001p0002').getBoundingClientRect());"; - - a += "var content = $('body').annotator().annotator('setupPlugins', {}, {Filter:false});"; - - //-- Use Local Server: - - // a += "var content = $('body').annotator(),"; - // a += " server = '" + server + "';"; - // a += " path = '" + chapter.path + "';"; - // - // a += " content.annotator('addPlugin', 'Store', {"; - // // The endpoint of the store on your server. - // a += " prefix: server,"; - // - // // Attach the uri of the current page to all annotations to allow search. - // a += " annotationData: {"; - // a += " 'uri': path"; - // a += " }"; - - // This will perform a search action rather than read when the plugin - // loads. Will request the last 20 annotations for the current url. - // eg. /store/endpoint/search?limit=20&uri=http://this/document/only - // a += "," - // a += " loadFromSearch: {"; - // a += " 'limit': 20,"; - // a += " 'uri': path"; - // a += " }"; - //a += "});"; - - s.innerHTML = a; - - chapter.doc.body.appendChild(s); - - if(callback) callback(); - } - - - -} - - diff --git a/hooks/extensions/embedh.js b/hooks/extensions/embedh.js deleted file mode 100644 index 144639b6a..000000000 --- a/hooks/extensions/embedh.js +++ /dev/null @@ -1,11 +0,0 @@ -EPUBJS.Hooks.register("beforeChapterDisplay").example = function(callback, chapter){ - - - var s = document.createElement("script"); - s.type = 'text/javascript'; - s.src ="https://test.hypothes.is/app/embed.js" - - chapter.doc.body.appendChild(s); - - //-- Continue to other hooks - if(callback) callback();} \ No newline at end of file diff --git a/hooks/extensions/example.js b/hooks/extensions/example.js deleted file mode 100644 index 8bbcdf3b0..000000000 --- a/hooks/extensions/example.js +++ /dev/null @@ -1,43 +0,0 @@ -EPUBJS.Hooks.register("beforeChapterDisplay").example = function(callback, chapter){ - - EPUBJS.core.addCss("css/annotator.css", false, chapter.doc.head); - - EPUBJS.core.addScript(EPUBJS.filePath + "libs/annotator-full.js", function() { - - //-- Config script - var s = document.createElement("script"); - s.type = 'text/javascript'; - - a = '/* -*- js -*- */ -/*{literal} chapter.colWidth){ - // ratio = chapter.colWidth / width; - // - // width = chapter.colWidth; - // height = height * ratio; - // } - // - // iframe.width = width; - // iframe.height = height; - } - - function shouldPlay(e) { - page = 1; - if(e) page = e.msg; - - if(page != onSpread) return; - - if(playing) playing.pause(); - - item.play(); - - playing = item; - - console.log("start", item.src) - - } - - - - - //-- resize event - - - chapter.book.listenUntil("book:resized", "book:chapterDestroy", getPage); - - chapter.book.listenUntil("book:pageChanged", "book:chapterDestroy", shouldPlay); - - item.removeAttribute("controls"); - - getPage(); - shouldPlay(); - - }); - - - - - if(callback) callback(); - - -} diff --git a/hooks/extensions/pageturns.js b/hooks/extensions/pageturns.js deleted file mode 100644 index 772f70010..000000000 --- a/hooks/extensions/pageturns.js +++ /dev/null @@ -1,28 +0,0 @@ -EPUBJS.Hooks.register("beforeChapterDisplay").pageTurns = function(callback, renderer){ - - var lock = false; - var arrowKeys = function(e){ - if(lock) return; - - if (e.keyCode == 37) { - renderer.book.prevPage(); - lock = true; - setTimeout(function(){ - lock = false; - }, 100); - return false; - } - - if (e.keyCode == 39) { - renderer.book.nextPage(); - lock = true; - setTimeout(function(){ - lock = false; - }, 100); - return false; - } - - }; - renderer.docEl.addEventListener('keydown', arrowKeys, false); - if(callback) callback(); -} \ No newline at end of file diff --git a/index.html b/index.html deleted file mode 100644 index a4f5fd2e3..000000000 --- a/index.html +++ /dev/null @@ -1,99 +0,0 @@ - - - - - - ePubJS Examples - - - - - - - - - -
- -
- - - - diff --git a/lib/epub.js b/lib/epub.js new file mode 100644 index 000000000..18a87f027 --- /dev/null +++ b/lib/epub.js @@ -0,0 +1,32 @@ +if (typeof EPUBJS === 'undefined') { + (typeof window !== 'undefined' ? window : this).EPUBJS = {}; +} + +EPUBJS.VERSION = "0.3.0"; + + +(function(root) { + "use strict"; + var ePub = function(_url) { + return new EPUBJS.Book(_url); + }; + + ePub.Render = { + register: function(name, renderer) { + ePub.Render[name] = renderer; + } + } + + // CommonJS + if (typeof exports === "object") { + root.RSVP = require("rsvp"); + module.exports = ePub; + // RequireJS + } else if (typeof define === "function" && define.amd) { + define(ePub); + // Global + } else { + root.ePub = ePub; + } + +})(this); \ No newline at end of file diff --git a/lib/epubjs/book.js b/lib/epubjs/book.js new file mode 100644 index 000000000..a68efc9b2 --- /dev/null +++ b/lib/epubjs/book.js @@ -0,0 +1,178 @@ +EPUBJS.Book = function(_url){ + // Promises + this.opening = new RSVP.defer(); + this.opened = this.opening.promise; + + this.baseUrl = undefined; + + this.spine = undefined; + + this.loading = { + manifest: new RSVP.defer(), + spine: new RSVP.defer(), + metadata: new RSVP.defer(), + cover: new RSVP.defer(), + navigation: new RSVP.defer(), + pageList: new RSVP.defer() + }; + + this.loaded = { + manifest: this.loading.manifest.promise, + spine: this.loading.spine.promise, + metadata: this.loading.metadata.promise, + cover: this.loading.cover.promise, + navigation: this.loading.navigation.promise, + pageList: this.loading.pageList.promise + }; + + this.loaders = []; + for(var promise in this.loaded){ + this.loaders.push(this.loaded[promise]); + } + + this.ready = RSVP.all(this.loaders); + + // this.pageList = []; + + + // this.ready.all.then(this._ready.bind(this)); + + if(_url) { + this.open(_url); + } +}; + +EPUBJS.Book.prototype.open = function(_url){ + var uri; + var parse = new EPUBJS.Parser(); + var epubPackage; + var book = this; + var containerPath = "META-INF/container.xml"; + + // Reuse parsed url or create a new uri object + if(typeof(_url) === "object") { + uri = _url; + } else { + uri = EPUBJS.core.uri(_url); + } + + // Find path to the Container + if(uri.extension === "opf") { + // Direct link to package, no container + this.packageUrl = uri.path; + this.containerUrl = ''; + this.url = uri.directory; + + epubPackage = this.request(this.packageUrl); + + } else if(uri.extension === "epub" || uri.extension === "zip" ) { + // Book is archived + this.archived = true; + this.url = ''; + } + + // Find the path to the Package from the container + else if (!uri.extension) { + + this.containerUrl = _url + containerPath; + + epubPackage = this.request(this.containerUrl). + then(function(containerXml){ + return parse.container(containerXml); // Container has path to content + }). + then(function(paths){ + var packageUri = EPUBJS.core.uri(paths.packagePath); + book.packageUrl = _url + paths.packagePath; + book.url = _url + packageUri.directory; // Set Url relative to the content + book.encoding = paths.encoding; + + return book.request(book.packageUrl); + }).catch(function(error) { + // handle errors in either of the two requests + console.error("Could not load book at: " + (this.packageUrl || this.containerPath)); + book.trigger("book:loadFailed", (this.packageUrl || this.containerPath)); + book.opening.reject(error); + }); + } + + + epubPackage.then(function(packageXml) { + // Get package information from epub opf + book.unpack(packageXml); + + // Resolve promises + book.loading.manifest.resolve(book.package.manifest); + book.loading.metadata.resolve(book.package.metadata); + book.loading.spine.resolve(book.spine); + book.loading.cover.resolve(book.cover); + + // Resolve book opened promise + book.opening.resolve(book); + + // Clear queue of any waiting book request + + }).catch(function(error) { + // handle errors in parsing the book + console.error(error.message, error.stack); + book.opening.reject(error); + }); + + return this.opened; +}; + +EPUBJS.Book.prototype.unpack = function(packageXml){ + var book = this, + parse = new EPUBJS.Parser(); + + book.package = parse.packageContents(packageXml); // Extract info from contents + book.package.baseUrl = book.url; // Provides a url base for resolving paths + + book.spine = new EPUBJS.Spine(book.package, this.request); + + book.navigation = new EPUBJS.Navigation(book.package, this.request); + book.navigation.load().then(function(toc){ + book.toc = toc; + book.loading.navigation.resolve(book.navigation); + }); + + // //-- Set Global Layout setting based on metadata + // MOVE TO RENDER + // book.globalLayoutProperties = book.parseLayoutProperties(book.package.metadata); + + book.cover = book.url + book.package.coverPath; +}; + +// Alias for book.spine.get +EPUBJS.Book.prototype.section = function(target) { + return this.spine.get(target); +}; + +EPUBJS.Book.prototype.request = function(_url) { + // Switch request methods + if(this.archived) { + // TODO: handle archived + } else { + return EPUBJS.core.request(_url, 'xml', this.credentials); + } + +}; + +EPUBJS.Book.prototype.setCredentials = function(_credentials) { + this.credentials = _credentials; +}; + +//-- Enable binding events to book +RSVP.EventTarget.mixin(EPUBJS.Book.prototype); + +//-- Handle RSVP Errors +RSVP.on('error', function(event) { + //console.error(event, event.detail); +}); + +RSVP.configure('instrument', true); //-- true | will logging out all RSVP rejections +// RSVP.on('created', listener); +// RSVP.on('chained', listener); +// RSVP.on('fulfilled', listener); +RSVP.on('rejected', function(event){ + console.error(event.detail.message, event.detail.stack); +}); \ No newline at end of file diff --git a/lib/epubjs/core.js b/lib/epubjs/core.js new file mode 100644 index 000000000..9ce9f0c71 --- /dev/null +++ b/lib/epubjs/core.js @@ -0,0 +1,156 @@ +EPUBJS.core = {}; + +EPUBJS.core.request = function(url, type, withCredentials) { + var supportsURL = window.URL; + var BLOB_RESPONSE = supportsURL ? "blob" : "arraybuffer"; + + var deferred = new RSVP.defer(); + + var xhr = new XMLHttpRequest(); + + //-- Check from PDF.js: + // https://github.com/mozilla/pdf.js/blob/master/web/compatibility.js + var xhrPrototype = XMLHttpRequest.prototype; + + if (!('overrideMimeType' in xhrPrototype)) { + // IE10 might have response, but not overrideMimeType + Object.defineProperty(xhrPrototype, 'overrideMimeType', { + value: function xmlHttpRequestOverrideMimeType(mimeType) {} + }); + } + if(withCredentials) { + xhr.withCredentials = true; + } + xhr.open("GET", url, true); + xhr.onreadystatechange = handler; + + if(type == 'blob'){ + xhr.responseType = BLOB_RESPONSE; + } + + if(type == "json") { + xhr.setRequestHeader("Accept", "application/json"); + } + + if(type == 'xml') { + xhr.overrideMimeType('text/xml'); + } + + xhr.send(); + + function handler() { + if (this.readyState === this.DONE) { + if (this.status === 200 || this.responseXML ) { //-- Firefox is reporting 0 for blob urls + var r; + + if(type == 'xml'){ + r = this.responseXML; + }else + if(type == 'json'){ + r = JSON.parse(this.response); + }else + if(type == 'blob'){ + + if(supportsURL) { + r = this.response; + } else { + //-- Safari doesn't support responseType blob, so create a blob from arraybuffer + r = new Blob([this.response]); + } + + }else{ + r = this.response; + } + + deferred.resolve(r); + } else { + deferred.reject({ + message : this.response, + stack : new Error().stack + }); + } + } + } + + return deferred.promise; +}; + +//-- Parse the different parts of a url, returning a object +EPUBJS.core.uri = function(url){ + var uri = { + protocol : '', + host : '', + path : '', + origin : '', + directory : '', + base : '', + filename : '', + extension : '', + fragment : '', + href : url + }, + doubleSlash = url.indexOf('://'), + search = url.indexOf('?'), + fragment = url.indexOf("#"), + withoutProtocol, + dot, + firstSlash; + + if(fragment != -1) { + uri.fragment = url.slice(fragment + 1); + url = url.slice(0, fragment); + } + + if(search != -1) { + uri.search = url.slice(search + 1); + url = url.slice(0, search); + href = url; + } + + if(doubleSlash != -1) { + uri.protocol = url.slice(0, doubleSlash); + withoutProtocol = url.slice(doubleSlash+3); + firstSlash = withoutProtocol.indexOf('/'); + + if(firstSlash === -1) { + uri.host = uri.path; + uri.path = ""; + } else { + uri.host = withoutProtocol.slice(0, firstSlash); + uri.path = withoutProtocol.slice(firstSlash); + } + + + uri.origin = uri.protocol + "://" + uri.host; + + uri.directory = EPUBJS.core.folder(uri.path); + + uri.base = uri.origin + uri.directory; + // return origin; + } else { + uri.path = url; + uri.directory = EPUBJS.core.folder(url); + uri.base = uri.directory; + } + + //-- Filename + uri.filename = url.replace(uri.base, ''); + dot = uri.filename.lastIndexOf('.'); + if(dot != -1) { + uri.extension = uri.filename.slice(dot+1); + } + return uri; +}; + +//-- Parse out the folder, will return everything before the last slash +EPUBJS.core.folder = function(url){ + + var lastSlash = url.lastIndexOf('/'); + + if(lastSlash == -1) var folder = ''; + + folder = url.slice(0, lastSlash + 1); + + return folder; + +}; \ No newline at end of file diff --git a/lib/epubjs/epubcfi.js b/lib/epubjs/epubcfi.js new file mode 100644 index 000000000..51f0914c1 --- /dev/null +++ b/lib/epubjs/epubcfi.js @@ -0,0 +1,503 @@ +EPUBJS.EpubCFI = function(cfiStr){ + if(cfiStr) return this.parse(cfiStr); +}; + +EPUBJS.EpubCFI.prototype.generateChapterComponent = function(_spineNodeIndex, _pos, id) { + var pos = parseInt(_pos), + spineNodeIndex = _spineNodeIndex + 1, + cfi = '/'+spineNodeIndex+'/'; + + cfi += (pos + 1) * 2; + + if(id) cfi += "[" + id + "]"; + + //cfi += "!"; + + return cfi; +}; + +EPUBJS.EpubCFI.prototype.generatePathComponent = function(steps) { + var parts = []; + + steps.forEach(function(part){ + var segment = ''; + segment += (part.index + 1) * 2; + + if(part.id) { + segment += "[" + part.id + "]"; + } + + parts.push(segment); + }); + + return parts.join('/'); +}; + +EPUBJS.EpubCFI.prototype.generateCfiFromElement = function(element, chapter) { + var steps = this.pathTo(element); + var path = this.generatePathComponent(steps); + if(!path.length) { + // Start of Chapter + return "epubcfi(" + chapter + "!/4/)"; + } else { + // First Text Node + return "epubcfi(" + chapter + "!" + path + "/1:0)"; + } +}; + +EPUBJS.EpubCFI.prototype.pathTo = function(node) { + var stack = [], + children; + + while(node && node.parentNode !== null && node.parentNode.nodeType != 9) { + children = node.parentNode.children; + + stack.unshift({ + 'id' : node.id, + // 'classList' : node.classList, + 'tagName' : node.tagName, + 'index' : children ? Array.prototype.indexOf.call(children, node) : 0 + }); + + node = node.parentNode; + } + + return stack; +}; + +EPUBJS.EpubCFI.prototype.getChapterComponent = function(cfiStr) { + + var splitStr = cfiStr.split("!"); + + return splitStr[0]; +}; + +EPUBJS.EpubCFI.prototype.getPathComponent = function(cfiStr) { + + var splitStr = cfiStr.split("!"); + var pathComponent = splitStr[1] ? splitStr[1].split(":") : ''; + + return pathComponent[0]; +}; + +EPUBJS.EpubCFI.prototype.getCharecterOffsetComponent = function(cfiStr) { + var splitStr = cfiStr.split(":"); + return splitStr[1] || ''; +}; + + +EPUBJS.EpubCFI.prototype.parse = function(cfiStr) { + var cfi = {}, + chapSegment, + chapterComponent, + pathComponent, + charecterOffsetComponent, + assertion, + chapId, + path, + end, + endInt, + text, + parseStep = function(part){ + var type, index, has_brackets, id; + + type = "element"; + index = parseInt(part) / 2 - 1; + has_brackets = part.match(/\[(.*)\]/); + if(has_brackets && has_brackets[1]){ + id = has_brackets[1]; + } + + return { + "type" : type, + 'index' : index, + 'id' : id || false + }; + }; + + if(typeof cfiStr !== "string") { + return {spinePos: -1}; + } + + cfi.str = cfiStr; + + if(cfiStr.indexOf("epubcfi(") === 0 && cfiStr[cfiStr.length-1] === ")") { + // Remove intial epubcfi( and ending ) + cfiStr = cfiStr.slice(8, cfiStr.length-1); + } + + chapterComponent = this.getChapterComponent(cfiStr); + pathComponent = this.getPathComponent(cfiStr) || ''; + charecterOffsetComponent = this.getCharecterOffsetComponent(cfiStr); + // Make sure this is a valid cfi or return + if(!chapterComponent) { + return {spinePos: -1}; + } + + // Chapter segment is always the second one + chapSegment = chapterComponent.split("/")[2] || ''; + if(!chapSegment) return {spinePos:-1}; + + cfi.spinePos = (parseInt(chapSegment) / 2 - 1 ) || 0; + + chapId = chapSegment.match(/\[(.*)\]/); + + cfi.spineId = chapId ? chapId[1] : false; + + if(pathComponent.indexOf(',') != -1) { + // Handle ranges -- not supported yet + console.warn("CFI Ranges are not supported"); + } + + path = pathComponent.split('/'); + end = path.pop(); + + cfi.steps = []; + + path.forEach(function(part){ + var step; + + if(part) { + step = parseStep(part); + cfi.steps.push(step); + } + }); + + //-- Check if END is a text node or element + endInt = parseInt(end); + if(!isNaN(endInt)) { + + if(endInt % 2 === 0) { // Even = is an element + cfi.steps.push(parseStep(end)); + } else { + cfi.steps.push({ + "type" : "text", + 'index' : (endInt - 1 ) / 2 + }); + } + + } + + assertion = charecterOffsetComponent.match(/\[(.*)\]/); + if(assertion && assertion[1]){ + cfi.characterOffset = parseInt(charecterOffsetComponent.split('[')[0]); + // We arent handling these assertions yet + cfi.textLocationAssertion = assertion[1]; + } else { + cfi.characterOffset = parseInt(charecterOffsetComponent); + } + + return cfi; +}; + +EPUBJS.EpubCFI.prototype.addMarker = function(cfi, _doc, _marker) { + var doc = _doc || document; + var marker = _marker || this.createMarker(doc); + var parent; + var lastStep; + var text; + var split; + + if(typeof cfi === 'string') { + cfi = this.parse(cfi); + } + // Get the terminal step + lastStep = cfi.steps[cfi.steps.length-1]; + + // check spinePos + if(cfi.spinePos === -1) { + // Not a valid CFI + return false; + } + + // Find the CFI elements parent + parent = this.findParent(cfi, doc); + + if(!parent) { + // CFI didn't return an element + // Maybe it isnt in the current chapter? + return false; + } + + if(lastStep && lastStep.type === "text") { + text = parent.childNodes[lastStep.index]; + if(cfi.characterOffset){ + split = text.splitText(cfi.characterOffset); + marker.classList.add("EPUBJS-CFI-SPLIT"); + parent.insertBefore(marker, split); + } else { + parent.insertBefore(marker, text); + } + } else { + parent.insertBefore(marker, parent.firstChild); + } + + return marker; +}; + +EPUBJS.EpubCFI.prototype.createMarker = function(_doc) { + var doc = _doc || document; + var element = doc.createElement('span'); + element.id = "EPUBJS-CFI-MARKER:"+ EPUBJS.core.uuid(); + element.classList.add("EPUBJS-CFI-MARKER"); + + return element; +}; + +EPUBJS.EpubCFI.prototype.removeMarker = function(marker, _doc) { + var doc = _doc || document; + // var id = marker.id; + + // Cleanup textnodes if they were split + if(marker.classList.contains("EPUBJS-CFI-SPLIT")){ + nextSib = marker.nextSibling; + prevSib = marker.previousSibling; + if(nextSib && + prevSib && + nextSib.nodeType === 3 && + prevSib.nodeType === 3){ + + prevSib.textContent += nextSib.textContent; + marker.parentNode.removeChild(nextSib); + } + marker.parentNode.removeChild(marker); + } else if(marker.classList.contains("EPUBJS-CFI-MARKER")) { + // Remove only elements added as markers + marker.parentNode.removeChild(marker); + } + +}; + +EPUBJS.EpubCFI.prototype.findParent = function(cfi, _doc) { + var doc = _doc || document, + element = doc.getElementsByTagName('html')[0], + children = Array.prototype.slice.call(element.children), + num, index, part, sections, + text, textBegin, textEnd; + + if(typeof cfi === 'string') { + cfi = this.parse(cfi); + } + + sections = cfi.steps.slice(0); // Clone steps array + if(!sections.length) { + return doc.getElementsByTagName('body')[0]; + } + + while(sections && sections.length > 0) { + part = sections.shift(); + // Find textNodes Parent + if(part.type === "text") { + text = element.childNodes[part.index]; + element = text.parentNode || element; + // Find element by id if present + } else if(part.id){ + element = doc.getElementById(part.id); + // Find element in parent + }else{ + element = children[part.index]; + } + // Element can't be found + if(typeof element === "undefined") { + console.error("No Element For", part, cfi.str); + return false; + } + // Get current element children and continue through steps + children = Array.prototype.slice.call(element.children); + } + + return element; +}; + +EPUBJS.EpubCFI.prototype.compare = function(cfiOne, cfiTwo) { + if(typeof cfiOne === 'string') { + cfiOne = new EPUBJS.EpubCFI(cfiOne); + } + if(typeof cfiTwo === 'string') { + cfiTwo = new EPUBJS.EpubCFI(cfiTwo); + } + // Compare Spine Positions + if(cfiOne.spinePos > cfiTwo.spinePos) { + return 1; + } + if(cfiOne.spinePos < cfiTwo.spinePos) { + return -1; + } + + + // Compare Each Step in the First item + for (var i = 0; i < cfiOne.steps.length; i++) { + if(!cfiTwo.steps[i]) { + return 1; + } + if(cfiOne.steps[i].index > cfiTwo.steps[i].index) { + return 1; + } + if(cfiOne.steps[i].index < cfiTwo.steps[i].index) { + return -1; + } + // Otherwise continue checking + } + + // All steps in First present in Second + if(cfiOne.steps.length < cfiTwo.steps.length) { + return -1; + } + + // Compare the charecter offset of the text node + if(cfiOne.characterOffset > cfiTwo.characterOffset) { + return 1; + } + if(cfiOne.characterOffset < cfiTwo.characterOffset) { + return -1; + } + + // CFI's are equal + return 0; +}; + +EPUBJS.EpubCFI.prototype.generateCfiFromHref = function(href, book) { + var uri = EPUBJS.core.uri(href); + var path = uri.path; + var fragment = uri.fragment; + var spinePos = book.spineIndexByURL[path]; + var loaded; + var deferred = new RSVP.defer(); + var epubcfi = new EPUBJS.EpubCFI(); + var spineItem; + + if(typeof spinePos !== "undefined"){ + spineItem = book.spine[spinePos]; + loaded = book.loadXml(spineItem.url); + loaded.then(function(doc){ + var element = doc.getElementById(fragment); + var cfi; + cfi = epubcfi.generateCfiFromElement(element, spineItem.cfiBase); + deferred.resolve(cfi); + }); + } + + return deferred.promise; +}; + +EPUBJS.EpubCFI.prototype.generateCfiFromTextNode = function(anchor, offset, base) { + var parent = anchor.parentNode; + var steps = this.pathTo(parent); + var path = this.generatePathComponent(steps); + var index = 1 + (2 * Array.prototype.indexOf.call(parent.childNodes, anchor)); + return "epubcfi(" + base + "!" + path + "/"+index+":"+(offset || 0)+")"; +}; + +EPUBJS.EpubCFI.prototype.generateCfiFromRangeAnchor = function(range, base) { + var anchor = range.anchorNode; + var offset = range.anchorOffset; + return this.generateCfiFromTextNode(anchor, offset, base); +}; + +EPUBJS.EpubCFI.prototype.generateCfiFromRange = function(range, base) { + var start, startElement, startSteps, startPath, startOffset, startIndex; + var end, endElement, endSteps, endPath, endOffset, endIndex; + + start = range.startContainer; + + if(start.nodeType === 3) { // text node + startElement = start.parentNode; + //startIndex = 1 + (2 * Array.prototype.indexOf.call(startElement.childNodes, start)); + startIndex = 1 + (2 * EPUBJS.core.indexOfTextNode(start)); + startSteps = this.pathTo(startElement); + } else if(range.collapsed) { + return this.generateCfiFromElement(start, base); // single element + } else { + startSteps = this.pathTo(start); + } + + startPath = this.generatePathComponent(startSteps); + startOffset = range.startOffset; + + if(!range.collapsed) { + end = range.endContainer; + + if(end.nodeType === 3) { // text node + endElement = end.parentNode; + // endIndex = 1 + (2 * Array.prototype.indexOf.call(endElement.childNodes, end)); + endIndex = 1 + (2 * EPUBJS.core.indexOfTextNode(end)); + + endSteps = this.pathTo(endElement); + } else { + endSteps = this.pathTo(end); + } + + endPath = this.generatePathComponent(endSteps); + endOffset = range.endOffset; + + return "epubcfi(" + base + "!" + startPath + "/" + startIndex + ":" + startOffset + "," + endPath + "/" + endIndex + ":" + endOffset + ")"; + + } else { + return "epubcfi(" + base + "!" + startPath + "/"+ startIndex +":"+ startOffset +")"; + } +}; + +EPUBJS.EpubCFI.prototype.generateXpathFromSteps = function(steps) { + var xpath = [".", "*"]; + + steps.forEach(function(step){ + var position = step.index + 1; + + if(step.id){ + xpath.push("*[position()=" + position + " and @id='" + step.id + "']"); + } else if(step.type === "text") { + xpath.push("text()[" + position + "]"); + } else { + xpath.push("*[" + position + "]"); + } + }); + + return xpath.join("/"); +}; + + +EPUBJS.EpubCFI.prototype.generateRangeFromCfi = function(cfi, _doc) { + var doc = _doc || document; + var range = doc.createRange(); + var lastStep; + var xpath; + var startContainer; + var textLength; + + if(typeof cfi === 'string') { + cfi = this.parse(cfi); + } + + // check spinePos + if(cfi.spinePos === -1) { + // Not a valid CFI + return false; + } + + xpath = this.generateXpathFromSteps(cfi.steps); + + // Get the terminal step + lastStep = cfi.steps[cfi.steps.length-1]; + startContainer = doc.evaluate(xpath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; + + if(!startContainer) { + return null; + } + + if(startContainer && cfi.characterOffset >= 0) { + textLength = startContainer.length; + + if(cfi.characterOffset < textLength) { + range.setStart(startContainer, cfi.characterOffset); + range.setEnd(startContainer, textLength ); + } else { + console.debug("offset greater than length:", cfi.characterOffset, textLength); + range.setStart(startContainer, textLength - 1 ); + range.setEnd(startContainer, textLength ); + } + } else if(startContainer) { + range.selectNode(startContainer); + } + // doc.defaultView.getSelection().addRange(range); + return range; +}; diff --git a/lib/epubjs/navigation.js b/lib/epubjs/navigation.js new file mode 100644 index 000000000..e1418e54c --- /dev/null +++ b/lib/epubjs/navigation.js @@ -0,0 +1,91 @@ +EPUBJS.Navigation = function(_package, _request){ + var navigation = this; + var parse = new EPUBJS.Parser(); + var request = _request || EPUBJS.core.request; + + this.package = _package; + this.toc = []; + this.tocByHref = {}; + this.tocById = {}; + + if(_package.navPath) { + this.navUrl = _package.baseUrl + _package.navPath; + this.nav = {}; + + this.nav.load = function(_request){ + var loading = new RSVP.defer(); + var loaded = loading.promise; + + request(navigation.navUrl, 'xml').then(function(xml){ + navigation.toc = parse.nav(xml); + navigation.loaded(navigation.toc); + loading.resolve(navigation.toc); + }); + + return loaded; + }; + + } + + if(_package.ncxPath) { + this.ncxUrl = _package.baseUrl + _package.ncxPath; + this.ncx = {}; + + this.ncx.load = function(_request){ + var loading = new RSVP.defer(); + var loaded = loading.promise; + + request(navigation.ncxUrl, 'xml').then(function(xml){ + navigation.toc = parse.ncx(xml); + navigation.loaded(navigation.toc); + loading.resolve(navigation.toc); + }); + + return loaded; + }; + + } +}; + +// Load the navigation +EPUBJS.Navigation.prototype.load = function(_request) { + var request = _request || EPUBJS.core.request; + var loading; + + if(this.nav) { + loading = this.nav.load(); + } else if(this.ncx) { + loading = this.ncx.load(); + } + + return loading; + +}; + +EPUBJS.Navigation.prototype.loaded = function(toc) { + var item; + + for (var i = 0; i < toc.length; i++) { + var item = toc[i]; + this.tocByHref[item.href] = i; + this.tocById[item.id] = i; + }; + +}; + +// Get an item from the navigation +EPUBJS.Navigation.prototype.get = function(target) { + var index; + + if(!target) { + return this.toc; + } + + if(target.indexOf("#") === 0) { + index = this.tocById[target.substring(1)]; + } else if(target in this.tocByHref){ + index = this.tocByHref[target]; + } + + return this.toc[index]; +}; \ No newline at end of file diff --git a/lib/epubjs/parser.js b/lib/epubjs/parser.js new file mode 100644 index 000000000..122d8895f --- /dev/null +++ b/lib/epubjs/parser.js @@ -0,0 +1,365 @@ +EPUBJS.Parser = function(){}; + +EPUBJS.Parser.prototype.container = function(containerXml){ + //-- + var rootfile, fullpath, folder, encoding; + + if(!containerXml) { + console.error("Container File Not Found"); + return; + } + + rootfile = containerXml.querySelector("rootfile"); + + if(!rootfile) { + console.error("No RootFile Found"); + return; + } + + fullpath = rootfile.getAttribute('full-path'); + folder = EPUBJS.core.uri(fullpath).directory; + encoding = containerXml.xmlEncoding; + + //-- Now that we have the path we can parse the contents + return { + 'packagePath' : fullpath, + 'basePath' : folder, + 'encoding' : encoding + }; +}; + +EPUBJS.Parser.prototype.identifier = function(packageXml){ + var metadataNode; + + if(!packageXml) { + console.error("Package File Not Found"); + return; + } + + metadataNode = packageXml.querySelector("metadata"); + + if(!metadataNode) { + console.error("No Metadata Found"); + return; + } + + return this.getElementText(metadataNode, "identifier"); +}; + +EPUBJS.Parser.prototype.packageContents = function(packageXml){ + var parse = this; + var metadataNode, manifestNode, spineNode; + var manifest, navPath, ncxPath, coverPath; + var spineNodeIndex; + var spine; + var spineIndexByURL; + + if(!packageXml) { + console.error("Package File Not Found"); + return; + } + + metadataNode = packageXml.querySelector("metadata"); + if(!metadataNode) { + console.error("No Metadata Found"); + return; + } + + manifestNode = packageXml.querySelector("manifest"); + if(!manifestNode) { + console.error("No Manifest Found"); + return; + } + + spineNode = packageXml.querySelector("spine"); + if(!spineNode) { + console.error("No Spine Found"); + return; + } + + manifest = parse.manifest(manifestNode); + navPath = parse.findNavPath(manifestNode); + ncxPath = parse.findNcxPath(manifestNode); + coverPath = parse.findCoverPath(manifestNode); + + spineNodeIndex = Array.prototype.indexOf.call(spineNode.parentNode.childNodes, spineNode); + + spine = parse.spine(spineNode, manifest); + + return { + 'metadata' : parse.metadata(metadataNode), + 'spine' : spine, + 'manifest' : manifest, + 'navPath' : navPath, + 'ncxPath' : ncxPath, + 'coverPath': coverPath, + 'spineNodeIndex' : spineNodeIndex + }; +}; + +//-- Find TOC NAV: media-type="application/xhtml+xml" href="toc.ncx" +EPUBJS.Parser.prototype.findNavPath = function(manifestNode){ + var node = manifestNode.querySelector("item[properties^='nav']"); + return node ? node.getAttribute('href') : false; +}; + +//-- Find TOC NCX: media-type="application/x-dtbncx+xml" href="toc.ncx" +EPUBJS.Parser.prototype.findNcxPath = function(manifestNode){ + var node = manifestNode.querySelector("item[media-type='application/x-dtbncx+xml']"); + return node ? node.getAttribute('href') : false; +}; + +//-- Find Cover: +EPUBJS.Parser.prototype.findCoverPath = function(manifestNode){ + var node = manifestNode.querySelector("item[properties='cover-image']"); + return node ? node.getAttribute('href') : false; +}; + +//-- Expanded to match Readium web components +EPUBJS.Parser.prototype.metadata = function(xml){ + var metadata = {}, + p = this; + + metadata.title = p.getElementText(xml, 'title'); + metadata.creator = p.getElementText(xml, 'creator'); + metadata.description = p.getElementText(xml, 'description'); + + metadata.pubdate = p.getElementText(xml, 'date'); + + metadata.publisher = p.getElementText(xml, 'publisher'); + + metadata.identifier = p.getElementText(xml, "identifier"); + metadata.language = p.getElementText(xml, "language"); + metadata.rights = p.getElementText(xml, "rights"); + + metadata.modified_date = p.querySelectorText(xml, "meta[property='dcterms:modified']"); + metadata.layout = p.querySelectorText(xml, "meta[property='rendition:layout']"); + metadata.orientation = p.querySelectorText(xml, "meta[property='rendition:orientation']"); + metadata.spread = p.querySelectorText(xml, "meta[property='rendition:spread']"); + // metadata.page_prog_dir = packageXml.querySelector("spine").getAttribute("page-progression-direction"); + + return metadata; +}; + +EPUBJS.Parser.prototype.getElementText = function(xml, tag){ + var found = xml.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/", tag), + el; + + if(!found || found.length === 0) return ''; + + el = found[0]; + + if(el.childNodes.length){ + return el.childNodes[0].nodeValue; + } + + return ''; + +}; + +EPUBJS.Parser.prototype.querySelectorText = function(xml, q){ + var el = xml.querySelector(q); + + if(el && el.childNodes.length){ + return el.childNodes[0].nodeValue; + } + + return ''; +}; + +EPUBJS.Parser.prototype.manifest = function(manifestXml){ + var manifest = {}; + + //-- Turn items into an array + var selected = manifestXml.querySelectorAll("item"), + items = Array.prototype.slice.call(selected); + + //-- Create an object with the id as key + items.forEach(function(item){ + var id = item.getAttribute('id'), + href = item.getAttribute('href') || '', + type = item.getAttribute('media-type') || '', + properties = item.getAttribute('properties') || ''; + + manifest[id] = { + 'href' : href, + // 'url' : href, + 'type' : type, + 'properties' : properties + }; + + }); + + return manifest; + +}; + +EPUBJS.Parser.prototype.spine = function(spineXml, manifest){ + var spine = []; + + var selected = spineXml.getElementsByTagName("itemref"), + items = Array.prototype.slice.call(selected); + + // var epubcfi = new EPUBJS.EpubCFI(); + + //-- Add to array to mantain ordering and cross reference with manifest + items.forEach(function(item, index){ + var idref = item.getAttribute('idref'); + // var cfiBase = epubcfi.generateChapterComponent(spineNodeIndex, index, Id); + var props = item.getAttribute('properties') || ''; + var propArray = props.length ? props.split(' ') : []; + // var manifestProps = manifest[Id].properties; + // var manifestPropArray = manifestProps.length ? manifestProps.split(' ') : []; + var itemref = { + 'idref' : idref, + 'linear' : item.getAttribute('linear') || '', + 'properties' : propArray, + // 'href' : manifest[Id].href, + // 'url' : manifest[Id].url, + 'index' : index, + }; + spine.push(itemref); + }); + + return spine; +}; + +EPUBJS.Parser.prototype.nav = function(navHtml){ + var navEl = navHtml.querySelector('nav[*|type="toc"]'), //-- [*|type="toc"] * Doesn't seem to work + idCounter = 0; + + if(!navEl) return []; + + // Implements `> ol > li` + function findListItems(parent){ + var items = []; + + Array.prototype.slice.call(parent.childNodes).forEach(function(node){ + if('ol' == node.tagName){ + Array.prototype.slice.call(node.childNodes).forEach(function(item){ + if('li' == item.tagName){ + items.push(item); + } + }); + } + }); + + return items; + + } + + // Implements `> a, > span` + function findAnchorOrSpan(parent){ + var item = null; + + Array.prototype.slice.call(parent.childNodes).forEach(function(node){ + if('a' == node.tagName || 'span' == node.tagName){ + item = node; + } + }); + + return item; + } + + function getTOC(parent){ + var list = [], + nodes = findListItems(parent), + items = Array.prototype.slice.call(nodes), + length = items.length, + node; + + if(length === 0) return false; + + items.forEach(function(item){ + var id = item.getAttribute('id') || false, + content = findAnchorOrSpan(item), + href = content.getAttribute('href') || '', + text = content.textContent || "", + split = href.split("#"), + baseUrl = split[0], + subitems = getTOC(item); + // spinePos = spineIndexByURL[baseUrl], + // spineItem = bookSpine[spinePos], + // cfi = spineItem ? spineItem.cfi : ''; + + // if(!id) { + // if(spinePos) { + // spineItem = bookSpine[spinePos]; + // id = spineItem.id; + // cfi = spineItem.cfi; + // } else { + // id = 'epubjs-autogen-toc-id-' + (idCounter++); + // } + // } + + // item.setAttribute('id', id); // Ensure all elements have an id + list.push({ + "id": id, + "href": href, + "label": text, + "subitems" : subitems, + "parent" : parent ? parent.getAttribute('id') : null + // "cfi" : cfi + }); + + }); + + return list; + } + + return getTOC(navEl); +}; + +EPUBJS.Parser.prototype.ncx = function(tocXml){ + var navMap = tocXml.querySelector("navMap"); + if(!navMap) return []; + + function getTOC(parent){ + var list = [], + snapshot = tocXml.evaluate("*[local-name()='navPoint']", parent, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null), + length = snapshot.snapshotLength; + + if(length === 0) return []; + + for ( var i=length-1 ; i >= 0; i-- ) { + var item = snapshot.snapshotItem(i); + + var id = item.getAttribute('id') || false, + content = item.querySelector("content"), + src = content.getAttribute('src'), + navLabel = item.querySelector("navLabel"), + text = navLabel.textContent ? navLabel.textContent : "", + split = src.split("#"), + baseUrl = split[0], + // spinePos = spineIndexByURL[baseUrl], + // spineItem = bookSpine[spinePos], + subitems = getTOC(item); + // cfi = spineItem ? spineItem.cfi : ''; + + // if(!id) { + // if(spinePos) { + // spineItem = bookSpine[spinePos]; + // id = spineItem.id; + // cfi = spineItem.cfi; + // } else { + // id = 'epubjs-autogen-toc-id-' + (idCounter++); + // } + // } + + list.unshift({ + "id": id, + "href": src, + "label": text, + // "spinePos": spinePos, + "subitems" : subitems, + "parent" : parent ? parent.getAttribute('id') : null, + // "cfi" : cfi + }); + + } + + return list; + } + + return getTOC(navMap); +}; \ No newline at end of file diff --git a/lib/epubjs/spine.js b/lib/epubjs/spine.js new file mode 100644 index 000000000..14a5042a9 --- /dev/null +++ b/lib/epubjs/spine.js @@ -0,0 +1,91 @@ +EPUBJS.Spine = function(_package, _request){ + this.items = _package.spine; + this.manifest = _package.manifest; + this.spineNodeIndex = _package.spineNodeIndex; + this.baseUrl = _package.baseUrl || ''; + this.request = _request; + this.length = this.items.length; + this.epubcfi = new EPUBJS.EpubCFI(); + this.spineItems = []; + this.spineByHref = {}; + this.spineById = {}; + + this.items.forEach(function(item, index){ + var cfiBase = this.epubcfi.generateChapterComponent(this.spineNodeIndex, item.index, item.idref); + var href, url; + var manifestItem = this.manifest[item.idref]; + var spineItem; + + if(manifestItem) { + href = manifestItem.href; + url = this.baseUrl + href; + } + + spineItem = new EPUBJS.SpineItem(item, href, url, cfiBase); + this.spineItems.push(spineItem); + + this.spineByHref[spineItem.href] = index; + this.spineById[spineItem.idref] = index; + + + }.bind(this)); + +}; + +// book.spine.get(); +// book.spine.get(1); +// book.spine.get("chap1.html"); +// book.spine.get("#id1234"); +EPUBJS.Spine.prototype.get = function(target) { + var index = 1; + + if(typeof target === "number" || isNaN(target) === false){ + index = target-1; + } else if(target.indexOf("#") === 0) { + index = this.spineById[target.substring(1)]; + } else { + index = this.spineByHref[target]; + } + + return this.spineItems[index]; +}; + + +EPUBJS.SpineItem = function(item, href, url, cfiBase){ + this.idref = item.idref; + this.linear = item.linear; + this.properties = item.properties; + this.index = item.index; + this.href = href; + this.url = url; + this.cfiBase = cfiBase; +}; + + +EPUBJS.SpineItem.prototype.load = function(_request){ + var request = _request || this.request || EPUBJS.core.request; + var loading = new RSVP.defer(); + var loaded = loading.promise; + + if(this.contents) { + loading.resolve(this.contents); + } else { + request(this.url, 'xml').then(function(xml){ + this.contents = xml.documentElement; + loading.resolve(this.contents); + }.bind(this)); + } + + return loaded; +}; + +EPUBJS.SpineItem.prototype.render = function(){ + return this.load().then(function(contents){ + var serializer = new XMLSerializer(); + return serializer.serializeToString(contents); + }); +}; + +EPUBJS.SpineItem.prototype.find = function(_query){ + +}; \ No newline at end of file diff --git a/libs/annotator/annotator-full.js b/libs/annotator/annotator-full.js deleted file mode 100755 index 78c6108e4..000000000 --- a/libs/annotator/annotator-full.js +++ /dev/null @@ -1,3046 +0,0 @@ -/* -** Annotator v1.2.7 -** https://github.com/okfn/annotator/ -** -** Copyright 2012 Aron Carroll, Rufus Pollock, and Nick Stenning. -** Dual licensed under the MIT and GPLv3 licenses. -** https://github.com/okfn/annotator/blob/master/LICENSE -** -** Built at: 2013-06-27 21:49:35Z -*/ - - -(function() { - var $, Annotator, Delegator, LinkParser, Range, Util, base64Decode, base64UrlDecode, createDateFromISO8601, findChild, fn, functions, g, getNodeName, getNodePosition, gettext, parseToken, simpleXPathJQuery, simpleXPathPure, _Annotator, _gettext, _i, _j, _len, _len1, _ref, _ref1, _ref2, _ref3, _ref4, _t, - __slice = [].slice, - __hasProp = {}.hasOwnProperty, - __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, - __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, - __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; - - simpleXPathJQuery = function(relativeRoot) { - var jq; - jq = this.map(function() { - var elem, idx, path, tagName; - path = ''; - elem = this; - while ((elem != null ? elem.nodeType : void 0) === Node.ELEMENT_NODE && elem !== relativeRoot) { - tagName = elem.tagName.replace(":", "\\:"); - idx = $(elem.parentNode).children(tagName).index(elem) + 1; - idx = "[" + idx + "]"; - path = "/" + elem.tagName.toLowerCase() + idx + path; - elem = elem.parentNode; - } - return path; - }); - return jq.get(); - }; - - simpleXPathPure = function(relativeRoot) { - var getPathSegment, getPathTo, jq, rootNode; - getPathSegment = function(node) { - var name, pos; - name = getNodeName(node); - pos = getNodePosition(node); - return "" + name + "[" + pos + "]"; - }; - rootNode = relativeRoot; - getPathTo = function(node) { - var xpath; - xpath = ''; - while (node !== rootNode) { - if (node == null) { - throw new Error("Called getPathTo on a node which was not a descendant of @rootNode. " + rootNode); - } - xpath = (getPathSegment(node)) + '/' + xpath; - node = node.parentNode; - } - xpath = '/' + xpath; - xpath = xpath.replace(/\/$/, ''); - return xpath; - }; - jq = this.map(function() { - var path; - path = getPathTo(this); - return path; - }); - return jq.get(); - }; - - findChild = function(node, type, index) { - var child, children, found, name, _i, _len; - if (!node.hasChildNodes()) { - throw new Error("XPath error: node has no children!"); - } - children = node.childNodes; - found = 0; - for (_i = 0, _len = children.length; _i < _len; _i++) { - child = children[_i]; - name = getNodeName(child); - if (name === type) { - found += 1; - if (found === index) { - return child; - } - } - } - throw new Error("XPath error: wanted child not found."); - }; - - getNodeName = function(node) { - var nodeName; - nodeName = node.nodeName.toLowerCase(); - switch (nodeName) { - case "#text": - return "text()"; - case "#comment": - return "comment()"; - case "#cdata-section": - return "cdata-section()"; - default: - return nodeName; - } - }; - - getNodePosition = function(node) { - var pos, tmp; - pos = 0; - tmp = node; - while (tmp) { - if (tmp.nodeName === node.nodeName) { - pos++; - } - tmp = tmp.previousSibling; - } - return pos; - }; - - gettext = null; - - if (typeof Gettext !== "undefined" && Gettext !== null) { - _gettext = new Gettext({ - domain: "annotator" - }); - gettext = function(msgid) { - return _gettext.gettext(msgid); - }; - } else { - gettext = function(msgid) { - return msgid; - }; - } - - _t = function(msgid) { - return gettext(msgid); - }; - - if (!(typeof jQuery !== "undefined" && jQuery !== null ? (_ref = jQuery.fn) != null ? _ref.jquery : void 0 : void 0)) { - console.error(_t("Annotator requires jQuery: have you included lib/vendor/jquery.js?")); - } - - if (!(JSON && JSON.parse && JSON.stringify)) { - console.error(_t("Annotator requires a JSON implementation: have you included lib/vendor/json2.js?")); - } - - $ = jQuery; - - Util = {}; - - Util.flatten = function(array) { - var flatten; - flatten = function(ary) { - var el, flat, _i, _len; - flat = []; - for (_i = 0, _len = ary.length; _i < _len; _i++) { - el = ary[_i]; - flat = flat.concat(el && $.isArray(el) ? flatten(el) : el); - } - return flat; - }; - return flatten(array); - }; - - Util.getTextNodes = function(jq) { - var getTextNodes; - getTextNodes = function(node) { - var nodes; - if (node && node.nodeType !== Node.TEXT_NODE) { - nodes = []; - if (node.nodeType !== Node.COMMENT_NODE) { - node = node.lastChild; - while (node) { - nodes.push(getTextNodes(node)); - node = node.previousSibling; - } - } - return nodes.reverse(); - } else { - return node; - } - }; - return jq.map(function() { - return Util.flatten(getTextNodes(this)); - }); - }; - - Util.xpathFromNode = function(el, relativeRoot) { - var exception, result; - try { - result = simpleXPathJQuery.call(el, relativeRoot); - } catch (_error) { - exception = _error; - console.log("jQuery-based XPath construction failed! Falling back to manual."); - result = simpleXPathPure.call(el, relativeRoot); - } - return result; - }; - - Util.nodeFromXPath = function(xp, root) { - var idx, name, node, step, steps, _i, _len, _ref1; - steps = xp.substring(1).split("/"); - node = root; - for (_i = 0, _len = steps.length; _i < _len; _i++) { - step = steps[_i]; - _ref1 = step.split("["), name = _ref1[0], idx = _ref1[1]; - idx = idx != null ? parseInt((idx != null ? idx.split("]") : void 0)[0]) : 1; - node = findChild(node, name.toLowerCase(), idx); - } - return node; - }; - - Util.escape = function(html) { - return html.replace(/&(?!\w+;)/g, '&').replace(//g, '>').replace(/"/g, '"'); - }; - - Util.uuid = (function() { - var counter; - counter = 0; - return function() { - return counter++; - }; - })(); - - Util.getGlobal = function() { - return (function() { - return this; - })(); - }; - - Util.maxZIndex = function($elements) { - var all, el; - all = (function() { - var _i, _len, _results; - _results = []; - for (_i = 0, _len = $elements.length; _i < _len; _i++) { - el = $elements[_i]; - if ($(el).css('position') === 'static') { - _results.push(-1); - } else { - _results.push(parseInt($(el).css('z-index'), 10) || -1); - } - } - return _results; - })(); - return Math.max.apply(Math, all); - }; - - Util.mousePosition = function(e, offsetEl) { - var offset; - offset = $(offsetEl).position(); - return { - top: e.pageY - offset.top, - left: e.pageX - offset.left - }; - }; - - Util.preventEventDefault = function(event) { - return event != null ? typeof event.preventDefault === "function" ? event.preventDefault() : void 0 : void 0; - }; - - functions = ["log", "debug", "info", "warn", "exception", "assert", "dir", "dirxml", "trace", "group", "groupEnd", "groupCollapsed", "time", "timeEnd", "profile", "profileEnd", "count", "clear", "table", "error", "notifyFirebug", "firebug", "userObjects"]; - - if (typeof console !== "undefined" && console !== null) { - if (console.group == null) { - console.group = function(name) { - return console.log("GROUP: ", name); - }; - } - if (console.groupCollapsed == null) { - console.groupCollapsed = console.group; - } - for (_i = 0, _len = functions.length; _i < _len; _i++) { - fn = functions[_i]; - if (console[fn] == null) { - console[fn] = function() { - return console.log(_t("Not implemented:") + (" console." + name)); - }; - } - } - } else { - this.console = {}; - for (_j = 0, _len1 = functions.length; _j < _len1; _j++) { - fn = functions[_j]; - this.console[fn] = function() {}; - } - this.console['error'] = function() { - var args; - args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; - return alert("ERROR: " + (args.join(', '))); - }; - this.console['warn'] = function() { - var args; - args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; - return alert("WARNING: " + (args.join(', '))); - }; - } - - Delegator = (function() { - Delegator.prototype.events = {}; - - Delegator.prototype.options = {}; - - Delegator.prototype.element = null; - - function Delegator(element, options) { - this.options = $.extend(true, {}, this.options, options); - this.element = $(element); - this.on = this.subscribe; - this.addEvents(); - } - - Delegator.prototype.addEvents = function() { - var event, functionName, sel, selector, _k, _ref1, _ref2, _results; - _ref1 = this.events; - _results = []; - for (sel in _ref1) { - functionName = _ref1[sel]; - _ref2 = sel.split(' '), selector = 2 <= _ref2.length ? __slice.call(_ref2, 0, _k = _ref2.length - 1) : (_k = 0, []), event = _ref2[_k++]; - _results.push(this.addEvent(selector.join(' '), event, functionName)); - } - return _results; - }; - - Delegator.prototype.addEvent = function(bindTo, event, functionName) { - var closure, isBlankSelector, - _this = this; - closure = function() { - return _this[functionName].apply(_this, arguments); - }; - isBlankSelector = typeof bindTo === 'string' && bindTo.replace(/\s+/g, '') === ''; - if (isBlankSelector) { - bindTo = this.element; - } - if (typeof bindTo === 'string') { - this.element.delegate(bindTo, event, closure); - } else { - if (this.isCustomEvent(event)) { - this.subscribe(event, closure); - } else { - $(bindTo).bind(event, closure); - } - } - return this; - }; - - Delegator.prototype.isCustomEvent = function(event) { - event = event.split('.')[0]; - return $.inArray(event, Delegator.natives) === -1; - }; - - Delegator.prototype.publish = function() { - this.element.triggerHandler.apply(this.element, arguments); - return this; - }; - - Delegator.prototype.subscribe = function(event, callback) { - var closure; - closure = function() { - return callback.apply(this, [].slice.call(arguments, 1)); - }; - closure.guid = callback.guid = ($.guid += 1); - this.element.bind(event, closure); - return this; - }; - - Delegator.prototype.unsubscribe = function() { - this.element.unbind.apply(this.element, arguments); - return this; - }; - - return Delegator; - - })(); - - Delegator.natives = (function() { - var key, specials, val; - specials = (function() { - var _ref1, _results; - _ref1 = jQuery.event.special; - _results = []; - for (key in _ref1) { - if (!__hasProp.call(_ref1, key)) continue; - val = _ref1[key]; - _results.push(key); - } - return _results; - })(); - return "blur focus focusin focusout load resize scroll unload click dblclick\nmousedown mouseup mousemove mouseover mouseout mouseenter mouseleave\nchange select submit keydown keypress keyup error".split(/[^a-z]+/).concat(specials); - })(); - - Range = {}; - - Range.sniff = function(r) { - if (r.commonAncestorContainer != null) { - return new Range.BrowserRange(r); - } else if (typeof r.start === "string") { - return new Range.SerializedRange(r); - } else if (r.start && typeof r.start === "object") { - return new Range.NormalizedRange(r); - } else { - console.error(_t("Could not sniff range type")); - return false; - } - }; - - Range.nodeFromXPath = function(xpath, root) { - var customResolver, evaluateXPath, namespace, node, segment; - if (root == null) { - root = document; - } - this.document = root.ownerDocument || document; - evaluateXPath = function(xp, nsResolver) { - var exception; - if (nsResolver == null) { - nsResolver = null; - } - try { - return this.document.evaluate('.' + xp, root, nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - } catch (_error) { - exception = _error; - console.log("XPath evaluation failed."); - console.log("Trying fallback..."); - return Util.nodeFromXPath(xp, root); - } - }; - if (!$.isXMLDoc(document.documentElement)) { - return evaluateXPath(xpath); - } else { - customResolver = document.createNSResolver(document.ownerDocument === null ? document.documentElement : document.ownerDocument.documentElement); - node = evaluateXPath(xpath, customResolver); - if (!node) { - xpath = ((function() { - var _k, _len2, _ref1, _results; - _ref1 = xpath.split('/'); - _results = []; - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - segment = _ref1[_k]; - if (segment && segment.indexOf(':') === -1) { - _results.push(segment.replace(/^([a-z]+)/, 'xhtml:$1')); - } else { - _results.push(segment); - } - } - return _results; - })()).join('/'); - namespace = document.lookupNamespaceURI(null); - customResolver = function(ns) { - if (ns === 'xhtml') { - return namespace; - } else { - return document.documentElement.getAttribute('xmlns:' + ns); - } - }; - node = evaluateXPath(xpath, customResolver); - } - return node; - } - }; - - Range.RangeError = (function(_super) { - __extends(RangeError, _super); - - function RangeError(type, message, parent) { - this.type = type; - this.message = message; - this.parent = parent != null ? parent : null; - RangeError.__super__.constructor.call(this, this.message); - } - - return RangeError; - - })(Error); - - Range.BrowserRange = (function() { - function BrowserRange(obj) { - this.commonAncestorContainer = obj.commonAncestorContainer; - this.startContainer = obj.startContainer; - this.startOffset = obj.startOffset; - this.endContainer = obj.endContainer; - this.endOffset = obj.endOffset; - } - - BrowserRange.prototype.normalize = function(root) { - var it, node, nr, offset, p, r, _k, _len2, _ref1; - if (this.tainted) { - console.error(_t("You may only call normalize() once on a BrowserRange!")); - return false; - } else { - this.tainted = true; - } - r = {}; - nr = {}; - _ref1 = ['start', 'end']; - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - p = _ref1[_k]; - node = this[p + 'Container']; - offset = this[p + 'Offset']; - if (node.nodeType === Node.ELEMENT_NODE) { - it = node.childNodes[offset]; - node = it || node.childNodes[offset - 1]; - if (node.nodeType === Node.ELEMENT_NODE && !node.firstChild) { - it = null; - node = node.previousSibling; - } - while (node.nodeType !== Node.TEXT_NODE) { - node = node.firstChild; - } - offset = it ? 0 : node.nodeValue.length; - } - r[p] = node; - r[p + 'Offset'] = offset; - } - nr.start = r.startOffset > 0 ? r.start.splitText(r.startOffset) : r.start; - if (r.start === r.end) { - if ((r.endOffset - r.startOffset) < nr.start.nodeValue.length) { - nr.start.splitText(r.endOffset - r.startOffset); - } - nr.end = nr.start; - } else { - if (r.endOffset < r.end.nodeValue.length) { - r.end.splitText(r.endOffset); - } - nr.end = r.end; - } - nr.commonAncestor = this.commonAncestorContainer; - while (nr.commonAncestor.nodeType !== Node.ELEMENT_NODE) { - nr.commonAncestor = nr.commonAncestor.parentNode; - } - return new Range.NormalizedRange(nr); - }; - - BrowserRange.prototype.serialize = function(root, ignoreSelector) { - return this.normalize(root).serialize(root, ignoreSelector); - }; - - return BrowserRange; - - })(); - - Range.NormalizedRange = (function() { - function NormalizedRange(obj) { - this.commonAncestor = obj.commonAncestor; - this.start = obj.start; - this.end = obj.end; - } - - NormalizedRange.prototype.normalize = function(root) { - return this; - }; - - NormalizedRange.prototype.limit = function(bounds) { - var nodes, parent, startParents, _k, _len2, _ref1; - nodes = $.grep(this.textNodes(), function(node) { - return node.parentNode === bounds || $.contains(bounds, node.parentNode); - }); - if (!nodes.length) { - return null; - } - this.start = nodes[0]; - this.end = nodes[nodes.length - 1]; - startParents = $(this.start).parents(); - _ref1 = $(this.end).parents(); - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - parent = _ref1[_k]; - if (startParents.index(parent) !== -1) { - this.commonAncestor = parent; - break; - } - } - return this; - }; - - NormalizedRange.prototype.serialize = function(root, ignoreSelector) { - var end, serialization, start; - serialization = function(node, isEnd) { - var n, nodes, offset, origParent, textNodes, xpath, _k, _len2; - if (ignoreSelector) { - origParent = $(node).parents(":not(" + ignoreSelector + ")").eq(0); - } else { - origParent = $(node).parent(); - } - xpath = Util.xpathFromNode(origParent, root)[0]; - textNodes = Util.getTextNodes(origParent); - nodes = textNodes.slice(0, textNodes.index(node)); - offset = 0; - for (_k = 0, _len2 = nodes.length; _k < _len2; _k++) { - n = nodes[_k]; - offset += n.nodeValue.length; - } - if (isEnd) { - return [xpath, offset + node.nodeValue.length]; - } else { - return [xpath, offset]; - } - }; - start = serialization(this.start); - end = serialization(this.end, true); - return new Range.SerializedRange({ - start: start[0], - end: end[0], - startOffset: start[1], - endOffset: end[1] - }); - }; - - NormalizedRange.prototype.text = function() { - var node; - return ((function() { - var _k, _len2, _ref1, _results; - _ref1 = this.textNodes(); - _results = []; - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - node = _ref1[_k]; - _results.push(node.nodeValue); - } - return _results; - }).call(this)).join(''); - }; - - NormalizedRange.prototype.textNodes = function() { - var end, start, textNodes, _ref1; - textNodes = Util.getTextNodes($(this.commonAncestor)); - _ref1 = [textNodes.index(this.start), textNodes.index(this.end)], start = _ref1[0], end = _ref1[1]; - return $.makeArray(textNodes.slice(start, +end + 1 || 9e9)); - }; - - NormalizedRange.prototype.toRange = function() { - var range; - range = document.createRange(); - range.setStartBefore(this.start); - range.setEndAfter(this.end); - return range; - }; - - return NormalizedRange; - - })(); - - Range.SerializedRange = (function() { - function SerializedRange(obj) { - this.start = obj.start; - this.startOffset = obj.startOffset; - this.end = obj.end; - this.endOffset = obj.endOffset; - } - - SerializedRange.prototype.normalize = function(root) { - var contains, e, length, node, p, range, tn, _k, _l, _len2, _len3, _ref1, _ref2; - range = {}; - _ref1 = ['start', 'end']; - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - p = _ref1[_k]; - try { - node = Range.nodeFromXPath(this[p], root); - } catch (_error) { - e = _error; - throw new Range.RangeError(p, ("Error while finding " + p + " node: " + this[p] + ": ") + e, e); - } - if (!node) { - throw new Range.RangeError(p, "Couldn't find " + p + " node: " + this[p]); - } - length = 0; - _ref2 = Util.getTextNodes($(node)); - for (_l = 0, _len3 = _ref2.length; _l < _len3; _l++) { - tn = _ref2[_l]; - if (length + tn.nodeValue.length >= this[p + 'Offset']) { - range[p + 'Container'] = tn; - range[p + 'Offset'] = this[p + 'Offset'] - length; - break; - } else { - length += tn.nodeValue.length; - } - } - if (range[p + 'Offset'] == null) { - throw new Range.RangeError("" + p + "offset", "Couldn't find offset " + this[p + 'Offset'] + " in element " + this[p]); - } - } - contains = document.compareDocumentPosition == null ? function(a, b) { - return a.contains(b); - } : function(a, b) { - return a.compareDocumentPosition(b) & 16; - }; - $(range.startContainer).parents().each(function() { - if (contains(this, range.endContainer)) { - range.commonAncestorContainer = this; - return false; - } - }); - return new Range.BrowserRange(range).normalize(root); - }; - - SerializedRange.prototype.serialize = function(root, ignoreSelector) { - return this.normalize(root).serialize(root, ignoreSelector); - }; - - SerializedRange.prototype.toObject = function() { - return { - start: this.start, - startOffset: this.startOffset, - end: this.end, - endOffset: this.endOffset - }; - }; - - return SerializedRange; - - })(); - - _Annotator = this.Annotator; - - Annotator = (function(_super) { - __extends(Annotator, _super); - - Annotator.prototype.events = { - ".annotator-adder button click": "onAdderClick", - ".annotator-adder button mousedown": "onAdderMousedown", - ".annotator-hl mouseover": "onHighlightMouseover", - ".annotator-hl mouseout": "startViewerHideTimer" - }; - - Annotator.prototype.html = { - adder: '
', - wrapper: '
' - }; - - Annotator.prototype.options = { - readOnly: false - }; - - Annotator.prototype.plugins = {}; - - Annotator.prototype.editor = null; - - Annotator.prototype.viewer = null; - - Annotator.prototype.selectedRanges = null; - - Annotator.prototype.mouseIsDown = false; - - Annotator.prototype.ignoreMouseup = false; - - Annotator.prototype.viewerHideTimer = null; - - function Annotator(element, options) { - this.onDeleteAnnotation = __bind(this.onDeleteAnnotation, this); - this.onEditAnnotation = __bind(this.onEditAnnotation, this); - this.onAdderClick = __bind(this.onAdderClick, this); - this.onAdderMousedown = __bind(this.onAdderMousedown, this); - this.onHighlightMouseover = __bind(this.onHighlightMouseover, this); - this.checkForEndSelection = __bind(this.checkForEndSelection, this); - this.checkForStartSelection = __bind(this.checkForStartSelection, this); - this.clearViewerHideTimer = __bind(this.clearViewerHideTimer, this); - this.startViewerHideTimer = __bind(this.startViewerHideTimer, this); - this.showViewer = __bind(this.showViewer, this); - this.onEditorSubmit = __bind(this.onEditorSubmit, this); - this.onEditorHide = __bind(this.onEditorHide, this); - this.showEditor = __bind(this.showEditor, this); - Annotator.__super__.constructor.apply(this, arguments); - this.plugins = {}; - this.document = element.ownerDocument || document; - if (!Annotator.supported()) { - return this; - } - if (!this.options.readOnly) { - this._setupDocumentEvents(); - } - this._setupWrapper()._setupViewer()._setupEditor(); - this._setupDynamicStyle(); - this.adder = $(this.html.adder).appendTo(this.wrapper).hide(); - } - - Annotator.prototype._setupWrapper = function() { - this.wrapper = $(this.html.wrapper); - this.element.find('script').remove(); - this.element.wrapInner(this.wrapper); - this.wrapper = this.element.find('.annotator-wrapper'); - return this; - }; - - Annotator.prototype._setupViewer = function() { - var _this = this; - this.viewer = new Annotator.Viewer({ - readOnly: this.options.readOnly - }); - this.viewer.hide().on("edit", this.onEditAnnotation).on("delete", this.onDeleteAnnotation).addField({ - load: function(field, annotation) { - if (annotation.text) { - $(field).html(Util.escape(annotation.text)); - } else { - $(field).html("" + (_t('No Comment')) + ""); - } - return _this.publish('annotationViewerTextField', [field, annotation]); - } - }).element.appendTo(this.wrapper).bind({ - "mouseover": this.clearViewerHideTimer, - "mouseout": this.startViewerHideTimer - }); - return this; - }; - - Annotator.prototype._setupEditor = function() { - this.editor = new Annotator.Editor(); - this.editor.hide().on('hide', this.onEditorHide).on('save', this.onEditorSubmit).addField({ - type: 'textarea', - label: _t('Comments') + '\u2026', - load: function(field, annotation) { - return $(field).find('textarea').val(annotation.text || ''); - }, - submit: function(field, annotation) { - return annotation.text = $(field).find('textarea').val(); - } - }); - this.editor.element.appendTo(this.wrapper); - return this; - }; - - Annotator.prototype._setupDocumentEvents = function() { - $(this.document).bind({ - "mouseup": this.checkForEndSelection, - "mousedown": this.checkForStartSelection - }); - return this; - }; - - Annotator.prototype._setupDynamicStyle = function() { - var max, sel, style, x; - style = $('#annotator-dynamic-style'); - if (!style.length) { - style = $('').appendTo(this.document.head); - } - sel = '*' + ((function() { - var _k, _len2, _ref1, _results; - _ref1 = ['adder', 'outer', 'notice', 'filter']; - _results = []; - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - x = _ref1[_k]; - _results.push(":not(.annotator-" + x + ")"); - } - return _results; - })()).join(''); - max = Util.maxZIndex($(this.document.body).find(sel)); - max = Math.max(max, 1000); - style.text([".annotator-adder, .annotator-outer, .annotator-notice {", " z-index: " + (max + 20) + ";", "}", ".annotator-filter {", " z-index: " + (max + 10) + ";", "}"].join("\n")); - return this; - }; - - Annotator.prototype.getSelectedRanges = function() { - var browserRange, i, normedRange, r, ranges, rangesToIgnore, selection, _k, _len2; - selection = Util.getGlobal().getSelection(); - ranges = []; - rangesToIgnore = []; - if (!selection.isCollapsed) { - ranges = (function() { - var _k, _ref1, _results; - _results = []; - for (i = _k = 0, _ref1 = selection.rangeCount; 0 <= _ref1 ? _k < _ref1 : _k > _ref1; i = 0 <= _ref1 ? ++_k : --_k) { - r = selection.getRangeAt(i); - browserRange = new Range.BrowserRange(r); - normedRange = browserRange.normalize().limit(this.wrapper[0]); - if (normedRange === null) { - rangesToIgnore.push(r); - } - _results.push(normedRange); - } - return _results; - }).call(this); - selection.removeAllRanges(); - } - for (_k = 0, _len2 = rangesToIgnore.length; _k < _len2; _k++) { - r = rangesToIgnore[_k]; - selection.addRange(r); - } - return $.grep(ranges, function(range) { - if (range) { - selection.addRange(range.toRange()); - } - return range; - }); - }; - - Annotator.prototype.createAnnotation = function() { - var annotation; - annotation = {}; - this.publish('beforeAnnotationCreated', [annotation]); - return annotation; - }; - - Annotator.prototype.setupAnnotation = function(annotation) { - var e, normed, normedRanges, r, root, _k, _l, _len2, _len3, _ref1; - root = this.wrapper[0]; - annotation.ranges || (annotation.ranges = this.selectedRanges); - normedRanges = []; - _ref1 = annotation.ranges; - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - r = _ref1[_k]; - try { - normedRanges.push(Range.sniff(r).normalize(root)); - } catch (_error) { - e = _error; - if (e instanceof Range.RangeError) { - this.publish('rangeNormalizeFail', [annotation, r, e]); - } else { - throw e; - } - } - } - annotation.quote = []; - annotation.ranges = []; - annotation.highlights = []; - for (_l = 0, _len3 = normedRanges.length; _l < _len3; _l++) { - normed = normedRanges[_l]; - annotation.quote.push($.trim(normed.text())); - annotation.ranges.push(normed.serialize(this.wrapper[0], '.annotator-hl')); - $.merge(annotation.highlights, this.highlightRange(normed)); - } - annotation.quote = annotation.quote.join(' / '); - $(annotation.highlights).data('annotation', annotation); - return annotation; - }; - - Annotator.prototype.updateAnnotation = function(annotation) { - this.publish('beforeAnnotationUpdated', [annotation]); - this.publish('annotationUpdated', [annotation]); - return annotation; - }; - - Annotator.prototype.deleteAnnotation = function(annotation) { - var child, h, _k, _len2, _ref1; - if (annotation.highlights != null) { - _ref1 = annotation.highlights; - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - h = _ref1[_k]; - if (!(h.parentNode != null)) { - continue; - } - child = h.childNodes[0]; - $(h).replaceWith(h.childNodes); - } - } - this.publish('annotationDeleted', [annotation]); - return annotation; - }; - - Annotator.prototype.loadAnnotations = function(annotations) { - var clone, loader, - _this = this; - if (annotations == null) { - annotations = []; - } - loader = function(annList) { - var n, now, _k, _len2; - if (annList == null) { - annList = []; - } - now = annList.splice(0, 10); - for (_k = 0, _len2 = now.length; _k < _len2; _k++) { - n = now[_k]; - _this.setupAnnotation(n); - } - if (annList.length > 0) { - return setTimeout((function() { - return loader(annList); - }), 10); - } else { - return _this.publish('annotationsLoaded', [clone]); - } - }; - clone = annotations.slice(); - if (annotations.length) { - loader(annotations); - } - return this; - }; - - Annotator.prototype.dumpAnnotations = function() { - if (this.plugins['Store']) { - return this.plugins['Store'].dumpAnnotations(); - } else { - console.warn(_t("Can't dump annotations without Store plugin.")); - return false; - } - }; - - Annotator.prototype.highlightRange = function(normedRange, cssClass) { - var hl, node, white, _k, _len2, _ref1, _results; - if (cssClass == null) { - cssClass = 'annotator-hl'; - } - white = /^\s*$/; - hl = $(""); - _ref1 = normedRange.textNodes(); - _results = []; - for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { - node = _ref1[_k]; - if (!white.test(node.nodeValue)) { - _results.push($(node).wrapAll(hl).parent().show()[0]); - } - } - return _results; - }; - - Annotator.prototype.highlightRanges = function(normedRanges, cssClass) { - var highlights, r, _k, _len2; - if (cssClass == null) { - cssClass = 'annotator-hl'; - } - highlights = []; - for (_k = 0, _len2 = normedRanges.length; _k < _len2; _k++) { - r = normedRanges[_k]; - $.merge(highlights, this.highlightRange(r, cssClass)); - } - return highlights; - }; - - Annotator.prototype.addPlugin = function(name, options) { - var klass, _base; - if (this.plugins[name]) { - console.error(_t("You cannot have more than one instance of any plugin.")); - } else { - klass = Annotator.Plugin[name]; - if (typeof klass === 'function') { - this.plugins[name] = new klass(this.element[0], options); - this.plugins[name].annotator = this; - if (typeof (_base = this.plugins[name]).pluginInit === "function") { - _base.pluginInit(); - } - } else { - console.error(_t("Could not load ") + name + _t(" plugin. Have you included the appropriate - - - var gt = new Gettext({ "domain" : "myDomain" }); - // rest is the same - - - // ////////////////////////////////////////////////////////// - // The reson the shortcuts aren't exported by default is because they'd be - // glued to the single domain you created. So, if you're adding i18n support - // to some js library, you should use it as so: - - if (typeof(MyNamespace) == 'undefined') MyNamespace = {}; - MyNamespace.MyClass = function () { - var gtParms = { "domain" : 'MyNamespace_MyClass' }; - this.gt = new Gettext(gtParams); - return this; - }; - MyNamespace.MyClass.prototype._ = function (msgid) { - return this.gt.gettext(msgid); - }; - MyNamespace.MyClass.prototype.something = function () { - var myString = this._("this will get translated"); - }; - - // ////////////////////////////////////////////////////////// - // Adding the shortcuts to a global scope is easier. If that's - // ok in your app, this is certainly easier. - var myGettext = new Gettext({ 'domain' : 'myDomain' }); - function _ (msgid) { - return myGettext.gettext(msgid); - } - alert( _("text") ); - - // ////////////////////////////////////////////////////////// - // Data structure of the json data - // NOTE: if you're loading via the - - // in domain.json - json_locale_data = { - "mydomain" : { - // po header fields - "" : { - "plural-forms" : "...", - "lang" : "en", - }, - // all the msgid strings and translations - "msgid" : [ "msgid_plural", "translation", "plural_translation" ], - }, - }; - // please see the included bin/po2json script for the details on this format - -This method also allows you to use unsupported file formats, so long as you can parse them into the above format. - -=item 2. Use AJAX to load language file. - -Use XMLHttpRequest (actually, SJAX - syncronous) to load an external resource. - -Supported external formats are: - -=over - -=item * Javascript Object Notation (.json) - -(see bin/po2json) - - type=application/json - -=item * Uniforum Portable Object (.po) - -(see GNU Gettext's xgettext) - - type=application/x-po - -=item * Machine Object (compiled .po) (.mo) - -NOTE: .mo format isn't actually supported just yet, but support is planned. - -(see GNU Gettext's msgfmt) - - type=application/x-mo - -=back - -=back - -=head1 METHODS - -The following methods are implemented: - - new Gettext(args) - textdomain (domain) - gettext (msgid) - dgettext (domainname, msgid) - dcgettext (domainname, msgid, LC_MESSAGES) - ngettext (msgid, msgid_plural, count) - dngettext (domainname, msgid, msgid_plural, count) - dcngettext (domainname, msgid, msgid_plural, count, LC_MESSAGES) - pgettext (msgctxt, msgid) - dpgettext (domainname, msgctxt, msgid) - dcpgettext (domainname, msgctxt, msgid, LC_MESSAGES) - npgettext (msgctxt, msgid, msgid_plural, count) - dnpgettext (domainname, msgctxt, msgid, msgid_plural, count) - dcnpgettext (domainname, msgctxt, msgid, msgid_plural, count, LC_MESSAGES) - strargs (string, args_array) - - -=head2 new Gettext (args) - -Several methods of loading locale data are included. You may specify a plugin or alternative method of loading data by passing the data in as the "locale_data" option. For example: - - var get_locale_data = function () { - // plugin does whatever to populate locale_data - return locale_data; - }; - var gt = new Gettext( 'domain' : 'messages', - 'locale_data' : get_locale_data() ); - -The above can also be used if locale data is specified in a statically included "," ",'
    ',"
",'
'," ",""].join("\n"),d=[],e=function(){var a=b.document,c=a.querySelector("#crumbs");c.textContent="";for(var e,g=0;e=d[g];g++){var h=a.createElement("a");h.href="#",h.textContent=e.localName,h.idx=g,h.onclick=function(a){for(var b;d.length>this.idx;)b=d.pop();f(b.shadow||b,b),a.preventDefault()},c.appendChild(a.createElement("li")).appendChild(h)}},f=function(a,c){var f=b.document;k=[];var g=c||a;d.push(g),e(),f.body.querySelector("#tree").innerHTML="
"+j(a,a.childNodes)+"
"},g=Array.prototype.forEach.call.bind(Array.prototype.forEach),h={STYLE:1,SCRIPT:1,"#comment":1,TEMPLATE:1},i=function(a){return h[a.nodeName]},j=function(a,b,c){if(i(a))return"";var d=c||"";if(a.localName||11==a.nodeType){var e=a.localName||"shadow-root",f=d+l(a);"content"==e&&(b=a.getDistributedNodes()),f+="
";var h=d+"  ";g(b,function(a){f+=j(a,a.childNodes,h)}),f+=d,{br:1}[e]||(f+="</"+e+">",f+="
")}else{var k=a.textContent.trim();f=k?d+'"'+k+'"'+"
":""}return f},k=[],l=function(a){var b="<",c=a.localName||"shadow-root";return a.webkitShadowRoot||a.shadowRoot?(b+=' ",k.push(a)):b+=c||"shadow-root",a.attributes&&g(a.attributes,function(a){b+=" "+a.name+(a.value?'="'+a.value+'"':"")}),b+=">"};shadowize=function(){var a=Number(this.attributes.idx.value),b=k[a];b?f(b.webkitShadowRoot||b.shadowRoot,b):(console.log("bad shadowize node"),console.dir(this))},a.output=j}(window.Inspector),function(a){"use strict";function b(){function a(a){"splice"===a[0].type&&"splice"===a[1].type&&(b=!0)}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=!1,c=[0];return Array.observe(c,a),c[1]=1,c.length=0,Object.deliverChangeRecords(a),b}function c(a){return+a===a>>>0}function d(a){return+a}function e(a){return a===Object(a)}function f(a,b){return a===b?0!==a||1/a===1/b:K(a)&&K(b)?!0:a!==a&&b!==b}function g(a){return"string"!=typeof a?!1:(a=a.replace(/\s/g,""),""==a?!0:"."==a[0]?!1:S.test(a))}function h(a){var b=T[a];if(b)return b;if(g(a)){var b=new i(a);return T[a]=b,b}}function i(a){return""==a.trim()?this:c(a)?(this.push(String(a)),this):(a.split(/\./).filter(function(a){return a}).forEach(function(a){this.push(a)},this),H&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn()),void 0)}function j(a){for(var b=0;U>b&&a.check();)a.report(),b++}function k(a){for(var b in a)return!1;return!0}function l(a){return k(a.added)&&k(a.removed)&&k(a.changed)}function m(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function n(a,b){var c=b||(Array.isArray(a)?[]:{});for(var d in a)c[d]=a[d];return Array.isArray(a)&&(c.length=a.length),c}function o(a,b,c,d){this.object=a,this.callback=b,this.target=c,this.token=d,this.reporting=!0,G&&(this.boundInternalCallback=this.internalCallback.bind(this)),this.valid=!0,p(this),this.connect(),this.sync(!0)}function p(a){W&&(V.push(a),o._allObserversCount++)}function q(a,b,c,d){o.call(this,a,b,c,d)}function r(a,b,c,d){if(!Array.isArray(a))throw Error("Provided object is not an Array");o.call(this,a,b,c,d)}function s(a){this.arr=[],this.callback=a,this.isObserved=!0}function t(a,b,c,d,f){this.value=void 0;var g=h(b);if(g)return g.length?(e(a)&&(this.path=g,o.call(this,a,c,d,f)),void 0):(this.value=a,void 0)}function u(a,b){if("function"==typeof Object.observe){var c=Object.getNotifier(a);return function(d,e){var f={object:a,type:d,name:b};2===arguments.length&&(f.oldValue=e),c.notify(f)}}}function v(a,b,c){for(var d={},e={},f=0;fj;j++)i[j]=new Array(h),i[j][0]=j;for(var k=0;h>k;k++)i[0][k]=k;for(var j=1;g>j;j++)for(var k=1;h>k;k++)if(d[e+j-1]===a[b+k-1])i[j][k]=i[j-1][k-1];else{var l=i[j-1][k]+1,m=i[j][k-1]+1;i[j][k]=m>l?l:m}return i}function x(a){for(var b=a.length-1,c=a[0].length-1,d=a[b][c],e=[];b>0||c>0;)if(0!=b)if(0!=c){var f,g=a[b-1][c-1],h=a[b-1][c],i=a[b][c-1];f=i>h?g>h?h:g:g>i?i:g,f==g?(g==d?e.push(ab):(e.push(bb),d=g),b--,c--):f==h?(e.push(db),b--,d=h):(e.push(cb),c--,d=i)}else e.push(db),b--;else e.push(cb),c--;return e.reverse(),e}function y(a,b,c){for(var d=0;c>d;d++)if(a[d]!==b[d])return d;return c}function z(a,b,c){for(var d=a.length,e=b.length,f=0;c>f&&a[--d]===b[--e];)f++;return f}function A(a,b,c){return{index:a,removed:b,addedCount:c}}function B(a,b,c,d,e,f){var g=0,h=0,i=Math.min(c-b,f-e);if(0==b&&0==e&&(g=y(a,d,i)),c==a.length&&f==d.length&&(h=z(a,d,i-g)),b+=g,e+=g,c-=h,f-=h,0==c-b&&0==f-e)return[];if(b==c){for(var j=A(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[A(b,[],c-b)];for(var k=x(w(a,b,c,d,e,f)),j=void 0,l=[],m=b,n=e,o=0;ob||a>d?-1:b==c||d==a?0:c>a?d>b?b-c:d-c:b>d?d-a:b-a}function D(a,b,c,d){for(var e=A(b,c,d),f=!1,g=0,h=0;h=0){a.splice(h,1),h--,g-=i.addedCount-i.removed.length,e.addedCount+=i.addedCount-j;var k=e.removed.length+i.removed.length-j;if(e.addedCount||k){var c=i.removed;if(e.indexi.index+i.addedCount){var m=e.removed.slice(i.index+i.addedCount-e.index);Array.prototype.push.apply(c,m)}e.removed=c,i.indexh)continue;D(e,h,[g.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(g))}}return e}function F(a,b){var c=[];return E(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?(b.removed[0]!==a[b.index]&&c.push(b),void 0):(c=c.concat(B(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)),void 0)}),c}var G=b(),H=!1;try{var I=new Function("","return true;");H=I()}catch(J){}var K=a.Number.isNaN||function(b){return"number"==typeof b&&a.isNaN(b)},L="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},M="[$_a-zA-Z]",N="[$_a-zA-Z0-9]",O=M+"+"+N+"*",P="(?:[0-9]|[1-9]+[0-9]+)",Q="(?:"+O+"|"+P+")",R="(?:"+Q+")(?:\\."+Q+")*",S=new RegExp("^"+R+"$"),T={};i.prototype=L({__proto__:[],toString:function(){return this.join(".")},getValueFrom:function(a){for(var b=0;ba&&b.anyChanged);o._allObserversCount=V.length,X=!1}}},W&&(a.Platform.clearObservers=function(){V=[]}),q.prototype=L({__proto__:o.prototype,connect:function(){G&&Object.observe(this.object,this.boundInternalCallback)},sync:function(){G||(this.oldObject=n(this.object))},check:function(a){var b,c;if(G){if(!a)return!1;c={},b=v(this.object,a,c)}else c=this.oldObject,b=m(this.object,this.oldObject);return l(b)?!1:(this.reportArgs=[b.added||{},b.removed||{},b.changed||{}],this.reportArgs.push(function(a){return c[a]}),!0)},disconnect:function(){G?this.object&&Object.unobserve(this.object,this.boundInternalCallback):this.oldObject=void 0}}),r.prototype=L({__proto__:q.prototype,connect:function(){G&&Array.observe(this.object,this.boundInternalCallback)},sync:function(){G||(this.oldObject=this.object.slice())},check:function(a){var b;if(G){if(!a)return!1;b=F(this.object,a)}else b=B(this.object,0,this.object.length,this.oldObject,0,this.oldObject.length);return b&&b.length?(this.reportArgs=[b],!0):!1}}),r.applySplices=function(a,b,c){c.forEach(function(c){for(var d=[c.index,c.removed.length],e=c.index;e=0&&this.arr[b+1]===this.isObserved||(0>b&&(b=this.arr.length,this.arr[b]=a,Object.observe(a,this.callback)),this.arr[b+1]=this.isObserved,this.observe(Object.getPrototypeOf(a)))}},cleanup:function(){for(var a=0,b=0,c=this.isObserved;ba&&(this.arr[a]=d,this.arr[a+1]=c),a+=2):Object.unobserve(d,this.callback),b+=2}this.arr.length=a}},t.prototype=L({__proto__:o.prototype,connect:function(){G&&(this.observedSet=new s(this.boundInternalCallback))},disconnect:function(){this.value=void 0,G&&(this.observedSet.reset(),this.observedSet.cleanup(),this.observedSet=void 0)},check:function(){return this.value=G?this.path.getValueFromObserved(this.object,this.observedSet):this.path.getValueFrom(this.object),f(this.value,this.oldValue)?!1:(this.reportArgs=[this.value,this.oldValue],!0)},sync:function(a){a&&(this.value=G?this.path.getValueFromObserved(this.object,this.observedSet):this.path.getValueFrom(this.object)),this.oldValue=this.value}}),t.getValueAtPath=function(a,b){var c=h(b);if(c)return c.getValueFrom(a)},t.setValueAtPath=function(a,b,c){var d=h(b);d&&d.setValueFrom(a,c)};var _={"new":!0,updated:!0,deleted:!0};t.defineProperty=function(a,b,c){var d=c.object,e=h(c.path),f=u(a,b),g=new t(d,c.path,function(a,b){f&&f("updated",b)});return Object.defineProperty(a,b,{get:function(){return e.getValueFrom(d)},set:function(a){e.setValueFrom(d,a)},configurable:!0}),{close:function(){var c=e.getValueFrom(d);f&&g.deliver(),g.close(),Object.defineProperty(a,b,{value:c,writable:!0,configurable:!0})}}};var ab=0,bb=1,cb=2,db=3;a.Observer=o,a.Observer.hasObjectObserve=G,a.ArrayObserver=r,a.ArrayObserver.calculateSplices=function(a,b){return B(a,0,a.length,b,0,b.length)},a.ObjectObserver=q,a.PathObserver=t,a.Path=i}(this),function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a){for(;a.parentNode;)a=a.parentNode;return"function"==typeof a.getElementById?a:null}function d(a){return a.ownerDocument.contains(a)}function e(a,b,c,d){this.closed=!1,this.node=a,this.property=b,this.model=c,this.path=d,this.observer=new PathObserver(c,d,this.boundValueChanged,this),this.boundValueChanged(this.value)}function f(a,b,c,d){this.conditional="?"==b[b.length-1],this.conditional&&(a.removeAttribute(b),b=b.slice(0,-1)),e.call(this,a,b,c,d)}function g(a){switch(a.type){case"checkbox":return T;case"radio":case"select-multiple":case"select-one":return"change";default:return"input"}}function h(a,b,c,d){e.call(this,a,b,c,d),this.eventType=g(this.node),this.boundNodeValueToModel=this.nodeValueChanged.bind(this),this.node.addEventListener(this.eventType,this.boundNodeValueToModel,!0)}function i(a){if(!d(a))return[];if(a.form)return Q(a.form.elements,function(b){return b!=a&&"INPUT"==b.tagName&&"radio"==b.type&&b.name==a.name});var b=a.ownerDocument.querySelectorAll('input[type="radio"][name="'+a.name+'"]');return Q(b,function(b){return b!=a&&!b.form})}function j(a,b,c){h.call(this,a,"checked",b,c)}function k(a,b,c){h.call(this,a,"selectedIndex",b,c)}function l(a){return $[a.tagName]&&a.hasAttribute("template")}function m(a){return"TEMPLATE"==a.tagName||l(a)}function n(a){return _&&"TEMPLATE"==a.tagName}function o(a,b){var c=a.querySelectorAll(ab);m(a)&&b(a),P(c,b)}function p(a){function b(a){HTMLTemplateElement.decorate(a)||p(a.content)}o(a,b)}function q(a,b){Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))})}function r(a){if(!a.defaultView)return a;var b=eb.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);eb.set(a,b)}return b}function s(a){var b=a.ownerDocument.createElement("template");a.parentNode.insertBefore(b,a);for(var c=a.attributes,d=c.length;d-->0;){var e=c[d];Z[e.name]&&("template"!==e.name&&b.setAttribute(e.name,e.value),a.removeAttribute(e.name))}return b}function t(a,b,c){var d=a.content;if(c)return d.appendChild(b),void 0;for(var e;e=b.firstChild;)d.appendChild(e)}function u(a){"TEMPLATE"===a.tagName?_||(cb?a.__proto__=HTMLTemplateElement.prototype:q(a,HTMLTemplateElement.prototype)):(q(a,HTMLTemplateElement.prototype),Object.defineProperty(a,"content",ib))}function v(a){var b=lb.get(a);b||(b=function(){H(a,a.model,a.bindingDelegate)},lb.set(a,b)),bb(b)}function w(a,b,c,d){this.closed=!1,this.node=a,this.property=b,this.model=c,this.path=d,this.node.inputs.bind(this.property,c,d||"")}function x(a){return 3==a.length&&0==a[0].length&&0==a[2].length}function y(a){if(a&&a.length){for(var b,c=a.length,d=0,e=0,f=0;c>e;){if(d=a.indexOf("{{",e),f=0>d?-1:a.indexOf("}}",d+2),0>f){if(!b)return;b.push(a.slice(e));break}b=b||[],b.push(a.slice(e,d)),b.push(a.slice(d+2,f).trim()),e=f+2}return e===c&&b.push(""),b}}function z(a,b,c,d,e){var f,g=e&&e[X];return g&&"function"==typeof g&&(f=g(c,d,b,a),f&&(c=f,d="value")),a.bind(b,c,d)}function A(a,b,c,d,e){for(var f=0;fc?(this.keys.push(a),this.values.push(b)):this.values[c]=b},get:function(a){var b=this.keys.indexOf(a);if(!(0>b))return this.values[b]},"delete":function(a){var b=this.keys.indexOf(a);return 0>b?!1:(this.keys.splice(b,1),this.values.splice(b,1),!0)},forEach:function(a,b){for(var c=0;c>>0)+(c++ +"__")},S.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}(),Node.prototype.bind=function(a,b,c){this.bindings=this.bindings||{};var d=this.bindings[a];return d&&d.close(),d=this.createBinding(a,b,c),this.bindings[a]=d,d?d:(console.error("Unhandled binding to Node: ",this,a,b,c),void 0)},Node.prototype.createBinding=function(){},Node.prototype.unbind=function(a){if(this.bindings){var b=this.bindings[a];b&&(b.close(),delete this.bindings[a])}},Node.prototype.unbindAll=function(){if(this.bindings){for(var a=Object.keys(this.bindings),b=0;be.node.length&&d--?bb(b):e.node[e.property]=c}var c=Number(a);if(c<=this.node.length)return this.node[this.property]=c,void 0;var d=2,e=this;bb(b)}}),HTMLSelectElement.prototype.createBinding=function(a,b,c){return"selectedindex"===a.toLowerCase()?(this.removeAttribute(a),new k(this,b,c)):HTMLElement.prototype.createBinding.call(this,a,b,c)};var U="bind",V="repeat",W="if",X="getBinding",Y="getInstanceModel",Z={template:!0,repeat:!0,bind:!0,ref:!0},$={THEAD:!0,TBODY:!0,TFOOT:!0,TH:!0,TR:!0,TD:!0,COLGROUP:!0,COL:!0,CAPTION:!0,OPTION:!0,OPTGROUP:!0},_="undefined"!=typeof HTMLTemplateElement,ab="template, "+Object.keys($).map(function(a){return a.toLowerCase()+"[template]"}).join(", "),bb=function(){function a(a){this.nextRunner=a,this.value=!1,this.lastValue=this.value,this.scheduled=[],this.scheduledIds=[],this.running=!1,this.observer=new PathObserver(this,"value",this.run,this)}function b(a){var b=a[e];a[e]||(b=d++,a[e]=b),c.schedule(a,b)}a.prototype={schedule:function(a,b){if(!this.scheduledIds[b]){if(this.running)return this.nextRunner.schedule(a,b);this.scheduledIds[b]=!0,this.scheduled.push(a),this.lastValue===this.value&&(this.value=!this.value)}},run:function(){this.running=!0;for(var a=0;a=48&&57>=a}function d(a){return 32===a||9===a||11===a||12===a||160===a||a>=5760&&" ᠎              ".indexOf(String.fromCharCode(a))>0}function e(a){return 10===a||13===a||8232===a||8233===a}function f(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a}function g(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a||a>=48&&57>=a}function h(a){return"this"===a}function i(){for(;bb>ab&&d(_.charCodeAt(ab));)++ab}function j(){var a,b;for(a=ab++;bb>ab&&(b=_.charCodeAt(ab),g(b));)++ab;return _.slice(a,ab)}function k(){var a,b,c;return a=ab,b=j(),c=1===b.length?X.Identifier:h(b)?X.Keyword:"null"===b?X.NullLiteral:"true"===b||"false"===b?X.BooleanLiteral:X.Identifier,{type:c,value:b,range:[a,ab]}}function l(){var a,b,c,d,e=ab,f=_.charCodeAt(ab),g=_[ab];switch(f){case 46:case 40:case 41:case 59:case 44:case 123:case 125:case 91:case 93:case 58:case 63:case 126:return++ab,{type:X.Punctuator,value:String.fromCharCode(f),range:[e,ab]};default:if(a=_.charCodeAt(ab+1),61===a)switch(f){case 37:case 38:case 42:case 43:case 45:case 47:case 60:case 62:case 94:case 124:return ab+=2,{type:X.Punctuator,value:String.fromCharCode(f)+String.fromCharCode(a),range:[e,ab]};case 33:case 61:return ab+=2,61===_.charCodeAt(ab)&&++ab,{type:X.Punctuator,value:_.slice(e,ab),range:[e,ab]}}}return b=_[ab+1],c=_[ab+2],d=_[ab+3],">"===g&&">"===b&&">"===c&&"="===d?(ab+=4,{type:X.Punctuator,value:">>>=",range:[e,ab]}):">"===g&&">"===b&&">"===c?(ab+=3,{type:X.Punctuator,value:">>>",range:[e,ab]}):"<"===g&&"<"===b&&"="===c?(ab+=3,{type:X.Punctuator,value:"<<=",range:[e,ab]}):">"===g&&">"===b&&"="===c?(ab+=3,{type:X.Punctuator,value:">>=",range:[e,ab]}):g===b&&"+-<>&|".indexOf(g)>=0?(ab+=2,{type:X.Punctuator,value:g+b,range:[e,ab]}):"<>=!+-*%&|^/".indexOf(g)>=0?(++ab,{type:X.Punctuator,value:g,range:[e,ab]}):(s({},$.UnexpectedToken,"ILLEGAL"),void 0)}function m(){var a,d,e;if(e=_[ab],b(c(e.charCodeAt(0))||"."===e,"Numeric literal must start with a decimal digit or a decimal point"),d=ab,a="","."!==e){for(a=_[ab++],e=_[ab],"0"===a&&e&&c(e.charCodeAt(0))&&s({},$.UnexpectedToken,"ILLEGAL");c(_.charCodeAt(ab));)a+=_[ab++];e=_[ab]}if("."===e){for(a+=_[ab++];c(_.charCodeAt(ab));)a+=_[ab++];e=_[ab]}if("e"===e||"E"===e)if(a+=_[ab++],e=_[ab],("+"===e||"-"===e)&&(a+=_[ab++]),c(_.charCodeAt(ab)))for(;c(_.charCodeAt(ab));)a+=_[ab++];else s({},$.UnexpectedToken,"ILLEGAL");return f(_.charCodeAt(ab))&&s({},$.UnexpectedToken,"ILLEGAL"),{type:X.NumericLiteral,value:parseFloat(a),range:[d,ab]}}function n(){var a,c,d,f="",g=!1;for(a=_[ab],b("'"===a||'"'===a,"String literal must starts with a quote"),c=ab,++ab;bb>ab;){if(d=_[ab++],d===a){a="";break}if("\\"===d)if(d=_[ab++],d&&e(d.charCodeAt(0)))"\r"===d&&"\n"===_[ab]&&++ab;else switch(d){case"n":f+="\n";break;case"r":f+="\r";break;case"t":f+=" ";break;case"b":f+="\b";break;case"f":f+="\f";break;case"v":f+=" ";break;default:f+=d}else{if(e(d.charCodeAt(0)))break;f+=d}}return""!==a&&s({},$.UnexpectedToken,"ILLEGAL"),{type:X.StringLiteral,value:f,octal:g,range:[c,ab]}}function o(a){return a.type===X.Identifier||a.type===X.Keyword||a.type===X.BooleanLiteral||a.type===X.NullLiteral}function p(){var a;return i(),ab>=bb?{type:X.EOF,range:[ab,ab]}:(a=_.charCodeAt(ab),40===a||41===a||58===a?l():39===a||34===a?n():f(a)?k():46===a?c(_.charCodeAt(ab+1))?m():l():c(a)?m():l())}function q(){var a;return a=db,ab=a.range[1],db=p(),ab=a.range[1],a}function r(){var a;a=ab,db=p(),ab=a}function s(a,c){var d,e=Array.prototype.slice.call(arguments,2),f=c.replace(/%(\d)/g,function(a,c){return b(cab&&(a.push(O()),!v(")"));)u(",");return u(")"),a}function F(){var a;return a=q(),o(a)||t(a),cb.createIdentifier(a.value)}function G(){return u("."),F()}function H(){var a;return u("["),a=P(),u("]"),a}function I(){var a,b,c;for(a=D();v(".")||v("[")||v("(");)v("(")?(b=E(),a=cb.createCallExpression(a,b)):v("[")?(c=H(),a=cb.createMemberExpression("[",a,c)):(c=G(),a=cb.createMemberExpression(".",a,c));return a}function J(){var a;return a=I(),db.type===X.Punctuator&&(v("++")||v("--"))&&s({},$.UnexpectedToken),a}function K(){var a,b;return db.type!==X.Punctuator&&db.type!==X.Keyword?b=J():v("++")||v("--")?s({},$.UnexpectedToken):v("+")||v("-")||v("~")||v("!")?(a=q(),b=K(),b=cb.createUnaryExpression(a.value,b)):w("delete")||w("void")||w("typeof")?s({},$.UnexpectedToken):b=J(),b}function L(a,b){var c=0;if(a.type!==X.Punctuator&&a.type!==X.Keyword)return 0;switch(a.value){case"||":c=1;break;case"&&":c=2;break;case"|":c=3;break;case"^":c=4;break;case"&":c=5;break;case"==":case"!=":case"===":case"!==":c=6;break;case"<":case">":case"<=":case">=":case"instanceof":c=7;break;case"in":c=b?7:0;break;case"<<":case">>":case">>>":c=8;break;case"+":case"-":c=9;break;case"*":case"/":case"%":c=11}return c}function M(){var a,b,c,d,e,f,g,h,i;if(d=eb.allowIn,eb.allowIn=!0,h=K(),b=db,c=L(b,d),0===c)return h;for(b.prec=c,q(),f=K(),e=[h,b,f];(c=L(db,d))>0;){for(;e.length>2&&c<=e[e.length-2].prec;)f=e.pop(),g=e.pop().value,h=e.pop(),a=cb.createBinaryExpression(g,h,f),e.push(a);b=q(),b.prec=c,e.push(b),a=K(),e.push(a)}for(eb.allowIn=d,i=e.length-1,a=e[i];i>1;)a=cb.createBinaryExpression(e[i-1].value,e[i-2],a),i-=2;return a}function N(){var a,b,c,d;return a=M(),v("?")&&(q(),b=eb.allowIn,eb.allowIn=!0,c=O(),eb.allowIn=b,u(":"),d=O(),a=cb.createConditionalExpression(a,c,d)),a}function O(){var a,b,c;return a=db,c=b=N()}function P(){var a;return a=O()}function Q(){return u(";"),cb.createEmptyStatement()}function R(){var a=P();return x(),cb.createExpressionStatement(a)}function S(){var a,b,c,d=db.type;if(d===X.EOF&&t(db),i(),d===X.Punctuator)switch(db.value){case";":return Q();case"(":return R()}return a=P(),a.type===Z.Identifier&&v(":")?(q(),c="$"+a.name,Object.prototype.hasOwnProperty.call(eb.labelSet,c)&&s({},$.Redeclaration,"Label",a.name),eb.labelSet[c]=!0,b=S(),delete eb.labelSet[c],cb.createLabeledStatement(a,b)):(x(),cb.createExpressionStatement(a))}function T(){return db.type===X.Keyword?S():db.type!==X.EOF?S():void 0}function U(){for(var a,b=[];bb>ab&&(a=T(),"undefined"!=typeof a);)b.push(a);return b}function V(){var a;return i(),r(),a=U(),cb.createProgram(a)}function W(a,b){var c;return c=String,"string"==typeof a||a instanceof String||(a=c(a)),cb=b,_=a,ab=0,bb=_.length,db=null,eb={allowIn:!0,labelSet:{}},bb>0&&"undefined"==typeof _[0]&&a instanceof String&&(_=a.valueOf()),V()}var X,Y,Z,$,_,ab,bb,cb,db,eb;X={BooleanLiteral:1,EOF:2,Identifier:3,Keyword:4,NullLiteral:5,NumericLiteral:6,Punctuator:7,StringLiteral:8},Y={},Y[X.BooleanLiteral]="Boolean",Y[X.EOF]="",Y[X.Identifier]="Identifier",Y[X.Keyword]="Keyword",Y[X.NullLiteral]="Null",Y[X.NumericLiteral]="Numeric",Y[X.Punctuator]="Punctuator",Y[X.StringLiteral]="String",Z={ArrayExpression:"ArrayExpression",BinaryExpression:"BinaryExpression",CallExpression:"CallExpression",ConditionalExpression:"ConditionalExpression",EmptyStatement:"EmptyStatement",ExpressionStatement:"ExpressionStatement",Identifier:"Identifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",ObjectExpression:"ObjectExpression",Program:"Program",Property:"Property",ThisExpression:"ThisExpression",UnaryExpression:"UnaryExpression"},$={UnexpectedToken:"Unexpected token %0",UnknownLabel:"Undefined label '%0'",Redeclaration:"%0 '%1' has already been declared"},a.esprima={parse:W}}(this),function(a){"use strict";function b(a,b,d,e){if(e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.tagName&&("bind"===d||"repeat"===d)){var f,g,h=b.match(r);if(h?(f=h[1],g=h[2]):(h=b.match(s),h&&(f=h[2],g=h[1])),h){var i;if(g=g.trim(),g.match(q))i=new CompoundBinding(function(a){return a.path}),i.bind("path",a,g);else try{i=c(a,g)}catch(j){console.error("Invalid expression syntax: "+g,j)}if(i)return t.set(e,f),i}}}function c(a,b){try{var c=new f;if(esprima.parse(b,c),!c.statements.length&&!c.labeledStatements.length)return;if(!c.labeledStatements.length&&c.statements.length>1)throw Error("Multiple unlabelled statements are not allowed.");var e=c.labeledStatements.length?d(c.labeledStatements):e=c.statements[0],g=[];for(var h in c.deps)g.push(h);if(!g.length)return{value:e({})};for(var i=new CompoundBinding(e),j=0;j>>0)+(c++ +"__")},i.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}();var j="[$_a-zA-Z]",k="[$_a-zA-Z0-9]",l=j+"+"+k+"*",m="("+l+")",n="(?:[0-9]|[1-9]+[0-9]+)",o="(?:"+l+"|"+n+")",p="(?:"+o+")(?:\\."+o+")*",q=new RegExp("^"+p+"$"),r=new RegExp("^"+m+"\\s* in (.*)$"),s=new RegExp("^(.*) as \\s*"+m+"$"),t=new i;e.prototype={getPath:function(){return this.last?this.last.getPath()+"."+this.name:this.name},valueFn:function(){var a=this.getPath();return this.deps[a]=!0,function(b){return b[a]}}};var u={"+":function(a){return+a},"-":function(a){return-a},"!":function(a){return!a}},v={"+":function(a,b){return a+b},"-":function(a,b){return a-b},"*":function(a,b){return a*b},"/":function(a,b){return a/b},"%":function(a,b){return a%b},"<":function(a,b){return b>a},">":function(a,b){return a>b},"<=":function(a,b){return b>=a},">=":function(a,b){return a>=b},"==":function(a,b){return a==b},"!=":function(a,b){return a!=b},"===":function(a,b){return a===b},"!==":function(a,b){return a!==b},"&&":function(a,b){return a&&b},"||":function(a,b){return a||b}};f.prototype={getFn:function(a){return a instanceof e?a.valueFn():a},createProgram:function(){},createExpressionStatement:function(a){return this.statements.push(a),a},createLabeledStatement:function(a,b){return this.labeledStatements.push({label:a.getPath(),body:b instanceof e?b.valueFn():b}),b},createUnaryExpression:function(a,b){if(!u[a])throw Error("Disallowed operator: "+a);return b=this.getFn(b),function(c){return u[a](b(c))}},createBinaryExpression:function(a,b,c){if(!v[a])throw Error("Disallowed operator: "+a);return b=this.getFn(b),c=this.getFn(c),function(d){return v[a](b(d),c(d))}},createConditionalExpression:function(a,b,c){return a=this.getFn(a),b=this.getFn(b),c=this.getFn(c),function(d){return a(d)?b(d):c(d)}},createIdentifier:function(a){var b=new e(this.deps,a);return b.type="Identifier",b},createMemberExpression:function(a,b,c){return new e(this.deps,c.name,b)},createLiteral:function(a){return function(){return a.value}},createArrayExpression:function(a){for(var b=0;be;e++)d.unshift("..");var g=d.join("/");return g},resolvePathsInHTML:function(a,b){b=b||p.documentUrlFromNode(a),p.resolveAttributes(a,b),p.resolveStyleElts(a,b);var c=a.querySelectorAll("template");c&&q(c,function(a){a.content&&p.resolvePathsInHTML(a.content,b)})},resolvePathsInStylesheet:function(a){var b=p.nodeUrl(a);a.__resource=p.resolveCssText(a.__resource,b)},resolveStyleElts:function(a,b){var c=a.querySelectorAll("style");c&&q(c,function(a){a.textContent=p.resolveCssText(a.textContent,b)})},resolveCssText:function(a,b){return a.replace(/url\([^)]*\)/g,function(a){var c=a.replace(/["']/g,"").slice(4,-1);return c=p.resolveUrl(b,c,!0),"url("+c+")"})},resolveAttributes:function(a,b){var c=a&&a.querySelectorAll(n);c&&q(c,function(a){this.resolveNodeAttributes(a,b)},this)},resolveNodeAttributes:function(a,b){m.forEach(function(c){var d=a.attributes[c];if(d&&d.value&&d.value.search(o)<0){var e=p.resolveUrl(b,d.value,!0);d.value=e}})}};h=h||{async:!0,ok:function(a){return a.status>=200&&a.status<300||304===a.status||0===a.status},load:function(b,c,d){var e=new XMLHttpRequest;return(a.flags.debug||a.flags.bust)&&(b+="?"+Math.random()),e.open("GET",b,h.async),e.addEventListener("readystatechange",function(){4===e.readyState&&c.call(d,!h.ok(e)&&e,e.response,b)}),e.send(),e},loadDocument:function(a,b,c){this.load(a,b,c).responseType="document"}};var q=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.path=p,a.xhr=h,a.importer=k,a.getDocumentUrl=p.getDocumentUrl,a.IMPORT_LINK_TYPE=i}(window.HTMLImports),function(a){function b(a){return"link"===a.localName&&a.getAttribute("rel")===f}function c(a){return a.parentNode&&!d(a)&&!e(a)}function d(a){return a.ownerDocument===document||a.ownerDocument.impl===document}function e(a){return a.parentNode&&"element"===a.parentNode.localName}var f="import",g={selectors:["link[rel="+f+"]","link[rel=stylesheet]","style","script:not([type])",'script[type="text/javascript"]'],map:{link:"parseLink",script:"parseScript",style:"parseGeneric"},parse:function(a){if(!a.__importParsed){a.__importParsed=!0;var b=a.querySelectorAll(g.selectors);h(b,function(a){g[g.map[a.localName]](a)})}},parseLink:function(a){b(a)?a.content&&g.parse(a.content):this.parseGeneric(a)},parseGeneric:function(a){c(a)&&document.head.appendChild(a)},parseScript:function(b){if(c(b)){var d=(b.__resource||b.textContent).trim();if(d){var e=b.__nodeUrl;if(!e){var e=a.path.documentUrlFromNode(b),f="["+Math.floor(1e3*(Math.random()+1))+"]",g=d.match(/Polymer\(['"]([^'"]*)/);f=g&&g[1]||f,e+="/"+f+".js"}d+="\n//# sourceURL="+e+"\n",eval.call(window,d)}}}},h=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.parser=g}(HTMLImports),function(){function a(){HTMLImports.importer.load(document,function(){HTMLImports.parser.parse(document),HTMLImports.readyTime=(new Date).getTime(),document.dispatchEvent(new CustomEvent("HTMLImportsLoaded",{bubbles:!0}))})}"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState?a():window.addEventListener("DOMContentLoaded",a)}(),function(a){function b(a){u.push(a),t||(t=!0,q(d))}function c(a){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(a)||a}function d(){t=!1;var a=u;u=[],a.sort(function(a,b){return a.uid_-b.uid_});var b=!1;a.forEach(function(a){var c=a.takeRecords();e(a),c.length&&(a.callback_(c,a),b=!0)}),b&&d()}function e(a){a.nodes_.forEach(function(b){var c=p.get(b);c&&c.forEach(function(b){b.observer===a&&b.removeTransientObservers()})})}function f(a,b){for(var c=a;c;c=c.parentNode){var d=p.get(c);if(d)for(var e=0;e0){var e=c[d-1],f=n(e,a);if(f)return c[d-1]=f,void 0}else b(this.observer);c[d]=a},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(a){var b=this.options;b.attributes&&a.addEventListener("DOMAttrModified",this,!0),b.characterData&&a.addEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.addEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(a){var b=this.options;b.attributes&&a.removeEventListener("DOMAttrModified",this,!0),b.characterData&&a.removeEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.removeEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(a){if(a!==this.target){this.addListeners_(a),this.transientObservedNodes.push(a);var b=p.get(a);b||p.set(a,b=[]),b.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[],a.forEach(function(a){this.removeListeners_(a);for(var b=p.get(a),c=0;c1?logFlags.dom&&console.warn("inserted:",a.localName,"insert/remove count:",a.__inserted):a.insertedCallback&&(logFlags.dom&&console.log("inserted:",a.localName),a.insertedCallback())),logFlags.dom&&console.groupEnd())}function j(a){k(a),c(a,function(a){k(a)})}function k(a){(a.removedCallback||a.__upgraded__&&logFlags.dom)&&(logFlags.dom&&console.log("removed:",a.localName),l(a)||(a.__inserted=(a.__inserted||0)-1,a.__inserted>0&&(a.__inserted=0),a.__inserted<0?logFlags.dom&&console.warn("removed:",a.localName,"insert/remove count:",a.__inserted):a.removedCallback&&a.removedCallback()))}function l(a){for(var b=a;b;){if(b==a.ownerDocument)return!0;b=b.parentNode||b.host}}function m(a){a.webkitShadowRoot&&!a.webkitShadowRoot.__watched&&(logFlags.dom&&console.log("watching shadow-root for: ",a.localName),r(a.webkitShadowRoot),a.webkitShadowRoot.__watched=!0)}function n(a){m(a),c(a,function(){m(a)})}function o(a){switch(a.localName){case"style":case"script":case"template":case void 0:return!0}}function p(a){if(logFlags.dom){var b=a[0];if(b&&"childList"===b.type&&b.addedNodes&&b.addedNodes){for(var c=b.addedNodes[0];c&&c!==document&&!c.host;)c=c.parentNode;var d=c&&(c.URL||c._URL||c.host&&c.host.localName)||"";d=d.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",a.length,d||"")}a.forEach(function(a){"childList"===a.type&&(v(a.addedNodes,function(a){o(a)||f(a)}),v(a.removedNodes,function(a){o(a)||j(a)}))}),logFlags.dom&&console.groupEnd()}function q(){p(u.takeRecords())}function r(a){u.observe(a,{childList:!0,subtree:!0})}function s(a){r(a)}function t(a){logFlags.dom&&console.group("upgradeDocument: ",(a.URL||a._URL||"").split("/").pop()),f(a),logFlags.dom&&console.groupEnd()}var u=new MutationObserver(p),v=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.watchShadow=m,a.watchAllShadows=n,a.upgradeAll=f,a.upgradeSubtree=e,a.observeDocument=s,a.upgradeDocument=t,a.takeRecords=q}(window.CustomElements),function(){function parseElementElement(a){var b={name:"","extends":null};takeAttributes(a,b);var c=HTMLElement.prototype;if(b.extends){var d=document.createElement(b.extends);c=d.__proto__||Object.getPrototypeOf(d)}b.prototype=Object.create(c),a.options=b;var e=a.querySelector('script:not([type]),script[type="text/javascript"],scripts');e&&executeComponentScript(e.textContent,a,b.name);var f=document.register(b.name,b);a.ctor=f;var g=a.getAttribute("constructor");g&&(window[g]=f)}function takeAttributes(a,b){for(var c in b){var d=a.attributes[c];d&&(b[c]=d.value)}}function executeComponentScript(inScript,inContext,inName){context=inContext;var owner=context.ownerDocument,url=owner._URL||owner.URL||owner.impl&&(owner.impl._URL||owner.impl.URL),match=url.match(/.*\/([^.]*)[.]?.*$/);if(match){var name=match[1];url+=name!=inName?":"+inName:""}var code="__componentScript('"+inName+"', function(){"+inScript+"});"+"\n//# sourceURL="+url+"\n";eval(code)}function mixin(a,b){a=a||{};try{Object.getOwnPropertyNames(b).forEach(function(c){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)})}catch(c){}return a}var HTMLElementElement=function(a){return a.register=HTMLElementElement.prototype.register,parseElementElement(a),a};HTMLElementElement.prototype={register:function(a){a&&(this.options.lifecycle=a.lifecycle,a.prototype&&mixin(this.options.prototype,a.prototype))}};var context;window.__componentScript=function(a,b){b.call(context)},window.HTMLElementElement=HTMLElementElement}(),function(){function a(a){return"link"===a.localName&&a.getAttribute("rel")===b}var b=window.HTMLImports?HTMLImports.IMPORT_LINK_TYPE:"none",c={selectors:["link[rel="+b+"]","element"],map:{link:"parseLink",element:"parseElement"},parse:function(a){if(!a.__parsed){a.__parsed=!0;var b=a.querySelectorAll(c.selectors);d(b,function(a){c[c.map[a.localName]](a)}),CustomElements.upgradeDocument(a),CustomElements.observeDocument(a)}},parseLink:function(b){a(b)&&this.parseImport(b)},parseImport:function(a){a.content&&c.parse(a.content)},parseElement:function(a){new HTMLElementElement(a)}},d=Array.prototype.forEach.call.bind(Array.prototype.forEach);CustomElements.parser=c}(),function(){function a(){setTimeout(function(){CustomElements.parser.parse(document),CustomElements.upgradeDocument(document),CustomElements.ready=!0,CustomElements.readyTime=Date.now(),window.HTMLImports&&(CustomElements.elapsed=CustomElements.readyTime-HTMLImports.readyTime),document.body.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))},0)}if("function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState)a();else{var b=window.HTMLImports?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(b,a)}}(),function(){function a(){}var b=document.createElement("style");b.textContent="element {display: none !important;} /* injected by platform.js */";var c=document.querySelector("head");if(c.insertBefore(b,c.firstChild),window.ShadowDOMPolyfill){CustomElements.watchShadow=a,CustomElements.watchAllShadows=a;var d=["upgradeAll","upgradeSubtree","observeDocument","upgradeDocument"],e={};d.forEach(function(a){e[a]=CustomElements[a]}),d.forEach(function(a){CustomElements[a]=function(b){return e[a](wrap(b))}})}}(),function(a){a=a||{};var b={shadow:function(a){return a?a.shadowRoot||a.webkitShadowRoot:void 0},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);return this.canTarget(b)?b:void 0},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d}e=this.olderShadow(e)}return f}},owner:function(a){for(var b=a;b.parentNode;)b=b.parentNode;return b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);return d.elementFromPoint(b,c)||(d=document),this.searchRoot(document,b,c)}};a.targetFinding=b,a.findTarget=b.findTarget.bind(b),window.PointerEventsPolyfill=a}(window.PointerEventsPolyfill),function(){function a(a){return'[touch-action="'+a+'"]'}function b(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}var c=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],d="";c.forEach(function(c){d+=String(c)===c?a(c)+b(c):c.selectors.map(a)+b(c.rule)});var e=document.createElement("style");e.textContent=d;var f=document.querySelector("head");f.insertBefore(e,f.firstChild)}(),function(a){function b(a,b){var b=b||{},e=b.buttons;if(void 0===e)switch(b.which){case 1:e=1;break;case 2:e=4;break;case 3:e=2;break;default:e=0}var f;if(c)f=new MouseEvent(a,b);else{f=document.createEvent("MouseEvent");var g={bubbles:!1,cancelable:!1,view:null,detail:null,screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null};Object.keys(g).forEach(function(a){a in b&&(g[a]=b[a])}),f.initMouseEvent(a,g.bubbles,g.cancelable,g.view,g.detail,g.screenX,g.screenY,g.clientX,g.clientY,g.ctrlKey,g.altKey,g.shiftKey,g.metaKey,g.button,g.relatedTarget)}d||Object.defineProperty(f,"buttons",{get:function(){return e},enumerable:!0});var h=0;return h=b.pressure?b.pressure:e?.5:0,Object.defineProperties(f,{pointerId:{value:b.pointerId||0,enumerable:!0},width:{value:b.width||0,enumerable:!0},height:{value:b.height||0,enumerable:!0},pressure:{value:h,enumerable:!0},tiltX:{value:b.tiltX||0,enumerable:!0},tiltY:{value:b.tiltY||0,enumerable:!0},pointerType:{value:b.pointerType||"",enumerable:!0},hwTimestamp:{value:b.hwTimestamp||0,enumerable:!0},isPrimary:{value:b.isPrimary||!1,enumerable:!0}}),f}var c=!1,d=!1;try{var e=new MouseEvent("click",{buttons:1});c=!0,d=1===e.buttons}catch(f){}a.PointerEvent||(a.PointerEvent=b)}(window),function(a){function b(){this.ids=[],this.pointers=[]}b.prototype={set:function(a,b){var c=this.ids.indexOf(a);c>-1?this.pointers[c]=b:(this.ids.push(a),this.pointers.push(b))},has:function(a){return this.ids.indexOf(a)>-1},"delete":function(a){var b=this.ids.indexOf(a);b>-1&&(this.ids.splice(b,1),this.pointers.splice(b,1))},get:function(a){var b=this.ids.indexOf(a);return this.pointers[b]},get size(){return this.pointers.length},clear:function(){this.ids.length=0,this.pointers.length=0},forEach:function(a,b){this.ids.forEach(function(c,d){a.call(b,c,this.pointers[d],this)},this)}},a.PointerMap=window.Map&&Map.prototype.forEach?Map:b}(window.PointerEventsPolyfill),function(a){var b;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0)b=WeakMap;else{var c=Object.defineProperty,d=Object.hasOwnProperty,e=(new Date).getTime()%1e9;b=function(){this.name="__st"+(1e9*Math.random()>>>0)+(e++ +"__")},b.prototype={set:function(a,b){c(a,this.name,{value:b,writable:!0})},get:function(a){return d.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}a.SideTable=b}(window.PointerEventsPolyfill),function(a){var b={targets:new a.SideTable,handledEvents:new a.SideTable,pointermap:new a.PointerMap,eventMap:{},eventSources:{},eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.unregister.call(b,a)},down:function(a){this.fireEvent("pointerdown",a)},move:function(a){this.fireEvent("pointermove",a)},up:function(a){this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){this.fireEvent("pointercancel",a)},leaveOut:function(a){a.target.contains(a.relatedTarget)||this.leave(a),this.out(a)},enterOver:function(a){a.target.contains(a.relatedTarget)||this.enter(a),this.over(a)},eventHandler:function(a){if(!this.handledEvents.get(a)){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),this.handledEvents.set(a,!0)}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(a,b){var c=new PointerEvent(a,b);return this.targets.set(c,this.targets.get(b)||b.target),c},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){var b={};for(var c in a)b[c]=a[c];return b},getTarget:function(a){return this.captureInfo&&this.captureInfo.id===a.pointerId?this.captureInfo.target:this.targets.get(a)},setCapture:function(a,b){this.captureInfo&&this.releaseCapture(this.captureInfo.id),this.captureInfo={id:a,target:b};var c=new PointerEvent("gotpointercapture",{bubbles:!0});this.implicitRelease=this.releaseCapture.bind(this,a),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease),this.targets.set(c,b),this.asyncDispatchEvent(c)},releaseCapture:function(a){if(this.captureInfo&&this.captureInfo.id===a){var b=new PointerEvent("lostpointercapture",{bubbles:!0}),c=this.captureInfo.target;this.captureInfo=null,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease),this.targets.set(b,c),this.asyncDispatchEvent(b)}},dispatchEvent:function(a){var b=this.getTarget(a);return b?b.dispatchEvent(a):void 0},asyncDispatchEvent:function(a){setTimeout(this.dispatchEvent.bind(this,a),0)}};b.boundHandler=b.eventHandler.bind(b),a.dispatcher=b,a.register=b.register.bind(b),a.unregister=b.unregister.bind(b)}(window.PointerEventsPolyfill),function(a){function b(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),g&&(this.observer=new g(this.mutationWatcher.bind(this)))}var c=Array.prototype.forEach.call.bind(Array.prototype.forEach),d=Array.prototype.map.call.bind(Array.prototype.map),e=Array.prototype.slice.call.bind(Array.prototype.slice),f=Array.prototype.filter.call.bind(Array.prototype.filter),g=window.MutationObserver||window.WebKitMutationObserver,h="[touch-action]",i={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};b.prototype={watchSubtree:function(b){a.targetFinding.canTarget(b)&&this.observer.observe(b,i)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){c(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(h):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(e(b))},installOnLoad:function(){document.addEventListener("DOMContentLoaded",this.installNewSubtree.bind(this,document))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){var b=d(a,this.findElements,this);return b.push(f(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}},g||(b.prototype.watchSubtree=function(){console.warn("PointerEventsPolyfill: MutationObservers not found, touch-action will not be dynamically detected")}),a.Installer=b}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher,c=b.pointermap,d=25,e={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},lastTouches:[],isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,e=a.clientX,f=a.clientY,g=0,h=c.length;h>g&&(b=c[g]);g++){var i=Math.abs(e-b.x),j=Math.abs(f-b.y);if(d>=i&&d>=j)return!0}},prepareEvent:function(a){var c=b.cloneEvent(a);return c.pointerId=this.POINTER_ID,c.isPrimary=!0,c.pointerType=this.POINTER_TYPE,c},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=c.has(this.POINTER_ID);d&&this.cancel(a);var e=this.prepareEvent(a);c.set(this.POINTER_ID,a),b.down(e)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.move(c)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=c.get(this.POINTER_ID);if(d&&d.button===a.button){var e=this.prepareEvent(a);b.up(e),this.cleanupMouse()}}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.enterOver(c)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.leaveOut(c)}},cancel:function(a){var c=this.prepareEvent(a);b.cancel(c),this.cleanupMouse()},cleanupMouse:function(){c.delete(this.POINTER_ID)}};a.mouseEvents=e}(window.PointerEventsPolyfill),function(a){var b,c=a.dispatcher,d=a.findTarget,e=a.targetFinding.allShadows.bind(a.targetFinding),f=c.pointermap,g=Array.prototype.map.call.bind(Array.prototype.map),h=2500,i="touch-action",j="string"==typeof document.head.style.touchAction,k={scrollType:new a.SideTable,events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){j?c.listen(a,this.events):b.enableOnSubtree(a)},unregister:function(a){j&&c.unlisten(a,this.events)},elementAdded:function(a){var b=a.getAttribute(i),d=this.touchActionToScrollType(b);d&&(this.scrollType.set(a,d),c.listen(a,this.events),e(a).forEach(function(a){this.scrollType.set(a,d),c.listen(a,this.events)},this))},elementRemoved:function(a){this.scrollType.delete(a),c.unlisten(a,this.events),e(a).forEach(function(a){this.scrollType.delete(a),c.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(i),d=this.touchActiontoScrollType(c),f=this.touchActionToScrollType(b);d&&f?(this.scrollType.set(a,d),e(a).forEach(function(a){this.scrollType.set(a,d)},this)):f?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){null===this.firstTouch&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1)},removePrimaryTouch:function(a){this.isPrimaryTouch(a)&&(this.firstTouch=null,this.firstXY=null)},touchToPointer:function(a){var b=c.cloneEvent(a);return b.pointerId=a.identifier+2,b.target=d(b),b.bubbles=!0,b.cancelable=!0,b.button=0,b.buttons=1,b.width=a.webkitRadiusX||a.radiusX||0,b.height=a.webkitRadiusY||a.radiusY||0,b.pressure=a.webkitForce||a.force||.5,b.isPrimary=this.isPrimaryTouch(a),b.pointerType=this.POINTER_TYPE,b},processTouches:function(a,b){var c=a.changedTouches,d=g(c,this.touchToPointer,this);d.forEach(b,this)},shouldScroll:function(a){if(this.firstXY){var b,c=this.scrollType.get(a.currentTarget);if("none"===c)b=!1;else if("XY"===c)b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)if(c.identifier===b)return!0},vacuumTouches:function(a){var b=a.touches;if(f.size>=b.length){var c=[];f.forEach(function(a,d){if(1!==a&&!this.findTouch(b,a-2)){var e=d.out;c.push(this.touchToPointer(e))}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||this.processTouches(a,this.overDown)},overDown:function(a){f.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),c.over(a),c.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,d=f.get(b.pointerId);if(d){var e=d.out,g=d.outTarget;c.move(b),e&&g!==b.target&&(e.relatedTarget=b.target,b.relatedTarget=g,e.target=g,b.target?(c.leaveOut(e),c.enterOver(b)):(b.target=g,b.relatedTarget=null,this.cancelOut(b))),d.out=b,d.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(c.up(a),c.out(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){c.cancel(a),c.out(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){f.delete(a.pointerId),this.removePrimaryTouch(a)},dedupSynthMouse:function(b){var c=a.mouseEvents.lastTouches,d=b.changedTouches[0];if(this.isPrimaryTouch(d)){var e={x:d.clientX,y:d.clientY};c.push(e);var f=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,c,e);setTimeout(f,h)}}};j||(b=new a.Installer(k.elementAdded,k.elementRemoved,k.elementChanged,k)),a.touchEvents=k}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher,c=b.pointermap,d=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,e={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var c=a;return d&&(c=b.cloneEvent(a),c.pointerType=this.POINTER_TYPES[a.pointerType]),c},cleanup:function(a){c.delete(a)},MSPointerDown:function(a){c.set(a.pointerId,a);var d=this.prepareEvent(a);b.down(d)},MSPointerMove:function(a){var c=this.prepareEvent(a);b.move(c)},MSPointerUp:function(a){var c=this.prepareEvent(a);b.up(c),this.cleanup(a.pointerId)},MSPointerOut:function(a){var c=this.prepareEvent(a);b.leaveOut(c)},MSPointerOver:function(a){var c=this.prepareEvent(a);b.enterOver(c)},MSPointerCancel:function(a){var c=this.prepareEvent(a);b.cancel(c),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var c=b.makeEvent("lostpointercapture",a);b.dispatchEvent(c)},MSGotPointerCapture:function(a){var c=b.makeEvent("gotpointercapture",a);b.dispatchEvent(c)}};a.msEvents=e}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher;if(void 0===window.navigator.pointerEnabled){if(Object.defineProperty(window.navigator,"pointerEnabled",{value:!0,enumerable:!0}),window.navigator.msPointerEnabled){var c=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:c,enumerable:!0}),b.registerSource("ms",a.msEvents)}else b.registerSource("mouse",a.mouseEvents),void 0!==window.ontouchstart&&b.registerSource("touch",a.touchEvents);b.register(document)}}(window.PointerEventsPolyfill),function(a){function b(a){if(!e.pointermap.has(a))throw new Error("InvalidPointerId")}var c,d,e=a.dispatcher,f=window.navigator;f.msPointerEnabled?(c=function(a){b(a),this.msSetPointerCapture(a)},d=function(a){b(a),this.msReleasePointerCapture(a)}):(c=function(a){b(a),e.setCapture(a,this)},d=function(a){b(a),e.releaseCapture(a,this)}),Element.prototype.setPointerCapture||Object.defineProperties(Element.prototype,{setPointerCapture:{value:c},releasePointerCapture:{value:d}})}(window.PointerEventsPolyfill),PointerGestureEvent.prototype.preventTap=function(){this.tapPrevented=!0},function(a){a=a||{},a.utils={LCA:{find:function(a,b){if(a===b)return a;if(a.contains){if(a.contains(b))return a;if(b.contains(a))return b}var c=this.depth(a),d=this.depth(b),e=c-d;for(e>0?a=this.walk(a,e):b=this.walk(b,-e);a&&b&&a!==b;)a=this.walk(a,1),b=this.walk(b,1);return a},walk:function(a,b){for(var c=0;b>c;c++)a=a.parentNode;return a},depth:function(a){for(var b=0;a;)b++,a=a.parentNode;return b}}},a.findLCA=function(b,c){return a.utils.LCA.find(b,c)},window.PointerGestures=a}(window.PointerGestures),function(a){var b;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0)b=WeakMap;else{var c=Object.defineProperty,d=Object.hasOwnProperty,e=(new Date).getTime()%1e9;b=function(){this.name="__st"+(1e9*Math.random()>>>0)+(e++ +"__")},b.prototype={set:function(a,b){c(a,this.name,{value:b,writable:!0})},get:function(a){return d.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}a.SideTable=b}(window.PointerGestures),function(a){function b(){this.ids=[],this.pointers=[]}b.prototype={set:function(a,b){var c=this.ids.indexOf(a);c>-1?this.pointers[c]=b:(this.ids.push(a),this.pointers.push(b))},has:function(a){return this.ids.indexOf(a)>-1},"delete":function(a){var b=this.ids.indexOf(a);b>-1&&(this.ids.splice(b,1),this.pointers.splice(b,1))},get:function(a){var b=this.ids.indexOf(a);return this.pointers[b]},get size(){return this.pointers.length},clear:function(){this.ids.length=0,this.pointers.length=0}},window.Map&&(b=window.Map),a.PointerMap=b}(window.PointerGestures),function(a){var b={handledEvents:new a.SideTable,targets:new a.SideTable,handlers:{},recognizers:{},events:["pointerdown","pointermove","pointerup","pointerover","pointerout","pointercancel"],registerRecognizer:function(a,b){var c=b;this.recognizers[a]=c,this.events.forEach(function(a){if(c[a]){var b=c[a].bind(c);this.addHandler(a,b)}},this)},addHandler:function(a,b){var c=a;this.handlers[c]||(this.handlers[c]=[]),this.handlers[c].push(b)},registerTarget:function(a){this.listen(this.events,a)},unregisterTarget:function(a){this.unlisten(this.events,a)},eventHandler:function(a){if(!this.handledEvents.get(a)){var b,c=a.type;(b=this.handlers[c])&&this.makeQueue(b,a),this.handledEvents.set(a,!0)}},makeQueue:function(a,b){var c=this.cloneEvent(b);setTimeout(this.runQueue.bind(this,a,c),0)},runQueue:function(a,b){this.currentPointerId=b.pointerId;for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)c(b);this.currentPointerId=0},listen:function(a,b){a.forEach(function(a){this.addEvent(a,this.boundHandler,!1,b)},this)},unlisten:function(a){a.forEach(function(a){this.removeEvent(a,this.boundHandler,!1,inTarget)},this)},addEvent:function(a,b,c,d){d.addEventListener(a,b,c)},removeEvent:function(a,b,c,d){d.removeEventListener(a,b,c) -},makeEvent:function(a,b){return new PointerGestureEvent(a,b)},cloneEvent:function(a){var b={};for(var c in a)b[c]=a[c];return b},dispatchEvent:function(a,b){var c=b||this.targets.get(a);c&&(c.dispatchEvent(a),a.tapPrevented&&this.preventTap(this.currentPointerId))},asyncDispatchEvent:function(a,b){var c=function(){this.dispatchEvent(a,b)}.bind(this);setTimeout(c,0)},preventTap:function(a){var b=this.recognizers.tap;b&&b.preventTap(a)}};b.boundHandler=b.eventHandler.bind(b),a.dispatcher=b,a.register=function(b){var c=window.PointerEventsPolyfill;c&&c.register(b),a.dispatcher.registerTarget(b)},b.registerTarget(document)}(window.PointerGestures),function(a){var b=a.dispatcher,c={HOLD_DELAY:200,WIGGLE_THRESHOLD:16,events:["pointerdown","pointermove","pointerup","pointercancel"],heldPointer:null,holdJob:null,pulse:function(){var a=Date.now()-this.heldPointer.timeStamp,b=this.held?"holdpulse":"hold";this.fireHold(b,a),this.held=!0},cancel:function(){clearInterval(this.holdJob),this.held&&this.fireHold("release"),this.held=!1,this.heldPointer=null,this.target=null,this.holdJob=null},pointerdown:function(a){a.isPrimary&&!this.heldPointer&&(this.heldPointer=a,this.target=a.target,this.holdJob=setInterval(this.pulse.bind(this),this.HOLD_DELAY))},pointerup:function(a){this.heldPointer&&this.heldPointer.pointerId===a.pointerId&&this.cancel()},pointercancel:function(){this.cancel()},pointermove:function(a){if(this.heldPointer&&this.heldPointer.pointerId===a.pointerId){var b=a.clientX-this.heldPointer.clientX,c=a.clientY-this.heldPointer.clientY;b*b+c*c>this.WIGGLE_THRESHOLD&&this.cancel()}},fireHold:function(a,c){var d={pointerType:this.heldPointer.pointerType};c&&(d.holdTime=c);var e=b.makeEvent(a,d);b.dispatchEvent(e,this.target),e.tapPrevented&&b.preventTap(this.heldPointer.pointerId)}};b.registerRecognizer("hold",c)}(window.PointerGestures),function(a){var b=a.dispatcher,c=new a.PointerMap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],WIGGLE_THRESHOLD:4,clampDir:function(a){return a>0?1:-1},calcPositionDelta:function(a,b){var c=0,d=0;return a&&b&&(c=b.pageX-a.pageX,d=b.pageY-a.pageY),{x:c,y:d}},fireTrack:function(a,c,d){var e=d,f=this.calcPositionDelta(e.downEvent,c),g=this.calcPositionDelta(e.lastMoveEvent,c);g.x&&(e.xDirection=this.clampDir(g.x)),g.y&&(e.yDirection=this.clampDir(g.y));var h={dx:f.x,dy:f.y,ddx:g.x,ddy:g.y,clientX:c.clientX,clientY:c.clientY,pageX:c.pageX,pageY:c.pageY,screenX:c.screenX,screenY:c.screenY,xDirection:e.xDirection,yDirection:e.yDirection,trackInfo:e.trackInfo,pointerType:c.pointerType};"trackend"===a&&(h._releaseTarget=c.target);var i=b.makeEvent(a,h);e.lastMoveEvent=c,b.dispatchEvent(i,e.downTarget)},pointerdown:function(a){if(a.isPrimary&&("mouse"===a.pointerType?1===a.buttons:!0)){var b={downEvent:a,downTarget:a.target,trackInfo:{},lastMoveEvent:null,xDirection:0,yDirection:0,tracking:!1};c.set(a.pointerId,b)}},pointermove:function(a){var b=c.get(a.pointerId);if(b)if(b.tracking)this.fireTrack("track",a,b);else{var d=this.calcPositionDelta(b.downEvent,a),e=d.x*d.x+d.y*d.y;e>this.WIGGLE_THRESHOLD&&(b.tracking=!0,this.fireTrack("trackstart",b.downEvent,b),this.fireTrack("track",a,b))}},pointerup:function(a){var b=c.get(a.pointerId);b&&(b.tracking&&this.fireTrack("trackend",a,b),c.delete(a.pointerId))},pointercancel:function(a){this.pointerup(a)}};b.registerRecognizer("track",d)}(window.PointerGestures),function(a){var b=a.dispatcher,c={MIN_VELOCITY:.5,MAX_QUEUE:4,moveQueue:[],target:null,pointerId:null,events:["pointerdown","pointermove","pointerup","pointercancel"],pointerdown:function(a){a.isPrimary&&!this.pointerId&&(this.pointerId=a.pointerId,this.target=a.target,this.addMove(a))},pointermove:function(a){a.pointerId===this.pointerId&&this.addMove(a)},pointerup:function(a){a.pointerId===this.pointerId&&this.fireFlick(a),this.cleanup()},pointercancel:function(){this.cleanup()},cleanup:function(){this.moveQueue=[],this.target=null,this.pointerId=null},addMove:function(a){this.moveQueue.length>=this.MAX_QUEUE&&this.moveQueue.shift(),this.moveQueue.push(a)},fireFlick:function(a){for(var c,d,e,f,g,h,i,j=a,k=this.moveQueue.length,l=0,m=0,n=0,o=0;k>o&&(i=this.moveQueue[o]);o++)c=j.timeStamp-i.timeStamp,d=j.clientX-i.clientX,e=j.clientY-i.clientY,f=d/c,g=e/c,h=Math.sqrt(f*f+g*g),h>n&&(l=f,m=g,n=h);var p=Math.abs(l)>Math.abs(m)?"x":"y",q=this.calcAngle(l,m);if(Math.abs(n)>=this.MIN_VELOCITY){var r=b.makeEvent("flick",{xVelocity:l,yVelocity:m,velocity:n,angle:q,majorAxis:p,pointerType:a.pointerType});b.dispatchEvent(r,this.target)}},calcAngle:function(a,b){return 180*Math.atan2(b,a)/Math.PI}};b.registerRecognizer("flick",c)}(window.PointerGestures),function(a){var b=a.dispatcher,c=new a.PointerMap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],pointerdown:function(a){a.isPrimary&&!a.tapPrevented&&c.set(a.pointerId,{target:a.target,x:a.clientX,y:a.clientY})},pointermove:function(a){if(a.isPrimary){var b=c.get(a.pointerId);b&&a.tapPrevented&&c.delete(a.pointerId)}},pointerup:function(d){var e=c.get(d.pointerId);if(e&&!d.tapPrevented){var f=a.findLCA(e.target,d.target);if(f){var g=b.makeEvent("tap",{x:d.clientX,y:d.clientY,pointerType:d.pointerType});b.dispatchEvent(g,f)}}c.delete(d.pointerId)},pointercancel:function(a){c.delete(a.pointerId)},preventTap:function(a){c.delete(a)}};b.registerRecognizer("tap",d)}(window.PointerGestures); -/* -//@ sourceMappingURL=platform.min.js.map -*/ \ No newline at end of file diff --git a/libs/polymer/platform.min.js.map b/libs/polymer/platform.min.js.map deleted file mode 100644 index e0d18edfb..000000000 --- a/libs/polymer/platform.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"platform.min.js","sources":["../PointerGestures/src/PointerGestureEvent.js","build/shadowdom.conditional.js","../CustomElements/src/MutationObserver.js","src/lang.js","src/dom.js","src/template.js","src/inspector.js","../mdv/third_party/ChangeSummary/change_summary.js","../mdv/src/template_element.js","../mdv/third_party/esprima/esprima.js","../mdv/util/expression_syntax.js","src/patches-mdv.js","../HTMLImports/src/HTMLImports.js","../HTMLImports/src/Parser.js","../HTMLImports/src/boot.js","../CustomElements/MutationObservers/MutationObserver.js","../CustomElements/src/CustomElements.js","../CustomElements/src/Observer.js","../CustomElements/src/HTMLElementElement.js","../CustomElements/src/Parser.js","../CustomElements/src/boot.js","src/patches-custom-elements.js","../PointerEvents/src/boot.js","../PointerEvents/src/touch-action.js","../PointerEvents/src/PointerEvent.js","../PointerEvents/src/pointermap.js","../PointerEvents/src/sidetable.js","../PointerEvents/src/dispatcher.js","../PointerEvents/src/installer.js","../PointerEvents/src/mouse.js","../PointerEvents/src/touch.js","../PointerEvents/src/ms.js","../PointerEvents/src/platform-events.js","../PointerEvents/src/capture.js","../PointerGestures/src/initialize.js","../PointerGestures/src/sidetable.js","../PointerGestures/src/pointermap.js","../PointerGestures/src/dispatcher.js","../PointerGestures/src/hold.js","../PointerGestures/src/track.js","../PointerGestures/src/flick.js","../PointerGestures/src/tap.js"],"names":["PointerGestureEvent","inType","inDict","dict","e","document","createEvent","props","bubbles","cancelable","Object","keys","forEach","k","initEvent","preventTap","this","window","Platform","logFlags","scope","flags","location","search","slice","split","o","shadow","shadowdom","polyfill","HTMLElement","prototype","webkitCreateShadowRoot","SideTable","WeakMap","navigator","userAgent","indexOf","defineProperty","hasOwnProperty","counter","Date","getTime","name","Math","random","set","key","value","writable","get","call","undefined","delete","ShadowDOMPolyfill","assert","b","Error","mixin","to","from","getOwnPropertyNames","getOwnPropertyDescriptor","mixinStatics","getWrapperConstructor","node","nativePrototype","__proto__","getPrototypeOf","wrapperConstructor","constructorTable","parentWrapperConstructor","GeneratedWrapper","createWrapperConstructor","registerInternal","addForwardingProperties","wrapperPrototype","installProperty","registerInstanceProperties","instanceObject","isEventHandlerName","test","source","target","allowMethod","isFirefox","__lookupGetter__","descriptor","ex","dummyDescriptor","getter","setter","impl","apply","arguments","isEvent","getEventHandlerGetter","getEventHandlerSetter","configurable","enumerable","register","nativeConstructor","opt_instance","isWrapperFor","registerObject","object","superWrapperConstructor","create","constructor","isWrapper","wrappers","EventTarget","Event","DOMImplementation","isNative","OriginalNode","OriginalEvent","OriginalWindow","OriginalDOMImplementation","wrap","wrapper","wrapperTable","unwrap","unwrapIfNeeded","wrapIfNeeded","rewrap","defineGetter","defineWrapGetter","forwardMethodsToWrapper","constructors","names","w","Node","Window","registerWrapper","isShadowRoot","ShadowRoot","isInsertionPoint","localName","isShadowHost","shadowRoot","getEventParent","dv","parentNode","defaultView","calculateParents","context","ancestors","length","shift","getInsertionParent","getHostForShadowRoot","eventParents","eventParentsTable","i","trees","getShadowTrees","p","contains","retarget","stack","ancestor","targets","topMostNotInsertionPoint","top","push","currentTarget","pop","adjustRelatedTarget","related","last","isDistributed","head","inSameTree","insertionParentTable","rootOfNode","a","enclosedBy","host","isMutationEvent","type","dispatchOriginalEvent","originalEvent","handledEventsTable","renderAllPending","event","dispatchEvent","originalWrapperTarget","eventPath","Document","eventPathTable","dispatchCapturing","dispatchAtTarget","dispatchBubbling","eventPhaseTable","NONE","currentTargetTable","defaultPrevented","phase","CAPTURING_PHASE","invoke","AT_TARGET","stopImmediatePropagationTable","BUBBLING_PHASE","tuple","listeners","listenersTable","relatedTarget","adjusted","relatedTargetTable","anyRemoved","targetTable","listener","removed","capture","handler","handleEvent","onerror","message","console","error","copy","stopPropagationTable","Listener","Boolean","options","constructEvent","unwrapOptions","registerGenericEvent","SuperEvent","GenericEvent","getInitFunction","relatedTargetIndex","supportsEventConstructors","defaultDict","defaultInitDicts","args","v","isValidListener","fun","getTargetToListenAt","wrapEventTargetMethods","methodNames","elementFromPoint","self","x","y","element","originalElementFromPoint","inlineEventHandlers","eventHandlersTable","eventType","old","removeEventListener","wrapped","rv","preventDefault","returnValue","addEventListener","equals","that","remove","eventPhase","path","nodeList","NodeList","index","lastIndex","baseRoot","currentRoot","stopPropagation","stopImmediatePropagation","UIEvent","CustomEvent","relatedTargetProto","mouseEventProto","initMouseEvent","focusEventProto","initFocusEvent","MouseEvent","FocusEvent","MutationEvent","initMutationEvent","relatedNode","configureEventConstructor","initDict","superName","superDict","detail","view","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","OriginalEventTarget","addEventListener_","count","found","removeEventListener_","dispatchEvent_","nonEnum","obj","prop","wrapNodeList","list","wrapperList","addWrapNodeListMethod","item","assertIsNodeWrapper","collectNodes","previousNode","nextNode","nodeType","DOCUMENT_FRAGMENT_NODE","removeChild","parentNode_","previousSibling_","nextSibling_","firstChild","nodes","unwrapNodesForInsertion","owner","df","ownerDocument","createDocumentFragment","appendChild","removeAllChildNodes","childWrapper","nextSibling","childNode","originalRemoveChild","firstChild_","lastChild_","original","originalAppendChild","originalInsertBefore","insertBefore","originalReplaceChild","replaceChild","originalCompareDocumentPosition","compareDocumentPosition","invalidateShadowRenderer","lastChild","refWrapper","previousSibling","refNode","thisFirstChild","thisLastChild","childWrapperNextSibling","childWrapperPreviousSibling","newChildWrapper","oldChildWrapper","oldChildNode","hasChildNodes","parentElement","ELEMENT_NODE","textContent","s","child","textNode","createTextNode","childNodes","cloneNode","deep","clone","otherNode","querySelector","querySelectorAll","findOne","selector","m","el","firstElementChild","matches","nextElementSibling","findAll","results","SelectorsInterface","GetElementsByInterface","getElementsByTagName","tagName","getElementsByClassName","className","getElementsByTagNameNS","ns","result","els","j","namespaceURI","forwardElement","backwardsElement","ParentNodeInterface","lastElementChild","childElementCount","children","ChildNodeInterface","previousElementSibling","CharacterData","OriginalCharacterData","data","Element","shadowRootTable","OriginalElement","originalMatches","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector","createShadowRoot","newShadowRoot","getRendererForHost","setAttribute","escapeReplace","c","escape","replace","escapeRegExp","getOuterHTML","attr","toLowerCase","attrs","attributes","voidElements","getInnerHTML","TEXT_NODE","nodeValue","COMMENT_NODE","setInnerHTML","opt_tagName","tempElement","createElement","innerHTML","getterRequiresRendering","methodRequiresRendering","area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","track","wbr","OriginalHTMLElement","outerHTML","HTMLContentElement","OriginalHTMLContentElement","select","getAttribute","n","String","HTMLShadowElement","olderShadowRoot_","OriginalHTMLShadowElement","olderShadowRoot","getTemplateContentsOwner","doc","d","templateContentsOwnerTable","implementation","createHTMLDocument","extractContent","templateElement","HTMLTemplateElement","contentTable","OriginalHTMLTemplateElement","content","HTMLUnknownElement","OriginalHTMLUnknownElement","DocumentFragment","Text","Comment","createComment","hostWrapper","oldShadowRoot","nextOlderShadowTreeTable","shadowHostTable","getElementById","id","updateWrapperUpAndSideways","updateWrapperDown","updateAllChildNodes","parentNodeWrapper","lastChildWrapper","nodeWrapper","distributeChildToInsertionPoint","insertionPoint","getDistributedChildNodes","assignToInsertionPoint","resetDistributedChildNodes","distributedChildNodesTable","getChildNodesSnapshot","visit","tree","predicate","visitor","distribute","pool","isActiveInsertionPoint","matchesCriteria","filter","oneOf","propertyNames","point","trim","selectorMatchRegExp","allowedPseudoRegExp","renderTimer","pendingDirtyRenderers","render","ShadowRenderer","dirty","associateNode","renderer","rendererForHostTable","isShadowInsertionPoint","isActiveShadowInsertionPoint","shadowHost","getNextOlderTree","shadowDOMRendererTable","RegExp","join","request","treeComposition","shadowDOM","shadowDOMChildNodes","renderNode","invalidate","visualParent","isNested","renderInsertionPoint","renderShadowInsertionPoint","renderAsAnyDomTree","parent","logicalChildNodes","distributedChildNodes","renderFallbackContent","shadowInsertionPoint","nextOlderTree","fallbackHost","shadowHostChildNodes","reprojected","force","getDistributedNodes","visual","wrapMethod","adoptSubtree","adoptNode","adoptOlderShadowRoots","wrapImplMethod","forwardImplMethod","implementationTable","originalAdoptNode","originalWrite","write","all","HTMLBodyElement","HTMLDocument","HTMLHeadElement","originalGetComputedStyle","getComputedStyle","pseudo","MutationRecord","wrapRecord","record","wrapRecords","records","map","MutationObserver","callback","OriginalMutationObserver","mutations","WebKitMutationObserver","OriginalMutationRecord","addedNodes","removedNodes","observe","disconnect","takeRecords","overrideConstructor","nativeConstructorName","elements","applet","audio","body","canvas","dl","datalist","dir","div","fieldset","font","form","frame","frameset","h1","html","iframe","li","label","legend","menu","menuitem","meter","del","ol","optgroup","option","output","pre","progress","q","script","span","style","caption","table","tr","thead","tbody","textarea","title","ul","video","knownElements","defineProperties","webkitShadowRoot","stylesToCssText","styles","preserveComments","cssText","Array","cssCommentRe","cssToRules","rules","sheet","cssRules","rulesToCss","css","addCssToDocument","getSheet","ShadowCSS","strictStyling","registry","shimStyling","root","extendsName","def","registerDefinition","applyScopeToContent","shimPolyfillDirectives","rootStyles","applyShimming","scopeStyles","shimShadowDOMStyling","extendee","concat","template","convertPolyfillDirectives","r","l","cssPolyfillCommentRe","exec","substring","hostRe","scopeSelector","shimAtHost","shimScoping","convertAtHostStyles","hostRuleRe","scopeHostCss","re","selectorReSuffix","findAtHostRules","selectorRe","scopeHostSelector","parts","is","match","hostElementRe","hostFixableRe","matcher","isHostRule","bind","cssRule","selectorText","CSSRule","WEBKIT_KEYFRAMES_RULE","convertScopedStyles","convertPseudos","scopeRules","cssPseudoRe","rule","propertiesFromRule","media","mediaText","strict","selectorNeedsScoping","applyStrictSelectorScope","applySimpleSelectorScope","matchScope","splits","scoped","attrName","sep","t","properties","templateContent","inTemplate","bootstrap","_content","frag","inObj","copyProperty","inName","inSource","inTarget","pd","getPropertyDescriptor","inObject","Function","args2","createDOM","inTagOrNode","inHTML","inAttrs","dom","add","DOMTokenList","toggle","bool","oldName","newName","ArraySlice","namedNodeMap","NamedNodeMap","MozNamedAttrMap","array","HTMLCollection","ArrayForEach","cb","performance","start","now","requestAnimationFrame","nativeRaf","webkitRequestAnimationFrame","mozRequestAnimationFrame","setTimeout","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","clearTimeout","Inspector","inspector","sinspect","inNode","inProxy","open","inspectorHTML","api","shadowize","inspect","crumbs","displayCrumbs","href","idx","onclick","drillable","proxy","blacklisted","STYLE","SCRIPT","#comment","TEMPLATE","blacklist","nodeName","inChildNodes","inIndent","indent","info","describe","ind","text","tag","Number","log","global","detectObjectObserve","gotSplice","deliverChangeRecords","isIndex","toNumber","isObject","areSameValue","left","right","numberIsNaN","isPathValid","pathRegExp","getPath","str","pathCache","Path","part","hasEval","getValueFrom","compiledGetValueFromFn","dirtyCheck","observer","cycles","MAX_DIRTY_CHECK_CYCLES","check","report","objectIsEmpty","diffIsEmpty","diff","added","changed","diffObjectFromOldObject","oldObject","newValue","isArray","copyObject","opt_copy","Observer","token","reporting","hasObserve","boundInternalCallback","internalCallback","valid","addToAll","connect","sync","collectObservers","allObservers","_allObserversCount","ObjectObserver","ArrayObserver","ObservedSet","arr","isObserved","PathObserver","pathString","notifyFunction","notifier","getNotifier","oldValue","changeRecord","notify","diffObjectFromChangeRecords","changeRecords","oldValues","knownRecordTypes","calcEditDistances","current","currentStart","currentEnd","oldStart","oldEnd","rowCount","columnCount","distances","north","west","spliceOperationsFromEditDistances","edits","min","northWest","EDIT_LEAVE","EDIT_UPDATE","EDIT_DELETE","EDIT_ADD","reverse","sharedPrefix","arr1","arr2","searchLength","sharedSuffix","index1","index2","newSplice","addedCount","calcSplices","prefixCount","suffixCount","minLength","splice","ops","splices","oldIndex","intersect","start1","end1","start2","end2","mergeSplice","inserted","insertionOffset","intersectCount","deleteCount","prepend","append","offset","createInitialSplices","JSON","stringify","projectArraySplices","f","isNaN","createObject","proto","newObject","identStart","identPart","ident","elementIndex","identOrElementIndex","toString","getValueFromObserved","observedSet","reset","cleanup","accessors","setValueFrom","testingResults","anyChanged","close","unobserved","deliver","reportArgs","_errorThrownDuringCallback","forceCollectObservers","runningMicrotaskCheckpoint","hasDebugForceFullDelivery","deliverAllChangeRecords","performMicrotaskCheckpoint","toCheck","clearObservers","property","unobserve","applySplices","previous","spliceArgs","addIndex","objProto","arrayProto","hard","getValueAtPath","setValueAtPath","new","updated","deleted","hasObjectObserve","calculateSplices","getTreeScope","isNodeInDocument","NodeBinding","model","closed","boundValueChanged","AttributeBinding","attributeName","conditional","removeAttribute","getEventForInputType","checkboxEventType","InputBinding","boundNodeValueToModel","nodeValueChanged","getAssociatedRadioButtons","radios","CheckedBinding","SelectedIndexBinding","isAttributeTemplate","semanticTemplateElements","hasAttribute","isTemplate","isNativeTemplate","hasTemplateElement","forAllTemplatesFrom","fn","subTemplates","allTemplatesSelectors","bootstrapTemplatesRecursivelyFrom","decorate","extractTemplateFromAttributeTemplate","attribs","attrib","templateAttributeDirectives","liftNonNativeTemplateChildrenIntoContent","useRoot","fixTemplateElementPrototype","hasProto","contentDescriptor","ensureSetModelScheduled","setModelFn","templateSetModelFnTable","addBindings","bindingDelegate","ensureScheduled","TemplateBinding","inputs","isSimpleBinding","tokens","parseMustacheTokens","startIndex","endIndex","bindOrDelegate","delegate","delegateBinding","delegateFunction","GET_BINDING","processBindings","bindings","bound","binding","setupBinding","newTokenCombinator","values","combinator","replacementBinding","CompoundBinding","scheduled","resolve","parseAttributeBindings","isTemplateNode","ifFound","bindFound","IF","BIND","REPEAT","getBindings","TemplateCloser","addMapBindings","templateRef","templateBindingDelegateTable","deepCloneIgnoreTemplateContent","createInstanceBindingMap","hasSubTemplate","childMap","TemplateInstance","firstNode","lastNode","addTemplateInstanceRecord","fragment","instanceRecord","templateInstanceTable","observers","size","combinator_","TemplateIterator","templateElement_","terminators","iteratedValue","arrayObserver","resolveInputs","Map","opt_this","documentElement","createBinding","unbind","unbindAll","sanitizeBoundValue","checkbox","first","postUpdateBinding","radio","checkedBinding","checked","HTMLInputElement","HTMLTextAreaElement","delaySetSelectedIndex","maxRetries","HTMLSelectElement","GET_INSTANCE_MODEL","repeat","ref","THEAD","TBODY","TFOOT","TH","TR","TD","COLGROUP","COL","CAPTION","OPTION","OPTGROUP","Runner","nextRunner","lastValue","scheduledIds","running","run","async","idExpando","nextId","runner","schedule","TypeError","templateContentsTable","templateInstanceRefTable","contentBindingMapTable","opt_instanceRef","templateIsDecorated_","bootstrapContents","liftContents","liftRoot","htmlElement","templateModelTable","iterator","templateIteratorTable","createInstance","instance","refId","treeScope","nextRef","templateInstance","scheduleResolve","pathValueChanged","suppressResolve","valueChanged","handleSplices","getTerminatorAt","terminator","subIterator","insertInstanceAt","instanceNodes","previousTerminator","insertBeforeNode","extractInstanceAt","getInstanceModel","instanceCache","removeDelta","actualModel","forAllTemplatesFrom_","condition","isDecimalDigit","ch","isWhiteSpace","fromCharCode","isLineTerminator","isIdentifierStart","isIdentifierPart","isKeyword","skipWhitespace","charCodeAt","getIdentifier","scanIdentifier","Token","Identifier","Keyword","NullLiteral","BooleanLiteral","range","scanPunctuator","code2","ch2","ch3","ch4","code","ch1","Punctuator","throwError","Messages","UnexpectedToken","scanNumericLiteral","number","NumericLiteral","parseFloat","scanStringLiteral","quote","octal","StringLiteral","isIdentifierName","advance","EOF","lex","lookahead","peek","pos","messageFormat","msg","whole","description","throwUnexpected","expect","matchKeyword","keyword","consumeSemicolon","parseArrayInitialiser","parseAssignmentExpression","createArrayExpression","parseObjectPropertyKey","createLiteral","createIdentifier","parseObjectProperty","createProperty","parseObjectInitialiser","createObjectExpression","parseGroupExpression","expr","parseExpression","parsePrimaryExpression","createThisExpression","parseArguments","parseNonComputedProperty","parseNonComputedMember","parseComputedMember","parseLeftHandSideExpressionAllowCall","createCallExpression","createMemberExpression","parsePostfixExpression","parseUnaryExpression","createUnaryExpression","binaryPrecedence","allowIn","prec","parseBinaryExpression","previousAllowIn","operator","state","createBinaryExpression","parseConditionalExpression","consequent","alternate","createConditionalExpression","parseEmptyStatement","createEmptyStatement","parseExpressionStatement","createExpressionStatement","parseStatement","labeledBody","Syntax","labelSet","Redeclaration","createLabeledStatement","parseSourceElement","parseSourceElements","sourceElement","sourceElements","parseProgram","createProgram","parse","inDelegate","valueOf","TokenName","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","EmptyStatement","ExpressionStatement","Literal","LabeledStatement","LogicalExpression","MemberExpression","ObjectExpression","Program","Property","ThisExpression","UnaryExpression","UnknownLabel","esprima","getNamedScopeBinding","expressionText","repeatPattern","bindPattern","pathPattern","getExpressionBinding","templateScopeTable","ASTDelegate","statements","labeledStatements","resolveFn","newLabeledResolve","paths","deps","labels","IdentPath","currentPath","notImplemented","ExpressionSyntax","capturedIdent","valueFn","unaryOperators","+","-","!","binaryOperators","*","/","%","<",">","<=",">=","==","!=","===","!==","&&","||","getFn","arg","statement","op","argument","accessor","kind","getBinding","scopeName","parentScope","group","groupEnd","__instanceCreated","CustomElements","upgradeAll","dirtyCheckPollInterval","setInterval","flush","isDocumentLink","elt","isLinkRel","IMPORT_LINK_TYPE","isStylesheetLink","STYLE_LINK_TYPE","rel","isScript","makeDocument","resource","url","_URL","baseURI","HTMLImports","loader","xhr","importer","documents","cache","preloadSelectors","inNext","Loader","loaded","load","inDocument","preload","filterMainDocumentNodes","extractTemplateNodes","addNodes","extra","l$","resolvePathsInHTML","import","ownerNode","__resource","resolvePathsInStylesheet","inOnLoad","inOnComplete","onload","oncomplete","inflight","pending","inNodes","require","checkDone","inElt","nodeUrl","__nodeUrl","dedupe","fetch","inUrl","tail","receiveXhr","err","receive","inErr","inResource","URL_ATTRS","URL_ATTRS_SELECTOR","URL_TEMPLATE_SEARCH","resolveUrl","getDocumentUrl","hrefOrSrc","documentUrlFromNode","URL","inBaseUrl","inRelativeToDocument","isAbsUrl","compressUrl","urlToPath","makeRelPath","unshift","resolveAttributes","resolveStyleElts","templates","inSheet","docUrl","resolveCssText","inRoot","inCssText","inMatch","urlPath","resolveNodeAttributes","ok","inRequest","status","next","nextContext","XMLHttpRequest","debug","bust","readyState","response","send","loadDocument","responseType","needsMainDocumentContext","inMainDocument","isElementElementChild","importParser","selectors","__importParsed","elts","parseLink","linkElt","parseGeneric","parseScript","scriptElt","moniker","floor","eval","parser","readyTime","scheduleCallback","scheduledObservers","isScheduled","setImmediate","dispatchCallbacks","sort","o1","o2","uid_","anyNonEmpty","queue","removeTransientObserversFor","callback_","nodes_","registrations","registrationsTable","registration","removeTransientObservers","forEachAncestorAndObserverEnqueueRecord","subtree","enqueue","JsMutationObserver","records_","uidCounter","attributeNamespace","copyMutationRecord","getRecord","currentRecord","getRecordWithOldValue","recordWithOldValue","clearRecords","recordRepresentsCurrentMutation","selectRecord","lastRecord","newRecord","Registration","transientObservedNodes","msSetImmediate","setImmediateQueue","sentinel","func","postMessage","childList","characterData","attributeOldValue","attributeFilter","characterDataOldValue","SyntaxError","removeListeners","addListeners","copyOfRecords","recordToReplaceLast","addListeners_","removeListeners_","addTransientObserver","namespace","attrChange","ADDITION","prevValue","changedNode","inOptions","definition","lifecycle","ancestry","extends","resolveTagName","resolvePrototypeChain","overrideAttributeApi","ctor","generateConstructor","ready","inExtends","inDefinition","baseTag","native","inst","instantiate","upgrade","domCreateElement","inElement","implement","__upgraded__","upgradeSubtree","customMixin","inSrc","inNative","used","readyCallback","changeAttribute","operation","attributeChangedCallback","inTag","upgradeElement","domCloneNode","hasNative","webkitRegister","nop","find","forSubtree","insertedNode","addedSubtree","addedNode","insertedCallback","__inserted","warn","removedNode","removedCallback","watchShadow","__watched","watchAllShadows","mx","u","observeDocument","upgradeDocument","parseElementElement","takeAttributes","archetype","executeComponentScript","refName","inDictionary","inScript","inContext","HTMLElementElement","inMore","__componentScript","inFunc","__parsed","parseImport","parseElement","inElementElt","elapsed","loadEvent","fns","inEl","canTarget","targetingShadow","olderShadow","os","se","allShadows","shadows","searchRoot","st","sr","ssr","findTarget","inEvent","targetFinding","PointerEventsPolyfill","attrib2css","h","PointerEvent","buttons","which","NEW_MOUSE_EVENT","HAS_BUTTONS","pressure","pointerId","width","height","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","ev","PointerMap","ids","pointers","inId","has","clear","thisArg","dispatcher","handledEvents","pointermap","eventMap","eventSources","eventSourceList","registerSource","newEvents","events","es","unregister","down","fireEvent","move","up","enter","leave","over","out","cancel","leaveOut","enterOver","eventHandler","listen","addEvent","unlisten","removeEvent","eventName","boundHandler","makeEvent","cloneEvent","eventCopy","getTarget","captureInfo","setCapture","inPointerId","releaseCapture","implicitRelease","asyncDispatchEvent","Installer","binder","addCallback","removeCallback","changedCallback","MO","mutationWatcher","toArray","SELECTOR","OBSERVER_INIT","watchSubtree","enableOnSubtree","installOnLoad","installNewSubtree","findElements","addElement","removeElement","elementChanged","concatLists","accum","isElement","flattenMutationTree","reduce","mutationHandler","DEDUP_DIST","mouseEvents","POINTER_ID","POINTER_TYPE","lastTouches","isEventSimulatedFromTouch","lts","dx","abs","dy","prepareEvent","mousedown","mousemove","mouseup","cleanupMouse","mouseover","mouseout","INSTALLER","touchMap","DEDUP_TIMEOUT","ATTRIB","HAS_TOUCH_ACTION","touchAction","touchEvents","scrollType","elementAdded","touchActionToScrollType","elementRemoved","touchActiontoScrollType","oldSt","scrollTypes","EMITTER","XSCROLLER","YSCROLLER","SCROLLER","firstTouch","isPrimaryTouch","inTouch","identifier","setPrimaryTouch","firstXY","X","Y","scrolling","removePrimaryTouch","touchToPointer","webkitRadiusX","radiusX","webkitRadiusY","radiusY","webkitForce","processTouches","inFunction","tl","changedTouches","shouldScroll","ret","scrollAxis","oa","da","doa","findTouch","inTL","vacuumTouches","touches","cancelOut","touchstart","dedupSynthMouse","overDown","inPointer","outTarget","touchmove","touchcancel","moveOverOut","pointer","outEvent","touchend","upOut","cleanUpPointer","lt","HAS_BITMAP_TYPE","MSPointerEvent","MSPOINTER_TYPE_MOUSE","msEvents","POINTER_TYPES","MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSLostPointerCapture","MSGotPointerCapture","pointerEnabled","msPointerEnabled","tp","msMaxTouchPoints","ontouchstart","assertDown","msSetPointerCapture","msReleasePointerCapture","setPointerCapture","releasePointerCapture","tapPrevented","utils","LCA","adepth","depth","bdepth","walk","findLCA","PointerGestures","handlers","recognizers","registerRecognizer","inRecognizer","addHandler","inFn","registerTarget","unregisterTarget","makeQueue","inHandlerFns","runQueue","inHandlers","currentPointerId","inEvents","inEventName","inEventHandler","inCapture","tap","inScope","pe","hold","HOLD_DELAY","WIGGLE_THRESHOLD","heldPointer","holdJob","pulse","timeStamp","held","fireHold","clearInterval","pointerdown","pointerup","pointercancel","pointermove","inHoldTime","holdTime","clampDir","inDelta","calcPositionDelta","inA","inB","pageX","pageY","fireTrack","inTrackingData","downEvent","dd","lastMoveEvent","xDirection","yDirection","trackData","ddx","ddy","trackInfo","_releaseTarget","downTarget","tracking","flick","MIN_VELOCITY","MAX_QUEUE","moveQueue","addMove","fireFlick","dt","tx","ty","tv","sqrt","ma","calcAngle","xVelocity","yVelocity","velocity","angle","majorAxis","inX","inY","atan2","PI"],"mappings":"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"} \ No newline at end of file diff --git a/libs/polymer/platform.native.min.js b/libs/polymer/platform.native.min.js deleted file mode 100644 index eced67f3e..000000000 --- a/libs/polymer/platform.native.min.js +++ /dev/null @@ -1,33 +0,0 @@ -// Copyright (c) 2012 The Polymer Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -function PointerGestureEvent(a,b){var c=b||{},d=document.createEvent("Event"),e={bubbles:!0,cancelable:!0};return Object.keys(e).forEach(function(a){a in c&&(e[a]=c[a])}),d.initEvent(a,e.bubbles,e.cancelable),Object.keys(c).forEach(function(a){d[a]=b[a]}),d.preventTap=this.preventTap,d}var SideTable;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0?SideTable=WeakMap:function(){var a=Object.defineProperty,b=Object.hasOwnProperty,c=(new Date).getTime()%1e9;SideTable=function(){this.name="__st"+(1e9*Math.random()>>>0)+(c++ +"__")},SideTable.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}(),function(){window.templateContent=window.templateContent||function(a){return a.content},window.wrap=window.unwrap=function(a){return a},Object.defineProperties(HTMLElement.prototype,{shadowRoot:{get:function(){return this.webkitShadowRoot}},createShadowRoot:{value:function(){return this.webkitCreateShadowRoot()}}}),window.templateContent=function(a){if(window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(a),!a.content&&!a._content){for(var b=document.createDocumentFragment();a.firstChild;)b.appendChild(a.firstChild);a._content=b}return a.content||a._content}}(),function(a){function b(a){for(var b=a||{},d=1;d",""," "," ShadowDOM Inspector"," "," "," ",'
    ',"
",'
'," ",""].join("\n"),d=[],e=function(){var a=b.document,c=a.querySelector("#crumbs");c.textContent="";for(var e,g=0;e=d[g];g++){var h=a.createElement("a");h.href="#",h.textContent=e.localName,h.idx=g,h.onclick=function(a){for(var b;d.length>this.idx;)b=d.pop();f(b.shadow||b,b),a.preventDefault()},c.appendChild(a.createElement("li")).appendChild(h)}},f=function(a,c){var f=b.document;k=[];var g=c||a;d.push(g),e(),f.body.querySelector("#tree").innerHTML="
"+j(a,a.childNodes)+"
"},g=Array.prototype.forEach.call.bind(Array.prototype.forEach),h={STYLE:1,SCRIPT:1,"#comment":1,TEMPLATE:1},i=function(a){return h[a.nodeName]},j=function(a,b,c){if(i(a))return"";var d=c||"";if(a.localName||11==a.nodeType){var e=a.localName||"shadow-root",f=d+l(a);"content"==e&&(b=a.getDistributedNodes()),f+="
";var h=d+"  ";g(b,function(a){f+=j(a,a.childNodes,h)}),f+=d,{br:1}[e]||(f+="</"+e+">",f+="
")}else{var k=a.textContent.trim();f=k?d+'"'+k+'"'+"
":""}return f},k=[],l=function(a){var b="<",c=a.localName||"shadow-root";return a.webkitShadowRoot||a.shadowRoot?(b+=' ",k.push(a)):b+=c||"shadow-root",a.attributes&&g(a.attributes,function(a){b+=" "+a.name+(a.value?'="'+a.value+'"':"")}),b+=">"};shadowize=function(){var a=Number(this.attributes.idx.value),b=k[a];b?f(b.webkitShadowRoot||b.shadowRoot,b):(console.log("bad shadowize node"),console.dir(this))},a.output=j}(window.Inspector),function(a){"use strict";function b(){function a(a){"splice"===a[0].type&&"splice"===a[1].type&&(b=!0)}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=!1,c=[0];return Array.observe(c,a),c[1]=1,c.length=0,Object.deliverChangeRecords(a),b}function c(a){return+a===a>>>0}function d(a){return+a}function e(a){return a===Object(a)}function f(a,b){return a===b?0!==a||1/a===1/b:K(a)&&K(b)?!0:a!==a&&b!==b}function g(a){return"string"!=typeof a?!1:(a=a.replace(/\s/g,""),""==a?!0:"."==a[0]?!1:S.test(a))}function h(a){var b=T[a];if(b)return b;if(g(a)){var b=new i(a);return T[a]=b,b}}function i(a){return""==a.trim()?this:c(a)?(this.push(String(a)),this):(a.split(/\./).filter(function(a){return a}).forEach(function(a){this.push(a)},this),H&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn()),void 0)}function j(a){for(var b=0;U>b&&a.check();)a.report(),b++}function k(a){for(var b in a)return!1;return!0}function l(a){return k(a.added)&&k(a.removed)&&k(a.changed)}function m(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function n(a,b){var c=b||(Array.isArray(a)?[]:{});for(var d in a)c[d]=a[d];return Array.isArray(a)&&(c.length=a.length),c}function o(a,b,c,d){this.object=a,this.callback=b,this.target=c,this.token=d,this.reporting=!0,G&&(this.boundInternalCallback=this.internalCallback.bind(this)),this.valid=!0,p(this),this.connect(),this.sync(!0)}function p(a){W&&(V.push(a),o._allObserversCount++)}function q(a,b,c,d){o.call(this,a,b,c,d)}function r(a,b,c,d){if(!Array.isArray(a))throw Error("Provided object is not an Array");o.call(this,a,b,c,d)}function s(a){this.arr=[],this.callback=a,this.isObserved=!0}function t(a,b,c,d,f){this.value=void 0;var g=h(b);if(g)return g.length?(e(a)&&(this.path=g,o.call(this,a,c,d,f)),void 0):(this.value=a,void 0)}function u(a,b){if("function"==typeof Object.observe){var c=Object.getNotifier(a);return function(d,e){var f={object:a,type:d,name:b};2===arguments.length&&(f.oldValue=e),c.notify(f)}}}function v(a,b,c){for(var d={},e={},f=0;fj;j++)i[j]=new Array(h),i[j][0]=j;for(var k=0;h>k;k++)i[0][k]=k;for(var j=1;g>j;j++)for(var k=1;h>k;k++)if(d[e+j-1]===a[b+k-1])i[j][k]=i[j-1][k-1];else{var l=i[j-1][k]+1,m=i[j][k-1]+1;i[j][k]=m>l?l:m}return i}function x(a){for(var b=a.length-1,c=a[0].length-1,d=a[b][c],e=[];b>0||c>0;)if(0!=b)if(0!=c){var f,g=a[b-1][c-1],h=a[b-1][c],i=a[b][c-1];f=i>h?g>h?h:g:g>i?i:g,f==g?(g==d?e.push(ab):(e.push(bb),d=g),b--,c--):f==h?(e.push(db),b--,d=h):(e.push(cb),c--,d=i)}else e.push(db),b--;else e.push(cb),c--;return e.reverse(),e}function y(a,b,c){for(var d=0;c>d;d++)if(a[d]!==b[d])return d;return c}function z(a,b,c){for(var d=a.length,e=b.length,f=0;c>f&&a[--d]===b[--e];)f++;return f}function A(a,b,c){return{index:a,removed:b,addedCount:c}}function B(a,b,c,d,e,f){var g=0,h=0,i=Math.min(c-b,f-e);if(0==b&&0==e&&(g=y(a,d,i)),c==a.length&&f==d.length&&(h=z(a,d,i-g)),b+=g,e+=g,c-=h,f-=h,0==c-b&&0==f-e)return[];if(b==c){for(var j=A(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[A(b,[],c-b)];for(var k=x(w(a,b,c,d,e,f)),j=void 0,l=[],m=b,n=e,o=0;ob||a>d?-1:b==c||d==a?0:c>a?d>b?b-c:d-c:b>d?d-a:b-a}function D(a,b,c,d){for(var e=A(b,c,d),f=!1,g=0,h=0;h=0){a.splice(h,1),h--,g-=i.addedCount-i.removed.length,e.addedCount+=i.addedCount-j;var k=e.removed.length+i.removed.length-j;if(e.addedCount||k){var c=i.removed;if(e.indexi.index+i.addedCount){var m=e.removed.slice(i.index+i.addedCount-e.index);Array.prototype.push.apply(c,m)}e.removed=c,i.indexh)continue;D(e,h,[g.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(g))}}return e}function F(a,b){var c=[];return E(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?(b.removed[0]!==a[b.index]&&c.push(b),void 0):(c=c.concat(B(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)),void 0)}),c}var G=b(),H=!1;try{var I=new Function("","return true;");H=I()}catch(J){}var K=a.Number.isNaN||function(b){return"number"==typeof b&&a.isNaN(b)},L="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},M="[$_a-zA-Z]",N="[$_a-zA-Z0-9]",O=M+"+"+N+"*",P="(?:[0-9]|[1-9]+[0-9]+)",Q="(?:"+O+"|"+P+")",R="(?:"+Q+")(?:\\."+Q+")*",S=new RegExp("^"+R+"$"),T={};i.prototype=L({__proto__:[],toString:function(){return this.join(".")},getValueFrom:function(a){for(var b=0;ba&&b.anyChanged);o._allObserversCount=V.length,X=!1}}},W&&(a.Platform.clearObservers=function(){V=[]}),q.prototype=L({__proto__:o.prototype,connect:function(){G&&Object.observe(this.object,this.boundInternalCallback)},sync:function(){G||(this.oldObject=n(this.object))},check:function(a){var b,c;if(G){if(!a)return!1;c={},b=v(this.object,a,c)}else c=this.oldObject,b=m(this.object,this.oldObject);return l(b)?!1:(this.reportArgs=[b.added||{},b.removed||{},b.changed||{}],this.reportArgs.push(function(a){return c[a]}),!0)},disconnect:function(){G?this.object&&Object.unobserve(this.object,this.boundInternalCallback):this.oldObject=void 0}}),r.prototype=L({__proto__:q.prototype,connect:function(){G&&Array.observe(this.object,this.boundInternalCallback)},sync:function(){G||(this.oldObject=this.object.slice())},check:function(a){var b;if(G){if(!a)return!1;b=F(this.object,a)}else b=B(this.object,0,this.object.length,this.oldObject,0,this.oldObject.length);return b&&b.length?(this.reportArgs=[b],!0):!1}}),r.applySplices=function(a,b,c){c.forEach(function(c){for(var d=[c.index,c.removed.length],e=c.index;e=0&&this.arr[b+1]===this.isObserved||(0>b&&(b=this.arr.length,this.arr[b]=a,Object.observe(a,this.callback)),this.arr[b+1]=this.isObserved,this.observe(Object.getPrototypeOf(a)))}},cleanup:function(){for(var a=0,b=0,c=this.isObserved;ba&&(this.arr[a]=d,this.arr[a+1]=c),a+=2):Object.unobserve(d,this.callback),b+=2}this.arr.length=a}},t.prototype=L({__proto__:o.prototype,connect:function(){G&&(this.observedSet=new s(this.boundInternalCallback))},disconnect:function(){this.value=void 0,G&&(this.observedSet.reset(),this.observedSet.cleanup(),this.observedSet=void 0)},check:function(){return this.value=G?this.path.getValueFromObserved(this.object,this.observedSet):this.path.getValueFrom(this.object),f(this.value,this.oldValue)?!1:(this.reportArgs=[this.value,this.oldValue],!0)},sync:function(a){a&&(this.value=G?this.path.getValueFromObserved(this.object,this.observedSet):this.path.getValueFrom(this.object)),this.oldValue=this.value}}),t.getValueAtPath=function(a,b){var c=h(b);if(c)return c.getValueFrom(a)},t.setValueAtPath=function(a,b,c){var d=h(b);d&&d.setValueFrom(a,c)};var _={"new":!0,updated:!0,deleted:!0};t.defineProperty=function(a,b,c){var d=c.object,e=h(c.path),f=u(a,b),g=new t(d,c.path,function(a,b){f&&f("updated",b)});return Object.defineProperty(a,b,{get:function(){return e.getValueFrom(d)},set:function(a){e.setValueFrom(d,a)},configurable:!0}),{close:function(){var c=e.getValueFrom(d);f&&g.deliver(),g.close(),Object.defineProperty(a,b,{value:c,writable:!0,configurable:!0})}}};var ab=0,bb=1,cb=2,db=3;a.Observer=o,a.Observer.hasObjectObserve=G,a.ArrayObserver=r,a.ArrayObserver.calculateSplices=function(a,b){return B(a,0,a.length,b,0,b.length)},a.ObjectObserver=q,a.PathObserver=t,a.Path=i}(this),function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a){for(;a.parentNode;)a=a.parentNode;return"function"==typeof a.getElementById?a:null}function d(a){return a.ownerDocument.contains(a)}function e(a,b,c,d){this.closed=!1,this.node=a,this.property=b,this.model=c,this.path=d,this.observer=new PathObserver(c,d,this.boundValueChanged,this),this.boundValueChanged(this.value)}function f(a,b,c,d){this.conditional="?"==b[b.length-1],this.conditional&&(a.removeAttribute(b),b=b.slice(0,-1)),e.call(this,a,b,c,d)}function g(a){switch(a.type){case"checkbox":return T;case"radio":case"select-multiple":case"select-one":return"change";default:return"input"}}function h(a,b,c,d){e.call(this,a,b,c,d),this.eventType=g(this.node),this.boundNodeValueToModel=this.nodeValueChanged.bind(this),this.node.addEventListener(this.eventType,this.boundNodeValueToModel,!0)}function i(a){if(!d(a))return[];if(a.form)return Q(a.form.elements,function(b){return b!=a&&"INPUT"==b.tagName&&"radio"==b.type&&b.name==a.name});var b=a.ownerDocument.querySelectorAll('input[type="radio"][name="'+a.name+'"]');return Q(b,function(b){return b!=a&&!b.form})}function j(a,b,c){h.call(this,a,"checked",b,c)}function k(a,b,c){h.call(this,a,"selectedIndex",b,c)}function l(a){return $[a.tagName]&&a.hasAttribute("template")}function m(a){return"TEMPLATE"==a.tagName||l(a)}function n(a){return _&&"TEMPLATE"==a.tagName}function o(a,b){var c=a.querySelectorAll(ab);m(a)&&b(a),P(c,b)}function p(a){function b(a){HTMLTemplateElement.decorate(a)||p(a.content)}o(a,b)}function q(a,b){Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))})}function r(a){if(!a.defaultView)return a;var b=eb.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);eb.set(a,b)}return b}function s(a){var b=a.ownerDocument.createElement("template");a.parentNode.insertBefore(b,a);for(var c=a.attributes,d=c.length;d-->0;){var e=c[d];Z[e.name]&&("template"!==e.name&&b.setAttribute(e.name,e.value),a.removeAttribute(e.name))}return b}function t(a,b,c){var d=a.content;if(c)return d.appendChild(b),void 0;for(var e;e=b.firstChild;)d.appendChild(e)}function u(a){"TEMPLATE"===a.tagName?_||(cb?a.__proto__=HTMLTemplateElement.prototype:q(a,HTMLTemplateElement.prototype)):(q(a,HTMLTemplateElement.prototype),Object.defineProperty(a,"content",ib))}function v(a){var b=lb.get(a);b||(b=function(){H(a,a.model,a.bindingDelegate)},lb.set(a,b)),bb(b)}function w(a,b,c,d){this.closed=!1,this.node=a,this.property=b,this.model=c,this.path=d,this.node.inputs.bind(this.property,c,d||"")}function x(a){return 3==a.length&&0==a[0].length&&0==a[2].length}function y(a){if(a&&a.length){for(var b,c=a.length,d=0,e=0,f=0;c>e;){if(d=a.indexOf("{{",e),f=0>d?-1:a.indexOf("}}",d+2),0>f){if(!b)return;b.push(a.slice(e));break}b=b||[],b.push(a.slice(e,d)),b.push(a.slice(d+2,f).trim()),e=f+2}return e===c&&b.push(""),b}}function z(a,b,c,d,e){var f,g=e&&e[X];return g&&"function"==typeof g&&(f=g(c,d,b,a),f&&(c=f,d="value")),a.bind(b,c,d)}function A(a,b,c,d,e){for(var f=0;fc?(this.keys.push(a),this.values.push(b)):this.values[c]=b},get:function(a){var b=this.keys.indexOf(a);if(!(0>b))return this.values[b]},"delete":function(a){var b=this.keys.indexOf(a);return 0>b?!1:(this.keys.splice(b,1),this.values.splice(b,1),!0)},forEach:function(a,b){for(var c=0;c>>0)+(c++ +"__")},S.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}(),Node.prototype.bind=function(a,b,c){this.bindings=this.bindings||{};var d=this.bindings[a];return d&&d.close(),d=this.createBinding(a,b,c),this.bindings[a]=d,d?d:(console.error("Unhandled binding to Node: ",this,a,b,c),void 0)},Node.prototype.createBinding=function(){},Node.prototype.unbind=function(a){if(this.bindings){var b=this.bindings[a];b&&(b.close(),delete this.bindings[a])}},Node.prototype.unbindAll=function(){if(this.bindings){for(var a=Object.keys(this.bindings),b=0;be.node.length&&d--?bb(b):e.node[e.property]=c}var c=Number(a);if(c<=this.node.length)return this.node[this.property]=c,void 0;var d=2,e=this;bb(b)}}),HTMLSelectElement.prototype.createBinding=function(a,b,c){return"selectedindex"===a.toLowerCase()?(this.removeAttribute(a),new k(this,b,c)):HTMLElement.prototype.createBinding.call(this,a,b,c)};var U="bind",V="repeat",W="if",X="getBinding",Y="getInstanceModel",Z={template:!0,repeat:!0,bind:!0,ref:!0},$={THEAD:!0,TBODY:!0,TFOOT:!0,TH:!0,TR:!0,TD:!0,COLGROUP:!0,COL:!0,CAPTION:!0,OPTION:!0,OPTGROUP:!0},_="undefined"!=typeof HTMLTemplateElement,ab="template, "+Object.keys($).map(function(a){return a.toLowerCase()+"[template]"}).join(", "),bb=function(){function a(a){this.nextRunner=a,this.value=!1,this.lastValue=this.value,this.scheduled=[],this.scheduledIds=[],this.running=!1,this.observer=new PathObserver(this,"value",this.run,this)}function b(a){var b=a[e];a[e]||(b=d++,a[e]=b),c.schedule(a,b)}a.prototype={schedule:function(a,b){if(!this.scheduledIds[b]){if(this.running)return this.nextRunner.schedule(a,b);this.scheduledIds[b]=!0,this.scheduled.push(a),this.lastValue===this.value&&(this.value=!this.value)}},run:function(){this.running=!0;for(var a=0;a=48&&57>=a}function d(a){return 32===a||9===a||11===a||12===a||160===a||a>=5760&&" ᠎              ".indexOf(String.fromCharCode(a))>0}function e(a){return 10===a||13===a||8232===a||8233===a}function f(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a}function g(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a||a>=48&&57>=a}function h(a){return"this"===a}function i(){for(;bb>ab&&d(_.charCodeAt(ab));)++ab}function j(){var a,b;for(a=ab++;bb>ab&&(b=_.charCodeAt(ab),g(b));)++ab;return _.slice(a,ab)}function k(){var a,b,c;return a=ab,b=j(),c=1===b.length?X.Identifier:h(b)?X.Keyword:"null"===b?X.NullLiteral:"true"===b||"false"===b?X.BooleanLiteral:X.Identifier,{type:c,value:b,range:[a,ab]}}function l(){var a,b,c,d,e=ab,f=_.charCodeAt(ab),g=_[ab];switch(f){case 46:case 40:case 41:case 59:case 44:case 123:case 125:case 91:case 93:case 58:case 63:case 126:return++ab,{type:X.Punctuator,value:String.fromCharCode(f),range:[e,ab]};default:if(a=_.charCodeAt(ab+1),61===a)switch(f){case 37:case 38:case 42:case 43:case 45:case 47:case 60:case 62:case 94:case 124:return ab+=2,{type:X.Punctuator,value:String.fromCharCode(f)+String.fromCharCode(a),range:[e,ab]};case 33:case 61:return ab+=2,61===_.charCodeAt(ab)&&++ab,{type:X.Punctuator,value:_.slice(e,ab),range:[e,ab]}}}return b=_[ab+1],c=_[ab+2],d=_[ab+3],">"===g&&">"===b&&">"===c&&"="===d?(ab+=4,{type:X.Punctuator,value:">>>=",range:[e,ab]}):">"===g&&">"===b&&">"===c?(ab+=3,{type:X.Punctuator,value:">>>",range:[e,ab]}):"<"===g&&"<"===b&&"="===c?(ab+=3,{type:X.Punctuator,value:"<<=",range:[e,ab]}):">"===g&&">"===b&&"="===c?(ab+=3,{type:X.Punctuator,value:">>=",range:[e,ab]}):g===b&&"+-<>&|".indexOf(g)>=0?(ab+=2,{type:X.Punctuator,value:g+b,range:[e,ab]}):"<>=!+-*%&|^/".indexOf(g)>=0?(++ab,{type:X.Punctuator,value:g,range:[e,ab]}):(s({},$.UnexpectedToken,"ILLEGAL"),void 0)}function m(){var a,d,e;if(e=_[ab],b(c(e.charCodeAt(0))||"."===e,"Numeric literal must start with a decimal digit or a decimal point"),d=ab,a="","."!==e){for(a=_[ab++],e=_[ab],"0"===a&&e&&c(e.charCodeAt(0))&&s({},$.UnexpectedToken,"ILLEGAL");c(_.charCodeAt(ab));)a+=_[ab++];e=_[ab]}if("."===e){for(a+=_[ab++];c(_.charCodeAt(ab));)a+=_[ab++];e=_[ab]}if("e"===e||"E"===e)if(a+=_[ab++],e=_[ab],("+"===e||"-"===e)&&(a+=_[ab++]),c(_.charCodeAt(ab)))for(;c(_.charCodeAt(ab));)a+=_[ab++];else s({},$.UnexpectedToken,"ILLEGAL");return f(_.charCodeAt(ab))&&s({},$.UnexpectedToken,"ILLEGAL"),{type:X.NumericLiteral,value:parseFloat(a),range:[d,ab]}}function n(){var a,c,d,f="",g=!1;for(a=_[ab],b("'"===a||'"'===a,"String literal must starts with a quote"),c=ab,++ab;bb>ab;){if(d=_[ab++],d===a){a="";break}if("\\"===d)if(d=_[ab++],d&&e(d.charCodeAt(0)))"\r"===d&&"\n"===_[ab]&&++ab;else switch(d){case"n":f+="\n";break;case"r":f+="\r";break;case"t":f+=" ";break;case"b":f+="\b";break;case"f":f+="\f";break;case"v":f+=" ";break;default:f+=d}else{if(e(d.charCodeAt(0)))break;f+=d}}return""!==a&&s({},$.UnexpectedToken,"ILLEGAL"),{type:X.StringLiteral,value:f,octal:g,range:[c,ab]}}function o(a){return a.type===X.Identifier||a.type===X.Keyword||a.type===X.BooleanLiteral||a.type===X.NullLiteral}function p(){var a;return i(),ab>=bb?{type:X.EOF,range:[ab,ab]}:(a=_.charCodeAt(ab),40===a||41===a||58===a?l():39===a||34===a?n():f(a)?k():46===a?c(_.charCodeAt(ab+1))?m():l():c(a)?m():l())}function q(){var a;return a=db,ab=a.range[1],db=p(),ab=a.range[1],a}function r(){var a;a=ab,db=p(),ab=a}function s(a,c){var d,e=Array.prototype.slice.call(arguments,2),f=c.replace(/%(\d)/g,function(a,c){return b(cab&&(a.push(O()),!v(")"));)u(",");return u(")"),a}function F(){var a;return a=q(),o(a)||t(a),cb.createIdentifier(a.value)}function G(){return u("."),F()}function H(){var a;return u("["),a=P(),u("]"),a}function I(){var a,b,c;for(a=D();v(".")||v("[")||v("(");)v("(")?(b=E(),a=cb.createCallExpression(a,b)):v("[")?(c=H(),a=cb.createMemberExpression("[",a,c)):(c=G(),a=cb.createMemberExpression(".",a,c));return a}function J(){var a;return a=I(),db.type===X.Punctuator&&(v("++")||v("--"))&&s({},$.UnexpectedToken),a}function K(){var a,b;return db.type!==X.Punctuator&&db.type!==X.Keyword?b=J():v("++")||v("--")?s({},$.UnexpectedToken):v("+")||v("-")||v("~")||v("!")?(a=q(),b=K(),b=cb.createUnaryExpression(a.value,b)):w("delete")||w("void")||w("typeof")?s({},$.UnexpectedToken):b=J(),b}function L(a,b){var c=0;if(a.type!==X.Punctuator&&a.type!==X.Keyword)return 0;switch(a.value){case"||":c=1;break;case"&&":c=2;break;case"|":c=3;break;case"^":c=4;break;case"&":c=5;break;case"==":case"!=":case"===":case"!==":c=6;break;case"<":case">":case"<=":case">=":case"instanceof":c=7;break;case"in":c=b?7:0;break;case"<<":case">>":case">>>":c=8;break;case"+":case"-":c=9;break;case"*":case"/":case"%":c=11}return c}function M(){var a,b,c,d,e,f,g,h,i;if(d=eb.allowIn,eb.allowIn=!0,h=K(),b=db,c=L(b,d),0===c)return h;for(b.prec=c,q(),f=K(),e=[h,b,f];(c=L(db,d))>0;){for(;e.length>2&&c<=e[e.length-2].prec;)f=e.pop(),g=e.pop().value,h=e.pop(),a=cb.createBinaryExpression(g,h,f),e.push(a);b=q(),b.prec=c,e.push(b),a=K(),e.push(a)}for(eb.allowIn=d,i=e.length-1,a=e[i];i>1;)a=cb.createBinaryExpression(e[i-1].value,e[i-2],a),i-=2;return a}function N(){var a,b,c,d;return a=M(),v("?")&&(q(),b=eb.allowIn,eb.allowIn=!0,c=O(),eb.allowIn=b,u(":"),d=O(),a=cb.createConditionalExpression(a,c,d)),a}function O(){var a,b,c;return a=db,c=b=N()}function P(){var a;return a=O()}function Q(){return u(";"),cb.createEmptyStatement()}function R(){var a=P();return x(),cb.createExpressionStatement(a)}function S(){var a,b,c,d=db.type;if(d===X.EOF&&t(db),i(),d===X.Punctuator)switch(db.value){case";":return Q();case"(":return R()}return a=P(),a.type===Z.Identifier&&v(":")?(q(),c="$"+a.name,Object.prototype.hasOwnProperty.call(eb.labelSet,c)&&s({},$.Redeclaration,"Label",a.name),eb.labelSet[c]=!0,b=S(),delete eb.labelSet[c],cb.createLabeledStatement(a,b)):(x(),cb.createExpressionStatement(a))}function T(){return db.type===X.Keyword?S():db.type!==X.EOF?S():void 0}function U(){for(var a,b=[];bb>ab&&(a=T(),"undefined"!=typeof a);)b.push(a);return b}function V(){var a;return i(),r(),a=U(),cb.createProgram(a)}function W(a,b){var c;return c=String,"string"==typeof a||a instanceof String||(a=c(a)),cb=b,_=a,ab=0,bb=_.length,db=null,eb={allowIn:!0,labelSet:{}},bb>0&&"undefined"==typeof _[0]&&a instanceof String&&(_=a.valueOf()),V()}var X,Y,Z,$,_,ab,bb,cb,db,eb;X={BooleanLiteral:1,EOF:2,Identifier:3,Keyword:4,NullLiteral:5,NumericLiteral:6,Punctuator:7,StringLiteral:8},Y={},Y[X.BooleanLiteral]="Boolean",Y[X.EOF]="",Y[X.Identifier]="Identifier",Y[X.Keyword]="Keyword",Y[X.NullLiteral]="Null",Y[X.NumericLiteral]="Numeric",Y[X.Punctuator]="Punctuator",Y[X.StringLiteral]="String",Z={ArrayExpression:"ArrayExpression",BinaryExpression:"BinaryExpression",CallExpression:"CallExpression",ConditionalExpression:"ConditionalExpression",EmptyStatement:"EmptyStatement",ExpressionStatement:"ExpressionStatement",Identifier:"Identifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",ObjectExpression:"ObjectExpression",Program:"Program",Property:"Property",ThisExpression:"ThisExpression",UnaryExpression:"UnaryExpression"},$={UnexpectedToken:"Unexpected token %0",UnknownLabel:"Undefined label '%0'",Redeclaration:"%0 '%1' has already been declared"},a.esprima={parse:W}}(this),function(a){"use strict";function b(a,b,d,e){if(e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.tagName&&("bind"===d||"repeat"===d)){var f,g,h=b.match(r);if(h?(f=h[1],g=h[2]):(h=b.match(s),h&&(f=h[2],g=h[1])),h){var i;if(g=g.trim(),g.match(q))i=new CompoundBinding(function(a){return a.path}),i.bind("path",a,g);else try{i=c(a,g)}catch(j){console.error("Invalid expression syntax: "+g,j)}if(i)return t.set(e,f),i}}}function c(a,b){try{var c=new f;if(esprima.parse(b,c),!c.statements.length&&!c.labeledStatements.length)return;if(!c.labeledStatements.length&&c.statements.length>1)throw Error("Multiple unlabelled statements are not allowed.");var e=c.labeledStatements.length?d(c.labeledStatements):e=c.statements[0],g=[];for(var h in c.deps)g.push(h);if(!g.length)return{value:e({})};for(var i=new CompoundBinding(e),j=0;j>>0)+(c++ +"__")},i.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}();var j="[$_a-zA-Z]",k="[$_a-zA-Z0-9]",l=j+"+"+k+"*",m="("+l+")",n="(?:[0-9]|[1-9]+[0-9]+)",o="(?:"+l+"|"+n+")",p="(?:"+o+")(?:\\."+o+")*",q=new RegExp("^"+p+"$"),r=new RegExp("^"+m+"\\s* in (.*)$"),s=new RegExp("^(.*) as \\s*"+m+"$"),t=new i;e.prototype={getPath:function(){return this.last?this.last.getPath()+"."+this.name:this.name},valueFn:function(){var a=this.getPath();return this.deps[a]=!0,function(b){return b[a]}}};var u={"+":function(a){return+a},"-":function(a){return-a},"!":function(a){return!a}},v={"+":function(a,b){return a+b},"-":function(a,b){return a-b},"*":function(a,b){return a*b},"/":function(a,b){return a/b},"%":function(a,b){return a%b},"<":function(a,b){return b>a},">":function(a,b){return a>b},"<=":function(a,b){return b>=a},">=":function(a,b){return a>=b},"==":function(a,b){return a==b},"!=":function(a,b){return a!=b},"===":function(a,b){return a===b},"!==":function(a,b){return a!==b},"&&":function(a,b){return a&&b},"||":function(a,b){return a||b}};f.prototype={getFn:function(a){return a instanceof e?a.valueFn():a},createProgram:function(){},createExpressionStatement:function(a){return this.statements.push(a),a},createLabeledStatement:function(a,b){return this.labeledStatements.push({label:a.getPath(),body:b instanceof e?b.valueFn():b}),b},createUnaryExpression:function(a,b){if(!u[a])throw Error("Disallowed operator: "+a);return b=this.getFn(b),function(c){return u[a](b(c))}},createBinaryExpression:function(a,b,c){if(!v[a])throw Error("Disallowed operator: "+a);return b=this.getFn(b),c=this.getFn(c),function(d){return v[a](b(d),c(d))}},createConditionalExpression:function(a,b,c){return a=this.getFn(a),b=this.getFn(b),c=this.getFn(c),function(d){return a(d)?b(d):c(d)}},createIdentifier:function(a){var b=new e(this.deps,a);return b.type="Identifier",b},createMemberExpression:function(a,b,c){return new e(this.deps,c.name,b)},createLiteral:function(a){return function(){return a.value}},createArrayExpression:function(a){for(var b=0;be;e++)d.unshift("..");var g=d.join("/");return g},resolvePathsInHTML:function(a,b){b=b||p.documentUrlFromNode(a),p.resolveAttributes(a,b),p.resolveStyleElts(a,b);var c=a.querySelectorAll("template");c&&q(c,function(a){a.content&&p.resolvePathsInHTML(a.content,b)})},resolvePathsInStylesheet:function(a){var b=p.nodeUrl(a);a.__resource=p.resolveCssText(a.__resource,b)},resolveStyleElts:function(a,b){var c=a.querySelectorAll("style");c&&q(c,function(a){a.textContent=p.resolveCssText(a.textContent,b)})},resolveCssText:function(a,b){return a.replace(/url\([^)]*\)/g,function(a){var c=a.replace(/["']/g,"").slice(4,-1);return c=p.resolveUrl(b,c,!0),"url("+c+")"})},resolveAttributes:function(a,b){var c=a&&a.querySelectorAll(n);c&&q(c,function(a){this.resolveNodeAttributes(a,b)},this)},resolveNodeAttributes:function(a,b){m.forEach(function(c){var d=a.attributes[c];if(d&&d.value&&d.value.search(o)<0){var e=p.resolveUrl(b,d.value,!0);d.value=e}})}};h=h||{async:!0,ok:function(a){return a.status>=200&&a.status<300||304===a.status||0===a.status},load:function(b,c,d){var e=new XMLHttpRequest;return(a.flags.debug||a.flags.bust)&&(b+="?"+Math.random()),e.open("GET",b,h.async),e.addEventListener("readystatechange",function(){4===e.readyState&&c.call(d,!h.ok(e)&&e,e.response,b)}),e.send(),e},loadDocument:function(a,b,c){this.load(a,b,c).responseType="document"}};var q=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.path=p,a.xhr=h,a.importer=k,a.getDocumentUrl=p.getDocumentUrl,a.IMPORT_LINK_TYPE=i}(window.HTMLImports),function(a){function b(a){return"link"===a.localName&&a.getAttribute("rel")===f}function c(a){return a.parentNode&&!d(a)&&!e(a)}function d(a){return a.ownerDocument===document||a.ownerDocument.impl===document}function e(a){return a.parentNode&&"element"===a.parentNode.localName}var f="import",g={selectors:["link[rel="+f+"]","link[rel=stylesheet]","style","script:not([type])",'script[type="text/javascript"]'],map:{link:"parseLink",script:"parseScript",style:"parseGeneric"},parse:function(a){if(!a.__importParsed){a.__importParsed=!0;var b=a.querySelectorAll(g.selectors);h(b,function(a){g[g.map[a.localName]](a)})}},parseLink:function(a){b(a)?a.content&&g.parse(a.content):this.parseGeneric(a)},parseGeneric:function(a){c(a)&&document.head.appendChild(a)},parseScript:function(b){if(c(b)){var d=(b.__resource||b.textContent).trim();if(d){var e=b.__nodeUrl;if(!e){var e=a.path.documentUrlFromNode(b),f="["+Math.floor(1e3*(Math.random()+1))+"]",g=d.match(/Polymer\(['"]([^'"]*)/);f=g&&g[1]||f,e+="/"+f+".js"}d+="\n//# sourceURL="+e+"\n",eval.call(window,d)}}}},h=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.parser=g}(HTMLImports),function(){function a(){HTMLImports.importer.load(document,function(){HTMLImports.parser.parse(document),HTMLImports.readyTime=(new Date).getTime(),document.dispatchEvent(new CustomEvent("HTMLImportsLoaded",{bubbles:!0}))})}"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState?a():window.addEventListener("DOMContentLoaded",a)}(),function(a){function b(a){u.push(a),t||(t=!0,q(d))}function c(a){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(a)||a}function d(){t=!1;var a=u;u=[],a.sort(function(a,b){return a.uid_-b.uid_});var b=!1;a.forEach(function(a){var c=a.takeRecords();e(a),c.length&&(a.callback_(c,a),b=!0)}),b&&d()}function e(a){a.nodes_.forEach(function(b){var c=p.get(b);c&&c.forEach(function(b){b.observer===a&&b.removeTransientObservers()})})}function f(a,b){for(var c=a;c;c=c.parentNode){var d=p.get(c);if(d)for(var e=0;e0){var e=c[d-1],f=n(e,a);if(f)return c[d-1]=f,void 0}else b(this.observer);c[d]=a},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(a){var b=this.options;b.attributes&&a.addEventListener("DOMAttrModified",this,!0),b.characterData&&a.addEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.addEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(a){var b=this.options;b.attributes&&a.removeEventListener("DOMAttrModified",this,!0),b.characterData&&a.removeEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.removeEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(a){if(a!==this.target){this.addListeners_(a),this.transientObservedNodes.push(a);var b=p.get(a);b||p.set(a,b=[]),b.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[],a.forEach(function(a){this.removeListeners_(a);for(var b=p.get(a),c=0;c1?logFlags.dom&&console.warn("inserted:",a.localName,"insert/remove count:",a.__inserted):a.insertedCallback&&(logFlags.dom&&console.log("inserted:",a.localName),a.insertedCallback())),logFlags.dom&&console.groupEnd())}function j(a){k(a),c(a,function(a){k(a)})}function k(a){(a.removedCallback||a.__upgraded__&&logFlags.dom)&&(logFlags.dom&&console.log("removed:",a.localName),l(a)||(a.__inserted=(a.__inserted||0)-1,a.__inserted>0&&(a.__inserted=0),a.__inserted<0?logFlags.dom&&console.warn("removed:",a.localName,"insert/remove count:",a.__inserted):a.removedCallback&&a.removedCallback()))}function l(a){for(var b=a;b;){if(b==a.ownerDocument)return!0;b=b.parentNode||b.host}}function m(a){a.webkitShadowRoot&&!a.webkitShadowRoot.__watched&&(logFlags.dom&&console.log("watching shadow-root for: ",a.localName),r(a.webkitShadowRoot),a.webkitShadowRoot.__watched=!0)}function n(a){m(a),c(a,function(){m(a)})}function o(a){switch(a.localName){case"style":case"script":case"template":case void 0:return!0}}function p(a){if(logFlags.dom){var b=a[0];if(b&&"childList"===b.type&&b.addedNodes&&b.addedNodes){for(var c=b.addedNodes[0];c&&c!==document&&!c.host;)c=c.parentNode;var d=c&&(c.URL||c._URL||c.host&&c.host.localName)||"";d=d.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",a.length,d||"")}a.forEach(function(a){"childList"===a.type&&(v(a.addedNodes,function(a){o(a)||f(a)}),v(a.removedNodes,function(a){o(a)||j(a)}))}),logFlags.dom&&console.groupEnd()}function q(){p(u.takeRecords()) -}function r(a){u.observe(a,{childList:!0,subtree:!0})}function s(a){r(a)}function t(a){logFlags.dom&&console.group("upgradeDocument: ",(a.URL||a._URL||"").split("/").pop()),f(a),logFlags.dom&&console.groupEnd()}var u=new MutationObserver(p),v=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.watchShadow=m,a.watchAllShadows=n,a.upgradeAll=f,a.upgradeSubtree=e,a.observeDocument=s,a.upgradeDocument=t,a.takeRecords=q}(window.CustomElements),function(){function parseElementElement(a){var b={name:"","extends":null};takeAttributes(a,b);var c=HTMLElement.prototype;if(b.extends){var d=document.createElement(b.extends);c=d.__proto__||Object.getPrototypeOf(d)}b.prototype=Object.create(c),a.options=b;var e=a.querySelector('script:not([type]),script[type="text/javascript"],scripts');e&&executeComponentScript(e.textContent,a,b.name);var f=document.register(b.name,b);a.ctor=f;var g=a.getAttribute("constructor");g&&(window[g]=f)}function takeAttributes(a,b){for(var c in b){var d=a.attributes[c];d&&(b[c]=d.value)}}function executeComponentScript(inScript,inContext,inName){context=inContext;var owner=context.ownerDocument,url=owner._URL||owner.URL||owner.impl&&(owner.impl._URL||owner.impl.URL),match=url.match(/.*\/([^.]*)[.]?.*$/);if(match){var name=match[1];url+=name!=inName?":"+inName:""}var code="__componentScript('"+inName+"', function(){"+inScript+"});"+"\n//# sourceURL="+url+"\n";eval(code)}function mixin(a,b){a=a||{};try{Object.getOwnPropertyNames(b).forEach(function(c){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)})}catch(c){}return a}var HTMLElementElement=function(a){return a.register=HTMLElementElement.prototype.register,parseElementElement(a),a};HTMLElementElement.prototype={register:function(a){a&&(this.options.lifecycle=a.lifecycle,a.prototype&&mixin(this.options.prototype,a.prototype))}};var context;window.__componentScript=function(a,b){b.call(context)},window.HTMLElementElement=HTMLElementElement}(),function(){function a(a){return"link"===a.localName&&a.getAttribute("rel")===b}var b=window.HTMLImports?HTMLImports.IMPORT_LINK_TYPE:"none",c={selectors:["link[rel="+b+"]","element"],map:{link:"parseLink",element:"parseElement"},parse:function(a){if(!a.__parsed){a.__parsed=!0;var b=a.querySelectorAll(c.selectors);d(b,function(a){c[c.map[a.localName]](a)}),CustomElements.upgradeDocument(a),CustomElements.observeDocument(a)}},parseLink:function(b){a(b)&&this.parseImport(b)},parseImport:function(a){a.content&&c.parse(a.content)},parseElement:function(a){new HTMLElementElement(a)}},d=Array.prototype.forEach.call.bind(Array.prototype.forEach);CustomElements.parser=c}(),function(){function a(){setTimeout(function(){CustomElements.parser.parse(document),CustomElements.upgradeDocument(document),CustomElements.ready=!0,CustomElements.readyTime=Date.now(),window.HTMLImports&&(CustomElements.elapsed=CustomElements.readyTime-HTMLImports.readyTime),document.body.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))},0)}if("function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState)a();else{var b=window.HTMLImports?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(b,a)}}(),function(){function a(){}var b=document.createElement("style");b.textContent="element {display: none !important;} /* injected by platform.js */";var c=document.querySelector("head");if(c.insertBefore(b,c.firstChild),window.ShadowDOMPolyfill){CustomElements.watchShadow=a,CustomElements.watchAllShadows=a;var d=["upgradeAll","upgradeSubtree","observeDocument","upgradeDocument"],e={};d.forEach(function(a){e[a]=CustomElements[a]}),d.forEach(function(a){CustomElements[a]=function(b){return e[a](wrap(b))}})}}(),function(a){a=a||{};var b={shadow:function(a){return a?a.shadowRoot||a.webkitShadowRoot:void 0},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);return this.canTarget(b)?b:void 0},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d}e=this.olderShadow(e)}return f}},owner:function(a){for(var b=a;b.parentNode;)b=b.parentNode;return b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);return d.elementFromPoint(b,c)||(d=document),this.searchRoot(document,b,c)}};a.targetFinding=b,a.findTarget=b.findTarget.bind(b),window.PointerEventsPolyfill=a}(window.PointerEventsPolyfill),function(){function a(a){return'[touch-action="'+a+'"]'}function b(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}var c=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],d="";c.forEach(function(c){d+=String(c)===c?a(c)+b(c):c.selectors.map(a)+b(c.rule)});var e=document.createElement("style");e.textContent=d;var f=document.querySelector("head");f.insertBefore(e,f.firstChild)}(),function(a){function b(a,b){var b=b||{},e=b.buttons;if(void 0===e)switch(b.which){case 1:e=1;break;case 2:e=4;break;case 3:e=2;break;default:e=0}var f;if(c)f=new MouseEvent(a,b);else{f=document.createEvent("MouseEvent");var g={bubbles:!1,cancelable:!1,view:null,detail:null,screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null};Object.keys(g).forEach(function(a){a in b&&(g[a]=b[a])}),f.initMouseEvent(a,g.bubbles,g.cancelable,g.view,g.detail,g.screenX,g.screenY,g.clientX,g.clientY,g.ctrlKey,g.altKey,g.shiftKey,g.metaKey,g.button,g.relatedTarget)}d||Object.defineProperty(f,"buttons",{get:function(){return e},enumerable:!0});var h=0;return h=b.pressure?b.pressure:e?.5:0,Object.defineProperties(f,{pointerId:{value:b.pointerId||0,enumerable:!0},width:{value:b.width||0,enumerable:!0},height:{value:b.height||0,enumerable:!0},pressure:{value:h,enumerable:!0},tiltX:{value:b.tiltX||0,enumerable:!0},tiltY:{value:b.tiltY||0,enumerable:!0},pointerType:{value:b.pointerType||"",enumerable:!0},hwTimestamp:{value:b.hwTimestamp||0,enumerable:!0},isPrimary:{value:b.isPrimary||!1,enumerable:!0}}),f}var c=!1,d=!1;try{var e=new MouseEvent("click",{buttons:1});c=!0,d=1===e.buttons}catch(f){}a.PointerEvent||(a.PointerEvent=b)}(window),function(a){function b(){this.ids=[],this.pointers=[]}b.prototype={set:function(a,b){var c=this.ids.indexOf(a);c>-1?this.pointers[c]=b:(this.ids.push(a),this.pointers.push(b))},has:function(a){return this.ids.indexOf(a)>-1},"delete":function(a){var b=this.ids.indexOf(a);b>-1&&(this.ids.splice(b,1),this.pointers.splice(b,1))},get:function(a){var b=this.ids.indexOf(a);return this.pointers[b]},get size(){return this.pointers.length},clear:function(){this.ids.length=0,this.pointers.length=0},forEach:function(a,b){this.ids.forEach(function(c,d){a.call(b,c,this.pointers[d],this)},this)}},a.PointerMap=window.Map&&Map.prototype.forEach?Map:b}(window.PointerEventsPolyfill),function(a){var b;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0)b=WeakMap;else{var c=Object.defineProperty,d=Object.hasOwnProperty,e=(new Date).getTime()%1e9;b=function(){this.name="__st"+(1e9*Math.random()>>>0)+(e++ +"__")},b.prototype={set:function(a,b){c(a,this.name,{value:b,writable:!0})},get:function(a){return d.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}a.SideTable=b}(window.PointerEventsPolyfill),function(a){var b={targets:new a.SideTable,handledEvents:new a.SideTable,pointermap:new a.PointerMap,eventMap:{},eventSources:{},eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.unregister.call(b,a)},down:function(a){this.fireEvent("pointerdown",a)},move:function(a){this.fireEvent("pointermove",a)},up:function(a){this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){this.fireEvent("pointercancel",a)},leaveOut:function(a){a.target.contains(a.relatedTarget)||this.leave(a),this.out(a)},enterOver:function(a){a.target.contains(a.relatedTarget)||this.enter(a),this.over(a)},eventHandler:function(a){if(!this.handledEvents.get(a)){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),this.handledEvents.set(a,!0)}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(a,b){var c=new PointerEvent(a,b);return this.targets.set(c,this.targets.get(b)||b.target),c},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){var b={};for(var c in a)b[c]=a[c];return b},getTarget:function(a){return this.captureInfo&&this.captureInfo.id===a.pointerId?this.captureInfo.target:this.targets.get(a)},setCapture:function(a,b){this.captureInfo&&this.releaseCapture(this.captureInfo.id),this.captureInfo={id:a,target:b};var c=new PointerEvent("gotpointercapture",{bubbles:!0});this.implicitRelease=this.releaseCapture.bind(this,a),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease),this.targets.set(c,b),this.asyncDispatchEvent(c)},releaseCapture:function(a){if(this.captureInfo&&this.captureInfo.id===a){var b=new PointerEvent("lostpointercapture",{bubbles:!0}),c=this.captureInfo.target;this.captureInfo=null,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease),this.targets.set(b,c),this.asyncDispatchEvent(b)}},dispatchEvent:function(a){var b=this.getTarget(a);return b?b.dispatchEvent(a):void 0},asyncDispatchEvent:function(a){setTimeout(this.dispatchEvent.bind(this,a),0)}};b.boundHandler=b.eventHandler.bind(b),a.dispatcher=b,a.register=b.register.bind(b),a.unregister=b.unregister.bind(b)}(window.PointerEventsPolyfill),function(a){function b(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),g&&(this.observer=new g(this.mutationWatcher.bind(this)))}var c=Array.prototype.forEach.call.bind(Array.prototype.forEach),d=Array.prototype.map.call.bind(Array.prototype.map),e=Array.prototype.slice.call.bind(Array.prototype.slice),f=Array.prototype.filter.call.bind(Array.prototype.filter),g=window.MutationObserver||window.WebKitMutationObserver,h="[touch-action]",i={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};b.prototype={watchSubtree:function(b){a.targetFinding.canTarget(b)&&this.observer.observe(b,i)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){c(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(h):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(e(b))},installOnLoad:function(){document.addEventListener("DOMContentLoaded",this.installNewSubtree.bind(this,document))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){var b=d(a,this.findElements,this);return b.push(f(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}},g||(b.prototype.watchSubtree=function(){console.warn("PointerEventsPolyfill: MutationObservers not found, touch-action will not be dynamically detected")}),a.Installer=b}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher,c=b.pointermap,d=25,e={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},lastTouches:[],isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,e=a.clientX,f=a.clientY,g=0,h=c.length;h>g&&(b=c[g]);g++){var i=Math.abs(e-b.x),j=Math.abs(f-b.y);if(d>=i&&d>=j)return!0}},prepareEvent:function(a){var c=b.cloneEvent(a);return c.pointerId=this.POINTER_ID,c.isPrimary=!0,c.pointerType=this.POINTER_TYPE,c},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=c.has(this.POINTER_ID);d&&this.cancel(a);var e=this.prepareEvent(a);c.set(this.POINTER_ID,a),b.down(e)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.move(c)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=c.get(this.POINTER_ID);if(d&&d.button===a.button){var e=this.prepareEvent(a);b.up(e),this.cleanupMouse()}}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.enterOver(c)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.leaveOut(c)}},cancel:function(a){var c=this.prepareEvent(a);b.cancel(c),this.cleanupMouse()},cleanupMouse:function(){c.delete(this.POINTER_ID)}};a.mouseEvents=e}(window.PointerEventsPolyfill),function(a){var b,c=a.dispatcher,d=a.findTarget,e=a.targetFinding.allShadows.bind(a.targetFinding),f=c.pointermap,g=Array.prototype.map.call.bind(Array.prototype.map),h=2500,i="touch-action",j="string"==typeof document.head.style.touchAction,k={scrollType:new a.SideTable,events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){j?c.listen(a,this.events):b.enableOnSubtree(a)},unregister:function(a){j&&c.unlisten(a,this.events)},elementAdded:function(a){var b=a.getAttribute(i),d=this.touchActionToScrollType(b);d&&(this.scrollType.set(a,d),c.listen(a,this.events),e(a).forEach(function(a){this.scrollType.set(a,d),c.listen(a,this.events)},this))},elementRemoved:function(a){this.scrollType.delete(a),c.unlisten(a,this.events),e(a).forEach(function(a){this.scrollType.delete(a),c.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(i),d=this.touchActiontoScrollType(c),f=this.touchActionToScrollType(b);d&&f?(this.scrollType.set(a,d),e(a).forEach(function(a){this.scrollType.set(a,d)},this)):f?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){null===this.firstTouch&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1)},removePrimaryTouch:function(a){this.isPrimaryTouch(a)&&(this.firstTouch=null,this.firstXY=null)},touchToPointer:function(a){var b=c.cloneEvent(a);return b.pointerId=a.identifier+2,b.target=d(b),b.bubbles=!0,b.cancelable=!0,b.button=0,b.buttons=1,b.width=a.webkitRadiusX||a.radiusX||0,b.height=a.webkitRadiusY||a.radiusY||0,b.pressure=a.webkitForce||a.force||.5,b.isPrimary=this.isPrimaryTouch(a),b.pointerType=this.POINTER_TYPE,b},processTouches:function(a,b){var c=a.changedTouches,d=g(c,this.touchToPointer,this);d.forEach(b,this)},shouldScroll:function(a){if(this.firstXY){var b,c=this.scrollType.get(a.currentTarget);if("none"===c)b=!1;else if("XY"===c)b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)if(c.identifier===b)return!0},vacuumTouches:function(a){var b=a.touches;if(f.size>=b.length){var c=[];f.forEach(function(a,d){if(1!==a&&!this.findTouch(b,a-2)){var e=d.out;c.push(this.touchToPointer(e))}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||this.processTouches(a,this.overDown)},overDown:function(a){f.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),c.over(a),c.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,d=f.get(b.pointerId);if(d){var e=d.out,g=d.outTarget;c.move(b),e&&g!==b.target&&(e.relatedTarget=b.target,b.relatedTarget=g,e.target=g,b.target?(c.leaveOut(e),c.enterOver(b)):(b.target=g,b.relatedTarget=null,this.cancelOut(b))),d.out=b,d.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(c.up(a),c.out(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){c.cancel(a),c.out(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){f.delete(a.pointerId),this.removePrimaryTouch(a)},dedupSynthMouse:function(b){var c=a.mouseEvents.lastTouches,d=b.changedTouches[0];if(this.isPrimaryTouch(d)){var e={x:d.clientX,y:d.clientY};c.push(e);var f=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,c,e);setTimeout(f,h)}}};j||(b=new a.Installer(k.elementAdded,k.elementRemoved,k.elementChanged,k)),a.touchEvents=k}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher,c=b.pointermap,d=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,e={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var c=a;return d&&(c=b.cloneEvent(a),c.pointerType=this.POINTER_TYPES[a.pointerType]),c},cleanup:function(a){c.delete(a)},MSPointerDown:function(a){c.set(a.pointerId,a);var d=this.prepareEvent(a);b.down(d)},MSPointerMove:function(a){var c=this.prepareEvent(a);b.move(c)},MSPointerUp:function(a){var c=this.prepareEvent(a);b.up(c),this.cleanup(a.pointerId)},MSPointerOut:function(a){var c=this.prepareEvent(a);b.leaveOut(c)},MSPointerOver:function(a){var c=this.prepareEvent(a);b.enterOver(c)},MSPointerCancel:function(a){var c=this.prepareEvent(a);b.cancel(c),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var c=b.makeEvent("lostpointercapture",a);b.dispatchEvent(c)},MSGotPointerCapture:function(a){var c=b.makeEvent("gotpointercapture",a);b.dispatchEvent(c)}};a.msEvents=e}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher;if(void 0===window.navigator.pointerEnabled){if(Object.defineProperty(window.navigator,"pointerEnabled",{value:!0,enumerable:!0}),window.navigator.msPointerEnabled){var c=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:c,enumerable:!0}),b.registerSource("ms",a.msEvents)}else b.registerSource("mouse",a.mouseEvents),void 0!==window.ontouchstart&&b.registerSource("touch",a.touchEvents);b.register(document)}}(window.PointerEventsPolyfill),function(a){function b(a){if(!e.pointermap.has(a))throw new Error("InvalidPointerId")}var c,d,e=a.dispatcher,f=window.navigator;f.msPointerEnabled?(c=function(a){b(a),this.msSetPointerCapture(a)},d=function(a){b(a),this.msReleasePointerCapture(a)}):(c=function(a){b(a),e.setCapture(a,this)},d=function(a){b(a),e.releaseCapture(a,this)}),Element.prototype.setPointerCapture||Object.defineProperties(Element.prototype,{setPointerCapture:{value:c},releasePointerCapture:{value:d}})}(window.PointerEventsPolyfill),PointerGestureEvent.prototype.preventTap=function(){this.tapPrevented=!0},function(a){a=a||{},a.utils={LCA:{find:function(a,b){if(a===b)return a;if(a.contains){if(a.contains(b))return a;if(b.contains(a))return b}var c=this.depth(a),d=this.depth(b),e=c-d;for(e>0?a=this.walk(a,e):b=this.walk(b,-e);a&&b&&a!==b;)a=this.walk(a,1),b=this.walk(b,1);return a},walk:function(a,b){for(var c=0;b>c;c++)a=a.parentNode;return a},depth:function(a){for(var b=0;a;)b++,a=a.parentNode;return b}}},a.findLCA=function(b,c){return a.utils.LCA.find(b,c)},window.PointerGestures=a}(window.PointerGestures),function(a){var b;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0)b=WeakMap;else{var c=Object.defineProperty,d=Object.hasOwnProperty,e=(new Date).getTime()%1e9;b=function(){this.name="__st"+(1e9*Math.random()>>>0)+(e++ +"__")},b.prototype={set:function(a,b){c(a,this.name,{value:b,writable:!0})},get:function(a){return d.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}a.SideTable=b}(window.PointerGestures),function(a){function b(){this.ids=[],this.pointers=[]}b.prototype={set:function(a,b){var c=this.ids.indexOf(a);c>-1?this.pointers[c]=b:(this.ids.push(a),this.pointers.push(b))},has:function(a){return this.ids.indexOf(a)>-1},"delete":function(a){var b=this.ids.indexOf(a);b>-1&&(this.ids.splice(b,1),this.pointers.splice(b,1))},get:function(a){var b=this.ids.indexOf(a);return this.pointers[b]},get size(){return this.pointers.length},clear:function(){this.ids.length=0,this.pointers.length=0}},window.Map&&(b=window.Map),a.PointerMap=b}(window.PointerGestures),function(a){var b={handledEvents:new a.SideTable,targets:new a.SideTable,handlers:{},recognizers:{},events:["pointerdown","pointermove","pointerup","pointerover","pointerout","pointercancel"],registerRecognizer:function(a,b){var c=b;this.recognizers[a]=c,this.events.forEach(function(a){if(c[a]){var b=c[a].bind(c);this.addHandler(a,b)}},this)},addHandler:function(a,b){var c=a;this.handlers[c]||(this.handlers[c]=[]),this.handlers[c].push(b)},registerTarget:function(a){this.listen(this.events,a)},unregisterTarget:function(a){this.unlisten(this.events,a)},eventHandler:function(a){if(!this.handledEvents.get(a)){var b,c=a.type;(b=this.handlers[c])&&this.makeQueue(b,a),this.handledEvents.set(a,!0)}},makeQueue:function(a,b){var c=this.cloneEvent(b);setTimeout(this.runQueue.bind(this,a,c),0)},runQueue:function(a,b){this.currentPointerId=b.pointerId;for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)c(b);this.currentPointerId=0},listen:function(a,b){a.forEach(function(a){this.addEvent(a,this.boundHandler,!1,b)},this)},unlisten:function(a){a.forEach(function(a){this.removeEvent(a,this.boundHandler,!1,inTarget)},this)},addEvent:function(a,b,c,d){d.addEventListener(a,b,c)},removeEvent:function(a,b,c,d){d.removeEventListener(a,b,c)},makeEvent:function(a,b){return new PointerGestureEvent(a,b)},cloneEvent:function(a){var b={};for(var c in a)b[c]=a[c];return b},dispatchEvent:function(a,b){var c=b||this.targets.get(a);c&&(c.dispatchEvent(a),a.tapPrevented&&this.preventTap(this.currentPointerId))},asyncDispatchEvent:function(a,b){var c=function(){this.dispatchEvent(a,b)}.bind(this);setTimeout(c,0)},preventTap:function(a){var b=this.recognizers.tap;b&&b.preventTap(a)}};b.boundHandler=b.eventHandler.bind(b),a.dispatcher=b,a.register=function(b){var c=window.PointerEventsPolyfill;c&&c.register(b),a.dispatcher.registerTarget(b)},b.registerTarget(document)}(window.PointerGestures),function(a){var b=a.dispatcher,c={HOLD_DELAY:200,WIGGLE_THRESHOLD:16,events:["pointerdown","pointermove","pointerup","pointercancel"],heldPointer:null,holdJob:null,pulse:function(){var a=Date.now()-this.heldPointer.timeStamp,b=this.held?"holdpulse":"hold";this.fireHold(b,a),this.held=!0},cancel:function(){clearInterval(this.holdJob),this.held&&this.fireHold("release"),this.held=!1,this.heldPointer=null,this.target=null,this.holdJob=null},pointerdown:function(a){a.isPrimary&&!this.heldPointer&&(this.heldPointer=a,this.target=a.target,this.holdJob=setInterval(this.pulse.bind(this),this.HOLD_DELAY))},pointerup:function(a){this.heldPointer&&this.heldPointer.pointerId===a.pointerId&&this.cancel()},pointercancel:function(){this.cancel()},pointermove:function(a){if(this.heldPointer&&this.heldPointer.pointerId===a.pointerId){var b=a.clientX-this.heldPointer.clientX,c=a.clientY-this.heldPointer.clientY;b*b+c*c>this.WIGGLE_THRESHOLD&&this.cancel()}},fireHold:function(a,c){var d={pointerType:this.heldPointer.pointerType};c&&(d.holdTime=c);var e=b.makeEvent(a,d);b.dispatchEvent(e,this.target),e.tapPrevented&&b.preventTap(this.heldPointer.pointerId)}};b.registerRecognizer("hold",c)}(window.PointerGestures),function(a){var b=a.dispatcher,c=new a.PointerMap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],WIGGLE_THRESHOLD:4,clampDir:function(a){return a>0?1:-1},calcPositionDelta:function(a,b){var c=0,d=0;return a&&b&&(c=b.pageX-a.pageX,d=b.pageY-a.pageY),{x:c,y:d}},fireTrack:function(a,c,d){var e=d,f=this.calcPositionDelta(e.downEvent,c),g=this.calcPositionDelta(e.lastMoveEvent,c);g.x&&(e.xDirection=this.clampDir(g.x)),g.y&&(e.yDirection=this.clampDir(g.y));var h={dx:f.x,dy:f.y,ddx:g.x,ddy:g.y,clientX:c.clientX,clientY:c.clientY,pageX:c.pageX,pageY:c.pageY,screenX:c.screenX,screenY:c.screenY,xDirection:e.xDirection,yDirection:e.yDirection,trackInfo:e.trackInfo,pointerType:c.pointerType};"trackend"===a&&(h._releaseTarget=c.target);var i=b.makeEvent(a,h);e.lastMoveEvent=c,b.dispatchEvent(i,e.downTarget)},pointerdown:function(a){if(a.isPrimary&&("mouse"===a.pointerType?1===a.buttons:!0)){var b={downEvent:a,downTarget:a.target,trackInfo:{},lastMoveEvent:null,xDirection:0,yDirection:0,tracking:!1};c.set(a.pointerId,b)}},pointermove:function(a){var b=c.get(a.pointerId);if(b)if(b.tracking)this.fireTrack("track",a,b);else{var d=this.calcPositionDelta(b.downEvent,a),e=d.x*d.x+d.y*d.y;e>this.WIGGLE_THRESHOLD&&(b.tracking=!0,this.fireTrack("trackstart",b.downEvent,b),this.fireTrack("track",a,b))}},pointerup:function(a){var b=c.get(a.pointerId);b&&(b.tracking&&this.fireTrack("trackend",a,b),c.delete(a.pointerId))},pointercancel:function(a){this.pointerup(a)}};b.registerRecognizer("track",d)}(window.PointerGestures),function(a){var b=a.dispatcher,c={MIN_VELOCITY:.5,MAX_QUEUE:4,moveQueue:[],target:null,pointerId:null,events:["pointerdown","pointermove","pointerup","pointercancel"],pointerdown:function(a){a.isPrimary&&!this.pointerId&&(this.pointerId=a.pointerId,this.target=a.target,this.addMove(a))},pointermove:function(a){a.pointerId===this.pointerId&&this.addMove(a)},pointerup:function(a){a.pointerId===this.pointerId&&this.fireFlick(a),this.cleanup()},pointercancel:function(){this.cleanup()},cleanup:function(){this.moveQueue=[],this.target=null,this.pointerId=null},addMove:function(a){this.moveQueue.length>=this.MAX_QUEUE&&this.moveQueue.shift(),this.moveQueue.push(a)},fireFlick:function(a){for(var c,d,e,f,g,h,i,j=a,k=this.moveQueue.length,l=0,m=0,n=0,o=0;k>o&&(i=this.moveQueue[o]);o++)c=j.timeStamp-i.timeStamp,d=j.clientX-i.clientX,e=j.clientY-i.clientY,f=d/c,g=e/c,h=Math.sqrt(f*f+g*g),h>n&&(l=f,m=g,n=h);var p=Math.abs(l)>Math.abs(m)?"x":"y",q=this.calcAngle(l,m);if(Math.abs(n)>=this.MIN_VELOCITY){var r=b.makeEvent("flick",{xVelocity:l,yVelocity:m,velocity:n,angle:q,majorAxis:p,pointerType:a.pointerType});b.dispatchEvent(r,this.target)}},calcAngle:function(a,b){return 180*Math.atan2(b,a)/Math.PI}};b.registerRecognizer("flick",c)}(window.PointerGestures),function(a){var b=a.dispatcher,c=new a.PointerMap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],pointerdown:function(a){a.isPrimary&&!a.tapPrevented&&c.set(a.pointerId,{target:a.target,x:a.clientX,y:a.clientY})},pointermove:function(a){if(a.isPrimary){var b=c.get(a.pointerId);b&&a.tapPrevented&&c.delete(a.pointerId)}},pointerup:function(d){var e=c.get(d.pointerId);if(e&&!d.tapPrevented){var f=a.findLCA(e.target,d.target);if(f){var g=b.makeEvent("tap",{x:d.clientX,y:d.clientY,pointerType:d.pointerType});b.dispatchEvent(g,f)}}c.delete(d.pointerId)},pointercancel:function(a){c.delete(a.pointerId)},preventTap:function(a){c.delete(a)}};b.registerRecognizer("tap",d)}(window.PointerGestures); -/* -//@ sourceMappingURL=platform.native.min.js.map -*/ \ No newline at end of file diff --git a/libs/polymer/platform.native.min.js.map b/libs/polymer/platform.native.min.js.map deleted file mode 100644 index 4d8d21fe6..000000000 --- a/libs/polymer/platform.native.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"platform.native.min.js","sources":["../PointerGestures/src/PointerGestureEvent.js","../CustomElements/src/sidetable.js","../CustomElements/src/MutationObserver.js","src/patches-shadowdom-native.js","src/lang.js","src/dom.js","src/template.js","src/inspector.js","../mdv/third_party/ChangeSummary/change_summary.js","../mdv/src/template_element.js","../mdv/third_party/esprima/esprima.js","../mdv/util/expression_syntax.js","src/patches-mdv.js","../HTMLImports/src/HTMLImports.js","../HTMLImports/src/Parser.js","../HTMLImports/src/boot.js","../CustomElements/MutationObservers/MutationObserver.js","../CustomElements/src/CustomElements.js","../CustomElements/src/Observer.js","../CustomElements/src/HTMLElementElement.js","../CustomElements/src/Parser.js","../CustomElements/src/boot.js","src/patches-custom-elements.js","../PointerEvents/src/boot.js","../PointerEvents/src/touch-action.js","../PointerEvents/src/PointerEvent.js","../PointerEvents/src/pointermap.js","../PointerEvents/src/sidetable.js","../PointerEvents/src/dispatcher.js","../PointerEvents/src/installer.js","../PointerEvents/src/mouse.js","../PointerEvents/src/touch.js","../PointerEvents/src/ms.js","../PointerEvents/src/platform-events.js","../PointerEvents/src/capture.js","../PointerGestures/src/initialize.js","../PointerGestures/src/sidetable.js","../PointerGestures/src/pointermap.js","../PointerGestures/src/dispatcher.js","../PointerGestures/src/hold.js","../PointerGestures/src/track.js","../PointerGestures/src/flick.js","../PointerGestures/src/tap.js"],"names":["PointerGestureEvent","inType","inDict","dict","e","document","createEvent","props","bubbles","cancelable","Object","keys","forEach","k","initEvent","preventTap","this","SideTable","WeakMap","navigator","userAgent","indexOf","defineProperty","hasOwnProperty","counter","Date","getTime","name","Math","random","prototype","set","key","value","writable","get","call","undefined","delete","window","templateContent","inTemplate","content","wrap","unwrap","n","defineProperties","HTMLElement","shadowRoot","webkitShadowRoot","createShadowRoot","webkitCreateShadowRoot","HTMLTemplateElement","bootstrap","_content","frag","createDocumentFragment","firstChild","appendChild","scope","mixin","inObj","obj","i","arguments","length","p","copyProperty","x","inName","inSource","inTarget","pd","getPropertyDescriptor","inObject","getOwnPropertyDescriptor","getPrototypeOf","Function","bind","self","args","Array","slice","args2","push","apply","Platform","createDOM","inTagOrNode","inHTML","inAttrs","dom","createElement","cloneNode","innerHTML","setAttribute","add","DOMTokenList","remove","toggle","bool","contains","oldName","newName","ArraySlice","namedNodeMap","NamedNodeMap","MozNamedAttrMap","NodeList","array","HTMLCollection","ArrayForEach","cb","context","performance","start","now","requestAnimationFrame","nativeRaf","webkitRequestAnimationFrame","mozRequestAnimationFrame","callback","setTimeout","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","id","clearTimeout","Inspector","inspector","sinspect","inNode","inProxy","open","write","inspectorHTML","api","shadowize","inspect","body","join","crumbs","displayCrumbs","d","querySelector","textContent","c","a","href","localName","idx","onclick","event","pop","shadow","preventDefault","drillable","proxy","output","childNodes","blacklisted","STYLE","SCRIPT","#comment","TEMPLATE","blacklist","nodeName","inChildNodes","inIndent","indent","nodeType","info","describe","getDistributedNodes","ind","br","text","trim","tag","attributes","Number","node","console","log","dir","global","detectObjectObserve","records","type","gotSplice","observe","test","deliverChangeRecords","isIndex","s","toNumber","isObject","areSameValue","left","right","numberIsNaN","isPathValid","replace","pathRegExp","getPath","str","path","pathCache","Path","String","split","filter","part","hasEval","getValueFrom","compiledGetValueFromFn","dirtyCheck","observer","cycles","MAX_DIRTY_CHECK_CYCLES","check","report","objectIsEmpty","object","prop","diffIsEmpty","diff","added","removed","changed","diffObjectFromOldObject","oldObject","newValue","isArray","copyObject","opt_copy","copy","Observer","target","token","reporting","hasObserve","boundInternalCallback","internalCallback","valid","addToAll","connect","sync","collectObservers","allObservers","_allObserversCount","ObjectObserver","ArrayObserver","Error","ObservedSet","arr","isObserved","PathObserver","pathString","notifyFunction","notifier","getNotifier","oldValue","changeRecord","notify","diffObjectFromChangeRecords","changeRecords","oldValues","record","knownRecordTypes","error","calcEditDistances","current","currentStart","currentEnd","old","oldStart","oldEnd","rowCount","columnCount","distances","j","north","west","spliceOperationsFromEditDistances","edits","min","northWest","EDIT_LEAVE","EDIT_UPDATE","EDIT_DELETE","EDIT_ADD","reverse","sharedPrefix","arr1","arr2","searchLength","sharedSuffix","index1","index2","count","newSplice","index","addedCount","calcSplices","prefixCount","suffixCount","minLength","splice","ops","splices","oldIndex","intersect","start1","end1","start2","end2","mergeSplice","inserted","insertionOffset","intersectCount","deleteCount","prepend","append","offset","createInitialSplices","JSON","stringify","projectArraySplices","concat","f","ex","isNaN","createObject","proto","__proto__","newObject","create","getOwnPropertyNames","identStart","identPart","ident","elementIndex","identOrElementIndex","RegExp","toString","getValueFromObserved","observedSet","reset","cleanup","accessors","map","setValueFrom","testingResults","anyChanged","close","unobserved","disconnect","deliver","reportArgs","_errorThrownDuringCallback","forceCollectObservers","runningMicrotaskCheckpoint","hasDebugForceFullDelivery","deliverAllChangeRecords","performMicrotaskCheckpoint","results","toCheck","clearObservers","property","unobserve","applySplices","previous","spliceArgs","addIndex","objProto","arrayProto","hard","getValueAtPath","setValueAtPath","new","updated","deleted","descriptor","configurable","hasObjectObserve","calculateSplices","assert","v","getTreeScope","parentNode","getElementById","isNodeInDocument","ownerDocument","NodeBinding","model","closed","boundValueChanged","AttributeBinding","element","attributeName","conditional","removeAttribute","getEventForInputType","checkboxEventType","InputBinding","eventType","boundNodeValueToModel","nodeValueChanged","addEventListener","getAssociatedRadioButtons","form","elements","el","tagName","radios","querySelectorAll","CheckedBinding","SelectedIndexBinding","isAttributeTemplate","semanticTemplateElements","hasAttribute","isTemplate","isNativeTemplate","hasTemplateElement","forAllTemplatesFrom","fn","subTemplates","allTemplatesSelectors","bootstrapTemplatesRecursivelyFrom","template","decorate","to","from","getTemplateContentsOwner","doc","defaultView","templateContentsOwnerTable","implementation","createHTMLDocument","lastChild","removeChild","extractTemplateFromAttributeTemplate","insertBefore","attribs","attrib","templateAttributeDirectives","liftNonNativeTemplateChildrenIntoContent","useRoot","child","fixTemplateElementPrototype","hasProto","contentDescriptor","ensureSetModelScheduled","setModelFn","templateSetModelFnTable","addBindings","bindingDelegate","ensureScheduled","TemplateBinding","inputs","isSimpleBinding","tokens","parseMustacheTokens","startIndex","lastIndex","endIndex","bindOrDelegate","delegate","delegateBinding","delegateFunction","GET_BINDING","processBindings","bindings","bound","binding","setupBinding","newTokenCombinator","values","combinator","replacementBinding","CompoundBinding","scheduled","resolve","parseAttributeBindings","isTemplateNode","ifFound","bindFound","attr","IF","BIND","REPEAT","getBindings","Node","ELEMENT_NODE","TEXT_NODE","data","TemplateCloser","addMapBindings","templateRef","templateBindingDelegateTable","children","nextSibling","deepCloneIgnoreTemplateContent","clone","createInstanceBindingMap","hasSubTemplate","childMap","TemplateInstance","firstNode","lastNode","addTemplateInstanceRecord","fragment","instanceRecord","templateInstanceTable","observers","size","combinator_","TemplateIterator","templateElement","templateElement_","terminators","iteratedValue","arrayObserver","resolveInputs","Map","opt_this","Document","documentElement","b","createBinding","unbind","unbindAll","names","sanitizeBoundValue","Text","Element","div","checkbox","first","initMouseEvent","dispatchEvent","postUpdateBinding","removeEventListener","Boolean","radio","checkedBinding","checked","HTMLInputElement","HTMLTextAreaElement","delaySetSelectedIndex","maxRetries","HTMLSelectElement","toLowerCase","GET_INSTANCE_MODEL","repeat","ref","THEAD","TBODY","TFOOT","TH","TR","TD","COLGROUP","COL","CAPTION","OPTION","OPTGROUP","Runner","nextRunner","lastValue","scheduledIds","running","run","async","idExpando","nextId","runner","schedule","TypeError","templateContentsTable","templateInstanceRefTable","contentBindingMapTable","opt_instanceRef","templateIsDecorated_","isNative","bootstrapContents","liftContents","liftRoot","htmlElement","HTMLUnknownElement","enumerable","templateModelTable","iterator","templateIteratorTable","createInstance","instance","refId","getAttribute","treeScope","nextRef","templateInstance","scheduleResolve","pathValueChanged","suppressResolve","valueChanged","handleSplices","getTerminatorAt","terminator","subIterator","insertInstanceAt","instanceNodes","previousTerminator","parent","insertBeforeNode","extractInstanceAt","getInstanceModel","instanceCache","removeDelta","actualModel","forAllTemplatesFrom_","condition","message","isDecimalDigit","ch","isWhiteSpace","fromCharCode","isLineTerminator","isIdentifierStart","isIdentifierPart","isKeyword","skipWhitespace","source","charCodeAt","getIdentifier","scanIdentifier","Token","Identifier","Keyword","NullLiteral","BooleanLiteral","range","scanPunctuator","code2","ch2","ch3","ch4","code","ch1","Punctuator","throwError","Messages","UnexpectedToken","scanNumericLiteral","number","NumericLiteral","parseFloat","scanStringLiteral","quote","octal","StringLiteral","isIdentifierName","advance","EOF","lex","lookahead","peek","pos","messageFormat","msg","whole","description","throwUnexpected","expect","match","matchKeyword","keyword","consumeSemicolon","parseArrayInitialiser","parseAssignmentExpression","createArrayExpression","parseObjectPropertyKey","createLiteral","createIdentifier","parseObjectProperty","createProperty","parseObjectInitialiser","properties","createObjectExpression","parseGroupExpression","expr","parseExpression","parsePrimaryExpression","createThisExpression","parseArguments","parseNonComputedProperty","parseNonComputedMember","parseComputedMember","parseLeftHandSideExpressionAllowCall","createCallExpression","createMemberExpression","parsePostfixExpression","parseUnaryExpression","createUnaryExpression","binaryPrecedence","allowIn","prec","parseBinaryExpression","previousAllowIn","stack","operator","state","createBinaryExpression","parseConditionalExpression","consequent","alternate","createConditionalExpression","parseEmptyStatement","createEmptyStatement","parseExpressionStatement","createExpressionStatement","parseStatement","labeledBody","Syntax","labelSet","Redeclaration","createLabeledStatement","parseSourceElement","parseSourceElements","sourceElement","sourceElements","parseProgram","createProgram","parse","inDelegate","valueOf","TokenName","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","EmptyStatement","ExpressionStatement","Literal","LabeledStatement","LogicalExpression","MemberExpression","ObjectExpression","Program","Property","ThisExpression","UnaryExpression","UnknownLabel","esprima","getNamedScopeBinding","expressionText","repeatPattern","bindPattern","pathPattern","getExpressionBinding","templateScopeTable","ASTDelegate","statements","labeledStatements","resolveFn","newLabeledResolve","paths","deps","labels","label","IdentPath","last","currentPath","notImplemented","ExpressionSyntax","capturedIdent","valueFn","unaryOperators","+","-","!","binaryOperators","l","r","*","/","%","<",">","<=",">=","==","!=","===","!==","&&","||","getFn","arg","statement","op","argument","accessor","kind","getBinding","scopeName","parentScope","logFlags","group","groupEnd","style","head","__instanceCreated","adoptNode","CustomElements","upgradeAll","dirtyCheckPollInterval","setInterval","flush","isDocumentLink","elt","isLinkRel","IMPORT_LINK_TYPE","isStylesheetLink","STYLE_LINK_TYPE","rel","isScript","makeDocument","resource","url","_URL","base","baseURI","HTMLImports","flags","loader","xhr","importer","documents","cache","preloadSelectors","inNext","Loader","loaded","load","inDocument","preload","nodes","filterMainDocumentNodes","extractTemplateNodes","addNodes","extra","l$","resolvePathsInHTML","import","ownerNode","__resource","resolvePathsInStylesheet","inOnLoad","inOnComplete","onload","oncomplete","inflight","pending","inNodes","require","checkDone","inElt","nodeUrl","__nodeUrl","dedupe","fetch","inUrl","tail","receiveXhr","err","receive","inErr","inResource","URL_ATTRS","URL_ATTRS_SELECTOR","URL_TEMPLATE_SEARCH","resolveUrl","getDocumentUrl","hrefOrSrc","documentUrlFromNode","impl","URL","inBaseUrl","inRelativeToDocument","isAbsUrl","compressUrl","urlToPath","makeRelPath","parts","t","shift","unshift","root","resolveAttributes","resolveStyleElts","templates","inSheet","docUrl","resolveCssText","inRoot","styles","inCssText","inMatch","urlPath","resolveNodeAttributes","search","ok","inRequest","status","next","nextContext","request","XMLHttpRequest","debug","bust","readyState","response","send","loadDocument","responseType","needsMainDocumentContext","inMainDocument","isElementElementChild","importParser","selectors","link","script","__importParsed","elts","parseLink","linkElt","parseGeneric","parseScript","scriptElt","moniker","floor","matches","eval","parser","readyTime","CustomEvent","scheduleCallback","scheduledObservers","isScheduled","setImmediate","dispatchCallbacks","wrapIfNeeded","ShadowDOMPolyfill","sort","o1","o2","uid_","anyNonEmpty","queue","takeRecords","removeTransientObserversFor","callback_","nodes_","registrations","registrationsTable","registration","removeTransientObservers","forEachAncestorAndObserverEnqueueRecord","options","subtree","enqueue","JsMutationObserver","records_","uidCounter","MutationRecord","addedNodes","removedNodes","previousSibling","attributeNamespace","copyMutationRecord","original","getRecord","currentRecord","getRecordWithOldValue","recordWithOldValue","clearRecords","recordRepresentsCurrentMutation","selectRecord","lastRecord","newRecord","Registration","transientObservedNodes","msSetImmediate","setImmediateQueue","sentinel","func","postMessage","childList","characterData","attributeOldValue","attributeFilter","characterDataOldValue","SyntaxError","removeListeners","addListeners","copyOfRecords","recordToReplaceLast","addListeners_","removeListeners_","addTransientObserver","handleEvent","stopImmediatePropagation","attrName","namespace","relatedNode","namespaceURI","attrChange","MutationEvent","ADDITION","prevValue","changedNode","MutationObserver","WebKitMutationObserver","register","inOptions","definition","lifecycle","ancestry","extends","resolveTagName","resolvePrototypeChain","overrideAttributeApi","registerDefinition","ctor","generateConstructor","constructor","ready","inExtends","extendee","registry","inDefinition","baseTag","is","native","inst","instantiate","upgrade","domCreateElement","inElement","implement","__upgraded__","upgradeSubtree","customMixin","inSrc","inNative","used","readyCallback","changeAttribute","operation","attributeChangedCallback","inTag","upgradeElement","deep","domCloneNode","hasNative","webkitRegister","nop","findAll","find","firstElementChild","nextElementSibling","forSubtree","insertedNode","addedSubtree","addedNode","insertedCallback","__inserted","warn","removedNode","removedCallback","host","watchShadow","__watched","watchAllShadows","handler","mutations","mx","u","observeDocument","upgradeDocument","parseElementElement","takeAttributes","archetype","executeComponentScript","refName","inDictionary","inScript","inContext","owner","HTMLElementElement","inMore","__componentScript","inFunc","__parsed","parseImport","parseElement","inElementElt","elapsed","loadEvent","fns","inEl","canTarget","elementFromPoint","targetingShadow","olderShadow","os","olderShadowRoot","se","allShadows","shadows","searchRoot","y","st","sr","ssr","findTarget","inEvent","clientX","clientY","targetFinding","PointerEventsPolyfill","selector","rule","attrib2css","h","PointerEvent","buttons","which","NEW_MOUSE_EVENT","MouseEvent","view","detail","screenX","screenY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","HAS_BUTTONS","pressure","pointerId","width","height","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","ev","PointerMap","ids","pointers","inId","has","clear","thisArg","dispatcher","targets","handledEvents","pointermap","eventMap","eventSources","eventSourceList","registerSource","newEvents","events","es","unregister","down","fireEvent","move","up","enter","leave","over","out","cancel","leaveOut","enterOver","eventHandler","listen","addEvent","unlisten","removeEvent","eventName","boundHandler","makeEvent","cloneEvent","eventCopy","getTarget","captureInfo","setCapture","inPointerId","releaseCapture","implicitRelease","asyncDispatchEvent","Installer","binder","addCallback","removeCallback","changedCallback","MO","mutationWatcher","toArray","SELECTOR","OBSERVER_INIT","watchSubtree","enableOnSubtree","installOnLoad","installNewSubtree","findElements","addElement","removeElement","elementChanged","concatLists","accum","list","isElement","flattenMutationTree","tree","reduce","mutationHandler","m","DEDUP_DIST","mouseEvents","POINTER_ID","POINTER_TYPE","lastTouches","isEventSimulatedFromTouch","lts","dx","abs","dy","prepareEvent","mousedown","mousemove","mouseup","cleanupMouse","mouseover","mouseout","INSTALLER","touchMap","DEDUP_TIMEOUT","ATTRIB","HAS_TOUCH_ACTION","touchAction","touchEvents","scrollType","elementAdded","touchActionToScrollType","elementRemoved","touchActiontoScrollType","oldSt","scrollTypes","EMITTER","XSCROLLER","YSCROLLER","SCROLLER","exec","firstTouch","isPrimaryTouch","inTouch","identifier","setPrimaryTouch","firstXY","X","Y","scrolling","removePrimaryTouch","touchToPointer","webkitRadiusX","radiusX","webkitRadiusY","radiusY","webkitForce","force","processTouches","inFunction","tl","changedTouches","shouldScroll","ret","scrollAxis","currentTarget","oa","da","doa","findTouch","inTL","vacuumTouches","touches","cancelOut","touchstart","dedupSynthMouse","overDown","inPointer","outTarget","touchmove","touchcancel","moveOverOut","pointer","outEvent","touchend","upOut","cleanUpPointer","lt","HAS_BITMAP_TYPE","MSPointerEvent","MSPOINTER_TYPE_MOUSE","msEvents","POINTER_TYPES","MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSLostPointerCapture","MSGotPointerCapture","pointerEnabled","msPointerEnabled","tp","msMaxTouchPoints","ontouchstart","assertDown","msSetPointerCapture","msReleasePointerCapture","setPointerCapture","releasePointerCapture","tapPrevented","utils","LCA","adepth","depth","bdepth","walk","findLCA","PointerGestures","handlers","recognizers","registerRecognizer","inRecognizer","addHandler","inFn","registerTarget","unregisterTarget","makeQueue","inHandlerFns","runQueue","inHandlers","currentPointerId","inEvents","inEventName","inEventHandler","inCapture","tap","inScope","pe","hold","HOLD_DELAY","WIGGLE_THRESHOLD","heldPointer","holdJob","pulse","timeStamp","held","fireHold","clearInterval","pointerdown","pointerup","pointercancel","pointermove","inHoldTime","holdTime","track","clampDir","inDelta","calcPositionDelta","inA","inB","pageX","pageY","fireTrack","inTrackingData","downEvent","dd","lastMoveEvent","xDirection","yDirection","trackData","ddx","ddy","trackInfo","_releaseTarget","downTarget","tracking","flick","MIN_VELOCITY","MAX_QUEUE","moveQueue","addMove","fireFlick","dt","tx","ty","tv","sqrt","ma","calcAngle","xVelocity","yVelocity","velocity","angle","majorAxis","inX","inY","atan2","PI"],"mappings":"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"} \ No newline at end of file diff --git a/libs/polymer/platform.sandbox.min.js b/libs/polymer/platform.sandbox.min.js deleted file mode 100644 index a88203f6e..000000000 --- a/libs/polymer/platform.sandbox.min.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2012 The Polymer Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -function PointerGestureEvent(a,b){var c=b||{},d=document.createEvent("Event"),e={bubbles:!0,cancelable:!0};return Object.keys(e).forEach(function(a){a in c&&(e[a]=c[a])}),d.initEvent(a,e.bubbles,e.cancelable),Object.keys(c).forEach(function(a){d[a]=b[a]}),d.preventTap=this.preventTap,d}if(window.Platform=window.Platform||{},window.logFlags=window.logFlags||{},function(a){var b=a.flags||{};location.search.slice(1).split("&").forEach(function(a){a=a.split("="),a[0]&&(b[a[0]]=a[1]||!0)}),b.shadow=(b.shadowdom||b.shadow||b.polyfill||!HTMLElement.prototype.webkitCreateShadowRoot)&&"polyfill",a.flags=b}(Platform),"polyfill"===Platform.flags.shadow){var SideTable;"undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0?SideTable=WeakMap:function(){var a=Object.defineProperty,b=Object.hasOwnProperty,c=(new Date).getTime()%1e9;SideTable=function(){this.name="__st"+(1e9*Math.random()>>>0)+(c++ +"__")},SideTable.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}();var ShadowDOMPolyfill={};!function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function d(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){switch(c){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":return}Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function e(a){var b=a.__proto__||Object.getPrototypeOf(a),c=z.get(b);if(c)return c;var d=e(b),f=n(d);return k(b,f,a),f}function f(a,b){i(a,b,!0)}function g(a,b){i(b,a,!1)}function h(a){return/^on[a-z]+$/.test(a)}function i(b,c,d){Object.getOwnPropertyNames(b).forEach(function(e){if(!(e in c)){B&&b.__lookupGetter__(e);var f;try{f=Object.getOwnPropertyDescriptor(b,e)}catch(g){f=C}var i,j;if(d&&"function"==typeof f.value)return c[e]=function(){return this.impl[e].apply(this.impl,arguments)},void 0;var k=h(e);i=k?a.getEventHandlerGetter(e):function(){return this.impl[e]},(f.writable||f.set)&&(j=k?a.getEventHandlerSetter(e):function(a){this.impl[e]=a}),Object.defineProperty(c,e,{get:i,set:j,configurable:f.configurable,enumerable:f.enumerable})}})}function j(a,b,c){var e=a.prototype;k(e,b,c),d(b,a)}function k(a,c,d){var e=c.prototype;b(void 0===z.get(a)),z.set(a,c),f(a,e),d&&g(e,d)}function l(a,b){return z.get(b.prototype)===a}function m(a){var b=Object.getPrototypeOf(a),c=e(b),d=n(c);return k(b,d,a),d}function n(a){function b(b){a.call(this,b)}return b.prototype=Object.create(a.prototype),b.prototype.constructor=b,b}function o(a){return a instanceof A.EventTarget||a instanceof A.Event||a instanceof A.DOMImplementation}function p(a){return a instanceof F||a instanceof E||a instanceof G||a instanceof D}function q(a){if(null===a)return null;b(p(a));var c=y.get(a);if(!c){var d=e(a);c=new d(a),y.set(a,c)}return c}function r(a){return null===a?null:(b(o(a)),a.impl)}function s(a){return a&&o(a)?r(a):a}function t(a){return a&&!o(a)?q(a):a}function u(a,c){null!==c&&(b(p(a)),b(void 0===c||o(c)),y.set(a,c))}function v(a,b,c){Object.defineProperty(a.prototype,b,{get:c,configurable:!0,enumerable:!0})}function w(a,b){v(a,b,function(){return q(this.impl[b])})}function x(a,b){a.forEach(function(a){b.forEach(function(b){a.prototype[b]=function(){var a=q(this);return a[b].apply(a,arguments)}})})}var y=new SideTable,z=new SideTable,A=Object.create(null);Object.getOwnPropertyNames(window);var B=/Firefox/.test(navigator.userAgent),C={get:function(){},set:function(){},configurable:!0,enumerable:!0},D=DOMImplementation,E=Event,F=Node,G=Window;a.assert=b,a.defineGetter=v,a.defineWrapGetter=w,a.forwardMethodsToWrapper=x,a.isWrapperFor=l,a.mixin=c,a.registerObject=m,a.registerWrapper=j,a.rewrap=u,a.unwrap=r,a.unwrapIfNeeded=s,a.wrap=q,a.wrapIfNeeded=t,a.wrappers=A}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a instanceof N.ShadowRoot}function c(a){var b=a.localName;return"content"===b||"shadow"===b}function d(a){return!!a.shadowRoot}function e(a){var b;return a.parentNode||(b=a.defaultView)&&M(b)||null}function f(f,g,h){if(h.length)return h.shift();if(b(f))return j(f)||a.getHostForShadowRoot(f);var i=a.eventParentsTable.get(f);if(i){for(var k=1;k=0;b--)if(!c(a[b]))return a[b];return null}function i(d,e){for(var g=[];d;){for(var i=[],j=e,l=void 0;j;){var n=null;if(i.length){if(c(j)&&(n=h(i),k(l))){var o=i[i.length-1];i.push(o)}}else i.push(j);if(m(j,d))return i[i.length-1];b(j)&&i.pop(),l=j,j=f(j,n,g)}d=b(d)?a.getHostForShadowRoot(d):d.parentNode}}function j(b){return a.insertionParentTable.get(b)}function k(a){return j(a)}function l(a){for(var b;b=a.parentNode;)a=b;return a}function m(a,b){return l(a)===l(b)}function n(b,c){if(b===c)return!0;if(b instanceof N.ShadowRoot){var d=a.getHostForShadowRoot(b);return d?n(l(d),c):!1}return!1}function o(a){switch(a){case"DOMAttrModified":case"DOMAttributeNameChanged":case"DOMCharacterDataModified":case"DOMElementNameChanged":case"DOMNodeInserted":case"DOMNodeInsertedIntoDocument":case"DOMNodeRemoved":case"DOMNodeRemovedFromDocument":case"DOMSubtreeModified":return!0}return!1}function p(b){if(!P.get(b)){P.set(b,!0),o(b.type)||a.renderAllPending();var c=M(b.target),d=M(b);return q(d,c)}}function q(a,b){var c=g(b);return"load"===a.type&&2===c.length&&c[0].target instanceof N.Document&&c.shift(),X.set(a,c),r(a,c)&&s(a,c)&&t(a,c),T.set(a,w.NONE),R.set(a,null),a.defaultPrevented}function r(a,b){for(var c,d=b.length-1;d>0;d--){var e=b[d].target,f=b[d].currentTarget;if(e!==f&&(c=w.CAPTURING_PHASE,!u(b[d],a,c)))return!1}return!0}function s(a,b){var c=w.AT_TARGET;return u(b[0],a,c)}function t(a,b){for(var c,d=a.bubbles,e=1;e=f;f++){var g=b[f].currentTarget,h=l(g);n(e,h)&&(f!==d||g instanceof N.Node)&&(a[c++]=g)}a.length=c}return a},stopPropagation:function(){U.set(this,!0)},stopImmediatePropagation:function(){U.set(this,!0),V.set(this,!0)}},K(Y,w,document.createEvent("Event"));var Z=y("UIEvent",w),$=y("CustomEvent",w),_={get relatedTarget(){return S.get(this)||M(L(this).relatedTarget)}},ab=J({initMouseEvent:z("initMouseEvent",14)},_),bb=J({initFocusEvent:z("initFocusEvent",5)},_),cb=y("MouseEvent",Z,ab),db=y("FocusEvent",Z,bb),eb=y("MutationEvent",w,{initMutationEvent:z("initMutationEvent",3),get relatedNode(){return M(this.impl.relatedNode)}}),fb=Object.create(null),gb=function(){try{new window.MouseEvent("click")}catch(a){return!1}return!0}();if(!gb){var hb=function(a,b,c){if(c){var d=fb[c];b=J(J({},d),b)}fb[a]=b};hb("Event",{bubbles:!1,cancelable:!1}),hb("CustomEvent",{detail:null},"Event"),hb("UIEvent",{view:null,detail:0},"Event"),hb("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),hb("FocusEvent",{relatedTarget:null},"UIEvent")}var ib=window.EventTarget,jb=["addEventListener","removeEventListener","dispatchEvent"];[Node,Window].forEach(function(a){var b=a.prototype;jb.forEach(function(a){Object.defineProperty(b,a+"_",{value:b[a]})})}),C.prototype={addEventListener:function(a,b,c){if(B(b)){var d=new v(a,b,c),e=O.get(this);if(e){for(var f=0;fd;d++)b[d]=f(a[d]);return b.length=e,b}function e(a,b){a.prototype[b]=function(){return d(this.impl[b].apply(this.impl,arguments))}}var f=a.wrap;c.prototype={item:function(a){return this[a]}},b(c.prototype,"item"),a.wrappers.NodeList=c,a.addWrapNodeListMethod=e,a.wrapNodeList=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){j(a instanceof f)}function c(a,b,c,d){if(a.nodeType!==f.DOCUMENT_FRAGMENT_NODE)return a.parentNode&&a.parentNode.removeChild(a),a.parentNode_=b,a.previousSibling_=c,a.nextSibling_=d,c&&(c.nextSibling_=a),d&&(d.previousSibling_=a),[a];for(var e,g=[];e=a.firstChild;)a.removeChild(e),g.push(e),e.parentNode_=b;for(var h=0;he;e++)d.appendChild(m(b[e]));return d}function e(a){for(var b=a.firstChild;b;){j(b.parentNode===a);var c=b.nextSibling,d=m(b),e=d.parentNode;e&&s.call(e,d),b.previousSibling_=b.nextSibling_=b.parentNode_=null,b=c}a.firstChild_=a.lastChild_=null}function f(a){j(a instanceof o),g.call(this,a),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0}var g=a.wrappers.EventTarget,h=a.wrappers.NodeList,i=a.defineWrapGetter,j=a.assert,k=a.mixin,l=a.registerWrapper,m=a.unwrap,n=a.wrap,o=window.Node,p=o.prototype.appendChild,q=o.prototype.insertBefore,r=o.prototype.replaceChild,s=o.prototype.removeChild,t=o.prototype.compareDocumentPosition;f.prototype=Object.create(g.prototype),k(f.prototype,{appendChild:function(a){b(a),this.invalidateShadowRenderer();var e=this.lastChild,f=null,g=c(a,this,e,f);return this.lastChild_=g[g.length-1],e||(this.firstChild_=g[0]),p.call(this.impl,d(this,g)),a},insertBefore:function(a,e){if(!e)return this.appendChild(a);b(a),b(e),j(e.parentNode===this),this.invalidateShadowRenderer();var f=e.previousSibling,g=e,h=c(a,this,f,g);this.firstChild===e&&(this.firstChild_=h[0]);var i=m(e),k=i.parentNode;return k&&q.call(k,d(this,h),i),a},removeChild:function(a){if(b(a),a.parentNode!==this)throw new Error("NotFoundError");this.invalidateShadowRenderer();var c=this.firstChild,d=this.lastChild,e=a.nextSibling,f=a.previousSibling,g=m(a),h=g.parentNode;return h&&s.call(h,g),c===a&&(this.firstChild_=e),d===a&&(this.lastChild_=f),f&&(f.nextSibling_=e),e&&(e.previousSibling_=f),a.previousSibling_=a.nextSibling_=a.parentNode_=null,a},replaceChild:function(a,e){if(b(a),b(e),e.parentNode!==this)throw new Error("NotFoundError");this.invalidateShadowRenderer();var f=e.previousSibling,g=e.nextSibling;g===a&&(g=a.nextSibling);var h=c(a,this,f,g);this.firstChild===e&&(this.firstChild_=h[0]),this.lastChild===e&&(this.lastChild_=h[h.length-1]),e.previousSibling_=null,e.nextSibling_=null,e.parentNode_=null;var i=m(e);return i.parentNode&&r.call(i.parentNode,d(this,h),i),e},hasChildNodes:function(){return null===this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:n(this.impl.parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:n(this.impl.firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:n(this.impl.lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:n(this.impl.nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:n(this.impl.previousSibling)},get parentElement(){for(var a=this.parentNode;a&&a.nodeType!==f.ELEMENT_NODE;)a=a.parentNode;return a},get textContent(){for(var a="",b=this.firstChild;b;b=b.nextSibling)a+=b.textContent;return a},set textContent(a){if(e(this),this.invalidateShadowRenderer(),""!==a){var b=this.impl.ownerDocument.createTextNode(a);this.appendChild(b)}},get childNodes(){for(var a=new h,b=0,c=this.firstChild;c;c=c.nextSibling)a[b++]=c;return a.length=b,a},cloneNode:function(a){if(!this.invalidateShadowRenderer())return n(this.impl.cloneNode(a));var b=n(this.impl.cloneNode(!1));if(a)for(var c=this.firstChild;c;c=c.nextSibling)b.appendChild(c.cloneNode(!0));return b},contains:function(a){if(!a)return!1;if(a===this)return!0;var b=a.parentNode;return b?this.contains(b):!1},compareDocumentPosition:function(a){return t.call(this.impl,m(a))}}),i(f,"ownerDocument"),l(o,f,document.createDocumentFragment()),delete f.prototype.querySelector,delete f.prototype.querySelectorAll,f.prototype=k(Object.create(g.prototype),f.prototype),a.wrappers.Node=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,c){for(var d,e=a.firstElementChild;e;){if(e.matches(c))return e;if(d=b(e,c))return d;e=e.nextElementSibling}return null}function c(a,b,d){for(var e=a.firstElementChild;e;)e.matches(b)&&(d[d.length++]=e),c(e,b,d),e=e.nextElementSibling;return d}var d={querySelector:function(a){return b(this,a)},querySelectorAll:function(a){return c(this,a,new NodeList)}},e={getElementsByTagName:function(a){return this.querySelectorAll(a)},getElementsByClassName:function(a){return this.querySelectorAll("."+a)},getElementsByTagNameNS:function(a,b){if("*"===a)return this.getElementsByTagName(b);for(var c=new NodeList,d=this.getElementsByTagName(b),e=0,f=0;e";case Node.TEXT_NODE:return c(a.nodeValue);case Node.COMMENT_NODE:return"";default:throw console.error(a),new Error("not implemented")}}function e(a){for(var b="",c=a.firstChild;c;c=c.nextSibling)b+=d(c);return b}function f(a,b,c){var d=c||"div";a.textContent="";var e=n(a.ownerDocument.createElement(d));e.innerHTML=b;for(var f;f=e.firstChild;)a.appendChild(o(f))}function g(a){j.call(this,a)}function h(b){k(g,b,function(){return a.renderAllPending(),this.impl[b]})}function i(b){Object.defineProperty(g.prototype,b,{value:function(){return a.renderAllPending(),this.impl[b].apply(this.impl,arguments)},configurable:!0,enumerable:!0})}var j=a.wrappers.Element,k=a.defineGetter,l=a.mixin,m=a.registerWrapper,n=a.unwrap,o=a.wrap,p=/&|<|"/g,q={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},r=window.HTMLElement;g.prototype=Object.create(j.prototype),l(g.prototype,{get innerHTML(){return e(this)},set innerHTML(a){f(this,a,this.tagName)},get outerHTML(){return d(this)},set outerHTML(a){if(this.invalidateShadowRenderer())throw new Error("not implemented");this.impl.outerHTML=a}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollLeft","scrollTop","scrollWidth"].forEach(h),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(i),m(r,g,document.createElement("b")),a.wrappers.HTMLElement=g,a.getInnerHTML=e,a.setInnerHTML=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLContentElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get select(){return this.getAttribute("select")},set select(a){this.setAttribute("select",a)},setAttribute:function(a,b){c.prototype.setAttribute.call(this,a,b),"select"===String(a).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),f&&e(f,b),a.wrappers.HTMLContentElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a),this.olderShadowRoot_=null}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLShadowElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get olderShadowRoot(){return this.olderShadowRoot_},invalidateShadowRenderer:function(){c.prototype.invalidateShadowRenderer.call(this,!0)}}),f&&e(f,b),a.wrappers.HTMLShadowElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){if(!a.defaultView)return a;var b=l.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);l.set(a,b)}return b}function c(a){for(var c,d=b(a.ownerDocument),e=d.createDocumentFragment();c=a.firstChild;)e.appendChild(c);return e}function d(a){e.call(this,a)}var e=a.wrappers.HTMLElement,f=a.getInnerHTML,g=a.mixin,h=a.registerWrapper,i=a.setInnerHTML,j=a.wrap,k=new SideTable,l=new SideTable,m=window.HTMLTemplateElement;d.prototype=Object.create(e.prototype),g(d.prototype,{get content(){if(m)return j(this.impl.content);var a=k.get(this);return a||(a=c(this),k.set(this,a)),a},get innerHTML(){return f(this.content)},set innerHTML(a){i(this.content,a),this.invalidateShadowRenderer()}}),m&&h(m,d),a.wrappers.HTMLTemplateElement=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a.localName){case"content":return new c(a);case"shadow":return new e(a);case"template":return new f(a)}d.call(this,a)}var c=a.wrappers.HTMLContentElement,d=a.wrappers.HTMLElement,e=a.wrappers.HTMLShadowElement,f=a.wrappers.HTMLTemplateElement;a.mixin;var g=a.registerWrapper,h=window.HTMLUnknownElement;b.prototype=Object.create(d.prototype),g(h,b),a.wrappers.HTMLUnknownElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";var b=a.GetElementsByInterface,c=a.ParentNodeInterface,d=a.SelectorsInterface,e=a.mixin,f=a.registerObject,g=f(document.createDocumentFragment());e(g.prototype,c),e(g.prototype,d),e(g.prototype,b);var h=f(document.createTextNode("")),i=f(document.createComment(""));a.wrappers.Comment=i,a.wrappers.DocumentFragment=g,a.wrappers.Text=h}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b){var d=i(b.impl.ownerDocument.createDocumentFragment());c.call(this,d),g(d,this);var e=b.shadowRoot;a.nextOlderShadowTreeTable.set(this,e),j.set(this,b)}var c=a.wrappers.DocumentFragment,d=a.elementFromPoint,e=a.getInnerHTML,f=a.mixin,g=a.rewrap,h=a.setInnerHTML,i=a.unwrap,j=new SideTable;b.prototype=Object.create(c.prototype),f(b.prototype,{get innerHTML(){return e(this)},set innerHTML(a){h(this,a),this.invalidateShadowRenderer()},invalidateShadowRenderer:function(){return j.get(this).invalidateShadowRenderer()},elementFromPoint:function(a,b){return d(this,this.ownerDocument,a,b)},getElementById:function(a){return this.querySelector("#"+a)}}),a.wrappers.ShadowRoot=b,a.getHostForShadowRoot=function(a){return j.get(a)}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){a.previousSibling_=a.previousSibling,a.nextSibling_=a.nextSibling,a.parentNode_=a.parentNode}function c(a){a.firstChild_=a.firstChild,a.lastChild_=a.lastChild}function d(a){E(a instanceof D);for(var d=a.firstChild;d;d=d.nextSibling)b(d);c(a)}function e(a){var b=G(a);d(a),b.textContent=""}function f(a,c){var e=G(a),f=G(c);f.nodeType===D.DOCUMENT_FRAGMENT_NODE?d(c):(h(c),b(c)),a.lastChild_=a.lastChild,a.lastChild===a.firstChild&&(a.firstChild_=a.firstChild);var g=H(e.lastChild);g&&(g.nextSibling_=g.nextSibling),e.appendChild(f)}function g(a,c){var d=G(a),e=G(c);b(c),c.previousSibling&&(c.previousSibling.nextSibling_=c),c.nextSibling&&(c.nextSibling.previousSibling_=c),a.lastChild===c&&(a.lastChild_=c),a.firstChild===c&&(a.firstChild_=c),d.removeChild(e)}function h(a){var b=G(a),c=b.parentNode;c&&g(H(c),a)}function i(a,b){k(b).push(a),A(a,b);var c=J.get(a);c||J.set(a,c=[]),c.push(b)}function j(a){I.set(a,[])}function k(a){return I.get(a)}function l(a){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}function m(a,b,c){for(var d=l(a),e=0;e","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim();return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},propertiesFromRule:function(a){var b=a.style.cssText;return a.style.content&&!a.style.content.match(/['"]+/)&&(b="content: '"+a.style.content+"';\n"+a.style.cssText.replace(/content:[^;]*;/g,"")),b}},i=/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,j=/([^{]*)({[\s\S]*?})/gim,k=/(.*)((?:\*)|(?:\:scope))(.*)/,l=/^[.\[:]/,m=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,n=/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,o=/::(x-[^\s{,(]*)/gim,p="([>\\s~+[.,{:][\\s\\S]*)?$",q=/@host/gim;if(window.ShadowDOMPolyfill){e("style { display: none !important; }\n");var r=document.querySelector("head");r.insertBefore(f(),r.childNodes[0])}a.ShadowCSS=h}(window.Platform)}else{var SideTable;"undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0?SideTable=WeakMap:function(){var a=Object.defineProperty,b=Object.hasOwnProperty,c=(new Date).getTime()%1e9;SideTable=function(){this.name="__st"+(1e9*Math.random()>>>0)+(c++ +"__")},SideTable.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}(),function(){window.templateContent=window.templateContent||function(a){return a.content},window.wrap=window.unwrap=function(a){return a},Object.defineProperties(HTMLElement.prototype,{shadowRoot:{get:function(){return this.webkitShadowRoot}},createShadowRoot:{value:function(){return this.webkitCreateShadowRoot()}}}),window.templateContent=function(a){if(window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(a),!a.content&&!a._content){for(var b=document.createDocumentFragment();a.firstChild;)b.appendChild(a.firstChild);a._content=b}return a.content||a._content}}()}if(function(a){function b(a){for(var b=a||{},d=1;d",""," "," ShadowDOM Inspector"," "," "," ",'
    ',"
",'
'," ",""].join("\n"),d=[],e=function(){var a=b.document,c=a.querySelector("#crumbs");c.textContent="";for(var e,g=0;e=d[g];g++){var h=a.createElement("a");h.href="#",h.textContent=e.localName,h.idx=g,h.onclick=function(a){for(var b;d.length>this.idx;)b=d.pop();f(b.shadow||b,b),a.preventDefault()},c.appendChild(a.createElement("li")).appendChild(h)}},f=function(a,c){var f=b.document;k=[];var g=c||a;d.push(g),e(),f.body.querySelector("#tree").innerHTML="
"+j(a,a.childNodes)+"
"},g=Array.prototype.forEach.call.bind(Array.prototype.forEach),h={STYLE:1,SCRIPT:1,"#comment":1,TEMPLATE:1},i=function(a){return h[a.nodeName]},j=function(a,b,c){if(i(a))return"";var d=c||"";if(a.localName||11==a.nodeType){var e=a.localName||"shadow-root",f=d+l(a);"content"==e&&(b=a.getDistributedNodes()),f+="
";var h=d+"  ";g(b,function(a){f+=j(a,a.childNodes,h)}),f+=d,{br:1}[e]||(f+="</"+e+">",f+="
")}else{var k=a.textContent.trim();f=k?d+'"'+k+'"'+"
":""}return f},k=[],l=function(a){var b="<",c=a.localName||"shadow-root";return a.webkitShadowRoot||a.shadowRoot?(b+=' ",k.push(a)):b+=c||"shadow-root",a.attributes&&g(a.attributes,function(a){b+=" "+a.name+(a.value?'="'+a.value+'"':"")}),b+=">"};shadowize=function(){var a=Number(this.attributes.idx.value),b=k[a];b?f(b.webkitShadowRoot||b.shadowRoot,b):(console.log("bad shadowize node"),console.dir(this))},a.output=j}(window.Inspector),function(a){"use strict";function b(){function a(a){"splice"===a[0].type&&"splice"===a[1].type&&(b=!0)}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=!1,c=[0];return Array.observe(c,a),c[1]=1,c.length=0,Object.deliverChangeRecords(a),b}function c(a){return+a===a>>>0}function d(a){return+a}function e(a){return a===Object(a)}function f(a,b){return a===b?0!==a||1/a===1/b:K(a)&&K(b)?!0:a!==a&&b!==b}function g(a){return"string"!=typeof a?!1:(a=a.replace(/\s/g,""),""==a?!0:"."==a[0]?!1:S.test(a))}function h(a){var b=T[a];if(b)return b;if(g(a)){var b=new i(a);return T[a]=b,b}}function i(a){return""==a.trim()?this:c(a)?(this.push(String(a)),this):(a.split(/\./).filter(function(a){return a}).forEach(function(a){this.push(a)},this),H&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn()),void 0)}function j(a){for(var b=0;U>b&&a.check();)a.report(),b++}function k(a){for(var b in a)return!1;return!0}function l(a){return k(a.added)&&k(a.removed)&&k(a.changed)}function m(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function n(a,b){var c=b||(Array.isArray(a)?[]:{});for(var d in a)c[d]=a[d];return Array.isArray(a)&&(c.length=a.length),c}function o(a,b,c,d){this.object=a,this.callback=b,this.target=c,this.token=d,this.reporting=!0,G&&(this.boundInternalCallback=this.internalCallback.bind(this)),this.valid=!0,p(this),this.connect(),this.sync(!0)}function p(a){W&&(V.push(a),o._allObserversCount++)}function q(a,b,c,d){o.call(this,a,b,c,d)}function r(a,b,c,d){if(!Array.isArray(a))throw Error("Provided object is not an Array");o.call(this,a,b,c,d)}function s(a){this.arr=[],this.callback=a,this.isObserved=!0}function t(a,b,c,d,f){this.value=void 0;var g=h(b);if(g)return g.length?(e(a)&&(this.path=g,o.call(this,a,c,d,f)),void 0):(this.value=a,void 0)}function u(a,b){if("function"==typeof Object.observe){var c=Object.getNotifier(a);return function(d,e){var f={object:a,type:d,name:b};2===arguments.length&&(f.oldValue=e),c.notify(f)}}}function v(a,b,c){for(var d={},e={},f=0;fj;j++)i[j]=new Array(h),i[j][0]=j;for(var k=0;h>k;k++)i[0][k]=k;for(var j=1;g>j;j++)for(var k=1;h>k;k++)if(d[e+j-1]===a[b+k-1])i[j][k]=i[j-1][k-1];else{var l=i[j-1][k]+1,m=i[j][k-1]+1;i[j][k]=m>l?l:m}return i}function x(a){for(var b=a.length-1,c=a[0].length-1,d=a[b][c],e=[];b>0||c>0;)if(0!=b)if(0!=c){var f,g=a[b-1][c-1],h=a[b-1][c],i=a[b][c-1];f=i>h?g>h?h:g:g>i?i:g,f==g?(g==d?e.push(ab):(e.push(bb),d=g),b--,c--):f==h?(e.push(db),b--,d=h):(e.push(cb),c--,d=i)}else e.push(db),b--;else e.push(cb),c--;return e.reverse(),e}function y(a,b,c){for(var d=0;c>d;d++)if(a[d]!==b[d])return d;return c}function z(a,b,c){for(var d=a.length,e=b.length,f=0;c>f&&a[--d]===b[--e];)f++;return f}function A(a,b,c){return{index:a,removed:b,addedCount:c}}function B(a,b,c,d,e,f){var g=0,h=0,i=Math.min(c-b,f-e);if(0==b&&0==e&&(g=y(a,d,i)),c==a.length&&f==d.length&&(h=z(a,d,i-g)),b+=g,e+=g,c-=h,f-=h,0==c-b&&0==f-e)return[];if(b==c){for(var j=A(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[A(b,[],c-b)];for(var k=x(w(a,b,c,d,e,f)),j=void 0,l=[],m=b,n=e,o=0;ob||a>d?-1:b==c||d==a?0:c>a?d>b?b-c:d-c:b>d?d-a:b-a}function D(a,b,c,d){for(var e=A(b,c,d),f=!1,g=0,h=0;h=0){a.splice(h,1),h--,g-=i.addedCount-i.removed.length,e.addedCount+=i.addedCount-j;var k=e.removed.length+i.removed.length-j;if(e.addedCount||k){var c=i.removed;if(e.indexi.index+i.addedCount){var m=e.removed.slice(i.index+i.addedCount-e.index);Array.prototype.push.apply(c,m)}e.removed=c,i.indexh)continue;D(e,h,[g.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(g))}}return e}function F(a,b){var c=[];return E(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?(b.removed[0]!==a[b.index]&&c.push(b),void 0):(c=c.concat(B(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)),void 0)}),c}var G=b(),H=!1;try{var I=new Function("","return true;");H=I()}catch(J){}var K=a.Number.isNaN||function(b){return"number"==typeof b&&a.isNaN(b)},L="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},M="[$_a-zA-Z]",N="[$_a-zA-Z0-9]",O=M+"+"+N+"*",P="(?:[0-9]|[1-9]+[0-9]+)",Q="(?:"+O+"|"+P+")",R="(?:"+Q+")(?:\\."+Q+")*",S=new RegExp("^"+R+"$"),T={};i.prototype=L({__proto__:[],toString:function(){return this.join(".")},getValueFrom:function(a){for(var b=0;ba&&b.anyChanged);o._allObserversCount=V.length,X=!1}}},W&&(a.Platform.clearObservers=function(){V=[]}),q.prototype=L({__proto__:o.prototype,connect:function(){G&&Object.observe(this.object,this.boundInternalCallback)},sync:function(){G||(this.oldObject=n(this.object))},check:function(a){var b,c;if(G){if(!a)return!1;c={},b=v(this.object,a,c)}else c=this.oldObject,b=m(this.object,this.oldObject);return l(b)?!1:(this.reportArgs=[b.added||{},b.removed||{},b.changed||{}],this.reportArgs.push(function(a){return c[a]}),!0)},disconnect:function(){G?this.object&&Object.unobserve(this.object,this.boundInternalCallback):this.oldObject=void 0}}),r.prototype=L({__proto__:q.prototype,connect:function(){G&&Array.observe(this.object,this.boundInternalCallback)},sync:function(){G||(this.oldObject=this.object.slice())},check:function(a){var b;if(G){if(!a)return!1;b=F(this.object,a)}else b=B(this.object,0,this.object.length,this.oldObject,0,this.oldObject.length);return b&&b.length?(this.reportArgs=[b],!0):!1}}),r.applySplices=function(a,b,c){c.forEach(function(c){for(var d=[c.index,c.removed.length],e=c.index;e=0&&this.arr[b+1]===this.isObserved||(0>b&&(b=this.arr.length,this.arr[b]=a,Object.observe(a,this.callback)),this.arr[b+1]=this.isObserved,this.observe(Object.getPrototypeOf(a)))}},cleanup:function(){for(var a=0,b=0,c=this.isObserved;ba&&(this.arr[a]=d,this.arr[a+1]=c),a+=2):Object.unobserve(d,this.callback),b+=2}this.arr.length=a}},t.prototype=L({__proto__:o.prototype,connect:function(){G&&(this.observedSet=new s(this.boundInternalCallback))},disconnect:function(){this.value=void 0,G&&(this.observedSet.reset(),this.observedSet.cleanup(),this.observedSet=void 0)},check:function(){return this.value=G?this.path.getValueFromObserved(this.object,this.observedSet):this.path.getValueFrom(this.object),f(this.value,this.oldValue)?!1:(this.reportArgs=[this.value,this.oldValue],!0)},sync:function(a){a&&(this.value=G?this.path.getValueFromObserved(this.object,this.observedSet):this.path.getValueFrom(this.object)),this.oldValue=this.value}}),t.getValueAtPath=function(a,b){var c=h(b);if(c)return c.getValueFrom(a)},t.setValueAtPath=function(a,b,c){var d=h(b);d&&d.setValueFrom(a,c)};var _={"new":!0,updated:!0,deleted:!0};t.defineProperty=function(a,b,c){var d=c.object,e=h(c.path),f=u(a,b),g=new t(d,c.path,function(a,b){f&&f("updated",b)});return Object.defineProperty(a,b,{get:function(){return e.getValueFrom(d)},set:function(a){e.setValueFrom(d,a)},configurable:!0}),{close:function(){var c=e.getValueFrom(d);f&&g.deliver(),g.close(),Object.defineProperty(a,b,{value:c,writable:!0,configurable:!0})}}};var ab=0,bb=1,cb=2,db=3;a.Observer=o,a.Observer.hasObjectObserve=G,a.ArrayObserver=r,a.ArrayObserver.calculateSplices=function(a,b){return B(a,0,a.length,b,0,b.length)},a.ObjectObserver=q,a.PathObserver=t,a.Path=i}(this),function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a){for(;a.parentNode;)a=a.parentNode;return"function"==typeof a.getElementById?a:null}function d(a){return a.ownerDocument.contains(a)}function e(a,b,c,d){this.closed=!1,this.node=a,this.property=b,this.model=c,this.path=d,this.observer=new PathObserver(c,d,this.boundValueChanged,this),this.boundValueChanged(this.value)}function f(a,b,c,d){this.conditional="?"==b[b.length-1],this.conditional&&(a.removeAttribute(b),b=b.slice(0,-1)),e.call(this,a,b,c,d)}function g(a){switch(a.type){case"checkbox":return T;case"radio":case"select-multiple":case"select-one":return"change";default:return"input"}}function h(a,b,c,d){e.call(this,a,b,c,d),this.eventType=g(this.node),this.boundNodeValueToModel=this.nodeValueChanged.bind(this),this.node.addEventListener(this.eventType,this.boundNodeValueToModel,!0)}function i(a){if(!d(a))return[];if(a.form)return Q(a.form.elements,function(b){return b!=a&&"INPUT"==b.tagName&&"radio"==b.type&&b.name==a.name});var b=a.ownerDocument.querySelectorAll('input[type="radio"][name="'+a.name+'"]');return Q(b,function(b){return b!=a&&!b.form})}function j(a,b,c){h.call(this,a,"checked",b,c)}function k(a,b,c){h.call(this,a,"selectedIndex",b,c)}function l(a){return $[a.tagName]&&a.hasAttribute("template")}function m(a){return"TEMPLATE"==a.tagName||l(a)}function n(a){return _&&"TEMPLATE"==a.tagName}function o(a,b){var c=a.querySelectorAll(ab);m(a)&&b(a),P(c,b)}function p(a){function b(a){HTMLTemplateElement.decorate(a)||p(a.content)}o(a,b)}function q(a,b){Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))})}function r(a){if(!a.defaultView)return a;var b=eb.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);eb.set(a,b)}return b}function s(a){var b=a.ownerDocument.createElement("template");a.parentNode.insertBefore(b,a);for(var c=a.attributes,d=c.length;d-->0;){var e=c[d];Z[e.name]&&("template"!==e.name&&b.setAttribute(e.name,e.value),a.removeAttribute(e.name))}return b}function t(a,b,c){var d=a.content;if(c)return d.appendChild(b),void 0;for(var e;e=b.firstChild;)d.appendChild(e)}function u(a){"TEMPLATE"===a.tagName?_||(cb?a.__proto__=HTMLTemplateElement.prototype:q(a,HTMLTemplateElement.prototype)):(q(a,HTMLTemplateElement.prototype),Object.defineProperty(a,"content",ib))}function v(a){var b=lb.get(a);b||(b=function(){H(a,a.model,a.bindingDelegate)},lb.set(a,b)),bb(b)}function w(a,b,c,d){this.closed=!1,this.node=a,this.property=b,this.model=c,this.path=d,this.node.inputs.bind(this.property,c,d||"")}function x(a){return 3==a.length&&0==a[0].length&&0==a[2].length}function y(a){if(a&&a.length){for(var b,c=a.length,d=0,e=0,f=0;c>e;){if(d=a.indexOf("{{",e),f=0>d?-1:a.indexOf("}}",d+2),0>f){if(!b)return;b.push(a.slice(e));break}b=b||[],b.push(a.slice(e,d)),b.push(a.slice(d+2,f).trim()),e=f+2}return e===c&&b.push(""),b}}function z(a,b,c,d,e){var f,g=e&&e[X];return g&&"function"==typeof g&&(f=g(c,d,b,a),f&&(c=f,d="value")),a.bind(b,c,d)}function A(a,b,c,d,e){for(var f=0;fc?(this.keys.push(a),this.values.push(b)):this.values[c]=b},get:function(a){var b=this.keys.indexOf(a);if(!(0>b))return this.values[b]},"delete":function(a){var b=this.keys.indexOf(a);return 0>b?!1:(this.keys.splice(b,1),this.values.splice(b,1),!0)},forEach:function(a,b){for(var c=0;c>>0)+(c++ +"__")},S.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}(),Node.prototype.bind=function(a,b,c){this.bindings=this.bindings||{};var d=this.bindings[a];return d&&d.close(),d=this.createBinding(a,b,c),this.bindings[a]=d,d?d:(console.error("Unhandled binding to Node: ",this,a,b,c),void 0)},Node.prototype.createBinding=function(){},Node.prototype.unbind=function(a){if(this.bindings){var b=this.bindings[a];b&&(b.close(),delete this.bindings[a])}},Node.prototype.unbindAll=function(){if(this.bindings){for(var a=Object.keys(this.bindings),b=0;be.node.length&&d--?bb(b):e.node[e.property]=c}var c=Number(a);if(c<=this.node.length)return this.node[this.property]=c,void 0;var d=2,e=this;bb(b)}}),HTMLSelectElement.prototype.createBinding=function(a,b,c){return"selectedindex"===a.toLowerCase()?(this.removeAttribute(a),new k(this,b,c)):HTMLElement.prototype.createBinding.call(this,a,b,c)};var U="bind",V="repeat",W="if",X="getBinding",Y="getInstanceModel",Z={template:!0,repeat:!0,bind:!0,ref:!0},$={THEAD:!0,TBODY:!0,TFOOT:!0,TH:!0,TR:!0,TD:!0,COLGROUP:!0,COL:!0,CAPTION:!0,OPTION:!0,OPTGROUP:!0},_="undefined"!=typeof HTMLTemplateElement,ab="template, "+Object.keys($).map(function(a){return a.toLowerCase()+"[template]"}).join(", "),bb=function(){function a(a){this.nextRunner=a,this.value=!1,this.lastValue=this.value,this.scheduled=[],this.scheduledIds=[],this.running=!1,this.observer=new PathObserver(this,"value",this.run,this)}function b(a){var b=a[e];a[e]||(b=d++,a[e]=b),c.schedule(a,b)}a.prototype={schedule:function(a,b){if(!this.scheduledIds[b]){if(this.running)return this.nextRunner.schedule(a,b);this.scheduledIds[b]=!0,this.scheduled.push(a),this.lastValue===this.value&&(this.value=!this.value)}},run:function(){this.running=!0;for(var a=0;a=48&&57>=a}function d(a){return 32===a||9===a||11===a||12===a||160===a||a>=5760&&" ᠎              ".indexOf(String.fromCharCode(a))>0}function e(a){return 10===a||13===a||8232===a||8233===a}function f(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a}function g(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a||a>=48&&57>=a}function h(a){return"this"===a}function i(){for(;bb>ab&&d(_.charCodeAt(ab));)++ab}function j(){var a,b;for(a=ab++;bb>ab&&(b=_.charCodeAt(ab),g(b));)++ab;return _.slice(a,ab)}function k(){var a,b,c;return a=ab,b=j(),c=1===b.length?X.Identifier:h(b)?X.Keyword:"null"===b?X.NullLiteral:"true"===b||"false"===b?X.BooleanLiteral:X.Identifier,{type:c,value:b,range:[a,ab]}}function l(){var a,b,c,d,e=ab,f=_.charCodeAt(ab),g=_[ab];switch(f){case 46:case 40:case 41:case 59:case 44:case 123:case 125:case 91:case 93:case 58:case 63:case 126:return++ab,{type:X.Punctuator,value:String.fromCharCode(f),range:[e,ab]};default:if(a=_.charCodeAt(ab+1),61===a)switch(f){case 37:case 38:case 42:case 43:case 45:case 47:case 60:case 62:case 94:case 124:return ab+=2,{type:X.Punctuator,value:String.fromCharCode(f)+String.fromCharCode(a),range:[e,ab]};case 33:case 61:return ab+=2,61===_.charCodeAt(ab)&&++ab,{type:X.Punctuator,value:_.slice(e,ab),range:[e,ab]}}}return b=_[ab+1],c=_[ab+2],d=_[ab+3],">"===g&&">"===b&&">"===c&&"="===d?(ab+=4,{type:X.Punctuator,value:">>>=",range:[e,ab]}):">"===g&&">"===b&&">"===c?(ab+=3,{type:X.Punctuator,value:">>>",range:[e,ab]}):"<"===g&&"<"===b&&"="===c?(ab+=3,{type:X.Punctuator,value:"<<=",range:[e,ab]}):">"===g&&">"===b&&"="===c?(ab+=3,{type:X.Punctuator,value:">>=",range:[e,ab]}):g===b&&"+-<>&|".indexOf(g)>=0?(ab+=2,{type:X.Punctuator,value:g+b,range:[e,ab]}):"<>=!+-*%&|^/".indexOf(g)>=0?(++ab,{type:X.Punctuator,value:g,range:[e,ab]}):(s({},$.UnexpectedToken,"ILLEGAL"),void 0)}function m(){var a,d,e;if(e=_[ab],b(c(e.charCodeAt(0))||"."===e,"Numeric literal must start with a decimal digit or a decimal point"),d=ab,a="","."!==e){for(a=_[ab++],e=_[ab],"0"===a&&e&&c(e.charCodeAt(0))&&s({},$.UnexpectedToken,"ILLEGAL");c(_.charCodeAt(ab));)a+=_[ab++];e=_[ab]}if("."===e){for(a+=_[ab++];c(_.charCodeAt(ab));)a+=_[ab++];e=_[ab]}if("e"===e||"E"===e)if(a+=_[ab++],e=_[ab],("+"===e||"-"===e)&&(a+=_[ab++]),c(_.charCodeAt(ab)))for(;c(_.charCodeAt(ab));)a+=_[ab++];else s({},$.UnexpectedToken,"ILLEGAL");return f(_.charCodeAt(ab))&&s({},$.UnexpectedToken,"ILLEGAL"),{type:X.NumericLiteral,value:parseFloat(a),range:[d,ab]}}function n(){var a,c,d,f="",g=!1;for(a=_[ab],b("'"===a||'"'===a,"String literal must starts with a quote"),c=ab,++ab;bb>ab;){if(d=_[ab++],d===a){a="";break}if("\\"===d)if(d=_[ab++],d&&e(d.charCodeAt(0)))"\r"===d&&"\n"===_[ab]&&++ab;else switch(d){case"n":f+="\n";break;case"r":f+="\r";break;case"t":f+=" ";break;case"b":f+="\b";break;case"f":f+="\f";break;case"v":f+=" ";break;default:f+=d}else{if(e(d.charCodeAt(0)))break;f+=d}}return""!==a&&s({},$.UnexpectedToken,"ILLEGAL"),{type:X.StringLiteral,value:f,octal:g,range:[c,ab]}}function o(a){return a.type===X.Identifier||a.type===X.Keyword||a.type===X.BooleanLiteral||a.type===X.NullLiteral}function p(){var a;return i(),ab>=bb?{type:X.EOF,range:[ab,ab]}:(a=_.charCodeAt(ab),40===a||41===a||58===a?l():39===a||34===a?n():f(a)?k():46===a?c(_.charCodeAt(ab+1))?m():l():c(a)?m():l())}function q(){var a;return a=db,ab=a.range[1],db=p(),ab=a.range[1],a}function r(){var a;a=ab,db=p(),ab=a}function s(a,c){var d,e=Array.prototype.slice.call(arguments,2),f=c.replace(/%(\d)/g,function(a,c){return b(cab&&(a.push(O()),!v(")"));)u(",");return u(")"),a}function F(){var a;return a=q(),o(a)||t(a),cb.createIdentifier(a.value)}function G(){return u("."),F()}function H(){var a;return u("["),a=P(),u("]"),a}function I(){var a,b,c;for(a=D();v(".")||v("[")||v("(");)v("(")?(b=E(),a=cb.createCallExpression(a,b)):v("[")?(c=H(),a=cb.createMemberExpression("[",a,c)):(c=G(),a=cb.createMemberExpression(".",a,c));return a}function J(){var a;return a=I(),db.type===X.Punctuator&&(v("++")||v("--"))&&s({},$.UnexpectedToken),a}function K(){var a,b;return db.type!==X.Punctuator&&db.type!==X.Keyword?b=J():v("++")||v("--")?s({},$.UnexpectedToken):v("+")||v("-")||v("~")||v("!")?(a=q(),b=K(),b=cb.createUnaryExpression(a.value,b)):w("delete")||w("void")||w("typeof")?s({},$.UnexpectedToken):b=J(),b}function L(a,b){var c=0;if(a.type!==X.Punctuator&&a.type!==X.Keyword)return 0;switch(a.value){case"||":c=1;break;case"&&":c=2;break;case"|":c=3;break;case"^":c=4;break;case"&":c=5;break;case"==":case"!=":case"===":case"!==":c=6;break;case"<":case">":case"<=":case">=":case"instanceof":c=7;break;case"in":c=b?7:0;break;case"<<":case">>":case">>>":c=8;break;case"+":case"-":c=9;break;case"*":case"/":case"%":c=11}return c}function M(){var a,b,c,d,e,f,g,h,i;if(d=eb.allowIn,eb.allowIn=!0,h=K(),b=db,c=L(b,d),0===c)return h;for(b.prec=c,q(),f=K(),e=[h,b,f];(c=L(db,d))>0;){for(;e.length>2&&c<=e[e.length-2].prec;)f=e.pop(),g=e.pop().value,h=e.pop(),a=cb.createBinaryExpression(g,h,f),e.push(a);b=q(),b.prec=c,e.push(b),a=K(),e.push(a)}for(eb.allowIn=d,i=e.length-1,a=e[i];i>1;)a=cb.createBinaryExpression(e[i-1].value,e[i-2],a),i-=2;return a}function N(){var a,b,c,d;return a=M(),v("?")&&(q(),b=eb.allowIn,eb.allowIn=!0,c=O(),eb.allowIn=b,u(":"),d=O(),a=cb.createConditionalExpression(a,c,d)),a}function O(){var a,b,c;return a=db,c=b=N()}function P(){var a;return a=O()}function Q(){return u(";"),cb.createEmptyStatement()}function R(){var a=P();return x(),cb.createExpressionStatement(a)}function S(){var a,b,c,d=db.type;if(d===X.EOF&&t(db),i(),d===X.Punctuator)switch(db.value){case";":return Q();case"(":return R()}return a=P(),a.type===Z.Identifier&&v(":")?(q(),c="$"+a.name,Object.prototype.hasOwnProperty.call(eb.labelSet,c)&&s({},$.Redeclaration,"Label",a.name),eb.labelSet[c]=!0,b=S(),delete eb.labelSet[c],cb.createLabeledStatement(a,b)):(x(),cb.createExpressionStatement(a))}function T(){return db.type===X.Keyword?S():db.type!==X.EOF?S():void 0}function U(){for(var a,b=[];bb>ab&&(a=T(),"undefined"!=typeof a);)b.push(a);return b}function V(){var a;return i(),r(),a=U(),cb.createProgram(a)}function W(a,b){var c;return c=String,"string"==typeof a||a instanceof String||(a=c(a)),cb=b,_=a,ab=0,bb=_.length,db=null,eb={allowIn:!0,labelSet:{}},bb>0&&"undefined"==typeof _[0]&&a instanceof String&&(_=a.valueOf()),V()}var X,Y,Z,$,_,ab,bb,cb,db,eb;X={BooleanLiteral:1,EOF:2,Identifier:3,Keyword:4,NullLiteral:5,NumericLiteral:6,Punctuator:7,StringLiteral:8},Y={},Y[X.BooleanLiteral]="Boolean",Y[X.EOF]="",Y[X.Identifier]="Identifier",Y[X.Keyword]="Keyword",Y[X.NullLiteral]="Null",Y[X.NumericLiteral]="Numeric",Y[X.Punctuator]="Punctuator",Y[X.StringLiteral]="String",Z={ArrayExpression:"ArrayExpression",BinaryExpression:"BinaryExpression",CallExpression:"CallExpression",ConditionalExpression:"ConditionalExpression",EmptyStatement:"EmptyStatement",ExpressionStatement:"ExpressionStatement",Identifier:"Identifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",ObjectExpression:"ObjectExpression",Program:"Program",Property:"Property",ThisExpression:"ThisExpression",UnaryExpression:"UnaryExpression"},$={UnexpectedToken:"Unexpected token %0",UnknownLabel:"Undefined label '%0'",Redeclaration:"%0 '%1' has already been declared"},a.esprima={parse:W}}(this),function(a){"use strict";function b(a,b,d,e){if(e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.tagName&&("bind"===d||"repeat"===d)){var f,g,h=b.match(r);if(h?(f=h[1],g=h[2]):(h=b.match(s),h&&(f=h[2],g=h[1])),h){var i;if(g=g.trim(),g.match(q))i=new CompoundBinding(function(a){return a.path}),i.bind("path",a,g);else try{i=c(a,g)}catch(j){console.error("Invalid expression syntax: "+g,j)}if(i)return t.set(e,f),i}}}function c(a,b){try{var c=new f;if(esprima.parse(b,c),!c.statements.length&&!c.labeledStatements.length)return;if(!c.labeledStatements.length&&c.statements.length>1)throw Error("Multiple unlabelled statements are not allowed.");var e=c.labeledStatements.length?d(c.labeledStatements):e=c.statements[0],g=[];for(var h in c.deps)g.push(h);if(!g.length)return{value:e({})};for(var i=new CompoundBinding(e),j=0;j>>0)+(c++ +"__")},i.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}();var j="[$_a-zA-Z]",k="[$_a-zA-Z0-9]",l=j+"+"+k+"*",m="("+l+")",n="(?:[0-9]|[1-9]+[0-9]+)",o="(?:"+l+"|"+n+")",p="(?:"+o+")(?:\\."+o+")*",q=new RegExp("^"+p+"$"),r=new RegExp("^"+m+"\\s* in (.*)$"),s=new RegExp("^(.*) as \\s*"+m+"$"),t=new i;e.prototype={getPath:function(){return this.last?this.last.getPath()+"."+this.name:this.name},valueFn:function(){var a=this.getPath();return this.deps[a]=!0,function(b){return b[a]}}};var u={"+":function(a){return+a},"-":function(a){return-a},"!":function(a){return!a}},v={"+":function(a,b){return a+b},"-":function(a,b){return a-b},"*":function(a,b){return a*b},"/":function(a,b){return a/b},"%":function(a,b){return a%b},"<":function(a,b){return b>a},">":function(a,b){return a>b},"<=":function(a,b){return b>=a},">=":function(a,b){return a>=b},"==":function(a,b){return a==b},"!=":function(a,b){return a!=b},"===":function(a,b){return a===b},"!==":function(a,b){return a!==b},"&&":function(a,b){return a&&b},"||":function(a,b){return a||b}};f.prototype={getFn:function(a){return a instanceof e?a.valueFn():a},createProgram:function(){},createExpressionStatement:function(a){return this.statements.push(a),a},createLabeledStatement:function(a,b){return this.labeledStatements.push({label:a.getPath(),body:b instanceof e?b.valueFn():b}),b},createUnaryExpression:function(a,b){if(!u[a])throw Error("Disallowed operator: "+a);return b=this.getFn(b),function(c){return u[a](b(c))}},createBinaryExpression:function(a,b,c){if(!v[a])throw Error("Disallowed operator: "+a);return b=this.getFn(b),c=this.getFn(c),function(d){return v[a](b(d),c(d))}},createConditionalExpression:function(a,b,c){return a=this.getFn(a),b=this.getFn(b),c=this.getFn(c),function(d){return a(d)?b(d):c(d)}},createIdentifier:function(a){var b=new e(this.deps,a);return b.type="Identifier",b},createMemberExpression:function(a,b,c){return new e(this.deps,c.name,b)},createLiteral:function(a){return function(){return a.value}},createArrayExpression:function(a){for(var b=0;be;e++)d.unshift("..");var g=d.join("/");return g},resolvePathsInHTML:function(a,b){b=b||p.documentUrlFromNode(a),p.resolveAttributes(a,b),p.resolveStyleElts(a,b);var c=a.querySelectorAll("template");c&&q(c,function(a){a.content&&p.resolvePathsInHTML(a.content,b)})},resolvePathsInStylesheet:function(a){var b=p.nodeUrl(a);a.__resource=p.resolveCssText(a.__resource,b)},resolveStyleElts:function(a,b){var c=a.querySelectorAll("style");c&&q(c,function(a){a.textContent=p.resolveCssText(a.textContent,b)})},resolveCssText:function(a,b){return a.replace(/url\([^)]*\)/g,function(a){var c=a.replace(/["']/g,"").slice(4,-1);return c=p.resolveUrl(b,c,!0),"url("+c+")"})},resolveAttributes:function(a,b){var c=a&&a.querySelectorAll(n);c&&q(c,function(a){this.resolveNodeAttributes(a,b)},this)},resolveNodeAttributes:function(a,b){m.forEach(function(c){var d=a.attributes[c];if(d&&d.value&&d.value.search(o)<0){var e=p.resolveUrl(b,d.value,!0);d.value=e}})}};h=h||{async:!0,ok:function(a){return a.status>=200&&a.status<300||304===a.status||0===a.status},load:function(b,c,d){var e=new XMLHttpRequest;return(a.flags.debug||a.flags.bust)&&(b+="?"+Math.random()),e.open("GET",b,h.async),e.addEventListener("readystatechange",function(){4===e.readyState&&c.call(d,!h.ok(e)&&e,e.response,b)}),e.send(),e},loadDocument:function(a,b,c){this.load(a,b,c).responseType="document"}};var q=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.path=p,a.xhr=h,a.importer=k,a.getDocumentUrl=p.getDocumentUrl,a.IMPORT_LINK_TYPE=i}(window.HTMLImports),function(a){function b(a){return"link"===a.localName&&a.getAttribute("rel")===f}function c(a){return a.parentNode&&!d(a)&&!e(a)}function d(a){return a.ownerDocument===document||a.ownerDocument.impl===document}function e(a){return a.parentNode&&"element"===a.parentNode.localName}var f="import",g={selectors:["link[rel="+f+"]","link[rel=stylesheet]","style","script:not([type])",'script[type="text/javascript"]'],map:{link:"parseLink",script:"parseScript",style:"parseGeneric"},parse:function(a){if(!a.__importParsed){a.__importParsed=!0;var b=a.querySelectorAll(g.selectors);h(b,function(a){g[g.map[a.localName]](a)})}},parseLink:function(a){b(a)?a.content&&g.parse(a.content):this.parseGeneric(a)},parseGeneric:function(a){c(a)&&document.head.appendChild(a)},parseScript:function(b){if(c(b)){var d=(b.__resource||b.textContent).trim();if(d){var e=b.__nodeUrl;if(!e){var e=a.path.documentUrlFromNode(b),f="["+Math.floor(1e3*(Math.random()+1))+"]",g=d.match(/Polymer\(['"]([^'"]*)/);f=g&&g[1]||f,e+="/"+f+".js"}d+="\n//# sourceURL="+e+"\n",eval.call(window,d)}}}},h=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.parser=g}(HTMLImports),function(){function a(){HTMLImports.importer.load(document,function(){HTMLImports.parser.parse(document),HTMLImports.readyTime=(new Date).getTime(),document.dispatchEvent(new CustomEvent("HTMLImportsLoaded",{bubbles:!0}))})}"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState?a():window.addEventListener("DOMContentLoaded",a)}(),function(a){function b(a){u.push(a),t||(t=!0,q(d))}function c(a){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(a)||a}function d(){t=!1;var a=u;u=[],a.sort(function(a,b){return a.uid_-b.uid_});var b=!1;a.forEach(function(a){var c=a.takeRecords();e(a),c.length&&(a.callback_(c,a),b=!0)}),b&&d()}function e(a){a.nodes_.forEach(function(b){var c=p.get(b);c&&c.forEach(function(b){b.observer===a&&b.removeTransientObservers()})})}function f(a,b){for(var c=a;c;c=c.parentNode){var d=p.get(c);if(d)for(var e=0;e0){var e=c[d-1],f=n(e,a);if(f)return c[d-1]=f,void 0}else b(this.observer);c[d]=a},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(a){var b=this.options;b.attributes&&a.addEventListener("DOMAttrModified",this,!0),b.characterData&&a.addEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.addEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(a){var b=this.options;b.attributes&&a.removeEventListener("DOMAttrModified",this,!0),b.characterData&&a.removeEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.removeEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(a){if(a!==this.target){this.addListeners_(a),this.transientObservedNodes.push(a);var b=p.get(a);b||p.set(a,b=[]),b.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[],a.forEach(function(a){this.removeListeners_(a);for(var b=p.get(a),c=0;c1?logFlags.dom&&console.warn("inserted:",a.localName,"insert/remove count:",a.__inserted):a.insertedCallback&&(logFlags.dom&&console.log("inserted:",a.localName),a.insertedCallback())),logFlags.dom&&console.groupEnd())}function j(a){k(a),c(a,function(a){k(a)})}function k(a){(a.removedCallback||a.__upgraded__&&logFlags.dom)&&(logFlags.dom&&console.log("removed:",a.localName),l(a)||(a.__inserted=(a.__inserted||0)-1,a.__inserted>0&&(a.__inserted=0),a.__inserted<0?logFlags.dom&&console.warn("removed:",a.localName,"insert/remove count:",a.__inserted):a.removedCallback&&a.removedCallback()))}function l(a){for(var b=a;b;){if(b==a.ownerDocument)return!0;b=b.parentNode||b.host}}function m(a){a.webkitShadowRoot&&!a.webkitShadowRoot.__watched&&(logFlags.dom&&console.log("watching shadow-root for: ",a.localName),r(a.webkitShadowRoot),a.webkitShadowRoot.__watched=!0)}function n(a){m(a),c(a,function(){m(a)})}function o(a){switch(a.localName){case"style":case"script":case"template":case void 0:return!0}}function p(a){if(logFlags.dom){var b=a[0];if(b&&"childList"===b.type&&b.addedNodes&&b.addedNodes){for(var c=b.addedNodes[0];c&&c!==document&&!c.host;)c=c.parentNode;var d=c&&(c.URL||c._URL||c.host&&c.host.localName)||"";d=d.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",a.length,d||"")}a.forEach(function(a){"childList"===a.type&&(v(a.addedNodes,function(a){o(a)||f(a)}),v(a.removedNodes,function(a){o(a)||j(a)}))}),logFlags.dom&&console.groupEnd()}function q(){p(u.takeRecords())}function r(a){u.observe(a,{childList:!0,subtree:!0})}function s(a){r(a)}function t(a){logFlags.dom&&console.group("upgradeDocument: ",(a.URL||a._URL||"").split("/").pop()),f(a),logFlags.dom&&console.groupEnd()}var u=new MutationObserver(p),v=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.watchShadow=m,a.watchAllShadows=n,a.upgradeAll=f,a.upgradeSubtree=e,a.observeDocument=s,a.upgradeDocument=t,a.takeRecords=q}(window.CustomElements),function(){function parseElementElement(a){var b={name:"","extends":null};takeAttributes(a,b);var c=HTMLElement.prototype;if(b.extends){var d=document.createElement(b.extends);c=d.__proto__||Object.getPrototypeOf(d)}b.prototype=Object.create(c),a.options=b;var e=a.querySelector('script:not([type]),script[type="text/javascript"],scripts');e&&executeComponentScript(e.textContent,a,b.name);var f=document.register(b.name,b);a.ctor=f;var g=a.getAttribute("constructor");g&&(window[g]=f)}function takeAttributes(a,b){for(var c in b){var d=a.attributes[c];d&&(b[c]=d.value)}}function executeComponentScript(inScript,inContext,inName){context=inContext;var owner=context.ownerDocument,url=owner._URL||owner.URL||owner.impl&&(owner.impl._URL||owner.impl.URL),match=url.match(/.*\/([^.]*)[.]?.*$/);if(match){var name=match[1];url+=name!=inName?":"+inName:""}var code="__componentScript('"+inName+"', function(){"+inScript+"});"+"\n//# sourceURL="+url+"\n";eval(code)}function mixin(a,b){a=a||{};try{Object.getOwnPropertyNames(b).forEach(function(c){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)})}catch(c){}return a}var HTMLElementElement=function(a){return a.register=HTMLElementElement.prototype.register,parseElementElement(a),a};HTMLElementElement.prototype={register:function(a){a&&(this.options.lifecycle=a.lifecycle,a.prototype&&mixin(this.options.prototype,a.prototype))}};var context;window.__componentScript=function(a,b){b.call(context)},window.HTMLElementElement=HTMLElementElement}(),function(){function a(a){return"link"===a.localName&&a.getAttribute("rel")===b}var b=window.HTMLImports?HTMLImports.IMPORT_LINK_TYPE:"none",c={selectors:["link[rel="+b+"]","element"],map:{link:"parseLink",element:"parseElement"},parse:function(a){if(!a.__parsed){a.__parsed=!0;var b=a.querySelectorAll(c.selectors);d(b,function(a){c[c.map[a.localName]](a)}),CustomElements.upgradeDocument(a),CustomElements.observeDocument(a)}},parseLink:function(b){a(b)&&this.parseImport(b)},parseImport:function(a){a.content&&c.parse(a.content)},parseElement:function(a){new HTMLElementElement(a)}},d=Array.prototype.forEach.call.bind(Array.prototype.forEach);CustomElements.parser=c}(),function(){function a(){setTimeout(function(){CustomElements.parser.parse(document),CustomElements.upgradeDocument(document),CustomElements.ready=!0,CustomElements.readyTime=Date.now(),window.HTMLImports&&(CustomElements.elapsed=CustomElements.readyTime-HTMLImports.readyTime),document.body.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))},0)}if("function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState)a();else{var b=window.HTMLImports?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(b,a)}}(),function(){function a(){}var b=document.createElement("style");b.textContent="element {display: none !important;} /* injected by platform.js */";var c=document.querySelector("head");if(c.insertBefore(b,c.firstChild),window.ShadowDOMPolyfill){CustomElements.watchShadow=a,CustomElements.watchAllShadows=a;var d=["upgradeAll","upgradeSubtree","observeDocument","upgradeDocument"],e={};d.forEach(function(a){e[a]=CustomElements[a]}),d.forEach(function(a){CustomElements[a]=function(b){return e[a](wrap(b))}})}}(),function(a){a=a||{};var b={shadow:function(a){return a?a.shadowRoot||a.webkitShadowRoot:void 0},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);return this.canTarget(b)?b:void 0},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d}e=this.olderShadow(e)}return f}},owner:function(a){for(var b=a;b.parentNode;)b=b.parentNode;return b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);return d.elementFromPoint(b,c)||(d=document),this.searchRoot(document,b,c)}};a.targetFinding=b,a.findTarget=b.findTarget.bind(b),window.PointerEventsPolyfill=a}(window.PointerEventsPolyfill),function(){function a(a){return'[touch-action="'+a+'"]'}function b(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}var c=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],d="";c.forEach(function(c){d+=String(c)===c?a(c)+b(c):c.selectors.map(a)+b(c.rule)});var e=document.createElement("style");e.textContent=d;var f=document.querySelector("head");f.insertBefore(e,f.firstChild)}(),function(a){function b(a,b){var b=b||{},e=b.buttons;if(void 0===e)switch(b.which){case 1:e=1;break;case 2:e=4;break;case 3:e=2;break;default:e=0}var f;if(c)f=new MouseEvent(a,b);else{f=document.createEvent("MouseEvent");var g={bubbles:!1,cancelable:!1,view:null,detail:null,screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null};Object.keys(g).forEach(function(a){a in b&&(g[a]=b[a])}),f.initMouseEvent(a,g.bubbles,g.cancelable,g.view,g.detail,g.screenX,g.screenY,g.clientX,g.clientY,g.ctrlKey,g.altKey,g.shiftKey,g.metaKey,g.button,g.relatedTarget)}d||Object.defineProperty(f,"buttons",{get:function(){return e},enumerable:!0});var h=0;return h=b.pressure?b.pressure:e?.5:0,Object.defineProperties(f,{pointerId:{value:b.pointerId||0,enumerable:!0},width:{value:b.width||0,enumerable:!0},height:{value:b.height||0,enumerable:!0},pressure:{value:h,enumerable:!0},tiltX:{value:b.tiltX||0,enumerable:!0},tiltY:{value:b.tiltY||0,enumerable:!0},pointerType:{value:b.pointerType||"",enumerable:!0},hwTimestamp:{value:b.hwTimestamp||0,enumerable:!0},isPrimary:{value:b.isPrimary||!1,enumerable:!0}}),f}var c=!1,d=!1;try{var e=new MouseEvent("click",{buttons:1});c=!0,d=1===e.buttons}catch(f){}a.PointerEvent||(a.PointerEvent=b)}(window),function(a){function b(){this.ids=[],this.pointers=[]}b.prototype={set:function(a,b){var c=this.ids.indexOf(a);c>-1?this.pointers[c]=b:(this.ids.push(a),this.pointers.push(b))},has:function(a){return this.ids.indexOf(a)>-1},"delete":function(a){var b=this.ids.indexOf(a);b>-1&&(this.ids.splice(b,1),this.pointers.splice(b,1))},get:function(a){var b=this.ids.indexOf(a);return this.pointers[b]},get size(){return this.pointers.length},clear:function(){this.ids.length=0,this.pointers.length=0},forEach:function(a,b){this.ids.forEach(function(c,d){a.call(b,c,this.pointers[d],this)},this)}},a.PointerMap=window.Map&&Map.prototype.forEach?Map:b}(window.PointerEventsPolyfill),function(a){var b;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0)b=WeakMap;else{var c=Object.defineProperty,d=Object.hasOwnProperty,e=(new Date).getTime()%1e9;b=function(){this.name="__st"+(1e9*Math.random()>>>0)+(e++ +"__")},b.prototype={set:function(a,b){c(a,this.name,{value:b,writable:!0})},get:function(a){return d.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}a.SideTable=b}(window.PointerEventsPolyfill),function(a){var b={targets:new a.SideTable,handledEvents:new a.SideTable,pointermap:new a.PointerMap,eventMap:{},eventSources:{},eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.unregister.call(b,a)},down:function(a){this.fireEvent("pointerdown",a)},move:function(a){this.fireEvent("pointermove",a)},up:function(a){this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){this.fireEvent("pointercancel",a)},leaveOut:function(a){a.target.contains(a.relatedTarget)||this.leave(a),this.out(a)},enterOver:function(a){a.target.contains(a.relatedTarget)||this.enter(a),this.over(a)},eventHandler:function(a){if(!this.handledEvents.get(a)){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),this.handledEvents.set(a,!0)}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(a,b){var c=new PointerEvent(a,b);return this.targets.set(c,this.targets.get(b)||b.target),c},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){var b={};for(var c in a)b[c]=a[c];return b},getTarget:function(a){return this.captureInfo&&this.captureInfo.id===a.pointerId?this.captureInfo.target:this.targets.get(a)},setCapture:function(a,b){this.captureInfo&&this.releaseCapture(this.captureInfo.id),this.captureInfo={id:a,target:b};var c=new PointerEvent("gotpointercapture",{bubbles:!0});this.implicitRelease=this.releaseCapture.bind(this,a),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease),this.targets.set(c,b),this.asyncDispatchEvent(c)},releaseCapture:function(a){if(this.captureInfo&&this.captureInfo.id===a){var b=new PointerEvent("lostpointercapture",{bubbles:!0}),c=this.captureInfo.target;this.captureInfo=null,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease),this.targets.set(b,c),this.asyncDispatchEvent(b)}},dispatchEvent:function(a){var b=this.getTarget(a);return b?b.dispatchEvent(a):void 0},asyncDispatchEvent:function(a){setTimeout(this.dispatchEvent.bind(this,a),0)}};b.boundHandler=b.eventHandler.bind(b),a.dispatcher=b,a.register=b.register.bind(b),a.unregister=b.unregister.bind(b)}(window.PointerEventsPolyfill),function(a){function b(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),g&&(this.observer=new g(this.mutationWatcher.bind(this)))}var c=Array.prototype.forEach.call.bind(Array.prototype.forEach),d=Array.prototype.map.call.bind(Array.prototype.map),e=Array.prototype.slice.call.bind(Array.prototype.slice),f=Array.prototype.filter.call.bind(Array.prototype.filter),g=window.MutationObserver||window.WebKitMutationObserver,h="[touch-action]",i={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};b.prototype={watchSubtree:function(b){a.targetFinding.canTarget(b)&&this.observer.observe(b,i)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){c(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(h):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(e(b))},installOnLoad:function(){document.addEventListener("DOMContentLoaded",this.installNewSubtree.bind(this,document))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){var b=d(a,this.findElements,this);return b.push(f(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}},g||(b.prototype.watchSubtree=function(){console.warn("PointerEventsPolyfill: MutationObservers not found, touch-action will not be dynamically detected")}),a.Installer=b}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher,c=b.pointermap,d=25,e={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},lastTouches:[],isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,e=a.clientX,f=a.clientY,g=0,h=c.length;h>g&&(b=c[g]);g++){var i=Math.abs(e-b.x),j=Math.abs(f-b.y);if(d>=i&&d>=j)return!0}},prepareEvent:function(a){var c=b.cloneEvent(a);return c.pointerId=this.POINTER_ID,c.isPrimary=!0,c.pointerType=this.POINTER_TYPE,c},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=c.has(this.POINTER_ID);d&&this.cancel(a);var e=this.prepareEvent(a);c.set(this.POINTER_ID,a),b.down(e)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.move(c)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=c.get(this.POINTER_ID);if(d&&d.button===a.button){var e=this.prepareEvent(a);b.up(e),this.cleanupMouse()}}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.enterOver(c)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.leaveOut(c)}},cancel:function(a){var c=this.prepareEvent(a);b.cancel(c),this.cleanupMouse()},cleanupMouse:function(){c.delete(this.POINTER_ID)}};a.mouseEvents=e}(window.PointerEventsPolyfill),function(a){var b,c=a.dispatcher,d=a.findTarget,e=a.targetFinding.allShadows.bind(a.targetFinding),f=c.pointermap,g=Array.prototype.map.call.bind(Array.prototype.map),h=2500,i="touch-action",j="string"==typeof document.head.style.touchAction,k={scrollType:new a.SideTable,events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){j?c.listen(a,this.events):b.enableOnSubtree(a)},unregister:function(a){j&&c.unlisten(a,this.events)},elementAdded:function(a){var b=a.getAttribute(i),d=this.touchActionToScrollType(b);d&&(this.scrollType.set(a,d),c.listen(a,this.events),e(a).forEach(function(a){this.scrollType.set(a,d),c.listen(a,this.events)},this))},elementRemoved:function(a){this.scrollType.delete(a),c.unlisten(a,this.events),e(a).forEach(function(a){this.scrollType.delete(a),c.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(i),d=this.touchActiontoScrollType(c),f=this.touchActionToScrollType(b);d&&f?(this.scrollType.set(a,d),e(a).forEach(function(a){this.scrollType.set(a,d)},this)):f?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){null===this.firstTouch&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1)},removePrimaryTouch:function(a){this.isPrimaryTouch(a)&&(this.firstTouch=null,this.firstXY=null)},touchToPointer:function(a){var b=c.cloneEvent(a);return b.pointerId=a.identifier+2,b.target=d(b),b.bubbles=!0,b.cancelable=!0,b.button=0,b.buttons=1,b.width=a.webkitRadiusX||a.radiusX||0,b.height=a.webkitRadiusY||a.radiusY||0,b.pressure=a.webkitForce||a.force||.5,b.isPrimary=this.isPrimaryTouch(a),b.pointerType=this.POINTER_TYPE,b},processTouches:function(a,b){var c=a.changedTouches,d=g(c,this.touchToPointer,this);d.forEach(b,this)},shouldScroll:function(a){if(this.firstXY){var b,c=this.scrollType.get(a.currentTarget);if("none"===c)b=!1;else if("XY"===c)b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)if(c.identifier===b)return!0},vacuumTouches:function(a){var b=a.touches;if(f.size>=b.length){var c=[];f.forEach(function(a,d){if(1!==a&&!this.findTouch(b,a-2)){var e=d.out;c.push(this.touchToPointer(e))}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||this.processTouches(a,this.overDown)},overDown:function(a){f.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),c.over(a),c.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,d=f.get(b.pointerId);if(d){var e=d.out,g=d.outTarget;c.move(b),e&&g!==b.target&&(e.relatedTarget=b.target,b.relatedTarget=g,e.target=g,b.target?(c.leaveOut(e),c.enterOver(b)):(b.target=g,b.relatedTarget=null,this.cancelOut(b))),d.out=b,d.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(c.up(a),c.out(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){c.cancel(a),c.out(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){f.delete(a.pointerId),this.removePrimaryTouch(a)},dedupSynthMouse:function(b){var c=a.mouseEvents.lastTouches,d=b.changedTouches[0];if(this.isPrimaryTouch(d)){var e={x:d.clientX,y:d.clientY};c.push(e);var f=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,c,e);setTimeout(f,h)}}};j||(b=new a.Installer(k.elementAdded,k.elementRemoved,k.elementChanged,k)),a.touchEvents=k}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher,c=b.pointermap,d=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,e={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var c=a;return d&&(c=b.cloneEvent(a),c.pointerType=this.POINTER_TYPES[a.pointerType]),c},cleanup:function(a){c.delete(a)},MSPointerDown:function(a){c.set(a.pointerId,a);var d=this.prepareEvent(a);b.down(d)},MSPointerMove:function(a){var c=this.prepareEvent(a);b.move(c)},MSPointerUp:function(a){var c=this.prepareEvent(a);b.up(c),this.cleanup(a.pointerId)},MSPointerOut:function(a){var c=this.prepareEvent(a);b.leaveOut(c)},MSPointerOver:function(a){var c=this.prepareEvent(a);b.enterOver(c)},MSPointerCancel:function(a){var c=this.prepareEvent(a);b.cancel(c),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var c=b.makeEvent("lostpointercapture",a);b.dispatchEvent(c)},MSGotPointerCapture:function(a){var c=b.makeEvent("gotpointercapture",a);b.dispatchEvent(c)}};a.msEvents=e}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher;if(void 0===window.navigator.pointerEnabled){if(Object.defineProperty(window.navigator,"pointerEnabled",{value:!0,enumerable:!0}),window.navigator.msPointerEnabled){var c=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:c,enumerable:!0}),b.registerSource("ms",a.msEvents)}else b.registerSource("mouse",a.mouseEvents),void 0!==window.ontouchstart&&b.registerSource("touch",a.touchEvents);b.register(document)}}(window.PointerEventsPolyfill),function(a){function b(a){if(!e.pointermap.has(a))throw new Error("InvalidPointerId")}var c,d,e=a.dispatcher,f=window.navigator;f.msPointerEnabled?(c=function(a){b(a),this.msSetPointerCapture(a)},d=function(a){b(a),this.msReleasePointerCapture(a)}):(c=function(a){b(a),e.setCapture(a,this)},d=function(a){b(a),e.releaseCapture(a,this)}),Element.prototype.setPointerCapture||Object.defineProperties(Element.prototype,{setPointerCapture:{value:c},releasePointerCapture:{value:d}})}(window.PointerEventsPolyfill),PointerGestureEvent.prototype.preventTap=function(){this.tapPrevented=!0},function(a){a=a||{},a.utils={LCA:{find:function(a,b){if(a===b)return a;if(a.contains){if(a.contains(b))return a;if(b.contains(a))return b}var c=this.depth(a),d=this.depth(b),e=c-d;for(e>0?a=this.walk(a,e):b=this.walk(b,-e);a&&b&&a!==b;)a=this.walk(a,1),b=this.walk(b,1);return a},walk:function(a,b){for(var c=0;b>c;c++)a=a.parentNode;return a},depth:function(a){for(var b=0;a;)b++,a=a.parentNode;return b}}},a.findLCA=function(b,c){return a.utils.LCA.find(b,c)},window.PointerGestures=a}(window.PointerGestures),function(a){var b;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0)b=WeakMap;else{var c=Object.defineProperty,d=Object.hasOwnProperty,e=(new Date).getTime()%1e9;b=function(){this.name="__st"+(1e9*Math.random()>>>0)+(e++ +"__")},b.prototype={set:function(a,b){c(a,this.name,{value:b,writable:!0})},get:function(a){return d.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}a.SideTable=b}(window.PointerGestures),function(a){function b(){this.ids=[],this.pointers=[]}b.prototype={set:function(a,b){var c=this.ids.indexOf(a);c>-1?this.pointers[c]=b:(this.ids.push(a),this.pointers.push(b))},has:function(a){return this.ids.indexOf(a)>-1},"delete":function(a){var b=this.ids.indexOf(a);b>-1&&(this.ids.splice(b,1),this.pointers.splice(b,1))},get:function(a){var b=this.ids.indexOf(a);return this.pointers[b]},get size(){return this.pointers.length},clear:function(){this.ids.length=0,this.pointers.length=0}},window.Map&&(b=window.Map),a.PointerMap=b}(window.PointerGestures),function(a){var b={handledEvents:new a.SideTable,targets:new a.SideTable,handlers:{},recognizers:{},events:["pointerdown","pointermove","pointerup","pointerover","pointerout","pointercancel"],registerRecognizer:function(a,b){var c=b;this.recognizers[a]=c,this.events.forEach(function(a){if(c[a]){var b=c[a].bind(c);this.addHandler(a,b)}},this)},addHandler:function(a,b){var c=a;this.handlers[c]||(this.handlers[c]=[]),this.handlers[c].push(b)},registerTarget:function(a){this.listen(this.events,a)},unregisterTarget:function(a){this.unlisten(this.events,a)},eventHandler:function(a){if(!this.handledEvents.get(a)){var b,c=a.type;(b=this.handlers[c])&&this.makeQueue(b,a),this.handledEvents.set(a,!0)}},makeQueue:function(a,b){var c=this.cloneEvent(b);setTimeout(this.runQueue.bind(this,a,c),0) -},runQueue:function(a,b){this.currentPointerId=b.pointerId;for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)c(b);this.currentPointerId=0},listen:function(a,b){a.forEach(function(a){this.addEvent(a,this.boundHandler,!1,b)},this)},unlisten:function(a){a.forEach(function(a){this.removeEvent(a,this.boundHandler,!1,inTarget)},this)},addEvent:function(a,b,c,d){d.addEventListener(a,b,c)},removeEvent:function(a,b,c,d){d.removeEventListener(a,b,c)},makeEvent:function(a,b){return new PointerGestureEvent(a,b)},cloneEvent:function(a){var b={};for(var c in a)b[c]=a[c];return b},dispatchEvent:function(a,b){var c=b||this.targets.get(a);c&&(c.dispatchEvent(a),a.tapPrevented&&this.preventTap(this.currentPointerId))},asyncDispatchEvent:function(a,b){var c=function(){this.dispatchEvent(a,b)}.bind(this);setTimeout(c,0)},preventTap:function(a){var b=this.recognizers.tap;b&&b.preventTap(a)}};b.boundHandler=b.eventHandler.bind(b),a.dispatcher=b,a.register=function(b){var c=window.PointerEventsPolyfill;c&&c.register(b),a.dispatcher.registerTarget(b)},b.registerTarget(document)}(window.PointerGestures),function(a){var b=a.dispatcher,c={HOLD_DELAY:200,WIGGLE_THRESHOLD:16,events:["pointerdown","pointermove","pointerup","pointercancel"],heldPointer:null,holdJob:null,pulse:function(){var a=Date.now()-this.heldPointer.timeStamp,b=this.held?"holdpulse":"hold";this.fireHold(b,a),this.held=!0},cancel:function(){clearInterval(this.holdJob),this.held&&this.fireHold("release"),this.held=!1,this.heldPointer=null,this.target=null,this.holdJob=null},pointerdown:function(a){a.isPrimary&&!this.heldPointer&&(this.heldPointer=a,this.target=a.target,this.holdJob=setInterval(this.pulse.bind(this),this.HOLD_DELAY))},pointerup:function(a){this.heldPointer&&this.heldPointer.pointerId===a.pointerId&&this.cancel()},pointercancel:function(){this.cancel()},pointermove:function(a){if(this.heldPointer&&this.heldPointer.pointerId===a.pointerId){var b=a.clientX-this.heldPointer.clientX,c=a.clientY-this.heldPointer.clientY;b*b+c*c>this.WIGGLE_THRESHOLD&&this.cancel()}},fireHold:function(a,c){var d={pointerType:this.heldPointer.pointerType};c&&(d.holdTime=c);var e=b.makeEvent(a,d);b.dispatchEvent(e,this.target),e.tapPrevented&&b.preventTap(this.heldPointer.pointerId)}};b.registerRecognizer("hold",c)}(window.PointerGestures),function(a){var b=a.dispatcher,c=new a.PointerMap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],WIGGLE_THRESHOLD:4,clampDir:function(a){return a>0?1:-1},calcPositionDelta:function(a,b){var c=0,d=0;return a&&b&&(c=b.pageX-a.pageX,d=b.pageY-a.pageY),{x:c,y:d}},fireTrack:function(a,c,d){var e=d,f=this.calcPositionDelta(e.downEvent,c),g=this.calcPositionDelta(e.lastMoveEvent,c);g.x&&(e.xDirection=this.clampDir(g.x)),g.y&&(e.yDirection=this.clampDir(g.y));var h={dx:f.x,dy:f.y,ddx:g.x,ddy:g.y,clientX:c.clientX,clientY:c.clientY,pageX:c.pageX,pageY:c.pageY,screenX:c.screenX,screenY:c.screenY,xDirection:e.xDirection,yDirection:e.yDirection,trackInfo:e.trackInfo,pointerType:c.pointerType};"trackend"===a&&(h._releaseTarget=c.target);var i=b.makeEvent(a,h);e.lastMoveEvent=c,b.dispatchEvent(i,e.downTarget)},pointerdown:function(a){if(a.isPrimary&&("mouse"===a.pointerType?1===a.buttons:!0)){var b={downEvent:a,downTarget:a.target,trackInfo:{},lastMoveEvent:null,xDirection:0,yDirection:0,tracking:!1};c.set(a.pointerId,b)}},pointermove:function(a){var b=c.get(a.pointerId);if(b)if(b.tracking)this.fireTrack("track",a,b);else{var d=this.calcPositionDelta(b.downEvent,a),e=d.x*d.x+d.y*d.y;e>this.WIGGLE_THRESHOLD&&(b.tracking=!0,this.fireTrack("trackstart",b.downEvent,b),this.fireTrack("track",a,b))}},pointerup:function(a){var b=c.get(a.pointerId);b&&(b.tracking&&this.fireTrack("trackend",a,b),c.delete(a.pointerId))},pointercancel:function(a){this.pointerup(a)}};b.registerRecognizer("track",d)}(window.PointerGestures),function(a){var b=a.dispatcher,c={MIN_VELOCITY:.5,MAX_QUEUE:4,moveQueue:[],target:null,pointerId:null,events:["pointerdown","pointermove","pointerup","pointercancel"],pointerdown:function(a){a.isPrimary&&!this.pointerId&&(this.pointerId=a.pointerId,this.target=a.target,this.addMove(a))},pointermove:function(a){a.pointerId===this.pointerId&&this.addMove(a)},pointerup:function(a){a.pointerId===this.pointerId&&this.fireFlick(a),this.cleanup()},pointercancel:function(){this.cleanup()},cleanup:function(){this.moveQueue=[],this.target=null,this.pointerId=null},addMove:function(a){this.moveQueue.length>=this.MAX_QUEUE&&this.moveQueue.shift(),this.moveQueue.push(a)},fireFlick:function(a){for(var c,d,e,f,g,h,i,j=a,k=this.moveQueue.length,l=0,m=0,n=0,o=0;k>o&&(i=this.moveQueue[o]);o++)c=j.timeStamp-i.timeStamp,d=j.clientX-i.clientX,e=j.clientY-i.clientY,f=d/c,g=e/c,h=Math.sqrt(f*f+g*g),h>n&&(l=f,m=g,n=h);var p=Math.abs(l)>Math.abs(m)?"x":"y",q=this.calcAngle(l,m);if(Math.abs(n)>=this.MIN_VELOCITY){var r=b.makeEvent("flick",{xVelocity:l,yVelocity:m,velocity:n,angle:q,majorAxis:p,pointerType:a.pointerType});b.dispatchEvent(r,this.target)}},calcAngle:function(a,b){return 180*Math.atan2(b,a)/Math.PI}};b.registerRecognizer("flick",c)}(window.PointerGestures),function(a){var b=a.dispatcher,c=new a.PointerMap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],pointerdown:function(a){a.isPrimary&&!a.tapPrevented&&c.set(a.pointerId,{target:a.target,x:a.clientX,y:a.clientY})},pointermove:function(a){if(a.isPrimary){var b=c.get(a.pointerId);b&&a.tapPrevented&&c.delete(a.pointerId)}},pointerup:function(d){var e=c.get(d.pointerId);if(e&&!d.tapPrevented){var f=a.findLCA(e.target,d.target);if(f){var g=b.makeEvent("tap",{x:d.clientX,y:d.clientY,pointerType:d.pointerType});b.dispatchEvent(g,f)}}c.delete(d.pointerId)},pointercancel:function(a){c.delete(a.pointerId)},preventTap:function(a){c.delete(a)}};b.registerRecognizer("tap",d)}(window.PointerGestures); -/* -//@ sourceMappingURL=platform.sandbox.min.js.map -*/ \ No newline at end of file diff --git a/libs/polymer/platform.sandbox.min.js.map b/libs/polymer/platform.sandbox.min.js.map deleted file mode 100644 index e6820d967..000000000 --- a/libs/polymer/platform.sandbox.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"platform.sandbox.min.js","sources":["../PointerGestures/src/PointerGestureEvent.js","build/shadowdom.conditional.js","../CustomElements/src/MutationObserver.js","src/lang.js","src/dom.js","src/template.js","src/inspector.js","../mdv/third_party/ChangeSummary/change_summary.js","../mdv/src/template_element.js","../mdv/third_party/esprima/esprima.js","../mdv/util/expression_syntax.js","src/patches-mdv.js","src/patches-html-imports-csp.js","../HTMLImports/src/HTMLImports.js","../HTMLImports/src/Parser.js","../HTMLImports/src/boot.js","../CustomElements/MutationObservers/MutationObserver.js","../CustomElements/src/CustomElements.js","../CustomElements/src/Observer.js","../CustomElements/src/HTMLElementElement.js","../CustomElements/src/Parser.js","../CustomElements/src/boot.js","src/patches-custom-elements.js","../PointerEvents/src/boot.js","../PointerEvents/src/touch-action.js","../PointerEvents/src/PointerEvent.js","../PointerEvents/src/pointermap.js","../PointerEvents/src/sidetable.js","../PointerEvents/src/dispatcher.js","../PointerEvents/src/installer.js","../PointerEvents/src/mouse.js","../PointerEvents/src/touch.js","../PointerEvents/src/ms.js","../PointerEvents/src/platform-events.js","../PointerEvents/src/capture.js","../PointerGestures/src/initialize.js","../PointerGestures/src/sidetable.js","../PointerGestures/src/pointermap.js","../PointerGestures/src/dispatcher.js","../PointerGestures/src/hold.js","../PointerGestures/src/track.js","../PointerGestures/src/flick.js","../PointerGestures/src/tap.js"],"names":["PointerGestureEvent","inType","inDict","dict","e","document","createEvent","props","bubbles","cancelable","Object","keys","forEach","k","initEvent","preventTap","this","window","Platform","logFlags","scope","flags","location","search","slice","split","o","shadow","shadowdom","polyfill","HTMLElement","prototype","webkitCreateShadowRoot","SideTable","WeakMap","navigator","userAgent","indexOf","defineProperty","hasOwnProperty","counter","Date","getTime","name","Math","random","set","key","value","writable","get","call","undefined","delete","ShadowDOMPolyfill","assert","b","Error","mixin","to","from","getOwnPropertyNames","getOwnPropertyDescriptor","mixinStatics","getWrapperConstructor","node","nativePrototype","__proto__","getPrototypeOf","wrapperConstructor","constructorTable","parentWrapperConstructor","GeneratedWrapper","createWrapperConstructor","registerInternal","addForwardingProperties","wrapperPrototype","installProperty","registerInstanceProperties","instanceObject","isEventHandlerName","test","source","target","allowMethod","isFirefox","__lookupGetter__","descriptor","ex","dummyDescriptor","getter","setter","impl","apply","arguments","isEvent","getEventHandlerGetter","getEventHandlerSetter","configurable","enumerable","register","nativeConstructor","opt_instance","isWrapperFor","registerObject","object","superWrapperConstructor","create","constructor","isWrapper","wrappers","EventTarget","Event","DOMImplementation","isNative","OriginalNode","OriginalEvent","OriginalWindow","OriginalDOMImplementation","wrap","wrapper","wrapperTable","unwrap","unwrapIfNeeded","wrapIfNeeded","rewrap","defineGetter","defineWrapGetter","forwardMethodsToWrapper","constructors","names","w","Node","Window","registerWrapper","isShadowRoot","ShadowRoot","isInsertionPoint","localName","isShadowHost","shadowRoot","getEventParent","dv","parentNode","defaultView","calculateParents","context","ancestors","length","shift","getInsertionParent","getHostForShadowRoot","eventParents","eventParentsTable","i","trees","getShadowTrees","p","contains","retarget","stack","ancestor","targets","topMostNotInsertionPoint","top","push","currentTarget","pop","adjustRelatedTarget","related","last","isDistributed","head","inSameTree","insertionParentTable","rootOfNode","a","enclosedBy","host","isMutationEvent","type","dispatchOriginalEvent","originalEvent","handledEventsTable","renderAllPending","event","dispatchEvent","originalWrapperTarget","eventPath","Document","eventPathTable","dispatchCapturing","dispatchAtTarget","dispatchBubbling","eventPhaseTable","NONE","currentTargetTable","defaultPrevented","phase","CAPTURING_PHASE","invoke","AT_TARGET","stopImmediatePropagationTable","BUBBLING_PHASE","tuple","listeners","listenersTable","relatedTarget","adjusted","relatedTargetTable","anyRemoved","targetTable","listener","removed","capture","handler","handleEvent","onerror","message","console","error","copy","stopPropagationTable","Listener","Boolean","options","constructEvent","unwrapOptions","registerGenericEvent","SuperEvent","GenericEvent","getInitFunction","relatedTargetIndex","supportsEventConstructors","defaultDict","defaultInitDicts","args","v","isValidListener","fun","getTargetToListenAt","wrapEventTargetMethods","methodNames","elementFromPoint","self","x","y","element","originalElementFromPoint","inlineEventHandlers","eventHandlersTable","eventType","old","removeEventListener","wrapped","rv","preventDefault","returnValue","addEventListener","equals","that","remove","eventPhase","path","nodeList","NodeList","index","lastIndex","baseRoot","currentRoot","stopPropagation","stopImmediatePropagation","UIEvent","CustomEvent","relatedTargetProto","mouseEventProto","initMouseEvent","focusEventProto","initFocusEvent","MouseEvent","FocusEvent","MutationEvent","initMutationEvent","relatedNode","configureEventConstructor","initDict","superName","superDict","detail","view","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","OriginalEventTarget","addEventListener_","count","found","removeEventListener_","dispatchEvent_","nonEnum","obj","prop","wrapNodeList","list","wrapperList","addWrapNodeListMethod","item","assertIsNodeWrapper","collectNodes","previousNode","nextNode","nodeType","DOCUMENT_FRAGMENT_NODE","removeChild","parentNode_","previousSibling_","nextSibling_","firstChild","nodes","unwrapNodesForInsertion","owner","df","ownerDocument","createDocumentFragment","appendChild","removeAllChildNodes","childWrapper","nextSibling","childNode","originalRemoveChild","firstChild_","lastChild_","original","originalAppendChild","originalInsertBefore","insertBefore","originalReplaceChild","replaceChild","originalCompareDocumentPosition","compareDocumentPosition","invalidateShadowRenderer","lastChild","refWrapper","previousSibling","refNode","thisFirstChild","thisLastChild","childWrapperNextSibling","childWrapperPreviousSibling","newChildWrapper","oldChildWrapper","oldChildNode","hasChildNodes","parentElement","ELEMENT_NODE","textContent","s","child","textNode","createTextNode","childNodes","cloneNode","deep","clone","otherNode","querySelector","querySelectorAll","findOne","selector","m","el","firstElementChild","matches","nextElementSibling","findAll","results","SelectorsInterface","GetElementsByInterface","getElementsByTagName","tagName","getElementsByClassName","className","getElementsByTagNameNS","ns","result","els","j","namespaceURI","forwardElement","backwardsElement","ParentNodeInterface","lastElementChild","childElementCount","children","ChildNodeInterface","previousElementSibling","CharacterData","OriginalCharacterData","data","Element","shadowRootTable","OriginalElement","originalMatches","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector","createShadowRoot","newShadowRoot","getRendererForHost","setAttribute","escapeReplace","c","escape","replace","escapeRegExp","getOuterHTML","attr","toLowerCase","attrs","attributes","voidElements","getInnerHTML","TEXT_NODE","nodeValue","COMMENT_NODE","setInnerHTML","opt_tagName","tempElement","createElement","innerHTML","getterRequiresRendering","methodRequiresRendering","area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","track","wbr","OriginalHTMLElement","outerHTML","HTMLContentElement","OriginalHTMLContentElement","select","getAttribute","n","String","HTMLShadowElement","olderShadowRoot_","OriginalHTMLShadowElement","olderShadowRoot","getTemplateContentsOwner","doc","d","templateContentsOwnerTable","implementation","createHTMLDocument","extractContent","templateElement","HTMLTemplateElement","contentTable","OriginalHTMLTemplateElement","content","HTMLUnknownElement","OriginalHTMLUnknownElement","DocumentFragment","Text","Comment","createComment","hostWrapper","oldShadowRoot","nextOlderShadowTreeTable","shadowHostTable","getElementById","id","updateWrapperUpAndSideways","updateWrapperDown","updateAllChildNodes","parentNodeWrapper","lastChildWrapper","nodeWrapper","distributeChildToInsertionPoint","insertionPoint","getDistributedChildNodes","assignToInsertionPoint","resetDistributedChildNodes","distributedChildNodesTable","getChildNodesSnapshot","visit","tree","predicate","visitor","distribute","pool","isActiveInsertionPoint","matchesCriteria","filter","oneOf","propertyNames","point","trim","selectorMatchRegExp","allowedPseudoRegExp","renderTimer","pendingDirtyRenderers","render","ShadowRenderer","dirty","associateNode","renderer","rendererForHostTable","isShadowInsertionPoint","isActiveShadowInsertionPoint","shadowHost","getNextOlderTree","shadowDOMRendererTable","RegExp","join","request","treeComposition","shadowDOM","shadowDOMChildNodes","renderNode","invalidate","visualParent","isNested","renderInsertionPoint","renderShadowInsertionPoint","renderAsAnyDomTree","parent","logicalChildNodes","distributedChildNodes","renderFallbackContent","shadowInsertionPoint","nextOlderTree","fallbackHost","shadowHostChildNodes","reprojected","force","getDistributedNodes","visual","wrapMethod","adoptSubtree","adoptNode","adoptOlderShadowRoots","wrapImplMethod","forwardImplMethod","implementationTable","originalAdoptNode","originalWrite","write","all","HTMLBodyElement","HTMLDocument","HTMLHeadElement","originalGetComputedStyle","getComputedStyle","pseudo","MutationRecord","wrapRecord","record","wrapRecords","records","map","MutationObserver","callback","OriginalMutationObserver","mutations","WebKitMutationObserver","OriginalMutationRecord","addedNodes","removedNodes","observe","disconnect","takeRecords","overrideConstructor","nativeConstructorName","elements","applet","audio","body","canvas","dl","datalist","dir","div","fieldset","font","form","frame","frameset","h1","html","iframe","li","label","legend","menu","menuitem","meter","del","ol","optgroup","option","output","pre","progress","q","script","span","style","caption","table","tr","thead","tbody","textarea","title","ul","video","knownElements","defineProperties","webkitShadowRoot","stylesToCssText","styles","preserveComments","cssText","Array","cssCommentRe","cssToRules","rules","sheet","cssRules","rulesToCss","css","addCssToDocument","getSheet","ShadowCSS","strictStyling","registry","shimStyling","root","extendsName","def","registerDefinition","applyScopeToContent","shimPolyfillDirectives","rootStyles","applyShimming","scopeStyles","shimShadowDOMStyling","extendee","concat","template","convertPolyfillDirectives","r","l","cssPolyfillCommentRe","exec","substring","hostRe","scopeSelector","shimAtHost","shimScoping","convertAtHostStyles","hostRuleRe","scopeHostCss","re","selectorReSuffix","findAtHostRules","selectorRe","scopeHostSelector","parts","is","match","hostElementRe","hostFixableRe","matcher","isHostRule","bind","cssRule","selectorText","CSSRule","WEBKIT_KEYFRAMES_RULE","convertScopedStyles","convertPseudos","scopeRules","cssPseudoRe","rule","propertiesFromRule","media","mediaText","strict","selectorNeedsScoping","applyStrictSelectorScope","applySimpleSelectorScope","matchScope","splits","scoped","attrName","sep","t","properties","templateContent","inTemplate","bootstrap","_content","frag","inObj","copyProperty","inName","inSource","inTarget","pd","getPropertyDescriptor","inObject","Function","args2","createDOM","inTagOrNode","inHTML","inAttrs","dom","add","DOMTokenList","toggle","bool","oldName","newName","ArraySlice","namedNodeMap","NamedNodeMap","MozNamedAttrMap","array","HTMLCollection","ArrayForEach","cb","performance","start","now","requestAnimationFrame","nativeRaf","webkitRequestAnimationFrame","mozRequestAnimationFrame","setTimeout","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","clearTimeout","Inspector","inspector","sinspect","inNode","inProxy","open","inspectorHTML","api","shadowize","inspect","crumbs","displayCrumbs","href","idx","onclick","drillable","proxy","blacklisted","STYLE","SCRIPT","#comment","TEMPLATE","blacklist","nodeName","inChildNodes","inIndent","indent","info","describe","ind","text","tag","Number","log","global","detectObjectObserve","gotSplice","deliverChangeRecords","isIndex","toNumber","isObject","areSameValue","left","right","numberIsNaN","isPathValid","pathRegExp","getPath","str","pathCache","Path","part","hasEval","getValueFrom","compiledGetValueFromFn","dirtyCheck","observer","cycles","MAX_DIRTY_CHECK_CYCLES","check","report","objectIsEmpty","diffIsEmpty","diff","added","changed","diffObjectFromOldObject","oldObject","newValue","isArray","copyObject","opt_copy","Observer","token","reporting","hasObserve","boundInternalCallback","internalCallback","valid","addToAll","connect","sync","collectObservers","allObservers","_allObserversCount","ObjectObserver","ArrayObserver","ObservedSet","arr","isObserved","PathObserver","pathString","notifyFunction","notifier","getNotifier","oldValue","changeRecord","notify","diffObjectFromChangeRecords","changeRecords","oldValues","knownRecordTypes","calcEditDistances","current","currentStart","currentEnd","oldStart","oldEnd","rowCount","columnCount","distances","north","west","spliceOperationsFromEditDistances","edits","min","northWest","EDIT_LEAVE","EDIT_UPDATE","EDIT_DELETE","EDIT_ADD","reverse","sharedPrefix","arr1","arr2","searchLength","sharedSuffix","index1","index2","newSplice","addedCount","calcSplices","prefixCount","suffixCount","minLength","splice","ops","splices","oldIndex","intersect","start1","end1","start2","end2","mergeSplice","inserted","insertionOffset","intersectCount","deleteCount","prepend","append","offset","createInitialSplices","JSON","stringify","projectArraySplices","f","isNaN","createObject","proto","newObject","identStart","identPart","ident","elementIndex","identOrElementIndex","toString","getValueFromObserved","observedSet","reset","cleanup","accessors","setValueFrom","testingResults","anyChanged","close","unobserved","deliver","reportArgs","_errorThrownDuringCallback","forceCollectObservers","runningMicrotaskCheckpoint","hasDebugForceFullDelivery","deliverAllChangeRecords","performMicrotaskCheckpoint","toCheck","clearObservers","property","unobserve","applySplices","previous","spliceArgs","addIndex","objProto","arrayProto","hard","getValueAtPath","setValueAtPath","new","updated","deleted","hasObjectObserve","calculateSplices","getTreeScope","isNodeInDocument","NodeBinding","model","closed","boundValueChanged","AttributeBinding","attributeName","conditional","removeAttribute","getEventForInputType","checkboxEventType","InputBinding","boundNodeValueToModel","nodeValueChanged","getAssociatedRadioButtons","radios","CheckedBinding","SelectedIndexBinding","isAttributeTemplate","semanticTemplateElements","hasAttribute","isTemplate","isNativeTemplate","hasTemplateElement","forAllTemplatesFrom","fn","subTemplates","allTemplatesSelectors","bootstrapTemplatesRecursivelyFrom","decorate","extractTemplateFromAttributeTemplate","attribs","attrib","templateAttributeDirectives","liftNonNativeTemplateChildrenIntoContent","useRoot","fixTemplateElementPrototype","hasProto","contentDescriptor","ensureSetModelScheduled","setModelFn","templateSetModelFnTable","addBindings","bindingDelegate","ensureScheduled","TemplateBinding","inputs","isSimpleBinding","tokens","parseMustacheTokens","startIndex","endIndex","bindOrDelegate","delegate","delegateBinding","delegateFunction","GET_BINDING","processBindings","bindings","bound","binding","setupBinding","newTokenCombinator","values","combinator","replacementBinding","CompoundBinding","scheduled","resolve","parseAttributeBindings","isTemplateNode","ifFound","bindFound","IF","BIND","REPEAT","getBindings","TemplateCloser","addMapBindings","templateRef","templateBindingDelegateTable","deepCloneIgnoreTemplateContent","createInstanceBindingMap","hasSubTemplate","childMap","TemplateInstance","firstNode","lastNode","addTemplateInstanceRecord","fragment","instanceRecord","templateInstanceTable","observers","size","combinator_","TemplateIterator","templateElement_","terminators","iteratedValue","arrayObserver","resolveInputs","Map","opt_this","documentElement","createBinding","unbind","unbindAll","sanitizeBoundValue","checkbox","first","postUpdateBinding","radio","checkedBinding","checked","HTMLInputElement","HTMLTextAreaElement","delaySetSelectedIndex","maxRetries","HTMLSelectElement","GET_INSTANCE_MODEL","repeat","ref","THEAD","TBODY","TFOOT","TH","TR","TD","COLGROUP","COL","CAPTION","OPTION","OPTGROUP","Runner","nextRunner","lastValue","scheduledIds","running","run","async","idExpando","nextId","runner","schedule","TypeError","templateContentsTable","templateInstanceRefTable","contentBindingMapTable","opt_instanceRef","templateIsDecorated_","bootstrapContents","liftContents","liftRoot","htmlElement","templateModelTable","iterator","templateIteratorTable","createInstance","instance","refId","treeScope","nextRef","templateInstance","scheduleResolve","pathValueChanged","suppressResolve","valueChanged","handleSplices","getTerminatorAt","terminator","subIterator","insertInstanceAt","instanceNodes","previousTerminator","insertBeforeNode","extractInstanceAt","getInstanceModel","instanceCache","removeDelta","actualModel","forAllTemplatesFrom_","condition","isDecimalDigit","ch","isWhiteSpace","fromCharCode","isLineTerminator","isIdentifierStart","isIdentifierPart","isKeyword","skipWhitespace","charCodeAt","getIdentifier","scanIdentifier","Token","Identifier","Keyword","NullLiteral","BooleanLiteral","range","scanPunctuator","code2","ch2","ch3","ch4","code","ch1","Punctuator","throwError","Messages","UnexpectedToken","scanNumericLiteral","number","NumericLiteral","parseFloat","scanStringLiteral","quote","octal","StringLiteral","isIdentifierName","advance","EOF","lex","lookahead","peek","pos","messageFormat","msg","whole","description","throwUnexpected","expect","matchKeyword","keyword","consumeSemicolon","parseArrayInitialiser","parseAssignmentExpression","createArrayExpression","parseObjectPropertyKey","createLiteral","createIdentifier","parseObjectProperty","createProperty","parseObjectInitialiser","createObjectExpression","parseGroupExpression","expr","parseExpression","parsePrimaryExpression","createThisExpression","parseArguments","parseNonComputedProperty","parseNonComputedMember","parseComputedMember","parseLeftHandSideExpressionAllowCall","createCallExpression","createMemberExpression","parsePostfixExpression","parseUnaryExpression","createUnaryExpression","binaryPrecedence","allowIn","prec","parseBinaryExpression","previousAllowIn","operator","state","createBinaryExpression","parseConditionalExpression","consequent","alternate","createConditionalExpression","parseEmptyStatement","createEmptyStatement","parseExpressionStatement","createExpressionStatement","parseStatement","labeledBody","Syntax","labelSet","Redeclaration","createLabeledStatement","parseSourceElement","parseSourceElements","sourceElement","sourceElements","parseProgram","createProgram","parse","inDelegate","valueOf","TokenName","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","EmptyStatement","ExpressionStatement","Literal","LabeledStatement","LogicalExpression","MemberExpression","ObjectExpression","Program","Property","ThisExpression","UnaryExpression","UnknownLabel","esprima","getNamedScopeBinding","expressionText","repeatPattern","bindPattern","pathPattern","getExpressionBinding","templateScopeTable","ASTDelegate","statements","labeledStatements","resolveFn","newLabeledResolve","paths","deps","labels","IdentPath","currentPath","notImplemented","ExpressionSyntax","capturedIdent","valueFn","unaryOperators","+","-","!","binaryOperators","*","/","%","<",">","<=",">=","==","!=","===","!==","&&","||","getFn","arg","statement","op","argument","accessor","kind","getBinding","scopeName","parentScope","group","groupEnd","__instanceCreated","CustomElements","upgradeAll","dirtyCheckPollInterval","setInterval","flush","HTMLImports","xhr","callbacks","load","url","next","nextContext","postMessage","bust","debug","receive","err","resource","loadDocument","isDocumentLink","elt","isLinkRel","IMPORT_LINK_TYPE","isStylesheetLink","STYLE_LINK_TYPE","rel","isScript","makeDocument","_URL","baseURI","loader","importer","documents","cache","preloadSelectors","inNext","Loader","loaded","inDocument","preload","filterMainDocumentNodes","extractTemplateNodes","addNodes","extra","l$","resolvePathsInHTML","import","ownerNode","__resource","resolvePathsInStylesheet","inOnLoad","inOnComplete","onload","oncomplete","inflight","pending","inNodes","require","checkDone","inElt","nodeUrl","__nodeUrl","dedupe","fetch","inUrl","tail","receiveXhr","inErr","inResource","URL_ATTRS","URL_ATTRS_SELECTOR","URL_TEMPLATE_SEARCH","resolveUrl","getDocumentUrl","hrefOrSrc","documentUrlFromNode","URL","inBaseUrl","inRelativeToDocument","isAbsUrl","compressUrl","urlToPath","makeRelPath","unshift","resolveAttributes","resolveStyleElts","templates","inSheet","docUrl","resolveCssText","inRoot","inCssText","inMatch","urlPath","resolveNodeAttributes","ok","inRequest","status","XMLHttpRequest","readyState","response","send","responseType","needsMainDocumentContext","inMainDocument","isElementElementChild","importParser","selectors","__importParsed","elts","parseLink","linkElt","parseGeneric","parseScript","scriptElt","moniker","floor","eval","parser","readyTime","scheduleCallback","scheduledObservers","isScheduled","setImmediate","dispatchCallbacks","sort","o1","o2","uid_","anyNonEmpty","queue","removeTransientObserversFor","callback_","nodes_","registrations","registrationsTable","registration","removeTransientObservers","forEachAncestorAndObserverEnqueueRecord","subtree","enqueue","JsMutationObserver","records_","uidCounter","attributeNamespace","copyMutationRecord","getRecord","currentRecord","getRecordWithOldValue","recordWithOldValue","clearRecords","recordRepresentsCurrentMutation","selectRecord","lastRecord","newRecord","Registration","transientObservedNodes","msSetImmediate","setImmediateQueue","sentinel","func","childList","characterData","attributeOldValue","attributeFilter","characterDataOldValue","SyntaxError","removeListeners","addListeners","copyOfRecords","recordToReplaceLast","addListeners_","removeListeners_","addTransientObserver","namespace","attrChange","ADDITION","prevValue","changedNode","inOptions","definition","lifecycle","ancestry","extends","resolveTagName","resolvePrototypeChain","overrideAttributeApi","ctor","generateConstructor","ready","inExtends","inDefinition","baseTag","native","inst","instantiate","upgrade","domCreateElement","inElement","implement","__upgraded__","upgradeSubtree","customMixin","inSrc","inNative","used","readyCallback","changeAttribute","operation","attributeChangedCallback","inTag","upgradeElement","domCloneNode","hasNative","webkitRegister","nop","find","forSubtree","insertedNode","addedSubtree","addedNode","insertedCallback","__inserted","warn","removedNode","removedCallback","watchShadow","__watched","watchAllShadows","mx","u","observeDocument","upgradeDocument","parseElementElement","takeAttributes","archetype","executeComponentScript","refName","inDictionary","inScript","inContext","HTMLElementElement","inMore","__componentScript","inFunc","__parsed","parseImport","parseElement","inElementElt","elapsed","loadEvent","fns","inEl","canTarget","targetingShadow","olderShadow","os","se","allShadows","shadows","searchRoot","st","sr","ssr","findTarget","inEvent","targetFinding","PointerEventsPolyfill","attrib2css","h","PointerEvent","buttons","which","NEW_MOUSE_EVENT","HAS_BUTTONS","pressure","pointerId","width","height","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","ev","PointerMap","ids","pointers","inId","has","clear","thisArg","dispatcher","handledEvents","pointermap","eventMap","eventSources","eventSourceList","registerSource","newEvents","events","es","unregister","down","fireEvent","move","up","enter","leave","over","out","cancel","leaveOut","enterOver","eventHandler","listen","addEvent","unlisten","removeEvent","eventName","boundHandler","makeEvent","cloneEvent","eventCopy","getTarget","captureInfo","setCapture","inPointerId","releaseCapture","implicitRelease","asyncDispatchEvent","Installer","binder","addCallback","removeCallback","changedCallback","MO","mutationWatcher","toArray","SELECTOR","OBSERVER_INIT","watchSubtree","enableOnSubtree","installOnLoad","installNewSubtree","findElements","addElement","removeElement","elementChanged","concatLists","accum","isElement","flattenMutationTree","reduce","mutationHandler","DEDUP_DIST","mouseEvents","POINTER_ID","POINTER_TYPE","lastTouches","isEventSimulatedFromTouch","lts","dx","abs","dy","prepareEvent","mousedown","mousemove","mouseup","cleanupMouse","mouseover","mouseout","INSTALLER","touchMap","DEDUP_TIMEOUT","ATTRIB","HAS_TOUCH_ACTION","touchAction","touchEvents","scrollType","elementAdded","touchActionToScrollType","elementRemoved","touchActiontoScrollType","oldSt","scrollTypes","EMITTER","XSCROLLER","YSCROLLER","SCROLLER","firstTouch","isPrimaryTouch","inTouch","identifier","setPrimaryTouch","firstXY","X","Y","scrolling","removePrimaryTouch","touchToPointer","webkitRadiusX","radiusX","webkitRadiusY","radiusY","webkitForce","processTouches","inFunction","tl","changedTouches","shouldScroll","ret","scrollAxis","oa","da","doa","findTouch","inTL","vacuumTouches","touches","cancelOut","touchstart","dedupSynthMouse","overDown","inPointer","outTarget","touchmove","touchcancel","moveOverOut","pointer","outEvent","touchend","upOut","cleanUpPointer","lt","HAS_BITMAP_TYPE","MSPointerEvent","MSPOINTER_TYPE_MOUSE","msEvents","POINTER_TYPES","MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSLostPointerCapture","MSGotPointerCapture","pointerEnabled","msPointerEnabled","tp","msMaxTouchPoints","ontouchstart","assertDown","msSetPointerCapture","msReleasePointerCapture","setPointerCapture","releasePointerCapture","tapPrevented","utils","LCA","adepth","depth","bdepth","walk","findLCA","PointerGestures","handlers","recognizers","registerRecognizer","inRecognizer","addHandler","inFn","registerTarget","unregisterTarget","makeQueue","inHandlerFns","runQueue","inHandlers","currentPointerId","inEvents","inEventName","inEventHandler","inCapture","tap","inScope","pe","hold","HOLD_DELAY","WIGGLE_THRESHOLD","heldPointer","holdJob","pulse","timeStamp","held","fireHold","clearInterval","pointerdown","pointerup","pointercancel","pointermove","inHoldTime","holdTime","clampDir","inDelta","calcPositionDelta","inA","inB","pageX","pageY","fireTrack","inTrackingData","downEvent","dd","lastMoveEvent","xDirection","yDirection","trackData","ddx","ddy","trackInfo","_releaseTarget","downTarget","tracking","flick","MIN_VELOCITY","MAX_QUEUE","moveQueue","addMove","fireFlick","dt","tx","ty","tv","sqrt","ma","calcAngle","xVelocity","yVelocity","velocity","angle","majorAxis","inX","inY","atan2","PI"],"mappings":"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"} \ No newline at end of file diff --git a/libs/polymer/polymer.min.js b/libs/polymer/polymer.min.js deleted file mode 100644 index 939910b4e..000000000 --- a/libs/polymer/polymer.min.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2012 The Polymer Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -function PointerGestureEvent(a,b){var c=b||{},d=document.createEvent("Event"),e={bubbles:!0,cancelable:!0};return Object.keys(e).forEach(function(a){a in c&&(e[a]=c[a])}),d.initEvent(a,e.bubbles,e.cancelable),Object.keys(c).forEach(function(a){d[a]=b[a]}),d.preventTap=this.preventTap,d}if(window.Platform=window.Platform||{},window.logFlags=window.logFlags||{},function(a){var b=a.flags||{};location.search.slice(1).split("&").forEach(function(a){a=a.split("="),a[0]&&(b[a[0]]=a[1]||!0)}),b.shadow=(b.shadowdom||b.shadow||b.polyfill||!HTMLElement.prototype.webkitCreateShadowRoot)&&"polyfill",a.flags=b}(Platform),"polyfill"===Platform.flags.shadow){var SideTable;"undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0?SideTable=WeakMap:function(){var a=Object.defineProperty,b=Object.hasOwnProperty,c=(new Date).getTime()%1e9;SideTable=function(){this.name="__st"+(1e9*Math.random()>>>0)+(c++ +"__")},SideTable.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}();var ShadowDOMPolyfill={};!function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function d(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){switch(c){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":return}Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function e(a){var b=a.__proto__||Object.getPrototypeOf(a),c=z.get(b);if(c)return c;var d=e(b),f=n(d);return k(b,f,a),f}function f(a,b){i(a,b,!0)}function g(a,b){i(b,a,!1)}function h(a){return/^on[a-z]+$/.test(a)}function i(b,c,d){Object.getOwnPropertyNames(b).forEach(function(e){if(!(e in c)){B&&b.__lookupGetter__(e);var f;try{f=Object.getOwnPropertyDescriptor(b,e)}catch(g){f=C}var i,j;if(d&&"function"==typeof f.value)return c[e]=function(){return this.impl[e].apply(this.impl,arguments)},void 0;var k=h(e);i=k?a.getEventHandlerGetter(e):function(){return this.impl[e]},(f.writable||f.set)&&(j=k?a.getEventHandlerSetter(e):function(a){this.impl[e]=a}),Object.defineProperty(c,e,{get:i,set:j,configurable:f.configurable,enumerable:f.enumerable})}})}function j(a,b,c){var e=a.prototype;k(e,b,c),d(b,a)}function k(a,c,d){var e=c.prototype;b(void 0===z.get(a)),z.set(a,c),f(a,e),d&&g(e,d)}function l(a,b){return z.get(b.prototype)===a}function m(a){var b=Object.getPrototypeOf(a),c=e(b),d=n(c);return k(b,d,a),d}function n(a){function b(b){a.call(this,b)}return b.prototype=Object.create(a.prototype),b.prototype.constructor=b,b}function o(a){return a instanceof A.EventTarget||a instanceof A.Event||a instanceof A.DOMImplementation}function p(a){return a instanceof F||a instanceof E||a instanceof G||a instanceof D}function q(a){if(null===a)return null;b(p(a));var c=y.get(a);if(!c){var d=e(a);c=new d(a),y.set(a,c)}return c}function r(a){return null===a?null:(b(o(a)),a.impl)}function s(a){return a&&o(a)?r(a):a}function t(a){return a&&!o(a)?q(a):a}function u(a,c){null!==c&&(b(p(a)),b(void 0===c||o(c)),y.set(a,c))}function v(a,b,c){Object.defineProperty(a.prototype,b,{get:c,configurable:!0,enumerable:!0})}function w(a,b){v(a,b,function(){return q(this.impl[b])})}function x(a,b){a.forEach(function(a){b.forEach(function(b){a.prototype[b]=function(){var a=q(this);return a[b].apply(a,arguments)}})})}var y=new SideTable,z=new SideTable,A=Object.create(null);Object.getOwnPropertyNames(window);var B=/Firefox/.test(navigator.userAgent),C={get:function(){},set:function(){},configurable:!0,enumerable:!0},D=DOMImplementation,E=Event,F=Node,G=Window;a.assert=b,a.defineGetter=v,a.defineWrapGetter=w,a.forwardMethodsToWrapper=x,a.isWrapperFor=l,a.mixin=c,a.registerObject=m,a.registerWrapper=j,a.rewrap=u,a.unwrap=r,a.unwrapIfNeeded=s,a.wrap=q,a.wrapIfNeeded=t,a.wrappers=A}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a instanceof N.ShadowRoot}function c(a){var b=a.localName;return"content"===b||"shadow"===b}function d(a){return!!a.shadowRoot}function e(a){var b;return a.parentNode||(b=a.defaultView)&&M(b)||null}function f(f,g,h){if(h.length)return h.shift();if(b(f))return j(f)||a.getHostForShadowRoot(f);var i=a.eventParentsTable.get(f);if(i){for(var k=1;k=0;b--)if(!c(a[b]))return a[b];return null}function i(d,e){for(var g=[];d;){for(var i=[],j=e,l=void 0;j;){var n=null;if(i.length){if(c(j)&&(n=h(i),k(l))){var o=i[i.length-1];i.push(o)}}else i.push(j);if(m(j,d))return i[i.length-1];b(j)&&i.pop(),l=j,j=f(j,n,g)}d=b(d)?a.getHostForShadowRoot(d):d.parentNode}}function j(b){return a.insertionParentTable.get(b)}function k(a){return j(a)}function l(a){for(var b;b=a.parentNode;)a=b;return a}function m(a,b){return l(a)===l(b)}function n(b,c){if(b===c)return!0;if(b instanceof N.ShadowRoot){var d=a.getHostForShadowRoot(b);return d?n(l(d),c):!1}return!1}function o(a){switch(a){case"DOMAttrModified":case"DOMAttributeNameChanged":case"DOMCharacterDataModified":case"DOMElementNameChanged":case"DOMNodeInserted":case"DOMNodeInsertedIntoDocument":case"DOMNodeRemoved":case"DOMNodeRemovedFromDocument":case"DOMSubtreeModified":return!0}return!1}function p(b){if(!P.get(b)){P.set(b,!0),o(b.type)||a.renderAllPending();var c=M(b.target),d=M(b);return q(d,c)}}function q(a,b){var c=g(b);return"load"===a.type&&2===c.length&&c[0].target instanceof N.Document&&c.shift(),X.set(a,c),r(a,c)&&s(a,c)&&t(a,c),T.set(a,w.NONE),R.set(a,null),a.defaultPrevented}function r(a,b){for(var c,d=b.length-1;d>0;d--){var e=b[d].target,f=b[d].currentTarget;if(e!==f&&(c=w.CAPTURING_PHASE,!u(b[d],a,c)))return!1}return!0}function s(a,b){var c=w.AT_TARGET;return u(b[0],a,c)}function t(a,b){for(var c,d=a.bubbles,e=1;e=f;f++){var g=b[f].currentTarget,h=l(g);n(e,h)&&(f!==d||g instanceof N.Node)&&(a[c++]=g)}a.length=c}return a},stopPropagation:function(){U.set(this,!0)},stopImmediatePropagation:function(){U.set(this,!0),V.set(this,!0)}},K(Y,w,document.createEvent("Event"));var Z=y("UIEvent",w),$=y("CustomEvent",w),_={get relatedTarget(){return S.get(this)||M(L(this).relatedTarget)}},ab=J({initMouseEvent:z("initMouseEvent",14)},_),bb=J({initFocusEvent:z("initFocusEvent",5)},_),cb=y("MouseEvent",Z,ab),db=y("FocusEvent",Z,bb),eb=y("MutationEvent",w,{initMutationEvent:z("initMutationEvent",3),get relatedNode(){return M(this.impl.relatedNode)}}),fb=Object.create(null),gb=function(){try{new window.MouseEvent("click")}catch(a){return!1}return!0}();if(!gb){var hb=function(a,b,c){if(c){var d=fb[c];b=J(J({},d),b)}fb[a]=b};hb("Event",{bubbles:!1,cancelable:!1}),hb("CustomEvent",{detail:null},"Event"),hb("UIEvent",{view:null,detail:0},"Event"),hb("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),hb("FocusEvent",{relatedTarget:null},"UIEvent")}var ib=window.EventTarget,jb=["addEventListener","removeEventListener","dispatchEvent"];[Node,Window].forEach(function(a){var b=a.prototype;jb.forEach(function(a){Object.defineProperty(b,a+"_",{value:b[a]})})}),C.prototype={addEventListener:function(a,b,c){if(B(b)){var d=new v(a,b,c),e=O.get(this);if(e){for(var f=0;fd;d++)b[d]=f(a[d]);return b.length=e,b}function e(a,b){a.prototype[b]=function(){return d(this.impl[b].apply(this.impl,arguments))}}var f=a.wrap;c.prototype={item:function(a){return this[a]}},b(c.prototype,"item"),a.wrappers.NodeList=c,a.addWrapNodeListMethod=e,a.wrapNodeList=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){j(a instanceof f)}function c(a,b,c,d){if(a.nodeType!==f.DOCUMENT_FRAGMENT_NODE)return a.parentNode&&a.parentNode.removeChild(a),a.parentNode_=b,a.previousSibling_=c,a.nextSibling_=d,c&&(c.nextSibling_=a),d&&(d.previousSibling_=a),[a];for(var e,g=[];e=a.firstChild;)a.removeChild(e),g.push(e),e.parentNode_=b;for(var h=0;he;e++)d.appendChild(m(b[e]));return d}function e(a){for(var b=a.firstChild;b;){j(b.parentNode===a);var c=b.nextSibling,d=m(b),e=d.parentNode;e&&s.call(e,d),b.previousSibling_=b.nextSibling_=b.parentNode_=null,b=c}a.firstChild_=a.lastChild_=null}function f(a){j(a instanceof o),g.call(this,a),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0}var g=a.wrappers.EventTarget,h=a.wrappers.NodeList,i=a.defineWrapGetter,j=a.assert,k=a.mixin,l=a.registerWrapper,m=a.unwrap,n=a.wrap,o=window.Node,p=o.prototype.appendChild,q=o.prototype.insertBefore,r=o.prototype.replaceChild,s=o.prototype.removeChild,t=o.prototype.compareDocumentPosition;f.prototype=Object.create(g.prototype),k(f.prototype,{appendChild:function(a){b(a),this.invalidateShadowRenderer();var e=this.lastChild,f=null,g=c(a,this,e,f);return this.lastChild_=g[g.length-1],e||(this.firstChild_=g[0]),p.call(this.impl,d(this,g)),a},insertBefore:function(a,e){if(!e)return this.appendChild(a);b(a),b(e),j(e.parentNode===this),this.invalidateShadowRenderer();var f=e.previousSibling,g=e,h=c(a,this,f,g);this.firstChild===e&&(this.firstChild_=h[0]);var i=m(e),k=i.parentNode;return k&&q.call(k,d(this,h),i),a},removeChild:function(a){if(b(a),a.parentNode!==this)throw new Error("NotFoundError");this.invalidateShadowRenderer();var c=this.firstChild,d=this.lastChild,e=a.nextSibling,f=a.previousSibling,g=m(a),h=g.parentNode;return h&&s.call(h,g),c===a&&(this.firstChild_=e),d===a&&(this.lastChild_=f),f&&(f.nextSibling_=e),e&&(e.previousSibling_=f),a.previousSibling_=a.nextSibling_=a.parentNode_=null,a},replaceChild:function(a,e){if(b(a),b(e),e.parentNode!==this)throw new Error("NotFoundError");this.invalidateShadowRenderer();var f=e.previousSibling,g=e.nextSibling;g===a&&(g=a.nextSibling);var h=c(a,this,f,g);this.firstChild===e&&(this.firstChild_=h[0]),this.lastChild===e&&(this.lastChild_=h[h.length-1]),e.previousSibling_=null,e.nextSibling_=null,e.parentNode_=null;var i=m(e);return i.parentNode&&r.call(i.parentNode,d(this,h),i),e},hasChildNodes:function(){return null===this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:n(this.impl.parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:n(this.impl.firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:n(this.impl.lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:n(this.impl.nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:n(this.impl.previousSibling)},get parentElement(){for(var a=this.parentNode;a&&a.nodeType!==f.ELEMENT_NODE;)a=a.parentNode;return a},get textContent(){for(var a="",b=this.firstChild;b;b=b.nextSibling)a+=b.textContent;return a},set textContent(a){if(e(this),this.invalidateShadowRenderer(),""!==a){var b=this.impl.ownerDocument.createTextNode(a);this.appendChild(b)}},get childNodes(){for(var a=new h,b=0,c=this.firstChild;c;c=c.nextSibling)a[b++]=c;return a.length=b,a},cloneNode:function(a){if(!this.invalidateShadowRenderer())return n(this.impl.cloneNode(a));var b=n(this.impl.cloneNode(!1));if(a)for(var c=this.firstChild;c;c=c.nextSibling)b.appendChild(c.cloneNode(!0));return b},contains:function(a){if(!a)return!1;if(a===this)return!0;var b=a.parentNode;return b?this.contains(b):!1},compareDocumentPosition:function(a){return t.call(this.impl,m(a))}}),i(f,"ownerDocument"),l(o,f,document.createDocumentFragment()),delete f.prototype.querySelector,delete f.prototype.querySelectorAll,f.prototype=k(Object.create(g.prototype),f.prototype),a.wrappers.Node=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,c){for(var d,e=a.firstElementChild;e;){if(e.matches(c))return e;if(d=b(e,c))return d;e=e.nextElementSibling}return null}function c(a,b,d){for(var e=a.firstElementChild;e;)e.matches(b)&&(d[d.length++]=e),c(e,b,d),e=e.nextElementSibling;return d}var d={querySelector:function(a){return b(this,a)},querySelectorAll:function(a){return c(this,a,new NodeList)}},e={getElementsByTagName:function(a){return this.querySelectorAll(a)},getElementsByClassName:function(a){return this.querySelectorAll("."+a)},getElementsByTagNameNS:function(a,b){if("*"===a)return this.getElementsByTagName(b);for(var c=new NodeList,d=this.getElementsByTagName(b),e=0,f=0;e";case Node.TEXT_NODE:return c(a.nodeValue);case Node.COMMENT_NODE:return"";default:throw console.error(a),new Error("not implemented")}}function e(a){for(var b="",c=a.firstChild;c;c=c.nextSibling)b+=d(c);return b}function f(a,b,c){var d=c||"div";a.textContent="";var e=n(a.ownerDocument.createElement(d));e.innerHTML=b;for(var f;f=e.firstChild;)a.appendChild(o(f))}function g(a){j.call(this,a)}function h(b){k(g,b,function(){return a.renderAllPending(),this.impl[b]})}function i(b){Object.defineProperty(g.prototype,b,{value:function(){return a.renderAllPending(),this.impl[b].apply(this.impl,arguments)},configurable:!0,enumerable:!0})}var j=a.wrappers.Element,k=a.defineGetter,l=a.mixin,m=a.registerWrapper,n=a.unwrap,o=a.wrap,p=/&|<|"/g,q={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},r=window.HTMLElement;g.prototype=Object.create(j.prototype),l(g.prototype,{get innerHTML(){return e(this)},set innerHTML(a){f(this,a,this.tagName)},get outerHTML(){return d(this)},set outerHTML(a){if(this.invalidateShadowRenderer())throw new Error("not implemented");this.impl.outerHTML=a}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollLeft","scrollTop","scrollWidth"].forEach(h),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(i),m(r,g,document.createElement("b")),a.wrappers.HTMLElement=g,a.getInnerHTML=e,a.setInnerHTML=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLContentElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get select(){return this.getAttribute("select")},set select(a){this.setAttribute("select",a)},setAttribute:function(a,b){c.prototype.setAttribute.call(this,a,b),"select"===String(a).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),f&&e(f,b),a.wrappers.HTMLContentElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a),this.olderShadowRoot_=null}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLShadowElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get olderShadowRoot(){return this.olderShadowRoot_},invalidateShadowRenderer:function(){c.prototype.invalidateShadowRenderer.call(this,!0)}}),f&&e(f,b),a.wrappers.HTMLShadowElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){if(!a.defaultView)return a;var b=l.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);l.set(a,b)}return b}function c(a){for(var c,d=b(a.ownerDocument),e=d.createDocumentFragment();c=a.firstChild;)e.appendChild(c);return e}function d(a){e.call(this,a)}var e=a.wrappers.HTMLElement,f=a.getInnerHTML,g=a.mixin,h=a.registerWrapper,i=a.setInnerHTML,j=a.wrap,k=new SideTable,l=new SideTable,m=window.HTMLTemplateElement;d.prototype=Object.create(e.prototype),g(d.prototype,{get content(){if(m)return j(this.impl.content);var a=k.get(this);return a||(a=c(this),k.set(this,a)),a},get innerHTML(){return f(this.content)},set innerHTML(a){i(this.content,a),this.invalidateShadowRenderer()}}),m&&h(m,d),a.wrappers.HTMLTemplateElement=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a.localName){case"content":return new c(a);case"shadow":return new e(a);case"template":return new f(a)}d.call(this,a)}var c=a.wrappers.HTMLContentElement,d=a.wrappers.HTMLElement,e=a.wrappers.HTMLShadowElement,f=a.wrappers.HTMLTemplateElement;a.mixin;var g=a.registerWrapper,h=window.HTMLUnknownElement;b.prototype=Object.create(d.prototype),g(h,b),a.wrappers.HTMLUnknownElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";var b=a.GetElementsByInterface,c=a.ParentNodeInterface,d=a.SelectorsInterface,e=a.mixin,f=a.registerObject,g=f(document.createDocumentFragment());e(g.prototype,c),e(g.prototype,d),e(g.prototype,b);var h=f(document.createTextNode("")),i=f(document.createComment(""));a.wrappers.Comment=i,a.wrappers.DocumentFragment=g,a.wrappers.Text=h}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b){var d=i(b.impl.ownerDocument.createDocumentFragment());c.call(this,d),g(d,this);var e=b.shadowRoot;a.nextOlderShadowTreeTable.set(this,e),j.set(this,b)}var c=a.wrappers.DocumentFragment,d=a.elementFromPoint,e=a.getInnerHTML,f=a.mixin,g=a.rewrap,h=a.setInnerHTML,i=a.unwrap,j=new SideTable;b.prototype=Object.create(c.prototype),f(b.prototype,{get innerHTML(){return e(this)},set innerHTML(a){h(this,a),this.invalidateShadowRenderer()},invalidateShadowRenderer:function(){return j.get(this).invalidateShadowRenderer()},elementFromPoint:function(a,b){return d(this,this.ownerDocument,a,b)},getElementById:function(a){return this.querySelector("#"+a)}}),a.wrappers.ShadowRoot=b,a.getHostForShadowRoot=function(a){return j.get(a)}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){a.previousSibling_=a.previousSibling,a.nextSibling_=a.nextSibling,a.parentNode_=a.parentNode}function c(a){a.firstChild_=a.firstChild,a.lastChild_=a.lastChild}function d(a){E(a instanceof D);for(var d=a.firstChild;d;d=d.nextSibling)b(d);c(a)}function e(a){var b=G(a);d(a),b.textContent=""}function f(a,c){var e=G(a),f=G(c);f.nodeType===D.DOCUMENT_FRAGMENT_NODE?d(c):(h(c),b(c)),a.lastChild_=a.lastChild,a.lastChild===a.firstChild&&(a.firstChild_=a.firstChild);var g=H(e.lastChild);g&&(g.nextSibling_=g.nextSibling),e.appendChild(f)}function g(a,c){var d=G(a),e=G(c);b(c),c.previousSibling&&(c.previousSibling.nextSibling_=c),c.nextSibling&&(c.nextSibling.previousSibling_=c),a.lastChild===c&&(a.lastChild_=c),a.firstChild===c&&(a.firstChild_=c),d.removeChild(e)}function h(a){var b=G(a),c=b.parentNode;c&&g(H(c),a)}function i(a,b){k(b).push(a),A(a,b);var c=J.get(a);c||J.set(a,c=[]),c.push(b)}function j(a){I.set(a,[])}function k(a){return I.get(a)}function l(a){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}function m(a,b,c){for(var d=l(a),e=0;e","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim();return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},propertiesFromRule:function(a){var b=a.style.cssText;return a.style.content&&!a.style.content.match(/['"]+/)&&(b="content: '"+a.style.content+"';\n"+a.style.cssText.replace(/content:[^;]*;/g,"")),b}},i=/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,j=/([^{]*)({[\s\S]*?})/gim,k=/(.*)((?:\*)|(?:\:scope))(.*)/,l=/^[.\[:]/,m=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,n=/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,o=/::(x-[^\s{,(]*)/gim,p="([>\\s~+[.,{:][\\s\\S]*)?$",q=/@host/gim;if(window.ShadowDOMPolyfill){e("style { display: none !important; }\n");var r=document.querySelector("head");r.insertBefore(f(),r.childNodes[0])}a.ShadowCSS=h}(window.Platform)}else{var SideTable;"undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0?SideTable=WeakMap:function(){var a=Object.defineProperty,b=Object.hasOwnProperty,c=(new Date).getTime()%1e9;SideTable=function(){this.name="__st"+(1e9*Math.random()>>>0)+(c++ +"__")},SideTable.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}(),function(){window.templateContent=window.templateContent||function(a){return a.content},window.wrap=window.unwrap=function(a){return a},Object.defineProperties(HTMLElement.prototype,{shadowRoot:{get:function(){return this.webkitShadowRoot}},createShadowRoot:{value:function(){return this.webkitCreateShadowRoot()}}}),window.templateContent=function(a){if(window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(a),!a.content&&!a._content){for(var b=document.createDocumentFragment();a.firstChild;)b.appendChild(a.firstChild);a._content=b}return a.content||a._content}}()}if(function(a){function b(a){for(var b=a||{},d=1;d",""," "," ShadowDOM Inspector"," "," "," ",'
    ',"
",'
'," ",""].join("\n"),d=[],e=function(){var a=b.document,c=a.querySelector("#crumbs");c.textContent="";for(var e,g=0;e=d[g];g++){var h=a.createElement("a");h.href="#",h.textContent=e.localName,h.idx=g,h.onclick=function(a){for(var b;d.length>this.idx;)b=d.pop();f(b.shadow||b,b),a.preventDefault()},c.appendChild(a.createElement("li")).appendChild(h)}},f=function(a,c){var f=b.document;k=[];var g=c||a;d.push(g),e(),f.body.querySelector("#tree").innerHTML="
"+j(a,a.childNodes)+"
"},g=Array.prototype.forEach.call.bind(Array.prototype.forEach),h={STYLE:1,SCRIPT:1,"#comment":1,TEMPLATE:1},i=function(a){return h[a.nodeName]},j=function(a,b,c){if(i(a))return"";var d=c||"";if(a.localName||11==a.nodeType){var e=a.localName||"shadow-root",f=d+l(a);"content"==e&&(b=a.getDistributedNodes()),f+="
";var h=d+"  ";g(b,function(a){f+=j(a,a.childNodes,h)}),f+=d,{br:1}[e]||(f+="</"+e+">",f+="
")}else{var k=a.textContent.trim();f=k?d+'"'+k+'"'+"
":""}return f},k=[],l=function(a){var b="<",c=a.localName||"shadow-root";return a.webkitShadowRoot||a.shadowRoot?(b+=' ",k.push(a)):b+=c||"shadow-root",a.attributes&&g(a.attributes,function(a){b+=" "+a.name+(a.value?'="'+a.value+'"':"")}),b+=">"};shadowize=function(){var a=Number(this.attributes.idx.value),b=k[a];b?f(b.webkitShadowRoot||b.shadowRoot,b):(console.log("bad shadowize node"),console.dir(this))},a.output=j}(window.Inspector),function(a){"use strict";function b(){function a(a){"splice"===a[0].type&&"splice"===a[1].type&&(b=!0)}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=!1,c=[0];return Array.observe(c,a),c[1]=1,c.length=0,Object.deliverChangeRecords(a),b}function c(a){return+a===a>>>0}function d(a){return+a}function e(a){return a===Object(a)}function f(a,b){return a===b?0!==a||1/a===1/b:K(a)&&K(b)?!0:a!==a&&b!==b}function g(a){return"string"!=typeof a?!1:(a=a.replace(/\s/g,""),""==a?!0:"."==a[0]?!1:S.test(a))}function h(a){var b=T[a];if(b)return b;if(g(a)){var b=new i(a);return T[a]=b,b}}function i(a){return""==a.trim()?this:c(a)?(this.push(String(a)),this):(a.split(/\./).filter(function(a){return a}).forEach(function(a){this.push(a)},this),H&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn()),void 0)}function j(a){for(var b=0;U>b&&a.check();)a.report(),b++}function k(a){for(var b in a)return!1;return!0}function l(a){return k(a.added)&&k(a.removed)&&k(a.changed)}function m(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function n(a,b){var c=b||(Array.isArray(a)?[]:{});for(var d in a)c[d]=a[d];return Array.isArray(a)&&(c.length=a.length),c}function o(a,b,c,d){this.object=a,this.callback=b,this.target=c,this.token=d,this.reporting=!0,G&&(this.boundInternalCallback=this.internalCallback.bind(this)),this.valid=!0,p(this),this.connect(),this.sync(!0)}function p(a){W&&(V.push(a),o._allObserversCount++)}function q(a,b,c,d){o.call(this,a,b,c,d)}function r(a,b,c,d){if(!Array.isArray(a))throw Error("Provided object is not an Array");o.call(this,a,b,c,d)}function s(a){this.arr=[],this.callback=a,this.isObserved=!0}function t(a,b,c,d,f){this.value=void 0;var g=h(b);return g?g.length?(e(a)&&(this.path=g,o.call(this,a,c,d,f)),void 0):(this.value=a,void 0):void 0}function u(a,b){if("function"==typeof Object.observe){var c=Object.getNotifier(a);return function(d,e){var f={object:a,type:d,name:b};2===arguments.length&&(f.oldValue=e),c.notify(f)}}}function v(a,b,c){for(var d={},e={},f=0;fj;j++)i[j]=new Array(h),i[j][0]=j;for(var k=0;h>k;k++)i[0][k]=k;for(var j=1;g>j;j++)for(var k=1;h>k;k++)if(d[e+j-1]===a[b+k-1])i[j][k]=i[j-1][k-1];else{var l=i[j-1][k]+1,m=i[j][k-1]+1;i[j][k]=m>l?l:m}return i}function x(a){for(var b=a.length-1,c=a[0].length-1,d=a[b][c],e=[];b>0||c>0;)if(0!=b)if(0!=c){var f,g=a[b-1][c-1],h=a[b-1][c],i=a[b][c-1];f=i>h?g>h?h:g:g>i?i:g,f==g?(g==d?e.push(ab):(e.push(bb),d=g),b--,c--):f==h?(e.push(db),b--,d=h):(e.push(cb),c--,d=i)}else e.push(db),b--;else e.push(cb),c--;return e.reverse(),e}function y(a,b,c){for(var d=0;c>d;d++)if(a[d]!==b[d])return d;return c}function z(a,b,c){for(var d=a.length,e=b.length,f=0;c>f&&a[--d]===b[--e];)f++;return f}function A(a,b,c){return{index:a,removed:b,addedCount:c}}function B(a,b,c,d,e,f){var g=0,h=0,i=Math.min(c-b,f-e);if(0==b&&0==e&&(g=y(a,d,i)),c==a.length&&f==d.length&&(h=z(a,d,i-g)),b+=g,e+=g,c-=h,f-=h,0==c-b&&0==f-e)return[];if(b==c){for(var j=A(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[A(b,[],c-b)];for(var k=x(w(a,b,c,d,e,f)),j=void 0,l=[],m=b,n=e,o=0;ob||a>d?-1:b==c||d==a?0:c>a?d>b?b-c:d-c:b>d?d-a:b-a}function D(a,b,c,d){for(var e=A(b,c,d),f=!1,g=0,h=0;h=0){a.splice(h,1),h--,g-=i.addedCount-i.removed.length,e.addedCount+=i.addedCount-j;var k=e.removed.length+i.removed.length-j;if(e.addedCount||k){var c=i.removed;if(e.indexi.index+i.addedCount){var m=e.removed.slice(i.index+i.addedCount-e.index);Array.prototype.push.apply(c,m)}e.removed=c,i.indexh)continue;D(e,h,[g.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(g))}}return e}function F(a,b){var c=[];return E(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?(b.removed[0]!==a[b.index]&&c.push(b),void 0):(c=c.concat(B(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)),void 0)}),c}var G=b(),H=!1;try{var I=new Function("","return true;");H=I()}catch(J){}var K=a.Number.isNaN||function(b){return"number"==typeof b&&a.isNaN(b)},L="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},M="[$_a-zA-Z]",N="[$_a-zA-Z0-9]",O=M+"+"+N+"*",P="(?:[0-9]|[1-9]+[0-9]+)",Q="(?:"+O+"|"+P+")",R="(?:"+Q+")(?:\\."+Q+")*",S=new RegExp("^"+R+"$"),T={};i.prototype=L({__proto__:[],toString:function(){return this.join(".")},getValueFrom:function(a){for(var b=0;ba&&b.anyChanged);o._allObserversCount=V.length,X=!1}}},W&&(a.Platform.clearObservers=function(){V=[]}),q.prototype=L({__proto__:o.prototype,connect:function(){G&&Object.observe(this.object,this.boundInternalCallback)},sync:function(){G||(this.oldObject=n(this.object))},check:function(a){var b,c;if(G){if(!a)return!1;c={},b=v(this.object,a,c)}else c=this.oldObject,b=m(this.object,this.oldObject);return l(b)?!1:(this.reportArgs=[b.added||{},b.removed||{},b.changed||{}],this.reportArgs.push(function(a){return c[a]}),!0)},disconnect:function(){G?this.object&&Object.unobserve(this.object,this.boundInternalCallback):this.oldObject=void 0}}),r.prototype=L({__proto__:q.prototype,connect:function(){G&&Array.observe(this.object,this.boundInternalCallback)},sync:function(){G||(this.oldObject=this.object.slice())},check:function(a){var b;if(G){if(!a)return!1;b=F(this.object,a)}else b=B(this.object,0,this.object.length,this.oldObject,0,this.oldObject.length);return b&&b.length?(this.reportArgs=[b],!0):!1}}),r.applySplices=function(a,b,c){c.forEach(function(c){for(var d=[c.index,c.removed.length],e=c.index;e=0&&this.arr[b+1]===this.isObserved||(0>b&&(b=this.arr.length,this.arr[b]=a,Object.observe(a,this.callback)),this.arr[b+1]=this.isObserved,this.observe(Object.getPrototypeOf(a)))}},cleanup:function(){for(var a=0,b=0,c=this.isObserved;ba&&(this.arr[a]=d,this.arr[a+1]=c),a+=2):Object.unobserve(d,this.callback),b+=2}this.arr.length=a}},t.prototype=L({__proto__:o.prototype,connect:function(){G&&(this.observedSet=new s(this.boundInternalCallback))},disconnect:function(){this.value=void 0,G&&(this.observedSet.reset(),this.observedSet.cleanup(),this.observedSet=void 0)},check:function(){return this.value=G?this.path.getValueFromObserved(this.object,this.observedSet):this.path.getValueFrom(this.object),f(this.value,this.oldValue)?!1:(this.reportArgs=[this.value,this.oldValue],!0)},sync:function(a){a&&(this.value=G?this.path.getValueFromObserved(this.object,this.observedSet):this.path.getValueFrom(this.object)),this.oldValue=this.value}}),t.getValueAtPath=function(a,b){var c=h(b);return c?c.getValueFrom(a):void 0},t.setValueAtPath=function(a,b,c){var d=h(b);d&&d.setValueFrom(a,c)};var _={"new":!0,updated:!0,deleted:!0};t.defineProperty=function(a,b,c){var d=c.object,e=h(c.path),f=u(a,b),g=new t(d,c.path,function(a,b){f&&f("updated",b)});return Object.defineProperty(a,b,{get:function(){return e.getValueFrom(d)},set:function(a){e.setValueFrom(d,a)},configurable:!0}),{close:function(){var c=e.getValueFrom(d);f&&g.deliver(),g.close(),Object.defineProperty(a,b,{value:c,writable:!0,configurable:!0})}}};var ab=0,bb=1,cb=2,db=3;a.Observer=o,a.Observer.hasObjectObserve=G,a.ArrayObserver=r,a.ArrayObserver.calculateSplices=function(a,b){return B(a,0,a.length,b,0,b.length)},a.ObjectObserver=q,a.PathObserver=t,a.Path=i}(this),function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a){for(;a.parentNode;)a=a.parentNode;return"function"==typeof a.getElementById?a:null}function d(a){return a.ownerDocument.contains(a)}function e(a,b,c,d){this.closed=!1,this.node=a,this.property=b,this.model=c,this.path=d,this.observer=new PathObserver(c,d,this.boundValueChanged,this),this.boundValueChanged(this.value)}function f(a,b,c,d){this.conditional="?"==b[b.length-1],this.conditional&&(a.removeAttribute(b),b=b.slice(0,-1)),e.call(this,a,b,c,d)}function g(a){switch(a.type){case"checkbox":return T;case"radio":case"select-multiple":case"select-one":return"change";default:return"input"}}function h(a,b,c,d){e.call(this,a,b,c,d),this.eventType=g(this.node),this.boundNodeValueToModel=this.nodeValueChanged.bind(this),this.node.addEventListener(this.eventType,this.boundNodeValueToModel,!0)}function i(a){if(!d(a))return[];if(a.form)return Q(a.form.elements,function(b){return b!=a&&"INPUT"==b.tagName&&"radio"==b.type&&b.name==a.name});var b=a.ownerDocument.querySelectorAll('input[type="radio"][name="'+a.name+'"]');return Q(b,function(b){return b!=a&&!b.form})}function j(a,b,c){h.call(this,a,"checked",b,c)}function k(a,b,c){h.call(this,a,"selectedIndex",b,c)}function l(a){return $[a.tagName]&&a.hasAttribute("template")}function m(a){return"TEMPLATE"==a.tagName||l(a)}function n(a){return _&&"TEMPLATE"==a.tagName}function o(a,b){var c=a.querySelectorAll(ab);m(a)&&b(a),P(c,b)}function p(a){function b(a){HTMLTemplateElement.decorate(a)||p(a.content)}o(a,b)}function q(a,b){Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))})}function r(a){if(!a.defaultView)return a;var b=eb.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);eb.set(a,b)}return b}function s(a){var b=a.ownerDocument.createElement("template");a.parentNode.insertBefore(b,a);for(var c=a.attributes,d=c.length;d-->0;){var e=c[d];Z[e.name]&&("template"!==e.name&&b.setAttribute(e.name,e.value),a.removeAttribute(e.name))}return b}function t(a,b,c){var d=a.content;if(c)return d.appendChild(b),void 0;for(var e;e=b.firstChild;)d.appendChild(e)}function u(a){"TEMPLATE"===a.tagName?_||(cb?a.__proto__=HTMLTemplateElement.prototype:q(a,HTMLTemplateElement.prototype)):(q(a,HTMLTemplateElement.prototype),Object.defineProperty(a,"content",ib))}function v(a){var b=lb.get(a);b||(b=function(){H(a,a.model,a.bindingDelegate)},lb.set(a,b)),bb(b)}function w(a,b,c,d){this.closed=!1,this.node=a,this.property=b,this.model=c,this.path=d,this.node.inputs.bind(this.property,c,d||"")}function x(a){return 3==a.length&&0==a[0].length&&0==a[2].length}function y(a){if(a&&a.length){for(var b,c=a.length,d=0,e=0,f=0;c>e;){if(d=a.indexOf("{{",e),f=0>d?-1:a.indexOf("}}",d+2),0>f){if(!b)return;b.push(a.slice(e));break}b=b||[],b.push(a.slice(e,d)),b.push(a.slice(d+2,f).trim()),e=f+2}return e===c&&b.push(""),b}}function z(a,b,c,d,e){var f,g=e&&e[X];return g&&"function"==typeof g&&(f=g(c,d,b,a),f&&(c=f,d="value")),a.bind(b,c,d)}function A(a,b,c,d,e){for(var f=0;fc?(this.keys.push(a),this.values.push(b)):this.values[c]=b},get:function(a){var b=this.keys.indexOf(a);return 0>b?void 0:this.values[b]},"delete":function(a){var b=this.keys.indexOf(a);return 0>b?!1:(this.keys.splice(b,1),this.values.splice(b,1),!0)},forEach:function(a,b){for(var c=0;c>>0)+(c++ +"__")},S.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}(),Node.prototype.bind=function(a,b,c){this.bindings=this.bindings||{};var d=this.bindings[a];return d&&d.close(),d=this.createBinding(a,b,c),this.bindings[a]=d,d?d:(console.error("Unhandled binding to Node: ",this,a,b,c),void 0)},Node.prototype.createBinding=function(){},Node.prototype.unbind=function(a){if(this.bindings){var b=this.bindings[a];b&&(b.close(),delete this.bindings[a])}},Node.prototype.unbindAll=function(){if(this.bindings){for(var a=Object.keys(this.bindings),b=0;be.node.length&&d--?bb(b):e.node[e.property]=c}var c=Number(a);if(c<=this.node.length)return this.node[this.property]=c,void 0;var d=2,e=this;bb(b)}}),HTMLSelectElement.prototype.createBinding=function(a,b,c){return"selectedindex"===a.toLowerCase()?(this.removeAttribute(a),new k(this,b,c)):HTMLElement.prototype.createBinding.call(this,a,b,c)};var U="bind",V="repeat",W="if",X="getBinding",Y="getInstanceModel",Z={template:!0,repeat:!0,bind:!0,ref:!0},$={THEAD:!0,TBODY:!0,TFOOT:!0,TH:!0,TR:!0,TD:!0,COLGROUP:!0,COL:!0,CAPTION:!0,OPTION:!0,OPTGROUP:!0},_="undefined"!=typeof HTMLTemplateElement,ab="template, "+Object.keys($).map(function(a){return a.toLowerCase()+"[template]"}).join(", "),bb=function(){function a(a){this.nextRunner=a,this.value=!1,this.lastValue=this.value,this.scheduled=[],this.scheduledIds=[],this.running=!1,this.observer=new PathObserver(this,"value",this.run,this)}function b(a){var b=a[e];a[e]||(b=d++,a[e]=b),c.schedule(a,b)}a.prototype={schedule:function(a,b){if(!this.scheduledIds[b]){if(this.running)return this.nextRunner.schedule(a,b);this.scheduledIds[b]=!0,this.scheduled.push(a),this.lastValue===this.value&&(this.value=!this.value)}},run:function(){this.running=!0;for(var a=0;a=48&&57>=a}function d(a){return 32===a||9===a||11===a||12===a||160===a||a>=5760&&" ᠎              ".indexOf(String.fromCharCode(a))>0}function e(a){return 10===a||13===a||8232===a||8233===a}function f(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a}function g(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a||a>=48&&57>=a}function h(a){return"this"===a}function i(){for(;bb>ab&&d(_.charCodeAt(ab));)++ab}function j(){var a,b;for(a=ab++;bb>ab&&(b=_.charCodeAt(ab),g(b));)++ab;return _.slice(a,ab)}function k(){var a,b,c;return a=ab,b=j(),c=1===b.length?X.Identifier:h(b)?X.Keyword:"null"===b?X.NullLiteral:"true"===b||"false"===b?X.BooleanLiteral:X.Identifier,{type:c,value:b,range:[a,ab]}}function l(){var a,b,c,d,e=ab,f=_.charCodeAt(ab),g=_[ab];switch(f){case 46:case 40:case 41:case 59:case 44:case 123:case 125:case 91:case 93:case 58:case 63:case 126:return++ab,{type:X.Punctuator,value:String.fromCharCode(f),range:[e,ab]};default:if(a=_.charCodeAt(ab+1),61===a)switch(f){case 37:case 38:case 42:case 43:case 45:case 47:case 60:case 62:case 94:case 124:return ab+=2,{type:X.Punctuator,value:String.fromCharCode(f)+String.fromCharCode(a),range:[e,ab]};case 33:case 61:return ab+=2,61===_.charCodeAt(ab)&&++ab,{type:X.Punctuator,value:_.slice(e,ab),range:[e,ab]}}}return b=_[ab+1],c=_[ab+2],d=_[ab+3],">"===g&&">"===b&&">"===c&&"="===d?(ab+=4,{type:X.Punctuator,value:">>>=",range:[e,ab]}):">"===g&&">"===b&&">"===c?(ab+=3,{type:X.Punctuator,value:">>>",range:[e,ab]}):"<"===g&&"<"===b&&"="===c?(ab+=3,{type:X.Punctuator,value:"<<=",range:[e,ab]}):">"===g&&">"===b&&"="===c?(ab+=3,{type:X.Punctuator,value:">>=",range:[e,ab]}):g===b&&"+-<>&|".indexOf(g)>=0?(ab+=2,{type:X.Punctuator,value:g+b,range:[e,ab]}):"<>=!+-*%&|^/".indexOf(g)>=0?(++ab,{type:X.Punctuator,value:g,range:[e,ab]}):(s({},$.UnexpectedToken,"ILLEGAL"),void 0)}function m(){var a,d,e;if(e=_[ab],b(c(e.charCodeAt(0))||"."===e,"Numeric literal must start with a decimal digit or a decimal point"),d=ab,a="","."!==e){for(a=_[ab++],e=_[ab],"0"===a&&e&&c(e.charCodeAt(0))&&s({},$.UnexpectedToken,"ILLEGAL");c(_.charCodeAt(ab));)a+=_[ab++];e=_[ab]}if("."===e){for(a+=_[ab++];c(_.charCodeAt(ab));)a+=_[ab++];e=_[ab]}if("e"===e||"E"===e)if(a+=_[ab++],e=_[ab],("+"===e||"-"===e)&&(a+=_[ab++]),c(_.charCodeAt(ab)))for(;c(_.charCodeAt(ab));)a+=_[ab++];else s({},$.UnexpectedToken,"ILLEGAL");return f(_.charCodeAt(ab))&&s({},$.UnexpectedToken,"ILLEGAL"),{type:X.NumericLiteral,value:parseFloat(a),range:[d,ab]}}function n(){var a,c,d,f="",g=!1;for(a=_[ab],b("'"===a||'"'===a,"String literal must starts with a quote"),c=ab,++ab;bb>ab;){if(d=_[ab++],d===a){a="";break}if("\\"===d)if(d=_[ab++],d&&e(d.charCodeAt(0)))"\r"===d&&"\n"===_[ab]&&++ab;else switch(d){case"n":f+="\n";break;case"r":f+="\r";break;case"t":f+=" ";break;case"b":f+="\b";break;case"f":f+="\f";break;case"v":f+=" ";break;default:f+=d}else{if(e(d.charCodeAt(0)))break;f+=d}}return""!==a&&s({},$.UnexpectedToken,"ILLEGAL"),{type:X.StringLiteral,value:f,octal:g,range:[c,ab]}}function o(a){return a.type===X.Identifier||a.type===X.Keyword||a.type===X.BooleanLiteral||a.type===X.NullLiteral}function p(){var a;return i(),ab>=bb?{type:X.EOF,range:[ab,ab]}:(a=_.charCodeAt(ab),40===a||41===a||58===a?l():39===a||34===a?n():f(a)?k():46===a?c(_.charCodeAt(ab+1))?m():l():c(a)?m():l())}function q(){var a;return a=db,ab=a.range[1],db=p(),ab=a.range[1],a}function r(){var a;a=ab,db=p(),ab=a}function s(a,c){var d,e=Array.prototype.slice.call(arguments,2),f=c.replace(/%(\d)/g,function(a,c){return b(cab&&(a.push(O()),!v(")"));)u(",");return u(")"),a}function F(){var a;return a=q(),o(a)||t(a),cb.createIdentifier(a.value)}function G(){return u("."),F()}function H(){var a;return u("["),a=P(),u("]"),a}function I(){var a,b,c;for(a=D();v(".")||v("[")||v("(");)v("(")?(b=E(),a=cb.createCallExpression(a,b)):v("[")?(c=H(),a=cb.createMemberExpression("[",a,c)):(c=G(),a=cb.createMemberExpression(".",a,c));return a}function J(){var a;return a=I(),db.type===X.Punctuator&&(v("++")||v("--"))&&s({},$.UnexpectedToken),a}function K(){var a,b;return db.type!==X.Punctuator&&db.type!==X.Keyword?b=J():v("++")||v("--")?s({},$.UnexpectedToken):v("+")||v("-")||v("~")||v("!")?(a=q(),b=K(),b=cb.createUnaryExpression(a.value,b)):w("delete")||w("void")||w("typeof")?s({},$.UnexpectedToken):b=J(),b}function L(a,b){var c=0;if(a.type!==X.Punctuator&&a.type!==X.Keyword)return 0;switch(a.value){case"||":c=1;break;case"&&":c=2;break;case"|":c=3;break;case"^":c=4;break;case"&":c=5;break;case"==":case"!=":case"===":case"!==":c=6;break;case"<":case">":case"<=":case">=":case"instanceof":c=7;break;case"in":c=b?7:0;break;case"<<":case">>":case">>>":c=8;break;case"+":case"-":c=9;break;case"*":case"/":case"%":c=11}return c}function M(){var a,b,c,d,e,f,g,h,i;if(d=eb.allowIn,eb.allowIn=!0,h=K(),b=db,c=L(b,d),0===c)return h;for(b.prec=c,q(),f=K(),e=[h,b,f];(c=L(db,d))>0;){for(;e.length>2&&c<=e[e.length-2].prec;)f=e.pop(),g=e.pop().value,h=e.pop(),a=cb.createBinaryExpression(g,h,f),e.push(a);b=q(),b.prec=c,e.push(b),a=K(),e.push(a)}for(eb.allowIn=d,i=e.length-1,a=e[i];i>1;)a=cb.createBinaryExpression(e[i-1].value,e[i-2],a),i-=2;return a}function N(){var a,b,c,d;return a=M(),v("?")&&(q(),b=eb.allowIn,eb.allowIn=!0,c=O(),eb.allowIn=b,u(":"),d=O(),a=cb.createConditionalExpression(a,c,d)),a}function O(){var a,b,c;return a=db,c=b=N()}function P(){var a;return a=O()}function Q(){return u(";"),cb.createEmptyStatement()}function R(){var a=P();return x(),cb.createExpressionStatement(a)}function S(){var a,b,c,d=db.type;if(d===X.EOF&&t(db),i(),d===X.Punctuator)switch(db.value){case";":return Q();case"(":return R()}return a=P(),a.type===Z.Identifier&&v(":")?(q(),c="$"+a.name,Object.prototype.hasOwnProperty.call(eb.labelSet,c)&&s({},$.Redeclaration,"Label",a.name),eb.labelSet[c]=!0,b=S(),delete eb.labelSet[c],cb.createLabeledStatement(a,b)):(x(),cb.createExpressionStatement(a))}function T(){return db.type===X.Keyword?S():db.type!==X.EOF?S():void 0}function U(){for(var a,b=[];bb>ab&&(a=T(),"undefined"!=typeof a);)b.push(a);return b}function V(){var a;return i(),r(),a=U(),cb.createProgram(a)}function W(a,b){var c;return c=String,"string"==typeof a||a instanceof String||(a=c(a)),cb=b,_=a,ab=0,bb=_.length,db=null,eb={allowIn:!0,labelSet:{}},bb>0&&"undefined"==typeof _[0]&&a instanceof String&&(_=a.valueOf()),V()}var X,Y,Z,$,_,ab,bb,cb,db,eb;X={BooleanLiteral:1,EOF:2,Identifier:3,Keyword:4,NullLiteral:5,NumericLiteral:6,Punctuator:7,StringLiteral:8},Y={},Y[X.BooleanLiteral]="Boolean",Y[X.EOF]="",Y[X.Identifier]="Identifier",Y[X.Keyword]="Keyword",Y[X.NullLiteral]="Null",Y[X.NumericLiteral]="Numeric",Y[X.Punctuator]="Punctuator",Y[X.StringLiteral]="String",Z={ArrayExpression:"ArrayExpression",BinaryExpression:"BinaryExpression",CallExpression:"CallExpression",ConditionalExpression:"ConditionalExpression",EmptyStatement:"EmptyStatement",ExpressionStatement:"ExpressionStatement",Identifier:"Identifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",ObjectExpression:"ObjectExpression",Program:"Program",Property:"Property",ThisExpression:"ThisExpression",UnaryExpression:"UnaryExpression"},$={UnexpectedToken:"Unexpected token %0",UnknownLabel:"Undefined label '%0'",Redeclaration:"%0 '%1' has already been declared"},a.esprima={parse:W}}(this),function(a){"use strict";function b(a,b,d,e){if(e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.tagName&&("bind"===d||"repeat"===d)){var f,g,h=b.match(r);if(h?(f=h[1],g=h[2]):(h=b.match(s),h&&(f=h[2],g=h[1])),h){var i;if(g=g.trim(),g.match(q))i=new CompoundBinding(function(a){return a.path}),i.bind("path",a,g);else try{i=c(a,g)}catch(j){console.error("Invalid expression syntax: "+g,j)}if(i)return t.set(e,f),i}}}function c(a,b){try{var c=new f;if(esprima.parse(b,c),!c.statements.length&&!c.labeledStatements.length)return;if(!c.labeledStatements.length&&c.statements.length>1)throw Error("Multiple unlabelled statements are not allowed.");var e=c.labeledStatements.length?d(c.labeledStatements):e=c.statements[0],g=[];for(var h in c.deps)g.push(h);if(!g.length)return{value:e({})};for(var i=new CompoundBinding(e),j=0;j>>0)+(c++ +"__")},i.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}();var j="[$_a-zA-Z]",k="[$_a-zA-Z0-9]",l=j+"+"+k+"*",m="("+l+")",n="(?:[0-9]|[1-9]+[0-9]+)",o="(?:"+l+"|"+n+")",p="(?:"+o+")(?:\\."+o+")*",q=new RegExp("^"+p+"$"),r=new RegExp("^"+m+"\\s* in (.*)$"),s=new RegExp("^(.*) as \\s*"+m+"$"),t=new i;e.prototype={getPath:function(){return this.last?this.last.getPath()+"."+this.name:this.name},valueFn:function(){var a=this.getPath();return this.deps[a]=!0,function(b){return b[a]}}};var u={"+":function(a){return+a},"-":function(a){return-a},"!":function(a){return!a}},v={"+":function(a,b){return a+b},"-":function(a,b){return a-b},"*":function(a,b){return a*b},"/":function(a,b){return a/b},"%":function(a,b){return a%b},"<":function(a,b){return b>a},">":function(a,b){return a>b},"<=":function(a,b){return b>=a},">=":function(a,b){return a>=b},"==":function(a,b){return a==b},"!=":function(a,b){return a!=b},"===":function(a,b){return a===b},"!==":function(a,b){return a!==b},"&&":function(a,b){return a&&b},"||":function(a,b){return a||b}};f.prototype={getFn:function(a){return a instanceof e?a.valueFn():a},createProgram:function(){},createExpressionStatement:function(a){return this.statements.push(a),a},createLabeledStatement:function(a,b){return this.labeledStatements.push({label:a.getPath(),body:b instanceof e?b.valueFn():b}),b},createUnaryExpression:function(a,b){if(!u[a])throw Error("Disallowed operator: "+a);return b=this.getFn(b),function(c){return u[a](b(c))}},createBinaryExpression:function(a,b,c){if(!v[a])throw Error("Disallowed operator: "+a);return b=this.getFn(b),c=this.getFn(c),function(d){return v[a](b(d),c(d))}},createConditionalExpression:function(a,b,c){return a=this.getFn(a),b=this.getFn(b),c=this.getFn(c),function(d){return a(d)?b(d):c(d)}},createIdentifier:function(a){var b=new e(this.deps,a);return b.type="Identifier",b},createMemberExpression:function(a,b,c){return new e(this.deps,c.name,b)},createLiteral:function(a){return function(){return a.value}},createArrayExpression:function(a){for(var b=0;be;e++)d.unshift("..");var g=d.join("/");return g},resolvePathsInHTML:function(a,b){b=b||p.documentUrlFromNode(a),p.resolveAttributes(a,b),p.resolveStyleElts(a,b);var c=a.querySelectorAll("template");c&&q(c,function(a){a.content&&p.resolvePathsInHTML(a.content,b)})},resolvePathsInStylesheet:function(a){var b=p.nodeUrl(a);a.__resource=p.resolveCssText(a.__resource,b)},resolveStyleElts:function(a,b){var c=a.querySelectorAll("style");c&&q(c,function(a){a.textContent=p.resolveCssText(a.textContent,b)})},resolveCssText:function(a,b){return a.replace(/url\([^)]*\)/g,function(a){var c=a.replace(/["']/g,"").slice(4,-1);return c=p.resolveUrl(b,c,!0),"url("+c+")"})},resolveAttributes:function(a,b){var c=a&&a.querySelectorAll(n);c&&q(c,function(a){this.resolveNodeAttributes(a,b)},this)},resolveNodeAttributes:function(a,b){m.forEach(function(c){var d=a.attributes[c];if(d&&d.value&&d.value.search(o)<0){var e=p.resolveUrl(b,d.value,!0);d.value=e}})}};h=h||{async:!0,ok:function(a){return a.status>=200&&a.status<300||304===a.status||0===a.status},load:function(b,c,d){var e=new XMLHttpRequest;return(a.flags.debug||a.flags.bust)&&(b+="?"+Math.random()),e.open("GET",b,h.async),e.addEventListener("readystatechange",function(){4===e.readyState&&c.call(d,!h.ok(e)&&e,e.response,b)}),e.send(),e},loadDocument:function(a,b,c){this.load(a,b,c).responseType="document"}};var q=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.path=p,a.xhr=h,a.importer=k,a.getDocumentUrl=p.getDocumentUrl,a.IMPORT_LINK_TYPE=i}(window.HTMLImports),function(a){function b(a){return"link"===a.localName&&a.getAttribute("rel")===f}function c(a){return a.parentNode&&!d(a)&&!e(a)}function d(a){return a.ownerDocument===document||a.ownerDocument.impl===document}function e(a){return a.parentNode&&"element"===a.parentNode.localName}var f="import",g={selectors:["link[rel="+f+"]","link[rel=stylesheet]","style","script:not([type])",'script[type="text/javascript"]'],map:{link:"parseLink",script:"parseScript",style:"parseGeneric"},parse:function(a){if(!a.__importParsed){a.__importParsed=!0;var b=a.querySelectorAll(g.selectors);h(b,function(a){g[g.map[a.localName]](a)})}},parseLink:function(a){b(a)?a.content&&g.parse(a.content):this.parseGeneric(a)},parseGeneric:function(a){c(a)&&document.head.appendChild(a)},parseScript:function(b){if(c(b)){var d=(b.__resource||b.textContent).trim();if(d){var e=b.__nodeUrl;if(!e){var e=a.path.documentUrlFromNode(b),f="["+Math.floor(1e3*(Math.random()+1))+"]",g=d.match(/Polymer\(['"]([^'"]*)/);f=g&&g[1]||f,e+="/"+f+".js"}d+="\n//# sourceURL="+e+"\n",eval.call(window,d)}}}},h=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.parser=g}(HTMLImports),function(){function a(){HTMLImports.importer.load(document,function(){HTMLImports.parser.parse(document),HTMLImports.readyTime=(new Date).getTime(),document.dispatchEvent(new CustomEvent("HTMLImportsLoaded",{bubbles:!0}))})}"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState?a():window.addEventListener("DOMContentLoaded",a)}(),function(a){function b(a){u.push(a),t||(t=!0,q(d))}function c(a){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(a)||a}function d(){t=!1;var a=u;u=[],a.sort(function(a,b){return a.uid_-b.uid_});var b=!1;a.forEach(function(a){var c=a.takeRecords();e(a),c.length&&(a.callback_(c,a),b=!0)}),b&&d()}function e(a){a.nodes_.forEach(function(b){var c=p.get(b);c&&c.forEach(function(b){b.observer===a&&b.removeTransientObservers()})})}function f(a,b){for(var c=a;c;c=c.parentNode){var d=p.get(c);if(d)for(var e=0;e0){var e=c[d-1],f=n(e,a);if(f)return c[d-1]=f,void 0}else b(this.observer);c[d]=a},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(a){var b=this.options;b.attributes&&a.addEventListener("DOMAttrModified",this,!0),b.characterData&&a.addEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.addEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(a){var b=this.options;b.attributes&&a.removeEventListener("DOMAttrModified",this,!0),b.characterData&&a.removeEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.removeEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(a){if(a!==this.target){this.addListeners_(a),this.transientObservedNodes.push(a);var b=p.get(a);b||p.set(a,b=[]),b.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[],a.forEach(function(a){this.removeListeners_(a);for(var b=p.get(a),c=0;c1?logFlags.dom&&console.warn("inserted:",a.localName,"insert/remove count:",a.__inserted):a.insertedCallback&&(logFlags.dom&&console.log("inserted:",a.localName),a.insertedCallback())),logFlags.dom&&console.groupEnd())}function j(a){k(a),c(a,function(a){k(a)})}function k(a){(a.removedCallback||a.__upgraded__&&logFlags.dom)&&(logFlags.dom&&console.log("removed:",a.localName),l(a)||(a.__inserted=(a.__inserted||0)-1,a.__inserted>0&&(a.__inserted=0),a.__inserted<0?logFlags.dom&&console.warn("removed:",a.localName,"insert/remove count:",a.__inserted):a.removedCallback&&a.removedCallback()))}function l(a){for(var b=a;b;){if(b==a.ownerDocument)return!0;b=b.parentNode||b.host}}function m(a){a.webkitShadowRoot&&!a.webkitShadowRoot.__watched&&(logFlags.dom&&console.log("watching shadow-root for: ",a.localName),r(a.webkitShadowRoot),a.webkitShadowRoot.__watched=!0)}function n(a){m(a),c(a,function(){m(a)})}function o(a){switch(a.localName){case"style":case"script":case"template":case void 0:return!0}}function p(a){if(logFlags.dom){var b=a[0];if(b&&"childList"===b.type&&b.addedNodes&&b.addedNodes){for(var c=b.addedNodes[0];c&&c!==document&&!c.host;)c=c.parentNode;var d=c&&(c.URL||c._URL||c.host&&c.host.localName)||"";d=d.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",a.length,d||"")}a.forEach(function(a){"childList"===a.type&&(v(a.addedNodes,function(a){o(a)||f(a)}),v(a.removedNodes,function(a){o(a)||j(a)}))}),logFlags.dom&&console.groupEnd()}function q(){p(u.takeRecords())}function r(a){u.observe(a,{childList:!0,subtree:!0})}function s(a){r(a)}function t(a){logFlags.dom&&console.group("upgradeDocument: ",(a.URL||a._URL||"").split("/").pop()),f(a),logFlags.dom&&console.groupEnd()}var u=new MutationObserver(p),v=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.watchShadow=m,a.watchAllShadows=n,a.upgradeAll=f,a.upgradeSubtree=e,a.observeDocument=s,a.upgradeDocument=t,a.takeRecords=q}(window.CustomElements),function(){function parseElementElement(a){var b={name:"","extends":null};takeAttributes(a,b);var c=HTMLElement.prototype;if(b.extends){var d=document.createElement(b.extends);c=d.__proto__||Object.getPrototypeOf(d)}b.prototype=Object.create(c),a.options=b;var e=a.querySelector('script:not([type]),script[type="text/javascript"],scripts');e&&executeComponentScript(e.textContent,a,b.name);var f=document.register(b.name,b);a.ctor=f;var g=a.getAttribute("constructor");g&&(window[g]=f)}function takeAttributes(a,b){for(var c in b){var d=a.attributes[c];d&&(b[c]=d.value)}}function executeComponentScript(inScript,inContext,inName){context=inContext;var owner=context.ownerDocument,url=owner._URL||owner.URL||owner.impl&&(owner.impl._URL||owner.impl.URL),match=url.match(/.*\/([^.]*)[.]?.*$/);if(match){var name=match[1];url+=name!=inName?":"+inName:""}var code="__componentScript('"+inName+"', function(){"+inScript+"});"+"\n//# sourceURL="+url+"\n";eval(code)}function mixin(a,b){a=a||{};try{Object.getOwnPropertyNames(b).forEach(function(c){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)})}catch(c){}return a}var HTMLElementElement=function(a){return a.register=HTMLElementElement.prototype.register,parseElementElement(a),a};HTMLElementElement.prototype={register:function(a){a&&(this.options.lifecycle=a.lifecycle,a.prototype&&mixin(this.options.prototype,a.prototype))}};var context;window.__componentScript=function(a,b){b.call(context)},window.HTMLElementElement=HTMLElementElement}(),function(){function a(a){return"link"===a.localName&&a.getAttribute("rel")===b}var b=window.HTMLImports?HTMLImports.IMPORT_LINK_TYPE:"none",c={selectors:["link[rel="+b+"]","element"],map:{link:"parseLink",element:"parseElement"},parse:function(a){if(!a.__parsed){a.__parsed=!0;var b=a.querySelectorAll(c.selectors);d(b,function(a){c[c.map[a.localName]](a)}),CustomElements.upgradeDocument(a),CustomElements.observeDocument(a)}},parseLink:function(b){a(b)&&this.parseImport(b)},parseImport:function(a){a.content&&c.parse(a.content)},parseElement:function(a){new HTMLElementElement(a)}},d=Array.prototype.forEach.call.bind(Array.prototype.forEach);CustomElements.parser=c}(),function(){function a(){setTimeout(function(){CustomElements.parser.parse(document),CustomElements.upgradeDocument(document),CustomElements.ready=!0,CustomElements.readyTime=Date.now(),window.HTMLImports&&(CustomElements.elapsed=CustomElements.readyTime-HTMLImports.readyTime),document.body.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))},0)}if("function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState)a();else{var b=window.HTMLImports?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(b,a)}}(),function(){function a(){}var b=document.createElement("style");b.textContent="element {display: none !important;} /* injected by platform.js */";var c=document.querySelector("head");if(c.insertBefore(b,c.firstChild),window.ShadowDOMPolyfill){CustomElements.watchShadow=a,CustomElements.watchAllShadows=a;var d=["upgradeAll","upgradeSubtree","observeDocument","upgradeDocument"],e={};d.forEach(function(a){e[a]=CustomElements[a]}),d.forEach(function(a){CustomElements[a]=function(b){return e[a](wrap(b))}})}}(),function(a){a=a||{};var b={shadow:function(a){return a?a.shadowRoot||a.webkitShadowRoot:void 0},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);return this.canTarget(b)?b:void 0},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d}e=this.olderShadow(e)}return f}},owner:function(a){for(var b=a;b.parentNode;)b=b.parentNode;return b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);return d.elementFromPoint(b,c)||(d=document),this.searchRoot(document,b,c)}};a.targetFinding=b,a.findTarget=b.findTarget.bind(b),window.PointerEventsPolyfill=a}(window.PointerEventsPolyfill),function(){function a(a){return'[touch-action="'+a+'"]'}function b(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}var c=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],d="";c.forEach(function(c){d+=String(c)===c?a(c)+b(c):c.selectors.map(a)+b(c.rule)});var e=document.createElement("style");e.textContent=d;var f=document.querySelector("head");f.insertBefore(e,f.firstChild)}(),function(a){function b(a,b){var b=b||{},e=b.buttons;if(void 0===e)switch(b.which){case 1:e=1;break;case 2:e=4;break;case 3:e=2;break;default:e=0}var f;if(c)f=new MouseEvent(a,b);else{f=document.createEvent("MouseEvent");var g={bubbles:!1,cancelable:!1,view:null,detail:null,screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null};Object.keys(g).forEach(function(a){a in b&&(g[a]=b[a])}),f.initMouseEvent(a,g.bubbles,g.cancelable,g.view,g.detail,g.screenX,g.screenY,g.clientX,g.clientY,g.ctrlKey,g.altKey,g.shiftKey,g.metaKey,g.button,g.relatedTarget)}d||Object.defineProperty(f,"buttons",{get:function(){return e},enumerable:!0});var h=0;return h=b.pressure?b.pressure:e?.5:0,Object.defineProperties(f,{pointerId:{value:b.pointerId||0,enumerable:!0},width:{value:b.width||0,enumerable:!0},height:{value:b.height||0,enumerable:!0},pressure:{value:h,enumerable:!0},tiltX:{value:b.tiltX||0,enumerable:!0},tiltY:{value:b.tiltY||0,enumerable:!0},pointerType:{value:b.pointerType||"",enumerable:!0},hwTimestamp:{value:b.hwTimestamp||0,enumerable:!0},isPrimary:{value:b.isPrimary||!1,enumerable:!0}}),f}var c=!1,d=!1;try{var e=new MouseEvent("click",{buttons:1});c=!0,d=1===e.buttons}catch(f){}a.PointerEvent||(a.PointerEvent=b)}(window),function(a){function b(){this.ids=[],this.pointers=[]}b.prototype={set:function(a,b){var c=this.ids.indexOf(a);c>-1?this.pointers[c]=b:(this.ids.push(a),this.pointers.push(b))},has:function(a){return this.ids.indexOf(a)>-1},"delete":function(a){var b=this.ids.indexOf(a);b>-1&&(this.ids.splice(b,1),this.pointers.splice(b,1))},get:function(a){var b=this.ids.indexOf(a);return this.pointers[b]},get size(){return this.pointers.length},clear:function(){this.ids.length=0,this.pointers.length=0},forEach:function(a,b){this.ids.forEach(function(c,d){a.call(b,c,this.pointers[d],this)},this)}},a.PointerMap=window.Map&&Map.prototype.forEach?Map:b}(window.PointerEventsPolyfill),function(a){var b;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0)b=WeakMap;else{var c=Object.defineProperty,d=Object.hasOwnProperty,e=(new Date).getTime()%1e9;b=function(){this.name="__st"+(1e9*Math.random()>>>0)+(e++ +"__")},b.prototype={set:function(a,b){c(a,this.name,{value:b,writable:!0})},get:function(a){return d.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}a.SideTable=b}(window.PointerEventsPolyfill),function(a){var b={targets:new a.SideTable,handledEvents:new a.SideTable,pointermap:new a.PointerMap,eventMap:{},eventSources:{},eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.unregister.call(b,a)},down:function(a){this.fireEvent("pointerdown",a)},move:function(a){this.fireEvent("pointermove",a)},up:function(a){this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){this.fireEvent("pointercancel",a)},leaveOut:function(a){a.target.contains(a.relatedTarget)||this.leave(a),this.out(a)},enterOver:function(a){a.target.contains(a.relatedTarget)||this.enter(a),this.over(a)},eventHandler:function(a){if(!this.handledEvents.get(a)){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),this.handledEvents.set(a,!0)}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(a,b){var c=new PointerEvent(a,b);return this.targets.set(c,this.targets.get(b)||b.target),c},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){var b={};for(var c in a)b[c]=a[c];return b},getTarget:function(a){return this.captureInfo&&this.captureInfo.id===a.pointerId?this.captureInfo.target:this.targets.get(a)},setCapture:function(a,b){this.captureInfo&&this.releaseCapture(this.captureInfo.id),this.captureInfo={id:a,target:b};var c=new PointerEvent("gotpointercapture",{bubbles:!0});this.implicitRelease=this.releaseCapture.bind(this,a),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease),this.targets.set(c,b),this.asyncDispatchEvent(c)},releaseCapture:function(a){if(this.captureInfo&&this.captureInfo.id===a){var b=new PointerEvent("lostpointercapture",{bubbles:!0}),c=this.captureInfo.target;this.captureInfo=null,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease),this.targets.set(b,c),this.asyncDispatchEvent(b)}},dispatchEvent:function(a){var b=this.getTarget(a);return b?b.dispatchEvent(a):void 0},asyncDispatchEvent:function(a){setTimeout(this.dispatchEvent.bind(this,a),0)}};b.boundHandler=b.eventHandler.bind(b),a.dispatcher=b,a.register=b.register.bind(b),a.unregister=b.unregister.bind(b)}(window.PointerEventsPolyfill),function(a){function b(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),g&&(this.observer=new g(this.mutationWatcher.bind(this)))}var c=Array.prototype.forEach.call.bind(Array.prototype.forEach),d=Array.prototype.map.call.bind(Array.prototype.map),e=Array.prototype.slice.call.bind(Array.prototype.slice),f=Array.prototype.filter.call.bind(Array.prototype.filter),g=window.MutationObserver||window.WebKitMutationObserver,h="[touch-action]",i={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};b.prototype={watchSubtree:function(b){a.targetFinding.canTarget(b)&&this.observer.observe(b,i)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){c(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(h):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(e(b))},installOnLoad:function(){document.addEventListener("DOMContentLoaded",this.installNewSubtree.bind(this,document))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){var b=d(a,this.findElements,this);return b.push(f(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}},g||(b.prototype.watchSubtree=function(){console.warn("PointerEventsPolyfill: MutationObservers not found, touch-action will not be dynamically detected")}),a.Installer=b}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher,c=b.pointermap,d=25,e={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},lastTouches:[],isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,e=a.clientX,f=a.clientY,g=0,h=c.length;h>g&&(b=c[g]);g++){var i=Math.abs(e-b.x),j=Math.abs(f-b.y);if(d>=i&&d>=j)return!0}},prepareEvent:function(a){var c=b.cloneEvent(a);return c.pointerId=this.POINTER_ID,c.isPrimary=!0,c.pointerType=this.POINTER_TYPE,c},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=c.has(this.POINTER_ID);d&&this.cancel(a);var e=this.prepareEvent(a);c.set(this.POINTER_ID,a),b.down(e)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.move(c)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=c.get(this.POINTER_ID);if(d&&d.button===a.button){var e=this.prepareEvent(a);b.up(e),this.cleanupMouse()}}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.enterOver(c)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.leaveOut(c)}},cancel:function(a){var c=this.prepareEvent(a);b.cancel(c),this.cleanupMouse()},cleanupMouse:function(){c.delete(this.POINTER_ID)}};a.mouseEvents=e}(window.PointerEventsPolyfill),function(a){var b,c=a.dispatcher,d=a.findTarget,e=a.targetFinding.allShadows.bind(a.targetFinding),f=c.pointermap,g=Array.prototype.map.call.bind(Array.prototype.map),h=2500,i="touch-action",j="string"==typeof document.head.style.touchAction,k={scrollType:new a.SideTable,events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){j?c.listen(a,this.events):b.enableOnSubtree(a)},unregister:function(a){j&&c.unlisten(a,this.events)},elementAdded:function(a){var b=a.getAttribute(i),d=this.touchActionToScrollType(b);d&&(this.scrollType.set(a,d),c.listen(a,this.events),e(a).forEach(function(a){this.scrollType.set(a,d),c.listen(a,this.events)},this))},elementRemoved:function(a){this.scrollType.delete(a),c.unlisten(a,this.events),e(a).forEach(function(a){this.scrollType.delete(a),c.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(i),d=this.touchActiontoScrollType(c),f=this.touchActionToScrollType(b);d&&f?(this.scrollType.set(a,d),e(a).forEach(function(a){this.scrollType.set(a,d)},this)):f?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){null===this.firstTouch&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1)},removePrimaryTouch:function(a){this.isPrimaryTouch(a)&&(this.firstTouch=null,this.firstXY=null)},touchToPointer:function(a){var b=c.cloneEvent(a);return b.pointerId=a.identifier+2,b.target=d(b),b.bubbles=!0,b.cancelable=!0,b.button=0,b.buttons=1,b.width=a.webkitRadiusX||a.radiusX||0,b.height=a.webkitRadiusY||a.radiusY||0,b.pressure=a.webkitForce||a.force||.5,b.isPrimary=this.isPrimaryTouch(a),b.pointerType=this.POINTER_TYPE,b},processTouches:function(a,b){var c=a.changedTouches,d=g(c,this.touchToPointer,this);d.forEach(b,this)},shouldScroll:function(a){if(this.firstXY){var b,c=this.scrollType.get(a.currentTarget);if("none"===c)b=!1;else if("XY"===c)b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)if(c.identifier===b)return!0},vacuumTouches:function(a){var b=a.touches;if(f.size>=b.length){var c=[];f.forEach(function(a,d){if(1!==a&&!this.findTouch(b,a-2)){var e=d.out;c.push(this.touchToPointer(e))}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||this.processTouches(a,this.overDown)},overDown:function(a){f.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),c.over(a),c.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,d=f.get(b.pointerId);if(d){var e=d.out,g=d.outTarget;c.move(b),e&&g!==b.target&&(e.relatedTarget=b.target,b.relatedTarget=g,e.target=g,b.target?(c.leaveOut(e),c.enterOver(b)):(b.target=g,b.relatedTarget=null,this.cancelOut(b))),d.out=b,d.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(c.up(a),c.out(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){c.cancel(a),c.out(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){f.delete(a.pointerId),this.removePrimaryTouch(a)},dedupSynthMouse:function(b){var c=a.mouseEvents.lastTouches,d=b.changedTouches[0];if(this.isPrimaryTouch(d)){var e={x:d.clientX,y:d.clientY};c.push(e);var f=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,c,e);setTimeout(f,h)}}};j||(b=new a.Installer(k.elementAdded,k.elementRemoved,k.elementChanged,k)),a.touchEvents=k}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher,c=b.pointermap,d=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,e={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var c=a;return d&&(c=b.cloneEvent(a),c.pointerType=this.POINTER_TYPES[a.pointerType]),c},cleanup:function(a){c.delete(a)},MSPointerDown:function(a){c.set(a.pointerId,a);var d=this.prepareEvent(a);b.down(d)},MSPointerMove:function(a){var c=this.prepareEvent(a);b.move(c)},MSPointerUp:function(a){var c=this.prepareEvent(a);b.up(c),this.cleanup(a.pointerId)},MSPointerOut:function(a){var c=this.prepareEvent(a);b.leaveOut(c)},MSPointerOver:function(a){var c=this.prepareEvent(a);b.enterOver(c)},MSPointerCancel:function(a){var c=this.prepareEvent(a);b.cancel(c),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var c=b.makeEvent("lostpointercapture",a);b.dispatchEvent(c)},MSGotPointerCapture:function(a){var c=b.makeEvent("gotpointercapture",a);b.dispatchEvent(c)}};a.msEvents=e}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher;if(void 0===window.navigator.pointerEnabled){if(Object.defineProperty(window.navigator,"pointerEnabled",{value:!0,enumerable:!0}),window.navigator.msPointerEnabled){var c=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:c,enumerable:!0}),b.registerSource("ms",a.msEvents)}else b.registerSource("mouse",a.mouseEvents),void 0!==window.ontouchstart&&b.registerSource("touch",a.touchEvents);b.register(document)}}(window.PointerEventsPolyfill),function(a){function b(a){if(!e.pointermap.has(a))throw new Error("InvalidPointerId")}var c,d,e=a.dispatcher,f=window.navigator;f.msPointerEnabled?(c=function(a){b(a),this.msSetPointerCapture(a)},d=function(a){b(a),this.msReleasePointerCapture(a)}):(c=function(a){b(a),e.setCapture(a,this)},d=function(a){b(a),e.releaseCapture(a,this)}),Element.prototype.setPointerCapture||Object.defineProperties(Element.prototype,{setPointerCapture:{value:c},releasePointerCapture:{value:d}})}(window.PointerEventsPolyfill),PointerGestureEvent.prototype.preventTap=function(){this.tapPrevented=!0},function(a){a=a||{},a.utils={LCA:{find:function(a,b){if(a===b)return a;if(a.contains){if(a.contains(b))return a;if(b.contains(a))return b}var c=this.depth(a),d=this.depth(b),e=c-d;for(e>0?a=this.walk(a,e):b=this.walk(b,-e);a&&b&&a!==b;)a=this.walk(a,1),b=this.walk(b,1);return a},walk:function(a,b){for(var c=0;b>c;c++)a=a.parentNode;return a},depth:function(a){for(var b=0;a;)b++,a=a.parentNode;return b}}},a.findLCA=function(b,c){return a.utils.LCA.find(b,c)},window.PointerGestures=a}(window.PointerGestures),function(a){var b;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0)b=WeakMap;else{var c=Object.defineProperty,d=Object.hasOwnProperty,e=(new Date).getTime()%1e9;b=function(){this.name="__st"+(1e9*Math.random()>>>0)+(e++ +"__")},b.prototype={set:function(a,b){c(a,this.name,{value:b,writable:!0})},get:function(a){return d.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}a.SideTable=b}(window.PointerGestures),function(a){function b(){this.ids=[],this.pointers=[]}b.prototype={set:function(a,b){var c=this.ids.indexOf(a);c>-1?this.pointers[c]=b:(this.ids.push(a),this.pointers.push(b))},has:function(a){return this.ids.indexOf(a)>-1},"delete":function(a){var b=this.ids.indexOf(a);b>-1&&(this.ids.splice(b,1),this.pointers.splice(b,1))},get:function(a){var b=this.ids.indexOf(a);return this.pointers[b]},get size(){return this.pointers.length},clear:function(){this.ids.length=0,this.pointers.length=0}},window.Map&&(b=window.Map),a.PointerMap=b}(window.PointerGestures),function(a){var b={handledEvents:new a.SideTable,targets:new a.SideTable,handlers:{},recognizers:{},events:["pointerdown","pointermove","pointerup","pointerover","pointerout","pointercancel"],registerRecognizer:function(a,b){var c=b;this.recognizers[a]=c,this.events.forEach(function(a){if(c[a]){var b=c[a].bind(c);this.addHandler(a,b)}},this)},addHandler:function(a,b){var c=a;this.handlers[c]||(this.handlers[c]=[]),this.handlers[c].push(b)},registerTarget:function(a){this.listen(this.events,a)},unregisterTarget:function(a){this.unlisten(this.events,a)},eventHandler:function(a){if(!this.handledEvents.get(a)){var b,c=a.type;(b=this.handlers[c])&&this.makeQueue(b,a),this.handledEvents.set(a,!0)}},makeQueue:function(a,b){var c=this.cloneEvent(b);setTimeout(this.runQueue.bind(this,a,c),0)},runQueue:function(a,b){this.currentPointerId=b.pointerId;for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)c(b);this.currentPointerId=0},listen:function(a,b){a.forEach(function(a){this.addEvent(a,this.boundHandler,!1,b)},this)},unlisten:function(a){a.forEach(function(a){this.removeEvent(a,this.boundHandler,!1,inTarget)},this)},addEvent:function(a,b,c,d){d.addEventListener(a,b,c)},removeEvent:function(a,b,c,d){d.removeEventListener(a,b,c) -},makeEvent:function(a,b){return new PointerGestureEvent(a,b)},cloneEvent:function(a){var b={};for(var c in a)b[c]=a[c];return b},dispatchEvent:function(a,b){var c=b||this.targets.get(a);c&&(c.dispatchEvent(a),a.tapPrevented&&this.preventTap(this.currentPointerId))},asyncDispatchEvent:function(a,b){var c=function(){this.dispatchEvent(a,b)}.bind(this);setTimeout(c,0)},preventTap:function(a){var b=this.recognizers.tap;b&&b.preventTap(a)}};b.boundHandler=b.eventHandler.bind(b),a.dispatcher=b,a.register=function(b){var c=window.PointerEventsPolyfill;c&&c.register(b),a.dispatcher.registerTarget(b)},b.registerTarget(document)}(window.PointerGestures),function(a){var b=a.dispatcher,c={HOLD_DELAY:200,WIGGLE_THRESHOLD:16,events:["pointerdown","pointermove","pointerup","pointercancel"],heldPointer:null,holdJob:null,pulse:function(){var a=Date.now()-this.heldPointer.timeStamp,b=this.held?"holdpulse":"hold";this.fireHold(b,a),this.held=!0},cancel:function(){clearInterval(this.holdJob),this.held&&this.fireHold("release"),this.held=!1,this.heldPointer=null,this.target=null,this.holdJob=null},pointerdown:function(a){a.isPrimary&&!this.heldPointer&&(this.heldPointer=a,this.target=a.target,this.holdJob=setInterval(this.pulse.bind(this),this.HOLD_DELAY))},pointerup:function(a){this.heldPointer&&this.heldPointer.pointerId===a.pointerId&&this.cancel()},pointercancel:function(){this.cancel()},pointermove:function(a){if(this.heldPointer&&this.heldPointer.pointerId===a.pointerId){var b=a.clientX-this.heldPointer.clientX,c=a.clientY-this.heldPointer.clientY;b*b+c*c>this.WIGGLE_THRESHOLD&&this.cancel()}},fireHold:function(a,c){var d={pointerType:this.heldPointer.pointerType};c&&(d.holdTime=c);var e=b.makeEvent(a,d);b.dispatchEvent(e,this.target),e.tapPrevented&&b.preventTap(this.heldPointer.pointerId)}};b.registerRecognizer("hold",c)}(window.PointerGestures),function(a){var b=a.dispatcher,c=new a.PointerMap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],WIGGLE_THRESHOLD:4,clampDir:function(a){return a>0?1:-1},calcPositionDelta:function(a,b){var c=0,d=0;return a&&b&&(c=b.pageX-a.pageX,d=b.pageY-a.pageY),{x:c,y:d}},fireTrack:function(a,c,d){var e=d,f=this.calcPositionDelta(e.downEvent,c),g=this.calcPositionDelta(e.lastMoveEvent,c);g.x&&(e.xDirection=this.clampDir(g.x)),g.y&&(e.yDirection=this.clampDir(g.y));var h={dx:f.x,dy:f.y,ddx:g.x,ddy:g.y,clientX:c.clientX,clientY:c.clientY,pageX:c.pageX,pageY:c.pageY,screenX:c.screenX,screenY:c.screenY,xDirection:e.xDirection,yDirection:e.yDirection,trackInfo:e.trackInfo,pointerType:c.pointerType};"trackend"===a&&(h._releaseTarget=c.target);var i=b.makeEvent(a,h);e.lastMoveEvent=c,b.dispatchEvent(i,e.downTarget)},pointerdown:function(a){if(a.isPrimary&&("mouse"===a.pointerType?1===a.buttons:!0)){var b={downEvent:a,downTarget:a.target,trackInfo:{},lastMoveEvent:null,xDirection:0,yDirection:0,tracking:!1};c.set(a.pointerId,b)}},pointermove:function(a){var b=c.get(a.pointerId);if(b)if(b.tracking)this.fireTrack("track",a,b);else{var d=this.calcPositionDelta(b.downEvent,a),e=d.x*d.x+d.y*d.y;e>this.WIGGLE_THRESHOLD&&(b.tracking=!0,this.fireTrack("trackstart",b.downEvent,b),this.fireTrack("track",a,b))}},pointerup:function(a){var b=c.get(a.pointerId);b&&(b.tracking&&this.fireTrack("trackend",a,b),c.delete(a.pointerId))},pointercancel:function(a){this.pointerup(a)}};b.registerRecognizer("track",d)}(window.PointerGestures),function(a){var b=a.dispatcher,c={MIN_VELOCITY:.5,MAX_QUEUE:4,moveQueue:[],target:null,pointerId:null,events:["pointerdown","pointermove","pointerup","pointercancel"],pointerdown:function(a){a.isPrimary&&!this.pointerId&&(this.pointerId=a.pointerId,this.target=a.target,this.addMove(a))},pointermove:function(a){a.pointerId===this.pointerId&&this.addMove(a)},pointerup:function(a){a.pointerId===this.pointerId&&this.fireFlick(a),this.cleanup()},pointercancel:function(){this.cleanup()},cleanup:function(){this.moveQueue=[],this.target=null,this.pointerId=null},addMove:function(a){this.moveQueue.length>=this.MAX_QUEUE&&this.moveQueue.shift(),this.moveQueue.push(a)},fireFlick:function(a){for(var c,d,e,f,g,h,i,j=a,k=this.moveQueue.length,l=0,m=0,n=0,o=0;k>o&&(i=this.moveQueue[o]);o++)c=j.timeStamp-i.timeStamp,d=j.clientX-i.clientX,e=j.clientY-i.clientY,f=d/c,g=e/c,h=Math.sqrt(f*f+g*g),h>n&&(l=f,m=g,n=h);var p=Math.abs(l)>Math.abs(m)?"x":"y",q=this.calcAngle(l,m);if(Math.abs(n)>=this.MIN_VELOCITY){var r=b.makeEvent("flick",{xVelocity:l,yVelocity:m,velocity:n,angle:q,majorAxis:p,pointerType:a.pointerType});b.dispatchEvent(r,this.target)}},calcAngle:function(a,b){return 180*Math.atan2(b,a)/Math.PI}};b.registerRecognizer("flick",c)}(window.PointerGestures),function(a){var b=a.dispatcher,c=new a.PointerMap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],pointerdown:function(a){a.isPrimary&&!a.tapPrevented&&c.set(a.pointerId,{target:a.target,x:a.clientX,y:a.clientY})},pointermove:function(a){if(a.isPrimary){var b=c.get(a.pointerId);b&&a.tapPrevented&&c.delete(a.pointerId)}},pointerup:function(d){var e=c.get(d.pointerId);if(e&&!d.tapPrevented){var f=a.findLCA(e.target,d.target);if(f){var g=b.makeEvent("tap",{x:d.clientX,y:d.clientY,pointerType:d.pointerType});b.dispatchEvent(g,f)}}c.delete(d.pointerId)},pointercancel:function(a){c.delete(a.pointerId)},preventTap:function(a){c.delete(a)}};b.registerRecognizer("tap",d)}(window.PointerGestures),Polymer={},function(){var a=document.createElement("style");a.textContent="body {opacity: 0;}";var b=document.querySelector("head");b.insertBefore(a,b.firstChild),window.addEventListener("WebComponentsReady",function(){document.body.style.webkitTransition="opacity 0.3s",document.body.style.opacity=1})}(Polymer),function(a){var b=Array.prototype.forEach.call.bind(Array.prototype.forEach),c=Array.prototype.concat.call.bind(Array.prototype.concat),d=Array.prototype.slice.call.bind(Array.prototype.slice),e={hostRuleRe:/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,selectorRe:/([^{]*)({[\s\S]*?})/gim,hostElementRe:/(.*)((?:\*)|(?:\:scope))(.*)/,hostFixableRe:/^[.\[:]/,cssCommentRe:/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,cssPolyfillCommentRe:/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,cssPseudoRe:/::(x-[^\s{,(]*)/gim,selectorReSuffix:"([>\\s~+[.,{:][\\s\\S]*)?$",hostRe:/@host/gim,cache:{},shimStyling:function(a){if(window.ShadowDOMPolyfill&&a){var b=a.getAttribute("name");e.cacheDefinition(a),e.shimPolyfillDirectives(a.styles,b),Polymer.strictPolyfillStyling&&e.applyScopeToContent(a.templateContent(),b),e.applyShimming(e.stylesForElement(a),b)}},shimShadowDOMStyling:function(a,b){window.ShadowDOMPolyfill&&(e.shimPolyfillDirectives(a,b),e.applyShimming(a,b))},applyShimming:function(a,b){var c=this.shimAtHost(a,b);c+=this.shimScoping(a,b),this.addCssToDocument(c)},cacheDefinition:function(a){var b=a.getAttribute("name"),c=a.templateContent(),f=c&&c.querySelectorAll("style");a.styles=f?d(f):[],e.cache[b]=a},applyScopeToContent:function(a,c){a&&(b(a.querySelectorAll("*"),function(a){a.setAttribute(c,"")}),b(a.querySelectorAll("template"),function(a){this.applyScopeToContent(templateContent(a),c)},this))},stylesForElement:function(a){var b=a.styles,e=a.templateContent(),f=e&&e.querySelector("shadow");if(f||null===e){var g=this.findExtendee(a.getAttribute("name"));if(g){var h=this.stylesForElement(g);b=c(d(h),d(b))}}return b},findExtendee:function(a){var b=this.cache[a];return b&&this.cache[b.getAttribute("extends")]},shimPolyfillDirectives:function(a,c){window.ShadowDOMPolyfill&&a&&b(a,function(a){a.textContent=this.convertPolyfillDirectives(a.textContent,c)},this)},shimAtHost:function(a,b){return a?this.convertAtHostStyles(a,b):void 0},shimScoping:function(a,b){return a?this.convertScopedStyles(a,b):void 0},convertPolyfillDirectives:function(a,b){for(var c,d,e="",f=0;c=this.cssPolyfillCommentRe.exec(a);)e+=a.substring(f,c.index),d=c[1].slice(0,-2).replace(this.hostRe,b),e+=this.scopeSelector(d,b)+"{",f=this.cssPolyfillCommentRe.lastIndex;return e+=a.substring(f,a.length)},findAtHostRules:function(a,b){return Array.prototype.filter.call(a,this.isHostRule.bind(this,b))},isHostRule:function(a,b){return b.selectorText&&b.selectorText.match(a)||b.cssRules&&this.findAtHostRules(b.cssRules,a).length||b.type==CSSRule.WEBKIT_KEYFRAMES_RULE},convertAtHostStyles:function(a,b){for(var c,d=this.stylesToCssText(a),e="",f=0;c=this.hostRuleRe.exec(d);)e+=d.substring(f,c.index),e+=this.scopeHostCss(c[1],b),f=this.hostRuleRe.lastIndex;e+=d.substring(f,d.length);var g=new RegExp("^"+b+this.selectorReSuffix,"m"),d=this.rulesToCss(this.findAtHostRules(this.cssToRules(e),g));return d},scopeHostCss:function(a,b){for(var c,d="";c=this.selectorRe.exec(a);)d+=this.scopeHostSelector(c[1],b)+" "+c[2]+"\n ";return d},scopeHostSelector:function(a,b){var c=[],d=a.split(","),e="[is="+b+"]";return d.forEach(function(a){a=a.trim(),a.match(this.hostElementRe)?a=a.replace(this.hostElementRe,b+"$1$3, "+e+"$1$3"):a.match(this.hostFixableRe)&&(a=b+a+", "+e+a),c.push(a)},this),c.join(", ")},convertScopedStyles:function(a,c){b(a,function(a){a.parentNode&&a.parentNode.removeChild(a)});var d=this.stylesToCssText(a).replace(this.hostRuleRe,"");d=this.convertPseudos(d);var e=this.cssToRules(d);return d=this.scopeRules(e,c)},convertPseudos:function(a){return a.replace(this.cssPseudoRe," [pseudo=$1]")},scopeRules:function(a,c){var d="";return b(a,function(a){a.selectorText&&a.style&&a.style.cssText?(d+=this.scopeSelector(a.selectorText,c,Polymer.strictPolyfillStyling)+" {\n ",d+=this.propertiesFromRule(a)+"\n}\n\n"):a.media?(d+="@media "+a.media.mediaText+" {\n",d+=this.scopeRules(a.cssRules,c),d+="\n}\n\n"):a.cssText&&(d+=a.cssText+"\n\n")},this),d},propertiesFromRule:function(a){var b=a.style.cssText;return a.style.content&&!a.style.content.match(/['"]+/)&&(b="content: '"+a.style.content+"';\n"+a.style.cssText.replace(/content:[^;]*;/g,"")),b},selectorNeedsScoping:function(a,b){var c="("+b+"|\\[is="+b+"\\])",d=new RegExp("^"+c+this.selectorReSuffix,"m");return!a.match(d)},scopeSelector:function(a,b,c){var d=[],e=a.split(",");return e.forEach(function(a){a=a.trim(),this.selectorNeedsScoping(a,b)&&(a=c?this.applyStrictSelectorScope(a,b):this.applySimpleSelectorScope(a,b)),d.push(a)},this),d.join(", ")},applySimpleSelectorScope:function(a,b){return b+" "+a+", "+"[is="+b+"] "+a},applyStrictSelectorScope:function(a,b){var c=[" ",">","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim();return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},stylesToCssText:function(a,c){var d="";return b(a,function(a){d+=a.textContent+"\n\n"}),c||(d=this.stripCssComments(d)),d},stripCssComments:function(a){return a.replace(this.cssCommentRe,"")},cssToRules:function(a){var b=document.createElement("style");b.textContent=a,document.head.appendChild(b);var c=b.sheet.cssRules;return b.parentNode.removeChild(b),c},rulesToCss:function(a){for(var b=0,c=[];be&&(c=d[e]);e++){var g=Object.getOwnPropertyDescriptor(b,c);if(g.value==a)return c}b=b.__proto__}}a.super=b}(Polymer),function(a){var b={};b.declaration={},b.instance={},a.api=b}(Polymer),function(a){var b={async:function(a,b,c){Platform.flush(),b=b&&b.length?b:[b];var d=function(){(this[a]||a).apply(this,b)}.bind(this);return c?setTimeout(d,c):requestAnimationFrame(d)},fire:function(a,b,c,d){var e=c||this;return e.dispatchEvent(new CustomEvent(a,{bubbles:void 0!==d?!1:!0,detail:b})),b},asyncFire:function(){this.asyncMethod("fire",arguments)},classFollows:function(a,b,c){b&&b.classList.remove(c),a&&a.classList.add(c)}};b.asyncMethod=b.async,a.api.instance.utils=b}(Polymer),function(a){function b(a,b){b.cancelBubble||(b.on=i+b.type,h.events&&console.group("[%s]: listenLocal [%s]",a.localName,b.on),!b.path||window.ShadowDOMPolyfill?d(a,b):c(a,b),h.events&&console.groupEnd())}function c(a,b){var c=null;Array.prototype.some.call(b.path,function(d){return d===a?!0:(c=c===a?c:e(d),c&&f(c,d,b)?!0:void 0)},this)}function d(a,b){h.events&&console.log("event.path() not supported for",b.type);for(var c=b.target,d=null;c&&c!=a;){if(d=d===a?d:e(c),d&&f(d,c,b))return!0;c=c.parentNode}}function e(a){for(;a.parentNode;)a=a.parentNode;return a.host}function f(a,b,c){var d=b.getAttribute&&b.getAttribute(c.on);return d&&g(b,c)&&(h.events&&console.log("[%s] found handler name [%s]",a.localName,d),a.dispatchMethod(b,d,[c,c.detail,b])),c.cancelBubble}function g(a,b){var c=l.get(b);return c||l.set(b,c=[]),c.indexOf(a)<0?(c.push(a),!0):void 0}var h=window.logFlags||{},i="on-",j="eventDelegates",k={EVENT_PREFIX:i,DELEGATES:j,addHostListeners:function(){var a=this[j];h.events&&Object.keys(a).length>0&&console.log("[%s] addHostListeners:",this.localName,a),this.addNodeListeners(this,a,this.hostEventListener)},addInstanceListeners:function(a,b){var c=b.delegates;c&&(h.events&&Object.keys(c).length>0&&console.log("[%s:root] addInstanceListeners:",this.localName,c),this.addNodeListeners(a,c,this.instanceEventListener))},addNodeListeners:function(a,b,c){var d;for(var e in b)d||(d=c.bind(this)),a.addEventListener(e,d)},hostEventListener:function(a){if(!a.cancelBubble){h.events&&console.group("[%s]: hostEventListener(%s)",this.localName,a.type);var b=this.findEventDelegate(a);b&&(h.events&&console.log("[%s] found host handler name [%s]",this.localName,b),this.dispatchMethod(this,b,[a,a.detail,this])),h.events&&console.groupEnd()}},findEventDelegate:function(a){return this[j][a.type]},dispatchMethod:function(a,b,c){if(a){h.events&&console.group("[%s] dispatch [%s]",a.localName,b);var d=this[b];d&&d[c?"apply":"call"](this,c),h.events&&console.groupEnd()}},instanceEventListener:function(a){b(this,a)}},l=new SideTable("handledList");a.api.instance.events=k}(Polymer),function(a){function b(a,b){var c=this[a]||a;"function"==typeof c&&c.apply(this,b)}function c(a,b,c,d){h.bind&&console.log(n,c.localName||"object",d,a.localName,b);var e=PathObserver.getValueAtPath(c,d);return(null===e||void 0===e)&&PathObserver.setValueAtPath(c,d,a[b]),PathObserver.defineProperty(a,b,{object:c,path:d})}function d(a,b,c){var d=g(a);d[b]=c}function e(a,b){var c=g(a);return c&&c[b]?(c[b].close(),c[b]=null,!0):void 0}function f(a){var b=g(a);Object.keys(b).forEach(function(a){b[a].close(),b[a]=null})}function g(a){var b=k.get(a);return b||k.set(a,b={}),b}var h=window.logFlags||{},i="Changed",j={observeProperties:function(){for(var a,b=this.getCustomPropertyNames(),c=0,d=b.length;d>c&&(a=b[c]);c++)this.observeProperty(a)},getCustomPropertyNames:function(){return this.customPropertyNames},observeProperty:function(a){if(this.shouldObserveProperty(a)){h.watch&&console.log(l,this.localName,a);var b=function(b,c){h.watch&&console.log(m,this.localName,this.id||"",a,this[a],c),this.dispatchPropertyChange(a,c)}.bind(this),c=new PathObserver(this,a,b);d(this,a,c)}},bindProperty:function(a,b,d){return c(this,a,b,d)},unbindProperty:function(a,b){return e(this,a,b)},unbindAllProperties:function(){f(this)},shouldObserveProperty:function(a){return Boolean(this[a+i])},dispatchPropertyChange:function(a,c){b.call(this,a+i,[c])}},k=new SideTable,l="[%s] watching [%s]",m="[%s#%s] watch: [%s] now [%s] was [%s]",n="[%s]: bindProperties: [%s] to [%s].[%s]";a.api.instance.properties=j}(Polymer),function(a){var b="__published",c="__instance_attributes",d={PUBLISHED:b,INSTANCE_ATTRIBUTES:c,copyInstanceAttributes:function(){var a=this[c];for(var b in a)this.setAttribute(b,a[b])},takeAttributes:function(){for(var a,b=0,c=this.attributes,d=c.length;(a=c[b])&&d>b;b++)this.attributeToProperty(a.name,a.value)},attributeToProperty:function(b,c){var b=this.propertyForAttribute(b);if(b){if(c.search(a.bindPattern)>=0)return;var d=this[b],c=this.deserializeValue(c,d);c!==d&&(this[b]=c)}},propertyForAttribute:function(a){var c=Object.keys(this[b]);return c[c.map(e).indexOf(a.toLowerCase())]},deserializeValue:function(b,c){return a.deserializeValue(b,c)}},e=String.prototype.toLowerCase.call.bind(String.prototype.toLowerCase);a.api.instance.attributes=d}(Polymer),function(a){function b(a){d(a,c)}function c(a){a.unbindAll()}function d(a,b){if(a){b(a);for(var c=a.firstChild;c;c=c.nextSibling)d(c,b)}}var e=window.logFlags||0,f=new ExpressionSyntax,g={instanceTemplate:function(a){return a.createInstance(this,f)},createBinding:function(a,b,c){var d=this.propertyForAttribute(a);if(d){var e=this.bindProperty(d,b,c);return e.path=c,e}return this.super(arguments)},asyncUnbindAll:function(){this._unbound||(e.unbind&&console.log("[%s] asyncUnbindAll",this.localName),this._unbindAllJob=this.job(this._unbindAllJob,this.unbindAll,0))},unbindAll:function(){this._unbound||(this.unbindAllProperties(),this.super(),b(this.shadowRoot),this._unbound=!0)},cancelUnbindAll:function(a){return this._unbound?(e.unbind&&console.warn("[%s] already unbound, cannot cancel unbindAll",this.localName),void 0):(e.unbind&&console.log("[%s] cancelUnbindAll",this.localName),this._unbindAllJob&&(this._unbindAllJob=this._unbindAllJob.stop()),a||d(this.shadowRoot,function(a){a.cancelUnbindAll&&a.cancelUnbindAll()}),void 0)},insertedCallback:function(){this.cancelUnbindAll(!0),this.inserted&&this.inserted()},removedCallback:function(){this.asyncUnbindAll(),this.removed&&this.removed()}},h=/\{\{([^{}]*)}}/;a.bindPattern=h,a.api.instance.mdv=g}(Polymer),function(a){function b(a){return a.hasOwnProperty("PolymerBase")}function c(){}var d={PolymerBase:!0,job:Polymer.job,"super":Polymer.super,ready:function(){},readyCallback:function(){this.observeProperties(),this.copyInstanceAttributes(),this.takeAttributes(),this.addHostListeners(),this.parseElements(this.__proto__),this.asyncUnbindAll(),this.ready()},parseElements:function(a){a&&a.element&&(this.parseElements(a.__proto__),a.parseElement.call(this,a.element))},parseElement:function(a){this.shadowFromTemplate(this.fetchTemplate(a))},fetchTemplate:function(a){return a.querySelector("template")},shadowFromTemplate:function(a){if(a){var b=this.shadowRoot,c=this.createShadowRoot();c.olderShadowRoot=b,c.applyAuthorStyles=this.applyAuthorStyles,c.resetStyleInheritance=this.resetStyleInheritance,c.host=this;var d=this.instanceTemplate(a);return c.appendChild(d),this.shadowRootReady(c,a),CustomElements.watchShadow(this),c}},shadowRootReady:function(a,b){this.marshalNodeReferences(a),this.addInstanceListeners(a,b),PointerGestures.register(a)},marshalNodeReferences:function(a){var b=this.$=this.$||{};if(a)for(var c,d=a.querySelectorAll("[id]"),e=0,f=d.length;f>e&&(c=d[e]);e++)b[c.id]=c},attributeChangedCallback:function(){this.attributeChanged&&this.attributeChanged.apply(this,arguments)}};c.prototype=d,d.constructor=c,a.Base=c,a.isBase=b,a.api.instance.base=d}(Polymer),function(a){window.logFlags||{};var b="element",c="controller",d={STYLE_SCOPE_ATTRIBUTE:b,installControllerStyles:function(){var a=this.findStyleController();if(a&&!this.scopeHasElementStyle(a,c)){for(var b=Object.getPrototypeOf(this),d="";b&&b.element;)d+=b.element.cssTextForScope(c),b=Object.getPrototypeOf(b);if(d){var e=this.element.cssTextToScopeStyle(d,c);window.ShadowDOMPolyfill&&Platform.ShadowCSS.shimPolyfillDirectives([e],this.localName),Polymer.applyStyleToScope(e,a)}}},scopeHasElementStyle:function(a,c){var d=b+"="+this.localName+"-"+c;return a.querySelector("style["+d+"]")},findStyleController:function(){if(window.ShadowDOMPolyfill)return wrap(document.head);for(var a=this;a.parentNode;)a=a.parentNode;return a===document?document.head:a}};a.api.instance.styles=d}(Polymer),function(a){var b={addResolvePathApi:function(){var a=this.elementPath();this.prototype.resolvePath=function(b){return a+b}},elementPath:function(){return this.urlToPath(HTMLImports.getDocumentUrl(this.ownerDocument))},urlToPath:function(a){if(a){var b=a.split("/");return b.pop(),b.push(""),b.join("/")}return""}};a.api.declaration.path=b}(Polymer),function(a){function b(a,b){if(a){var d=c(a.textContent),e=a.getAttribute(g);e&&d.setAttribute(g,e),b.appendChild(d)}}function c(a){var b=document.createElement("style");return b.textContent=a,b}function d(a){return a&&a.__resource||""}function e(a,b){return n?n.call(a,b):void 0}window.logFlags||{};var f=a.api.instance.styles,g=f.STYLE_SCOPE_ATTRIBUTE,h="style",i="[rel=stylesheet]",j="global",k="polymer-scope",l={installSheets:function(){this.cacheSheets(),this.installLocalSheets(),this.installGlobalStyles()},cacheSheets:function(){this.sheets=this.findNodes(i),this.sheets.forEach(function(a){a.parentNode&&a.parentNode.removeChild(a)})},installLocalSheets:function(){var a=this.sheets.filter(function(a){return!a.hasAttribute(k)}),b=this.templateContent();if(b){var e="";a.forEach(function(a){e+=d(a)+"\n"}),e&&b.insertBefore(c(e),b.firstChild)}},findNodes:function(a,b){var c=this.querySelectorAll(a).array(),d=this.templateContent();if(d){var e=d.querySelectorAll(a).array();c=c.concat(e)}return b?c.filter(b):c},templateContent:function(){var a=this.querySelector("template");return a&&templateContent(a)},installGlobalStyles:function(){var a=this.styleForScope(j);b(a,document.head)},cssTextForScope:function(a){var b="",c="["+k+"="+a+"]",f=function(a){return e(a,c)},g=this.sheets.filter(f);g.forEach(function(a){b+=d(a)+"\n\n"});var i=this.findNodes(h,f);return i.forEach(function(a){a.parentNode.removeChild(a),b+=a.textContent+"\n\n"}),b},styleForScope:function(a){var b=this.cssTextForScope(a);return this.cssTextToScopeStyle(b,a)},cssTextToScopeStyle:function(a,b){if(a){var d=c(a);return d.setAttribute(g,this.getAttribute("name")+"-"+b),d}}},m=HTMLElement.prototype,n=m.matches||m.matchesSelector||m.webkitMatchesSelector||m.mozMatchesSelector;a.api.declaration.styles=l,a.applyStyleToScope=b}(Polymer),function(a){function b(a){return a.slice(0,k)==g}function c(a){return a.slice(k)}function d(a){return a.ref?a.ref.content:a.content}var e=a.api.instance.events,f=e.DELEGATES,g=e.EVENT_PREFIX,h=window.logFlags||{},i={inheritDelegates:function(a){this.inheritObject(a,f)},parseHostEvents:function(){var a=this.prototype[f];this.addAttributeDelegates(a)},addAttributeDelegates:function(a){for(var d,e=0;d=this.attributes[e];e++)b(d.name)&&(a[c(d.name)]=d.value)},parseLocalEvents:function(){this.querySelectorAll("template").forEach(function(a){a.delegates={},this.accumulateTemplatedEvents(a,a.delegates),h.events&&console.log("[%s] parseLocalEvents:",this.attributes.name.value,a.delegates)},this)},accumulateTemplatedEvents:function(a,b){if("template"===a.localName){var c=d(a);c&&this.accumulateChildEvents(c,b)}},accumulateChildEvents:function(a,b){a.childNodes.forEach(function(a){this.accumulateEvents(a,b)},this)},accumulateEvents:function(a,b){return this.accumulateAttributeEvents(a,b),this.accumulateChildEvents(a,b),this.accumulateTemplatedEvents(a,b),b},accumulateAttributeEvents:function(a,d){a.attributes&&a.attributes.forEach(function(a){b(a.name)&&this.accumulateEvent(c(a.name),d)},this)},accumulateEvent:function(a,b){a=j[a]||a,b[a]=b[a]||1}},j={webkitanimationstart:"webkitAnimationStart",webkitanimationend:"webkitAnimationEnd",webkittransitionend:"webkitTransitionEnd",domfocusout:"DOMFocusOut",domfocusin:"DOMFocusIn"},k=g.length;i.event_translations=j,a.api.declaration.events=i}(Polymer),function(a){var b=[],c={cacheProperties:function(){this.prototype.customPropertyNames=this.getCustomPropertyNames(this.prototype)},getCustomPropertyNames:function(c){for(var d,e={};c&&!a.isBase(c);){for(var f,g=Object.getOwnPropertyNames(c),h=0,i=g.length;i>h&&(f=g[h]);h++)e[f]=!0,d=!0;c=c.__proto__}return d?Object.keys(e):b}};a.api.declaration.properties=c}(Polymer),function(a){var b=a.api.instance.attributes,c=b.PUBLISHED,d=b.INSTANCE_ATTRIBUTES,e="publish",f="attributes",g={inheritAttributesObjects:function(a){this.inheritObject(a,c),this.inheritObject(a,d)},parseAttributes:function(){this.publishAttributes(this.prototype),this.publishProperties(this.prototype),this.accumulateInstanceAttributes()},publishAttributes:function(a){var b=a[c],d=this.getAttribute(f);if(d){var e=d.split(d.indexOf(",")>=0?",":" ");e.forEach(function(a){a=a.trim(),!a||a in b||(b[a]=null)})}Object.keys(b).forEach(function(c){c in a||(a[c]=b[c])})},publishProperties:function(a){this.publishPublish(a)},publishPublish:function(a){if(a.hasOwnProperty(e)){var b=a[e];b&&(Object.keys(b).forEach(function(c){a[c]=b[c]}),Platform.mixin(a[c],b))}},accumulateInstanceAttributes:function(){var a=this.prototype[d];this.attributes.forEach(function(b){this.isInstanceAttribute(b.name)&&(a[b.name]=b.value)},this)},isInstanceAttribute:function(a){return!this.blackList[a]&&"on-"!==a.slice(0,3)},blackList:{name:1,"extends":1,constructor:1}};g.blackList[f]=1,a.api.declaration.attributes=g}(Polymer),function(a){function b(a,b){f[a]=b}function c(a){return Object.create(HTMLElement.getPrototypeForTag(a))}var d=Polymer.extend,e=a.api.declaration,f={},g=c();d(g,{readyCallback:function(){var a=this.getAttribute("name"),b=this.getAttribute("extends");this.prototype=this.generateCustomPrototype(a,b),this.prototype.element=this,this.addResolvePathApi(),this.desugar(),window.ShadowDOMPolyfill&&Platform.ShadowCSS.shimStyling(this.templateContent(),a,b),this.register(a),this.publishConstructor()},desugar:function(){this.parseAttributes(),this.parseHostEvents(),this.parseLocalEvents(),this.installSheets(),this.prototype.registerCallback&&this.prototype.registerCallback(this),this.cacheProperties()},generateCustomPrototype:function(a,b){var c=this.generateBasePrototype(b);return this.addNamedApi(c,a)},generateBasePrototype:function(a){var b=c(a);return this.ensureBaseApi(b)},ensureBaseApi:function(b){return b.PolymerBase||(Object.keys(a.api.instance).forEach(function(c){d(b,a.api.instance[c])}),b=Object.create(b)),this.inheritAttributesObjects(b),this.inheritDelegates(b),b},addNamedApi:function(a,b){return d(a,f[b])},inheritObject:function(a,b){a[b]=d({},a.__proto__[b])},register:function(a){this.ctor=document.register(a,{prototype:this.prototype}),this.prototype.constructor=this.ctor,HTMLElement.register(a,this.prototype)},publishConstructor:function(){var a=this.getAttribute("constructor");a&&(window[a]=this.ctor)}}),Object.keys(e).forEach(function(a){d(g,e[a])}),document.register("polymer-element",{prototype:g}),d(b,window.Polymer),window.Polymer=b}(Polymer); -/* -//@ sourceMappingURL=polymer.min.js.map -*/ \ No newline at end of file diff --git a/libs/polymer/polymer.min.js.map b/libs/polymer/polymer.min.js.map deleted file mode 100644 index f68e0754b..000000000 --- a/libs/polymer/polymer.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"polymer.min.js","sources":["../platform/platform.min.js","src/polymer.js","src/boot.js","src/shimStyling.js","src/lib/lang.js","src/lib/dom.js","src/lib/deserialize.js","src/lib/job.js","src/lib/super.js","src/api.js","src/instance/utils.js","src/instance/events.js","src/instance/properties.js","src/instance/attributes.js","src/instance/mdv.js","src/instance/base.js","src/instance/styles.js","src/declaration/path.js","src/declaration/styles.js","src/declaration/events.js","src/declaration/properties.js","src/declaration/attributes.js","src/declaration/polymer-element.js"],"names":["PointerGestureEvent","a","b","c","d","document","createEvent","e","bubbles","cancelable","Object","keys","forEach","initEvent","preventTap","this","window","Platform","logFlags","flags","location","search","slice","split","shadow","shadowdom","polyfill","HTMLElement","prototype","webkitCreateShadowRoot","SideTable","WeakMap","navigator","userAgent","indexOf","defineProperty","hasOwnProperty","Date","getTime","name","Math","random","set","value","writable","get","call","delete","ShadowDOMPolyfill","Error","getOwnPropertyNames","getOwnPropertyDescriptor","__proto__","getPrototypeOf","z","f","n","k","i","g","h","test","B","__lookupGetter__","C","j","impl","apply","arguments","getEventHandlerGetter","getEventHandlerSetter","configurable","enumerable","l","m","create","constructor","o","A","EventTarget","Event","DOMImplementation","p","F","E","G","D","q","y","r","s","t","u","v","w","x","Node","Window","assert","defineGetter","defineWrapGetter","forwardMethodsToWrapper","isWrapperFor","mixin","registerObject","registerWrapper","rewrap","unwrap","unwrapIfNeeded","wrap","wrapIfNeeded","wrappers","N","ShadowRoot","localName","shadowRoot","parentNode","defaultView","M","length","shift","getHostForShadowRoot","eventParentsTable","getShadowTrees","contains","push","target","currentTarget","pop","insertionParentTable","P","type","renderAllPending","Document","X","T","NONE","R","defaultPrevented","CAPTURING_PHASE","AT_TARGET","V","BUBBLING_PHASE","O","L","relatedTarget","S","Q","removed","capture","handler","handleEvent","onerror","message","console","error","U","Boolean","Y","J","K","gb","fb","I","jb","kb","W","H","removeEventListener","wrapped","preventDefault","returnValue","addEventListener","equals","remove","eventPhase","path","NodeList","stopPropagation","stopImmediatePropagation","Z","$","_","ab","initMouseEvent","bb","initFocusEvent","cb","db","eb","initMutationEvent","relatedNode","MouseEvent","hb","detail","view","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","ib","addEventListener_","removeEventListener_","dispatchEvent","dispatchEvent_","elementFromPoint","adjustRelatedTarget","wrapEventTargetMethods","CustomEvent","FocusEvent","MutationEvent","UIEvent","item","addWrapNodeListMethod","wrapNodeList","nodeType","DOCUMENT_FRAGMENT_NODE","removeChild","parentNode_","previousSibling_","nextSibling_","firstChild","ownerDocument","createDocumentFragment","appendChild","nextSibling","firstChild_","lastChild_","insertBefore","replaceChild","compareDocumentPosition","invalidateShadowRenderer","lastChild","previousSibling","hasChildNodes","parentElement","ELEMENT_NODE","textContent","createTextNode","childNodes","cloneNode","querySelector","querySelectorAll","firstElementChild","matches","nextElementSibling","getElementsByTagName","getElementsByClassName","getElementsByTagNameNS","namespaceURI","GetElementsByInterface","SelectorsInterface","lastElementChild","childElementCount","children","previousElementSibling","ChildNodeInterface","ParentNodeInterface","CharacterData","data","Element","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector","createShadowRoot","getRendererForHost","setAttribute","replace","tagName","toLowerCase","attributes","TEXT_NODE","nodeValue","COMMENT_NODE","createElement","innerHTML","area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr","outerHTML","getInnerHTML","setInnerHTML","HTMLContentElement","select","getAttribute","String","olderShadowRoot_","HTMLShadowElement","olderShadowRoot","implementation","createHTMLDocument","HTMLTemplateElement","content","HTMLUnknownElement","createComment","Comment","DocumentFragment","Text","nextOlderShadowTreeTable","getElementById","filter","trim","render","host","dirty","associateNode","RegExp","join","treeComposition","removeAllChildNodes","renderNode","invalidate","renderInsertionPoint","renderShadowInsertionPoint","renderAsAnyDomTree","renderFallbackContent","getDistributedNodes","visual","adoptNode","write","HTMLBodyElement","HTMLDocument","HTMLHeadElement","getComputedStyle","map","MutationObserver","WebKitMutationObserver","MutationRecord","addedNodes","removedNodes","observe","disconnect","takeRecords","applet","audio","body","canvas","dl","datalist","dir","div","fieldset","font","form","frame","frameset","head","h1","html","iframe","li","label","legend","menu","menuitem","meter","del","ol","object","optgroup","option","output","pre","progress","script","span","style","caption","table","tr","thead","tbody","textarea","title","ul","video","knownElements","defineProperties","webkitShadowRoot","Array","sheet","cssRules","cssText","strictStyling","registry","shimStyling","registerDefinition","applyScopeToContent","shimPolyfillDirectives","rootStyles","applyShimming","scopeStyles","shimShadowDOMStyling","root","extendsName","concat","convertPolyfillDirectives","exec","substring","index","scopeSelector","lastIndex","shimAtHost","shimScoping","convertAtHostStyles","scopeHostCss","findAtHostRules","scopeHostSelector","match","isHostRule","bind","selectorText","CSSRule","WEBKIT_KEYFRAMES_RULE","convertScopedStyles","convertPseudos","scopeRules","propertiesFromRule","media","mediaText","selectorNeedsScoping","applyStrictSelectorScope","applySimpleSelectorScope","ShadowCSS","templateContent","bootstrap","_content","Function","DOMTokenList","add","toggle","NamedNodeMap","MozNamedAttrMap","array","HTMLCollection","performance","now","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","setTimeout","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","clearTimeout","createDOM","Inspector","sinspect","open","api","shadowize","href","idx","onclick","STYLE","SCRIPT","#comment","TEMPLATE","nodeName","Number","log","deliverChangeRecords","getValueFrom","compiledGetValueFromFn","check","report","added","changed","isArray","callback","token","reporting","boundInternalCallback","internalCallback","valid","connect","sync","_allObserversCount","arr","isObserved","getNotifier","oldValue","notify","reverse","addedCount","min","splice","JSON","stringify","isNaN","toString","getValueFromObserved","reset","cleanup","setValueFrom","testingResults","anyChanged","close","unobserved","deliver","reportArgs","_errorThrownDuringCallback","forceCollectObservers","deliverAllChangeRecords","performMicrotaskCheckpoint","clearObservers","oldObject","unobserve","applySplices","observedSet","getValueAtPath","setValueAtPath","new","updated","deleted","Observer","hasObjectObserve","ArrayObserver","calculateSplices","ObjectObserver","PathObserver","Path","closed","node","property","model","observer","boundValueChanged","conditional","removeAttribute","eventType","boundNodeValueToModel","nodeValueChanged","elements","hasAttribute","decorate","lb","bindingDelegate","inputs","combinator","scheduled","resolve","templateRef","hasSubTemplate","firstNode","lastNode","mb","observers","values","size","combinator_","templateElement_","terminators","iteratedValue","arrayObserver","resolveInputs","Map","documentElement","bindings","createBinding","unbind","unbindAll","sanitizeBoundValue","postUpdateBinding","checked","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","template","repeat","ref","THEAD","TBODY","TFOOT","TH","TR","TD","COLGROUP","COL","CAPTION","OPTION","OPTGROUP","nextRunner","lastValue","scheduledIds","running","run","schedule","TypeError","templateIsDecorated_","nb","createInstance","templateInstance","scheduleResolve","pathValueChanged","valueChanged","handleSplices","getTerminatorAt","insertInstanceAt","extractInstanceAt","bound","getInstanceModel","CompoundBinding","forAllTemplatesFrom_","fromCharCode","charCodeAt","Identifier","Keyword","NullLiteral","BooleanLiteral","range","Punctuator","UnexpectedToken","NumericLiteral","parseFloat","StringLiteral","octal","EOF","description","createArrayExpression","createLiteral","createIdentifier","createProperty","createObjectExpression","createThisExpression","createCallExpression","createMemberExpression","createUnaryExpression","allowIn","prec","createBinaryExpression","createConditionalExpression","createEmptyStatement","createExpressionStatement","labelSet","Redeclaration","createLabeledStatement","createProgram","valueOf","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","EmptyStatement","ExpressionStatement","Literal","LabeledStatement","LogicalExpression","MemberExpression","ObjectExpression","Program","Property","ThisExpression","UnaryExpression","UnknownLabel","esprima","parse","statements","labeledStatements","deps","last","currentPath","getPath","valueFn","+","-","!","*","/","%","<",">","<=",">=","==","!=","===","!==","&&","||","getFn","key","getBinding","ExpressionSyntax","group","groupEnd","__instanceCreated","CustomElements","upgradeAll","setInterval","flush","dirtyCheck","_URL","baseURI","HTMLImports","xhr","documents","cache","preloadSelectors","loader","loaded","load","preload","filterMainDocumentNodes","extractTemplateNodes","addNodes","resolvePathsInHTML","import","ownerNode","__resource","resolvePathsInStylesheet","onload","oncomplete","inflight","pending","require","checkDone","nodeUrl","__nodeUrl","dedupe","fetch","tail","receive","resolveUrl","getDocumentUrl","hrefOrSrc","documentUrlFromNode","URL","isAbsUrl","compressUrl","urlToPath","makeRelPath","unshift","resolveAttributes","resolveStyleElts","resolveCssText","resolveNodeAttributes","async","ok","status","XMLHttpRequest","debug","bust","readyState","response","send","loadDocument","responseType","importer","IMPORT_LINK_TYPE","selectors","__importParsed","parseLink","parseGeneric","parseScript","floor","eval","parser","readyTime","sort","uid_","callback_","nodes_","removeTransientObservers","options","subtree","enqueue","records_","attributeName","attributeNamespace","transientObservedNodes","msSetImmediate","postMessage","childList","characterData","attributeOldValue","attributeFilter","characterDataOldValue","SyntaxError","removeListeners","addListeners","addListeners_","removeListeners_","addTransientObserver","attrName","attrChange","ADDITION","prevValue","JsMutationObserver","lifecycle","ancestry","extends","ctor","ready","is","tag","native","__upgraded__","upgradeSubtree","readyCallback","attributeChangedCallback","hasNative","webkitRegister","register","upgradeElement","upgrade","dom","insertedCallback","__inserted","warn","removedCallback","__watched","watchShadow","watchAllShadows","observeDocument","upgradeDocument","parseElementElement","takeAttributes","executeComponentScript","inScript","inContext","inName","context","owner","url","code","HTMLElementElement","__componentScript","element","__parsed","parseImport","parseElement","elapsed","canTarget","targetingShadow","olderShadow","allShadows","searchRoot","findTarget","targetFinding","PointerEventsPolyfill","rule","buttons","which","pressure","pointerId","width","height","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","PointerEvent","ids","pointers","has","clear","PointerMap","targets","handledEvents","pointermap","eventMap","eventSources","eventSourceList","registerSource","events","unregister","down","fireEvent","move","up","enter","leave","over","out","cancel","leaveOut","enterOver","eventHandler","listen","addEvent","unlisten","removeEvent","boundHandler","makeEvent","cloneEvent","getTarget","captureInfo","id","setCapture","releaseCapture","implicitRelease","asyncDispatchEvent","dispatcher","addCallback","removeCallback","changedCallback","mutationWatcher","watchSubtree","enableOnSubtree","installOnLoad","installNewSubtree","findElements","addElement","removeElement","elementChanged","concatLists","isElement","flattenMutationTree","reduce","mutationHandler","Installer","POINTER_ID","POINTER_TYPE","lastTouches","isEventSimulatedFromTouch","abs","prepareEvent","mousedown","mousemove","mouseup","cleanupMouse","mouseover","mouseout","mouseEvents","touchAction","scrollType","elementAdded","touchActionToScrollType","elementRemoved","touchActiontoScrollType","scrollTypes","EMITTER","XSCROLLER","YSCROLLER","SCROLLER","firstTouch","isPrimaryTouch","identifier","setPrimaryTouch","firstXY","scrolling","removePrimaryTouch","touchToPointer","webkitRadiusX","radiusX","webkitRadiusY","radiusY","webkitForce","force","processTouches","changedTouches","shouldScroll","findTouch","vacuumTouches","touches","cancelOut","touchstart","dedupSynthMouse","overDown","outTarget","touchmove","touchcancel","moveOverOut","touchend","upOut","cleanUpPointer","touchEvents","MSPointerEvent","MSPOINTER_TYPE_MOUSE","POINTER_TYPES","MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSLostPointerCapture","MSGotPointerCapture","msEvents","pointerEnabled","msPointerEnabled","msMaxTouchPoints","ontouchstart","msSetPointerCapture","msReleasePointerCapture","setPointerCapture","releasePointerCapture","tapPrevented","utils","LCA","find","depth","walk","findLCA","PointerGestures","handlers","recognizers","registerRecognizer","addHandler","registerTarget","unregisterTarget","makeQueue","runQueue","currentPointerId","inTarget","tap","HOLD_DELAY","WIGGLE_THRESHOLD","heldPointer","holdJob","pulse","timeStamp","held","fireHold","clearInterval","pointerdown","pointerup","pointercancel","pointermove","holdTime","clampDir","calcPositionDelta","pageX","pageY","fireTrack","downEvent","lastMoveEvent","xDirection","yDirection","dx","dy","ddx","ddy","trackInfo","_releaseTarget","downTarget","tracking","MIN_VELOCITY","MAX_QUEUE","moveQueue","addMove","fireFlick","sqrt","calcAngle","xVelocity","yVelocity","velocity","angle","majorAxis","atan2","PI","Polymer","webkitTransition","opacity","scope","stylizer","hostRuleRe","selectorRe","hostElementRe","hostFixableRe","cssCommentRe","cssPolyfillCommentRe","cssPseudoRe","selectorReSuffix","hostRe","cacheDefinition","styles","strictPolyfillStyling","stylesForElement","addCssToDocument","extendee","findExtendee","extendeeStyles","selector","matcher","cssRule","stylesToCssText","rulesToCss","cssToRules","parts","rules","properties","matchScope","strict","splits","scoped","sep","preserveComments","stripCssComments","css","getSheet","addSheetToDocument","extend","pd","nom","getPrototypeForTag","originalStopPropagation","cancelBubble","deserializeValue","defaultValue","inferredType","typeHandlers","string","date","boolean","number","floatVal","job","wait","stop","Job","go","handle","complete","$super","arrayOfArgs","caller","nameInThis","memoizeSuper","_super","fn","nextSuper","proto","method","n$","super","declaration","instance","args","timeout","fire","toNode","undefined","asyncFire","asyncMethod","classFollows","anew","old","className","classList","listenLocal","event","on","EVENT_PREFIX","_listenLocalNoEventPath","_listenLocal","some","findController","ctrlr","handleIfNotHandled","dispatchMethod","list","eventHandledTable","DELEGATES","addHostListeners","addNodeListeners","hostEventListener","addInstanceListeners","delegates","instanceEventListener","listener","findEventDelegate","methodName","invoke","bindProperties","inA","inProperty","inB","inPath","LOG_BIND_PROPS","registerObserver","o$","getElementObservers","unregisterObserver","unregisterObservers","$o","b$","OBSERVE_SUFFIX","observeProperties","names","getCustomPropertyNames","observeProperty","customPropertyNames","shouldObserveProperty","watch","LOG_OBSERVE","propertyChanged","neo","LOG_OBSERVED","dispatchPropertyChange","bindProperty","unbindProperty","unbindAllProperties","PUBLISHED","INSTANCE_ATTRIBUTES","copyInstanceAttributes","a$","attributeToProperty","propertyForAttribute","bindPattern","lowerCase","stringValue","unbindNodeTree","forNodeTree","_nodeUnbindAll","child","mdv_syntax","mdv","instanceTemplate","asyncUnbindAll","_unbound","_unbindAllJob","cancelUnbindAll","preventCascade","inserted","mustachePattern","isBase","PolymerBase","parseElements","elementElement","shadowFromTemplate","fetchTemplate","elderRoot","applyAuthorStyles","resetStyleInheritance","shadowRootReady","marshalNodeReferences","attributeChanged","Base","STYLE_SCOPE_ATTRIBUTE","STYLE_CONTROLLER_SCOPE","installControllerStyles","findStyleController","scopeHasElementStyle","cssTextForScope","cssTextToScopeStyle","applyStyleToScope","descriptor","addResolvePathApi","elementPath","resolvePath","clone","createStyleElement","attr","cssTextFromSheet","matchesSelector","inSelector","STYLE_SELECTOR","SHEET_SELECTOR","STYLE_GLOBAL_SCOPE","SCOPE_ATTR","installSheets","cacheSheets","installLocalSheets","installGlobalStyles","sheets","findNodes","nodes","templateNodes","styleForScope","scopeDescriptor","hasEventPrefix","prefixLength","removeEventPrefix","getTemplateContent","inheritDelegates","inheritObject","parseHostEvents","addAttributeDelegates","parseLocalEvents","accumulateTemplatedEvents","accumulateChildEvents","accumulateEvents","accumulateAttributeEvents","accumulateEvent","event_translations","webkitanimationstart","webkitanimationend","webkittransitionend","domfocusout","domfocusin","empty","cacheProperties","PUBLISH","ATTRIBUTES","inheritAttributesObjects","parseAttributes","publishAttributes","publishProperties","accumulateInstanceAttributes","published","publishPublish","imperative","clonable","isInstanceAttribute","blackList","generatePrototype","apis","extnds","generateCustomPrototype","desugar","publishConstructor","registerCallback","generateBasePrototype","addNamedApi","ensureBaseApi","symbol"],"mappings":"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"} \ No newline at end of file diff --git a/libs/polymer/polymer.native.min.js b/libs/polymer/polymer.native.min.js deleted file mode 100644 index 0c63c34f6..000000000 --- a/libs/polymer/polymer.native.min.js +++ /dev/null @@ -1,34 +0,0 @@ -// Copyright (c) 2012 The Polymer Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -function PointerGestureEvent(a,b){var c=b||{},d=document.createEvent("Event"),e={bubbles:!0,cancelable:!0};return Object.keys(e).forEach(function(a){a in c&&(e[a]=c[a])}),d.initEvent(a,e.bubbles,e.cancelable),Object.keys(c).forEach(function(a){d[a]=b[a]}),d.preventTap=this.preventTap,d}var SideTable;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0?SideTable=WeakMap:function(){var a=Object.defineProperty,b=Object.hasOwnProperty,c=(new Date).getTime()%1e9;SideTable=function(){this.name="__st"+(1e9*Math.random()>>>0)+(c++ +"__")},SideTable.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}(),function(){window.templateContent=window.templateContent||function(a){return a.content},window.wrap=window.unwrap=function(a){return a},Object.defineProperties(HTMLElement.prototype,{shadowRoot:{get:function(){return this.webkitShadowRoot}},createShadowRoot:{value:function(){return this.webkitCreateShadowRoot()}}}),window.templateContent=function(a){if(window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(a),!a.content&&!a._content){for(var b=document.createDocumentFragment();a.firstChild;)b.appendChild(a.firstChild);a._content=b}return a.content||a._content}}(),function(a){function b(a){for(var b=a||{},d=1;d",""," "," ShadowDOM Inspector"," "," "," ",'
    ',"
",'
'," ",""].join("\n"),d=[],e=function(){var a=b.document,c=a.querySelector("#crumbs");c.textContent="";for(var e,g=0;e=d[g];g++){var h=a.createElement("a");h.href="#",h.textContent=e.localName,h.idx=g,h.onclick=function(a){for(var b;d.length>this.idx;)b=d.pop();f(b.shadow||b,b),a.preventDefault()},c.appendChild(a.createElement("li")).appendChild(h)}},f=function(a,c){var f=b.document;k=[];var g=c||a;d.push(g),e(),f.body.querySelector("#tree").innerHTML="
"+j(a,a.childNodes)+"
"},g=Array.prototype.forEach.call.bind(Array.prototype.forEach),h={STYLE:1,SCRIPT:1,"#comment":1,TEMPLATE:1},i=function(a){return h[a.nodeName]},j=function(a,b,c){if(i(a))return"";var d=c||"";if(a.localName||11==a.nodeType){var e=a.localName||"shadow-root",f=d+l(a);"content"==e&&(b=a.getDistributedNodes()),f+="
";var h=d+"  ";g(b,function(a){f+=j(a,a.childNodes,h)}),f+=d,{br:1}[e]||(f+="</"+e+">",f+="
")}else{var k=a.textContent.trim();f=k?d+'"'+k+'"'+"
":""}return f},k=[],l=function(a){var b="<",c=a.localName||"shadow-root";return a.webkitShadowRoot||a.shadowRoot?(b+=' ",k.push(a)):b+=c||"shadow-root",a.attributes&&g(a.attributes,function(a){b+=" "+a.name+(a.value?'="'+a.value+'"':"")}),b+=">"};shadowize=function(){var a=Number(this.attributes.idx.value),b=k[a];b?f(b.webkitShadowRoot||b.shadowRoot,b):(console.log("bad shadowize node"),console.dir(this))},a.output=j}(window.Inspector),function(a){"use strict";function b(){function a(a){"splice"===a[0].type&&"splice"===a[1].type&&(b=!0)}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=!1,c=[0];return Array.observe(c,a),c[1]=1,c.length=0,Object.deliverChangeRecords(a),b}function c(a){return+a===a>>>0}function d(a){return+a}function e(a){return a===Object(a)}function f(a,b){return a===b?0!==a||1/a===1/b:K(a)&&K(b)?!0:a!==a&&b!==b}function g(a){return"string"!=typeof a?!1:(a=a.replace(/\s/g,""),""==a?!0:"."==a[0]?!1:S.test(a))}function h(a){var b=T[a];if(b)return b;if(g(a)){var b=new i(a);return T[a]=b,b}}function i(a){return""==a.trim()?this:c(a)?(this.push(String(a)),this):(a.split(/\./).filter(function(a){return a}).forEach(function(a){this.push(a)},this),H&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn()),void 0)}function j(a){for(var b=0;U>b&&a.check();)a.report(),b++}function k(a){for(var b in a)return!1;return!0}function l(a){return k(a.added)&&k(a.removed)&&k(a.changed)}function m(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function n(a,b){var c=b||(Array.isArray(a)?[]:{});for(var d in a)c[d]=a[d];return Array.isArray(a)&&(c.length=a.length),c}function o(a,b,c,d){this.object=a,this.callback=b,this.target=c,this.token=d,this.reporting=!0,G&&(this.boundInternalCallback=this.internalCallback.bind(this)),this.valid=!0,p(this),this.connect(),this.sync(!0)}function p(a){W&&(V.push(a),o._allObserversCount++)}function q(a,b,c,d){o.call(this,a,b,c,d)}function r(a,b,c,d){if(!Array.isArray(a))throw Error("Provided object is not an Array");o.call(this,a,b,c,d)}function s(a){this.arr=[],this.callback=a,this.isObserved=!0}function t(a,b,c,d,f){this.value=void 0;var g=h(b);return g?g.length?(e(a)&&(this.path=g,o.call(this,a,c,d,f)),void 0):(this.value=a,void 0):void 0}function u(a,b){if("function"==typeof Object.observe){var c=Object.getNotifier(a);return function(d,e){var f={object:a,type:d,name:b};2===arguments.length&&(f.oldValue=e),c.notify(f)}}}function v(a,b,c){for(var d={},e={},f=0;fj;j++)i[j]=new Array(h),i[j][0]=j;for(var k=0;h>k;k++)i[0][k]=k;for(var j=1;g>j;j++)for(var k=1;h>k;k++)if(d[e+j-1]===a[b+k-1])i[j][k]=i[j-1][k-1];else{var l=i[j-1][k]+1,m=i[j][k-1]+1;i[j][k]=m>l?l:m}return i}function x(a){for(var b=a.length-1,c=a[0].length-1,d=a[b][c],e=[];b>0||c>0;)if(0!=b)if(0!=c){var f,g=a[b-1][c-1],h=a[b-1][c],i=a[b][c-1];f=i>h?g>h?h:g:g>i?i:g,f==g?(g==d?e.push(ab):(e.push(bb),d=g),b--,c--):f==h?(e.push(db),b--,d=h):(e.push(cb),c--,d=i)}else e.push(db),b--;else e.push(cb),c--;return e.reverse(),e}function y(a,b,c){for(var d=0;c>d;d++)if(a[d]!==b[d])return d;return c}function z(a,b,c){for(var d=a.length,e=b.length,f=0;c>f&&a[--d]===b[--e];)f++;return f}function A(a,b,c){return{index:a,removed:b,addedCount:c}}function B(a,b,c,d,e,f){var g=0,h=0,i=Math.min(c-b,f-e);if(0==b&&0==e&&(g=y(a,d,i)),c==a.length&&f==d.length&&(h=z(a,d,i-g)),b+=g,e+=g,c-=h,f-=h,0==c-b&&0==f-e)return[];if(b==c){for(var j=A(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[A(b,[],c-b)];for(var k=x(w(a,b,c,d,e,f)),j=void 0,l=[],m=b,n=e,o=0;ob||a>d?-1:b==c||d==a?0:c>a?d>b?b-c:d-c:b>d?d-a:b-a}function D(a,b,c,d){for(var e=A(b,c,d),f=!1,g=0,h=0;h=0){a.splice(h,1),h--,g-=i.addedCount-i.removed.length,e.addedCount+=i.addedCount-j;var k=e.removed.length+i.removed.length-j;if(e.addedCount||k){var c=i.removed;if(e.indexi.index+i.addedCount){var m=e.removed.slice(i.index+i.addedCount-e.index);Array.prototype.push.apply(c,m)}e.removed=c,i.indexh)continue;D(e,h,[g.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(g))}}return e}function F(a,b){var c=[];return E(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?(b.removed[0]!==a[b.index]&&c.push(b),void 0):(c=c.concat(B(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)),void 0)}),c}var G=b(),H=!1;try{var I=new Function("","return true;");H=I()}catch(J){}var K=a.Number.isNaN||function(b){return"number"==typeof b&&a.isNaN(b)},L="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},M="[$_a-zA-Z]",N="[$_a-zA-Z0-9]",O=M+"+"+N+"*",P="(?:[0-9]|[1-9]+[0-9]+)",Q="(?:"+O+"|"+P+")",R="(?:"+Q+")(?:\\."+Q+")*",S=new RegExp("^"+R+"$"),T={};i.prototype=L({__proto__:[],toString:function(){return this.join(".")},getValueFrom:function(a){for(var b=0;ba&&b.anyChanged);o._allObserversCount=V.length,X=!1}}},W&&(a.Platform.clearObservers=function(){V=[]}),q.prototype=L({__proto__:o.prototype,connect:function(){G&&Object.observe(this.object,this.boundInternalCallback)},sync:function(){G||(this.oldObject=n(this.object))},check:function(a){var b,c;if(G){if(!a)return!1;c={},b=v(this.object,a,c)}else c=this.oldObject,b=m(this.object,this.oldObject);return l(b)?!1:(this.reportArgs=[b.added||{},b.removed||{},b.changed||{}],this.reportArgs.push(function(a){return c[a]}),!0)},disconnect:function(){G?this.object&&Object.unobserve(this.object,this.boundInternalCallback):this.oldObject=void 0}}),r.prototype=L({__proto__:q.prototype,connect:function(){G&&Array.observe(this.object,this.boundInternalCallback)},sync:function(){G||(this.oldObject=this.object.slice())},check:function(a){var b;if(G){if(!a)return!1;b=F(this.object,a)}else b=B(this.object,0,this.object.length,this.oldObject,0,this.oldObject.length);return b&&b.length?(this.reportArgs=[b],!0):!1}}),r.applySplices=function(a,b,c){c.forEach(function(c){for(var d=[c.index,c.removed.length],e=c.index;e=0&&this.arr[b+1]===this.isObserved||(0>b&&(b=this.arr.length,this.arr[b]=a,Object.observe(a,this.callback)),this.arr[b+1]=this.isObserved,this.observe(Object.getPrototypeOf(a)))}},cleanup:function(){for(var a=0,b=0,c=this.isObserved;ba&&(this.arr[a]=d,this.arr[a+1]=c),a+=2):Object.unobserve(d,this.callback),b+=2}this.arr.length=a}},t.prototype=L({__proto__:o.prototype,connect:function(){G&&(this.observedSet=new s(this.boundInternalCallback))},disconnect:function(){this.value=void 0,G&&(this.observedSet.reset(),this.observedSet.cleanup(),this.observedSet=void 0)},check:function(){return this.value=G?this.path.getValueFromObserved(this.object,this.observedSet):this.path.getValueFrom(this.object),f(this.value,this.oldValue)?!1:(this.reportArgs=[this.value,this.oldValue],!0)},sync:function(a){a&&(this.value=G?this.path.getValueFromObserved(this.object,this.observedSet):this.path.getValueFrom(this.object)),this.oldValue=this.value}}),t.getValueAtPath=function(a,b){var c=h(b);return c?c.getValueFrom(a):void 0},t.setValueAtPath=function(a,b,c){var d=h(b);d&&d.setValueFrom(a,c)};var _={"new":!0,updated:!0,deleted:!0};t.defineProperty=function(a,b,c){var d=c.object,e=h(c.path),f=u(a,b),g=new t(d,c.path,function(a,b){f&&f("updated",b)});return Object.defineProperty(a,b,{get:function(){return e.getValueFrom(d)},set:function(a){e.setValueFrom(d,a)},configurable:!0}),{close:function(){var c=e.getValueFrom(d);f&&g.deliver(),g.close(),Object.defineProperty(a,b,{value:c,writable:!0,configurable:!0})}}};var ab=0,bb=1,cb=2,db=3;a.Observer=o,a.Observer.hasObjectObserve=G,a.ArrayObserver=r,a.ArrayObserver.calculateSplices=function(a,b){return B(a,0,a.length,b,0,b.length)},a.ObjectObserver=q,a.PathObserver=t,a.Path=i}(this),function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a){for(;a.parentNode;)a=a.parentNode;return"function"==typeof a.getElementById?a:null}function d(a){return a.ownerDocument.contains(a)}function e(a,b,c,d){this.closed=!1,this.node=a,this.property=b,this.model=c,this.path=d,this.observer=new PathObserver(c,d,this.boundValueChanged,this),this.boundValueChanged(this.value)}function f(a,b,c,d){this.conditional="?"==b[b.length-1],this.conditional&&(a.removeAttribute(b),b=b.slice(0,-1)),e.call(this,a,b,c,d)}function g(a){switch(a.type){case"checkbox":return T;case"radio":case"select-multiple":case"select-one":return"change";default:return"input"}}function h(a,b,c,d){e.call(this,a,b,c,d),this.eventType=g(this.node),this.boundNodeValueToModel=this.nodeValueChanged.bind(this),this.node.addEventListener(this.eventType,this.boundNodeValueToModel,!0)}function i(a){if(!d(a))return[];if(a.form)return Q(a.form.elements,function(b){return b!=a&&"INPUT"==b.tagName&&"radio"==b.type&&b.name==a.name});var b=a.ownerDocument.querySelectorAll('input[type="radio"][name="'+a.name+'"]');return Q(b,function(b){return b!=a&&!b.form})}function j(a,b,c){h.call(this,a,"checked",b,c)}function k(a,b,c){h.call(this,a,"selectedIndex",b,c)}function l(a){return $[a.tagName]&&a.hasAttribute("template")}function m(a){return"TEMPLATE"==a.tagName||l(a)}function n(a){return _&&"TEMPLATE"==a.tagName}function o(a,b){var c=a.querySelectorAll(ab);m(a)&&b(a),P(c,b)}function p(a){function b(a){HTMLTemplateElement.decorate(a)||p(a.content)}o(a,b)}function q(a,b){Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))})}function r(a){if(!a.defaultView)return a;var b=eb.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);eb.set(a,b)}return b}function s(a){var b=a.ownerDocument.createElement("template");a.parentNode.insertBefore(b,a);for(var c=a.attributes,d=c.length;d-->0;){var e=c[d];Z[e.name]&&("template"!==e.name&&b.setAttribute(e.name,e.value),a.removeAttribute(e.name))}return b}function t(a,b,c){var d=a.content;if(c)return d.appendChild(b),void 0;for(var e;e=b.firstChild;)d.appendChild(e)}function u(a){"TEMPLATE"===a.tagName?_||(cb?a.__proto__=HTMLTemplateElement.prototype:q(a,HTMLTemplateElement.prototype)):(q(a,HTMLTemplateElement.prototype),Object.defineProperty(a,"content",ib))}function v(a){var b=lb.get(a);b||(b=function(){H(a,a.model,a.bindingDelegate)},lb.set(a,b)),bb(b)}function w(a,b,c,d){this.closed=!1,this.node=a,this.property=b,this.model=c,this.path=d,this.node.inputs.bind(this.property,c,d||"")}function x(a){return 3==a.length&&0==a[0].length&&0==a[2].length}function y(a){if(a&&a.length){for(var b,c=a.length,d=0,e=0,f=0;c>e;){if(d=a.indexOf("{{",e),f=0>d?-1:a.indexOf("}}",d+2),0>f){if(!b)return;b.push(a.slice(e));break}b=b||[],b.push(a.slice(e,d)),b.push(a.slice(d+2,f).trim()),e=f+2}return e===c&&b.push(""),b}}function z(a,b,c,d,e){var f,g=e&&e[X];return g&&"function"==typeof g&&(f=g(c,d,b,a),f&&(c=f,d="value")),a.bind(b,c,d)}function A(a,b,c,d,e){for(var f=0;fc?(this.keys.push(a),this.values.push(b)):this.values[c]=b},get:function(a){var b=this.keys.indexOf(a);return 0>b?void 0:this.values[b]},"delete":function(a){var b=this.keys.indexOf(a);return 0>b?!1:(this.keys.splice(b,1),this.values.splice(b,1),!0)},forEach:function(a,b){for(var c=0;c>>0)+(c++ +"__")},S.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}(),Node.prototype.bind=function(a,b,c){this.bindings=this.bindings||{};var d=this.bindings[a];return d&&d.close(),d=this.createBinding(a,b,c),this.bindings[a]=d,d?d:(console.error("Unhandled binding to Node: ",this,a,b,c),void 0)},Node.prototype.createBinding=function(){},Node.prototype.unbind=function(a){if(this.bindings){var b=this.bindings[a];b&&(b.close(),delete this.bindings[a])}},Node.prototype.unbindAll=function(){if(this.bindings){for(var a=Object.keys(this.bindings),b=0;be.node.length&&d--?bb(b):e.node[e.property]=c}var c=Number(a);if(c<=this.node.length)return this.node[this.property]=c,void 0;var d=2,e=this;bb(b)}}),HTMLSelectElement.prototype.createBinding=function(a,b,c){return"selectedindex"===a.toLowerCase()?(this.removeAttribute(a),new k(this,b,c)):HTMLElement.prototype.createBinding.call(this,a,b,c)};var U="bind",V="repeat",W="if",X="getBinding",Y="getInstanceModel",Z={template:!0,repeat:!0,bind:!0,ref:!0},$={THEAD:!0,TBODY:!0,TFOOT:!0,TH:!0,TR:!0,TD:!0,COLGROUP:!0,COL:!0,CAPTION:!0,OPTION:!0,OPTGROUP:!0},_="undefined"!=typeof HTMLTemplateElement,ab="template, "+Object.keys($).map(function(a){return a.toLowerCase()+"[template]"}).join(", "),bb=function(){function a(a){this.nextRunner=a,this.value=!1,this.lastValue=this.value,this.scheduled=[],this.scheduledIds=[],this.running=!1,this.observer=new PathObserver(this,"value",this.run,this)}function b(a){var b=a[e];a[e]||(b=d++,a[e]=b),c.schedule(a,b)}a.prototype={schedule:function(a,b){if(!this.scheduledIds[b]){if(this.running)return this.nextRunner.schedule(a,b);this.scheduledIds[b]=!0,this.scheduled.push(a),this.lastValue===this.value&&(this.value=!this.value)}},run:function(){this.running=!0;for(var a=0;a=48&&57>=a}function d(a){return 32===a||9===a||11===a||12===a||160===a||a>=5760&&" ᠎              ".indexOf(String.fromCharCode(a))>0}function e(a){return 10===a||13===a||8232===a||8233===a}function f(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a}function g(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a||a>=48&&57>=a}function h(a){return"this"===a}function i(){for(;bb>ab&&d(_.charCodeAt(ab));)++ab}function j(){var a,b;for(a=ab++;bb>ab&&(b=_.charCodeAt(ab),g(b));)++ab;return _.slice(a,ab)}function k(){var a,b,c;return a=ab,b=j(),c=1===b.length?X.Identifier:h(b)?X.Keyword:"null"===b?X.NullLiteral:"true"===b||"false"===b?X.BooleanLiteral:X.Identifier,{type:c,value:b,range:[a,ab]}}function l(){var a,b,c,d,e=ab,f=_.charCodeAt(ab),g=_[ab];switch(f){case 46:case 40:case 41:case 59:case 44:case 123:case 125:case 91:case 93:case 58:case 63:case 126:return++ab,{type:X.Punctuator,value:String.fromCharCode(f),range:[e,ab]};default:if(a=_.charCodeAt(ab+1),61===a)switch(f){case 37:case 38:case 42:case 43:case 45:case 47:case 60:case 62:case 94:case 124:return ab+=2,{type:X.Punctuator,value:String.fromCharCode(f)+String.fromCharCode(a),range:[e,ab]};case 33:case 61:return ab+=2,61===_.charCodeAt(ab)&&++ab,{type:X.Punctuator,value:_.slice(e,ab),range:[e,ab]}}}return b=_[ab+1],c=_[ab+2],d=_[ab+3],">"===g&&">"===b&&">"===c&&"="===d?(ab+=4,{type:X.Punctuator,value:">>>=",range:[e,ab]}):">"===g&&">"===b&&">"===c?(ab+=3,{type:X.Punctuator,value:">>>",range:[e,ab]}):"<"===g&&"<"===b&&"="===c?(ab+=3,{type:X.Punctuator,value:"<<=",range:[e,ab]}):">"===g&&">"===b&&"="===c?(ab+=3,{type:X.Punctuator,value:">>=",range:[e,ab]}):g===b&&"+-<>&|".indexOf(g)>=0?(ab+=2,{type:X.Punctuator,value:g+b,range:[e,ab]}):"<>=!+-*%&|^/".indexOf(g)>=0?(++ab,{type:X.Punctuator,value:g,range:[e,ab]}):(s({},$.UnexpectedToken,"ILLEGAL"),void 0)}function m(){var a,d,e;if(e=_[ab],b(c(e.charCodeAt(0))||"."===e,"Numeric literal must start with a decimal digit or a decimal point"),d=ab,a="","."!==e){for(a=_[ab++],e=_[ab],"0"===a&&e&&c(e.charCodeAt(0))&&s({},$.UnexpectedToken,"ILLEGAL");c(_.charCodeAt(ab));)a+=_[ab++];e=_[ab]}if("."===e){for(a+=_[ab++];c(_.charCodeAt(ab));)a+=_[ab++];e=_[ab]}if("e"===e||"E"===e)if(a+=_[ab++],e=_[ab],("+"===e||"-"===e)&&(a+=_[ab++]),c(_.charCodeAt(ab)))for(;c(_.charCodeAt(ab));)a+=_[ab++];else s({},$.UnexpectedToken,"ILLEGAL");return f(_.charCodeAt(ab))&&s({},$.UnexpectedToken,"ILLEGAL"),{type:X.NumericLiteral,value:parseFloat(a),range:[d,ab]}}function n(){var a,c,d,f="",g=!1;for(a=_[ab],b("'"===a||'"'===a,"String literal must starts with a quote"),c=ab,++ab;bb>ab;){if(d=_[ab++],d===a){a="";break}if("\\"===d)if(d=_[ab++],d&&e(d.charCodeAt(0)))"\r"===d&&"\n"===_[ab]&&++ab;else switch(d){case"n":f+="\n";break;case"r":f+="\r";break;case"t":f+=" ";break;case"b":f+="\b";break;case"f":f+="\f";break;case"v":f+=" ";break;default:f+=d}else{if(e(d.charCodeAt(0)))break;f+=d}}return""!==a&&s({},$.UnexpectedToken,"ILLEGAL"),{type:X.StringLiteral,value:f,octal:g,range:[c,ab]}}function o(a){return a.type===X.Identifier||a.type===X.Keyword||a.type===X.BooleanLiteral||a.type===X.NullLiteral}function p(){var a;return i(),ab>=bb?{type:X.EOF,range:[ab,ab]}:(a=_.charCodeAt(ab),40===a||41===a||58===a?l():39===a||34===a?n():f(a)?k():46===a?c(_.charCodeAt(ab+1))?m():l():c(a)?m():l())}function q(){var a;return a=db,ab=a.range[1],db=p(),ab=a.range[1],a}function r(){var a;a=ab,db=p(),ab=a}function s(a,c){var d,e=Array.prototype.slice.call(arguments,2),f=c.replace(/%(\d)/g,function(a,c){return b(cab&&(a.push(O()),!v(")"));)u(",");return u(")"),a}function F(){var a;return a=q(),o(a)||t(a),cb.createIdentifier(a.value)}function G(){return u("."),F()}function H(){var a;return u("["),a=P(),u("]"),a}function I(){var a,b,c;for(a=D();v(".")||v("[")||v("(");)v("(")?(b=E(),a=cb.createCallExpression(a,b)):v("[")?(c=H(),a=cb.createMemberExpression("[",a,c)):(c=G(),a=cb.createMemberExpression(".",a,c));return a}function J(){var a;return a=I(),db.type===X.Punctuator&&(v("++")||v("--"))&&s({},$.UnexpectedToken),a}function K(){var a,b;return db.type!==X.Punctuator&&db.type!==X.Keyword?b=J():v("++")||v("--")?s({},$.UnexpectedToken):v("+")||v("-")||v("~")||v("!")?(a=q(),b=K(),b=cb.createUnaryExpression(a.value,b)):w("delete")||w("void")||w("typeof")?s({},$.UnexpectedToken):b=J(),b}function L(a,b){var c=0;if(a.type!==X.Punctuator&&a.type!==X.Keyword)return 0;switch(a.value){case"||":c=1;break;case"&&":c=2;break;case"|":c=3;break;case"^":c=4;break;case"&":c=5;break;case"==":case"!=":case"===":case"!==":c=6;break;case"<":case">":case"<=":case">=":case"instanceof":c=7;break;case"in":c=b?7:0;break;case"<<":case">>":case">>>":c=8;break;case"+":case"-":c=9;break;case"*":case"/":case"%":c=11}return c}function M(){var a,b,c,d,e,f,g,h,i;if(d=eb.allowIn,eb.allowIn=!0,h=K(),b=db,c=L(b,d),0===c)return h;for(b.prec=c,q(),f=K(),e=[h,b,f];(c=L(db,d))>0;){for(;e.length>2&&c<=e[e.length-2].prec;)f=e.pop(),g=e.pop().value,h=e.pop(),a=cb.createBinaryExpression(g,h,f),e.push(a);b=q(),b.prec=c,e.push(b),a=K(),e.push(a)}for(eb.allowIn=d,i=e.length-1,a=e[i];i>1;)a=cb.createBinaryExpression(e[i-1].value,e[i-2],a),i-=2;return a}function N(){var a,b,c,d;return a=M(),v("?")&&(q(),b=eb.allowIn,eb.allowIn=!0,c=O(),eb.allowIn=b,u(":"),d=O(),a=cb.createConditionalExpression(a,c,d)),a}function O(){var a,b,c;return a=db,c=b=N()}function P(){var a;return a=O()}function Q(){return u(";"),cb.createEmptyStatement()}function R(){var a=P();return x(),cb.createExpressionStatement(a)}function S(){var a,b,c,d=db.type;if(d===X.EOF&&t(db),i(),d===X.Punctuator)switch(db.value){case";":return Q();case"(":return R()}return a=P(),a.type===Z.Identifier&&v(":")?(q(),c="$"+a.name,Object.prototype.hasOwnProperty.call(eb.labelSet,c)&&s({},$.Redeclaration,"Label",a.name),eb.labelSet[c]=!0,b=S(),delete eb.labelSet[c],cb.createLabeledStatement(a,b)):(x(),cb.createExpressionStatement(a))}function T(){return db.type===X.Keyword?S():db.type!==X.EOF?S():void 0}function U(){for(var a,b=[];bb>ab&&(a=T(),"undefined"!=typeof a);)b.push(a);return b}function V(){var a;return i(),r(),a=U(),cb.createProgram(a)}function W(a,b){var c;return c=String,"string"==typeof a||a instanceof String||(a=c(a)),cb=b,_=a,ab=0,bb=_.length,db=null,eb={allowIn:!0,labelSet:{}},bb>0&&"undefined"==typeof _[0]&&a instanceof String&&(_=a.valueOf()),V()}var X,Y,Z,$,_,ab,bb,cb,db,eb;X={BooleanLiteral:1,EOF:2,Identifier:3,Keyword:4,NullLiteral:5,NumericLiteral:6,Punctuator:7,StringLiteral:8},Y={},Y[X.BooleanLiteral]="Boolean",Y[X.EOF]="",Y[X.Identifier]="Identifier",Y[X.Keyword]="Keyword",Y[X.NullLiteral]="Null",Y[X.NumericLiteral]="Numeric",Y[X.Punctuator]="Punctuator",Y[X.StringLiteral]="String",Z={ArrayExpression:"ArrayExpression",BinaryExpression:"BinaryExpression",CallExpression:"CallExpression",ConditionalExpression:"ConditionalExpression",EmptyStatement:"EmptyStatement",ExpressionStatement:"ExpressionStatement",Identifier:"Identifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",ObjectExpression:"ObjectExpression",Program:"Program",Property:"Property",ThisExpression:"ThisExpression",UnaryExpression:"UnaryExpression"},$={UnexpectedToken:"Unexpected token %0",UnknownLabel:"Undefined label '%0'",Redeclaration:"%0 '%1' has already been declared"},a.esprima={parse:W}}(this),function(a){"use strict";function b(a,b,d,e){if(e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.tagName&&("bind"===d||"repeat"===d)){var f,g,h=b.match(r);if(h?(f=h[1],g=h[2]):(h=b.match(s),h&&(f=h[2],g=h[1])),h){var i;if(g=g.trim(),g.match(q))i=new CompoundBinding(function(a){return a.path}),i.bind("path",a,g);else try{i=c(a,g)}catch(j){console.error("Invalid expression syntax: "+g,j)}if(i)return t.set(e,f),i}}}function c(a,b){try{var c=new f;if(esprima.parse(b,c),!c.statements.length&&!c.labeledStatements.length)return;if(!c.labeledStatements.length&&c.statements.length>1)throw Error("Multiple unlabelled statements are not allowed.");var e=c.labeledStatements.length?d(c.labeledStatements):e=c.statements[0],g=[];for(var h in c.deps)g.push(h);if(!g.length)return{value:e({})};for(var i=new CompoundBinding(e),j=0;j>>0)+(c++ +"__")},i.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}();var j="[$_a-zA-Z]",k="[$_a-zA-Z0-9]",l=j+"+"+k+"*",m="("+l+")",n="(?:[0-9]|[1-9]+[0-9]+)",o="(?:"+l+"|"+n+")",p="(?:"+o+")(?:\\."+o+")*",q=new RegExp("^"+p+"$"),r=new RegExp("^"+m+"\\s* in (.*)$"),s=new RegExp("^(.*) as \\s*"+m+"$"),t=new i;e.prototype={getPath:function(){return this.last?this.last.getPath()+"."+this.name:this.name},valueFn:function(){var a=this.getPath();return this.deps[a]=!0,function(b){return b[a]}}};var u={"+":function(a){return+a},"-":function(a){return-a},"!":function(a){return!a}},v={"+":function(a,b){return a+b},"-":function(a,b){return a-b},"*":function(a,b){return a*b},"/":function(a,b){return a/b},"%":function(a,b){return a%b},"<":function(a,b){return b>a},">":function(a,b){return a>b},"<=":function(a,b){return b>=a},">=":function(a,b){return a>=b},"==":function(a,b){return a==b},"!=":function(a,b){return a!=b},"===":function(a,b){return a===b},"!==":function(a,b){return a!==b},"&&":function(a,b){return a&&b},"||":function(a,b){return a||b}};f.prototype={getFn:function(a){return a instanceof e?a.valueFn():a},createProgram:function(){},createExpressionStatement:function(a){return this.statements.push(a),a},createLabeledStatement:function(a,b){return this.labeledStatements.push({label:a.getPath(),body:b instanceof e?b.valueFn():b}),b},createUnaryExpression:function(a,b){if(!u[a])throw Error("Disallowed operator: "+a);return b=this.getFn(b),function(c){return u[a](b(c))}},createBinaryExpression:function(a,b,c){if(!v[a])throw Error("Disallowed operator: "+a);return b=this.getFn(b),c=this.getFn(c),function(d){return v[a](b(d),c(d))}},createConditionalExpression:function(a,b,c){return a=this.getFn(a),b=this.getFn(b),c=this.getFn(c),function(d){return a(d)?b(d):c(d)}},createIdentifier:function(a){var b=new e(this.deps,a);return b.type="Identifier",b},createMemberExpression:function(a,b,c){return new e(this.deps,c.name,b)},createLiteral:function(a){return function(){return a.value}},createArrayExpression:function(a){for(var b=0;be;e++)d.unshift("..");var g=d.join("/");return g},resolvePathsInHTML:function(a,b){b=b||p.documentUrlFromNode(a),p.resolveAttributes(a,b),p.resolveStyleElts(a,b);var c=a.querySelectorAll("template");c&&q(c,function(a){a.content&&p.resolvePathsInHTML(a.content,b)})},resolvePathsInStylesheet:function(a){var b=p.nodeUrl(a);a.__resource=p.resolveCssText(a.__resource,b)},resolveStyleElts:function(a,b){var c=a.querySelectorAll("style");c&&q(c,function(a){a.textContent=p.resolveCssText(a.textContent,b)})},resolveCssText:function(a,b){return a.replace(/url\([^)]*\)/g,function(a){var c=a.replace(/["']/g,"").slice(4,-1);return c=p.resolveUrl(b,c,!0),"url("+c+")"})},resolveAttributes:function(a,b){var c=a&&a.querySelectorAll(n);c&&q(c,function(a){this.resolveNodeAttributes(a,b)},this)},resolveNodeAttributes:function(a,b){m.forEach(function(c){var d=a.attributes[c];if(d&&d.value&&d.value.search(o)<0){var e=p.resolveUrl(b,d.value,!0);d.value=e}})}};h=h||{async:!0,ok:function(a){return a.status>=200&&a.status<300||304===a.status||0===a.status},load:function(b,c,d){var e=new XMLHttpRequest;return(a.flags.debug||a.flags.bust)&&(b+="?"+Math.random()),e.open("GET",b,h.async),e.addEventListener("readystatechange",function(){4===e.readyState&&c.call(d,!h.ok(e)&&e,e.response,b)}),e.send(),e},loadDocument:function(a,b,c){this.load(a,b,c).responseType="document"}};var q=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.path=p,a.xhr=h,a.importer=k,a.getDocumentUrl=p.getDocumentUrl,a.IMPORT_LINK_TYPE=i}(window.HTMLImports),function(a){function b(a){return"link"===a.localName&&a.getAttribute("rel")===f}function c(a){return a.parentNode&&!d(a)&&!e(a)}function d(a){return a.ownerDocument===document||a.ownerDocument.impl===document}function e(a){return a.parentNode&&"element"===a.parentNode.localName}var f="import",g={selectors:["link[rel="+f+"]","link[rel=stylesheet]","style","script:not([type])",'script[type="text/javascript"]'],map:{link:"parseLink",script:"parseScript",style:"parseGeneric"},parse:function(a){if(!a.__importParsed){a.__importParsed=!0;var b=a.querySelectorAll(g.selectors);h(b,function(a){g[g.map[a.localName]](a)})}},parseLink:function(a){b(a)?a.content&&g.parse(a.content):this.parseGeneric(a)},parseGeneric:function(a){c(a)&&document.head.appendChild(a)},parseScript:function(b){if(c(b)){var d=(b.__resource||b.textContent).trim();if(d){var e=b.__nodeUrl;if(!e){var e=a.path.documentUrlFromNode(b),f="["+Math.floor(1e3*(Math.random()+1))+"]",g=d.match(/Polymer\(['"]([^'"]*)/);f=g&&g[1]||f,e+="/"+f+".js"}d+="\n//# sourceURL="+e+"\n",eval.call(window,d)}}}},h=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.parser=g}(HTMLImports),function(){function a(){HTMLImports.importer.load(document,function(){HTMLImports.parser.parse(document),HTMLImports.readyTime=(new Date).getTime(),document.dispatchEvent(new CustomEvent("HTMLImportsLoaded",{bubbles:!0}))})}"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState?a():window.addEventListener("DOMContentLoaded",a)}(),function(a){function b(a){u.push(a),t||(t=!0,q(d))}function c(a){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(a)||a}function d(){t=!1;var a=u;u=[],a.sort(function(a,b){return a.uid_-b.uid_});var b=!1;a.forEach(function(a){var c=a.takeRecords();e(a),c.length&&(a.callback_(c,a),b=!0)}),b&&d()}function e(a){a.nodes_.forEach(function(b){var c=p.get(b);c&&c.forEach(function(b){b.observer===a&&b.removeTransientObservers()})})}function f(a,b){for(var c=a;c;c=c.parentNode){var d=p.get(c);if(d)for(var e=0;e0){var e=c[d-1],f=n(e,a);if(f)return c[d-1]=f,void 0}else b(this.observer);c[d]=a},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(a){var b=this.options;b.attributes&&a.addEventListener("DOMAttrModified",this,!0),b.characterData&&a.addEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.addEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(a){var b=this.options;b.attributes&&a.removeEventListener("DOMAttrModified",this,!0),b.characterData&&a.removeEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.removeEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(a){if(a!==this.target){this.addListeners_(a),this.transientObservedNodes.push(a);var b=p.get(a);b||p.set(a,b=[]),b.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[],a.forEach(function(a){this.removeListeners_(a);for(var b=p.get(a),c=0;c1?logFlags.dom&&console.warn("inserted:",a.localName,"insert/remove count:",a.__inserted):a.insertedCallback&&(logFlags.dom&&console.log("inserted:",a.localName),a.insertedCallback())),logFlags.dom&&console.groupEnd())}function j(a){k(a),c(a,function(a){k(a)})}function k(a){(a.removedCallback||a.__upgraded__&&logFlags.dom)&&(logFlags.dom&&console.log("removed:",a.localName),l(a)||(a.__inserted=(a.__inserted||0)-1,a.__inserted>0&&(a.__inserted=0),a.__inserted<0?logFlags.dom&&console.warn("removed:",a.localName,"insert/remove count:",a.__inserted):a.removedCallback&&a.removedCallback()))}function l(a){for(var b=a;b;){if(b==a.ownerDocument)return!0;b=b.parentNode||b.host}}function m(a){a.webkitShadowRoot&&!a.webkitShadowRoot.__watched&&(logFlags.dom&&console.log("watching shadow-root for: ",a.localName),r(a.webkitShadowRoot),a.webkitShadowRoot.__watched=!0)}function n(a){m(a),c(a,function(){m(a)})}function o(a){switch(a.localName){case"style":case"script":case"template":case void 0:return!0}}function p(a){if(logFlags.dom){var b=a[0];if(b&&"childList"===b.type&&b.addedNodes&&b.addedNodes){for(var c=b.addedNodes[0];c&&c!==document&&!c.host;)c=c.parentNode;var d=c&&(c.URL||c._URL||c.host&&c.host.localName)||"";d=d.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",a.length,d||"")}a.forEach(function(a){"childList"===a.type&&(v(a.addedNodes,function(a){o(a)||f(a)}),v(a.removedNodes,function(a){o(a)||j(a)}))}),logFlags.dom&&console.groupEnd()}function q(){p(u.takeRecords()) -}function r(a){u.observe(a,{childList:!0,subtree:!0})}function s(a){r(a)}function t(a){logFlags.dom&&console.group("upgradeDocument: ",(a.URL||a._URL||"").split("/").pop()),f(a),logFlags.dom&&console.groupEnd()}var u=new MutationObserver(p),v=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.watchShadow=m,a.watchAllShadows=n,a.upgradeAll=f,a.upgradeSubtree=e,a.observeDocument=s,a.upgradeDocument=t,a.takeRecords=q}(window.CustomElements),function(){function parseElementElement(a){var b={name:"","extends":null};takeAttributes(a,b);var c=HTMLElement.prototype;if(b.extends){var d=document.createElement(b.extends);c=d.__proto__||Object.getPrototypeOf(d)}b.prototype=Object.create(c),a.options=b;var e=a.querySelector('script:not([type]),script[type="text/javascript"],scripts');e&&executeComponentScript(e.textContent,a,b.name);var f=document.register(b.name,b);a.ctor=f;var g=a.getAttribute("constructor");g&&(window[g]=f)}function takeAttributes(a,b){for(var c in b){var d=a.attributes[c];d&&(b[c]=d.value)}}function executeComponentScript(inScript,inContext,inName){context=inContext;var owner=context.ownerDocument,url=owner._URL||owner.URL||owner.impl&&(owner.impl._URL||owner.impl.URL),match=url.match(/.*\/([^.]*)[.]?.*$/);if(match){var name=match[1];url+=name!=inName?":"+inName:""}var code="__componentScript('"+inName+"', function(){"+inScript+"});"+"\n//# sourceURL="+url+"\n";eval(code)}function mixin(a,b){a=a||{};try{Object.getOwnPropertyNames(b).forEach(function(c){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)})}catch(c){}return a}var HTMLElementElement=function(a){return a.register=HTMLElementElement.prototype.register,parseElementElement(a),a};HTMLElementElement.prototype={register:function(a){a&&(this.options.lifecycle=a.lifecycle,a.prototype&&mixin(this.options.prototype,a.prototype))}};var context;window.__componentScript=function(a,b){b.call(context)},window.HTMLElementElement=HTMLElementElement}(),function(){function a(a){return"link"===a.localName&&a.getAttribute("rel")===b}var b=window.HTMLImports?HTMLImports.IMPORT_LINK_TYPE:"none",c={selectors:["link[rel="+b+"]","element"],map:{link:"parseLink",element:"parseElement"},parse:function(a){if(!a.__parsed){a.__parsed=!0;var b=a.querySelectorAll(c.selectors);d(b,function(a){c[c.map[a.localName]](a)}),CustomElements.upgradeDocument(a),CustomElements.observeDocument(a)}},parseLink:function(b){a(b)&&this.parseImport(b)},parseImport:function(a){a.content&&c.parse(a.content)},parseElement:function(a){new HTMLElementElement(a)}},d=Array.prototype.forEach.call.bind(Array.prototype.forEach);CustomElements.parser=c}(),function(){function a(){setTimeout(function(){CustomElements.parser.parse(document),CustomElements.upgradeDocument(document),CustomElements.ready=!0,CustomElements.readyTime=Date.now(),window.HTMLImports&&(CustomElements.elapsed=CustomElements.readyTime-HTMLImports.readyTime),document.body.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))},0)}if("function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState)a();else{var b=window.HTMLImports?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(b,a)}}(),function(){function a(){}var b=document.createElement("style");b.textContent="element {display: none !important;} /* injected by platform.js */";var c=document.querySelector("head");if(c.insertBefore(b,c.firstChild),window.ShadowDOMPolyfill){CustomElements.watchShadow=a,CustomElements.watchAllShadows=a;var d=["upgradeAll","upgradeSubtree","observeDocument","upgradeDocument"],e={};d.forEach(function(a){e[a]=CustomElements[a]}),d.forEach(function(a){CustomElements[a]=function(b){return e[a](wrap(b))}})}}(),function(a){a=a||{};var b={shadow:function(a){return a?a.shadowRoot||a.webkitShadowRoot:void 0},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);return this.canTarget(b)?b:void 0},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d}e=this.olderShadow(e)}return f}},owner:function(a){for(var b=a;b.parentNode;)b=b.parentNode;return b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);return d.elementFromPoint(b,c)||(d=document),this.searchRoot(document,b,c)}};a.targetFinding=b,a.findTarget=b.findTarget.bind(b),window.PointerEventsPolyfill=a}(window.PointerEventsPolyfill),function(){function a(a){return'[touch-action="'+a+'"]'}function b(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}var c=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],d="";c.forEach(function(c){d+=String(c)===c?a(c)+b(c):c.selectors.map(a)+b(c.rule)});var e=document.createElement("style");e.textContent=d;var f=document.querySelector("head");f.insertBefore(e,f.firstChild)}(),function(a){function b(a,b){var b=b||{},e=b.buttons;if(void 0===e)switch(b.which){case 1:e=1;break;case 2:e=4;break;case 3:e=2;break;default:e=0}var f;if(c)f=new MouseEvent(a,b);else{f=document.createEvent("MouseEvent");var g={bubbles:!1,cancelable:!1,view:null,detail:null,screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null};Object.keys(g).forEach(function(a){a in b&&(g[a]=b[a])}),f.initMouseEvent(a,g.bubbles,g.cancelable,g.view,g.detail,g.screenX,g.screenY,g.clientX,g.clientY,g.ctrlKey,g.altKey,g.shiftKey,g.metaKey,g.button,g.relatedTarget)}d||Object.defineProperty(f,"buttons",{get:function(){return e},enumerable:!0});var h=0;return h=b.pressure?b.pressure:e?.5:0,Object.defineProperties(f,{pointerId:{value:b.pointerId||0,enumerable:!0},width:{value:b.width||0,enumerable:!0},height:{value:b.height||0,enumerable:!0},pressure:{value:h,enumerable:!0},tiltX:{value:b.tiltX||0,enumerable:!0},tiltY:{value:b.tiltY||0,enumerable:!0},pointerType:{value:b.pointerType||"",enumerable:!0},hwTimestamp:{value:b.hwTimestamp||0,enumerable:!0},isPrimary:{value:b.isPrimary||!1,enumerable:!0}}),f}var c=!1,d=!1;try{var e=new MouseEvent("click",{buttons:1});c=!0,d=1===e.buttons}catch(f){}a.PointerEvent||(a.PointerEvent=b)}(window),function(a){function b(){this.ids=[],this.pointers=[]}b.prototype={set:function(a,b){var c=this.ids.indexOf(a);c>-1?this.pointers[c]=b:(this.ids.push(a),this.pointers.push(b))},has:function(a){return this.ids.indexOf(a)>-1},"delete":function(a){var b=this.ids.indexOf(a);b>-1&&(this.ids.splice(b,1),this.pointers.splice(b,1))},get:function(a){var b=this.ids.indexOf(a);return this.pointers[b]},get size(){return this.pointers.length},clear:function(){this.ids.length=0,this.pointers.length=0},forEach:function(a,b){this.ids.forEach(function(c,d){a.call(b,c,this.pointers[d],this)},this)}},a.PointerMap=window.Map&&Map.prototype.forEach?Map:b}(window.PointerEventsPolyfill),function(a){var b;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0)b=WeakMap;else{var c=Object.defineProperty,d=Object.hasOwnProperty,e=(new Date).getTime()%1e9;b=function(){this.name="__st"+(1e9*Math.random()>>>0)+(e++ +"__")},b.prototype={set:function(a,b){c(a,this.name,{value:b,writable:!0})},get:function(a){return d.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}a.SideTable=b}(window.PointerEventsPolyfill),function(a){var b={targets:new a.SideTable,handledEvents:new a.SideTable,pointermap:new a.PointerMap,eventMap:{},eventSources:{},eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.unregister.call(b,a)},down:function(a){this.fireEvent("pointerdown",a)},move:function(a){this.fireEvent("pointermove",a)},up:function(a){this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){this.fireEvent("pointercancel",a)},leaveOut:function(a){a.target.contains(a.relatedTarget)||this.leave(a),this.out(a)},enterOver:function(a){a.target.contains(a.relatedTarget)||this.enter(a),this.over(a)},eventHandler:function(a){if(!this.handledEvents.get(a)){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),this.handledEvents.set(a,!0)}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(a,b){var c=new PointerEvent(a,b);return this.targets.set(c,this.targets.get(b)||b.target),c},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){var b={};for(var c in a)b[c]=a[c];return b},getTarget:function(a){return this.captureInfo&&this.captureInfo.id===a.pointerId?this.captureInfo.target:this.targets.get(a)},setCapture:function(a,b){this.captureInfo&&this.releaseCapture(this.captureInfo.id),this.captureInfo={id:a,target:b};var c=new PointerEvent("gotpointercapture",{bubbles:!0});this.implicitRelease=this.releaseCapture.bind(this,a),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease),this.targets.set(c,b),this.asyncDispatchEvent(c)},releaseCapture:function(a){if(this.captureInfo&&this.captureInfo.id===a){var b=new PointerEvent("lostpointercapture",{bubbles:!0}),c=this.captureInfo.target;this.captureInfo=null,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease),this.targets.set(b,c),this.asyncDispatchEvent(b)}},dispatchEvent:function(a){var b=this.getTarget(a);return b?b.dispatchEvent(a):void 0},asyncDispatchEvent:function(a){setTimeout(this.dispatchEvent.bind(this,a),0)}};b.boundHandler=b.eventHandler.bind(b),a.dispatcher=b,a.register=b.register.bind(b),a.unregister=b.unregister.bind(b)}(window.PointerEventsPolyfill),function(a){function b(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),g&&(this.observer=new g(this.mutationWatcher.bind(this)))}var c=Array.prototype.forEach.call.bind(Array.prototype.forEach),d=Array.prototype.map.call.bind(Array.prototype.map),e=Array.prototype.slice.call.bind(Array.prototype.slice),f=Array.prototype.filter.call.bind(Array.prototype.filter),g=window.MutationObserver||window.WebKitMutationObserver,h="[touch-action]",i={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};b.prototype={watchSubtree:function(b){a.targetFinding.canTarget(b)&&this.observer.observe(b,i)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){c(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(h):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(e(b))},installOnLoad:function(){document.addEventListener("DOMContentLoaded",this.installNewSubtree.bind(this,document))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){var b=d(a,this.findElements,this);return b.push(f(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}},g||(b.prototype.watchSubtree=function(){console.warn("PointerEventsPolyfill: MutationObservers not found, touch-action will not be dynamically detected")}),a.Installer=b}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher,c=b.pointermap,d=25,e={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},lastTouches:[],isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,e=a.clientX,f=a.clientY,g=0,h=c.length;h>g&&(b=c[g]);g++){var i=Math.abs(e-b.x),j=Math.abs(f-b.y);if(d>=i&&d>=j)return!0}},prepareEvent:function(a){var c=b.cloneEvent(a);return c.pointerId=this.POINTER_ID,c.isPrimary=!0,c.pointerType=this.POINTER_TYPE,c},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=c.has(this.POINTER_ID);d&&this.cancel(a);var e=this.prepareEvent(a);c.set(this.POINTER_ID,a),b.down(e)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.move(c)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=c.get(this.POINTER_ID);if(d&&d.button===a.button){var e=this.prepareEvent(a);b.up(e),this.cleanupMouse()}}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.enterOver(c)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.leaveOut(c)}},cancel:function(a){var c=this.prepareEvent(a);b.cancel(c),this.cleanupMouse()},cleanupMouse:function(){c.delete(this.POINTER_ID)}};a.mouseEvents=e}(window.PointerEventsPolyfill),function(a){var b,c=a.dispatcher,d=a.findTarget,e=a.targetFinding.allShadows.bind(a.targetFinding),f=c.pointermap,g=Array.prototype.map.call.bind(Array.prototype.map),h=2500,i="touch-action",j="string"==typeof document.head.style.touchAction,k={scrollType:new a.SideTable,events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){j?c.listen(a,this.events):b.enableOnSubtree(a)},unregister:function(a){j&&c.unlisten(a,this.events)},elementAdded:function(a){var b=a.getAttribute(i),d=this.touchActionToScrollType(b);d&&(this.scrollType.set(a,d),c.listen(a,this.events),e(a).forEach(function(a){this.scrollType.set(a,d),c.listen(a,this.events)},this))},elementRemoved:function(a){this.scrollType.delete(a),c.unlisten(a,this.events),e(a).forEach(function(a){this.scrollType.delete(a),c.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(i),d=this.touchActiontoScrollType(c),f=this.touchActionToScrollType(b);d&&f?(this.scrollType.set(a,d),e(a).forEach(function(a){this.scrollType.set(a,d)},this)):f?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){null===this.firstTouch&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1)},removePrimaryTouch:function(a){this.isPrimaryTouch(a)&&(this.firstTouch=null,this.firstXY=null)},touchToPointer:function(a){var b=c.cloneEvent(a);return b.pointerId=a.identifier+2,b.target=d(b),b.bubbles=!0,b.cancelable=!0,b.button=0,b.buttons=1,b.width=a.webkitRadiusX||a.radiusX||0,b.height=a.webkitRadiusY||a.radiusY||0,b.pressure=a.webkitForce||a.force||.5,b.isPrimary=this.isPrimaryTouch(a),b.pointerType=this.POINTER_TYPE,b},processTouches:function(a,b){var c=a.changedTouches,d=g(c,this.touchToPointer,this);d.forEach(b,this)},shouldScroll:function(a){if(this.firstXY){var b,c=this.scrollType.get(a.currentTarget);if("none"===c)b=!1;else if("XY"===c)b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)if(c.identifier===b)return!0},vacuumTouches:function(a){var b=a.touches;if(f.size>=b.length){var c=[];f.forEach(function(a,d){if(1!==a&&!this.findTouch(b,a-2)){var e=d.out;c.push(this.touchToPointer(e))}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||this.processTouches(a,this.overDown)},overDown:function(a){f.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),c.over(a),c.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,d=f.get(b.pointerId);if(d){var e=d.out,g=d.outTarget;c.move(b),e&&g!==b.target&&(e.relatedTarget=b.target,b.relatedTarget=g,e.target=g,b.target?(c.leaveOut(e),c.enterOver(b)):(b.target=g,b.relatedTarget=null,this.cancelOut(b))),d.out=b,d.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(c.up(a),c.out(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){c.cancel(a),c.out(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){f.delete(a.pointerId),this.removePrimaryTouch(a)},dedupSynthMouse:function(b){var c=a.mouseEvents.lastTouches,d=b.changedTouches[0];if(this.isPrimaryTouch(d)){var e={x:d.clientX,y:d.clientY};c.push(e);var f=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,c,e);setTimeout(f,h)}}};j||(b=new a.Installer(k.elementAdded,k.elementRemoved,k.elementChanged,k)),a.touchEvents=k}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher,c=b.pointermap,d=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,e={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var c=a;return d&&(c=b.cloneEvent(a),c.pointerType=this.POINTER_TYPES[a.pointerType]),c},cleanup:function(a){c.delete(a)},MSPointerDown:function(a){c.set(a.pointerId,a);var d=this.prepareEvent(a);b.down(d)},MSPointerMove:function(a){var c=this.prepareEvent(a);b.move(c)},MSPointerUp:function(a){var c=this.prepareEvent(a);b.up(c),this.cleanup(a.pointerId)},MSPointerOut:function(a){var c=this.prepareEvent(a);b.leaveOut(c)},MSPointerOver:function(a){var c=this.prepareEvent(a);b.enterOver(c)},MSPointerCancel:function(a){var c=this.prepareEvent(a);b.cancel(c),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var c=b.makeEvent("lostpointercapture",a);b.dispatchEvent(c)},MSGotPointerCapture:function(a){var c=b.makeEvent("gotpointercapture",a);b.dispatchEvent(c)}};a.msEvents=e}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher;if(void 0===window.navigator.pointerEnabled){if(Object.defineProperty(window.navigator,"pointerEnabled",{value:!0,enumerable:!0}),window.navigator.msPointerEnabled){var c=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:c,enumerable:!0}),b.registerSource("ms",a.msEvents)}else b.registerSource("mouse",a.mouseEvents),void 0!==window.ontouchstart&&b.registerSource("touch",a.touchEvents);b.register(document)}}(window.PointerEventsPolyfill),function(a){function b(a){if(!e.pointermap.has(a))throw new Error("InvalidPointerId")}var c,d,e=a.dispatcher,f=window.navigator;f.msPointerEnabled?(c=function(a){b(a),this.msSetPointerCapture(a)},d=function(a){b(a),this.msReleasePointerCapture(a)}):(c=function(a){b(a),e.setCapture(a,this)},d=function(a){b(a),e.releaseCapture(a,this)}),Element.prototype.setPointerCapture||Object.defineProperties(Element.prototype,{setPointerCapture:{value:c},releasePointerCapture:{value:d}})}(window.PointerEventsPolyfill),PointerGestureEvent.prototype.preventTap=function(){this.tapPrevented=!0},function(a){a=a||{},a.utils={LCA:{find:function(a,b){if(a===b)return a;if(a.contains){if(a.contains(b))return a;if(b.contains(a))return b}var c=this.depth(a),d=this.depth(b),e=c-d;for(e>0?a=this.walk(a,e):b=this.walk(b,-e);a&&b&&a!==b;)a=this.walk(a,1),b=this.walk(b,1);return a},walk:function(a,b){for(var c=0;b>c;c++)a=a.parentNode;return a},depth:function(a){for(var b=0;a;)b++,a=a.parentNode;return b}}},a.findLCA=function(b,c){return a.utils.LCA.find(b,c)},window.PointerGestures=a}(window.PointerGestures),function(a){var b;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0)b=WeakMap;else{var c=Object.defineProperty,d=Object.hasOwnProperty,e=(new Date).getTime()%1e9;b=function(){this.name="__st"+(1e9*Math.random()>>>0)+(e++ +"__")},b.prototype={set:function(a,b){c(a,this.name,{value:b,writable:!0})},get:function(a){return d.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}a.SideTable=b}(window.PointerGestures),function(a){function b(){this.ids=[],this.pointers=[]}b.prototype={set:function(a,b){var c=this.ids.indexOf(a);c>-1?this.pointers[c]=b:(this.ids.push(a),this.pointers.push(b))},has:function(a){return this.ids.indexOf(a)>-1},"delete":function(a){var b=this.ids.indexOf(a);b>-1&&(this.ids.splice(b,1),this.pointers.splice(b,1))},get:function(a){var b=this.ids.indexOf(a);return this.pointers[b]},get size(){return this.pointers.length},clear:function(){this.ids.length=0,this.pointers.length=0}},window.Map&&(b=window.Map),a.PointerMap=b}(window.PointerGestures),function(a){var b={handledEvents:new a.SideTable,targets:new a.SideTable,handlers:{},recognizers:{},events:["pointerdown","pointermove","pointerup","pointerover","pointerout","pointercancel"],registerRecognizer:function(a,b){var c=b;this.recognizers[a]=c,this.events.forEach(function(a){if(c[a]){var b=c[a].bind(c);this.addHandler(a,b)}},this)},addHandler:function(a,b){var c=a;this.handlers[c]||(this.handlers[c]=[]),this.handlers[c].push(b)},registerTarget:function(a){this.listen(this.events,a)},unregisterTarget:function(a){this.unlisten(this.events,a)},eventHandler:function(a){if(!this.handledEvents.get(a)){var b,c=a.type;(b=this.handlers[c])&&this.makeQueue(b,a),this.handledEvents.set(a,!0)}},makeQueue:function(a,b){var c=this.cloneEvent(b);setTimeout(this.runQueue.bind(this,a,c),0)},runQueue:function(a,b){this.currentPointerId=b.pointerId;for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)c(b);this.currentPointerId=0},listen:function(a,b){a.forEach(function(a){this.addEvent(a,this.boundHandler,!1,b)},this)},unlisten:function(a){a.forEach(function(a){this.removeEvent(a,this.boundHandler,!1,inTarget)},this)},addEvent:function(a,b,c,d){d.addEventListener(a,b,c)},removeEvent:function(a,b,c,d){d.removeEventListener(a,b,c)},makeEvent:function(a,b){return new PointerGestureEvent(a,b)},cloneEvent:function(a){var b={};for(var c in a)b[c]=a[c];return b},dispatchEvent:function(a,b){var c=b||this.targets.get(a);c&&(c.dispatchEvent(a),a.tapPrevented&&this.preventTap(this.currentPointerId))},asyncDispatchEvent:function(a,b){var c=function(){this.dispatchEvent(a,b)}.bind(this);setTimeout(c,0)},preventTap:function(a){var b=this.recognizers.tap;b&&b.preventTap(a)}};b.boundHandler=b.eventHandler.bind(b),a.dispatcher=b,a.register=function(b){var c=window.PointerEventsPolyfill;c&&c.register(b),a.dispatcher.registerTarget(b)},b.registerTarget(document)}(window.PointerGestures),function(a){var b=a.dispatcher,c={HOLD_DELAY:200,WIGGLE_THRESHOLD:16,events:["pointerdown","pointermove","pointerup","pointercancel"],heldPointer:null,holdJob:null,pulse:function(){var a=Date.now()-this.heldPointer.timeStamp,b=this.held?"holdpulse":"hold";this.fireHold(b,a),this.held=!0},cancel:function(){clearInterval(this.holdJob),this.held&&this.fireHold("release"),this.held=!1,this.heldPointer=null,this.target=null,this.holdJob=null},pointerdown:function(a){a.isPrimary&&!this.heldPointer&&(this.heldPointer=a,this.target=a.target,this.holdJob=setInterval(this.pulse.bind(this),this.HOLD_DELAY))},pointerup:function(a){this.heldPointer&&this.heldPointer.pointerId===a.pointerId&&this.cancel()},pointercancel:function(){this.cancel()},pointermove:function(a){if(this.heldPointer&&this.heldPointer.pointerId===a.pointerId){var b=a.clientX-this.heldPointer.clientX,c=a.clientY-this.heldPointer.clientY;b*b+c*c>this.WIGGLE_THRESHOLD&&this.cancel()}},fireHold:function(a,c){var d={pointerType:this.heldPointer.pointerType};c&&(d.holdTime=c);var e=b.makeEvent(a,d);b.dispatchEvent(e,this.target),e.tapPrevented&&b.preventTap(this.heldPointer.pointerId)}};b.registerRecognizer("hold",c)}(window.PointerGestures),function(a){var b=a.dispatcher,c=new a.PointerMap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],WIGGLE_THRESHOLD:4,clampDir:function(a){return a>0?1:-1},calcPositionDelta:function(a,b){var c=0,d=0;return a&&b&&(c=b.pageX-a.pageX,d=b.pageY-a.pageY),{x:c,y:d}},fireTrack:function(a,c,d){var e=d,f=this.calcPositionDelta(e.downEvent,c),g=this.calcPositionDelta(e.lastMoveEvent,c);g.x&&(e.xDirection=this.clampDir(g.x)),g.y&&(e.yDirection=this.clampDir(g.y));var h={dx:f.x,dy:f.y,ddx:g.x,ddy:g.y,clientX:c.clientX,clientY:c.clientY,pageX:c.pageX,pageY:c.pageY,screenX:c.screenX,screenY:c.screenY,xDirection:e.xDirection,yDirection:e.yDirection,trackInfo:e.trackInfo,pointerType:c.pointerType};"trackend"===a&&(h._releaseTarget=c.target);var i=b.makeEvent(a,h);e.lastMoveEvent=c,b.dispatchEvent(i,e.downTarget)},pointerdown:function(a){if(a.isPrimary&&("mouse"===a.pointerType?1===a.buttons:!0)){var b={downEvent:a,downTarget:a.target,trackInfo:{},lastMoveEvent:null,xDirection:0,yDirection:0,tracking:!1};c.set(a.pointerId,b)}},pointermove:function(a){var b=c.get(a.pointerId);if(b)if(b.tracking)this.fireTrack("track",a,b);else{var d=this.calcPositionDelta(b.downEvent,a),e=d.x*d.x+d.y*d.y;e>this.WIGGLE_THRESHOLD&&(b.tracking=!0,this.fireTrack("trackstart",b.downEvent,b),this.fireTrack("track",a,b))}},pointerup:function(a){var b=c.get(a.pointerId);b&&(b.tracking&&this.fireTrack("trackend",a,b),c.delete(a.pointerId))},pointercancel:function(a){this.pointerup(a)}};b.registerRecognizer("track",d)}(window.PointerGestures),function(a){var b=a.dispatcher,c={MIN_VELOCITY:.5,MAX_QUEUE:4,moveQueue:[],target:null,pointerId:null,events:["pointerdown","pointermove","pointerup","pointercancel"],pointerdown:function(a){a.isPrimary&&!this.pointerId&&(this.pointerId=a.pointerId,this.target=a.target,this.addMove(a))},pointermove:function(a){a.pointerId===this.pointerId&&this.addMove(a)},pointerup:function(a){a.pointerId===this.pointerId&&this.fireFlick(a),this.cleanup()},pointercancel:function(){this.cleanup()},cleanup:function(){this.moveQueue=[],this.target=null,this.pointerId=null},addMove:function(a){this.moveQueue.length>=this.MAX_QUEUE&&this.moveQueue.shift(),this.moveQueue.push(a)},fireFlick:function(a){for(var c,d,e,f,g,h,i,j=a,k=this.moveQueue.length,l=0,m=0,n=0,o=0;k>o&&(i=this.moveQueue[o]);o++)c=j.timeStamp-i.timeStamp,d=j.clientX-i.clientX,e=j.clientY-i.clientY,f=d/c,g=e/c,h=Math.sqrt(f*f+g*g),h>n&&(l=f,m=g,n=h);var p=Math.abs(l)>Math.abs(m)?"x":"y",q=this.calcAngle(l,m);if(Math.abs(n)>=this.MIN_VELOCITY){var r=b.makeEvent("flick",{xVelocity:l,yVelocity:m,velocity:n,angle:q,majorAxis:p,pointerType:a.pointerType});b.dispatchEvent(r,this.target)}},calcAngle:function(a,b){return 180*Math.atan2(b,a)/Math.PI}};b.registerRecognizer("flick",c)}(window.PointerGestures),function(a){var b=a.dispatcher,c=new a.PointerMap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],pointerdown:function(a){a.isPrimary&&!a.tapPrevented&&c.set(a.pointerId,{target:a.target,x:a.clientX,y:a.clientY})},pointermove:function(a){if(a.isPrimary){var b=c.get(a.pointerId);b&&a.tapPrevented&&c.delete(a.pointerId)}},pointerup:function(d){var e=c.get(d.pointerId);if(e&&!d.tapPrevented){var f=a.findLCA(e.target,d.target);if(f){var g=b.makeEvent("tap",{x:d.clientX,y:d.clientY,pointerType:d.pointerType});b.dispatchEvent(g,f)}}c.delete(d.pointerId)},pointercancel:function(a){c.delete(a.pointerId)},preventTap:function(a){c.delete(a)}};b.registerRecognizer("tap",d)}(window.PointerGestures),Polymer={},function(){var a=document.createElement("style");a.textContent="body {opacity: 0;}";var b=document.querySelector("head");b.insertBefore(a,b.firstChild),window.addEventListener("WebComponentsReady",function(){document.body.style.webkitTransition="opacity 0.3s",document.body.style.opacity=1})}(Polymer),function(a){var b=Array.prototype.forEach.call.bind(Array.prototype.forEach),c=Array.prototype.concat.call.bind(Array.prototype.concat),d=Array.prototype.slice.call.bind(Array.prototype.slice),e={hostRuleRe:/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,selectorRe:/([^{]*)({[\s\S]*?})/gim,hostElementRe:/(.*)((?:\*)|(?:\:scope))(.*)/,hostFixableRe:/^[.\[:]/,cssCommentRe:/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,cssPolyfillCommentRe:/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,cssPseudoRe:/::(x-[^\s{,(]*)/gim,selectorReSuffix:"([>\\s~+[.,{:][\\s\\S]*)?$",hostRe:/@host/gim,cache:{},shimStyling:function(a){if(window.ShadowDOMPolyfill&&a){var b=a.getAttribute("name");e.cacheDefinition(a),e.shimPolyfillDirectives(a.styles,b),Polymer.strictPolyfillStyling&&e.applyScopeToContent(a.templateContent(),b),e.applyShimming(e.stylesForElement(a),b)}},shimShadowDOMStyling:function(a,b){window.ShadowDOMPolyfill&&(e.shimPolyfillDirectives(a,b),e.applyShimming(a,b))},applyShimming:function(a,b){var c=this.shimAtHost(a,b);c+=this.shimScoping(a,b),this.addCssToDocument(c)},cacheDefinition:function(a){var b=a.getAttribute("name"),c=a.templateContent(),f=c&&c.querySelectorAll("style");a.styles=f?d(f):[],e.cache[b]=a},applyScopeToContent:function(a,c){a&&(b(a.querySelectorAll("*"),function(a){a.setAttribute(c,"")}),b(a.querySelectorAll("template"),function(a){this.applyScopeToContent(templateContent(a),c)},this))},stylesForElement:function(a){var b=a.styles,e=a.templateContent(),f=e&&e.querySelector("shadow");if(f||null===e){var g=this.findExtendee(a.getAttribute("name"));if(g){var h=this.stylesForElement(g);b=c(d(h),d(b))}}return b},findExtendee:function(a){var b=this.cache[a];return b&&this.cache[b.getAttribute("extends")]},shimPolyfillDirectives:function(a,c){window.ShadowDOMPolyfill&&a&&b(a,function(a){a.textContent=this.convertPolyfillDirectives(a.textContent,c)},this)},shimAtHost:function(a,b){return a?this.convertAtHostStyles(a,b):void 0},shimScoping:function(a,b){return a?this.convertScopedStyles(a,b):void 0},convertPolyfillDirectives:function(a,b){for(var c,d,e="",f=0;c=this.cssPolyfillCommentRe.exec(a);)e+=a.substring(f,c.index),d=c[1].slice(0,-2).replace(this.hostRe,b),e+=this.scopeSelector(d,b)+"{",f=this.cssPolyfillCommentRe.lastIndex;return e+=a.substring(f,a.length)},findAtHostRules:function(a,b){return Array.prototype.filter.call(a,this.isHostRule.bind(this,b))},isHostRule:function(a,b){return b.selectorText&&b.selectorText.match(a)||b.cssRules&&this.findAtHostRules(b.cssRules,a).length||b.type==CSSRule.WEBKIT_KEYFRAMES_RULE},convertAtHostStyles:function(a,b){for(var c,d=this.stylesToCssText(a),e="",f=0;c=this.hostRuleRe.exec(d);)e+=d.substring(f,c.index),e+=this.scopeHostCss(c[1],b),f=this.hostRuleRe.lastIndex; -e+=d.substring(f,d.length);var g=new RegExp("^"+b+this.selectorReSuffix,"m"),d=this.rulesToCss(this.findAtHostRules(this.cssToRules(e),g));return d},scopeHostCss:function(a,b){for(var c,d="";c=this.selectorRe.exec(a);)d+=this.scopeHostSelector(c[1],b)+" "+c[2]+"\n ";return d},scopeHostSelector:function(a,b){var c=[],d=a.split(","),e="[is="+b+"]";return d.forEach(function(a){a=a.trim(),a.match(this.hostElementRe)?a=a.replace(this.hostElementRe,b+"$1$3, "+e+"$1$3"):a.match(this.hostFixableRe)&&(a=b+a+", "+e+a),c.push(a)},this),c.join(", ")},convertScopedStyles:function(a,c){b(a,function(a){a.parentNode&&a.parentNode.removeChild(a)});var d=this.stylesToCssText(a).replace(this.hostRuleRe,"");d=this.convertPseudos(d);var e=this.cssToRules(d);return d=this.scopeRules(e,c)},convertPseudos:function(a){return a.replace(this.cssPseudoRe," [pseudo=$1]")},scopeRules:function(a,c){var d="";return b(a,function(a){a.selectorText&&a.style&&a.style.cssText?(d+=this.scopeSelector(a.selectorText,c,Polymer.strictPolyfillStyling)+" {\n ",d+=this.propertiesFromRule(a)+"\n}\n\n"):a.media?(d+="@media "+a.media.mediaText+" {\n",d+=this.scopeRules(a.cssRules,c),d+="\n}\n\n"):a.cssText&&(d+=a.cssText+"\n\n")},this),d},propertiesFromRule:function(a){var b=a.style.cssText;return a.style.content&&!a.style.content.match(/['"]+/)&&(b="content: '"+a.style.content+"';\n"+a.style.cssText.replace(/content:[^;]*;/g,"")),b},selectorNeedsScoping:function(a,b){var c="("+b+"|\\[is="+b+"\\])",d=new RegExp("^"+c+this.selectorReSuffix,"m");return!a.match(d)},scopeSelector:function(a,b,c){var d=[],e=a.split(",");return e.forEach(function(a){a=a.trim(),this.selectorNeedsScoping(a,b)&&(a=c?this.applyStrictSelectorScope(a,b):this.applySimpleSelectorScope(a,b)),d.push(a)},this),d.join(", ")},applySimpleSelectorScope:function(a,b){return b+" "+a+", "+"[is="+b+"] "+a},applyStrictSelectorScope:function(a,b){var c=[" ",">","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim();return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},stylesToCssText:function(a,c){var d="";return b(a,function(a){d+=a.textContent+"\n\n"}),c||(d=this.stripCssComments(d)),d},stripCssComments:function(a){return a.replace(this.cssCommentRe,"")},cssToRules:function(a){var b=document.createElement("style");b.textContent=a,document.head.appendChild(b);var c=b.sheet.cssRules;return b.parentNode.removeChild(b),c},rulesToCss:function(a){for(var b=0,c=[];be&&(c=d[e]);e++){var g=Object.getOwnPropertyDescriptor(b,c);if(g.value==a)return c}b=b.__proto__}}a.super=b}(Polymer),function(a){var b={};b.declaration={},b.instance={},a.api=b}(Polymer),function(a){var b={async:function(a,b,c){Platform.flush(),b=b&&b.length?b:[b];var d=function(){(this[a]||a).apply(this,b)}.bind(this);return c?setTimeout(d,c):requestAnimationFrame(d)},fire:function(a,b,c,d){var e=c||this;return e.dispatchEvent(new CustomEvent(a,{bubbles:void 0!==d?!1:!0,detail:b})),b},asyncFire:function(){this.asyncMethod("fire",arguments)},classFollows:function(a,b,c){b&&b.classList.remove(c),a&&a.classList.add(c)}};b.asyncMethod=b.async,a.api.instance.utils=b}(Polymer),function(a){function b(a,b){b.cancelBubble||(b.on=i+b.type,h.events&&console.group("[%s]: listenLocal [%s]",a.localName,b.on),!b.path||window.ShadowDOMPolyfill?d(a,b):c(a,b),h.events&&console.groupEnd())}function c(a,b){var c=null;Array.prototype.some.call(b.path,function(d){return d===a?!0:(c=c===a?c:e(d),c&&f(c,d,b)?!0:void 0)},this)}function d(a,b){h.events&&console.log("event.path() not supported for",b.type);for(var c=b.target,d=null;c&&c!=a;){if(d=d===a?d:e(c),d&&f(d,c,b))return!0;c=c.parentNode}}function e(a){for(;a.parentNode;)a=a.parentNode;return a.host}function f(a,b,c){var d=b.getAttribute&&b.getAttribute(c.on);return d&&g(b,c)&&(h.events&&console.log("[%s] found handler name [%s]",a.localName,d),a.dispatchMethod(b,d,[c,c.detail,b])),c.cancelBubble}function g(a,b){var c=l.get(b);return c||l.set(b,c=[]),c.indexOf(a)<0?(c.push(a),!0):void 0}var h=window.logFlags||{},i="on-",j="eventDelegates",k={EVENT_PREFIX:i,DELEGATES:j,addHostListeners:function(){var a=this[j];h.events&&Object.keys(a).length>0&&console.log("[%s] addHostListeners:",this.localName,a),this.addNodeListeners(this,a,this.hostEventListener)},addInstanceListeners:function(a,b){var c=b.delegates;c&&(h.events&&Object.keys(c).length>0&&console.log("[%s:root] addInstanceListeners:",this.localName,c),this.addNodeListeners(a,c,this.instanceEventListener))},addNodeListeners:function(a,b,c){var d;for(var e in b)d||(d=c.bind(this)),a.addEventListener(e,d)},hostEventListener:function(a){if(!a.cancelBubble){h.events&&console.group("[%s]: hostEventListener(%s)",this.localName,a.type);var b=this.findEventDelegate(a);b&&(h.events&&console.log("[%s] found host handler name [%s]",this.localName,b),this.dispatchMethod(this,b,[a,a.detail,this])),h.events&&console.groupEnd()}},findEventDelegate:function(a){return this[j][a.type]},dispatchMethod:function(a,b,c){if(a){h.events&&console.group("[%s] dispatch [%s]",a.localName,b);var d=this[b];d&&d[c?"apply":"call"](this,c),h.events&&console.groupEnd()}},instanceEventListener:function(a){b(this,a)}},l=new SideTable("handledList");a.api.instance.events=k}(Polymer),function(a){function b(a,b){var c=this[a]||a;"function"==typeof c&&c.apply(this,b)}function c(a,b,c,d){h.bind&&console.log(n,c.localName||"object",d,a.localName,b);var e=PathObserver.getValueAtPath(c,d);return(null===e||void 0===e)&&PathObserver.setValueAtPath(c,d,a[b]),PathObserver.defineProperty(a,b,{object:c,path:d})}function d(a,b,c){var d=g(a);d[b]=c}function e(a,b){var c=g(a);return c&&c[b]?(c[b].close(),c[b]=null,!0):void 0}function f(a){var b=g(a);Object.keys(b).forEach(function(a){b[a].close(),b[a]=null})}function g(a){var b=k.get(a);return b||k.set(a,b={}),b}var h=window.logFlags||{},i="Changed",j={observeProperties:function(){for(var a,b=this.getCustomPropertyNames(),c=0,d=b.length;d>c&&(a=b[c]);c++)this.observeProperty(a)},getCustomPropertyNames:function(){return this.customPropertyNames},observeProperty:function(a){if(this.shouldObserveProperty(a)){h.watch&&console.log(l,this.localName,a);var b=function(b,c){h.watch&&console.log(m,this.localName,this.id||"",a,this[a],c),this.dispatchPropertyChange(a,c)}.bind(this),c=new PathObserver(this,a,b);d(this,a,c)}},bindProperty:function(a,b,d){return c(this,a,b,d)},unbindProperty:function(a,b){return e(this,a,b)},unbindAllProperties:function(){f(this)},shouldObserveProperty:function(a){return Boolean(this[a+i])},dispatchPropertyChange:function(a,c){b.call(this,a+i,[c])}},k=new SideTable,l="[%s] watching [%s]",m="[%s#%s] watch: [%s] now [%s] was [%s]",n="[%s]: bindProperties: [%s] to [%s].[%s]";a.api.instance.properties=j}(Polymer),function(a){var b="__published",c="__instance_attributes",d={PUBLISHED:b,INSTANCE_ATTRIBUTES:c,copyInstanceAttributes:function(){var a=this[c];for(var b in a)this.setAttribute(b,a[b])},takeAttributes:function(){for(var a,b=0,c=this.attributes,d=c.length;(a=c[b])&&d>b;b++)this.attributeToProperty(a.name,a.value)},attributeToProperty:function(b,c){var b=this.propertyForAttribute(b);if(b){if(c.search(a.bindPattern)>=0)return;var d=this[b],c=this.deserializeValue(c,d);c!==d&&(this[b]=c)}},propertyForAttribute:function(a){var c=Object.keys(this[b]);return c[c.map(e).indexOf(a.toLowerCase())]},deserializeValue:function(b,c){return a.deserializeValue(b,c)}},e=String.prototype.toLowerCase.call.bind(String.prototype.toLowerCase);a.api.instance.attributes=d}(Polymer),function(a){function b(a){d(a,c)}function c(a){a.unbindAll()}function d(a,b){if(a){b(a);for(var c=a.firstChild;c;c=c.nextSibling)d(c,b)}}var e=window.logFlags||0,f=new ExpressionSyntax,g={instanceTemplate:function(a){return a.createInstance(this,f)},createBinding:function(a,b,c){var d=this.propertyForAttribute(a);if(d){var e=this.bindProperty(d,b,c);return e.path=c,e}return this.super(arguments)},asyncUnbindAll:function(){this._unbound||(e.unbind&&console.log("[%s] asyncUnbindAll",this.localName),this._unbindAllJob=this.job(this._unbindAllJob,this.unbindAll,0))},unbindAll:function(){this._unbound||(this.unbindAllProperties(),this.super(),b(this.shadowRoot),this._unbound=!0)},cancelUnbindAll:function(a){return this._unbound?(e.unbind&&console.warn("[%s] already unbound, cannot cancel unbindAll",this.localName),void 0):(e.unbind&&console.log("[%s] cancelUnbindAll",this.localName),this._unbindAllJob&&(this._unbindAllJob=this._unbindAllJob.stop()),a||d(this.shadowRoot,function(a){a.cancelUnbindAll&&a.cancelUnbindAll()}),void 0)},insertedCallback:function(){this.cancelUnbindAll(!0),this.inserted&&this.inserted()},removedCallback:function(){this.asyncUnbindAll(),this.removed&&this.removed()}},h=/\{\{([^{}]*)}}/;a.bindPattern=h,a.api.instance.mdv=g}(Polymer),function(a){function b(a){return a.hasOwnProperty("PolymerBase")}function c(){}var d={PolymerBase:!0,job:Polymer.job,"super":Polymer.super,ready:function(){},readyCallback:function(){this.observeProperties(),this.copyInstanceAttributes(),this.takeAttributes(),this.addHostListeners(),this.parseElements(this.__proto__),this.asyncUnbindAll(),this.ready()},parseElements:function(a){a&&a.element&&(this.parseElements(a.__proto__),a.parseElement.call(this,a.element))},parseElement:function(a){this.shadowFromTemplate(this.fetchTemplate(a))},fetchTemplate:function(a){return a.querySelector("template")},shadowFromTemplate:function(a){if(a){var b=this.shadowRoot,c=this.createShadowRoot();c.olderShadowRoot=b,c.applyAuthorStyles=this.applyAuthorStyles,c.resetStyleInheritance=this.resetStyleInheritance,c.host=this;var d=this.instanceTemplate(a);return c.appendChild(d),this.shadowRootReady(c,a),CustomElements.watchShadow(this),c}},shadowRootReady:function(a,b){this.marshalNodeReferences(a),this.addInstanceListeners(a,b),PointerGestures.register(a)},marshalNodeReferences:function(a){var b=this.$=this.$||{};if(a)for(var c,d=a.querySelectorAll("[id]"),e=0,f=d.length;f>e&&(c=d[e]);e++)b[c.id]=c},attributeChangedCallback:function(){this.attributeChanged&&this.attributeChanged.apply(this,arguments)}};c.prototype=d,d.constructor=c,a.Base=c,a.isBase=b,a.api.instance.base=d}(Polymer),function(a){window.logFlags||{};var b="element",c="controller",d={STYLE_SCOPE_ATTRIBUTE:b,installControllerStyles:function(){var a=this.findStyleController();if(a&&!this.scopeHasElementStyle(a,c)){for(var b=Object.getPrototypeOf(this),d="";b&&b.element;)d+=b.element.cssTextForScope(c),b=Object.getPrototypeOf(b);if(d){var e=this.element.cssTextToScopeStyle(d,c);window.ShadowDOMPolyfill&&Platform.ShadowCSS.shimPolyfillDirectives([e],this.localName),Polymer.applyStyleToScope(e,a)}}},scopeHasElementStyle:function(a,c){var d=b+"="+this.localName+"-"+c;return a.querySelector("style["+d+"]")},findStyleController:function(){if(window.ShadowDOMPolyfill)return wrap(document.head);for(var a=this;a.parentNode;)a=a.parentNode;return a===document?document.head:a}};a.api.instance.styles=d}(Polymer),function(a){var b={addResolvePathApi:function(){var a=this.elementPath();this.prototype.resolvePath=function(b){return a+b}},elementPath:function(){return this.urlToPath(HTMLImports.getDocumentUrl(this.ownerDocument))},urlToPath:function(a){if(a){var b=a.split("/");return b.pop(),b.push(""),b.join("/")}return""}};a.api.declaration.path=b}(Polymer),function(a){function b(a,b){if(a){var d=c(a.textContent),e=a.getAttribute(g);e&&d.setAttribute(g,e),b.appendChild(d)}}function c(a){var b=document.createElement("style");return b.textContent=a,b}function d(a){return a&&a.__resource||""}function e(a,b){return n?n.call(a,b):void 0}window.logFlags||{};var f=a.api.instance.styles,g=f.STYLE_SCOPE_ATTRIBUTE,h="style",i="[rel=stylesheet]",j="global",k="polymer-scope",l={installSheets:function(){this.cacheSheets(),this.installLocalSheets(),this.installGlobalStyles()},cacheSheets:function(){this.sheets=this.findNodes(i),this.sheets.forEach(function(a){a.parentNode&&a.parentNode.removeChild(a)})},installLocalSheets:function(){var a=this.sheets.filter(function(a){return!a.hasAttribute(k)}),b=this.templateContent();if(b){var e="";a.forEach(function(a){e+=d(a)+"\n"}),e&&b.insertBefore(c(e),b.firstChild)}},findNodes:function(a,b){var c=this.querySelectorAll(a).array(),d=this.templateContent();if(d){var e=d.querySelectorAll(a).array();c=c.concat(e)}return b?c.filter(b):c},templateContent:function(){var a=this.querySelector("template");return a&&templateContent(a)},installGlobalStyles:function(){var a=this.styleForScope(j);b(a,document.head)},cssTextForScope:function(a){var b="",c="["+k+"="+a+"]",f=function(a){return e(a,c)},g=this.sheets.filter(f);g.forEach(function(a){b+=d(a)+"\n\n"});var i=this.findNodes(h,f);return i.forEach(function(a){a.parentNode.removeChild(a),b+=a.textContent+"\n\n"}),b},styleForScope:function(a){var b=this.cssTextForScope(a);return this.cssTextToScopeStyle(b,a)},cssTextToScopeStyle:function(a,b){if(a){var d=c(a);return d.setAttribute(g,this.getAttribute("name")+"-"+b),d}}},m=HTMLElement.prototype,n=m.matches||m.matchesSelector||m.webkitMatchesSelector||m.mozMatchesSelector;a.api.declaration.styles=l,a.applyStyleToScope=b}(Polymer),function(a){function b(a){return a.slice(0,k)==g}function c(a){return a.slice(k)}function d(a){return a.ref?a.ref.content:a.content}var e=a.api.instance.events,f=e.DELEGATES,g=e.EVENT_PREFIX,h=window.logFlags||{},i={inheritDelegates:function(a){this.inheritObject(a,f)},parseHostEvents:function(){var a=this.prototype[f];this.addAttributeDelegates(a)},addAttributeDelegates:function(a){for(var d,e=0;d=this.attributes[e];e++)b(d.name)&&(a[c(d.name)]=d.value)},parseLocalEvents:function(){this.querySelectorAll("template").forEach(function(a){a.delegates={},this.accumulateTemplatedEvents(a,a.delegates),h.events&&console.log("[%s] parseLocalEvents:",this.attributes.name.value,a.delegates)},this)},accumulateTemplatedEvents:function(a,b){if("template"===a.localName){var c=d(a);c&&this.accumulateChildEvents(c,b)}},accumulateChildEvents:function(a,b){a.childNodes.forEach(function(a){this.accumulateEvents(a,b)},this)},accumulateEvents:function(a,b){return this.accumulateAttributeEvents(a,b),this.accumulateChildEvents(a,b),this.accumulateTemplatedEvents(a,b),b},accumulateAttributeEvents:function(a,d){a.attributes&&a.attributes.forEach(function(a){b(a.name)&&this.accumulateEvent(c(a.name),d)},this)},accumulateEvent:function(a,b){a=j[a]||a,b[a]=b[a]||1}},j={webkitanimationstart:"webkitAnimationStart",webkitanimationend:"webkitAnimationEnd",webkittransitionend:"webkitTransitionEnd",domfocusout:"DOMFocusOut",domfocusin:"DOMFocusIn"},k=g.length;i.event_translations=j,a.api.declaration.events=i}(Polymer),function(a){var b=[],c={cacheProperties:function(){this.prototype.customPropertyNames=this.getCustomPropertyNames(this.prototype)},getCustomPropertyNames:function(c){for(var d,e={};c&&!a.isBase(c);){for(var f,g=Object.getOwnPropertyNames(c),h=0,i=g.length;i>h&&(f=g[h]);h++)e[f]=!0,d=!0;c=c.__proto__}return d?Object.keys(e):b}};a.api.declaration.properties=c}(Polymer),function(a){var b=a.api.instance.attributes,c=b.PUBLISHED,d=b.INSTANCE_ATTRIBUTES,e="publish",f="attributes",g={inheritAttributesObjects:function(a){this.inheritObject(a,c),this.inheritObject(a,d)},parseAttributes:function(){this.publishAttributes(this.prototype),this.publishProperties(this.prototype),this.accumulateInstanceAttributes()},publishAttributes:function(a){var b=a[c],d=this.getAttribute(f);if(d){var e=d.split(d.indexOf(",")>=0?",":" ");e.forEach(function(a){a=a.trim(),!a||a in b||(b[a]=null)})}Object.keys(b).forEach(function(c){c in a||(a[c]=b[c])})},publishProperties:function(a){this.publishPublish(a)},publishPublish:function(a){if(a.hasOwnProperty(e)){var b=a[e];b&&(Object.keys(b).forEach(function(c){a[c]=b[c]}),Platform.mixin(a[c],b))}},accumulateInstanceAttributes:function(){var a=this.prototype[d];this.attributes.forEach(function(b){this.isInstanceAttribute(b.name)&&(a[b.name]=b.value)},this)},isInstanceAttribute:function(a){return!this.blackList[a]&&"on-"!==a.slice(0,3)},blackList:{name:1,"extends":1,constructor:1}};g.blackList[f]=1,a.api.declaration.attributes=g}(Polymer),function(a){function b(a,b){f[a]=b}function c(a){return Object.create(HTMLElement.getPrototypeForTag(a))}var d=Polymer.extend,e=a.api.declaration,f={},g=c();d(g,{readyCallback:function(){var a=this.getAttribute("name"),b=this.getAttribute("extends");this.prototype=this.generateCustomPrototype(a,b),this.prototype.element=this,this.addResolvePathApi(),this.desugar(),window.ShadowDOMPolyfill&&Platform.ShadowCSS.shimStyling(this.templateContent(),a,b),this.register(a),this.publishConstructor()},desugar:function(){this.parseAttributes(),this.parseHostEvents(),this.parseLocalEvents(),this.installSheets(),this.prototype.registerCallback&&this.prototype.registerCallback(this),this.cacheProperties()},generateCustomPrototype:function(a,b){var c=this.generateBasePrototype(b);return this.addNamedApi(c,a)},generateBasePrototype:function(a){var b=c(a);return this.ensureBaseApi(b)},ensureBaseApi:function(b){return b.PolymerBase||(Object.keys(a.api.instance).forEach(function(c){d(b,a.api.instance[c])}),b=Object.create(b)),this.inheritAttributesObjects(b),this.inheritDelegates(b),b},addNamedApi:function(a,b){return d(a,f[b])},inheritObject:function(a,b){a[b]=d({},a.__proto__[b])},register:function(a){this.ctor=document.register(a,{prototype:this.prototype}),this.prototype.constructor=this.ctor,HTMLElement.register(a,this.prototype)},publishConstructor:function(){var a=this.getAttribute("constructor");a&&(window[a]=this.ctor)}}),Object.keys(e).forEach(function(a){d(g,e[a])}),document.register("polymer-element",{prototype:g}),d(b,window.Polymer),window.Polymer=b}(Polymer); -/* -//@ sourceMappingURL=polymer.native.min.js.map -*/ \ No newline at end of file diff --git a/libs/polymer/polymer.native.min.js.map b/libs/polymer/polymer.native.min.js.map deleted file mode 100644 index cbca1720a..000000000 --- a/libs/polymer/polymer.native.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"polymer.native.min.js","sources":["../platform/platform.native.min.js","src/polymer.js","src/boot.js","src/shimStyling.js","src/lib/lang.js","src/lib/dom.js","src/lib/deserialize.js","src/lib/job.js","src/lib/super.js","src/api.js","src/instance/utils.js","src/instance/events.js","src/instance/properties.js","src/instance/attributes.js","src/instance/mdv.js","src/instance/base.js","src/instance/styles.js","src/declaration/path.js","src/declaration/styles.js","src/declaration/events.js","src/declaration/properties.js","src/declaration/attributes.js","src/declaration/polymer-element.js"],"names":["PointerGestureEvent","a","b","c","d","document","createEvent","e","bubbles","cancelable","Object","keys","forEach","initEvent","preventTap","this","SideTable","WeakMap","navigator","userAgent","indexOf","defineProperty","hasOwnProperty","Date","getTime","name","Math","random","prototype","set","value","writable","get","call","delete","window","templateContent","content","wrap","unwrap","defineProperties","HTMLElement","shadowRoot","webkitShadowRoot","createShadowRoot","webkitCreateShadowRoot","HTMLTemplateElement","bootstrap","_content","createDocumentFragment","firstChild","appendChild","arguments","length","f","g","getOwnPropertyDescriptor","getPrototypeOf","Function","bind","Array","slice","push","apply","mixin","Platform","createElement","cloneNode","innerHTML","setAttribute","DOMTokenList","add","remove","toggle","contains","NamedNodeMap","MozNamedAttrMap","NodeList","array","HTMLCollection","performance","h","now","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","setTimeout","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","clearTimeout","createDOM","Inspector","sinspect","open","write","api","shadowize","body","join","querySelector","textContent","href","localName","idx","onclick","pop","shadow","preventDefault","k","j","childNodes","STYLE","SCRIPT","#comment","TEMPLATE","i","nodeName","nodeType","l","getDistributedNodes","br","trim","attributes","Number","console","log","dir","output","type","observe","deliverChangeRecords","K","replace","S","test","T","String","split","filter","H","getValueFrom","compiledGetValueFromFn","U","check","report","added","removed","changed","m","isArray","n","o","object","callback","target","token","reporting","G","boundInternalCallback","internalCallback","valid","p","connect","sync","W","V","_allObserversCount","q","r","Error","s","arr","isObserved","t","path","u","getNotifier","oldValue","notify","v","_","error","w","x","ab","bb","db","cb","reverse","y","z","A","index","addedCount","B","min","C","D","splice","E","JSON","stringify","F","concat","I","J","isNaN","L","__proto__","create","getOwnPropertyNames","M","N","O","P","Q","R","RegExp","toString","getValueFromObserved","reset","cleanup","map","setValueFrom","testingResults","anyChanged","close","unobserved","disconnect","deliver","reportArgs","_errorThrownDuringCallback","forceCollectObservers","X","Y","deliverAllChangeRecords","performMicrotaskCheckpoint","clearObservers","oldObject","unobserve","applySplices","Z","$","observedSet","getValueAtPath","setValueAtPath","new","updated","deleted","configurable","Observer","hasObjectObserve","ArrayObserver","calculateSplices","ObjectObserver","PathObserver","Path","parentNode","getElementById","ownerDocument","closed","node","property","model","observer","boundValueChanged","conditional","removeAttribute","eventType","boundNodeValueToModel","nodeValueChanged","addEventListener","form","elements","tagName","querySelectorAll","hasAttribute","decorate","defaultView","eb","implementation","createHTMLDocument","lastChild","removeChild","insertBefore","ib","lb","bindingDelegate","inputs","combinator","scheduled","resolve","Node","ELEMENT_NODE","TEXT_NODE","data","templateRef","kb","children","nextSibling","hasSubTemplate","firstNode","lastNode","mb","observers","values","size","combinator_","templateElement_","terminators","iteratedValue","arrayObserver","resolveInputs","Map","Document","documentElement","bindings","createBinding","unbind","unbindAll","sanitizeBoundValue","Text","Element","initMouseEvent","dispatchEvent","postUpdateBinding","removeEventListener","Boolean","checked","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","toLowerCase","template","repeat","ref","THEAD","TBODY","TFOOT","TH","TR","TD","COLGROUP","COL","CAPTION","OPTION","OPTGROUP","nextRunner","lastValue","scheduledIds","running","run","schedule","TypeError","fb","gb","templateIsDecorated_","hb","HTMLUnknownElement","enumerable","jb","nb","createInstance","getAttribute","templateInstance","scheduleResolve","pathValueChanged","valueChanged","handleSplices","getTerminatorAt","insertInstanceAt","extractInstanceAt","bound","getInstanceModel","CompoundBinding","forAllTemplatesFrom_","fromCharCode","charCodeAt","Identifier","Keyword","NullLiteral","BooleanLiteral","range","Punctuator","UnexpectedToken","NumericLiteral","parseFloat","StringLiteral","octal","EOF","description","createArrayExpression","createLiteral","createIdentifier","createProperty","createObjectExpression","createThisExpression","createCallExpression","createMemberExpression","createUnaryExpression","allowIn","prec","createBinaryExpression","createConditionalExpression","createEmptyStatement","createExpressionStatement","labelSet","Redeclaration","createLabeledStatement","createProgram","valueOf","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","EmptyStatement","ExpressionStatement","Literal","LabeledStatement","LogicalExpression","MemberExpression","ObjectExpression","Program","Property","ThisExpression","UnaryExpression","UnknownLabel","esprima","parse","match","statements","labeledStatements","deps","label","last","currentPath","getPath","valueFn","+","-","!","*","/","%","<",">","<=",">=","==","!=","===","!==","&&","||","getFn","key","getBinding","ExpressionSyntax","logFlags","group","groupEnd","__instanceCreated","adoptNode","CustomElements","upgradeAll","setInterval","flush","dirtyCheck","_URL","baseURI","head","HTMLImports","flags","xhr","documents","cache","preloadSelectors","loader","loaded","load","preload","filterMainDocumentNodes","extractTemplateNodes","addNodes","resolvePathsInHTML","import","ownerNode","__resource","resolvePathsInStylesheet","onload","oncomplete","inflight","pending","require","checkDone","nodeUrl","__nodeUrl","dedupe","fetch","tail","receive","resolveUrl","getDocumentUrl","hrefOrSrc","documentUrlFromNode","impl","URL","isAbsUrl","compressUrl","urlToPath","makeRelPath","shift","unshift","resolveAttributes","resolveStyleElts","resolveCssText","resolveNodeAttributes","search","async","ok","status","XMLHttpRequest","debug","bust","readyState","response","send","loadDocument","responseType","importer","IMPORT_LINK_TYPE","selectors","link","script","style","__importParsed","parseLink","parseGeneric","parseScript","floor","eval","parser","readyTime","CustomEvent","ShadowDOMPolyfill","wrapIfNeeded","sort","uid_","takeRecords","callback_","nodes_","removeTransientObservers","options","subtree","enqueue","records_","addedNodes","removedNodes","previousSibling","attributeName","attributeNamespace","transientObservedNodes","msSetImmediate","postMessage","childList","characterData","attributeOldValue","attributeFilter","characterDataOldValue","SyntaxError","removeListeners","addListeners","addListeners_","removeListeners_","addTransientObserver","handleEvent","stopImmediatePropagation","attrName","relatedNode","namespaceURI","attrChange","MutationEvent","ADDITION","prevValue","JsMutationObserver","MutationObserver","WebKitMutationObserver","lifecycle","ancestry","extends","ctor","constructor","ready","is","tag","native","__upgraded__","upgradeSubtree","readyCallback","attributeChangedCallback","hasNative","webkitRegister","register","registry","upgradeElement","upgrade","firstElementChild","nextElementSibling","dom","insertedCallback","__inserted","warn","removedCallback","host","__watched","watchShadow","watchAllShadows","observeDocument","upgradeDocument","parseElementElement","takeAttributes","executeComponentScript","inScript","inContext","inName","context","owner","url","code","HTMLElementElement","__componentScript","element","__parsed","parseImport","parseElement","elapsed","canTarget","elementFromPoint","targetingShadow","olderShadow","olderShadowRoot","allShadows","searchRoot","findTarget","clientX","clientY","targetFinding","PointerEventsPolyfill","rule","buttons","which","MouseEvent","view","detail","screenX","screenY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pressure","pointerId","width","height","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","PointerEvent","ids","pointers","has","clear","PointerMap","targets","handledEvents","pointermap","eventMap","eventSources","eventSourceList","registerSource","events","unregister","down","fireEvent","move","up","enter","leave","over","out","cancel","leaveOut","enterOver","eventHandler","listen","addEvent","unlisten","removeEvent","boundHandler","makeEvent","cloneEvent","getTarget","captureInfo","id","setCapture","releaseCapture","implicitRelease","asyncDispatchEvent","dispatcher","addCallback","removeCallback","changedCallback","mutationWatcher","watchSubtree","enableOnSubtree","installOnLoad","installNewSubtree","findElements","addElement","removeElement","elementChanged","concatLists","isElement","flattenMutationTree","reduce","mutationHandler","Installer","POINTER_ID","POINTER_TYPE","lastTouches","isEventSimulatedFromTouch","abs","prepareEvent","mousedown","mousemove","mouseup","cleanupMouse","mouseover","mouseout","mouseEvents","touchAction","scrollType","elementAdded","touchActionToScrollType","elementRemoved","touchActiontoScrollType","scrollTypes","EMITTER","XSCROLLER","YSCROLLER","SCROLLER","exec","firstTouch","isPrimaryTouch","identifier","setPrimaryTouch","firstXY","scrolling","removePrimaryTouch","touchToPointer","webkitRadiusX","radiusX","webkitRadiusY","radiusY","webkitForce","force","processTouches","changedTouches","shouldScroll","currentTarget","findTouch","vacuumTouches","touches","cancelOut","touchstart","dedupSynthMouse","overDown","outTarget","touchmove","touchcancel","moveOverOut","touchend","upOut","cleanUpPointer","touchEvents","MSPointerEvent","MSPOINTER_TYPE_MOUSE","POINTER_TYPES","MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSLostPointerCapture","MSGotPointerCapture","msEvents","pointerEnabled","msPointerEnabled","msMaxTouchPoints","ontouchstart","msSetPointerCapture","msReleasePointerCapture","setPointerCapture","releasePointerCapture","tapPrevented","utils","LCA","find","depth","walk","findLCA","PointerGestures","handlers","recognizers","registerRecognizer","addHandler","registerTarget","unregisterTarget","makeQueue","runQueue","currentPointerId","inTarget","tap","HOLD_DELAY","WIGGLE_THRESHOLD","heldPointer","holdJob","pulse","timeStamp","held","fireHold","clearInterval","pointerdown","pointerup","pointercancel","pointermove","holdTime","clampDir","calcPositionDelta","pageX","pageY","fireTrack","downEvent","lastMoveEvent","xDirection","yDirection","dx","dy","ddx","ddy","trackInfo","_releaseTarget","downTarget","tracking","MIN_VELOCITY","MAX_QUEUE","moveQueue","addMove","fireFlick","sqrt","calcAngle","xVelocity","yVelocity","velocity","angle","majorAxis","atan2","PI","Polymer","webkitTransition","opacity","scope","stylizer","hostRuleRe","selectorRe","hostElementRe","hostFixableRe","cssCommentRe","cssPolyfillCommentRe","cssPseudoRe","selectorReSuffix","hostRe","shimStyling","cacheDefinition","shimPolyfillDirectives","styles","strictPolyfillStyling","applyScopeToContent","applyShimming","stylesForElement","shimShadowDOMStyling","cssText","shimAtHost","shimScoping","addCssToDocument","root","extendee","findExtendee","extendeeStyles","convertPolyfillDirectives","convertAtHostStyles","convertScopedStyles","matches","selector","substring","scopeSelector","lastIndex","findAtHostRules","cssRules","matcher","isHostRule","cssRule","selectorText","CSSRule","WEBKIT_KEYFRAMES_RULE","stylesToCssText","scopeHostCss","rulesToCss","cssToRules","scopeHostSelector","parts","convertPseudos","rules","scopeRules","propertiesFromRule","media","mediaText","properties","selectorNeedsScoping","matchScope","strict","applyStrictSelectorScope","applySimpleSelectorScope","splits","scoped","sep","preserveComments","stripCssComments","sheet","css","getSheet","createTextNode","addSheetToDocument","extend","pd","nom","getPrototypeForTag","originalStopPropagation","Event","stopPropagation","cancelBubble","deserializeValue","defaultValue","inferredType","typeHandlers","string","date","boolean","number","floatVal","job","wait","stop","Job","go","handle","complete","$super","arrayOfArgs","caller","nameInThis","memoizeSuper","_super","fn","nextSuper","proto","method","n$","super","declaration","instance","args","timeout","fire","toNode","undefined","asyncFire","asyncMethod","classFollows","anew","old","className","classList","listenLocal","event","on","EVENT_PREFIX","_listenLocalNoEventPath","_listenLocal","some","findController","ctrlr","handleIfNotHandled","dispatchMethod","list","eventHandledTable","DELEGATES","addHostListeners","addNodeListeners","hostEventListener","addInstanceListeners","delegates","instanceEventListener","listener","findEventDelegate","methodName","invoke","bindProperties","inA","inProperty","inB","inPath","LOG_BIND_PROPS","registerObserver","o$","getElementObservers","unregisterObserver","unregisterObservers","$o","b$","OBSERVE_SUFFIX","observeProperties","names","getCustomPropertyNames","observeProperty","customPropertyNames","shouldObserveProperty","watch","LOG_OBSERVE","propertyChanged","neo","LOG_OBSERVED","dispatchPropertyChange","bindProperty","unbindProperty","unbindAllProperties","PUBLISHED","INSTANCE_ATTRIBUTES","copyInstanceAttributes","a$","attributeToProperty","propertyForAttribute","bindPattern","lowerCase","stringValue","unbindNodeTree","forNodeTree","_nodeUnbindAll","child","mdv_syntax","mdv","instanceTemplate","asyncUnbindAll","_unbound","_unbindAllJob","cancelUnbindAll","preventCascade","inserted","mustachePattern","isBase","PolymerBase","base","parseElements","elementElement","shadowFromTemplate","fetchTemplate","elderRoot","applyAuthorStyles","resetStyleInheritance","shadowRootReady","marshalNodeReferences","attributeChanged","Base","STYLE_SCOPE_ATTRIBUTE","STYLE_CONTROLLER_SCOPE","installControllerStyles","findStyleController","scopeHasElementStyle","cssTextForScope","cssTextToScopeStyle","ShadowCSS","applyStyleToScope","descriptor","addResolvePathApi","elementPath","resolvePath","clone","createStyleElement","attr","cssTextFromSheet","matchesSelector","inSelector","STYLE_SELECTOR","SHEET_SELECTOR","STYLE_GLOBAL_SCOPE","SCOPE_ATTR","installSheets","cacheSheets","installLocalSheets","installGlobalStyles","sheets","findNodes","nodes","templateNodes","styleForScope","scopeDescriptor","webkitMatchesSelector","mozMatchesSelector","hasEventPrefix","prefixLength","removeEventPrefix","getTemplateContent","inheritDelegates","inheritObject","parseHostEvents","addAttributeDelegates","parseLocalEvents","accumulateTemplatedEvents","accumulateChildEvents","accumulateEvents","accumulateAttributeEvents","accumulateEvent","event_translations","webkitanimationstart","webkitanimationend","webkittransitionend","domfocusout","domfocusin","empty","cacheProperties","PUBLISH","ATTRIBUTES","inheritAttributesObjects","parseAttributes","publishAttributes","publishProperties","accumulateInstanceAttributes","published","publishPublish","imperative","clonable","isInstanceAttribute","blackList","generatePrototype","apis","extnds","generateCustomPrototype","desugar","publishConstructor","registerCallback","generateBasePrototype","addNamedApi","ensureBaseApi","symbol"],"mappings":"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"} \ No newline at end of file diff --git a/libs/polymer/polymer.sandbox.min.js b/libs/polymer/polymer.sandbox.min.js deleted file mode 100644 index f78468cf2..000000000 --- a/libs/polymer/polymer.sandbox.min.js +++ /dev/null @@ -1,35 +0,0 @@ -// Copyright (c) 2012 The Polymer Authors. All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions are -// met: -// -// * Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// * Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following disclaimer -// in the documentation and/or other materials provided with the -// distribution. -// * Neither the name of Google Inc. nor the names of its -// contributors may be used to endorse or promote products derived from -// this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR -// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE -// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -function PointerGestureEvent(a,b){var c=b||{},d=document.createEvent("Event"),e={bubbles:!0,cancelable:!0};return Object.keys(e).forEach(function(a){a in c&&(e[a]=c[a])}),d.initEvent(a,e.bubbles,e.cancelable),Object.keys(c).forEach(function(a){d[a]=b[a]}),d.preventTap=this.preventTap,d}if(window.Platform=window.Platform||{},window.logFlags=window.logFlags||{},function(a){var b=a.flags||{};location.search.slice(1).split("&").forEach(function(a){a=a.split("="),a[0]&&(b[a[0]]=a[1]||!0)}),b.shadow=(b.shadowdom||b.shadow||b.polyfill||!HTMLElement.prototype.webkitCreateShadowRoot)&&"polyfill",a.flags=b}(Platform),"polyfill"===Platform.flags.shadow){var SideTable;"undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0?SideTable=WeakMap:function(){var a=Object.defineProperty,b=Object.hasOwnProperty,c=(new Date).getTime()%1e9;SideTable=function(){this.name="__st"+(1e9*Math.random()>>>0)+(c++ +"__")},SideTable.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}();var ShadowDOMPolyfill={};!function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function d(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){switch(c){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":return}Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function e(a){var b=a.__proto__||Object.getPrototypeOf(a),c=z.get(b);if(c)return c;var d=e(b),f=n(d);return k(b,f,a),f}function f(a,b){i(a,b,!0)}function g(a,b){i(b,a,!1)}function h(a){return/^on[a-z]+$/.test(a)}function i(b,c,d){Object.getOwnPropertyNames(b).forEach(function(e){if(!(e in c)){B&&b.__lookupGetter__(e);var f;try{f=Object.getOwnPropertyDescriptor(b,e)}catch(g){f=C}var i,j;if(d&&"function"==typeof f.value)return c[e]=function(){return this.impl[e].apply(this.impl,arguments)},void 0;var k=h(e);i=k?a.getEventHandlerGetter(e):function(){return this.impl[e]},(f.writable||f.set)&&(j=k?a.getEventHandlerSetter(e):function(a){this.impl[e]=a}),Object.defineProperty(c,e,{get:i,set:j,configurable:f.configurable,enumerable:f.enumerable})}})}function j(a,b,c){var e=a.prototype;k(e,b,c),d(b,a)}function k(a,c,d){var e=c.prototype;b(void 0===z.get(a)),z.set(a,c),f(a,e),d&&g(e,d)}function l(a,b){return z.get(b.prototype)===a}function m(a){var b=Object.getPrototypeOf(a),c=e(b),d=n(c);return k(b,d,a),d}function n(a){function b(b){a.call(this,b)}return b.prototype=Object.create(a.prototype),b.prototype.constructor=b,b}function o(a){return a instanceof A.EventTarget||a instanceof A.Event||a instanceof A.DOMImplementation}function p(a){return a instanceof F||a instanceof E||a instanceof G||a instanceof D}function q(a){if(null===a)return null;b(p(a));var c=y.get(a);if(!c){var d=e(a);c=new d(a),y.set(a,c)}return c}function r(a){return null===a?null:(b(o(a)),a.impl)}function s(a){return a&&o(a)?r(a):a}function t(a){return a&&!o(a)?q(a):a}function u(a,c){null!==c&&(b(p(a)),b(void 0===c||o(c)),y.set(a,c))}function v(a,b,c){Object.defineProperty(a.prototype,b,{get:c,configurable:!0,enumerable:!0})}function w(a,b){v(a,b,function(){return q(this.impl[b])})}function x(a,b){a.forEach(function(a){b.forEach(function(b){a.prototype[b]=function(){var a=q(this);return a[b].apply(a,arguments)}})})}var y=new SideTable,z=new SideTable,A=Object.create(null);Object.getOwnPropertyNames(window);var B=/Firefox/.test(navigator.userAgent),C={get:function(){},set:function(){},configurable:!0,enumerable:!0},D=DOMImplementation,E=Event,F=Node,G=Window;a.assert=b,a.defineGetter=v,a.defineWrapGetter=w,a.forwardMethodsToWrapper=x,a.isWrapperFor=l,a.mixin=c,a.registerObject=m,a.registerWrapper=j,a.rewrap=u,a.unwrap=r,a.unwrapIfNeeded=s,a.wrap=q,a.wrapIfNeeded=t,a.wrappers=A}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a instanceof N.ShadowRoot}function c(a){var b=a.localName;return"content"===b||"shadow"===b}function d(a){return!!a.shadowRoot}function e(a){var b;return a.parentNode||(b=a.defaultView)&&M(b)||null}function f(f,g,h){if(h.length)return h.shift();if(b(f))return j(f)||a.getHostForShadowRoot(f);var i=a.eventParentsTable.get(f);if(i){for(var k=1;k=0;b--)if(!c(a[b]))return a[b];return null}function i(d,e){for(var g=[];d;){for(var i=[],j=e,l=void 0;j;){var n=null;if(i.length){if(c(j)&&(n=h(i),k(l))){var o=i[i.length-1];i.push(o)}}else i.push(j);if(m(j,d))return i[i.length-1];b(j)&&i.pop(),l=j,j=f(j,n,g)}d=b(d)?a.getHostForShadowRoot(d):d.parentNode}}function j(b){return a.insertionParentTable.get(b)}function k(a){return j(a)}function l(a){for(var b;b=a.parentNode;)a=b;return a}function m(a,b){return l(a)===l(b)}function n(b,c){if(b===c)return!0;if(b instanceof N.ShadowRoot){var d=a.getHostForShadowRoot(b);return d?n(l(d),c):!1}return!1}function o(a){switch(a){case"DOMAttrModified":case"DOMAttributeNameChanged":case"DOMCharacterDataModified":case"DOMElementNameChanged":case"DOMNodeInserted":case"DOMNodeInsertedIntoDocument":case"DOMNodeRemoved":case"DOMNodeRemovedFromDocument":case"DOMSubtreeModified":return!0}return!1}function p(b){if(!P.get(b)){P.set(b,!0),o(b.type)||a.renderAllPending();var c=M(b.target),d=M(b);return q(d,c)}}function q(a,b){var c=g(b);return"load"===a.type&&2===c.length&&c[0].target instanceof N.Document&&c.shift(),X.set(a,c),r(a,c)&&s(a,c)&&t(a,c),T.set(a,w.NONE),R.set(a,null),a.defaultPrevented}function r(a,b){for(var c,d=b.length-1;d>0;d--){var e=b[d].target,f=b[d].currentTarget;if(e!==f&&(c=w.CAPTURING_PHASE,!u(b[d],a,c)))return!1}return!0}function s(a,b){var c=w.AT_TARGET;return u(b[0],a,c)}function t(a,b){for(var c,d=a.bubbles,e=1;e=f;f++){var g=b[f].currentTarget,h=l(g);n(e,h)&&(f!==d||g instanceof N.Node)&&(a[c++]=g)}a.length=c}return a},stopPropagation:function(){U.set(this,!0)},stopImmediatePropagation:function(){U.set(this,!0),V.set(this,!0)}},K(Y,w,document.createEvent("Event"));var Z=y("UIEvent",w),$=y("CustomEvent",w),_={get relatedTarget(){return S.get(this)||M(L(this).relatedTarget)}},ab=J({initMouseEvent:z("initMouseEvent",14)},_),bb=J({initFocusEvent:z("initFocusEvent",5)},_),cb=y("MouseEvent",Z,ab),db=y("FocusEvent",Z,bb),eb=y("MutationEvent",w,{initMutationEvent:z("initMutationEvent",3),get relatedNode(){return M(this.impl.relatedNode)}}),fb=Object.create(null),gb=function(){try{new window.MouseEvent("click")}catch(a){return!1}return!0}();if(!gb){var hb=function(a,b,c){if(c){var d=fb[c];b=J(J({},d),b)}fb[a]=b};hb("Event",{bubbles:!1,cancelable:!1}),hb("CustomEvent",{detail:null},"Event"),hb("UIEvent",{view:null,detail:0},"Event"),hb("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),hb("FocusEvent",{relatedTarget:null},"UIEvent")}var ib=window.EventTarget,jb=["addEventListener","removeEventListener","dispatchEvent"];[Node,Window].forEach(function(a){var b=a.prototype;jb.forEach(function(a){Object.defineProperty(b,a+"_",{value:b[a]})})}),C.prototype={addEventListener:function(a,b,c){if(B(b)){var d=new v(a,b,c),e=O.get(this);if(e){for(var f=0;fd;d++)b[d]=f(a[d]);return b.length=e,b}function e(a,b){a.prototype[b]=function(){return d(this.impl[b].apply(this.impl,arguments))}}var f=a.wrap;c.prototype={item:function(a){return this[a]}},b(c.prototype,"item"),a.wrappers.NodeList=c,a.addWrapNodeListMethod=e,a.wrapNodeList=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){j(a instanceof f)}function c(a,b,c,d){if(a.nodeType!==f.DOCUMENT_FRAGMENT_NODE)return a.parentNode&&a.parentNode.removeChild(a),a.parentNode_=b,a.previousSibling_=c,a.nextSibling_=d,c&&(c.nextSibling_=a),d&&(d.previousSibling_=a),[a];for(var e,g=[];e=a.firstChild;)a.removeChild(e),g.push(e),e.parentNode_=b;for(var h=0;he;e++)d.appendChild(m(b[e]));return d}function e(a){for(var b=a.firstChild;b;){j(b.parentNode===a);var c=b.nextSibling,d=m(b),e=d.parentNode;e&&s.call(e,d),b.previousSibling_=b.nextSibling_=b.parentNode_=null,b=c}a.firstChild_=a.lastChild_=null}function f(a){j(a instanceof o),g.call(this,a),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0}var g=a.wrappers.EventTarget,h=a.wrappers.NodeList,i=a.defineWrapGetter,j=a.assert,k=a.mixin,l=a.registerWrapper,m=a.unwrap,n=a.wrap,o=window.Node,p=o.prototype.appendChild,q=o.prototype.insertBefore,r=o.prototype.replaceChild,s=o.prototype.removeChild,t=o.prototype.compareDocumentPosition;f.prototype=Object.create(g.prototype),k(f.prototype,{appendChild:function(a){b(a),this.invalidateShadowRenderer();var e=this.lastChild,f=null,g=c(a,this,e,f);return this.lastChild_=g[g.length-1],e||(this.firstChild_=g[0]),p.call(this.impl,d(this,g)),a},insertBefore:function(a,e){if(!e)return this.appendChild(a);b(a),b(e),j(e.parentNode===this),this.invalidateShadowRenderer();var f=e.previousSibling,g=e,h=c(a,this,f,g);this.firstChild===e&&(this.firstChild_=h[0]);var i=m(e),k=i.parentNode;return k&&q.call(k,d(this,h),i),a},removeChild:function(a){if(b(a),a.parentNode!==this)throw new Error("NotFoundError");this.invalidateShadowRenderer();var c=this.firstChild,d=this.lastChild,e=a.nextSibling,f=a.previousSibling,g=m(a),h=g.parentNode;return h&&s.call(h,g),c===a&&(this.firstChild_=e),d===a&&(this.lastChild_=f),f&&(f.nextSibling_=e),e&&(e.previousSibling_=f),a.previousSibling_=a.nextSibling_=a.parentNode_=null,a},replaceChild:function(a,e){if(b(a),b(e),e.parentNode!==this)throw new Error("NotFoundError");this.invalidateShadowRenderer();var f=e.previousSibling,g=e.nextSibling;g===a&&(g=a.nextSibling);var h=c(a,this,f,g);this.firstChild===e&&(this.firstChild_=h[0]),this.lastChild===e&&(this.lastChild_=h[h.length-1]),e.previousSibling_=null,e.nextSibling_=null,e.parentNode_=null;var i=m(e);return i.parentNode&&r.call(i.parentNode,d(this,h),i),e},hasChildNodes:function(){return null===this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:n(this.impl.parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:n(this.impl.firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:n(this.impl.lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:n(this.impl.nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:n(this.impl.previousSibling)},get parentElement(){for(var a=this.parentNode;a&&a.nodeType!==f.ELEMENT_NODE;)a=a.parentNode;return a},get textContent(){for(var a="",b=this.firstChild;b;b=b.nextSibling)a+=b.textContent;return a},set textContent(a){if(e(this),this.invalidateShadowRenderer(),""!==a){var b=this.impl.ownerDocument.createTextNode(a);this.appendChild(b)}},get childNodes(){for(var a=new h,b=0,c=this.firstChild;c;c=c.nextSibling)a[b++]=c;return a.length=b,a},cloneNode:function(a){if(!this.invalidateShadowRenderer())return n(this.impl.cloneNode(a));var b=n(this.impl.cloneNode(!1));if(a)for(var c=this.firstChild;c;c=c.nextSibling)b.appendChild(c.cloneNode(!0));return b},contains:function(a){if(!a)return!1;if(a===this)return!0;var b=a.parentNode;return b?this.contains(b):!1},compareDocumentPosition:function(a){return t.call(this.impl,m(a))}}),i(f,"ownerDocument"),l(o,f,document.createDocumentFragment()),delete f.prototype.querySelector,delete f.prototype.querySelectorAll,f.prototype=k(Object.create(g.prototype),f.prototype),a.wrappers.Node=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,c){for(var d,e=a.firstElementChild;e;){if(e.matches(c))return e;if(d=b(e,c))return d;e=e.nextElementSibling}return null}function c(a,b,d){for(var e=a.firstElementChild;e;)e.matches(b)&&(d[d.length++]=e),c(e,b,d),e=e.nextElementSibling;return d}var d={querySelector:function(a){return b(this,a)},querySelectorAll:function(a){return c(this,a,new NodeList)}},e={getElementsByTagName:function(a){return this.querySelectorAll(a)},getElementsByClassName:function(a){return this.querySelectorAll("."+a)},getElementsByTagNameNS:function(a,b){if("*"===a)return this.getElementsByTagName(b);for(var c=new NodeList,d=this.getElementsByTagName(b),e=0,f=0;e";case Node.TEXT_NODE:return c(a.nodeValue);case Node.COMMENT_NODE:return"";default:throw console.error(a),new Error("not implemented")}}function e(a){for(var b="",c=a.firstChild;c;c=c.nextSibling)b+=d(c);return b}function f(a,b,c){var d=c||"div";a.textContent="";var e=n(a.ownerDocument.createElement(d));e.innerHTML=b;for(var f;f=e.firstChild;)a.appendChild(o(f))}function g(a){j.call(this,a)}function h(b){k(g,b,function(){return a.renderAllPending(),this.impl[b]})}function i(b){Object.defineProperty(g.prototype,b,{value:function(){return a.renderAllPending(),this.impl[b].apply(this.impl,arguments)},configurable:!0,enumerable:!0})}var j=a.wrappers.Element,k=a.defineGetter,l=a.mixin,m=a.registerWrapper,n=a.unwrap,o=a.wrap,p=/&|<|"/g,q={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},r=window.HTMLElement;g.prototype=Object.create(j.prototype),l(g.prototype,{get innerHTML(){return e(this)},set innerHTML(a){f(this,a,this.tagName)},get outerHTML(){return d(this)},set outerHTML(a){if(this.invalidateShadowRenderer())throw new Error("not implemented");this.impl.outerHTML=a}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollLeft","scrollTop","scrollWidth"].forEach(h),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(i),m(r,g,document.createElement("b")),a.wrappers.HTMLElement=g,a.getInnerHTML=e,a.setInnerHTML=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLContentElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get select(){return this.getAttribute("select")},set select(a){this.setAttribute("select",a)},setAttribute:function(a,b){c.prototype.setAttribute.call(this,a,b),"select"===String(a).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),f&&e(f,b),a.wrappers.HTMLContentElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a),this.olderShadowRoot_=null}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLShadowElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get olderShadowRoot(){return this.olderShadowRoot_},invalidateShadowRenderer:function(){c.prototype.invalidateShadowRenderer.call(this,!0)}}),f&&e(f,b),a.wrappers.HTMLShadowElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){if(!a.defaultView)return a;var b=l.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);l.set(a,b)}return b}function c(a){for(var c,d=b(a.ownerDocument),e=d.createDocumentFragment();c=a.firstChild;)e.appendChild(c);return e}function d(a){e.call(this,a)}var e=a.wrappers.HTMLElement,f=a.getInnerHTML,g=a.mixin,h=a.registerWrapper,i=a.setInnerHTML,j=a.wrap,k=new SideTable,l=new SideTable,m=window.HTMLTemplateElement;d.prototype=Object.create(e.prototype),g(d.prototype,{get content(){if(m)return j(this.impl.content);var a=k.get(this);return a||(a=c(this),k.set(this,a)),a},get innerHTML(){return f(this.content)},set innerHTML(a){i(this.content,a),this.invalidateShadowRenderer()}}),m&&h(m,d),a.wrappers.HTMLTemplateElement=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a.localName){case"content":return new c(a);case"shadow":return new e(a);case"template":return new f(a)}d.call(this,a)}var c=a.wrappers.HTMLContentElement,d=a.wrappers.HTMLElement,e=a.wrappers.HTMLShadowElement,f=a.wrappers.HTMLTemplateElement;a.mixin;var g=a.registerWrapper,h=window.HTMLUnknownElement;b.prototype=Object.create(d.prototype),g(h,b),a.wrappers.HTMLUnknownElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";var b=a.GetElementsByInterface,c=a.ParentNodeInterface,d=a.SelectorsInterface,e=a.mixin,f=a.registerObject,g=f(document.createDocumentFragment());e(g.prototype,c),e(g.prototype,d),e(g.prototype,b);var h=f(document.createTextNode("")),i=f(document.createComment(""));a.wrappers.Comment=i,a.wrappers.DocumentFragment=g,a.wrappers.Text=h}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b){var d=i(b.impl.ownerDocument.createDocumentFragment());c.call(this,d),g(d,this);var e=b.shadowRoot;a.nextOlderShadowTreeTable.set(this,e),j.set(this,b)}var c=a.wrappers.DocumentFragment,d=a.elementFromPoint,e=a.getInnerHTML,f=a.mixin,g=a.rewrap,h=a.setInnerHTML,i=a.unwrap,j=new SideTable;b.prototype=Object.create(c.prototype),f(b.prototype,{get innerHTML(){return e(this)},set innerHTML(a){h(this,a),this.invalidateShadowRenderer()},invalidateShadowRenderer:function(){return j.get(this).invalidateShadowRenderer()},elementFromPoint:function(a,b){return d(this,this.ownerDocument,a,b)},getElementById:function(a){return this.querySelector("#"+a)}}),a.wrappers.ShadowRoot=b,a.getHostForShadowRoot=function(a){return j.get(a)}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){a.previousSibling_=a.previousSibling,a.nextSibling_=a.nextSibling,a.parentNode_=a.parentNode}function c(a){a.firstChild_=a.firstChild,a.lastChild_=a.lastChild}function d(a){E(a instanceof D);for(var d=a.firstChild;d;d=d.nextSibling)b(d);c(a)}function e(a){var b=G(a);d(a),b.textContent=""}function f(a,c){var e=G(a),f=G(c);f.nodeType===D.DOCUMENT_FRAGMENT_NODE?d(c):(h(c),b(c)),a.lastChild_=a.lastChild,a.lastChild===a.firstChild&&(a.firstChild_=a.firstChild);var g=H(e.lastChild);g&&(g.nextSibling_=g.nextSibling),e.appendChild(f)}function g(a,c){var d=G(a),e=G(c);b(c),c.previousSibling&&(c.previousSibling.nextSibling_=c),c.nextSibling&&(c.nextSibling.previousSibling_=c),a.lastChild===c&&(a.lastChild_=c),a.firstChild===c&&(a.firstChild_=c),d.removeChild(e)}function h(a){var b=G(a),c=b.parentNode;c&&g(H(c),a)}function i(a,b){k(b).push(a),A(a,b);var c=J.get(a);c||J.set(a,c=[]),c.push(b)}function j(a){I.set(a,[])}function k(a){return I.get(a)}function l(a){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}function m(a,b,c){for(var d=l(a),e=0;e","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim();return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},propertiesFromRule:function(a){var b=a.style.cssText;return a.style.content&&!a.style.content.match(/['"]+/)&&(b="content: '"+a.style.content+"';\n"+a.style.cssText.replace(/content:[^;]*;/g,"")),b}},i=/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,j=/([^{]*)({[\s\S]*?})/gim,k=/(.*)((?:\*)|(?:\:scope))(.*)/,l=/^[.\[:]/,m=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,n=/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,o=/::(x-[^\s{,(]*)/gim,p="([>\\s~+[.,{:][\\s\\S]*)?$",q=/@host/gim;if(window.ShadowDOMPolyfill){e("style { display: none !important; }\n");var r=document.querySelector("head");r.insertBefore(f(),r.childNodes[0])}a.ShadowCSS=h}(window.Platform)}else{var SideTable;"undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0?SideTable=WeakMap:function(){var a=Object.defineProperty,b=Object.hasOwnProperty,c=(new Date).getTime()%1e9;SideTable=function(){this.name="__st"+(1e9*Math.random()>>>0)+(c++ +"__")},SideTable.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}(),function(){window.templateContent=window.templateContent||function(a){return a.content},window.wrap=window.unwrap=function(a){return a},Object.defineProperties(HTMLElement.prototype,{shadowRoot:{get:function(){return this.webkitShadowRoot}},createShadowRoot:{value:function(){return this.webkitCreateShadowRoot()}}}),window.templateContent=function(a){if(window.HTMLTemplateElement&&HTMLTemplateElement.bootstrap&&HTMLTemplateElement.bootstrap(a),!a.content&&!a._content){for(var b=document.createDocumentFragment();a.firstChild;)b.appendChild(a.firstChild);a._content=b}return a.content||a._content}}()}if(function(a){function b(a){for(var b=a||{},d=1;d",""," "," ShadowDOM Inspector"," "," "," ",'
    ',"
",'
'," ",""].join("\n"),d=[],e=function(){var a=b.document,c=a.querySelector("#crumbs");c.textContent="";for(var e,g=0;e=d[g];g++){var h=a.createElement("a");h.href="#",h.textContent=e.localName,h.idx=g,h.onclick=function(a){for(var b;d.length>this.idx;)b=d.pop();f(b.shadow||b,b),a.preventDefault()},c.appendChild(a.createElement("li")).appendChild(h)}},f=function(a,c){var f=b.document;k=[];var g=c||a;d.push(g),e(),f.body.querySelector("#tree").innerHTML="
"+j(a,a.childNodes)+"
"},g=Array.prototype.forEach.call.bind(Array.prototype.forEach),h={STYLE:1,SCRIPT:1,"#comment":1,TEMPLATE:1},i=function(a){return h[a.nodeName]},j=function(a,b,c){if(i(a))return"";var d=c||"";if(a.localName||11==a.nodeType){var e=a.localName||"shadow-root",f=d+l(a);"content"==e&&(b=a.getDistributedNodes()),f+="
";var h=d+"  ";g(b,function(a){f+=j(a,a.childNodes,h)}),f+=d,{br:1}[e]||(f+="</"+e+">",f+="
")}else{var k=a.textContent.trim();f=k?d+'"'+k+'"'+"
":""}return f},k=[],l=function(a){var b="<",c=a.localName||"shadow-root";return a.webkitShadowRoot||a.shadowRoot?(b+=' ",k.push(a)):b+=c||"shadow-root",a.attributes&&g(a.attributes,function(a){b+=" "+a.name+(a.value?'="'+a.value+'"':"")}),b+=">"};shadowize=function(){var a=Number(this.attributes.idx.value),b=k[a];b?f(b.webkitShadowRoot||b.shadowRoot,b):(console.log("bad shadowize node"),console.dir(this))},a.output=j}(window.Inspector),function(a){"use strict";function b(){function a(a){"splice"===a[0].type&&"splice"===a[1].type&&(b=!0)}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=!1,c=[0];return Array.observe(c,a),c[1]=1,c.length=0,Object.deliverChangeRecords(a),b}function c(a){return+a===a>>>0}function d(a){return+a}function e(a){return a===Object(a)}function f(a,b){return a===b?0!==a||1/a===1/b:K(a)&&K(b)?!0:a!==a&&b!==b}function g(a){return"string"!=typeof a?!1:(a=a.replace(/\s/g,""),""==a?!0:"."==a[0]?!1:S.test(a))}function h(a){var b=T[a];if(b)return b;if(g(a)){var b=new i(a);return T[a]=b,b}}function i(a){return""==a.trim()?this:c(a)?(this.push(String(a)),this):(a.split(/\./).filter(function(a){return a}).forEach(function(a){this.push(a)},this),H&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn()),void 0)}function j(a){for(var b=0;U>b&&a.check();)a.report(),b++}function k(a){for(var b in a)return!1;return!0}function l(a){return k(a.added)&&k(a.removed)&&k(a.changed)}function m(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function n(a,b){var c=b||(Array.isArray(a)?[]:{});for(var d in a)c[d]=a[d];return Array.isArray(a)&&(c.length=a.length),c}function o(a,b,c,d){this.object=a,this.callback=b,this.target=c,this.token=d,this.reporting=!0,G&&(this.boundInternalCallback=this.internalCallback.bind(this)),this.valid=!0,p(this),this.connect(),this.sync(!0)}function p(a){W&&(V.push(a),o._allObserversCount++)}function q(a,b,c,d){o.call(this,a,b,c,d)}function r(a,b,c,d){if(!Array.isArray(a))throw Error("Provided object is not an Array");o.call(this,a,b,c,d)}function s(a){this.arr=[],this.callback=a,this.isObserved=!0}function t(a,b,c,d,f){this.value=void 0;var g=h(b);return g?g.length?(e(a)&&(this.path=g,o.call(this,a,c,d,f)),void 0):(this.value=a,void 0):void 0}function u(a,b){if("function"==typeof Object.observe){var c=Object.getNotifier(a);return function(d,e){var f={object:a,type:d,name:b};2===arguments.length&&(f.oldValue=e),c.notify(f)}}}function v(a,b,c){for(var d={},e={},f=0;fj;j++)i[j]=new Array(h),i[j][0]=j;for(var k=0;h>k;k++)i[0][k]=k;for(var j=1;g>j;j++)for(var k=1;h>k;k++)if(d[e+j-1]===a[b+k-1])i[j][k]=i[j-1][k-1];else{var l=i[j-1][k]+1,m=i[j][k-1]+1;i[j][k]=m>l?l:m}return i}function x(a){for(var b=a.length-1,c=a[0].length-1,d=a[b][c],e=[];b>0||c>0;)if(0!=b)if(0!=c){var f,g=a[b-1][c-1],h=a[b-1][c],i=a[b][c-1];f=i>h?g>h?h:g:g>i?i:g,f==g?(g==d?e.push(ab):(e.push(bb),d=g),b--,c--):f==h?(e.push(db),b--,d=h):(e.push(cb),c--,d=i)}else e.push(db),b--;else e.push(cb),c--;return e.reverse(),e}function y(a,b,c){for(var d=0;c>d;d++)if(a[d]!==b[d])return d;return c}function z(a,b,c){for(var d=a.length,e=b.length,f=0;c>f&&a[--d]===b[--e];)f++;return f}function A(a,b,c){return{index:a,removed:b,addedCount:c}}function B(a,b,c,d,e,f){var g=0,h=0,i=Math.min(c-b,f-e);if(0==b&&0==e&&(g=y(a,d,i)),c==a.length&&f==d.length&&(h=z(a,d,i-g)),b+=g,e+=g,c-=h,f-=h,0==c-b&&0==f-e)return[];if(b==c){for(var j=A(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[A(b,[],c-b)];for(var k=x(w(a,b,c,d,e,f)),j=void 0,l=[],m=b,n=e,o=0;ob||a>d?-1:b==c||d==a?0:c>a?d>b?b-c:d-c:b>d?d-a:b-a}function D(a,b,c,d){for(var e=A(b,c,d),f=!1,g=0,h=0;h=0){a.splice(h,1),h--,g-=i.addedCount-i.removed.length,e.addedCount+=i.addedCount-j;var k=e.removed.length+i.removed.length-j;if(e.addedCount||k){var c=i.removed;if(e.indexi.index+i.addedCount){var m=e.removed.slice(i.index+i.addedCount-e.index);Array.prototype.push.apply(c,m)}e.removed=c,i.indexh)continue;D(e,h,[g.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(g))}}return e}function F(a,b){var c=[];return E(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?(b.removed[0]!==a[b.index]&&c.push(b),void 0):(c=c.concat(B(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)),void 0)}),c}var G=b(),H=!1;try{var I=new Function("","return true;");H=I()}catch(J){}var K=a.Number.isNaN||function(b){return"number"==typeof b&&a.isNaN(b)},L="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},M="[$_a-zA-Z]",N="[$_a-zA-Z0-9]",O=M+"+"+N+"*",P="(?:[0-9]|[1-9]+[0-9]+)",Q="(?:"+O+"|"+P+")",R="(?:"+Q+")(?:\\."+Q+")*",S=new RegExp("^"+R+"$"),T={};i.prototype=L({__proto__:[],toString:function(){return this.join(".")},getValueFrom:function(a){for(var b=0;ba&&b.anyChanged);o._allObserversCount=V.length,X=!1}}},W&&(a.Platform.clearObservers=function(){V=[]}),q.prototype=L({__proto__:o.prototype,connect:function(){G&&Object.observe(this.object,this.boundInternalCallback)},sync:function(){G||(this.oldObject=n(this.object))},check:function(a){var b,c;if(G){if(!a)return!1;c={},b=v(this.object,a,c)}else c=this.oldObject,b=m(this.object,this.oldObject);return l(b)?!1:(this.reportArgs=[b.added||{},b.removed||{},b.changed||{}],this.reportArgs.push(function(a){return c[a]}),!0)},disconnect:function(){G?this.object&&Object.unobserve(this.object,this.boundInternalCallback):this.oldObject=void 0}}),r.prototype=L({__proto__:q.prototype,connect:function(){G&&Array.observe(this.object,this.boundInternalCallback)},sync:function(){G||(this.oldObject=this.object.slice())},check:function(a){var b;if(G){if(!a)return!1;b=F(this.object,a)}else b=B(this.object,0,this.object.length,this.oldObject,0,this.oldObject.length);return b&&b.length?(this.reportArgs=[b],!0):!1}}),r.applySplices=function(a,b,c){c.forEach(function(c){for(var d=[c.index,c.removed.length],e=c.index;e=0&&this.arr[b+1]===this.isObserved||(0>b&&(b=this.arr.length,this.arr[b]=a,Object.observe(a,this.callback)),this.arr[b+1]=this.isObserved,this.observe(Object.getPrototypeOf(a)))}},cleanup:function(){for(var a=0,b=0,c=this.isObserved;ba&&(this.arr[a]=d,this.arr[a+1]=c),a+=2):Object.unobserve(d,this.callback),b+=2}this.arr.length=a}},t.prototype=L({__proto__:o.prototype,connect:function(){G&&(this.observedSet=new s(this.boundInternalCallback))},disconnect:function(){this.value=void 0,G&&(this.observedSet.reset(),this.observedSet.cleanup(),this.observedSet=void 0)},check:function(){return this.value=G?this.path.getValueFromObserved(this.object,this.observedSet):this.path.getValueFrom(this.object),f(this.value,this.oldValue)?!1:(this.reportArgs=[this.value,this.oldValue],!0)},sync:function(a){a&&(this.value=G?this.path.getValueFromObserved(this.object,this.observedSet):this.path.getValueFrom(this.object)),this.oldValue=this.value}}),t.getValueAtPath=function(a,b){var c=h(b);return c?c.getValueFrom(a):void 0},t.setValueAtPath=function(a,b,c){var d=h(b);d&&d.setValueFrom(a,c)};var _={"new":!0,updated:!0,deleted:!0};t.defineProperty=function(a,b,c){var d=c.object,e=h(c.path),f=u(a,b),g=new t(d,c.path,function(a,b){f&&f("updated",b)});return Object.defineProperty(a,b,{get:function(){return e.getValueFrom(d)},set:function(a){e.setValueFrom(d,a)},configurable:!0}),{close:function(){var c=e.getValueFrom(d);f&&g.deliver(),g.close(),Object.defineProperty(a,b,{value:c,writable:!0,configurable:!0})}}};var ab=0,bb=1,cb=2,db=3;a.Observer=o,a.Observer.hasObjectObserve=G,a.ArrayObserver=r,a.ArrayObserver.calculateSplices=function(a,b){return B(a,0,a.length,b,0,b.length)},a.ObjectObserver=q,a.PathObserver=t,a.Path=i}(this),function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a){for(;a.parentNode;)a=a.parentNode;return"function"==typeof a.getElementById?a:null}function d(a){return a.ownerDocument.contains(a)}function e(a,b,c,d){this.closed=!1,this.node=a,this.property=b,this.model=c,this.path=d,this.observer=new PathObserver(c,d,this.boundValueChanged,this),this.boundValueChanged(this.value)}function f(a,b,c,d){this.conditional="?"==b[b.length-1],this.conditional&&(a.removeAttribute(b),b=b.slice(0,-1)),e.call(this,a,b,c,d)}function g(a){switch(a.type){case"checkbox":return T;case"radio":case"select-multiple":case"select-one":return"change";default:return"input"}}function h(a,b,c,d){e.call(this,a,b,c,d),this.eventType=g(this.node),this.boundNodeValueToModel=this.nodeValueChanged.bind(this),this.node.addEventListener(this.eventType,this.boundNodeValueToModel,!0)}function i(a){if(!d(a))return[];if(a.form)return Q(a.form.elements,function(b){return b!=a&&"INPUT"==b.tagName&&"radio"==b.type&&b.name==a.name});var b=a.ownerDocument.querySelectorAll('input[type="radio"][name="'+a.name+'"]');return Q(b,function(b){return b!=a&&!b.form})}function j(a,b,c){h.call(this,a,"checked",b,c)}function k(a,b,c){h.call(this,a,"selectedIndex",b,c)}function l(a){return $[a.tagName]&&a.hasAttribute("template")}function m(a){return"TEMPLATE"==a.tagName||l(a)}function n(a){return _&&"TEMPLATE"==a.tagName}function o(a,b){var c=a.querySelectorAll(ab);m(a)&&b(a),P(c,b)}function p(a){function b(a){HTMLTemplateElement.decorate(a)||p(a.content)}o(a,b)}function q(a,b){Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))})}function r(a){if(!a.defaultView)return a;var b=eb.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);eb.set(a,b)}return b}function s(a){var b=a.ownerDocument.createElement("template");a.parentNode.insertBefore(b,a);for(var c=a.attributes,d=c.length;d-->0;){var e=c[d];Z[e.name]&&("template"!==e.name&&b.setAttribute(e.name,e.value),a.removeAttribute(e.name))}return b}function t(a,b,c){var d=a.content;if(c)return d.appendChild(b),void 0;for(var e;e=b.firstChild;)d.appendChild(e)}function u(a){"TEMPLATE"===a.tagName?_||(cb?a.__proto__=HTMLTemplateElement.prototype:q(a,HTMLTemplateElement.prototype)):(q(a,HTMLTemplateElement.prototype),Object.defineProperty(a,"content",ib))}function v(a){var b=lb.get(a);b||(b=function(){H(a,a.model,a.bindingDelegate)},lb.set(a,b)),bb(b)}function w(a,b,c,d){this.closed=!1,this.node=a,this.property=b,this.model=c,this.path=d,this.node.inputs.bind(this.property,c,d||"")}function x(a){return 3==a.length&&0==a[0].length&&0==a[2].length}function y(a){if(a&&a.length){for(var b,c=a.length,d=0,e=0,f=0;c>e;){if(d=a.indexOf("{{",e),f=0>d?-1:a.indexOf("}}",d+2),0>f){if(!b)return;b.push(a.slice(e));break}b=b||[],b.push(a.slice(e,d)),b.push(a.slice(d+2,f).trim()),e=f+2}return e===c&&b.push(""),b}}function z(a,b,c,d,e){var f,g=e&&e[X];return g&&"function"==typeof g&&(f=g(c,d,b,a),f&&(c=f,d="value")),a.bind(b,c,d)}function A(a,b,c,d,e){for(var f=0;fc?(this.keys.push(a),this.values.push(b)):this.values[c]=b},get:function(a){var b=this.keys.indexOf(a);return 0>b?void 0:this.values[b]},"delete":function(a){var b=this.keys.indexOf(a);return 0>b?!1:(this.keys.splice(b,1),this.values.splice(b,1),!0)},forEach:function(a,b){for(var c=0;c>>0)+(c++ +"__")},S.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}(),Node.prototype.bind=function(a,b,c){this.bindings=this.bindings||{};var d=this.bindings[a];return d&&d.close(),d=this.createBinding(a,b,c),this.bindings[a]=d,d?d:(console.error("Unhandled binding to Node: ",this,a,b,c),void 0)},Node.prototype.createBinding=function(){},Node.prototype.unbind=function(a){if(this.bindings){var b=this.bindings[a];b&&(b.close(),delete this.bindings[a])}},Node.prototype.unbindAll=function(){if(this.bindings){for(var a=Object.keys(this.bindings),b=0;be.node.length&&d--?bb(b):e.node[e.property]=c}var c=Number(a);if(c<=this.node.length)return this.node[this.property]=c,void 0;var d=2,e=this;bb(b)}}),HTMLSelectElement.prototype.createBinding=function(a,b,c){return"selectedindex"===a.toLowerCase()?(this.removeAttribute(a),new k(this,b,c)):HTMLElement.prototype.createBinding.call(this,a,b,c)};var U="bind",V="repeat",W="if",X="getBinding",Y="getInstanceModel",Z={template:!0,repeat:!0,bind:!0,ref:!0},$={THEAD:!0,TBODY:!0,TFOOT:!0,TH:!0,TR:!0,TD:!0,COLGROUP:!0,COL:!0,CAPTION:!0,OPTION:!0,OPTGROUP:!0},_="undefined"!=typeof HTMLTemplateElement,ab="template, "+Object.keys($).map(function(a){return a.toLowerCase()+"[template]"}).join(", "),bb=function(){function a(a){this.nextRunner=a,this.value=!1,this.lastValue=this.value,this.scheduled=[],this.scheduledIds=[],this.running=!1,this.observer=new PathObserver(this,"value",this.run,this)}function b(a){var b=a[e];a[e]||(b=d++,a[e]=b),c.schedule(a,b)}a.prototype={schedule:function(a,b){if(!this.scheduledIds[b]){if(this.running)return this.nextRunner.schedule(a,b);this.scheduledIds[b]=!0,this.scheduled.push(a),this.lastValue===this.value&&(this.value=!this.value)}},run:function(){this.running=!0;for(var a=0;a=48&&57>=a}function d(a){return 32===a||9===a||11===a||12===a||160===a||a>=5760&&" ᠎              ".indexOf(String.fromCharCode(a))>0}function e(a){return 10===a||13===a||8232===a||8233===a}function f(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a}function g(a){return 36===a||95===a||a>=65&&90>=a||a>=97&&122>=a||a>=48&&57>=a}function h(a){return"this"===a}function i(){for(;bb>ab&&d(_.charCodeAt(ab));)++ab}function j(){var a,b;for(a=ab++;bb>ab&&(b=_.charCodeAt(ab),g(b));)++ab;return _.slice(a,ab)}function k(){var a,b,c;return a=ab,b=j(),c=1===b.length?X.Identifier:h(b)?X.Keyword:"null"===b?X.NullLiteral:"true"===b||"false"===b?X.BooleanLiteral:X.Identifier,{type:c,value:b,range:[a,ab]}}function l(){var a,b,c,d,e=ab,f=_.charCodeAt(ab),g=_[ab];switch(f){case 46:case 40:case 41:case 59:case 44:case 123:case 125:case 91:case 93:case 58:case 63:case 126:return++ab,{type:X.Punctuator,value:String.fromCharCode(f),range:[e,ab]};default:if(a=_.charCodeAt(ab+1),61===a)switch(f){case 37:case 38:case 42:case 43:case 45:case 47:case 60:case 62:case 94:case 124:return ab+=2,{type:X.Punctuator,value:String.fromCharCode(f)+String.fromCharCode(a),range:[e,ab]};case 33:case 61:return ab+=2,61===_.charCodeAt(ab)&&++ab,{type:X.Punctuator,value:_.slice(e,ab),range:[e,ab]}}}return b=_[ab+1],c=_[ab+2],d=_[ab+3],">"===g&&">"===b&&">"===c&&"="===d?(ab+=4,{type:X.Punctuator,value:">>>=",range:[e,ab]}):">"===g&&">"===b&&">"===c?(ab+=3,{type:X.Punctuator,value:">>>",range:[e,ab]}):"<"===g&&"<"===b&&"="===c?(ab+=3,{type:X.Punctuator,value:"<<=",range:[e,ab]}):">"===g&&">"===b&&"="===c?(ab+=3,{type:X.Punctuator,value:">>=",range:[e,ab]}):g===b&&"+-<>&|".indexOf(g)>=0?(ab+=2,{type:X.Punctuator,value:g+b,range:[e,ab]}):"<>=!+-*%&|^/".indexOf(g)>=0?(++ab,{type:X.Punctuator,value:g,range:[e,ab]}):(s({},$.UnexpectedToken,"ILLEGAL"),void 0)}function m(){var a,d,e;if(e=_[ab],b(c(e.charCodeAt(0))||"."===e,"Numeric literal must start with a decimal digit or a decimal point"),d=ab,a="","."!==e){for(a=_[ab++],e=_[ab],"0"===a&&e&&c(e.charCodeAt(0))&&s({},$.UnexpectedToken,"ILLEGAL");c(_.charCodeAt(ab));)a+=_[ab++];e=_[ab]}if("."===e){for(a+=_[ab++];c(_.charCodeAt(ab));)a+=_[ab++];e=_[ab]}if("e"===e||"E"===e)if(a+=_[ab++],e=_[ab],("+"===e||"-"===e)&&(a+=_[ab++]),c(_.charCodeAt(ab)))for(;c(_.charCodeAt(ab));)a+=_[ab++];else s({},$.UnexpectedToken,"ILLEGAL");return f(_.charCodeAt(ab))&&s({},$.UnexpectedToken,"ILLEGAL"),{type:X.NumericLiteral,value:parseFloat(a),range:[d,ab]}}function n(){var a,c,d,f="",g=!1;for(a=_[ab],b("'"===a||'"'===a,"String literal must starts with a quote"),c=ab,++ab;bb>ab;){if(d=_[ab++],d===a){a="";break}if("\\"===d)if(d=_[ab++],d&&e(d.charCodeAt(0)))"\r"===d&&"\n"===_[ab]&&++ab;else switch(d){case"n":f+="\n";break;case"r":f+="\r";break;case"t":f+=" ";break;case"b":f+="\b";break;case"f":f+="\f";break;case"v":f+=" ";break;default:f+=d}else{if(e(d.charCodeAt(0)))break;f+=d}}return""!==a&&s({},$.UnexpectedToken,"ILLEGAL"),{type:X.StringLiteral,value:f,octal:g,range:[c,ab]}}function o(a){return a.type===X.Identifier||a.type===X.Keyword||a.type===X.BooleanLiteral||a.type===X.NullLiteral}function p(){var a;return i(),ab>=bb?{type:X.EOF,range:[ab,ab]}:(a=_.charCodeAt(ab),40===a||41===a||58===a?l():39===a||34===a?n():f(a)?k():46===a?c(_.charCodeAt(ab+1))?m():l():c(a)?m():l())}function q(){var a;return a=db,ab=a.range[1],db=p(),ab=a.range[1],a}function r(){var a;a=ab,db=p(),ab=a}function s(a,c){var d,e=Array.prototype.slice.call(arguments,2),f=c.replace(/%(\d)/g,function(a,c){return b(cab&&(a.push(O()),!v(")"));)u(",");return u(")"),a}function F(){var a;return a=q(),o(a)||t(a),cb.createIdentifier(a.value)}function G(){return u("."),F()}function H(){var a;return u("["),a=P(),u("]"),a}function I(){var a,b,c;for(a=D();v(".")||v("[")||v("(");)v("(")?(b=E(),a=cb.createCallExpression(a,b)):v("[")?(c=H(),a=cb.createMemberExpression("[",a,c)):(c=G(),a=cb.createMemberExpression(".",a,c));return a}function J(){var a;return a=I(),db.type===X.Punctuator&&(v("++")||v("--"))&&s({},$.UnexpectedToken),a}function K(){var a,b;return db.type!==X.Punctuator&&db.type!==X.Keyword?b=J():v("++")||v("--")?s({},$.UnexpectedToken):v("+")||v("-")||v("~")||v("!")?(a=q(),b=K(),b=cb.createUnaryExpression(a.value,b)):w("delete")||w("void")||w("typeof")?s({},$.UnexpectedToken):b=J(),b}function L(a,b){var c=0;if(a.type!==X.Punctuator&&a.type!==X.Keyword)return 0;switch(a.value){case"||":c=1;break;case"&&":c=2;break;case"|":c=3;break;case"^":c=4;break;case"&":c=5;break;case"==":case"!=":case"===":case"!==":c=6;break;case"<":case">":case"<=":case">=":case"instanceof":c=7;break;case"in":c=b?7:0;break;case"<<":case">>":case">>>":c=8;break;case"+":case"-":c=9;break;case"*":case"/":case"%":c=11}return c}function M(){var a,b,c,d,e,f,g,h,i;if(d=eb.allowIn,eb.allowIn=!0,h=K(),b=db,c=L(b,d),0===c)return h;for(b.prec=c,q(),f=K(),e=[h,b,f];(c=L(db,d))>0;){for(;e.length>2&&c<=e[e.length-2].prec;)f=e.pop(),g=e.pop().value,h=e.pop(),a=cb.createBinaryExpression(g,h,f),e.push(a);b=q(),b.prec=c,e.push(b),a=K(),e.push(a)}for(eb.allowIn=d,i=e.length-1,a=e[i];i>1;)a=cb.createBinaryExpression(e[i-1].value,e[i-2],a),i-=2;return a}function N(){var a,b,c,d;return a=M(),v("?")&&(q(),b=eb.allowIn,eb.allowIn=!0,c=O(),eb.allowIn=b,u(":"),d=O(),a=cb.createConditionalExpression(a,c,d)),a}function O(){var a,b,c;return a=db,c=b=N()}function P(){var a;return a=O()}function Q(){return u(";"),cb.createEmptyStatement()}function R(){var a=P();return x(),cb.createExpressionStatement(a)}function S(){var a,b,c,d=db.type;if(d===X.EOF&&t(db),i(),d===X.Punctuator)switch(db.value){case";":return Q();case"(":return R()}return a=P(),a.type===Z.Identifier&&v(":")?(q(),c="$"+a.name,Object.prototype.hasOwnProperty.call(eb.labelSet,c)&&s({},$.Redeclaration,"Label",a.name),eb.labelSet[c]=!0,b=S(),delete eb.labelSet[c],cb.createLabeledStatement(a,b)):(x(),cb.createExpressionStatement(a))}function T(){return db.type===X.Keyword?S():db.type!==X.EOF?S():void 0}function U(){for(var a,b=[];bb>ab&&(a=T(),"undefined"!=typeof a);)b.push(a);return b}function V(){var a;return i(),r(),a=U(),cb.createProgram(a)}function W(a,b){var c;return c=String,"string"==typeof a||a instanceof String||(a=c(a)),cb=b,_=a,ab=0,bb=_.length,db=null,eb={allowIn:!0,labelSet:{}},bb>0&&"undefined"==typeof _[0]&&a instanceof String&&(_=a.valueOf()),V()}var X,Y,Z,$,_,ab,bb,cb,db,eb;X={BooleanLiteral:1,EOF:2,Identifier:3,Keyword:4,NullLiteral:5,NumericLiteral:6,Punctuator:7,StringLiteral:8},Y={},Y[X.BooleanLiteral]="Boolean",Y[X.EOF]="",Y[X.Identifier]="Identifier",Y[X.Keyword]="Keyword",Y[X.NullLiteral]="Null",Y[X.NumericLiteral]="Numeric",Y[X.Punctuator]="Punctuator",Y[X.StringLiteral]="String",Z={ArrayExpression:"ArrayExpression",BinaryExpression:"BinaryExpression",CallExpression:"CallExpression",ConditionalExpression:"ConditionalExpression",EmptyStatement:"EmptyStatement",ExpressionStatement:"ExpressionStatement",Identifier:"Identifier",Literal:"Literal",LabeledStatement:"LabeledStatement",LogicalExpression:"LogicalExpression",MemberExpression:"MemberExpression",ObjectExpression:"ObjectExpression",Program:"Program",Property:"Property",ThisExpression:"ThisExpression",UnaryExpression:"UnaryExpression"},$={UnexpectedToken:"Unexpected token %0",UnknownLabel:"Undefined label '%0'",Redeclaration:"%0 '%1' has already been declared"},a.esprima={parse:W}}(this),function(a){"use strict";function b(a,b,d,e){if(e.nodeType===Node.ELEMENT_NODE&&"TEMPLATE"===e.tagName&&("bind"===d||"repeat"===d)){var f,g,h=b.match(r);if(h?(f=h[1],g=h[2]):(h=b.match(s),h&&(f=h[2],g=h[1])),h){var i;if(g=g.trim(),g.match(q))i=new CompoundBinding(function(a){return a.path}),i.bind("path",a,g);else try{i=c(a,g)}catch(j){console.error("Invalid expression syntax: "+g,j)}if(i)return t.set(e,f),i}}}function c(a,b){try{var c=new f;if(esprima.parse(b,c),!c.statements.length&&!c.labeledStatements.length)return;if(!c.labeledStatements.length&&c.statements.length>1)throw Error("Multiple unlabelled statements are not allowed.");var e=c.labeledStatements.length?d(c.labeledStatements):e=c.statements[0],g=[];for(var h in c.deps)g.push(h);if(!g.length)return{value:e({})};for(var i=new CompoundBinding(e),j=0;j>>0)+(c++ +"__")},i.prototype={set:function(b,c){a(b,this.name,{value:c,writable:!0})},get:function(a){return b.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}();var j="[$_a-zA-Z]",k="[$_a-zA-Z0-9]",l=j+"+"+k+"*",m="("+l+")",n="(?:[0-9]|[1-9]+[0-9]+)",o="(?:"+l+"|"+n+")",p="(?:"+o+")(?:\\."+o+")*",q=new RegExp("^"+p+"$"),r=new RegExp("^"+m+"\\s* in (.*)$"),s=new RegExp("^(.*) as \\s*"+m+"$"),t=new i;e.prototype={getPath:function(){return this.last?this.last.getPath()+"."+this.name:this.name},valueFn:function(){var a=this.getPath();return this.deps[a]=!0,function(b){return b[a]}}};var u={"+":function(a){return+a},"-":function(a){return-a},"!":function(a){return!a}},v={"+":function(a,b){return a+b},"-":function(a,b){return a-b},"*":function(a,b){return a*b},"/":function(a,b){return a/b},"%":function(a,b){return a%b},"<":function(a,b){return b>a},">":function(a,b){return a>b},"<=":function(a,b){return b>=a},">=":function(a,b){return a>=b},"==":function(a,b){return a==b},"!=":function(a,b){return a!=b},"===":function(a,b){return a===b},"!==":function(a,b){return a!==b},"&&":function(a,b){return a&&b},"||":function(a,b){return a||b}};f.prototype={getFn:function(a){return a instanceof e?a.valueFn():a},createProgram:function(){},createExpressionStatement:function(a){return this.statements.push(a),a},createLabeledStatement:function(a,b){return this.labeledStatements.push({label:a.getPath(),body:b instanceof e?b.valueFn():b}),b},createUnaryExpression:function(a,b){if(!u[a])throw Error("Disallowed operator: "+a);return b=this.getFn(b),function(c){return u[a](b(c))}},createBinaryExpression:function(a,b,c){if(!v[a])throw Error("Disallowed operator: "+a);return b=this.getFn(b),c=this.getFn(c),function(d){return v[a](b(d),c(d))}},createConditionalExpression:function(a,b,c){return a=this.getFn(a),b=this.getFn(b),c=this.getFn(c),function(d){return a(d)?b(d):c(d)}},createIdentifier:function(a){var b=new e(this.deps,a);return b.type="Identifier",b},createMemberExpression:function(a,b,c){return new e(this.deps,c.name,b)},createLiteral:function(a){return function(){return a.value}},createArrayExpression:function(a){for(var b=0;be;e++)d.unshift("..");var g=d.join("/");return g},resolvePathsInHTML:function(a,b){b=b||p.documentUrlFromNode(a),p.resolveAttributes(a,b),p.resolveStyleElts(a,b);var c=a.querySelectorAll("template");c&&q(c,function(a){a.content&&p.resolvePathsInHTML(a.content,b)})},resolvePathsInStylesheet:function(a){var b=p.nodeUrl(a);a.__resource=p.resolveCssText(a.__resource,b)},resolveStyleElts:function(a,b){var c=a.querySelectorAll("style");c&&q(c,function(a){a.textContent=p.resolveCssText(a.textContent,b)})},resolveCssText:function(a,b){return a.replace(/url\([^)]*\)/g,function(a){var c=a.replace(/["']/g,"").slice(4,-1);return c=p.resolveUrl(b,c,!0),"url("+c+")"})},resolveAttributes:function(a,b){var c=a&&a.querySelectorAll(n);c&&q(c,function(a){this.resolveNodeAttributes(a,b)},this)},resolveNodeAttributes:function(a,b){m.forEach(function(c){var d=a.attributes[c];if(d&&d.value&&d.value.search(o)<0){var e=p.resolveUrl(b,d.value,!0);d.value=e}})}};h=h||{async:!0,ok:function(a){return a.status>=200&&a.status<300||304===a.status||0===a.status},load:function(b,c,d){var e=new XMLHttpRequest;return(a.flags.debug||a.flags.bust)&&(b+="?"+Math.random()),e.open("GET",b,h.async),e.addEventListener("readystatechange",function(){4===e.readyState&&c.call(d,!h.ok(e)&&e,e.response,b)}),e.send(),e},loadDocument:function(a,b,c){this.load(a,b,c).responseType="document"}};var q=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.path=p,a.xhr=h,a.importer=k,a.getDocumentUrl=p.getDocumentUrl,a.IMPORT_LINK_TYPE=i}(window.HTMLImports),function(a){function b(a){return"link"===a.localName&&a.getAttribute("rel")===f}function c(a){return a.parentNode&&!d(a)&&!e(a)}function d(a){return a.ownerDocument===document||a.ownerDocument.impl===document}function e(a){return a.parentNode&&"element"===a.parentNode.localName}var f="import",g={selectors:["link[rel="+f+"]","link[rel=stylesheet]","style","script:not([type])",'script[type="text/javascript"]'],map:{link:"parseLink",script:"parseScript",style:"parseGeneric"},parse:function(a){if(!a.__importParsed){a.__importParsed=!0;var b=a.querySelectorAll(g.selectors);h(b,function(a){g[g.map[a.localName]](a)})}},parseLink:function(a){b(a)?a.content&&g.parse(a.content):this.parseGeneric(a)},parseGeneric:function(a){c(a)&&document.head.appendChild(a)},parseScript:function(b){if(c(b)){var d=(b.__resource||b.textContent).trim();if(d){var e=b.__nodeUrl;if(!e){var e=a.path.documentUrlFromNode(b),f="["+Math.floor(1e3*(Math.random()+1))+"]",g=d.match(/Polymer\(['"]([^'"]*)/);f=g&&g[1]||f,e+="/"+f+".js"}d+="\n//# sourceURL="+e+"\n",eval.call(window,d)}}}},h=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.parser=g}(HTMLImports),function(){function a(){HTMLImports.importer.load(document,function(){HTMLImports.parser.parse(document),HTMLImports.readyTime=(new Date).getTime(),document.dispatchEvent(new CustomEvent("HTMLImportsLoaded",{bubbles:!0}))})}"function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState?a():window.addEventListener("DOMContentLoaded",a)}(),function(a){function b(a){u.push(a),t||(t=!0,q(d))}function c(a){return window.ShadowDOMPolyfill&&window.ShadowDOMPolyfill.wrapIfNeeded(a)||a}function d(){t=!1;var a=u;u=[],a.sort(function(a,b){return a.uid_-b.uid_});var b=!1;a.forEach(function(a){var c=a.takeRecords();e(a),c.length&&(a.callback_(c,a),b=!0)}),b&&d()}function e(a){a.nodes_.forEach(function(b){var c=p.get(b);c&&c.forEach(function(b){b.observer===a&&b.removeTransientObservers()})})}function f(a,b){for(var c=a;c;c=c.parentNode){var d=p.get(c);if(d)for(var e=0;e0){var e=c[d-1],f=n(e,a);if(f)return c[d-1]=f,void 0}else b(this.observer);c[d]=a},addListeners:function(){this.addListeners_(this.target)},addListeners_:function(a){var b=this.options;b.attributes&&a.addEventListener("DOMAttrModified",this,!0),b.characterData&&a.addEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.addEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.addEventListener("DOMNodeRemoved",this,!0)},removeListeners:function(){this.removeListeners_(this.target)},removeListeners_:function(a){var b=this.options;b.attributes&&a.removeEventListener("DOMAttrModified",this,!0),b.characterData&&a.removeEventListener("DOMCharacterDataModified",this,!0),b.childList&&a.removeEventListener("DOMNodeInserted",this,!0),(b.childList||b.subtree)&&a.removeEventListener("DOMNodeRemoved",this,!0)},addTransientObserver:function(a){if(a!==this.target){this.addListeners_(a),this.transientObservedNodes.push(a);var b=p.get(a);b||p.set(a,b=[]),b.push(this)}},removeTransientObservers:function(){var a=this.transientObservedNodes;this.transientObservedNodes=[],a.forEach(function(a){this.removeListeners_(a);for(var b=p.get(a),c=0;c1?logFlags.dom&&console.warn("inserted:",a.localName,"insert/remove count:",a.__inserted):a.insertedCallback&&(logFlags.dom&&console.log("inserted:",a.localName),a.insertedCallback())),logFlags.dom&&console.groupEnd())}function j(a){k(a),c(a,function(a){k(a)})}function k(a){(a.removedCallback||a.__upgraded__&&logFlags.dom)&&(logFlags.dom&&console.log("removed:",a.localName),l(a)||(a.__inserted=(a.__inserted||0)-1,a.__inserted>0&&(a.__inserted=0),a.__inserted<0?logFlags.dom&&console.warn("removed:",a.localName,"insert/remove count:",a.__inserted):a.removedCallback&&a.removedCallback()))}function l(a){for(var b=a;b;){if(b==a.ownerDocument)return!0;b=b.parentNode||b.host}}function m(a){a.webkitShadowRoot&&!a.webkitShadowRoot.__watched&&(logFlags.dom&&console.log("watching shadow-root for: ",a.localName),r(a.webkitShadowRoot),a.webkitShadowRoot.__watched=!0)}function n(a){m(a),c(a,function(){m(a)})}function o(a){switch(a.localName){case"style":case"script":case"template":case void 0:return!0}}function p(a){if(logFlags.dom){var b=a[0];if(b&&"childList"===b.type&&b.addedNodes&&b.addedNodes){for(var c=b.addedNodes[0];c&&c!==document&&!c.host;)c=c.parentNode;var d=c&&(c.URL||c._URL||c.host&&c.host.localName)||"";d=d.split("/?").shift().split("/").pop()}console.group("mutations (%d) [%s]",a.length,d||"")}a.forEach(function(a){"childList"===a.type&&(v(a.addedNodes,function(a){o(a)||f(a)}),v(a.removedNodes,function(a){o(a)||j(a)}))}),logFlags.dom&&console.groupEnd()}function q(){p(u.takeRecords())}function r(a){u.observe(a,{childList:!0,subtree:!0})}function s(a){r(a)}function t(a){logFlags.dom&&console.group("upgradeDocument: ",(a.URL||a._URL||"").split("/").pop()),f(a),logFlags.dom&&console.groupEnd()}var u=new MutationObserver(p),v=Array.prototype.forEach.call.bind(Array.prototype.forEach);a.watchShadow=m,a.watchAllShadows=n,a.upgradeAll=f,a.upgradeSubtree=e,a.observeDocument=s,a.upgradeDocument=t,a.takeRecords=q}(window.CustomElements),function(){function parseElementElement(a){var b={name:"","extends":null};takeAttributes(a,b);var c=HTMLElement.prototype;if(b.extends){var d=document.createElement(b.extends);c=d.__proto__||Object.getPrototypeOf(d)}b.prototype=Object.create(c),a.options=b;var e=a.querySelector('script:not([type]),script[type="text/javascript"],scripts');e&&executeComponentScript(e.textContent,a,b.name);var f=document.register(b.name,b);a.ctor=f;var g=a.getAttribute("constructor");g&&(window[g]=f)}function takeAttributes(a,b){for(var c in b){var d=a.attributes[c];d&&(b[c]=d.value)}}function executeComponentScript(inScript,inContext,inName){context=inContext;var owner=context.ownerDocument,url=owner._URL||owner.URL||owner.impl&&(owner.impl._URL||owner.impl.URL),match=url.match(/.*\/([^.]*)[.]?.*$/);if(match){var name=match[1];url+=name!=inName?":"+inName:""}var code="__componentScript('"+inName+"', function(){"+inScript+"});"+"\n//# sourceURL="+url+"\n";eval(code)}function mixin(a,b){a=a||{};try{Object.getOwnPropertyNames(b).forEach(function(c){var d=Object.getOwnPropertyDescriptor(b,c);d&&Object.defineProperty(a,c,d)})}catch(c){}return a}var HTMLElementElement=function(a){return a.register=HTMLElementElement.prototype.register,parseElementElement(a),a};HTMLElementElement.prototype={register:function(a){a&&(this.options.lifecycle=a.lifecycle,a.prototype&&mixin(this.options.prototype,a.prototype))}};var context;window.__componentScript=function(a,b){b.call(context)},window.HTMLElementElement=HTMLElementElement}(),function(){function a(a){return"link"===a.localName&&a.getAttribute("rel")===b}var b=window.HTMLImports?HTMLImports.IMPORT_LINK_TYPE:"none",c={selectors:["link[rel="+b+"]","element"],map:{link:"parseLink",element:"parseElement"},parse:function(a){if(!a.__parsed){a.__parsed=!0;var b=a.querySelectorAll(c.selectors);d(b,function(a){c[c.map[a.localName]](a)}),CustomElements.upgradeDocument(a),CustomElements.observeDocument(a)}},parseLink:function(b){a(b)&&this.parseImport(b)},parseImport:function(a){a.content&&c.parse(a.content)},parseElement:function(a){new HTMLElementElement(a)}},d=Array.prototype.forEach.call.bind(Array.prototype.forEach);CustomElements.parser=c}(),function(){function a(){setTimeout(function(){CustomElements.parser.parse(document),CustomElements.upgradeDocument(document),CustomElements.ready=!0,CustomElements.readyTime=Date.now(),window.HTMLImports&&(CustomElements.elapsed=CustomElements.readyTime-HTMLImports.readyTime),document.body.dispatchEvent(new CustomEvent("WebComponentsReady",{bubbles:!0}))},0)}if("function"!=typeof window.CustomEvent&&(window.CustomEvent=function(a){var b=document.createEvent("HTMLEvents");return b.initEvent(a,!0,!0),b}),"complete"===document.readyState)a();else{var b=window.HTMLImports?"HTMLImportsLoaded":"DOMContentLoaded";window.addEventListener(b,a)}}(),function(){function a(){}var b=document.createElement("style");b.textContent="element {display: none !important;} /* injected by platform.js */";var c=document.querySelector("head");if(c.insertBefore(b,c.firstChild),window.ShadowDOMPolyfill){CustomElements.watchShadow=a,CustomElements.watchAllShadows=a;var d=["upgradeAll","upgradeSubtree","observeDocument","upgradeDocument"],e={};d.forEach(function(a){e[a]=CustomElements[a]}),d.forEach(function(a){CustomElements[a]=function(b){return e[a](wrap(b))}})}}(),function(a){a=a||{};var b={shadow:function(a){return a?a.shadowRoot||a.webkitShadowRoot:void 0},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);return this.canTarget(b)?b:void 0},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d}e=this.olderShadow(e)}return f}},owner:function(a){for(var b=a;b.parentNode;)b=b.parentNode;return b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);return d.elementFromPoint(b,c)||(d=document),this.searchRoot(document,b,c)}};a.targetFinding=b,a.findTarget=b.findTarget.bind(b),window.PointerEventsPolyfill=a}(window.PointerEventsPolyfill),function(){function a(a){return'[touch-action="'+a+'"]'}function b(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}var c=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],d="";c.forEach(function(c){d+=String(c)===c?a(c)+b(c):c.selectors.map(a)+b(c.rule)});var e=document.createElement("style");e.textContent=d;var f=document.querySelector("head");f.insertBefore(e,f.firstChild)}(),function(a){function b(a,b){var b=b||{},e=b.buttons;if(void 0===e)switch(b.which){case 1:e=1;break;case 2:e=4;break;case 3:e=2;break;default:e=0}var f;if(c)f=new MouseEvent(a,b);else{f=document.createEvent("MouseEvent");var g={bubbles:!1,cancelable:!1,view:null,detail:null,screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null};Object.keys(g).forEach(function(a){a in b&&(g[a]=b[a])}),f.initMouseEvent(a,g.bubbles,g.cancelable,g.view,g.detail,g.screenX,g.screenY,g.clientX,g.clientY,g.ctrlKey,g.altKey,g.shiftKey,g.metaKey,g.button,g.relatedTarget)}d||Object.defineProperty(f,"buttons",{get:function(){return e},enumerable:!0});var h=0;return h=b.pressure?b.pressure:e?.5:0,Object.defineProperties(f,{pointerId:{value:b.pointerId||0,enumerable:!0},width:{value:b.width||0,enumerable:!0},height:{value:b.height||0,enumerable:!0},pressure:{value:h,enumerable:!0},tiltX:{value:b.tiltX||0,enumerable:!0},tiltY:{value:b.tiltY||0,enumerable:!0},pointerType:{value:b.pointerType||"",enumerable:!0},hwTimestamp:{value:b.hwTimestamp||0,enumerable:!0},isPrimary:{value:b.isPrimary||!1,enumerable:!0}}),f}var c=!1,d=!1;try{var e=new MouseEvent("click",{buttons:1});c=!0,d=1===e.buttons}catch(f){}a.PointerEvent||(a.PointerEvent=b)}(window),function(a){function b(){this.ids=[],this.pointers=[]}b.prototype={set:function(a,b){var c=this.ids.indexOf(a);c>-1?this.pointers[c]=b:(this.ids.push(a),this.pointers.push(b))},has:function(a){return this.ids.indexOf(a)>-1},"delete":function(a){var b=this.ids.indexOf(a);b>-1&&(this.ids.splice(b,1),this.pointers.splice(b,1))},get:function(a){var b=this.ids.indexOf(a);return this.pointers[b]},get size(){return this.pointers.length},clear:function(){this.ids.length=0,this.pointers.length=0},forEach:function(a,b){this.ids.forEach(function(c,d){a.call(b,c,this.pointers[d],this)},this)}},a.PointerMap=window.Map&&Map.prototype.forEach?Map:b}(window.PointerEventsPolyfill),function(a){var b;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0)b=WeakMap;else{var c=Object.defineProperty,d=Object.hasOwnProperty,e=(new Date).getTime()%1e9;b=function(){this.name="__st"+(1e9*Math.random()>>>0)+(e++ +"__")},b.prototype={set:function(a,b){c(a,this.name,{value:b,writable:!0})},get:function(a){return d.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}a.SideTable=b}(window.PointerEventsPolyfill),function(a){var b={targets:new a.SideTable,handledEvents:new a.SideTable,pointermap:new a.PointerMap,eventMap:{},eventSources:{},eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;c>d&&(b=this.eventSourceList[d]);d++)b.unregister.call(b,a)},down:function(a){this.fireEvent("pointerdown",a)},move:function(a){this.fireEvent("pointermove",a)},up:function(a){this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){this.fireEvent("pointercancel",a)},leaveOut:function(a){a.target.contains(a.relatedTarget)||this.leave(a),this.out(a)},enterOver:function(a){a.target.contains(a.relatedTarget)||this.enter(a),this.over(a)},eventHandler:function(a){if(!this.handledEvents.get(a)){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),this.handledEvents.set(a,!0)}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(a,b){var c=new PointerEvent(a,b);return this.targets.set(c,this.targets.get(b)||b.target),c},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){var b={};for(var c in a)b[c]=a[c];return b},getTarget:function(a){return this.captureInfo&&this.captureInfo.id===a.pointerId?this.captureInfo.target:this.targets.get(a)},setCapture:function(a,b){this.captureInfo&&this.releaseCapture(this.captureInfo.id),this.captureInfo={id:a,target:b};var c=new PointerEvent("gotpointercapture",{bubbles:!0});this.implicitRelease=this.releaseCapture.bind(this,a),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease),this.targets.set(c,b),this.asyncDispatchEvent(c)},releaseCapture:function(a){if(this.captureInfo&&this.captureInfo.id===a){var b=new PointerEvent("lostpointercapture",{bubbles:!0}),c=this.captureInfo.target;this.captureInfo=null,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease),this.targets.set(b,c),this.asyncDispatchEvent(b)}},dispatchEvent:function(a){var b=this.getTarget(a);return b?b.dispatchEvent(a):void 0},asyncDispatchEvent:function(a){setTimeout(this.dispatchEvent.bind(this,a),0)}};b.boundHandler=b.eventHandler.bind(b),a.dispatcher=b,a.register=b.register.bind(b),a.unregister=b.unregister.bind(b)}(window.PointerEventsPolyfill),function(a){function b(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),g&&(this.observer=new g(this.mutationWatcher.bind(this)))}var c=Array.prototype.forEach.call.bind(Array.prototype.forEach),d=Array.prototype.map.call.bind(Array.prototype.map),e=Array.prototype.slice.call.bind(Array.prototype.slice),f=Array.prototype.filter.call.bind(Array.prototype.filter),g=window.MutationObserver||window.WebKitMutationObserver,h="[touch-action]",i={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};b.prototype={watchSubtree:function(b){a.targetFinding.canTarget(b)&&this.observer.observe(b,i)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){c(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(h):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(e(b))},installOnLoad:function(){document.addEventListener("DOMContentLoaded",this.installNewSubtree.bind(this,document))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){var b=d(a,this.findElements,this);return b.push(f(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}},g||(b.prototype.watchSubtree=function(){console.warn("PointerEventsPolyfill: MutationObservers not found, touch-action will not be dynamically detected")}),a.Installer=b}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher,c=b.pointermap,d=25,e={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},lastTouches:[],isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,e=a.clientX,f=a.clientY,g=0,h=c.length;h>g&&(b=c[g]);g++){var i=Math.abs(e-b.x),j=Math.abs(f-b.y);if(d>=i&&d>=j)return!0}},prepareEvent:function(a){var c=b.cloneEvent(a);return c.pointerId=this.POINTER_ID,c.isPrimary=!0,c.pointerType=this.POINTER_TYPE,c},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=c.has(this.POINTER_ID);d&&this.cancel(a);var e=this.prepareEvent(a);c.set(this.POINTER_ID,a),b.down(e)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.move(c)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var d=c.get(this.POINTER_ID);if(d&&d.button===a.button){var e=this.prepareEvent(a);b.up(e),this.cleanupMouse()}}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.enterOver(c)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var c=this.prepareEvent(a);b.leaveOut(c)}},cancel:function(a){var c=this.prepareEvent(a);b.cancel(c),this.cleanupMouse()},cleanupMouse:function(){c.delete(this.POINTER_ID)}};a.mouseEvents=e}(window.PointerEventsPolyfill),function(a){var b,c=a.dispatcher,d=a.findTarget,e=a.targetFinding.allShadows.bind(a.targetFinding),f=c.pointermap,g=Array.prototype.map.call.bind(Array.prototype.map),h=2500,i="touch-action",j="string"==typeof document.head.style.touchAction,k={scrollType:new a.SideTable,events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){j?c.listen(a,this.events):b.enableOnSubtree(a)},unregister:function(a){j&&c.unlisten(a,this.events)},elementAdded:function(a){var b=a.getAttribute(i),d=this.touchActionToScrollType(b);d&&(this.scrollType.set(a,d),c.listen(a,this.events),e(a).forEach(function(a){this.scrollType.set(a,d),c.listen(a,this.events)},this))},elementRemoved:function(a){this.scrollType.delete(a),c.unlisten(a,this.events),e(a).forEach(function(a){this.scrollType.delete(a),c.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(i),d=this.touchActiontoScrollType(c),f=this.touchActionToScrollType(b);d&&f?(this.scrollType.set(a,d),e(a).forEach(function(a){this.scrollType.set(a,d)},this)):f?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){null===this.firstTouch&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1)},removePrimaryTouch:function(a){this.isPrimaryTouch(a)&&(this.firstTouch=null,this.firstXY=null)},touchToPointer:function(a){var b=c.cloneEvent(a);return b.pointerId=a.identifier+2,b.target=d(b),b.bubbles=!0,b.cancelable=!0,b.button=0,b.buttons=1,b.width=a.webkitRadiusX||a.radiusX||0,b.height=a.webkitRadiusY||a.radiusY||0,b.pressure=a.webkitForce||a.force||.5,b.isPrimary=this.isPrimaryTouch(a),b.pointerType=this.POINTER_TYPE,b},processTouches:function(a,b){var c=a.changedTouches,d=g(c,this.touchToPointer,this);d.forEach(b,this)},shouldScroll:function(a){if(this.firstXY){var b,c=this.scrollType.get(a.currentTarget);if("none"===c)b=!1;else if("XY"===c)b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)if(c.identifier===b)return!0},vacuumTouches:function(a){var b=a.touches;if(f.size>=b.length){var c=[];f.forEach(function(a,d){if(1!==a&&!this.findTouch(b,a-2)){var e=d.out;c.push(this.touchToPointer(e))}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||this.processTouches(a,this.overDown)},overDown:function(a){f.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),c.over(a),c.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,d=f.get(b.pointerId);if(d){var e=d.out,g=d.outTarget;c.move(b),e&&g!==b.target&&(e.relatedTarget=b.target,b.relatedTarget=g,e.target=g,b.target?(c.leaveOut(e),c.enterOver(b)):(b.target=g,b.relatedTarget=null,this.cancelOut(b))),d.out=b,d.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(c.up(a),c.out(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){c.cancel(a),c.out(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){f.delete(a.pointerId),this.removePrimaryTouch(a)},dedupSynthMouse:function(b){var c=a.mouseEvents.lastTouches,d=b.changedTouches[0];if(this.isPrimaryTouch(d)){var e={x:d.clientX,y:d.clientY};c.push(e);var f=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,c,e);setTimeout(f,h)}}};j||(b=new a.Installer(k.elementAdded,k.elementRemoved,k.elementChanged,k)),a.touchEvents=k}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher,c=b.pointermap,d=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,e={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){b.listen(a,this.events)},unregister:function(a){b.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var c=a;return d&&(c=b.cloneEvent(a),c.pointerType=this.POINTER_TYPES[a.pointerType]),c},cleanup:function(a){c.delete(a)},MSPointerDown:function(a){c.set(a.pointerId,a);var d=this.prepareEvent(a);b.down(d)},MSPointerMove:function(a){var c=this.prepareEvent(a);b.move(c)},MSPointerUp:function(a){var c=this.prepareEvent(a);b.up(c),this.cleanup(a.pointerId)},MSPointerOut:function(a){var c=this.prepareEvent(a);b.leaveOut(c)},MSPointerOver:function(a){var c=this.prepareEvent(a);b.enterOver(c)},MSPointerCancel:function(a){var c=this.prepareEvent(a);b.cancel(c),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var c=b.makeEvent("lostpointercapture",a);b.dispatchEvent(c)},MSGotPointerCapture:function(a){var c=b.makeEvent("gotpointercapture",a);b.dispatchEvent(c)}};a.msEvents=e}(window.PointerEventsPolyfill),function(a){var b=a.dispatcher;if(void 0===window.navigator.pointerEnabled){if(Object.defineProperty(window.navigator,"pointerEnabled",{value:!0,enumerable:!0}),window.navigator.msPointerEnabled){var c=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:c,enumerable:!0}),b.registerSource("ms",a.msEvents)}else b.registerSource("mouse",a.mouseEvents),void 0!==window.ontouchstart&&b.registerSource("touch",a.touchEvents);b.register(document)}}(window.PointerEventsPolyfill),function(a){function b(a){if(!e.pointermap.has(a))throw new Error("InvalidPointerId")}var c,d,e=a.dispatcher,f=window.navigator;f.msPointerEnabled?(c=function(a){b(a),this.msSetPointerCapture(a)},d=function(a){b(a),this.msReleasePointerCapture(a)}):(c=function(a){b(a),e.setCapture(a,this)},d=function(a){b(a),e.releaseCapture(a,this)}),Element.prototype.setPointerCapture||Object.defineProperties(Element.prototype,{setPointerCapture:{value:c},releasePointerCapture:{value:d}})}(window.PointerEventsPolyfill),PointerGestureEvent.prototype.preventTap=function(){this.tapPrevented=!0},function(a){a=a||{},a.utils={LCA:{find:function(a,b){if(a===b)return a;if(a.contains){if(a.contains(b))return a;if(b.contains(a))return b}var c=this.depth(a),d=this.depth(b),e=c-d;for(e>0?a=this.walk(a,e):b=this.walk(b,-e);a&&b&&a!==b;)a=this.walk(a,1),b=this.walk(b,1);return a},walk:function(a,b){for(var c=0;b>c;c++)a=a.parentNode;return a},depth:function(a){for(var b=0;a;)b++,a=a.parentNode;return b}}},a.findLCA=function(b,c){return a.utils.LCA.find(b,c)},window.PointerGestures=a}(window.PointerGestures),function(a){var b;if("undefined"!=typeof WeakMap&&navigator.userAgent.indexOf("Firefox/")<0)b=WeakMap;else{var c=Object.defineProperty,d=Object.hasOwnProperty,e=(new Date).getTime()%1e9;b=function(){this.name="__st"+(1e9*Math.random()>>>0)+(e++ +"__")},b.prototype={set:function(a,b){c(a,this.name,{value:b,writable:!0})},get:function(a){return d.call(a,this.name)?a[this.name]:void 0},"delete":function(a){this.set(a,void 0)}}}a.SideTable=b}(window.PointerGestures),function(a){function b(){this.ids=[],this.pointers=[]}b.prototype={set:function(a,b){var c=this.ids.indexOf(a);c>-1?this.pointers[c]=b:(this.ids.push(a),this.pointers.push(b))},has:function(a){return this.ids.indexOf(a)>-1},"delete":function(a){var b=this.ids.indexOf(a);b>-1&&(this.ids.splice(b,1),this.pointers.splice(b,1))},get:function(a){var b=this.ids.indexOf(a);return this.pointers[b]},get size(){return this.pointers.length},clear:function(){this.ids.length=0,this.pointers.length=0}},window.Map&&(b=window.Map),a.PointerMap=b}(window.PointerGestures),function(a){var b={handledEvents:new a.SideTable,targets:new a.SideTable,handlers:{},recognizers:{},events:["pointerdown","pointermove","pointerup","pointerover","pointerout","pointercancel"],registerRecognizer:function(a,b){var c=b;this.recognizers[a]=c,this.events.forEach(function(a){if(c[a]){var b=c[a].bind(c);this.addHandler(a,b)}},this)},addHandler:function(a,b){var c=a;this.handlers[c]||(this.handlers[c]=[]),this.handlers[c].push(b)},registerTarget:function(a){this.listen(this.events,a)},unregisterTarget:function(a){this.unlisten(this.events,a)},eventHandler:function(a){if(!this.handledEvents.get(a)){var b,c=a.type;(b=this.handlers[c])&&this.makeQueue(b,a),this.handledEvents.set(a,!0)}},makeQueue:function(a,b){var c=this.cloneEvent(b);setTimeout(this.runQueue.bind(this,a,c),0) -},runQueue:function(a,b){this.currentPointerId=b.pointerId;for(var c,d=0,e=a.length;e>d&&(c=a[d]);d++)c(b);this.currentPointerId=0},listen:function(a,b){a.forEach(function(a){this.addEvent(a,this.boundHandler,!1,b)},this)},unlisten:function(a){a.forEach(function(a){this.removeEvent(a,this.boundHandler,!1,inTarget)},this)},addEvent:function(a,b,c,d){d.addEventListener(a,b,c)},removeEvent:function(a,b,c,d){d.removeEventListener(a,b,c)},makeEvent:function(a,b){return new PointerGestureEvent(a,b)},cloneEvent:function(a){var b={};for(var c in a)b[c]=a[c];return b},dispatchEvent:function(a,b){var c=b||this.targets.get(a);c&&(c.dispatchEvent(a),a.tapPrevented&&this.preventTap(this.currentPointerId))},asyncDispatchEvent:function(a,b){var c=function(){this.dispatchEvent(a,b)}.bind(this);setTimeout(c,0)},preventTap:function(a){var b=this.recognizers.tap;b&&b.preventTap(a)}};b.boundHandler=b.eventHandler.bind(b),a.dispatcher=b,a.register=function(b){var c=window.PointerEventsPolyfill;c&&c.register(b),a.dispatcher.registerTarget(b)},b.registerTarget(document)}(window.PointerGestures),function(a){var b=a.dispatcher,c={HOLD_DELAY:200,WIGGLE_THRESHOLD:16,events:["pointerdown","pointermove","pointerup","pointercancel"],heldPointer:null,holdJob:null,pulse:function(){var a=Date.now()-this.heldPointer.timeStamp,b=this.held?"holdpulse":"hold";this.fireHold(b,a),this.held=!0},cancel:function(){clearInterval(this.holdJob),this.held&&this.fireHold("release"),this.held=!1,this.heldPointer=null,this.target=null,this.holdJob=null},pointerdown:function(a){a.isPrimary&&!this.heldPointer&&(this.heldPointer=a,this.target=a.target,this.holdJob=setInterval(this.pulse.bind(this),this.HOLD_DELAY))},pointerup:function(a){this.heldPointer&&this.heldPointer.pointerId===a.pointerId&&this.cancel()},pointercancel:function(){this.cancel()},pointermove:function(a){if(this.heldPointer&&this.heldPointer.pointerId===a.pointerId){var b=a.clientX-this.heldPointer.clientX,c=a.clientY-this.heldPointer.clientY;b*b+c*c>this.WIGGLE_THRESHOLD&&this.cancel()}},fireHold:function(a,c){var d={pointerType:this.heldPointer.pointerType};c&&(d.holdTime=c);var e=b.makeEvent(a,d);b.dispatchEvent(e,this.target),e.tapPrevented&&b.preventTap(this.heldPointer.pointerId)}};b.registerRecognizer("hold",c)}(window.PointerGestures),function(a){var b=a.dispatcher,c=new a.PointerMap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],WIGGLE_THRESHOLD:4,clampDir:function(a){return a>0?1:-1},calcPositionDelta:function(a,b){var c=0,d=0;return a&&b&&(c=b.pageX-a.pageX,d=b.pageY-a.pageY),{x:c,y:d}},fireTrack:function(a,c,d){var e=d,f=this.calcPositionDelta(e.downEvent,c),g=this.calcPositionDelta(e.lastMoveEvent,c);g.x&&(e.xDirection=this.clampDir(g.x)),g.y&&(e.yDirection=this.clampDir(g.y));var h={dx:f.x,dy:f.y,ddx:g.x,ddy:g.y,clientX:c.clientX,clientY:c.clientY,pageX:c.pageX,pageY:c.pageY,screenX:c.screenX,screenY:c.screenY,xDirection:e.xDirection,yDirection:e.yDirection,trackInfo:e.trackInfo,pointerType:c.pointerType};"trackend"===a&&(h._releaseTarget=c.target);var i=b.makeEvent(a,h);e.lastMoveEvent=c,b.dispatchEvent(i,e.downTarget)},pointerdown:function(a){if(a.isPrimary&&("mouse"===a.pointerType?1===a.buttons:!0)){var b={downEvent:a,downTarget:a.target,trackInfo:{},lastMoveEvent:null,xDirection:0,yDirection:0,tracking:!1};c.set(a.pointerId,b)}},pointermove:function(a){var b=c.get(a.pointerId);if(b)if(b.tracking)this.fireTrack("track",a,b);else{var d=this.calcPositionDelta(b.downEvent,a),e=d.x*d.x+d.y*d.y;e>this.WIGGLE_THRESHOLD&&(b.tracking=!0,this.fireTrack("trackstart",b.downEvent,b),this.fireTrack("track",a,b))}},pointerup:function(a){var b=c.get(a.pointerId);b&&(b.tracking&&this.fireTrack("trackend",a,b),c.delete(a.pointerId))},pointercancel:function(a){this.pointerup(a)}};b.registerRecognizer("track",d)}(window.PointerGestures),function(a){var b=a.dispatcher,c={MIN_VELOCITY:.5,MAX_QUEUE:4,moveQueue:[],target:null,pointerId:null,events:["pointerdown","pointermove","pointerup","pointercancel"],pointerdown:function(a){a.isPrimary&&!this.pointerId&&(this.pointerId=a.pointerId,this.target=a.target,this.addMove(a))},pointermove:function(a){a.pointerId===this.pointerId&&this.addMove(a)},pointerup:function(a){a.pointerId===this.pointerId&&this.fireFlick(a),this.cleanup()},pointercancel:function(){this.cleanup()},cleanup:function(){this.moveQueue=[],this.target=null,this.pointerId=null},addMove:function(a){this.moveQueue.length>=this.MAX_QUEUE&&this.moveQueue.shift(),this.moveQueue.push(a)},fireFlick:function(a){for(var c,d,e,f,g,h,i,j=a,k=this.moveQueue.length,l=0,m=0,n=0,o=0;k>o&&(i=this.moveQueue[o]);o++)c=j.timeStamp-i.timeStamp,d=j.clientX-i.clientX,e=j.clientY-i.clientY,f=d/c,g=e/c,h=Math.sqrt(f*f+g*g),h>n&&(l=f,m=g,n=h);var p=Math.abs(l)>Math.abs(m)?"x":"y",q=this.calcAngle(l,m);if(Math.abs(n)>=this.MIN_VELOCITY){var r=b.makeEvent("flick",{xVelocity:l,yVelocity:m,velocity:n,angle:q,majorAxis:p,pointerType:a.pointerType});b.dispatchEvent(r,this.target)}},calcAngle:function(a,b){return 180*Math.atan2(b,a)/Math.PI}};b.registerRecognizer("flick",c)}(window.PointerGestures),function(a){var b=a.dispatcher,c=new a.PointerMap,d={events:["pointerdown","pointermove","pointerup","pointercancel"],pointerdown:function(a){a.isPrimary&&!a.tapPrevented&&c.set(a.pointerId,{target:a.target,x:a.clientX,y:a.clientY})},pointermove:function(a){if(a.isPrimary){var b=c.get(a.pointerId);b&&a.tapPrevented&&c.delete(a.pointerId)}},pointerup:function(d){var e=c.get(d.pointerId);if(e&&!d.tapPrevented){var f=a.findLCA(e.target,d.target);if(f){var g=b.makeEvent("tap",{x:d.clientX,y:d.clientY,pointerType:d.pointerType});b.dispatchEvent(g,f)}}c.delete(d.pointerId)},pointercancel:function(a){c.delete(a.pointerId)},preventTap:function(a){c.delete(a)}};b.registerRecognizer("tap",d)}(window.PointerGestures),Polymer={},function(){var a=document.createElement("style");a.textContent="body {opacity: 0;}";var b=document.querySelector("head");b.insertBefore(a,b.firstChild),window.addEventListener("WebComponentsReady",function(){document.body.style.webkitTransition="opacity 0.3s",document.body.style.opacity=1})}(Polymer),function(a){var b=Array.prototype.forEach.call.bind(Array.prototype.forEach),c=Array.prototype.concat.call.bind(Array.prototype.concat),d=Array.prototype.slice.call.bind(Array.prototype.slice),e={hostRuleRe:/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,selectorRe:/([^{]*)({[\s\S]*?})/gim,hostElementRe:/(.*)((?:\*)|(?:\:scope))(.*)/,hostFixableRe:/^[.\[:]/,cssCommentRe:/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,cssPolyfillCommentRe:/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,cssPseudoRe:/::(x-[^\s{,(]*)/gim,selectorReSuffix:"([>\\s~+[.,{:][\\s\\S]*)?$",hostRe:/@host/gim,cache:{},shimStyling:function(a){if(window.ShadowDOMPolyfill&&a){var b=a.getAttribute("name");e.cacheDefinition(a),e.shimPolyfillDirectives(a.styles,b),Polymer.strictPolyfillStyling&&e.applyScopeToContent(a.templateContent(),b),e.applyShimming(e.stylesForElement(a),b)}},shimShadowDOMStyling:function(a,b){window.ShadowDOMPolyfill&&(e.shimPolyfillDirectives(a,b),e.applyShimming(a,b))},applyShimming:function(a,b){var c=this.shimAtHost(a,b);c+=this.shimScoping(a,b),this.addCssToDocument(c)},cacheDefinition:function(a){var b=a.getAttribute("name"),c=a.templateContent(),f=c&&c.querySelectorAll("style");a.styles=f?d(f):[],e.cache[b]=a},applyScopeToContent:function(a,c){a&&(b(a.querySelectorAll("*"),function(a){a.setAttribute(c,"")}),b(a.querySelectorAll("template"),function(a){this.applyScopeToContent(templateContent(a),c)},this))},stylesForElement:function(a){var b=a.styles,e=a.templateContent(),f=e&&e.querySelector("shadow");if(f||null===e){var g=this.findExtendee(a.getAttribute("name"));if(g){var h=this.stylesForElement(g);b=c(d(h),d(b))}}return b},findExtendee:function(a){var b=this.cache[a];return b&&this.cache[b.getAttribute("extends")]},shimPolyfillDirectives:function(a,c){window.ShadowDOMPolyfill&&a&&b(a,function(a){a.textContent=this.convertPolyfillDirectives(a.textContent,c)},this)},shimAtHost:function(a,b){return a?this.convertAtHostStyles(a,b):void 0},shimScoping:function(a,b){return a?this.convertScopedStyles(a,b):void 0},convertPolyfillDirectives:function(a,b){for(var c,d,e="",f=0;c=this.cssPolyfillCommentRe.exec(a);)e+=a.substring(f,c.index),d=c[1].slice(0,-2).replace(this.hostRe,b),e+=this.scopeSelector(d,b)+"{",f=this.cssPolyfillCommentRe.lastIndex;return e+=a.substring(f,a.length)},findAtHostRules:function(a,b){return Array.prototype.filter.call(a,this.isHostRule.bind(this,b))},isHostRule:function(a,b){return b.selectorText&&b.selectorText.match(a)||b.cssRules&&this.findAtHostRules(b.cssRules,a).length||b.type==CSSRule.WEBKIT_KEYFRAMES_RULE},convertAtHostStyles:function(a,b){for(var c,d=this.stylesToCssText(a),e="",f=0;c=this.hostRuleRe.exec(d);)e+=d.substring(f,c.index),e+=this.scopeHostCss(c[1],b),f=this.hostRuleRe.lastIndex;e+=d.substring(f,d.length);var g=new RegExp("^"+b+this.selectorReSuffix,"m"),d=this.rulesToCss(this.findAtHostRules(this.cssToRules(e),g));return d},scopeHostCss:function(a,b){for(var c,d="";c=this.selectorRe.exec(a);)d+=this.scopeHostSelector(c[1],b)+" "+c[2]+"\n ";return d},scopeHostSelector:function(a,b){var c=[],d=a.split(","),e="[is="+b+"]";return d.forEach(function(a){a=a.trim(),a.match(this.hostElementRe)?a=a.replace(this.hostElementRe,b+"$1$3, "+e+"$1$3"):a.match(this.hostFixableRe)&&(a=b+a+", "+e+a),c.push(a)},this),c.join(", ")},convertScopedStyles:function(a,c){b(a,function(a){a.parentNode&&a.parentNode.removeChild(a)});var d=this.stylesToCssText(a).replace(this.hostRuleRe,"");d=this.convertPseudos(d);var e=this.cssToRules(d);return d=this.scopeRules(e,c)},convertPseudos:function(a){return a.replace(this.cssPseudoRe," [pseudo=$1]")},scopeRules:function(a,c){var d="";return b(a,function(a){a.selectorText&&a.style&&a.style.cssText?(d+=this.scopeSelector(a.selectorText,c,Polymer.strictPolyfillStyling)+" {\n ",d+=this.propertiesFromRule(a)+"\n}\n\n"):a.media?(d+="@media "+a.media.mediaText+" {\n",d+=this.scopeRules(a.cssRules,c),d+="\n}\n\n"):a.cssText&&(d+=a.cssText+"\n\n")},this),d},propertiesFromRule:function(a){var b=a.style.cssText;return a.style.content&&!a.style.content.match(/['"]+/)&&(b="content: '"+a.style.content+"';\n"+a.style.cssText.replace(/content:[^;]*;/g,"")),b},selectorNeedsScoping:function(a,b){var c="("+b+"|\\[is="+b+"\\])",d=new RegExp("^"+c+this.selectorReSuffix,"m");return!a.match(d)},scopeSelector:function(a,b,c){var d=[],e=a.split(",");return e.forEach(function(a){a=a.trim(),this.selectorNeedsScoping(a,b)&&(a=c?this.applyStrictSelectorScope(a,b):this.applySimpleSelectorScope(a,b)),d.push(a)},this),d.join(", ")},applySimpleSelectorScope:function(a,b){return b+" "+a+", "+"[is="+b+"] "+a},applyStrictSelectorScope:function(a,b){var c=[" ",">","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim();return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},stylesToCssText:function(a,c){var d="";return b(a,function(a){d+=a.textContent+"\n\n"}),c||(d=this.stripCssComments(d)),d},stripCssComments:function(a){return a.replace(this.cssCommentRe,"")},cssToRules:function(a){var b=document.createElement("style");b.textContent=a,document.head.appendChild(b);var c=b.sheet.cssRules;return b.parentNode.removeChild(b),c},rulesToCss:function(a){for(var b=0,c=[];be&&(c=d[e]);e++){var g=Object.getOwnPropertyDescriptor(b,c);if(g.value==a)return c}b=b.__proto__}}a.super=b}(Polymer),function(a){var b={};b.declaration={},b.instance={},a.api=b}(Polymer),function(a){var b={async:function(a,b,c){Platform.flush(),b=b&&b.length?b:[b];var d=function(){(this[a]||a).apply(this,b)}.bind(this);return c?setTimeout(d,c):requestAnimationFrame(d)},fire:function(a,b,c,d){var e=c||this;return e.dispatchEvent(new CustomEvent(a,{bubbles:void 0!==d?!1:!0,detail:b})),b},asyncFire:function(){this.asyncMethod("fire",arguments)},classFollows:function(a,b,c){b&&b.classList.remove(c),a&&a.classList.add(c)}};b.asyncMethod=b.async,a.api.instance.utils=b}(Polymer),function(a){function b(a,b){b.cancelBubble||(b.on=i+b.type,h.events&&console.group("[%s]: listenLocal [%s]",a.localName,b.on),!b.path||window.ShadowDOMPolyfill?d(a,b):c(a,b),h.events&&console.groupEnd())}function c(a,b){var c=null;Array.prototype.some.call(b.path,function(d){return d===a?!0:(c=c===a?c:e(d),c&&f(c,d,b)?!0:void 0)},this)}function d(a,b){h.events&&console.log("event.path() not supported for",b.type);for(var c=b.target,d=null;c&&c!=a;){if(d=d===a?d:e(c),d&&f(d,c,b))return!0;c=c.parentNode}}function e(a){for(;a.parentNode;)a=a.parentNode;return a.host}function f(a,b,c){var d=b.getAttribute&&b.getAttribute(c.on);return d&&g(b,c)&&(h.events&&console.log("[%s] found handler name [%s]",a.localName,d),a.dispatchMethod(b,d,[c,c.detail,b])),c.cancelBubble}function g(a,b){var c=l.get(b);return c||l.set(b,c=[]),c.indexOf(a)<0?(c.push(a),!0):void 0}var h=window.logFlags||{},i="on-",j="eventDelegates",k={EVENT_PREFIX:i,DELEGATES:j,addHostListeners:function(){var a=this[j];h.events&&Object.keys(a).length>0&&console.log("[%s] addHostListeners:",this.localName,a),this.addNodeListeners(this,a,this.hostEventListener)},addInstanceListeners:function(a,b){var c=b.delegates;c&&(h.events&&Object.keys(c).length>0&&console.log("[%s:root] addInstanceListeners:",this.localName,c),this.addNodeListeners(a,c,this.instanceEventListener))},addNodeListeners:function(a,b,c){var d;for(var e in b)d||(d=c.bind(this)),a.addEventListener(e,d)},hostEventListener:function(a){if(!a.cancelBubble){h.events&&console.group("[%s]: hostEventListener(%s)",this.localName,a.type);var b=this.findEventDelegate(a);b&&(h.events&&console.log("[%s] found host handler name [%s]",this.localName,b),this.dispatchMethod(this,b,[a,a.detail,this])),h.events&&console.groupEnd()}},findEventDelegate:function(a){return this[j][a.type]},dispatchMethod:function(a,b,c){if(a){h.events&&console.group("[%s] dispatch [%s]",a.localName,b);var d=this[b];d&&d[c?"apply":"call"](this,c),h.events&&console.groupEnd()}},instanceEventListener:function(a){b(this,a)}},l=new SideTable("handledList");a.api.instance.events=k}(Polymer),function(a){function b(a,b){var c=this[a]||a;"function"==typeof c&&c.apply(this,b)}function c(a,b,c,d){h.bind&&console.log(n,c.localName||"object",d,a.localName,b);var e=PathObserver.getValueAtPath(c,d);return(null===e||void 0===e)&&PathObserver.setValueAtPath(c,d,a[b]),PathObserver.defineProperty(a,b,{object:c,path:d})}function d(a,b,c){var d=g(a);d[b]=c}function e(a,b){var c=g(a);return c&&c[b]?(c[b].close(),c[b]=null,!0):void 0}function f(a){var b=g(a);Object.keys(b).forEach(function(a){b[a].close(),b[a]=null})}function g(a){var b=k.get(a);return b||k.set(a,b={}),b}var h=window.logFlags||{},i="Changed",j={observeProperties:function(){for(var a,b=this.getCustomPropertyNames(),c=0,d=b.length;d>c&&(a=b[c]);c++)this.observeProperty(a)},getCustomPropertyNames:function(){return this.customPropertyNames},observeProperty:function(a){if(this.shouldObserveProperty(a)){h.watch&&console.log(l,this.localName,a);var b=function(b,c){h.watch&&console.log(m,this.localName,this.id||"",a,this[a],c),this.dispatchPropertyChange(a,c)}.bind(this),c=new PathObserver(this,a,b);d(this,a,c)}},bindProperty:function(a,b,d){return c(this,a,b,d)},unbindProperty:function(a,b){return e(this,a,b)},unbindAllProperties:function(){f(this)},shouldObserveProperty:function(a){return Boolean(this[a+i])},dispatchPropertyChange:function(a,c){b.call(this,a+i,[c])}},k=new SideTable,l="[%s] watching [%s]",m="[%s#%s] watch: [%s] now [%s] was [%s]",n="[%s]: bindProperties: [%s] to [%s].[%s]";a.api.instance.properties=j}(Polymer),function(a){var b="__published",c="__instance_attributes",d={PUBLISHED:b,INSTANCE_ATTRIBUTES:c,copyInstanceAttributes:function(){var a=this[c];for(var b in a)this.setAttribute(b,a[b])},takeAttributes:function(){for(var a,b=0,c=this.attributes,d=c.length;(a=c[b])&&d>b;b++)this.attributeToProperty(a.name,a.value)},attributeToProperty:function(b,c){var b=this.propertyForAttribute(b);if(b){if(c.search(a.bindPattern)>=0)return;var d=this[b],c=this.deserializeValue(c,d);c!==d&&(this[b]=c)}},propertyForAttribute:function(a){var c=Object.keys(this[b]);return c[c.map(e).indexOf(a.toLowerCase())]},deserializeValue:function(b,c){return a.deserializeValue(b,c)}},e=String.prototype.toLowerCase.call.bind(String.prototype.toLowerCase);a.api.instance.attributes=d}(Polymer),function(a){function b(a){d(a,c)}function c(a){a.unbindAll()}function d(a,b){if(a){b(a);for(var c=a.firstChild;c;c=c.nextSibling)d(c,b)}}var e=window.logFlags||0,f=new ExpressionSyntax,g={instanceTemplate:function(a){return a.createInstance(this,f)},createBinding:function(a,b,c){var d=this.propertyForAttribute(a);if(d){var e=this.bindProperty(d,b,c);return e.path=c,e}return this.super(arguments)},asyncUnbindAll:function(){this._unbound||(e.unbind&&console.log("[%s] asyncUnbindAll",this.localName),this._unbindAllJob=this.job(this._unbindAllJob,this.unbindAll,0))},unbindAll:function(){this._unbound||(this.unbindAllProperties(),this.super(),b(this.shadowRoot),this._unbound=!0)},cancelUnbindAll:function(a){return this._unbound?(e.unbind&&console.warn("[%s] already unbound, cannot cancel unbindAll",this.localName),void 0):(e.unbind&&console.log("[%s] cancelUnbindAll",this.localName),this._unbindAllJob&&(this._unbindAllJob=this._unbindAllJob.stop()),a||d(this.shadowRoot,function(a){a.cancelUnbindAll&&a.cancelUnbindAll()}),void 0)},insertedCallback:function(){this.cancelUnbindAll(!0),this.inserted&&this.inserted()},removedCallback:function(){this.asyncUnbindAll(),this.removed&&this.removed()}},h=/\{\{([^{}]*)}}/;a.bindPattern=h,a.api.instance.mdv=g}(Polymer),function(a){function b(a){return a.hasOwnProperty("PolymerBase")}function c(){}var d={PolymerBase:!0,job:Polymer.job,"super":Polymer.super,ready:function(){},readyCallback:function(){this.observeProperties(),this.copyInstanceAttributes(),this.takeAttributes(),this.addHostListeners(),this.parseElements(this.__proto__),this.asyncUnbindAll(),this.ready()},parseElements:function(a){a&&a.element&&(this.parseElements(a.__proto__),a.parseElement.call(this,a.element))},parseElement:function(a){this.shadowFromTemplate(this.fetchTemplate(a))},fetchTemplate:function(a){return a.querySelector("template")},shadowFromTemplate:function(a){if(a){var b=this.shadowRoot,c=this.createShadowRoot();c.olderShadowRoot=b,c.applyAuthorStyles=this.applyAuthorStyles,c.resetStyleInheritance=this.resetStyleInheritance,c.host=this;var d=this.instanceTemplate(a);return c.appendChild(d),this.shadowRootReady(c,a),CustomElements.watchShadow(this),c}},shadowRootReady:function(a,b){this.marshalNodeReferences(a),this.addInstanceListeners(a,b),PointerGestures.register(a)},marshalNodeReferences:function(a){var b=this.$=this.$||{};if(a)for(var c,d=a.querySelectorAll("[id]"),e=0,f=d.length;f>e&&(c=d[e]);e++)b[c.id]=c},attributeChangedCallback:function(){this.attributeChanged&&this.attributeChanged.apply(this,arguments)}};c.prototype=d,d.constructor=c,a.Base=c,a.isBase=b,a.api.instance.base=d}(Polymer),function(a){window.logFlags||{};var b="element",c="controller",d={STYLE_SCOPE_ATTRIBUTE:b,installControllerStyles:function(){var a=this.findStyleController();if(a&&!this.scopeHasElementStyle(a,c)){for(var b=Object.getPrototypeOf(this),d="";b&&b.element;)d+=b.element.cssTextForScope(c),b=Object.getPrototypeOf(b);if(d){var e=this.element.cssTextToScopeStyle(d,c);window.ShadowDOMPolyfill&&Platform.ShadowCSS.shimPolyfillDirectives([e],this.localName),Polymer.applyStyleToScope(e,a)}}},scopeHasElementStyle:function(a,c){var d=b+"="+this.localName+"-"+c;return a.querySelector("style["+d+"]")},findStyleController:function(){if(window.ShadowDOMPolyfill)return wrap(document.head);for(var a=this;a.parentNode;)a=a.parentNode;return a===document?document.head:a}};a.api.instance.styles=d}(Polymer),function(a){var b={addResolvePathApi:function(){var a=this.elementPath();this.prototype.resolvePath=function(b){return a+b}},elementPath:function(){return this.urlToPath(HTMLImports.getDocumentUrl(this.ownerDocument))},urlToPath:function(a){if(a){var b=a.split("/");return b.pop(),b.push(""),b.join("/")}return""}};a.api.declaration.path=b}(Polymer),function(a){function b(a,b){if(a){var d=c(a.textContent),e=a.getAttribute(g);e&&d.setAttribute(g,e),b.appendChild(d)}}function c(a){var b=document.createElement("style");return b.textContent=a,b}function d(a){return a&&a.__resource||""}function e(a,b){return n?n.call(a,b):void 0}window.logFlags||{};var f=a.api.instance.styles,g=f.STYLE_SCOPE_ATTRIBUTE,h="style",i="[rel=stylesheet]",j="global",k="polymer-scope",l={installSheets:function(){this.cacheSheets(),this.installLocalSheets(),this.installGlobalStyles()},cacheSheets:function(){this.sheets=this.findNodes(i),this.sheets.forEach(function(a){a.parentNode&&a.parentNode.removeChild(a)})},installLocalSheets:function(){var a=this.sheets.filter(function(a){return!a.hasAttribute(k)}),b=this.templateContent();if(b){var e="";a.forEach(function(a){e+=d(a)+"\n"}),e&&b.insertBefore(c(e),b.firstChild)}},findNodes:function(a,b){var c=this.querySelectorAll(a).array(),d=this.templateContent();if(d){var e=d.querySelectorAll(a).array();c=c.concat(e)}return b?c.filter(b):c},templateContent:function(){var a=this.querySelector("template");return a&&templateContent(a)},installGlobalStyles:function(){var a=this.styleForScope(j);b(a,document.head)},cssTextForScope:function(a){var b="",c="["+k+"="+a+"]",f=function(a){return e(a,c)},g=this.sheets.filter(f);g.forEach(function(a){b+=d(a)+"\n\n"});var i=this.findNodes(h,f);return i.forEach(function(a){a.parentNode.removeChild(a),b+=a.textContent+"\n\n"}),b},styleForScope:function(a){var b=this.cssTextForScope(a);return this.cssTextToScopeStyle(b,a)},cssTextToScopeStyle:function(a,b){if(a){var d=c(a);return d.setAttribute(g,this.getAttribute("name")+"-"+b),d}}},m=HTMLElement.prototype,n=m.matches||m.matchesSelector||m.webkitMatchesSelector||m.mozMatchesSelector;a.api.declaration.styles=l,a.applyStyleToScope=b}(Polymer),function(a){function b(a){return a.slice(0,k)==g}function c(a){return a.slice(k)}function d(a){return a.ref?a.ref.content:a.content}var e=a.api.instance.events,f=e.DELEGATES,g=e.EVENT_PREFIX,h=window.logFlags||{},i={inheritDelegates:function(a){this.inheritObject(a,f)},parseHostEvents:function(){var a=this.prototype[f];this.addAttributeDelegates(a)},addAttributeDelegates:function(a){for(var d,e=0;d=this.attributes[e];e++)b(d.name)&&(a[c(d.name)]=d.value)},parseLocalEvents:function(){this.querySelectorAll("template").forEach(function(a){a.delegates={},this.accumulateTemplatedEvents(a,a.delegates),h.events&&console.log("[%s] parseLocalEvents:",this.attributes.name.value,a.delegates)},this)},accumulateTemplatedEvents:function(a,b){if("template"===a.localName){var c=d(a);c&&this.accumulateChildEvents(c,b)}},accumulateChildEvents:function(a,b){a.childNodes.forEach(function(a){this.accumulateEvents(a,b)},this)},accumulateEvents:function(a,b){return this.accumulateAttributeEvents(a,b),this.accumulateChildEvents(a,b),this.accumulateTemplatedEvents(a,b),b},accumulateAttributeEvents:function(a,d){a.attributes&&a.attributes.forEach(function(a){b(a.name)&&this.accumulateEvent(c(a.name),d)},this)},accumulateEvent:function(a,b){a=j[a]||a,b[a]=b[a]||1}},j={webkitanimationstart:"webkitAnimationStart",webkitanimationend:"webkitAnimationEnd",webkittransitionend:"webkitTransitionEnd",domfocusout:"DOMFocusOut",domfocusin:"DOMFocusIn"},k=g.length;i.event_translations=j,a.api.declaration.events=i}(Polymer),function(a){var b=[],c={cacheProperties:function(){this.prototype.customPropertyNames=this.getCustomPropertyNames(this.prototype)},getCustomPropertyNames:function(c){for(var d,e={};c&&!a.isBase(c);){for(var f,g=Object.getOwnPropertyNames(c),h=0,i=g.length;i>h&&(f=g[h]);h++)e[f]=!0,d=!0;c=c.__proto__}return d?Object.keys(e):b}};a.api.declaration.properties=c}(Polymer),function(a){var b=a.api.instance.attributes,c=b.PUBLISHED,d=b.INSTANCE_ATTRIBUTES,e="publish",f="attributes",g={inheritAttributesObjects:function(a){this.inheritObject(a,c),this.inheritObject(a,d)},parseAttributes:function(){this.publishAttributes(this.prototype),this.publishProperties(this.prototype),this.accumulateInstanceAttributes()},publishAttributes:function(a){var b=a[c],d=this.getAttribute(f);if(d){var e=d.split(d.indexOf(",")>=0?",":" ");e.forEach(function(a){a=a.trim(),!a||a in b||(b[a]=null)})}Object.keys(b).forEach(function(c){c in a||(a[c]=b[c])})},publishProperties:function(a){this.publishPublish(a)},publishPublish:function(a){if(a.hasOwnProperty(e)){var b=a[e];b&&(Object.keys(b).forEach(function(c){a[c]=b[c]}),Platform.mixin(a[c],b))}},accumulateInstanceAttributes:function(){var a=this.prototype[d];this.attributes.forEach(function(b){this.isInstanceAttribute(b.name)&&(a[b.name]=b.value)},this)},isInstanceAttribute:function(a){return!this.blackList[a]&&"on-"!==a.slice(0,3)},blackList:{name:1,"extends":1,constructor:1}};g.blackList[f]=1,a.api.declaration.attributes=g}(Polymer),function(a){function b(a,b){f[a]=b}function c(a){return Object.create(HTMLElement.getPrototypeForTag(a))}var d=Polymer.extend,e=a.api.declaration,f={},g=c();d(g,{readyCallback:function(){var a=this.getAttribute("name"),b=this.getAttribute("extends");this.prototype=this.generateCustomPrototype(a,b),this.prototype.element=this,this.addResolvePathApi(),this.desugar(),window.ShadowDOMPolyfill&&Platform.ShadowCSS.shimStyling(this.templateContent(),a,b),this.register(a),this.publishConstructor()},desugar:function(){this.parseAttributes(),this.parseHostEvents(),this.parseLocalEvents(),this.installSheets(),this.prototype.registerCallback&&this.prototype.registerCallback(this),this.cacheProperties()},generateCustomPrototype:function(a,b){var c=this.generateBasePrototype(b);return this.addNamedApi(c,a)},generateBasePrototype:function(a){var b=c(a);return this.ensureBaseApi(b)},ensureBaseApi:function(b){return b.PolymerBase||(Object.keys(a.api.instance).forEach(function(c){d(b,a.api.instance[c])}),b=Object.create(b)),this.inheritAttributesObjects(b),this.inheritDelegates(b),b},addNamedApi:function(a,b){return d(a,f[b])},inheritObject:function(a,b){a[b]=d({},a.__proto__[b])},register:function(a){this.ctor=document.register(a,{prototype:this.prototype}),this.prototype.constructor=this.ctor,HTMLElement.register(a,this.prototype)},publishConstructor:function(){var a=this.getAttribute("constructor");a&&(window[a]=this.ctor)}}),Object.keys(e).forEach(function(a){d(g,e[a])}),document.register("polymer-element",{prototype:g}),d(b,window.Polymer),window.Polymer=b}(Polymer); -/* -//@ sourceMappingURL=polymer.sandbox.min.js.map -*/ \ No newline at end of file diff --git a/libs/polymer/polymer.sandbox.min.js.map b/libs/polymer/polymer.sandbox.min.js.map deleted file mode 100644 index 3a266f3b4..000000000 --- a/libs/polymer/polymer.sandbox.min.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"polymer.sandbox.min.js","sources":["../platform/platform.sandbox.min.js","src/polymer.js","src/boot.js","src/shimStyling.js","src/lib/lang.js","src/lib/dom.js","src/lib/deserialize.js","src/lib/job.js","src/lib/super.js","src/api.js","src/instance/utils.js","src/instance/events.js","src/instance/properties.js","src/instance/attributes.js","src/instance/mdv.js","src/instance/base.js","src/instance/styles.js","src/declaration/path.js","src/declaration/styles.js","src/declaration/events.js","src/declaration/properties.js","src/declaration/attributes.js","src/declaration/polymer-element.js"],"names":["PointerGestureEvent","a","b","c","d","document","createEvent","e","bubbles","cancelable","Object","keys","forEach","initEvent","preventTap","this","window","Platform","logFlags","flags","location","search","slice","split","shadow","shadowdom","polyfill","HTMLElement","prototype","webkitCreateShadowRoot","SideTable","WeakMap","navigator","userAgent","indexOf","defineProperty","hasOwnProperty","Date","getTime","name","Math","random","set","value","writable","get","call","delete","ShadowDOMPolyfill","Error","getOwnPropertyNames","getOwnPropertyDescriptor","__proto__","getPrototypeOf","z","f","n","k","i","g","h","test","B","__lookupGetter__","C","j","impl","apply","arguments","getEventHandlerGetter","getEventHandlerSetter","configurable","enumerable","l","m","create","constructor","o","A","EventTarget","Event","DOMImplementation","p","F","E","G","D","q","y","r","s","t","u","v","w","x","Node","Window","assert","defineGetter","defineWrapGetter","forwardMethodsToWrapper","isWrapperFor","mixin","registerObject","registerWrapper","rewrap","unwrap","unwrapIfNeeded","wrap","wrapIfNeeded","wrappers","N","ShadowRoot","localName","shadowRoot","parentNode","defaultView","M","length","shift","getHostForShadowRoot","eventParentsTable","getShadowTrees","contains","push","target","currentTarget","pop","insertionParentTable","P","type","renderAllPending","Document","X","T","NONE","R","defaultPrevented","CAPTURING_PHASE","AT_TARGET","V","BUBBLING_PHASE","O","L","relatedTarget","S","Q","removed","capture","handler","handleEvent","onerror","message","console","error","U","Boolean","Y","J","K","gb","fb","I","jb","kb","W","H","removeEventListener","wrapped","preventDefault","returnValue","addEventListener","equals","remove","eventPhase","path","NodeList","stopPropagation","stopImmediatePropagation","Z","$","_","ab","initMouseEvent","bb","initFocusEvent","cb","db","eb","initMutationEvent","relatedNode","MouseEvent","hb","detail","view","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","ib","addEventListener_","removeEventListener_","dispatchEvent","dispatchEvent_","elementFromPoint","adjustRelatedTarget","wrapEventTargetMethods","CustomEvent","FocusEvent","MutationEvent","UIEvent","item","addWrapNodeListMethod","wrapNodeList","nodeType","DOCUMENT_FRAGMENT_NODE","removeChild","parentNode_","previousSibling_","nextSibling_","firstChild","ownerDocument","createDocumentFragment","appendChild","nextSibling","firstChild_","lastChild_","insertBefore","replaceChild","compareDocumentPosition","invalidateShadowRenderer","lastChild","previousSibling","hasChildNodes","parentElement","ELEMENT_NODE","textContent","createTextNode","childNodes","cloneNode","querySelector","querySelectorAll","firstElementChild","matches","nextElementSibling","getElementsByTagName","getElementsByClassName","getElementsByTagNameNS","namespaceURI","GetElementsByInterface","SelectorsInterface","lastElementChild","childElementCount","children","previousElementSibling","ChildNodeInterface","ParentNodeInterface","CharacterData","data","Element","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector","createShadowRoot","getRendererForHost","setAttribute","replace","tagName","toLowerCase","attributes","TEXT_NODE","nodeValue","COMMENT_NODE","createElement","innerHTML","area","base","br","col","command","embed","hr","img","input","keygen","link","meta","param","source","track","wbr","outerHTML","getInnerHTML","setInnerHTML","HTMLContentElement","select","getAttribute","String","olderShadowRoot_","HTMLShadowElement","olderShadowRoot","implementation","createHTMLDocument","HTMLTemplateElement","content","HTMLUnknownElement","createComment","Comment","DocumentFragment","Text","nextOlderShadowTreeTable","getElementById","filter","trim","render","host","dirty","associateNode","RegExp","join","treeComposition","removeAllChildNodes","renderNode","invalidate","renderInsertionPoint","renderShadowInsertionPoint","renderAsAnyDomTree","renderFallbackContent","getDistributedNodes","visual","adoptNode","write","HTMLBodyElement","HTMLDocument","HTMLHeadElement","getComputedStyle","map","MutationObserver","WebKitMutationObserver","MutationRecord","addedNodes","removedNodes","observe","disconnect","takeRecords","applet","audio","body","canvas","dl","datalist","dir","div","fieldset","font","form","frame","frameset","head","h1","html","iframe","li","label","legend","menu","menuitem","meter","del","ol","object","optgroup","option","output","pre","progress","script","span","style","caption","table","tr","thead","tbody","textarea","title","ul","video","knownElements","defineProperties","webkitShadowRoot","Array","sheet","cssRules","cssText","strictStyling","registry","shimStyling","registerDefinition","applyScopeToContent","shimPolyfillDirectives","rootStyles","applyShimming","scopeStyles","shimShadowDOMStyling","root","extendsName","concat","convertPolyfillDirectives","exec","substring","index","scopeSelector","lastIndex","shimAtHost","shimScoping","convertAtHostStyles","scopeHostCss","findAtHostRules","scopeHostSelector","match","isHostRule","bind","selectorText","CSSRule","WEBKIT_KEYFRAMES_RULE","convertScopedStyles","convertPseudos","scopeRules","propertiesFromRule","media","mediaText","selectorNeedsScoping","applyStrictSelectorScope","applySimpleSelectorScope","ShadowCSS","templateContent","bootstrap","_content","Function","DOMTokenList","add","toggle","NamedNodeMap","MozNamedAttrMap","array","HTMLCollection","performance","now","requestAnimationFrame","webkitRequestAnimationFrame","mozRequestAnimationFrame","setTimeout","cancelAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","clearTimeout","createDOM","Inspector","sinspect","open","api","shadowize","href","idx","onclick","STYLE","SCRIPT","#comment","TEMPLATE","nodeName","Number","log","deliverChangeRecords","getValueFrom","compiledGetValueFromFn","check","report","added","changed","isArray","callback","token","reporting","boundInternalCallback","internalCallback","valid","connect","sync","_allObserversCount","arr","isObserved","getNotifier","oldValue","notify","reverse","addedCount","min","splice","JSON","stringify","isNaN","toString","getValueFromObserved","reset","cleanup","setValueFrom","testingResults","anyChanged","close","unobserved","deliver","reportArgs","_errorThrownDuringCallback","forceCollectObservers","deliverAllChangeRecords","performMicrotaskCheckpoint","clearObservers","oldObject","unobserve","applySplices","observedSet","getValueAtPath","setValueAtPath","new","updated","deleted","Observer","hasObjectObserve","ArrayObserver","calculateSplices","ObjectObserver","PathObserver","Path","closed","node","property","model","observer","boundValueChanged","conditional","removeAttribute","eventType","boundNodeValueToModel","nodeValueChanged","elements","hasAttribute","decorate","lb","bindingDelegate","inputs","combinator","scheduled","resolve","templateRef","hasSubTemplate","firstNode","lastNode","mb","observers","values","size","combinator_","templateElement_","terminators","iteratedValue","arrayObserver","resolveInputs","Map","documentElement","bindings","createBinding","unbind","unbindAll","sanitizeBoundValue","postUpdateBinding","checked","HTMLInputElement","HTMLTextAreaElement","HTMLSelectElement","template","repeat","ref","THEAD","TBODY","TFOOT","TH","TR","TD","COLGROUP","COL","CAPTION","OPTION","OPTGROUP","nextRunner","lastValue","scheduledIds","running","run","schedule","TypeError","templateIsDecorated_","nb","createInstance","templateInstance","scheduleResolve","pathValueChanged","valueChanged","handleSplices","getTerminatorAt","insertInstanceAt","extractInstanceAt","bound","getInstanceModel","CompoundBinding","forAllTemplatesFrom_","fromCharCode","charCodeAt","Identifier","Keyword","NullLiteral","BooleanLiteral","range","Punctuator","UnexpectedToken","NumericLiteral","parseFloat","StringLiteral","octal","EOF","description","createArrayExpression","createLiteral","createIdentifier","createProperty","createObjectExpression","createThisExpression","createCallExpression","createMemberExpression","createUnaryExpression","allowIn","prec","createBinaryExpression","createConditionalExpression","createEmptyStatement","createExpressionStatement","labelSet","Redeclaration","createLabeledStatement","createProgram","valueOf","ArrayExpression","BinaryExpression","CallExpression","ConditionalExpression","EmptyStatement","ExpressionStatement","Literal","LabeledStatement","LogicalExpression","MemberExpression","ObjectExpression","Program","Property","ThisExpression","UnaryExpression","UnknownLabel","esprima","parse","statements","labeledStatements","deps","last","currentPath","getPath","valueFn","+","-","!","*","/","%","<",">","<=",">=","==","!=","===","!==","&&","||","getFn","key","getBinding","ExpressionSyntax","group","groupEnd","__instanceCreated","CustomElements","upgradeAll","setInterval","flush","dirtyCheck","HTMLImports","callbacks","load","next","nextContext","parent","postMessage","url","bust","debug","receive","loadDocument","err","resource","xhr","_URL","baseURI","documents","cache","preloadSelectors","loader","loaded","preload","filterMainDocumentNodes","extractTemplateNodes","addNodes","resolvePathsInHTML","import","ownerNode","__resource","resolvePathsInStylesheet","onload","oncomplete","inflight","pending","require","checkDone","nodeUrl","__nodeUrl","dedupe","fetch","tail","resolveUrl","getDocumentUrl","hrefOrSrc","documentUrlFromNode","URL","isAbsUrl","compressUrl","urlToPath","makeRelPath","unshift","resolveAttributes","resolveStyleElts","resolveCssText","resolveNodeAttributes","async","ok","status","XMLHttpRequest","readyState","response","send","responseType","importer","IMPORT_LINK_TYPE","selectors","__importParsed","parseLink","parseGeneric","parseScript","floor","eval","parser","readyTime","sort","uid_","callback_","nodes_","removeTransientObservers","options","subtree","enqueue","records_","attributeName","attributeNamespace","transientObservedNodes","msSetImmediate","childList","characterData","attributeOldValue","attributeFilter","characterDataOldValue","SyntaxError","removeListeners","addListeners","addListeners_","removeListeners_","addTransientObserver","attrName","attrChange","ADDITION","prevValue","JsMutationObserver","lifecycle","ancestry","extends","ctor","ready","is","tag","native","__upgraded__","upgradeSubtree","readyCallback","attributeChangedCallback","hasNative","webkitRegister","register","upgradeElement","upgrade","dom","insertedCallback","__inserted","warn","removedCallback","__watched","watchShadow","watchAllShadows","observeDocument","upgradeDocument","parseElementElement","takeAttributes","executeComponentScript","inScript","inContext","inName","context","owner","code","HTMLElementElement","__componentScript","element","__parsed","parseImport","parseElement","elapsed","canTarget","targetingShadow","olderShadow","allShadows","searchRoot","findTarget","targetFinding","PointerEventsPolyfill","rule","buttons","which","pressure","pointerId","width","height","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","PointerEvent","ids","pointers","has","clear","PointerMap","targets","handledEvents","pointermap","eventMap","eventSources","eventSourceList","registerSource","events","unregister","down","fireEvent","move","up","enter","leave","over","out","cancel","leaveOut","enterOver","eventHandler","listen","addEvent","unlisten","removeEvent","boundHandler","makeEvent","cloneEvent","getTarget","captureInfo","id","setCapture","releaseCapture","implicitRelease","asyncDispatchEvent","dispatcher","addCallback","removeCallback","changedCallback","mutationWatcher","watchSubtree","enableOnSubtree","installOnLoad","installNewSubtree","findElements","addElement","removeElement","elementChanged","concatLists","isElement","flattenMutationTree","reduce","mutationHandler","Installer","POINTER_ID","POINTER_TYPE","lastTouches","isEventSimulatedFromTouch","abs","prepareEvent","mousedown","mousemove","mouseup","cleanupMouse","mouseover","mouseout","mouseEvents","touchAction","scrollType","elementAdded","touchActionToScrollType","elementRemoved","touchActiontoScrollType","scrollTypes","EMITTER","XSCROLLER","YSCROLLER","SCROLLER","firstTouch","isPrimaryTouch","identifier","setPrimaryTouch","firstXY","scrolling","removePrimaryTouch","touchToPointer","webkitRadiusX","radiusX","webkitRadiusY","radiusY","webkitForce","force","processTouches","changedTouches","shouldScroll","findTouch","vacuumTouches","touches","cancelOut","touchstart","dedupSynthMouse","overDown","outTarget","touchmove","touchcancel","moveOverOut","touchend","upOut","cleanUpPointer","touchEvents","MSPointerEvent","MSPOINTER_TYPE_MOUSE","POINTER_TYPES","MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSLostPointerCapture","MSGotPointerCapture","msEvents","pointerEnabled","msPointerEnabled","msMaxTouchPoints","ontouchstart","msSetPointerCapture","msReleasePointerCapture","setPointerCapture","releasePointerCapture","tapPrevented","utils","LCA","find","depth","walk","findLCA","PointerGestures","handlers","recognizers","registerRecognizer","addHandler","registerTarget","unregisterTarget","makeQueue","runQueue","currentPointerId","inTarget","tap","HOLD_DELAY","WIGGLE_THRESHOLD","heldPointer","holdJob","pulse","timeStamp","held","fireHold","clearInterval","pointerdown","pointerup","pointercancel","pointermove","holdTime","clampDir","calcPositionDelta","pageX","pageY","fireTrack","downEvent","lastMoveEvent","xDirection","yDirection","dx","dy","ddx","ddy","trackInfo","_releaseTarget","downTarget","tracking","MIN_VELOCITY","MAX_QUEUE","moveQueue","addMove","fireFlick","sqrt","calcAngle","xVelocity","yVelocity","velocity","angle","majorAxis","atan2","PI","Polymer","webkitTransition","opacity","scope","stylizer","hostRuleRe","selectorRe","hostElementRe","hostFixableRe","cssCommentRe","cssPolyfillCommentRe","cssPseudoRe","selectorReSuffix","hostRe","cacheDefinition","styles","strictPolyfillStyling","stylesForElement","addCssToDocument","extendee","findExtendee","extendeeStyles","selector","matcher","cssRule","stylesToCssText","rulesToCss","cssToRules","parts","rules","properties","matchScope","strict","splits","scoped","sep","preserveComments","stripCssComments","css","getSheet","addSheetToDocument","extend","pd","nom","getPrototypeForTag","originalStopPropagation","cancelBubble","deserializeValue","defaultValue","inferredType","typeHandlers","string","date","boolean","number","floatVal","job","wait","stop","Job","go","handle","complete","$super","arrayOfArgs","caller","nameInThis","memoizeSuper","_super","fn","nextSuper","proto","method","n$","super","declaration","instance","args","timeout","fire","toNode","undefined","asyncFire","asyncMethod","classFollows","anew","old","className","classList","listenLocal","event","on","EVENT_PREFIX","_listenLocalNoEventPath","_listenLocal","some","findController","ctrlr","handleIfNotHandled","dispatchMethod","list","eventHandledTable","DELEGATES","addHostListeners","addNodeListeners","hostEventListener","addInstanceListeners","delegates","instanceEventListener","listener","findEventDelegate","methodName","invoke","bindProperties","inA","inProperty","inB","inPath","LOG_BIND_PROPS","registerObserver","o$","getElementObservers","unregisterObserver","unregisterObservers","$o","b$","OBSERVE_SUFFIX","observeProperties","names","getCustomPropertyNames","observeProperty","customPropertyNames","shouldObserveProperty","watch","LOG_OBSERVE","propertyChanged","neo","LOG_OBSERVED","dispatchPropertyChange","bindProperty","unbindProperty","unbindAllProperties","PUBLISHED","INSTANCE_ATTRIBUTES","copyInstanceAttributes","a$","attributeToProperty","propertyForAttribute","bindPattern","lowerCase","stringValue","unbindNodeTree","forNodeTree","_nodeUnbindAll","child","mdv_syntax","mdv","instanceTemplate","asyncUnbindAll","_unbound","_unbindAllJob","cancelUnbindAll","preventCascade","inserted","mustachePattern","isBase","PolymerBase","parseElements","elementElement","shadowFromTemplate","fetchTemplate","elderRoot","applyAuthorStyles","resetStyleInheritance","shadowRootReady","marshalNodeReferences","attributeChanged","Base","STYLE_SCOPE_ATTRIBUTE","STYLE_CONTROLLER_SCOPE","installControllerStyles","findStyleController","scopeHasElementStyle","cssTextForScope","cssTextToScopeStyle","applyStyleToScope","descriptor","addResolvePathApi","elementPath","resolvePath","clone","createStyleElement","attr","cssTextFromSheet","matchesSelector","inSelector","STYLE_SELECTOR","SHEET_SELECTOR","STYLE_GLOBAL_SCOPE","SCOPE_ATTR","installSheets","cacheSheets","installLocalSheets","installGlobalStyles","sheets","findNodes","nodes","templateNodes","styleForScope","scopeDescriptor","hasEventPrefix","prefixLength","removeEventPrefix","getTemplateContent","inheritDelegates","inheritObject","parseHostEvents","addAttributeDelegates","parseLocalEvents","accumulateTemplatedEvents","accumulateChildEvents","accumulateEvents","accumulateAttributeEvents","accumulateEvent","event_translations","webkitanimationstart","webkitanimationend","webkittransitionend","domfocusout","domfocusin","empty","cacheProperties","PUBLISH","ATTRIBUTES","inheritAttributesObjects","parseAttributes","publishAttributes","publishProperties","accumulateInstanceAttributes","published","publishPublish","imperative","clonable","isInstanceAttribute","blackList","generatePrototype","apis","extnds","generateCustomPrototype","desugar","publishConstructor","registerCallback","generateBasePrototype","addNamedApi","ensureBaseApi","symbol"],"mappings":"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"} \ No newline at end of file diff --git a/libs/rsvp/rsvp.js b/libs/rsvp/rsvp.js deleted file mode 100644 index c956f8585..000000000 --- a/libs/rsvp/rsvp.js +++ /dev/null @@ -1,2183 +0,0 @@ -(function(global) { -var define, requireModule, require, requirejs; - -(function() { - var registry = {}, seen = {}; - - define = function(name, deps, callback) { - registry[name] = { deps: deps, callback: callback }; - }; - - requirejs = require = requireModule = function(name) { - requirejs._eak_seen = registry; - - if (seen[name]) { return seen[name]; } - seen[name] = {}; - - if (!registry[name]) { - throw new Error("Could not find module " + name); - } - - var mod = registry[name], - deps = mod.deps, - callback = mod.callback, - reified = [], - exports; - - for (var i=0, l=deps.length; i 1; - }; - - RSVP.filter(promises, filterFn).then(function(result){ - // result is [ 2, 3 ] - }); - ``` - - If any of the `promises` given to `RSVP.filter` are rejected, the first promise - that is rejected will be given as an argument to the returned promises's - rejection handler. For example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.reject(new Error("2")); - var promise3 = RSVP.reject(new Error("3")); - var promises = [ promise1, promise2, promise3 ]; - - var filterFn = function(item){ - return item > 1; - }; - - RSVP.filter(promises, filterFn).then(function(array){ - // Code here never runs because there are rejected promises! - }, function(reason) { - // reason.message === "2" - }); - ``` - - `RSVP.filter` will also wait for any promises returned from `filterFn`. - For instance, you may want to fetch a list of users then return a subset - of those users based on some asynchronous operation: - - ```javascript - - var alice = { name: 'alice' }; - var bob = { name: 'bob' }; - var users = [ alice, bob ]; - - var promises = users.map(function(user){ - return RSVP.resolve(user); - }); - - var filterFn = function(user){ - // Here, Alice has permissions to create a blog post, but Bob does not. - return getPrivilegesForUser(user).then(function(privs){ - return privs.can_create_blog_post === true; - }); - }; - RSVP.filter(promises, filterFn).then(function(users){ - // true, because the server told us only Alice can create a blog post. - users.length === 1; - // false, because Alice is the only user present in `users` - users[0] === bob; - }); - ``` - - @method filter - @for RSVP - @param {Array} promises - @param {Function} filterFn - function to be called on each resolved value to - filter the final results. - @param {String} label optional string describing the promise. Useful for - tooling. - @return {Promise} - */ - function filter(promises, filterFn, label) { - if (!isArray(promises)) { - throw new TypeError('You must pass an array to filter.'); - } - - if (!isFunction(filterFn)){ - throw new TypeError("You must pass a function to filter's second argument."); - } - - return all(promises, label).then(function(values){ - return map(promises, filterFn, label).then(function(filterResults){ - var i, - valuesLen = values.length, - filtered = []; - - for (i = 0; i < valuesLen; i++){ - if(filterResults[i]) filtered.push(values[i]); - } - return filtered; - }); - }); - } - - __exports__["default"] = filter; - }); -define("rsvp/hash", - ["./promise","./utils","exports"], - function(__dependency1__, __dependency2__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - var isNonThenable = __dependency2__.isNonThenable; - var keysOf = __dependency2__.keysOf; - - /** - `RSVP.hash` is similar to `RSVP.all`, but takes an object instead of an array - for its `promises` argument. - - Returns a promise that is fulfilled when all the given promises have been - fulfilled, or rejected if any of them become rejected. The returned promise - is fulfilled with a hash that has the same key names as the `promises` object - argument. If any of the values in the object are not promises, they will - simply be copied over to the fulfilled object. - - Example: - - ```javascript - var promises = { - myPromise: RSVP.resolve(1), - yourPromise: RSVP.resolve(2), - theirPromise: RSVP.resolve(3), - notAPromise: 4 - }; - - RSVP.hash(promises).then(function(hash){ - // hash here is an object that looks like: - // { - // myPromise: 1, - // yourPromise: 2, - // theirPromise: 3, - // notAPromise: 4 - // } - }); - ```` - - If any of the `promises` given to `RSVP.hash` are rejected, the first promise - that is rejected will be given as as the first argument, or as the reason to - the rejection handler. For example: - - ```javascript - var promises = { - myPromise: RSVP.resolve(1), - rejectedPromise: RSVP.reject(new Error("rejectedPromise")), - anotherRejectedPromise: RSVP.reject(new Error("anotherRejectedPromise")), - }; - - RSVP.hash(promises).then(function(hash){ - // Code here never runs because there are rejected promises! - }, function(reason) { - // reason.message === "rejectedPromise" - }); - ``` - - An important note: `RSVP.hash` is intended for plain JavaScript objects that - are just a set of keys and values. `RSVP.hash` will NOT preserve prototype - chains. - - Example: - - ```javascript - function MyConstructor(){ - this.example = RSVP.resolve("Example"); - } - - MyConstructor.prototype = { - protoProperty: RSVP.resolve("Proto Property") - }; - - var myObject = new MyConstructor(); - - RSVP.hash(myObject).then(function(hash){ - // protoProperty will not be present, instead you will just have an - // object that looks like: - // { - // example: "Example" - // } - // - // hash.hasOwnProperty('protoProperty'); // false - // 'undefined' === typeof hash.protoProperty - }); - ``` - - @method hash - @for RSVP - @param {Object} promises - @param {String} label - optional string that describes the promise. - Useful for tooling. - @return {Promise} promise that is fulfilled when all properties of `promises` - have been fulfilled, or rejected if any of them become rejected. - */ - __exports__["default"] = function hash(object, label) { - return new Promise(function(resolve, reject){ - var results = {}; - var keys = keysOf(object); - var remaining = keys.length; - var entry, property; - - if (remaining === 0) { - resolve(results); - return; - } - - function fulfilledTo(property) { - return function(value) { - results[property] = value; - if (--remaining === 0) { - resolve(results); - } - }; - } - - function onRejection(reason) { - remaining = 0; - reject(reason); - } - - for (var i = 0; i < keys.length; i++) { - property = keys[i]; - entry = object[property]; - - if (isNonThenable(entry)) { - results[property] = entry; - if (--remaining === 0) { - resolve(results); - } - } else { - Promise.cast(entry).then(fulfilledTo(property), onRejection); - } - } - }); - }; - }); -define("rsvp/instrument", - ["./config","./utils","exports"], - function(__dependency1__, __dependency2__, __exports__) { - "use strict"; - var config = __dependency1__.config; - var now = __dependency2__.now; - - __exports__["default"] = function instrument(eventName, promise, child) { - // instrumentation should not disrupt normal usage. - try { - config.trigger(eventName, { - guid: promise._guidKey + promise._id, - eventName: eventName, - detail: promise._detail, - childGuid: child && promise._guidKey + child._id, - label: promise._label, - timeStamp: now(), - stack: new Error(promise._label).stack - }); - } catch(error) { - setTimeout(function(){ - throw error; - }, 0); - } - }; - }); -define("rsvp/map", - ["./promise","./all","./utils","exports"], - function(__dependency1__, __dependency2__, __dependency3__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - var all = __dependency2__["default"]; - var isArray = __dependency3__.isArray; - var isFunction = __dependency3__.isFunction; - - /** - - `RSVP.map` is similar to JavaScript's native `map` method, except that it - waits for all promises to become fulfilled before running the `mapFn` on - each item in given to `promises`. `RSVP.map` returns a promise that will - become fulfilled with the result of running `mapFn` on the values the promises - become fulfilled with. - - For example: - - ```javascript - - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.resolve(2); - var promise3 = RSVP.resolve(3); - var promises = [ promise1, promise2, promise3 ]; - - var mapFn = function(item){ - return item + 1; - }; - - RSVP.map(promises, mapFn).then(function(result){ - // result is [ 2, 3, 4 ] - }); - ``` - - If any of the `promises` given to `RSVP.map` are rejected, the first promise - that is rejected will be given as an argument to the returned promises's - rejection handler. For example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.reject(new Error("2")); - var promise3 = RSVP.reject(new Error("3")); - var promises = [ promise1, promise2, promise3 ]; - - var mapFn = function(item){ - return item + 1; - }; - - RSVP.map(promises, mapFn).then(function(array){ - // Code here never runs because there are rejected promises! - }, function(reason) { - // reason.message === "2" - }); - ``` - - `RSVP.map` will also wait if a promise is returned from `mapFn`. For example, - say you want to get all comments from a set of blog posts, but you need - the blog posts first becuase they contain a url to those comments. - - ```javscript - - var mapFn = function(blogPost){ - // getComments does some ajax and returns an RSVP.Promise that is fulfilled - // with some comments data - return getComments(blogPost.comments_url); - }; - - // getBlogPosts does some ajax and returns an RSVP.Promise that is fulfilled - // with some blog post data - RSVP.map(getBlogPosts(), mapFn).then(function(comments){ - // comments is the result of asking the server for the comments - // of all blog posts returned from getBlogPosts() - }); - ``` - - @method map - @for RSVP - @param {Array} promises - @param {Function} mapFn function to be called on each fulfilled promise. - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} promise that is fulfilled with the result of calling - `mapFn` on each fulfilled promise or value when they become fulfilled. - The promise will be rejected if any of the given `promises` become rejected. - */ - __exports__["default"] = function map(promises, mapFn, label) { - - if (!isArray(promises)) { - throw new TypeError('You must pass an array to map.'); - } - - if (!isFunction(mapFn)){ - throw new TypeError("You must pass a function to map's second argument."); - } - - return all(promises, label).then(function(results){ - var resultLen = results.length, - mappedResults = [], - i; - - for (i = 0; i < resultLen; i++){ - mappedResults.push(mapFn(results[i])); - } - - return all(mappedResults, label); - }); - }; - }); -define("rsvp/node", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - var slice = Array.prototype.slice; - - function makeNodeCallbackFor(resolve, reject) { - return function (error, value) { - if (error) { - reject(error); - } else if (arguments.length > 2) { - resolve(slice.call(arguments, 1)); - } else { - resolve(value); - } - }; - } - - /** - `RSVP.denodeify` takes a "node-style" function and returns a function that - will return an `RSVP.Promise`. You can use `denodeify` in Node.js or the - browser when you'd prefer to use promises over using callbacks. For example, - `denodeify` transforms the following: - - ```javascript - var fs = require('fs'); - - fs.readFile('myfile.txt', function(err, data){ - if (err) return handleError(err); - handleData(data); - }); - ``` - - into: - - ```javascript - var fs = require('fs'); - - var readFile = RSVP.denodeify(fs.readFile); - - readFile('myfile.txt').then(handleData, handleError); - ``` - - Using `denodeify` makes it easier to compose asynchronous operations instead - of using callbacks. For example, instead of: - - ```javascript - var fs = require('fs'); - var log = require('some-async-logger'); - - fs.readFile('myfile.txt', function(err, data){ - if (err) return handleError(err); - fs.writeFile('myfile2.txt', data, function(err){ - if (err) throw err; - log('success', function(err) { - if (err) throw err; - }); - }); - }); - ``` - - You can chain the operations together using `then` from the returned promise: - - ```javascript - var fs = require('fs'); - var denodeify = RSVP.denodeify; - var readFile = denodeify(fs.readFile); - var writeFile = denodeify(fs.writeFile); - var log = denodeify(require('some-async-logger')); - - readFile('myfile.txt').then(function(data){ - return writeFile('myfile2.txt', data); - }).then(function(){ - return log('SUCCESS'); - }).then(function(){ - // success handler - }, function(reason){ - // rejection handler - }); - ``` - - @method denodeify - @for RSVP - @param {Function} nodeFunc a "node-style" function that takes a callback as - its last argument. The callback expects an error to be passed as its first - argument (if an error occurred, otherwise null), and the value from the - operation as its second argument ("function(err, value){ }"). - @param {Any} binding optional argument for binding the "this" value when - calling the `nodeFunc` function. - @return {Function} a function that wraps `nodeFunc` to return an - `RSVP.Promise` - */ - __exports__["default"] = function denodeify(nodeFunc, binding) { - return function() { - var nodeArgs = slice.call(arguments), resolve, reject; - var thisArg = this || binding; - - return new Promise(function(resolve, reject) { - Promise.all(nodeArgs).then(function(nodeArgs) { - try { - nodeArgs.push(makeNodeCallbackFor(resolve, reject)); - nodeFunc.apply(thisArg, nodeArgs); - } catch(e) { - reject(e); - } - }); - }); - }; - }; - }); -define("rsvp/promise", - ["./config","./events","./instrument","./utils","./promise/cast","./promise/all","./promise/race","./promise/resolve","./promise/reject","exports"], - function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) { - "use strict"; - var config = __dependency1__.config; - var EventTarget = __dependency2__["default"]; - var instrument = __dependency3__["default"]; - var objectOrFunction = __dependency4__.objectOrFunction; - var isFunction = __dependency4__.isFunction; - var now = __dependency4__.now; - var cast = __dependency5__["default"]; - var all = __dependency6__["default"]; - var race = __dependency7__["default"]; - var Resolve = __dependency8__["default"]; - var Reject = __dependency9__["default"]; - - var guidKey = 'rsvp_' + now() + '-'; - var counter = 0; - - function noop() {} - - __exports__["default"] = Promise; - - - /** - - Promise objects represent the eventual result of an asynchronous operation. The - primary way of interacting with a promise is through its `then` method, which - registers callbacks to receive either a promise’s eventual value or the reason - why the promise cannot be fulfilled. - - Terminology - ----------- - - - `promise` is an object or function with a `then` method whose behavior conforms to this specification. - - `thenable` is an object or function that defines a `then` method. - - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). - - `exception` is a value that is thrown using the throw statement. - - `reason` is a value that indicates why a promise was rejected. - - `settled` the final resting state of a promise, fulfilled or rejected. - - A promise can be in one of three states: pending, fulfilled, or rejected. - - - Basic Usage: - ------------ - - ```js - var promise = new Promise(function(resolve, reject) { - // on success - resolve(value); - - // on failure - reject(reason); - }); - - promise.then(function(value) { - // on fulfillment - }, function(reason) { - // on rejection - }); - ``` - - Advanced Usage: - --------------- - - Promises shine when abstracting away asynchronous interactions such as - `XMLHttpRequest`s. - - ```js - function getJSON(url) { - return new Promise(function(resolve, reject){ - var xhr = new XMLHttpRequest(); - - xhr.open('GET', url); - xhr.onreadystatechange = handler; - xhr.responseType = 'json'; - xhr.setRequestHeader('Accept', 'application/json'); - xhr.send(); - - function handler() { - if (this.readyState === this.DONE) { - if (this.status === 200) { - resolve(this.response); - } else { - reject(new Error("getJSON: `" + url + "` failed with status: [" + this.status + "]"); - } - } - }; - }); - } - - getJSON('/posts.json').then(function(json) { - // on fulfillment - }, function(reason) { - // on rejection - }); - ``` - - Unlike callbacks, promises are great composable primitives. - - ```js - Promise.all([ - getJSON('/posts'), - getJSON('/comments') - ]).then(function(values){ - values[0] // => postsJSON - values[1] // => commentsJSON - - return values; - }); - ``` - - @class Promise - @param {function} - @param {String} label optional string for labeling the promise. - Useful for tooling. - @constructor - */ - function Promise(resolver, label) { - if (!isFunction(resolver)) { - throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); - } - - if (!(this instanceof Promise)) { - throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); - } - - this._id = counter++; - this._label = label; - this._subscribers = []; - - if (config.instrument) { - instrument('created', this); - } - - if (noop !== resolver) { - invokeResolver(resolver, this); - } - } - - function invokeResolver(resolver, promise) { - function resolvePromise(value) { - resolve(promise, value); - } - - function rejectPromise(reason) { - reject(promise, reason); - } - - try { - resolver(resolvePromise, rejectPromise); - } catch(e) { - rejectPromise(e); - } - } - - Promise.cast = cast; - Promise.all = all; - Promise.race = race; - Promise.resolve = Resolve; - Promise.reject = Reject; - - var PENDING = void 0; - var SEALED = 0; - var FULFILLED = 1; - var REJECTED = 2; - - function subscribe(parent, child, onFulfillment, onRejection) { - var subscribers = parent._subscribers; - var length = subscribers.length; - - subscribers[length] = child; - subscribers[length + FULFILLED] = onFulfillment; - subscribers[length + REJECTED] = onRejection; - } - - function publish(promise, settled) { - var child, callback, subscribers = promise._subscribers, detail = promise._detail; - - if (config.instrument) { - instrument(settled === FULFILLED ? 'fulfilled' : 'rejected', promise); - } - - for (var i = 0; i < subscribers.length; i += 3) { - child = subscribers[i]; - callback = subscribers[i + settled]; - - invokeCallback(settled, child, callback, detail); - } - - promise._subscribers = null; - } - - Promise.prototype = { - /** - @property constructor - */ - constructor: Promise, - - _id: undefined, - _guidKey: guidKey, - _label: undefined, - - _state: undefined, - _detail: undefined, - _subscribers: undefined, - - _onerror: function (reason) { - config.trigger('error', reason); - }, - - /** - - A promise represents the eventual result of an asynchronous operation. The - primary way of interacting with a promise is through its `then` method, which - registers callbacks to receive either a promise's eventual value or the reason - why the promise cannot be fulfilled. - - ```js - findUser().then(function(user){ - // user is available - }, function(reason){ - // user is unavailable, and you are given the reason why - }); - ``` - - Chaining - -------- - - The return value of `then` is itself a promise. This second, "downstream" - promise is resolved with the return value of the first promise's fulfillment - or rejection handler, or rejected if the handler throws an exception. - - ```js - findUser().then(function (user) { - return user.name; - }, function (reason) { - return "default name"; - }).then(function (userName) { - // If `findUser` fulfilled, `userName` will be the user's name, otherwise it - // will be `"default name"` - }); - - findUser().then(function (user) { - throw "Found user, but still unhappy"; - }, function (reason) { - throw "`findUser` rejected and we're unhappy"; - }).then(function (value) { - // never reached - }, function (reason) { - // if `findUser` fulfilled, `reason` will be "Found user, but still unhappy". - // If `findUser` rejected, `reason` will be "`findUser` rejected and we're unhappy". - }); - ``` - If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. - - ```js - findUser().then(function (user) { - throw new PedagogicalException("Upstream error"); - }).then(function (value) { - // never reached - }).then(function (value) { - // never reached - }, function (reason) { - // The `PedgagocialException` is propagated all the way down to here - }); - ``` - - Assimilation - ------------ - - Sometimes the value you want to propagate to a downstream promise can only be - retrieved asynchronously. This can be achieved by returning a promise in the - fulfillment or rejection handler. The downstream promise will then be pending - until the returned promise is settled. This is called *assimilation*. - - ```js - findUser().then(function (user) { - return findCommentsByAuthor(user); - }).then(function (comments) { - // The user's comments are now available - }); - ``` - - If the assimliated promise rejects, then the downstream promise will also reject. - - ```js - findUser().then(function (user) { - return findCommentsByAuthor(user); - }).then(function (comments) { - // If `findCommentsByAuthor` fulfills, we'll have the value here - }, function (reason) { - // If `findCommentsByAuthor` rejects, we'll have the reason here - }); - ``` - - Simple Example - -------------- - - Synchronous Example - - ```javascript - var result; - - try { - result = findResult(); - // success - } catch(reason) { - // failure - } - ``` - - Errback Example - - ```js - findResult(function(result, err){ - if (err) { - // failure - } else { - // success - } - }); - ``` - - Promise Example; - - ```javacsript - findResult().then(function(result){ - - }, function(reason){ - - }); - ``` - - Advanced Example - -------------- - - Synchronous Example - - ```javascript - var author, books; - - try { - author = findAuthor(); - books = findBooksByAuthor(author); - // success - } catch(reason) { - // failure - } - ``` - - Errback Example - - ```js - - function foundBooks(books) { - - } - - function failure(reason) { - - } - - findAuthor(function(author, err){ - if (err) { - failure(err); - // failure - } else { - try { - findBoooksByAuthor(author, function(books, err) { - if (err) { - failure(err); - } else { - try { - foundBooks(books); - } catch(reason) { - failure(reason); - } - } - }); - } catch(error) { - failure(err); - } - // success - } - }); - ``` - - Promise Example; - - ```javacsript - findAuthor(). - then(findBooksByAuthor). - then(function(books){ - // found books - }).catch(function(reason){ - // something went wrong; - }); - ``` - - @method then - @param {Function} onFulfillment - @param {Function} onRejection - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} - */ - then: function(onFulfillment, onRejection, label) { - var promise = this; - this._onerror = null; - - var thenPromise = new this.constructor(noop, label); - - if (this._state) { - var callbacks = arguments; - config.async(function invokePromiseCallback() { - invokeCallback(promise._state, thenPromise, callbacks[promise._state - 1], promise._detail); - }); - } else { - subscribe(this, thenPromise, onFulfillment, onRejection); - } - - if (config.instrument) { - instrument('chained', promise, thenPromise); - } - - return thenPromise; - }, - - /** - `catch` is simply sugar for `then(null, onRejection)` which makes it the same - as the catch block, of a try/catch statement. - - ```js - function findAuthor(){ - throw new Error("couldn't find that author"); - } - - // synchronous - try { - findAuthor(); - } catch(reason) { - - } - - // async with promises - findAuthor().catch(function(reason){ - // something went wrong; - }); - ``` - - @method catch - @param {Function} onRejection - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} - */ - 'catch': function(onRejection, label) { - return this.then(null, onRejection, label); - }, - - /** - `finally` will be invoked regardless of the promise's fate just as native - try/catch/finally behaves - - ```js - findAuthor() { - if (Math.random() > 0.5) { - throw new Error(); - } - return new Author(); - } - - try { - return findAuthor(); // succeed or fail - } catch(error) { - return findOtherAuther(); - } finally { - // always runs - // doesn't effect the return value - } - - findAuthor().finally(function(){ - // author was either found, or not - }); - ``` - - @method finally - @param {Function} callback - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} - */ - 'finally': function(callback, label) { - var constructor = this.constructor; - - return this.then(function(value) { - return constructor.cast(callback()).then(function(){ - return value; - }); - }, function(reason) { - return constructor.cast(callback()).then(function(){ - throw reason; - }); - }, label); - } - }; - - function invokeCallback(settled, promise, callback, detail) { - var hasCallback = isFunction(callback), - value, error, succeeded, failed; - - if (hasCallback) { - try { - value = callback(detail); - succeeded = true; - } catch(e) { - failed = true; - error = e; - } - } else { - value = detail; - succeeded = true; - } - - if (handleThenable(promise, value)) { - return; - } else if (hasCallback && succeeded) { - resolve(promise, value); - } else if (failed) { - reject(promise, error); - } else if (settled === FULFILLED) { - resolve(promise, value); - } else if (settled === REJECTED) { - reject(promise, value); - } - } - - function handleThenable(promise, value) { - var then = null, - resolved; - - try { - if (promise === value) { - throw new TypeError("A promises callback cannot return that same promise."); - } - - if (objectOrFunction(value)) { - then = value.then; - - if (isFunction(then)) { - then.call(value, function(val) { - if (resolved) { return true; } - resolved = true; - - if (value !== val) { - resolve(promise, val); - } else { - fulfill(promise, val); - } - }, function(val) { - if (resolved) { return true; } - resolved = true; - - reject(promise, val); - }, 'derived from: ' + (promise._label || ' unknown promise')); - - return true; - } - } - } catch (error) { - if (resolved) { return true; } - reject(promise, error); - return true; - } - - return false; - } - - function resolve(promise, value) { - if (promise === value) { - fulfill(promise, value); - } else if (!handleThenable(promise, value)) { - fulfill(promise, value); - } - } - - function fulfill(promise, value) { - if (promise._state !== PENDING) { return; } - promise._state = SEALED; - promise._detail = value; - - config.async(publishFulfillment, promise); - } - - function reject(promise, reason) { - if (promise._state !== PENDING) { return; } - promise._state = SEALED; - promise._detail = reason; - - config.async(publishRejection, promise); - } - - function publishFulfillment(promise) { - publish(promise, promise._state = FULFILLED); - } - - function publishRejection(promise) { - if (promise._onerror) { - promise._onerror(promise._detail); - } - - publish(promise, promise._state = REJECTED); - } - }); -define("rsvp/promise/all", - ["../utils","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var isArray = __dependency1__.isArray; - var isNonThenable = __dependency1__.isNonThenable; - - /** - - `RSVP.Promise.all` returns a new promise which is fulfilled with an array of - fulfillment values for the passed promises, or rejects with the reason of the - first passed promise that rejects. It casts all elements of the passed iterable - to promises as it runs this algorithm. - - Example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.resolve(2); - var promise3 = RSVP.resolve(3); - var promises = [ promise1, promise2, promise3 ]; - - RSVP.Promise.all(promises).then(function(array){ - // The array here would be [ 1, 2, 3 ]; - }); - ``` - - If any of the `promises` given to `RSVP.all` are rejected, the first promise - that is rejected will be given as an argument to the returned promises's - rejection handler. For example: - - Example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.reject(new Error("2")); - var promise3 = RSVP.reject(new Error("3")); - var promises = [ promise1, promise2, promise3 ]; - - RSVP.Promise.all(promises).then(function(array){ - // Code here never runs because there are rejected promises! - }, function(error) { - // error.message === "2" - }); - ``` - - @method all - @for RSVP.Promise - @param {Array} promises - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} promise that is fulfilled when all `promises` have been - fulfilled, or rejected if any of them become rejected. - */ - __exports__["default"] = function all(entries, label) { - - /*jshint validthis:true */ - var Constructor = this; - - return new Constructor(function(resolve, reject) { - if (!isArray(entries)) { - throw new TypeError('You must pass an array to all.'); - } - - var remaining = entries.length; - var results = new Array(remaining); - var entry, pending = true; - - if (remaining === 0) { - resolve(results); - return; - } - - function fulfillmentAt(index) { - return function(value) { - results[index] = value; - if (--remaining === 0) { - resolve(results); - } - }; - } - - function onRejection(reason) { - remaining = 0; - reject(reason); - } - - for (var index = 0; index < entries.length; index++) { - entry = entries[index]; - if (isNonThenable(entry)) { - results[index] = entry; - if (--remaining === 0) { - resolve(results); - } - } else { - Constructor.cast(entry).then(fulfillmentAt(index), onRejection); - } - } - }, label); - }; - }); -define("rsvp/promise/cast", - ["exports"], - function(__exports__) { - "use strict"; - /** - - `RSVP.Promise.cast` cast coerces its argument to a promise, or returns the - argument if it is already a promise which shares a constructor with the caster; - - Example: - - ```javascript - var promise = RSVP.Promise.resolve(1); - var casted = RSVP.Promise.cast(promise); - - console.log(promise === casted); // true - ``` - - In the case of a promise whose constructor does not match, it is assimilated. - The resulting promise will fulfill or reject based on the outcome of the - promise being casted. - - In the case of a non-promise, a promise which will fulfill with that value is - returned. - - Example: - - ```javascript - var value = 1; // could be a number, boolean, string, undefined... - var casted = RSVP.Promise.cast(value); - - console.log(value === casted); // false - console.log(casted instanceof RSVP.Promise) // true - - casted.then(function(val) { - val === value // => true - }); - ``` - - `RSVP.Promise.cast` is similar to `RSVP.Promise.resolve`, but `RSVP.Promise.cast` differs in the - following ways: - - * `RSVP.Promise.cast` serves as a memory-efficient way of getting a promise, when you - have something that could either be a promise or a value. RSVP.resolve - will have the same effect but will create a new promise wrapper if the - argument is a promise. - * `RSVP.Promise.cast` is a way of casting incoming thenables or promise subclasses to - promises of the exact class specified, so that the resulting object's `then` is - ensured to have the behavior of the constructor you are calling cast on (i.e., RSVP.Promise). - - @method cast - @for RSVP.Promise - @param {Object} object to be casted - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} promise - */ - - __exports__["default"] = function cast(object, label) { - /*jshint validthis:true */ - var Constructor = this; - - if (object && typeof object === 'object' && object.constructor === Constructor) { - return object; - } - - return new Constructor(function(resolve) { - resolve(object); - }, label); - }; - }); -define("rsvp/promise/race", - ["../utils","exports"], - function(__dependency1__, __exports__) { - "use strict"; - /* global toString */ - - var isArray = __dependency1__.isArray; - var isFunction = __dependency1__.isFunction; - var isNonThenable = __dependency1__.isNonThenable; - - /** - `RSVP.Promise.race` returns a new promise which is settled in the same way as the - first passed promise to settle. - - Example: - - ```javascript - var promise1 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - resolve("promise 1"); - }, 200); - }); - - var promise2 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - resolve("promise 2"); - }, 100); - }); - - RSVP.Promise.race([promise1, promise2]).then(function(result){ - // result === "promise 2" because it was resolved before promise1 - // was resolved. - }); - ``` - - `RSVP.Promise.race` is deterministic in that only the state of the first - completed promise matters. For example, even if other promises given to the - `promises` array argument are resolved, but the first completed promise has - become rejected before the other promises became fulfilled, the returned - promise will become rejected: - - ```javascript - var promise1 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - resolve("promise 1"); - }, 200); - }); - - var promise2 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - reject(new Error("promise 2")); - }, 100); - }); - - RSVP.Promise.race([promise1, promise2]).then(function(result){ - // Code here never runs because there are rejected promises! - }, function(reason){ - // reason.message === "promise2" because promise 2 became rejected before - // promise 1 became fulfilled - }); - ``` - - @method race - @for RSVP.Promise - @param {Array} promises array of promises to observe - @param {String} label optional string for describing the promise returned. - Useful for tooling. - @return {Promise} a promise which settles in the same way as the first passed - promise to settle. - */ - __exports__["default"] = function race(entries, label) { - /*jshint validthis:true */ - var Constructor = this, entry; - - return new Constructor(function(resolve, reject) { - if (!isArray(entries)) { - throw new TypeError('You must pass an array to race.'); - } - - var pending = true; - - function onFulfillment(value) { if (pending) { pending = false; resolve(value); } } - function onRejection(reason) { if (pending) { pending = false; reject(reason); } } - - for (var i = 0; i < entries.length; i++) { - entry = entries[i]; - if (isNonThenable(entry)) { - pending = false; - resolve(entry); - return; - } else { - Constructor.cast(entry).then(onFulfillment, onRejection); - } - } - }, label); - }; - }); -define("rsvp/promise/reject", - ["exports"], - function(__exports__) { - "use strict"; - /** - `RSVP.Promise.reject` returns a promise rejected with the passed `reason`. - It is essentially shorthand for the following: - - ```javascript - var promise = new RSVP.Promise(function(resolve, reject){ - reject(new Error('WHOOPS')); - }); - - promise.then(function(value){ - // Code here doesn't run because the promise is rejected! - }, function(reason){ - // reason.message === 'WHOOPS' - }); - ``` - - Instead of writing the above, your code now simply becomes the following: - - ```javascript - var promise = RSVP.Promise.reject(new Error('WHOOPS')); - - promise.then(function(value){ - // Code here doesn't run because the promise is rejected! - }, function(reason){ - // reason.message === 'WHOOPS' - }); - ``` - - @method reject - @for RSVP.Promise - @param {Any} reason value that the returned promise will be rejected with. - @param {String} label optional string for identifying the returned promise. - Useful for tooling. - @return {Promise} a promise rejected with the given `reason`. - */ - __exports__["default"] = function reject(reason, label) { - /*jshint validthis:true */ - var Constructor = this; - - return new Constructor(function (resolve, reject) { - reject(reason); - }, label); - }; - }); -define("rsvp/promise/resolve", - ["exports"], - function(__exports__) { - "use strict"; - /** - `RSVP.Promise.resolve` returns a promise that will become fulfilled with the passed - `value`. It is essentially shorthand for the following: - - ```javascript - var promise = new RSVP.Promise(function(resolve, reject){ - resolve(1); - }); - - promise.then(function(value){ - // value === 1 - }); - ``` - - Instead of writing the above, your code now simply becomes the following: - - ```javascript - var promise = RSVP.Promise.resolve(1); - - promise.then(function(value){ - // value === 1 - }); - ``` - - @method resolve - @for RSVP.Promise - @param {Any} value value that the returned promise will be resolved with - @param {String} label optional string for identifying the returned promise. - Useful for tooling. - @return {Promise} a promise that will become fulfilled with the given - `value` - */ - __exports__["default"] = function resolve(value, label) { - /*jshint validthis:true */ - var Constructor = this; - - return new Constructor(function(resolve, reject) { - resolve(value); - }, label); - }; - }); -define("rsvp/race", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - __exports__["default"] = function race(array, label) { - return Promise.race(array, label); - }; - }); -define("rsvp/reject", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - __exports__["default"] = function reject(reason, label) { - return Promise.reject(reason, label); - }; - }); -define("rsvp/resolve", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - __exports__["default"] = function resolve(value, label) { - return Promise.resolve(value, label); - }; - }); -define("rsvp/rethrow", - ["exports"], - function(__exports__) { - "use strict"; - /** - `RSVP.rethrow` will rethrow an error on the next turn of the JavaScript event - loop in order to aid debugging. - - Promises A+ specifies that any exceptions that occur with a promise must be - caught by the promises implementation and bubbled to the last handler. For - this reason, it is recommended that you always specify a second rejection - handler function to `then`. However, `RSVP.rethrow` will throw the exception - outside of the promise, so it bubbles up to your console if in the browser, - or domain/cause uncaught exception in Node. `rethrow` will throw the error - again so the error can be handled by the promise. - - ```javascript - function throws(){ - throw new Error('Whoops!'); - } - - var promise = new RSVP.Promise(function(resolve, reject){ - throws(); - }); - - promise.catch(RSVP.rethrow).then(function(){ - // Code here doesn't run because the promise became rejected due to an - // error! - }, function (err){ - // handle the error here - }); - ``` - - The 'Whoops' error will be thrown on the next turn of the event loop - and you can watch for it in your console. You can also handle it using a - rejection handler given to `.then` or `.catch` on the returned promise. - - @method rethrow - @for RSVP - @param {Error} reason reason the promise became rejected. - @throws Error - */ - __exports__["default"] = function rethrow(reason) { - setTimeout(function() { - throw reason; - }); - throw reason; - }; - }); -define("rsvp/utils", - ["exports"], - function(__exports__) { - "use strict"; - function objectOrFunction(x) { - return typeof x === "function" || (typeof x === "object" && x !== null); - } - - __exports__.objectOrFunction = objectOrFunction;function isFunction(x) { - return typeof x === "function"; - } - - __exports__.isFunction = isFunction;function isNonThenable(x) { - return !objectOrFunction(x); - } - - __exports__.isNonThenable = isNonThenable;function isArray(x) { - return Object.prototype.toString.call(x) === "[object Array]"; - } - - __exports__.isArray = isArray;// Date.now is not available in browsers < IE9 - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now#Compatibility - var now = Date.now || function() { return new Date().getTime(); }; - __exports__.now = now; - var keysOf = Object.keys || function(object) { - var result = []; - - for (var prop in object) { - result.push(prop); - } - - return result; - }; - __exports__.keysOf = keysOf; - }); -define("rsvp", - ["./rsvp/promise","./rsvp/events","./rsvp/node","./rsvp/all","./rsvp/all_settled","./rsvp/race","./rsvp/hash","./rsvp/rethrow","./rsvp/defer","./rsvp/config","./rsvp/map","./rsvp/resolve","./rsvp/reject","./rsvp/asap","./rsvp/filter","exports"], - function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - var EventTarget = __dependency2__["default"]; - var denodeify = __dependency3__["default"]; - var all = __dependency4__["default"]; - var allSettled = __dependency5__["default"]; - var race = __dependency6__["default"]; - var hash = __dependency7__["default"]; - var rethrow = __dependency8__["default"]; - var defer = __dependency9__["default"]; - var config = __dependency10__.config; - var configure = __dependency10__.configure; - var map = __dependency11__["default"]; - var resolve = __dependency12__["default"]; - var reject = __dependency13__["default"]; - var asap = __dependency14__["default"]; - var filter = __dependency15__["default"]; - - config.async = asap; // default async is asap; - - function async(callback, arg) { - config.async(callback, arg); - } - - function on() { - config.on.apply(config, arguments); - } - - function off() { - config.off.apply(config, arguments); - } - - // Set up instrumentation through `window.__PROMISE_INTRUMENTATION__` - if (typeof window !== 'undefined' && typeof window.__PROMISE_INSTRUMENTATION__ === 'object') { - var callbacks = window.__PROMISE_INSTRUMENTATION__; - configure('instrument', true); - for (var eventName in callbacks) { - if (callbacks.hasOwnProperty(eventName)) { - on(eventName, callbacks[eventName]); - } - } - } - - __exports__.Promise = Promise; - __exports__.EventTarget = EventTarget; - __exports__.all = all; - __exports__.allSettled = allSettled; - __exports__.race = race; - __exports__.hash = hash; - __exports__.rethrow = rethrow; - __exports__.defer = defer; - __exports__.denodeify = denodeify; - __exports__.configure = configure; - __exports__.on = on; - __exports__.off = off; - __exports__.resolve = resolve; - __exports__.reject = reject; - __exports__.async = async; - __exports__.map = map; - __exports__.filter = filter; - }); -global.RSVP = requireModule('rsvp'); -}(window)); \ No newline at end of file diff --git a/libs/screenfull.min.js b/libs/screenfull.min.js deleted file mode 100644 index 6f5eaf336..000000000 --- a/libs/screenfull.min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! -* screenfull -* v1.1.0 - 2013-09-06 -* https://github.com/sindresorhus/screenfull.js -* (c) Sindre Sorhus; MIT License -*/ -!function(a,b){"use strict";var c="undefined"!=typeof Element&&"ALLOW_KEYBOARD_INPUT"in Element,d=function(){for(var a,c,d=[["requestFullscreen","exitFullscreen","fullscreenElement","fullscreenEnabled","fullscreenchange","fullscreenerror"],["webkitRequestFullscreen","webkitExitFullscreen","webkitFullscreenElement","webkitFullscreenEnabled","webkitfullscreenchange","webkitfullscreenerror"],["webkitRequestFullScreen","webkitCancelFullScreen","webkitCurrentFullScreenElement","webkitCancelFullScreen","webkitfullscreenchange","webkitfullscreenerror"],["mozRequestFullScreen","mozCancelFullScreen","mozFullScreenElement","mozFullScreenEnabled","mozfullscreenchange","mozfullscreenerror"],["msRequestFullscreen","msExitFullscreen","msFullscreenElement","msFullscreenEnabled","MSFullscreenchange","MSFullscreenerror"]],e=0,f=d.length,g={};f>e;e++)if(a=d[e],a&&a[1]in b){for(e=0,c=a.length;c>e;e++)g[d[0][e]]=a[e];return g}return!1}(),e={request:function(a){var e=d.requestFullscreen;a=a||b.documentElement,/5\.1[\.\d]* Safari/.test(navigator.userAgent)?a[e]():a[e](c&&Element.ALLOW_KEYBOARD_INPUT)},exit:function(){b[d.exitFullscreen]()},toggle:function(a){this.isFullscreen?this.exit():this.request(a)},onchange:function(){},onerror:function(){},raw:d};return d?(Object.defineProperties(e,{isFullscreen:{get:function(){return!!b[d.fullscreenElement]}},element:{enumerable:!0,get:function(){return b[d.fullscreenElement]}},enabled:{enumerable:!0,get:function(){return!!b[d.fullscreenEnabled]}}}),b.addEventListener(d.fullscreenchange,function(a){e.onchange.call(e,a)}),b.addEventListener(d.fullscreenerror,function(a){e.onerror.call(e,a)}),a.screenfull=e,void 0):(a.screenfull=!1,void 0)}(window,document); \ No newline at end of file diff --git a/libs/underscore/underscore-min.js b/libs/underscore/underscore-min.js deleted file mode 100644 index c1d9d3aed..000000000 --- a/libs/underscore/underscore-min.js +++ /dev/null @@ -1 +0,0 @@ -(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,d=e.filter,g=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,_=Object.keys,j=i.bind,w=function(n){return n instanceof w?n:this instanceof w?(this._wrapped=n,void 0):new w(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=w),exports._=w):n._=w,w.VERSION="1.4.4";var A=w.each=w.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a in n)if(w.has(n,a)&&t.call(e,n[a],a,n)===r)return};w.map=w.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e[e.length]=t.call(r,n,u,i)}),e)};var O="Reduce of empty array with no initial value";w.reduce=w.foldl=w.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=w.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},w.reduceRight=w.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=w.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=w.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},w.find=w.detect=function(n,t,r){var e;return E(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},w.filter=w.select=function(n,t,r){var e=[];return null==n?e:d&&n.filter===d?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&(e[e.length]=n)}),e)},w.reject=function(n,t,r){return w.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},w.every=w.all=function(n,t,e){t||(t=w.identity);var u=!0;return null==n?u:g&&n.every===g?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var E=w.some=w.any=function(n,t,e){t||(t=w.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};w.contains=w.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:E(n,function(n){return n===t})},w.invoke=function(n,t){var r=o.call(arguments,2),e=w.isFunction(t);return w.map(n,function(n){return(e?t:n[t]).apply(n,r)})},w.pluck=function(n,t){return w.map(n,function(n){return n[t]})},w.where=function(n,t,r){return w.isEmpty(t)?r?null:[]:w[r?"find":"filter"](n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},w.findWhere=function(n,t){return w.where(n,t,!0)},w.max=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.max.apply(Math,n);if(!t&&w.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>=e.computed&&(e={value:n,computed:a})}),e.value},w.min=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.min.apply(Math,n);if(!t&&w.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;e.computed>a&&(e={value:n,computed:a})}),e.value},w.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=w.random(r++),e[r-1]=e[t],e[t]=n}),e};var k=function(n){return w.isFunction(n)?n:function(t){return t[n]}};w.sortBy=function(n,t,r){var e=k(t);return w.pluck(w.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.indexi;){var o=i+a>>>1;u>r.call(e,n[o])?i=o+1:a=o}return i},w.toArray=function(n){return n?w.isArray(n)?o.call(n):n.length===+n.length?w.map(n,w.identity):w.values(n):[]},w.size=function(n){return null==n?0:n.length===+n.length?n.length:w.keys(n).length},w.first=w.head=w.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},w.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},w.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},w.rest=w.tail=w.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},w.compact=function(n){return w.filter(n,w.identity)};var R=function(n,t,r){return A(n,function(n){w.isArray(n)?t?a.apply(r,n):R(n,t,r):r.push(n)}),r};w.flatten=function(n,t){return R(n,t,[])},w.without=function(n){return w.difference(n,o.call(arguments,1))},w.uniq=w.unique=function(n,t,r,e){w.isFunction(t)&&(e=r,r=t,t=!1);var u=r?w.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:w.contains(a,r))||(a.push(r),i.push(n[e]))}),i},w.union=function(){return w.uniq(c.apply(e,arguments))},w.intersection=function(n){var t=o.call(arguments,1);return w.filter(w.uniq(n),function(n){return w.every(t,function(t){return w.indexOf(t,n)>=0})})},w.difference=function(n){var t=c.apply(e,o.call(arguments,1));return w.filter(n,function(n){return!w.contains(t,n)})},w.zip=function(){for(var n=o.call(arguments),t=w.max(w.pluck(n,"length")),r=Array(t),e=0;t>e;e++)r[e]=w.pluck(n,""+e);return r},w.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},w.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=w.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},w.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},w.range=function(n,t,r){1>=arguments.length&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=Array(e);e>u;)i[u++]=n,n+=r;return i},w.bind=function(n,t){if(n.bind===j&&j)return j.apply(n,o.call(arguments,1));var r=o.call(arguments,2);return function(){return n.apply(t,r.concat(o.call(arguments)))}},w.partial=function(n){var t=o.call(arguments,1);return function(){return n.apply(this,t.concat(o.call(arguments)))}},w.bindAll=function(n){var t=o.call(arguments,1);return 0===t.length&&(t=w.functions(n)),A(t,function(t){n[t]=w.bind(n[t],n)}),n},w.memoize=function(n,t){var r={};return t||(t=w.identity),function(){var e=t.apply(this,arguments);return w.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},w.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},w.defer=function(n){return w.delay.apply(w,[n,1].concat(o.call(arguments,1)))},w.throttle=function(n,t){var r,e,u,i,a=0,o=function(){a=new Date,u=null,i=n.apply(r,e)};return function(){var c=new Date,l=t-(c-a);return r=this,e=arguments,0>=l?(clearTimeout(u),u=null,a=c,i=n.apply(r,e)):u||(u=setTimeout(o,l)),i}},w.debounce=function(n,t,r){var e,u;return function(){var i=this,a=arguments,o=function(){e=null,r||(u=n.apply(i,a))},c=r&&!e;return clearTimeout(e),e=setTimeout(o,t),c&&(u=n.apply(i,a)),u}},w.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},w.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},w.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},w.after=function(n,t){return 0>=n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},w.keys=_||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)w.has(n,r)&&(t[t.length]=r);return t},w.values=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push(n[r]);return t},w.pairs=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push([r,n[r]]);return t},w.invert=function(n){var t={};for(var r in n)w.has(n,r)&&(t[n[r]]=r);return t},w.functions=w.methods=function(n){var t=[];for(var r in n)w.isFunction(n[r])&&t.push(r);return t.sort()},w.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},w.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},w.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)w.contains(r,u)||(t[u]=n[u]);return t},w.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)null==n[r]&&(n[r]=t[r])}),n},w.clone=function(n){return w.isObject(n)?w.isArray(n)?n.slice():w.extend({},n):n},w.tap=function(n,t){return t(n),n};var I=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof w&&(n=n._wrapped),t instanceof w&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==t+"";case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;r.push(n),e.push(t);var a=0,o=!0;if("[object Array]"==u){if(a=n.length,o=a==t.length)for(;a--&&(o=I(n[a],t[a],r,e)););}else{var c=n.constructor,f=t.constructor;if(c!==f&&!(w.isFunction(c)&&c instanceof c&&w.isFunction(f)&&f instanceof f))return!1;for(var s in n)if(w.has(n,s)&&(a++,!(o=w.has(t,s)&&I(n[s],t[s],r,e))))break;if(o){for(s in t)if(w.has(t,s)&&!a--)break;o=!a}}return r.pop(),e.pop(),o};w.isEqual=function(n,t){return I(n,t,[],[])},w.isEmpty=function(n){if(null==n)return!0;if(w.isArray(n)||w.isString(n))return 0===n.length;for(var t in n)if(w.has(n,t))return!1;return!0},w.isElement=function(n){return!(!n||1!==n.nodeType)},w.isArray=x||function(n){return"[object Array]"==l.call(n)},w.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){w["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),w.isArguments(arguments)||(w.isArguments=function(n){return!(!n||!w.has(n,"callee"))}),"function"!=typeof/./&&(w.isFunction=function(n){return"function"==typeof n}),w.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},w.isNaN=function(n){return w.isNumber(n)&&n!=+n},w.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},w.isNull=function(n){return null===n},w.isUndefined=function(n){return n===void 0},w.has=function(n,t){return f.call(n,t)},w.noConflict=function(){return n._=t,this},w.identity=function(n){return n},w.times=function(n,t,r){for(var e=Array(n),u=0;n>u;u++)e[u]=t.call(r,u);return e},w.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))};var M={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};M.unescape=w.invert(M.escape);var S={escape:RegExp("["+w.keys(M.escape).join("")+"]","g"),unescape:RegExp("("+w.keys(M.unescape).join("|")+")","g")};w.each(["escape","unescape"],function(n){w[n]=function(t){return null==t?"":(""+t).replace(S[n],function(t){return M[n][t]})}}),w.result=function(n,t){if(null==n)return null;var r=n[t];return w.isFunction(r)?r.call(n):r},w.mixin=function(n){A(w.functions(n),function(t){var r=w[t]=n[t];w.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),D.call(this,r.apply(w,n))}})};var N=0;w.uniqueId=function(n){var t=++N+"";return n?n+t:t},w.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var T=/(.)^/,q={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},B=/\\|'|\r|\n|\t|\u2028|\u2029/g;w.template=function(n,t,r){var e;r=w.defaults({},r,w.templateSettings);var u=RegExp([(r.escape||T).source,(r.interpolate||T).source,(r.evaluate||T).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(B,function(n){return"\\"+q[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,w);var c=function(n){return e.call(this,n,w)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},w.chain=function(n){return w(n).chain()};var D=function(n){return this._chain?w(n).chain():n};w.mixin(w),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];w.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],D.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];w.prototype[n]=function(){return D.call(this,t.apply(this._wrapped,arguments))}}),w.extend(w.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this); \ No newline at end of file diff --git a/libs/underscore/underscore.js b/libs/underscore/underscore.js deleted file mode 100644 index bf628f509..000000000 --- a/libs/underscore/underscore.js +++ /dev/null @@ -1,1227 +0,0 @@ -/*! -// Underscore.js 1.4.4 -// http://underscorejs.org -// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc. -// Underscore may be freely distributed under the MIT license. -*/ -(function() { - - // Baseline setup - // -------------- - - // Establish the root object, `window` in the browser, or `global` on the server. - var root = this; - - // Save the previous value of the `_` variable. - var previousUnderscore = root._; - - // Establish the object that gets returned to break out of a loop iteration. - var breaker = {}; - - // Save bytes in the minified (but not gzipped) version: - var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; - - // Create quick reference variables for speed access to core prototypes. - var push = ArrayProto.push, - slice = ArrayProto.slice, - concat = ArrayProto.concat, - toString = ObjProto.toString, - hasOwnProperty = ObjProto.hasOwnProperty; - - // All **ECMAScript 5** native function implementations that we hope to use - // are declared here. - var - nativeForEach = ArrayProto.forEach, - nativeMap = ArrayProto.map, - nativeReduce = ArrayProto.reduce, - nativeReduceRight = ArrayProto.reduceRight, - nativeFilter = ArrayProto.filter, - nativeEvery = ArrayProto.every, - nativeSome = ArrayProto.some, - nativeIndexOf = ArrayProto.indexOf, - nativeLastIndexOf = ArrayProto.lastIndexOf, - nativeIsArray = Array.isArray, - nativeKeys = Object.keys, - nativeBind = FuncProto.bind; - - // Create a safe reference to the Underscore object for use below. - var _ = function(obj) { - if (obj instanceof _) return obj; - if (!(this instanceof _)) return new _(obj); - this._wrapped = obj; - }; - - // Export the Underscore object for **Node.js**, with - // backwards-compatibility for the old `require()` API. If we're in - // the browser, add `_` as a global object via a string identifier, - // for Closure Compiler "advanced" mode. - if (typeof exports !== 'undefined') { - if (typeof module !== 'undefined' && module.exports) { - exports = module.exports = _; - } - exports._ = _; - } else { - root._ = _; - } - - // Current version. - _.VERSION = '1.4.4'; - - // Collection Functions - // -------------------- - - // The cornerstone, an `each` implementation, aka `forEach`. - // Handles objects with the built-in `forEach`, arrays, and raw objects. - // Delegates to **ECMAScript 5**'s native `forEach` if available. - var each = _.each = _.forEach = function(obj, iterator, context) { - if (obj == null) return; - if (nativeForEach && obj.forEach === nativeForEach) { - obj.forEach(iterator, context); - } else if (obj.length === +obj.length) { - for (var i = 0, l = obj.length; i < l; i++) { - if (iterator.call(context, obj[i], i, obj) === breaker) return; - } - } else { - for (var key in obj) { - if (_.has(obj, key)) { - if (iterator.call(context, obj[key], key, obj) === breaker) return; - } - } - } - }; - - // Return the results of applying the iterator to each element. - // Delegates to **ECMAScript 5**'s native `map` if available. - _.map = _.collect = function(obj, iterator, context) { - var results = []; - if (obj == null) return results; - if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); - each(obj, function(value, index, list) { - results[results.length] = iterator.call(context, value, index, list); - }); - return results; - }; - - var reduceError = 'Reduce of empty array with no initial value'; - - // **Reduce** builds up a single result from a list of values, aka `inject`, - // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available. - _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) { - var initial = arguments.length > 2; - if (obj == null) obj = []; - if (nativeReduce && obj.reduce === nativeReduce) { - if (context) iterator = _.bind(iterator, context); - return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator); - } - each(obj, function(value, index, list) { - if (!initial) { - memo = value; - initial = true; - } else { - memo = iterator.call(context, memo, value, index, list); - } - }); - if (!initial) throw new TypeError(reduceError); - return memo; - }; - - // The right-associative version of reduce, also known as `foldr`. - // Delegates to **ECMAScript 5**'s native `reduceRight` if available. - _.reduceRight = _.foldr = function(obj, iterator, memo, context) { - var initial = arguments.length > 2; - if (obj == null) obj = []; - if (nativeReduceRight && obj.reduceRight === nativeReduceRight) { - if (context) iterator = _.bind(iterator, context); - return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator); - } - var length = obj.length; - if (length !== +length) { - var keys = _.keys(obj); - length = keys.length; - } - each(obj, function(value, index, list) { - index = keys ? keys[--length] : --length; - if (!initial) { - memo = obj[index]; - initial = true; - } else { - memo = iterator.call(context, memo, obj[index], index, list); - } - }); - if (!initial) throw new TypeError(reduceError); - return memo; - }; - - // Return the first value which passes a truth test. Aliased as `detect`. - _.find = _.detect = function(obj, iterator, context) { - var result; - any(obj, function(value, index, list) { - if (iterator.call(context, value, index, list)) { - result = value; - return true; - } - }); - return result; - }; - - // Return all the elements that pass a truth test. - // Delegates to **ECMAScript 5**'s native `filter` if available. - // Aliased as `select`. - _.filter = _.select = function(obj, iterator, context) { - var results = []; - if (obj == null) return results; - if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context); - each(obj, function(value, index, list) { - if (iterator.call(context, value, index, list)) results[results.length] = value; - }); - return results; - }; - - // Return all the elements for which a truth test fails. - _.reject = function(obj, iterator, context) { - return _.filter(obj, function(value, index, list) { - return !iterator.call(context, value, index, list); - }, context); - }; - - // Determine whether all of the elements match a truth test. - // Delegates to **ECMAScript 5**'s native `every` if available. - // Aliased as `all`. - _.every = _.all = function(obj, iterator, context) { - iterator || (iterator = _.identity); - var result = true; - if (obj == null) return result; - if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context); - each(obj, function(value, index, list) { - if (!(result = result && iterator.call(context, value, index, list))) return breaker; - }); - return !!result; - }; - - // Determine if at least one element in the object matches a truth test. - // Delegates to **ECMAScript 5**'s native `some` if available. - // Aliased as `any`. - var any = _.some = _.any = function(obj, iterator, context) { - iterator || (iterator = _.identity); - var result = false; - if (obj == null) return result; - if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context); - each(obj, function(value, index, list) { - if (result || (result = iterator.call(context, value, index, list))) return breaker; - }); - return !!result; - }; - - // Determine if the array or object contains a given value (using `===`). - // Aliased as `include`. - _.contains = _.include = function(obj, target) { - if (obj == null) return false; - if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1; - return any(obj, function(value) { - return value === target; - }); - }; - - // Invoke a method (with arguments) on every item in a collection. - _.invoke = function(obj, method) { - var args = slice.call(arguments, 2); - var isFunc = _.isFunction(method); - return _.map(obj, function(value) { - return (isFunc ? method : value[method]).apply(value, args); - }); - }; - - // Convenience version of a common use case of `map`: fetching a property. - _.pluck = function(obj, key) { - return _.map(obj, function(value){ return value[key]; }); - }; - - // Convenience version of a common use case of `filter`: selecting only objects - // containing specific `key:value` pairs. - _.where = function(obj, attrs, first) { - if (_.isEmpty(attrs)) return first ? null : []; - return _[first ? 'find' : 'filter'](obj, function(value) { - for (var key in attrs) { - if (attrs[key] !== value[key]) return false; - } - return true; - }); - }; - - // Convenience version of a common use case of `find`: getting the first object - // containing specific `key:value` pairs. - _.findWhere = function(obj, attrs) { - return _.where(obj, attrs, true); - }; - - // Return the maximum element or (element-based computation). - // Can't optimize arrays of integers longer than 65,535 elements. - // See: https://bugs.webkit.org/show_bug.cgi?id=80797 - _.max = function(obj, iterator, context) { - if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) { - return Math.max.apply(Math, obj); - } - if (!iterator && _.isEmpty(obj)) return -Infinity; - var result = {computed : -Infinity, value: -Infinity}; - each(obj, function(value, index, list) { - var computed = iterator ? iterator.call(context, value, index, list) : value; - computed >= result.computed && (result = {value : value, computed : computed}); - }); - return result.value; - }; - - // Return the minimum element (or element-based computation). - _.min = function(obj, iterator, context) { - if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) { - return Math.min.apply(Math, obj); - } - if (!iterator && _.isEmpty(obj)) return Infinity; - var result = {computed : Infinity, value: Infinity}; - each(obj, function(value, index, list) { - var computed = iterator ? iterator.call(context, value, index, list) : value; - computed < result.computed && (result = {value : value, computed : computed}); - }); - return result.value; - }; - - // Shuffle an array. - _.shuffle = function(obj) { - var rand; - var index = 0; - var shuffled = []; - each(obj, function(value) { - rand = _.random(index++); - shuffled[index - 1] = shuffled[rand]; - shuffled[rand] = value; - }); - return shuffled; - }; - - // An internal function to generate lookup iterators. - var lookupIterator = function(value) { - return _.isFunction(value) ? value : function(obj){ return obj[value]; }; - }; - - // Sort the object's values by a criterion produced by an iterator. - _.sortBy = function(obj, value, context) { - var iterator = lookupIterator(value); - return _.pluck(_.map(obj, function(value, index, list) { - return { - value : value, - index : index, - criteria : iterator.call(context, value, index, list) - }; - }).sort(function(left, right) { - var a = left.criteria; - var b = right.criteria; - if (a !== b) { - if (a > b || a === void 0) return 1; - if (a < b || b === void 0) return -1; - } - return left.index < right.index ? -1 : 1; - }), 'value'); - }; - - // An internal function used for aggregate "group by" operations. - var group = function(obj, value, context, behavior) { - var result = {}; - var iterator = lookupIterator(value || _.identity); - each(obj, function(value, index) { - var key = iterator.call(context, value, index, obj); - behavior(result, key, value); - }); - return result; - }; - - // Groups the object's values by a criterion. Pass either a string attribute - // to group by, or a function that returns the criterion. - _.groupBy = function(obj, value, context) { - return group(obj, value, context, function(result, key, value) { - (_.has(result, key) ? result[key] : (result[key] = [])).push(value); - }); - }; - - // Counts instances of an object that group by a certain criterion. Pass - // either a string attribute to count by, or a function that returns the - // criterion. - _.countBy = function(obj, value, context) { - return group(obj, value, context, function(result, key) { - if (!_.has(result, key)) result[key] = 0; - result[key]++; - }); - }; - - // Use a comparator function to figure out the smallest index at which - // an object should be inserted so as to maintain order. Uses binary search. - _.sortedIndex = function(array, obj, iterator, context) { - iterator = iterator == null ? _.identity : lookupIterator(iterator); - var value = iterator.call(context, obj); - var low = 0, high = array.length; - while (low < high) { - var mid = (low + high) >>> 1; - iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid; - } - return low; - }; - - // Safely convert anything iterable into a real, live array. - _.toArray = function(obj) { - if (!obj) return []; - if (_.isArray(obj)) return slice.call(obj); - if (obj.length === +obj.length) return _.map(obj, _.identity); - return _.values(obj); - }; - - // Return the number of elements in an object. - _.size = function(obj) { - if (obj == null) return 0; - return (obj.length === +obj.length) ? obj.length : _.keys(obj).length; - }; - - // Array Functions - // --------------- - - // Get the first element of an array. Passing **n** will return the first N - // values in the array. Aliased as `head` and `take`. The **guard** check - // allows it to work with `_.map`. - _.first = _.head = _.take = function(array, n, guard) { - if (array == null) return void 0; - return (n != null) && !guard ? slice.call(array, 0, n) : array[0]; - }; - - // Returns everything but the last entry of the array. Especially useful on - // the arguments object. Passing **n** will return all the values in - // the array, excluding the last N. The **guard** check allows it to work with - // `_.map`. - _.initial = function(array, n, guard) { - return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n)); - }; - - // Get the last element of an array. Passing **n** will return the last N - // values in the array. The **guard** check allows it to work with `_.map`. - _.last = function(array, n, guard) { - if (array == null) return void 0; - if ((n != null) && !guard) { - return slice.call(array, Math.max(array.length - n, 0)); - } else { - return array[array.length - 1]; - } - }; - - // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. - // Especially useful on the arguments object. Passing an **n** will return - // the rest N values in the array. The **guard** - // check allows it to work with `_.map`. - _.rest = _.tail = _.drop = function(array, n, guard) { - return slice.call(array, (n == null) || guard ? 1 : n); - }; - - // Trim out all falsy values from an array. - _.compact = function(array) { - return _.filter(array, _.identity); - }; - - // Internal implementation of a recursive `flatten` function. - var flatten = function(input, shallow, output) { - each(input, function(value) { - if (_.isArray(value)) { - shallow ? push.apply(output, value) : flatten(value, shallow, output); - } else { - output.push(value); - } - }); - return output; - }; - - // Return a completely flattened version of an array. - _.flatten = function(array, shallow) { - return flatten(array, shallow, []); - }; - - // Return a version of the array that does not contain the specified value(s). - _.without = function(array) { - return _.difference(array, slice.call(arguments, 1)); - }; - - // Produce a duplicate-free version of the array. If the array has already - // been sorted, you have the option of using a faster algorithm. - // Aliased as `unique`. - _.uniq = _.unique = function(array, isSorted, iterator, context) { - if (_.isFunction(isSorted)) { - context = iterator; - iterator = isSorted; - isSorted = false; - } - var initial = iterator ? _.map(array, iterator, context) : array; - var results = []; - var seen = []; - each(initial, function(value, index) { - if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) { - seen.push(value); - results.push(array[index]); - } - }); - return results; - }; - - // Produce an array that contains the union: each distinct element from all of - // the passed-in arrays. - _.union = function() { - return _.uniq(concat.apply(ArrayProto, arguments)); - }; - - // Produce an array that contains every item shared between all the - // passed-in arrays. - _.intersection = function(array) { - var rest = slice.call(arguments, 1); - return _.filter(_.uniq(array), function(item) { - return _.every(rest, function(other) { - return _.indexOf(other, item) >= 0; - }); - }); - }; - - // Take the difference between one array and a number of other arrays. - // Only the elements present in just the first array will remain. - _.difference = function(array) { - var rest = concat.apply(ArrayProto, slice.call(arguments, 1)); - return _.filter(array, function(value){ return !_.contains(rest, value); }); - }; - - // Zip together multiple lists into a single array -- elements that share - // an index go together. - _.zip = function() { - var args = slice.call(arguments); - var length = _.max(_.pluck(args, 'length')); - var results = new Array(length); - for (var i = 0; i < length; i++) { - results[i] = _.pluck(args, "" + i); - } - return results; - }; - - // Converts lists into objects. Pass either a single array of `[key, value]` - // pairs, or two parallel arrays of the same length -- one of keys, and one of - // the corresponding values. - _.object = function(list, values) { - if (list == null) return {}; - var result = {}; - for (var i = 0, l = list.length; i < l; i++) { - if (values) { - result[list[i]] = values[i]; - } else { - result[list[i][0]] = list[i][1]; - } - } - return result; - }; - - // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**), - // we need this function. Return the position of the first occurrence of an - // item in an array, or -1 if the item is not included in the array. - // Delegates to **ECMAScript 5**'s native `indexOf` if available. - // If the array is large and already in sort order, pass `true` - // for **isSorted** to use binary search. - _.indexOf = function(array, item, isSorted) { - if (array == null) return -1; - var i = 0, l = array.length; - if (isSorted) { - if (typeof isSorted == 'number') { - i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted); - } else { - i = _.sortedIndex(array, item); - return array[i] === item ? i : -1; - } - } - if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted); - for (; i < l; i++) if (array[i] === item) return i; - return -1; - }; - - // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available. - _.lastIndexOf = function(array, item, from) { - if (array == null) return -1; - var hasIndex = from != null; - if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) { - return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item); - } - var i = (hasIndex ? from : array.length); - while (i--) if (array[i] === item) return i; - return -1; - }; - - // Generate an integer Array containing an arithmetic progression. A port of - // the native Python `range()` function. See - // [the Python documentation](http://docs.python.org/library/functions.html#range). - _.range = function(start, stop, step) { - if (arguments.length <= 1) { - stop = start || 0; - start = 0; - } - step = arguments[2] || 1; - - var len = Math.max(Math.ceil((stop - start) / step), 0); - var idx = 0; - var range = new Array(len); - - while(idx < len) { - range[idx++] = start; - start += step; - } - - return range; - }; - - // Function (ahem) Functions - // ------------------ - - // Create a function bound to a given object (assigning `this`, and arguments, - // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if - // available. - _.bind = function(func, context) { - if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); - var args = slice.call(arguments, 2); - return function() { - return func.apply(context, args.concat(slice.call(arguments))); - }; - }; - - // Partially apply a function by creating a version that has had some of its - // arguments pre-filled, without changing its dynamic `this` context. - _.partial = function(func) { - var args = slice.call(arguments, 1); - return function() { - return func.apply(this, args.concat(slice.call(arguments))); - }; - }; - - // Bind all of an object's methods to that object. Useful for ensuring that - // all callbacks defined on an object belong to it. - _.bindAll = function(obj) { - var funcs = slice.call(arguments, 1); - if (funcs.length === 0) funcs = _.functions(obj); - each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); }); - return obj; - }; - - // Memoize an expensive function by storing its results. - _.memoize = function(func, hasher) { - var memo = {}; - hasher || (hasher = _.identity); - return function() { - var key = hasher.apply(this, arguments); - return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments)); - }; - }; - - // Delays a function for the given number of milliseconds, and then calls - // it with the arguments supplied. - _.delay = function(func, wait) { - var args = slice.call(arguments, 2); - return setTimeout(function(){ return func.apply(null, args); }, wait); - }; - - // Defers a function, scheduling it to run after the current call stack has - // cleared. - _.defer = function(func) { - return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1))); - }; - - // Returns a function, that, when invoked, will only be triggered at most once - // during a given window of time. - _.throttle = function(func, wait) { - var context, args, timeout, result; - var previous = 0; - var later = function() { - previous = new Date; - timeout = null; - result = func.apply(context, args); - }; - return function() { - var now = new Date; - var remaining = wait - (now - previous); - context = this; - args = arguments; - if (remaining <= 0) { - clearTimeout(timeout); - timeout = null; - previous = now; - result = func.apply(context, args); - } else if (!timeout) { - timeout = setTimeout(later, remaining); - } - return result; - }; - }; - - // Returns a function, that, as long as it continues to be invoked, will not - // be triggered. The function will be called after it stops being called for - // N milliseconds. If `immediate` is passed, trigger the function on the - // leading edge, instead of the trailing. - _.debounce = function(func, wait, immediate) { - var timeout, result; - return function() { - var context = this, args = arguments; - var later = function() { - timeout = null; - if (!immediate) result = func.apply(context, args); - }; - var callNow = immediate && !timeout; - clearTimeout(timeout); - timeout = setTimeout(later, wait); - if (callNow) result = func.apply(context, args); - return result; - }; - }; - - // Returns a function that will be executed at most one time, no matter how - // often you call it. Useful for lazy initialization. - _.once = function(func) { - var ran = false, memo; - return function() { - if (ran) return memo; - ran = true; - memo = func.apply(this, arguments); - func = null; - return memo; - }; - }; - - // Returns the first function passed as an argument to the second, - // allowing you to adjust arguments, run code before and after, and - // conditionally execute the original function. - _.wrap = function(func, wrapper) { - return function() { - var args = [func]; - push.apply(args, arguments); - return wrapper.apply(this, args); - }; - }; - - // Returns a function that is the composition of a list of functions, each - // consuming the return value of the function that follows. - _.compose = function() { - var funcs = arguments; - return function() { - var args = arguments; - for (var i = funcs.length - 1; i >= 0; i--) { - args = [funcs[i].apply(this, args)]; - } - return args[0]; - }; - }; - - // Returns a function that will only be executed after being called N times. - _.after = function(times, func) { - if (times <= 0) return func(); - return function() { - if (--times < 1) { - return func.apply(this, arguments); - } - }; - }; - - // Object Functions - // ---------------- - - // Retrieve the names of an object's properties. - // Delegates to **ECMAScript 5**'s native `Object.keys` - _.keys = nativeKeys || function(obj) { - if (obj !== Object(obj)) throw new TypeError('Invalid object'); - var keys = []; - for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key; - return keys; - }; - - // Retrieve the values of an object's properties. - _.values = function(obj) { - var values = []; - for (var key in obj) if (_.has(obj, key)) values.push(obj[key]); - return values; - }; - - // Convert an object into a list of `[key, value]` pairs. - _.pairs = function(obj) { - var pairs = []; - for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]); - return pairs; - }; - - // Invert the keys and values of an object. The values must be serializable. - _.invert = function(obj) { - var result = {}; - for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key; - return result; - }; - - // Return a sorted list of the function names available on the object. - // Aliased as `methods` - _.functions = _.methods = function(obj) { - var names = []; - for (var key in obj) { - if (_.isFunction(obj[key])) names.push(key); - } - return names.sort(); - }; - - // Extend a given object with all the properties in passed-in object(s). - _.extend = function(obj) { - each(slice.call(arguments, 1), function(source) { - if (source) { - for (var prop in source) { - obj[prop] = source[prop]; - } - } - }); - return obj; - }; - - // Return a copy of the object only containing the whitelisted properties. - _.pick = function(obj) { - var copy = {}; - var keys = concat.apply(ArrayProto, slice.call(arguments, 1)); - each(keys, function(key) { - if (key in obj) copy[key] = obj[key]; - }); - return copy; - }; - - // Return a copy of the object without the blacklisted properties. - _.omit = function(obj) { - var copy = {}; - var keys = concat.apply(ArrayProto, slice.call(arguments, 1)); - for (var key in obj) { - if (!_.contains(keys, key)) copy[key] = obj[key]; - } - return copy; - }; - - // Fill in a given object with default properties. - _.defaults = function(obj) { - each(slice.call(arguments, 1), function(source) { - if (source) { - for (var prop in source) { - if (obj[prop] == null) obj[prop] = source[prop]; - } - } - }); - return obj; - }; - - // Create a (shallow-cloned) duplicate of an object. - _.clone = function(obj) { - if (!_.isObject(obj)) return obj; - return _.isArray(obj) ? obj.slice() : _.extend({}, obj); - }; - - // Invokes interceptor with the obj, and then returns obj. - // The primary purpose of this method is to "tap into" a method chain, in - // order to perform operations on intermediate results within the chain. - _.tap = function(obj, interceptor) { - interceptor(obj); - return obj; - }; - - // Internal recursive comparison function for `isEqual`. - var eq = function(a, b, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal. - if (a === b) return a !== 0 || 1 / a == 1 / b; - // A strict comparison is necessary because `null == undefined`. - if (a == null || b == null) return a === b; - // Unwrap any wrapped objects. - if (a instanceof _) a = a._wrapped; - if (b instanceof _) b = b._wrapped; - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className != toString.call(b)) return false; - switch (className) { - // Strings, numbers, dates, and booleans are compared by value. - case '[object String]': - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return a == String(b); - case '[object Number]': - // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for - // other numeric values. - return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b); - case '[object Date]': - case '[object Boolean]': - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a == +b; - // RegExps are compared by their source patterns and flags. - case '[object RegExp]': - return a.source == b.source && - a.global == b.global && - a.multiline == b.multiline && - a.ignoreCase == b.ignoreCase; - } - if (typeof a != 'object' || typeof b != 'object') return false; - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] == a) return bStack[length] == b; - } - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - var size = 0, result = true; - // Recursively compare objects and arrays. - if (className == '[object Array]') { - // Compare array lengths to determine if a deep comparison is necessary. - size = a.length; - result = size == b.length; - if (result) { - // Deep compare the contents, ignoring non-numeric properties. - while (size--) { - if (!(result = eq(a[size], b[size], aStack, bStack))) break; - } - } - } else { - // Objects with different constructors are not equivalent, but `Object`s - // from different frames are. - var aCtor = a.constructor, bCtor = b.constructor; - if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) && - _.isFunction(bCtor) && (bCtor instanceof bCtor))) { - return false; - } - // Deep compare objects. - for (var key in a) { - if (_.has(a, key)) { - // Count the expected number of properties. - size++; - // Deep compare each member. - if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break; - } - } - // Ensure that both objects contain the same number of properties. - if (result) { - for (key in b) { - if (_.has(b, key) && !(size--)) break; - } - result = !size; - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return result; - }; - - // Perform a deep comparison to check if two objects are equal. - _.isEqual = function(a, b) { - return eq(a, b, [], []); - }; - - // Is a given array, string, or object empty? - // An "empty" object has no enumerable own-properties. - _.isEmpty = function(obj) { - if (obj == null) return true; - if (_.isArray(obj) || _.isString(obj)) return obj.length === 0; - for (var key in obj) if (_.has(obj, key)) return false; - return true; - }; - - // Is a given value a DOM element? - _.isElement = function(obj) { - return !!(obj && obj.nodeType === 1); - }; - - // Is a given value an array? - // Delegates to ECMA5's native Array.isArray - _.isArray = nativeIsArray || function(obj) { - return toString.call(obj) == '[object Array]'; - }; - - // Is a given variable an object? - _.isObject = function(obj) { - return obj === Object(obj); - }; - - // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp. - each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) { - _['is' + name] = function(obj) { - return toString.call(obj) == '[object ' + name + ']'; - }; - }); - - // Define a fallback version of the method in browsers (ahem, IE), where - // there isn't any inspectable "Arguments" type. - if (!_.isArguments(arguments)) { - _.isArguments = function(obj) { - return !!(obj && _.has(obj, 'callee')); - }; - } - - // Optimize `isFunction` if appropriate. - if (typeof (/./) !== 'function') { - _.isFunction = function(obj) { - return typeof obj === 'function'; - }; - } - - // Is a given object a finite number? - _.isFinite = function(obj) { - return isFinite(obj) && !isNaN(parseFloat(obj)); - }; - - // Is the given value `NaN`? (NaN is the only number which does not equal itself). - _.isNaN = function(obj) { - return _.isNumber(obj) && obj != +obj; - }; - - // Is a given value a boolean? - _.isBoolean = function(obj) { - return obj === true || obj === false || toString.call(obj) == '[object Boolean]'; - }; - - // Is a given value equal to null? - _.isNull = function(obj) { - return obj === null; - }; - - // Is a given variable undefined? - _.isUndefined = function(obj) { - return obj === void 0; - }; - - // Shortcut function for checking if an object has a given property directly - // on itself (in other words, not on a prototype). - _.has = function(obj, key) { - return hasOwnProperty.call(obj, key); - }; - - // Utility Functions - // ----------------- - - // Run Underscore.js in *noConflict* mode, returning the `_` variable to its - // previous owner. Returns a reference to the Underscore object. - _.noConflict = function() { - root._ = previousUnderscore; - return this; - }; - - // Keep the identity function around for default iterators. - _.identity = function(value) { - return value; - }; - - // Run a function **n** times. - _.times = function(n, iterator, context) { - var accum = Array(n); - for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i); - return accum; - }; - - // Return a random integer between min and max (inclusive). - _.random = function(min, max) { - if (max == null) { - max = min; - min = 0; - } - return min + Math.floor(Math.random() * (max - min + 1)); - }; - - // List of HTML entities for escaping. - var entityMap = { - escape: { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''', - '/': '/' - } - }; - entityMap.unescape = _.invert(entityMap.escape); - - // Regexes containing the keys and values listed immediately above. - var entityRegexes = { - escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'), - unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g') - }; - - // Functions for escaping and unescaping strings to/from HTML interpolation. - _.each(['escape', 'unescape'], function(method) { - _[method] = function(string) { - if (string == null) return ''; - return ('' + string).replace(entityRegexes[method], function(match) { - return entityMap[method][match]; - }); - }; - }); - - // If the value of the named property is a function then invoke it; - // otherwise, return it. - _.result = function(object, property) { - if (object == null) return null; - var value = object[property]; - return _.isFunction(value) ? value.call(object) : value; - }; - - // Add your own custom functions to the Underscore object. - _.mixin = function(obj) { - each(_.functions(obj), function(name){ - var func = _[name] = obj[name]; - _.prototype[name] = function() { - var args = [this._wrapped]; - push.apply(args, arguments); - return result.call(this, func.apply(_, args)); - }; - }); - }; - - // Generate a unique integer id (unique within the entire client session). - // Useful for temporary DOM ids. - var idCounter = 0; - _.uniqueId = function(prefix) { - var id = ++idCounter + ''; - return prefix ? prefix + id : id; - }; - - // By default, Underscore uses ERB-style template delimiters, change the - // following template settings to use alternative delimiters. - _.templateSettings = { - evaluate : /<%([\s\S]+?)%>/g, - interpolate : /<%=([\s\S]+?)%>/g, - escape : /<%-([\s\S]+?)%>/g - }; - - // When customizing `templateSettings`, if you don't want to define an - // interpolation, evaluation or escaping regex, we need one that is - // guaranteed not to match. - var noMatch = /(.)^/; - - // Certain characters need to be escaped so that they can be put into a - // string literal. - var escapes = { - "'": "'", - '\\': '\\', - '\r': 'r', - '\n': 'n', - '\t': 't', - '\u2028': 'u2028', - '\u2029': 'u2029' - }; - - var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g; - - // JavaScript micro-templating, similar to John Resig's implementation. - // Underscore templating handles arbitrary delimiters, preserves whitespace, - // and correctly escapes quotes within interpolated code. - _.template = function(text, data, settings) { - var render; - settings = _.defaults({}, settings, _.templateSettings); - - // Combine delimiters into one regular expression via alternation. - var matcher = new RegExp([ - (settings.escape || noMatch).source, - (settings.interpolate || noMatch).source, - (settings.evaluate || noMatch).source - ].join('|') + '|$', 'g'); - - // Compile the template source, escaping string literals appropriately. - var index = 0; - var source = "__p+='"; - text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { - source += text.slice(index, offset) - .replace(escaper, function(match) { return '\\' + escapes[match]; }); - - if (escape) { - source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; - } - if (interpolate) { - source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; - } - if (evaluate) { - source += "';\n" + evaluate + "\n__p+='"; - } - index = offset + match.length; - return match; - }); - source += "';\n"; - - // If a variable is not specified, place data values in local scope. - if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; - - source = "var __t,__p='',__j=Array.prototype.join," + - "print=function(){__p+=__j.call(arguments,'');};\n" + - source + "return __p;\n"; - - try { - render = new Function(settings.variable || 'obj', '_', source); - } catch (e) { - e.source = source; - throw e; - } - - if (data) return render(data, _); - var template = function(data) { - return render.call(this, data, _); - }; - - // Provide the compiled function source as a convenience for precompilation. - template.source = 'function(' + (settings.variable || 'obj') + '){\n' + source + '}'; - - return template; - }; - - // Add a "chain" function, which will delegate to the wrapper. - _.chain = function(obj) { - return _(obj).chain(); - }; - - // OOP - // --------------- - // If Underscore is called as a function, it returns a wrapped object that - // can be used OO-style. This wrapper holds altered versions of all the - // underscore functions. Wrapped objects may be chained. - - // Helper function to continue chaining intermediate results. - var result = function(obj) { - return this._chain ? _(obj).chain() : obj; - }; - - // Add all of the Underscore functions to the wrapper object. - _.mixin(_); - - // Add all mutator Array functions to the wrapper. - each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - var obj = this._wrapped; - method.apply(obj, arguments); - if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0]; - return result.call(this, obj); - }; - }); - - // Add all accessor Array functions to the wrapper. - each(['concat', 'join', 'slice'], function(name) { - var method = ArrayProto[name]; - _.prototype[name] = function() { - return result.call(this, method.apply(this._wrapped, arguments)); - }; - }); - - _.extend(_.prototype, { - - // Start chaining a wrapped Underscore object. - chain: function() { - this._chain = true; - return this; - }, - - // Extracts the result from a wrapped and chained object. - value: function() { - return this._wrapped; - } - - }); - -}).call(this); diff --git a/libs/urljs/README.md b/libs/urljs/README.md deleted file mode 100755 index 66f054242..000000000 --- a/libs/urljs/README.md +++ /dev/null @@ -1,140 +0,0 @@ -URL.js -====== - -**An API for working with URLs in JavaScript.** -URL.js can be used in both **server-side** and **client-side** JavaScript environments, -it has **no dependencies** on any other libraries, and is easy to use for common URL-related tasks. - -Oh and since I built this to use on [TipTheWeb](http://tiptheweb.org/), -you should [**tip this project**](http://tiptheweb.org/tip/?link=https://github.com/ericf/urljs) if you find it useful! :-D - -Design & Approach ------------------ - -I had some very specific URL-related programming tasks I needed to do: -validate and normalize user input of URLs and URL-like strings within the browser, -and resolve URLs against each other on the server (in a YQL table to be specific). -Both of these tasks require a very good URL parser, so URL.js centers around parsing. -The design of the API and features of URL.js center around these four main concepts: - -* Parsing -* Normalization -* Resolving -* Mutating/Building - -**`URL` is both a namespace for utility methods and a constructor/factory to create instances of URL Objects.** - -The static utility methods make it convenient when you just want to work with Strings since they return Strings. -When you want to retain a reference to a parsed URL you can easily create a URL instance; -these instances have useful methods, most serve as both an accessor/mutator to a specific part of the URL. - -**Currently URL.js only works with HTTP URLs**, albiet the most popular type of URL; -I have plans to extend the functionality to include support [for all URL schemes](http://www.w3.org/Addressing/URL/url-spec.txt). -Internal to the library is the distiction between absolute and relative URLs. -Absolute URLs are ones which contain a scheme or are scheme-relative, and contain a host. -Relative URLs have slightly looser contraints but the relavence is maintained, either host- or path- relative. - -Usage ------ - -**`URL` is both a namespace for utility methods and a constructor/factory to create instances of URL Objects.** - -### Using Static Utilites - -There are two static methods: `normalize` and `resolve` - -#### `URL.normalize`: - -Takes in a dirty URL and makes it nice and clean. - - URL.normalize('Http://Example.com'); // 'http://example.com/' - URL.normalize('Http://Example.com?foo=#bar'); // 'http://example.com/?foo#bar' - -This should be suffient to serve the use-case of want to clean up URLs, -especially if were inputted by a user. - -#### `URL.resolve`: - -Given a base URL, this will resolve another URL against it; this method is inspired by what browsers do. -Normalizing is part of resolving, so a normalized and resolved URL `String` is returned. - - URL.resolve('http://example.com/foo/bar', 'baz/index.html'); // 'http://example.com/foo/baz/index.html' - URL.resolve('https://example.com/foo/, '//example.com/bar.css'); // 'https://example.com/bar.css' - URL.resolve('http://example.com/foo/bar/zee/', '../../crazy#whoa'); // 'http://example.com/foo/crazy#whoa' - -Resolving URLs is a pain in the ass, trust me, you don’t want to have to do this by hand. -The implementation of `resolve` is using all parts of this library’s API to pull it off. - -### Using URL Instances - -The `URL` `Object` is also a constructor/factory for creating instances of `URL`s. -When creating an instance, **the `new` keyword is optional**. - - var url = URL('http://www.example.com'); - - // Accessor/Mutator Methods - - url.scheme(); // 'http' - url.userInfo(); // undefined - url.host(); // 'www.example.com' - url.port(); // undefined - url.path(); // '/' - url.query(); // undefined - url.queryString(); // '' - url.fragment(); // undefined - - // Convenience Methods - - url.original(); // 'http://www.example.com' - url.isValid(); // true - url.isAbsolute(); // true - url.isRelative(); // false - url.isHostRelative(); // false - url.type(); // 'absolute' === URL.ABSOLUTE - url.domain(); // 'example.com' - url.authority(); // 'www.example.com' - - // Output Methods - - url.toString(); // 'http://www.example.com' - url.resolve('/foo/').toString(); // 'http://www.example.com/foo/' - -**Yeah, `URL` instances are packed full of useful URL-ly jazz!** - -Here are a few more “complex” examples of what you can do with mutation, chaining, building, and resolving: - - // switch the scheme, resolve a path with a fragment, and navigate to it - window.location = URL(window.location.toString()).scheme('https').resolve('/about/#people').toString(); - - // turn 'http://example.com' -> 'http://example.com/?foo=bar#baz' - URL('http://example.com').query([['foo', 'bar']]).fragment('baz'); - - // build up a URL to: http://tiptheweb.org/tip/?link=https://github.com/ericf/urljs - URL() - .scheme('http') - .host('tiptheweb.org') - .path('/tip/') - .query([['link', 'https://github.com/ericf/urljs']]); - -License -------- - -Copyright (c) 2011 Eric Ferraiuolo (http://eric.ferraiuolo.name/) - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/libs/urljs/url-min.js b/libs/urljs/url-min.js deleted file mode 100755 index b494a8553..000000000 --- a/libs/urljs/url-min.js +++ /dev/null @@ -1,7 +0,0 @@ -/*! - * URL.js - * - * Copyright 2011 Eric Ferraiuolo - * https://github.com/ericf/urljs - */ -var URL=function(){var u=this;if(!(u&&u.hasOwnProperty&&(u instanceof URL))){u=new URL()}return u._init.apply(u,arguments)};(function(){var ABSOLUTE="absolute",RELATIVE="relative",HTTP="http",HTTPS="https",COLON=":",SLASH_SLASH="//",AT="@",DOT=".",SLASH="/",DOT_DOT="..",DOT_DOT_SLASH="../",QUESTION="?",EQUALS="=",AMP="&",HASH="#",EMPTY_STRING="",TYPE="type",SCHEME="scheme",USER_INFO="userInfo",HOST="host",PORT="port",PATH="path",QUERY="query",FRAGMENT="fragment",URL_TYPE_REGEX=/^(?:(https?:\/\/|\/\/)|(\/|\?|#)|[^;:@=\.\s])/i,URL_ABSOLUTE_REGEX=/^(?:(https?):\/\/|\/\/)(?:([^:@\s]+:?[^:@\s]+?)@)?((?:[^;:@=\/\?\.\s]+\.)+[A-Za-z0-9\-]{2,})(?::(\d+))?(?=\/|\?|#|$)([^\?#]+)?(?:\?([^#]+))?(?:#(.+))?/i,URL_RELATIVE_REGEX=/^([^\?#]+)?(?:\?([^#]+))?(?:#(.+))?/i,OBJECT="object",STRING="string",TRIM_REGEX=/^\s+|\s+$/g,trim,isObject,isString;trim=String.prototype.trim?function(s){return(s&&s.trim?s.trim():s)}:function(s){try{return s.replace(TRIM_REGEX,EMPTY_STRING)}catch(e){return s}};isObject=function(o){return(o&&typeof o===OBJECT)};isString=function(o){return typeof o===STRING};URL.ABSOLUTE=ABSOLUTE;URL.RELATIVE=RELATIVE;URL.normalize=function(url){return new URL(url).toString()};URL.resolve=function(baseUrl,url){return new URL(baseUrl).resolve(url).toString()};URL.prototype={_init:function(url){this.constructor=URL;url=isString(url)?url:url instanceof URL?url.toString():null;this._original=url;this._url={};this._isValid=this._parse(url);return this},toString:function(){var url=this._url,urlParts=[],type=url[TYPE],scheme=url[SCHEME],path=url[PATH],query=url[QUERY],fragment=url[FRAGMENT];if(type===ABSOLUTE){urlParts.push(scheme?(scheme+COLON+SLASH_SLASH):SLASH_SLASH,this.authority());if(path&&path.indexOf(SLASH)!==0){path=SLASH+path}}urlParts.push(path,query?(QUESTION+this.queryString()):EMPTY_STRING,fragment?(HASH+fragment):EMPTY_STRING);return urlParts.join(EMPTY_STRING)},original:function(){return this._original},isValid:function(){return this._isValid},isAbsolute:function(){return this._url[TYPE]===ABSOLUTE},isRelative:function(){return this._url[TYPE]===RELATIVE},isHostRelative:function(){var path=this._url[PATH];return(this.isRelative()&&path&&path.indexOf(SLASH)===0)},type:function(){return this._url[TYPE]},scheme:function(scheme){return(arguments.length?this._set(SCHEME,scheme):this._url[SCHEME])},userInfo:function(userInfo){return(arguments.length?this._set(USER_INFO,userInfo):this._url[USER_INFO])},host:function(host){return(arguments.length?this._set(HOST,host):this._url[HOST])},domain:function(){var host=this._url[HOST];return(host?host.split(DOT).slice(-2).join(DOT):undefined)},port:function(port){return(arguments.length?this._set(PORT,port):this._url[PORT])},authority:function(){var url=this._url,userInfo=url[USER_INFO],host=url[HOST],port=url[PORT];return[userInfo?(userInfo+AT):EMPTY_STRING,host,port?(COLON+port):EMPTY_STRING,].join(EMPTY_STRING)},path:function(path){return(arguments.length?this._set(PATH,path):this._url[PATH])},query:function(query){return(arguments.length?this._set(QUERY,query):this._url[QUERY])},queryString:function(queryString){if(arguments.length){return this._set(QUERY,this._parseQuery(queryString))}queryString=EMPTY_STRING;var query=this._url[QUERY],i,len;if(query){for(i=0,len=query.length;i0)){return false}var urlParts,parsed;if(!type){type=url.match(URL_TYPE_REGEX);type=type?type[1]?ABSOLUTE:type[2]?RELATIVE:null:null}switch(type){case ABSOLUTE:urlParts=url.match(URL_ABSOLUTE_REGEX);if(urlParts){parsed={};parsed[TYPE]=ABSOLUTE;parsed[SCHEME]=urlParts[1]?urlParts[1].toLowerCase():undefined;parsed[USER_INFO]=urlParts[2];parsed[HOST]=urlParts[3].toLowerCase();parsed[PORT]=urlParts[4]?parseInt(urlParts[4],10):undefined;parsed[PATH]=urlParts[5]||SLASH;parsed[QUERY]=this._parseQuery(urlParts[6]);parsed[FRAGMENT]=urlParts[7]}break;case RELATIVE:urlParts=url.match(URL_RELATIVE_REGEX);if(urlParts){parsed={};parsed[TYPE]=RELATIVE;parsed[PATH]=urlParts[1];parsed[QUERY]=this._parseQuery(urlParts[2]);parsed[FRAGMENT]=urlParts[3]}break;default:return(this._parse(url,ABSOLUTE)||this._parse(url,RELATIVE));break}if(parsed){this._url=parsed;return true}else{return false}},_parseQuery:function(queryString){if(!isString(queryString)){return}queryString=trim(queryString);var query=[],queryParts=queryString.split(AMP),queryPart,i,len;for(i=0,len=queryParts.length;i-1){pathParts=path.split(SLASH);pathStack=[];for(i=0,len=pathParts.length;i1){normalizedPath+=SLASH}}else{normalizedPath=path}return normalizedPath}}}()); \ No newline at end of file diff --git a/libs/urljs/url.js b/libs/urljs/url.js deleted file mode 100755 index abfe04843..000000000 --- a/libs/urljs/url.js +++ /dev/null @@ -1,666 +0,0 @@ -/*! - * URL.js - * - * Copyright 2011 Eric Ferraiuolo - * https://github.com/ericf/urljs - */ - -/** - * URL constructor and utility. - * Provides support for validating whether something is a URL, - * formats and cleans up URL-like inputs into something nice and pretty, - * ability to resolve one URL against another and returned the formatted result, - * and is a convenient API for working with URL Objects and the various parts of URLs. - * - * @constructor URL - * @param {String | URL} url - the URL String to parse or URL instance to copy - * @return {URL} url - instance of a URL all nice and parsed - */ -var URL = function () { - - var u = this; - - if ( ! (u && u.hasOwnProperty && (u instanceof URL))) { - u = new URL(); - } - - return u._init.apply(u, arguments); -}; - -(function(){ - -var ABSOLUTE = 'absolute', - RELATIVE = 'relative', - - HTTP = 'http', - HTTPS = 'https', - COLON = ':', - SLASH_SLASH = '//', - AT = '@', - DOT = '.', - SLASH = '/', - DOT_DOT = '..', - DOT_DOT_SLASH = '../', - QUESTION = '?', - EQUALS = '=', - AMP = '&', - HASH = '#', - EMPTY_STRING = '', - - TYPE = 'type', - SCHEME = 'scheme', - USER_INFO = 'userInfo', - HOST = 'host', - PORT = 'port', - PATH = 'path', - QUERY = 'query', - FRAGMENT = 'fragment', - - URL_TYPE_REGEX = /^(?:(https?:\/\/|\/\/)|(\/|\?|#)|[^;:@=\.\s])/i, - URL_ABSOLUTE_REGEX = /^(?:(https?):\/\/|\/\/)(?:([^:@\s]+:?[^:@\s]+?)@)?((?:[^;:@=\/\?\.\s]+\.)+[A-Za-z0-9\-]{2,})(?::(\d+))?(?=\/|\?|#|$)([^\?#]+)?(?:\?([^#]+))?(?:#(.+))?/i, - URL_RELATIVE_REGEX = /^([^\?#]+)?(?:\?([^#]+))?(?:#(.+))?/i, - - OBJECT = 'object', - STRING = 'string', - TRIM_REGEX = /^\s+|\s+$/g, - - trim, isObject, isString; - - -// *** Utilities *** // - -trim = String.prototype.trim ? function (s) { - return ( s && s.trim ? s.trim() : s ); -} : function (s) { - try { - return s.replace(TRIM_REGEX, EMPTY_STRING); - } catch (e) { return s; } -}; - -isObject = function (o) { - return ( o && typeof o === OBJECT ); -}; - -isString = function (o) { - return typeof o === STRING; -}; - - -// *** Static *** // - -/** - * - */ -URL.ABSOLUTE = ABSOLUTE; - -/** - * - */ -URL.RELATIVE = RELATIVE; - -/** - * - */ -URL.normalize = function (url) { - return new URL(url).toString(); -}; - -/** - * Returns a resolved URL String using the baseUrl to resolve the url against. - * This attempts to resolve URLs like a browser would on a web page. - * - * @static - * @method resolve - * @param {String | URL} baseUrl - the URL String, or URL instance as the resolving base - * @param {String | URL} url - the URL String, or URL instance to resolve - * @return {String} resolvedUrl - a resolved URL String - */ -URL.resolve = function (baseUrl, url) { - return new URL(baseUrl).resolve(url).toString(); -}; - - -// *** Prototype *** // - -URL.prototype = { - - // *** Lifecycle Methods *** // - - /** - * Initializes a new URL instance, or re-initializes an existing one. - * The URL constructor delegates to this method to do the initializing, - * and the mutator instance methods call this to re-initialize when something changes. - * - * @protected - * @method _init - * @param {String | URL} url - the URL String, or URL instance - * @return {URL} url - instance of a URL all nice and parsed/re-parsed - */ - _init : function (url) { - - this.constructor = URL; - - url = isString(url) ? url : url instanceof URL ? url.toString() : null; - - this._original = url; - this._url = {}; - this._isValid = this._parse(url); - - return this; - }, - - // *** Object Methods *** // - - /** - * Returns the formatted URL String. - * Overridden Object toString method to do something useful. - * - * @public - * @method toString - * @return {String} url - formatted URL string - */ - toString : function () { - - var url = this._url, - urlParts = [], - type = url[TYPE], - scheme = url[SCHEME], - path = url[PATH], - query = url[QUERY], - fragment = url[FRAGMENT]; - - if (type === ABSOLUTE) { - urlParts.push( - scheme ? (scheme + COLON + SLASH_SLASH) : SLASH_SLASH, - this.authority() - ); - if (path && path.indexOf(SLASH) !== 0) { // this should maybe go in _set - path = SLASH + path; - } - } - - urlParts.push( - path, - query ? (QUESTION + this.queryString()) : EMPTY_STRING, - fragment ? (HASH + fragment) : EMPTY_STRING - ); - - return urlParts.join(EMPTY_STRING); - }, - - // *** Accessor/Mutator Methods *** // - - original : function () { - return this._original; - }, - - /** - * Whether parsing from initialization or re-initialization produced something valid. - * - * @public - * @method isValid - * @return {Boolean} valid - whether the URL is valid - */ - isValid : function () { - return this._isValid; - }, - - /** - * URL is absolute if it has a scheme or is scheme-relative (//). - * - * @public - * @method isAbsolute - * @return {Boolean} absolute - whether the URL is absolute - */ - isAbsolute : function () { - return this._url[TYPE] === ABSOLUTE; - }, - - /** - * URL is relative if it host or path relative, i.e. doesn't contain a host. - * - * @public - * @method isRelative - * @return {Boolean} relative - whether the URL is relative - */ - isRelative : function () { - return this._url[TYPE] === RELATIVE; - }, - - /** - * URL is host relative if it's relative and the path begins with '/'. - * - * @public - * @method isHostRelative - * @return {Boolean} hostRelative - whether the URL is host-relative - */ - isHostRelative : function () { - var path = this._url[PATH]; - return ( this.isRelative() && path && path.indexOf(SLASH) === 0 ); - }, - - /** - * Returns the type of the URL, either: URL.ABSOLUTE or URL.RELATIVE. - * - * @public - * @method type - * @return {String} type - the type of the URL: URL.ABSOLUTE or URL.RELATIVE - */ - type : function () { - return this._url[TYPE]; - }, - - /** - * Returns or sets the scheme of the URL. - * If URL is determined to be absolute (i.e. contains a host) and no scheme is provided, - * the scheme will default to http. - * - * @public - * @method scheme - * @param {String} scheme - Optional scheme to set on the URL - * @return {String | URL} the URL scheme or the URL instance - */ - scheme : function (scheme) { - return ( arguments.length ? this._set(SCHEME, scheme) : this._url[SCHEME] ); - }, - - /** - * Returns or set the user info of the URL. - * The user info can optionally contain a password and is only valid for absolute URLs. - * - * @public - * @method userInfo - * @param {String} userInfo - Optional userInfo to set on the URL - * @return {String | URL} the URL userInfo or the URL instance - */ - userInfo : function (userInfo) { - return ( arguments.length ? this._set(USER_INFO, userInfo) : this._url[USER_INFO] ); - }, - - /** - * Returns or sets the host of the URL. - * The host name, if set, must be something valid otherwise the URL will become invalid. - * - * @public - * @method host - * @param {String} host - Optional host to set on the URL - * @return {String | URL} the URL host or the URL instance - */ - host : function (host) { - return ( arguments.length ? this._set(HOST, host) : this._url[HOST] ); - }, - - /** - * Returns the URL's domain, where the domain is the TLD and SLD of the host. - * e.g. foo.example.com -> example.com - * - * @public - * @method domain - * @return {String} domain - the URL domain - */ - domain : function () { - var host = this._url[HOST]; - return ( host ? host.split(DOT).slice(-2).join(DOT) : undefined ); - }, - - /** - * Returns or sets the port of the URL. - * - * @public - * @method port - * @param {Number} port - Optional port to set on the URL - * @return {Number | URL} the URL port or the URL instance - */ - port : function (port) { - return ( arguments.length ? this._set(PORT, port) : this._url[PORT] ); - }, - - /** - * Returns the URL's authority which is the userInfo, host, and port combined. - * This only makes sense for absolute URLs - * - * @public - * @method authority - * @return {String} authority - the URL's authority (userInfo, host, and port) - */ - authority : function () { - - var url = this._url, - userInfo = url[USER_INFO], - host = url[HOST], - port = url[PORT]; - - return [ - - userInfo ? (userInfo + AT) : EMPTY_STRING, - host, - port ? (COLON + port) : EMPTY_STRING, - - ].join(EMPTY_STRING); - }, - - /** - * Returns or sets the path of the URL. - * - * @public - * @method path - * @param {String} path - Optional path to set on the URL - * @return {String | URL} the URL path or the URL instance - */ - path : function (path) { - return ( arguments.length ? this._set(PATH, path) : this._url[PATH] ); - }, - - /** - * Returns or sets the query of the URL. - * This takes or returns the parsed query as an Array of Arrays. - * - * @public - * @method query - * @param {Array} query - Optional query to set on the URL - * @return {Array | URL} the URL query or the URL instance - */ - query : function (query) { - return ( arguments.length ? this._set(QUERY, query) : this._url[QUERY] ); - }, - - /** - * Returns or sets the query of the URL. - * This takes or returns the query as a String; doesn't include the '?' - * - * @public - * @method queryString - * @param {String} queryString - Optional queryString to set on the URL - * @return {String | URL} the URL queryString or the URL instance - */ - queryString : function (queryString) { - - // parse and set queryString - if (arguments.length) { - return this._set(QUERY, this._parseQuery(queryString)); - } - - queryString = EMPTY_STRING; - - var query = this._url[QUERY], - i, len; - - if (query) { - for (i = 0, len = query.length; i < len; i++) { - queryString += query[i].join(EQUALS); - if (i < len - 1) { - queryString += AMP; - } - } - } - - return queryString; - }, - - /** - * Returns or sets the fragment on the URL. - * The fragment does not contain the '#'. - * - * @public - * @method fragment - * @param {String} fragment - Optional fragment to set on the URL - * @return {String | URL} the URL fragment or the URL instance - */ - fragment : function (fragment) { - return ( arguments.length ? this._set(FRAGMENT, fragment) : this._url[FRAGMENT] ); - }, - - /** - * Returns a new, resolved URL instance using this as the baseUrl. - * The URL passed in will be resolved against the baseUrl. - * - * @public - * @method resolve - * @param {String | URL} url - the URL String, or URL instance to resolve - * @return {URL} url - a resolved URL instance - */ - resolve : function (url) { - - url = (url instanceof URL) ? url : new URL(url); - - var resolved, path; - - if ( ! (this.isValid() && url.isValid())) { return this; } // not sure what to do??? - - // the easy way - if (url.isAbsolute()) { - return ( this.isAbsolute() ? url.scheme() ? url : new URL(url).scheme(this.scheme()) : url ); - } - - // the hard way - resolved = new URL(this.isAbsolute() ? this : null); - - if (url.path()) { - - if (url.isHostRelative() || ! this.path()) { - path = url.path(); - } else { - path = this.path().substring(0, this.path().lastIndexOf(SLASH) + 1) + url.path(); - } - - resolved.path(this._normalizePath(path)).query(url.query()).fragment(url.fragment()); - - } else if (url.query()) { - resolved.query(url.query()).fragment(url.fragment()); - } else if (url.fragment()) { - resolved.fragment(url.fragment()); - } - - return resolved; - }, - - /** - * Returns a new, reduced relative URL instance using this as the baseUrl. - * The URL passed in will be compared to the baseUrl with the goal of - * returning a reduced-down URL to one that’s relative to the base (this). - * This method is basically the opposite of resolve. - * - * @public - * @method reduce - * @param {String | URL} url - the URL String, or URL instance to resolve - * @return {URL} url - the reduced URL instance - */ - reduce : function (url) { - - url = (url instanceof URL) ? url : new URL(url); - - var reduced = this.resolve(url); - - if (this.isAbsolute() && reduced.isAbsolute()) { - if (reduced.scheme() === this.scheme() && reduced.authority() === this.authority()) { - reduced.scheme(null).userInfo(null).host(null).port(null); - } - } - - return reduced; - }, - - // *** Private Methods *** // - - /** - * Parses a URL into usable parts. - * Reasonable defaults are applied to parts of the URL which weren't present in the input, - * e.g. 'http://example.com' -> { type: 'absolute', scheme: 'http', host: 'example.com', path: '/' } - * If nothing or a falsy value is returned, the URL wasn't something valid. - * - * @private - * @method _parse - * @param {String} url - the URL string to parse - * @param {String} type - Optional type to seed parsing: URL.ABSOLUTE or URL.RELATIVE - * @return {Boolean} parsed - whether or not the URL string was parsed - */ - _parse : function (url, type) { - - // make sure we have a good string - url = trim(url); - if ( ! (isString(url) && url.length > 0)) { - return false; - } - - var urlParts, parsed; - - // figure out type, absolute or relative, or quit - if ( ! type) { - type = url.match(URL_TYPE_REGEX); - type = type ? type[1] ? ABSOLUTE : type[2] ? RELATIVE : null : null; - } - - switch (type) { - - case ABSOLUTE: - urlParts = url.match(URL_ABSOLUTE_REGEX); - if (urlParts) { - parsed = {}; - parsed[TYPE] = ABSOLUTE; - parsed[SCHEME] = urlParts[1] ? urlParts[1].toLowerCase() : undefined; - parsed[USER_INFO] = urlParts[2]; - parsed[HOST] = urlParts[3].toLowerCase(); - parsed[PORT] = urlParts[4] ? parseInt(urlParts[4], 10) : undefined; - parsed[PATH] = urlParts[5] || SLASH; - parsed[QUERY] = this._parseQuery(urlParts[6]); - parsed[FRAGMENT] = urlParts[7]; - } - break; - - case RELATIVE: - urlParts = url.match(URL_RELATIVE_REGEX); - if (urlParts) { - parsed = {}; - parsed[TYPE] = RELATIVE; - parsed[PATH] = urlParts[1]; - parsed[QUERY] = this._parseQuery(urlParts[2]); - parsed[FRAGMENT] = urlParts[3]; - } - break; - - // try to parse as absolute, if that fails then as relative - default: - return ( this._parse(url, ABSOLUTE) || this._parse(url, RELATIVE) ); - break; - - } - - if (parsed) { - this._url = parsed; - return true; - } else { - return false; - } - }, - - /** - * Helper to parse a URL query string into an array of arrays. - * Order of the query paramerters is maintained, an example structure would be: - * queryString: 'foo=bar&baz' -> [['foo', 'bar'], ['baz']] - * - * @private - * @method _parseQuery - * @param {String} queryString - the query string to parse, should not include '?' - * @return {Array} parsedQuery - array of arrays representing the query parameters and values - */ - _parseQuery : function (queryString) { - - if ( ! isString(queryString)) { return; } - - queryString = trim(queryString); - - var query = [], - queryParts = queryString.split(AMP), - queryPart, i, len; - - for (i = 0, len = queryParts.length; i < len; i++) { - if (queryParts[i]) { - queryPart = queryParts[i].split(EQUALS); - query.push(queryPart[1] ? queryPart : [queryPart[0]]); - } - } - - return query; - }, - - /** - * Helper for mutators to set a new URL-part value. - * After the URL-part is updated, the URL will be toString'd and re-parsed. - * This is a brute, but will make sure the URL stays in sync and is re-validated. - * - * @private - * @method _set - * @param {String} urlPart - the _url Object member String name - * @param {Object} val - the new value for the URL-part, mixed type - * @return {URL} this - returns this URL instance, chainable - */ - _set : function (urlPart, val) { - - this._url[urlPart] = val; - - if (val && ( - urlPart === SCHEME || - urlPart === USER_INFO || - urlPart === HOST || - urlPart === PORT )){ - this._url[TYPE] = ABSOLUTE; // temp, set this to help clue parsing - } - if ( ! val && urlPart === HOST) { - this._url[TYPE] = RELATIVE; // temp, no host means relative - } - - this._isValid = this._parse(this.toString()); - - return this; - }, - - /** - * Returns a normalized path String, by removing ../'s. - * - * @private - * @method _normalizePath - * @param {String} path — the path String to normalize - * @return {String} normalizedPath — the normalized path String - */ - _normalizePath : function (path) { - - var pathParts, pathPart, pathStack, normalizedPath, i, len; - - if (path.indexOf(DOT_DOT_SLASH) > -1) { - - pathParts = path.split(SLASH); - pathStack = []; - - for ( i = 0, len = pathParts.length; i < len; i++ ) { - pathPart = pathParts[i]; - if (pathPart === DOT_DOT) { - pathStack.pop(); - } else if (pathPart) { - pathStack.push(pathPart); - } - } - - normalizedPath = pathStack.join(SLASH); - - // prepend slash if needed - if (path[0] === SLASH) { - normalizedPath = SLASH + normalizedPath; - } - - // append slash if needed - if (path[path.length - 1] === SLASH && normalizedPath.length > 1) { - normalizedPath += SLASH; - } - - } else { - - normalizedPath = path; - - } - - return normalizedPath; - } - -}; - -}()); diff --git a/libs/zip/deflate.js b/libs/zip/deflate.js deleted file mode 100644 index 82544e5b3..000000000 --- a/libs/zip/deflate.js +++ /dev/null @@ -1,2088 +0,0 @@ -/* - Copyright (c) 2013 Gildas Lormeau. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the distribution. - - 3. The names of the authors may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, - INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * This program is based on JZlib 1.0.2 ymnk, JCraft,Inc. - * JZlib is based on zlib-1.1.3, so all credit should go authors - * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) - * and contributors of zlib. - */ - -(function(obj) { - - // Global - - var MAX_BITS = 15; - var D_CODES = 30; - var BL_CODES = 19; - - var LENGTH_CODES = 29; - var LITERALS = 256; - var L_CODES = (LITERALS + 1 + LENGTH_CODES); - var HEAP_SIZE = (2 * L_CODES + 1); - - var END_BLOCK = 256; - - // Bit length codes must not exceed MAX_BL_BITS bits - var MAX_BL_BITS = 7; - - // repeat previous bit length 3-6 times (2 bits of repeat count) - var REP_3_6 = 16; - - // repeat a zero length 3-10 times (3 bits of repeat count) - var REPZ_3_10 = 17; - - // repeat a zero length 11-138 times (7 bits of repeat count) - var REPZ_11_138 = 18; - - // The lengths of the bit length codes are sent in order of decreasing - // probability, to avoid transmitting the lengths for unused bit - // length codes. - - var Buf_size = 8 * 2; - - // JZlib version : "1.0.2" - var Z_DEFAULT_COMPRESSION = -1; - - // compression strategy - var Z_FILTERED = 1; - var Z_HUFFMAN_ONLY = 2; - var Z_DEFAULT_STRATEGY = 0; - - var Z_NO_FLUSH = 0; - var Z_PARTIAL_FLUSH = 1; - var Z_FULL_FLUSH = 3; - var Z_FINISH = 4; - - var Z_OK = 0; - var Z_STREAM_END = 1; - var Z_NEED_DICT = 2; - var Z_STREAM_ERROR = -2; - var Z_DATA_ERROR = -3; - var Z_BUF_ERROR = -5; - - // Tree - - // see definition of array dist_code below - var _dist_code = [ 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, - 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, - 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, - 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, - 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, - 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, 18, 18, 19, 19, - 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, - 27, 27, 27, 27, 27, 27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, - 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, - 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 ]; - - function Tree() { - var that = this; - - // dyn_tree; // the dynamic tree - // max_code; // largest code with non zero frequency - // stat_desc; // the corresponding static tree - - // Compute the optimal bit lengths for a tree and update the total bit - // length - // for the current block. - // IN assertion: the fields freq and dad are set, heap[heap_max] and - // above are the tree nodes sorted by increasing frequency. - // OUT assertions: the field len is set to the optimal bit length, the - // array bl_count contains the frequencies for each bit length. - // The length opt_len is updated; static_len is also updated if stree is - // not null. - function gen_bitlen(s) { - var tree = that.dyn_tree; - var stree = that.stat_desc.static_tree; - var extra = that.stat_desc.extra_bits; - var base = that.stat_desc.extra_base; - var max_length = that.stat_desc.max_length; - var h; // heap index - var n, m; // iterate over the tree elements - var bits; // bit length - var xbits; // extra bits - var f; // frequency - var overflow = 0; // number of elements with bit length too large - - for (bits = 0; bits <= MAX_BITS; bits++) - s.bl_count[bits] = 0; - - // In a first pass, compute the optimal bit lengths (which may - // overflow in the case of the bit length tree). - tree[s.heap[s.heap_max] * 2 + 1] = 0; // root of the heap - - for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { - n = s.heap[h]; - bits = tree[tree[n * 2 + 1] * 2 + 1] + 1; - if (bits > max_length) { - bits = max_length; - overflow++; - } - tree[n * 2 + 1] = bits; - // We overwrite tree[n*2+1] which is no longer needed - - if (n > that.max_code) - continue; // not a leaf node - - s.bl_count[bits]++; - xbits = 0; - if (n >= base) - xbits = extra[n - base]; - f = tree[n * 2]; - s.opt_len += f * (bits + xbits); - if (stree) - s.static_len += f * (stree[n * 2 + 1] + xbits); - } - if (overflow === 0) - return; - - // This happens for example on obj2 and pic of the Calgary corpus - // Find the first bit length which could increase: - do { - bits = max_length - 1; - while (s.bl_count[bits] === 0) - bits--; - s.bl_count[bits]--; // move one leaf down the tree - s.bl_count[bits + 1] += 2; // move one overflow item as its brother - s.bl_count[max_length]--; - // The brother of the overflow item also moves one step up, - // but this does not affect bl_count[max_length] - overflow -= 2; - } while (overflow > 0); - - for (bits = max_length; bits !== 0; bits--) { - n = s.bl_count[bits]; - while (n !== 0) { - m = s.heap[--h]; - if (m > that.max_code) - continue; - if (tree[m * 2 + 1] != bits) { - s.opt_len += (bits - tree[m * 2 + 1]) * tree[m * 2]; - tree[m * 2 + 1] = bits; - } - n--; - } - } - } - - // Reverse the first len bits of a code, using straightforward code (a - // faster - // method would use a table) - // IN assertion: 1 <= len <= 15 - function bi_reverse(code, // the value to invert - len // its bit length - ) { - var res = 0; - do { - res |= code & 1; - code >>>= 1; - res <<= 1; - } while (--len > 0); - return res >>> 1; - } - - // Generate the codes for a given tree and bit counts (which need not be - // optimal). - // IN assertion: the array bl_count contains the bit length statistics for - // the given tree and the field len is set for all tree elements. - // OUT assertion: the field code is set for all tree elements of non - // zero code length. - function gen_codes(tree, // the tree to decorate - max_code, // largest code with non zero frequency - bl_count // number of codes at each bit length - ) { - var next_code = []; // next code value for each - // bit length - var code = 0; // running code value - var bits; // bit index - var n; // code index - var len; - - // The distribution counts are first used to generate the code values - // without bit reversal. - for (bits = 1; bits <= MAX_BITS; bits++) { - next_code[bits] = code = ((code + bl_count[bits - 1]) << 1); - } - - // Check that the bit counts in bl_count are consistent. The last code - // must be all ones. - // Assert (code + bl_count[MAX_BITS]-1 == (1<= 1; n--) - s.pqdownheap(tree, n); - - // Construct the Huffman tree by repeatedly combining the least two - // frequent nodes. - - node = elems; // next internal node of the tree - do { - // n = node of least frequency - n = s.heap[1]; - s.heap[1] = s.heap[s.heap_len--]; - s.pqdownheap(tree, 1); - m = s.heap[1]; // m = node of next least frequency - - s.heap[--s.heap_max] = n; // keep the nodes sorted by frequency - s.heap[--s.heap_max] = m; - - // Create a new node father of n and m - tree[node * 2] = (tree[n * 2] + tree[m * 2]); - s.depth[node] = Math.max(s.depth[n], s.depth[m]) + 1; - tree[n * 2 + 1] = tree[m * 2 + 1] = node; - - // and insert the new node in the heap - s.heap[1] = node++; - s.pqdownheap(tree, 1); - } while (s.heap_len >= 2); - - s.heap[--s.heap_max] = s.heap[1]; - - // At this point, the fields freq and dad are set. We can now - // generate the bit lengths. - - gen_bitlen(s); - - // The field len is now set, we can generate the bit codes - gen_codes(tree, that.max_code, s.bl_count); - }; - - } - - Tree._length_code = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, - 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, - 20, 20, 20, 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, - 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, - 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, - 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, - 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 ]; - - Tree.base_length = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 0 ]; - - Tree.base_dist = [ 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, - 24576 ]; - - // Mapping from a distance to a distance code. dist is the distance - 1 and - // must not have side effects. _dist_code[256] and _dist_code[257] are never - // used. - Tree.d_code = function(dist) { - return ((dist) < 256 ? _dist_code[dist] : _dist_code[256 + ((dist) >>> 7)]); - }; - - // extra bits for each length code - Tree.extra_lbits = [ 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0 ]; - - // extra bits for each distance code - Tree.extra_dbits = [ 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 ]; - - // extra bits for each bit length code - Tree.extra_blbits = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7 ]; - - Tree.bl_order = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; - - // StaticTree - - function StaticTree(static_tree, extra_bits, extra_base, elems, max_length) { - var that = this; - that.static_tree = static_tree; - that.extra_bits = extra_bits; - that.extra_base = extra_base; - that.elems = elems; - that.max_length = max_length; - } - - StaticTree.static_ltree = [ 12, 8, 140, 8, 76, 8, 204, 8, 44, 8, 172, 8, 108, 8, 236, 8, 28, 8, 156, 8, 92, 8, 220, 8, 60, 8, 188, 8, 124, 8, 252, 8, 2, 8, - 130, 8, 66, 8, 194, 8, 34, 8, 162, 8, 98, 8, 226, 8, 18, 8, 146, 8, 82, 8, 210, 8, 50, 8, 178, 8, 114, 8, 242, 8, 10, 8, 138, 8, 74, 8, 202, 8, 42, - 8, 170, 8, 106, 8, 234, 8, 26, 8, 154, 8, 90, 8, 218, 8, 58, 8, 186, 8, 122, 8, 250, 8, 6, 8, 134, 8, 70, 8, 198, 8, 38, 8, 166, 8, 102, 8, 230, 8, - 22, 8, 150, 8, 86, 8, 214, 8, 54, 8, 182, 8, 118, 8, 246, 8, 14, 8, 142, 8, 78, 8, 206, 8, 46, 8, 174, 8, 110, 8, 238, 8, 30, 8, 158, 8, 94, 8, - 222, 8, 62, 8, 190, 8, 126, 8, 254, 8, 1, 8, 129, 8, 65, 8, 193, 8, 33, 8, 161, 8, 97, 8, 225, 8, 17, 8, 145, 8, 81, 8, 209, 8, 49, 8, 177, 8, 113, - 8, 241, 8, 9, 8, 137, 8, 73, 8, 201, 8, 41, 8, 169, 8, 105, 8, 233, 8, 25, 8, 153, 8, 89, 8, 217, 8, 57, 8, 185, 8, 121, 8, 249, 8, 5, 8, 133, 8, - 69, 8, 197, 8, 37, 8, 165, 8, 101, 8, 229, 8, 21, 8, 149, 8, 85, 8, 213, 8, 53, 8, 181, 8, 117, 8, 245, 8, 13, 8, 141, 8, 77, 8, 205, 8, 45, 8, - 173, 8, 109, 8, 237, 8, 29, 8, 157, 8, 93, 8, 221, 8, 61, 8, 189, 8, 125, 8, 253, 8, 19, 9, 275, 9, 147, 9, 403, 9, 83, 9, 339, 9, 211, 9, 467, 9, - 51, 9, 307, 9, 179, 9, 435, 9, 115, 9, 371, 9, 243, 9, 499, 9, 11, 9, 267, 9, 139, 9, 395, 9, 75, 9, 331, 9, 203, 9, 459, 9, 43, 9, 299, 9, 171, 9, - 427, 9, 107, 9, 363, 9, 235, 9, 491, 9, 27, 9, 283, 9, 155, 9, 411, 9, 91, 9, 347, 9, 219, 9, 475, 9, 59, 9, 315, 9, 187, 9, 443, 9, 123, 9, 379, - 9, 251, 9, 507, 9, 7, 9, 263, 9, 135, 9, 391, 9, 71, 9, 327, 9, 199, 9, 455, 9, 39, 9, 295, 9, 167, 9, 423, 9, 103, 9, 359, 9, 231, 9, 487, 9, 23, - 9, 279, 9, 151, 9, 407, 9, 87, 9, 343, 9, 215, 9, 471, 9, 55, 9, 311, 9, 183, 9, 439, 9, 119, 9, 375, 9, 247, 9, 503, 9, 15, 9, 271, 9, 143, 9, - 399, 9, 79, 9, 335, 9, 207, 9, 463, 9, 47, 9, 303, 9, 175, 9, 431, 9, 111, 9, 367, 9, 239, 9, 495, 9, 31, 9, 287, 9, 159, 9, 415, 9, 95, 9, 351, 9, - 223, 9, 479, 9, 63, 9, 319, 9, 191, 9, 447, 9, 127, 9, 383, 9, 255, 9, 511, 9, 0, 7, 64, 7, 32, 7, 96, 7, 16, 7, 80, 7, 48, 7, 112, 7, 8, 7, 72, 7, - 40, 7, 104, 7, 24, 7, 88, 7, 56, 7, 120, 7, 4, 7, 68, 7, 36, 7, 100, 7, 20, 7, 84, 7, 52, 7, 116, 7, 3, 8, 131, 8, 67, 8, 195, 8, 35, 8, 163, 8, - 99, 8, 227, 8 ]; - - StaticTree.static_dtree = [ 0, 5, 16, 5, 8, 5, 24, 5, 4, 5, 20, 5, 12, 5, 28, 5, 2, 5, 18, 5, 10, 5, 26, 5, 6, 5, 22, 5, 14, 5, 30, 5, 1, 5, 17, 5, 9, 5, - 25, 5, 5, 5, 21, 5, 13, 5, 29, 5, 3, 5, 19, 5, 11, 5, 27, 5, 7, 5, 23, 5 ]; - - StaticTree.static_l_desc = new StaticTree(StaticTree.static_ltree, Tree.extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); - - StaticTree.static_d_desc = new StaticTree(StaticTree.static_dtree, Tree.extra_dbits, 0, D_CODES, MAX_BITS); - - StaticTree.static_bl_desc = new StaticTree(null, Tree.extra_blbits, 0, BL_CODES, MAX_BL_BITS); - - // Deflate - - var MAX_MEM_LEVEL = 9; - var DEF_MEM_LEVEL = 8; - - function Config(good_length, max_lazy, nice_length, max_chain, func) { - var that = this; - that.good_length = good_length; - that.max_lazy = max_lazy; - that.nice_length = nice_length; - that.max_chain = max_chain; - that.func = func; - } - - var STORED = 0; - var FAST = 1; - var SLOW = 2; - var config_table = [ new Config(0, 0, 0, 0, STORED), new Config(4, 4, 8, 4, FAST), new Config(4, 5, 16, 8, FAST), new Config(4, 6, 32, 32, FAST), - new Config(4, 4, 16, 16, SLOW), new Config(8, 16, 32, 32, SLOW), new Config(8, 16, 128, 128, SLOW), new Config(8, 32, 128, 256, SLOW), - new Config(32, 128, 258, 1024, SLOW), new Config(32, 258, 258, 4096, SLOW) ]; - - var z_errmsg = [ "need dictionary", // Z_NEED_DICT - // 2 - "stream end", // Z_STREAM_END 1 - "", // Z_OK 0 - "", // Z_ERRNO (-1) - "stream error", // Z_STREAM_ERROR (-2) - "data error", // Z_DATA_ERROR (-3) - "", // Z_MEM_ERROR (-4) - "buffer error", // Z_BUF_ERROR (-5) - "",// Z_VERSION_ERROR (-6) - "" ]; - - // block not completed, need more input or more output - var NeedMore = 0; - - // block flush performed - var BlockDone = 1; - - // finish started, need only more output at next deflate - var FinishStarted = 2; - - // finish done, accept no more input or output - var FinishDone = 3; - - // preset dictionary flag in zlib header - var PRESET_DICT = 0x20; - - var INIT_STATE = 42; - var BUSY_STATE = 113; - var FINISH_STATE = 666; - - // The deflate compression method - var Z_DEFLATED = 8; - - var STORED_BLOCK = 0; - var STATIC_TREES = 1; - var DYN_TREES = 2; - - var MIN_MATCH = 3; - var MAX_MATCH = 258; - var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); - - function smaller(tree, n, m, depth) { - var tn2 = tree[n * 2]; - var tm2 = tree[m * 2]; - return (tn2 < tm2 || (tn2 == tm2 && depth[n] <= depth[m])); - } - - function Deflate() { - - var that = this; - var strm; // pointer back to this zlib stream - var status; // as the name implies - // pending_buf; // output still pending - var pending_buf_size; // size of pending_buf - // pending_out; // next pending byte to output to the stream - // pending; // nb of bytes in the pending buffer - var method; // STORED (for zip only) or DEFLATED - var last_flush; // value of flush param for previous deflate call - - var w_size; // LZ77 window size (32K by default) - var w_bits; // log2(w_size) (8..16) - var w_mask; // w_size - 1 - - var window; - // Sliding window. Input bytes are read into the second half of the window, - // and move to the first half later to keep a dictionary of at least wSize - // bytes. With this organization, matches are limited to a distance of - // wSize-MAX_MATCH bytes, but this ensures that IO is always - // performed with a length multiple of the block size. Also, it limits - // the window size to 64K, which is quite useful on MSDOS. - // To do: use the user input buffer as sliding window. - - var window_size; - // Actual size of window: 2*wSize, except when the user input buffer - // is directly used as sliding window. - - var prev; - // Link to older string with same hash index. To limit the size of this - // array to 64K, this link is maintained only for the last 32K strings. - // An index in this array is thus a window index modulo 32K. - - var head; // Heads of the hash chains or NIL. - - var ins_h; // hash index of string to be inserted - var hash_size; // number of elements in hash table - var hash_bits; // log2(hash_size) - var hash_mask; // hash_size-1 - - // Number of bits by which ins_h must be shifted at each input - // step. It must be such that after MIN_MATCH steps, the oldest - // byte no longer takes part in the hash key, that is: - // hash_shift * MIN_MATCH >= hash_bits - var hash_shift; - - // Window position at the beginning of the current output block. Gets - // negative when the window is moved backwards. - - var block_start; - - var match_length; // length of best match - var prev_match; // previous match - var match_available; // set if previous match exists - var strstart; // start of string to insert - var match_start; // start of matching string - var lookahead; // number of valid bytes ahead in window - - // Length of the best match at previous step. Matches not greater than this - // are discarded. This is used in the lazy match evaluation. - var prev_length; - - // To speed up deflation, hash chains are never searched beyond this - // length. A higher limit improves compression ratio but degrades the speed. - var max_chain_length; - - // Attempt to find a better match only when the current match is strictly - // smaller than this value. This mechanism is used only for compression - // levels >= 4. - var max_lazy_match; - - // Insert new strings in the hash table only if the match length is not - // greater than this length. This saves time but degrades compression. - // max_insert_length is used only for compression levels <= 3. - - var level; // compression level (1..9) - var strategy; // favor or force Huffman coding - - // Use a faster search when the previous match is longer than this - var good_match; - - // Stop searching when current match exceeds this - var nice_match; - - var dyn_ltree; // literal and length tree - var dyn_dtree; // distance tree - var bl_tree; // Huffman tree for bit lengths - - var l_desc = new Tree(); // desc for literal tree - var d_desc = new Tree(); // desc for distance tree - var bl_desc = new Tree(); // desc for bit length tree - - // that.heap_len; // number of elements in the heap - // that.heap_max; // element of largest frequency - // The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. - // The same heap array is used to build all trees. - - // Depth of each subtree used as tie breaker for trees of equal frequency - that.depth = []; - - var l_buf; // index for literals or lengths */ - - // Size of match buffer for literals/lengths. There are 4 reasons for - // limiting lit_bufsize to 64K: - // - frequencies can be kept in 16 bit counters - // - if compression is not successful for the first block, all input - // data is still in the window so we can still emit a stored block even - // when input comes from standard input. (This can also be done for - // all blocks if lit_bufsize is not greater than 32K.) - // - if compression is not successful for a file smaller than 64K, we can - // even emit a stored file instead of a stored block (saving 5 bytes). - // This is applicable only for zip (not gzip or zlib). - // - creating new Huffman trees less frequently may not provide fast - // adaptation to changes in the input data statistics. (Take for - // example a binary file with poorly compressible code followed by - // a highly compressible string table.) Smaller buffer sizes give - // fast adaptation but have of course the overhead of transmitting - // trees more frequently. - // - I can't count above 4 - var lit_bufsize; - - var last_lit; // running index in l_buf - - // Buffer for distances. To simplify the code, d_buf and l_buf have - // the same number of elements. To use different lengths, an extra flag - // array would be necessary. - - var d_buf; // index of pendig_buf - - // that.opt_len; // bit length of current block with optimal trees - // that.static_len; // bit length of current block with static trees - var matches; // number of string matches in current block - var last_eob_len; // bit length of EOB code for last block - - // Output buffer. bits are inserted starting at the bottom (least - // significant bits). - var bi_buf; - - // Number of valid bits in bi_buf. All bits above the last valid bit - // are always zero. - var bi_valid; - - // number of codes at each bit length for an optimal tree - that.bl_count = []; - - // heap used to build the Huffman trees - that.heap = []; - - dyn_ltree = []; - dyn_dtree = []; - bl_tree = []; - - function lm_init() { - var i; - window_size = 2 * w_size; - - head[hash_size - 1] = 0; - for (i = 0; i < hash_size - 1; i++) { - head[i] = 0; - } - - // Set the default configuration parameters: - max_lazy_match = config_table[level].max_lazy; - good_match = config_table[level].good_length; - nice_match = config_table[level].nice_length; - max_chain_length = config_table[level].max_chain; - - strstart = 0; - block_start = 0; - lookahead = 0; - match_length = prev_length = MIN_MATCH - 1; - match_available = 0; - ins_h = 0; - } - - function init_block() { - var i; - // Initialize the trees. - for (i = 0; i < L_CODES; i++) - dyn_ltree[i * 2] = 0; - for (i = 0; i < D_CODES; i++) - dyn_dtree[i * 2] = 0; - for (i = 0; i < BL_CODES; i++) - bl_tree[i * 2] = 0; - - dyn_ltree[END_BLOCK * 2] = 1; - that.opt_len = that.static_len = 0; - last_lit = matches = 0; - } - - // Initialize the tree data structures for a new zlib stream. - function tr_init() { - - l_desc.dyn_tree = dyn_ltree; - l_desc.stat_desc = StaticTree.static_l_desc; - - d_desc.dyn_tree = dyn_dtree; - d_desc.stat_desc = StaticTree.static_d_desc; - - bl_desc.dyn_tree = bl_tree; - bl_desc.stat_desc = StaticTree.static_bl_desc; - - bi_buf = 0; - bi_valid = 0; - last_eob_len = 8; // enough lookahead for inflate - - // Initialize the first block of the first file: - init_block(); - } - - // Restore the heap property by moving down the tree starting at node k, - // exchanging a node with the smallest of its two sons if necessary, - // stopping - // when the heap property is re-established (each father smaller than its - // two sons). - that.pqdownheap = function(tree, // the tree to restore - k // node to move down - ) { - var heap = that.heap; - var v = heap[k]; - var j = k << 1; // left son of k - while (j <= that.heap_len) { - // Set j to the smallest of the two sons: - if (j < that.heap_len && smaller(tree, heap[j + 1], heap[j], that.depth)) { - j++; - } - // Exit if v is smaller than both sons - if (smaller(tree, v, heap[j], that.depth)) - break; - - // Exchange v with the smallest son - heap[k] = heap[j]; - k = j; - // And continue down the tree, setting j to the left son of k - j <<= 1; - } - heap[k] = v; - }; - - // Scan a literal or distance tree to determine the frequencies of the codes - // in the bit length tree. - function scan_tree(tree,// the tree to be scanned - max_code // and its largest code of non zero frequency - ) { - var n; // iterates over all tree elements - var prevlen = -1; // last emitted length - var curlen; // length of current code - var nextlen = tree[0 * 2 + 1]; // length of next code - var count = 0; // repeat count of the current code - var max_count = 7; // max repeat count - var min_count = 4; // min repeat count - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - tree[(max_code + 1) * 2 + 1] = 0xffff; // guard - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]; - if (++count < max_count && curlen == nextlen) { - continue; - } else if (count < min_count) { - bl_tree[curlen * 2] += count; - } else if (curlen !== 0) { - if (curlen != prevlen) - bl_tree[curlen * 2]++; - bl_tree[REP_3_6 * 2]++; - } else if (count <= 10) { - bl_tree[REPZ_3_10 * 2]++; - } else { - bl_tree[REPZ_11_138 * 2]++; - } - count = 0; - prevlen = curlen; - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } else if (curlen == nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } - } - - // Construct the Huffman tree for the bit lengths and return the index in - // bl_order of the last bit length code to send. - function build_bl_tree() { - var max_blindex; // index of last bit length code of non zero freq - - // Determine the bit length frequencies for literal and distance trees - scan_tree(dyn_ltree, l_desc.max_code); - scan_tree(dyn_dtree, d_desc.max_code); - - // Build the bit length tree: - bl_desc.build_tree(that); - // opt_len now includes the length of the tree representations, except - // the lengths of the bit lengths codes and the 5+5+4 bits for the - // counts. - - // Determine the number of bit length codes to send. The pkzip format - // requires that at least 4 bit length codes be sent. (appnote.txt says - // 3 but the actual value used is 4.) - for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { - if (bl_tree[Tree.bl_order[max_blindex] * 2 + 1] !== 0) - break; - } - // Update opt_len to include the bit length tree and counts - that.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; - - return max_blindex; - } - - // Output a byte on the stream. - // IN assertion: there is enough room in pending_buf. - function put_byte(p) { - that.pending_buf[that.pending++] = p; - } - - function put_short(w) { - put_byte(w & 0xff); - put_byte((w >>> 8) & 0xff); - } - - function putShortMSB(b) { - put_byte((b >> 8) & 0xff); - put_byte((b & 0xff) & 0xff); - } - - function send_bits(value, length) { - var val, len = length; - if (bi_valid > Buf_size - len) { - val = value; - // bi_buf |= (val << bi_valid); - bi_buf |= ((val << bi_valid) & 0xffff); - put_short(bi_buf); - bi_buf = val >>> (Buf_size - bi_valid); - bi_valid += len - Buf_size; - } else { - // bi_buf |= (value) << bi_valid; - bi_buf |= (((value) << bi_valid) & 0xffff); - bi_valid += len; - } - } - - function send_code(c, tree) { - var c2 = c * 2; - send_bits(tree[c2] & 0xffff, tree[c2 + 1] & 0xffff); - } - - // Send a literal or distance tree in compressed form, using the codes in - // bl_tree. - function send_tree(tree,// the tree to be sent - max_code // and its largest code of non zero frequency - ) { - var n; // iterates over all tree elements - var prevlen = -1; // last emitted length - var curlen; // length of current code - var nextlen = tree[0 * 2 + 1]; // length of next code - var count = 0; // repeat count of the current code - var max_count = 7; // max repeat count - var min_count = 4; // min repeat count - - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } - - for (n = 0; n <= max_code; n++) { - curlen = nextlen; - nextlen = tree[(n + 1) * 2 + 1]; - if (++count < max_count && curlen == nextlen) { - continue; - } else if (count < min_count) { - do { - send_code(curlen, bl_tree); - } while (--count !== 0); - } else if (curlen !== 0) { - if (curlen != prevlen) { - send_code(curlen, bl_tree); - count--; - } - send_code(REP_3_6, bl_tree); - send_bits(count - 3, 2); - } else if (count <= 10) { - send_code(REPZ_3_10, bl_tree); - send_bits(count - 3, 3); - } else { - send_code(REPZ_11_138, bl_tree); - send_bits(count - 11, 7); - } - count = 0; - prevlen = curlen; - if (nextlen === 0) { - max_count = 138; - min_count = 3; - } else if (curlen == nextlen) { - max_count = 6; - min_count = 3; - } else { - max_count = 7; - min_count = 4; - } - } - } - - // Send the header for a block using dynamic Huffman trees: the counts, the - // lengths of the bit length codes, the literal tree and the distance tree. - // IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. - function send_all_trees(lcodes, dcodes, blcodes) { - var rank; // index in bl_order - - send_bits(lcodes - 257, 5); // not +255 as stated in appnote.txt - send_bits(dcodes - 1, 5); - send_bits(blcodes - 4, 4); // not -3 as stated in appnote.txt - for (rank = 0; rank < blcodes; rank++) { - send_bits(bl_tree[Tree.bl_order[rank] * 2 + 1], 3); - } - send_tree(dyn_ltree, lcodes - 1); // literal tree - send_tree(dyn_dtree, dcodes - 1); // distance tree - } - - // Flush the bit buffer, keeping at most 7 bits in it. - function bi_flush() { - if (bi_valid == 16) { - put_short(bi_buf); - bi_buf = 0; - bi_valid = 0; - } else if (bi_valid >= 8) { - put_byte(bi_buf & 0xff); - bi_buf >>>= 8; - bi_valid -= 8; - } - } - - // Send one empty static block to give enough lookahead for inflate. - // This takes 10 bits, of which 7 may remain in the bit buffer. - // The current inflate code requires 9 bits of lookahead. If the - // last two codes for the previous block (real code plus EOB) were coded - // on 5 bits or less, inflate may have only 5+3 bits of lookahead to decode - // the last real code. In this case we send two empty static blocks instead - // of one. (There are no problems if the previous block is stored or fixed.) - // To simplify the code, we assume the worst case of last real code encoded - // on one bit only. - function _tr_align() { - send_bits(STATIC_TREES << 1, 3); - send_code(END_BLOCK, StaticTree.static_ltree); - - bi_flush(); - - // Of the 10 bits for the empty block, we have already sent - // (10 - bi_valid) bits. The lookahead for the last real code (before - // the EOB of the previous block) was thus at least one plus the length - // of the EOB plus what we have just sent of the empty static block. - if (1 + last_eob_len + 10 - bi_valid < 9) { - send_bits(STATIC_TREES << 1, 3); - send_code(END_BLOCK, StaticTree.static_ltree); - bi_flush(); - } - last_eob_len = 7; - } - - // Save the match info and tally the frequency counts. Return true if - // the current block must be flushed. - function _tr_tally(dist, // distance of matched string - lc // match length-MIN_MATCH or unmatched char (if dist==0) - ) { - var out_length, in_length, dcode; - that.pending_buf[d_buf + last_lit * 2] = (dist >>> 8) & 0xff; - that.pending_buf[d_buf + last_lit * 2 + 1] = dist & 0xff; - - that.pending_buf[l_buf + last_lit] = lc & 0xff; - last_lit++; - - if (dist === 0) { - // lc is the unmatched char - dyn_ltree[lc * 2]++; - } else { - matches++; - // Here, lc is the match length - MIN_MATCH - dist--; // dist = match distance - 1 - dyn_ltree[(Tree._length_code[lc] + LITERALS + 1) * 2]++; - dyn_dtree[Tree.d_code(dist) * 2]++; - } - - if ((last_lit & 0x1fff) === 0 && level > 2) { - // Compute an upper bound for the compressed length - out_length = last_lit * 8; - in_length = strstart - block_start; - for (dcode = 0; dcode < D_CODES; dcode++) { - out_length += dyn_dtree[dcode * 2] * (5 + Tree.extra_dbits[dcode]); - } - out_length >>>= 3; - if ((matches < Math.floor(last_lit / 2)) && out_length < Math.floor(in_length / 2)) - return true; - } - - return (last_lit == lit_bufsize - 1); - // We avoid equality with lit_bufsize because of wraparound at 64K - // on 16 bit machines and because stored blocks are restricted to - // 64K-1 bytes. - } - - // Send the block data compressed using the given Huffman trees - function compress_block(ltree, dtree) { - var dist; // distance of matched string - var lc; // match length or unmatched char (if dist === 0) - var lx = 0; // running index in l_buf - var code; // the code to send - var extra; // number of extra bits to send - - if (last_lit !== 0) { - do { - dist = ((that.pending_buf[d_buf + lx * 2] << 8) & 0xff00) | (that.pending_buf[d_buf + lx * 2 + 1] & 0xff); - lc = (that.pending_buf[l_buf + lx]) & 0xff; - lx++; - - if (dist === 0) { - send_code(lc, ltree); // send a literal byte - } else { - // Here, lc is the match length - MIN_MATCH - code = Tree._length_code[lc]; - - send_code(code + LITERALS + 1, ltree); // send the length - // code - extra = Tree.extra_lbits[code]; - if (extra !== 0) { - lc -= Tree.base_length[code]; - send_bits(lc, extra); // send the extra length bits - } - dist--; // dist is now the match distance - 1 - code = Tree.d_code(dist); - - send_code(code, dtree); // send the distance code - extra = Tree.extra_dbits[code]; - if (extra !== 0) { - dist -= Tree.base_dist[code]; - send_bits(dist, extra); // send the extra distance bits - } - } // literal or match pair ? - - // Check that the overlay between pending_buf and d_buf+l_buf is - // ok: - } while (lx < last_lit); - } - - send_code(END_BLOCK, ltree); - last_eob_len = ltree[END_BLOCK * 2 + 1]; - } - - // Flush the bit buffer and align the output on a byte boundary - function bi_windup() { - if (bi_valid > 8) { - put_short(bi_buf); - } else if (bi_valid > 0) { - put_byte(bi_buf & 0xff); - } - bi_buf = 0; - bi_valid = 0; - } - - // Copy a stored block, storing first the length and its - // one's complement if requested. - function copy_block(buf, // the input data - len, // its length - header // true if block header must be written - ) { - bi_windup(); // align on byte boundary - last_eob_len = 8; // enough lookahead for inflate - - if (header) { - put_short(len); - put_short(~len); - } - - that.pending_buf.set(window.subarray(buf, buf + len), that.pending); - that.pending += len; - } - - // Send a stored block - function _tr_stored_block(buf, // input block - stored_len, // length of input block - eof // true if this is the last block for a file - ) { - send_bits((STORED_BLOCK << 1) + (eof ? 1 : 0), 3); // send block type - copy_block(buf, stored_len, true); // with header - } - - // Determine the best encoding for the current block: dynamic trees, static - // trees or store, and output the encoded block to the zip file. - function _tr_flush_block(buf, // input block, or NULL if too old - stored_len, // length of input block - eof // true if this is the last block for a file - ) { - var opt_lenb, static_lenb;// opt_len and static_len in bytes - var max_blindex = 0; // index of last bit length code of non zero freq - - // Build the Huffman trees unless a stored block is forced - if (level > 0) { - // Construct the literal and distance trees - l_desc.build_tree(that); - - d_desc.build_tree(that); - - // At this point, opt_len and static_len are the total bit lengths - // of - // the compressed block data, excluding the tree representations. - - // Build the bit length tree for the above two trees, and get the - // index - // in bl_order of the last bit length code to send. - max_blindex = build_bl_tree(); - - // Determine the best encoding. Compute first the block length in - // bytes - opt_lenb = (that.opt_len + 3 + 7) >>> 3; - static_lenb = (that.static_len + 3 + 7) >>> 3; - - if (static_lenb <= opt_lenb) - opt_lenb = static_lenb; - } else { - opt_lenb = static_lenb = stored_len + 5; // force a stored block - } - - if ((stored_len + 4 <= opt_lenb) && buf != -1) { - // 4: two words for the lengths - // The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. - // Otherwise we can't have processed more than WSIZE input bytes - // since - // the last block flush, because compression would have been - // successful. If LIT_BUFSIZE <= WSIZE, it is never too late to - // transform a block into a stored block. - _tr_stored_block(buf, stored_len, eof); - } else if (static_lenb == opt_lenb) { - send_bits((STATIC_TREES << 1) + (eof ? 1 : 0), 3); - compress_block(StaticTree.static_ltree, StaticTree.static_dtree); - } else { - send_bits((DYN_TREES << 1) + (eof ? 1 : 0), 3); - send_all_trees(l_desc.max_code + 1, d_desc.max_code + 1, max_blindex + 1); - compress_block(dyn_ltree, dyn_dtree); - } - - // The above check is made mod 2^32, for files larger than 512 MB - // and uLong implemented on 32 bits. - - init_block(); - - if (eof) { - bi_windup(); - } - } - - function flush_block_only(eof) { - _tr_flush_block(block_start >= 0 ? block_start : -1, strstart - block_start, eof); - block_start = strstart; - strm.flush_pending(); - } - - // Fill the window when the lookahead becomes insufficient. - // Updates strstart and lookahead. - // - // IN assertion: lookahead < MIN_LOOKAHEAD - // OUT assertions: strstart <= window_size-MIN_LOOKAHEAD - // At least one byte has been read, or avail_in === 0; reads are - // performed for at least two bytes (required for the zip translate_eol - // option -- not supported here). - function fill_window() { - var n, m; - var p; - var more; // Amount of free space at the end of the window. - - do { - more = (window_size - lookahead - strstart); - - // Deal with !@#$% 64K limit: - if (more === 0 && strstart === 0 && lookahead === 0) { - more = w_size; - } else if (more == -1) { - // Very unlikely, but possible on 16 bit machine if strstart == - // 0 - // and lookahead == 1 (input done one byte at time) - more--; - - // If the window is almost full and there is insufficient - // lookahead, - // move the upper half to the lower one to make room in the - // upper half. - } else if (strstart >= w_size + w_size - MIN_LOOKAHEAD) { - window.set(window.subarray(w_size, w_size + w_size), 0); - - match_start -= w_size; - strstart -= w_size; // we now have strstart >= MAX_DIST - block_start -= w_size; - - // Slide the hash table (could be avoided with 32 bit values - // at the expense of memory usage). We slide even when level == - // 0 - // to keep the hash table consistent if we switch back to level - // > 0 - // later. (Using level 0 permanently is not an optimal usage of - // zlib, so we don't care about this pathological case.) - - n = hash_size; - p = n; - do { - m = (head[--p] & 0xffff); - head[p] = (m >= w_size ? m - w_size : 0); - } while (--n !== 0); - - n = w_size; - p = n; - do { - m = (prev[--p] & 0xffff); - prev[p] = (m >= w_size ? m - w_size : 0); - // If n is not on any hash chain, prev[n] is garbage but - // its value will never be used. - } while (--n !== 0); - more += w_size; - } - - if (strm.avail_in === 0) - return; - - // If there was no sliding: - // strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && - // more == window_size - lookahead - strstart - // => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) - // => more >= window_size - 2*WSIZE + 2 - // In the BIG_MEM or MMAP case (not yet supported), - // window_size == input_size + MIN_LOOKAHEAD && - // strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. - // Otherwise, window_size == 2*WSIZE so more >= 2. - // If there was sliding, more >= WSIZE. So in all cases, more >= 2. - - n = strm.read_buf(window, strstart + lookahead, more); - lookahead += n; - - // Initialize the hash value now that we have some input: - if (lookahead >= MIN_MATCH) { - ins_h = window[strstart] & 0xff; - ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask; - } - // If the whole input has less than MIN_MATCH bytes, ins_h is - // garbage, - // but this is not important since only literal bytes will be - // emitted. - } while (lookahead < MIN_LOOKAHEAD && strm.avail_in !== 0); - } - - // Copy without compression as much as possible from the input stream, - // return - // the current block state. - // This function does not insert new strings in the dictionary since - // uncompressible data is probably not useful. This function is used - // only for the level=0 compression option. - // NOTE: this function should be optimized to avoid extra copying from - // window to pending_buf. - function deflate_stored(flush) { - // Stored blocks are limited to 0xffff bytes, pending_buf is limited - // to pending_buf_size, and each stored block has a 5 byte header: - - var max_block_size = 0xffff; - var max_start; - - if (max_block_size > pending_buf_size - 5) { - max_block_size = pending_buf_size - 5; - } - - // Copy as much as possible from input to output: - while (true) { - // Fill the window as much as possible: - if (lookahead <= 1) { - fill_window(); - if (lookahead === 0 && flush == Z_NO_FLUSH) - return NeedMore; - if (lookahead === 0) - break; // flush the current block - } - - strstart += lookahead; - lookahead = 0; - - // Emit a stored block if pending_buf will be full: - max_start = block_start + max_block_size; - if (strstart === 0 || strstart >= max_start) { - // strstart === 0 is possible when wraparound on 16-bit machine - lookahead = (strstart - max_start); - strstart = max_start; - - flush_block_only(false); - if (strm.avail_out === 0) - return NeedMore; - - } - - // Flush if we may have to slide, otherwise block_start may become - // negative and the data will be gone: - if (strstart - block_start >= w_size - MIN_LOOKAHEAD) { - flush_block_only(false); - if (strm.avail_out === 0) - return NeedMore; - } - } - - flush_block_only(flush == Z_FINISH); - if (strm.avail_out === 0) - return (flush == Z_FINISH) ? FinishStarted : NeedMore; - - return flush == Z_FINISH ? FinishDone : BlockDone; - } - - function longest_match(cur_match) { - var chain_length = max_chain_length; // max hash chain length - var scan = strstart; // current string - var match; // matched string - var len; // length of current match - var best_len = prev_length; // best match length so far - var limit = strstart > (w_size - MIN_LOOKAHEAD) ? strstart - (w_size - MIN_LOOKAHEAD) : 0; - var _nice_match = nice_match; - - // Stop when cur_match becomes <= limit. To simplify the code, - // we prevent matches with the string of window index 0. - - var wmask = w_mask; - - var strend = strstart + MAX_MATCH; - var scan_end1 = window[scan + best_len - 1]; - var scan_end = window[scan + best_len]; - - // The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of - // 16. - // It is easy to get rid of this optimization if necessary. - - // Do not waste too much time if we already have a good match: - if (prev_length >= good_match) { - chain_length >>= 2; - } - - // Do not look for matches beyond the end of the input. This is - // necessary - // to make deflate deterministic. - if (_nice_match > lookahead) - _nice_match = lookahead; - - do { - match = cur_match; - - // Skip to next match if the match length cannot increase - // or if the match length is less than 2: - if (window[match + best_len] != scan_end || window[match + best_len - 1] != scan_end1 || window[match] != window[scan] - || window[++match] != window[scan + 1]) - continue; - - // The check at best_len-1 can be removed because it will be made - // again later. (This heuristic is not always a win.) - // It is not necessary to compare scan[2] and match[2] since they - // are always equal when the other bytes match, given that - // the hash keys are equal and that HASH_BITS >= 8. - scan += 2; - match++; - - // We check for insufficient lookahead only every 8th comparison; - // the 256th check will be made at strstart+258. - do { - } while (window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] - && window[++scan] == window[++match] && window[++scan] == window[++match] && window[++scan] == window[++match] - && window[++scan] == window[++match] && window[++scan] == window[++match] && scan < strend); - - len = MAX_MATCH - (strend - scan); - scan = strend - MAX_MATCH; - - if (len > best_len) { - match_start = cur_match; - best_len = len; - if (len >= _nice_match) - break; - scan_end1 = window[scan + best_len - 1]; - scan_end = window[scan + best_len]; - } - - } while ((cur_match = (prev[cur_match & wmask] & 0xffff)) > limit && --chain_length !== 0); - - if (best_len <= lookahead) - return best_len; - return lookahead; - } - - // Compress as much as possible from the input stream, return the current - // block state. - // This function does not perform lazy evaluation of matches and inserts - // new strings in the dictionary only for unmatched strings or for short - // matches. It is used only for the fast compression options. - function deflate_fast(flush) { - // short hash_head = 0; // head of the hash chain - var hash_head = 0; // head of the hash chain - var bflush; // set if current block must be flushed - - while (true) { - // Make sure that we always have enough lookahead, except - // at the end of the input file. We need MAX_MATCH bytes - // for the next match, plus MIN_MATCH bytes to insert the - // string following the next match. - if (lookahead < MIN_LOOKAHEAD) { - fill_window(); - if (lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { - return NeedMore; - } - if (lookahead === 0) - break; // flush the current block - } - - // Insert the string window[strstart .. strstart+2] in the - // dictionary, and set hash_head to the head of the hash chain: - if (lookahead >= MIN_MATCH) { - ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; - - // prev[strstart&w_mask]=hash_head=head[ins_h]; - hash_head = (head[ins_h] & 0xffff); - prev[strstart & w_mask] = head[ins_h]; - head[ins_h] = strstart; - } - - // Find the longest match, discarding those <= prev_length. - // At this point we have always match_length < MIN_MATCH - - if (hash_head !== 0 && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) { - // To simplify the code, we prevent matches with the string - // of window index 0 (in particular we have to avoid a match - // of the string with itself at the start of the input file). - if (strategy != Z_HUFFMAN_ONLY) { - match_length = longest_match(hash_head); - } - // longest_match() sets match_start - } - if (match_length >= MIN_MATCH) { - // check_match(strstart, match_start, match_length); - - bflush = _tr_tally(strstart - match_start, match_length - MIN_MATCH); - - lookahead -= match_length; - - // Insert new strings in the hash table only if the match length - // is not too large. This saves time but degrades compression. - if (match_length <= max_lazy_match && lookahead >= MIN_MATCH) { - match_length--; // string at strstart already in hash table - do { - strstart++; - - ins_h = ((ins_h << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; - // prev[strstart&w_mask]=hash_head=head[ins_h]; - hash_head = (head[ins_h] & 0xffff); - prev[strstart & w_mask] = head[ins_h]; - head[ins_h] = strstart; - - // strstart never exceeds WSIZE-MAX_MATCH, so there are - // always MIN_MATCH bytes ahead. - } while (--match_length !== 0); - strstart++; - } else { - strstart += match_length; - match_length = 0; - ins_h = window[strstart] & 0xff; - - ins_h = (((ins_h) << hash_shift) ^ (window[strstart + 1] & 0xff)) & hash_mask; - // If lookahead < MIN_MATCH, ins_h is garbage, but it does - // not - // matter since it will be recomputed at next deflate call. - } - } else { - // No match, output a literal byte - - bflush = _tr_tally(0, window[strstart] & 0xff); - lookahead--; - strstart++; - } - if (bflush) { - - flush_block_only(false); - if (strm.avail_out === 0) - return NeedMore; - } - } - - flush_block_only(flush == Z_FINISH); - if (strm.avail_out === 0) { - if (flush == Z_FINISH) - return FinishStarted; - else - return NeedMore; - } - return flush == Z_FINISH ? FinishDone : BlockDone; - } - - // Same as above, but achieves better compression. We use a lazy - // evaluation for matches: a match is finally adopted only if there is - // no better match at the next window position. - function deflate_slow(flush) { - // short hash_head = 0; // head of hash chain - var hash_head = 0; // head of hash chain - var bflush; // set if current block must be flushed - var max_insert; - - // Process the input block. - while (true) { - // Make sure that we always have enough lookahead, except - // at the end of the input file. We need MAX_MATCH bytes - // for the next match, plus MIN_MATCH bytes to insert the - // string following the next match. - - if (lookahead < MIN_LOOKAHEAD) { - fill_window(); - if (lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { - return NeedMore; - } - if (lookahead === 0) - break; // flush the current block - } - - // Insert the string window[strstart .. strstart+2] in the - // dictionary, and set hash_head to the head of the hash chain: - - if (lookahead >= MIN_MATCH) { - ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; - // prev[strstart&w_mask]=hash_head=head[ins_h]; - hash_head = (head[ins_h] & 0xffff); - prev[strstart & w_mask] = head[ins_h]; - head[ins_h] = strstart; - } - - // Find the longest match, discarding those <= prev_length. - prev_length = match_length; - prev_match = match_start; - match_length = MIN_MATCH - 1; - - if (hash_head !== 0 && prev_length < max_lazy_match && ((strstart - hash_head) & 0xffff) <= w_size - MIN_LOOKAHEAD) { - // To simplify the code, we prevent matches with the string - // of window index 0 (in particular we have to avoid a match - // of the string with itself at the start of the input file). - - if (strategy != Z_HUFFMAN_ONLY) { - match_length = longest_match(hash_head); - } - // longest_match() sets match_start - - if (match_length <= 5 && (strategy == Z_FILTERED || (match_length == MIN_MATCH && strstart - match_start > 4096))) { - - // If prev_match is also MIN_MATCH, match_start is garbage - // but we will ignore the current match anyway. - match_length = MIN_MATCH - 1; - } - } - - // If there was a match at the previous step and the current - // match is not better, output the previous match: - if (prev_length >= MIN_MATCH && match_length <= prev_length) { - max_insert = strstart + lookahead - MIN_MATCH; - // Do not insert strings in hash table beyond this. - - // check_match(strstart-1, prev_match, prev_length); - - bflush = _tr_tally(strstart - 1 - prev_match, prev_length - MIN_MATCH); - - // Insert in hash table all strings up to the end of the match. - // strstart-1 and strstart are already inserted. If there is not - // enough lookahead, the last two strings are not inserted in - // the hash table. - lookahead -= prev_length - 1; - prev_length -= 2; - do { - if (++strstart <= max_insert) { - ins_h = (((ins_h) << hash_shift) ^ (window[(strstart) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; - // prev[strstart&w_mask]=hash_head=head[ins_h]; - hash_head = (head[ins_h] & 0xffff); - prev[strstart & w_mask] = head[ins_h]; - head[ins_h] = strstart; - } - } while (--prev_length !== 0); - match_available = 0; - match_length = MIN_MATCH - 1; - strstart++; - - if (bflush) { - flush_block_only(false); - if (strm.avail_out === 0) - return NeedMore; - } - } else if (match_available !== 0) { - - // If there was no match at the previous position, output a - // single literal. If there was a match but the current match - // is longer, truncate the previous match to a single literal. - - bflush = _tr_tally(0, window[strstart - 1] & 0xff); - - if (bflush) { - flush_block_only(false); - } - strstart++; - lookahead--; - if (strm.avail_out === 0) - return NeedMore; - } else { - // There is no previous match to compare with, wait for - // the next step to decide. - - match_available = 1; - strstart++; - lookahead--; - } - } - - if (match_available !== 0) { - bflush = _tr_tally(0, window[strstart - 1] & 0xff); - match_available = 0; - } - flush_block_only(flush == Z_FINISH); - - if (strm.avail_out === 0) { - if (flush == Z_FINISH) - return FinishStarted; - else - return NeedMore; - } - - return flush == Z_FINISH ? FinishDone : BlockDone; - } - - function deflateReset(strm) { - strm.total_in = strm.total_out = 0; - strm.msg = null; // - - that.pending = 0; - that.pending_out = 0; - - status = BUSY_STATE; - - last_flush = Z_NO_FLUSH; - - tr_init(); - lm_init(); - return Z_OK; - } - - that.deflateInit = function(strm, _level, bits, _method, memLevel, _strategy) { - if (!_method) - _method = Z_DEFLATED; - if (!memLevel) - memLevel = DEF_MEM_LEVEL; - if (!_strategy) - _strategy = Z_DEFAULT_STRATEGY; - - // byte[] my_version=ZLIB_VERSION; - - // - // if (!version || version[0] != my_version[0] - // || stream_size != sizeof(z_stream)) { - // return Z_VERSION_ERROR; - // } - - strm.msg = null; - - if (_level == Z_DEFAULT_COMPRESSION) - _level = 6; - - if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || _method != Z_DEFLATED || bits < 9 || bits > 15 || _level < 0 || _level > 9 || _strategy < 0 - || _strategy > Z_HUFFMAN_ONLY) { - return Z_STREAM_ERROR; - } - - strm.dstate = that; - - w_bits = bits; - w_size = 1 << w_bits; - w_mask = w_size - 1; - - hash_bits = memLevel + 7; - hash_size = 1 << hash_bits; - hash_mask = hash_size - 1; - hash_shift = Math.floor((hash_bits + MIN_MATCH - 1) / MIN_MATCH); - - window = new Uint8Array(w_size * 2); - prev = []; - head = []; - - lit_bufsize = 1 << (memLevel + 6); // 16K elements by default - - // We overlay pending_buf and d_buf+l_buf. This works since the average - // output size for (length,distance) codes is <= 24 bits. - that.pending_buf = new Uint8Array(lit_bufsize * 4); - pending_buf_size = lit_bufsize * 4; - - d_buf = Math.floor(lit_bufsize / 2); - l_buf = (1 + 2) * lit_bufsize; - - level = _level; - - strategy = _strategy; - method = _method & 0xff; - - return deflateReset(strm); - }; - - that.deflateEnd = function() { - if (status != INIT_STATE && status != BUSY_STATE && status != FINISH_STATE) { - return Z_STREAM_ERROR; - } - // Deallocate in reverse order of allocations: - that.pending_buf = null; - head = null; - prev = null; - window = null; - // free - that.dstate = null; - return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; - }; - - that.deflateParams = function(strm, _level, _strategy) { - var err = Z_OK; - - if (_level == Z_DEFAULT_COMPRESSION) { - _level = 6; - } - if (_level < 0 || _level > 9 || _strategy < 0 || _strategy > Z_HUFFMAN_ONLY) { - return Z_STREAM_ERROR; - } - - if (config_table[level].func != config_table[_level].func && strm.total_in !== 0) { - // Flush the last buffer: - err = strm.deflate(Z_PARTIAL_FLUSH); - } - - if (level != _level) { - level = _level; - max_lazy_match = config_table[level].max_lazy; - good_match = config_table[level].good_length; - nice_match = config_table[level].nice_length; - max_chain_length = config_table[level].max_chain; - } - strategy = _strategy; - return err; - }; - - that.deflateSetDictionary = function(strm, dictionary, dictLength) { - var length = dictLength; - var n, index = 0; - - if (!dictionary || status != INIT_STATE) - return Z_STREAM_ERROR; - - if (length < MIN_MATCH) - return Z_OK; - if (length > w_size - MIN_LOOKAHEAD) { - length = w_size - MIN_LOOKAHEAD; - index = dictLength - length; // use the tail of the dictionary - } - window.set(dictionary.subarray(index, index + length), 0); - - strstart = length; - block_start = length; - - // Insert all strings in the hash table (except for the last two bytes). - // s->lookahead stays null, so s->ins_h will be recomputed at the next - // call of fill_window. - - ins_h = window[0] & 0xff; - ins_h = (((ins_h) << hash_shift) ^ (window[1] & 0xff)) & hash_mask; - - for (n = 0; n <= length - MIN_MATCH; n++) { - ins_h = (((ins_h) << hash_shift) ^ (window[(n) + (MIN_MATCH - 1)] & 0xff)) & hash_mask; - prev[n & w_mask] = head[ins_h]; - head[ins_h] = n; - } - return Z_OK; - }; - - that.deflate = function(_strm, flush) { - var i, header, level_flags, old_flush, bstate; - - if (flush > Z_FINISH || flush < 0) { - return Z_STREAM_ERROR; - } - - if (!_strm.next_out || (!_strm.next_in && _strm.avail_in !== 0) || (status == FINISH_STATE && flush != Z_FINISH)) { - _strm.msg = z_errmsg[Z_NEED_DICT - (Z_STREAM_ERROR)]; - return Z_STREAM_ERROR; - } - if (_strm.avail_out === 0) { - _strm.msg = z_errmsg[Z_NEED_DICT - (Z_BUF_ERROR)]; - return Z_BUF_ERROR; - } - - strm = _strm; // just in case - old_flush = last_flush; - last_flush = flush; - - // Write the zlib header - if (status == INIT_STATE) { - header = (Z_DEFLATED + ((w_bits - 8) << 4)) << 8; - level_flags = ((level - 1) & 0xff) >> 1; - - if (level_flags > 3) - level_flags = 3; - header |= (level_flags << 6); - if (strstart !== 0) - header |= PRESET_DICT; - header += 31 - (header % 31); - - status = BUSY_STATE; - putShortMSB(header); - } - - // Flush as much pending output as possible - if (that.pending !== 0) { - strm.flush_pending(); - if (strm.avail_out === 0) { - // console.log(" avail_out==0"); - // Since avail_out is 0, deflate will be called again with - // more output space, but possibly with both pending and - // avail_in equal to zero. There won't be anything to do, - // but this is not an error situation so make sure we - // return OK instead of BUF_ERROR at next call of deflate: - last_flush = -1; - return Z_OK; - } - - // Make sure there is something to do and avoid duplicate - // consecutive - // flushes. For repeated and useless calls with Z_FINISH, we keep - // returning Z_STREAM_END instead of Z_BUFF_ERROR. - } else if (strm.avail_in === 0 && flush <= old_flush && flush != Z_FINISH) { - strm.msg = z_errmsg[Z_NEED_DICT - (Z_BUF_ERROR)]; - return Z_BUF_ERROR; - } - - // User must not provide more input after the first FINISH: - if (status == FINISH_STATE && strm.avail_in !== 0) { - _strm.msg = z_errmsg[Z_NEED_DICT - (Z_BUF_ERROR)]; - return Z_BUF_ERROR; - } - - // Start a new block or continue the current one. - if (strm.avail_in !== 0 || lookahead !== 0 || (flush != Z_NO_FLUSH && status != FINISH_STATE)) { - bstate = -1; - switch (config_table[level].func) { - case STORED: - bstate = deflate_stored(flush); - break; - case FAST: - bstate = deflate_fast(flush); - break; - case SLOW: - bstate = deflate_slow(flush); - break; - default: - } - - if (bstate == FinishStarted || bstate == FinishDone) { - status = FINISH_STATE; - } - if (bstate == NeedMore || bstate == FinishStarted) { - if (strm.avail_out === 0) { - last_flush = -1; // avoid BUF_ERROR next call, see above - } - return Z_OK; - // If flush != Z_NO_FLUSH && avail_out === 0, the next call - // of deflate should use the same flush parameter to make sure - // that the flush is complete. So we don't have to output an - // empty block here, this will be done at next call. This also - // ensures that for a very small output buffer, we emit at most - // one empty block. - } - - if (bstate == BlockDone) { - if (flush == Z_PARTIAL_FLUSH) { - _tr_align(); - } else { // FULL_FLUSH or SYNC_FLUSH - _tr_stored_block(0, 0, false); - // For a full flush, this empty block will be recognized - // as a special marker by inflate_sync(). - if (flush == Z_FULL_FLUSH) { - // state.head[s.hash_size-1]=0; - for (i = 0; i < hash_size/*-1*/; i++) - // forget history - head[i] = 0; - } - } - strm.flush_pending(); - if (strm.avail_out === 0) { - last_flush = -1; // avoid BUF_ERROR at next call, see above - return Z_OK; - } - } - } - - if (flush != Z_FINISH) - return Z_OK; - return Z_STREAM_END; - }; - } - - // ZStream - - function ZStream() { - var that = this; - that.next_in_index = 0; - that.next_out_index = 0; - // that.next_in; // next input byte - that.avail_in = 0; // number of bytes available at next_in - that.total_in = 0; // total nb of input bytes read so far - // that.next_out; // next output byte should be put there - that.avail_out = 0; // remaining free space at next_out - that.total_out = 0; // total nb of bytes output so far - // that.msg; - // that.dstate; - } - - ZStream.prototype = { - deflateInit : function(level, bits) { - var that = this; - that.dstate = new Deflate(); - if (!bits) - bits = MAX_BITS; - return that.dstate.deflateInit(that, level, bits); - }, - - deflate : function(flush) { - var that = this; - if (!that.dstate) { - return Z_STREAM_ERROR; - } - return that.dstate.deflate(that, flush); - }, - - deflateEnd : function() { - var that = this; - if (!that.dstate) - return Z_STREAM_ERROR; - var ret = that.dstate.deflateEnd(); - that.dstate = null; - return ret; - }, - - deflateParams : function(level, strategy) { - var that = this; - if (!that.dstate) - return Z_STREAM_ERROR; - return that.dstate.deflateParams(that, level, strategy); - }, - - deflateSetDictionary : function(dictionary, dictLength) { - var that = this; - if (!that.dstate) - return Z_STREAM_ERROR; - return that.dstate.deflateSetDictionary(that, dictionary, dictLength); - }, - - // Read a new buffer from the current input stream, update the - // total number of bytes read. All deflate() input goes through - // this function so some applications may wish to modify it to avoid - // allocating a large strm->next_in buffer and copying from it. - // (See also flush_pending()). - read_buf : function(buf, start, size) { - var that = this; - var len = that.avail_in; - if (len > size) - len = size; - if (len === 0) - return 0; - that.avail_in -= len; - buf.set(that.next_in.subarray(that.next_in_index, that.next_in_index + len), start); - that.next_in_index += len; - that.total_in += len; - return len; - }, - - // Flush as much pending output as possible. All deflate() output goes - // through this function so some applications may wish to modify it - // to avoid allocating a large strm->next_out buffer and copying into it. - // (See also read_buf()). - flush_pending : function() { - var that = this; - var len = that.dstate.pending; - - if (len > that.avail_out) - len = that.avail_out; - if (len === 0) - return; - - // if (that.dstate.pending_buf.length <= that.dstate.pending_out || that.next_out.length <= that.next_out_index - // || that.dstate.pending_buf.length < (that.dstate.pending_out + len) || that.next_out.length < (that.next_out_index + - // len)) { - // console.log(that.dstate.pending_buf.length + ", " + that.dstate.pending_out + ", " + that.next_out.length + ", " + - // that.next_out_index + ", " + len); - // console.log("avail_out=" + that.avail_out); - // } - - that.next_out.set(that.dstate.pending_buf.subarray(that.dstate.pending_out, that.dstate.pending_out + len), that.next_out_index); - - that.next_out_index += len; - that.dstate.pending_out += len; - that.total_out += len; - that.avail_out -= len; - that.dstate.pending -= len; - if (that.dstate.pending === 0) { - that.dstate.pending_out = 0; - } - } - }; - - // Deflater - - function Deflater(level) { - var that = this; - var z = new ZStream(); - var bufsize = 512; - var flush = Z_NO_FLUSH; - var buf = new Uint8Array(bufsize); - - if (typeof level == "undefined") - level = Z_DEFAULT_COMPRESSION; - z.deflateInit(level); - z.next_out = buf; - - that.append = function(data, onprogress) { - var err, buffers = [], lastIndex = 0, bufferIndex = 0, bufferSize = 0, array; - if (!data.length) - return; - z.next_in_index = 0; - z.next_in = data; - z.avail_in = data.length; - do { - z.next_out_index = 0; - z.avail_out = bufsize; - err = z.deflate(flush); - if (err != Z_OK) - throw "deflating: " + z.msg; - if (z.next_out_index) - if (z.next_out_index == bufsize) - buffers.push(new Uint8Array(buf)); - else - buffers.push(new Uint8Array(buf.subarray(0, z.next_out_index))); - bufferSize += z.next_out_index; - if (onprogress && z.next_in_index > 0 && z.next_in_index != lastIndex) { - onprogress(z.next_in_index); - lastIndex = z.next_in_index; - } - } while (z.avail_in > 0 || z.avail_out === 0); - array = new Uint8Array(bufferSize); - buffers.forEach(function(chunk) { - array.set(chunk, bufferIndex); - bufferIndex += chunk.length; - }); - return array; - }; - that.flush = function() { - var err, buffers = [], bufferIndex = 0, bufferSize = 0, array; - do { - z.next_out_index = 0; - z.avail_out = bufsize; - err = z.deflate(Z_FINISH); - if (err != Z_STREAM_END && err != Z_OK) - throw "deflating: " + z.msg; - if (bufsize - z.avail_out > 0) - buffers.push(new Uint8Array(buf.subarray(0, z.next_out_index))); - bufferSize += z.next_out_index; - } while (z.avail_in > 0 || z.avail_out === 0); - z.deflateEnd(); - array = new Uint8Array(bufferSize); - buffers.forEach(function(chunk) { - array.set(chunk, bufferIndex); - bufferIndex += chunk.length; - }); - return array; - }; - } - - var deflater; - - if (obj.zip) - obj.zip.Deflater = Deflater; - else { - deflater = new Deflater(); - obj.addEventListener("message", function(event) { - var message = event.data; - if (message.init) { - deflater = new Deflater(message.level); - obj.postMessage({ - oninit : true - }); - } - if (message.append) - obj.postMessage({ - onappend : true, - data : deflater.append(message.data, function(current) { - obj.postMessage({ - progress : true, - current : current - }); - }) - }); - if (message.flush) - obj.postMessage({ - onflush : true, - data : deflater.flush() - }); - }, false); - } - -})(this); diff --git a/libs/zip/inflate.js b/libs/zip/inflate.js deleted file mode 100644 index cc0e01213..000000000 --- a/libs/zip/inflate.js +++ /dev/null @@ -1,2163 +0,0 @@ -/* - Copyright (c) 2013 Gildas Lormeau. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the distribution. - - 3. The names of the authors may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, - INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* - * This program is based on JZlib 1.0.2 ymnk, JCraft,Inc. - * JZlib is based on zlib-1.1.3, so all credit should go authors - * Jean-loup Gailly(jloup@gzip.org) and Mark Adler(madler@alumni.caltech.edu) - * and contributors of zlib. - */ - -(function(obj) { - - // Global - var MAX_BITS = 15; - - var Z_OK = 0; - var Z_STREAM_END = 1; - var Z_NEED_DICT = 2; - var Z_STREAM_ERROR = -2; - var Z_DATA_ERROR = -3; - var Z_MEM_ERROR = -4; - var Z_BUF_ERROR = -5; - - var inflate_mask = [ 0x00000000, 0x00000001, 0x00000003, 0x00000007, 0x0000000f, 0x0000001f, 0x0000003f, 0x0000007f, 0x000000ff, 0x000001ff, 0x000003ff, - 0x000007ff, 0x00000fff, 0x00001fff, 0x00003fff, 0x00007fff, 0x0000ffff ]; - - var MANY = 1440; - - // JZlib version : "1.0.2" - var Z_NO_FLUSH = 0; - var Z_FINISH = 4; - - // InfTree - var fixed_bl = 9; - var fixed_bd = 5; - - var fixed_tl = [ 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, 192, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 160, 0, 8, 0, - 0, 8, 128, 0, 8, 64, 0, 9, 224, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 144, 83, 7, 59, 0, 8, 120, 0, 8, 56, 0, 9, 208, 81, 7, 17, 0, 8, 104, 0, 8, 40, - 0, 9, 176, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 240, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 200, 81, 7, 13, - 0, 8, 100, 0, 8, 36, 0, 9, 168, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 232, 80, 7, 8, 0, 8, 92, 0, 8, 28, 0, 9, 152, 84, 7, 83, 0, 8, 124, 0, 8, 60, - 0, 9, 216, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 184, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, 248, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, - 35, 0, 8, 114, 0, 8, 50, 0, 9, 196, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 164, 0, 8, 2, 0, 8, 130, 0, 8, 66, 0, 9, 228, 80, 7, 7, 0, 8, 90, 0, 8, - 26, 0, 9, 148, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 212, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, 180, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 244, 80, - 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 204, 81, 7, 15, 0, 8, 102, 0, 8, 38, 0, 9, 172, 0, 8, 6, 0, 8, 134, 0, - 8, 70, 0, 9, 236, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 156, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, 220, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 188, 0, - 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 252, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, 8, 113, 0, 8, 49, 0, 9, 194, 80, 7, 10, 0, 8, 97, - 0, 8, 33, 0, 9, 162, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 226, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, 146, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 210, - 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 178, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 242, 80, 7, 4, 0, 8, 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, - 0, 8, 53, 0, 9, 202, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 170, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, 234, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 154, - 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 218, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 186, 0, 8, 13, 0, 8, 141, 0, 8, 77, 0, 9, 250, 80, 7, 3, 0, 8, 83, - 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 198, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, 166, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 230, - 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 150, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 214, 82, 7, 19, 0, 8, 107, 0, 8, 43, 0, 9, 182, 0, 8, 11, 0, 8, 139, - 0, 8, 75, 0, 9, 246, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, 206, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 174, - 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 238, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 158, 84, 7, 99, 0, 8, 127, 0, 8, 63, 0, 9, 222, 82, 7, 27, 0, 8, 111, - 0, 8, 47, 0, 9, 190, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 254, 96, 7, 256, 0, 8, 80, 0, 8, 16, 84, 8, 115, 82, 7, 31, 0, 8, 112, 0, 8, 48, 0, 9, - 193, 80, 7, 10, 0, 8, 96, 0, 8, 32, 0, 9, 161, 0, 8, 0, 0, 8, 128, 0, 8, 64, 0, 9, 225, 80, 7, 6, 0, 8, 88, 0, 8, 24, 0, 9, 145, 83, 7, 59, 0, 8, - 120, 0, 8, 56, 0, 9, 209, 81, 7, 17, 0, 8, 104, 0, 8, 40, 0, 9, 177, 0, 8, 8, 0, 8, 136, 0, 8, 72, 0, 9, 241, 80, 7, 4, 0, 8, 84, 0, 8, 20, 85, 8, - 227, 83, 7, 43, 0, 8, 116, 0, 8, 52, 0, 9, 201, 81, 7, 13, 0, 8, 100, 0, 8, 36, 0, 9, 169, 0, 8, 4, 0, 8, 132, 0, 8, 68, 0, 9, 233, 80, 7, 8, 0, 8, - 92, 0, 8, 28, 0, 9, 153, 84, 7, 83, 0, 8, 124, 0, 8, 60, 0, 9, 217, 82, 7, 23, 0, 8, 108, 0, 8, 44, 0, 9, 185, 0, 8, 12, 0, 8, 140, 0, 8, 76, 0, 9, - 249, 80, 7, 3, 0, 8, 82, 0, 8, 18, 85, 8, 163, 83, 7, 35, 0, 8, 114, 0, 8, 50, 0, 9, 197, 81, 7, 11, 0, 8, 98, 0, 8, 34, 0, 9, 165, 0, 8, 2, 0, 8, - 130, 0, 8, 66, 0, 9, 229, 80, 7, 7, 0, 8, 90, 0, 8, 26, 0, 9, 149, 84, 7, 67, 0, 8, 122, 0, 8, 58, 0, 9, 213, 82, 7, 19, 0, 8, 106, 0, 8, 42, 0, 9, - 181, 0, 8, 10, 0, 8, 138, 0, 8, 74, 0, 9, 245, 80, 7, 5, 0, 8, 86, 0, 8, 22, 192, 8, 0, 83, 7, 51, 0, 8, 118, 0, 8, 54, 0, 9, 205, 81, 7, 15, 0, 8, - 102, 0, 8, 38, 0, 9, 173, 0, 8, 6, 0, 8, 134, 0, 8, 70, 0, 9, 237, 80, 7, 9, 0, 8, 94, 0, 8, 30, 0, 9, 157, 84, 7, 99, 0, 8, 126, 0, 8, 62, 0, 9, - 221, 82, 7, 27, 0, 8, 110, 0, 8, 46, 0, 9, 189, 0, 8, 14, 0, 8, 142, 0, 8, 78, 0, 9, 253, 96, 7, 256, 0, 8, 81, 0, 8, 17, 85, 8, 131, 82, 7, 31, 0, - 8, 113, 0, 8, 49, 0, 9, 195, 80, 7, 10, 0, 8, 97, 0, 8, 33, 0, 9, 163, 0, 8, 1, 0, 8, 129, 0, 8, 65, 0, 9, 227, 80, 7, 6, 0, 8, 89, 0, 8, 25, 0, 9, - 147, 83, 7, 59, 0, 8, 121, 0, 8, 57, 0, 9, 211, 81, 7, 17, 0, 8, 105, 0, 8, 41, 0, 9, 179, 0, 8, 9, 0, 8, 137, 0, 8, 73, 0, 9, 243, 80, 7, 4, 0, 8, - 85, 0, 8, 21, 80, 8, 258, 83, 7, 43, 0, 8, 117, 0, 8, 53, 0, 9, 203, 81, 7, 13, 0, 8, 101, 0, 8, 37, 0, 9, 171, 0, 8, 5, 0, 8, 133, 0, 8, 69, 0, 9, - 235, 80, 7, 8, 0, 8, 93, 0, 8, 29, 0, 9, 155, 84, 7, 83, 0, 8, 125, 0, 8, 61, 0, 9, 219, 82, 7, 23, 0, 8, 109, 0, 8, 45, 0, 9, 187, 0, 8, 13, 0, 8, - 141, 0, 8, 77, 0, 9, 251, 80, 7, 3, 0, 8, 83, 0, 8, 19, 85, 8, 195, 83, 7, 35, 0, 8, 115, 0, 8, 51, 0, 9, 199, 81, 7, 11, 0, 8, 99, 0, 8, 35, 0, 9, - 167, 0, 8, 3, 0, 8, 131, 0, 8, 67, 0, 9, 231, 80, 7, 7, 0, 8, 91, 0, 8, 27, 0, 9, 151, 84, 7, 67, 0, 8, 123, 0, 8, 59, 0, 9, 215, 82, 7, 19, 0, 8, - 107, 0, 8, 43, 0, 9, 183, 0, 8, 11, 0, 8, 139, 0, 8, 75, 0, 9, 247, 80, 7, 5, 0, 8, 87, 0, 8, 23, 192, 8, 0, 83, 7, 51, 0, 8, 119, 0, 8, 55, 0, 9, - 207, 81, 7, 15, 0, 8, 103, 0, 8, 39, 0, 9, 175, 0, 8, 7, 0, 8, 135, 0, 8, 71, 0, 9, 239, 80, 7, 9, 0, 8, 95, 0, 8, 31, 0, 9, 159, 84, 7, 99, 0, 8, - 127, 0, 8, 63, 0, 9, 223, 82, 7, 27, 0, 8, 111, 0, 8, 47, 0, 9, 191, 0, 8, 15, 0, 8, 143, 0, 8, 79, 0, 9, 255 ]; - var fixed_td = [ 80, 5, 1, 87, 5, 257, 83, 5, 17, 91, 5, 4097, 81, 5, 5, 89, 5, 1025, 85, 5, 65, 93, 5, 16385, 80, 5, 3, 88, 5, 513, 84, 5, 33, 92, 5, - 8193, 82, 5, 9, 90, 5, 2049, 86, 5, 129, 192, 5, 24577, 80, 5, 2, 87, 5, 385, 83, 5, 25, 91, 5, 6145, 81, 5, 7, 89, 5, 1537, 85, 5, 97, 93, 5, - 24577, 80, 5, 4, 88, 5, 769, 84, 5, 49, 92, 5, 12289, 82, 5, 13, 90, 5, 3073, 86, 5, 193, 192, 5, 24577 ]; - - // Tables for deflate from PKZIP's appnote.txt. - var cplens = [ // Copy lengths for literal codes 257..285 - 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0 ]; - - // see note #13 above about 258 - var cplext = [ // Extra bits for literal codes 257..285 - 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 112, 112 // 112==invalid - ]; - - var cpdist = [ // Copy offsets for distance codes 0..29 - 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ]; - - var cpdext = [ // Extra bits for distance codes - 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13 ]; - - // If BMAX needs to be larger than 16, then h and x[] should be uLong. - var BMAX = 15; // maximum bit length of any code - - function InfTree() { - var that = this; - - var hn; // hufts used in space - var v; // work area for huft_build - var c; // bit length count table - var r; // table entry for structure assignment - var u; // table stack - var x; // bit offsets, then code stack - - function huft_build(b, // code lengths in bits (all assumed <= - // BMAX) - bindex, n, // number of codes (assumed <= 288) - s, // number of simple-valued codes (0..s-1) - d, // list of base values for non-simple codes - e, // list of extra bits for non-simple codes - t, // result: starting table - m, // maximum lookup bits, returns actual - hp,// space for trees - hn,// hufts used in space - v // working area: values in order of bit length - ) { - // Given a list of code lengths and a maximum table size, make a set of - // tables to decode that set of codes. Return Z_OK on success, - // Z_BUF_ERROR - // if the given code set is incomplete (the tables are still built in - // this - // case), Z_DATA_ERROR if the input is invalid (an over-subscribed set - // of - // lengths), or Z_MEM_ERROR if not enough memory. - - var a; // counter for codes of length k - var f; // i repeats in table every f entries - var g; // maximum code length - var h; // table level - var i; // counter, current code - var j; // counter - var k; // number of bits in current code - var l; // bits per table (returned in m) - var mask; // (1 << w) - 1, to avoid cc -O bug on HP - var p; // pointer into c[], b[], or v[] - var q; // points to current table - var w; // bits before this table == (l * h) - var xp; // pointer into x - var y; // number of dummy codes added - var z; // number of entries in current table - - // Generate counts for each bit length - - p = 0; - i = n; - do { - c[b[bindex + p]]++; - p++; - i--; // assume all entries <= BMAX - } while (i !== 0); - - if (c[0] == n) { // null input--all zero length codes - t[0] = -1; - m[0] = 0; - return Z_OK; - } - - // Find minimum and maximum length, bound *m by those - l = m[0]; - for (j = 1; j <= BMAX; j++) - if (c[j] !== 0) - break; - k = j; // minimum code length - if (l < j) { - l = j; - } - for (i = BMAX; i !== 0; i--) { - if (c[i] !== 0) - break; - } - g = i; // maximum code length - if (l > i) { - l = i; - } - m[0] = l; - - // Adjust last length count to fill out codes, if needed - for (y = 1 << j; j < i; j++, y <<= 1) { - if ((y -= c[j]) < 0) { - return Z_DATA_ERROR; - } - } - if ((y -= c[i]) < 0) { - return Z_DATA_ERROR; - } - c[i] += y; - - // Generate starting offsets into the value table for each length - x[1] = j = 0; - p = 1; - xp = 2; - while (--i !== 0) { // note that i == g from above - x[xp] = (j += c[p]); - xp++; - p++; - } - - // Make a table of values in order of bit lengths - i = 0; - p = 0; - do { - if ((j = b[bindex + p]) !== 0) { - v[x[j]++] = i; - } - p++; - } while (++i < n); - n = x[g]; // set n to length of v - - // Generate the Huffman codes and for each, make the table entries - x[0] = i = 0; // first Huffman code is zero - p = 0; // grab values in bit order - h = -1; // no tables yet--level -1 - w = -l; // bits decoded == (l * h) - u[0] = 0; // just to keep compilers happy - q = 0; // ditto - z = 0; // ditto - - // go through the bit lengths (k already is bits in shortest code) - for (; k <= g; k++) { - a = c[k]; - while (a-- !== 0) { - // here i is the Huffman code of length k bits for value *p - // make tables up to required level - while (k > w + l) { - h++; - w += l; // previous table always l bits - // compute minimum size table less than or equal to l bits - z = g - w; - z = (z > l) ? l : z; // table size upper limit - if ((f = 1 << (j = k - w)) > a + 1) { // try a k-w bit table - // too few codes for - // k-w bit table - f -= a + 1; // deduct codes from patterns left - xp = k; - if (j < z) { - while (++j < z) { // try smaller tables up to z bits - if ((f <<= 1) <= c[++xp]) - break; // enough codes to use up j bits - f -= c[xp]; // else deduct codes from patterns - } - } - } - z = 1 << j; // table entries for j-bit table - - // allocate new table - if (hn[0] + z > MANY) { // (note: doesn't matter for fixed) - return Z_DATA_ERROR; // overflow of MANY - } - u[h] = q = /* hp+ */hn[0]; // DEBUG - hn[0] += z; - - // connect to last table, if there is one - if (h !== 0) { - x[h] = i; // save pattern for backing up - r[0] = /* (byte) */j; // bits in this table - r[1] = /* (byte) */l; // bits to dump before this table - j = i >>> (w - l); - r[2] = /* (int) */(q - u[h - 1] - j); // offset to this table - hp.set(r, (u[h - 1] + j) * 3); - // to - // last - // table - } else { - t[0] = q; // first table is returned result - } - } - - // set up table entry in r - r[1] = /* (byte) */(k - w); - if (p >= n) { - r[0] = 128 + 64; // out of values--invalid code - } else if (v[p] < s) { - r[0] = /* (byte) */(v[p] < 256 ? 0 : 32 + 64); // 256 is - // end-of-block - r[2] = v[p++]; // simple code is just the value - } else { - r[0] = /* (byte) */(e[v[p] - s] + 16 + 64); // non-simple--look - // up in lists - r[2] = d[v[p++] - s]; - } - - // fill code-like entries with r - f = 1 << (k - w); - for (j = i >>> w; j < z; j += f) { - hp.set(r, (q + j) * 3); - } - - // backwards increment the k-bit code i - for (j = 1 << (k - 1); (i & j) !== 0; j >>>= 1) { - i ^= j; - } - i ^= j; - - // backup over finished tables - mask = (1 << w) - 1; // needed on HP, cc -O bug - while ((i & mask) != x[h]) { - h--; // don't need to update q - w -= l; - mask = (1 << w) - 1; - } - } - } - // Return Z_BUF_ERROR if we were given an incomplete table - return y !== 0 && g != 1 ? Z_BUF_ERROR : Z_OK; - } - - function initWorkArea(vsize) { - var i; - if (!hn) { - hn = []; // []; //new Array(1); - v = []; // new Array(vsize); - c = new Int32Array(BMAX + 1); // new Array(BMAX + 1); - r = []; // new Array(3); - u = new Int32Array(BMAX); // new Array(BMAX); - x = new Int32Array(BMAX + 1); // new Array(BMAX + 1); - } - if (v.length < vsize) { - v = []; // new Array(vsize); - } - for (i = 0; i < vsize; i++) { - v[i] = 0; - } - for (i = 0; i < BMAX + 1; i++) { - c[i] = 0; - } - for (i = 0; i < 3; i++) { - r[i] = 0; - } - // for(int i=0; i 257)) { - if (result == Z_DATA_ERROR) { - z.msg = "oversubscribed distance tree"; - } else if (result == Z_BUF_ERROR) { - z.msg = "incomplete distance tree"; - result = Z_DATA_ERROR; - } else if (result != Z_MEM_ERROR) { - z.msg = "empty distance tree with lengths"; - result = Z_DATA_ERROR; - } - return result; - } - - return Z_OK; - }; - - } - - InfTree.inflate_trees_fixed = function(bl, // literal desired/actual bit depth - bd, // distance desired/actual bit depth - tl,// literal/length tree result - td// distance tree result - ) { - bl[0] = fixed_bl; - bd[0] = fixed_bd; - tl[0] = fixed_tl; - td[0] = fixed_td; - return Z_OK; - }; - - // InfCodes - - // waiting for "i:"=input, - // "o:"=output, - // "x:"=nothing - var START = 0; // x: set up for LEN - var LEN = 1; // i: get length/literal/eob next - var LENEXT = 2; // i: getting length extra (have base) - var DIST = 3; // i: get distance next - var DISTEXT = 4;// i: getting distance extra - var COPY = 5; // o: copying bytes in window, waiting - // for space - var LIT = 6; // o: got literal, waiting for output - // space - var WASH = 7; // o: got eob, possibly still output - // waiting - var END = 8; // x: got eob and all data flushed - var BADCODE = 9;// x: got error - - function InfCodes() { - var that = this; - - var mode; // current inflate_codes mode - - // mode dependent information - var len = 0; - - var tree; // pointer into tree - var tree_index = 0; - var need = 0; // bits needed - - var lit = 0; - - // if EXT or COPY, where and how much - var get = 0; // bits to get for extra - var dist = 0; // distance back to copy from - - var lbits = 0; // ltree bits decoded per branch - var dbits = 0; // dtree bits decoder per branch - var ltree; // literal/length/eob tree - var ltree_index = 0; // literal/length/eob tree - var dtree; // distance tree - var dtree_index = 0; // distance tree - - // Called with number of bytes left to write in window at least 258 - // (the maximum string length) and number of input bytes available - // at least ten. The ten bytes are six bytes for the longest length/ - // distance pair plus four bytes for overloading the bit buffer. - - function inflate_fast(bl, bd, tl, tl_index, td, td_index, s, z) { - var t; // temporary pointer - var tp; // temporary pointer - var tp_index; // temporary pointer - var e; // extra bits or operation - var b; // bit buffer - var k; // bits in bit buffer - var p; // input data pointer - var n; // bytes available there - var q; // output window write pointer - var m; // bytes to end of window or read pointer - var ml; // mask for literal/length tree - var md; // mask for distance tree - var c; // bytes to copy - var d; // distance back to copy from - var r; // copy source pointer - - var tp_index_t_3; // (tp_index+t)*3 - - // load input, output, bit values - p = z.next_in_index; - n = z.avail_in; - b = s.bitb; - k = s.bitk; - q = s.write; - m = q < s.read ? s.read - q - 1 : s.end - q; - - // initialize masks - ml = inflate_mask[bl]; - md = inflate_mask[bd]; - - // do until not enough input or output space for fast loop - do { // assume called with m >= 258 && n >= 10 - // get literal/length code - while (k < (20)) { // max bits for literal/length code - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - t = b & ml; - tp = tl; - tp_index = tl_index; - tp_index_t_3 = (tp_index + t) * 3; - if ((e = tp[tp_index_t_3]) === 0) { - b >>= (tp[tp_index_t_3 + 1]); - k -= (tp[tp_index_t_3 + 1]); - - s.window[q++] = /* (byte) */tp[tp_index_t_3 + 2]; - m--; - continue; - } - do { - - b >>= (tp[tp_index_t_3 + 1]); - k -= (tp[tp_index_t_3 + 1]); - - if ((e & 16) !== 0) { - e &= 15; - c = tp[tp_index_t_3 + 2] + (/* (int) */b & inflate_mask[e]); - - b >>= e; - k -= e; - - // decode distance base of block to copy - while (k < (15)) { // max bits for distance code - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - t = b & md; - tp = td; - tp_index = td_index; - tp_index_t_3 = (tp_index + t) * 3; - e = tp[tp_index_t_3]; - - do { - - b >>= (tp[tp_index_t_3 + 1]); - k -= (tp[tp_index_t_3 + 1]); - - if ((e & 16) !== 0) { - // get extra bits to add to distance base - e &= 15; - while (k < (e)) { // get extra bits (up to 13) - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - d = tp[tp_index_t_3 + 2] + (b & inflate_mask[e]); - - b >>= (e); - k -= (e); - - // do the copy - m -= c; - if (q >= d) { // offset before dest - // just copy - r = q - d; - if (q - r > 0 && 2 > (q - r)) { - s.window[q++] = s.window[r++]; // minimum - // count is - // three, - s.window[q++] = s.window[r++]; // so unroll - // loop a - // little - c -= 2; - } else { - s.window.set(s.window.subarray(r, r + 2), q); - q += 2; - r += 2; - c -= 2; - } - } else { // else offset after destination - r = q - d; - do { - r += s.end; // force pointer in window - } while (r < 0); // covers invalid distances - e = s.end - r; - if (c > e) { // if source crosses, - c -= e; // wrapped copy - if (q - r > 0 && e > (q - r)) { - do { - s.window[q++] = s.window[r++]; - } while (--e !== 0); - } else { - s.window.set(s.window.subarray(r, r + e), q); - q += e; - r += e; - e = 0; - } - r = 0; // copy rest from start of window - } - - } - - // copy all or what's left - if (q - r > 0 && c > (q - r)) { - do { - s.window[q++] = s.window[r++]; - } while (--c !== 0); - } else { - s.window.set(s.window.subarray(r, r + c), q); - q += c; - r += c; - c = 0; - } - break; - } else if ((e & 64) === 0) { - t += tp[tp_index_t_3 + 2]; - t += (b & inflate_mask[e]); - tp_index_t_3 = (tp_index + t) * 3; - e = tp[tp_index_t_3]; - } else { - z.msg = "invalid distance code"; - - c = z.avail_in - n; - c = (k >> 3) < c ? k >> 3 : c; - n += c; - p -= c; - k -= c << 3; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - - return Z_DATA_ERROR; - } - } while (true); - break; - } - - if ((e & 64) === 0) { - t += tp[tp_index_t_3 + 2]; - t += (b & inflate_mask[e]); - tp_index_t_3 = (tp_index + t) * 3; - if ((e = tp[tp_index_t_3]) === 0) { - - b >>= (tp[tp_index_t_3 + 1]); - k -= (tp[tp_index_t_3 + 1]); - - s.window[q++] = /* (byte) */tp[tp_index_t_3 + 2]; - m--; - break; - } - } else if ((e & 32) !== 0) { - - c = z.avail_in - n; - c = (k >> 3) < c ? k >> 3 : c; - n += c; - p -= c; - k -= c << 3; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - - return Z_STREAM_END; - } else { - z.msg = "invalid literal/length code"; - - c = z.avail_in - n; - c = (k >> 3) < c ? k >> 3 : c; - n += c; - p -= c; - k -= c << 3; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - - return Z_DATA_ERROR; - } - } while (true); - } while (m >= 258 && n >= 10); - - // not enough input or output--restore pointers and return - c = z.avail_in - n; - c = (k >> 3) < c ? k >> 3 : c; - n += c; - p -= c; - k -= c << 3; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - - return Z_OK; - } - - that.init = function(bl, bd, tl, tl_index, td, td_index) { - mode = START; - lbits = /* (byte) */bl; - dbits = /* (byte) */bd; - ltree = tl; - ltree_index = tl_index; - dtree = td; - dtree_index = td_index; - tree = null; - }; - - that.proc = function(s, z, r) { - var j; // temporary storage - var tindex; // temporary pointer - var e; // extra bits or operation - var b = 0; // bit buffer - var k = 0; // bits in bit buffer - var p = 0; // input data pointer - var n; // bytes available there - var q; // output window write pointer - var m; // bytes to end of window or read pointer - var f; // pointer to copy strings from - - // copy input/output information to locals (UPDATE macro restores) - p = z.next_in_index; - n = z.avail_in; - b = s.bitb; - k = s.bitk; - q = s.write; - m = q < s.read ? s.read - q - 1 : s.end - q; - - // process input and output based on current state - while (true) { - switch (mode) { - // waiting for "i:"=input, "o:"=output, "x:"=nothing - case START: // x: set up for LEN - if (m >= 258 && n >= 10) { - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - r = inflate_fast(lbits, dbits, ltree, ltree_index, dtree, dtree_index, s, z); - - p = z.next_in_index; - n = z.avail_in; - b = s.bitb; - k = s.bitk; - q = s.write; - m = q < s.read ? s.read - q - 1 : s.end - q; - - if (r != Z_OK) { - mode = r == Z_STREAM_END ? WASH : BADCODE; - break; - } - } - need = lbits; - tree = ltree; - tree_index = ltree_index; - - mode = LEN; - case LEN: // i: get length/literal/eob next - j = need; - - while (k < (j)) { - if (n !== 0) - r = Z_OK; - else { - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - tindex = (tree_index + (b & inflate_mask[j])) * 3; - - b >>>= (tree[tindex + 1]); - k -= (tree[tindex + 1]); - - e = tree[tindex]; - - if (e === 0) { // literal - lit = tree[tindex + 2]; - mode = LIT; - break; - } - if ((e & 16) !== 0) { // length - get = e & 15; - len = tree[tindex + 2]; - mode = LENEXT; - break; - } - if ((e & 64) === 0) { // next table - need = e; - tree_index = tindex / 3 + tree[tindex + 2]; - break; - } - if ((e & 32) !== 0) { // end of block - mode = WASH; - break; - } - mode = BADCODE; // invalid code - z.msg = "invalid literal/length code"; - r = Z_DATA_ERROR; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - - case LENEXT: // i: getting length extra (have base) - j = get; - - while (k < (j)) { - if (n !== 0) - r = Z_OK; - else { - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - len += (b & inflate_mask[j]); - - b >>= j; - k -= j; - - need = dbits; - tree = dtree; - tree_index = dtree_index; - mode = DIST; - case DIST: // i: get distance next - j = need; - - while (k < (j)) { - if (n !== 0) - r = Z_OK; - else { - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - tindex = (tree_index + (b & inflate_mask[j])) * 3; - - b >>= tree[tindex + 1]; - k -= tree[tindex + 1]; - - e = (tree[tindex]); - if ((e & 16) !== 0) { // distance - get = e & 15; - dist = tree[tindex + 2]; - mode = DISTEXT; - break; - } - if ((e & 64) === 0) { // next table - need = e; - tree_index = tindex / 3 + tree[tindex + 2]; - break; - } - mode = BADCODE; // invalid code - z.msg = "invalid distance code"; - r = Z_DATA_ERROR; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - - case DISTEXT: // i: getting distance extra - j = get; - - while (k < (j)) { - if (n !== 0) - r = Z_OK; - else { - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - dist += (b & inflate_mask[j]); - - b >>= j; - k -= j; - - mode = COPY; - case COPY: // o: copying bytes in window, waiting for space - f = q - dist; - while (f < 0) { // modulo window size-"while" instead - f += s.end; // of "if" handles invalid distances - } - while (len !== 0) { - - if (m === 0) { - if (q == s.end && s.read !== 0) { - q = 0; - m = q < s.read ? s.read - q - 1 : s.end - q; - } - if (m === 0) { - s.write = q; - r = s.inflate_flush(z, r); - q = s.write; - m = q < s.read ? s.read - q - 1 : s.end - q; - - if (q == s.end && s.read !== 0) { - q = 0; - m = q < s.read ? s.read - q - 1 : s.end - q; - } - - if (m === 0) { - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - } - } - - s.window[q++] = s.window[f++]; - m--; - - if (f == s.end) - f = 0; - len--; - } - mode = START; - break; - case LIT: // o: got literal, waiting for output space - if (m === 0) { - if (q == s.end && s.read !== 0) { - q = 0; - m = q < s.read ? s.read - q - 1 : s.end - q; - } - if (m === 0) { - s.write = q; - r = s.inflate_flush(z, r); - q = s.write; - m = q < s.read ? s.read - q - 1 : s.end - q; - - if (q == s.end && s.read !== 0) { - q = 0; - m = q < s.read ? s.read - q - 1 : s.end - q; - } - if (m === 0) { - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - } - } - r = Z_OK; - - s.window[q++] = /* (byte) */lit; - m--; - - mode = START; - break; - case WASH: // o: got eob, possibly more output - if (k > 7) { // return unused byte, if any - k -= 8; - n++; - p--; // can always return one - } - - s.write = q; - r = s.inflate_flush(z, r); - q = s.write; - m = q < s.read ? s.read - q - 1 : s.end - q; - - if (s.read != s.write) { - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - mode = END; - case END: - r = Z_STREAM_END; - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - - case BADCODE: // x: got error - - r = Z_DATA_ERROR; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - - default: - r = Z_STREAM_ERROR; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - } - }; - - that.free = function() { - // ZFREE(z, c); - }; - - } - - // InfBlocks - - // Table for deflate from PKZIP's appnote.txt. - var border = [ // Order of the bit length code lengths - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; - - var TYPE = 0; // get type bits (3, including end bit) - var LENS = 1; // get lengths for stored - var STORED = 2;// processing stored block - var TABLE = 3; // get table lengths - var BTREE = 4; // get bit lengths tree for a dynamic - // block - var DTREE = 5; // get length, distance trees for a - // dynamic block - var CODES = 6; // processing fixed or dynamic block - var DRY = 7; // output remaining window bytes - var DONELOCKS = 8; // finished last block, done - var BADBLOCKS = 9; // ot a data error--stuck here - - function InfBlocks(z, w) { - var that = this; - - var mode = TYPE; // current inflate_block mode - - var left = 0; // if STORED, bytes left to copy - - var table = 0; // table lengths (14 bits) - var index = 0; // index into blens (or border) - var blens; // bit lengths of codes - var bb = [ 0 ]; // bit length tree depth - var tb = [ 0 ]; // bit length decoding tree - - var codes = new InfCodes(); // if CODES, current state - - var last = 0; // true if this block is the last block - - var hufts = new Int32Array(MANY * 3); // single malloc for tree space - var check = 0; // check on output - var inftree = new InfTree(); - - that.bitk = 0; // bits in bit buffer - that.bitb = 0; // bit buffer - that.window = new Uint8Array(w); // sliding window - that.end = w; // one byte after sliding window - that.read = 0; // window read pointer - that.write = 0; // window write pointer - - that.reset = function(z, c) { - if (c) - c[0] = check; - // if (mode == BTREE || mode == DTREE) { - // } - if (mode == CODES) { - codes.free(z); - } - mode = TYPE; - that.bitk = 0; - that.bitb = 0; - that.read = that.write = 0; - }; - - that.reset(z, null); - - // copy as much as possible from the sliding window to the output area - that.inflate_flush = function(z, r) { - var n; - var p; - var q; - - // local copies of source and destination pointers - p = z.next_out_index; - q = that.read; - - // compute number of bytes to copy as far as end of window - n = /* (int) */((q <= that.write ? that.write : that.end) - q); - if (n > z.avail_out) - n = z.avail_out; - if (n !== 0 && r == Z_BUF_ERROR) - r = Z_OK; - - // update counters - z.avail_out -= n; - z.total_out += n; - - // copy as far as end of window - z.next_out.set(that.window.subarray(q, q + n), p); - p += n; - q += n; - - // see if more to copy at beginning of window - if (q == that.end) { - // wrap pointers - q = 0; - if (that.write == that.end) - that.write = 0; - - // compute bytes to copy - n = that.write - q; - if (n > z.avail_out) - n = z.avail_out; - if (n !== 0 && r == Z_BUF_ERROR) - r = Z_OK; - - // update counters - z.avail_out -= n; - z.total_out += n; - - // copy - z.next_out.set(that.window.subarray(q, q + n), p); - p += n; - q += n; - } - - // update pointers - z.next_out_index = p; - that.read = q; - - // done - return r; - }; - - that.proc = function(z, r) { - var t; // temporary storage - var b; // bit buffer - var k; // bits in bit buffer - var p; // input data pointer - var n; // bytes available there - var q; // output window write pointer - var m; // bytes to end of window or read pointer - - var i; - - // copy input/output information to locals (UPDATE macro restores) - // { - p = z.next_in_index; - n = z.avail_in; - b = that.bitb; - k = that.bitk; - // } - // { - q = that.write; - m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); - // } - - // process input based on current state - // DEBUG dtree - while (true) { - switch (mode) { - case TYPE: - - while (k < (3)) { - if (n !== 0) { - r = Z_OK; - } else { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - t = /* (int) */(b & 7); - last = t & 1; - - switch (t >>> 1) { - case 0: // stored - // { - b >>>= (3); - k -= (3); - // } - t = k & 7; // go to byte boundary - - // { - b >>>= (t); - k -= (t); - // } - mode = LENS; // get length of stored block - break; - case 1: // fixed - // { - var bl = []; // new Array(1); - var bd = []; // new Array(1); - var tl = [ [] ]; // new Array(1); - var td = [ [] ]; // new Array(1); - - InfTree.inflate_trees_fixed(bl, bd, tl, td); - codes.init(bl[0], bd[0], tl[0], 0, td[0], 0); - // } - - // { - b >>>= (3); - k -= (3); - // } - - mode = CODES; - break; - case 2: // dynamic - - // { - b >>>= (3); - k -= (3); - // } - - mode = TABLE; - break; - case 3: // illegal - - // { - b >>>= (3); - k -= (3); - // } - mode = BADBLOCKS; - z.msg = "invalid block type"; - r = Z_DATA_ERROR; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - break; - case LENS: - - while (k < (32)) { - if (n !== 0) { - r = Z_OK; - } else { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - if ((((~b) >>> 16) & 0xffff) != (b & 0xffff)) { - mode = BADBLOCKS; - z.msg = "invalid stored block lengths"; - r = Z_DATA_ERROR; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - left = (b & 0xffff); - b = k = 0; // dump bits - mode = left !== 0 ? STORED : (last !== 0 ? DRY : TYPE); - break; - case STORED: - if (n === 0) { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - - if (m === 0) { - if (q == that.end && that.read !== 0) { - q = 0; - m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); - } - if (m === 0) { - that.write = q; - r = that.inflate_flush(z, r); - q = that.write; - m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); - if (q == that.end && that.read !== 0) { - q = 0; - m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); - } - if (m === 0) { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - } - } - r = Z_OK; - - t = left; - if (t > n) - t = n; - if (t > m) - t = m; - that.window.set(z.read_buf(p, t), q); - p += t; - n -= t; - q += t; - m -= t; - if ((left -= t) !== 0) - break; - mode = last !== 0 ? DRY : TYPE; - break; - case TABLE: - - while (k < (14)) { - if (n !== 0) { - r = Z_OK; - } else { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - table = t = (b & 0x3fff); - if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) { - mode = BADBLOCKS; - z.msg = "too many length or distance symbols"; - r = Z_DATA_ERROR; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f); - if (!blens || blens.length < t) { - blens = []; // new Array(t); - } else { - for (i = 0; i < t; i++) { - blens[i] = 0; - } - } - - // { - b >>>= (14); - k -= (14); - // } - - index = 0; - mode = BTREE; - case BTREE: - while (index < 4 + (table >>> 10)) { - while (k < (3)) { - if (n !== 0) { - r = Z_OK; - } else { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - blens[border[index++]] = b & 7; - - // { - b >>>= (3); - k -= (3); - // } - } - - while (index < 19) { - blens[border[index++]] = 0; - } - - bb[0] = 7; - t = inftree.inflate_trees_bits(blens, bb, tb, hufts, z); - if (t != Z_OK) { - r = t; - if (r == Z_DATA_ERROR) { - blens = null; - mode = BADBLOCKS; - } - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - - index = 0; - mode = DTREE; - case DTREE: - while (true) { - t = table; - if (!(index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))) { - break; - } - - var j, c; - - t = bb[0]; - - while (k < (t)) { - if (n !== 0) { - r = Z_OK; - } else { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - // if (tb[0] == -1) { - // System.err.println("null..."); - // } - - t = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 1]; - c = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 2]; - - if (c < 16) { - b >>>= (t); - k -= (t); - blens[index++] = c; - } else { // c == 16..18 - i = c == 18 ? 7 : c - 14; - j = c == 18 ? 11 : 3; - - while (k < (t + i)) { - if (n !== 0) { - r = Z_OK; - } else { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - b >>>= (t); - k -= (t); - - j += (b & inflate_mask[i]); - - b >>>= (i); - k -= (i); - - i = index; - t = table; - if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || (c == 16 && i < 1)) { - blens = null; - mode = BADBLOCKS; - z.msg = "invalid bit length repeat"; - r = Z_DATA_ERROR; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - - c = c == 16 ? blens[i - 1] : 0; - do { - blens[i++] = c; - } while (--j !== 0); - index = i; - } - } - - tb[0] = -1; - // { - var bl_ = []; // new Array(1); - var bd_ = []; // new Array(1); - var tl_ = []; // new Array(1); - var td_ = []; // new Array(1); - bl_[0] = 9; // must be <= 9 for lookahead assumptions - bd_[0] = 6; // must be <= 9 for lookahead assumptions - - t = table; - t = inftree.inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), blens, bl_, bd_, tl_, td_, hufts, z); - - if (t != Z_OK) { - if (t == Z_DATA_ERROR) { - blens = null; - mode = BADBLOCKS; - } - r = t; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - codes.init(bl_[0], bd_[0], hufts, tl_[0], hufts, td_[0]); - // } - mode = CODES; - case CODES: - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - - if ((r = codes.proc(that, z, r)) != Z_STREAM_END) { - return that.inflate_flush(z, r); - } - r = Z_OK; - codes.free(z); - - p = z.next_in_index; - n = z.avail_in; - b = that.bitb; - k = that.bitk; - q = that.write; - m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); - - if (last === 0) { - mode = TYPE; - break; - } - mode = DRY; - case DRY: - that.write = q; - r = that.inflate_flush(z, r); - q = that.write; - m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); - if (that.read != that.write) { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - mode = DONELOCKS; - case DONELOCKS: - r = Z_STREAM_END; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - case BADBLOCKS: - r = Z_DATA_ERROR; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - - default: - r = Z_STREAM_ERROR; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - } - }; - - that.free = function(z) { - that.reset(z, null); - that.window = null; - hufts = null; - // ZFREE(z, s); - }; - - that.set_dictionary = function(d, start, n) { - that.window.set(d.subarray(start, start + n), 0); - that.read = that.write = n; - }; - - // Returns true if inflate is currently at the end of a block generated - // by Z_SYNC_FLUSH or Z_FULL_FLUSH. - that.sync_point = function() { - return mode == LENS ? 1 : 0; - }; - - } - - // Inflate - - // preset dictionary flag in zlib header - var PRESET_DICT = 0x20; - - var Z_DEFLATED = 8; - - var METHOD = 0; // waiting for method byte - var FLAG = 1; // waiting for flag byte - var DICT4 = 2; // four dictionary check bytes to go - var DICT3 = 3; // three dictionary check bytes to go - var DICT2 = 4; // two dictionary check bytes to go - var DICT1 = 5; // one dictionary check byte to go - var DICT0 = 6; // waiting for inflateSetDictionary - var BLOCKS = 7; // decompressing blocks - var DONE = 12; // finished check, done - var BAD = 13; // got an error--stay here - - var mark = [ 0, 0, 0xff, 0xff ]; - - function Inflate() { - var that = this; - - that.mode = 0; // current inflate mode - - // mode dependent information - that.method = 0; // if FLAGS, method byte - - // if CHECK, check values to compare - that.was = [ 0 ]; // new Array(1); // computed check value - that.need = 0; // stream check value - - // if BAD, inflateSync's marker bytes count - that.marker = 0; - - // mode independent information - that.wbits = 0; // log2(window size) (8..15, defaults to 15) - - // this.blocks; // current inflate_blocks state - - function inflateReset(z) { - if (!z || !z.istate) - return Z_STREAM_ERROR; - - z.total_in = z.total_out = 0; - z.msg = null; - z.istate.mode = BLOCKS; - z.istate.blocks.reset(z, null); - return Z_OK; - } - - that.inflateEnd = function(z) { - if (that.blocks) - that.blocks.free(z); - that.blocks = null; - // ZFREE(z, z->state); - return Z_OK; - }; - - that.inflateInit = function(z, w) { - z.msg = null; - that.blocks = null; - - // set window size - if (w < 8 || w > 15) { - that.inflateEnd(z); - return Z_STREAM_ERROR; - } - that.wbits = w; - - z.istate.blocks = new InfBlocks(z, 1 << w); - - // reset state - inflateReset(z); - return Z_OK; - }; - - that.inflate = function(z, f) { - var r; - var b; - - if (!z || !z.istate || !z.next_in) - return Z_STREAM_ERROR; - f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK; - r = Z_BUF_ERROR; - while (true) { - // System.out.println("mode: "+z.istate.mode); - switch (z.istate.mode) { - case METHOD: - - if (z.avail_in === 0) - return r; - r = f; - - z.avail_in--; - z.total_in++; - if (((z.istate.method = z.read_byte(z.next_in_index++)) & 0xf) != Z_DEFLATED) { - z.istate.mode = BAD; - z.msg = "unknown compression method"; - z.istate.marker = 5; // can't try inflateSync - break; - } - if ((z.istate.method >> 4) + 8 > z.istate.wbits) { - z.istate.mode = BAD; - z.msg = "invalid window size"; - z.istate.marker = 5; // can't try inflateSync - break; - } - z.istate.mode = FLAG; - case FLAG: - - if (z.avail_in === 0) - return r; - r = f; - - z.avail_in--; - z.total_in++; - b = (z.read_byte(z.next_in_index++)) & 0xff; - - if ((((z.istate.method << 8) + b) % 31) !== 0) { - z.istate.mode = BAD; - z.msg = "incorrect header check"; - z.istate.marker = 5; // can't try inflateSync - break; - } - - if ((b & PRESET_DICT) === 0) { - z.istate.mode = BLOCKS; - break; - } - z.istate.mode = DICT4; - case DICT4: - - if (z.avail_in === 0) - return r; - r = f; - - z.avail_in--; - z.total_in++; - z.istate.need = ((z.read_byte(z.next_in_index++) & 0xff) << 24) & 0xff000000; - z.istate.mode = DICT3; - case DICT3: - - if (z.avail_in === 0) - return r; - r = f; - - z.avail_in--; - z.total_in++; - z.istate.need += ((z.read_byte(z.next_in_index++) & 0xff) << 16) & 0xff0000; - z.istate.mode = DICT2; - case DICT2: - - if (z.avail_in === 0) - return r; - r = f; - - z.avail_in--; - z.total_in++; - z.istate.need += ((z.read_byte(z.next_in_index++) & 0xff) << 8) & 0xff00; - z.istate.mode = DICT1; - case DICT1: - - if (z.avail_in === 0) - return r; - r = f; - - z.avail_in--; - z.total_in++; - z.istate.need += (z.read_byte(z.next_in_index++) & 0xff); - z.istate.mode = DICT0; - return Z_NEED_DICT; - case DICT0: - z.istate.mode = BAD; - z.msg = "need dictionary"; - z.istate.marker = 0; // can try inflateSync - return Z_STREAM_ERROR; - case BLOCKS: - - r = z.istate.blocks.proc(z, r); - if (r == Z_DATA_ERROR) { - z.istate.mode = BAD; - z.istate.marker = 0; // can try inflateSync - break; - } - if (r == Z_OK) { - r = f; - } - if (r != Z_STREAM_END) { - return r; - } - r = f; - z.istate.blocks.reset(z, z.istate.was); - z.istate.mode = DONE; - case DONE: - return Z_STREAM_END; - case BAD: - return Z_DATA_ERROR; - default: - return Z_STREAM_ERROR; - } - } - }; - - that.inflateSetDictionary = function(z, dictionary, dictLength) { - var index = 0; - var length = dictLength; - if (!z || !z.istate || z.istate.mode != DICT0) - return Z_STREAM_ERROR; - - if (length >= (1 << z.istate.wbits)) { - length = (1 << z.istate.wbits) - 1; - index = dictLength - length; - } - z.istate.blocks.set_dictionary(dictionary, index, length); - z.istate.mode = BLOCKS; - return Z_OK; - }; - - that.inflateSync = function(z) { - var n; // number of bytes to look at - var p; // pointer to bytes - var m; // number of marker bytes found in a row - var r, w; // temporaries to save total_in and total_out - - // set up - if (!z || !z.istate) - return Z_STREAM_ERROR; - if (z.istate.mode != BAD) { - z.istate.mode = BAD; - z.istate.marker = 0; - } - if ((n = z.avail_in) === 0) - return Z_BUF_ERROR; - p = z.next_in_index; - m = z.istate.marker; - - // search - while (n !== 0 && m < 4) { - if (z.read_byte(p) == mark[m]) { - m++; - } else if (z.read_byte(p) !== 0) { - m = 0; - } else { - m = 4 - m; - } - p++; - n--; - } - - // restore - z.total_in += p - z.next_in_index; - z.next_in_index = p; - z.avail_in = n; - z.istate.marker = m; - - // return no joy or set up to restart on a new block - if (m != 4) { - return Z_DATA_ERROR; - } - r = z.total_in; - w = z.total_out; - inflateReset(z); - z.total_in = r; - z.total_out = w; - z.istate.mode = BLOCKS; - return Z_OK; - }; - - // Returns true if inflate is currently at the end of a block generated - // by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP - // implementation to provide an additional safety check. PPP uses - // Z_SYNC_FLUSH - // but removes the length bytes of the resulting empty stored block. When - // decompressing, PPP checks that at the end of input packet, inflate is - // waiting for these length bytes. - that.inflateSyncPoint = function(z) { - if (!z || !z.istate || !z.istate.blocks) - return Z_STREAM_ERROR; - return z.istate.blocks.sync_point(); - }; - } - - // ZStream - - function ZStream() { - } - - ZStream.prototype = { - inflateInit : function(bits) { - var that = this; - that.istate = new Inflate(); - if (!bits) - bits = MAX_BITS; - return that.istate.inflateInit(that, bits); - }, - - inflate : function(f) { - var that = this; - if (!that.istate) - return Z_STREAM_ERROR; - return that.istate.inflate(that, f); - }, - - inflateEnd : function() { - var that = this; - if (!that.istate) - return Z_STREAM_ERROR; - var ret = that.istate.inflateEnd(that); - that.istate = null; - return ret; - }, - - inflateSync : function() { - var that = this; - if (!that.istate) - return Z_STREAM_ERROR; - return that.istate.inflateSync(that); - }, - inflateSetDictionary : function(dictionary, dictLength) { - var that = this; - if (!that.istate) - return Z_STREAM_ERROR; - return that.istate.inflateSetDictionary(that, dictionary, dictLength); - }, - read_byte : function(start) { - var that = this; - return that.next_in.subarray(start, start + 1)[0]; - }, - read_buf : function(start, size) { - var that = this; - return that.next_in.subarray(start, start + size); - } - }; - - // Inflater - - function Inflater() { - var that = this; - var z = new ZStream(); - var bufsize = 512; - var flush = Z_NO_FLUSH; - var buf = new Uint8Array(bufsize); - var nomoreinput = false; - - z.inflateInit(); - z.next_out = buf; - - that.append = function(data, onprogress) { - var err, buffers = [], lastIndex = 0, bufferIndex = 0, bufferSize = 0, array; - if (data.length === 0) - return; - z.next_in_index = 0; - z.next_in = data; - z.avail_in = data.length; - do { - z.next_out_index = 0; - z.avail_out = bufsize; - if ((z.avail_in === 0) && (!nomoreinput)) { // if buffer is empty and more input is available, refill it - z.next_in_index = 0; - nomoreinput = true; - } - err = z.inflate(flush); - if (nomoreinput && (err == Z_BUF_ERROR)) - return -1; - if (err != Z_OK && err != Z_STREAM_END) - throw "inflating: " + z.msg; - if ((nomoreinput || err == Z_STREAM_END) && (z.avail_in == data.length)) - return -1; - if (z.next_out_index) - if (z.next_out_index == bufsize) - buffers.push(new Uint8Array(buf)); - else - buffers.push(new Uint8Array(buf.subarray(0, z.next_out_index))); - bufferSize += z.next_out_index; - if (onprogress && z.next_in_index > 0 && z.next_in_index != lastIndex) { - onprogress(z.next_in_index); - lastIndex = z.next_in_index; - } - } while (z.avail_in > 0 || z.avail_out === 0); - array = new Uint8Array(bufferSize); - buffers.forEach(function(chunk) { - array.set(chunk, bufferIndex); - bufferIndex += chunk.length; - }); - return array; - }; - that.flush = function() { - z.inflateEnd(); - }; - } - - var inflater; - - if (obj.zip) - obj.zip.Inflater = Inflater; - else { - inflater = new Inflater(); - obj.addEventListener("message", function(event) { - var message = event.data; - - if (message.append) - obj.postMessage({ - onappend : true, - data : inflater.append(message.data, function(current) { - obj.postMessage({ - progress : true, - current : current - }); - }) - }); - if (message.flush) { - inflater.flush(); - obj.postMessage({ - onflush : true - }); - } - }, false); - } - -})(this); diff --git a/libs/zip/mime-types.js b/libs/zip/mime-types.js deleted file mode 100644 index 479bb875b..000000000 --- a/libs/zip/mime-types.js +++ /dev/null @@ -1,1001 +0,0 @@ -/* - Copyright (c) 2013 Gildas Lormeau. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the distribution. - - 3. The names of the authors may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, - INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function() { - var table = { - "application" : { - "andrew-inset" : "ez", - "annodex" : "anx", - "atom+xml" : "atom", - "atomcat+xml" : "atomcat", - "atomserv+xml" : "atomsrv", - "bbolin" : "lin", - "cap" : [ "cap", "pcap" ], - "cu-seeme" : "cu", - "davmount+xml" : "davmount", - "dsptype" : "tsp", - "ecmascript" : [ "es", "ecma" ], - "futuresplash" : "spl", - "hta" : "hta", - "java-archive" : "jar", - "java-serialized-object" : "ser", - "java-vm" : "class", - "javascript" : "js", - "m3g" : "m3g", - "mac-binhex40" : "hqx", - "mathematica" : [ "nb", "ma", "mb" ], - "msaccess" : "mdb", - "msword" : [ "doc", "dot" ], - "mxf" : "mxf", - "oda" : "oda", - "ogg" : "ogx", - "pdf" : "pdf", - "pgp-keys" : "key", - "pgp-signature" : [ "asc", "sig" ], - "pics-rules" : "prf", - "postscript" : [ "ps", "ai", "eps", "epsi", "epsf", "eps2", "eps3" ], - "rar" : "rar", - "rdf+xml" : "rdf", - "rss+xml" : "rss", - "rtf" : "rtf", - "smil" : [ "smi", "smil" ], - "xhtml+xml" : [ "xhtml", "xht" ], - "xml" : [ "xml", "xsl", "xsd" ], - "xspf+xml" : "xspf", - "zip" : "zip", - "vnd.android.package-archive" : "apk", - "vnd.cinderella" : "cdy", - "vnd.google-earth.kml+xml" : "kml", - "vnd.google-earth.kmz" : "kmz", - "vnd.mozilla.xul+xml" : "xul", - "vnd.ms-excel" : [ "xls", "xlb", "xlt", "xlm", "xla", "xlc", "xlw" ], - "vnd.ms-pki.seccat" : "cat", - "vnd.ms-pki.stl" : "stl", - "vnd.ms-powerpoint" : [ "ppt", "pps", "pot" ], - "vnd.oasis.opendocument.chart" : "odc", - "vnd.oasis.opendocument.database" : "odb", - "vnd.oasis.opendocument.formula" : "odf", - "vnd.oasis.opendocument.graphics" : "odg", - "vnd.oasis.opendocument.graphics-template" : "otg", - "vnd.oasis.opendocument.image" : "odi", - "vnd.oasis.opendocument.presentation" : "odp", - "vnd.oasis.opendocument.presentation-template" : "otp", - "vnd.oasis.opendocument.spreadsheet" : "ods", - "vnd.oasis.opendocument.spreadsheet-template" : "ots", - "vnd.oasis.opendocument.text" : "odt", - "vnd.oasis.opendocument.text-master" : "odm", - "vnd.oasis.opendocument.text-template" : "ott", - "vnd.oasis.opendocument.text-web" : "oth", - "vnd.openxmlformats-officedocument.spreadsheetml.sheet" : "xlsx", - "vnd.openxmlformats-officedocument.spreadsheetml.template" : "xltx", - "vnd.openxmlformats-officedocument.presentationml.presentation" : "pptx", - "vnd.openxmlformats-officedocument.presentationml.slideshow" : "ppsx", - "vnd.openxmlformats-officedocument.presentationml.template" : "potx", - "vnd.openxmlformats-officedocument.wordprocessingml.document" : "docx", - "vnd.openxmlformats-officedocument.wordprocessingml.template" : "dotx", - "vnd.smaf" : "mmf", - "vnd.stardivision.calc" : "sdc", - "vnd.stardivision.chart" : "sds", - "vnd.stardivision.draw" : "sda", - "vnd.stardivision.impress" : "sdd", - "vnd.stardivision.math" : [ "sdf", "smf" ], - "vnd.stardivision.writer" : [ "sdw", "vor" ], - "vnd.stardivision.writer-global" : "sgl", - "vnd.sun.xml.calc" : "sxc", - "vnd.sun.xml.calc.template" : "stc", - "vnd.sun.xml.draw" : "sxd", - "vnd.sun.xml.draw.template" : "std", - "vnd.sun.xml.impress" : "sxi", - "vnd.sun.xml.impress.template" : "sti", - "vnd.sun.xml.math" : "sxm", - "vnd.sun.xml.writer" : "sxw", - "vnd.sun.xml.writer.global" : "sxg", - "vnd.sun.xml.writer.template" : "stw", - "vnd.symbian.install" : [ "sis", "sisx" ], - "vnd.visio" : [ "vsd", "vst", "vss", "vsw" ], - "vnd.wap.wbxml" : "wbxml", - "vnd.wap.wmlc" : "wmlc", - "vnd.wap.wmlscriptc" : "wmlsc", - "vnd.wordperfect" : "wpd", - "vnd.wordperfect5.1" : "wp5", - "x-123" : "wk", - "x-7z-compressed" : "7z", - "x-abiword" : "abw", - "x-apple-diskimage" : "dmg", - "x-bcpio" : "bcpio", - "x-bittorrent" : "torrent", - "x-cbr" : [ "cbr", "cba", "cbt", "cb7" ], - "x-cbz" : "cbz", - "x-cdf" : [ "cdf", "cda" ], - "x-cdlink" : "vcd", - "x-chess-pgn" : "pgn", - "x-cpio" : "cpio", - "x-csh" : "csh", - "x-debian-package" : [ "deb", "udeb" ], - "x-director" : [ "dcr", "dir", "dxr", "cst", "cct", "cxt", "w3d", "fgd", "swa" ], - "x-dms" : "dms", - "x-doom" : "wad", - "x-dvi" : "dvi", - "x-httpd-eruby" : "rhtml", - "x-font" : "pcf.Z", - "x-freemind" : "mm", - "x-gnumeric" : "gnumeric", - "x-go-sgf" : "sgf", - "x-graphing-calculator" : "gcf", - "x-gtar" : [ "gtar", "taz" ], - "x-hdf" : "hdf", - "x-httpd-php" : [ "phtml", "pht", "php" ], - "x-httpd-php-source" : "phps", - "x-httpd-php3" : "php3", - "x-httpd-php3-preprocessed" : "php3p", - "x-httpd-php4" : "php4", - "x-httpd-php5" : "php5", - "x-ica" : "ica", - "x-info" : "info", - "x-internet-signup" : [ "ins", "isp" ], - "x-iphone" : "iii", - "x-iso9660-image" : "iso", - "x-java-jnlp-file" : "jnlp", - "x-jmol" : "jmz", - "x-killustrator" : "kil", - "x-koan" : [ "skp", "skd", "skt", "skm" ], - "x-kpresenter" : [ "kpr", "kpt" ], - "x-kword" : [ "kwd", "kwt" ], - "x-latex" : "latex", - "x-lha" : "lha", - "x-lyx" : "lyx", - "x-lzh" : "lzh", - "x-lzx" : "lzx", - "x-maker" : [ "frm", "maker", "frame", "fm", "fb", "book", "fbdoc" ], - "x-ms-wmd" : "wmd", - "x-ms-wmz" : "wmz", - "x-msdos-program" : [ "com", "exe", "bat", "dll" ], - "x-msi" : "msi", - "x-netcdf" : [ "nc", "cdf" ], - "x-ns-proxy-autoconfig" : [ "pac", "dat" ], - "x-nwc" : "nwc", - "x-object" : "o", - "x-oz-application" : "oza", - "x-pkcs7-certreqresp" : "p7r", - "x-python-code" : [ "pyc", "pyo" ], - "x-qgis" : [ "qgs", "shp", "shx" ], - "x-quicktimeplayer" : "qtl", - "x-redhat-package-manager" : "rpm", - "x-ruby" : "rb", - "x-sh" : "sh", - "x-shar" : "shar", - "x-shockwave-flash" : [ "swf", "swfl" ], - "x-silverlight" : "scr", - "x-stuffit" : "sit", - "x-sv4cpio" : "sv4cpio", - "x-sv4crc" : "sv4crc", - "x-tar" : "tar", - "x-tcl" : "tcl", - "x-tex-gf" : "gf", - "x-tex-pk" : "pk", - "x-texinfo" : [ "texinfo", "texi" ], - "x-trash" : [ "~", "%", "bak", "old", "sik" ], - "x-troff" : [ "t", "tr", "roff" ], - "x-troff-man" : "man", - "x-troff-me" : "me", - "x-troff-ms" : "ms", - "x-ustar" : "ustar", - "x-wais-source" : "src", - "x-wingz" : "wz", - "x-x509-ca-cert" : [ "crt", "der", "cer" ], - "x-xcf" : "xcf", - "x-xfig" : "fig", - "x-xpinstall" : "xpi", - "applixware" : "aw", - "atomsvc+xml" : "atomsvc", - "ccxml+xml" : "ccxml", - "cdmi-capability" : "cdmia", - "cdmi-container" : "cdmic", - "cdmi-domain" : "cdmid", - "cdmi-object" : "cdmio", - "cdmi-queue" : "cdmiq", - "docbook+xml" : "dbk", - "dssc+der" : "dssc", - "dssc+xml" : "xdssc", - "emma+xml" : "emma", - "epub+zip" : "epub", - "exi" : "exi", - "font-tdpfr" : "pfr", - "gml+xml" : "gml", - "gpx+xml" : "gpx", - "gxf" : "gxf", - "hyperstudio" : "stk", - "inkml+xml" : [ "ink", "inkml" ], - "ipfix" : "ipfix", - "json" : "json", - "jsonml+json" : "jsonml", - "lost+xml" : "lostxml", - "mads+xml" : "mads", - "marc" : "mrc", - "marcxml+xml" : "mrcx", - "mathml+xml" : "mathml", - "mbox" : "mbox", - "mediaservercontrol+xml" : "mscml", - "metalink+xml" : "metalink", - "metalink4+xml" : "meta4", - "mets+xml" : "mets", - "mods+xml" : "mods", - "mp21" : [ "m21", "mp21" ], - "mp4" : "mp4s", - "oebps-package+xml" : "opf", - "omdoc+xml" : "omdoc", - "onenote" : [ "onetoc", "onetoc2", "onetmp", "onepkg" ], - "oxps" : "oxps", - "patch-ops-error+xml" : "xer", - "pgp-encrypted" : "pgp", - "pkcs10" : "p10", - "pkcs7-mime" : [ "p7m", "p7c" ], - "pkcs7-signature" : "p7s", - "pkcs8" : "p8", - "pkix-attr-cert" : "ac", - "pkix-crl" : "crl", - "pkix-pkipath" : "pkipath", - "pkixcmp" : "pki", - "pls+xml" : "pls", - "prs.cww" : "cww", - "pskc+xml" : "pskcxml", - "reginfo+xml" : "rif", - "relax-ng-compact-syntax" : "rnc", - "resource-lists+xml" : "rl", - "resource-lists-diff+xml" : "rld", - "rls-services+xml" : "rs", - "rpki-ghostbusters" : "gbr", - "rpki-manifest" : "mft", - "rpki-roa" : "roa", - "rsd+xml" : "rsd", - "sbml+xml" : "sbml", - "scvp-cv-request" : "scq", - "scvp-cv-response" : "scs", - "scvp-vp-request" : "spq", - "scvp-vp-response" : "spp", - "sdp" : "sdp", - "set-payment-initiation" : "setpay", - "set-registration-initiation" : "setreg", - "shf+xml" : "shf", - "sparql-query" : "rq", - "sparql-results+xml" : "srx", - "srgs" : "gram", - "srgs+xml" : "grxml", - "sru+xml" : "sru", - "ssdl+xml" : "ssdl", - "ssml+xml" : "ssml", - "tei+xml" : [ "tei", "teicorpus" ], - "thraud+xml" : "tfi", - "timestamped-data" : "tsd", - "vnd.3gpp.pic-bw-large" : "plb", - "vnd.3gpp.pic-bw-small" : "psb", - "vnd.3gpp.pic-bw-var" : "pvb", - "vnd.3gpp2.tcap" : "tcap", - "vnd.3m.post-it-notes" : "pwn", - "vnd.accpac.simply.aso" : "aso", - "vnd.accpac.simply.imp" : "imp", - "vnd.acucobol" : "acu", - "vnd.acucorp" : [ "atc", "acutc" ], - "vnd.adobe.air-application-installer-package+zip" : "air", - "vnd.adobe.formscentral.fcdt" : "fcdt", - "vnd.adobe.fxp" : [ "fxp", "fxpl" ], - "vnd.adobe.xdp+xml" : "xdp", - "vnd.adobe.xfdf" : "xfdf", - "vnd.ahead.space" : "ahead", - "vnd.airzip.filesecure.azf" : "azf", - "vnd.airzip.filesecure.azs" : "azs", - "vnd.amazon.ebook" : "azw", - "vnd.americandynamics.acc" : "acc", - "vnd.amiga.ami" : "ami", - "vnd.anser-web-certificate-issue-initiation" : "cii", - "vnd.anser-web-funds-transfer-initiation" : "fti", - "vnd.antix.game-component" : "atx", - "vnd.apple.installer+xml" : "mpkg", - "vnd.apple.mpegurl" : "m3u8", - "vnd.aristanetworks.swi" : "swi", - "vnd.astraea-software.iota" : "iota", - "vnd.audiograph" : "aep", - "vnd.blueice.multipass" : "mpm", - "vnd.bmi" : "bmi", - "vnd.businessobjects" : "rep", - "vnd.chemdraw+xml" : "cdxml", - "vnd.chipnuts.karaoke-mmd" : "mmd", - "vnd.claymore" : "cla", - "vnd.cloanto.rp9" : "rp9", - "vnd.clonk.c4group" : [ "c4g", "c4d", "c4f", "c4p", "c4u" ], - "vnd.cluetrust.cartomobile-config" : "c11amc", - "vnd.cluetrust.cartomobile-config-pkg" : "c11amz", - "vnd.commonspace" : "csp", - "vnd.contact.cmsg" : "cdbcmsg", - "vnd.cosmocaller" : "cmc", - "vnd.crick.clicker" : "clkx", - "vnd.crick.clicker.keyboard" : "clkk", - "vnd.crick.clicker.palette" : "clkp", - "vnd.crick.clicker.template" : "clkt", - "vnd.crick.clicker.wordbank" : "clkw", - "vnd.criticaltools.wbs+xml" : "wbs", - "vnd.ctc-posml" : "pml", - "vnd.cups-ppd" : "ppd", - "vnd.curl.car" : "car", - "vnd.curl.pcurl" : "pcurl", - "vnd.dart" : "dart", - "vnd.data-vision.rdz" : "rdz", - "vnd.dece.data" : [ "uvf", "uvvf", "uvd", "uvvd" ], - "vnd.dece.ttml+xml" : [ "uvt", "uvvt" ], - "vnd.dece.unspecified" : [ "uvx", "uvvx" ], - "vnd.dece.zip" : [ "uvz", "uvvz" ], - "vnd.denovo.fcselayout-link" : "fe_launch", - "vnd.dna" : "dna", - "vnd.dolby.mlp" : "mlp", - "vnd.dpgraph" : "dpg", - "vnd.dreamfactory" : "dfac", - "vnd.ds-keypoint" : "kpxx", - "vnd.dvb.ait" : "ait", - "vnd.dvb.service" : "svc", - "vnd.dynageo" : "geo", - "vnd.ecowin.chart" : "mag", - "vnd.enliven" : "nml", - "vnd.epson.esf" : "esf", - "vnd.epson.msf" : "msf", - "vnd.epson.quickanime" : "qam", - "vnd.epson.salt" : "slt", - "vnd.epson.ssf" : "ssf", - "vnd.eszigno3+xml" : [ "es3", "et3" ], - "vnd.ezpix-album" : "ez2", - "vnd.ezpix-package" : "ez3", - "vnd.fdf" : "fdf", - "vnd.fdsn.mseed" : "mseed", - "vnd.fdsn.seed" : [ "seed", "dataless" ], - "vnd.flographit" : "gph", - "vnd.fluxtime.clip" : "ftc", - "vnd.framemaker" : [ "fm", "frame", "maker", "book" ], - "vnd.frogans.fnc" : "fnc", - "vnd.frogans.ltf" : "ltf", - "vnd.fsc.weblaunch" : "fsc", - "vnd.fujitsu.oasys" : "oas", - "vnd.fujitsu.oasys2" : "oa2", - "vnd.fujitsu.oasys3" : "oa3", - "vnd.fujitsu.oasysgp" : "fg5", - "vnd.fujitsu.oasysprs" : "bh2", - "vnd.fujixerox.ddd" : "ddd", - "vnd.fujixerox.docuworks" : "xdw", - "vnd.fujixerox.docuworks.binder" : "xbd", - "vnd.fuzzysheet" : "fzs", - "vnd.genomatix.tuxedo" : "txd", - "vnd.geogebra.file" : "ggb", - "vnd.geogebra.tool" : "ggt", - "vnd.geometry-explorer" : [ "gex", "gre" ], - "vnd.geonext" : "gxt", - "vnd.geoplan" : "g2w", - "vnd.geospace" : "g3w", - "vnd.gmx" : "gmx", - "vnd.grafeq" : [ "gqf", "gqs" ], - "vnd.groove-account" : "gac", - "vnd.groove-help" : "ghf", - "vnd.groove-identity-message" : "gim", - "vnd.groove-injector" : "grv", - "vnd.groove-tool-message" : "gtm", - "vnd.groove-tool-template" : "tpl", - "vnd.groove-vcard" : "vcg", - "vnd.hal+xml" : "hal", - "vnd.handheld-entertainment+xml" : "zmm", - "vnd.hbci" : "hbci", - "vnd.hhe.lesson-player" : "les", - "vnd.hp-hpgl" : "hpgl", - "vnd.hp-hpid" : "hpid", - "vnd.hp-hps" : "hps", - "vnd.hp-jlyt" : "jlt", - "vnd.hp-pcl" : "pcl", - "vnd.hp-pclxl" : "pclxl", - "vnd.hydrostatix.sof-data" : "sfd-hdstx", - "vnd.ibm.minipay" : "mpy", - "vnd.ibm.modcap" : [ "afp", "listafp", "list3820" ], - "vnd.ibm.rights-management" : "irm", - "vnd.ibm.secure-container" : "sc", - "vnd.iccprofile" : [ "icc", "icm" ], - "vnd.igloader" : "igl", - "vnd.immervision-ivp" : "ivp", - "vnd.immervision-ivu" : "ivu", - "vnd.insors.igm" : "igm", - "vnd.intercon.formnet" : [ "xpw", "xpx" ], - "vnd.intergeo" : "i2g", - "vnd.intu.qbo" : "qbo", - "vnd.intu.qfx" : "qfx", - "vnd.ipunplugged.rcprofile" : "rcprofile", - "vnd.irepository.package+xml" : "irp", - "vnd.is-xpr" : "xpr", - "vnd.isac.fcs" : "fcs", - "vnd.jam" : "jam", - "vnd.jcp.javame.midlet-rms" : "rms", - "vnd.jisp" : "jisp", - "vnd.joost.joda-archive" : "joda", - "vnd.kahootz" : [ "ktz", "ktr" ], - "vnd.kde.karbon" : "karbon", - "vnd.kde.kchart" : "chrt", - "vnd.kde.kformula" : "kfo", - "vnd.kde.kivio" : "flw", - "vnd.kde.kontour" : "kon", - "vnd.kde.kpresenter" : [ "kpr", "kpt" ], - "vnd.kde.kspread" : "ksp", - "vnd.kde.kword" : [ "kwd", "kwt" ], - "vnd.kenameaapp" : "htke", - "vnd.kidspiration" : "kia", - "vnd.kinar" : [ "kne", "knp" ], - "vnd.koan" : [ "skp", "skd", "skt", "skm" ], - "vnd.kodak-descriptor" : "sse", - "vnd.las.las+xml" : "lasxml", - "vnd.llamagraphics.life-balance.desktop" : "lbd", - "vnd.llamagraphics.life-balance.exchange+xml" : "lbe", - "vnd.lotus-1-2-3" : "123", - "vnd.lotus-approach" : "apr", - "vnd.lotus-freelance" : "pre", - "vnd.lotus-notes" : "nsf", - "vnd.lotus-organizer" : "org", - "vnd.lotus-screencam" : "scm", - "vnd.lotus-wordpro" : "lwp", - "vnd.macports.portpkg" : "portpkg", - "vnd.mcd" : "mcd", - "vnd.medcalcdata" : "mc1", - "vnd.mediastation.cdkey" : "cdkey", - "vnd.mfer" : "mwf", - "vnd.mfmp" : "mfm", - "vnd.micrografx.flo" : "flo", - "vnd.micrografx.igx" : "igx", - "vnd.mif" : "mif", - "vnd.mobius.daf" : "daf", - "vnd.mobius.dis" : "dis", - "vnd.mobius.mbk" : "mbk", - "vnd.mobius.mqy" : "mqy", - "vnd.mobius.msl" : "msl", - "vnd.mobius.plc" : "plc", - "vnd.mobius.txf" : "txf", - "vnd.mophun.application" : "mpn", - "vnd.mophun.certificate" : "mpc", - "vnd.ms-artgalry" : "cil", - "vnd.ms-cab-compressed" : "cab", - "vnd.ms-excel.addin.macroenabled.12" : "xlam", - "vnd.ms-excel.sheet.binary.macroenabled.12" : "xlsb", - "vnd.ms-excel.sheet.macroenabled.12" : "xlsm", - "vnd.ms-excel.template.macroenabled.12" : "xltm", - "vnd.ms-fontobject" : "eot", - "vnd.ms-htmlhelp" : "chm", - "vnd.ms-ims" : "ims", - "vnd.ms-lrm" : "lrm", - "vnd.ms-officetheme" : "thmx", - "vnd.ms-powerpoint.addin.macroenabled.12" : "ppam", - "vnd.ms-powerpoint.presentation.macroenabled.12" : "pptm", - "vnd.ms-powerpoint.slide.macroenabled.12" : "sldm", - "vnd.ms-powerpoint.slideshow.macroenabled.12" : "ppsm", - "vnd.ms-powerpoint.template.macroenabled.12" : "potm", - "vnd.ms-project" : [ "mpp", "mpt" ], - "vnd.ms-word.document.macroenabled.12" : "docm", - "vnd.ms-word.template.macroenabled.12" : "dotm", - "vnd.ms-works" : [ "wps", "wks", "wcm", "wdb" ], - "vnd.ms-wpl" : "wpl", - "vnd.ms-xpsdocument" : "xps", - "vnd.mseq" : "mseq", - "vnd.musician" : "mus", - "vnd.muvee.style" : "msty", - "vnd.mynfc" : "taglet", - "vnd.neurolanguage.nlu" : "nlu", - "vnd.nitf" : [ "ntf", "nitf" ], - "vnd.noblenet-directory" : "nnd", - "vnd.noblenet-sealer" : "nns", - "vnd.noblenet-web" : "nnw", - "vnd.nokia.n-gage.data" : "ngdat", - "vnd.nokia.n-gage.symbian.install" : "n-gage", - "vnd.nokia.radio-preset" : "rpst", - "vnd.nokia.radio-presets" : "rpss", - "vnd.novadigm.edm" : "edm", - "vnd.novadigm.edx" : "edx", - "vnd.novadigm.ext" : "ext", - "vnd.oasis.opendocument.chart-template" : "otc", - "vnd.oasis.opendocument.formula-template" : "odft", - "vnd.oasis.opendocument.image-template" : "oti", - "vnd.olpc-sugar" : "xo", - "vnd.oma.dd2+xml" : "dd2", - "vnd.openofficeorg.extension" : "oxt", - "vnd.openxmlformats-officedocument.presentationml.slide" : "sldx", - "vnd.osgeo.mapguide.package" : "mgp", - "vnd.osgi.dp" : "dp", - "vnd.osgi.subsystem" : "esa", - "vnd.palm" : [ "pdb", "pqa", "oprc" ], - "vnd.pawaafile" : "paw", - "vnd.pg.format" : "str", - "vnd.pg.osasli" : "ei6", - "vnd.picsel" : "efif", - "vnd.pmi.widget" : "wg", - "vnd.pocketlearn" : "plf", - "vnd.powerbuilder6" : "pbd", - "vnd.previewsystems.box" : "box", - "vnd.proteus.magazine" : "mgz", - "vnd.publishare-delta-tree" : "qps", - "vnd.pvi.ptid1" : "ptid", - "vnd.quark.quarkxpress" : [ "qxd", "qxt", "qwd", "qwt", "qxl", "qxb" ], - "vnd.realvnc.bed" : "bed", - "vnd.recordare.musicxml" : "mxl", - "vnd.recordare.musicxml+xml" : "musicxml", - "vnd.rig.cryptonote" : "cryptonote", - "vnd.rn-realmedia" : "rm", - "vnd.rn-realmedia-vbr" : "rmvb", - "vnd.route66.link66+xml" : "link66", - "vnd.sailingtracker.track" : "st", - "vnd.seemail" : "see", - "vnd.sema" : "sema", - "vnd.semd" : "semd", - "vnd.semf" : "semf", - "vnd.shana.informed.formdata" : "ifm", - "vnd.shana.informed.formtemplate" : "itp", - "vnd.shana.informed.interchange" : "iif", - "vnd.shana.informed.package" : "ipk", - "vnd.simtech-mindmapper" : [ "twd", "twds" ], - "vnd.smart.teacher" : "teacher", - "vnd.solent.sdkm+xml" : [ "sdkm", "sdkd" ], - "vnd.spotfire.dxp" : "dxp", - "vnd.spotfire.sfs" : "sfs", - "vnd.stepmania.package" : "smzip", - "vnd.stepmania.stepchart" : "sm", - "vnd.sus-calendar" : [ "sus", "susp" ], - "vnd.svd" : "svd", - "vnd.syncml+xml" : "xsm", - "vnd.syncml.dm+wbxml" : "bdm", - "vnd.syncml.dm+xml" : "xdm", - "vnd.tao.intent-module-archive" : "tao", - "vnd.tcpdump.pcap" : [ "pcap", "cap", "dmp" ], - "vnd.tmobile-livetv" : "tmo", - "vnd.trid.tpt" : "tpt", - "vnd.triscape.mxs" : "mxs", - "vnd.trueapp" : "tra", - "vnd.ufdl" : [ "ufd", "ufdl" ], - "vnd.uiq.theme" : "utz", - "vnd.umajin" : "umj", - "vnd.unity" : "unityweb", - "vnd.uoml+xml" : "uoml", - "vnd.vcx" : "vcx", - "vnd.visionary" : "vis", - "vnd.vsf" : "vsf", - "vnd.webturbo" : "wtb", - "vnd.wolfram.player" : "nbp", - "vnd.wqd" : "wqd", - "vnd.wt.stf" : "stf", - "vnd.xara" : "xar", - "vnd.xfdl" : "xfdl", - "vnd.yamaha.hv-dic" : "hvd", - "vnd.yamaha.hv-script" : "hvs", - "vnd.yamaha.hv-voice" : "hvp", - "vnd.yamaha.openscoreformat" : "osf", - "vnd.yamaha.openscoreformat.osfpvg+xml" : "osfpvg", - "vnd.yamaha.smaf-audio" : "saf", - "vnd.yamaha.smaf-phrase" : "spf", - "vnd.yellowriver-custom-menu" : "cmp", - "vnd.zul" : [ "zir", "zirz" ], - "vnd.zzazz.deck+xml" : "zaz", - "voicexml+xml" : "vxml", - "widget" : "wgt", - "winhlp" : "hlp", - "wsdl+xml" : "wsdl", - "wspolicy+xml" : "wspolicy", - "x-ace-compressed" : "ace", - "x-authorware-bin" : [ "aab", "x32", "u32", "vox" ], - "x-authorware-map" : "aam", - "x-authorware-seg" : "aas", - "x-blorb" : [ "blb", "blorb" ], - "x-bzip" : "bz", - "x-bzip2" : [ "bz2", "boz" ], - "x-cfs-compressed" : "cfs", - "x-chat" : "chat", - "x-conference" : "nsc", - "x-dgc-compressed" : "dgc", - "x-dtbncx+xml" : "ncx", - "x-dtbook+xml" : "dtb", - "x-dtbresource+xml" : "res", - "x-eva" : "eva", - "x-font-bdf" : "bdf", - "x-font-ghostscript" : "gsf", - "x-font-linux-psf" : "psf", - "x-font-otf" : "otf", - "x-font-pcf" : "pcf", - "x-font-snf" : "snf", - "x-font-ttf" : [ "ttf", "ttc" ], - "x-font-type1" : [ "pfa", "pfb", "pfm", "afm" ], - "x-font-woff" : "woff", - "x-freearc" : "arc", - "x-gca-compressed" : "gca", - "x-glulx" : "ulx", - "x-gramps-xml" : "gramps", - "x-install-instructions" : "install", - "x-lzh-compressed" : [ "lzh", "lha" ], - "x-mie" : "mie", - "x-mobipocket-ebook" : [ "prc", "mobi" ], - "x-ms-application" : "application", - "x-ms-shortcut" : "lnk", - "x-ms-xbap" : "xbap", - "x-msbinder" : "obd", - "x-mscardfile" : "crd", - "x-msclip" : "clp", - "x-msdownload" : [ "exe", "dll", "com", "bat", "msi" ], - "x-msmediaview" : [ "mvb", "m13", "m14" ], - "x-msmetafile" : [ "wmf", "wmz", "emf", "emz" ], - "x-msmoney" : "mny", - "x-mspublisher" : "pub", - "x-msschedule" : "scd", - "x-msterminal" : "trm", - "x-mswrite" : "wri", - "x-nzb" : "nzb", - "x-pkcs12" : [ "p12", "pfx" ], - "x-pkcs7-certificates" : [ "p7b", "spc" ], - "x-research-info-systems" : "ris", - "x-silverlight-app" : "xap", - "x-sql" : "sql", - "x-stuffitx" : "sitx", - "x-subrip" : "srt", - "x-t3vm-image" : "t3", - "x-tads" : "gam", - "x-tex" : "tex", - "x-tex-tfm" : "tfm", - "x-tgif" : "obj", - "x-xliff+xml" : "xlf", - "x-xz" : "xz", - "x-zmachine" : [ "z1", "z2", "z3", "z4", "z5", "z6", "z7", "z8" ], - "xaml+xml" : "xaml", - "xcap-diff+xml" : "xdf", - "xenc+xml" : "xenc", - "xml-dtd" : "dtd", - "xop+xml" : "xop", - "xproc+xml" : "xpl", - "xslt+xml" : "xslt", - "xv+xml" : [ "mxml", "xhvml", "xvml", "xvm" ], - "yang" : "yang", - "yin+xml" : "yin", - "envoy" : "evy", - "fractals" : "fif", - "internet-property-stream" : "acx", - "olescript" : "axs", - "vnd.ms-outlook" : "msg", - "vnd.ms-pkicertstore" : "sst", - "x-compress" : "z", - "x-compressed" : "tgz", - "x-gzip" : "gz", - "x-perfmon" : [ "pma", "pmc", "pml", "pmr", "pmw" ], - "x-pkcs7-mime" : [ "p7c", "p7m" ], - "ynd.ms-pkipko" : "pko" - }, - "audio" : { - "amr" : "amr", - "amr-wb" : "awb", - "annodex" : "axa", - "basic" : [ "au", "snd" ], - "flac" : "flac", - "midi" : [ "mid", "midi", "kar", "rmi" ], - "mpeg" : [ "mpga", "mpega", "mp2", "mp3", "m4a", "mp2a", "m2a", "m3a" ], - "mpegurl" : "m3u", - "ogg" : [ "oga", "ogg", "spx" ], - "prs.sid" : "sid", - "x-aiff" : [ "aif", "aiff", "aifc" ], - "x-gsm" : "gsm", - "x-ms-wma" : "wma", - "x-ms-wax" : "wax", - "x-pn-realaudio" : "ram", - "x-realaudio" : "ra", - "x-sd2" : "sd2", - "x-wav" : "wav", - "adpcm" : "adp", - "mp4" : "mp4a", - "s3m" : "s3m", - "silk" : "sil", - "vnd.dece.audio" : [ "uva", "uvva" ], - "vnd.digital-winds" : "eol", - "vnd.dra" : "dra", - "vnd.dts" : "dts", - "vnd.dts.hd" : "dtshd", - "vnd.lucent.voice" : "lvp", - "vnd.ms-playready.media.pya" : "pya", - "vnd.nuera.ecelp4800" : "ecelp4800", - "vnd.nuera.ecelp7470" : "ecelp7470", - "vnd.nuera.ecelp9600" : "ecelp9600", - "vnd.rip" : "rip", - "webm" : "weba", - "x-aac" : "aac", - "x-caf" : "caf", - "x-matroska" : "mka", - "x-pn-realaudio-plugin" : "rmp", - "xm" : "xm", - "mid" : [ "mid", "rmi" ] - }, - "chemical" : { - "x-alchemy" : "alc", - "x-cache" : [ "cac", "cache" ], - "x-cache-csf" : "csf", - "x-cactvs-binary" : [ "cbin", "cascii", "ctab" ], - "x-cdx" : "cdx", - "x-chem3d" : "c3d", - "x-cif" : "cif", - "x-cmdf" : "cmdf", - "x-cml" : "cml", - "x-compass" : "cpa", - "x-crossfire" : "bsd", - "x-csml" : [ "csml", "csm" ], - "x-ctx" : "ctx", - "x-cxf" : [ "cxf", "cef" ], - "x-embl-dl-nucleotide" : [ "emb", "embl" ], - "x-gamess-input" : [ "inp", "gam", "gamin" ], - "x-gaussian-checkpoint" : [ "fch", "fchk" ], - "x-gaussian-cube" : "cub", - "x-gaussian-input" : [ "gau", "gjc", "gjf" ], - "x-gaussian-log" : "gal", - "x-gcg8-sequence" : "gcg", - "x-genbank" : "gen", - "x-hin" : "hin", - "x-isostar" : [ "istr", "ist" ], - "x-jcamp-dx" : [ "jdx", "dx" ], - "x-kinemage" : "kin", - "x-macmolecule" : "mcm", - "x-macromodel-input" : [ "mmd", "mmod" ], - "x-mdl-molfile" : "mol", - "x-mdl-rdfile" : "rd", - "x-mdl-rxnfile" : "rxn", - "x-mdl-sdfile" : [ "sd", "sdf" ], - "x-mdl-tgf" : "tgf", - "x-mmcif" : "mcif", - "x-mol2" : "mol2", - "x-molconn-Z" : "b", - "x-mopac-graph" : "gpt", - "x-mopac-input" : [ "mop", "mopcrt", "mpc", "zmt" ], - "x-mopac-out" : "moo", - "x-ncbi-asn1" : "asn", - "x-ncbi-asn1-ascii" : [ "prt", "ent" ], - "x-ncbi-asn1-binary" : [ "val", "aso" ], - "x-pdb" : [ "pdb", "ent" ], - "x-rosdal" : "ros", - "x-swissprot" : "sw", - "x-vamas-iso14976" : "vms", - "x-vmd" : "vmd", - "x-xtel" : "xtel", - "x-xyz" : "xyz" - }, - "image" : { - "gif" : "gif", - "ief" : "ief", - "jpeg" : [ "jpeg", "jpg", "jpe" ], - "pcx" : "pcx", - "png" : "png", - "svg+xml" : [ "svg", "svgz" ], - "tiff" : [ "tiff", "tif" ], - "vnd.djvu" : [ "djvu", "djv" ], - "vnd.wap.wbmp" : "wbmp", - "x-canon-cr2" : "cr2", - "x-canon-crw" : "crw", - "x-cmu-raster" : "ras", - "x-coreldraw" : "cdr", - "x-coreldrawpattern" : "pat", - "x-coreldrawtemplate" : "cdt", - "x-corelphotopaint" : "cpt", - "x-epson-erf" : "erf", - "x-icon" : "ico", - "x-jg" : "art", - "x-jng" : "jng", - "x-nikon-nef" : "nef", - "x-olympus-orf" : "orf", - "x-photoshop" : "psd", - "x-portable-anymap" : "pnm", - "x-portable-bitmap" : "pbm", - "x-portable-graymap" : "pgm", - "x-portable-pixmap" : "ppm", - "x-rgb" : "rgb", - "x-xbitmap" : "xbm", - "x-xpixmap" : "xpm", - "x-xwindowdump" : "xwd", - "bmp" : "bmp", - "cgm" : "cgm", - "g3fax" : "g3", - "ktx" : "ktx", - "prs.btif" : "btif", - "sgi" : "sgi", - "vnd.dece.graphic" : [ "uvi", "uvvi", "uvg", "uvvg" ], - "vnd.dwg" : "dwg", - "vnd.dxf" : "dxf", - "vnd.fastbidsheet" : "fbs", - "vnd.fpx" : "fpx", - "vnd.fst" : "fst", - "vnd.fujixerox.edmics-mmr" : "mmr", - "vnd.fujixerox.edmics-rlc" : "rlc", - "vnd.ms-modi" : "mdi", - "vnd.ms-photo" : "wdp", - "vnd.net-fpx" : "npx", - "vnd.xiff" : "xif", - "webp" : "webp", - "x-3ds" : "3ds", - "x-cmx" : "cmx", - "x-freehand" : [ "fh", "fhc", "fh4", "fh5", "fh7" ], - "x-pict" : [ "pic", "pct" ], - "x-tga" : "tga", - "cis-cod" : "cod", - "pipeg" : "jfif", - }, - "message" : { - "rfc822" : [ "eml", "mime", "mht", "mhtml", "nws" ] - }, - "model" : { - "iges" : [ "igs", "iges" ], - "mesh" : [ "msh", "mesh", "silo" ], - "vrml" : [ "wrl", "vrml" ], - "x3d+vrml" : [ "x3dv", "x3dvz" ], - "x3d+xml" : [ "x3d", "x3dz" ], - "x3d+binary" : [ "x3db", "x3dbz" ], - "vnd.collada+xml" : "dae", - "vnd.dwf" : "dwf", - "vnd.gdl" : "gdl", - "vnd.gtw" : "gtw", - "vnd.mts" : "mts", - "vnd.vtu" : "vtu" - }, - "text" : { - "cache-manifest" : [ "manifest", "appcache" ], - "calendar" : [ "ics", "icz", "ifb" ], - "css" : "css", - "csv" : "csv", - "h323" : "323", - "html" : [ "html", "htm", "shtml", "stm" ], - "iuls" : "uls", - "mathml" : "mml", - "plain" : [ "txt", "text", "brf", "conf", "def", "list", "log", "in", "bas" ], - "richtext" : "rtx", - "scriptlet" : [ "sct", "wsc" ], - "texmacs" : [ "tm", "ts" ], - "tab-separated-values" : "tsv", - "vnd.sun.j2me.app-descriptor" : "jad", - "vnd.wap.wml" : "wml", - "vnd.wap.wmlscript" : "wmls", - "x-bibtex" : "bib", - "x-boo" : "boo", - "x-c++hdr" : [ "h++", "hpp", "hxx", "hh" ], - "x-c++src" : [ "c++", "cpp", "cxx", "cc" ], - "x-component" : "htc", - "x-dsrc" : "d", - "x-diff" : [ "diff", "patch" ], - "x-haskell" : "hs", - "x-java" : "java", - "x-literate-haskell" : "lhs", - "x-moc" : "moc", - "x-pascal" : [ "p", "pas" ], - "x-pcs-gcd" : "gcd", - "x-perl" : [ "pl", "pm" ], - "x-python" : "py", - "x-scala" : "scala", - "x-setext" : "etx", - "x-tcl" : [ "tcl", "tk" ], - "x-tex" : [ "tex", "ltx", "sty", "cls" ], - "x-vcalendar" : "vcs", - "x-vcard" : "vcf", - "n3" : "n3", - "prs.lines.tag" : "dsc", - "sgml" : [ "sgml", "sgm" ], - "troff" : [ "t", "tr", "roff", "man", "me", "ms" ], - "turtle" : "ttl", - "uri-list" : [ "uri", "uris", "urls" ], - "vcard" : "vcard", - "vnd.curl" : "curl", - "vnd.curl.dcurl" : "dcurl", - "vnd.curl.scurl" : "scurl", - "vnd.curl.mcurl" : "mcurl", - "vnd.dvb.subtitle" : "sub", - "vnd.fly" : "fly", - "vnd.fmi.flexstor" : "flx", - "vnd.graphviz" : "gv", - "vnd.in3d.3dml" : "3dml", - "vnd.in3d.spot" : "spot", - "x-asm" : [ "s", "asm" ], - "x-c" : [ "c", "cc", "cxx", "cpp", "h", "hh", "dic" ], - "x-fortran" : [ "f", "for", "f77", "f90" ], - "x-opml" : "opml", - "x-nfo" : "nfo", - "x-sfv" : "sfv", - "x-uuencode" : "uu", - "webviewhtml" : "htt" - }, - "video" : { - "3gpp" : "3gp", - "annodex" : "axv", - "dl" : "dl", - "dv" : [ "dif", "dv" ], - "fli" : "fli", - "gl" : "gl", - "mpeg" : [ "mpeg", "mpg", "mpe", "m1v", "m2v", "mp2", "mpa", "mpv2" ], - "mp4" : [ "mp4", "mp4v", "mpg4" ], - "quicktime" : [ "qt", "mov" ], - "ogg" : "ogv", - "vnd.mpegurl" : [ "mxu", "m4u" ], - "x-flv" : "flv", - "x-la-asf" : [ "lsf", "lsx" ], - "x-mng" : "mng", - "x-ms-asf" : [ "asf", "asx", "asr" ], - "x-ms-wm" : "wm", - "x-ms-wmv" : "wmv", - "x-ms-wmx" : "wmx", - "x-ms-wvx" : "wvx", - "x-msvideo" : "avi", - "x-sgi-movie" : "movie", - "x-matroska" : [ "mpv", "mkv", "mk3d", "mks" ], - "3gpp2" : "3g2", - "h261" : "h261", - "h263" : "h263", - "h264" : "h264", - "jpeg" : "jpgv", - "jpm" : [ "jpm", "jpgm" ], - "mj2" : [ "mj2", "mjp2" ], - "vnd.dece.hd" : [ "uvh", "uvvh" ], - "vnd.dece.mobile" : [ "uvm", "uvvm" ], - "vnd.dece.pd" : [ "uvp", "uvvp" ], - "vnd.dece.sd" : [ "uvs", "uvvs" ], - "vnd.dece.video" : [ "uvv", "uvvv" ], - "vnd.dvb.file" : "dvb", - "vnd.fvt" : "fvt", - "vnd.ms-playready.media.pyv" : "pyv", - "vnd.uvvu.mp4" : [ "uvu", "uvvu" ], - "vnd.vivo" : "viv", - "webm" : "webm", - "x-f4v" : "f4v", - "x-m4v" : "m4v", - "x-ms-vob" : "vob", - "x-smv" : "smv" - }, - "x-conference" : { - "x-cooltalk" : "ice" - }, - "x-world" : { - "x-vrml" : [ "vrm", "vrml", "wrl", "flr", "wrz", "xaf", "xof" ] - } - }; - - var mimeTypes = (function() { - var type, subtype, val, index, mimeTypes = {}; - for (type in table) { - if (table.hasOwnProperty(type)) { - for (subtype in table[type]) { - if (table[type].hasOwnProperty(subtype)) { - val = table[type][subtype]; - if (typeof val == "string") { - mimeTypes[val] = type + "/" + subtype; - } else { - for (index = 0; index < val.length; index++) { - mimeTypes[val[index]] = type + "/" + subtype; - } - } - } - } - } - } - return mimeTypes; - })(); - - zip.getMimeType = function(filename) { - var defaultValue = "application/octet-stream"; - return filename && mimeTypes[filename.split(".").pop().toLowerCase()] || defaultValue; - }; - -})(); diff --git a/libs/zip/zip-ext.js b/libs/zip/zip-ext.js deleted file mode 100644 index f0bacac2f..000000000 --- a/libs/zip/zip-ext.js +++ /dev/null @@ -1,241 +0,0 @@ -/* - Copyright (c) 2013 Gildas Lormeau. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the distribution. - - 3. The names of the authors may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, - INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function() { - - var ERR_HTTP_RANGE = "HTTP Range not supported."; - - var Reader = zip.Reader; - var Writer = zip.Writer; - - var ZipDirectoryEntry; - - var appendABViewSupported; - try { - appendABViewSupported = new Blob([ new DataView(new ArrayBuffer(0)) ]).size === 0; - } catch (e) { - } - - function HttpReader(url) { - var that = this; - - function getData(callback, onerror) { - var request; - if (!that.data) { - request = new XMLHttpRequest(); - request.addEventListener("load", function() { - if (!that.size) - that.size = Number(request.getResponseHeader("Content-Length")); - that.data = new Uint8Array(request.response); - callback(); - }, false); - request.addEventListener("error", onerror, false); - request.open("GET", url); - request.responseType = "arraybuffer"; - request.send(); - } else - callback(); - } - - function init(callback, onerror) { - var request = new XMLHttpRequest(); - request.addEventListener("load", function() { - that.size = Number(request.getResponseHeader("Content-Length")); - callback(); - }, false); - request.addEventListener("error", onerror, false); - request.open("HEAD", url); - request.send(); - } - - function readUint8Array(index, length, callback, onerror) { - getData(function() { - callback(new Uint8Array(that.data.subarray(index, index + length))); - }, onerror); - } - - that.size = 0; - that.init = init; - that.readUint8Array = readUint8Array; - } - HttpReader.prototype = new Reader(); - HttpReader.prototype.constructor = HttpReader; - - function HttpRangeReader(url) { - var that = this; - - function init(callback, onerror) { - var request = new XMLHttpRequest(); - request.addEventListener("load", function() { - that.size = Number(request.getResponseHeader("Content-Length")); - if (request.getResponseHeader("Accept-Ranges") == "bytes") - callback(); - else - onerror(ERR_HTTP_RANGE); - }, false); - request.addEventListener("error", onerror, false); - request.open("HEAD", url); - request.send(); - } - - function readArrayBuffer(index, length, callback, onerror) { - var request = new XMLHttpRequest(); - request.open("GET", url); - request.responseType = "arraybuffer"; - request.setRequestHeader("Range", "bytes=" + index + "-" + (index + length - 1)); - request.addEventListener("load", function() { - callback(request.response); - }, false); - request.addEventListener("error", onerror, false); - request.send(); - } - - function readUint8Array(index, length, callback, onerror) { - readArrayBuffer(index, length, function(arraybuffer) { - callback(new Uint8Array(arraybuffer)); - }, onerror); - } - - that.size = 0; - that.init = init; - that.readUint8Array = readUint8Array; - } - HttpRangeReader.prototype = new Reader(); - HttpRangeReader.prototype.constructor = HttpRangeReader; - - function ArrayBufferReader(arrayBuffer) { - var that = this; - - function init(callback, onerror) { - that.size = arrayBuffer.byteLength; - callback(); - } - - function readUint8Array(index, length, callback, onerror) { - callback(new Uint8Array(arrayBuffer.slice(index, index + length))); - } - - that.size = 0; - that.init = init; - that.readUint8Array = readUint8Array; - } - ArrayBufferReader.prototype = new Reader(); - ArrayBufferReader.prototype.constructor = ArrayBufferReader; - - function ArrayBufferWriter() { - var array, that = this; - - function init(callback, onerror) { - array = new Uint8Array(); - callback(); - } - - function writeUint8Array(arr, callback, onerror) { - var tmpArray = new Uint8Array(array.length + arr.length); - tmpArray.set(array); - tmpArray.set(arr, array.length); - array = tmpArray; - callback(); - } - - function getData(callback) { - callback(array.buffer); - } - - that.init = init; - that.writeUint8Array = writeUint8Array; - that.getData = getData; - } - ArrayBufferWriter.prototype = new Writer(); - ArrayBufferWriter.prototype.constructor = ArrayBufferWriter; - - function FileWriter(fileEntry, contentType) { - var writer, that = this; - - function init(callback, onerror) { - fileEntry.createWriter(function(fileWriter) { - writer = fileWriter; - callback(); - }, onerror); - } - - function writeUint8Array(array, callback, onerror) { - var blob = new Blob([ appendABViewSupported ? array : array.buffer ], { - type : contentType - }); - writer.onwrite = function() { - writer.onwrite = null; - callback(); - }; - writer.onerror = onerror; - writer.write(blob); - } - - function getData(callback) { - fileEntry.file(callback); - } - - that.init = init; - that.writeUint8Array = writeUint8Array; - that.getData = getData; - } - FileWriter.prototype = new Writer(); - FileWriter.prototype.constructor = FileWriter; - - zip.FileWriter = FileWriter; - zip.HttpReader = HttpReader; - zip.HttpRangeReader = HttpRangeReader; - zip.ArrayBufferReader = ArrayBufferReader; - zip.ArrayBufferWriter = ArrayBufferWriter; - - if (zip.fs) { - ZipDirectoryEntry = zip.fs.ZipDirectoryEntry; - ZipDirectoryEntry.prototype.addHttpContent = function(name, URL, useRangeHeader) { - function addChild(parent, name, params, directory) { - if (parent.directory) - return directory ? new ZipDirectoryEntry(parent.fs, name, params, parent) : new zip.fs.ZipFileEntry(parent.fs, name, params, parent); - else - throw "Parent entry is not a directory."; - } - - return addChild(this, name, { - data : URL, - Reader : useRangeHeader ? HttpRangeReader : HttpReader - }); - }; - ZipDirectoryEntry.prototype.importHttpContent = function(URL, useRangeHeader, onend, onerror) { - this.importZip(useRangeHeader ? new HttpRangeReader(URL) : new HttpReader(URL), onend, onerror); - }; - zip.fs.FS.prototype.importHttpContent = function(URL, useRangeHeader, onend, onerror) { - this.entries = []; - this.root = new ZipDirectoryEntry(this); - this.root.importHttpContent(URL, useRangeHeader, onend, onerror); - }; - } - -})(); diff --git a/libs/zip/zip-fs.js b/libs/zip/zip-fs.js deleted file mode 100644 index 339bf66be..000000000 --- a/libs/zip/zip-fs.js +++ /dev/null @@ -1,538 +0,0 @@ -/* - Copyright (c) 2013 Gildas Lormeau. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the distribution. - - 3. The names of the authors may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, - INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function() { - - var CHUNK_SIZE = 512 * 1024; - - var TextWriter = zip.TextWriter, // - BlobWriter = zip.BlobWriter, // - Data64URIWriter = zip.Data64URIWriter, // - Reader = zip.Reader, // - TextReader = zip.TextReader, // - BlobReader = zip.BlobReader, // - Data64URIReader = zip.Data64URIReader, // - createReader = zip.createReader, // - createWriter = zip.createWriter; - - function ZipBlobReader(entry) { - var that = this, blobReader; - - function init(callback) { - this.size = entry.uncompressedSize; - callback(); - } - - function getData(callback) { - if (that.data) - callback(); - else - entry.getData(new BlobWriter(), function(data) { - that.data = data; - blobReader = new BlobReader(data); - callback(); - }, null, that.checkCrc32); - } - - function readUint8Array(index, length, callback, onerror) { - getData(function() { - blobReader.readUint8Array(index, length, callback, onerror); - }, onerror); - } - - that.size = 0; - that.init = init; - that.readUint8Array = readUint8Array; - } - ZipBlobReader.prototype = new Reader(); - ZipBlobReader.prototype.constructor = ZipBlobReader; - ZipBlobReader.prototype.checkCrc32 = false; - - function getTotalSize(entry) { - var size = 0; - - function process(entry) { - size += entry.uncompressedSize || 0; - entry.children.forEach(process); - } - - process(entry); - return size; - } - - function initReaders(entry, onend, onerror) { - var index = 0; - - function next() { - index++; - if (index < entry.children.length) - process(entry.children[index]); - else - onend(); - } - - function process(child) { - if (child.directory) - initReaders(child, next, onerror); - else { - child.reader = new child.Reader(child.data, onerror); - child.reader.init(function() { - child.uncompressedSize = child.reader.size; - next(); - }); - } - } - - if (entry.children.length) - process(entry.children[index]); - else - onend(); - } - - function detach(entry) { - var children = entry.parent.children; - children.forEach(function(child, index) { - if (child.id == entry.id) - children.splice(index, 1); - }); - } - - function exportZip(zipWriter, entry, onend, onprogress, totalSize) { - var currentIndex = 0; - - function process(zipWriter, entry, onend, onprogress, totalSize) { - var childIndex = 0; - - function exportChild() { - var child = entry.children[childIndex]; - if (child) - zipWriter.add(child.getFullname(), child.reader, function() { - currentIndex += child.uncompressedSize || 0; - process(zipWriter, child, function() { - childIndex++; - exportChild(); - }, onprogress, totalSize); - }, function(index) { - if (onprogress) - onprogress(currentIndex + index, totalSize); - }, { - directory : child.directory, - version : child.zipVersion - }); - else - onend(); - } - - exportChild(); - } - - process(zipWriter, entry, onend, onprogress, totalSize); - } - - function addFileEntry(zipEntry, fileEntry, onend, onerror) { - function getChildren(fileEntry, callback) { - if (fileEntry.isDirectory) - fileEntry.createReader().readEntries(callback); - if (fileEntry.isFile) - callback([]); - } - - function process(zipEntry, fileEntry, onend) { - getChildren(fileEntry, function(children) { - var childIndex = 0; - - function addChild(child) { - function nextChild(childFileEntry) { - process(childFileEntry, child, function() { - childIndex++; - processChild(); - }); - } - - if (child.isDirectory) - nextChild(zipEntry.addDirectory(child.name)); - if (child.isFile) - child.file(function(file) { - var childZipEntry = zipEntry.addBlob(child.name, file); - childZipEntry.uncompressedSize = file.size; - nextChild(childZipEntry); - }, onerror); - } - - function processChild() { - var child = children[childIndex]; - if (child) - addChild(child); - else - onend(); - } - - processChild(); - }); - } - - if (fileEntry.isDirectory) - process(zipEntry, fileEntry, onend); - else - fileEntry.file(function(file) { - zipEntry.addBlob(fileEntry.name, file); - onend(); - }, onerror); - } - - function getFileEntry(fileEntry, entry, onend, onprogress, onerror, totalSize, checkCrc32) { - var currentIndex = 0; - - function process(fileEntry, entry, onend, onprogress, onerror, totalSize) { - var childIndex = 0; - - function addChild(child) { - function nextChild(childFileEntry) { - currentIndex += child.uncompressedSize || 0; - process(childFileEntry, child, function() { - childIndex++; - processChild(); - }, onprogress, onerror, totalSize); - } - - if (child.directory) - fileEntry.getDirectory(child.name, { - create : true - }, nextChild, onerror); - else - fileEntry.getFile(child.name, { - create : true - }, function(file) { - child.getData(new zip.FileWriter(file, zip.getMimeType(child.name)), nextChild, function(index) { - if (onprogress) - onprogress(currentIndex + index, totalSize); - }, checkCrc32); - }, onerror); - } - - function processChild() { - var child = entry.children[childIndex]; - if (child) - addChild(child); - else - onend(); - } - - processChild(); - } - - if (entry.directory) - process(fileEntry, entry, onend, onprogress, onerror, totalSize); - else - entry.getData(new zip.FileWriter(fileEntry, zip.getMimeType(entry.name)), onend, onprogress, checkCrc32); - } - - function resetFS(fs) { - fs.entries = []; - fs.root = new ZipDirectoryEntry(fs); - } - - function bufferedCopy(reader, writer, onend, onprogress, onerror) { - var chunkIndex = 0; - - function stepCopy() { - var index = chunkIndex * CHUNK_SIZE; - if (onprogress) - onprogress(index, reader.size); - if (index < reader.size) - reader.readUint8Array(index, Math.min(CHUNK_SIZE, reader.size - index), function(array) { - writer.writeUint8Array(new Uint8Array(array), function() { - chunkIndex++; - stepCopy(); - }); - }, onerror); - else - writer.getData(onend); - } - - stepCopy(); - } - - function getEntryData(writer, onend, onprogress, onerror) { - var that = this; - if (!writer || (writer.constructor == that.Writer && that.data)) - onend(that.data); - else { - if (!that.reader) - that.reader = new that.Reader(that.data, onerror); - that.reader.init(function() { - writer.init(function() { - bufferedCopy(that.reader, writer, onend, onprogress, onerror); - }, onerror); - }); - } - } - - function addChild(parent, name, params, directory) { - if (parent.directory) - return directory ? new ZipDirectoryEntry(parent.fs, name, params, parent) : new ZipFileEntry(parent.fs, name, params, parent); - else - throw "Parent entry is not a directory."; - } - - function ZipEntry() { - } - - ZipEntry.prototype = { - init : function(fs, name, params, parent) { - var that = this; - if (fs.root && parent && parent.getChildByName(name)) - throw "Entry filename already exists."; - if (!params) - params = {}; - that.fs = fs; - that.name = name; - that.id = fs.entries.length; - that.parent = parent; - that.children = []; - that.zipVersion = params.zipVersion || 0x14; - that.uncompressedSize = 0; - fs.entries.push(that); - if (parent) - that.parent.children.push(that); - }, - getFileEntry : function(fileEntry, onend, onprogress, onerror, checkCrc32) { - var that = this; - initReaders(that, function() { - getFileEntry(fileEntry, that, onend, onprogress, onerror, getTotalSize(that), checkCrc32); - }, onerror); - }, - moveTo : function(target) { - var that = this; - if (target.directory) { - if (!target.isDescendantOf(that)) { - if (that != target) { - if (target.getChildByName(that.name)) - throw "Entry filename already exists."; - detach(that); - that.parent = target; - target.children.push(that); - } - } else - throw "Entry is a ancestor of target entry."; - } else - throw "Target entry is not a directory."; - }, - getFullname : function() { - var that = this, fullname = that.name, entry = that.parent; - while (entry) { - fullname = (entry.name ? entry.name + "/" : "") + fullname; - entry = entry.parent; - } - return fullname; - }, - isDescendantOf : function(ancestor) { - var entry = this.parent; - while (entry && entry.id != ancestor.id) - entry = entry.parent; - return !!entry; - } - }; - ZipEntry.prototype.constructor = ZipEntry; - - var ZipFileEntryProto; - - function ZipFileEntry(fs, name, params, parent) { - var that = this; - ZipEntry.prototype.init.call(that, fs, name, params, parent); - that.Reader = params.Reader; - that.Writer = params.Writer; - that.data = params.data; - that.getData = params.getData || getEntryData; - } - - ZipFileEntry.prototype = ZipFileEntryProto = new ZipEntry(); - ZipFileEntryProto.constructor = ZipFileEntry; - ZipFileEntryProto.getText = function(onend, onprogress, checkCrc32, encoding) { - this.getData(new TextWriter(encoding), onend, onprogress, checkCrc32); - }; - ZipFileEntryProto.getBlob = function(mimeType, onend, onprogress, checkCrc32) { - this.getData(new BlobWriter(mimeType), onend, onprogress, checkCrc32); - }; - ZipFileEntryProto.getData64URI = function(mimeType, onend, onprogress, checkCrc32) { - this.getData(new Data64URIWriter(mimeType), onend, onprogress, checkCrc32); - }; - - var ZipDirectoryEntryProto; - - function ZipDirectoryEntry(fs, name, params, parent) { - var that = this; - ZipEntry.prototype.init.call(that, fs, name, params, parent); - that.directory = true; - } - - ZipDirectoryEntry.prototype = ZipDirectoryEntryProto = new ZipEntry(); - ZipDirectoryEntryProto.constructor = ZipDirectoryEntry; - ZipDirectoryEntryProto.addDirectory = function(name) { - return addChild(this, name, null, true); - }; - ZipDirectoryEntryProto.addText = function(name, text) { - return addChild(this, name, { - data : text, - Reader : TextReader, - Writer : TextWriter - }); - }; - ZipDirectoryEntryProto.addBlob = function(name, blob) { - return addChild(this, name, { - data : blob, - Reader : BlobReader, - Writer : BlobWriter - }); - }; - ZipDirectoryEntryProto.addData64URI = function(name, dataURI) { - return addChild(this, name, { - data : dataURI, - Reader : Data64URIReader, - Writer : Data64URIWriter - }); - }; - ZipDirectoryEntryProto.addFileEntry = function(fileEntry, onend, onerror) { - addFileEntry(this, fileEntry, onend, onerror); - }; - ZipDirectoryEntryProto.addData = function(name, params) { - return addChild(this, name, params); - }; - ZipDirectoryEntryProto.importBlob = function(blob, onend, onerror) { - this.importZip(new BlobReader(blob), onend, onerror); - }; - ZipDirectoryEntryProto.importText = function(text, onend, onerror) { - this.importZip(new TextReader(text), onend, onerror); - }; - ZipDirectoryEntryProto.importData64URI = function(dataURI, onend, onerror) { - this.importZip(new Data64URIReader(dataURI), onend, onerror); - }; - ZipDirectoryEntryProto.exportBlob = function(onend, onprogress, onerror) { - this.exportZip(new BlobWriter("application/zip"), onend, onprogress, onerror); - }; - ZipDirectoryEntryProto.exportText = function(onend, onprogress, onerror) { - this.exportZip(new TextWriter(), onend, onprogress, onerror); - }; - ZipDirectoryEntryProto.exportFileEntry = function(fileEntry, onend, onprogress, onerror) { - this.exportZip(new zip.FileWriter(fileEntry, "application/zip"), onend, onprogress, onerror); - }; - ZipDirectoryEntryProto.exportData64URI = function(onend, onprogress, onerror) { - this.exportZip(new Data64URIWriter("application/zip"), onend, onprogress, onerror); - }; - ZipDirectoryEntryProto.importZip = function(reader, onend, onerror) { - var that = this; - createReader(reader, function(zipReader) { - zipReader.getEntries(function(entries) { - entries.forEach(function(entry) { - var parent = that, path = entry.filename.split("/"), name = path.pop(); - path.forEach(function(pathPart) { - parent = parent.getChildByName(pathPart) || new ZipDirectoryEntry(that.fs, pathPart, null, parent); - }); - if (!entry.directory) - addChild(parent, name, { - data : entry, - Reader : ZipBlobReader - }); - }); - onend(); - }); - }, onerror); - }; - ZipDirectoryEntryProto.exportZip = function(writer, onend, onprogress, onerror) { - var that = this; - initReaders(that, function() { - createWriter(writer, function(zipWriter) { - exportZip(zipWriter, that, function() { - zipWriter.close(onend); - }, onprogress, getTotalSize(that)); - }, onerror); - }, onerror); - }; - ZipDirectoryEntryProto.getChildByName = function(name) { - var childIndex, child, that = this; - for (childIndex = 0; childIndex < that.children.length; childIndex++) { - child = that.children[childIndex]; - if (child.name == name) - return child; - } - }; - - function FS() { - resetFS(this); - } - FS.prototype = { - remove : function(entry) { - detach(entry); - this.entries[entry.id] = null; - }, - find : function(fullname) { - var index, path = fullname.split("/"), node = this.root; - for (index = 0; node && index < path.length; index++) - node = node.getChildByName(path[index]); - return node; - }, - getById : function(id) { - return this.entries[id]; - }, - importBlob : function(blob, onend, onerror) { - resetFS(this); - this.root.importBlob(blob, onend, onerror); - }, - importText : function(text, onend, onerror) { - resetFS(this); - this.root.importText(text, onend, onerror); - }, - importData64URI : function(dataURI, onend, onerror) { - resetFS(this); - this.root.importData64URI(dataURI, onend, onerror); - }, - exportBlob : function(onend, onprogress, onerror) { - this.root.exportBlob(onend, onprogress, onerror); - }, - exportText : function(onend, onprogress, onerror) { - this.root.exportText(onend, onprogress, onerror); - }, - exportFileEntry : function(fileEntry, onend, onprogress, onerror) { - this.root.exportFileEntry(fileEntry, onend, onprogress, onerror); - }, - exportData64URI : function(onend, onprogress, onerror) { - this.root.exportData64URI(onend, onprogress, onerror); - } - }; - - zip.fs = { - FS : FS, - ZipDirectoryEntry : ZipDirectoryEntry, - ZipFileEntry : ZipFileEntry - }; - - zip.getMimeType = function() { - return "application/octet-stream"; - }; - -})(); diff --git a/libs/zip/zip.js b/libs/zip/zip.js deleted file mode 100644 index db61f98bc..000000000 --- a/libs/zip/zip.js +++ /dev/null @@ -1,800 +0,0 @@ -/*! - Copyright (c) 2013 Gildas Lormeau. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - - 1. Redistributions of source code must retain the above copyright notice, - this list of conditions and the following disclaimer. - - 2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in - the documentation and/or other materials provided with the distribution. - - 3. The names of the authors may not be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, - INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND - FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JCRAFT, - INC. OR ANY CONTRIBUTORS TO THIS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT, - INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, - OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, - EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -(function(obj) { - - var ERR_BAD_FORMAT = "File format is not recognized."; - var ERR_ENCRYPTED = "File contains encrypted entry."; - var ERR_ZIP64 = "File is using Zip64 (4gb+ file size)."; - var ERR_READ = "Error while reading zip file."; - var ERR_WRITE = "Error while writing zip file."; - var ERR_WRITE_DATA = "Error while writing file data."; - var ERR_READ_DATA = "Error while reading file data."; - var ERR_DUPLICATED_NAME = "File already exists."; - var CHUNK_SIZE = 512 * 1024; - - var INFLATE_JS = "inflate.js"; - var DEFLATE_JS = "deflate.js"; - - var TEXT_PLAIN = "text/plain"; - - var MESSAGE_EVENT = "message"; - - var appendABViewSupported; - try { - appendABViewSupported = new Blob([ new DataView(new ArrayBuffer(0)) ]).size === 0; - } catch (e) { - } - - function Crc32() { - var crc = -1, that = this; - that.append = function(data) { - var offset, table = that.table; - for (offset = 0; offset < data.length; offset++) - crc = (crc >>> 8) ^ table[(crc ^ data[offset]) & 0xFF]; - }; - that.get = function() { - return ~crc; - }; - } - Crc32.prototype.table = (function() { - var i, j, t, table = []; - for (i = 0; i < 256; i++) { - t = i; - for (j = 0; j < 8; j++) - if (t & 1) - t = (t >>> 1) ^ 0xEDB88320; - else - t = t >>> 1; - table[i] = t; - } - return table; - })(); - - function blobSlice(blob, index, length) { - if (blob.slice) - return blob.slice(index, index + length); - else if (blob.webkitSlice) - return blob.webkitSlice(index, index + length); - else if (blob.mozSlice) - return blob.mozSlice(index, index + length); - else if (blob.msSlice) - return blob.msSlice(index, index + length); - } - - function getDataHelper(byteLength, bytes) { - var dataBuffer, dataArray; - dataBuffer = new ArrayBuffer(byteLength); - dataArray = new Uint8Array(dataBuffer); - if (bytes) - dataArray.set(bytes, 0); - return { - buffer : dataBuffer, - array : dataArray, - view : new DataView(dataBuffer) - }; - } - - // Readers - function Reader() { - } - - function TextReader(text) { - var that = this, blobReader; - - function init(callback, onerror) { - var blob = new Blob([ text ], { - type : TEXT_PLAIN - }); - blobReader = new BlobReader(blob); - blobReader.init(function() { - that.size = blobReader.size; - callback(); - }, onerror); - } - - function readUint8Array(index, length, callback, onerror) { - blobReader.readUint8Array(index, length, callback, onerror); - } - - that.size = 0; - that.init = init; - that.readUint8Array = readUint8Array; - } - TextReader.prototype = new Reader(); - TextReader.prototype.constructor = TextReader; - - function Data64URIReader(dataURI) { - var that = this, dataStart; - - function init(callback) { - var dataEnd = dataURI.length; - while (dataURI.charAt(dataEnd - 1) == "=") - dataEnd--; - dataStart = dataURI.indexOf(",") + 1; - that.size = Math.floor((dataEnd - dataStart) * 0.75); - callback(); - } - - function readUint8Array(index, length, callback) { - var i, data = getDataHelper(length); - var start = Math.floor(index / 3) * 4; - var end = Math.ceil((index + length) / 3) * 4; - var bytes = obj.atob(dataURI.substring(start + dataStart, end + dataStart)); - var delta = index - Math.floor(start / 4) * 3; - for (i = delta; i < delta + length; i++) - data.array[i - delta] = bytes.charCodeAt(i); - callback(data.array); - } - - that.size = 0; - that.init = init; - that.readUint8Array = readUint8Array; - } - Data64URIReader.prototype = new Reader(); - Data64URIReader.prototype.constructor = Data64URIReader; - - function BlobReader(blob) { - var that = this; - - function init(callback) { - this.size = blob.size; - callback(); - } - - function readUint8Array(index, length, callback, onerror) { - var reader = new FileReader(); - reader.onload = function(e) { - callback(new Uint8Array(e.target.result)); - }; - reader.onerror = onerror; - reader.readAsArrayBuffer(blobSlice(blob, index, length)); - } - - that.size = 0; - that.init = init; - that.readUint8Array = readUint8Array; - } - BlobReader.prototype = new Reader(); - BlobReader.prototype.constructor = BlobReader; - - // Writers - - function Writer() { - } - Writer.prototype.getData = function(callback) { - callback(this.data); - }; - - function TextWriter(encoding) { - var that = this, blob; - - function init(callback) { - blob = new Blob([], { - type : TEXT_PLAIN - }); - callback(); - } - - function writeUint8Array(array, callback) { - blob = new Blob([ blob, appendABViewSupported ? array : array.buffer ], { - type : TEXT_PLAIN - }); - callback(); - } - - function getData(callback, onerror) { - var reader = new FileReader(); - reader.onload = function(e) { - callback(e.target.result); - }; - reader.onerror = onerror; - reader.readAsText(blob, encoding); - } - - that.init = init; - that.writeUint8Array = writeUint8Array; - that.getData = getData; - } - TextWriter.prototype = new Writer(); - TextWriter.prototype.constructor = TextWriter; - - function Data64URIWriter(contentType) { - var that = this, data = "", pending = ""; - - function init(callback) { - data += "data:" + (contentType || "") + ";base64,"; - callback(); - } - - function writeUint8Array(array, callback) { - var i, delta = pending.length, dataString = pending; - pending = ""; - for (i = 0; i < (Math.floor((delta + array.length) / 3) * 3) - delta; i++) - dataString += String.fromCharCode(array[i]); - for (; i < array.length; i++) - pending += String.fromCharCode(array[i]); - if (dataString.length > 2) - data += obj.btoa(dataString); - else - pending = dataString; - callback(); - } - - function getData(callback) { - callback(data + obj.btoa(pending)); - } - - that.init = init; - that.writeUint8Array = writeUint8Array; - that.getData = getData; - } - Data64URIWriter.prototype = new Writer(); - Data64URIWriter.prototype.constructor = Data64URIWriter; - - function BlobWriter(contentType) { - var blob, that = this; - - function init(callback) { - blob = new Blob([], { - type : contentType - }); - callback(); - } - - function writeUint8Array(array, callback) { - blob = new Blob([ blob, appendABViewSupported ? array : array.buffer ], { - type : contentType - }); - callback(); - } - - function getData(callback) { - callback(blob); - } - - that.init = init; - that.writeUint8Array = writeUint8Array; - that.getData = getData; - } - BlobWriter.prototype = new Writer(); - BlobWriter.prototype.constructor = BlobWriter; - - // inflate/deflate core functions - - function launchWorkerProcess(worker, reader, writer, offset, size, onappend, onprogress, onend, onreaderror, onwriteerror) { - var chunkIndex = 0, index, outputSize; - - function onflush() { - worker.removeEventListener(MESSAGE_EVENT, onmessage, false); - onend(outputSize); - } - - function onmessage(event) { - var message = event.data, data = message.data; - if (message.onappend) { - outputSize += data.length; - writer.writeUint8Array(data, function() { - onappend(false, data); - step(); - }, onwriteerror); - } - if (message.onflush) - if (data) { - outputSize += data.length; - writer.writeUint8Array(data, function() { - onappend(false, data); - onflush(); - }, onwriteerror); - } else - onflush(); - if (message.progress && onprogress) - onprogress(index + message.current, size); - } - - function step() { - index = chunkIndex * CHUNK_SIZE; - if (index < size) - reader.readUint8Array(offset + index, Math.min(CHUNK_SIZE, size - index), function(array) { - worker.postMessage({ - append : true, - data : array - }); - chunkIndex++; - if (onprogress) - onprogress(index, size); - onappend(true, array); - }, onreaderror); - else - worker.postMessage({ - flush : true - }); - } - - outputSize = 0; - worker.addEventListener(MESSAGE_EVENT, onmessage, false); - step(); - } - - function launchProcess(process, reader, writer, offset, size, onappend, onprogress, onend, onreaderror, onwriteerror) { - var chunkIndex = 0, index, outputSize = 0; - - function step() { - var outputData; - index = chunkIndex * CHUNK_SIZE; - if (index < size) - reader.readUint8Array(offset + index, Math.min(CHUNK_SIZE, size - index), function(inputData) { - var outputData = process.append(inputData, function() { - if (onprogress) - onprogress(offset + index, size); - }); - outputSize += outputData.length; - onappend(true, inputData); - writer.writeUint8Array(outputData, function() { - onappend(false, outputData); - chunkIndex++; - setTimeout(step, 1); - }, onwriteerror); - if (onprogress) - onprogress(index, size); - }, onreaderror); - else { - outputData = process.flush(); - if (outputData) { - outputSize += outputData.length; - writer.writeUint8Array(outputData, function() { - onappend(false, outputData); - onend(outputSize); - }, onwriteerror); - } else - onend(outputSize); - } - } - - step(); - } - - function inflate(reader, writer, offset, size, computeCrc32, onend, onprogress, onreaderror, onwriteerror) { - var worker, crc32 = new Crc32(); - - function oninflateappend(sending, array) { - if (computeCrc32 && !sending) - crc32.append(array); - } - - function oninflateend(outputSize) { - onend(outputSize, crc32.get()); - } - - if (obj.zip.useWebWorkers) { - worker = new Worker(obj.zip.workerScriptsPath + INFLATE_JS); - launchWorkerProcess(worker, reader, writer, offset, size, oninflateappend, onprogress, oninflateend, onreaderror, onwriteerror); - } else - launchProcess(new obj.zip.Inflater(), reader, writer, offset, size, oninflateappend, onprogress, oninflateend, onreaderror, onwriteerror); - return worker; - } - - function deflate(reader, writer, level, onend, onprogress, onreaderror, onwriteerror) { - var worker, crc32 = new Crc32(); - - function ondeflateappend(sending, array) { - if (sending) - crc32.append(array); - } - - function ondeflateend(outputSize) { - onend(outputSize, crc32.get()); - } - - function onmessage() { - worker.removeEventListener(MESSAGE_EVENT, onmessage, false); - launchWorkerProcess(worker, reader, writer, 0, reader.size, ondeflateappend, onprogress, ondeflateend, onreaderror, onwriteerror); - } - - if (obj.zip.useWebWorkers) { - worker = new Worker(obj.zip.workerScriptsPath + DEFLATE_JS); - worker.addEventListener(MESSAGE_EVENT, onmessage, false); - worker.postMessage({ - init : true, - level : level - }); - } else - launchProcess(new obj.zip.Deflater(), reader, writer, 0, reader.size, ondeflateappend, onprogress, ondeflateend, onreaderror, onwriteerror); - return worker; - } - - function copy(reader, writer, offset, size, computeCrc32, onend, onprogress, onreaderror, onwriteerror) { - var chunkIndex = 0, crc32 = new Crc32(); - - function step() { - var index = chunkIndex * CHUNK_SIZE; - if (index < size) - reader.readUint8Array(offset + index, Math.min(CHUNK_SIZE, size - index), function(array) { - if (computeCrc32) - crc32.append(array); - if (onprogress) - onprogress(index, size, array); - writer.writeUint8Array(array, function() { - chunkIndex++; - step(); - }, onwriteerror); - }, onreaderror); - else - onend(size, crc32.get()); - } - - step(); - } - - // ZipReader - - function decodeASCII(str) { - var i, out = "", charCode, extendedASCII = [ '\u00C7', '\u00FC', '\u00E9', '\u00E2', '\u00E4', '\u00E0', '\u00E5', '\u00E7', '\u00EA', '\u00EB', - '\u00E8', '\u00EF', '\u00EE', '\u00EC', '\u00C4', '\u00C5', '\u00C9', '\u00E6', '\u00C6', '\u00F4', '\u00F6', '\u00F2', '\u00FB', '\u00F9', - '\u00FF', '\u00D6', '\u00DC', '\u00F8', '\u00A3', '\u00D8', '\u00D7', '\u0192', '\u00E1', '\u00ED', '\u00F3', '\u00FA', '\u00F1', '\u00D1', - '\u00AA', '\u00BA', '\u00BF', '\u00AE', '\u00AC', '\u00BD', '\u00BC', '\u00A1', '\u00AB', '\u00BB', '_', '_', '_', '\u00A6', '\u00A6', - '\u00C1', '\u00C2', '\u00C0', '\u00A9', '\u00A6', '\u00A6', '+', '+', '\u00A2', '\u00A5', '+', '+', '-', '-', '+', '-', '+', '\u00E3', - '\u00C3', '+', '+', '-', '-', '\u00A6', '-', '+', '\u00A4', '\u00F0', '\u00D0', '\u00CA', '\u00CB', '\u00C8', 'i', '\u00CD', '\u00CE', - '\u00CF', '+', '+', '_', '_', '\u00A6', '\u00CC', '_', '\u00D3', '\u00DF', '\u00D4', '\u00D2', '\u00F5', '\u00D5', '\u00B5', '\u00FE', - '\u00DE', '\u00DA', '\u00DB', '\u00D9', '\u00FD', '\u00DD', '\u00AF', '\u00B4', '\u00AD', '\u00B1', '_', '\u00BE', '\u00B6', '\u00A7', - '\u00F7', '\u00B8', '\u00B0', '\u00A8', '\u00B7', '\u00B9', '\u00B3', '\u00B2', '_', ' ' ]; - for (i = 0; i < str.length; i++) { - charCode = str.charCodeAt(i) & 0xFF; - if (charCode > 127) - out += extendedASCII[charCode - 128]; - else - out += String.fromCharCode(charCode); - } - return out; - } - - function decodeUTF8(string) { - return decodeURIComponent(escape(string)); - } - - function getString(bytes) { - var i, str = ""; - for (i = 0; i < bytes.length; i++) - str += String.fromCharCode(bytes[i]); - return str; - } - - function getDate(timeRaw) { - var date = (timeRaw & 0xffff0000) >> 16, time = timeRaw & 0x0000ffff; - try { - return new Date(1980 + ((date & 0xFE00) >> 9), ((date & 0x01E0) >> 5) - 1, date & 0x001F, (time & 0xF800) >> 11, (time & 0x07E0) >> 5, - (time & 0x001F) * 2, 0); - } catch (e) { - } - } - - function readCommonHeader(entry, data, index, centralDirectory, onerror) { - entry.version = data.view.getUint16(index, true); - entry.bitFlag = data.view.getUint16(index + 2, true); - entry.compressionMethod = data.view.getUint16(index + 4, true); - entry.lastModDateRaw = data.view.getUint32(index + 6, true); - entry.lastModDate = getDate(entry.lastModDateRaw); - if ((entry.bitFlag & 0x01) === 0x01) { - onerror(ERR_ENCRYPTED); - return; - } - if (centralDirectory || (entry.bitFlag & 0x0008) != 0x0008) { - entry.crc32 = data.view.getUint32(index + 10, true); - entry.compressedSize = data.view.getUint32(index + 14, true); - entry.uncompressedSize = data.view.getUint32(index + 18, true); - } - if (entry.compressedSize === 0xFFFFFFFF || entry.uncompressedSize === 0xFFFFFFFF) { - onerror(ERR_ZIP64); - return; - } - entry.filenameLength = data.view.getUint16(index + 22, true); - entry.extraFieldLength = data.view.getUint16(index + 24, true); - } - - function createZipReader(reader, onerror) { - function Entry() { - } - - Entry.prototype.getData = function(writer, onend, onprogress, checkCrc32) { - var that = this, worker; - - function terminate(callback, param) { - if (worker) - worker.terminate(); - worker = null; - if (callback) - callback(param); - } - - function testCrc32(crc32) { - var dataCrc32 = getDataHelper(4); - dataCrc32.view.setUint32(0, crc32); - return that.crc32 == dataCrc32.view.getUint32(0); - } - - function getWriterData(uncompressedSize, crc32) { - if (checkCrc32 && !testCrc32(crc32)) - onreaderror(); - else - writer.getData(function(data) { - terminate(onend, data); - }); - } - - function onreaderror() { - terminate(onerror, ERR_READ_DATA); - } - - function onwriteerror() { - terminate(onerror, ERR_WRITE_DATA); - } - - reader.readUint8Array(that.offset, 30, function(bytes) { - var data = getDataHelper(bytes.length, bytes), dataOffset; - if (data.view.getUint32(0) != 0x504b0304) { - onerror(ERR_BAD_FORMAT); - return; - } - readCommonHeader(that, data, 4, false, onerror); - dataOffset = that.offset + 30 + that.filenameLength + that.extraFieldLength; - writer.init(function() { - if (that.compressionMethod === 0) - copy(reader, writer, dataOffset, that.compressedSize, checkCrc32, getWriterData, onprogress, onreaderror, onwriteerror); - else - worker = inflate(reader, writer, dataOffset, that.compressedSize, checkCrc32, getWriterData, onprogress, onreaderror, onwriteerror); - }, onwriteerror); - }, onreaderror); - }; - - function seekEOCDR(offset, entriesCallback) { - reader.readUint8Array(reader.size - offset, offset, function(bytes) { - var dataView = getDataHelper(bytes.length, bytes).view; - if (dataView.getUint32(0) != 0x504b0506) { - seekEOCDR(offset + 1, entriesCallback); - } else { - entriesCallback(dataView); - } - }, function() { - onerror(ERR_READ); - }); - } - - return { - getEntries : function(callback) { - if (reader.size < 22) { - onerror(ERR_BAD_FORMAT); - return; - } - // look for End of central directory record - seekEOCDR(22, function(dataView) { - var datalength, fileslength; - datalength = dataView.getUint32(16, true); - fileslength = dataView.getUint16(8, true); - reader.readUint8Array(datalength, reader.size - datalength, function(bytes) { - var i, index = 0, entries = [], entry, filename, comment, data = getDataHelper(bytes.length, bytes); - for (i = 0; i < fileslength; i++) { - entry = new Entry(); - if (data.view.getUint32(index) != 0x504b0102) { - onerror(ERR_BAD_FORMAT); - return; - } - readCommonHeader(entry, data, index + 6, true, onerror); - entry.commentLength = data.view.getUint16(index + 32, true); - entry.directory = ((data.view.getUint8(index + 38) & 0x10) == 0x10); - entry.offset = data.view.getUint32(index + 42, true); - filename = getString(data.array.subarray(index + 46, index + 46 + entry.filenameLength)); - entry.filename = ((entry.bitFlag & 0x0800) === 0x0800) ? decodeUTF8(filename) : decodeASCII(filename); - if (!entry.directory && entry.filename.charAt(entry.filename.length - 1) == "/") - entry.directory = true; - comment = getString(data.array.subarray(index + 46 + entry.filenameLength + entry.extraFieldLength, index + 46 - + entry.filenameLength + entry.extraFieldLength + entry.commentLength)); - entry.comment = ((entry.bitFlag & 0x0800) === 0x0800) ? decodeUTF8(comment) : decodeASCII(comment); - entries.push(entry); - index += 46 + entry.filenameLength + entry.extraFieldLength + entry.commentLength; - } - callback(entries); - }, function() { - onerror(ERR_READ); - }); - }); - }, - close : function(callback) { - if (callback) - callback(); - } - }; - } - - // ZipWriter - - function encodeUTF8(string) { - return unescape(encodeURIComponent(string)); - } - - function getBytes(str) { - var i, array = []; - for (i = 0; i < str.length; i++) - array.push(str.charCodeAt(i)); - return array; - } - - function createZipWriter(writer, onerror, dontDeflate) { - var worker, files = {}, filenames = [], datalength = 0; - - function terminate(callback, message) { - if (worker) - worker.terminate(); - worker = null; - if (callback) - callback(message); - } - - function onwriteerror() { - terminate(onerror, ERR_WRITE); - } - - function onreaderror() { - terminate(onerror, ERR_READ_DATA); - } - - return { - add : function(name, reader, onend, onprogress, options) { - var header, filename, date; - - function writeHeader(callback) { - var data; - date = options.lastModDate || new Date(); - header = getDataHelper(26); - files[name] = { - headerArray : header.array, - directory : options.directory, - filename : filename, - offset : datalength, - comment : getBytes(encodeUTF8(options.comment || "")) - }; - header.view.setUint32(0, 0x14000808); - if (options.version) - header.view.setUint8(0, options.version); - if (!dontDeflate && options.level !== 0 && !options.directory) - header.view.setUint16(4, 0x0800); - header.view.setUint16(6, (((date.getHours() << 6) | date.getMinutes()) << 5) | date.getSeconds() / 2, true); - header.view.setUint16(8, ((((date.getFullYear() - 1980) << 4) | (date.getMonth() + 1)) << 5) | date.getDate(), true); - header.view.setUint16(22, filename.length, true); - data = getDataHelper(30 + filename.length); - data.view.setUint32(0, 0x504b0304); - data.array.set(header.array, 4); - data.array.set(filename, 30); - datalength += data.array.length; - writer.writeUint8Array(data.array, callback, onwriteerror); - } - - function writeFooter(compressedLength, crc32) { - var footer = getDataHelper(16); - datalength += compressedLength || 0; - footer.view.setUint32(0, 0x504b0708); - if (typeof crc32 != "undefined") { - header.view.setUint32(10, crc32, true); - footer.view.setUint32(4, crc32, true); - } - if (reader) { - footer.view.setUint32(8, compressedLength, true); - header.view.setUint32(14, compressedLength, true); - footer.view.setUint32(12, reader.size, true); - header.view.setUint32(18, reader.size, true); - } - writer.writeUint8Array(footer.array, function() { - datalength += 16; - terminate(onend); - }, onwriteerror); - } - - function writeFile() { - options = options || {}; - name = name.trim(); - if (options.directory && name.charAt(name.length - 1) != "/") - name += "/"; - if (files.hasOwnProperty(name)) { - onerror(ERR_DUPLICATED_NAME); - return; - } - filename = getBytes(encodeUTF8(name)); - filenames.push(name); - writeHeader(function() { - if (reader) - if (dontDeflate || options.level === 0) - copy(reader, writer, 0, reader.size, true, writeFooter, onprogress, onreaderror, onwriteerror); - else - worker = deflate(reader, writer, options.level, writeFooter, onprogress, onreaderror, onwriteerror); - else - writeFooter(); - }, onwriteerror); - } - - if (reader) - reader.init(writeFile, onreaderror); - else - writeFile(); - }, - close : function(callback) { - var data, length = 0, index = 0, indexFilename, file; - for (indexFilename = 0; indexFilename < filenames.length; indexFilename++) { - file = files[filenames[indexFilename]]; - length += 46 + file.filename.length + file.comment.length; - } - data = getDataHelper(length + 22); - for (indexFilename = 0; indexFilename < filenames.length; indexFilename++) { - file = files[filenames[indexFilename]]; - data.view.setUint32(index, 0x504b0102); - data.view.setUint16(index + 4, 0x1400); - data.array.set(file.headerArray, index + 6); - data.view.setUint16(index + 32, file.comment.length, true); - if (file.directory) - data.view.setUint8(index + 38, 0x10); - data.view.setUint32(index + 42, file.offset, true); - data.array.set(file.filename, index + 46); - data.array.set(file.comment, index + 46 + file.filename.length); - index += 46 + file.filename.length + file.comment.length; - } - data.view.setUint32(index, 0x504b0506); - data.view.setUint16(index + 8, filenames.length, true); - data.view.setUint16(index + 10, filenames.length, true); - data.view.setUint32(index + 12, length, true); - data.view.setUint32(index + 16, datalength, true); - writer.writeUint8Array(data.array, function() { - terminate(function() { - writer.getData(callback); - }); - }, onwriteerror); - } - }; - } - - obj.zip = { - Reader : Reader, - Writer : Writer, - BlobReader : BlobReader, - Data64URIReader : Data64URIReader, - TextReader : TextReader, - BlobWriter : BlobWriter, - Data64URIWriter : Data64URIWriter, - TextWriter : TextWriter, - createReader : function(reader, callback, onerror) { - reader.init(function() { - callback(createZipReader(reader, onerror)); - }, onerror); - }, - createWriter : function(writer, callback, onerror, dontDeflate) { - writer.init(function() { - callback(createZipWriter(writer, onerror, dontDeflate)); - }, onerror); - }, - workerScriptsPath : "", - useWebWorkers : true - }; - -})(this); diff --git a/license b/license deleted file mode 100644 index f294d33d3..000000000 --- a/license +++ /dev/null @@ -1,27 +0,0 @@ -Copyright (c) 2013, FuturePress - -All rights reserved. - -Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions are met: - -1. Redistributions of source code must retain the above copyright notice, this - list of conditions and the following disclaimer. -2. Redistributions in binary form must reproduce the above copyright notice, - this list of conditions and the following disclaimer in the documentation - and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND -ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR -ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND -ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -The views and conclusions contained in the software and documentation are those -of the authors and should not be interpreted as representing official policies, -either expressed or implied, of the FreeBSD Project. diff --git a/package.json b/package.json index 183a60962..68d759000 100644 --- a/package.json +++ b/package.json @@ -1,18 +1,27 @@ { - "name": "EpubJS", - "version": "0.2.1", - "repository": "https://github.com/futurepress/epub.js", + "name": "epubjs", + "version": "0.3.0", + "description": "Render Epubs", + "main": "/lib/epub.js", + "directories": { + "test": "test" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "fchasen@gmail.com", + "license": "MIT", "devDependencies": { - "grunt": "~0.4.4", - "grunt-contrib-connect": "~0.7.1", - "connect": "~2.14.4", - "colors": "~0.6.2", - "optimist": "~0.6.1", - "portfinder": "~0.2.1", - "grunt-contrib-concat": "~0.4.0", - "grunt-contrib-uglify": "~0.4.0", - "grunt-contrib-jshint": "~0.10.0", - "grunt-contrib-copy": "~0.5.0", - "grunt-concat-sourcemap": "~0.4.1" + "colors": "^0.6.2", + "connect": "^3.0.1", + "express": "^4.5.1", + "grunt": "^0.4.5", + "grunt-contrib-connect": "^0.8.0", + "grunt-contrib-uglify": "^0.5.0", + "morgan": "^1.1.1", + "optimist": "^0.6.1", + "portfinder": "^0.2.1", + "qunitjs": "^1.14.0", + "serve-static": "^1.3.1" } } diff --git a/reader/css/annotations.css b/reader/css/annotations.css deleted file mode 100644 index ae74f9193..000000000 --- a/reader/css/annotations.css +++ /dev/null @@ -1,8 +0,0 @@ -.ui-loader { - display: none; -} - -.annotator-hl { - box-shadow: none !important; - cursor: pointer !important; -} \ No newline at end of file diff --git a/reader/css/main.css b/reader/css/main.css deleted file mode 100755 index 4a8a7d0ee..000000000 --- a/reader/css/main.css +++ /dev/null @@ -1,795 +0,0 @@ -@font-face { - font-family: 'fontello'; - src: url('../font/fontello.eot?60518104'); - src: url('../font/fontello.eot?60518104#iefix') format('embedded-opentype'), - url('../font/fontello.woff?60518104') format('woff'), - url('../font/fontello.ttf?60518104') format('truetype'), - url('../font/fontello.svg?60518104#fontello') format('svg'); - font-weight: normal; - font-style: normal; -} - -body { - background: #4e4e4e; - overflow: hidden; -} - -#main { - /* height: 500px; */ - position: absolute; - width: 100%; - height: 100%; - right: 0; - /* left: 40px; */ -/* -webkit-transform: translate(40px, 0); - -moz-transform: translate(40px, 0); */ - - /* border-radius: 5px 0px 0px 5px; */ - border-radius: 5px; - background: #fff; - overflow: hidden; - -webkit-transition: -webkit-transform .4s, width .2s; - -moz-transition: -webkit-transform .4s, width .2s; - - -moz-box-shadow: inset 0 0 50px rgba(0,0,0,.1); - -webkit-box-shadow: inset 0 0 50px rgba(0,0,0,.1); - box-shadow: inset 0 0 50px rgba(0,0,0,.1); -} - - -#titlebar { - height: 8%; - min-height: 20px; - padding: 10px; - /* margin: 0 50px 0 50px; */ - position: relative; - color: #4f4f4f; - font-weight: 100; - font-family: Georgia, "Times New Roman", Times, serif; - opacity: .5; - text-align: center; - -webkit-transition: opacity .5s; - -moz-transition: opacity .5s; - z-index: 10; -} - -#titlebar:hover { - opacity: 1; -} - -#titlebar a { - width: 18px; - height: 19px; - line-height: 20px; - overflow: hidden; - display: inline-block; - opacity: .5; - padding: 4px; - border-radius: 4px; -} - -#titlebar a::before { - visibility: visible; -} - -#titlebar a:hover { - opacity: .8; - border: 1px rgba(0,0,0,.2) solid; - padding: 3px; -} - -#titlebar a:active { - opacity: 1; - color: rgba(0,0,0,.6); - /* margin: 1px -1px -1px 1px; */ - -moz-box-shadow: inset 0 0 6px rgba(155,155,155,.8); - -webkit-box-shadow: inset 0 0 6px rgba(155,155,155,.8); - box-shadow: inset 0 0 6px rgba(155,155,155,.8); -} - -#book-title { - font-weight: 600; -} - -#title-seperator { - display: none; -} - -#viewer { - width: 80%; - height: 80%; - /* margin-left: 10%; */ - margin: 0 auto; - max-width: 1250px; - z-index: 2; - position: relative; - overflow: hidden; -} - -#viewer iframe { - border: none; -} - -#prev { - left: 40px; -} - -#next { - right: 40px; -} - -.arrow { - position: absolute; - top: 50%; - margin-top: -32px; - font-size: 64px; - color: #E2E2E2; - font-family: arial, sans-serif; - font-weight: bold; - cursor: pointer; -} - -.arrow:hover { - color: #777; -} - -.arrow:active, -.arrow.active { - color: #000; -} - -#sidebar { - background: #6b6b6b; - position: absolute; - /* left: -260px; */ - /* -webkit-transform: translate(-260px, 0); - -moz-transform: translate(-260px, 0); */ - top: 0; - min-width: 300px; - width: 25%; - height: 100%; - -webkit-transition: -webkit-transform .5s; - -moz-transition: -moz-transform .5s; - - overflow: hidden; -} - -#sidebar.open { - /* left: 0; */ - /* -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); */ -} - -#main.closed { - /* left: 300px; */ - -webkit-transform: translate(300px, 0); - -moz-transform: translate(300px, 0); -} - -#main.single { - width: 75%; -} - -#main.single #viewer { - /* width: 60%; - margin-left: 20%; */ -} - -#panels { - background: #4e4e4e; - position: absolute; - left: 0; - top: 0; - width: 100%; - padding: 13px 0; - height: 14px; - -moz-box-shadow: 0px 1px 3px rgba(0,0,0,.6); - -webkit-box-shadow: 0px 1px 3px rgba(0,0,0,.6); - box-shadow: 0px 1px 3px rgba(0,0,0,.6); -} - -#opener { - /* padding: 10px 10px; */ - float: left; -} - -/* #opener #slider { - width: 25px; -} */ - -#metainfo { - display: inline-block; - text-align: center; - max-width: 80%; -} - -#title-controls { - float: right; -} - -#panels a { - visibility: hidden; - width: 18px; - height: 20px; - overflow: hidden; - display: inline-block; - color: #ccc; - margin-left: 6px; -} - -#panels a::before { - visibility: visible; -} - -#panels a:hover { - color: #AAA; -} - -#panels a:active { - color: #AAA; - margin: 1px 0 -1px 6px; -} - -#panels a.active, -#panels a.active:hover { - color: #AAA; -} - -#searchBox { - width: 165px; - float: left; - margin-left: 10px; - margin-top: -1px; - /* - border-radius: 5px; - background: #9b9b9b; - float: left; - margin-left: 5px; - margin-top: -5px; - padding: 3px 10px; - color: #000; - border: none; - outline: none; */ - -} - -input::-webkit-input-placeholder { - color: #454545; -} -input:-moz-placeholder { - color: #454545; -} - -#divider { - position: absolute; - width: 1px; - border-right: 1px #000 solid; - height: 80%; - z-index: 1; - left: 50%; - margin-left: -1px; - top: 10%; - opacity: .15; - box-shadow: -2px 0 15px rgba(0, 0, 0, 1); - display: none; -} - -#divider.show { - display: block; -} - -#loader { - position: absolute; - z-index: 10; - left: 50%; - top: 50%; - margin: -33px 0 0 -33px; -} - -#tocView, -#bookmarksView { - overflow-x: hidden; - overflow-y: hidden; - min-width: 300px; - width: 25%; - height: 100%; - visibility: hidden; - -webkit-transition: visibility 0 ease .5s; - -moz-transition: visibility 0 ease .5s; -} - - - -#sidebar.open #tocView, -#sidebar.open #bookmarksView { - overflow-y: auto; - visibility: visible; - -webkit-transition: visibility 0 ease 0; - -moz-transition: visibility 0 ease 0; -} - -#sidebar.open #tocView { - display: block; -} - -#tocView > ul, -#bookmarksView > ul { - margin-top: 15px; - margin-bottom: 50px; - padding-left: 20px; - display: block; -} - -#tocView li, -#bookmarksView li { - margin-bottom:10px; - width: 225px; - font-family: Georgia, "Times New Roman", Times, serif; - list-style: none; - text-transform: capitalize; -} - -#tocView li:active, -#tocView li.currentChapter -{ - list-style: none; -} - -.list_item a { - color: #AAA; - text-decoration: none; -} - -.list_item a.chapter { - font-size: 1em; -} - -.list_item a.section { - font-size: .8em; -} - -.list_item.currentChapter > a, -.list_item a:hover { - color: #f1f1f1 -} - -/* #tocView li.openChapter > a, */ -.list_item a:hover { - color: #E2E2E2; -} - -.list_item ul { - padding-left:10px; - margin-top: 8px; - display: none; -} - -.list_item.currentChapter > ul, -.list_item.openChapter > ul { - display: block; -} - -#tocView.hidden { - display: none; -} - -.toc_toggle { - display: inline-block; - width: 14px; - cursor: pointer; - -webkit-user-select: none; - -moz-user-select: none; - user-select: none; -} - -.toc_toggle:before { - content: '▸'; - color: #fff; - margin-right: -4px; -} - -.currentChapter > .toc_toggle:before, -.openChapter > .toc_toggle:before { - content: '▾'; -} - -.view { - width: 300px; - height: 100%; - display: none; - padding-top: 50px; - overflow-y: auto; -} - -#searchResults { - margin-bottom: 50px; - padding-left: 20px; - display: block; -} - -#searchResults li { - margin-bottom:10px; - width: 225px; - font-family: Georgia, "Times New Roman", Times, serif; - list-style: none; -} - -#searchResults a { - color: #AAA; - text-decoration: none; -} - -#searchResults p { - text-decoration: none; - font-size: 12px; - line-height: 16px; -} - -#searchResults p .match { - background: #ccc; - color: #000; -} - -#searchResults li > p { - color: #AAA; -} - -#searchResults li a:hover { - color: #E2E2E2; -} - -#searchView.shown { - display: block; - overflow-y: scroll; -} - -#notes { - padding: 0 0 0 34px; -} - -#notes li { - color: #eee; - font-size: 12px; - width: 240px; - border-top: 1px #fff solid; - padding-top: 6px; - margin-bottom: 6px; -} - -#notes li a { - color: #fff; - display: inline-block; - margin-left: 6px; -} - -#notes li a:hover { - text-decoration: underline; -} - -#notes li img { - max-width: 240px; -} - -#note-text { - display: block; - width: 260px; - height: 80px; - margin: 0 auto; - padding: 5px; - border-radius: 5px; -} - -#note-text[disabled], #note-text[disabled="disabled"]{ - opacity: .5; -} - -#note-anchor { - margin-left: 218px; - margin-top: 5px; -} - -#settingsPanel { - display:none; -} - -#settingsPanel h3 { - color:#f1f1f1; - font-family:Georgia, "Times New Roman", Times, serif; - margin-bottom:10px; -} - -#settingsPanel ul { - margin-top:60px; - list-style-type:none; -} - -#settingsPanel li { - font-size:1em; - color:#f1f1f1; -} - -#settingsPanel .xsmall { font-size:x-small; } -#settingsPanel .small { font-size:small; } -#settingsPanel .medium { font-size:medium; } -#settingsPanel .large { font-size:large; } -#settingsPanel .xlarge { font-size:x-large; } - -.highlight { background-color: yellow } - -.modal { - position: fixed; - top: 50%; - left: 50%; - width: 50%; - width: 630px; - - height: auto; - z-index: 2000; - visibility: hidden; - margin-left: -320px; - margin-top: -160px; - -} - -.overlay { - position: fixed; - width: 100%; - height: 100%; - visibility: hidden; - top: 0; - left: 0; - z-index: 1000; - opacity: 0; - background: rgba(255,255,255,0.8); - -webkit-transition: all 0.3s; - -moz-transition: all 0.3s; - transition: all 0.3s; -} - -.md-show { - visibility: visible; -} - -.md-show ~ .overlay { - opacity: 1; - visibility: visible; -} - -/* Content styles */ -.md-content { - color: #fff; - background: #6b6b6b; - position: relative; - border-radius: 3px; - margin: 0 auto; - height: 320px; -} - -.md-content h3 { - margin: 0; - padding: 6px; - text-align: center; - font-size: 22px; - font-weight: 300; - opacity: 0.8; - background: rgba(0,0,0,0.1); - border-radius: 3px 3px 0 0; -} - -.md-content > div { - padding: 15px 40px 30px; - margin: 0; - font-weight: 300; - font-size: 14px; -} - -.md-content > div p { - margin: 0; - padding: 10px 0; -} - -.md-content > div ul { - margin: 0; - padding: 0 0 30px 20px; -} - -.md-content > div ul li { - padding: 5px 0; -} - -.md-content button { - display: block; - margin: 0 auto; - font-size: 0.8em; -} - -/* Effect 1: Fade in and scale up */ -.md-effect-1 .md-content { - -webkit-transform: scale(0.7); - -moz-transform: scale(0.7); - -ms-transform: scale(0.7); - transform: scale(0.7); - opacity: 0; - -webkit-transition: all 0.3s; - -moz-transition: all 0.3s; - transition: all 0.3s; -} - -.md-show.md-effect-1 .md-content { - -webkit-transform: scale(1); - -moz-transform: scale(1); - -ms-transform: scale(1); - transform: scale(1); - opacity: 1; -} - -.md-content > .closer { - font-size: 18px; - position: absolute; - right: 0; - top: 0; - font-size: 24px; - padding: 4px; -} - -@media only screen and (max-width: 1040px) { - #viewer{ - width: 50%; - margin-left: 25%; - } - - #divider, - #divider.show { - display: none; - } -} - -@media only screen and (max-width: 900px) { - #viewer{ - width: 60%; - margin-left: 20%; - } - - #prev { - left: 20px; - } - - #next { - right: 20px; - } -} - -@media only screen and (max-width: 550px) { - #viewer{ - width: 80%; - margin-left: 10%; - } - - #prev { - left: 0; - } - - #next { - right: 0; - } - - .arrow { - height: 100%; - top: 45px; - width: 10%; - text-indent: -10000px; - } - - #main { - -webkit-transform: translate(0, 0); - -moz-transform: translate(0, 0); - -webkit-transition: -webkit-transform .3s; - -moz-transition: -moz-transform .3s; - } - - #main.closed { - -webkit-transform: translate(260px, 0); - -moz-transform: translate(260px, 0); - } - - #titlebar { - /* font-size: 16px; */ - /* margin: 0 50px 0 50px; */ - } - - #metainfo { - font-size: 10px; - } - - #tocView { - width: 260px; - } - - #tocView li { - font-size: 12px; - } - - #tocView > ul{ - padding-left: 10px; - webkit-padding-start:; - } -} - - -/* For iPad portrait layouts only */ -@media only screen and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation: portrait) { - #viewer iframe { - width: 460px; - height: 740px; - } -} - /*For iPad landscape layouts only */ -@media only screen and (min-device-width: 481px) and (max-device-width: 1024px) and (orientation: landscape) { - #viewer iframe { - width: 460px; - height: 415px; - } -} -/* For iPhone portrait layouts only */ -@media only screen and (max-device-width: 480px) and (orientation: portrait) { - #viewer { - width: 256px; - height: 432px; - } - #viewer iframe { - width: 256px; - height: 432px; - } -} -/* For iPhone landscape layouts only */ -@media only screen and (max-device-width: 480px) and (orientation: landscape) { - #viewer iframe { - width: 256px; - height: 124px; - } -} - -[class^="icon-"]:before, [class*=" icon-"]:before { - font-family: "fontello"; - font-style: normal; - font-weight: normal; - speak: none; - - display: inline-block; - text-decoration: inherit; - width: 1em; - margin-right: .2em; - text-align: center; - /* opacity: .8; */ - - /* For safety - reset parent styles, that can break glyph codes*/ - font-variant: normal; - text-transform: none; - - /* you can be more comfortable with increased icons size */ - font-size: 112%; -} - - -.icon-search:before { content: '\e807'; } /* '' */ -.icon-resize-full-1:before { content: '\e804'; } /* '' */ -.icon-cancel-circled2:before { content: '\e80f'; } /* '' */ -.icon-link:before { content: '\e80d'; } /* '' */ -.icon-bookmark:before { content: '\e805'; } /* '' */ -.icon-bookmark-empty:before { content: '\e806'; } /* '' */ -.icon-download-cloud:before { content: '\e811'; } /* '' */ -.icon-edit:before { content: '\e814'; } /* '' */ -.icon-menu:before { content: '\e802'; } /* '' */ -.icon-cog:before { content: '\e813'; } /* '' */ -.icon-resize-full:before { content: '\e812'; } /* '' */ -.icon-cancel-circled:before { content: '\e80e'; } /* '' */ -.icon-up-dir:before { content: '\e80c'; } /* '' */ -.icon-right-dir:before { content: '\e80b'; } /* '' */ -.icon-angle-right:before { content: '\e809'; } /* '' */ -.icon-angle-down:before { content: '\e80a'; } /* '' */ -.icon-right:before { content: '\e815'; } /* '' */ -.icon-list-1:before { content: '\e803'; } /* '' */ -.icon-list-numbered:before { content: '\e801'; } /* '' */ -.icon-columns:before { content: '\e810'; } /* '' */ -.icon-list:before { content: '\e800'; } /* '' */ -.icon-resize-small:before { content: '\e808'; } /* '' */ \ No newline at end of file diff --git a/reader/css/normalize.css b/reader/css/normalize.css deleted file mode 100755 index c3e014d95..000000000 --- a/reader/css/normalize.css +++ /dev/null @@ -1,505 +0,0 @@ -/*! normalize.css v1.0.1 | MIT License | git.io/normalize */ - -/* ========================================================================== - HTML5 display definitions - ========================================================================== */ - -/* - * Corrects `block` display not defined in IE 6/7/8/9 and Firefox 3. - */ - -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section, -summary { - display: block; -} - -/* - * Corrects `inline-block` display not defined in IE 6/7/8/9 and Firefox 3. - */ - -audio, -canvas, -video { - display: inline-block; - *display: inline; - *zoom: 1; -} - -/* - * Prevents modern browsers from displaying `audio` without controls. - * Remove excess height in iOS 5 devices. - */ - -audio:not([controls]) { - display: none; - height: 0; -} - -/* - * Addresses styling for `hidden` attribute not present in IE 7/8/9, Firefox 3, - * and Safari 4. - * Known issue: no IE 6 support. - */ - -[hidden] { - display: none; -} - -/* ========================================================================== - Base - ========================================================================== */ - -/* - * 1. Corrects text resizing oddly in IE 6/7 when body `font-size` is set using - * `em` units. - * 2. Prevents iOS text size adjust after orientation change, without disabling - * user zoom. - */ - -html { - font-size: 100%; /* 1 */ - -webkit-text-size-adjust: 100%; /* 2 */ - -ms-text-size-adjust: 100%; /* 2 */ -} - -/* - * Addresses `font-family` inconsistency between `textarea` and other form - * elements. - */ - -html, -button, -input, -select, -textarea { - font-family: sans-serif; -} - -/* - * Addresses margins handled incorrectly in IE 6/7. - */ - -body { - margin: 0; -} - -/* ========================================================================== - Links - ========================================================================== */ - -/* - * Addresses `outline` inconsistency between Chrome and other browsers. - */ - -a:focus { - outline: thin dotted; -} - -/* - * Improves readability when focused and also mouse hovered in all browsers. - */ - -a:active, -a:hover { - outline: 0; -} - -/* ========================================================================== - Typography - ========================================================================== */ - -/* - * Addresses font sizes and margins set differently in IE 6/7. - * Addresses font sizes within `section` and `article` in Firefox 4+, Safari 5, - * and Chrome. - */ - -h1 { - font-size: 2em; - margin: 0.67em 0; -} - -h2 { - font-size: 1.5em; - margin: 0.83em 0; -} - -h3 { - font-size: 1.17em; - margin: 1em 0; -} - -h4 { - font-size: 1em; - margin: 1.33em 0; -} - -h5 { - font-size: 0.83em; - margin: 1.67em 0; -} - -h6 { - font-size: 0.75em; - margin: 2.33em 0; -} - -/* - * Addresses styling not present in IE 7/8/9, Safari 5, and Chrome. - */ - -abbr[title] { - border-bottom: 1px dotted; -} - -/* - * Addresses style set to `bolder` in Firefox 3+, Safari 4/5, and Chrome. - */ - -b, -strong { - font-weight: bold; -} - -blockquote { - margin: 1em 40px; -} - -/* - * Addresses styling not present in Safari 5 and Chrome. - */ - -dfn { - font-style: italic; -} - -/* - * Addresses styling not present in IE 6/7/8/9. - */ - -mark { - background: #ff0; - color: #000; -} - -/* - * Addresses margins set differently in IE 6/7. - */ - -p, -pre { - margin: 1em 0; -} - -/* - * Corrects font family set oddly in IE 6, Safari 4/5, and Chrome. - */ - -code, -kbd, -pre, -samp { - font-family: monospace, serif; - _font-family: 'courier new', monospace; - font-size: 1em; -} - -/* - * Improves readability of pre-formatted text in all browsers. - */ - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - -/* - * Addresses CSS quotes not supported in IE 6/7. - */ - -q { - quotes: none; -} - -/* - * Addresses `quotes` property not supported in Safari 4. - */ - -q:before, -q:after { - content: ''; - content: none; -} - -/* - * Addresses inconsistent and variable font size in all browsers. - */ - -small { - font-size: 80%; -} - -/* - * Prevents `sub` and `sup` affecting `line-height` in all browsers. - */ - -sub, -sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -/* ========================================================================== - Lists - ========================================================================== */ - -/* - * Addresses margins set differently in IE 6/7. - */ - -dl, -menu, -ol, -ul { - margin: 1em 0; -} - -dd { - margin: 0 0 0 40px; -} - -/* - * Addresses paddings set differently in IE 6/7. - */ - -menu, -ol, -ul { - padding: 0 0 0 40px; -} - -/* - * Corrects list images handled incorrectly in IE 7. - */ - -nav ul, -nav ol { - list-style: none; - list-style-image: none; -} - -/* ========================================================================== - Embedded content - ========================================================================== */ - -/* - * 1. Removes border when inside `a` element in IE 6/7/8/9 and Firefox 3. - * 2. Improves image quality when scaled in IE 7. - */ - -img { - border: 0; /* 1 */ - -ms-interpolation-mode: bicubic; /* 2 */ -} - -/* - * Corrects overflow displayed oddly in IE 9. - */ - -svg:not(:root) { - overflow: hidden; -} - -/* ========================================================================== - Figures - ========================================================================== */ - -/* - * Addresses margin not present in IE 6/7/8/9, Safari 5, and Opera 11. - */ - -figure { - margin: 0; -} - -/* ========================================================================== - Forms - ========================================================================== */ - -/* - * Corrects margin displayed oddly in IE 6/7. - */ - -form { - margin: 0; -} - -/* - * Define consistent border, margin, and padding. - */ - -fieldset { - border: 1px solid #c0c0c0; - margin: 0 2px; - padding: 0.35em 0.625em 0.75em; -} - -/* - * 1. Corrects color not being inherited in IE 6/7/8/9. - * 2. Corrects text not wrapping in Firefox 3. - * 3. Corrects alignment displayed oddly in IE 6/7. - */ - -legend { - border: 0; /* 1 */ - padding: 0; - white-space: normal; /* 2 */ - *margin-left: -7px; /* 3 */ -} - -/* - * 1. Corrects font size not being inherited in all browsers. - * 2. Addresses margins set differently in IE 6/7, Firefox 3+, Safari 5, - * and Chrome. - * 3. Improves appearance and consistency in all browsers. - */ - -button, -input, -select, -textarea { - font-size: 100%; /* 1 */ - margin: 0; /* 2 */ - vertical-align: baseline; /* 3 */ - *vertical-align: middle; /* 3 */ -} - -/* - * Addresses Firefox 3+ setting `line-height` on `input` using `!important` in - * the UA stylesheet. - */ - -button, -input { - line-height: normal; -} - -/* - * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` - * and `video` controls. - * 2. Corrects inability to style clickable `input` types in iOS. - * 3. Improves usability and consistency of cursor style between image-type - * `input` and others. - * 4. Removes inner spacing in IE 7 without affecting normal text inputs. - * Known issue: inner spacing remains in IE 6. - */ - -button, -html input[type="button"], /* 1 */ -input[type="reset"], -input[type="submit"] { - -webkit-appearance: button; /* 2 */ - cursor: pointer; /* 3 */ - *overflow: visible; /* 4 */ -} - -/* - * Re-set default cursor for disabled elements. - */ - -button[disabled], -input[disabled] { - cursor: default; -} - -/* - * 1. Addresses box sizing set to content-box in IE 8/9. - * 2. Removes excess padding in IE 8/9. - * 3. Removes excess padding in IE 7. - * Known issue: excess padding remains in IE 6. - */ - -input[type="checkbox"], -input[type="radio"] { - box-sizing: border-box; /* 1 */ - padding: 0; /* 2 */ - *height: 13px; /* 3 */ - *width: 13px; /* 3 */ -} - -/* - * 1. Addresses `appearance` set to `searchfield` in Safari 5 and Chrome. - * 2. Addresses `box-sizing` set to `border-box` in Safari 5 and Chrome - * (include `-moz` to future-proof). - */ -/* -input[type="search"] { - -webkit-appearance: textfield; - -moz-box-sizing: content-box; - -webkit-box-sizing: content-box; - box-sizing: content-box; -} -*/ - -/* - * Removes inner padding and search cancel button in Safari 5 and Chrome - * on OS X. - */ - -/* input[type="search"]::-webkit-search-cancel-button, -input[type="search"]::-webkit-search-decoration { - -webkit-appearance: none; -} */ - -/* - * Removes inner padding and border in Firefox 3+. - */ - -button::-moz-focus-inner, -input::-moz-focus-inner { - border: 0; - padding: 0; -} - -/* - * 1. Removes default vertical scrollbar in IE 6/7/8/9. - * 2. Improves readability and alignment in all browsers. - */ - -textarea { - overflow: auto; /* 1 */ - vertical-align: top; /* 2 */ -} - -/* ========================================================================== - Tables - ========================================================================== */ - -/* - * Remove most spacing between table cells. - */ - -table { - border-collapse: collapse; - border-spacing: 0; -} diff --git a/reader/css/popup.css b/reader/css/popup.css deleted file mode 100644 index c41aac716..000000000 --- a/reader/css/popup.css +++ /dev/null @@ -1,96 +0,0 @@ -/* http://davidwalsh.name/css-tooltips */ -/* base CSS element */ -.popup { - background: #eee; - border: 1px solid #ccc; - padding: 10px; - border-radius: 8px; - box-shadow: 0 2px 5px rgba(0, 0, 0, 0.2); - position: fixed; - max-width: 300px; - font-size: 12px; - - display: none; - margin-left: 2px; - - margin-top: 30px; -} - -.popup.above { - margin-top: -10px; -} - -.popup.left { - margin-left: -20px; -} - -.popup.right { - margin-left: 40px; -} - -.pop_content { - max-height: 225px; - overflow-y: auto; -} - -.pop_content > p { - margin-top: 0; -} - -/* below */ -.popup:before { - position: absolute; - display: inline-block; - border-bottom: 10px solid #eee; - border-right: 10px solid transparent; - border-left: 10px solid transparent; - border-bottom-color: rgba(0, 0, 0, 0.2); - left: 50%; - top: -10px; - margin-left: -6px; - content: ''; -} - -.popup:after { - position: absolute; - display: inline-block; - border-bottom: 9px solid #eee; - border-right: 9px solid transparent; - border-left: 9px solid transparent; - left: 50%; - top: -9px; - margin-left: -5px; - content: ''; -} - -/* above */ -.popup.above:before { - border-bottom: none; - border-top: 10px solid #eee; - border-top-color: rgba(0, 0, 0, 0.2); - top: 100%; -} - -.popup.above:after { - border-bottom: none; - border-top: 9px solid #eee; - top: 100%; -} - -.popup.left:before, -.popup.left:after -{ - left: 20px; -} - -.popup.right:before, -.popup.right:after -{ - left: auto; - right: 20px; -} - - -.popup.show, .popup.on { - display: block; -} \ No newline at end of file diff --git a/reader/dev.html b/reader/dev.html deleted file mode 100755 index 12aae161d..000000000 --- a/reader/dev.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- Menu -
-
- -   –   - -
- -
- -
- -
- - -
-
- -
- - diff --git a/reader/font/fontello.eot b/reader/font/fontello.eot deleted file mode 100644 index f63ffa043..000000000 Binary files a/reader/font/fontello.eot and /dev/null differ diff --git a/reader/font/fontello.svg b/reader/font/fontello.svg deleted file mode 100644 index 2db13984a..000000000 --- a/reader/font/fontello.svg +++ /dev/null @@ -1,33 +0,0 @@ - - - -Copyright (C) 2013 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/reader/font/fontello.ttf b/reader/font/fontello.ttf deleted file mode 100644 index 95715f866..000000000 Binary files a/reader/font/fontello.ttf and /dev/null differ diff --git a/reader/font/fontello.woff b/reader/font/fontello.woff deleted file mode 100644 index 084f0c55c..000000000 Binary files a/reader/font/fontello.woff and /dev/null differ diff --git a/reader/humans.txt b/reader/humans.txt deleted file mode 100755 index 5b037cf2e..000000000 --- a/reader/humans.txt +++ /dev/null @@ -1,15 +0,0 @@ -# humanstxt.org/ -# The humans responsible & technology colophon - -# TEAM - - -- -- - -# THANKS - - - -# TECHNOLOGY COLOPHON - - HTML5, CSS3 - jQuery, Modernizr diff --git a/reader/img/.gitignore b/reader/img/.gitignore deleted file mode 100755 index e69de29bb..000000000 diff --git a/reader/img/annotator-glyph-sprite.png b/reader/img/annotator-glyph-sprite.png deleted file mode 100644 index 5bb11cd84..000000000 Binary files a/reader/img/annotator-glyph-sprite.png and /dev/null differ diff --git a/reader/img/annotator-icon-sprite.png b/reader/img/annotator-icon-sprite.png deleted file mode 100644 index 3058651c5..000000000 Binary files a/reader/img/annotator-icon-sprite.png and /dev/null differ diff --git a/reader/img/apple-touch-icon.png b/reader/img/apple-touch-icon.png deleted file mode 100755 index efc5c5a61..000000000 Binary files a/reader/img/apple-touch-icon.png and /dev/null differ diff --git a/reader/img/cancelfullscreen.png b/reader/img/cancelfullscreen.png deleted file mode 100644 index bcf409e78..000000000 Binary files a/reader/img/cancelfullscreen.png and /dev/null differ diff --git a/reader/img/close.png b/reader/img/close.png deleted file mode 100644 index 46189e543..000000000 Binary files a/reader/img/close.png and /dev/null differ diff --git a/reader/img/fullscreen.png b/reader/img/fullscreen.png deleted file mode 100644 index 2f8d48ded..000000000 Binary files a/reader/img/fullscreen.png and /dev/null differ diff --git a/reader/img/loader.gif b/reader/img/loader.gif deleted file mode 100644 index 68005bcbe..000000000 Binary files a/reader/img/loader.gif and /dev/null differ diff --git a/reader/img/menu-icon.png b/reader/img/menu-icon.png deleted file mode 100644 index 5f40e0e9c..000000000 Binary files a/reader/img/menu-icon.png and /dev/null differ diff --git a/reader/img/save.png b/reader/img/save.png deleted file mode 100644 index 5a5bc0e09..000000000 Binary files a/reader/img/save.png and /dev/null differ diff --git a/reader/img/saved.png b/reader/img/saved.png deleted file mode 100644 index 0f1981bdd..000000000 Binary files a/reader/img/saved.png and /dev/null differ diff --git a/reader/img/settings-s.png b/reader/img/settings-s.png deleted file mode 100644 index fc21e7873..000000000 Binary files a/reader/img/settings-s.png and /dev/null differ diff --git a/reader/img/settings.png b/reader/img/settings.png deleted file mode 100644 index be20cba08..000000000 Binary files a/reader/img/settings.png and /dev/null differ diff --git a/reader/img/star.png b/reader/img/star.png deleted file mode 100644 index 451089359..000000000 Binary files a/reader/img/star.png and /dev/null differ diff --git a/reader/index.html b/reader/index.html deleted file mode 100755 index 1b5ceb5a1..000000000 --- a/reader/index.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- -
-
- Menu -
-
- -   –   - -
- -
- -
- -
- - -
-
- -
- - diff --git a/reader/js/epub.js.map b/reader/js/epub.js.map deleted file mode 100644 index d43aa253e..000000000 --- a/reader/js/epub.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"epub.min.js","sources":["epub.js"],"names":["n","this","t","_","r","e","Array","prototype","u","Object","i","Function","a","push","o","slice","c","concat","l","toString","f","hasOwnProperty","s","forEach","p","map","h","reduce","v","reduceRight","d","filter","g","every","m","some","y","indexOf","b","lastIndexOf","x","isArray","keys","j","bind","w","_wrapped","exports","module","VERSION","A","each","length","call","has","collect","O","foldl","inject","arguments","TypeError","foldr","find","detect","E","select","reject","all","identity","any","contains","include","invoke","isFunction","apply","pluck","where","isEmpty","findWhere","max","Math","computed","value","min","shuffle","random","k","sortBy","index","criteria","sort","F","groupBy","countBy","sortedIndex","toArray","values","size","first","head","take","initial","last","rest","tail","drop","compact","R","flatten","without","difference","uniq","unique","union","intersection","zip","object","range","ceil","partial","bindAll","functions","memoize","delay","setTimeout","defer","throttle","Date","clearTimeout","debounce","once","wrap","compose","after","pairs","invert","methods","extend","pick","omit","defaults","clone","isObject","tap","I","source","global","multiline","ignoreCase","constructor","pop","isEqual","isString","isElement","nodeType","isArguments","isFinite","isNaN","parseFloat","isNumber","isBoolean","isNull","isUndefined","noConflict","times","floor","M","escape","&","<",">","\"","'","/","unescape","S","RegExp","join","replace","result","mixin","D","N","uniqueId","templateSettings","evaluate","interpolate","T","q","\\","\r","\n","\t","
","
","B","template","variable","chain","_chain","define","requireModule","require","requirejs","registry","seen","name","deps","callback","resolve","child","charAt","parts","split","parentBase","part","_eak_seen","Error","mod","reified","__dependency1__","__exports__","Promise","array","label","__dependency2__","fulfilled","state","rejected","reason","isNonThenable","entries","fulfilledResolver","resolveAll","rejectedResolver","results","remaining","entry","cast","then","useNextTick","process","nextTick","flush","useMutationObserver","iterations","observer","BrowserMutationObserver","node","document","createTextNode","observe","characterData","data","useSetTimeout","queue","tuple","arg","scheduleFlush","browserGlobal","window","MutationObserver","WebKitMutationObserver","configure","config","on","EventTarget","instrument","deferred","promise","callbacks","callbacksFor","_promiseCallbacks","off","trigger","undefined","eventName","allCallbacks","splice","options","__dependency3__","promises","filterFn","filterResults","valuesLen","filtered","keysOf","fulfilledTo","property","onRejection","now","guid","_guidKey","_id","detail","_detail","childGuid","_label","timeStamp","stack","error","mapFn","resultLen","mappedResults","makeNodeCallbackFor","nodeFunc","binding","nodeArgs","thisArg","__dependency4__","__dependency5__","__dependency6__","__dependency7__","__dependency8__","__dependency9__","noop","resolver","counter","_subscribers","invokeResolver","resolvePromise","rejectPromise","subscribe","parent","onFulfillment","subscribers","FULFILLED","REJECTED","publish","settled","invokeCallback","succeeded","failed","hasCallback","handleThenable","resolved","objectOrFunction","val","fulfill","_state","PENDING","SEALED","async","publishFulfillment","publishRejection","_onerror","race","Resolve","Reject","guidKey","thenPromise","catch","finally","Constructor","fulfillmentAt","pending","getTime","prop","__dependency10__","__dependency11__","__dependency12__","__dependency13__","__dependency14__","__dependency15__","denodeify","allSettled","hash","rethrow","asap","__PROMISE_INSTRUMENTATION__","RSVP","EPUBJS","plugins","filePath","Render","root","previousEpub","ePub","bookPath","Book","amd","settings","bookKey","packageUrl","storage","fromStorage","saved","online","contained","width","height","layoutOveride","orientation","minSpreadWidth","gap","version","restore","reload","goto","styles","headTags","withCredentials","render_method","EPUBJSVERSION","spinePos","stored","navigator","onLine","networkListeners","store","fileStorage","ready","manifest","spine","metadata","cover","toc","pageList","readyPromises","pagination","Pagination","pageListReady","_ready","isRendered","_q","core","_rendering","_displayQ","_moving","_gotoQ","renderer","Renderer","setMinSpreadWidth","setGap","listenToRenderer","defer_opened","opened","open","addEventListener","unload","forceReload","epubpackage","book","bookUrl","urlFrom","isContained","unarchive","loadPackage","localStorage","packageXml","identifier","packageIdentifier","restored","unpack","storeOffline","_registerReplacements","_containerPath","parse","Parser","containerPath","loadXml","containerXml","container","paths","contentsPath","basePath","packagePath","encoding","console","contents","packageContents","spineIndexByURL","generateBookKey","globalLayoutProperties","parseLayoutProperties","coverPath","spineNodeIndex","navPath","navUrl","navHtml","nav","epubcfi","EpubCFI","wait","pg","cfi","generateCfiFromHref","href","tocPath","tocUrl","tocXml","createHiddenRender","_width","_height","hiddenContainer","hiddenEl","box","element","getBoundingClientRect","forceSingle","createElement","style","visibility","overflow","appendChild","initialize","generatePageList","pager","spineLength","currentPage","nextChapter","chapter","next","done","Chapter","displayChapter","pageMap","item","start","page","spreads","end","remove","removeChild","generatePagination","defered","loadPagination","pagelistJSON","JSON","getPageList","getMetadata","getToc","Events","startPage","endPage","percent","pageRange","pageFromCfi","percentageFromPage","anchorPage","percentage","loadChange","url","uri","currentChapter","absolute","path","warn","filename","unlistenToRenderer","getXml","request","base","protocol","fromRoot","location","origin","host","baseTag","getElementsByTagName","resolveUrl","pathname","Unarchiver","openZip","extension","isSaved","storedSettings","getItem","saveContents","setItem","stringify","removeSavedContents","removeItem","renderTo","elem","rendered","getEl","_rendered","startDisplay","display","previousLocationCfi","gotoCfi","fetch","fromStore","len","clearSaved","chap","render","pos","enqueue","lastPage","preloadNextChapter","dequeue","message","nextPage","prevPage","prev","prevChapter","linear","getCurrentLocationCfi","currentLocationCfi","target","gotoPercentage","parseInt","substring","gotoPage","gotoHref","cfiString","spineItem","section","relativeURL","firstPage","cfiFromPage","pageFromPercentage","assets","batch","availableOffline","setStyle","prefixed","noreflow","reformatTimeout","reformat","removeStyle","addHeadTag","tag","attrs","useSpreads","use","load","destroy","removeEventListener","applyStyles","applyHeadTags","registerHook","hrefs","_needsAssetReplacement","resources","svg","getStorageType","layout","spread","event","spineObject","id","cfiBase","properties","manifestProperties","pages","loaded","_store","get","xml","setDocument","tempUrl","getUrl","setPages","num","getPages","getID","ID","revokeUrl","_document","implementation","createDocument","namespaceURI","doctype","importNode","documentElement","cfiFromRange","_range","startXpath","endXpath","startContainer","endContainer","cleanEndTextContent","getElementXPath","nsResolver","XPathResult","FIRST_ORDERED_NODE_TYPE","singleNodeValue","collapsed","createRange","setStart","startOffset","setEnd","endOffset","log","cleanStartTextContent","cleanStringForXpath","textContent","generateCfiFromRange","_query","matches","query","toLowerCase","text","textSprint","func","treeWalker","createTreeWalker","NodeFilter","SHOW_TEXT","acceptNode","test","FILTER_REJECT","FILTER_ACCEPT","nextNode","getElementById","getEls","classes","getElementsByClassName","type","handler","readyState","DONE","status","responseXML","response","supportsURL","Blob","URL","BLOB_RESPONSE","xhr","XMLHttpRequest","xhrPrototype","defineProperty","onreadystatechange","responseType","setRequestHeader","overrideMimeType","send","obj","arr","member","newitm","ident","withoutProtocol","dot","firstSlash","directory","fragment","doubleSlash","search","folder","lastSlash","dataURLToBlob","dataURL","contentType","raw","rawLength","uInt8Array","BASE64_MARKER","atob","Uint8Array","charCodeAt","addScript","src","onload","body","addScripts","srcArr","total","curr","cb","addCss","rel","unprefixed","vendors","upper","toUpperCase","segments","folders","uuid","insert","compareFunction","locationOf","_start","_end","compared","pivot","indexOfSorted","_scope","scope","funcName","args","context","inwait","shift","clear","getElementTreeXPath","nodeName","tagName","pathIndex","isXhtml","ownerDocument","getAttribute","Node","TEXT_NODE","indexOfTextNode","parentNode","sibling","previousSibling","DOCUMENT_TYPE_NODE","prefix","ns","xhtml","epub","str","match","textNode","sib","children","childNodes","cfiStr","generateChapterComponent","_spineNodeIndex","_pos","generatePathComponent","steps","segment","generateCfiFromElement","pathTo","unshift","getChapterComponent","splitStr","getPathComponent","pathComponent","getCharecterOffsetComponent","chapSegment","chapterComponent","charecterOffsetComponent","assertion","chapId","endInt","parseStep","has_brackets","spineId","step","characterOffset","textLocationAssertion","addMarker","_doc","_marker","lastStep","doc","marker","createMarker","findParent","splitText","classList","add","insertBefore","firstChild","removeMarker","nextSib","nextSibling","prevSib","sections","compare","cfiOne","cfiTwo","generateCfiFromTextNode","anchor","offset","generateCfiFromRangeAnchor","anchorNode","anchorOffset","startElement","startSteps","startPath","startIndex","endElement","endSteps","endPath","endIndex","generateXpathFromSteps","xpath","position","generateRangeFromCfi","textLength","debug","selectNode","el","events","createEvent","tell","listen","deafen","listenUntil","evt","CustomEvent","msg","dispatchEvent","bindto","OnEvt","OffEvt","unlisten","hooks","Hooks","getHooks","plugs","plugType","hook","toAdd","toFront","triggerHooks","passed","countdown","count","register","Layout","Reflowable","spreadWidth","format","_gap","columnAxis","columnGap","columnWidth","columnFill","colWidth","pageWidth","pageHeight","calculatePages","totalWidth","displayedPages","scrollWidth","pageCount","ReflowableSpreads","divisor","fullWidth","Fixed","content","viewport","querySelector","hasAttribute","locations","totalPages","round","percentageFromCfi","baseUrl","rootfile","fullpath","xmlEncoding","metadataNode","getElementText","manifestNode","spineNode","findNavPath","findTocPath","findCoverPath","bookTitle","creator","description","pubdate","publisher","language","rights","modified_date","querySelectorText","found","getElementsByTagNameNS","nodeValue","manifestXml","selected","querySelectorAll","items","spineXml","Id","props","propArray","manifestProps","manifestPropArray","vert","bookSpine","findListItems","findAnchorOrSpan","getTOC","list","nodes","subitems","idCounter","setAttribute","navEl","reverse","navLabel","navMap","isCfi","Iframe","iframe","docEl","bodyEl","leftPos","create","scrolling","seamless","border","contentWindow","contentDocument","headEl","resized","margin","onerror","resize","totalHeight","scrollHeight","setPageDimensions","setLeft","defaultView","scrollTo","tagEl","attr","getPageNumberByElement","left","getPageNumberByRect","boundingClientRect","getBaseElement","isElementVisible","rect","scroll","bool","renderMethod","hidden","listenedEvents","upEvent","downEvent","caches","isForcedSingle","onResized","layoutSettings","initWidth","initHeight","clientWidth","clientHeight","globalLayout","removeEventListeners","removeSelectionListeners","chapterPos","currentChapterCfiBase","reconcileLayoutSettings","layoutMethod","determineLayout","visible","formated","addEventListeners","addSelectionListeners","beforeDisplay","queued","updatePages","visibleRangeCfi","getVisibleRangeCfi","rendition","determineSpreads","mapPage","timeoutTillCfi","headTag","pageByElement","firstElementisTextNode","leng","trim","walk","prevNode","startNode","STOP","ITER","containsPoint","childElementCount","sprint","SHOW_ELEMENT","prevRange","limit","elLimit","check","elPos","elRange","ELEMENT_NODE","selectNodeContents","checkText","right","ranges","splitTextNodeIntoWordsRanges","collapse","rangePosition","getClientRects","getPageCfi","startRange","getRange","forceElement","caretPositionFromPoint","caretRangeFromPoint","visibileEl","findElementAfter","offsetNode","pagesInCurrentChapter","pgs","currentRenderedPage","getRenderedPagesLeft","pagesLeft","endRange","findFirstVisible","startEl","setSize","triggerEvent","onSelectionChange","selectionEndTimeout","selectedRange","getSelection","cutoff","finished","progress","called","full","replaceWithStored","_oldUrls","_newUrls","_cache","_uri","_chapterBase","_attr","_wait","link","replaceUrl","timeout","replacments","relative","isRelative","onclick","links","srcs","stylesheets","getText","cssUrls","newText","_URL","webkitURL","mozURL","blob","createObjectURL","replaced","libPath","zipUrl","loadLib","urlCache","zipFs","fs","FS","workerScriptsPath","importHttpContent","parser","DOMParser","parseFromString","mime","unarchiver","decodededUrl","decodeURIComponent","getBlob","getMimeType","fromCache","revokeObjectURL","afterSaved","toStorage","that","saveEntryFileToStorage","getData","BlobWriter","save"],"mappings":"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"} \ No newline at end of file diff --git a/reader/js/epub.min.js b/reader/js/epub.min.js deleted file mode 100644 index 7ca835eed..000000000 --- a/reader/js/epub.min.js +++ /dev/null @@ -1,7343 +0,0 @@ -(function(){var n=this,t=n._,r={},e=Array.prototype,u=Object.prototype,i=Function.prototype,a=e.push,o=e.slice,c=e.concat,l=u.toString,f=u.hasOwnProperty,s=e.forEach,p=e.map,h=e.reduce,v=e.reduceRight,d=e.filter,g=e.every,m=e.some,y=e.indexOf,b=e.lastIndexOf,x=Array.isArray,_=Object.keys,j=i.bind,w=function(n){return n instanceof w?n:this instanceof w?(this._wrapped=n,void 0):new w(n)};"undefined"!=typeof exports?("undefined"!=typeof module&&module.exports&&(exports=module.exports=w),exports._=w):n._=w,w.VERSION="1.4.4";var A=w.each=w.forEach=function(n,t,e){if(null!=n)if(s&&n.forEach===s)n.forEach(t,e);else if(n.length===+n.length){for(var u=0,i=n.length;i>u;u++)if(t.call(e,n[u],u,n)===r)return}else for(var a in n)if(w.has(n,a)&&t.call(e,n[a],a,n)===r)return};w.map=w.collect=function(n,t,r){var e=[];return null==n?e:p&&n.map===p?n.map(t,r):(A(n,function(n,u,i){e[e.length]=t.call(r,n,u,i)}),e)};var O="Reduce of empty array with no initial value";w.reduce=w.foldl=w.inject=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),h&&n.reduce===h)return e&&(t=w.bind(t,e)),u?n.reduce(t,r):n.reduce(t);if(A(n,function(n,i,a){u?r=t.call(e,r,n,i,a):(r=n,u=!0)}),!u)throw new TypeError(O);return r},w.reduceRight=w.foldr=function(n,t,r,e){var u=arguments.length>2;if(null==n&&(n=[]),v&&n.reduceRight===v)return e&&(t=w.bind(t,e)),u?n.reduceRight(t,r):n.reduceRight(t);var i=n.length;if(i!==+i){var a=w.keys(n);i=a.length}if(A(n,function(o,c,l){c=a?a[--i]:--i,u?r=t.call(e,r,n[c],c,l):(r=n[c],u=!0)}),!u)throw new TypeError(O);return r},w.find=w.detect=function(n,t,r){var e;return E(n,function(n,u,i){return t.call(r,n,u,i)?(e=n,!0):void 0}),e},w.filter=w.select=function(n,t,r){var e=[];return null==n?e:d&&n.filter===d?n.filter(t,r):(A(n,function(n,u,i){t.call(r,n,u,i)&&(e[e.length]=n)}),e)},w.reject=function(n,t,r){return w.filter(n,function(n,e,u){return!t.call(r,n,e,u)},r)},w.every=w.all=function(n,t,e){t||(t=w.identity);var u=!0;return null==n?u:g&&n.every===g?n.every(t,e):(A(n,function(n,i,a){return(u=u&&t.call(e,n,i,a))?void 0:r}),!!u)};var E=w.some=w.any=function(n,t,e){t||(t=w.identity);var u=!1;return null==n?u:m&&n.some===m?n.some(t,e):(A(n,function(n,i,a){return u||(u=t.call(e,n,i,a))?r:void 0}),!!u)};w.contains=w.include=function(n,t){return null==n?!1:y&&n.indexOf===y?n.indexOf(t)!=-1:E(n,function(n){return n===t})},w.invoke=function(n,t){var r=o.call(arguments,2),e=w.isFunction(t);return w.map(n,function(n){return(e?t:n[t]).apply(n,r)})},w.pluck=function(n,t){return w.map(n,function(n){return n[t]})},w.where=function(n,t,r){return w.isEmpty(t)?r?null:[]:w[r?"find":"filter"](n,function(n){for(var r in t)if(t[r]!==n[r])return!1;return!0})},w.findWhere=function(n,t){return w.where(n,t,!0)},w.max=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.max.apply(Math,n);if(!t&&w.isEmpty(n))return-1/0;var e={computed:-1/0,value:-1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;a>=e.computed&&(e={value:n,computed:a})}),e.value},w.min=function(n,t,r){if(!t&&w.isArray(n)&&n[0]===+n[0]&&65535>n.length)return Math.min.apply(Math,n);if(!t&&w.isEmpty(n))return 1/0;var e={computed:1/0,value:1/0};return A(n,function(n,u,i){var a=t?t.call(r,n,u,i):n;e.computed>a&&(e={value:n,computed:a})}),e.value},w.shuffle=function(n){var t,r=0,e=[];return A(n,function(n){t=w.random(r++),e[r-1]=e[t],e[t]=n}),e};var k=function(n){return w.isFunction(n)?n:function(t){return t[n]}};w.sortBy=function(n,t,r){var e=k(t);return w.pluck(w.map(n,function(n,t,u){return{value:n,index:t,criteria:e.call(r,n,t,u)}}).sort(function(n,t){var r=n.criteria,e=t.criteria;if(r!==e){if(r>e||r===void 0)return 1;if(e>r||e===void 0)return-1}return n.indexi;){var o=i+a>>>1;u>r.call(e,n[o])?i=o+1:a=o}return i},w.toArray=function(n){return n?w.isArray(n)?o.call(n):n.length===+n.length?w.map(n,w.identity):w.values(n):[]},w.size=function(n){return null==n?0:n.length===+n.length?n.length:w.keys(n).length},w.first=w.head=w.take=function(n,t,r){return null==n?void 0:null==t||r?n[0]:o.call(n,0,t)},w.initial=function(n,t,r){return o.call(n,0,n.length-(null==t||r?1:t))},w.last=function(n,t,r){return null==n?void 0:null==t||r?n[n.length-1]:o.call(n,Math.max(n.length-t,0))},w.rest=w.tail=w.drop=function(n,t,r){return o.call(n,null==t||r?1:t)},w.compact=function(n){return w.filter(n,w.identity)};var R=function(n,t,r){return A(n,function(n){w.isArray(n)?t?a.apply(r,n):R(n,t,r):r.push(n)}),r};w.flatten=function(n,t){return R(n,t,[])},w.without=function(n){return w.difference(n,o.call(arguments,1))},w.uniq=w.unique=function(n,t,r,e){w.isFunction(t)&&(e=r,r=t,t=!1);var u=r?w.map(n,r,e):n,i=[],a=[];return A(u,function(r,e){(t?e&&a[a.length-1]===r:w.contains(a,r))||(a.push(r),i.push(n[e]))}),i},w.union=function(){return w.uniq(c.apply(e,arguments))},w.intersection=function(n){var t=o.call(arguments,1);return w.filter(w.uniq(n),function(n){return w.every(t,function(t){return w.indexOf(t,n)>=0})})},w.difference=function(n){var t=c.apply(e,o.call(arguments,1));return w.filter(n,function(n){return!w.contains(t,n)})},w.zip=function(){for(var n=o.call(arguments),t=w.max(w.pluck(n,"length")),r=Array(t),e=0;t>e;e++)r[e]=w.pluck(n,""+e);return r},w.object=function(n,t){if(null==n)return{};for(var r={},e=0,u=n.length;u>e;e++)t?r[n[e]]=t[e]:r[n[e][0]]=n[e][1];return r},w.indexOf=function(n,t,r){if(null==n)return-1;var e=0,u=n.length;if(r){if("number"!=typeof r)return e=w.sortedIndex(n,t),n[e]===t?e:-1;e=0>r?Math.max(0,u+r):r}if(y&&n.indexOf===y)return n.indexOf(t,r);for(;u>e;e++)if(n[e]===t)return e;return-1},w.lastIndexOf=function(n,t,r){if(null==n)return-1;var e=null!=r;if(b&&n.lastIndexOf===b)return e?n.lastIndexOf(t,r):n.lastIndexOf(t);for(var u=e?r:n.length;u--;)if(n[u]===t)return u;return-1},w.range=function(n,t,r){1>=arguments.length&&(t=n||0,n=0),r=arguments[2]||1;for(var e=Math.max(Math.ceil((t-n)/r),0),u=0,i=Array(e);e>u;)i[u++]=n,n+=r;return i},w.bind=function(n,t){if(n.bind===j&&j)return j.apply(n,o.call(arguments,1));var r=o.call(arguments,2);return function(){return n.apply(t,r.concat(o.call(arguments)))}},w.partial=function(n){var t=o.call(arguments,1);return function(){return n.apply(this,t.concat(o.call(arguments)))}},w.bindAll=function(n){var t=o.call(arguments,1);return 0===t.length&&(t=w.functions(n)),A(t,function(t){n[t]=w.bind(n[t],n)}),n},w.memoize=function(n,t){var r={};return t||(t=w.identity),function(){var e=t.apply(this,arguments);return w.has(r,e)?r[e]:r[e]=n.apply(this,arguments)}},w.delay=function(n,t){var r=o.call(arguments,2);return setTimeout(function(){return n.apply(null,r)},t)},w.defer=function(n){return w.delay.apply(w,[n,1].concat(o.call(arguments,1)))},w.throttle=function(n,t){var r,e,u,i,a=0,o=function(){a=new Date,u=null,i=n.apply(r,e)};return function(){var c=new Date,l=t-(c-a);return r=this,e=arguments,0>=l?(clearTimeout(u),u=null,a=c,i=n.apply(r,e)):u||(u=setTimeout(o,l)),i}},w.debounce=function(n,t,r){var e,u;return function(){var i=this,a=arguments,o=function(){e=null,r||(u=n.apply(i,a))},c=r&&!e;return clearTimeout(e),e=setTimeout(o,t),c&&(u=n.apply(i,a)),u}},w.once=function(n){var t,r=!1;return function(){return r?t:(r=!0,t=n.apply(this,arguments),n=null,t)}},w.wrap=function(n,t){return function(){var r=[n];return a.apply(r,arguments),t.apply(this,r)}},w.compose=function(){var n=arguments;return function(){for(var t=arguments,r=n.length-1;r>=0;r--)t=[n[r].apply(this,t)];return t[0]}},w.after=function(n,t){return 0>=n?t():function(){return 1>--n?t.apply(this,arguments):void 0}},w.keys=_||function(n){if(n!==Object(n))throw new TypeError("Invalid object");var t=[];for(var r in n)w.has(n,r)&&(t[t.length]=r);return t},w.values=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push(n[r]);return t},w.pairs=function(n){var t=[];for(var r in n)w.has(n,r)&&t.push([r,n[r]]);return t},w.invert=function(n){var t={};for(var r in n)w.has(n,r)&&(t[n[r]]=r);return t},w.functions=w.methods=function(n){var t=[];for(var r in n)w.isFunction(n[r])&&t.push(r);return t.sort()},w.extend=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)n[r]=t[r]}),n},w.pick=function(n){var t={},r=c.apply(e,o.call(arguments,1));return A(r,function(r){r in n&&(t[r]=n[r])}),t},w.omit=function(n){var t={},r=c.apply(e,o.call(arguments,1));for(var u in n)w.contains(r,u)||(t[u]=n[u]);return t},w.defaults=function(n){return A(o.call(arguments,1),function(t){if(t)for(var r in t)null==n[r]&&(n[r]=t[r])}),n},w.clone=function(n){return w.isObject(n)?w.isArray(n)?n.slice():w.extend({},n):n},w.tap=function(n,t){return t(n),n};var I=function(n,t,r,e){if(n===t)return 0!==n||1/n==1/t;if(null==n||null==t)return n===t;n instanceof w&&(n=n._wrapped),t instanceof w&&(t=t._wrapped);var u=l.call(n);if(u!=l.call(t))return!1;switch(u){case"[object String]":return n==t+"";case"[object Number]":return n!=+n?t!=+t:0==n?1/n==1/t:n==+t;case"[object Date]":case"[object Boolean]":return+n==+t;case"[object RegExp]":return n.source==t.source&&n.global==t.global&&n.multiline==t.multiline&&n.ignoreCase==t.ignoreCase}if("object"!=typeof n||"object"!=typeof t)return!1;for(var i=r.length;i--;)if(r[i]==n)return e[i]==t;r.push(n),e.push(t);var a=0,o=!0;if("[object Array]"==u){if(a=n.length,o=a==t.length)for(;a--&&(o=I(n[a],t[a],r,e)););}else{var c=n.constructor,f=t.constructor;if(c!==f&&!(w.isFunction(c)&&c instanceof c&&w.isFunction(f)&&f instanceof f))return!1;for(var s in n)if(w.has(n,s)&&(a++,!(o=w.has(t,s)&&I(n[s],t[s],r,e))))break;if(o){for(s in t)if(w.has(t,s)&&!a--)break;o=!a}}return r.pop(),e.pop(),o};w.isEqual=function(n,t){return I(n,t,[],[])},w.isEmpty=function(n){if(null==n)return!0;if(w.isArray(n)||w.isString(n))return 0===n.length;for(var t in n)if(w.has(n,t))return!1;return!0},w.isElement=function(n){return!(!n||1!==n.nodeType)},w.isArray=x||function(n){return"[object Array]"==l.call(n)},w.isObject=function(n){return n===Object(n)},A(["Arguments","Function","String","Number","Date","RegExp"],function(n){w["is"+n]=function(t){return l.call(t)=="[object "+n+"]"}}),w.isArguments(arguments)||(w.isArguments=function(n){return!(!n||!w.has(n,"callee"))}),"function"!=typeof/./&&(w.isFunction=function(n){return"function"==typeof n}),w.isFinite=function(n){return isFinite(n)&&!isNaN(parseFloat(n))},w.isNaN=function(n){return w.isNumber(n)&&n!=+n},w.isBoolean=function(n){return n===!0||n===!1||"[object Boolean]"==l.call(n)},w.isNull=function(n){return null===n},w.isUndefined=function(n){return n===void 0},w.has=function(n,t){return f.call(n,t)},w.noConflict=function(){return n._=t,this},w.identity=function(n){return n},w.times=function(n,t,r){for(var e=Array(n),u=0;n>u;u++)e[u]=t.call(r,u);return e},w.random=function(n,t){return null==t&&(t=n,n=0),n+Math.floor(Math.random()*(t-n+1))};var M={escape:{"&":"&","<":"<",">":">",'"':""","'":"'","/":"/"}};M.unescape=w.invert(M.escape);var S={escape:RegExp("["+w.keys(M.escape).join("")+"]","g"),unescape:RegExp("("+w.keys(M.unescape).join("|")+")","g")};w.each(["escape","unescape"],function(n){w[n]=function(t){return null==t?"":(""+t).replace(S[n],function(t){return M[n][t]})}}),w.result=function(n,t){if(null==n)return null;var r=n[t];return w.isFunction(r)?r.call(n):r},w.mixin=function(n){A(w.functions(n),function(t){var r=w[t]=n[t];w.prototype[t]=function(){var n=[this._wrapped];return a.apply(n,arguments),D.call(this,r.apply(w,n))}})};var N=0;w.uniqueId=function(n){var t=++N+"";return n?n+t:t},w.templateSettings={evaluate:/<%([\s\S]+?)%>/g,interpolate:/<%=([\s\S]+?)%>/g,escape:/<%-([\s\S]+?)%>/g};var T=/(.)^/,q={"'":"'","\\":"\\","\r":"r","\n":"n"," ":"t","\u2028":"u2028","\u2029":"u2029"},B=/\\|'|\r|\n|\t|\u2028|\u2029/g;w.template=function(n,t,r){var e;r=w.defaults({},r,w.templateSettings);var u=RegExp([(r.escape||T).source,(r.interpolate||T).source,(r.evaluate||T).source].join("|")+"|$","g"),i=0,a="__p+='";n.replace(u,function(t,r,e,u,o){return a+=n.slice(i,o).replace(B,function(n){return"\\"+q[n]}),r&&(a+="'+\n((__t=("+r+"))==null?'':_.escape(__t))+\n'"),e&&(a+="'+\n((__t=("+e+"))==null?'':__t)+\n'"),u&&(a+="';\n"+u+"\n__p+='"),i=o+t.length,t}),a+="';\n",r.variable||(a="with(obj||{}){\n"+a+"}\n"),a="var __t,__p='',__j=Array.prototype.join,"+"print=function(){__p+=__j.call(arguments,'');};\n"+a+"return __p;\n";try{e=Function(r.variable||"obj","_",a)}catch(o){throw o.source=a,o}if(t)return e(t,w);var c=function(n){return e.call(this,n,w)};return c.source="function("+(r.variable||"obj")+"){\n"+a+"}",c},w.chain=function(n){return w(n).chain()};var D=function(n){return this._chain?w(n).chain():n};w.mixin(w),A(["pop","push","reverse","shift","sort","splice","unshift"],function(n){var t=e[n];w.prototype[n]=function(){var r=this._wrapped;return t.apply(r,arguments),"shift"!=n&&"splice"!=n||0!==r.length||delete r[0],D.call(this,r)}}),A(["concat","join","slice"],function(n){var t=e[n];w.prototype[n]=function(){return D.call(this,t.apply(this._wrapped,arguments))}}),w.extend(w.prototype,{chain:function(){return this._chain=!0,this},value:function(){return this._wrapped}})}).call(this); -(function(global) { -var define, requireModule, require, requirejs; - -(function() { - var registry = {}, seen = {}; - - define = function(name, deps, callback) { - registry[name] = { deps: deps, callback: callback }; - }; - - requirejs = require = requireModule = function(name) { - requirejs._eak_seen = registry; - - if (seen[name]) { return seen[name]; } - seen[name] = {}; - - if (!registry[name]) { - throw new Error("Could not find module " + name); - } - - var mod = registry[name], - deps = mod.deps, - callback = mod.callback, - reified = [], - exports; - - for (var i=0, l=deps.length; i 1; - }; - - RSVP.filter(promises, filterFn).then(function(result){ - // result is [ 2, 3 ] - }); - ``` - - If any of the `promises` given to `RSVP.filter` are rejected, the first promise - that is rejected will be given as an argument to the returned promises's - rejection handler. For example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.reject(new Error("2")); - var promise3 = RSVP.reject(new Error("3")); - var promises = [ promise1, promise2, promise3 ]; - - var filterFn = function(item){ - return item > 1; - }; - - RSVP.filter(promises, filterFn).then(function(array){ - // Code here never runs because there are rejected promises! - }, function(reason) { - // reason.message === "2" - }); - ``` - - `RSVP.filter` will also wait for any promises returned from `filterFn`. - For instance, you may want to fetch a list of users then return a subset - of those users based on some asynchronous operation: - - ```javascript - - var alice = { name: 'alice' }; - var bob = { name: 'bob' }; - var users = [ alice, bob ]; - - var promises = users.map(function(user){ - return RSVP.resolve(user); - }); - - var filterFn = function(user){ - // Here, Alice has permissions to create a blog post, but Bob does not. - return getPrivilegesForUser(user).then(function(privs){ - return privs.can_create_blog_post === true; - }); - }; - RSVP.filter(promises, filterFn).then(function(users){ - // true, because the server told us only Alice can create a blog post. - users.length === 1; - // false, because Alice is the only user present in `users` - users[0] === bob; - }); - ``` - - @method filter - @for RSVP - @param {Array} promises - @param {Function} filterFn - function to be called on each resolved value to - filter the final results. - @param {String} label optional string describing the promise. Useful for - tooling. - @return {Promise} - */ - function filter(promises, filterFn, label) { - if (!isArray(promises)) { - throw new TypeError('You must pass an array to filter.'); - } - - if (!isFunction(filterFn)){ - throw new TypeError("You must pass a function to filter's second argument."); - } - - return all(promises, label).then(function(values){ - return map(promises, filterFn, label).then(function(filterResults){ - var i, - valuesLen = values.length, - filtered = []; - - for (i = 0; i < valuesLen; i++){ - if(filterResults[i]) filtered.push(values[i]); - } - return filtered; - }); - }); - } - - __exports__["default"] = filter; - }); -define("rsvp/hash", - ["./promise","./utils","exports"], - function(__dependency1__, __dependency2__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - var isNonThenable = __dependency2__.isNonThenable; - var keysOf = __dependency2__.keysOf; - - /** - `RSVP.hash` is similar to `RSVP.all`, but takes an object instead of an array - for its `promises` argument. - - Returns a promise that is fulfilled when all the given promises have been - fulfilled, or rejected if any of them become rejected. The returned promise - is fulfilled with a hash that has the same key names as the `promises` object - argument. If any of the values in the object are not promises, they will - simply be copied over to the fulfilled object. - - Example: - - ```javascript - var promises = { - myPromise: RSVP.resolve(1), - yourPromise: RSVP.resolve(2), - theirPromise: RSVP.resolve(3), - notAPromise: 4 - }; - - RSVP.hash(promises).then(function(hash){ - // hash here is an object that looks like: - // { - // myPromise: 1, - // yourPromise: 2, - // theirPromise: 3, - // notAPromise: 4 - // } - }); - ```` - - If any of the `promises` given to `RSVP.hash` are rejected, the first promise - that is rejected will be given as as the first argument, or as the reason to - the rejection handler. For example: - - ```javascript - var promises = { - myPromise: RSVP.resolve(1), - rejectedPromise: RSVP.reject(new Error("rejectedPromise")), - anotherRejectedPromise: RSVP.reject(new Error("anotherRejectedPromise")), - }; - - RSVP.hash(promises).then(function(hash){ - // Code here never runs because there are rejected promises! - }, function(reason) { - // reason.message === "rejectedPromise" - }); - ``` - - An important note: `RSVP.hash` is intended for plain JavaScript objects that - are just a set of keys and values. `RSVP.hash` will NOT preserve prototype - chains. - - Example: - - ```javascript - function MyConstructor(){ - this.example = RSVP.resolve("Example"); - } - - MyConstructor.prototype = { - protoProperty: RSVP.resolve("Proto Property") - }; - - var myObject = new MyConstructor(); - - RSVP.hash(myObject).then(function(hash){ - // protoProperty will not be present, instead you will just have an - // object that looks like: - // { - // example: "Example" - // } - // - // hash.hasOwnProperty('protoProperty'); // false - // 'undefined' === typeof hash.protoProperty - }); - ``` - - @method hash - @for RSVP - @param {Object} promises - @param {String} label - optional string that describes the promise. - Useful for tooling. - @return {Promise} promise that is fulfilled when all properties of `promises` - have been fulfilled, or rejected if any of them become rejected. - */ - __exports__["default"] = function hash(object, label) { - return new Promise(function(resolve, reject){ - var results = {}; - var keys = keysOf(object); - var remaining = keys.length; - var entry, property; - - if (remaining === 0) { - resolve(results); - return; - } - - function fulfilledTo(property) { - return function(value) { - results[property] = value; - if (--remaining === 0) { - resolve(results); - } - }; - } - - function onRejection(reason) { - remaining = 0; - reject(reason); - } - - for (var i = 0; i < keys.length; i++) { - property = keys[i]; - entry = object[property]; - - if (isNonThenable(entry)) { - results[property] = entry; - if (--remaining === 0) { - resolve(results); - } - } else { - Promise.cast(entry).then(fulfilledTo(property), onRejection); - } - } - }); - }; - }); -define("rsvp/instrument", - ["./config","./utils","exports"], - function(__dependency1__, __dependency2__, __exports__) { - "use strict"; - var config = __dependency1__.config; - var now = __dependency2__.now; - - __exports__["default"] = function instrument(eventName, promise, child) { - // instrumentation should not disrupt normal usage. - try { - config.trigger(eventName, { - guid: promise._guidKey + promise._id, - eventName: eventName, - detail: promise._detail, - childGuid: child && promise._guidKey + child._id, - label: promise._label, - timeStamp: now(), - stack: new Error(promise._label).stack - }); - } catch(error) { - setTimeout(function(){ - throw error; - }, 0); - } - }; - }); -define("rsvp/map", - ["./promise","./all","./utils","exports"], - function(__dependency1__, __dependency2__, __dependency3__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - var all = __dependency2__["default"]; - var isArray = __dependency3__.isArray; - var isFunction = __dependency3__.isFunction; - - /** - - `RSVP.map` is similar to JavaScript's native `map` method, except that it - waits for all promises to become fulfilled before running the `mapFn` on - each item in given to `promises`. `RSVP.map` returns a promise that will - become fulfilled with the result of running `mapFn` on the values the promises - become fulfilled with. - - For example: - - ```javascript - - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.resolve(2); - var promise3 = RSVP.resolve(3); - var promises = [ promise1, promise2, promise3 ]; - - var mapFn = function(item){ - return item + 1; - }; - - RSVP.map(promises, mapFn).then(function(result){ - // result is [ 2, 3, 4 ] - }); - ``` - - If any of the `promises` given to `RSVP.map` are rejected, the first promise - that is rejected will be given as an argument to the returned promises's - rejection handler. For example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.reject(new Error("2")); - var promise3 = RSVP.reject(new Error("3")); - var promises = [ promise1, promise2, promise3 ]; - - var mapFn = function(item){ - return item + 1; - }; - - RSVP.map(promises, mapFn).then(function(array){ - // Code here never runs because there are rejected promises! - }, function(reason) { - // reason.message === "2" - }); - ``` - - `RSVP.map` will also wait if a promise is returned from `mapFn`. For example, - say you want to get all comments from a set of blog posts, but you need - the blog posts first becuase they contain a url to those comments. - - ```javscript - - var mapFn = function(blogPost){ - // getComments does some ajax and returns an RSVP.Promise that is fulfilled - // with some comments data - return getComments(blogPost.comments_url); - }; - - // getBlogPosts does some ajax and returns an RSVP.Promise that is fulfilled - // with some blog post data - RSVP.map(getBlogPosts(), mapFn).then(function(comments){ - // comments is the result of asking the server for the comments - // of all blog posts returned from getBlogPosts() - }); - ``` - - @method map - @for RSVP - @param {Array} promises - @param {Function} mapFn function to be called on each fulfilled promise. - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} promise that is fulfilled with the result of calling - `mapFn` on each fulfilled promise or value when they become fulfilled. - The promise will be rejected if any of the given `promises` become rejected. - */ - __exports__["default"] = function map(promises, mapFn, label) { - - if (!isArray(promises)) { - throw new TypeError('You must pass an array to map.'); - } - - if (!isFunction(mapFn)){ - throw new TypeError("You must pass a function to map's second argument."); - } - - return all(promises, label).then(function(results){ - var resultLen = results.length, - mappedResults = [], - i; - - for (i = 0; i < resultLen; i++){ - mappedResults.push(mapFn(results[i])); - } - - return all(mappedResults, label); - }); - }; - }); -define("rsvp/node", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - var slice = Array.prototype.slice; - - function makeNodeCallbackFor(resolve, reject) { - return function (error, value) { - if (error) { - reject(error); - } else if (arguments.length > 2) { - resolve(slice.call(arguments, 1)); - } else { - resolve(value); - } - }; - } - - /** - `RSVP.denodeify` takes a "node-style" function and returns a function that - will return an `RSVP.Promise`. You can use `denodeify` in Node.js or the - browser when you'd prefer to use promises over using callbacks. For example, - `denodeify` transforms the following: - - ```javascript - var fs = require('fs'); - - fs.readFile('myfile.txt', function(err, data){ - if (err) return handleError(err); - handleData(data); - }); - ``` - - into: - - ```javascript - var fs = require('fs'); - - var readFile = RSVP.denodeify(fs.readFile); - - readFile('myfile.txt').then(handleData, handleError); - ``` - - Using `denodeify` makes it easier to compose asynchronous operations instead - of using callbacks. For example, instead of: - - ```javascript - var fs = require('fs'); - var log = require('some-async-logger'); - - fs.readFile('myfile.txt', function(err, data){ - if (err) return handleError(err); - fs.writeFile('myfile2.txt', data, function(err){ - if (err) throw err; - log('success', function(err) { - if (err) throw err; - }); - }); - }); - ``` - - You can chain the operations together using `then` from the returned promise: - - ```javascript - var fs = require('fs'); - var denodeify = RSVP.denodeify; - var readFile = denodeify(fs.readFile); - var writeFile = denodeify(fs.writeFile); - var log = denodeify(require('some-async-logger')); - - readFile('myfile.txt').then(function(data){ - return writeFile('myfile2.txt', data); - }).then(function(){ - return log('SUCCESS'); - }).then(function(){ - // success handler - }, function(reason){ - // rejection handler - }); - ``` - - @method denodeify - @for RSVP - @param {Function} nodeFunc a "node-style" function that takes a callback as - its last argument. The callback expects an error to be passed as its first - argument (if an error occurred, otherwise null), and the value from the - operation as its second argument ("function(err, value){ }"). - @param {Any} binding optional argument for binding the "this" value when - calling the `nodeFunc` function. - @return {Function} a function that wraps `nodeFunc` to return an - `RSVP.Promise` - */ - __exports__["default"] = function denodeify(nodeFunc, binding) { - return function() { - var nodeArgs = slice.call(arguments), resolve, reject; - var thisArg = this || binding; - - return new Promise(function(resolve, reject) { - Promise.all(nodeArgs).then(function(nodeArgs) { - try { - nodeArgs.push(makeNodeCallbackFor(resolve, reject)); - nodeFunc.apply(thisArg, nodeArgs); - } catch(e) { - reject(e); - } - }); - }); - }; - }; - }); -define("rsvp/promise", - ["./config","./events","./instrument","./utils","./promise/cast","./promise/all","./promise/race","./promise/resolve","./promise/reject","exports"], - function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __exports__) { - "use strict"; - var config = __dependency1__.config; - var EventTarget = __dependency2__["default"]; - var instrument = __dependency3__["default"]; - var objectOrFunction = __dependency4__.objectOrFunction; - var isFunction = __dependency4__.isFunction; - var now = __dependency4__.now; - var cast = __dependency5__["default"]; - var all = __dependency6__["default"]; - var race = __dependency7__["default"]; - var Resolve = __dependency8__["default"]; - var Reject = __dependency9__["default"]; - - var guidKey = 'rsvp_' + now() + '-'; - var counter = 0; - - function noop() {} - - __exports__["default"] = Promise; - - - /** - - Promise objects represent the eventual result of an asynchronous operation. The - primary way of interacting with a promise is through its `then` method, which - registers callbacks to receive either a promise’s eventual value or the reason - why the promise cannot be fulfilled. - - Terminology - ----------- - - - `promise` is an object or function with a `then` method whose behavior conforms to this specification. - - `thenable` is an object or function that defines a `then` method. - - `value` is any legal JavaScript value (including undefined, a thenable, or a promise). - - `exception` is a value that is thrown using the throw statement. - - `reason` is a value that indicates why a promise was rejected. - - `settled` the final resting state of a promise, fulfilled or rejected. - - A promise can be in one of three states: pending, fulfilled, or rejected. - - - Basic Usage: - ------------ - - ```js - var promise = new Promise(function(resolve, reject) { - // on success - resolve(value); - - // on failure - reject(reason); - }); - - promise.then(function(value) { - // on fulfillment - }, function(reason) { - // on rejection - }); - ``` - - Advanced Usage: - --------------- - - Promises shine when abstracting away asynchronous interactions such as - `XMLHttpRequest`s. - - ```js - function getJSON(url) { - return new Promise(function(resolve, reject){ - var xhr = new XMLHttpRequest(); - - xhr.open('GET', url); - xhr.onreadystatechange = handler; - xhr.responseType = 'json'; - xhr.setRequestHeader('Accept', 'application/json'); - xhr.send(); - - function handler() { - if (this.readyState === this.DONE) { - if (this.status === 200) { - resolve(this.response); - } else { - reject(new Error("getJSON: `" + url + "` failed with status: [" + this.status + "]"); - } - } - }; - }); - } - - getJSON('/posts.json').then(function(json) { - // on fulfillment - }, function(reason) { - // on rejection - }); - ``` - - Unlike callbacks, promises are great composable primitives. - - ```js - Promise.all([ - getJSON('/posts'), - getJSON('/comments') - ]).then(function(values){ - values[0] // => postsJSON - values[1] // => commentsJSON - - return values; - }); - ``` - - @class Promise - @param {function} - @param {String} label optional string for labeling the promise. - Useful for tooling. - @constructor - */ - function Promise(resolver, label) { - if (!isFunction(resolver)) { - throw new TypeError('You must pass a resolver function as the first argument to the promise constructor'); - } - - if (!(this instanceof Promise)) { - throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function."); - } - - this._id = counter++; - this._label = label; - this._subscribers = []; - - if (config.instrument) { - instrument('created', this); - } - - if (noop !== resolver) { - invokeResolver(resolver, this); - } - } - - function invokeResolver(resolver, promise) { - function resolvePromise(value) { - resolve(promise, value); - } - - function rejectPromise(reason) { - reject(promise, reason); - } - - try { - resolver(resolvePromise, rejectPromise); - } catch(e) { - rejectPromise(e); - } - } - - Promise.cast = cast; - Promise.all = all; - Promise.race = race; - Promise.resolve = Resolve; - Promise.reject = Reject; - - var PENDING = void 0; - var SEALED = 0; - var FULFILLED = 1; - var REJECTED = 2; - - function subscribe(parent, child, onFulfillment, onRejection) { - var subscribers = parent._subscribers; - var length = subscribers.length; - - subscribers[length] = child; - subscribers[length + FULFILLED] = onFulfillment; - subscribers[length + REJECTED] = onRejection; - } - - function publish(promise, settled) { - var child, callback, subscribers = promise._subscribers, detail = promise._detail; - - if (config.instrument) { - instrument(settled === FULFILLED ? 'fulfilled' : 'rejected', promise); - } - - for (var i = 0; i < subscribers.length; i += 3) { - child = subscribers[i]; - callback = subscribers[i + settled]; - - invokeCallback(settled, child, callback, detail); - } - - promise._subscribers = null; - } - - Promise.prototype = { - /** - @property constructor - */ - constructor: Promise, - - _id: undefined, - _guidKey: guidKey, - _label: undefined, - - _state: undefined, - _detail: undefined, - _subscribers: undefined, - - _onerror: function (reason) { - config.trigger('error', reason); - }, - - /** - - A promise represents the eventual result of an asynchronous operation. The - primary way of interacting with a promise is through its `then` method, which - registers callbacks to receive either a promise's eventual value or the reason - why the promise cannot be fulfilled. - - ```js - findUser().then(function(user){ - // user is available - }, function(reason){ - // user is unavailable, and you are given the reason why - }); - ``` - - Chaining - -------- - - The return value of `then` is itself a promise. This second, "downstream" - promise is resolved with the return value of the first promise's fulfillment - or rejection handler, or rejected if the handler throws an exception. - - ```js - findUser().then(function (user) { - return user.name; - }, function (reason) { - return "default name"; - }).then(function (userName) { - // If `findUser` fulfilled, `userName` will be the user's name, otherwise it - // will be `"default name"` - }); - - findUser().then(function (user) { - throw "Found user, but still unhappy"; - }, function (reason) { - throw "`findUser` rejected and we're unhappy"; - }).then(function (value) { - // never reached - }, function (reason) { - // if `findUser` fulfilled, `reason` will be "Found user, but still unhappy". - // If `findUser` rejected, `reason` will be "`findUser` rejected and we're unhappy". - }); - ``` - If the downstream promise does not specify a rejection handler, rejection reasons will be propagated further downstream. - - ```js - findUser().then(function (user) { - throw new PedagogicalException("Upstream error"); - }).then(function (value) { - // never reached - }).then(function (value) { - // never reached - }, function (reason) { - // The `PedgagocialException` is propagated all the way down to here - }); - ``` - - Assimilation - ------------ - - Sometimes the value you want to propagate to a downstream promise can only be - retrieved asynchronously. This can be achieved by returning a promise in the - fulfillment or rejection handler. The downstream promise will then be pending - until the returned promise is settled. This is called *assimilation*. - - ```js - findUser().then(function (user) { - return findCommentsByAuthor(user); - }).then(function (comments) { - // The user's comments are now available - }); - ``` - - If the assimliated promise rejects, then the downstream promise will also reject. - - ```js - findUser().then(function (user) { - return findCommentsByAuthor(user); - }).then(function (comments) { - // If `findCommentsByAuthor` fulfills, we'll have the value here - }, function (reason) { - // If `findCommentsByAuthor` rejects, we'll have the reason here - }); - ``` - - Simple Example - -------------- - - Synchronous Example - - ```javascript - var result; - - try { - result = findResult(); - // success - } catch(reason) { - // failure - } - ``` - - Errback Example - - ```js - findResult(function(result, err){ - if (err) { - // failure - } else { - // success - } - }); - ``` - - Promise Example; - - ```javacsript - findResult().then(function(result){ - - }, function(reason){ - - }); - ``` - - Advanced Example - -------------- - - Synchronous Example - - ```javascript - var author, books; - - try { - author = findAuthor(); - books = findBooksByAuthor(author); - // success - } catch(reason) { - // failure - } - ``` - - Errback Example - - ```js - - function foundBooks(books) { - - } - - function failure(reason) { - - } - - findAuthor(function(author, err){ - if (err) { - failure(err); - // failure - } else { - try { - findBoooksByAuthor(author, function(books, err) { - if (err) { - failure(err); - } else { - try { - foundBooks(books); - } catch(reason) { - failure(reason); - } - } - }); - } catch(error) { - failure(err); - } - // success - } - }); - ``` - - Promise Example; - - ```javacsript - findAuthor(). - then(findBooksByAuthor). - then(function(books){ - // found books - }).catch(function(reason){ - // something went wrong; - }); - ``` - - @method then - @param {Function} onFulfillment - @param {Function} onRejection - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} - */ - then: function(onFulfillment, onRejection, label) { - var promise = this; - this._onerror = null; - - var thenPromise = new this.constructor(noop, label); - - if (this._state) { - var callbacks = arguments; - config.async(function invokePromiseCallback() { - invokeCallback(promise._state, thenPromise, callbacks[promise._state - 1], promise._detail); - }); - } else { - subscribe(this, thenPromise, onFulfillment, onRejection); - } - - if (config.instrument) { - instrument('chained', promise, thenPromise); - } - - return thenPromise; - }, - - /** - `catch` is simply sugar for `then(null, onRejection)` which makes it the same - as the catch block, of a try/catch statement. - - ```js - function findAuthor(){ - throw new Error("couldn't find that author"); - } - - // synchronous - try { - findAuthor(); - } catch(reason) { - - } - - // async with promises - findAuthor().catch(function(reason){ - // something went wrong; - }); - ``` - - @method catch - @param {Function} onRejection - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} - */ - 'catch': function(onRejection, label) { - return this.then(null, onRejection, label); - }, - - /** - `finally` will be invoked regardless of the promise's fate just as native - try/catch/finally behaves - - ```js - findAuthor() { - if (Math.random() > 0.5) { - throw new Error(); - } - return new Author(); - } - - try { - return findAuthor(); // succeed or fail - } catch(error) { - return findOtherAuther(); - } finally { - // always runs - // doesn't effect the return value - } - - findAuthor().finally(function(){ - // author was either found, or not - }); - ``` - - @method finally - @param {Function} callback - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} - */ - 'finally': function(callback, label) { - var constructor = this.constructor; - - return this.then(function(value) { - return constructor.cast(callback()).then(function(){ - return value; - }); - }, function(reason) { - return constructor.cast(callback()).then(function(){ - throw reason; - }); - }, label); - } - }; - - function invokeCallback(settled, promise, callback, detail) { - var hasCallback = isFunction(callback), - value, error, succeeded, failed; - - if (hasCallback) { - try { - value = callback(detail); - succeeded = true; - } catch(e) { - failed = true; - error = e; - } - } else { - value = detail; - succeeded = true; - } - - if (handleThenable(promise, value)) { - return; - } else if (hasCallback && succeeded) { - resolve(promise, value); - } else if (failed) { - reject(promise, error); - } else if (settled === FULFILLED) { - resolve(promise, value); - } else if (settled === REJECTED) { - reject(promise, value); - } - } - - function handleThenable(promise, value) { - var then = null, - resolved; - - try { - if (promise === value) { - throw new TypeError("A promises callback cannot return that same promise."); - } - - if (objectOrFunction(value)) { - then = value.then; - - if (isFunction(then)) { - then.call(value, function(val) { - if (resolved) { return true; } - resolved = true; - - if (value !== val) { - resolve(promise, val); - } else { - fulfill(promise, val); - } - }, function(val) { - if (resolved) { return true; } - resolved = true; - - reject(promise, val); - }, 'derived from: ' + (promise._label || ' unknown promise')); - - return true; - } - } - } catch (error) { - if (resolved) { return true; } - reject(promise, error); - return true; - } - - return false; - } - - function resolve(promise, value) { - if (promise === value) { - fulfill(promise, value); - } else if (!handleThenable(promise, value)) { - fulfill(promise, value); - } - } - - function fulfill(promise, value) { - if (promise._state !== PENDING) { return; } - promise._state = SEALED; - promise._detail = value; - - config.async(publishFulfillment, promise); - } - - function reject(promise, reason) { - if (promise._state !== PENDING) { return; } - promise._state = SEALED; - promise._detail = reason; - - config.async(publishRejection, promise); - } - - function publishFulfillment(promise) { - publish(promise, promise._state = FULFILLED); - } - - function publishRejection(promise) { - if (promise._onerror) { - promise._onerror(promise._detail); - } - - publish(promise, promise._state = REJECTED); - } - }); -define("rsvp/promise/all", - ["../utils","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var isArray = __dependency1__.isArray; - var isNonThenable = __dependency1__.isNonThenable; - - /** - - `RSVP.Promise.all` returns a new promise which is fulfilled with an array of - fulfillment values for the passed promises, or rejects with the reason of the - first passed promise that rejects. It casts all elements of the passed iterable - to promises as it runs this algorithm. - - Example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.resolve(2); - var promise3 = RSVP.resolve(3); - var promises = [ promise1, promise2, promise3 ]; - - RSVP.Promise.all(promises).then(function(array){ - // The array here would be [ 1, 2, 3 ]; - }); - ``` - - If any of the `promises` given to `RSVP.all` are rejected, the first promise - that is rejected will be given as an argument to the returned promises's - rejection handler. For example: - - Example: - - ```javascript - var promise1 = RSVP.resolve(1); - var promise2 = RSVP.reject(new Error("2")); - var promise3 = RSVP.reject(new Error("3")); - var promises = [ promise1, promise2, promise3 ]; - - RSVP.Promise.all(promises).then(function(array){ - // Code here never runs because there are rejected promises! - }, function(error) { - // error.message === "2" - }); - ``` - - @method all - @for RSVP.Promise - @param {Array} promises - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} promise that is fulfilled when all `promises` have been - fulfilled, or rejected if any of them become rejected. - */ - __exports__["default"] = function all(entries, label) { - - /*jshint validthis:true */ - var Constructor = this; - - return new Constructor(function(resolve, reject) { - if (!isArray(entries)) { - throw new TypeError('You must pass an array to all.'); - } - - var remaining = entries.length; - var results = new Array(remaining); - var entry, pending = true; - - if (remaining === 0) { - resolve(results); - return; - } - - function fulfillmentAt(index) { - return function(value) { - results[index] = value; - if (--remaining === 0) { - resolve(results); - } - }; - } - - function onRejection(reason) { - remaining = 0; - reject(reason); - } - - for (var index = 0; index < entries.length; index++) { - entry = entries[index]; - if (isNonThenable(entry)) { - results[index] = entry; - if (--remaining === 0) { - resolve(results); - } - } else { - Constructor.cast(entry).then(fulfillmentAt(index), onRejection); - } - } - }, label); - }; - }); -define("rsvp/promise/cast", - ["exports"], - function(__exports__) { - "use strict"; - /** - - `RSVP.Promise.cast` cast coerces its argument to a promise, or returns the - argument if it is already a promise which shares a constructor with the caster; - - Example: - - ```javascript - var promise = RSVP.Promise.resolve(1); - var casted = RSVP.Promise.cast(promise); - - console.log(promise === casted); // true - ``` - - In the case of a promise whose constructor does not match, it is assimilated. - The resulting promise will fulfill or reject based on the outcome of the - promise being casted. - - In the case of a non-promise, a promise which will fulfill with that value is - returned. - - Example: - - ```javascript - var value = 1; // could be a number, boolean, string, undefined... - var casted = RSVP.Promise.cast(value); - - console.log(value === casted); // false - console.log(casted instanceof RSVP.Promise) // true - - casted.then(function(val) { - val === value // => true - }); - ``` - - `RSVP.Promise.cast` is similar to `RSVP.Promise.resolve`, but `RSVP.Promise.cast` differs in the - following ways: - - * `RSVP.Promise.cast` serves as a memory-efficient way of getting a promise, when you - have something that could either be a promise or a value. RSVP.resolve - will have the same effect but will create a new promise wrapper if the - argument is a promise. - * `RSVP.Promise.cast` is a way of casting incoming thenables or promise subclasses to - promises of the exact class specified, so that the resulting object's `then` is - ensured to have the behavior of the constructor you are calling cast on (i.e., RSVP.Promise). - - @method cast - @for RSVP.Promise - @param {Object} object to be casted - @param {String} label optional string for labeling the promise. - Useful for tooling. - @return {Promise} promise - */ - - __exports__["default"] = function cast(object, label) { - /*jshint validthis:true */ - var Constructor = this; - - if (object && typeof object === 'object' && object.constructor === Constructor) { - return object; - } - - return new Constructor(function(resolve) { - resolve(object); - }, label); - }; - }); -define("rsvp/promise/race", - ["../utils","exports"], - function(__dependency1__, __exports__) { - "use strict"; - /* global toString */ - - var isArray = __dependency1__.isArray; - var isFunction = __dependency1__.isFunction; - var isNonThenable = __dependency1__.isNonThenable; - - /** - `RSVP.Promise.race` returns a new promise which is settled in the same way as the - first passed promise to settle. - - Example: - - ```javascript - var promise1 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - resolve("promise 1"); - }, 200); - }); - - var promise2 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - resolve("promise 2"); - }, 100); - }); - - RSVP.Promise.race([promise1, promise2]).then(function(result){ - // result === "promise 2" because it was resolved before promise1 - // was resolved. - }); - ``` - - `RSVP.Promise.race` is deterministic in that only the state of the first - completed promise matters. For example, even if other promises given to the - `promises` array argument are resolved, but the first completed promise has - become rejected before the other promises became fulfilled, the returned - promise will become rejected: - - ```javascript - var promise1 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - resolve("promise 1"); - }, 200); - }); - - var promise2 = new RSVP.Promise(function(resolve, reject){ - setTimeout(function(){ - reject(new Error("promise 2")); - }, 100); - }); - - RSVP.Promise.race([promise1, promise2]).then(function(result){ - // Code here never runs because there are rejected promises! - }, function(reason){ - // reason.message === "promise2" because promise 2 became rejected before - // promise 1 became fulfilled - }); - ``` - - @method race - @for RSVP.Promise - @param {Array} promises array of promises to observe - @param {String} label optional string for describing the promise returned. - Useful for tooling. - @return {Promise} a promise which settles in the same way as the first passed - promise to settle. - */ - __exports__["default"] = function race(entries, label) { - /*jshint validthis:true */ - var Constructor = this, entry; - - return new Constructor(function(resolve, reject) { - if (!isArray(entries)) { - throw new TypeError('You must pass an array to race.'); - } - - var pending = true; - - function onFulfillment(value) { if (pending) { pending = false; resolve(value); } } - function onRejection(reason) { if (pending) { pending = false; reject(reason); } } - - for (var i = 0; i < entries.length; i++) { - entry = entries[i]; - if (isNonThenable(entry)) { - pending = false; - resolve(entry); - return; - } else { - Constructor.cast(entry).then(onFulfillment, onRejection); - } - } - }, label); - }; - }); -define("rsvp/promise/reject", - ["exports"], - function(__exports__) { - "use strict"; - /** - `RSVP.Promise.reject` returns a promise rejected with the passed `reason`. - It is essentially shorthand for the following: - - ```javascript - var promise = new RSVP.Promise(function(resolve, reject){ - reject(new Error('WHOOPS')); - }); - - promise.then(function(value){ - // Code here doesn't run because the promise is rejected! - }, function(reason){ - // reason.message === 'WHOOPS' - }); - ``` - - Instead of writing the above, your code now simply becomes the following: - - ```javascript - var promise = RSVP.Promise.reject(new Error('WHOOPS')); - - promise.then(function(value){ - // Code here doesn't run because the promise is rejected! - }, function(reason){ - // reason.message === 'WHOOPS' - }); - ``` - - @method reject - @for RSVP.Promise - @param {Any} reason value that the returned promise will be rejected with. - @param {String} label optional string for identifying the returned promise. - Useful for tooling. - @return {Promise} a promise rejected with the given `reason`. - */ - __exports__["default"] = function reject(reason, label) { - /*jshint validthis:true */ - var Constructor = this; - - return new Constructor(function (resolve, reject) { - reject(reason); - }, label); - }; - }); -define("rsvp/promise/resolve", - ["exports"], - function(__exports__) { - "use strict"; - /** - `RSVP.Promise.resolve` returns a promise that will become fulfilled with the passed - `value`. It is essentially shorthand for the following: - - ```javascript - var promise = new RSVP.Promise(function(resolve, reject){ - resolve(1); - }); - - promise.then(function(value){ - // value === 1 - }); - ``` - - Instead of writing the above, your code now simply becomes the following: - - ```javascript - var promise = RSVP.Promise.resolve(1); - - promise.then(function(value){ - // value === 1 - }); - ``` - - @method resolve - @for RSVP.Promise - @param {Any} value value that the returned promise will be resolved with - @param {String} label optional string for identifying the returned promise. - Useful for tooling. - @return {Promise} a promise that will become fulfilled with the given - `value` - */ - __exports__["default"] = function resolve(value, label) { - /*jshint validthis:true */ - var Constructor = this; - - return new Constructor(function(resolve, reject) { - resolve(value); - }, label); - }; - }); -define("rsvp/race", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - __exports__["default"] = function race(array, label) { - return Promise.race(array, label); - }; - }); -define("rsvp/reject", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - __exports__["default"] = function reject(reason, label) { - return Promise.reject(reason, label); - }; - }); -define("rsvp/resolve", - ["./promise","exports"], - function(__dependency1__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - - __exports__["default"] = function resolve(value, label) { - return Promise.resolve(value, label); - }; - }); -define("rsvp/rethrow", - ["exports"], - function(__exports__) { - "use strict"; - /** - `RSVP.rethrow` will rethrow an error on the next turn of the JavaScript event - loop in order to aid debugging. - - Promises A+ specifies that any exceptions that occur with a promise must be - caught by the promises implementation and bubbled to the last handler. For - this reason, it is recommended that you always specify a second rejection - handler function to `then`. However, `RSVP.rethrow` will throw the exception - outside of the promise, so it bubbles up to your console if in the browser, - or domain/cause uncaught exception in Node. `rethrow` will throw the error - again so the error can be handled by the promise. - - ```javascript - function throws(){ - throw new Error('Whoops!'); - } - - var promise = new RSVP.Promise(function(resolve, reject){ - throws(); - }); - - promise.catch(RSVP.rethrow).then(function(){ - // Code here doesn't run because the promise became rejected due to an - // error! - }, function (err){ - // handle the error here - }); - ``` - - The 'Whoops' error will be thrown on the next turn of the event loop - and you can watch for it in your console. You can also handle it using a - rejection handler given to `.then` or `.catch` on the returned promise. - - @method rethrow - @for RSVP - @param {Error} reason reason the promise became rejected. - @throws Error - */ - __exports__["default"] = function rethrow(reason) { - setTimeout(function() { - throw reason; - }); - throw reason; - }; - }); -define("rsvp/utils", - ["exports"], - function(__exports__) { - "use strict"; - function objectOrFunction(x) { - return typeof x === "function" || (typeof x === "object" && x !== null); - } - - __exports__.objectOrFunction = objectOrFunction;function isFunction(x) { - return typeof x === "function"; - } - - __exports__.isFunction = isFunction;function isNonThenable(x) { - return !objectOrFunction(x); - } - - __exports__.isNonThenable = isNonThenable;function isArray(x) { - return Object.prototype.toString.call(x) === "[object Array]"; - } - - __exports__.isArray = isArray;// Date.now is not available in browsers < IE9 - // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/now#Compatibility - var now = Date.now || function() { return new Date().getTime(); }; - __exports__.now = now; - var keysOf = Object.keys || function(object) { - var result = []; - - for (var prop in object) { - result.push(prop); - } - - return result; - }; - __exports__.keysOf = keysOf; - }); -define("rsvp", - ["./rsvp/promise","./rsvp/events","./rsvp/node","./rsvp/all","./rsvp/all_settled","./rsvp/race","./rsvp/hash","./rsvp/rethrow","./rsvp/defer","./rsvp/config","./rsvp/map","./rsvp/resolve","./rsvp/reject","./rsvp/asap","./rsvp/filter","exports"], - function(__dependency1__, __dependency2__, __dependency3__, __dependency4__, __dependency5__, __dependency6__, __dependency7__, __dependency8__, __dependency9__, __dependency10__, __dependency11__, __dependency12__, __dependency13__, __dependency14__, __dependency15__, __exports__) { - "use strict"; - var Promise = __dependency1__["default"]; - var EventTarget = __dependency2__["default"]; - var denodeify = __dependency3__["default"]; - var all = __dependency4__["default"]; - var allSettled = __dependency5__["default"]; - var race = __dependency6__["default"]; - var hash = __dependency7__["default"]; - var rethrow = __dependency8__["default"]; - var defer = __dependency9__["default"]; - var config = __dependency10__.config; - var configure = __dependency10__.configure; - var map = __dependency11__["default"]; - var resolve = __dependency12__["default"]; - var reject = __dependency13__["default"]; - var asap = __dependency14__["default"]; - var filter = __dependency15__["default"]; - - config.async = asap; // default async is asap; - - function async(callback, arg) { - config.async(callback, arg); - } - - function on() { - config.on.apply(config, arguments); - } - - function off() { - config.off.apply(config, arguments); - } - - // Set up instrumentation through `window.__PROMISE_INTRUMENTATION__` - if (typeof window !== 'undefined' && typeof window.__PROMISE_INSTRUMENTATION__ === 'object') { - var callbacks = window.__PROMISE_INSTRUMENTATION__; - configure('instrument', true); - for (var eventName in callbacks) { - if (callbacks.hasOwnProperty(eventName)) { - on(eventName, callbacks[eventName]); - } - } - } - - __exports__.Promise = Promise; - __exports__.EventTarget = EventTarget; - __exports__.all = all; - __exports__.allSettled = allSettled; - __exports__.race = race; - __exports__.hash = hash; - __exports__.rethrow = rethrow; - __exports__.defer = defer; - __exports__.denodeify = denodeify; - __exports__.configure = configure; - __exports__.on = on; - __exports__.off = off; - __exports__.resolve = resolve; - __exports__.reject = reject; - __exports__.async = async; - __exports__.map = map; - __exports__.filter = filter; - }); -global.RSVP = requireModule('rsvp'); -}(window)); -'use strict'; - -var EPUBJS = EPUBJS || {}; -EPUBJS.VERSION = "0.2.1"; - -EPUBJS.plugins = EPUBJS.plugins || {}; - -EPUBJS.filePath = EPUBJS.filePath || "/epubjs/"; - -EPUBJS.Render = {}; - -(function(root) { - - var previousEpub = root.ePub || {}; - - var ePub = root.ePub = function() { - var bookPath, options; - - //-- var book = ePub("path/to/book.epub", { restore: true }) - if(typeof(arguments[0]) != 'undefined' && - typeof arguments[0] === 'string') { - - bookPath = arguments[0]; - - if( arguments[1] && typeof arguments[1] === 'object' ) { - options = arguments[1]; - options.bookPath = bookPath; - } else { - options = { 'bookPath' : bookPath }; - } - - } - - /* - * var book = ePub({ bookPath: "path/to/book.epub", restore: true }); - * - * - OR - - * - * var book = ePub({ restore: true }); - * book.open("path/to/book.epub"); - */ - - if( arguments[0] && typeof arguments[0] === 'object' ) { - options = arguments[0]; - } - - - return new EPUBJS.Book(options); - }; - - _.extend(ePub, { - noConflict : function() { - root.ePub = previousEpub; - return this; - } - }); - - //exports to multiple environments - if (typeof define === 'function' && define.amd) - //AMD - define(function(){ return ePub; }); - else if (typeof module != "undefined" && module.exports) - //Node - module.exports = ePub; - -})(window); - -EPUBJS.Book = function(options){ - - var book = this; - - this.settings = _.defaults(options || {}, { - bookPath : null, - bookKey : null, - packageUrl : null, - storage: false, //-- true (auto) or false (none) | override: 'ram', 'websqldatabase', 'indexeddb', 'filesystem' - fromStorage : false, - saved : false, - online : true, - contained : false, - width : null, - height: null, - layoutOveride : null, // Default: { spread: 'reflowable', layout: 'auto', orientation: 'auto'} - orientation : null, - minSpreadWidth: 800, //-- overridden by spread: none (never) / both (always) - gap: "auto", //-- "auto" or int - version: 1, - restore: false, - reload : false, - goto : false, - styles : {}, - headTags : {}, - withCredentials: false, - render_method: "Iframe" - }); - - this.settings.EPUBJSVERSION = EPUBJS.VERSION; - - this.spinePos = 0; - this.stored = false; - - //-- All Book events for listening - /* - book:ready - book:stored - book:online - book:offline - book:pageChanged - book:loadFailed - book:loadChapterFailed - */ - - //-- Adds Hook methods to the Book prototype - // Hooks will all return before triggering the callback. - // EPUBJS.Hooks.mixin(this); - //-- Get pre-registered hooks for events - // this.getHooks("beforeChapterDisplay"); - - this.online = this.settings.online || navigator.onLine; - this.networkListeners(); - - this.store = false; //-- False if not using storage; - - //-- Determine storage method - //-- Override options: none | ram | websqldatabase | indexeddb | filesystem - - if(this.settings.storage !== false){ - this.storage = new fileStorage.storage(this.settings.storage); - } - - this.ready = { - manifest: new RSVP.defer(), - spine: new RSVP.defer(), - metadata: new RSVP.defer(), - cover: new RSVP.defer(), - toc: new RSVP.defer(), - pageList: new RSVP.defer() - }; - - this.readyPromises = [ - this.ready.manifest.promise, - this.ready.spine.promise, - this.ready.metadata.promise, - this.ready.cover.promise, - this.ready.toc.promise - ]; - - this.pageList = []; - this.pagination = new EPUBJS.Pagination(); - this.pageListReady = this.ready.pageList.promise; - - this.ready.all = RSVP.all(this.readyPromises); - - this.ready.all.then(this._ready.bind(this)); - - // Queue for methods used before rendering - this.isRendered = false; - this._q = EPUBJS.core.queue(this); - // Queue for rendering - this._rendering = false; - this._displayQ = EPUBJS.core.queue(this); - // Queue for going to another location - this._moving = false; - this._gotoQ = EPUBJS.core.queue(this); - - /** - * Creates a new renderer. - * The renderer will handle displaying the content using the method provided in the settings - */ - this.renderer = new EPUBJS.Renderer(this.settings.render_method); - //-- Set the width at which to switch from spreads to single pages - this.renderer.setMinSpreadWidth(this.settings.minSpreadWidth); - this.renderer.setGap(this.settings.gap); - //-- Pass through the renderer events - this.listenToRenderer(this.renderer); - - this.defer_opened = new RSVP.defer(); - this.opened = this.defer_opened.promise; - // BookUrl is optional, but if present start loading process - if(typeof this.settings.bookPath === 'string') { - this.open(this.settings.bookPath, this.settings.reload); - } - - window.addEventListener("beforeunload", this.unload.bind(this), false); - - //-- Listen for these promises: - //-- book.opened.then() - //-- book.rendered.then() -}; - -//-- Check bookUrl and start parsing book Assets or load them from storage -EPUBJS.Book.prototype.open = function(bookPath, forceReload){ - var book = this, - epubpackage, - opened = new RSVP.defer(); - - this.settings.bookPath = bookPath; - - //-- Get a absolute URL from the book path - this.bookUrl = this.urlFrom(bookPath); - - if(this.settings.contained || this.isContained(bookPath)){ - - this.settings.contained = this.contained = true; - - this.bookUrl = ''; - - epubpackage = this.unarchive(bookPath). - then(function(){ - return book.loadPackage(); - }); - - } else { - epubpackage = this.loadPackage(); - } - - if(this.settings.restore && !forceReload && localStorage){ - //-- Will load previous package json, or re-unpack if error - epubpackage.then(function(packageXml) { - var identifier = book.packageIdentifier(packageXml); - var restored = book.restore(identifier); - - if(!restored) { - book.unpack(packageXml); - } - opened.resolve(); - book.defer_opened.resolve(); - }); - - }else{ - - //-- Get package information from epub opf - epubpackage.then(function(packageXml) { - book.unpack(packageXml); - opened.resolve(); - book.defer_opened.resolve(); - }); - } - - //-- If there is network connection, store the books contents - if(this.online && this.settings.storage && !this.settings.contained){ - if(!this.settings.stored) opened.then(book.storeOffline()); - } - - this._registerReplacements(this.renderer); - - return opened.promise; - -}; - -EPUBJS.Book.prototype.loadPackage = function(_containerPath){ - var book = this, - parse = new EPUBJS.Parser(), - containerPath = _containerPath || "META-INF/container.xml", - containerXml, - packageXml; - - if(!this.settings.packageUrl) { //-- provide the packageUrl to skip this step - packageXml = book.loadXml(book.bookUrl + containerPath). - then(function(containerXml){ - return parse.container(containerXml); // Container has path to content - }). - then(function(paths){ - book.settings.contentsPath = book.bookUrl + paths.basePath; - book.settings.packageUrl = book.bookUrl + paths.packagePath; - book.settings.encoding = paths.encoding; - return book.loadXml(book.settings.packageUrl); // Containes manifest, spine and metadata - }); - } else { - packageXml = book.loadXml(book.settings.packageUrl); - } - - packageXml.catch(function(error) { - // handle errors in either of the two requests - console.error("Could not load book at: "+ containerPath); - book.trigger("book:loadFailed", containerPath); - }); - return packageXml; -}; - -EPUBJS.Book.prototype.packageIdentifier = function(packageXml){ - var book = this, - parse = new EPUBJS.Parser(); - - return parse.identifier(packageXml); -}; - -EPUBJS.Book.prototype.unpack = function(packageXml){ - var book = this, - parse = new EPUBJS.Parser(); - - book.contents = parse.packageContents(packageXml, book.settings.contentsPath); // Extract info from contents - - book.manifest = book.contents.manifest; - book.spine = book.contents.spine; - book.spineIndexByURL = book.contents.spineIndexByURL; - book.metadata = book.contents.metadata; - if(!book.settings.bookKey) { - book.settings.bookKey = book.generateBookKey(book.metadata.identifier); - } - - //-- Set Globbal Layout setting based on metadata - book.globalLayoutProperties = book.parseLayoutProperties(book.metadata); - - book.cover = book.contents.cover = book.settings.contentsPath + book.contents.coverPath; - - book.spineNodeIndex = book.contents.spineNodeIndex; - - book.ready.manifest.resolve(book.contents.manifest); - book.ready.spine.resolve(book.contents.spine); - book.ready.metadata.resolve(book.contents.metadata); - book.ready.cover.resolve(book.contents.cover); - - - //-- Load the TOC, optional; either the EPUB3 XHTML Navigation file or the EPUB2 NCX file - if(book.contents.navPath) { - book.settings.navUrl = book.settings.contentsPath + book.contents.navPath; - - book.loadXml(book.settings.navUrl). - then(function(navHtml){ - return parse.nav(navHtml, book.spineIndexByURL, book.spine); // Grab Table of Contents - }).then(function(toc){ - book.toc = book.contents.toc = toc; - book.ready.toc.resolve(book.contents.toc); - }, function(error) { - book.ready.toc.resolve(false); - }); - - // Load the optional pageList - book.loadXml(book.settings.navUrl). - then(function(navHtml){ - return parse.pageList(navHtml, book.spineIndexByURL, book.spine); - }).then(function(pageList){ - var epubcfi = new EPUBJS.EpubCFI(); - var wait = 0; // need to generate a cfi - - // No pageList found - if(pageList.length === 0) { - return; - } - - book.pageList = book.contents.pageList = pageList; - - // Replace HREFs with CFI - book.pageList.forEach(function(pg){ - if(!pg.cfi) { - wait += 1; - epubcfi.generateCfiFromHref(pg.href, book).then(function(cfi){ - pg.cfi = cfi; - pg.packageUrl = book.settings.packageUrl; - - wait -= 1; - if(wait === 0) { - book.pagination.process(book.pageList); - book.ready.pageList.resolve(book.pageList); - } - }); - } - }); - - if(!wait) { - book.pagination.process(book.pageList); - book.ready.pageList.resolve(book.pageList); - } - - }, function(error) { - book.ready.pageList.resolve([]); - }); - } else if(book.contents.tocPath) { - book.settings.tocUrl = book.settings.contentsPath + book.contents.tocPath; - - book.loadXml(book.settings.tocUrl). - then(function(tocXml){ - return parse.toc(tocXml, book.spineIndexByURL, book.spine); // Grab Table of Contents - }).then(function(toc){ - book.toc = book.contents.toc = toc; - book.ready.toc.resolve(book.contents.toc); - }, function(error) { - book.ready.toc.resolve(false); - }); - - } else { - book.ready.toc.resolve(false); - } - -}; - -EPUBJS.Book.prototype.createHiddenRender = function(renderer, _width, _height) { - var box = this.element.getBoundingClientRect(); - var width = _width || this.settings.width || box.width; - var height = _height || this.settings.height || box.height; - var hiddenContainer; - var hiddenEl; - renderer.setMinSpreadWidth(this.settings.minSpreadWidth); - renderer.setGap(this.settings.gap); - - this._registerReplacements(renderer); - if(this.settings.forceSingle) { - renderer.forceSingle(true); - } - - hiddenContainer = document.createElement("div"); - hiddenContainer.style.visibility = "hidden"; - hiddenContainer.style.overflow = "hidden"; - hiddenContainer.style.width = "0"; - hiddenContainer.style.height = "0"; - this.element.appendChild(hiddenContainer); - - hiddenEl = document.createElement("div"); - hiddenEl.style.visibility = "hidden"; - hiddenEl.style.overflow = "hidden"; - hiddenEl.style.width = width + "px";//"0"; - hiddenEl.style.height = height +"px"; //"0"; - hiddenContainer.appendChild(hiddenEl); - - renderer.initialize(hiddenEl); - return hiddenContainer; -}; - -// Generates the pageList array by loading every chapter and paging through them -EPUBJS.Book.prototype.generatePageList = function(width, height){ - var pageList = []; - var pager = new EPUBJS.Renderer(this.settings.render_method, false); //hidden - var hiddenContainer = this.createHiddenRender(pager, width, height); - var deferred = new RSVP.defer(); - var spinePos = -1; - var spineLength = this.spine.length; - var totalPages = 0; - var currentPage = 0; - var nextChapter = function(deferred){ - var chapter; - var next = spinePos + 1; - var done = deferred || new RSVP.defer(); - var loaded; - if(next >= spineLength) { - done.resolve(); - } else { - spinePos = next; - chapter = new EPUBJS.Chapter(this.spine[spinePos], this.store); - pager.displayChapter(chapter, this.globalLayoutProperties).then(function(chap){ - pager.pageMap.forEach(function(item){ - currentPage += 1; - pageList.push({ - "cfi" : item.start, - "page" : currentPage - }); - - }); - - if(pager.pageMap.length % 2 > 0 && - pager.spreads) { - currentPage += 1; // Handle Spreads - pageList.push({ - "cfi" : pager.pageMap[pager.pageMap.length - 1].end, - "page" : currentPage - }); - } - - // Load up the next chapter - setTimeout(function(){ - nextChapter(done); - }, 1); - }); - } - return done.promise; - }.bind(this); - - var finished = nextChapter().then(function(){ - pager.remove(); - this.element.removeChild(hiddenContainer); - deferred.resolve(pageList); - }.bind(this)); - - return deferred.promise; -}; - -// Render out entire book and generate the pagination -// Width and Height are optional and will default to the current dimensions -EPUBJS.Book.prototype.generatePagination = function(width, height) { - var book = this; - var defered = new RSVP.defer(); - - this.ready.spine.promise.then(function(){ - book.generatePageList(width, height).then(function(pageList){ - book.pageList = book.contents.pageList = pageList; - book.pagination.process(pageList); - book.ready.pageList.resolve(book.pageList); - defered.resolve(book.pageList); - }); - }); - - return defered.promise; -}; - -// Process the pagination from a JSON array containing the pagelist -EPUBJS.Book.prototype.loadPagination = function(pagelistJSON) { - var pageList = JSON.parse(pagelistJSON); - - if(pageList && pageList.length) { - this.pageList = pageList; - this.pagination.process(this.pageList); - this.ready.pageList.resolve(this.pageList); - } - return this.pageList; -}; - -EPUBJS.Book.prototype.getPageList = function() { - return this.ready.pageList.promise; -}; - -EPUBJS.Book.prototype.getMetadata = function() { - return this.ready.metadata.promise; -}; - -EPUBJS.Book.prototype.getToc = function() { - return this.ready.toc.promise; -}; - -/* Private Helpers */ - -//-- Listeners for browser events -EPUBJS.Book.prototype.networkListeners = function(){ - var book = this; - - window.addEventListener("offline", function(e) { - book.online = false; - book.trigger("book:offline"); - }, false); - - window.addEventListener("online", function(e) { - book.online = true; - book.trigger("book:online"); - }, false); - -}; - -// Listen to all events the renderer triggers and pass them as book events -EPUBJS.Book.prototype.listenToRenderer = function(renderer){ - var book = this; - renderer.Events.forEach(function(eventName){ - renderer.on(eventName, function(e){ - book.trigger(eventName, e); - }); - }); - - renderer.on("renderer:visibleRangeChanged", function(range) { - var startPage, endPage, percent; - var pageRange = []; - - if(this.pageList.length > 0) { - startPage = this.pagination.pageFromCfi(range.start); - percent = this.pagination.percentageFromPage(startPage); - pageRange.push(startPage); - - if(range.end) { - endPage = this.pagination.pageFromCfi(range.end); - //if(startPage != endPage) { - pageRange.push(endPage); - //} - } - this.trigger("book:pageChanged", { - "anchorPage": startPage, - "percentage": percent, - "pageRange" : pageRange - }); - - // TODO: Add event for first and last page. - // (though last is going to be hard, since it could be several reflowed pages long) - } - }.bind(this)); - - renderer.on("render:loaded", this.loadChange.bind(this)); -}; - -// Listens for load events from the Renderer and checks against the current chapter -// Prevents the Render from loading a different chapter when back button is pressed -EPUBJS.Book.prototype.loadChange = function(url){ - var uri = EPUBJS.core.uri(url); - var chapter; - - if(this.currentChapter) { - chapter = EPUBJS.core.uri(this.currentChapter.absolute); - } - - if(!this._rendering && this.currentChapter && uri.path != chapter.path){ - console.warn("Miss Match", uri.path, this.currentChapter.absolute); - this.goto(uri.filename); - } -}; - -EPUBJS.Book.prototype.unlistenToRenderer = function(renderer){ - renderer.Events.forEach(function(eventName){ - renderer.off(eventName); - } ); -}; - -//-- Choose between a request from store or a request from network -EPUBJS.Book.prototype.loadXml = function(url){ - if(this.settings.fromStorage) { - return this.storage.getXml(url, this.settings.encoding); - } else if(this.settings.contained) { - return this.zip.getXml(url, this.settings.encoding); - }else{ - return EPUBJS.core.request(url, 'xml', this.settings.withCredentials); - } -}; - -//-- Turns a url into a absolute url -EPUBJS.Book.prototype.urlFrom = function(bookPath){ - var uri = EPUBJS.core.uri(bookPath), - absolute = uri.protocol, - fromRoot = uri.path[0] == "/", - location = window.location, - //-- Get URL orgin, try for native or combine - origin = location.origin || location.protocol + "//" + location.host, - baseTag = document.getElementsByTagName('base'), - base; - - - //-- Check is Base tag is set - - if(baseTag.length) { - base = baseTag[0].href; - } - - //-- 1. Check if url is absolute - if(uri.protocol){ - return uri.origin + uri.path; - } - - //-- 2. Check if url starts with /, add base url - if(!absolute && fromRoot){ - return (base || origin) + uri.path; - } - - //-- 3. Or find full path to url and add that - if(!absolute && !fromRoot){ - return EPUBJS.core.resolveUrl(base || location.pathname, uri.path); - } - -}; - - -EPUBJS.Book.prototype.unarchive = function(bookPath){ - var book = this, - unarchived; - - //-- Must use storage - // if(this.settings.storage == false ){ - // this.settings.storage = true; - // this.storage = new fileStorage.storage(); - // } - - this.zip = new EPUBJS.Unarchiver(); - this.store = this.zip; // Use zip storaged in ram - return this.zip.openZip(bookPath); -}; - -//-- Checks if url has a .epub or .zip extension -EPUBJS.Book.prototype.isContained = function(bookUrl){ - var uri = EPUBJS.core.uri(bookUrl); - - if(uri.extension && (uri.extension == "epub" || uri.extension == "zip")){ - return true; - } - - return false; -}; - -//-- Checks if the book can be retrieved from localStorage -EPUBJS.Book.prototype.isSaved = function(bookKey) { - var storedSettings; - - if(!localStorage) { - return false; - } - - storedSettings = localStorage.getItem(bookKey); - - if( !localStorage || - storedSettings === null) { - return false; - } else { - return true; - } -}; - -// Generates the Book Key using the identifer in the manifest or other string provided -EPUBJS.Book.prototype.generateBookKey = function(identifier){ - return "epubjs:" + EPUBJS.VERSION + ":" + window.location.host + ":" + identifier; -}; - -EPUBJS.Book.prototype.saveContents = function(){ - if(!localStorage) { - return false; - } - localStorage.setItem(this.settings.bookKey, JSON.stringify(this.contents)); -}; - -EPUBJS.Book.prototype.removeSavedContents = function() { - if(!localStorage) { - return false; - } - localStorage.removeItem(this.settings.bookKey); -}; - - - -//-- Takes a string or a element -EPUBJS.Book.prototype.renderTo = function(elem){ - var book = this, - rendered; - - if(_.isElement(elem)) { - this.element = elem; - } else if (typeof elem == "string") { - this.element = EPUBJS.core.getEl(elem); - } else { - console.error("Not an Element"); - return; - } - - rendered = this.opened. - then(function(){ - // book.render = new EPUBJS.Renderer[this.settings.renderer](book); - book.renderer.initialize(book.element, book.settings.width, book.settings.height); - book._rendered(); - return book.startDisplay(); - }); - - // rendered.then(null, function(error) { console.error(error); }); - - return rendered; -}; - -EPUBJS.Book.prototype.startDisplay = function(){ - var display; - - if(this.settings.goto) { - display = this.goto(this.settings.goto); - }else if(this.settings.previousLocationCfi) { - display = this.gotoCfi(this.settings.previousLocationCfi); - }else{ - display = this.displayChapter(this.spinePos); - } - - return display; -}; - -EPUBJS.Book.prototype.restore = function(identifier){ - - var book = this, - fetch = ['manifest', 'spine', 'metadata', 'cover', 'toc', 'spineNodeIndex', 'spineIndexByURL', 'globalLayoutProperties'], - reject = false, - bookKey = this.generateBookKey(identifier), - fromStore = localStorage.getItem(bookKey), - len = fetch.length, - i; - - if(this.settings.clearSaved) reject = true; - - if(!reject && fromStore != 'undefined' && fromStore !== null){ - book.contents = JSON.parse(fromStore); - - for(i = 0; i < len; i++) { - var item = fetch[i]; - - if(!book.contents[item]) { - reject = true; - break; - } - book[item] = book.contents[item]; - } - } - - if(reject || !fromStore || !this.contents || !this.settings.contentsPath){ - return false; - }else{ - this.settings.bookKey = bookKey; - this.ready.manifest.resolve(this.manifest); - this.ready.spine.resolve(this.spine); - this.ready.metadata.resolve(this.metadata); - this.ready.cover.resolve(this.cover); - this.ready.toc.resolve(this.toc); - return true; - } - -}; - -EPUBJS.Book.prototype.displayChapter = function(chap, end, deferred){ - var book = this, - render, - cfi, - pos, - store, - defer = deferred || new RSVP.defer(); - - var chapter; - - if(!this.isRendered) { - this._q.enqueue("displayChapter", arguments); - // Reject for now. TODO: pass promise to queue - defer.reject({ - message : "Rendering", - stack : new Error().stack - }); - return defer.promise; - } - - - if(this._rendering || this._rendering) { - // Pass along the current defer - this._displayQ.enqueue("displayChapter", [chap, end, defer]); - return defer.promise; - } - - if(_.isNumber(chap)){ - pos = chap; - }else{ - cfi = new EPUBJS.EpubCFI(chap); - pos = cfi.spinePos; - } - - if(pos < 0 || pos >= this.spine.length){ - console.warn("Not A Valid Location"); - pos = 0; - end = false; - cfi = false; - } - - //-- Create a new chapter - chapter = new EPUBJS.Chapter(this.spine[pos], this.store); - - this._rendering = true; - - render = book.renderer.displayChapter(chapter, this.globalLayoutProperties); - if(cfi) { - book.renderer.gotoCfi(cfi); - } else if(end) { - book.renderer.lastPage(); - } - //-- Success, Clear render queue - render.then(function(rendered){ - // var inwait; - //-- Set the book's spine position - book.spinePos = pos; - - defer.resolve(book.renderer); - - if(!book.settings.fromStorage && - !book.settings.contained) { - book.preloadNextChapter(); - } - - book.currentChapter = chapter; - book._rendering = false; - book._displayQ.dequeue(); - if(book._displayQ.length() === 0) { - book._gotoQ.dequeue(); - } - - }, function(error) { - // handle errors in either of the two requests - console.error("Could not load Chapter: "+ chapter.absolute); - book.trigger("book:chapterLoadFailed", chapter.absolute); - book._rendering = false; - defer.reject(error); - }); - - return defer.promise; -}; - -EPUBJS.Book.prototype.nextPage = function(){ - var next; - - if(!this.isRendered) return this._q.enqueue("nextPage", arguments); - - next = this.renderer.nextPage(); - - if(!next){ - return this.nextChapter(); - } -}; - -EPUBJS.Book.prototype.prevPage = function() { - var prev; - - if(!this.isRendered) return this._q.enqueue("prevPage", arguments); - - prev = this.renderer.prevPage(); - - if(!prev){ - return this.prevChapter(); - } -}; - -EPUBJS.Book.prototype.nextChapter = function() { - var next; - if (this.spinePos < this.spine.length - 1) { - next = this.spinePos + 1; - while (this.spine[next] && this.spine[next].linear && this.spine[next].linear == 'no') { - next++; - } - if (next < this.spine.length - 1) { - return this.displayChapter(next); - } else { - this.trigger("book:atEnd"); - } - - } else { - this.trigger("book:atEnd"); - } -}; - -EPUBJS.Book.prototype.prevChapter = function() { - var prev; - if (this.spinePos > 0) { - prev = this.spinePos - 1; - while (this.spine[prev] && this.spine[prev].linear && this.spine[prev].linear == 'no') { - prev--; - } - if (prev >= 0) { - return this.displayChapter(prev, true); - } else { - this.trigger("book:atStart"); - } - - } else { - this.trigger("book:atStart"); - } -}; - -EPUBJS.Book.prototype.getCurrentLocationCfi = function() { - if(!this.isRendered) return false; - return this.renderer.currentLocationCfi; -}; - -EPUBJS.Book.prototype.goto = function(target){ - - if(target.indexOf("epubcfi(") === 0) { - return this.gotoCfi(target); - } else if(target.indexOf("%") === target.length-1) { - return this.gotoPercentage(parseInt(target.substring(0, target.length-1))/100); - } else if(typeof target === "number" || isNaN(target) === false){ - return this.gotoPage(target); - } else { - return this.gotoHref(target); - } - -}; - -EPUBJS.Book.prototype.gotoCfi = function(cfiString, defer){ - var cfi, - spinePos, - spineItem, - rendered, - deferred = defer || new RSVP.defer(); - - if(!this.isRendered) { - console.warn("Not yet Rendered"); - this.settings.previousLocationCfi = cfiString; - return false; - } - - // Currently going to a chapter - if(this._moving || this._rendering) { - console.warn("Renderer is moving"); - this._gotoQ.enqueue("gotoCfi", [cfiString, deferred]); - return false; - } - - cfi = new EPUBJS.EpubCFI(cfiString); - spinePos = cfi.spinePos; - - if(spinePos == -1) { - return false; - } - - spineItem = this.spine[spinePos]; - promise = deferred.promise; - this._moving = true; - //-- If same chapter only stay on current chapter - if(this.currentChapter && this.spinePos === spinePos){ - this.renderer.gotoCfi(cfi); - this._moving = false; - deferred.resolve(this.renderer.currentLocationCfi); - } else { - - if(!spineItem || spinePos == -1) { - spinePos = 0; - spineItem = this.spine[spinePos]; - } - - this.currentChapter = new EPUBJS.Chapter(spineItem, this.store); - - if(this.currentChapter) { - this.spinePos = spinePos; - render = this.renderer.displayChapter(this.currentChapter, this.globalLayoutProperties); - - this.renderer.gotoCfi(cfi); - render.then(function(rendered){ - this._moving = false; - deferred.resolve(rendered.currentLocationCfi); - }.bind(this)); - } - } - - promise.then(function(){ - this._gotoQ.dequeue(); - }.bind(this)); - - return promise; -}; - -EPUBJS.Book.prototype.gotoHref = function(url, defer){ - var split, chapter, section, relativeURL, spinePos; - var deferred = defer || new RSVP.defer(); - - if(!this.isRendered) { - this.settings.goto = url; - return false; - } - - // Currently going to a chapter - if(this._moving || this._rendering) { - this._gotoQ.enqueue("gotoHref", [url, deferred]); - return false; - } - - split = url.split("#"); - chapter = split[0]; - section = split[1] || false; - // absoluteURL = (chapter.search("://") === -1) ? (this.settings.contentsPath + chapter) : chapter; - relativeURL = chapter.replace(this.settings.contentsPath, ''); - spinePos = this.spineIndexByURL[relativeURL]; - - //-- If link fragment only stay on current chapter - if(!chapter){ - spinePos = this.currentChapter ? this.currentChapter.spinePos : 0; - } - - //-- Check that URL is present in the index, or stop - if(typeof(spinePos) != "number") return false; - - if(!this.currentChapter || spinePos != this.currentChapter.spinePos){ - //-- Load new chapter if different than current - return this.displayChapter(spinePos).then(function(){ - if(section){ - this.renderer.section(section); - } - deferred.resolve(this.renderer.currentLocationCfi); - }.bind(this)); - }else{ - //-- Goto section - if(section) { - this.renderer.section(section); - } else { - // Or jump to the start - this.renderer.firstPage(); - } - deferred.resolve(this.renderer.currentLocationCfi); - } - - deferred.promise.then(function(){ - this._gotoQ.dequeue(); - }.bind(this)); - - return deferred.promise; -}; - -EPUBJS.Book.prototype.gotoPage = function(pg){ - var cfi = this.pagination.cfiFromPage(pg); - return this.gotoCfi(cfi); -}; - -EPUBJS.Book.prototype.gotoPercentage = function(percent){ - var pg = this.pagination.pageFromPercentage(percent); - return this.gotoPage(pg); -}; - -EPUBJS.Book.prototype.preloadNextChapter = function() { - var next; - var chap = this.spinePos + 1; - - if(chap >= this.spine.length){ - return false; - } - - next = new EPUBJS.Chapter(this.spine[chap]); - if(next) { - EPUBJS.core.request(next.absolute); - } -}; - - -EPUBJS.Book.prototype.storeOffline = function() { - var book = this, - assets = _.values(this.manifest); - - //-- Creates a queue of all items to load - return EPUBJS.storage.batch(assets). - then(function(){ - book.settings.stored = true; - book.trigger("book:stored"); - }); -}; - -EPUBJS.Book.prototype.availableOffline = function() { - return this.settings.stored > 0 ? true : false; -}; - -/* -EPUBJS.Book.prototype.fromStorage = function(stored) { - - if(this.contained) return; - - if(!stored){ - this.online = true; - this.tell("book:online"); - }else{ - if(!this.availableOffline){ - //-- If book hasn't been cached yet, store offline - this.storeOffline(function(){ - this.online = false; - this.tell("book:offline"); - }.bind(this)); - - }else{ - this.online = false; - this.tell("book:offline"); - } - } - -} -*/ - -EPUBJS.Book.prototype.setStyle = function(style, val, prefixed) { - var noreflow = ["color", "background", "background-color"]; - - if(!this.isRendered) return this._q.enqueue("setStyle", arguments); - - this.settings.styles[style] = val; - - this.renderer.setStyle(style, val, prefixed); - - if(noreflow.indexOf(style) === -1) { - clearTimeout(this.reformatTimeout); - this.reformatTimeout = setTimeout(function(){ - this.renderer.reformat(); - }.bind(this), 10); - } -}; - -EPUBJS.Book.prototype.removeStyle = function(style) { - if(!this.isRendered) return this._q.enqueue("removeStyle", arguments); - this.renderer.removeStyle(style); - this.renderer.reformat(); - delete this.settings.styles[style]; -}; - -EPUBJS.Book.prototype.addHeadTag = function(tag, attrs) { - if(!this.isRendered) return this._q.enqueue("addHeadTag", arguments); - this.settings.headTags[tag] = attrs; -}; - -EPUBJS.Book.prototype.useSpreads = function(use) { - console.warn("useSpreads is deprecated, use forceSingle or set a layoutOveride instead"); - if(use === false) { - this.forceSingle(true); - } else { - this.forceSingle(false); - } -}; - -EPUBJS.Book.prototype.forceSingle = function(use) { - this.renderer.forceSingle(use); - this.settings.forceSingle = use; - if(this.isRendered) { - this.renderer.reformat(); - } -}; - -EPUBJS.Book.prototype.setMinSpreadWidth = function(width) { - this.settings.minSpreadWidth = width; - if(this.isRendered) { - this.renderer.setMinSpreadWidth(this.settings.minSpreadWidth); - this.renderer.reformat(); - } -}; - -EPUBJS.Book.prototype.setGap = function(gap) { - this.settings.gap = gap; - if(this.isRendered) { - this.renderer.setGap(this.settings.gap); - this.renderer.reformat(); - } -}; - -EPUBJS.Book.prototype.chapter = function(path) { - var spinePos = this.spineIndexByURL[path]; - var spineItem; - var chapter; - - if(spinePos){ - spineItem = this.spine[spinePos]; - chapter = new EPUBJS.Chapter(spineItem, this.store); - chapter.load(); - } - return chapter; -}; - -EPUBJS.Book.prototype.unload = function(){ - - if(this.settings.restore && localStorage) { - this.saveContents(); - } - - this.unlistenToRenderer(this.renderer); - - this.trigger("book:unload"); -}; - -EPUBJS.Book.prototype.destroy = function() { - - window.removeEventListener("beforeunload", this.unload); - - if(this.currentChapter) this.currentChapter.unload(); - - this.unload(); - - if(this.render) this.render.remove(); - -}; - -EPUBJS.Book.prototype._ready = function() { - - this.trigger("book:ready"); - -}; - -EPUBJS.Book.prototype._rendered = function(err) { - var book = this; - - this.isRendered = true; - this.trigger("book:rendered"); - - this._q.flush(); -}; - - -EPUBJS.Book.prototype.applyStyles = function(renderer, callback){ - // if(!this.isRendered) return this._q.enqueue("applyStyles", arguments); - renderer.applyStyles(this.settings.styles); - callback(); -}; - -EPUBJS.Book.prototype.applyHeadTags = function(renderer, callback){ - // if(!this.isRendered) return this._q.enqueue("applyHeadTags", arguments); - renderer.applyHeadTags(this.settings.headTags); - callback(); -}; - -EPUBJS.Book.prototype._registerReplacements = function(renderer){ - renderer.registerHook("beforeChapterDisplay", this.applyStyles.bind(this, renderer), true); - renderer.registerHook("beforeChapterDisplay", this.applyHeadTags.bind(this, renderer), true); - renderer.registerHook("beforeChapterDisplay", EPUBJS.replace.hrefs.bind(this), true); - - if(this._needsAssetReplacement()) { - - renderer.registerHook("beforeChapterDisplay", [ - EPUBJS.replace.head, - EPUBJS.replace.resources, - EPUBJS.replace.svg - ], true); - - } - -}; - -EPUBJS.Book.prototype._needsAssetReplacement = function(){ - if(this.settings.fromStorage) { - - //-- Filesystem api links are relative, so no need to replace them - if(this.storage.getStorageType() == "filesystem") { - return false; - } - - return true; - - } else if(this.settings.contained) { - - return true; - - } else { - - return false; - - } -}; - - -//-- http://www.idpf.org/epub/fxl/ -EPUBJS.Book.prototype.parseLayoutProperties = function(metadata){ - var layout = (this.layoutOveride && this.layoutOveride.layout) || metadata.layout || "reflowable"; - var spread = (this.layoutOveride && this.layoutOveride.spread) || metadata.spread || "auto"; - var orientation = (this.layoutOveride && this.layoutOveride.orientation) || metadata.orientation || "auto"; - return { - layout : layout, - spread : spread, - orientation : orientation - }; -}; - -//-- Enable binding events to book -RSVP.EventTarget.mixin(EPUBJS.Book.prototype); - -//-- Handle RSVP Errors -RSVP.on('error', function(event) { - //console.error(event, event.detail); -}); - -RSVP.configure('instrument', true); //-- true | will logging out all RSVP rejections -// RSVP.on('created', listener); -// RSVP.on('chained', listener); -// RSVP.on('fulfilled', listener); -RSVP.on('rejected', function(event){ - console.error(event.detail.message, event.detail.stack); -}); - -EPUBJS.Chapter = function(spineObject, store){ - this.href = spineObject.href; - this.absolute = spineObject.url; - this.id = spineObject.id; - this.spinePos = spineObject.index; - this.cfiBase = spineObject.cfiBase; - this.properties = spineObject.properties; - this.manifestProperties = spineObject.manifestProperties; - this.linear = spineObject.linear; - this.pages = 1; - this.store = store; - this.epubcfi = new EPUBJS.EpubCFI(); - this.deferred = new RSVP.defer(); - this.loaded = this.deferred.promise; -}; - - -EPUBJS.Chapter.prototype.load = function(_store){ - var store = _store || this.store; - var promise; - // if(this.store && (!this.book.online || this.book.contained)) - if(store){ - promise = store.get(this.href); - }else{ - promise = EPUBJS.core.request(this.absolute, 'xml'); - } - - promise.then(function(xml){ - this.setDocument(xml); - }.bind(this)); - - return promise; -}; - -EPUBJS.Chapter.prototype.url = function(_store){ - var deferred = new RSVP.defer(); - var store = _store || this.store; - var loaded; - var chapter = this; - var url; - - if(store){ - if(!this.tempUrl) { - store.getUrl(this.absolute).then(function(url){ - chapter.tempUrl = url; - deferred.resolve(url); - }); - } else { - url = this.tempUrl; - deferred.resolve(url); - } - }else{ - url = this.absolute; - deferred.resolve(url); - } - /* - loaded = EPUBJS.core.request(url, 'xml', false); - loaded.then(function(contents){ - chapter.contents = contents; - deferred.resolve(chapter.absolute); - }, function(error){ - deferred.reject(error); - }); - */ - - return deferred.promise; -}; - -EPUBJS.Chapter.prototype.setPages = function(num){ - this.pages = num; -}; - -EPUBJS.Chapter.prototype.getPages = function(num){ - return this.pages; -}; - -EPUBJS.Chapter.prototype.getID = function(){ - return this.ID; -}; - -EPUBJS.Chapter.prototype.unload = function(store){ - this.document = null; - if(this.tempUrl && store) { - store.revokeUrl(this.tempUrl); - this.tempUrl = false; - } -}; - -EPUBJS.Chapter.prototype.setDocument = function(_document){ - this.document = _document.implementation.createDocument( - _document.namespaceURI, //namespace to use - null, //empty document - _document.doctype //doctype (null for XML) - ); - this.contents = this.document.importNode( - _document.documentElement, //node to import - true //clone its descendants - ); - this.document.appendChild(this.contents); - this.deferred.resolve(this.contents); -}; - -EPUBJS.Chapter.prototype.cfiFromRange = function(_range) { - var range; - var startXpath, endXpath; - var startContainer, endContainer; - var cleanTextContent, cleanEndTextContent; - - // Check for Contents - if(!this.document) return; - startXpath = EPUBJS.core.getElementXPath(_range.startContainer); - // console.log(startContainer) - endXpath = EPUBJS.core.getElementXPath(_range.endContainer); - startContainer = this.document.evaluate(startXpath, this.document, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - - if(!_range.collapsed) { - endContainer = this.document.evaluate(endXpath, this.document, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - } - - range = this.document.createRange(); - // Find Exact Range in original document - if(startContainer) { - try { - range.setStart(startContainer, _range.startOffset); - if(!_range.collapsed && endContainer) { - range.setEnd(endContainer, _range.endOffset); - } - } catch (e) { - console.log("missed"); - startContainer = false; - } - - } - - // Fuzzy Match - if(!startContainer) { - console.log("not found, try fuzzy match"); - cleanStartTextContent = EPUBJS.core.cleanStringForXpath(_range.startContainer.textContent); - startXpath = "//text()[contains(.," + cleanStartTextContent + ")]"; - - startContainer = this.document.evaluate(startXpath, this.document, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - - if(startContainer){ - // console.log("Found with Fuzzy"); - range.setStart(startContainer, _range.startOffset); - - if(!_range.collapsed) { - cleanEndTextContent = EPUBJS.core.cleanStringForXpath(_range.endContainer.textContent); - endXpath = "//text()[contains(.," + cleanEndTextContent + ")]"; - endContainer = this.document.evaluate(endXpath, this.document, EPUBJS.core.nsResolver, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - if(endContainer) { - range.setEnd(endContainer, _range.endOffset); - } - } - - } - } - - // Generate the Cfi - return this.epubcfi.generateCfiFromRange(range, this.cfiBase); -}; - -EPUBJS.Chapter.prototype.find = function(_query){ - var chapter = this; - var matches = []; - var query = _query.toLowerCase(); - //var xpath = this.document.evaluate(".//text()[contains(translate(., '"+query.toUpperCase()+"', '"+query+"'),'"+query+"')]", this.document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); - var find = function(node){ - // Search String - var text = node.textContent.toLowerCase(); - var range = chapter.document.createRange(); - var cfi; - var pos; - var last = -1; - - while (pos != -1) { - pos = text.indexOf(query, last + 1); - - if(pos != -1) { - // If Found, Create Range - range = chapter.document.createRange(); - range.setStart(node, pos); - range.setEnd(node, pos + query.length); - - //Generate CFI - cfi = chapter.cfiFromRange(range); - //Add CFI to list - matches.push(cfi); - } - - last = pos; - } - - }; - - // Grab text nodes - - /* - for ( var i=0 ; i < xpath.snapshotLength; i++ ) { - find(xpath.snapshotItem(i)); - } - */ - - this.textSprint(this.document, function(node){ - find(node); - }); - - - // Return List of CFIs - return matches; -}; - - -EPUBJS.Chapter.prototype.textSprint = function(root, func) { - var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, { - acceptNode: function (node) { - if ( ! /^\s*$/.test(node.data) ) { - return NodeFilter.FILTER_ACCEPT; - } else { - return NodeFilter.FILTER_REJECT; - } - } - }, false); - var node; - while ((node = treeWalker.nextNode())) { - func(node); - } - -}; -var EPUBJS = EPUBJS || {}; -EPUBJS.core = {}; - -//-- Get a element for an id -EPUBJS.core.getEl = function(elem) { - return document.getElementById(elem); -}; - -//-- Get all elements for a class -EPUBJS.core.getEls = function(classes) { - return document.getElementsByClassName(classes); -}; - -EPUBJS.core.request = function(url, type, withCredentials) { - var supportsURL = window.URL; - var BLOB_RESPONSE = supportsURL ? "blob" : "arraybuffer"; - - var deferred = new RSVP.defer(); - - var xhr = new XMLHttpRequest(); - - //-- Check from PDF.js: - // https://github.com/mozilla/pdf.js/blob/master/web/compatibility.js - var xhrPrototype = XMLHttpRequest.prototype; - - if (!('overrideMimeType' in xhrPrototype)) { - // IE10 might have response, but not overrideMimeType - Object.defineProperty(xhrPrototype, 'overrideMimeType', { - value: function xmlHttpRequestOverrideMimeType(mimeType) {} - }); - } - if(withCredentials) { - xhr.withCredentials = true; - } - xhr.open("GET", url, true); - xhr.onreadystatechange = handler; - - if(type == 'blob'){ - xhr.responseType = BLOB_RESPONSE; - } - - if(type == "json") { - xhr.setRequestHeader("Accept", "application/json"); - } - - if(type == 'xml') { - xhr.overrideMimeType('text/xml'); - } - - xhr.send(); - - function handler() { - if (this.readyState === this.DONE) { - if (this.status === 200 || this.responseXML ) { //-- Firefox is reporting 0 for blob urls - var r; - - if(type == 'xml'){ - r = this.responseXML; - }else - if(type == 'json'){ - r = JSON.parse(this.response); - }else - if(type == 'blob'){ - - if(supportsURL) { - r = this.response; - } else { - //-- Safari doesn't support responseType blob, so create a blob from arraybuffer - r = new Blob([this.response]); - } - - }else{ - r = this.response; - } - - deferred.resolve(r); - } else { - deferred.reject({ - message : this.response, - stack : new Error().stack - }); - } - } - } - - return deferred.promise; -}; - -EPUBJS.core.toArray = function(obj) { - var arr = []; - - for (var member in obj) { - var newitm; - if ( obj.hasOwnProperty(member) ) { - newitm = obj[member]; - newitm.ident = member; - arr.push(newitm); - } - } - - return arr; -}; - -//-- Parse the different parts of a url, returning a object -EPUBJS.core.uri = function(url){ - var uri = { - protocol : '', - host : '', - path : '', - origin : '', - directory : '', - base : '', - filename : '', - extension : '', - fragment : '', - href : url - }, - doubleSlash = url.indexOf('://'), - search = url.indexOf('?'), - fragment = url.indexOf("#"), - withoutProtocol, - dot, - firstSlash; - - if(fragment != -1) { - uri.fragment = url.slice(fragment + 1); - url = url.slice(0, fragment); - } - - if(search != -1) { - uri.search = url.slice(search + 1); - url = url.slice(0, search); - href = url; - } - - if(doubleSlash != -1) { - uri.protocol = url.slice(0, doubleSlash); - withoutProtocol = url.slice(doubleSlash+3); - firstSlash = withoutProtocol.indexOf('/'); - - if(firstSlash === -1) { - uri.host = uri.path; - uri.path = ""; - } else { - uri.host = withoutProtocol.slice(0, firstSlash); - uri.path = withoutProtocol.slice(firstSlash); - } - - - uri.origin = uri.protocol + "://" + uri.host; - - uri.directory = EPUBJS.core.folder(uri.path); - - uri.base = uri.origin + uri.directory; - // return origin; - } else { - uri.path = url; - uri.directory = EPUBJS.core.folder(url); - uri.base = uri.directory; - } - - //-- Filename - uri.filename = url.replace(uri.base, ''); - dot = uri.filename.lastIndexOf('.'); - if(dot != -1) { - uri.extension = uri.filename.slice(dot+1); - } - return uri; -}; - -//-- Parse out the folder, will return everything before the last slash - -EPUBJS.core.folder = function(url){ - - var lastSlash = url.lastIndexOf('/'); - - if(lastSlash == -1) var folder = ''; - - folder = url.slice(0, lastSlash + 1); - - return folder; - -}; - -//-- https://github.com/ebidel/filer.js/blob/master/src/filer.js#L128 -EPUBJS.core.dataURLToBlob = function(dataURL) { - var BASE64_MARKER = ';base64,', - parts, contentType, raw, rawLength, uInt8Array; - - if (dataURL.indexOf(BASE64_MARKER) == -1) { - parts = dataURL.split(','); - contentType = parts[0].split(':')[1]; - raw = parts[1]; - - return new Blob([raw], {type: contentType}); - } - - parts = dataURL.split(BASE64_MARKER); - contentType = parts[0].split(':')[1]; - raw = window.atob(parts[1]); - rawLength = raw.length; - - uInt8Array = new Uint8Array(rawLength); - - for (var i = 0; i < rawLength; ++i) { - uInt8Array[i] = raw.charCodeAt(i); - } - - return new Blob([uInt8Array], {type: contentType}); -}; - -//-- Load scripts async: http://stackoverflow.com/questions/7718935/load-scripts-asynchronously -EPUBJS.core.addScript = function(src, callback, target) { - var s, r; - r = false; - s = document.createElement('script'); - s.type = 'text/javascript'; - s.async = false; - s.src = src; - s.onload = s.onreadystatechange = function() { - if ( !r && (!this.readyState || this.readyState == 'complete') ) { - r = true; - if(callback) callback(); - } - }; - target = target || document.body; - target.appendChild(s); -}; - -EPUBJS.core.addScripts = function(srcArr, callback, target) { - var total = srcArr.length, - curr = 0, - cb = function(){ - curr++; - if(total == curr){ - if(callback) callback(); - }else{ - EPUBJS.core.addScript(srcArr[curr], cb, target); - } - }; - - EPUBJS.core.addScript(srcArr[curr], cb, target); -}; - -EPUBJS.core.addCss = function(src, callback, target) { - var s, r; - r = false; - s = document.createElement('link'); - s.type = 'text/css'; - s.rel = "stylesheet"; - s.href = src; - s.onload = s.onreadystatechange = function() { - if ( !r && (!this.readyState || this.readyState == 'complete') ) { - r = true; - if(callback) callback(); - } - }; - target = target || document.body; - target.appendChild(s); -}; - -EPUBJS.core.prefixed = function(unprefixed) { - var vendors = ["Webkit", "Moz", "O", "ms" ], - prefixes = ['-Webkit-', '-moz-', '-o-', '-ms-'], - upper = unprefixed[0].toUpperCase() + unprefixed.slice(1), - length = vendors.length; - - if (typeof(document.body.style[unprefixed]) != 'undefined') { - return unprefixed; - } - - for ( var i=0; i < length; i++ ) { - if (typeof(document.body.style[vendors[i] + upper]) != 'undefined') { - return vendors[i] + upper; - } - } - - return unprefixed; -}; - -EPUBJS.core.resolveUrl = function(base, path) { - var url, - segments = [], - uri = EPUBJS.core.uri(path), - folders = base.split("/"), - paths; - - if(uri.host) { - return path; - } - - folders.pop(); - - paths = path.split("/"); - paths.forEach(function(p){ - if(p === ".."){ - folders.pop(); - }else{ - segments.push(p); - } - }); - - url = folders.concat(segments); - - return url.join("/"); -}; - -// http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript -EPUBJS.core.uuid = function() { - var d = new Date().getTime(); - var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { - var r = (d + Math.random()*16)%16 | 0; - d = Math.floor(d/16); - return (c=='x' ? r : (r&0x7|0x8)).toString(16); - }); - return uuid; -}; - -// Fast quicksort insert for sorted array -- based on: -// http://stackoverflow.com/questions/1344500/efficient-way-to-insert-a-number-into-a-sorted-array-of-numbers -EPUBJS.core.insert = function(item, array, compareFunction) { - var location = EPUBJS.core.locationOf(item, array, compareFunction); - array.splice(location, 0, item); - - return location; -}; - -EPUBJS.core.locationOf = function(item, array, compareFunction, _start, _end) { - var start = _start || 0; - var end = _end || array.length; - var pivot = parseInt(start + (end - start) / 2); - var compared; - if(!compareFunction){ - compareFunction = function(a, b) { - if(a > b) return 1; - if(a < b) return -1; - if(a = b) return 0; - }; - } - if(end-start <= 0) { - return pivot; - } - - compared = compareFunction(array[pivot], item); - if(end-start === 1) { - return compared > 0 ? pivot : pivot + 1; - } - - if(compared === 0) { - return pivot; - } - if(compared === -1) { - return EPUBJS.core.locationOf(item, array, compareFunction, pivot, end); - } else{ - return EPUBJS.core.locationOf(item, array, compareFunction, start, pivot); - } -}; - -EPUBJS.core.indexOfSorted = function(item, array, compareFunction, _start, _end) { - var start = _start || 0; - var end = _end || array.length; - var pivot = parseInt(start + (end - start) / 2); - var compared; - if(!compareFunction){ - compareFunction = function(a, b) { - if(a > b) return 1; - if(a < b) return -1; - if(a = b) return 0; - }; - } - if(end-start <= 0) { - return -1; // Not found - } - - compared = compareFunction(array[pivot], item); - if(end-start === 1) { - return compared === 0 ? pivot : -1; - } - if(compared === 0) { - return pivot; // Found - } - if(compared === -1) { - return EPUBJS.core.indexOfSorted(item, array, compareFunction, pivot, end); - } else{ - return EPUBJS.core.indexOfSorted(item, array, compareFunction, start, pivot); - } -}; - - -EPUBJS.core.queue = function(_scope){ - var _q = []; - var scope = _scope; - // Add an item to the queue - var enqueue = function(funcName, args, context) { - _q.push({ - "funcName" : funcName, - "args" : args, - "context" : context - }); - return _q; - }; - // Run one item - var dequeue = function(){ - var inwait; - if(_q.length) { - inwait = _q.shift(); - // Defer to any current tasks - // setTimeout(function(){ - scope[inwait.funcName].apply(inwait.context || scope, inwait.args); - // }, 0); - } - }; - - // Run All - var flush = function(){ - while(_q.length) { - dequeue(); - } - }; - // Clear all items in wait - var clear = function(){ - _q = []; - }; - - var length = function(){ - return _q.length; - }; - - return { - "enqueue" : enqueue, - "dequeue" : dequeue, - "flush" : flush, - "clear" : clear, - "length" : length - }; -}; - -// From: https://code.google.com/p/fbug/source/browse/branches/firebug1.10/content/firebug/lib/xpath.js -/** - * Gets an XPath for an element which describes its hierarchical location. - */ -EPUBJS.core.getElementXPath = function(element) { - if (element && element.id) { - return '//*[@id="' + element.id + '"]'; - } else { - return EPUBJS.core.getElementTreeXPath(element); - } -}; - -EPUBJS.core.getElementTreeXPath = function(element) { - var paths = []; - var isXhtml = (element.ownerDocument.documentElement.getAttribute('xmlns') === "http://www.w3.org/1999/xhtml"); - var index, nodeName, tagName, pathIndex; - - if(element.nodeType === Node.TEXT_NODE){ - // index = Array.prototype.indexOf.call(element.parentNode.childNodes, element) + 1; - index = EPUBJS.core.indexOfTextNode(element) + 1; - - paths.push("text()["+index+"]"); - element = element.parentNode; - } - - // Use nodeName (instead of localName) so namespace prefix is included (if any). - for (; element && element.nodeType == 1; element = element.parentNode) - { - index = 0; - for (var sibling = element.previousSibling; sibling; sibling = sibling.previousSibling) - { - // Ignore document type declaration. - if (sibling.nodeType == Node.DOCUMENT_TYPE_NODE) { - continue; - } - if (sibling.nodeName == element.nodeName) { - ++index; - } - } - nodeName = element.nodeName.toLowerCase(); - tagName = (isXhtml ? "xhtml:" + nodeName : nodeName); - pathIndex = (index ? "[" + (index+1) + "]" : ""); - paths.splice(0, 0, tagName + pathIndex); - } - - return paths.length ? "./" + paths.join("/") : null; -}; - -EPUBJS.core.nsResolver = function(prefix) { - var ns = { - 'xhtml' : 'http://www.w3.org/1999/xhtml', - 'epub': 'http://www.idpf.org/2007/ops' - }; - return ns[prefix] || null; -}; - -//https://stackoverflow.com/questions/13482352/xquery-looking-for-text-with-single-quote/13483496#13483496 -EPUBJS.core.cleanStringForXpath = function(str) { - var parts = str.match(/[^'"]+|['"]/g); - parts = parts.map(function(part){ - if (part === "'") { - return '\"\'\"'; // output "'" - } - - if (part === '"') { - return "\'\"\'"; // output '"' - } - return "\'" + part + "\'"; - }); - return "concat(\'\'," + parts.join(",") + ")"; -}; - -EPUBJS.core.indexOfTextNode = function(textNode){ - var parent = textNode.parentNode; - var children = parent.childNodes; - var sib; - var index = -1; - for (var i = 0; i < children.length; i++) { - sib = children[i]; - if(sib.nodeType === Node.TEXT_NODE){ - index++; - } - if(sib == textNode) break; - } - - return index; -}; -EPUBJS.EpubCFI = function(cfiStr){ - if(cfiStr) return this.parse(cfiStr); -}; - -EPUBJS.EpubCFI.prototype.generateChapterComponent = function(_spineNodeIndex, _pos, id) { - var pos = parseInt(_pos), - spineNodeIndex = _spineNodeIndex + 1, - cfi = '/'+spineNodeIndex+'/'; - - cfi += (pos + 1) * 2; - - if(id) cfi += "[" + id + "]"; - - //cfi += "!"; - - return cfi; -}; - -EPUBJS.EpubCFI.prototype.generatePathComponent = function(steps) { - var parts = []; - - steps.forEach(function(part){ - var segment = ''; - segment += (part.index + 1) * 2; - - if(part.id) { - segment += "[" + part.id + "]"; - } - - parts.push(segment); - }); - - return parts.join('/'); -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromElement = function(element, chapter) { - var steps = this.pathTo(element); - var path = this.generatePathComponent(steps); - if(!path.length) { - // Start of Chapter - return "epubcfi(" + chapter + "!/4/)"; - } else { - // First Text Node - return "epubcfi(" + chapter + "!" + path + "/1:0)"; - } -}; - -EPUBJS.EpubCFI.prototype.pathTo = function(node) { - var stack = [], - children; - - while(node && node.parentNode !== null && node.parentNode.nodeType != 9) { - children = node.parentNode.children; - - stack.unshift({ - 'id' : node.id, - // 'classList' : node.classList, - 'tagName' : node.tagName, - 'index' : children ? Array.prototype.indexOf.call(children, node) : 0 - }); - - node = node.parentNode; - } - - return stack; -}; - -EPUBJS.EpubCFI.prototype.getChapterComponent = function(cfiStr) { - - var splitStr = cfiStr.split("!"); - - return splitStr[0]; -}; - -EPUBJS.EpubCFI.prototype.getPathComponent = function(cfiStr) { - - var splitStr = cfiStr.split("!"); - var pathComponent = splitStr[1] ? splitStr[1].split(":") : ''; - - return pathComponent[0]; -}; - -EPUBJS.EpubCFI.prototype.getCharecterOffsetComponent = function(cfiStr) { - var splitStr = cfiStr.split(":"); - return splitStr[1] || ''; -}; - - -EPUBJS.EpubCFI.prototype.parse = function(cfiStr) { - var cfi = {}, - chapSegment, - chapterComponent, - pathComponent, - charecterOffsetComponent, - assertion, - chapId, - path, - end, - endInt, - text, - parseStep = function(part){ - var type, index, has_brackets, id; - - type = "element"; - index = parseInt(part) / 2 - 1; - has_brackets = part.match(/\[(.*)\]/); - if(has_brackets && has_brackets[1]){ - id = has_brackets[1]; - } - - return { - "type" : type, - 'index' : index, - 'id' : id || false - }; - }; - - if(typeof cfiStr !== "string") { - return {spinePos: -1}; - } - - cfi.str = cfiStr; - - if(cfiStr.indexOf("epubcfi(") === 0 && cfiStr[cfiStr.length-1] === ")") { - // Remove intial epubcfi( and ending ) - cfiStr = cfiStr.slice(8, cfiStr.length-1); - } - - chapterComponent = this.getChapterComponent(cfiStr); - pathComponent = this.getPathComponent(cfiStr) || ''; - charecterOffsetComponent = this.getCharecterOffsetComponent(cfiStr); - // Make sure this is a valid cfi or return - if(!chapterComponent) { - return {spinePos: -1}; - } - - // Chapter segment is always the second one - chapSegment = chapterComponent.split("/")[2] || ''; - if(!chapSegment) return {spinePos:-1}; - - cfi.spinePos = (parseInt(chapSegment) / 2 - 1 ) || 0; - - chapId = chapSegment.match(/\[(.*)\]/); - - cfi.spineId = chapId ? chapId[1] : false; - - if(pathComponent.indexOf(',') != -1) { - // Handle ranges -- not supported yet - console.warn("CFI Ranges are not supported"); - } - - path = pathComponent.split('/'); - end = path.pop(); - - cfi.steps = []; - - path.forEach(function(part){ - var step; - - if(part) { - step = parseStep(part); - cfi.steps.push(step); - } - }); - - //-- Check if END is a text node or element - endInt = parseInt(end); - if(!isNaN(endInt)) { - - if(endInt % 2 === 0) { // Even = is an element - cfi.steps.push(parseStep(end)); - } else { - cfi.steps.push({ - "type" : "text", - 'index' : (endInt - 1 ) / 2 - }); - } - - } - - assertion = charecterOffsetComponent.match(/\[(.*)\]/); - if(assertion && assertion[1]){ - cfi.characterOffset = parseInt(charecterOffsetComponent.split('[')[0]); - // We arent handling these assertions yet - cfi.textLocationAssertion = assertion[1]; - } else { - cfi.characterOffset = parseInt(charecterOffsetComponent); - } - - return cfi; -}; - -EPUBJS.EpubCFI.prototype.addMarker = function(cfi, _doc, _marker) { - var doc = _doc || document; - var marker = _marker || this.createMarker(doc); - var parent; - var lastStep; - var text; - var split; - - if(typeof cfi === 'string') { - cfi = this.parse(cfi); - } - // Get the terminal step - lastStep = cfi.steps[cfi.steps.length-1]; - - // check spinePos - if(cfi.spinePos === -1) { - // Not a valid CFI - return false; - } - - // Find the CFI elements parent - parent = this.findParent(cfi, doc); - - if(!parent) { - // CFI didn't return an element - // Maybe it isnt in the current chapter? - return false; - } - - if(lastStep && lastStep.type === "text") { - text = parent.childNodes[lastStep.index]; - if(cfi.characterOffset){ - split = text.splitText(cfi.characterOffset); - marker.classList.add("EPUBJS-CFI-SPLIT"); - parent.insertBefore(marker, split); - } else { - parent.insertBefore(marker, text); - } - } else { - parent.insertBefore(marker, parent.firstChild); - } - - return marker; -}; - -EPUBJS.EpubCFI.prototype.createMarker = function(_doc) { - var doc = _doc || document; - var element = doc.createElement('span'); - element.id = "EPUBJS-CFI-MARKER:"+ EPUBJS.core.uuid(); - element.classList.add("EPUBJS-CFI-MARKER"); - - return element; -}; - -EPUBJS.EpubCFI.prototype.removeMarker = function(marker, _doc) { - var doc = _doc || document; - // var id = marker.id; - - // Cleanup textnodes if they were split - if(marker.classList.contains("EPUBJS-CFI-SPLIT")){ - nextSib = marker.nextSibling; - prevSib = marker.previousSibling; - if(nextSib && - prevSib && - nextSib.nodeType === 3 && - prevSib.nodeType === 3){ - - prevSib.textContent += nextSib.textContent; - marker.parentNode.removeChild(nextSib); - } - marker.parentNode.removeChild(marker); - } else if(marker.classList.contains("EPUBJS-CFI-MARKER")) { - // Remove only elements added as markers - marker.parentNode.removeChild(marker); - } - -}; - -EPUBJS.EpubCFI.prototype.findParent = function(cfi, _doc) { - var doc = _doc || document, - element = doc.getElementsByTagName('html')[0], - children = Array.prototype.slice.call(element.children), - num, index, part, sections, - text, textBegin, textEnd; - - if(typeof cfi === 'string') { - cfi = this.parse(cfi); - } - - sections = cfi.steps.slice(0); // Clone steps array - if(!sections.length) { - return doc.getElementsByTagName('body')[0]; - } - - while(sections && sections.length > 0) { - part = sections.shift(); - // Find textNodes Parent - if(part.type === "text") { - text = element.childNodes[part.index]; - element = text.parentNode || element; - // Find element by id if present - } else if(part.id){ - element = doc.getElementById(part.id); - // Find element in parent - }else{ - element = children[part.index]; - } - // Element can't be found - if(typeof element === "undefined") { - console.error("No Element For", part, cfi.str); - return false; - } - // Get current element children and continue through steps - children = Array.prototype.slice.call(element.children); - } - - return element; -}; - -EPUBJS.EpubCFI.prototype.compare = function(cfiOne, cfiTwo) { - if(typeof cfiOne === 'string') { - cfiOne = new EPUBJS.EpubCFI(cfiOne); - } - if(typeof cfiTwo === 'string') { - cfiTwo = new EPUBJS.EpubCFI(cfiTwo); - } - // Compare Spine Positions - if(cfiOne.spinePos > cfiTwo.spinePos) { - return 1; - } - if(cfiOne.spinePos < cfiTwo.spinePos) { - return -1; - } - - - // Compare Each Step in the First item - for (var i = 0; i < cfiOne.steps.length; i++) { - if(!cfiTwo.steps[i]) { - return 1; - } - if(cfiOne.steps[i].index > cfiTwo.steps[i].index) { - return 1; - } - if(cfiOne.steps[i].index < cfiTwo.steps[i].index) { - return -1; - } - // Otherwise continue checking - } - - // All steps in First present in Second - if(cfiOne.steps.length < cfiTwo.steps.length) { - return -1; - } - - // Compare the charecter offset of the text node - if(cfiOne.characterOffset > cfiTwo.characterOffset) { - return 1; - } - if(cfiOne.characterOffset < cfiTwo.characterOffset) { - return -1; - } - - // CFI's are equal - return 0; -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromHref = function(href, book) { - var uri = EPUBJS.core.uri(href); - var path = uri.path; - var fragment = uri.fragment; - var spinePos = book.spineIndexByURL[path]; - var loaded; - var deferred = new RSVP.defer(); - var epubcfi = new EPUBJS.EpubCFI(); - var spineItem; - - if(typeof spinePos !== "undefined"){ - spineItem = book.spine[spinePos]; - loaded = book.loadXml(spineItem.url); - loaded.then(function(doc){ - var element = doc.getElementById(fragment); - var cfi; - cfi = epubcfi.generateCfiFromElement(element, spineItem.cfiBase); - deferred.resolve(cfi); - }); - } - - return deferred.promise; -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromTextNode = function(anchor, offset, base) { - var parent = anchor.parentNode; - var steps = this.pathTo(parent); - var path = this.generatePathComponent(steps); - var index = 1 + (2 * Array.prototype.indexOf.call(parent.childNodes, anchor)); - return "epubcfi(" + base + "!" + path + "/"+index+":"+(offset || 0)+")"; -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromRangeAnchor = function(range, base) { - var anchor = range.anchorNode; - var offset = range.anchorOffset; - return this.generateCfiFromTextNode(anchor, offset, base); -}; - -EPUBJS.EpubCFI.prototype.generateCfiFromRange = function(range, base) { - var start, startElement, startSteps, startPath, startOffset, startIndex; - var end, endElement, endSteps, endPath, endOffset, endIndex; - - start = range.startContainer; - - if(start.nodeType === 3) { // text node - startElement = start.parentNode; - //startIndex = 1 + (2 * Array.prototype.indexOf.call(startElement.childNodes, start)); - startIndex = 1 + (2 * EPUBJS.core.indexOfTextNode(start)); - startSteps = this.pathTo(startElement); - } else if(range.collapsed) { - return this.generateCfiFromElement(start, base); // single element - } else { - startSteps = this.pathTo(start); - } - - startPath = this.generatePathComponent(startSteps); - startOffset = range.startOffset; - - if(!range.collapsed) { - end = range.endContainer; - - if(end.nodeType === 3) { // text node - endElement = end.parentNode; - // endIndex = 1 + (2 * Array.prototype.indexOf.call(endElement.childNodes, end)); - endIndex = 1 + (2 * EPUBJS.core.indexOfTextNode(end)); - - endSteps = this.pathTo(endElement); - } else { - endSteps = this.pathTo(end); - } - - endPath = this.generatePathComponent(endSteps); - endOffset = range.endOffset; - - return "epubcfi(" + base + "!" + startPath + "/" + startIndex + ":" + startOffset + "," + endPath + "/" + endIndex + ":" + endOffset + ")"; - - } else { - return "epubcfi(" + base + "!" + startPath + "/"+ startIndex +":"+ startOffset +")"; - } -}; - -EPUBJS.EpubCFI.prototype.generateXpathFromSteps = function(steps) { - var xpath = [".", "*"]; - - steps.forEach(function(step){ - var position = step.index + 1; - - if(step.id){ - xpath.push("*[position()=" + position + " and @id='" + step.id + "']"); - } else if(step.type === "text") { - xpath.push("text()[" + position + "]"); - } else { - xpath.push("*[" + position + "]"); - } - }); - - return xpath.join("/"); -}; - - -EPUBJS.EpubCFI.prototype.generateRangeFromCfi = function(cfi, _doc) { - var doc = _doc || document; - var range = doc.createRange(); - var lastStep; - var xpath; - var startContainer; - var textLength; - - if(typeof cfi === 'string') { - cfi = this.parse(cfi); - } - - // check spinePos - if(cfi.spinePos === -1) { - // Not a valid CFI - return false; - } - - xpath = this.generateXpathFromSteps(cfi.steps); - - // Get the terminal step - lastStep = cfi.steps[cfi.steps.length-1]; - startContainer = doc.evaluate(xpath, doc, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; - - if(!startContainer) { - return null; - } - - if(startContainer && cfi.characterOffset >= 0) { - textLength = startContainer.length; - - if(cfi.characterOffset < textLength) { - range.setStart(startContainer, cfi.characterOffset); - range.setEnd(startContainer, textLength ); - } else { - console.debug("offset greater than length:", cfi.characterOffset, textLength); - range.setStart(startContainer, textLength - 1 ); - range.setEnd(startContainer, textLength ); - } - } else if(startContainer) { - range.selectNode(startContainer); - } - // doc.defaultView.getSelection().addRange(range); - return range; -}; - -EPUBJS.Events = function(obj, el){ - - this.events = {}; - - if(!el){ - this.el = document.createElement('div'); - }else{ - this.el = el; - } - - obj.createEvent = this.createEvent; - obj.tell = this.tell; - obj.listen = this.listen; - obj.deafen = this.deafen; - obj.listenUntil = this.listenUntil; - - return this; -}; - -EPUBJS.Events.prototype.createEvent = function(evt){ - var e = new CustomEvent(evt); - this.events[evt] = e; - return e; -}; - -EPUBJS.Events.prototype.tell = function(evt, msg){ - var e; - - if(!this.events[evt]){ - console.warn("No event:", evt, "defined yet, creating."); - e = this.createEvent(evt); - }else{ - e = this.events[evt]; - } - - if(msg) e.msg = msg; - this.el.dispatchEvent(e); - -}; - -EPUBJS.Events.prototype.listen = function(evt, func, bindto){ - if(!this.events[evt]){ - console.warn("No event:", evt, "defined yet, creating."); - this.createEvent(evt); - return; - } - - if(bindto){ - this.el.addEventListener(evt, func.bind(bindto), false); - }else{ - this.el.addEventListener(evt, func, false); - } - -}; - -EPUBJS.Events.prototype.deafen = function(evt, func){ - this.el.removeEventListener(evt, func, false); -}; - -EPUBJS.Events.prototype.listenUntil = function(OnEvt, OffEvt, func, bindto){ - this.listen(OnEvt, func, bindto); - - function unlisten(){ - this.deafen(OnEvt, func); - this.deafen(OffEvt, unlisten); - } - - this.listen(OffEvt, unlisten, this); -}; -EPUBJS.hooks = {}; -EPUBJS.Hooks = (function(){ - function hooks(){} - - //-- Get pre-registered hooks - hooks.prototype.getHooks = function(){ - var plugs; - this.hooks = {}; - Array.prototype.slice.call(arguments).forEach(function(arg){ - this.hooks[arg] = []; - }, this); - - for (var plugType in this.hooks) { - plugs = _.values(EPUBJS.hooks[plugType]); - - plugs.forEach(function(hook){ - this.registerHook(plugType, hook); - }, this); - } - }; - - //-- Hooks allow for injecting async functions that must all complete before continuing - // Functions must have a callback as their first argument. - hooks.prototype.registerHook = function(type, toAdd, toFront){ - - if(typeof(this.hooks[type]) != "undefined"){ - - if(typeof(toAdd) === "function"){ - if(toFront) { - this.hooks[type].unshift(toAdd); - }else{ - this.hooks[type].push(toAdd); - } - }else if(Array.isArray(toAdd)){ - toAdd.forEach(function(hook){ - if(toFront) { - this.hooks[type].unshift(hook); - }else{ - this.hooks[type].push(hook); - } - }, this); - } - }else{ - //-- Allows for undefined hooks, but maybe this should error? - this.hooks[type] = [func]; - } - }; - - hooks.prototype.triggerHooks = function(type, callback, passed){ - var hooks, count; - - if(typeof(this.hooks[type]) == "undefined") return false; - - hooks = this.hooks[type]; - - count = hooks.length; - if(count === 0 && callback) { - callback(); - } - - function countdown(){ - count--; - if(count <= 0 && callback) callback(); - } - - hooks.forEach(function(hook){ - hook(countdown, passed); - }); - }; - - return { - register: function(name) { - if(EPUBJS.hooks[name] === undefined) { EPUBJS.hooks[name] = {}; } - if(typeof EPUBJS.hooks[name] !== 'object') { throw "Already registered: "+name; } - return EPUBJS.hooks[name]; - }, - mixin: function(object) { - for (var prop in hooks.prototype) { - object[prop] = hooks.prototype[prop]; - } - } - }; -})(); - - -EPUBJS.Layout = EPUBJS.Layout || {}; - -EPUBJS.Layout.Reflowable = function(){ - this.documentElement = null; - this.spreadWidth = null; -}; - -EPUBJS.Layout.Reflowable.prototype.format = function(documentElement, _width, _height, _gap){ - // Get the prefixed CSS commands - var columnAxis = EPUBJS.core.prefixed('columnAxis'); - var columnGap = EPUBJS.core.prefixed('columnGap'); - var columnWidth = EPUBJS.core.prefixed('columnWidth'); - var columnFill = EPUBJS.core.prefixed('columnFill'); - - //-- Check the width and create even width columns - var width = Math.floor(_width); - // var width = (fullWidth % 2 === 0) ? fullWidth : fullWidth - 0; // Not needed for single - var section = Math.floor(width / 8); - var gap = (_gap >= 0) ? _gap : ((section % 2 === 0) ? section : section - 1); - this.documentElement = documentElement; - //-- Single Page - this.spreadWidth = (width + gap); - - - documentElement.style.overflow = "hidden"; - - // Must be set to the new calculated width or the columns will be off - documentElement.style.width = width + "px"; - - //-- Adjust height - documentElement.style.height = _height + "px"; - - //-- Add columns - documentElement.style[columnAxis] = "horizontal"; - documentElement.style[columnFill] = "auto"; - documentElement.style[columnWidth] = width+"px"; - documentElement.style[columnGap] = gap+"px"; - this.colWidth = width; - this.gap = gap; - - return { - pageWidth : this.spreadWidth, - pageHeight : _height - }; -}; - -EPUBJS.Layout.Reflowable.prototype.calculatePages = function() { - var totalWidth, displayedPages; - this.documentElement.style.width = "auto"; //-- reset width for calculations - totalWidth = this.documentElement.scrollWidth; - displayedPages = Math.ceil(totalWidth / this.spreadWidth); - - return { - displayedPages : displayedPages, - pageCount : displayedPages - }; -}; - -EPUBJS.Layout.ReflowableSpreads = function(){ - this.documentElement = null; - this.spreadWidth = null; -}; - -EPUBJS.Layout.ReflowableSpreads.prototype.format = function(documentElement, _width, _height, _gap){ - var columnAxis = EPUBJS.core.prefixed('columnAxis'); - var columnGap = EPUBJS.core.prefixed('columnGap'); - var columnWidth = EPUBJS.core.prefixed('columnWidth'); - var columnFill = EPUBJS.core.prefixed('columnFill'); - - var divisor = 2, - cutoff = 800; - - //-- Check the width and create even width columns - var fullWidth = Math.floor(_width); - var width = (fullWidth % 2 === 0) ? fullWidth : fullWidth - 1; - - var section = Math.floor(width / 8); - var gap = (_gap >= 0) ? _gap : ((section % 2 === 0) ? section : section - 1); - - //-- Double Page - var colWidth = Math.floor((width - gap) / divisor); - - this.documentElement = documentElement; - this.spreadWidth = (colWidth + gap) * divisor; - - - documentElement.style.overflow = "hidden"; - - // Must be set to the new calculated width or the columns will be off - documentElement.style.width = width + "px"; - - //-- Adjust height - documentElement.style.height = _height + "px"; - - //-- Add columns - documentElement.style[columnAxis] = "horizontal"; - documentElement.style[columnFill] = "auto"; - documentElement.style[columnGap] = gap+"px"; - documentElement.style[columnWidth] = colWidth+"px"; - - this.colWidth = colWidth; - this.gap = gap; - return { - pageWidth : this.spreadWidth, - pageHeight : _height - }; -}; - -EPUBJS.Layout.ReflowableSpreads.prototype.calculatePages = function() { - var totalWidth = this.documentElement.scrollWidth; - var displayedPages = Math.ceil(totalWidth / this.spreadWidth); - - //-- Add a page to the width of the document to account an for odd number of pages - this.documentElement.style.width = totalWidth + this.spreadWidth + "px"; - return { - displayedPages : displayedPages, - pageCount : displayedPages * 2 - }; -}; - -EPUBJS.Layout.Fixed = function(){ - this.documentElement = null; -}; - -EPUBJS.Layout.Fixed = function(documentElement, _width, _height, _gap){ - var columnWidth = EPUBJS.core.prefixed('columnWidth'); - var viewport = documentElement.querySelector("[name=viewport"); - var content; - var contents; - var width, height; - - this.documentElement = documentElement; - /** - * check for the viewport size - * - */ - if(viewport && viewport.hasAttribute("content")) { - content = viewport.getAttribute("content"); - contents = content.split(','); - if(contents[0]){ - width = contents[0].replace("width=", ''); - } - if(contents[1]){ - height = contents[1].replace("height=", ''); - } - } - - //-- Adjust width and height - documentElement.style.width = width + "px" || "auto"; - documentElement.style.height = height + "px" || "auto"; - - //-- Remove columns - documentElement.style[columnWidth] = "auto"; - - //-- Scroll - documentElement.style.overflow = "auto"; - - this.colWidth = width; - this.gap = 0; - - return { - pageWidth : width, - pageHeight : height - }; - -}; - -EPUBJS.Layout.Fixed.prototype.calculatePages = function(){ - return { - displayedPages : 1, - pageCount : 1 - }; -}; - -EPUBJS.Pagination = function(pageList) { - this.pages = []; - this.locations = []; - this.epubcfi = new EPUBJS.EpubCFI(); - if(pageList && pageList.length) { - this.process(pageList); - } -}; - -EPUBJS.Pagination.prototype.process = function(pageList){ - pageList.forEach(function(item){ - this.pages.push(item.page); - this.locations.push(item.cfi); - }, this); - - this.pageList = pageList; - this.firstPage = parseInt(this.pages[0]); - this.lastPage = parseInt(this.pages[this.pages.length-1]); - this.totalPages = this.lastPage - this.firstPage; -}; - -EPUBJS.Pagination.prototype.pageFromCfi = function(cfi){ - var pg = -1; - - // Check if the pageList has not been set yet - if(this.locations.length === 0) { - return -1; - } - - // TODO: check if CFI is valid? - - // check if the cfi is in the location list - // var index = this.locations.indexOf(cfi); - var index = EPUBJS.core.indexOfSorted(cfi, this.locations, this.epubcfi.compare); - if(index != -1 && index < (this.pages.length-1) ) { - pg = this.pages[index]; - } else { - // Otherwise add it to the list of locations - // Insert it in the correct position in the locations page - //index = EPUBJS.core.insert(cfi, this.locations, this.epubcfi.compare); - index = EPUBJS.core.locationOf(cfi, this.locations, this.epubcfi.compare); - // Get the page at the location just before the new one, or return the first - pg = index-1 >= 0 ? this.pages[index-1] : this.pages[0]; - pg = this.pages[index]; - if(pg !== undefined) { - // Add the new page in so that the locations and page array match up - //this.pages.splice(index, 0, pg); - } else { - pg = -1; - } - - } - return pg; -}; - -EPUBJS.Pagination.prototype.cfiFromPage = function(pg){ - var cfi = -1; - // check that pg is an int - if(typeof pg != "number"){ - pg = parseInt(pg); - } - - // check if the cfi is in the page list - // Pages could be unsorted. - var index = this.pages.indexOf(pg); - if(index != -1) { - cfi = this.locations[index]; - } - // TODO: handle pages not in the list - return cfi; -}; - -EPUBJS.Pagination.prototype.pageFromPercentage = function(percent){ - var pg = Math.round(this.totalPages * percent); - return pg; -}; - -// Returns a value between 0 - 1 corresponding to the location of a page -EPUBJS.Pagination.prototype.percentageFromPage = function(pg){ - var percentage = (pg - this.firstPage) / this.totalPages; - return Math.round(percentage * 1000) / 1000; -}; - -// Returns a value between 0 - 1 corresponding to the location of a cfi -EPUBJS.Pagination.prototype.percentageFromCfi = function(cfi){ - var pg = this.pageFromCfi(cfi); - var percentage = this.percentageFromPage(pg); - return percentage; -}; -EPUBJS.Parser = function(baseUrl){ - this.baseUrl = baseUrl || ''; -}; - -EPUBJS.Parser.prototype.container = function(containerXml){ - //-- - var rootfile, fullpath, folder, encoding; - - if(!containerXml) { - console.error("Container File Not Found"); - return; - } - - rootfile = containerXml.querySelector("rootfile"); - - if(!rootfile) { - console.error("No RootFile Found"); - return; - } - - fullpath = rootfile.getAttribute('full-path'); - folder = EPUBJS.core.uri(fullpath).directory; - encoding = containerXml.xmlEncoding; - - //-- Now that we have the path we can parse the contents - return { - 'packagePath' : fullpath, - 'basePath' : folder, - 'encoding' : encoding - }; -}; - -EPUBJS.Parser.prototype.identifier = function(packageXml){ - var metadataNode; - - if(!packageXml) { - console.error("Package File Not Found"); - return; - } - - metadataNode = packageXml.querySelector("metadata"); - - if(!metadataNode) { - console.error("No Metadata Found"); - return; - } - - return this.getElementText(metadataNode, "identifier"); -}; - -EPUBJS.Parser.prototype.packageContents = function(packageXml, baseUrl){ - var parse = this; - var metadataNode, manifestNode, spineNode; - var manifest, navPath, tocPath, coverPath; - var spineNodeIndex; - var spine; - var spineIndexByURL; - - if(baseUrl) this.baseUrl = baseUrl; - - if(!packageXml) { - console.error("Package File Not Found"); - return; - } - - metadataNode = packageXml.querySelector("metadata"); - if(!metadataNode) { - console.error("No Metadata Found"); - return; - } - - manifestNode = packageXml.querySelector("manifest"); - if(!manifestNode) { - console.error("No Manifest Found"); - return; - } - - spineNode = packageXml.querySelector("spine"); - if(!spineNode) { - console.error("No Spine Found"); - return; - } - - manifest = parse.manifest(manifestNode); - navPath = parse.findNavPath(manifestNode); - tocPath = parse.findTocPath(manifestNode); - coverPath = parse.findCoverPath(manifestNode); - - spineNodeIndex = Array.prototype.indexOf.call(spineNode.parentNode.childNodes, spineNode); - - spine = parse.spine(spineNode, manifest); - - spineIndexByURL = {}; - spine.forEach(function(item){ - spineIndexByURL[item.href] = item.index; - }); - - return { - 'metadata' : parse.metadata(metadataNode), - 'spine' : spine, - 'manifest' : manifest, - 'navPath' : navPath, - 'tocPath' : tocPath, - 'coverPath': coverPath, - 'spineNodeIndex' : spineNodeIndex, - 'spineIndexByURL' : spineIndexByURL - }; -}; - -//-- Find TOC NAV: media-type="application/xhtml+xml" href="toc.ncx" -EPUBJS.Parser.prototype.findNavPath = function(manifestNode){ - var node = manifestNode.querySelector("item[properties^='nav']"); - return node ? node.getAttribute('href') : false; -}; - -//-- Find TOC NCX: media-type="application/x-dtbncx+xml" href="toc.ncx" -EPUBJS.Parser.prototype.findTocPath = function(manifestNode){ - var node = manifestNode.querySelector("item[media-type='application/x-dtbncx+xml']"); - return node ? node.getAttribute('href') : false; -}; - -//-- Find Cover: -EPUBJS.Parser.prototype.findCoverPath = function(manifestNode){ - var node = manifestNode.querySelector("item[properties='cover-image']"); - return node ? node.getAttribute('href') : false; -}; - -//-- Expanded to match Readium web components -EPUBJS.Parser.prototype.metadata = function(xml){ - var metadata = {}, - p = this; - - metadata.bookTitle = p.getElementText(xml, 'title'); - metadata.creator = p.getElementText(xml, 'creator'); - metadata.description = p.getElementText(xml, 'description'); - - metadata.pubdate = p.getElementText(xml, 'date'); - - metadata.publisher = p.getElementText(xml, 'publisher'); - - metadata.identifier = p.getElementText(xml, "identifier"); - metadata.language = p.getElementText(xml, "language"); - metadata.rights = p.getElementText(xml, "rights"); - - metadata.modified_date = p.querySelectorText(xml, "meta[property='dcterms:modified']"); - metadata.layout = p.querySelectorText(xml, "meta[property='rendition:layout']"); - metadata.orientation = p.querySelectorText(xml, "meta[property='rendition:orientation']"); - metadata.spread = p.querySelectorText(xml, "meta[property='rendition:spread']"); - // metadata.page_prog_dir = packageXml.querySelector("spine").getAttribute("page-progression-direction"); - - return metadata; -}; - -EPUBJS.Parser.prototype.getElementText = function(xml, tag){ - var found = xml.getElementsByTagNameNS("http://purl.org/dc/elements/1.1/", tag), - el; - - if(!found || found.length === 0) return ''; - - el = found[0]; - - if(el.childNodes.length){ - return el.childNodes[0].nodeValue; - } - - return ''; - -}; - -EPUBJS.Parser.prototype.querySelectorText = function(xml, q){ - var el = xml.querySelector(q); - - if(el && el.childNodes.length){ - return el.childNodes[0].nodeValue; - } - - return ''; -}; - -EPUBJS.Parser.prototype.manifest = function(manifestXml){ - var baseUrl = this.baseUrl, - manifest = {}; - - //-- Turn items into an array - var selected = manifestXml.querySelectorAll("item"), - items = Array.prototype.slice.call(selected); - - //-- Create an object with the id as key - items.forEach(function(item){ - var id = item.getAttribute('id'), - href = item.getAttribute('href') || '', - type = item.getAttribute('media-type') || '', - properties = item.getAttribute('properties') || ''; - - manifest[id] = { - 'href' : href, - 'url' : baseUrl + href, //-- Absolute URL for loading with a web worker - 'type' : type, - 'properties' : properties - }; - - }); - - return manifest; - -}; - -EPUBJS.Parser.prototype.spine = function(spineXml, manifest){ - var spine = []; - - var selected = spineXml.getElementsByTagName("itemref"), - items = Array.prototype.slice.call(selected); - - var spineNodeIndex = Array.prototype.indexOf.call(spineXml.parentNode.childNodes, spineXml); - - var epubcfi = new EPUBJS.EpubCFI(); - - //-- Add to array to mantain ordering and cross reference with manifest - items.forEach(function(item, index){ - var Id = item.getAttribute('idref'); - var cfiBase = epubcfi.generateChapterComponent(spineNodeIndex, index, Id); - var props = item.getAttribute('properties') || ''; - var propArray = props.length ? props.split(' ') : []; - var manifestProps = manifest[Id].properties; - var manifestPropArray = manifestProps.length ? manifestProps.split(' ') : []; - var vert = { - 'id' : Id, - 'linear' : item.getAttribute('linear') || '', - 'properties' : propArray, - 'manifestProperties' : manifestPropArray, - 'href' : manifest[Id].href, - 'url' : manifest[Id].url, - 'index' : index, - 'cfiBase' : cfiBase, - 'cfi' : "epub(" + cfiBase + ")" - }; - spine.push(vert); - }); - - return spine; -}; - -EPUBJS.Parser.prototype.nav = function(navHtml, spineIndexByURL, bookSpine){ - var navEl = navHtml.querySelector('nav[*|type="toc"]'), //-- [*|type="toc"] * Doesn't seem to work - idCounter = 0; - - if(!navEl) return []; - - // Implements `> ol > li` - function findListItems(parent){ - var items = []; - - Array.prototype.slice.call(parent.childNodes).forEach(function(node){ - if('ol' == node.tagName){ - Array.prototype.slice.call(node.childNodes).forEach(function(item){ - if('li' == item.tagName){ - items.push(item); - } - }); - } - }); - - return items; - - } - - // Implements `> a, > span` - function findAnchorOrSpan(parent){ - var item = null; - - Array.prototype.slice.call(parent.childNodes).forEach(function(node){ - if('a' == node.tagName || 'span' == node.tagName){ - item = node; - } - }); - - return item; - } - - function getTOC(parent){ - var list = [], - nodes = findListItems(parent), - items = Array.prototype.slice.call(nodes), - length = items.length, - node; - - if(length === 0) return false; - - items.forEach(function(item){ - var id = item.getAttribute('id') || false, - content = findAnchorOrSpan(item), - href = content.getAttribute('href') || '', - text = content.textContent || "", - split = href.split("#"), - baseUrl = split[0], - subitems = getTOC(item), - spinePos = spineIndexByURL[baseUrl], - spineItem = bookSpine[spinePos], - cfi = spineItem ? spineItem.cfi : ''; - - if(!id) { - if(spinePos) { - spineItem = bookSpine[spinePos]; - id = spineItem.id; - cfi = spineItem.cfi; - } else { - id = 'epubjs-autogen-toc-id-' + (idCounter++); - } - } - - item.setAttribute('id', id); // Ensure all elements have an id - list.push({ - "id": id, - "href": href, - "label": text, - "subitems" : subitems, - "parent" : parent ? parent.getAttribute('id') : null, - "cfi" : cfi - }); - - }); - - return list; - } - - return getTOC(navEl); -}; - -EPUBJS.Parser.prototype.toc = function(tocXml, spineIndexByURL, bookSpine){ - var navMap = tocXml.querySelector("navMap"); - if(!navMap) return []; - - function getTOC(parent){ - var list = [], - nodes = parent.querySelectorAll("navPoint"), - items = Array.prototype.slice.call(nodes).reverse(), - length = items.length, - iter = length, - node; - - if(length === 0) return []; - - items.forEach(function(item){ - var id = item.getAttribute('id') || false, - content = item.querySelector("content"), - src = content.getAttribute('src'), - navLabel = item.querySelector("navLabel"), - text = navLabel.textContent ? navLabel.textContent : "", - split = src.split("#"), - baseUrl = split[0], - spinePos = spineIndexByURL[baseUrl], - spineItem = bookSpine[spinePos], - subitems = getTOC(item), - cfi = spineItem ? spineItem.cfi : ''; - - if(!id) { - if(spinePos) { - spineItem = bookSpine[spinePos]; - id = spineItem.id; - cfi = spineItem.cfi; - } else { - id = 'epubjs-autogen-toc-id-' + (idCounter++); - } - } - - - list.unshift({ - "id": id, - "href": src, - "label": text, - "spinePos": spinePos, - "subitems" : subitems, - "parent" : parent ? parent.getAttribute('id') : null, - "cfi" : cfi - }); - - }); - - return list; - } - - return getTOC(navMap); -}; - -EPUBJS.Parser.prototype.pageList = function(navHtml, spineIndexByURL, bookSpine){ - var navEl = navHtml.querySelector('nav[*|type="page-list"]'), - idCounter = 0; - - if(!navEl) return []; - - // Implements `> ol > li` - function findListItems(parent){ - var items = []; - - Array.prototype.slice.call(parent.childNodes).forEach(function(node){ - if('ol' == node.tagName){ - Array.prototype.slice.call(node.childNodes).forEach(function(item){ - if('li' == item.tagName){ - items.push(item); - } - }); - } - }); - - return items; - - } - - // Implements `> a, > span` - function findAnchorOrSpan(parent){ - var item = null; - - Array.prototype.slice.call(parent.childNodes).forEach(function(node){ - if('a' == node.tagName || 'span' == node.tagName){ - item = node; - } - }); - - return item; - } - - function getPages(parent){ - var list = [], - nodes = findListItems(parent), - items = Array.prototype.slice.call(nodes), - length = items.length, - node; - - if(length === 0) return false; - - items.forEach(function(item){ - var id = item.getAttribute('id') || false, - content = findAnchorOrSpan(item), - href = content.getAttribute('href') || '', - text = content.textContent || "", - page = parseInt(text), - isCfi = href.indexOf("epubcfi"), - split, - packageUrl, - cfi; - - if(isCfi != -1) { - split = href.split("#"); - packageUrl = split[0]; - cfi = split.length > 1 ? split[1] : false; - list.push({ - "cfi" : cfi, - "href" : href, - "packageUrl" : packageUrl, - "page" : page - }); - } else { - list.push({ - "href" : href, - "page" : page - }); - } - - }); - - return list; - } - - return getPages(navEl); -}; - -EPUBJS.Render.Iframe = function() { - this.iframe = null; - this.document = null; - this.window = null; - this.docEl = null; - this.bodyEl = null; - - this.leftPos = 0; - this.pageWidth = 0; -}; - -//-- Build up any html needed -EPUBJS.Render.Iframe.prototype.create = function(){ - this.iframe = document.createElement('iframe'); - this.iframe.id = "epubjs-iframe:" + EPUBJS.core.uuid(); - this.iframe.scrolling = "no"; - this.iframe.seamless = "seamless"; - // Back up if seamless isn't supported - this.iframe.style.border = "none"; - - this.iframe.addEventListener("load", this.loaded.bind(this), false); - return this.iframe; -}; - -/** -* Sets the source of the iframe with the given URL string -* Takes: URL string -* Returns: promise with document element -*/ -EPUBJS.Render.Iframe.prototype.load = function(url){ - var render = this, - deferred = new RSVP.defer(); - - this.iframe.contentWindow.location.replace(url); - // Reset the scroll position - render.leftPos = 0; - - if(this.window) { - this.unload(); - } - - this.iframe.onload = function(e) { - render.document = render.iframe.contentDocument; - render.docEl = render.document.documentElement; - render.headEl = render.document.head; - render.bodyEl = render.document.body; - render.window = render.iframe.contentWindow; - - render.window.addEventListener("resize", render.resized.bind(render), false); - - //-- Clear Margins - if(render.bodyEl) { - render.bodyEl.style.margin = "0"; - } - - deferred.resolve(render.docEl); - }; - - this.iframe.onerror = function(e) { - //console.error("Error Loading Contents", e); - deferred.reject({ - message : "Error Loading Contents: " + e, - stack : new Error().stack - }); - }; - return deferred.promise; -}; - - -EPUBJS.Render.Iframe.prototype.loaded = function(v){ - var url = this.iframe.contentWindow.location.href; - if(url != "about:blank"){ - this.trigger("render:loaded", url); - } -}; - -// Resize the iframe to the given width and height -EPUBJS.Render.Iframe.prototype.resize = function(width, height){ - var iframeBox; - - if(!this.iframe) return; - - this.iframe.height = height; - - if(!isNaN(width) && width % 2 !== 0){ - width += 1; //-- Prevent cutting off edges of text in columns - } - - this.iframe.width = width; - // Get the fractional height and width of the iframe - // Default to orginal if bounding rect is 0 - this.width = this.iframe.getBoundingClientRect().width || width; - this.height = this.iframe.getBoundingClientRect().height || height; -}; - - -EPUBJS.Render.Iframe.prototype.resized = function(e){ - // Get the fractional height and width of the iframe - this.width = this.iframe.getBoundingClientRect().width; - this.height = this.iframe.getBoundingClientRect().height; -}; - -EPUBJS.Render.Iframe.prototype.totalWidth = function(){ - return this.docEl.scrollWidth; -}; - -EPUBJS.Render.Iframe.prototype.totalHeight = function(){ - return this.docEl.scrollHeight; -}; - -EPUBJS.Render.Iframe.prototype.setPageDimensions = function(pageWidth, pageHeight){ - this.pageWidth = pageWidth; - this.pageHeight = pageHeight; - //-- Add a page to the width of the document to account an for odd number of pages - // this.docEl.style.width = this.docEl.scrollWidth + pageWidth + "px"; -}; - -EPUBJS.Render.Iframe.prototype.setLeft = function(leftPos){ - // this.bodyEl.style.marginLeft = -leftPos + "px"; - // this.docEl.style.marginLeft = -leftPos + "px"; - // this.docEl.style[EPUBJS.Render.Iframe.transform] = 'translate('+ (-leftPos) + 'px, 0)'; - this.document.defaultView.scrollTo(leftPos, 0); -}; - -EPUBJS.Render.Iframe.prototype.setStyle = function(style, val, prefixed){ - if(prefixed) { - style = EPUBJS.core.prefixed(style); - } - - if(this.bodyEl) this.bodyEl.style[style] = val; -}; - -EPUBJS.Render.Iframe.prototype.removeStyle = function(style){ - - if(this.bodyEl) this.bodyEl.style[style] = ''; - -}; - -EPUBJS.Render.Iframe.prototype.addHeadTag = function(tag, attrs) { - var tagEl = document.createElement(tag); - - for(var attr in attrs) { - tagEl[attr] = attrs[attr]; - } - - if(this.headEl) this.headEl.appendChild(tagEl); -}; - -EPUBJS.Render.Iframe.prototype.page = function(pg){ - this.leftPos = this.pageWidth * (pg-1); //-- pages start at 1 - this.setLeft(this.leftPos); -}; - -//-- Show the page containing an Element -EPUBJS.Render.Iframe.prototype.getPageNumberByElement = function(el){ - var left, pg; - if(!el) return; - - left = this.leftPos + el.getBoundingClientRect().left; //-- Calculate left offset compaired to scrolled position - - pg = Math.floor(left / this.pageWidth) + 1; //-- pages start at 1 - - return pg; -}; - -//-- Show the page containing an Element -EPUBJS.Render.Iframe.prototype.getPageNumberByRect = function(boundingClientRect){ - var left, pg; - - left = this.leftPos + boundingClientRect.left; //-- Calculate left offset compaired to scrolled position - pg = Math.floor(left / this.pageWidth) + 1; //-- pages start at 1 - - return pg; -}; - -// Return the root element of the content -EPUBJS.Render.Iframe.prototype.getBaseElement = function(){ - return this.bodyEl; -}; - -// Checks if an element is on the screen -EPUBJS.Render.Iframe.prototype.isElementVisible = function(el){ - var rect; - var left; - - if(el && typeof el.getBoundingClientRect === 'function'){ - rect = el.getBoundingClientRect(); - left = rect.left; //+ rect.width; - if( rect.width !== 0 && - rect.height !== 0 && // Element not visible - left >= 0 && - left < this.pageWidth ) { - return true; - } - } - - return false; -}; - - -EPUBJS.Render.Iframe.prototype.scroll = function(bool){ - if(bool) { - this.iframe.scrolling = "yes"; - } else { - this.iframe.scrolling = "no"; - } -}; - -// Cleanup event listeners -EPUBJS.Render.Iframe.prototype.unload = function(){ - this.window.removeEventListener("resize", this.resized); -}; - -//-- Enable binding events to Render -RSVP.EventTarget.mixin(EPUBJS.Render.Iframe.prototype); -EPUBJS.Renderer = function(renderMethod, hidden) { - // Dom events to listen for - this.listenedEvents = ["keydown", "keyup", "keypressed", "mouseup", "mousedown", "click"]; - this.upEvent = "mouseup"; - this.downEvent = "mousedown"; - if('ontouchstart' in document.documentElement) { - this.listenedEvents.push("touchstart", "touchend"); - this.upEvent = "touchend"; - this.downEvent = "touchstart"; - } - /** - * Setup a render method. - * Options are: Iframe - */ - if(renderMethod && typeof(EPUBJS.Render[renderMethod]) != "undefined"){ - this.render = new EPUBJS.Render[renderMethod](); - } else { - console.error("Not a Valid Rendering Method"); - } - - // Listen for load events - this.render.on("render:loaded", this.loaded.bind(this)); - - // Cached for replacement urls from storage - this.caches = {}; - - // Blank Cfi for Parsing - this.epubcfi = new EPUBJS.EpubCFI(); - - this.spreads = true; - this.isForcedSingle = false; - this.resized = _.debounce(this.onResized.bind(this), 100); - - this.layoutSettings = {}; - - this.hidden = hidden || false; - //-- Adds Hook methods to the Book prototype - // Hooks will all return before triggering the callback. - EPUBJS.Hooks.mixin(this); - //-- Get pre-registered hooks for events - this.getHooks("beforeChapterDisplay"); - - //-- Queue up page changes if page map isn't ready - this._q = EPUBJS.core.queue(this); - - this._moving = false; - -}; - -//-- Renderer events for listening -EPUBJS.Renderer.prototype.Events = [ - "renderer:keydown", - "renderer:keyup", - "renderer:keypressed", - "renderer:mouseup", - "renderer:mousedown", - "renderer:click", - "renderer:touchstart", - "renderer:touchend", - "renderer:selected", - "renderer:chapterUnloaded", - "renderer:chapterDisplayed", - "renderer:locationChanged", - "renderer:visibleLocationChanged", - "renderer:resized", - "renderer:spreads" -]; - -/** -* Creates an element to render to. -* Resizes to passed width and height or to the elements size -*/ -EPUBJS.Renderer.prototype.initialize = function(element, width, height){ - this.container = element; - this.element = this.render.create(); - - this.initWidth = width; - this.initHeight = height; - - this.width = width || this.container.clientWidth; - this.height = height || this.container.clientHeight; - - this.container.appendChild(this.element); - - if(width && height){ - this.render.resize(this.width, this.height); - } else { - this.render.resize('100%', '100%'); - } - -}; - -/** -* Display a chapter -* Takes: chapter object, global layout settings -* Returns: Promise with passed Renderer after pages has loaded -*/ -EPUBJS.Renderer.prototype.displayChapter = function(chapter, globalLayout){ - var store = false; - if(this._moving) { - console.error("Rendering In Progress"); - return; - } - this._moving = true; - // Get the url string from the chapter (may be from storage) - return chapter.url(). - then(function(url) { - - // Unload the previous chapter listener - if(this.currentChapter) { - this.currentChapter.unload(); // Remove stored blobs - - if(this.render.window){ - this.render.window.removeEventListener("resize", this.resized); - } - - this.removeEventListeners(); - this.removeSelectionListeners(); - this.trigger("renderer:chapterUnloaded"); - this.contents = null; - this.doc = null; - this.pageMap = null; - } - - this.currentChapter = chapter; - this.chapterPos = 1; - this.currentChapterCfiBase = chapter.cfiBase; - - this.layoutSettings = this.reconcileLayoutSettings(globalLayout, chapter.properties); - return this.load(url); - - }.bind(this)); - -}; - -/** -* Loads a url (string) and renders it, -* attaching event listeners and triggering hooks. -* Returns: Promise with the rendered contents. -*/ - -EPUBJS.Renderer.prototype.load = function(url){ - var deferred = new RSVP.defer(); - var loaded; - - // Switch to the required layout method for the settings - this.layoutMethod = this.determineLayout(this.layoutSettings); - this.layout = new EPUBJS.Layout[this.layoutMethod](); - - this.visible(false); - - render = this.render.load(url); - - render.then(function(contents) { - var formated; - this.currentChapter.setDocument(this.render.document); - this.contents = contents; - this.doc = this.render.document; - - // Format the contents using the current layout method - this.formated = this.layout.format(contents, this.render.width, this.render.height, this.gap); - this.render.setPageDimensions(this.formated.pageWidth, this.formated.pageHeight); - - // window.addEventListener("orientationchange", this.onResized.bind(this), false); - if(!this.initWidth && !this.initHeight){ - this.render.window.addEventListener("resize", this.resized, false); - } - - this.addEventListeners(); - this.addSelectionListeners(); - - //-- Trigger registered hooks before displaying - this.beforeDisplay(function(){ - var pages = this.layout.calculatePages(); - var msg = this.currentChapter; - var queued = this._q.length(); - this._moving = false; - - this.updatePages(pages); - - this.visibleRangeCfi = this.getVisibleRangeCfi(); - this.currentLocationCfi = this.visibleRangeCfi.start; - - if(queued === 0) { - this.trigger("renderer:locationChanged", this.currentLocationCfi); - this.trigger("renderer:visibleRangeChanged", this.visibleRangeCfi); - } - - msg.cfi = this.currentLocationCfi; //TODO: why is this cfi passed to chapterDisplayed - this.trigger("renderer:chapterDisplayed", msg); - - this.visible(true); - - deferred.resolve(this); //-- why does this return the renderer? - }.bind(this)); - - }.bind(this)); - - return deferred.promise; -}; - -EPUBJS.Renderer.prototype.loaded = function(url){ - this.trigger("render:loaded", url); - // var uri = EPUBJS.core.uri(url); - // var relative = uri.path.replace(book.bookUrl, ''); - // console.log(url, uri, relative); -}; - -/** -* Reconciles the current chapters layout properies with -* the global layout properities. -* Takes: global layout settings object, chapter properties string -* Returns: Object with layout properties -*/ -EPUBJS.Renderer.prototype.reconcileLayoutSettings = function(global, chapter){ - var settings = {}; - - //-- Get the global defaults - for (var attr in global) { - if (global.hasOwnProperty(attr)){ - settings[attr] = global[attr]; - } - } - //-- Get the chapter's display type - chapter.forEach(function(prop){ - var rendition = prop.replace("rendition:", ''); - var split = rendition.indexOf("-"); - var property, value; - - if(split != -1){ - property = rendition.slice(0, split); - value = rendition.slice(split+1); - - settings[property] = value; - } - }); - return settings; -}; - -/** -* Uses the settings to determine which Layout Method is needed -* Triggers events based on the method choosen -* Takes: Layout settings object -* Returns: String of appropriate for EPUBJS.Layout function -*/ -EPUBJS.Renderer.prototype.determineLayout = function(settings){ - // Default is layout: reflowable & spread: auto - var spreads = this.determineSpreads(this.minSpreadWidth); - var layoutMethod = spreads ? "ReflowableSpreads" : "Reflowable"; - var scroll = false; - - if(settings.layout === "pre-paginated") { - layoutMethod = "Fixed"; - scroll = true; - spreads = false; - } - - if(settings.layout === "reflowable" && settings.spread === "none") { - layoutMethod = "Reflowable"; - scroll = false; - spreads = false; - } - - if(settings.layout === "reflowable" && settings.spread === "both") { - layoutMethod = "ReflowableSpreads"; - scroll = false; - spreads = true; - } - - this.spreads = spreads; - this.render.scroll(scroll); - this.trigger("renderer:spreads", spreads); - return layoutMethod; -}; - -// Shortcut to trigger the hook before displaying the chapter -EPUBJS.Renderer.prototype.beforeDisplay = function(callback, renderer){ - this.triggerHooks("beforeChapterDisplay", callback, this); -}; - -// Update the renderer with the information passed by the layout -EPUBJS.Renderer.prototype.updatePages = function(layout){ - this.pageMap = this.mapPage(); - // this.displayedPages = layout.displayedPages; - - if (this.spreads) { - this.displayedPages = Math.ceil(this.pageMap.length / 2); - } else { - this.displayedPages = this.pageMap.length; - } - - // this.currentChapter.pages = layout.pageCount; - this.currentChapter.pages = this.pageMap.length; - - this._q.flush(); -}; - -// Apply the layout again and jump back to the previous cfi position -EPUBJS.Renderer.prototype.reformat = function(){ - var renderer = this; - var formated, pages; - if(!this.contents) return; - - spreads = this.determineSpreads(this.minSpreadWidth); - // Only re-layout if the spreads have switched - if(spreads != this.spreads){ - this.spreads = spreads; - this.layoutMethod = this.determineLayout(this.layoutSettings); - this.layout = new EPUBJS.Layout[this.layoutMethod](); - } - - this.formated = this.layout.format(this.contents, this.render.width, this.render.height, this.gap); - this.render.setPageDimensions(this.formated.pageWidth, this.formated.pageHeight); - - pages = renderer.layout.calculatePages(); - renderer.updatePages(pages); - - // Give the css styles time to update - clearTimeout(this.timeoutTillCfi); - this.timeoutTillCfi = setTimeout(function(){ - //-- Go to current page after formating - if(renderer.currentLocationCfi){ - renderer.gotoCfi(renderer.currentLocationCfi); - } - this.timeoutTillCfi = null; - }, 10); - -}; - -// Hide and show the render's container . -EPUBJS.Renderer.prototype.visible = function(bool){ - if(typeof(bool) === "undefined") { - return this.element.style.visibility; - } - - if(bool === true && !this.hidden){ - this.element.style.visibility = "visible"; - }else if(bool === false){ - this.element.style.visibility = "hidden"; - } -}; - -// Remove the render element and clean up listeners -EPUBJS.Renderer.prototype.remove = function() { - if(this.render.window) { - this.render.unload(); - this.render.window.removeEventListener("resize", this.resized); - this.removeEventListeners(); - this.removeSelectionListeners(); - } - - this.container.removeChild(this.element); -}; - -//-- STYLES - -EPUBJS.Renderer.prototype.applyStyles = function(styles) { - for (var style in styles) { - this.render.setStyle(style, styles[style]); - } -}; - -EPUBJS.Renderer.prototype.setStyle = function(style, val, prefixed){ - this.render.setStyle(style, val, prefixed); -}; - -EPUBJS.Renderer.prototype.removeStyle = function(style){ - this.render.removeStyle(style); -}; - -//-- HEAD TAGS -EPUBJS.Renderer.prototype.applyHeadTags = function(headTags) { - for ( var headTag in headTags ) { - this.render.addHeadTag(headTag, headTags[headTag]); - } -}; - -//-- NAVIGATION - -EPUBJS.Renderer.prototype.page = function(pg){ - if(!this.pageMap) { - console.warn("pageMap not set, queuing"); - this._q.enqueue("page", arguments); - return true; - } - - if(pg >= 1 && pg <= this.displayedPages){ - this.chapterPos = pg; - - this.render.page(pg); - this.visibleRangeCfi = this.getVisibleRangeCfi(); - this.currentLocationCfi = this.visibleRangeCfi.start; - this.trigger("renderer:locationChanged", this.currentLocationCfi); - this.trigger("renderer:visibleRangeChanged", this.visibleRangeCfi); - - return true; - } - //-- Return false if page is greater than the total - return false; -}; - -// Short cut to find next page's cfi starting at the last visible element -/* -EPUBJS.Renderer.prototype.nextPage = function(){ - var pg = this.chapterPos + 1; - if(pg <= this.displayedPages){ - this.chapterPos = pg; - - this.render.page(pg); - - this.currentLocationCfi = this.getPageCfi(this.visibileEl); - this.trigger("renderer:locationChanged", this.currentLocationCfi); - - return true; - } - //-- Return false if page is greater than the total - return false; -}; -*/ -EPUBJS.Renderer.prototype.nextPage = function(){ - return this.page(this.chapterPos + 1); -}; - -EPUBJS.Renderer.prototype.prevPage = function(){ - return this.page(this.chapterPos - 1); -}; - -//-- Show the page containing an Element -EPUBJS.Renderer.prototype.pageByElement = function(el){ - var pg; - if(!el) return; - - pg = this.render.getPageNumberByElement(el); - this.page(pg); -}; - -// Jump to the last page of the chapter -EPUBJS.Renderer.prototype.lastPage = function(){ - if(this._moving) { - return this._q.enqueue("lastPage", arguments); - } - - this.page(this.displayedPages); -}; - -// Jump to the first page of the chapter -EPUBJS.Renderer.prototype.firstPage = function(){ - this.page(1); -}; - -//-- Find a section by fragement id -EPUBJS.Renderer.prototype.section = function(fragment){ - var el = this.doc.getElementById(fragment), - left, pg; - - if(el){ - this.pageByElement(el); - } - -}; - -EPUBJS.Renderer.prototype.firstElementisTextNode = function(node) { - var children = node.childNodes; - var leng = children.length; - - if(leng && - children[0] && // First Child - children[0].nodeType === 3 && // This is a textNodes - children[0].textContent.trim().length) { // With non whitespace or return charecters - return true; - } - return false; -}; - -// Walk the node tree from a start element to next visible element -EPUBJS.Renderer.prototype.walk = function(node, x, y) { - var r, children, leng, - startNode = node, - prevNode, - stack = [startNode]; - - var STOP = 10000, ITER=0; - - while(!r && stack.length) { - node = stack.shift(); - if( this.containsPoint(node, x, y) && this.firstElementisTextNode(node)) { - r = node; - } - - if(!r && node && node.childElementCount > 0){ - children = node.children; - if (children && children.length) { - leng = children.length ? children.length : 0; - } else { - return r; - } - for (var i = leng-1; i >= 0; i--) { - if(children[i] != prevNode) stack.unshift(children[i]); - } - } - - if(!r && stack.length === 0 && startNode && startNode.parentNode !== null){ - stack.push(startNode.parentNode); - prevNode = startNode; - startNode = startNode.parentNode; - } - - - ITER++; - if(ITER > STOP) { - console.error("ENDLESS LOOP"); - break; - } - - } - - return r; -}; - -// Checks if an element is on the screen -EPUBJS.Renderer.prototype.containsPoint = function(el, x, y){ - var rect; - var left; - if(el && typeof el.getBoundingClientRect === 'function'){ - rect = el.getBoundingClientRect(); - // console.log(el, rect, x, y); - - if( rect.width !== 0 && - rect.height !== 0 && // Element not visible - rect.left >= x && - x <= rect.left + rect.width) { - return true; - } - } - - return false; -}; - -EPUBJS.Renderer.prototype.textSprint = function(root, func) { - var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_TEXT, { - acceptNode: function (node) { - if ( ! /^\s*$/.test(node.data) ) { - return NodeFilter.FILTER_ACCEPT; - } else { - return NodeFilter.FILTER_REJECT; - } - } - }, false); - var node; - while ((node = treeWalker.nextNode())) { - func(node); - } - -}; - -EPUBJS.Renderer.prototype.sprint = function(root, func) { - var treeWalker = document.createTreeWalker(root, NodeFilter.SHOW_ELEMENT, null, false); - var node; - while ((node = treeWalker.nextNode())) { - func(node); - } - -}; - -EPUBJS.Renderer.prototype.mapPage = function(){ - var renderer = this; - var map = [{ start: null, end: null }]; - var root = this.render.getBaseElement(); - var page = 1; - var width = this.layout.colWidth + this.layout.gap; - var offset = this.formated.pageWidth * (this.chapterPos-1); - var limit = (width * page) - offset;// (width * page) - offset; - var elLimit = 0; - var prevRange; - var cfi; - var check = function(node) { - var elPos; - var elRange; - var children = Array.prototype.slice.call(node.childNodes); - if (node.nodeType == Node.ELEMENT_NODE) { - // elPos = node.getBoundingClientRect(); - elRange = document.createRange(); - elRange.selectNodeContents(node); - elPos = elRange.getBoundingClientRect(); - - if(!elPos || (elPos.width === 0 && elPos.height === 0)) { - return; - } - - //-- Element starts new Col - if(elPos.left > elLimit) { - children.forEach(function(node){ - if(node.nodeType == Node.TEXT_NODE && - node.textContent.trim().length) { - checkText(node); - } - }); - } - - //-- Element Spans new Col - if(elPos.right > elLimit) { - children.forEach(function(node){ - if(node.nodeType == Node.TEXT_NODE && - node.textContent.trim().length) { - checkText(node); - } - }); - } - } - - }; - var checkText = function(node){ - var ranges = renderer.splitTextNodeIntoWordsRanges(node); - ranges.forEach(function(range){ - var pos = range.getBoundingClientRect(); - - if(!pos || (pos.width === 0 && pos.height === 0)) { - return; - } - - if(pos.left + pos.width < limit) { - if(!map[page-1].start){ - range.collapse(true); - cfi = renderer.currentChapter.cfiFromRange(range); - map[page-1].start = cfi; - } - } else { - if(prevRange){ - prevRange.collapse(true); - cfi = renderer.currentChapter.cfiFromRange(prevRange); - map[page-1].end = cfi; - } - - range.collapse(true); - cfi = renderer.currentChapter.cfiFromRange(range); - map.push({ - start: cfi, - end: null - }); - - page += 1; - limit = (width * page) - offset; - elLimit = limit; - } - - prevRange = range; - }); - - - }; - - this.sprint(root, check); - // this.textSprint(root, checkText); - - if(prevRange){ - prevRange.collapse(true); - - cfi = renderer.currentChapter.cfiFromRange(prevRange); - map[page-1].end = cfi; - } - - // Handle empty map - if(map.length === 1 && !map[0].start) { - range = this.doc.createRange(); - range.selectNodeContents(root); - range.collapse(true); - - cfi = renderer.currentChapter.cfiFromRange(range); - map[0].start = cfi; - map[0].end = cfi; - } - - // clean up - prevRange = null; - ranges = null; - range = null; - root = null; - - return map; -}; - - -EPUBJS.Renderer.prototype.splitTextNodeIntoWordsRanges = function(node){ - var ranges = []; - var text = node.textContent.trim(); - var range; - var rect; - var list; - pos = text.indexOf(" "); - - if(pos === -1) { - range = this.doc.createRange(); - range.selectNodeContents(node); - return [range]; - } - - range = this.doc.createRange(); - range.setStart(node, 0); - range.setEnd(node, pos); - ranges.push(range); - range = false; - - while ( pos != -1 ) { - - pos = text.indexOf(" ", pos + 1); - if(pos > 0) { - - if(range) { - range.setEnd(node, pos); - ranges.push(range); - } - - range = this.doc.createRange(); - range.setStart(node, pos+1); - } - } - - if(range) { - range.setEnd(node, text.length); - ranges.push(range); - } - - return ranges; -}; - -EPUBJS.Renderer.prototype.rangePosition = function(range){ - var rect; - var list; - - list = range.getClientRects(); - - if(list.length) { - rect = list[0]; - return rect; - } - - return null; -}; - -/* -// Get the cfi of the current page -EPUBJS.Renderer.prototype.getPageCfi = function(prevEl){ - var range = this.doc.createRange(); - var position; - // TODO : this might need to take margin / padding into account? - var x = 1;//this.formated.pageWidth/2; - var y = 1;//;this.formated.pageHeight/2; - - range = this.getRange(x, y); - - // var test = this.doc.defaultView.getSelection(); - // var r = this.doc.createRange(); - // test.removeAllRanges(); - // r.setStart(range.startContainer, range.startOffset); - // r.setEnd(range.startContainer, range.startOffset + 1); - // test.addRange(r); - - return this.currentChapter.cfiFromRange(range); -}; -*/ - -// Get the cfi of the current page -EPUBJS.Renderer.prototype.getPageCfi = function(){ - var pg; - if (this.spreads) { - pg = this.chapterPos*2; - startRange = this.pageMap[pg-2]; - } else { - pg = this.chapterPos; - startRange = this.pageMap[pg-1]; - } - return this.pageMap[(this.chapterPos * 2) -1].start; -}; - -EPUBJS.Renderer.prototype.getRange = function(x, y, forceElement){ - var range = this.doc.createRange(); - var position; - forceElement = true; // temp override - if(typeof document.caretPositionFromPoint !== "undefined" && !forceElement){ - position = this.doc.caretPositionFromPoint(x, y); - range.setStart(position.offsetNode, position.offset); - } else if(typeof document.caretRangeFromPoint !== "undefined" && !forceElement){ - range = this.doc.caretRangeFromPoint(x, y); - } else { - this.visibileEl = this.findElementAfter(x, y); - range.setStart(this.visibileEl, 1); - } - - // var test = this.doc.defaultView.getSelection(); - // var r = this.doc.createRange(); - // test.removeAllRanges(); - // r.setStart(range.startContainer, range.startOffset); - // r.setEnd(range.startContainer, range.startOffset + 1); - // test.addRange(r); - return range; -}; - -/* -EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(prevEl){ - var startX = 0; - var startY = 0; - var endX = this.width-1; - var endY = this.height-1; - var startRange = this.getRange(startX, startY); - var endRange = this.getRange(endX, endY); //fix if carret not avail - var startCfi = this.currentChapter.cfiFromRange(startRange); - var endCfi; - if(endRange) { - endCfi = this.currentChapter.cfiFromRange(endRange); - } - - return { - start: startCfi, - end: endCfi || false - }; -}; -*/ - -EPUBJS.Renderer.prototype.pagesInCurrentChapter = function() { - var pgs; - var length; - - if(!this.pageMap) { - console.warn("page map not loaded"); - return false; - } - - length = this.pageMap.length; - - if(this.spreads){ - pgs = Math.ceil(length / 2); - } else { - pgs = length; - } - - return pgs; -}; - -EPUBJS.Renderer.prototype.currentRenderedPage = function(){ - var pg; - - if(!this.pageMap) { - console.warn("page map not loaded"); - return false; - } - - if (this.spreads && this.layout.pageCount > 1) { - pg = this.chapterPos*2; - } else { - pg = this.chapterPos; - } - - return pg; -}; - -EPUBJS.Renderer.prototype.getRenderedPagesLeft = function(){ - var pg; - var lastPage; - var pagesLeft; - - if(!this.pageMap) { - console.warn("page map not loaded"); - return false; - } - - lastPage = this.pageMap.length; - - if (this.spreads) { - pg = this.chapterPos*2; - } else { - pg = this.chapterPos; - } - - pagesLeft = lastPage - pg; - return pagesLeft; - -}; - -EPUBJS.Renderer.prototype.getVisibleRangeCfi = function(){ - var pg; - var startRange, endRange; - - if(!this.pageMap) { - console.warn("page map not loaded"); - return false; - } - - if (this.spreads) { - pg = this.chapterPos*2; - startRange = this.pageMap[pg-2]; - endRange = startRange; - - if(this.layout.pageCount > 1) { - endRange = this.pageMap[pg-1]; - } - } else { - pg = this.chapterPos; - startRange = this.pageMap[pg-1]; - endRange = startRange; - } - - if(!startRange) { - console.warn("page range miss:", pg, this.pageMap); - startRange = this.pageMap[this.pageMap.length-1]; - endRange = startRange; - } - - return { - start: startRange.start, - end: endRange.end - }; -}; - -// Goto a cfi position in the current chapter -EPUBJS.Renderer.prototype.gotoCfi = function(cfi){ - var pg; - var marker; - var range; - - if(this._moving){ - return this._q.enqueue("gotoCfi", arguments); - } - - if(_.isString(cfi)){ - cfi = this.epubcfi.parse(cfi); - } - - if(typeof document.evaluate === 'undefined') { - marker = this.epubcfi.addMarker(cfi, this.doc); - if(marker) { - pg = this.render.getPageNumberByElement(marker); - // Must Clean up Marker before going to page - this.epubcfi.removeMarker(marker, this.doc); - this.page(pg); - } - } else { - range = this.epubcfi.generateRangeFromCfi(cfi, this.doc); - if(range) { - pg = this.render.getPageNumberByRect(range.getBoundingClientRect()); - this.page(pg); - } - } -}; - -// Walk nodes until a visible element is found -EPUBJS.Renderer.prototype.findFirstVisible = function(startEl){ - var el = startEl || this.render.getBaseElement(); - var found; - found = this.walk(el); - - if(found) { - return found; - }else{ - return startEl; - } - -}; -// TODO: remove me - unsused -EPUBJS.Renderer.prototype.findElementAfter = function(x, y, startEl){ - var el = startEl || this.render.getBaseElement(); - var found; - found = this.walk(el, x, y); - if(found) { - return found; - }else{ - return el; - } - -}; - -/* -EPUBJS.Renderer.prototype.route = function(hash, callback){ - var location = window.location.hash.replace('#/', ''); - if(this.useHash && location.length && location != this.prevLocation){ - this.show(location, callback); - this.prevLocation = location; - return true; - } - return false; -} - -EPUBJS.Renderer.prototype.hideHashChanges = function(){ - this.useHash = false; -} - -*/ - -EPUBJS.Renderer.prototype.resize = function(width, height, setSize){ - var spreads; - - this.width = width; - this.height = height; - - if(setSize !== false) { - this.render.resize(this.width, this.height); - } - - - - if(this.contents){ - this.reformat(); - } - - this.trigger("renderer:resized", { - width: this.width, - height: this.height - }); -}; - -//-- Listeners for events in the frame - -EPUBJS.Renderer.prototype.onResized = function(e) { - var width = this.container.clientWidth; - var height = this.container.clientHeight; - - this.resize(width, height, false); -}; - -EPUBJS.Renderer.prototype.addEventListeners = function(){ - if(!this.render.document) { - return; - } - this.listenedEvents.forEach(function(eventName){ - this.render.document.addEventListener(eventName, this.triggerEvent.bind(this), false); - }, this); - -}; - -EPUBJS.Renderer.prototype.removeEventListeners = function(){ - if(!this.render.document) { - return; - } - this.listenedEvents.forEach(function(eventName){ - this.render.document.removeEventListener(eventName, this.triggerEvent, false); - }, this); - -}; - -// Pass browser events -EPUBJS.Renderer.prototype.triggerEvent = function(e){ - this.trigger("renderer:"+e.type, e); -}; - -EPUBJS.Renderer.prototype.addSelectionListeners = function(){ - this.render.document.addEventListener("selectionchange", this.onSelectionChange.bind(this), false); -}; - -EPUBJS.Renderer.prototype.removeSelectionListeners = function(){ - if(!this.render.document) { - return; - } - this.doc.removeEventListener("selectionchange", this.onSelectionChange, false); -}; - -EPUBJS.Renderer.prototype.onSelectionChange = function(e){ - if (this.selectionEndTimeout) { - clearTimeout(this.selectionEndTimeout); - } - this.selectionEndTimeout = setTimeout(function() { - this.selectedRange = this.render.window.getSelection(); - this.trigger("renderer:selected", this.selectedRange); - }.bind(this), 500); -}; - - -//-- Spreads - -EPUBJS.Renderer.prototype.setMinSpreadWidth = function(width){ - this.minSpreadWidth = width; - this.spreads = this.determineSpreads(width); -}; - -EPUBJS.Renderer.prototype.determineSpreads = function(cutoff){ - if(this.isForcedSingle || !cutoff || this.width < cutoff) { - return false; //-- Single Page - }else{ - return true; //-- Double Page - } -}; - -EPUBJS.Renderer.prototype.forceSingle = function(bool){ - if(bool) { - this.isForcedSingle = true; - // this.spreads = false; - } else { - this.isForcedSingle = false; - // this.spreads = this.determineSpreads(this.minSpreadWidth); - } -}; - -EPUBJS.Renderer.prototype.setGap = function(gap){ - this.gap = gap; //-- False == auto gap -}; - -//-- Content Replacements - -EPUBJS.Renderer.prototype.replace = function(query, func, finished, progress){ - var items = this.contents.querySelectorAll(query), - resources = Array.prototype.slice.call(items), - count = resources.length; - - - if(count === 0) { - finished(false); - return; - } - resources.forEach(function(item){ - var called = false; - var after = function(result, full){ - if(called === false) { - count--; - if(progress) progress(result, full, count); - if(count <= 0 && finished) finished(true); - called = true; - } - }; - - func(item, after); - - }.bind(this)); - -}; - -EPUBJS.Renderer.prototype.replaceWithStored = function(query, attr, func, callback) { - var _oldUrls, - _newUrls = {}, - _store = this.currentChapter.store, - _cache = this.caches[query], - _uri = EPUBJS.core.uri(this.currentChapter.absolute), - _chapterBase = _uri.base, - _attr = attr, - _wait = 2000, - progress = function(url, full, count) { - _newUrls[full] = url; - }, - finished = function(notempty) { - if(callback) callback(); - - _.each(_oldUrls, function(url){ - _store.revokeUrl(url); - }); - - _cache = _newUrls; - }; - - if(!_store) return; - - if(!_cache) _cache = {}; - _oldUrls = _.clone(_cache); - - this.replace(query, function(link, done){ - var src = link.getAttribute(_attr), - full = EPUBJS.core.resolveUrl(_chapterBase, src); - - var replaceUrl = function(url) { - var timeout; - link.onload = function(){ - clearTimeout(timeout); - done(url, full); - }; - - link.onerror = function(e){ - clearTimeout(timeout); - done(url, full); - console.error(e); - }; - - if(query == "image") { - //-- SVG needs this to trigger a load event - link.setAttribute("externalResourcesRequired", "true"); - } - - if(query == "link[href]" && link.getAttribute("rel") !== "stylesheet") { - //-- Only Stylesheet links seem to have a load events, just continue others - done(url, full); - } - - link.setAttribute(_attr, url); - - //-- If elements never fire Load Event, should continue anyways - timeout = setTimeout(function(){ - done(url, full); - }, _wait); - - }; - - if(full in _oldUrls){ - replaceUrl(_oldUrls[full]); - _newUrls[full] = _oldUrls[full]; - delete _oldUrls[full]; - }else{ - func(_store, full, replaceUrl, link); - } - - }, finished, progress); -}; - -//-- Enable binding events to Renderer -RSVP.EventTarget.mixin(EPUBJS.Renderer.prototype); - -var EPUBJS = EPUBJS || {}; -EPUBJS.replace = {}; - -//-- Replaces the relative links within the book to use our internal page changer -EPUBJS.replace.hrefs = function(callback, renderer){ - var book = this; - var replacments = function(link, done){ - var href = link.getAttribute("href"), - isRelative = href.search("://"), - directory, - relative; - - if(isRelative != -1){ - - link.setAttribute("target", "_blank"); - - }else{ - - directory = EPUBJS.core.uri(renderer.render.window.location.href).directory; - relative = EPUBJS.core.resolveUrl(directory, href); - - link.onclick = function(){ - book.goto(relative); - return false; - }; - - } - done(); - - }; - - renderer.replace("a[href]", replacments, callback); - -}; - -EPUBJS.replace.head = function(callback, renderer) { - - renderer.replaceWithStored("link[href]", "href", EPUBJS.replace.links, callback); - -}; - - -//-- Replaces assets src's to point to stored version if browser is offline -EPUBJS.replace.resources = function(callback, renderer){ - //srcs = this.doc.querySelectorAll('[src]'); - renderer.replaceWithStored("[src]", "src", EPUBJS.replace.srcs, callback); - -}; - -EPUBJS.replace.svg = function(callback, renderer) { - - renderer.replaceWithStored("image", "xlink:href", function(_store, full, done){ - _store.getUrl(full).then(done); - }, callback); - -}; - -EPUBJS.replace.srcs = function(_store, full, done){ - - _store.getUrl(full).then(done); - -}; - -//-- Replaces links in head, such as stylesheets - link[href] -EPUBJS.replace.links = function(_store, full, done, link){ - //-- Handle replacing urls in CSS - if(link.getAttribute("rel") === "stylesheet") { - EPUBJS.replace.stylesheets(_store, full).then(function(url, full){ - // done - setTimeout(function(){ - done(url, full); - }, 5); //-- Allow for css to apply before displaying chapter - }); - }else{ - _store.getUrl(full).then(done); - } -}; - -EPUBJS.replace.stylesheets = function(_store, full) { - var deferred = new RSVP.defer(); - - if(!_store) return; - - _store.getText(full).then(function(text){ - var url; - - EPUBJS.replace.cssUrls(_store, full, text).then(function(newText){ - var _URL = window.URL || window.webkitURL || window.mozURL; - - var blob = new Blob([newText], { "type" : "text\/css" }), - url = _URL.createObjectURL(blob); - - deferred.resolve(url); - - }, function(e) { - console.error(e); - }); - - }); - - return deferred.promise; -}; - -EPUBJS.replace.cssUrls = function(_store, base, text){ - var deferred = new RSVP.defer(), - promises = [], - matches = text.match(/url\(\'?\"?([^\'|^\"^\)]*)\'?\"?\)/g); - - if(!_store) return; - - if(!matches){ - deferred.resolve(text); - return deferred.promise; - } - - matches.forEach(function(str){ - var full = EPUBJS.core.resolveUrl(base, str.replace(/url\(|[|\)|\'|\"]/g, '')); - var replaced = _store.getUrl(full).then(function(url){ - text = text.replace(str, 'url("'+url+'")'); - }); - - promises.push(replaced); - }); - - RSVP.all(promises).then(function(){ - deferred.resolve(text); - }); - - return deferred.promise; -}; - -EPUBJS.Unarchiver = function(url){ - - this.libPath = EPUBJS.filePath; - this.zipUrl = url; - this.loadLib(); - this.urlCache = {}; - - this.zipFs = new zip.fs.FS(); - - return this.promise; - -}; - -//-- Load the zip lib and set the workerScriptsPath -EPUBJS.Unarchiver.prototype.loadLib = function(callback){ - if(typeof(zip) == "undefined") console.error("Zip lib not loaded"); - - /* - //-- load script - EPUBJS.core.loadScript(this.libPath+"zip.js", function(){ - //-- Tell zip where it is located - zip.workerScriptsPath = this.libPath; - callback(); - }.bind(this)); - */ - // console.log(this.libPath) - zip.workerScriptsPath = this.libPath; -}; - -EPUBJS.Unarchiver.prototype.openZip = function(zipUrl, callback){ - var deferred = new RSVP.defer(); - var zipFs = this.zipFs; - zipFs.importHttpContent(zipUrl, false, function() { - deferred.resolve(zipFs); - }, this.failed); - - return deferred.promise; -}; - -EPUBJS.Unarchiver.prototype.getXml = function(url, encoding){ - - return this.getText(url, encoding). - then(function(text){ - var parser = new DOMParser(); - return parser.parseFromString(text, "application/xml"); - }); - -}; - -EPUBJS.Unarchiver.prototype.getUrl = function(url, mime){ - var unarchiver = this; - var deferred = new RSVP.defer(); - var decodededUrl = window.decodeURIComponent(url); - var entry = this.zipFs.find(decodededUrl); - var _URL = window.URL || window.webkitURL || window.mozURL; - - if(!entry) { - deferred.reject({ - message : "File not found in the epub: " + url, - stack : new Error().stack - }); - return deferred.promise; - } - - if(url in this.urlCache) { - deferred.resolve(this.urlCache[url]); - return deferred.promise; - } - - entry.getBlob(mime || zip.getMimeType(entry.name), function(blob){ - var tempUrl = _URL.createObjectURL(blob); - deferred.resolve(tempUrl); - unarchiver.urlCache[url] = tempUrl; - }); - - return deferred.promise; -}; - -EPUBJS.Unarchiver.prototype.getText = function(url, encoding){ - var unarchiver = this; - var deferred = new RSVP.defer(); - var decodededUrl = window.decodeURIComponent(url); - var entry = this.zipFs.find(decodededUrl); - var _URL = window.URL || window.webkitURL || window.mozURL; - - if(!entry) { - console.warn("File not found in the contained epub:", url); - return deferred.promise; - } - - entry.getText(function(text){ - deferred.resolve(text); - }, null, null, encoding || 'UTF-8'); - - return deferred.promise; -}; - -EPUBJS.Unarchiver.prototype.revokeUrl = function(url){ - var _URL = window.URL || window.webkitURL || window.mozURL; - var fromCache = unarchiver.urlCache[url]; - if(fromCache) _URL.revokeObjectURL(fromCache); -}; - -EPUBJS.Unarchiver.prototype.failed = function(error){ - console.error(error); -}; - -EPUBJS.Unarchiver.prototype.afterSaved = function(error){ - this.callback(); -}; - -EPUBJS.Unarchiver.prototype.toStorage = function(entries){ - var timeout = 0, - delay = 20, - that = this, - count = entries.length; - - function callback(){ - count--; - if(count === 0) that.afterSaved(); - } - - entries.forEach(function(entry){ - - setTimeout(function(entry){ - that.saveEntryFileToStorage(entry, callback); - }, timeout, entry); - - timeout += delay; - }); - - console.log("time", timeout); - - //entries.forEach(this.saveEntryFileToStorage.bind(this)); -}; - -EPUBJS.Unarchiver.prototype.saveEntryFileToStorage = function(entry, callback){ - var that = this; - entry.getData(new zip.BlobWriter(), function(blob) { - EPUBJS.storage.save(entry.filename, blob, callback); - }); -}; - -//# sourceMappingURL=epub.js.map \ No newline at end of file diff --git a/reader/js/hooks.js.map b/reader/js/hooks.js.map deleted file mode 100644 index 122e1b0e4..000000000 --- a/reader/js/hooks.js.map +++ /dev/null @@ -1,17 +0,0 @@ -{ - "version": 3, - "file": "reader.js", - "sources": [ - "reader_src/reader.js", - "reader_src/controllers/bookmarks_controller.js", - "reader_src/controllers/controls_controller.js", - "reader_src/controllers/meta_controller.js", - "reader_src/controllers/notes_controller.js", - "reader_src/controllers/reader_controller.js", - "reader_src/controllers/settings_controller.js", - "reader_src/controllers/sidebar_controller.js", - "reader_src/controllers/toc_controller.js" - ], - "names": [], - "mappings": "AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gD;ACjUA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;AClEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;AChHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACbA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;AC9RA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACxHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,E;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA" -} \ No newline at end of file diff --git a/reader/js/hooks.min.js b/reader/js/hooks.min.js deleted file mode 100644 index 33049a99d..000000000 --- a/reader/js/hooks.min.js +++ /dev/null @@ -1,2 +0,0 @@ -EPUBJS.Hooks.register("beforeChapterDisplay").endnotes=function(a,b){var c=b.contents.querySelectorAll("a[href]"),d=Array.prototype.slice.call(c),e="epub:type",f="noteref",g=EPUBJS.core.folder(location.pathname),h=g+EPUBJS.cssPath||g,i={};EPUBJS.core.addCss(h+"popup.css",!1,b.render.document.head),d.forEach(function(a){function c(){var c,e,f=b.height,j=b.width,p=225;o||(c=l.cloneNode(!0),o=c.querySelector("p")),i[k]||(i[k]=document.createElement("div"),i[k].setAttribute("class","popup"),pop_content=document.createElement("div"),i[k].appendChild(pop_content),pop_content.appendChild(o),pop_content.setAttribute("class","pop_content"),b.render.document.body.appendChild(i[k]),i[k].addEventListener("mouseover",d,!1),i[k].addEventListener("mouseout",g,!1),b.on("renderer:pageChanged",h,this),b.on("renderer:pageChanged",g,this)),c=i[k],e=a.getBoundingClientRect(),m=e.left,n=e.top,c.classList.add("show"),popRect=c.getBoundingClientRect(),c.style.left=m-popRect.width/2+"px",c.style.top=n+"px",p>f/2.5&&(p=f/2.5,pop_content.style.maxHeight=p+"px"),popRect.height+n>=f-25?(c.style.top=n-popRect.height+"px",c.classList.add("above")):c.classList.remove("above"),m-popRect.width<=0?(c.style.left=m+"px",c.classList.add("left")):c.classList.remove("left"),m+popRect.width/2>=j?(c.style.left=m-300+"px",popRect=c.getBoundingClientRect(),c.style.left=m-popRect.width+"px",popRect.height+n>=f-25?(c.style.top=n-popRect.height+"px",c.classList.add("above")):c.classList.remove("above"),c.classList.add("right")):c.classList.remove("right")}function d(){i[k].classList.add("on")}function g(){i[k].classList.remove("on")}function h(){setTimeout(function(){i[k].classList.remove("show")},100)}var j,k,l,m,n,o,p=a.getAttribute(e);p==f&&(j=a.getAttribute("href"),k=j.replace("#",""),l=b.render.document.getElementById(k),a.addEventListener("mouseover",c,!1),a.addEventListener("mouseout",h,!1))}),a&&a()},EPUBJS.Hooks.register("beforeChapterDisplay").mathml=function(a,b){if(-1!==b.currentChapter.manifestProperties.indexOf("mathml")){b.iframe.contentWindow.mathmlCallback=a;var c=document.createElement("script");c.type="text/x-mathjax-config",c.innerHTML=' MathJax.Hub.Register.StartupHook("End",function () { window.mathmlCallback(); }); MathJax.Hub.Config({jax: ["input/TeX","input/MathML","output/SVG"],extensions: ["tex2jax.js","mml2jax.js","MathEvents.js"],TeX: {extensions: ["noErrors.js","noUndefined.js","autoload-all.js"]},MathMenu: {showRenderer: false},menuSettings: {zoom: "Click"},messageStyle: "none"}); ',b.doc.body.appendChild(c),EPUBJS.core.addScript("http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML",null,b.doc.head)}else a&&a()},EPUBJS.Hooks.register("beforeChapterDisplay").smartimages=function(a,b){var c=b.contents.querySelectorAll("img"),d=Array.prototype.slice.call(c),e=b.height;return"reflowable"!=b.layoutSettings.layout?void a():(d.forEach(function(a){function c(){var c,d=a.getBoundingClientRect(),f=d.height,g=d.top,h=a.getAttribute("data-height"),i=h||f,j=Number(getComputedStyle(a,"").fontSize.match(/(\d*(\.\d*)?)px/)[1]),k=j?j/2:0;e=b.contents.clientHeight,0>g&&(g=0),i+g>=e?(e/2>g?(c=e-g-k,a.style.maxHeight=c+"px",a.style.width="auto"):(i>e&&(a.style.maxHeight=e+"px",a.style.width="auto",d=a.getBoundingClientRect(),i=d.height),a.style.display="block",a.style.WebkitColumnBreakBefore="always",a.style.breakBefore="column"),a.setAttribute("data-height",c)):(a.style.removeProperty("max-height"),a.style.removeProperty("margin-top"))}a.addEventListener("load",c,!1),b.on("renderer:resized",c),b.on("renderer:chapterUnloaded",function(){a.removeEventListener("load",c),b.off("renderer:resized",c)}),c()}),void(a&&a()))},EPUBJS.Hooks.register("beforeChapterDisplay").transculsions=function(a,b){var c=b.contents.querySelectorAll("[transclusion]"),d=Array.prototype.slice.call(c);d.forEach(function(a){function c(){j=g,k=h,j>chapter.colWidth&&(d=chapter.colWidth/j,j=chapter.colWidth,k*=d),f.width=j,f.height=k}var d,e=a.getAttribute("ref"),f=document.createElement("iframe"),g=a.getAttribute("width"),h=a.getAttribute("height"),i=a.parentNode,j=g,k=h;c(),b.listenUntil("renderer:resized","renderer:chapterUnloaded",c),f.src=e,i.replaceChild(f,a)}),a&&a()}; -//# sourceMappingURL=hooks.min.map \ No newline at end of file diff --git a/reader/js/hooks/extensions/highlight.js b/reader/js/hooks/extensions/highlight.js deleted file mode 100644 index 1dd1c6714..000000000 --- a/reader/js/hooks/extensions/highlight.js +++ /dev/null @@ -1,14 +0,0 @@ -EPUBJS.Hooks.register("beforeChapterDisplay").highlight = function(callback, renderer){ - - // EPUBJS.core.addScript("js/libs/jquery.highlight.js", null, renderer.doc.head); - - var s = document.createElement("style"); - s.innerHTML =".highlight { background: yellow; font-weight: normal; }"; - - renderer.render.document.head.appendChild(s); - - if(callback) callback(); - -} - - diff --git a/reader/js/libs/fileStorage.min.js b/reader/js/libs/fileStorage.min.js deleted file mode 100644 index 6fc082b1c..000000000 --- a/reader/js/libs/fileStorage.min.js +++ /dev/null @@ -1,3 +0,0 @@ -/*! fileStorage - v0.1.0 - 2013-03-28 */var fileStorage = fileStorage || {}; -fileStorage.core=fileStorage.core||{},fileStorage.core.dataURLToBlob=function(e){var t=";base64,";if(e.indexOf(t)==-1){var n=e.split(","),r=n[0].split(":")[1],i=n[1];return new Blob([i],{type:r})}var n=e.split(t),r=n[0].split(":")[1],i=window.atob(n[1]),s=i.length,o=new Uint8Array(s);for(var u=0;u i) { - l = i; - } - m[0] = l; - - // Adjust last length count to fill out codes, if needed - for (y = 1 << j; j < i; j++, y <<= 1) { - if ((y -= c[j]) < 0) { - return Z_DATA_ERROR; - } - } - if ((y -= c[i]) < 0) { - return Z_DATA_ERROR; - } - c[i] += y; - - // Generate starting offsets into the value table for each length - x[1] = j = 0; - p = 1; - xp = 2; - while (--i !== 0) { // note that i == g from above - x[xp] = (j += c[p]); - xp++; - p++; - } - - // Make a table of values in order of bit lengths - i = 0; - p = 0; - do { - if ((j = b[bindex + p]) !== 0) { - v[x[j]++] = i; - } - p++; - } while (++i < n); - n = x[g]; // set n to length of v - - // Generate the Huffman codes and for each, make the table entries - x[0] = i = 0; // first Huffman code is zero - p = 0; // grab values in bit order - h = -1; // no tables yet--level -1 - w = -l; // bits decoded == (l * h) - u[0] = 0; // just to keep compilers happy - q = 0; // ditto - z = 0; // ditto - - // go through the bit lengths (k already is bits in shortest code) - for (; k <= g; k++) { - a = c[k]; - while (a-- !== 0) { - // here i is the Huffman code of length k bits for value *p - // make tables up to required level - while (k > w + l) { - h++; - w += l; // previous table always l bits - // compute minimum size table less than or equal to l bits - z = g - w; - z = (z > l) ? l : z; // table size upper limit - if ((f = 1 << (j = k - w)) > a + 1) { // try a k-w bit table - // too few codes for - // k-w bit table - f -= a + 1; // deduct codes from patterns left - xp = k; - if (j < z) { - while (++j < z) { // try smaller tables up to z bits - if ((f <<= 1) <= c[++xp]) - break; // enough codes to use up j bits - f -= c[xp]; // else deduct codes from patterns - } - } - } - z = 1 << j; // table entries for j-bit table - - // allocate new table - if (hn[0] + z > MANY) { // (note: doesn't matter for fixed) - return Z_DATA_ERROR; // overflow of MANY - } - u[h] = q = /* hp+ */hn[0]; // DEBUG - hn[0] += z; - - // connect to last table, if there is one - if (h !== 0) { - x[h] = i; // save pattern for backing up - r[0] = /* (byte) */j; // bits in this table - r[1] = /* (byte) */l; // bits to dump before this table - j = i >>> (w - l); - r[2] = /* (int) */(q - u[h - 1] - j); // offset to this table - hp.set(r, (u[h - 1] + j) * 3); - // to - // last - // table - } else { - t[0] = q; // first table is returned result - } - } - - // set up table entry in r - r[1] = /* (byte) */(k - w); - if (p >= n) { - r[0] = 128 + 64; // out of values--invalid code - } else if (v[p] < s) { - r[0] = /* (byte) */(v[p] < 256 ? 0 : 32 + 64); // 256 is - // end-of-block - r[2] = v[p++]; // simple code is just the value - } else { - r[0] = /* (byte) */(e[v[p] - s] + 16 + 64); // non-simple--look - // up in lists - r[2] = d[v[p++] - s]; - } - - // fill code-like entries with r - f = 1 << (k - w); - for (j = i >>> w; j < z; j += f) { - hp.set(r, (q + j) * 3); - } - - // backwards increment the k-bit code i - for (j = 1 << (k - 1); (i & j) !== 0; j >>>= 1) { - i ^= j; - } - i ^= j; - - // backup over finished tables - mask = (1 << w) - 1; // needed on HP, cc -O bug - while ((i & mask) != x[h]) { - h--; // don't need to update q - w -= l; - mask = (1 << w) - 1; - } - } - } - // Return Z_BUF_ERROR if we were given an incomplete table - return y !== 0 && g != 1 ? Z_BUF_ERROR : Z_OK; - } - - function initWorkArea(vsize) { - var i; - if (!hn) { - hn = []; // []; //new Array(1); - v = []; // new Array(vsize); - c = new Int32Array(BMAX + 1); // new Array(BMAX + 1); - r = []; // new Array(3); - u = new Int32Array(BMAX); // new Array(BMAX); - x = new Int32Array(BMAX + 1); // new Array(BMAX + 1); - } - if (v.length < vsize) { - v = []; // new Array(vsize); - } - for (i = 0; i < vsize; i++) { - v[i] = 0; - } - for (i = 0; i < BMAX + 1; i++) { - c[i] = 0; - } - for (i = 0; i < 3; i++) { - r[i] = 0; - } - // for(int i=0; i 257)) { - if (result == Z_DATA_ERROR) { - z.msg = "oversubscribed distance tree"; - } else if (result == Z_BUF_ERROR) { - z.msg = "incomplete distance tree"; - result = Z_DATA_ERROR; - } else if (result != Z_MEM_ERROR) { - z.msg = "empty distance tree with lengths"; - result = Z_DATA_ERROR; - } - return result; - } - - return Z_OK; - }; - - } - - InfTree.inflate_trees_fixed = function(bl, // literal desired/actual bit depth - bd, // distance desired/actual bit depth - tl,// literal/length tree result - td// distance tree result - ) { - bl[0] = fixed_bl; - bd[0] = fixed_bd; - tl[0] = fixed_tl; - td[0] = fixed_td; - return Z_OK; - }; - - // InfCodes - - // waiting for "i:"=input, - // "o:"=output, - // "x:"=nothing - var START = 0; // x: set up for LEN - var LEN = 1; // i: get length/literal/eob next - var LENEXT = 2; // i: getting length extra (have base) - var DIST = 3; // i: get distance next - var DISTEXT = 4;// i: getting distance extra - var COPY = 5; // o: copying bytes in window, waiting - // for space - var LIT = 6; // o: got literal, waiting for output - // space - var WASH = 7; // o: got eob, possibly still output - // waiting - var END = 8; // x: got eob and all data flushed - var BADCODE = 9;// x: got error - - function InfCodes() { - var that = this; - - var mode; // current inflate_codes mode - - // mode dependent information - var len = 0; - - var tree; // pointer into tree - var tree_index = 0; - var need = 0; // bits needed - - var lit = 0; - - // if EXT or COPY, where and how much - var get = 0; // bits to get for extra - var dist = 0; // distance back to copy from - - var lbits = 0; // ltree bits decoded per branch - var dbits = 0; // dtree bits decoder per branch - var ltree; // literal/length/eob tree - var ltree_index = 0; // literal/length/eob tree - var dtree; // distance tree - var dtree_index = 0; // distance tree - - // Called with number of bytes left to write in window at least 258 - // (the maximum string length) and number of input bytes available - // at least ten. The ten bytes are six bytes for the longest length/ - // distance pair plus four bytes for overloading the bit buffer. - - function inflate_fast(bl, bd, tl, tl_index, td, td_index, s, z) { - var t; // temporary pointer - var tp; // temporary pointer - var tp_index; // temporary pointer - var e; // extra bits or operation - var b; // bit buffer - var k; // bits in bit buffer - var p; // input data pointer - var n; // bytes available there - var q; // output window write pointer - var m; // bytes to end of window or read pointer - var ml; // mask for literal/length tree - var md; // mask for distance tree - var c; // bytes to copy - var d; // distance back to copy from - var r; // copy source pointer - - var tp_index_t_3; // (tp_index+t)*3 - - // load input, output, bit values - p = z.next_in_index; - n = z.avail_in; - b = s.bitb; - k = s.bitk; - q = s.write; - m = q < s.read ? s.read - q - 1 : s.end - q; - - // initialize masks - ml = inflate_mask[bl]; - md = inflate_mask[bd]; - - // do until not enough input or output space for fast loop - do { // assume called with m >= 258 && n >= 10 - // get literal/length code - while (k < (20)) { // max bits for literal/length code - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - t = b & ml; - tp = tl; - tp_index = tl_index; - tp_index_t_3 = (tp_index + t) * 3; - if ((e = tp[tp_index_t_3]) === 0) { - b >>= (tp[tp_index_t_3 + 1]); - k -= (tp[tp_index_t_3 + 1]); - - s.window[q++] = /* (byte) */tp[tp_index_t_3 + 2]; - m--; - continue; - } - do { - - b >>= (tp[tp_index_t_3 + 1]); - k -= (tp[tp_index_t_3 + 1]); - - if ((e & 16) !== 0) { - e &= 15; - c = tp[tp_index_t_3 + 2] + (/* (int) */b & inflate_mask[e]); - - b >>= e; - k -= e; - - // decode distance base of block to copy - while (k < (15)) { // max bits for distance code - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - t = b & md; - tp = td; - tp_index = td_index; - tp_index_t_3 = (tp_index + t) * 3; - e = tp[tp_index_t_3]; - - do { - - b >>= (tp[tp_index_t_3 + 1]); - k -= (tp[tp_index_t_3 + 1]); - - if ((e & 16) !== 0) { - // get extra bits to add to distance base - e &= 15; - while (k < (e)) { // get extra bits (up to 13) - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - d = tp[tp_index_t_3 + 2] + (b & inflate_mask[e]); - - b >>= (e); - k -= (e); - - // do the copy - m -= c; - if (q >= d) { // offset before dest - // just copy - r = q - d; - if (q - r > 0 && 2 > (q - r)) { - s.window[q++] = s.window[r++]; // minimum - // count is - // three, - s.window[q++] = s.window[r++]; // so unroll - // loop a - // little - c -= 2; - } else { - s.window.set(s.window.subarray(r, r + 2), q); - q += 2; - r += 2; - c -= 2; - } - } else { // else offset after destination - r = q - d; - do { - r += s.end; // force pointer in window - } while (r < 0); // covers invalid distances - e = s.end - r; - if (c > e) { // if source crosses, - c -= e; // wrapped copy - if (q - r > 0 && e > (q - r)) { - do { - s.window[q++] = s.window[r++]; - } while (--e !== 0); - } else { - s.window.set(s.window.subarray(r, r + e), q); - q += e; - r += e; - e = 0; - } - r = 0; // copy rest from start of window - } - - } - - // copy all or what's left - if (q - r > 0 && c > (q - r)) { - do { - s.window[q++] = s.window[r++]; - } while (--c !== 0); - } else { - s.window.set(s.window.subarray(r, r + c), q); - q += c; - r += c; - c = 0; - } - break; - } else if ((e & 64) === 0) { - t += tp[tp_index_t_3 + 2]; - t += (b & inflate_mask[e]); - tp_index_t_3 = (tp_index + t) * 3; - e = tp[tp_index_t_3]; - } else { - z.msg = "invalid distance code"; - - c = z.avail_in - n; - c = (k >> 3) < c ? k >> 3 : c; - n += c; - p -= c; - k -= c << 3; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - - return Z_DATA_ERROR; - } - } while (true); - break; - } - - if ((e & 64) === 0) { - t += tp[tp_index_t_3 + 2]; - t += (b & inflate_mask[e]); - tp_index_t_3 = (tp_index + t) * 3; - if ((e = tp[tp_index_t_3]) === 0) { - - b >>= (tp[tp_index_t_3 + 1]); - k -= (tp[tp_index_t_3 + 1]); - - s.window[q++] = /* (byte) */tp[tp_index_t_3 + 2]; - m--; - break; - } - } else if ((e & 32) !== 0) { - - c = z.avail_in - n; - c = (k >> 3) < c ? k >> 3 : c; - n += c; - p -= c; - k -= c << 3; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - - return Z_STREAM_END; - } else { - z.msg = "invalid literal/length code"; - - c = z.avail_in - n; - c = (k >> 3) < c ? k >> 3 : c; - n += c; - p -= c; - k -= c << 3; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - - return Z_DATA_ERROR; - } - } while (true); - } while (m >= 258 && n >= 10); - - // not enough input or output--restore pointers and return - c = z.avail_in - n; - c = (k >> 3) < c ? k >> 3 : c; - n += c; - p -= c; - k -= c << 3; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - - return Z_OK; - } - - that.init = function(bl, bd, tl, tl_index, td, td_index) { - mode = START; - lbits = /* (byte) */bl; - dbits = /* (byte) */bd; - ltree = tl; - ltree_index = tl_index; - dtree = td; - dtree_index = td_index; - tree = null; - }; - - that.proc = function(s, z, r) { - var j; // temporary storage - var tindex; // temporary pointer - var e; // extra bits or operation - var b = 0; // bit buffer - var k = 0; // bits in bit buffer - var p = 0; // input data pointer - var n; // bytes available there - var q; // output window write pointer - var m; // bytes to end of window or read pointer - var f; // pointer to copy strings from - - // copy input/output information to locals (UPDATE macro restores) - p = z.next_in_index; - n = z.avail_in; - b = s.bitb; - k = s.bitk; - q = s.write; - m = q < s.read ? s.read - q - 1 : s.end - q; - - // process input and output based on current state - while (true) { - switch (mode) { - // waiting for "i:"=input, "o:"=output, "x:"=nothing - case START: // x: set up for LEN - if (m >= 258 && n >= 10) { - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - r = inflate_fast(lbits, dbits, ltree, ltree_index, dtree, dtree_index, s, z); - - p = z.next_in_index; - n = z.avail_in; - b = s.bitb; - k = s.bitk; - q = s.write; - m = q < s.read ? s.read - q - 1 : s.end - q; - - if (r != Z_OK) { - mode = r == Z_STREAM_END ? WASH : BADCODE; - break; - } - } - need = lbits; - tree = ltree; - tree_index = ltree_index; - - mode = LEN; - case LEN: // i: get length/literal/eob next - j = need; - - while (k < (j)) { - if (n !== 0) - r = Z_OK; - else { - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - tindex = (tree_index + (b & inflate_mask[j])) * 3; - - b >>>= (tree[tindex + 1]); - k -= (tree[tindex + 1]); - - e = tree[tindex]; - - if (e === 0) { // literal - lit = tree[tindex + 2]; - mode = LIT; - break; - } - if ((e & 16) !== 0) { // length - get = e & 15; - len = tree[tindex + 2]; - mode = LENEXT; - break; - } - if ((e & 64) === 0) { // next table - need = e; - tree_index = tindex / 3 + tree[tindex + 2]; - break; - } - if ((e & 32) !== 0) { // end of block - mode = WASH; - break; - } - mode = BADCODE; // invalid code - z.msg = "invalid literal/length code"; - r = Z_DATA_ERROR; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - - case LENEXT: // i: getting length extra (have base) - j = get; - - while (k < (j)) { - if (n !== 0) - r = Z_OK; - else { - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - len += (b & inflate_mask[j]); - - b >>= j; - k -= j; - - need = dbits; - tree = dtree; - tree_index = dtree_index; - mode = DIST; - case DIST: // i: get distance next - j = need; - - while (k < (j)) { - if (n !== 0) - r = Z_OK; - else { - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - tindex = (tree_index + (b & inflate_mask[j])) * 3; - - b >>= tree[tindex + 1]; - k -= tree[tindex + 1]; - - e = (tree[tindex]); - if ((e & 16) !== 0) { // distance - get = e & 15; - dist = tree[tindex + 2]; - mode = DISTEXT; - break; - } - if ((e & 64) === 0) { // next table - need = e; - tree_index = tindex / 3 + tree[tindex + 2]; - break; - } - mode = BADCODE; // invalid code - z.msg = "invalid distance code"; - r = Z_DATA_ERROR; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - - case DISTEXT: // i: getting distance extra - j = get; - - while (k < (j)) { - if (n !== 0) - r = Z_OK; - else { - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - dist += (b & inflate_mask[j]); - - b >>= j; - k -= j; - - mode = COPY; - case COPY: // o: copying bytes in window, waiting for space - f = q - dist; - while (f < 0) { // modulo window size-"while" instead - f += s.end; // of "if" handles invalid distances - } - while (len !== 0) { - - if (m === 0) { - if (q == s.end && s.read !== 0) { - q = 0; - m = q < s.read ? s.read - q - 1 : s.end - q; - } - if (m === 0) { - s.write = q; - r = s.inflate_flush(z, r); - q = s.write; - m = q < s.read ? s.read - q - 1 : s.end - q; - - if (q == s.end && s.read !== 0) { - q = 0; - m = q < s.read ? s.read - q - 1 : s.end - q; - } - - if (m === 0) { - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - } - } - - s.window[q++] = s.window[f++]; - m--; - - if (f == s.end) - f = 0; - len--; - } - mode = START; - break; - case LIT: // o: got literal, waiting for output space - if (m === 0) { - if (q == s.end && s.read !== 0) { - q = 0; - m = q < s.read ? s.read - q - 1 : s.end - q; - } - if (m === 0) { - s.write = q; - r = s.inflate_flush(z, r); - q = s.write; - m = q < s.read ? s.read - q - 1 : s.end - q; - - if (q == s.end && s.read !== 0) { - q = 0; - m = q < s.read ? s.read - q - 1 : s.end - q; - } - if (m === 0) { - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - } - } - r = Z_OK; - - s.window[q++] = /* (byte) */lit; - m--; - - mode = START; - break; - case WASH: // o: got eob, possibly more output - if (k > 7) { // return unused byte, if any - k -= 8; - n++; - p--; // can always return one - } - - s.write = q; - r = s.inflate_flush(z, r); - q = s.write; - m = q < s.read ? s.read - q - 1 : s.end - q; - - if (s.read != s.write) { - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - mode = END; - case END: - r = Z_STREAM_END; - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - - case BADCODE: // x: got error - - r = Z_DATA_ERROR; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - - default: - r = Z_STREAM_ERROR; - - s.bitb = b; - s.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - s.write = q; - return s.inflate_flush(z, r); - } - } - }; - - that.free = function() { - // ZFREE(z, c); - }; - - } - - // InfBlocks - - // Table for deflate from PKZIP's appnote.txt. - var border = [ // Order of the bit length code lengths - 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; - - var TYPE = 0; // get type bits (3, including end bit) - var LENS = 1; // get lengths for stored - var STORED = 2;// processing stored block - var TABLE = 3; // get table lengths - var BTREE = 4; // get bit lengths tree for a dynamic - // block - var DTREE = 5; // get length, distance trees for a - // dynamic block - var CODES = 6; // processing fixed or dynamic block - var DRY = 7; // output remaining window bytes - var DONELOCKS = 8; // finished last block, done - var BADBLOCKS = 9; // ot a data error--stuck here - - function InfBlocks(z, w) { - var that = this; - - var mode = TYPE; // current inflate_block mode - - var left = 0; // if STORED, bytes left to copy - - var table = 0; // table lengths (14 bits) - var index = 0; // index into blens (or border) - var blens; // bit lengths of codes - var bb = [ 0 ]; // bit length tree depth - var tb = [ 0 ]; // bit length decoding tree - - var codes = new InfCodes(); // if CODES, current state - - var last = 0; // true if this block is the last block - - var hufts = new Int32Array(MANY * 3); // single malloc for tree space - var check = 0; // check on output - var inftree = new InfTree(); - - that.bitk = 0; // bits in bit buffer - that.bitb = 0; // bit buffer - that.window = new Uint8Array(w); // sliding window - that.end = w; // one byte after sliding window - that.read = 0; // window read pointer - that.write = 0; // window write pointer - - that.reset = function(z, c) { - if (c) - c[0] = check; - // if (mode == BTREE || mode == DTREE) { - // } - if (mode == CODES) { - codes.free(z); - } - mode = TYPE; - that.bitk = 0; - that.bitb = 0; - that.read = that.write = 0; - }; - - that.reset(z, null); - - // copy as much as possible from the sliding window to the output area - that.inflate_flush = function(z, r) { - var n; - var p; - var q; - - // local copies of source and destination pointers - p = z.next_out_index; - q = that.read; - - // compute number of bytes to copy as far as end of window - n = /* (int) */((q <= that.write ? that.write : that.end) - q); - if (n > z.avail_out) - n = z.avail_out; - if (n !== 0 && r == Z_BUF_ERROR) - r = Z_OK; - - // update counters - z.avail_out -= n; - z.total_out += n; - - // copy as far as end of window - z.next_out.set(that.window.subarray(q, q + n), p); - p += n; - q += n; - - // see if more to copy at beginning of window - if (q == that.end) { - // wrap pointers - q = 0; - if (that.write == that.end) - that.write = 0; - - // compute bytes to copy - n = that.write - q; - if (n > z.avail_out) - n = z.avail_out; - if (n !== 0 && r == Z_BUF_ERROR) - r = Z_OK; - - // update counters - z.avail_out -= n; - z.total_out += n; - - // copy - z.next_out.set(that.window.subarray(q, q + n), p); - p += n; - q += n; - } - - // update pointers - z.next_out_index = p; - that.read = q; - - // done - return r; - }; - - that.proc = function(z, r) { - var t; // temporary storage - var b; // bit buffer - var k; // bits in bit buffer - var p; // input data pointer - var n; // bytes available there - var q; // output window write pointer - var m; // bytes to end of window or read pointer - - var i; - - // copy input/output information to locals (UPDATE macro restores) - // { - p = z.next_in_index; - n = z.avail_in; - b = that.bitb; - k = that.bitk; - // } - // { - q = that.write; - m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); - // } - - // process input based on current state - // DEBUG dtree - while (true) { - switch (mode) { - case TYPE: - - while (k < (3)) { - if (n !== 0) { - r = Z_OK; - } else { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - t = /* (int) */(b & 7); - last = t & 1; - - switch (t >>> 1) { - case 0: // stored - // { - b >>>= (3); - k -= (3); - // } - t = k & 7; // go to byte boundary - - // { - b >>>= (t); - k -= (t); - // } - mode = LENS; // get length of stored block - break; - case 1: // fixed - // { - var bl = []; // new Array(1); - var bd = []; // new Array(1); - var tl = [ [] ]; // new Array(1); - var td = [ [] ]; // new Array(1); - - InfTree.inflate_trees_fixed(bl, bd, tl, td); - codes.init(bl[0], bd[0], tl[0], 0, td[0], 0); - // } - - // { - b >>>= (3); - k -= (3); - // } - - mode = CODES; - break; - case 2: // dynamic - - // { - b >>>= (3); - k -= (3); - // } - - mode = TABLE; - break; - case 3: // illegal - - // { - b >>>= (3); - k -= (3); - // } - mode = BADBLOCKS; - z.msg = "invalid block type"; - r = Z_DATA_ERROR; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - break; - case LENS: - - while (k < (32)) { - if (n !== 0) { - r = Z_OK; - } else { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - if ((((~b) >>> 16) & 0xffff) != (b & 0xffff)) { - mode = BADBLOCKS; - z.msg = "invalid stored block lengths"; - r = Z_DATA_ERROR; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - left = (b & 0xffff); - b = k = 0; // dump bits - mode = left !== 0 ? STORED : (last !== 0 ? DRY : TYPE); - break; - case STORED: - if (n === 0) { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - - if (m === 0) { - if (q == that.end && that.read !== 0) { - q = 0; - m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); - } - if (m === 0) { - that.write = q; - r = that.inflate_flush(z, r); - q = that.write; - m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); - if (q == that.end && that.read !== 0) { - q = 0; - m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); - } - if (m === 0) { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - } - } - r = Z_OK; - - t = left; - if (t > n) - t = n; - if (t > m) - t = m; - that.window.set(z.read_buf(p, t), q); - p += t; - n -= t; - q += t; - m -= t; - if ((left -= t) !== 0) - break; - mode = last !== 0 ? DRY : TYPE; - break; - case TABLE: - - while (k < (14)) { - if (n !== 0) { - r = Z_OK; - } else { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - table = t = (b & 0x3fff); - if ((t & 0x1f) > 29 || ((t >> 5) & 0x1f) > 29) { - mode = BADBLOCKS; - z.msg = "too many length or distance symbols"; - r = Z_DATA_ERROR; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - t = 258 + (t & 0x1f) + ((t >> 5) & 0x1f); - if (!blens || blens.length < t) { - blens = []; // new Array(t); - } else { - for (i = 0; i < t; i++) { - blens[i] = 0; - } - } - - // { - b >>>= (14); - k -= (14); - // } - - index = 0; - mode = BTREE; - case BTREE: - while (index < 4 + (table >>> 10)) { - while (k < (3)) { - if (n !== 0) { - r = Z_OK; - } else { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - blens[border[index++]] = b & 7; - - // { - b >>>= (3); - k -= (3); - // } - } - - while (index < 19) { - blens[border[index++]] = 0; - } - - bb[0] = 7; - t = inftree.inflate_trees_bits(blens, bb, tb, hufts, z); - if (t != Z_OK) { - r = t; - if (r == Z_DATA_ERROR) { - blens = null; - mode = BADBLOCKS; - } - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - - index = 0; - mode = DTREE; - case DTREE: - while (true) { - t = table; - if (!(index < 258 + (t & 0x1f) + ((t >> 5) & 0x1f))) { - break; - } - - var j, c; - - t = bb[0]; - - while (k < (t)) { - if (n !== 0) { - r = Z_OK; - } else { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - // if (tb[0] == -1) { - // System.err.println("null..."); - // } - - t = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 1]; - c = hufts[(tb[0] + (b & inflate_mask[t])) * 3 + 2]; - - if (c < 16) { - b >>>= (t); - k -= (t); - blens[index++] = c; - } else { // c == 16..18 - i = c == 18 ? 7 : c - 14; - j = c == 18 ? 11 : 3; - - while (k < (t + i)) { - if (n !== 0) { - r = Z_OK; - } else { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - n--; - b |= (z.read_byte(p++) & 0xff) << k; - k += 8; - } - - b >>>= (t); - k -= (t); - - j += (b & inflate_mask[i]); - - b >>>= (i); - k -= (i); - - i = index; - t = table; - if (i + j > 258 + (t & 0x1f) + ((t >> 5) & 0x1f) || (c == 16 && i < 1)) { - blens = null; - mode = BADBLOCKS; - z.msg = "invalid bit length repeat"; - r = Z_DATA_ERROR; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - - c = c == 16 ? blens[i - 1] : 0; - do { - blens[i++] = c; - } while (--j !== 0); - index = i; - } - } - - tb[0] = -1; - // { - var bl_ = []; // new Array(1); - var bd_ = []; // new Array(1); - var tl_ = []; // new Array(1); - var td_ = []; // new Array(1); - bl_[0] = 9; // must be <= 9 for lookahead assumptions - bd_[0] = 6; // must be <= 9 for lookahead assumptions - - t = table; - t = inftree.inflate_trees_dynamic(257 + (t & 0x1f), 1 + ((t >> 5) & 0x1f), blens, bl_, bd_, tl_, td_, hufts, z); - - if (t != Z_OK) { - if (t == Z_DATA_ERROR) { - blens = null; - mode = BADBLOCKS; - } - r = t; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - codes.init(bl_[0], bd_[0], hufts, tl_[0], hufts, td_[0]); - // } - mode = CODES; - case CODES: - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - - if ((r = codes.proc(that, z, r)) != Z_STREAM_END) { - return that.inflate_flush(z, r); - } - r = Z_OK; - codes.free(z); - - p = z.next_in_index; - n = z.avail_in; - b = that.bitb; - k = that.bitk; - q = that.write; - m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); - - if (last === 0) { - mode = TYPE; - break; - } - mode = DRY; - case DRY: - that.write = q; - r = that.inflate_flush(z, r); - q = that.write; - m = /* (int) */(q < that.read ? that.read - q - 1 : that.end - q); - if (that.read != that.write) { - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - mode = DONELOCKS; - case DONELOCKS: - r = Z_STREAM_END; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - case BADBLOCKS: - r = Z_DATA_ERROR; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - - default: - r = Z_STREAM_ERROR; - - that.bitb = b; - that.bitk = k; - z.avail_in = n; - z.total_in += p - z.next_in_index; - z.next_in_index = p; - that.write = q; - return that.inflate_flush(z, r); - } - } - }; - - that.free = function(z) { - that.reset(z, null); - that.window = null; - hufts = null; - // ZFREE(z, s); - }; - - that.set_dictionary = function(d, start, n) { - that.window.set(d.subarray(start, start + n), 0); - that.read = that.write = n; - }; - - // Returns true if inflate is currently at the end of a block generated - // by Z_SYNC_FLUSH or Z_FULL_FLUSH. - that.sync_point = function() { - return mode == LENS ? 1 : 0; - }; - - } - - // Inflate - - // preset dictionary flag in zlib header - var PRESET_DICT = 0x20; - - var Z_DEFLATED = 8; - - var METHOD = 0; // waiting for method byte - var FLAG = 1; // waiting for flag byte - var DICT4 = 2; // four dictionary check bytes to go - var DICT3 = 3; // three dictionary check bytes to go - var DICT2 = 4; // two dictionary check bytes to go - var DICT1 = 5; // one dictionary check byte to go - var DICT0 = 6; // waiting for inflateSetDictionary - var BLOCKS = 7; // decompressing blocks - var DONE = 12; // finished check, done - var BAD = 13; // got an error--stay here - - var mark = [ 0, 0, 0xff, 0xff ]; - - function Inflate() { - var that = this; - - that.mode = 0; // current inflate mode - - // mode dependent information - that.method = 0; // if FLAGS, method byte - - // if CHECK, check values to compare - that.was = [ 0 ]; // new Array(1); // computed check value - that.need = 0; // stream check value - - // if BAD, inflateSync's marker bytes count - that.marker = 0; - - // mode independent information - that.wbits = 0; // log2(window size) (8..15, defaults to 15) - - // this.blocks; // current inflate_blocks state - - function inflateReset(z) { - if (!z || !z.istate) - return Z_STREAM_ERROR; - - z.total_in = z.total_out = 0; - z.msg = null; - z.istate.mode = BLOCKS; - z.istate.blocks.reset(z, null); - return Z_OK; - } - - that.inflateEnd = function(z) { - if (that.blocks) - that.blocks.free(z); - that.blocks = null; - // ZFREE(z, z->state); - return Z_OK; - }; - - that.inflateInit = function(z, w) { - z.msg = null; - that.blocks = null; - - // set window size - if (w < 8 || w > 15) { - that.inflateEnd(z); - return Z_STREAM_ERROR; - } - that.wbits = w; - - z.istate.blocks = new InfBlocks(z, 1 << w); - - // reset state - inflateReset(z); - return Z_OK; - }; - - that.inflate = function(z, f) { - var r; - var b; - - if (!z || !z.istate || !z.next_in) - return Z_STREAM_ERROR; - f = f == Z_FINISH ? Z_BUF_ERROR : Z_OK; - r = Z_BUF_ERROR; - while (true) { - // System.out.println("mode: "+z.istate.mode); - switch (z.istate.mode) { - case METHOD: - - if (z.avail_in === 0) - return r; - r = f; - - z.avail_in--; - z.total_in++; - if (((z.istate.method = z.read_byte(z.next_in_index++)) & 0xf) != Z_DEFLATED) { - z.istate.mode = BAD; - z.msg = "unknown compression method"; - z.istate.marker = 5; // can't try inflateSync - break; - } - if ((z.istate.method >> 4) + 8 > z.istate.wbits) { - z.istate.mode = BAD; - z.msg = "invalid window size"; - z.istate.marker = 5; // can't try inflateSync - break; - } - z.istate.mode = FLAG; - case FLAG: - - if (z.avail_in === 0) - return r; - r = f; - - z.avail_in--; - z.total_in++; - b = (z.read_byte(z.next_in_index++)) & 0xff; - - if ((((z.istate.method << 8) + b) % 31) !== 0) { - z.istate.mode = BAD; - z.msg = "incorrect header check"; - z.istate.marker = 5; // can't try inflateSync - break; - } - - if ((b & PRESET_DICT) === 0) { - z.istate.mode = BLOCKS; - break; - } - z.istate.mode = DICT4; - case DICT4: - - if (z.avail_in === 0) - return r; - r = f; - - z.avail_in--; - z.total_in++; - z.istate.need = ((z.read_byte(z.next_in_index++) & 0xff) << 24) & 0xff000000; - z.istate.mode = DICT3; - case DICT3: - - if (z.avail_in === 0) - return r; - r = f; - - z.avail_in--; - z.total_in++; - z.istate.need += ((z.read_byte(z.next_in_index++) & 0xff) << 16) & 0xff0000; - z.istate.mode = DICT2; - case DICT2: - - if (z.avail_in === 0) - return r; - r = f; - - z.avail_in--; - z.total_in++; - z.istate.need += ((z.read_byte(z.next_in_index++) & 0xff) << 8) & 0xff00; - z.istate.mode = DICT1; - case DICT1: - - if (z.avail_in === 0) - return r; - r = f; - - z.avail_in--; - z.total_in++; - z.istate.need += (z.read_byte(z.next_in_index++) & 0xff); - z.istate.mode = DICT0; - return Z_NEED_DICT; - case DICT0: - z.istate.mode = BAD; - z.msg = "need dictionary"; - z.istate.marker = 0; // can try inflateSync - return Z_STREAM_ERROR; - case BLOCKS: - - r = z.istate.blocks.proc(z, r); - if (r == Z_DATA_ERROR) { - z.istate.mode = BAD; - z.istate.marker = 0; // can try inflateSync - break; - } - if (r == Z_OK) { - r = f; - } - if (r != Z_STREAM_END) { - return r; - } - r = f; - z.istate.blocks.reset(z, z.istate.was); - z.istate.mode = DONE; - case DONE: - return Z_STREAM_END; - case BAD: - return Z_DATA_ERROR; - default: - return Z_STREAM_ERROR; - } - } - }; - - that.inflateSetDictionary = function(z, dictionary, dictLength) { - var index = 0; - var length = dictLength; - if (!z || !z.istate || z.istate.mode != DICT0) - return Z_STREAM_ERROR; - - if (length >= (1 << z.istate.wbits)) { - length = (1 << z.istate.wbits) - 1; - index = dictLength - length; - } - z.istate.blocks.set_dictionary(dictionary, index, length); - z.istate.mode = BLOCKS; - return Z_OK; - }; - - that.inflateSync = function(z) { - var n; // number of bytes to look at - var p; // pointer to bytes - var m; // number of marker bytes found in a row - var r, w; // temporaries to save total_in and total_out - - // set up - if (!z || !z.istate) - return Z_STREAM_ERROR; - if (z.istate.mode != BAD) { - z.istate.mode = BAD; - z.istate.marker = 0; - } - if ((n = z.avail_in) === 0) - return Z_BUF_ERROR; - p = z.next_in_index; - m = z.istate.marker; - - // search - while (n !== 0 && m < 4) { - if (z.read_byte(p) == mark[m]) { - m++; - } else if (z.read_byte(p) !== 0) { - m = 0; - } else { - m = 4 - m; - } - p++; - n--; - } - - // restore - z.total_in += p - z.next_in_index; - z.next_in_index = p; - z.avail_in = n; - z.istate.marker = m; - - // return no joy or set up to restart on a new block - if (m != 4) { - return Z_DATA_ERROR; - } - r = z.total_in; - w = z.total_out; - inflateReset(z); - z.total_in = r; - z.total_out = w; - z.istate.mode = BLOCKS; - return Z_OK; - }; - - // Returns true if inflate is currently at the end of a block generated - // by Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP - // implementation to provide an additional safety check. PPP uses - // Z_SYNC_FLUSH - // but removes the length bytes of the resulting empty stored block. When - // decompressing, PPP checks that at the end of input packet, inflate is - // waiting for these length bytes. - that.inflateSyncPoint = function(z) { - if (!z || !z.istate || !z.istate.blocks) - return Z_STREAM_ERROR; - return z.istate.blocks.sync_point(); - }; - } - - // ZStream - - function ZStream() { - } - - ZStream.prototype = { - inflateInit : function(bits) { - var that = this; - that.istate = new Inflate(); - if (!bits) - bits = MAX_BITS; - return that.istate.inflateInit(that, bits); - }, - - inflate : function(f) { - var that = this; - if (!that.istate) - return Z_STREAM_ERROR; - return that.istate.inflate(that, f); - }, - - inflateEnd : function() { - var that = this; - if (!that.istate) - return Z_STREAM_ERROR; - var ret = that.istate.inflateEnd(that); - that.istate = null; - return ret; - }, - - inflateSync : function() { - var that = this; - if (!that.istate) - return Z_STREAM_ERROR; - return that.istate.inflateSync(that); - }, - inflateSetDictionary : function(dictionary, dictLength) { - var that = this; - if (!that.istate) - return Z_STREAM_ERROR; - return that.istate.inflateSetDictionary(that, dictionary, dictLength); - }, - read_byte : function(start) { - var that = this; - return that.next_in.subarray(start, start + 1)[0]; - }, - read_buf : function(start, size) { - var that = this; - return that.next_in.subarray(start, start + size); - } - }; - - // Inflater - - function Inflater() { - var that = this; - var z = new ZStream(); - var bufsize = 512; - var flush = Z_NO_FLUSH; - var buf = new Uint8Array(bufsize); - var nomoreinput = false; - - z.inflateInit(); - z.next_out = buf; - - that.append = function(data, onprogress) { - var err, buffers = [], lastIndex = 0, bufferIndex = 0, bufferSize = 0, array; - if (data.length === 0) - return; - z.next_in_index = 0; - z.next_in = data; - z.avail_in = data.length; - do { - z.next_out_index = 0; - z.avail_out = bufsize; - if ((z.avail_in === 0) && (!nomoreinput)) { // if buffer is empty and more input is available, refill it - z.next_in_index = 0; - nomoreinput = true; - } - err = z.inflate(flush); - if (nomoreinput && (err == Z_BUF_ERROR)) - return -1; - if (err != Z_OK && err != Z_STREAM_END) - throw "inflating: " + z.msg; - if ((nomoreinput || err == Z_STREAM_END) && (z.avail_in == data.length)) - return -1; - if (z.next_out_index) - if (z.next_out_index == bufsize) - buffers.push(new Uint8Array(buf)); - else - buffers.push(new Uint8Array(buf.subarray(0, z.next_out_index))); - bufferSize += z.next_out_index; - if (onprogress && z.next_in_index > 0 && z.next_in_index != lastIndex) { - onprogress(z.next_in_index); - lastIndex = z.next_in_index; - } - } while (z.avail_in > 0 || z.avail_out === 0); - array = new Uint8Array(bufferSize); - buffers.forEach(function(chunk) { - array.set(chunk, bufferIndex); - bufferIndex += chunk.length; - }); - return array; - }; - that.flush = function() { - z.inflateEnd(); - }; - } - - var inflater; - - if (obj.zip) - obj.zip.Inflater = Inflater; - else { - inflater = new Inflater(); - obj.addEventListener("message", function(event) { - var message = event.data; - - if (message.append) - obj.postMessage({ - onappend : true, - data : inflater.append(message.data, function(current) { - obj.postMessage({ - progress : true, - current : current - }); - }) - }); - if (message.flush) { - inflater.flush(); - obj.postMessage({ - onflush : true - }); - } - }, false); - } - -})(this); - -//# sourceMappingURL=inflate.js.map \ No newline at end of file diff --git a/reader/js/libs/inflate.min.js b/reader/js/libs/inflate.min.js deleted file mode 100644 index 14a9b5d36..000000000 --- a/reader/js/libs/inflate.min.js +++ /dev/null @@ -1 +0,0 @@ -!function(a){function b(){function a(a,b,c,d,j,k,l,n,p,r,s){var t,u,v,w,x,y,z,A,C,D,E,F,G,H,I;D=0,x=c;do e[a[b+D]]++,D++,x--;while(0!==x);if(e[0]==c)return l[0]=-1,n[0]=0,i;for(A=n[0],y=1;B>=y&&0===e[y];y++);for(z=y,y>A&&(A=y),x=B;0!==x&&0===e[x];x--);for(v=x,A>x&&(A=x),n[0]=A,H=1<y;y++,H<<=1)if((H-=e[y])<0)return m;if((H-=e[x])<0)return m;for(e[x]+=H,h[1]=y=0,D=1,G=2;0!==--x;)h[G]=y+=e[D],G++,D++;x=0,D=0;do 0!==(y=a[b+D])&&(s[h[y]++]=x),D++;while(++x=z;z++)for(t=e[z];0!==t--;){for(;z>F+A;){if(w++,F+=A,I=v-F,I=I>A?A:I,(u=1<<(y=z-F))>t+1&&(u-=t+1,G=z,I>y))for(;++yq)return m;g[w]=E=r[0],r[0]+=I,0!==w?(h[w]=x,f[0]=y,f[1]=A,y=x>>>F-A,f[2]=E-g[w-1]-y,p.set(f,3*(g[w-1]+y))):l[0]=E}for(f[1]=z-F,D>=c?f[0]=192:s[D]>>F;I>y;y+=u)p.set(f,3*(E+y));for(y=1<>>=1)x^=y;for(x^=y,C=(1<b;b++)d[b]=0;for(b=0;B+1>b;b++)e[b]=0;for(b=0;3>b;b++)f[b]=0;g.set(e.subarray(0,B),0),h.set(e.subarray(0,B+1),0)}var c,d,e,f,g,h,j=this;j.inflate_trees_bits=function(e,f,g,h,i){var j;return b(19),c[0]=0,j=a(e,0,19,19,null,null,g,f,h,c,d),j==m?i.msg="oversubscribed dynamic bit lengths tree":(j==o||0===f[0])&&(i.msg="incomplete dynamic bit lengths tree",j=m),j},j.inflate_trees_dynamic=function(e,f,g,h,j,k,l,p,q){var r;return b(288),c[0]=0,r=a(g,0,e,257,x,y,k,h,p,c,d),r!=i||0===h[0]?(r==m?q.msg="oversubscribed literal/length tree":r!=n&&(q.msg="incomplete literal/length tree",r=m),r):(b(288),r=a(g,e,f,0,z,A,l,j,p,c,d),r!=i||0===j[0]&&e>257?(r==m?q.msg="oversubscribed distance tree":r==o?(q.msg="incomplete distance tree",r=m):r!=n&&(q.msg="empty distance tree with lengths",r=m),r):i)}}function c(){function a(a,b,c,d,e,f,g,h){var k,l,n,o,q,r,s,t,u,v,w,x,y,z,A,B;s=h.next_in_index,t=h.avail_in,q=g.bitb,r=g.bitk,u=g.write,v=ur;)t--,q|=(255&h.read_byte(s++))<>=l[B+1],r-=l[B+1],0!==(16&o)){for(o&=15,y=l[B+2]+(q&p[o]),q>>=o,r-=o;15>r;)t--,q|=(255&h.read_byte(s++))<>=l[B+1],r-=l[B+1],0!==(16&o)){for(o&=15;o>r;)t--,q|=(255&h.read_byte(s++))<>=o,r-=o,v-=y,u>=z)A=u-z,u-A>0&&2>u-A?(g.window[u++]=g.window[A++],g.window[u++]=g.window[A++],y-=2):(g.window.set(g.window.subarray(A,A+2),u),u+=2,A+=2,y-=2);else{A=u-z;do A+=g.end;while(0>A);if(o=g.end-A,y>o){if(y-=o,u-A>0&&o>u-A){do g.window[u++]=g.window[A++];while(0!==--o)}else g.window.set(g.window.subarray(A,A+o),u),u+=o,A+=o,o=0;A=0}}if(u-A>0&&y>u-A){do g.window[u++]=g.window[A++];while(0!==--y)}else g.window.set(g.window.subarray(A,A+y),u),u+=y,A+=y,y=0;break}if(0!==(64&o))return h.msg="invalid distance code",y=h.avail_in-t,y=y>r>>3?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,h.avail_in=t,h.total_in+=s-h.next_in_index,h.next_in_index=s,g.write=u,m;k+=l[B+2],k+=q&p[o],B=3*(n+k),o=l[B]}break}if(0!==(64&o))return 0!==(32&o)?(y=h.avail_in-t,y=y>r>>3?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,h.avail_in=t,h.total_in+=s-h.next_in_index,h.next_in_index=s,g.write=u,j):(h.msg="invalid literal/length code",y=h.avail_in-t,y=y>r>>3?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,h.avail_in=t,h.total_in+=s-h.next_in_index,h.next_in_index=s,g.write=u,m);if(k+=l[B+2],k+=q&p[o],B=3*(n+k),0===(o=l[B])){q>>=l[B+1],r-=l[B+1],g.window[u++]=l[B+2],v--;break}}else q>>=l[B+1],r-=l[B+1],g.window[u++]=l[B+2],v--}while(v>=258&&t>=10);return y=h.avail_in-t,y=y>r>>3?r>>3:y,t+=y,s-=y,r-=y<<3,g.bitb=q,g.bitk=r,h.avail_in=t,h.total_in+=s-h.next_in_index,h.next_in_index=s,g.write=u,i}var b,c,d,e,f=this,g=0,h=0,k=0,n=0,o=0,q=0,r=0,s=0,t=0,u=0;f.init=function(a,f,g,h,i,j){b=C,r=a,s=f,d=g,t=h,e=i,u=j,c=null},f.proc=function(f,v,w){var x,y,z,A,B,M,N,O=0,P=0,Q=0;for(Q=v.next_in_index,A=v.avail_in,O=f.bitb,P=f.bitk,B=f.write,M=B=258&&A>=10&&(f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,w=a(r,s,d,t,e,u,f,v),Q=v.next_in_index,A=v.avail_in,O=f.bitb,P=f.bitk,B=f.write,M=BP;){if(0===A)return f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,f.inflate_flush(v,w);w=i,A--,O|=(255&v.read_byte(Q++))<>>=c[y+1],P-=c[y+1],z=c[y],0===z){n=c[y+2],b=I;break}if(0!==(16&z)){o=15&z,g=c[y+2],b=E;break}if(0===(64&z)){k=z,h=y/3+c[y+2];break}if(0!==(32&z)){b=J;break}return b=L,v.msg="invalid literal/length code",w=m,f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,f.inflate_flush(v,w);case E:for(x=o;x>P;){if(0===A)return f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,f.inflate_flush(v,w);w=i,A--,O|=(255&v.read_byte(Q++))<>=x,P-=x,k=s,c=e,h=u,b=F;case F:for(x=k;x>P;){if(0===A)return f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,f.inflate_flush(v,w);w=i,A--,O|=(255&v.read_byte(Q++))<>=c[y+1],P-=c[y+1],z=c[y],0!==(16&z)){o=15&z,q=c[y+2],b=G;break}if(0===(64&z)){k=z,h=y/3+c[y+2];break}return b=L,v.msg="invalid distance code",w=m,f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,f.inflate_flush(v,w);case G:for(x=o;x>P;){if(0===A)return f.bitb=O,f.bitk=P,v.avail_in=A,v.total_in+=Q-v.next_in_index,v.next_in_index=Q,f.write=B,f.inflate_flush(v,w);w=i,A--,O|=(255&v.read_byte(Q++))<>=x,P-=x,b=H;case H:for(N=B-q;0>N;)N+=f.end;for(;0!==g;){if(0===M&&(B==f.end&&0!==f.read&&(B=0,M=B7&&(P-=8,A++,Q--),f.write=B,w=f.inflate_flush(v,w),B=f.write,M=Ba.avail_out&&(c=a.avail_out),0!==c&&b==o&&(b=i),a.avail_out-=c,a.total_out+=c,a.next_out.set(f.window.subarray(e,e+c),d),d+=c,e+=c,e==f.end&&(e=0,f.write==f.end&&(f.write=0),c=f.write-e,c>a.avail_out&&(c=a.avail_out),0!==c&&b==o&&(b=i),a.avail_out-=c,a.total_out+=c,a.next_out.set(f.window.subarray(e,e+c),d),d+=c,e+=c),a.next_out_index=d,f.read=e,b},f.proc=function(a,c){var d,o,q,w,y,z,A,B;for(w=a.next_in_index,y=a.avail_in,o=f.bitb,q=f.bitk,z=f.write,A=zq;){if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);c=i,y--,o|=(255&a.read_byte(w++))<>>1){case 0:o>>>=3,q-=3,d=7&q,o>>>=d,q-=d,g=O;break;case 1:var C=[],D=[],E=[[]],F=[[]];b.inflate_trees_fixed(C,D,E,F),t.init(C[0],D[0],E[0],0,F[0],0),o>>>=3,q-=3,g=T;break;case 2:o>>>=3,q-=3,g=Q;break;case 3:return o>>>=3,q-=3,g=W,a.msg="invalid block type",c=m,f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c)}break;case O:for(;32>q;){if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);c=i,y--,o|=(255&a.read_byte(w++))<>>16&65535)!=(65535&o))return g=W,a.msg="invalid stored block lengths",c=m,f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);h=65535&o,o=q=0,g=0!==h?P:0!==u?U:N;break;case P:if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);if(0===A&&(z==f.end&&0!==f.read&&(z=0,A=zy&&(d=y),d>A&&(d=A),f.window.set(a.read_buf(w,d),z),w+=d,y-=d,z+=d,A-=d,0!==(h-=d))break;g=0!==u?U:N;break;case Q:for(;14>q;){if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);c=i,y--,o|=(255&a.read_byte(w++))<29||(d>>5&31)>29)return g=W,a.msg="too many length or distance symbols",c=m,f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);if(d=258+(31&d)+(d>>5&31),!e||e.lengthB;B++)e[B]=0;o>>>=14,q-=14,n=0,g=R;case R:for(;4+(k>>>10)>n;){for(;3>q;){if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);c=i,y--,o|=(255&a.read_byte(w++))<>>=3,q-=3}for(;19>n;)e[M[n++]]=0;if(r[0]=7,d=x.inflate_trees_bits(e,r,s,v,a),d!=i)return c=d,c==m&&(e=null,g=W),f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);n=0,g=S;case S:for(;;){if(d=k,!(258+(31&d)+(d>>5&31)>n))break;var G,H;for(d=r[0];d>q;){if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);c=i,y--,o|=(255&a.read_byte(w++))<H)o>>>=d,q-=d,e[n++]=H;else{for(B=18==H?7:H-14,G=18==H?11:3;d+B>q;){if(0===y)return f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);c=i,y--,o|=(255&a.read_byte(w++))<>>=d,q-=d,G+=o&p[B],o>>>=B,q-=B,B=n,d=k,B+G>258+(31&d)+(d>>5&31)||16==H&&1>B)return e=null,g=W,a.msg="invalid bit length repeat",c=m,f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);H=16==H?e[B-1]:0;do e[B++]=H;while(0!==--G);n=B}}s[0]=-1;var I=[],J=[],K=[],L=[];if(I[0]=9,J[0]=6,d=k,d=x.inflate_trees_dynamic(257+(31&d),1+(d>>5&31),e,I,J,K,L,v,a),d!=i)return d==m&&(e=null,g=W),c=d,f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,f.inflate_flush(a,c);t.init(I[0],J[0],v,K[0],v,L[0]),g=T;case T:if(f.bitb=o,f.bitk=q,a.avail_in=y,a.total_in+=w-a.next_in_index,a.next_in_index=w,f.write=z,(c=t.proc(f,a,c))!=j)return f.inflate_flush(a,c);if(c=i,t.free(a),w=a.next_in_index,y=a.avail_in,o=f.bitb,q=f.bitk,z=f.write,A=ze||e>15?(b.inflateEnd(c),l):(b.wbits=e,c.istate.blocks=new d(c,1<>4)+8>a.istate.wbits){a.istate.mode=gb,a.msg="invalid window size",a.istate.marker=5;break}a.istate.mode=$;case $:if(0===a.avail_in)return c;if(c=b,a.avail_in--,a.total_in++,d=255&a.read_byte(a.next_in_index++),((a.istate.method<<8)+d)%31!==0){a.istate.mode=gb,a.msg="incorrect header check",a.istate.marker=5;break}if(0===(d&X)){a.istate.mode=eb;break}a.istate.mode=_;case _:if(0===a.avail_in)return c;c=b,a.avail_in--,a.total_in++,a.istate.need=(255&a.read_byte(a.next_in_index++))<<24&4278190080,a.istate.mode=ab;case ab:if(0===a.avail_in)return c;c=b,a.avail_in--,a.total_in++,a.istate.need+=(255&a.read_byte(a.next_in_index++))<<16&16711680,a.istate.mode=bb;case bb:if(0===a.avail_in)return c;c=b,a.avail_in--,a.total_in++,a.istate.need+=(255&a.read_byte(a.next_in_index++))<<8&65280,a.istate.mode=cb;case cb:return 0===a.avail_in?c:(c=b,a.avail_in--,a.total_in++,a.istate.need+=255&a.read_byte(a.next_in_index++),a.istate.mode=db,k);case db:return a.istate.mode=gb,a.msg="need dictionary",a.istate.marker=0,l;case eb:if(c=a.istate.blocks.proc(a,c),c==m){a.istate.mode=gb,a.istate.marker=0;break}if(c==i&&(c=b),c!=j)return c;c=b,a.istate.blocks.reset(a,a.istate.was),a.istate.mode=fb;case fb:return j;case gb:return m;default:return l}},b.inflateSetDictionary=function(a,b,c){var d=0,e=c;return a&&a.istate&&a.istate.mode==db?(e>=1<e;)b.read_byte(d)==hb[e]?e++:e=0!==b.read_byte(d)?0:4-e,d++,c--;return b.total_in+=d-b.next_in_index,b.next_in_index=d,b.avail_in=c,b.istate.marker=e,4!=e?m:(f=b.total_in,g=b.total_out,a(b),b.total_in=f,b.total_out=g,b.istate.mode=eb,i)},b.inflateSyncPoint=function(a){return a&&a.istate&&a.istate.blocks?a.istate.blocks.sync_point():l}}function f(){}function g(){var a=this,b=new f,c=512,d=r,e=new Uint8Array(c),g=!1;b.inflateInit(),b.next_out=e,a.append=function(a,f){var h,k,l=[],m=0,n=0,p=0;if(0!==a.length){b.next_in_index=0,b.next_in=a,b.avail_in=a.length;do{if(b.next_out_index=0,b.avail_out=c,0!==b.avail_in||g||(b.next_in_index=0,g=!0),h=b.inflate(d),g&&h==o)return-1;if(h!=i&&h!=j)throw"inflating: "+b.msg;if((g||h==j)&&b.avail_in==a.length)return-1;b.next_out_index&&(b.next_out_index==c?l.push(new Uint8Array(e)):l.push(new Uint8Array(e.subarray(0,b.next_out_index)))),p+=b.next_out_index,f&&b.next_in_index>0&&b.next_in_index!=m&&(f(b.next_in_index),m=b.next_in_index)}while(b.avail_in>0||0===b.avail_out);return k=new Uint8Array(p),l.forEach(function(a){k.set(a,n),n+=a.length}),k}},a.flush=function(){b.inflateEnd()}}var h=15,i=0,j=1,k=2,l=-2,m=-3,n=-4,o=-5,p=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535],q=1440,r=0,s=4,t=9,u=5,v=[96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,192,80,7,10,0,8,96,0,8,32,0,9,160,0,8,0,0,8,128,0,8,64,0,9,224,80,7,6,0,8,88,0,8,24,0,9,144,83,7,59,0,8,120,0,8,56,0,9,208,81,7,17,0,8,104,0,8,40,0,9,176,0,8,8,0,8,136,0,8,72,0,9,240,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,200,81,7,13,0,8,100,0,8,36,0,9,168,0,8,4,0,8,132,0,8,68,0,9,232,80,7,8,0,8,92,0,8,28,0,9,152,84,7,83,0,8,124,0,8,60,0,9,216,82,7,23,0,8,108,0,8,44,0,9,184,0,8,12,0,8,140,0,8,76,0,9,248,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,196,81,7,11,0,8,98,0,8,34,0,9,164,0,8,2,0,8,130,0,8,66,0,9,228,80,7,7,0,8,90,0,8,26,0,9,148,84,7,67,0,8,122,0,8,58,0,9,212,82,7,19,0,8,106,0,8,42,0,9,180,0,8,10,0,8,138,0,8,74,0,9,244,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,204,81,7,15,0,8,102,0,8,38,0,9,172,0,8,6,0,8,134,0,8,70,0,9,236,80,7,9,0,8,94,0,8,30,0,9,156,84,7,99,0,8,126,0,8,62,0,9,220,82,7,27,0,8,110,0,8,46,0,9,188,0,8,14,0,8,142,0,8,78,0,9,252,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,194,80,7,10,0,8,97,0,8,33,0,9,162,0,8,1,0,8,129,0,8,65,0,9,226,80,7,6,0,8,89,0,8,25,0,9,146,83,7,59,0,8,121,0,8,57,0,9,210,81,7,17,0,8,105,0,8,41,0,9,178,0,8,9,0,8,137,0,8,73,0,9,242,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,202,81,7,13,0,8,101,0,8,37,0,9,170,0,8,5,0,8,133,0,8,69,0,9,234,80,7,8,0,8,93,0,8,29,0,9,154,84,7,83,0,8,125,0,8,61,0,9,218,82,7,23,0,8,109,0,8,45,0,9,186,0,8,13,0,8,141,0,8,77,0,9,250,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,198,81,7,11,0,8,99,0,8,35,0,9,166,0,8,3,0,8,131,0,8,67,0,9,230,80,7,7,0,8,91,0,8,27,0,9,150,84,7,67,0,8,123,0,8,59,0,9,214,82,7,19,0,8,107,0,8,43,0,9,182,0,8,11,0,8,139,0,8,75,0,9,246,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,206,81,7,15,0,8,103,0,8,39,0,9,174,0,8,7,0,8,135,0,8,71,0,9,238,80,7,9,0,8,95,0,8,31,0,9,158,84,7,99,0,8,127,0,8,63,0,9,222,82,7,27,0,8,111,0,8,47,0,9,190,0,8,15,0,8,143,0,8,79,0,9,254,96,7,256,0,8,80,0,8,16,84,8,115,82,7,31,0,8,112,0,8,48,0,9,193,80,7,10,0,8,96,0,8,32,0,9,161,0,8,0,0,8,128,0,8,64,0,9,225,80,7,6,0,8,88,0,8,24,0,9,145,83,7,59,0,8,120,0,8,56,0,9,209,81,7,17,0,8,104,0,8,40,0,9,177,0,8,8,0,8,136,0,8,72,0,9,241,80,7,4,0,8,84,0,8,20,85,8,227,83,7,43,0,8,116,0,8,52,0,9,201,81,7,13,0,8,100,0,8,36,0,9,169,0,8,4,0,8,132,0,8,68,0,9,233,80,7,8,0,8,92,0,8,28,0,9,153,84,7,83,0,8,124,0,8,60,0,9,217,82,7,23,0,8,108,0,8,44,0,9,185,0,8,12,0,8,140,0,8,76,0,9,249,80,7,3,0,8,82,0,8,18,85,8,163,83,7,35,0,8,114,0,8,50,0,9,197,81,7,11,0,8,98,0,8,34,0,9,165,0,8,2,0,8,130,0,8,66,0,9,229,80,7,7,0,8,90,0,8,26,0,9,149,84,7,67,0,8,122,0,8,58,0,9,213,82,7,19,0,8,106,0,8,42,0,9,181,0,8,10,0,8,138,0,8,74,0,9,245,80,7,5,0,8,86,0,8,22,192,8,0,83,7,51,0,8,118,0,8,54,0,9,205,81,7,15,0,8,102,0,8,38,0,9,173,0,8,6,0,8,134,0,8,70,0,9,237,80,7,9,0,8,94,0,8,30,0,9,157,84,7,99,0,8,126,0,8,62,0,9,221,82,7,27,0,8,110,0,8,46,0,9,189,0,8,14,0,8,142,0,8,78,0,9,253,96,7,256,0,8,81,0,8,17,85,8,131,82,7,31,0,8,113,0,8,49,0,9,195,80,7,10,0,8,97,0,8,33,0,9,163,0,8,1,0,8,129,0,8,65,0,9,227,80,7,6,0,8,89,0,8,25,0,9,147,83,7,59,0,8,121,0,8,57,0,9,211,81,7,17,0,8,105,0,8,41,0,9,179,0,8,9,0,8,137,0,8,73,0,9,243,80,7,4,0,8,85,0,8,21,80,8,258,83,7,43,0,8,117,0,8,53,0,9,203,81,7,13,0,8,101,0,8,37,0,9,171,0,8,5,0,8,133,0,8,69,0,9,235,80,7,8,0,8,93,0,8,29,0,9,155,84,7,83,0,8,125,0,8,61,0,9,219,82,7,23,0,8,109,0,8,45,0,9,187,0,8,13,0,8,141,0,8,77,0,9,251,80,7,3,0,8,83,0,8,19,85,8,195,83,7,35,0,8,115,0,8,51,0,9,199,81,7,11,0,8,99,0,8,35,0,9,167,0,8,3,0,8,131,0,8,67,0,9,231,80,7,7,0,8,91,0,8,27,0,9,151,84,7,67,0,8,123,0,8,59,0,9,215,82,7,19,0,8,107,0,8,43,0,9,183,0,8,11,0,8,139,0,8,75,0,9,247,80,7,5,0,8,87,0,8,23,192,8,0,83,7,51,0,8,119,0,8,55,0,9,207,81,7,15,0,8,103,0,8,39,0,9,175,0,8,7,0,8,135,0,8,71,0,9,239,80,7,9,0,8,95,0,8,31,0,9,159,84,7,99,0,8,127,0,8,63,0,9,223,82,7,27,0,8,111,0,8,47,0,9,191,0,8,15,0,8,143,0,8,79,0,9,255],w=[80,5,1,87,5,257,83,5,17,91,5,4097,81,5,5,89,5,1025,85,5,65,93,5,16385,80,5,3,88,5,513,84,5,33,92,5,8193,82,5,9,90,5,2049,86,5,129,192,5,24577,80,5,2,87,5,385,83,5,25,91,5,6145,81,5,7,89,5,1537,85,5,97,93,5,24577,80,5,4,88,5,769,84,5,49,92,5,12289,82,5,13,90,5,3073,86,5,193,192,5,24577],x=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],y=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,112,112],z=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577],A=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],B=15;b.inflate_trees_fixed=function(a,b,c,d){return a[0]=t,b[0]=u,c[0]=v,d[0]=w,i};var C=0,D=1,E=2,F=3,G=4,H=5,I=6,J=7,K=8,L=9,M=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],N=0,O=1,P=2,Q=3,R=4,S=5,T=6,U=7,V=8,W=9,X=32,Y=8,Z=0,$=1,_=2,ab=3,bb=4,cb=5,db=6,eb=7,fb=12,gb=13,hb=[0,0,255,255];f.prototype={inflateInit:function(a){var b=this;return b.istate=new e,a||(a=h),b.istate.inflateInit(b,a)},inflate:function(a){var b=this;return b.istate?b.istate.inflate(b,a):l},inflateEnd:function(){var a=this;if(!a.istate)return l;var b=a.istate.inflateEnd(a);return a.istate=null,b},inflateSync:function(){var a=this;return a.istate?a.istate.inflateSync(a):l},inflateSetDictionary:function(a,b){var c=this;return c.istate?c.istate.inflateSetDictionary(c,a,b):l},read_byte:function(a){var b=this;return b.next_in.subarray(a,a+1)[0]},read_buf:function(a,b){var c=this;return c.next_in.subarray(a,a+b)}};var ib;a.zip?a.zip.Inflater=g:(ib=new g,a.addEventListener("message",function(b){var c=b.data;c.append&&a.postMessage({onappend:!0,data:ib.append(c.data,function(b){a.postMessage({progress:!0,current:b})})}),c.flush&&(ib.flush(),a.postMessage({onflush:!0}))},!1))}(this); \ No newline at end of file diff --git a/reader/js/libs/jquery-2.1.0.min.js b/reader/js/libs/jquery-2.1.0.min.js deleted file mode 100644 index cbe6abe59..000000000 --- a/reader/js/libs/jquery-2.1.0.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/*! jQuery v2.1.0 | (c) 2005, 2014 jQuery Foundation, Inc. | jquery.org/license */ -!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=c.slice,e=c.concat,f=c.push,g=c.indexOf,h={},i=h.toString,j=h.hasOwnProperty,k="".trim,l={},m=a.document,n="2.1.0",o=function(a,b){return new o.fn.init(a,b)},p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};o.fn=o.prototype={jquery:n,constructor:o,selector:"",length:0,toArray:function(){return d.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:d.call(this)},pushStack:function(a){var b=o.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a,b){return o.each(this,a,b)},map:function(a){return this.pushStack(o.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(d.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor(null)},push:f,sort:c.sort,splice:c.splice},o.extend=o.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||o.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(o.isPlainObject(d)||(e=o.isArray(d)))?(e?(e=!1,f=c&&o.isArray(c)?c:[]):f=c&&o.isPlainObject(c)?c:{},g[b]=o.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},o.extend({expando:"jQuery"+(n+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===o.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){return a-parseFloat(a)>=0},isPlainObject:function(a){if("object"!==o.type(a)||a.nodeType||o.isWindow(a))return!1;try{if(a.constructor&&!j.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(b){return!1}return!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?h[i.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=o.trim(a),a&&(1===a.indexOf("use strict")?(b=m.createElement("script"),b.text=a,m.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b,c){var d,e=0,f=a.length,g=s(a);if(c){if(g){for(;f>e;e++)if(d=b.apply(a[e],c),d===!1)break}else for(e in a)if(d=b.apply(a[e],c),d===!1)break}else if(g){for(;f>e;e++)if(d=b.call(a[e],e,a[e]),d===!1)break}else for(e in a)if(d=b.call(a[e],e,a[e]),d===!1)break;return a},trim:function(a){return null==a?"":k.call(a)},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?o.merge(c,"string"==typeof a?[a]:a):f.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:g.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,f=0,g=a.length,h=s(a),i=[];if(h)for(;g>f;f++)d=b(a[f],f,c),null!=d&&i.push(d);else for(f in a)d=b(a[f],f,c),null!=d&&i.push(d);return e.apply([],i)},guid:1,proxy:function(a,b){var c,e,f;return"string"==typeof b&&(c=a[b],b=a,a=c),o.isFunction(a)?(e=d.call(arguments,2),f=function(){return a.apply(b||this,e.concat(d.call(arguments)))},f.guid=a.guid=a.guid||o.guid++,f):void 0},now:Date.now,support:l}),o.each("Boolean Number String Function Array Date RegExp Object Error".split(" "),function(a,b){h["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=a.length,c=o.type(a);return"function"===c||o.isWindow(a)?!1:1===a.nodeType&&b?!0:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s="sizzle"+-new Date,t=a.document,u=0,v=0,w=eb(),x=eb(),y=eb(),z=function(a,b){return a===b&&(j=!0),0},A="undefined",B=1<<31,C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=D.indexOf||function(a){for(var b=0,c=this.length;c>b;b++)if(this[b]===a)return b;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",M=L.replace("w","w#"),N="\\["+K+"*("+L+")"+K+"*(?:([*^$|!~]?=)"+K+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+M+")|)|)"+K+"*\\]",O=":("+L+")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|"+N.replace(3,8)+")*)|.*)\\)|)",P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(O),U=new RegExp("^"+M+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L.replace("w","w*")+")"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=/'|\\/g,ab=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),bb=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)};try{G.apply(D=H.call(t.childNodes),t.childNodes),D[t.childNodes.length].nodeType}catch(cb){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function db(a,b,d,e){var f,g,h,i,j,m,p,q,u,v;if((b?b.ownerDocument||b:t)!==l&&k(b),b=b||l,d=d||[],!a||"string"!=typeof a)return d;if(1!==(i=b.nodeType)&&9!==i)return[];if(n&&!e){if(f=Z.exec(a))if(h=f[1]){if(9===i){if(g=b.getElementById(h),!g||!g.parentNode)return d;if(g.id===h)return d.push(g),d}else if(b.ownerDocument&&(g=b.ownerDocument.getElementById(h))&&r(b,g)&&g.id===h)return d.push(g),d}else{if(f[2])return G.apply(d,b.getElementsByTagName(a)),d;if((h=f[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(h)),d}if(c.qsa&&(!o||!o.test(a))){if(q=p=s,u=b,v=9===i&&a,1===i&&"object"!==b.nodeName.toLowerCase()){m=ob(a),(p=b.getAttribute("id"))?q=p.replace(_,"\\$&"):b.setAttribute("id",q),q="[id='"+q+"'] ",j=m.length;while(j--)m[j]=q+pb(m[j]);u=$.test(a)&&mb(b.parentNode)||b,v=m.join(",")}if(v)try{return G.apply(d,u.querySelectorAll(v)),d}catch(w){}finally{p||b.removeAttribute("id")}}}return xb(a.replace(P,"$1"),b,d,e)}function eb(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function fb(a){return a[s]=!0,a}function gb(a){var b=l.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function hb(a,b){var c=a.split("|"),e=a.length;while(e--)d.attrHandle[c[e]]=b}function ib(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||B)-(~a.sourceIndex||B);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function jb(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function kb(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function lb(a){return fb(function(b){return b=+b,fb(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function mb(a){return a&&typeof a.getElementsByTagName!==A&&a}c=db.support={},f=db.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},k=db.setDocument=function(a){var b,e=a?a.ownerDocument||a:t,g=e.defaultView;return e!==l&&9===e.nodeType&&e.documentElement?(l=e,m=e.documentElement,n=!f(e),g&&g!==g.top&&(g.addEventListener?g.addEventListener("unload",function(){k()},!1):g.attachEvent&&g.attachEvent("onunload",function(){k()})),c.attributes=gb(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=gb(function(a){return a.appendChild(e.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(e.getElementsByClassName)&&gb(function(a){return a.innerHTML="
",a.firstChild.className="i",2===a.getElementsByClassName("i").length}),c.getById=gb(function(a){return m.appendChild(a).id=s,!e.getElementsByName||!e.getElementsByName(s).length}),c.getById?(d.find.ID=function(a,b){if(typeof b.getElementById!==A&&n){var c=b.getElementById(a);return c&&c.parentNode?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ab,bb);return function(a){var c=typeof a.getAttributeNode!==A&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return typeof b.getElementsByTagName!==A?b.getElementsByTagName(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return typeof b.getElementsByClassName!==A&&n?b.getElementsByClassName(a):void 0},p=[],o=[],(c.qsa=Y.test(e.querySelectorAll))&&(gb(function(a){a.innerHTML="",a.querySelectorAll("[t^='']").length&&o.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||o.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll(":checked").length||o.push(":checked")}),gb(function(a){var b=e.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&o.push("name"+K+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||o.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),o.push(",.*:")})),(c.matchesSelector=Y.test(q=m.webkitMatchesSelector||m.mozMatchesSelector||m.oMatchesSelector||m.msMatchesSelector))&&gb(function(a){c.disconnectedMatch=q.call(a,"div"),q.call(a,"[s!='']:x"),p.push("!=",O)}),o=o.length&&new RegExp(o.join("|")),p=p.length&&new RegExp(p.join("|")),b=Y.test(m.compareDocumentPosition),r=b||Y.test(m.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},z=b?function(a,b){if(a===b)return j=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===e||a.ownerDocument===t&&r(t,a)?-1:b===e||b.ownerDocument===t&&r(t,b)?1:i?I.call(i,a)-I.call(i,b):0:4&d?-1:1)}:function(a,b){if(a===b)return j=!0,0;var c,d=0,f=a.parentNode,g=b.parentNode,h=[a],k=[b];if(!f||!g)return a===e?-1:b===e?1:f?-1:g?1:i?I.call(i,a)-I.call(i,b):0;if(f===g)return ib(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)k.unshift(c);while(h[d]===k[d])d++;return d?ib(h[d],k[d]):h[d]===t?-1:k[d]===t?1:0},e):l},db.matches=function(a,b){return db(a,null,null,b)},db.matchesSelector=function(a,b){if((a.ownerDocument||a)!==l&&k(a),b=b.replace(S,"='$1']"),!(!c.matchesSelector||!n||p&&p.test(b)||o&&o.test(b)))try{var d=q.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return db(b,l,null,[a]).length>0},db.contains=function(a,b){return(a.ownerDocument||a)!==l&&k(a),r(a,b)},db.attr=function(a,b){(a.ownerDocument||a)!==l&&k(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!n):void 0;return void 0!==f?f:c.attributes||!n?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},db.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},db.uniqueSort=function(a){var b,d=[],e=0,f=0;if(j=!c.detectDuplicates,i=!c.sortStable&&a.slice(0),a.sort(z),j){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return i=null,a},e=db.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=db.selectors={cacheLength:50,createPseudo:fb,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ab,bb),a[3]=(a[4]||a[5]||"").replace(ab,bb),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||db.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&db.error(a[0]),a},PSEUDO:function(a){var b,c=!a[5]&&a[2];return V.CHILD.test(a[0])?null:(a[3]&&void 0!==a[4]?a[2]=a[4]:c&&T.test(c)&&(b=ob(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ab,bb).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=w[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&w(a,function(a){return b.test("string"==typeof a.className&&a.className||typeof a.getAttribute!==A&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=db.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),t=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&t){k=q[s]||(q[s]={}),j=k[a]||[],n=j[0]===u&&j[1],m=j[0]===u&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[u,n,m];break}}else if(t&&(j=(b[s]||(b[s]={}))[a])&&j[0]===u)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(t&&((l[s]||(l[s]={}))[a]=[u,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||db.error("unsupported pseudo: "+a);return e[s]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?fb(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I.call(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:fb(function(a){var b=[],c=[],d=g(a.replace(P,"$1"));return d[s]?fb(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:fb(function(a){return function(b){return db(a,b).length>0}}),contains:fb(function(a){return function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:fb(function(a){return U.test(a||"")||db.error("unsupported lang: "+a),a=a.replace(ab,bb).toLowerCase(),function(b){var c;do if(c=n?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===m},focus:function(a){return a===l.activeElement&&(!l.hasFocus||l.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:lb(function(){return[0]}),last:lb(function(a,b){return[b-1]}),eq:lb(function(a,b,c){return[0>c?c+b:c]}),even:lb(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:lb(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:lb(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:lb(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function qb(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=v++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[u,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[s]||(b[s]={}),(h=i[d])&&h[0]===u&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function rb(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function sb(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function tb(a,b,c,d,e,f){return d&&!d[s]&&(d=tb(d)),e&&!e[s]&&(e=tb(e,f)),fb(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||wb(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:sb(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=sb(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I.call(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=sb(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ub(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],i=g||d.relative[" "],j=g?1:0,k=qb(function(a){return a===b},i,!0),l=qb(function(a){return I.call(b,a)>-1},i,!0),m=[function(a,c,d){return!g&&(d||c!==h)||((b=c).nodeType?k(a,c,d):l(a,c,d))}];f>j;j++)if(c=d.relative[a[j].type])m=[qb(rb(m),c)];else{if(c=d.filter[a[j].type].apply(null,a[j].matches),c[s]){for(e=++j;f>e;e++)if(d.relative[a[e].type])break;return tb(j>1&&rb(m),j>1&&pb(a.slice(0,j-1).concat({value:" "===a[j-2].type?"*":""})).replace(P,"$1"),c,e>j&&ub(a.slice(j,e)),f>e&&ub(a=a.slice(e)),f>e&&pb(a))}m.push(c)}return rb(m)}function vb(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,i,j,k){var m,n,o,p=0,q="0",r=f&&[],s=[],t=h,v=f||e&&d.find.TAG("*",k),w=u+=null==t?1:Math.random()||.1,x=v.length;for(k&&(h=g!==l&&g);q!==x&&null!=(m=v[q]);q++){if(e&&m){n=0;while(o=a[n++])if(o(m,g,i)){j.push(m);break}k&&(u=w)}c&&((m=!o&&m)&&p--,f&&r.push(m))}if(p+=q,c&&q!==p){n=0;while(o=b[n++])o(r,s,g,i);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=E.call(j));s=sb(s)}G.apply(j,s),k&&!f&&s.length>0&&p+b.length>1&&db.uniqueSort(j)}return k&&(u=w,h=t),r};return c?fb(f):f}g=db.compile=function(a,b){var c,d=[],e=[],f=y[a+" "];if(!f){b||(b=ob(a)),c=b.length;while(c--)f=ub(b[c]),f[s]?d.push(f):e.push(f);f=y(a,vb(e,d))}return f};function wb(a,b,c){for(var d=0,e=b.length;e>d;d++)db(a,b[d],c);return c}function xb(a,b,e,f){var h,i,j,k,l,m=ob(a);if(!f&&1===m.length){if(i=m[0]=m[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&c.getById&&9===b.nodeType&&n&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(ab,bb),b)||[])[0],!b)return e;a=a.slice(i.shift().value.length)}h=V.needsContext.test(a)?0:i.length;while(h--){if(j=i[h],d.relative[k=j.type])break;if((l=d.find[k])&&(f=l(j.matches[0].replace(ab,bb),$.test(i[0].type)&&mb(b.parentNode)||b))){if(i.splice(h,1),a=f.length&&pb(i),!a)return G.apply(e,f),e;break}}}return g(a,m)(f,b,!n,e,$.test(a)&&mb(b.parentNode)||b),e}return c.sortStable=s.split("").sort(z).join("")===s,c.detectDuplicates=!!j,k(),c.sortDetached=gb(function(a){return 1&a.compareDocumentPosition(l.createElement("div"))}),gb(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||hb("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&gb(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||hb("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),gb(function(a){return null==a.getAttribute("disabled")})||hb(J,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),db}(a);o.find=t,o.expr=t.selectors,o.expr[":"]=o.expr.pseudos,o.unique=t.uniqueSort,o.text=t.getText,o.isXMLDoc=t.isXML,o.contains=t.contains;var u=o.expr.match.needsContext,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^.[^:#\[\.,]*$/;function x(a,b,c){if(o.isFunction(b))return o.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return o.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(w.test(b))return o.filter(b,a,c);b=o.filter(b,a)}return o.grep(a,function(a){return g.call(b,a)>=0!==c})}o.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?o.find.matchesSelector(d,a)?[d]:[]:o.find.matches(a,o.grep(b,function(a){return 1===a.nodeType}))},o.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(o(a).filter(function(){for(b=0;c>b;b++)if(o.contains(e[b],this))return!0}));for(b=0;c>b;b++)o.find(a,e[b],d);return d=this.pushStack(c>1?o.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(x(this,a||[],!1))},not:function(a){return this.pushStack(x(this,a||[],!0))},is:function(a){return!!x(this,"string"==typeof a&&u.test(a)?o(a):a||[],!1).length}});var y,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=o.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||y).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof o?b[0]:b,o.merge(this,o.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:m,!0)),v.test(c[1])&&o.isPlainObject(b))for(c in b)o.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}return d=m.getElementById(c[2]),d&&d.parentNode&&(this.length=1,this[0]=d),this.context=m,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):o.isFunction(a)?"undefined"!=typeof y.ready?y.ready(a):a(o):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),o.makeArray(a,this))};A.prototype=o.fn,y=o(m);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};o.extend({dir:function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&o(a).is(c))break;d.push(a)}return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),o.fn.extend({has:function(a){var b=o(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(o.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=u.test(a)||"string"!=typeof a?o(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&o.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?o.unique(f):f)},index:function(a){return a?"string"==typeof a?g.call(o(a),this[0]):g.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(o.unique(o.merge(this.get(),o(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){while((a=a[b])&&1!==a.nodeType);return a}o.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return o.dir(a,"parentNode")},parentsUntil:function(a,b,c){return o.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return o.dir(a,"nextSibling")},prevAll:function(a){return o.dir(a,"previousSibling")},nextUntil:function(a,b,c){return o.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return o.dir(a,"previousSibling",c)},siblings:function(a){return o.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return o.sibling(a.firstChild)},contents:function(a){return a.contentDocument||o.merge([],a.childNodes)}},function(a,b){o.fn[a]=function(c,d){var e=o.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=o.filter(d,e)),this.length>1&&(C[a]||o.unique(e),B.test(a)&&e.reverse()),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return o.each(a.match(E)||[],function(a,c){b[c]=!0}),b}o.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):o.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(b=a.memory&&l,c=!0,g=e||0,e=0,f=h.length,d=!0;h&&f>g;g++)if(h[g].apply(l[0],l[1])===!1&&a.stopOnFalse){b=!1;break}d=!1,h&&(i?i.length&&j(i.shift()):b?h=[]:k.disable())},k={add:function(){if(h){var c=h.length;!function g(b){o.each(b,function(b,c){var d=o.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&g(c)})}(arguments),d?f=h.length:b&&(e=c,j(b))}return this},remove:function(){return h&&o.each(arguments,function(a,b){var c;while((c=o.inArray(b,h,c))>-1)h.splice(c,1),d&&(f>=c&&f--,g>=c&&g--)}),this},has:function(a){return a?o.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],f=0,this},disable:function(){return h=i=b=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,b||k.disable(),this},locked:function(){return!i},fireWith:function(a,b){return!h||c&&!i||(b=b||[],b=[a,b.slice?b.slice():b],d?i.push(b):j(b)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!c}};return k},o.extend({Deferred:function(a){var b=[["resolve","done",o.Callbacks("once memory"),"resolved"],["reject","fail",o.Callbacks("once memory"),"rejected"],["notify","progress",o.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return o.Deferred(function(c){o.each(b,function(b,f){var g=o.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&o.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?o.extend(a,d):d}},e={};return d.pipe=d.then,o.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&o.isFunction(a.promise)?e:0,g=1===f?a:o.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&o.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;o.fn.ready=function(a){return o.ready.promise().done(a),this},o.extend({isReady:!1,readyWait:1,holdReady:function(a){a?o.readyWait++:o.ready(!0)},ready:function(a){(a===!0?--o.readyWait:o.isReady)||(o.isReady=!0,a!==!0&&--o.readyWait>0||(H.resolveWith(m,[o]),o.fn.trigger&&o(m).trigger("ready").off("ready")))}});function I(){m.removeEventListener("DOMContentLoaded",I,!1),a.removeEventListener("load",I,!1),o.ready()}o.ready.promise=function(b){return H||(H=o.Deferred(),"complete"===m.readyState?setTimeout(o.ready):(m.addEventListener("DOMContentLoaded",I,!1),a.addEventListener("load",I,!1))),H.promise(b)},o.ready.promise();var J=o.access=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===o.type(c)){e=!0;for(h in c)o.access(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,o.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(o(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f};o.acceptData=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function K(){Object.defineProperty(this.cache={},0,{get:function(){return{}}}),this.expando=o.expando+Math.random()}K.uid=1,K.accepts=o.acceptData,K.prototype={key:function(a){if(!K.accepts(a))return 0;var b={},c=a[this.expando];if(!c){c=K.uid++;try{b[this.expando]={value:c},Object.defineProperties(a,b)}catch(d){b[this.expando]=c,o.extend(a,b)}}return this.cache[c]||(this.cache[c]={}),c},set:function(a,b,c){var d,e=this.key(a),f=this.cache[e];if("string"==typeof b)f[b]=c;else if(o.isEmptyObject(f))o.extend(this.cache[e],b);else for(d in b)f[d]=b[d];return f},get:function(a,b){var c=this.cache[this.key(a)];return void 0===b?c:c[b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,o.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=this.key(a),g=this.cache[f];if(void 0===b)this.cache[f]={};else{o.isArray(b)?d=b.concat(b.map(o.camelCase)):(e=o.camelCase(b),b in g?d=[b,e]:(d=e,d=d in g?[d]:d.match(E)||[])),c=d.length;while(c--)delete g[d[c]]}},hasData:function(a){return!o.isEmptyObject(this.cache[a[this.expando]]||{})},discard:function(a){a[this.expando]&&delete this.cache[a[this.expando]]}};var L=new K,M=new K,N=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,O=/([A-Z])/g;function P(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(O,"-$1").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:N.test(c)?o.parseJSON(c):c}catch(e){}M.set(a,b,c)}else c=void 0;return c}o.extend({hasData:function(a){return M.hasData(a)||L.hasData(a)},data:function(a,b,c){return M.access(a,b,c)},removeData:function(a,b){M.remove(a,b)},_data:function(a,b,c){return L.access(a,b,c)},_removeData:function(a,b){L.remove(a,b)}}),o.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=M.get(f),1===f.nodeType&&!L.get(f,"hasDataAttrs"))){c=g.length; -while(c--)d=g[c].name,0===d.indexOf("data-")&&(d=o.camelCase(d.slice(5)),P(f,d,e[d]));L.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){M.set(this,a)}):J(this,function(b){var c,d=o.camelCase(a);if(f&&void 0===b){if(c=M.get(f,a),void 0!==c)return c;if(c=M.get(f,d),void 0!==c)return c;if(c=P(f,d,void 0),void 0!==c)return c}else this.each(function(){var c=M.get(this,d);M.set(this,d,b),-1!==a.indexOf("-")&&void 0!==c&&M.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){M.remove(this,a)})}}),o.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=L.get(a,b),c&&(!d||o.isArray(c)?d=L.access(a,b,o.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=o.queue(a,b),d=c.length,e=c.shift(),f=o._queueHooks(a,b),g=function(){o.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return L.get(a,c)||L.access(a,c,{empty:o.Callbacks("once memory").add(function(){L.remove(a,[b+"queue",c])})})}}),o.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var U="undefined";l.focusinBubbles="onfocusin"in a;var V=/^key/,W=/^(?:mouse|contextmenu)|click/,X=/^(?:focusinfocus|focusoutblur)$/,Y=/^([^.]*)(?:\.(.+)|)$/;function Z(){return!0}function $(){return!1}function _(){try{return m.activeElement}catch(a){}}o.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=o.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return typeof o!==U&&o.event.triggered!==b.type?o.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(E)||[""],j=b.length;while(j--)h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n&&(l=o.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=o.event.special[n]||{},k=o.extend({type:n,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&o.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(n,g,!1)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),o.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,p,q,r=L.hasData(a)&&L.get(a);if(r&&(i=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=Y.exec(b[j])||[],n=q=h[1],p=(h[2]||"").split(".").sort(),n){l=o.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||o.removeEvent(a,n,r.handle),delete i[n])}else for(n in i)o.event.remove(a,n+b[j],c,d,!0);o.isEmptyObject(i)&&(delete r.handle,L.remove(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,p=[d||m],q=j.call(b,"type")?b.type:b,r=j.call(b,"namespace")?b.namespace.split("."):[];if(g=h=d=d||m,3!==d.nodeType&&8!==d.nodeType&&!X.test(q+o.event.triggered)&&(q.indexOf(".")>=0&&(r=q.split("."),q=r.shift(),r.sort()),k=q.indexOf(":")<0&&"on"+q,b=b[o.expando]?b:new o.Event(q,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=r.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+r.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:o.makeArray(c,[b]),n=o.event.special[q]||{},e||!n.trigger||n.trigger.apply(d,c)!==!1)){if(!e&&!n.noBubble&&!o.isWindow(d)){for(i=n.delegateType||q,X.test(i+q)||(g=g.parentNode);g;g=g.parentNode)p.push(g),h=g;h===(d.ownerDocument||m)&&p.push(h.defaultView||h.parentWindow||a)}f=0;while((g=p[f++])&&!b.isPropagationStopped())b.type=f>1?i:n.bindType||q,l=(L.get(g,"events")||{})[b.type]&&L.get(g,"handle"),l&&l.apply(g,c),l=k&&g[k],l&&l.apply&&o.acceptData(g)&&(b.result=l.apply(g,c),b.result===!1&&b.preventDefault());return b.type=q,e||b.isDefaultPrevented()||n._default&&n._default.apply(p.pop(),c)!==!1||!o.acceptData(d)||k&&o.isFunction(d[q])&&!o.isWindow(d)&&(h=d[k],h&&(d[k]=null),o.event.triggered=q,d[q](),o.event.triggered=void 0,h&&(d[k]=h)),b.result}},dispatch:function(a){a=o.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(L.get(this,"events")||{})[a.type]||[],k=o.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=o.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(g.namespace))&&(a.handleObj=g,a.data=g.data,e=((o.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(a.result=e)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!==this;i=i.parentNode||this)if(i.disabled!==!0||"click"!==a.type){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?o(e,this).index(i)>=0:o.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,bb=/<([\w:]+)/,cb=/<|&#?\w+;/,db=/<(?:script|style|link)/i,eb=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/^$|\/(?:java|ecma)script/i,gb=/^true\/(.*)/,hb=/^\s*\s*$/g,ib={option:[1,""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};ib.optgroup=ib.option,ib.tbody=ib.tfoot=ib.colgroup=ib.caption=ib.thead,ib.th=ib.td;function jb(a,b){return o.nodeName(a,"table")&&o.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function kb(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function lb(a){var b=gb.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function mb(a,b){for(var c=0,d=a.length;d>c;c++)L.set(a[c],"globalEval",!b||L.get(b[c],"globalEval"))}function nb(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(L.hasData(a)&&(f=L.access(a),g=L.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)o.event.add(b,e,j[e][c])}M.hasData(a)&&(h=M.access(a),i=o.extend({},h),M.set(b,i))}}function ob(a,b){var c=a.getElementsByTagName?a.getElementsByTagName(b||"*"):a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&o.nodeName(a,b)?o.merge([a],c):c}function pb(a,b){var c=b.nodeName.toLowerCase();"input"===c&&T.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}o.extend({clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=o.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||o.isXMLDoc(a)))for(g=ob(h),f=ob(a),d=0,e=f.length;e>d;d++)pb(f[d],g[d]);if(b)if(c)for(f=f||ob(a),g=g||ob(h),d=0,e=f.length;e>d;d++)nb(f[d],g[d]);else nb(a,h);return g=ob(h,"script"),g.length>0&&mb(g,!i&&ob(a,"script")),h},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,k=b.createDocumentFragment(),l=[],m=0,n=a.length;n>m;m++)if(e=a[m],e||0===e)if("object"===o.type(e))o.merge(l,e.nodeType?[e]:e);else if(cb.test(e)){f=f||k.appendChild(b.createElement("div")),g=(bb.exec(e)||["",""])[1].toLowerCase(),h=ib[g]||ib._default,f.innerHTML=h[1]+e.replace(ab,"<$1>")+h[2],j=h[0];while(j--)f=f.lastChild;o.merge(l,f.childNodes),f=k.firstChild,f.textContent=""}else l.push(b.createTextNode(e));k.textContent="",m=0;while(e=l[m++])if((!d||-1===o.inArray(e,d))&&(i=o.contains(e.ownerDocument,e),f=ob(k.appendChild(e),"script"),i&&mb(f),c)){j=0;while(e=f[j++])fb.test(e.type||"")&&c.push(e)}return k},cleanData:function(a){for(var b,c,d,e,f,g,h=o.event.special,i=0;void 0!==(c=a[i]);i++){if(o.acceptData(c)&&(f=c[L.expando],f&&(b=L.cache[f]))){if(d=Object.keys(b.events||{}),d.length)for(g=0;void 0!==(e=d[g]);g++)h[e]?o.event.remove(c,e):o.removeEvent(c,e,b.handle);L.cache[f]&&delete L.cache[f]}delete M.cache[c[M.expando]]}}}),o.fn.extend({text:function(a){return J(this,function(a){return void 0===a?o.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=jb(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?o.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||o.cleanData(ob(c)),c.parentNode&&(b&&o.contains(c.ownerDocument,c)&&mb(ob(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(o.cleanData(ob(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return o.clone(this,a,b)})},html:function(a){return J(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!db.test(a)&&!ib[(bb.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ab,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(o.cleanData(ob(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,o.cleanData(ob(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,k=this.length,m=this,n=k-1,p=a[0],q=o.isFunction(p);if(q||k>1&&"string"==typeof p&&!l.checkClone&&eb.test(p))return this.each(function(c){var d=m.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(k&&(c=o.buildFragment(a,this[0].ownerDocument,!1,this),d=c.firstChild,1===c.childNodes.length&&(c=d),d)){for(f=o.map(ob(c,"script"),kb),g=f.length;k>j;j++)h=c,j!==n&&(h=o.clone(h,!0,!0),g&&o.merge(f,ob(h,"script"))),b.call(this[j],h,j);if(g)for(i=f[f.length-1].ownerDocument,o.map(f,lb),j=0;g>j;j++)h=f[j],fb.test(h.type||"")&&!L.access(h,"globalEval")&&o.contains(i,h)&&(h.src?o._evalUrl&&o._evalUrl(h.src):o.globalEval(h.textContent.replace(hb,"")))}return this}}),o.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){o.fn[a]=function(a){for(var c,d=[],e=o(a),g=e.length-1,h=0;g>=h;h++)c=h===g?this:this.clone(!0),o(e[h])[b](c),f.apply(d,c.get());return this.pushStack(d)}});var qb,rb={};function sb(b,c){var d=o(c.createElement(b)).appendTo(c.body),e=a.getDefaultComputedStyle?a.getDefaultComputedStyle(d[0]).display:o.css(d[0],"display");return d.detach(),e}function tb(a){var b=m,c=rb[a];return c||(c=sb(a,b),"none"!==c&&c||(qb=(qb||o("