merge conflicts
20
Makefile
Normal file
|
@ -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
|
202
bin/closure-complier/COPYING
Normal file
|
@ -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.
|
292
bin/closure-complier/README
Normal file
|
@ -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
|
BIN
bin/closure-complier/compiler.jar
Normal file
|
@ -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;
|
||||
|
|
55
examples/basic.html
Executable file
|
@ -0,0 +1,55 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf8">
|
||||
<title>Basic</title>
|
||||
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
|
||||
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.16/jquery-ui.min.js"></script>
|
||||
<script src="../lib/ComicBook.min.js"></script>
|
||||
|
||||
<link rel="stylesheet" href="../css/reset.css">
|
||||
<link rel="stylesheet" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.7.0/themes/smoothness/jquery-ui.css">
|
||||
<link rel="stylesheet" href="../css/styles.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<canvas id="comic"></canvas>
|
||||
|
||||
<script>
|
||||
var book = new ComicBook('comic', [
|
||||
'goldenboy/goldenboy_00.jpg',
|
||||
'goldenboy/goldenboy_01.jpg',
|
||||
'goldenboy/goldenboy_02.jpg',
|
||||
'goldenboy/goldenboy_03.jpg',
|
||||
'goldenboy/goldenboy_04.jpg',
|
||||
'goldenboy/goldenboy_05.jpg',
|
||||
'goldenboy/goldenboy_06.jpg',
|
||||
'goldenboy/goldenboy_07.jpg',
|
||||
'goldenboy/goldenboy_08.jpg',
|
||||
'goldenboy/goldenboy_09.jpg',
|
||||
'goldenboy/goldenboy_10.jpg',
|
||||
'goldenboy/goldenboy_11.jpg',
|
||||
'goldenboy/goldenboy_12.jpg',
|
||||
'goldenboy/goldenboy_13.jpg',
|
||||
'goldenboy/goldenboy_14.jpg',
|
||||
'goldenboy/goldenboy_15.jpg',
|
||||
'goldenboy/goldenboy_16.jpg',
|
||||
'goldenboy/goldenboy_17.jpg',
|
||||
'goldenboy/goldenboy_18.jpg',
|
||||
'goldenboy/goldenboy_19.jpg',
|
||||
'goldenboy/goldenboy_20.jpg',
|
||||
'goldenboy/goldenboy_21.jpg',
|
||||
'goldenboy/goldenboy_22.jpg',
|
||||
'goldenboy/goldenboy_23.jpg',
|
||||
'goldenboy/goldenboy_24.jpg',
|
||||
'goldenboy/goldenboy_25.jpg'
|
||||
]);
|
||||
book.draw();
|
||||
|
||||
$(window).resize(function(event) {
|
||||
book.draw();
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
BIN
examples/goldenboy/goldenboy_00.jpg
Normal file
After Width: | Height: | Size: 99 KiB |
BIN
examples/goldenboy/goldenboy_01.jpg
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
examples/goldenboy/goldenboy_02.jpg
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
examples/goldenboy/goldenboy_03.jpg
Normal file
After Width: | Height: | Size: 154 KiB |
BIN
examples/goldenboy/goldenboy_04.jpg
Normal file
After Width: | Height: | Size: 158 KiB |
BIN
examples/goldenboy/goldenboy_05.jpg
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
examples/goldenboy/goldenboy_06.jpg
Normal file
After Width: | Height: | Size: 173 KiB |
BIN
examples/goldenboy/goldenboy_07.jpg
Normal file
After Width: | Height: | Size: 177 KiB |
BIN
examples/goldenboy/goldenboy_08.jpg
Normal file
After Width: | Height: | Size: 180 KiB |
BIN
examples/goldenboy/goldenboy_09.jpg
Normal file
After Width: | Height: | Size: 158 KiB |
BIN
examples/goldenboy/goldenboy_10.jpg
Normal file
After Width: | Height: | Size: 159 KiB |
BIN
examples/goldenboy/goldenboy_11.jpg
Normal file
After Width: | Height: | Size: 180 KiB |
BIN
examples/goldenboy/goldenboy_12.jpg
Normal file
After Width: | Height: | Size: 165 KiB |
BIN
examples/goldenboy/goldenboy_13.jpg
Normal file
After Width: | Height: | Size: 182 KiB |
BIN
examples/goldenboy/goldenboy_14.jpg
Normal file
After Width: | Height: | Size: 138 KiB |
BIN
examples/goldenboy/goldenboy_15.jpg
Normal file
After Width: | Height: | Size: 133 KiB |
BIN
examples/goldenboy/goldenboy_16.jpg
Normal file
After Width: | Height: | Size: 167 KiB |
BIN
examples/goldenboy/goldenboy_17.jpg
Normal file
After Width: | Height: | Size: 105 KiB |
BIN
examples/goldenboy/goldenboy_18.jpg
Normal file
After Width: | Height: | Size: 28 KiB |
BIN
examples/goldenboy/goldenboy_19.jpg
Normal file
After Width: | Height: | Size: 115 KiB |
BIN
examples/goldenboy/goldenboy_20.jpg
Normal file
After Width: | Height: | Size: 125 KiB |
BIN
examples/goldenboy/goldenboy_21.jpg
Normal file
After Width: | Height: | Size: 146 KiB |
BIN
examples/goldenboy/goldenboy_22.jpg
Normal file
After Width: | Height: | Size: 129 KiB |
BIN
examples/goldenboy/goldenboy_23.jpg
Normal file
After Width: | Height: | Size: 152 KiB |
BIN
examples/goldenboy/goldenboy_24.jpg
Normal file
After Width: | Height: | Size: 139 KiB |
BIN
examples/goldenboy/goldenboy_25.jpg
Normal file
After Width: | Height: | Size: 173 KiB |
|
@ -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(
|
||||
$("<div id='cb-contrast' class='cb-option'></div>").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(
|
||||
$("<div id='cb-sharpen' class='cb-option'></div>").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);
|
||||
|
||||
|
|
39
lib/ComicBook.min.js
vendored
Normal file
|
@ -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('<script defer src="//:" id="__onload_ie_pixastic__"><\/script>');var e=document.getElementById("__onload_ie_pixastic__");e.onreadystatechange=function(){e.readyState=="complete"&&(e.parentNode.removeChild(e),o())};document.addEventListener&&document.addEventListener("DOMContentLoaded",o,!1);c(window,"load",
|
||||
o)}function k(){for(var a=d("pixastic",null,"img"),g=d("pixastic",null,"canvas"),o=a.concat(g),e=0;e<o.length;e++)(function(){for(var a=o[e],f=[],g=a.className.split(" "),b=0;b<g.length;b++){var d=g[b];d.substring(0,9)=="pixastic-"&&(d=d.substring(9),d!=""&&f.push(d))}if(f.length)if(a.tagName.toLowerCase()=="img")if(g=new Image,g.src=a.src,g.complete)for(g=0;g<f.length;g++)(b=Pixastic.applyAction(a,a,f[g],null))&&(a=b);else g.onload=function(){for(var e=0;e<f.length;e++){var g=Pixastic.applyAction(a,
|
||||
a,f[e],null);g&&(a=g)}};else setTimeout(function(){for(var e=0;e<f.length;e++){var g=Pixastic.applyAction(a,a,f[e],null);g&&(a=g)}},1)})()}function d(a,g,b){var e=[];g==null&&(g=document);b==null&&(b="*");g=g.getElementsByTagName(b);b=g.length;a=RegExp("(^|\\s)"+a+"(\\s|$)");for(i=0,j=0;i<b;i++)a.test(g[i].className)&&(e[j]=g[i],j++);return e}function q(a,g){if(Pixastic.debug)try{switch(g){case "warn":console.warn("Pixastic:",a);break;case "error":console.error("Pixastic:",a);break;default:console.log("Pixastic:",
|
||||
a)}}catch(b){}}typeof pixastic_parseonload!="undefined"&&pixastic_parseonload&&b(k);var n=function(){var a=document.createElement("canvas"),g=!1;try{g=!!(typeof a.getContext=="function"&&a.getContext("2d"))}catch(b){}return function(){return g}}(),h=function(){var a=document.createElement("canvas"),g=!1,b;try{if(typeof a.getContext=="function"&&(b=a.getContext("2d")))g=typeof b.getImageData=="function"}catch(e){}return function(){return g}}(),l=function(){var a=!1,g=document.createElement("canvas");
|
||||
if(n()&&h()){g.width=g.height=1;g=g.getContext("2d");g.fillStyle="rgb(255,0,0)";g.fillRect(0,0,1,1);var b=document.createElement("canvas");b.width=b.height=1;var e=b.getContext("2d");e.fillStyle="rgb(0,0,255)";e.fillRect(0,0,1,1);g.globalAlpha=0.5;g.drawImage(b,0,0);a=g.getImageData(0,0,1,1).data[2]!=255}return function(){return a}}();return{parseOnLoad:!1,debug:!1,applyAction:function(a,b,d,e){var e=e||{},c=a.tagName.toLowerCase()=="canvas";if(c&&Pixastic.Client.isIE())return Pixastic.debug&&q("Tried to process a canvas element but browser is IE."),
|
||||
!1;var f,k,n=!1;Pixastic.Client.hasCanvas()&&(n=!!e.resultCanvas,f=e.resultCanvas||document.createElement("canvas"),k=f.getContext("2d"));var h=a.offsetWidth,l=a.offsetHeight;if(c)h=a.width,l=a.height;if(h==0||l==0)if(a.parentNode==null){var p=a.style.position,m=a.style.left;a.style.position="absolute";a.style.left="-9999px";document.body.appendChild(a);h=a.offsetWidth;l=a.offsetHeight;document.body.removeChild(a);a.style.position=p;a.style.left=m}else{Pixastic.debug&&q("Image has 0 width and/or height.");
|
||||
return}if(d.indexOf("(")>-1&&(p=d,d=p.substr(0,p.indexOf("(")),p=p.match(/\((.*?)\)/),p[1])){p=p[1].split(";");for(m=0;m<p.length;m++)if(thisArg=p[m].split("="),thisArg.length==2)if(thisArg[0]=="rect"){var w=thisArg[1].split(",");e[thisArg[0]]={left:parseInt(w[0],10)||0,top:parseInt(w[1],10)||0,width:parseInt(w[2],10)||0,height:parseInt(w[3],10)||0}}else e[thisArg[0]]=thisArg[1]}e.rect?(e.rect.left=Math.round(e.rect.left),e.rect.top=Math.round(e.rect.top),e.rect.width=Math.round(e.rect.width),e.rect.height=
|
||||
Math.round(e.rect.height)):e.rect={left:0,top:0,width:h,height:l};p=!1;Pixastic.Actions[d]&&typeof Pixastic.Actions[d].process=="function"&&(p=!0);if(!p)return Pixastic.debug&&q('Invalid action "'+d+'". Maybe file not included?'),!1;if(!Pixastic.Actions[d].checkSupport())return Pixastic.debug&&q('Action "'+d+'" not supported by this browser.'),!1;if(Pixastic.Client.hasCanvas()){if(f!==a)f.width=h,f.height=l;if(!n)f.style.width=h+"px",f.style.height=l+"px";k.drawImage(b,0,0,h,l);a.__pixastic_org_image?
|
||||
(f.__pixastic_org_image=a.__pixastic_org_image,f.__pixastic_org_width=a.__pixastic_org_width,f.__pixastic_org_height=a.__pixastic_org_height):(f.__pixastic_org_image=a,f.__pixastic_org_width=h,f.__pixastic_org_height=l)}else if(Pixastic.Client.isIE()&&typeof a.__pixastic_org_style=="undefined")a.__pixastic_org_style=a.style.cssText;b={image:a,canvas:f,width:h,height:l,useData:!0,options:e};if(!Pixastic.Actions[d].process(b))return!1;if(Pixastic.Client.hasCanvas()){b.useData&&Pixastic.Client.hasCanvasImageData()&&
|
||||
(f.getContext("2d").putImageData(b.canvasData,e.rect.left,e.rect.top),f.getContext("2d").fillRect(0,0,0,0));if(!e.leaveDOM){f.title=a.title;f.imgsrc=a.imgsrc;if(!c)f.alt=a.alt;if(!c)f.imgsrc=a.src;f.className=a.className;f.style.cssText=a.style.cssText;f.name=a.name;f.tabIndex=a.tabIndex;f.id=a.id;a.parentNode&&a.parentNode.replaceChild&&a.parentNode.replaceChild(f,a)}return e.resultCanvas=f}return a},prepareData:function(a,b){var d=a.canvas.getContext("2d"),e=a.options.rect,d=d.getImageData(e.left,
|
||||
e.top,e.width,e.height),e=d.data;if(!b)a.canvasData=d;return e},process:function(a,b,d,e){if(a.tagName.toLowerCase()=="img"){var c=new Image;c.src=a.src;if(c.complete){var f=Pixastic.applyAction(a,c,b,d);e&&e(f);return f}else c.onload=function(){var f=Pixastic.applyAction(a,c,b,d);e&&e(f)}}if(a.tagName.toLowerCase()=="canvas")return f=Pixastic.applyAction(a,a,b,d),e&&e(f),f},revert:function(a){if(Pixastic.Client.hasCanvas()){if(a.tagName.toLowerCase()=="canvas"&&a.__pixastic_org_image)return a.width=
|
||||
a.__pixastic_org_width,a.height=a.__pixastic_org_height,a.getContext("2d").drawImage(a.__pixastic_org_image,0,0),a.parentNode&&a.parentNode.replaceChild&&a.parentNode.replaceChild(a.__pixastic_org_image,a),a}else if(Pixastic.Client.isIE()&&typeof a.__pixastic_org_style!="undefined")a.style.cssText=a.__pixastic_org_style},Client:{hasCanvas:n,hasCanvasImageData:h,hasGlobalAlpha:l,isIE:function(){return!!document.all&&!!window.attachEvent&&!window.opera}},Actions:{}}}();
|
||||
Pixastic.Actions.brightness={process:function(c){var b=parseInt(c.options.brightness,10)||0,k=parseFloat(c.options.contrast)||0,d=!!(c.options.legacy&&c.options.legacy!="false");if(d)b=Math.min(150,Math.max(-150,b));else var q=1+Math.min(150,Math.max(-150,b))/150;k=Math.max(0,k+1);if(Pixastic.Client.hasCanvasImageData()){var n=Pixastic.prepareData(c),c=c.options.rect,c=c.width*c.height,h=c*4,l,a;k!=1?d?(d=k,b=(b-128)*k+128):(d=q*k,b=-k*128+128):d?d=1:(d=q,b=0);for(var g,o,e;c--;)n[h]=(g=n[h-=4]*d+
|
||||
b)>255?255:g<0?0:g,n[l]=(o=n[l=h+1]*d+b)>255?255:o<0?0:o,n[a]=(e=n[a=h+2]*d+b)>255?255:e<0?0:e;return!0}},checkSupport:function(){return Pixastic.Client.hasCanvasImageData()}};
|
||||
Pixastic.Actions.desaturate={process:function(c){var b=!!(c.options.average&&c.options.average!="false");if(Pixastic.Client.hasCanvasImageData()){var k=Pixastic.prepareData(c),c=c.options.rect,c=c.width*c.height,d=c*4,q,n;if(b)for(;c--;)k[d-=4]=k[q=d+1]=k[n=d+2]=(k[d]+k[q]+k[n])/3;else for(;c--;)k[d-=4]=k[q=d+1]=k[n=d+2]=k[d]*0.3+k[q]*0.59+k[n]*0.11;return!0}else if(Pixastic.Client.isIE())return c.image.style.filter+=" gray",!0},checkSupport:function(){return Pixastic.Client.hasCanvasImageData()||
|
||||
Pixastic.Client.isIE()}};
|
||||
Pixastic.Actions.sharpen={process:function(c){var b=0;typeof c.options.amount!="undefined"&&(b=parseFloat(c.options.amount)||0);b<0&&(b=0);b>1&&(b=1);if(Pixastic.Client.hasCanvasImageData()){for(var k=Pixastic.prepareData(c),d=Pixastic.prepareData(c,!0),q=15,b=1+3*b,n=[[0,-b,0],[-b,q,-b],[0,-b,0]],h=0,l=0;l<3;l++)for(var a=0;a<3;a++)h+=n[l][a];h=1/h;n=c.options.rect;c=n.width;n=n.height;q*=h;b*=h;h=c*4;l=n;do{var a=(l-1)*h,g=(l==1?0:l-2)*h,o=(l==n?l-1:l)*h,e=c;do{var r=a+(e*4-4),f=g+(e==1?0:e-2)*
|
||||
4,s=o+(e==c?e-1:e)*4,t=(-d[f]-d[r-4]-d[r+4]-d[s])*b+d[r]*q,u=(-d[f+1]-d[r-3]-d[r+5]-d[s+1])*b+d[r+1]*q,f=(-d[f+2]-d[r-2]-d[r+6]-d[s+2])*b+d[r+2]*q;t<0&&(t=0);u<0&&(u=0);f<0&&(f=0);t>255&&(t=255);u>255&&(u=255);f>255&&(f=255);k[r]=t;k[r+1]=u;k[r+2]=f}while(--e)}while(--l);return!0}},checkSupport:function(){return Pixastic.Client.hasCanvasImageData()}};function merge(c,b){var k;typeof b==="undefined"&&(b={});for(k in c)c.hasOwnProperty(k)&&!(k in b)&&(b[k]=c[k]);return b}
|
||||
var ComicBookException={INVALID_PAGE:"invalid page",INVALID_PAGE_TYPE:"invalid page type",UNDEFINED_CONTROL:"undefined control",INVALID_ZOOM_MODE:"invalid zoom mode",INVALID_NAVIGATION_EVENT:"invalid navigation event"};
|
||||
function ComicBook(c,b,k){function d(){var a=window.innerHeight+1;p===!1&&(p=$(document.createElement("div")).attr("id","cb-width-shiv").css({width:"100%",position:"absolute",top:0,zIndex:"-1000"}),$("body").append(p));p.height(a);return p.innerWidth()}function q(){var a=n();a!==m&&f.indexOf(a)>-1&&(m=a,ComicBook.prototype.draw())}function n(){var a=parseInt(location.hash.substring(1),10)-1||0;if(a<0)a=location.hash=0;return a}function h(){e=document.getElementById(l);r=e.getContext("2d");u===!1&&
|
||||
(ComicBook.prototype.renderControls(),u=!0);e.addEventListener("click",ComicBook.prototype.navigation,!1);window.addEventListener("keydown",ComicBook.prototype.navigation,!1);window.addEventListener("hashchange",q,!1)}var l=c;this.srcs=b;var a=merge({displayMode:"double",zoomMode:"fitWidth",manga:!1,enhance:{},keyboard:{next:78,previous:80,toolbar:84,toggleLayout:76}},k),g=b.length,o=[],e,r,f=[],s=1,t=!1,u=!1,v=!1,p=!1,c=n(),m=c<b.length?c:0;ComicBook.prototype.control={status:$(document.createElement("div")).attr("id",
|
||||
"cb-status").addClass("cb-control cb-always-on").append($(document.createElement("div")).attr("id","cb-progress-bar").progressbar()),toolbar:$(document.createElement("div")).attr("id","cb-toolbar").addClass("cb-control").append($(document.createElement("button")).attr("title","close the toolbar").addClass("cb-close").click(function(){ComicBook.prototype.toggleToolbar()})).append($(document.createElement("button")).attr("title","switch between dual and single page modes").addClass("cb-layout "+a.displayMode).click(function(){ComicBook.prototype.toggleLayout()})).append($(document.createElement("button")).attr("title",
|
||||
"tweak the page colors").addClass("cb-color cb-menu-button").click(function(){ComicBook.prototype.toggleControl("color")})).append($(document.createElement("button")).attr("title","zoom out").addClass("cb-zoom-out").click(function(){ComicBook.prototype.zoom(s-0.1)})).append($(document.createElement("button")).attr("title","zoom in").addClass("cb-zoom-in").click(function(){ComicBook.prototype.zoom(s+0.1)})).append($(document.createElement("button")).attr("title","fit to page width").addClass("cb-fit-width").click(function(){a.zoomMode=
|
||||
"fitWidth";ComicBook.prototype.drawPage()})).append($(document.createElement("p")).attr("id","cb-comic-info").append("<span id='cb-current-page'></span> / "+b.length)),color:$(document.createElement("div")).attr("id","cb-color").addClass("cb-control").append("<label for='cb-sharpen'>Brightness</label>").append($("<div id='cb-brightness' class='cb-option'></div>").slider({value:0,step:10,min:-1E3,max:1E3,change:function(a,b){ComicBook.prototype.enhance.brightness({brightness:b.value})}})).append("<label for='cb-sharpen'>Contrast</label>").append($("<div id='cb-contrast' class='cb-option'></div>").slider({value:0,
|
||||
step:0.0010,min:0,max:1,change:function(a,b){ComicBook.prototype.enhance.brightness({contrast:b.value})}})).append("<label for='cb-sharpen'>Sharpen</label>").append($("<div id='cb-sharpen' class='cb-option'></div>").slider({value:0,step:0.0010,min:0,max:1,change:function(a,b){ComicBook.prototype.enhance.sharpen({amount:b.value})}})).append($(document.createElement("div")).addClass("cb-option").append("<input type='checkbox' id='cb-desaturate' /> <label for='cb-desaturate'>Desaturate</label>").append("<button id='cb-reset'>reset</button>")),
|
||||
navigation:{left:$(document.createElement("div")).addClass("cb-control cb-navigate cb-always-on left").click(function(){ComicBook.prototype.drawPrevPage()}),right:$(document.createElement("div")).addClass("cb-control cb-navigate cb-always-on right").click(function(){ComicBook.prototype.drawNextPage()})},loadingOverlay:$(document.createElement("div")).attr("id","cb-loading-overlay").addClass("cb-control")};ComicBook.prototype.renderControls=function(){$(e).before(this.getControl("loadingOverlay")).before(this.getControl("status")).after(this.getControl("toolbar").hide()).after(this.getControl("navigation").left).after(this.getControl("navigation").right).after(this.getControl("color").hide());
|
||||
$(".cb-menu-button").click(function(){$(this).toggleClass("active")});$("#cb-desaturate").click(function(){$(this).is(":checked")?ComicBook.prototype.enhance.desaturate():ComicBook.prototype.enhance.resaturate()});$("#cb-reset").click(function(){$("#cb-brightness").slider("value",0);$("#cb-contrast").slider("value",0);$("#cb-saturation").slider("value",0);$("#cb-sharpen").slider("value",0);$("#cb-desaturate").attr("checked",!1);ComicBook.prototype.enhance.reset()})};ComicBook.prototype.getControl=
|
||||
function(a){if(typeof this.control[a]==="undefined")throw ComicBookException.UNDEFINED_CONTROL+" "+a;return this.control[a]};ComicBook.prototype.showControl=function(a){this.getControl(a).show().addClass("open")};ComicBook.prototype.hideControl=function(a){this.getControl(a).removeClass("open").hide()};ComicBook.prototype.toggleControl=function(a){this.getControl(a).toggle().toggleClass("open")};ComicBook.prototype.toggleToolbar=function(){$("#cb-toolbar").is(":visible")?$(".cb-control").not(".cb-always-on").hide():
|
||||
$("#cb-toolbar, .cb-control.open").show()};ComicBook.prototype.toggleLayout=function(){a.displayMode==="double"?($("#cb-toolbar .cb-layout").removeClass("double"),a.displayMode="single"):($("#cb-toolbar .cb-layout").removeClass("single"),a.displayMode="double");$("#cb-toolbar .cb-layout").addClass(a.displayMode);ComicBook.prototype.drawPage()};ComicBook.prototype.getPage=function(a){if(a<0||a>b.length-1)throw ComicBookException.INVALID_PAGE+" "+a;if(typeof o[a]==="object")return o[a];else v=a,this.showControl("loadingOverlay")};
|
||||
ComicBook.prototype.draw=function(){h();$(".cb-control.cb-navigate").outerHeight(window.innerHeight);$("#cb-toolbar").outerWidth(d());$("#cb-loading-overlay").outerWidth(d()).height(window.innerHeight);o.length!==g?this.preload():this.drawPage()};ComicBook.prototype.zoom=function(b){a.zoomMode="manual";s=b;typeof this.getPage(m)==="object"&&this.drawPage()};ComicBook.prototype.preload=function(){function e(d){var h=new Image;h.src=b[d];h.onload=function(){o[d]=this;f.push(d);k.splice(0,1);$("#cb-progress-bar").progressbar("value",
|
||||
Math.floor(f.length/g*100));var h=a.displayMode==="double"&&m<b.length-1?1:0;if(c===!1&&$.inArray(m+h,f)!==-1||typeof v==="number"&&$.inArray(v,f)!==-1)typeof v==="number"&&(m=v-1,v=!1),ComicBook.prototype.drawPage(),ComicBook.prototype.hideControl("loadingOverlay"),c=!0;k.length?e(d+1):$("#cb-status").delay(500).fadeOut()}}var d=m,c=!1,k=[];this.showControl("loadingOverlay");(function(a,b){for(var d=1,f=a,c=a-1;f<=b;)d>3&&c>-1?(k.push(c),c--,d=0):(k.push(f),f++),d++;for(;c>-1;)k.push(c),c--;e(k[0])})(d,
|
||||
b.length-1)};ComicBook.prototype.pageLoaded=function(a){return typeof f[a-1]!=="undefined"};ComicBook.prototype.drawPage=function(c){if(typeof c==="number"&&c<b.length&&c>0&&(m=c-1,!this.pageLoaded(c))){this.showControl("loadingOverlay");return}m<0&&(m=0);var f,g=0,k=0,h=ComicBook.prototype.getPage(m),c=!1;a.displayMode==="double"&&m<b.length-1&&(c=ComicBook.prototype.getPage(m+1));if(typeof h!=="object")throw ComicBookException.INVALID_PAGE_TYPE+" "+typeof h;var l=h.width;e.width=0;e.height=0;if(t=
|
||||
typeof c==="object"&&(h.width>h.height||c.width>c.height)&&a.displayMode==="double")a.displayMode="single";a.displayMode==="double"&&(l+=typeof c==="object"?c.width:l);switch(a.zoomMode){case "manual":document.body.style.overflowX="auto";f=a.displayMode==="double"?s*2:s;break;case "fitWidth":document.body.style.overflowX="hidden";s=f=d()>l?(d()-l)/d()+1:d()/l;break;default:throw ComicBookException.INVALID_ZOOM_MODE+" "+a.zoomMode;}var l=h.width*f,o=h.height*f;f=a.zoomMode==="manual"?h.width*s:l;var p=
|
||||
a.zoomMode==="manual"?h.height*s:o,o=p;e.width=l<d()?d():l;e.height=o<window.innerHeight?window.innerHeight:o;l<d()&&a.zoomMode==="manual"&&(g=(d()-f)/2,a.displayMode==="double"&&(g-=f/2));o<window.innerHeight&&a.zoomMode==="manual"&&(k=(window.innerHeight-p)/2);a.manga&&a.displayMode==="double"&&typeof c==="object"&&(l=h,h=c,c=l);r.drawImage(h,g,k,f,p);a.displayMode==="double"&&typeof c==="object"&&r.drawImage(c,f+g,k,f,p);$.each(a.enhance,function(a,b){ComicBook.prototype.enhance[a](b)});g=a.displayMode===
|
||||
"double"&&m+2<=b.length?m+1+"-"+(m+2):m+1;$("#cb-current-page").text(g);if(t)a.displayMode="double";$("button.cb-fit-width").attr("disabled",a.zoomMode==="fitWidth");$(".cb-navigate").show();m===0&&($(".cb-navigate.left").hide(),$(".cb-navigate.right").show());if(m===b.length-1||typeof c==="object"&&m===b.length-2)$(".cb-navigate.left").show(),$(".cb-navigate.right").hide();typeof a.afterDrawPage==="function"&&a.afterDrawPage(m+1);if(n()!==m)location.hash=m+1;window.scroll(0,0)};ComicBook.prototype.drawNextPage=
|
||||
function(){var b;try{b=this.getPage(m+1)}catch(c){}if(!b)return!1;if(m+1<o.length){m+=a.displayMode==="single"||t?1:2;try{this.drawPage()}catch(e){}}};ComicBook.prototype.drawPrevPage=function(){var b;try{b=this.getPage(m-1)}catch(c){}if(!b)return!1;t=b.width>b.height;m>0&&(m-=a.displayMode==="single"||t?1:2,this.drawPage())};ComicBook.prototype.enhance={reset:function(b){b?delete a.enhance[b]:a.enhance={};ComicBook.prototype.drawPage()},brightness:function(b,c){c!==!1&&this.reset("brightness");var d=
|
||||
merge({brightness:0,contrast:0},b);a.enhance.brightness=d;Pixastic.process(e,"brightness",{brightness:d.brightness,contrast:d.contrast,legacy:!0});h()},desaturate:function(){a.enhance.desaturate={};Pixastic.process(e,"desaturate",{average:!1});h()},resaturate:function(){delete a.enhance.desaturate;ComicBook.prototype.drawPage()},sharpen:function(b){this.desharpen();b=merge({amount:0},b);a.enhance.sharpen=b;Pixastic.process(e,"sharpen",{amount:b.amount});h()},desharpen:function(){delete a.enhance.sharpen;
|
||||
ComicBook.prototype.drawPage()}};ComicBook.prototype.navigation=function(b){if($("#cb-loading-overlay").is(":visible"))return!1;var c=!1;switch(b.type){case "click":ComicBook.prototype.toggleToolbar();break;case "keydown":b.keyCode===a.keyboard.previous&&(c="left");b.keyCode===a.keyboard.next&&(c="right");b.keyCode===a.keyboard.toolbar&&ComicBook.prototype.toggleToolbar();b.keyCode===a.keyboard.toggleLayout&&ComicBook.prototype.toggleLayout();break;default:throw ComicBookException.INVALID_NAVIGATION_EVENT+
|
||||
" "+b.type;}if(c)return b.stopPropagation(),a.manga?(c==="left"&&ComicBook.prototype.drawNextPage(),c==="right"&&ComicBook.prototype.drawPrevPage()):(c==="left"&&ComicBook.prototype.drawPrevPage(),c==="right"&&ComicBook.prototype.drawNextPage()),!1}};
|