kamishibai 0.6.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +1 -0
- data/LICENSE +29 -0
- data/README.md +91 -0
- data/bin/kamishibai +59 -0
- data/changelogs.txt +6 -0
- data/images/reading.jpg +0 -0
- data/images/settings.jpg +0 -0
- data/images/view_browse.jpg +0 -0
- data/images/view_dir.jpg +0 -0
- data/kamishibai.gemspec +31 -0
- data/lib/kamishibai.rb +35 -0
- data/lib/kamishibai/book.rb +97 -0
- data/lib/kamishibai/config.rb +90 -0
- data/lib/kamishibai/database.rb +330 -0
- data/lib/kamishibai/functions.rb +332 -0
- data/lib/kamishibai/patches.rb +58 -0
- data/lib/kamishibai/version.rb +7 -0
- data/lib/kamishibai/webserver.rb +502 -0
- data/lib/kamishibai/webserver_cmds.rb +26 -0
- data/lib/kamishibai/webserver_config.rb +91 -0
- data/lib/kamishibai/webserver_filemanager.rb +29 -0
- data/lib/kamishibai/webserver_tablet.rb +259 -0
- data/lib/kamishibai/workers.rb +39 -0
- data/public/css/browse.css +390 -0
- data/public/css/config.css +3 -0
- data/public/css/reader.css +119 -0
- data/public/css/styles.css +30 -0
- data/public/css/tablet_browse.css +247 -0
- data/public/css/tablet_reader.css +323 -0
- data/public/css/tablet_reader_input.css +191 -0
- data/public/images/ajax-loader.gif +0 -0
- data/public/images/delete.png +0 -0
- data/public/images/folder-mini-up.png +0 -0
- data/public/images/folder-mini.png +0 -0
- data/public/images/spinner.gif +0 -0
- data/public/images/trash-empty-mini.png +0 -0
- data/public/images/trash-full-mini.png +0 -0
- data/public/js/browse.js +391 -0
- data/public/js/config.js +190 -0
- data/public/js/reader.js +497 -0
- data/public/js/swipeview-k.js +478 -0
- data/public/js/tablet3.js +241 -0
- data/public/js/tablet3_browse.js +173 -0
- data/public/js/tablet3_reader.js +534 -0
- data/public/js/utilities.js +170 -0
- data/public/lang/k-cn.json +82 -0
- data/public/lang/k-en.json +82 -0
- data/public/lang/k-ja.json +82 -0
- data/public/vendor/css/bootstrap-slider.css +252 -0
- data/public/vendor/css/bootstrap-theme.css +476 -0
- data/public/vendor/css/bootstrap-theme.css.map +1 -0
- data/public/vendor/css/bootstrap-theme.min.css +5 -0
- data/public/vendor/css/bootstrap.css +6584 -0
- data/public/vendor/css/bootstrap.css.map +1 -0
- data/public/vendor/css/bootstrap.min.css +5 -0
- data/public/vendor/css/jquery-ui-1.10.0.custom.css +1614 -0
- data/public/vendor/css/jquery.mobile-1.3.1.min.css +3 -0
- data/public/vendor/css/jqueryFileTree.css +91 -0
- data/public/vendor/fonts/glyphicons-halflings-regular.eot +0 -0
- data/public/vendor/fonts/glyphicons-halflings-regular.svg +288 -0
- data/public/vendor/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/public/vendor/fonts/glyphicons-halflings-regular.woff +0 -0
- data/public/vendor/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/public/vendor/images/application.png +0 -0
- data/public/vendor/images/code.png +0 -0
- data/public/vendor/images/css.png +0 -0
- data/public/vendor/images/db.png +0 -0
- data/public/vendor/images/dim.png +0 -0
- data/public/vendor/images/directory.png +0 -0
- data/public/vendor/images/doc.png +0 -0
- data/public/vendor/images/file.png +0 -0
- data/public/vendor/images/film.png +0 -0
- data/public/vendor/images/flash.png +0 -0
- data/public/vendor/images/folder_open.png +0 -0
- data/public/vendor/images/grey.png +0 -0
- data/public/vendor/images/html.png +0 -0
- data/public/vendor/images/icons-18-black.png +0 -0
- data/public/vendor/images/icons-18-white.png +0 -0
- data/public/vendor/images/icons-36-black.png +0 -0
- data/public/vendor/images/icons-36-white.png +0 -0
- data/public/vendor/images/java.png +0 -0
- data/public/vendor/images/linux.png +0 -0
- data/public/vendor/images/music.png +0 -0
- data/public/vendor/images/pdf.png +0 -0
- data/public/vendor/images/php.png +0 -0
- data/public/vendor/images/picture.png +0 -0
- data/public/vendor/images/ppt.png +0 -0
- data/public/vendor/images/psd.png +0 -0
- data/public/vendor/images/ruby.png +0 -0
- data/public/vendor/images/script.png +0 -0
- data/public/vendor/images/spinner.gif +0 -0
- data/public/vendor/images/txt.png +0 -0
- data/public/vendor/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
- data/public/vendor/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
- data/public/vendor/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
- data/public/vendor/images/ui-bg_flat_10_000000_40x100.png +0 -0
- data/public/vendor/images/ui-bg_flat_30_cccccc_40x100.png +0 -0
- data/public/vendor/images/ui-bg_flat_50_5c5c5c_40x100.png +0 -0
- data/public/vendor/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
- data/public/vendor/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
- data/public/vendor/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
- data/public/vendor/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
- data/public/vendor/images/ui-bg_glass_20_555555_1x400.png +0 -0
- data/public/vendor/images/ui-bg_glass_40_0078a3_1x400.png +0 -0
- data/public/vendor/images/ui-bg_glass_40_ffc73d_1x400.png +0 -0
- data/public/vendor/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
- data/public/vendor/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
- data/public/vendor/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
- data/public/vendor/images/ui-bg_glass_75_dadada_1x400.png +0 -0
- data/public/vendor/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
- data/public/vendor/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
- data/public/vendor/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
- data/public/vendor/images/ui-bg_gloss-wave_25_333333_500x100.png +0 -0
- data/public/vendor/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
- data/public/vendor/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
- data/public/vendor/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
- data/public/vendor/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
- data/public/vendor/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
- data/public/vendor/images/ui-bg_highlight-soft_80_eeeeee_1x100.png +0 -0
- data/public/vendor/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
- data/public/vendor/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
- data/public/vendor/images/ui-bg_inset-soft_25_000000_1x100.png +0 -0
- data/public/vendor/images/ui-bg_inset-soft_30_f58400_1x100.png +0 -0
- data/public/vendor/images/ui-icons_217bc0_256x240.png +0 -0
- data/public/vendor/images/ui-icons_222222_256x240.png +0 -0
- data/public/vendor/images/ui-icons_228ef1_256x240.png +0 -0
- data/public/vendor/images/ui-icons_2e83ff_256x240.png +0 -0
- data/public/vendor/images/ui-icons_454545_256x240.png +0 -0
- data/public/vendor/images/ui-icons_469bdd_256x240.png +0 -0
- data/public/vendor/images/ui-icons_4b8e0b_256x240.png +0 -0
- data/public/vendor/images/ui-icons_6da8d5_256x240.png +0 -0
- data/public/vendor/images/ui-icons_888888_256x240.png +0 -0
- data/public/vendor/images/ui-icons_a83300_256x240.png +0 -0
- data/public/vendor/images/ui-icons_cccccc_256x240.png +0 -0
- data/public/vendor/images/ui-icons_cd0a0a_256x240.png +0 -0
- data/public/vendor/images/ui-icons_d8e7f3_256x240.png +0 -0
- data/public/vendor/images/ui-icons_ef8c08_256x240.png +0 -0
- data/public/vendor/images/ui-icons_f9bd01_256x240.png +0 -0
- data/public/vendor/images/ui-icons_ffd27a_256x240.png +0 -0
- data/public/vendor/images/ui-icons_ffffff_256x240.png +0 -0
- data/public/vendor/images/xls.png +0 -0
- data/public/vendor/images/zip.png +0 -0
- data/public/vendor/js/bootstrap-slider.js +1550 -0
- data/public/vendor/js/bootstrap.js +2317 -0
- data/public/vendor/js/bootstrap.min.js +7 -0
- data/public/vendor/js/jquery-2.1.4.js +9210 -0
- data/public/vendor/js/jquery-2.1.4.min.js +4 -0
- data/public/vendor/js/jquery-2.1.4.min.map +1 -0
- data/public/vendor/js/jquery-ui-1.10.2.custom.min.js +7 -0
- data/public/vendor/js/jquery.cookie.js +72 -0
- data/public/vendor/js/jquery.hammer.min.js +7 -0
- data/public/vendor/js/jquery.lazyload.min.js +15 -0
- data/public/vendor/js/jquery.localize.js +180 -0
- data/public/vendor/js/jquery.mobile-1.3.1.min.js +7 -0
- data/public/vendor/js/jquery.scrollTo-1.4.3.1.js +218 -0
- data/public/vendor/js/jqueryFileTree.js +95 -0
- data/public/vendor/js/swipeview.js +471 -0
- data/views/browse.haml +97 -0
- data/views/config.haml +115 -0
- data/views/layout.haml +12 -0
- data/views/login.haml +51 -0
- data/views/reader.haml +70 -0
- data/views/statistics.haml +108 -0
- data/views/tablet3.haml +80 -0
- metadata +334 -0
data/public/js/config.js
ADDED
@@ -0,0 +1,190 @@
|
|
1
|
+
/*!
|
2
|
+
License: refer to LICENSE file
|
3
|
+
*/
|
4
|
+
|
5
|
+
/*
|
6
|
+
* On page load functions
|
7
|
+
*/
|
8
|
+
|
9
|
+
// global variables
|
10
|
+
var g_prefs = new Object();
|
11
|
+
var hasFocus = false;
|
12
|
+
|
13
|
+
$(function(e) {
|
14
|
+
// on page init
|
15
|
+
|
16
|
+
// load the text localization
|
17
|
+
reload_locale();
|
18
|
+
|
19
|
+
// load drives
|
20
|
+
for (i in drives) {
|
21
|
+
var c = "load_dir('" + drives[i] + "/')";
|
22
|
+
$('#drives').append("<button class='btn' onclick=\"" + c + ";\">" + drives[i] + "</span>");
|
23
|
+
}
|
24
|
+
|
25
|
+
load_dirs();
|
26
|
+
|
27
|
+
// refresh # of books every 6 seconds
|
28
|
+
interval_total_books = setInterval( function() { total_books(); }, 6000 );
|
29
|
+
});
|
30
|
+
|
31
|
+
// know if browser tab is focused or not
|
32
|
+
$(window).focus(function() {
|
33
|
+
hasFocus = true;
|
34
|
+
})
|
35
|
+
.blur(function() {
|
36
|
+
hasFocus = false;
|
37
|
+
});
|
38
|
+
|
39
|
+
function load_dirs() {
|
40
|
+
$.getScript("/config?get=srcs", function(data) {
|
41
|
+
var dirs = eval(data);
|
42
|
+
|
43
|
+
for (i in dirs) {
|
44
|
+
af_add_dir( dirs[i] );
|
45
|
+
}
|
46
|
+
});
|
47
|
+
}
|
48
|
+
|
49
|
+
function total_books() {
|
50
|
+
if (hasFocus) {
|
51
|
+
$.get("/config?get=total_books", function(data) {
|
52
|
+
$('#total_books').html(data + ' ');
|
53
|
+
});
|
54
|
+
}
|
55
|
+
}
|
56
|
+
|
57
|
+
/*
|
58
|
+
* Preference functions
|
59
|
+
*/
|
60
|
+
|
61
|
+
|
62
|
+
function pref_load() {
|
63
|
+
$.getScript("/config?get=prefs", function(data) {
|
64
|
+
if (data != "") {
|
65
|
+
$('#new_book_days').val( g_prefs['new_book_days'] ).prop('disabled',false);
|
66
|
+
$('#port').val( g_prefs['port'] ).prop('disabled',false);
|
67
|
+
$('#username').val( g_prefs['user'] ).prop('disabled',false);
|
68
|
+
$('#password').val( g_prefs['pass'] ).prop('disabled',false);
|
69
|
+
$('#img_quality').val( g_prefs['quality'] ).prop('disabled',false);
|
70
|
+
|
71
|
+
if ( g_prefs['resize'] ) {
|
72
|
+
$('[name=img_resize]').val('on');
|
73
|
+
}
|
74
|
+
else {
|
75
|
+
$('[name=img_resize]').val('off');
|
76
|
+
}
|
77
|
+
$('#img_resize').prop('disabled',false);
|
78
|
+
|
79
|
+
$('#pref-save').prop('disabled',false);
|
80
|
+
}
|
81
|
+
});
|
82
|
+
}
|
83
|
+
|
84
|
+
function pref_save() {
|
85
|
+
var port = $('#port').val();
|
86
|
+
if ( port < 1024 || port >= 65535 ) {
|
87
|
+
alert( $('#alertPort').text() );
|
88
|
+
return false;
|
89
|
+
}
|
90
|
+
|
91
|
+
var quality = $('#img_quality').val();
|
92
|
+
if ( quality < 0 || quality > 100 ) {
|
93
|
+
alert( $('#alertImageQuality').text() );
|
94
|
+
return false;
|
95
|
+
}
|
96
|
+
|
97
|
+
// redirect page if port is different
|
98
|
+
if ( parseInt( g_prefs['port'] ) != parseInt( $('#port').val() ) ) {
|
99
|
+
var wdl = window.document.location;
|
100
|
+
setTimeout( function() {
|
101
|
+
// window.location.href = wdl.protocol + '//' + wdl.hostname + ':' + nport + wdl.pathname;
|
102
|
+
window.location.href = wdl.protocol + '//' + wdl.hostname + ':' + nport + '/';
|
103
|
+
}, 1500);
|
104
|
+
}
|
105
|
+
|
106
|
+
// go back to browse
|
107
|
+
setTimeout(function() {
|
108
|
+
window.location.href = '/';
|
109
|
+
}, 1600);
|
110
|
+
|
111
|
+
$.post("/config", {
|
112
|
+
set: 'prefs',
|
113
|
+
port: port,
|
114
|
+
user: $('#username').val(),
|
115
|
+
pass: $('#password').val(),
|
116
|
+
resize: $('#img_resize').val(),
|
117
|
+
quality: quality,
|
118
|
+
new_book_days: $('#new_book_days').val()
|
119
|
+
});
|
120
|
+
}
|
121
|
+
|
122
|
+
/*
|
123
|
+
* Add Folder Dialog functions
|
124
|
+
*/
|
125
|
+
function af_close() {
|
126
|
+
$('#addfolder').css('display','none');
|
127
|
+
}
|
128
|
+
|
129
|
+
function load_dir(dir) {
|
130
|
+
$('#af-dirnav').fileTree(
|
131
|
+
{
|
132
|
+
root: dir,
|
133
|
+
script: '/jqueryFileTree',
|
134
|
+
expandSpeed: 1,
|
135
|
+
collapseSpeed: 1,
|
136
|
+
multiFolder: false
|
137
|
+
}, function(file) {
|
138
|
+
alert(file);
|
139
|
+
}
|
140
|
+
);
|
141
|
+
}
|
142
|
+
|
143
|
+
// dir selected from filetree
|
144
|
+
function selected_dir(dir) {
|
145
|
+
$('#path').val(dir);
|
146
|
+
}
|
147
|
+
|
148
|
+
// Add Folder
|
149
|
+
function af_add_dir(dir) {
|
150
|
+
var elem = $('<tr/>');
|
151
|
+
|
152
|
+
$('<td/>',{
|
153
|
+
'class': 'c1 srcdir',
|
154
|
+
'text': dir
|
155
|
+
}).appendTo(elem);
|
156
|
+
|
157
|
+
$('<td/>',{
|
158
|
+
'class': 'c2',
|
159
|
+
'html': '<a href="#" onclick="af_rm_dir(this);" data-localize="config.RemoveFolder"></a>'
|
160
|
+
}).appendTo(elem);
|
161
|
+
|
162
|
+
elem.appendTo('tbody');
|
163
|
+
|
164
|
+
reload_locale();
|
165
|
+
}
|
166
|
+
|
167
|
+
// Remove Folders
|
168
|
+
function af_rm_dir(elem) {
|
169
|
+
$( $(elem) ).parent().parent().remove();
|
170
|
+
}
|
171
|
+
|
172
|
+
// Save Folders (to SRCS)
|
173
|
+
function save_dirs() {
|
174
|
+
var elems = $('.srcdir');
|
175
|
+
var dirs = '';
|
176
|
+
|
177
|
+
for (var i=0; i < elems.length; i++) {
|
178
|
+
dirs += elems.eq(i).text() + '||||';
|
179
|
+
}
|
180
|
+
|
181
|
+
// go back to browse
|
182
|
+
setTimeout(function() {
|
183
|
+
window.location.href = '/';
|
184
|
+
}, 1600);
|
185
|
+
|
186
|
+
$.post("/config", {
|
187
|
+
set: 'srcs',
|
188
|
+
srcs: dirs
|
189
|
+
});
|
190
|
+
}
|
data/public/js/reader.js
ADDED
@@ -0,0 +1,497 @@
|
|
1
|
+
/*!
|
2
|
+
License: refer to LICENSE file
|
3
|
+
*/
|
4
|
+
|
5
|
+
// bookcode
|
6
|
+
var bookcode = getHashParams()['book'];
|
7
|
+
|
8
|
+
// initialize book variables
|
9
|
+
var maxpage;
|
10
|
+
var booktitle;
|
11
|
+
|
12
|
+
// load bookinfo
|
13
|
+
document.write("<script src=\"/bookinfo/" + bookcode + "\"><\/script>");
|
14
|
+
|
15
|
+
|
16
|
+
// record the cookie
|
17
|
+
$.cookie('lastbook' + uport(), bookcode, { path: '/' });
|
18
|
+
|
19
|
+
// get the hash for the page
|
20
|
+
function getpage() {
|
21
|
+
var i = parseInt( getHashParams()['page'] );
|
22
|
+
|
23
|
+
if (typeof i == "number" && ! isNaN(i) ) {
|
24
|
+
return i;
|
25
|
+
}
|
26
|
+
|
27
|
+
return -1;
|
28
|
+
}
|
29
|
+
|
30
|
+
|
31
|
+
$(window).bind('hashchange', function(e) {
|
32
|
+
$('#pageslider').slider('value', getpage());
|
33
|
+
reload_images();
|
34
|
+
preload_images();
|
35
|
+
});
|
36
|
+
|
37
|
+
|
38
|
+
var $slider_flag = false;
|
39
|
+
|
40
|
+
|
41
|
+
$(function() {
|
42
|
+
// page init
|
43
|
+
|
44
|
+
// setup book variable
|
45
|
+
maxpage = book.pages;
|
46
|
+
booktitle = book.title;
|
47
|
+
|
48
|
+
// load the text localization
|
49
|
+
reload_locale();
|
50
|
+
|
51
|
+
// set book title on menu
|
52
|
+
$('#booktitle').html('<h2>' + booktitle + '</h2>');
|
53
|
+
|
54
|
+
|
55
|
+
// set even/odd tab and min value
|
56
|
+
if (getpage() == -1 || getpage() % 2 == 0) {
|
57
|
+
$('#pageeven').click();
|
58
|
+
}
|
59
|
+
else {
|
60
|
+
$('#pageodd').click();
|
61
|
+
}
|
62
|
+
|
63
|
+
|
64
|
+
// setup page slider
|
65
|
+
$('#pageslider').slider({
|
66
|
+
range: 'min',
|
67
|
+
min: 0,
|
68
|
+
max: maxpage,
|
69
|
+
step: 2,
|
70
|
+
value: getpage(),
|
71
|
+
slide: function(event,ui) {
|
72
|
+
$('#pageslider-value').val( ui.value );
|
73
|
+
},
|
74
|
+
start: function(event,ui) {
|
75
|
+
$slider_flag = true
|
76
|
+
},
|
77
|
+
stop: function(event,ui) {
|
78
|
+
window.location.hash = fullhash( ui.value );
|
79
|
+
$slider_flag = false;
|
80
|
+
},
|
81
|
+
change: function(event,ui) {
|
82
|
+
$('#pageslider-value').val( $('#pageslider').slider('value') );
|
83
|
+
|
84
|
+
if ($slider_flag) return false;
|
85
|
+
window.location.hash = fullhash( ui.value );
|
86
|
+
}
|
87
|
+
});
|
88
|
+
$('#pageslider-value').val( $('#pageslider').slider('value') );
|
89
|
+
|
90
|
+
|
91
|
+
if (getpage() == -1) {
|
92
|
+
window.location.hash = fullhash( 0 );
|
93
|
+
}
|
94
|
+
else {
|
95
|
+
// wait until jquery ui fully loaded, then setup page, or some stuff isn't displayed properly
|
96
|
+
reload_images();
|
97
|
+
preload_images();
|
98
|
+
}
|
99
|
+
|
100
|
+
|
101
|
+
/* setup button functions */
|
102
|
+
$('#pagemode')
|
103
|
+
.buttonset()
|
104
|
+
.change(function(e) {
|
105
|
+
/* setting using mouse function and a time delay, or it won't work
|
106
|
+
* bug is probably cause by double trigger and transition time, if it is responded immediately, the called radio will still be stuck at previous selection
|
107
|
+
*/
|
108
|
+
var elem = $('#pageslider');
|
109
|
+
if (isSinglePageMode()) {
|
110
|
+
// set slider step by 1
|
111
|
+
elem.slider('option', 'step', 1);
|
112
|
+
|
113
|
+
// disable set of buttons
|
114
|
+
disable_buttons();
|
115
|
+
}
|
116
|
+
else {
|
117
|
+
// set slider step by 2
|
118
|
+
elem.slider('option', 'step', 2);
|
119
|
+
|
120
|
+
// enable set of buttons
|
121
|
+
enable_buttons();
|
122
|
+
}
|
123
|
+
|
124
|
+
// load images
|
125
|
+
reload_images();
|
126
|
+
});
|
127
|
+
$('#itemsheight')
|
128
|
+
.buttonset()
|
129
|
+
.change(function(e) {
|
130
|
+
if (isNormalHeight()) {
|
131
|
+
/* change to normal height */
|
132
|
+
$('#pagemode').buttonset('enable');
|
133
|
+
}
|
134
|
+
else {
|
135
|
+
/* change to full height */
|
136
|
+
$('#singlepage').click();
|
137
|
+
$('#pagemode').buttonset('disable');
|
138
|
+
}
|
139
|
+
reload_images();
|
140
|
+
});
|
141
|
+
$('#readdirection')
|
142
|
+
.buttonset()
|
143
|
+
.change(function(e) {
|
144
|
+
reload_images();
|
145
|
+
});
|
146
|
+
$('#primarypage')
|
147
|
+
.buttonset()
|
148
|
+
.change(function(e) {
|
149
|
+
console.log('primary change');
|
150
|
+
|
151
|
+
// making the page even or odd page primary
|
152
|
+
if (isEvenPage()) {
|
153
|
+
$('#pageslider').slider('option', 'min', 0);
|
154
|
+
}
|
155
|
+
else {
|
156
|
+
$('#pageslider').slider('option', 'min', 1);
|
157
|
+
}
|
158
|
+
reload_images();
|
159
|
+
});
|
160
|
+
$('#barmode')
|
161
|
+
.buttonset()
|
162
|
+
.change(function(e) {
|
163
|
+
reload_images();
|
164
|
+
});
|
165
|
+
$('#closemenu')
|
166
|
+
.button()
|
167
|
+
.click( function(e) {
|
168
|
+
window.setTimeout( function() { hidemenu(); }, 50 );
|
169
|
+
});
|
170
|
+
$('#gohome')
|
171
|
+
.button()
|
172
|
+
.click( function(e) {
|
173
|
+
window.setTimeout( function() { goHomepage(); }, 50 );
|
174
|
+
});
|
175
|
+
|
176
|
+
});
|
177
|
+
|
178
|
+
function reload_images() {
|
179
|
+
window.setTimeout( function() { exec_reload_images(); }, 50 );
|
180
|
+
}
|
181
|
+
|
182
|
+
function exec_reload_images() {
|
183
|
+
// change title
|
184
|
+
document.title = "(" + getpage() + "/" + maxpage + ")";
|
185
|
+
|
186
|
+
// set bookmark
|
187
|
+
setbookmark();
|
188
|
+
|
189
|
+
// set pageslider's min base on page
|
190
|
+
if (isEvenPage()) {
|
191
|
+
$('#pageslider').slider('option', 'min', 0);
|
192
|
+
}
|
193
|
+
else {
|
194
|
+
$('#pageslider').slider('option', 'min', 1);
|
195
|
+
}
|
196
|
+
|
197
|
+
// set the page to make slider call changes and set the appropriate page
|
198
|
+
$('#pageslider').slider('value', getpage());
|
199
|
+
|
200
|
+
// remove image first then add, instead of changing image source ( otherwise image resize won't work)
|
201
|
+
$('#ileft').remove();
|
202
|
+
$('#ibar').remove();
|
203
|
+
$('#iright').remove();
|
204
|
+
|
205
|
+
// set icontainer height
|
206
|
+
if (isNormalHeight()) {
|
207
|
+
$('#icontainer').addClass('icontainer-normal_height');
|
208
|
+
}
|
209
|
+
else {
|
210
|
+
$('#icontainer').removeClass('icontainer-normal_height');
|
211
|
+
}
|
212
|
+
|
213
|
+
// add left page
|
214
|
+
if (isSinglePageMode()) {
|
215
|
+
//** single page mode **//
|
216
|
+
$('<img />').attr('id','ileft').appendTo('#icontainer');
|
217
|
+
$('#ileft').css('display','none');
|
218
|
+
}
|
219
|
+
else {
|
220
|
+
//** dual page mode **//
|
221
|
+
if (isEasternBook()) {
|
222
|
+
$('<img />').attr('id','ileft').attr("src", "/cbz/" + bookcode + "/" + (getpage() + 1) ).appendTo('#icontainer');
|
223
|
+
}
|
224
|
+
else {
|
225
|
+
$('<img />').attr('id','ileft').attr("src", "/cbz/" + bookcode + "/" + getpage() ).appendTo('#icontainer');
|
226
|
+
}
|
227
|
+
}
|
228
|
+
// set the left image height
|
229
|
+
if (isNormalHeight()) $('#ileft').addClass('normal_height');
|
230
|
+
|
231
|
+
// black bar mode
|
232
|
+
if (isBlackBared()) {
|
233
|
+
// with black bar
|
234
|
+
$('<div></div>').attr('id','ibar').css('display','inline-block').appendTo('#icontainer');
|
235
|
+
}
|
236
|
+
else {
|
237
|
+
// without black bar
|
238
|
+
$('<div></div>').attr('id','ibar').css('display','none').appendTo('#icontainer');
|
239
|
+
}
|
240
|
+
|
241
|
+
// add right image
|
242
|
+
if (isEasternBook()) {
|
243
|
+
$('<img />').attr('id','iright').attr("src", "/cbz/" + bookcode + "/" + getpage() ).appendTo('#icontainer');
|
244
|
+
}
|
245
|
+
else {
|
246
|
+
$('<img />').attr('id','iright').attr("src", "/cbz/" + bookcode + "/" + (getpage() + 1) ).appendTo('#icontainer');
|
247
|
+
}
|
248
|
+
// set the right image height
|
249
|
+
if (isNormalHeight()) {
|
250
|
+
$('#iright').addClass('normal_height');
|
251
|
+
}
|
252
|
+
else {
|
253
|
+
$('#iright').addClass('full_height');
|
254
|
+
}
|
255
|
+
|
256
|
+
/*
|
257
|
+
// adjust image dimention to compesate the single or dual page mode
|
258
|
+
if (isSinglePageMode()) {
|
259
|
+
// single page
|
260
|
+
$('#iright').css('width','100%');
|
261
|
+
$('#iright').css('height','100%');
|
262
|
+
}
|
263
|
+
|
264
|
+
// adjust image width to compensate the bar
|
265
|
+
if (isBlackBared()) {
|
266
|
+
$('#ileft').css('width','49%');
|
267
|
+
$('#iright').css('width','49%');
|
268
|
+
}
|
269
|
+
*/
|
270
|
+
}
|
271
|
+
|
272
|
+
function isEasternBook() {
|
273
|
+
return ( $('#readdirection :radio:checked').attr('id') == 'readtoleft' ) ? true : false;
|
274
|
+
}
|
275
|
+
|
276
|
+
function isNormalHeight() {
|
277
|
+
return ( $('#itemsheight :radio:checked').attr('id') == 'normalheight' ) ? true : false;
|
278
|
+
}
|
279
|
+
|
280
|
+
function isEvenPage() {
|
281
|
+
return ( $('#primarypage :radio:checked').attr('id') == 'pageeven' ) ? true : false;
|
282
|
+
}
|
283
|
+
|
284
|
+
function isOddPage() {
|
285
|
+
return ( $('#primarypage :radio:checked').attr('id') == 'pageodd' ) ? true : false;
|
286
|
+
}
|
287
|
+
|
288
|
+
function isSinglePageMode() {
|
289
|
+
return ( $('#pagemode :radio:checked').attr('id') == 'singlepage' ) ? true : false;
|
290
|
+
}
|
291
|
+
|
292
|
+
function isBlackBared() {
|
293
|
+
return ( $('#barmode :radio:checked').attr('id') == 'yesbar' ) ? true : false;
|
294
|
+
}
|
295
|
+
|
296
|
+
function disable_buttons() {
|
297
|
+
// reset and disable black bar
|
298
|
+
$('#nobar').click();
|
299
|
+
$('#barmode').buttonset('disable');
|
300
|
+
|
301
|
+
// disable page even / odd mode
|
302
|
+
$("#primarypage").buttonset('disable');
|
303
|
+
|
304
|
+
// disable read direction
|
305
|
+
$("#readdirection").buttonset('disable');
|
306
|
+
}
|
307
|
+
|
308
|
+
function enable_buttons() {
|
309
|
+
// enable black bar
|
310
|
+
$('#barmode').buttonset('enable');
|
311
|
+
|
312
|
+
// enable page even / odd mode
|
313
|
+
$('#primarypage').buttonset('enable');
|
314
|
+
|
315
|
+
// enable readdirection
|
316
|
+
$('#readdirection').buttonset('enable');
|
317
|
+
}
|
318
|
+
|
319
|
+
|
320
|
+
|
321
|
+
// keyboard commands
|
322
|
+
document.onkeydown = function(e) {
|
323
|
+
e = e || window.event;
|
324
|
+
|
325
|
+
switch (e.keyCode) {
|
326
|
+
case 39:
|
327
|
+
// right key, next page
|
328
|
+
goNextPages();
|
329
|
+
break;
|
330
|
+
case 32:
|
331
|
+
// space key, next page
|
332
|
+
goNextPages();
|
333
|
+
break;
|
334
|
+
case 37:
|
335
|
+
// left key, previous page
|
336
|
+
goPrevPages();
|
337
|
+
break;
|
338
|
+
case 49:
|
339
|
+
// 1 key, previous page
|
340
|
+
goPrevPages();
|
341
|
+
break;
|
342
|
+
case 27:
|
343
|
+
// escape key
|
344
|
+
goHomepage();
|
345
|
+
// catch this key, stopping the use of escape key from other function/program
|
346
|
+
return false;
|
347
|
+
break;
|
348
|
+
case 192:
|
349
|
+
// ` key, show/hide menu
|
350
|
+
if (($('#menu').css('display')) == 'none') {
|
351
|
+
showmenu();
|
352
|
+
}
|
353
|
+
else {
|
354
|
+
hidemenu();
|
355
|
+
}
|
356
|
+
break;
|
357
|
+
case 13:
|
358
|
+
// enter key, show/hide menu
|
359
|
+
if (($('#menu').css('display')) == 'none') {
|
360
|
+
showmenu();
|
361
|
+
}
|
362
|
+
else {
|
363
|
+
hidemenu();
|
364
|
+
}
|
365
|
+
break;
|
366
|
+
case 65:
|
367
|
+
// a key, normal or full height image
|
368
|
+
if (isNormalHeight()) {
|
369
|
+
/* change to full height */
|
370
|
+
$('#fullheight').click();
|
371
|
+
}
|
372
|
+
else {
|
373
|
+
/* change to normal height */
|
374
|
+
$('#normalheight').click();
|
375
|
+
}
|
376
|
+
break;
|
377
|
+
case 83:
|
378
|
+
// s key, single or double page mode
|
379
|
+
if (isSinglePageMode()) {
|
380
|
+
$('#doublepage').click();
|
381
|
+
}
|
382
|
+
else {
|
383
|
+
$('#singlepage').click();
|
384
|
+
}
|
385
|
+
break;
|
386
|
+
case 69:
|
387
|
+
// e key, eastern or western book mode
|
388
|
+
if (isSinglePageMode()) break;
|
389
|
+
|
390
|
+
if (isEasternBook()) {
|
391
|
+
$('#readtoright').click();
|
392
|
+
}
|
393
|
+
else {
|
394
|
+
$('#readtoleft').click();
|
395
|
+
}
|
396
|
+
break;
|
397
|
+
case 66:
|
398
|
+
// b key, with or without black bar
|
399
|
+
if (isSinglePageMode()) break;
|
400
|
+
|
401
|
+
if (isBlackBared()) {
|
402
|
+
$('#nobar').click();
|
403
|
+
}
|
404
|
+
else {
|
405
|
+
$('#yesbar').click();
|
406
|
+
}
|
407
|
+
break;
|
408
|
+
case 86:
|
409
|
+
// v key, even or odd page as primary page
|
410
|
+
if (isSinglePageMode()) break;
|
411
|
+
|
412
|
+
if (isEvenPage()) {
|
413
|
+
$('#pageodd').click();
|
414
|
+
}
|
415
|
+
else {
|
416
|
+
$('#pageeven').click();
|
417
|
+
}
|
418
|
+
break;
|
419
|
+
}
|
420
|
+
// catch/disable all other keys
|
421
|
+
//return false;
|
422
|
+
}
|
423
|
+
|
424
|
+
|
425
|
+
function goHomepage() {
|
426
|
+
var page = $.cookie('lastbrowse' + uport());
|
427
|
+
|
428
|
+
if (page == undefined) {
|
429
|
+
page = '/';
|
430
|
+
}
|
431
|
+
window.location.href = page;
|
432
|
+
}
|
433
|
+
|
434
|
+
function goNextPages() {
|
435
|
+
if (getpage() < maxpage) {
|
436
|
+
// set increment by 1 or 2 base on page mode
|
437
|
+
var i = isSinglePageMode() ? 1 : 2;
|
438
|
+
|
439
|
+
// change page by changing the slider, otherwise the navigation will have unpredictable or buggy behaviour
|
440
|
+
$('#pageslider').slider('value', getpage() + i );
|
441
|
+
}
|
442
|
+
}
|
443
|
+
|
444
|
+
function goPrevPages() {
|
445
|
+
if (getpage() > 1) {
|
446
|
+
// set increment by 1 or 2 base on page mode
|
447
|
+
var i = isSinglePageMode() ? 1 : 2;
|
448
|
+
|
449
|
+
// change page by changing the slider, otherwise the navigation will have unpredictable or buggy behaviour
|
450
|
+
$('#pageslider').slider('value', getpage() - i );
|
451
|
+
}
|
452
|
+
}
|
453
|
+
|
454
|
+
function showmenu() {
|
455
|
+
$('#menu').css('display','block');
|
456
|
+
}
|
457
|
+
|
458
|
+
function hidemenu() {
|
459
|
+
$('#menu').css('display','none');
|
460
|
+
}
|
461
|
+
|
462
|
+
// function to preload images
|
463
|
+
function preload(arrayOfImages) {
|
464
|
+
// remove old element
|
465
|
+
$('.pl_image').remove();
|
466
|
+
|
467
|
+
// append new hidden image element
|
468
|
+
$(arrayOfImages).each( function() {
|
469
|
+
$('<img />').attr('src',this).appendTo('body').css('display','none').addClass('pl_image');
|
470
|
+
});
|
471
|
+
}
|
472
|
+
|
473
|
+
function preload_images() {
|
474
|
+
// precaching images for fast loading
|
475
|
+
|
476
|
+
var images = [
|
477
|
+
"/cbz/" + bookcode + "/" + (getpage() + 2),
|
478
|
+
"/cbz/" + bookcode + "/" + (getpage() + 3)
|
479
|
+
];
|
480
|
+
|
481
|
+
preload(images);
|
482
|
+
}
|
483
|
+
|
484
|
+
// set the bookmark
|
485
|
+
function setbookmark() {
|
486
|
+
$.ajax({
|
487
|
+
url: "/setbookmark/" + bookcode + "/" + getpage(),
|
488
|
+
beforeSend: function ( xhr ) {
|
489
|
+
xhr.overrideMimeType("text/plain; charset=x-user-defined");
|
490
|
+
}
|
491
|
+
}).done(function ( data ) {
|
492
|
+
if( 1==2 && console && console.log ) {
|
493
|
+
console.log("Sample of data:", data);
|
494
|
+
}
|
495
|
+
});
|
496
|
+
}
|
497
|
+
|