diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a004a78 --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ + +SOURCES = lib/pixastic/pixastic.core.js \ + lib/pixastic/actions/brightness.js \ + lib/pixastic/actions/desaturate.js \ + lib/pixastic/actions/sharpen.js \ + lib/ComicBook.js + +all: reset lib/ComicBook.combined.js lib/ComicBook.min.js clean + +lib/ComicBook.combined.js: ${SOURCES} + cat > $@ $^ + +lib/ComicBook.min.js: lib/ComicBook.combined.js + java -jar bin/closure-complier/compiler.jar --compilation_level SIMPLE_OPTIMIZATIONS --js $< --js_output_file $@ + +reset: + rm lib/ComicBook.min.js + +clean: + rm lib/ComicBook.combined.js diff --git a/bin/closure-complier/COPYING b/bin/closure-complier/COPYING new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/bin/closure-complier/COPYING @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/bin/closure-complier/README b/bin/closure-complier/README new file mode 100644 index 0000000..e6d12c4 --- /dev/null +++ b/bin/closure-complier/README @@ -0,0 +1,292 @@ +/* + * Copyright 2009 The Closure Compiler Authors. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// +// Contents +// + +The Closure Compiler performs checking, instrumentation, and +optimizations on JavaScript code. The purpose of this README is to +explain how to build and run the Closure Compiler. + +The Closure Compiler requires Java 6 or higher. +http://www.java.com/ + + +// +// Building The Closure Compiler +// + +There are three ways to get a Closure Compiler executable. + +1) Use one we built for you. + +Pre-built Closure binaries can be found at +http://code.google.com/p/closure-compiler/downloads/list + + +2) Check out the source and build it with Apache Ant. + +First, check out the full source tree of the Closure Compiler. There +are instructions on how to do this at the project site. +http://code.google.com/p/closure-compiler/source/checkout + +Apache Ant is a cross-platform build tool. +http://ant.apache.org/ + +At the root of the source tree, there is an Ant file named +build.xml. To use it, navigate to the same directory and type the +command + +ant jar + +This will produce a jar file called "build/compiler.jar". + + +3) Check out the source and build it with Eclipse. + +Eclipse is a cross-platform IDE. +http://www.eclipse.org/ + +Under Eclipse's File menu, click "New > Project ..." and create a +"Java Project." You will see an options screen. Give the project a +name, select "Create project from existing source," and choose the +root of the checked-out source tree as the existing directory. Verify +that you are using JRE version 6 or higher. + +Eclipse can use the build.xml file to discover rules. When you +navigate to the build.xml file, you will see all the build rules in +the "Outline" pane. Run the "jar" rule to build the compiler in +build/compiler.jar. + + +// +// Running The Closure Compiler +// + +Once you have the jar binary, running the Closure Compiler is straightforward. + +On the command line, type + +java -jar compiler.jar + +This starts the compiler in interactive mode. Type + +var x = 17 + 25; + +then hit "Enter", then hit "Ctrl-Z" (on Windows) or "Ctrl-D" (on Mac or Linux) +and "Enter" again. The Compiler will respond: + +var x=42; + +The Closure Compiler has many options for reading input from a file, +writing output to a file, checking your code, and running +optimizations. To learn more, type + +java -jar compiler.jar --help + +You can read more detailed documentation about the many flags at +http://code.google.com/closure/compiler/docs/gettingstarted_app.html + + +// +// Compiling Multiple Scripts +// + +If you have multiple scripts, you should compile them all together with +one compile command. + +java -jar compiler.jar --js=in1.js --js=in2.js ... --js_output_file=out.js + +The Closure Compiler will concatenate the files in the order they're +passed at the command line. + +If you need to compile many, many scripts together, you may start to +run into problems with managing dependencies between scripts. You +should check out the Closure Library. It contains functions for +enforcing dependencies between scripts, and a tool called calcdeps.py +that knows how to give scripts to the Closure Compiler in the right +order. + +http://code.google.com/p/closure-library/ + +// +// Licensing +// + +Unless otherwise stated, all source files are licensed under +the Apache License, Version 2.0. + + +----- +Code under: +src/com/google/javascript/rhino +test/com/google/javascript/rhino + +URL: http://www.mozilla.org/rhino +Version: 1.5R3, with heavy modifications +License: Netscape Public License and MPL / GPL dual license + +Description: A partial copy of Mozilla Rhino. Mozilla Rhino is an +implementation of JavaScript for the JVM. The JavaScript parser and +the parse tree data structures were extracted and modified +significantly for use by Google's JavaScript compiler. + +Local Modifications: The packages have been renamespaced. All code not +relavant to parsing has been removed. A JSDoc parser and static typing +system have been added. + + +----- +Code in: +lib/rhino + +Rhino +URL: http://www.mozilla.org/rhino +Version: Trunk +License: Netscape Public License and MPL / GPL dual license + +Description: Mozilla Rhino is an implementation of JavaScript for the JVM. + +Local Modifications: Minor changes to parsing JSDoc that usually get pushed +up-stream to Rhino trunk. + + +----- +Code in: +lib/args4j.jar + +Args4j +URL: https://args4j.dev.java.net/ +Version: 2.0.12 +License: MIT + +Description: +args4j is a small Java class library that makes it easy to parse command line +options/arguments in your CUI application. + +Local Modifications: None. + + +----- +Code in: +lib/guava.jar + +Guava Libraries +URL: http://code.google.com/p/guava-libraries/ +Version: r08 +License: Apache License 2.0 + +Description: Google's core Java libraries. + +Local Modifications: None. + + +----- +Code in: +lib/jsr305.jar + +Annotations for software defect detection +URL: http://code.google.com/p/jsr-305/ +Version: svn revision 47 +License: BSD License + +Description: Annotations for software defect detection. + +Local Modifications: None. + + +----- +Code in: +lib/jarjar.jar + +Jar Jar Links +URL: http://jarjar.googlecode.com/ +Version: 1.1 +License: Apache License 2.0 + +Description: +A utility for repackaging Java libraries. + +Local Modifications: None. + + +---- +Code in: +lib/junit.jar + +JUnit +URL: http://sourceforge.net/projects/junit/ +Version: 4.8.2 +License: Common Public License 1.0 + +Description: A framework for writing and running automated tests in Java. + +Local Modifications: None. + + +--- +Code in: +lib/protobuf-java.jar + +Protocol Buffers +URL: http://code.google.com/p/protobuf/ +Version: 2.3.0 +License: New BSD License + +Description: Supporting libraries for protocol buffers, +an encoding of structured data. + +Local Modifications: None + + +--- +Code in: +lib/ant.jar +lib/ant-launcher.jar + +URL: http://ant.apache.org/bindownload.cgi +Version: 1.8.1 +License: Apache License 2.0 +Description: + Ant is a Java based build tool. In theory it is kind of like "make" + without make's wrinkles and with the full portability of pure java code. + +Local Modifications: None + + +--- +Code in: +lib/json.jar +URL: http://json.org/java/index.html +Version: JSON version 20090211 +License: MIT license +Description: +JSON is a set of java files for use in transmitting data in JSON format. + +Local Modifications: None + +--- +Code in: +tools/maven-ant-tasks-2.1.1.jar +URL: http://maven.apache.org +Version 2.1.1 +License: Apache License 2.0 +Description: + Maven Ant tasks are used to manage dependencies and to install/deploy to + maven repositories. + +Local Modifications: None diff --git a/bin/closure-complier/compiler.jar b/bin/closure-complier/compiler.jar new file mode 100644 index 0000000..62cfdd0 Binary files /dev/null and b/bin/closure-complier/compiler.jar differ diff --git a/css/styles.css b/css/styles.css index bffaf6c..ead1d80 100644 --- a/css/styles.css +++ b/css/styles.css @@ -77,6 +77,16 @@ border-radius: 4px; } +#cb-progress-bar { + width: 200px; + height: 3px; +} + +#cb-progress-bar .ui-widget-header { + background: #86C441; + border-color: #3E7600; +} + #cb-toolbar #cb-comic-info { float: right; line-height: 24px; diff --git a/examples/basic.html b/examples/basic.html new file mode 100755 index 0000000..682480d --- /dev/null +++ b/examples/basic.html @@ -0,0 +1,55 @@ + + + + + Basic + + + + + + + + + + + + + + + + diff --git a/examples/goldenboy/goldenboy_00.jpg b/examples/goldenboy/goldenboy_00.jpg new file mode 100644 index 0000000..348a9ed Binary files /dev/null and b/examples/goldenboy/goldenboy_00.jpg differ diff --git a/examples/goldenboy/goldenboy_01.jpg b/examples/goldenboy/goldenboy_01.jpg new file mode 100644 index 0000000..070e2c8 Binary files /dev/null and b/examples/goldenboy/goldenboy_01.jpg differ diff --git a/examples/goldenboy/goldenboy_02.jpg b/examples/goldenboy/goldenboy_02.jpg new file mode 100644 index 0000000..98ed740 Binary files /dev/null and b/examples/goldenboy/goldenboy_02.jpg differ diff --git a/examples/goldenboy/goldenboy_03.jpg b/examples/goldenboy/goldenboy_03.jpg new file mode 100644 index 0000000..d7657a6 Binary files /dev/null and b/examples/goldenboy/goldenboy_03.jpg differ diff --git a/examples/goldenboy/goldenboy_04.jpg b/examples/goldenboy/goldenboy_04.jpg new file mode 100644 index 0000000..70c23b1 Binary files /dev/null and b/examples/goldenboy/goldenboy_04.jpg differ diff --git a/examples/goldenboy/goldenboy_05.jpg b/examples/goldenboy/goldenboy_05.jpg new file mode 100644 index 0000000..9856078 Binary files /dev/null and b/examples/goldenboy/goldenboy_05.jpg differ diff --git a/examples/goldenboy/goldenboy_06.jpg b/examples/goldenboy/goldenboy_06.jpg new file mode 100644 index 0000000..3d81518 Binary files /dev/null and b/examples/goldenboy/goldenboy_06.jpg differ diff --git a/examples/goldenboy/goldenboy_07.jpg b/examples/goldenboy/goldenboy_07.jpg new file mode 100644 index 0000000..a413000 Binary files /dev/null and b/examples/goldenboy/goldenboy_07.jpg differ diff --git a/examples/goldenboy/goldenboy_08.jpg b/examples/goldenboy/goldenboy_08.jpg new file mode 100644 index 0000000..c3b7586 Binary files /dev/null and b/examples/goldenboy/goldenboy_08.jpg differ diff --git a/examples/goldenboy/goldenboy_09.jpg b/examples/goldenboy/goldenboy_09.jpg new file mode 100644 index 0000000..5684801 Binary files /dev/null and b/examples/goldenboy/goldenboy_09.jpg differ diff --git a/examples/goldenboy/goldenboy_10.jpg b/examples/goldenboy/goldenboy_10.jpg new file mode 100644 index 0000000..3b98022 Binary files /dev/null and b/examples/goldenboy/goldenboy_10.jpg differ diff --git a/examples/goldenboy/goldenboy_11.jpg b/examples/goldenboy/goldenboy_11.jpg new file mode 100644 index 0000000..7c18353 Binary files /dev/null and b/examples/goldenboy/goldenboy_11.jpg differ diff --git a/examples/goldenboy/goldenboy_12.jpg b/examples/goldenboy/goldenboy_12.jpg new file mode 100644 index 0000000..522a5da Binary files /dev/null and b/examples/goldenboy/goldenboy_12.jpg differ diff --git a/examples/goldenboy/goldenboy_13.jpg b/examples/goldenboy/goldenboy_13.jpg new file mode 100644 index 0000000..a212a77 Binary files /dev/null and b/examples/goldenboy/goldenboy_13.jpg differ diff --git a/examples/goldenboy/goldenboy_14.jpg b/examples/goldenboy/goldenboy_14.jpg new file mode 100644 index 0000000..1839320 Binary files /dev/null and b/examples/goldenboy/goldenboy_14.jpg differ diff --git a/examples/goldenboy/goldenboy_15.jpg b/examples/goldenboy/goldenboy_15.jpg new file mode 100644 index 0000000..92afab6 Binary files /dev/null and b/examples/goldenboy/goldenboy_15.jpg differ diff --git a/examples/goldenboy/goldenboy_16.jpg b/examples/goldenboy/goldenboy_16.jpg new file mode 100644 index 0000000..b1dacc0 Binary files /dev/null and b/examples/goldenboy/goldenboy_16.jpg differ diff --git a/examples/goldenboy/goldenboy_17.jpg b/examples/goldenboy/goldenboy_17.jpg new file mode 100644 index 0000000..0318aaf Binary files /dev/null and b/examples/goldenboy/goldenboy_17.jpg differ diff --git a/examples/goldenboy/goldenboy_18.jpg b/examples/goldenboy/goldenboy_18.jpg new file mode 100644 index 0000000..894c9fd Binary files /dev/null and b/examples/goldenboy/goldenboy_18.jpg differ diff --git a/examples/goldenboy/goldenboy_19.jpg b/examples/goldenboy/goldenboy_19.jpg new file mode 100644 index 0000000..88b41f2 Binary files /dev/null and b/examples/goldenboy/goldenboy_19.jpg differ diff --git a/examples/goldenboy/goldenboy_20.jpg b/examples/goldenboy/goldenboy_20.jpg new file mode 100644 index 0000000..595a1e4 Binary files /dev/null and b/examples/goldenboy/goldenboy_20.jpg differ diff --git a/examples/goldenboy/goldenboy_21.jpg b/examples/goldenboy/goldenboy_21.jpg new file mode 100644 index 0000000..95582ec Binary files /dev/null and b/examples/goldenboy/goldenboy_21.jpg differ diff --git a/examples/goldenboy/goldenboy_22.jpg b/examples/goldenboy/goldenboy_22.jpg new file mode 100644 index 0000000..6a2f777 Binary files /dev/null and b/examples/goldenboy/goldenboy_22.jpg differ diff --git a/examples/goldenboy/goldenboy_23.jpg b/examples/goldenboy/goldenboy_23.jpg new file mode 100644 index 0000000..69b458b Binary files /dev/null and b/examples/goldenboy/goldenboy_23.jpg differ diff --git a/examples/goldenboy/goldenboy_24.jpg b/examples/goldenboy/goldenboy_24.jpg new file mode 100644 index 0000000..a287f6e Binary files /dev/null and b/examples/goldenboy/goldenboy_24.jpg differ diff --git a/examples/goldenboy/goldenboy_25.jpg b/examples/goldenboy/goldenboy_25.jpg new file mode 100644 index 0000000..cb814d6 Binary files /dev/null and b/examples/goldenboy/goldenboy_25.jpg differ diff --git a/lib/ComicBook.js b/lib/ComicBook.js index a1f1962..48b1cac 100755 --- a/lib/ComicBook.js +++ b/lib/ComicBook.js @@ -4,28 +4,25 @@ TODOs: Fo sho: - - more smart image preloading, preload in both directions when a comic is loaded in the middle - fix manga mode - trigger preload if requesting valid but not loaded images (can happen if network was interupted) + - loading and generally hackiness of pointer is buggy, fix. - check for html5 feature support where used: diveintohtml5.org/everything.html or www.modernizr.com - - write bin scripts to minify & join all js - when applying enhancements reading position gets lost - - use a loading bar / percentage indicator instead of explictly showing which pages are loading - full browser test - IE9 / FF3.6+ / Chrome / Safari / Opera + - don't inlcude the closure compiler, expect it (or similar) to be installed instead Nice 2 have: - lint - jump to page? - make page draggable with the cursor - enable menu items via config, allow for custom items - - decouple controls from reader api - split out classes into seperate files - offline access - thumbnail browser - - remove jquery dependency in favour of straight js - chrome frame / ExplorerCanvas / non canvas version? - really need to speed up enhancements, try to use webworkers - - refactor so we are not using all these loose shared variables + - refactor so we are not using all these loose shared variables and other nastyness - use custom event emitters instead of hacky code */ @@ -187,9 +184,14 @@ function ComicBook(id, srcs, opts) { */ ComicBook.prototype.control = { - status: $(document.createElement("p")) + status: $(document.createElement("div")) .attr("id", "cb-status") - .addClass("cb-control cb-always-on"), + .addClass("cb-control cb-always-on") + .append( + $(document.createElement("div")) + .attr("id", "cb-progress-bar") + .progressbar() + ), toolbar: $(document.createElement("div")) .attr("id", "cb-toolbar") @@ -262,7 +264,7 @@ function ComicBook(id, srcs, opts) { step: 10, min: -1000, max: 1000, - slide: function(event, ui) { + change: function(event, ui) { ComicBook.prototype.enhance.brightness({ brightness: ui.value }); } }) @@ -271,10 +273,10 @@ function ComicBook(id, srcs, opts) { .append( $("
").slider({ value: 0, - step: 0.1, + step: 0.001, min: 0, max: 1, - slide: function(event, ui) { + change: function(event, ui) { ComicBook.prototype.enhance.brightness({ contrast: ui.value }); } }) @@ -283,10 +285,10 @@ function ComicBook(id, srcs, opts) { .append( $("
").slider({ value: 0, - step: 0.1, + step: 0.001, min: 0, max: 1, - slide: function(event, ui) { + change: function(event, ui) { ComicBook.prototype.enhance.sharpen({ amount: ui.value }); } }) @@ -452,36 +454,56 @@ function ComicBook(id, srcs, opts) { */ ComicBook.prototype.preload = function () { - this.showControl("loadingOverlay"); - var i = pointer; // the current page counter for this method var rendered = false; + var queue = []; - // I am using recursion instead of a forEach loop so that the next image is - // only loaded when the previous one has completely finished - function preload(i) { + this.showControl("loadingOverlay"); + + // loads pages in both directions so you don't have to wait for all pages + // to be loaded before you can scroll backwards + function preload(start, stop) { + + var forward_buffer = 3; // TODO: make this into a config option? + + var j = 0; + var count = 1; + var forward = start; + var backward = start-1; + + while (forward <= stop) { + + if (count > forward_buffer && backward > -1) { + queue.push(backward); + backward--; + count = 0; + } else { + queue.push(forward); + forward++; + } + count++; + } + + while (backward > -1) { + queue.push(backward); + backward--; + } + + loadImage(queue[j]); + } + + function loadImage(i) { var page = new Image(); - - $("#cb-status").text("loading page " + (i + 1) + " of " + no_pages); - page.src = srcs[i]; page.onload = function () { pages[i] = this; loaded.push(i); + queue.splice(0,1); - // start to load from the beginning if loading started midway - if (i === no_pages-1 && loaded.length !== no_pages) { - i = -1; - } - - // there are still more pages to load, do it - if (loaded.length < no_pages) { - i++; - preload(i); - } + $("#cb-progress-bar").progressbar("value", Math.floor((loaded.length / no_pages) * 100)); // double page mode needs an extra page added var buffer = (options.displayMode === "double" && pointer < srcs.length-1) ? 1 : 0; @@ -501,12 +523,16 @@ function ComicBook(id, srcs, opts) { ComicBook.prototype.hideControl("loadingOverlay"); rendered = true; } - if (loaded.length === no_pages) { ComicBook.prototype.hideControl("status") } + + if (queue.length) { + loadImage(i+1); + } else { + $("#cb-status").delay(500).fadeOut(); + } }; } - // manually trigger the first load - preload(i); + preload(i, srcs.length-1); }; ComicBook.prototype.pageLoaded = function (page_no) { @@ -631,7 +657,7 @@ function ComicBook(id, srcs, opts) { ComicBook.prototype.enhance[action](options); }); - var current_page = (options.displayMode === "double" && pointer+2 <= srcs.length) + var current_page = (options.displayMode === "double" && pointer+2 <= srcs.length) ? (pointer+1) + "-" + (pointer+2) : pointer+1 $("#cb-current-page").text(current_page); diff --git a/lib/ComicBook.min.js b/lib/ComicBook.min.js new file mode 100644 index 0000000..c8e7d03 --- /dev/null +++ b/lib/ComicBook.min.js @@ -0,0 +1,39 @@ +var Pixastic=function(){function c(a,g,o){a.addEventListener?a.addEventListener(g,o,!1):a.attachEvent&&a.attachEvent("on"+g,o)}function b(a){var g=!1,o=function(){g||(g=!0,a())};document.write('