kamishibai 0.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+