kamishibai 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (166) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -0
  3. data/LICENSE +29 -0
  4. data/README.md +91 -0
  5. data/bin/kamishibai +59 -0
  6. data/changelogs.txt +6 -0
  7. data/images/reading.jpg +0 -0
  8. data/images/settings.jpg +0 -0
  9. data/images/view_browse.jpg +0 -0
  10. data/images/view_dir.jpg +0 -0
  11. data/kamishibai.gemspec +31 -0
  12. data/lib/kamishibai.rb +35 -0
  13. data/lib/kamishibai/book.rb +97 -0
  14. data/lib/kamishibai/config.rb +90 -0
  15. data/lib/kamishibai/database.rb +330 -0
  16. data/lib/kamishibai/functions.rb +332 -0
  17. data/lib/kamishibai/patches.rb +58 -0
  18. data/lib/kamishibai/version.rb +7 -0
  19. data/lib/kamishibai/webserver.rb +502 -0
  20. data/lib/kamishibai/webserver_cmds.rb +26 -0
  21. data/lib/kamishibai/webserver_config.rb +91 -0
  22. data/lib/kamishibai/webserver_filemanager.rb +29 -0
  23. data/lib/kamishibai/webserver_tablet.rb +259 -0
  24. data/lib/kamishibai/workers.rb +39 -0
  25. data/public/css/browse.css +390 -0
  26. data/public/css/config.css +3 -0
  27. data/public/css/reader.css +119 -0
  28. data/public/css/styles.css +30 -0
  29. data/public/css/tablet_browse.css +247 -0
  30. data/public/css/tablet_reader.css +323 -0
  31. data/public/css/tablet_reader_input.css +191 -0
  32. data/public/images/ajax-loader.gif +0 -0
  33. data/public/images/delete.png +0 -0
  34. data/public/images/folder-mini-up.png +0 -0
  35. data/public/images/folder-mini.png +0 -0
  36. data/public/images/spinner.gif +0 -0
  37. data/public/images/trash-empty-mini.png +0 -0
  38. data/public/images/trash-full-mini.png +0 -0
  39. data/public/js/browse.js +391 -0
  40. data/public/js/config.js +190 -0
  41. data/public/js/reader.js +497 -0
  42. data/public/js/swipeview-k.js +478 -0
  43. data/public/js/tablet3.js +241 -0
  44. data/public/js/tablet3_browse.js +173 -0
  45. data/public/js/tablet3_reader.js +534 -0
  46. data/public/js/utilities.js +170 -0
  47. data/public/lang/k-cn.json +82 -0
  48. data/public/lang/k-en.json +82 -0
  49. data/public/lang/k-ja.json +82 -0
  50. data/public/vendor/css/bootstrap-slider.css +252 -0
  51. data/public/vendor/css/bootstrap-theme.css +476 -0
  52. data/public/vendor/css/bootstrap-theme.css.map +1 -0
  53. data/public/vendor/css/bootstrap-theme.min.css +5 -0
  54. data/public/vendor/css/bootstrap.css +6584 -0
  55. data/public/vendor/css/bootstrap.css.map +1 -0
  56. data/public/vendor/css/bootstrap.min.css +5 -0
  57. data/public/vendor/css/jquery-ui-1.10.0.custom.css +1614 -0
  58. data/public/vendor/css/jquery.mobile-1.3.1.min.css +3 -0
  59. data/public/vendor/css/jqueryFileTree.css +91 -0
  60. data/public/vendor/fonts/glyphicons-halflings-regular.eot +0 -0
  61. data/public/vendor/fonts/glyphicons-halflings-regular.svg +288 -0
  62. data/public/vendor/fonts/glyphicons-halflings-regular.ttf +0 -0
  63. data/public/vendor/fonts/glyphicons-halflings-regular.woff +0 -0
  64. data/public/vendor/fonts/glyphicons-halflings-regular.woff2 +0 -0
  65. data/public/vendor/images/application.png +0 -0
  66. data/public/vendor/images/code.png +0 -0
  67. data/public/vendor/images/css.png +0 -0
  68. data/public/vendor/images/db.png +0 -0
  69. data/public/vendor/images/dim.png +0 -0
  70. data/public/vendor/images/directory.png +0 -0
  71. data/public/vendor/images/doc.png +0 -0
  72. data/public/vendor/images/file.png +0 -0
  73. data/public/vendor/images/film.png +0 -0
  74. data/public/vendor/images/flash.png +0 -0
  75. data/public/vendor/images/folder_open.png +0 -0
  76. data/public/vendor/images/grey.png +0 -0
  77. data/public/vendor/images/html.png +0 -0
  78. data/public/vendor/images/icons-18-black.png +0 -0
  79. data/public/vendor/images/icons-18-white.png +0 -0
  80. data/public/vendor/images/icons-36-black.png +0 -0
  81. data/public/vendor/images/icons-36-white.png +0 -0
  82. data/public/vendor/images/java.png +0 -0
  83. data/public/vendor/images/linux.png +0 -0
  84. data/public/vendor/images/music.png +0 -0
  85. data/public/vendor/images/pdf.png +0 -0
  86. data/public/vendor/images/php.png +0 -0
  87. data/public/vendor/images/picture.png +0 -0
  88. data/public/vendor/images/ppt.png +0 -0
  89. data/public/vendor/images/psd.png +0 -0
  90. data/public/vendor/images/ruby.png +0 -0
  91. data/public/vendor/images/script.png +0 -0
  92. data/public/vendor/images/spinner.gif +0 -0
  93. data/public/vendor/images/txt.png +0 -0
  94. data/public/vendor/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  95. data/public/vendor/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  96. data/public/vendor/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  97. data/public/vendor/images/ui-bg_flat_10_000000_40x100.png +0 -0
  98. data/public/vendor/images/ui-bg_flat_30_cccccc_40x100.png +0 -0
  99. data/public/vendor/images/ui-bg_flat_50_5c5c5c_40x100.png +0 -0
  100. data/public/vendor/images/ui-bg_flat_55_fbec88_40x100.png +0 -0
  101. data/public/vendor/images/ui-bg_flat_75_ffffff_40x100.png +0 -0
  102. data/public/vendor/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  103. data/public/vendor/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  104. data/public/vendor/images/ui-bg_glass_20_555555_1x400.png +0 -0
  105. data/public/vendor/images/ui-bg_glass_40_0078a3_1x400.png +0 -0
  106. data/public/vendor/images/ui-bg_glass_40_ffc73d_1x400.png +0 -0
  107. data/public/vendor/images/ui-bg_glass_55_fbf9ee_1x400.png +0 -0
  108. data/public/vendor/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  109. data/public/vendor/images/ui-bg_glass_75_d0e5f5_1x400.png +0 -0
  110. data/public/vendor/images/ui-bg_glass_75_dadada_1x400.png +0 -0
  111. data/public/vendor/images/ui-bg_glass_75_e6e6e6_1x400.png +0 -0
  112. data/public/vendor/images/ui-bg_glass_85_dfeffc_1x400.png +0 -0
  113. data/public/vendor/images/ui-bg_glass_95_fef1ec_1x400.png +0 -0
  114. data/public/vendor/images/ui-bg_gloss-wave_25_333333_500x100.png +0 -0
  115. data/public/vendor/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  116. data/public/vendor/images/ui-bg_gloss-wave_55_5c9ccc_500x100.png +0 -0
  117. data/public/vendor/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  118. data/public/vendor/images/ui-bg_highlight-soft_75_cccccc_1x100.png +0 -0
  119. data/public/vendor/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  120. data/public/vendor/images/ui-bg_highlight-soft_80_eeeeee_1x100.png +0 -0
  121. data/public/vendor/images/ui-bg_inset-hard_100_f5f8f9_1x100.png +0 -0
  122. data/public/vendor/images/ui-bg_inset-hard_100_fcfdfd_1x100.png +0 -0
  123. data/public/vendor/images/ui-bg_inset-soft_25_000000_1x100.png +0 -0
  124. data/public/vendor/images/ui-bg_inset-soft_30_f58400_1x100.png +0 -0
  125. data/public/vendor/images/ui-icons_217bc0_256x240.png +0 -0
  126. data/public/vendor/images/ui-icons_222222_256x240.png +0 -0
  127. data/public/vendor/images/ui-icons_228ef1_256x240.png +0 -0
  128. data/public/vendor/images/ui-icons_2e83ff_256x240.png +0 -0
  129. data/public/vendor/images/ui-icons_454545_256x240.png +0 -0
  130. data/public/vendor/images/ui-icons_469bdd_256x240.png +0 -0
  131. data/public/vendor/images/ui-icons_4b8e0b_256x240.png +0 -0
  132. data/public/vendor/images/ui-icons_6da8d5_256x240.png +0 -0
  133. data/public/vendor/images/ui-icons_888888_256x240.png +0 -0
  134. data/public/vendor/images/ui-icons_a83300_256x240.png +0 -0
  135. data/public/vendor/images/ui-icons_cccccc_256x240.png +0 -0
  136. data/public/vendor/images/ui-icons_cd0a0a_256x240.png +0 -0
  137. data/public/vendor/images/ui-icons_d8e7f3_256x240.png +0 -0
  138. data/public/vendor/images/ui-icons_ef8c08_256x240.png +0 -0
  139. data/public/vendor/images/ui-icons_f9bd01_256x240.png +0 -0
  140. data/public/vendor/images/ui-icons_ffd27a_256x240.png +0 -0
  141. data/public/vendor/images/ui-icons_ffffff_256x240.png +0 -0
  142. data/public/vendor/images/xls.png +0 -0
  143. data/public/vendor/images/zip.png +0 -0
  144. data/public/vendor/js/bootstrap-slider.js +1550 -0
  145. data/public/vendor/js/bootstrap.js +2317 -0
  146. data/public/vendor/js/bootstrap.min.js +7 -0
  147. data/public/vendor/js/jquery-2.1.4.js +9210 -0
  148. data/public/vendor/js/jquery-2.1.4.min.js +4 -0
  149. data/public/vendor/js/jquery-2.1.4.min.map +1 -0
  150. data/public/vendor/js/jquery-ui-1.10.2.custom.min.js +7 -0
  151. data/public/vendor/js/jquery.cookie.js +72 -0
  152. data/public/vendor/js/jquery.hammer.min.js +7 -0
  153. data/public/vendor/js/jquery.lazyload.min.js +15 -0
  154. data/public/vendor/js/jquery.localize.js +180 -0
  155. data/public/vendor/js/jquery.mobile-1.3.1.min.js +7 -0
  156. data/public/vendor/js/jquery.scrollTo-1.4.3.1.js +218 -0
  157. data/public/vendor/js/jqueryFileTree.js +95 -0
  158. data/public/vendor/js/swipeview.js +471 -0
  159. data/views/browse.haml +97 -0
  160. data/views/config.haml +115 -0
  161. data/views/layout.haml +12 -0
  162. data/views/login.haml +51 -0
  163. data/views/reader.haml +70 -0
  164. data/views/statistics.haml +108 -0
  165. data/views/tablet3.haml +80 -0
  166. metadata +334 -0
@@ -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 + '&nbsp;');
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
+ }
@@ -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
+