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/views/browse.haml
ADDED
@@ -0,0 +1,97 @@
|
|
1
|
+
!!!5
|
2
|
+
%html
|
3
|
+
%head
|
4
|
+
%meta(charset="utf-8")
|
5
|
+
%meta(name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0")
|
6
|
+
%meta(name="apple-mobile-web-app-capable" content="yes")
|
7
|
+
%meta(name="apple-mobile-web-app-status-bar-style" content="black")
|
8
|
+
%title Kamishibai
|
9
|
+
%link(rel='stylesheet' type='text/css' href='/vendor/css/bootstrap.css')
|
10
|
+
%link(rel='stylesheet' type='text/css' href='/css/browse.css')
|
11
|
+
%script(src='/vendor/js/jquery-2.1.4.js')
|
12
|
+
%script(src='/vendor/js/jquery.localize.js')
|
13
|
+
%script(src='/vendor/js/jquery.cookie.js')
|
14
|
+
%script(src='/vendor/js/bootstrap.js')
|
15
|
+
%script(src='/js/utilities.js')
|
16
|
+
%script(src='/js/browse.js')
|
17
|
+
%script(src='/vendor/js/jquery.scrollTo-1.4.3.1.js')
|
18
|
+
%script(src='/vendor/js/jquery.lazyload.min.js')
|
19
|
+
%body
|
20
|
+
%nav.navbar.navbar-default#navtop
|
21
|
+
%div.container-fluid
|
22
|
+
|
23
|
+
%div.navbar-header
|
24
|
+
%a.navbar-brand(data-localize="browse.Path")
|
25
|
+
%ol.breadcrumb.pull-left#path
|
26
|
+
|
27
|
+
%button.navbar-toggle.collapsed(type="button" data-toggle="collapse" data-target="#navcollapse")
|
28
|
+
%span.sr-only Toggle Navigation
|
29
|
+
%span.icon-bar
|
30
|
+
%span.icon-bar
|
31
|
+
%span.icon-bar
|
32
|
+
|
33
|
+
%div.collapse.navbar-collapse#navcollapse
|
34
|
+
%form.navbar-form.navbar-right(role="search")
|
35
|
+
%div.form-group
|
36
|
+
%input.form-control#searchbox(type="text" placeholder="" data-localize="browse.Search")
|
37
|
+
|
38
|
+
%ul.nav.navbar-nav
|
39
|
+
%li.dropdown
|
40
|
+
%a.dropdown-toggle(href="#" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false")
|
41
|
+
%span(data-localize="browse.Bookmarks")
|
42
|
+
%span.caret
|
43
|
+
%ul#ul-sources.dropdown-menu(role="menu" aria-labelledby="dropdownMenu")
|
44
|
+
%li
|
45
|
+
%a(tabindex="-1" href="#") blank
|
46
|
+
|
47
|
+
%li.dropdown
|
48
|
+
%a.dropdown-toggle(href="#" data-toggle="dropdown")
|
49
|
+
%span(data-localize="browse.Menu")
|
50
|
+
%span.caret
|
51
|
+
%ul.dropdown-menu(role="menu" aria-labelledby="dropdownMenu")
|
52
|
+
%li
|
53
|
+
%a(tabindex="-1" href="/tablet")
|
54
|
+
%span.glyphicon.glyphicon-book
|
55
|
+
%span(data-localize="browse.SimpleMode")
|
56
|
+
%li
|
57
|
+
%a(tabindex="-1" href="/config")
|
58
|
+
%span.glyphicon.glyphicon-wrench
|
59
|
+
%span(data-localize="browse.Preferences")
|
60
|
+
%li
|
61
|
+
%a(tabindex="-1" href="#" onclick="toggleFullScreen(document.documentElement); $('.nav-collapse').collapse('toggle'); return false;")
|
62
|
+
%span.glyphicon.glyphicon-fullscreen
|
63
|
+
%span(data-localize="toggleFullScreen")
|
64
|
+
|
65
|
+
%li.dropdown
|
66
|
+
%a.dropdown-toggle(href="#" data-toggle="dropdown")
|
67
|
+
%span(data-localize="orderby")
|
68
|
+
%span.caret
|
69
|
+
%ul.dropdown-menu(role="menu" aria-labelledby="dropdownMenu")
|
70
|
+
%li
|
71
|
+
%a(tabindex="-1" href="#" onclick="exe_order_by('name'); return false;")
|
72
|
+
%span.glyphicon.glyphicon-font
|
73
|
+
%span(data-localize="filename")
|
74
|
+
%li
|
75
|
+
%a(tabindex="-1" href="#" onclick="exe_order_by('size'); return false;")
|
76
|
+
%span.glyphicon.glyphicon-file
|
77
|
+
%span(data-localize="filesize")
|
78
|
+
%li
|
79
|
+
%a(tabindex="-1" href="#" onclick="exe_order_by('date'); return false;")
|
80
|
+
%span.glyphicon.glyphicon-time
|
81
|
+
%span(data-localize="filedate")
|
82
|
+
|
83
|
+
%li.dropdown
|
84
|
+
%a.dropdown-toggle(href="#" data-toggle="dropdown")
|
85
|
+
%span(data-localize="browse.Edit")
|
86
|
+
%span.caret
|
87
|
+
%ul.dropdown-menu(role="menu" aria-labelledby="dropdownMenu")
|
88
|
+
%li
|
89
|
+
%a(tabindex="-1" href="#" onclick="delete_enable(); return false;")
|
90
|
+
%span.glyphicon.glyphicon-remove
|
91
|
+
%span(data-localize="browse.Delete")
|
92
|
+
|
93
|
+
%div
|
94
|
+
%a.btn.hidden.btn-danger.pull-right#btnDeleteDisable(data-localize="browse.DeleteDisable" onclick="delete_disable(); return false;")
|
95
|
+
|
96
|
+
%div.container-fluid#container
|
97
|
+
%div#dir_lists
|
data/views/config.haml
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
!!!5
|
2
|
+
%html(lang="en")
|
3
|
+
%head
|
4
|
+
%meta(charset="utf-8")
|
5
|
+
%title Kamishibai
|
6
|
+
%link(rel='stylesheet' type='text/css' href='/css/config.css')
|
7
|
+
%link(rel='stylesheet' type='text/css' href='/vendor/css/bootstrap.css')
|
8
|
+
%link(rel='stylesheet' type='text/css' href='/vendor/css/jqueryFileTree.css')
|
9
|
+
%script(src='/vendor/js/jquery-2.1.4.js')
|
10
|
+
%script(src='/vendor/js/bootstrap.js')
|
11
|
+
%script(src='/vendor/js/jquery.localize.js')
|
12
|
+
%script(src='/vendor/js/jqueryFileTree.js')
|
13
|
+
%script(src='/js/config.js')
|
14
|
+
%script(src='/js/utilities.js')
|
15
|
+
%body
|
16
|
+
%script
|
17
|
+
var drives = eval(#{available_drives});
|
18
|
+
%div.container
|
19
|
+
%div.page-header
|
20
|
+
%h2(data-localize="Kamishibai")
|
21
|
+
%a(href="/")
|
22
|
+
%span.btn.btn-link(data-localize="config.Browse")
|
23
|
+
%a(href="/statistics")
|
24
|
+
%span.btn.btn-link(data-localize="config.Statistics")
|
25
|
+
|
26
|
+
%div.tabbable
|
27
|
+
%ul.nav.nav-tabs
|
28
|
+
%li.active
|
29
|
+
%a(href="#tab1" data-toggle="tab" data-localize="folders")
|
30
|
+
%li
|
31
|
+
%a(href="#tab2" data-toggle="tab" onclick="pref_load(); return false;" data-localize="preferences")
|
32
|
+
|
33
|
+
%div.tab-content
|
34
|
+
%div.tab-pane.active#tab1
|
35
|
+
%p.text-right
|
36
|
+
%button.btn.btn-primary#btn_sf(href="#modal-saving" data-toggle="modal" onclick="save_dirs();" data-localize="config.SaveFolders")
|
37
|
+
%button.btn#btn_af(href="#modal-add-folder" data-toggle="modal" onclick="load_dir('/');" data-localize="config.AddFolder")
|
38
|
+
|
39
|
+
%table.table.table-bordered.table-striped#dirtable
|
40
|
+
%thead
|
41
|
+
%tr
|
42
|
+
%th.c1(data-localize="folder")
|
43
|
+
%th.c2(data-localize="config.Action")
|
44
|
+
%tbody
|
45
|
+
%tfoot
|
46
|
+
%tr
|
47
|
+
%td(colspan=2)
|
48
|
+
%span.pull-right(data-localize="config.Books")
|
49
|
+
%span.pull-right#total_books ?
|
50
|
+
|
51
|
+
%div.tab-pane#tab2
|
52
|
+
%form.form-horizontal
|
53
|
+
%div.control-group
|
54
|
+
%label.control-label(for="port" data-localize="config.Port")
|
55
|
+
%div.controls
|
56
|
+
%input(type="text" name="port" id="port" value="loading..." disabled="")
|
57
|
+
%div.control-group
|
58
|
+
%label.control-label(for="new_book_days" data-localize="config.NewBookDays")
|
59
|
+
%div.controls
|
60
|
+
%input(type="text" name="new_book_days" id="new_book_days" value="loading..." disabled="")
|
61
|
+
%div.control-group
|
62
|
+
%label.control-label(for="username" data-localize="username")
|
63
|
+
%div.controls
|
64
|
+
%input(type="text" name="username" id="username" value="loading..." disabled="")
|
65
|
+
%div.control-group
|
66
|
+
%label.control-label(for="password" data-localize="password")
|
67
|
+
%div.controls
|
68
|
+
%input(type="text" name="password" id="password" value="loading..." disabled="")
|
69
|
+
%div.control-group
|
70
|
+
%label.control-label(for="img_resize" data-localize="config.ResizeImage")
|
71
|
+
%div.controls
|
72
|
+
%select(name="img_resize" id="img_resize" data-role="slider" disabled="")
|
73
|
+
%option(value="on" data-localize="yes")
|
74
|
+
%option(value="off" data-localize="no")
|
75
|
+
%div.control-group
|
76
|
+
%label.control-label(for="img_quality" data-localize="config.ImageQuality")
|
77
|
+
%div.controls
|
78
|
+
%input(type="text" name="img_quality" id="img_quality" value="loading..." disabled="")
|
79
|
+
%div#pref-buttons
|
80
|
+
%div.controls
|
81
|
+
%button.btn#pref-cancel(onclick="pref_load(); return false;" data-localize="cancel")
|
82
|
+
%button.btn.btn-primary#pref-save(href="#modal-saving" data-toggle="modal" onclick="pref_save(); return false;" disabled="" data-localize="config.SavePreferences")
|
83
|
+
%div.text-center
|
84
|
+
|
85
|
+
|
86
|
+
%div.modal.fade#modal-saving
|
87
|
+
%div.modal-dialog
|
88
|
+
%div.modal-content
|
89
|
+
%div.modal-header
|
90
|
+
%h3(data-localize="config.Saving")
|
91
|
+
%div.modal-body
|
92
|
+
%p(data-localize="config.SavingMsg")
|
93
|
+
%div.modal-footer
|
94
|
+
%p
|
95
|
+
|
96
|
+
%div.modal.fade#modal-add-folder
|
97
|
+
%div.modal-dialog
|
98
|
+
%div.modal-content
|
99
|
+
%div.modal-header
|
100
|
+
%button.close(type="button" data-dismiss="modal" aria-hidden="true") x
|
101
|
+
%h3.modal-title(data-localize="config.AddFolder")
|
102
|
+
%div
|
103
|
+
%div#drives
|
104
|
+
%label.span1(data-localize="config.Path")
|
105
|
+
%input.span5.input-small(type="text" name="path" id="path" value="/")
|
106
|
+
%div.modal-body
|
107
|
+
%div#af-dirnav
|
108
|
+
%div.modal-footer
|
109
|
+
%button.btn(data-dismiss="modal" aria-hiden="true" data-localize="cancel")
|
110
|
+
%button.btn.btn-primary#af-save(data-dismiss="modal" aria-hiden="true" onclick="af_add_dir( $('#path').val() );" data-localize="config.AddFolder")
|
111
|
+
|
112
|
+
%div(style="display: none;")
|
113
|
+
/ error messages, hack for localization
|
114
|
+
%span#alertPort(data-localize="config.alertPort")
|
115
|
+
%span#alertImageQuality(data-localize="config.alertImageQuality")
|
data/views/layout.haml
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
!!!5
|
2
|
+
%html(lang="en")
|
3
|
+
%head
|
4
|
+
%meta(charset="utf-8")
|
5
|
+
%title Kamishibai
|
6
|
+
%link(rel='stylesheet' type='text/css' href='/css/bootstrap.css')
|
7
|
+
%script(src='/vendor/js/jquery-2.1.4.js')
|
8
|
+
%script(src='/vendor/js/bootstrap.js')
|
9
|
+
%script(src='/vendor/js/jquery.localize.js')
|
10
|
+
%script(src='/js/utilities.js')
|
11
|
+
%body
|
12
|
+
= yield
|
data/views/login.haml
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
:css
|
2
|
+
body {
|
3
|
+
padding-top: 40px;
|
4
|
+
padding-bottom: 40px;
|
5
|
+
background-color: #f5f5f5;
|
6
|
+
}
|
7
|
+
|
8
|
+
.form-signin {
|
9
|
+
max-width: 300px;
|
10
|
+
padding: 19px 29px 29px;
|
11
|
+
margin: 0 auto 20px;
|
12
|
+
background-color: #fff;
|
13
|
+
border: 1px solid #e5e5e5;
|
14
|
+
-webkit-border-radius: 5px;
|
15
|
+
-moz-border-radius: 5px;
|
16
|
+
border-radius: 5px;
|
17
|
+
-webkit-box-shadow: 0 1px 2px rgba(0,0,0,.05);
|
18
|
+
-moz-box-shadow: 0 1px 2px rgba(0,0,0,.05);
|
19
|
+
box-shadow: 0 1px 2px rgba(0,0,0,.05);
|
20
|
+
}
|
21
|
+
.form-signin .form-signin-heading,
|
22
|
+
.form-signin .checkbox {
|
23
|
+
margin-bottom: 10px;
|
24
|
+
}
|
25
|
+
.form-signin input[type="text"],
|
26
|
+
.form-signin input[type="password"] {
|
27
|
+
font-size: 16px;
|
28
|
+
height: auto;
|
29
|
+
margin-bottom: 15px;
|
30
|
+
padding: 7px 9px;
|
31
|
+
}
|
32
|
+
%div.container
|
33
|
+
%form.form-signin(action="/login" method="post")
|
34
|
+
%h2.form-signin-heading(data-localize="login.header")
|
35
|
+
%input.input-block-level(type="text" name="username" placeholder="Username")
|
36
|
+
%input.input-block-level(name="password" type="password" placeholder="Password")
|
37
|
+
%input#url_redirect(type="hidden" name="url_redirect" value="")
|
38
|
+
%button.btn.btn-primary(type="submit" data-localize="login.LogIn")
|
39
|
+
:javascript
|
40
|
+
$(function(e) {
|
41
|
+
// on page init
|
42
|
+
|
43
|
+
// load the text localization
|
44
|
+
reload_locale();
|
45
|
+
|
46
|
+
// load redirect details
|
47
|
+
var el = document.location;
|
48
|
+
var url = el.href.replace(el.protocol + '//' + el.host + el.pathname, '');
|
49
|
+
url = url.replace('?redirect=', '');
|
50
|
+
$('#url_redirect').val( url );
|
51
|
+
});
|
data/views/reader.haml
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
!!!5
|
2
|
+
%html
|
3
|
+
%head
|
4
|
+
%meta(charset="utf-8")
|
5
|
+
%title Kamishibai
|
6
|
+
%link(rel='stylesheet' type='text/css' href='/vendor/css/jquery-ui-1.10.0.custom.css')
|
7
|
+
%link(rel='stylesheet' type='text/css' href='/vendor/css/bootstrap.css')
|
8
|
+
%link(rel='stylesheet' type='text/css' href='/css/reader.css')
|
9
|
+
%script(src='/vendor/js/jquery-2.1.4.js')
|
10
|
+
%script(src='/vendor/js/bootstrap.js')
|
11
|
+
%script(src='/vendor/js/jquery.localize.js')
|
12
|
+
%script(src='/vendor/js/jquery-ui-1.10.2.custom.min.js')
|
13
|
+
%script(src='/vendor/js/jquery.cookie.js')
|
14
|
+
%script(src='/js/utilities.js')
|
15
|
+
%script(src='/js/reader.js')
|
16
|
+
%body
|
17
|
+
%div#container
|
18
|
+
%div#cleft
|
19
|
+
%a(onclick="goPrevPages()")
|
20
|
+
%div#cright
|
21
|
+
%a(onclick="goNextPages()")
|
22
|
+
%div#cbutton
|
23
|
+
%a(onclick="showmenu()")
|
24
|
+
%div#icontainer
|
25
|
+
%img#ileft
|
26
|
+
%div#ibar
|
27
|
+
%img#iright
|
28
|
+
%div(style="100px")
|
29
|
+
%div#menu
|
30
|
+
%div.control
|
31
|
+
%div#booktitle
|
32
|
+
%span#pagemode(data-toggle="buttons-radio")
|
33
|
+
%input#singlepage(type="radio" name="pagemode")
|
34
|
+
%label(for="singlepage" data-localize="reader.Single")
|
35
|
+
%input#doublepage(type="radio" name="pagemode" checked="checked")
|
36
|
+
%label(for="doublepage" data-localize="reader.Double")
|
37
|
+
|
38
|
+
%span#readdirection(data-toggle="buttons-radio")
|
39
|
+
%input#readtoleft(type="radio" name="readdirection" checked="checked")
|
40
|
+
%label(for="readtoleft" data-localize="reader.ReadToLeft")
|
41
|
+
%input#readtoright(type="radio" name="readdirection")
|
42
|
+
%label(for="readtoright" data-localize="reader.ReadToRight")
|
43
|
+
|
44
|
+
%span#itemsheight(data-toggle="buttons-radio")
|
45
|
+
%input#normalheight(type="radio" name="itemsheight" checked="checked")
|
46
|
+
%label(for="normalheight" data-localize="reader.Normal")
|
47
|
+
%input#fullheight(type="radio" name="itemsheight")
|
48
|
+
%label(for="fullheight" data-localize="reader.Full")
|
49
|
+
|
50
|
+
%span#barmode(data-toggle="buttons-radio")
|
51
|
+
%input#nobar(type="radio" name="barmode" checked="checked")
|
52
|
+
%label(for="nobar" data-localize="reader.NoBlackBar")
|
53
|
+
%input#yesbar(type="radio" name="barmode")
|
54
|
+
%label(for="yesbar" data-localize="reader.BlackBar")
|
55
|
+
|
56
|
+
%span#primarypage(data-toggle="buttons-radio")
|
57
|
+
%input#pageeven(type="radio" name="primarypage")
|
58
|
+
%label(for="pageeven" data-localize="reader.Even")
|
59
|
+
%input#pageodd(type="radio" name="primarypage")
|
60
|
+
%label(for="pageodd" data-localize="reader.Odd")
|
61
|
+
|
62
|
+
%button#gohome(data-localize="reader.Home")
|
63
|
+
|
64
|
+
%button#closemenu(data-localize="reader.Close")
|
65
|
+
|
66
|
+
%div.d_row
|
67
|
+
%div.ps.ps-1
|
68
|
+
%input#pageslider-value(disabled)
|
69
|
+
%div.ps.ps-2
|
70
|
+
%div#pageslider
|
@@ -0,0 +1,108 @@
|
|
1
|
+
:ruby
|
2
|
+
test = 1234
|
3
|
+
!!!5
|
4
|
+
%html
|
5
|
+
%head
|
6
|
+
%meta(charset="utf-8")
|
7
|
+
%title Kamishibai
|
8
|
+
%link(rel='stylesheet' type='text/css' href='/vendor/css/bootstrap.css')
|
9
|
+
%script(src='/vendor/js/jquery-2.1.4.js')
|
10
|
+
%script(src='/vendor/js/bootstrap.js')
|
11
|
+
%script(src='/vendor/js/jquery.localize.js')
|
12
|
+
%script(src='/vendor/js/jquery.cookie.js')
|
13
|
+
%script(src='/js/utilities.js')
|
14
|
+
:css
|
15
|
+
p {
|
16
|
+
background-color: gold;
|
17
|
+
width: 150px;
|
18
|
+
}
|
19
|
+
:javascript
|
20
|
+
function test() {
|
21
|
+
alert('hi');
|
22
|
+
}
|
23
|
+
%body
|
24
|
+
%div
|
25
|
+
%h3
|
26
|
+
Total books
|
27
|
+
%p
|
28
|
+
#{ $db.books.length }
|
29
|
+
%div
|
30
|
+
%h3
|
31
|
+
Total pages
|
32
|
+
%p
|
33
|
+
#{ $db.books.collect { |bc, b| b.pages }.reduce( :+ ) }
|
34
|
+
%div
|
35
|
+
%h3
|
36
|
+
Total pages read
|
37
|
+
%p
|
38
|
+
#{ $db.books.collect { |bc, b| b.page if b.page }.compact.reduce( :+ ) }
|
39
|
+
%div
|
40
|
+
%h3
|
41
|
+
Total books read
|
42
|
+
%p
|
43
|
+
#{ $db.books.collect { |bc, b| b.page if b.page }.compact.length }
|
44
|
+
%div
|
45
|
+
%h3
|
46
|
+
Unfinished books
|
47
|
+
%p
|
48
|
+
#{ $db.books.collect { |bc, b| true if b.page && b.page < b.pages }.compact.length }
|
49
|
+
%div
|
50
|
+
%h3
|
51
|
+
Time spent reading
|
52
|
+
%p
|
53
|
+
? hours ? minutes
|
54
|
+
%div
|
55
|
+
%h3
|
56
|
+
Average stint
|
57
|
+
%p
|
58
|
+
? hours ? minutes
|
59
|
+
%div
|
60
|
+
%h3
|
61
|
+
Quickest record
|
62
|
+
%p
|
63
|
+
? pages / hour
|
64
|
+
%div
|
65
|
+
%h3
|
66
|
+
Longest stint
|
67
|
+
%p
|
68
|
+
? hours ? minutes
|
69
|
+
%div
|
70
|
+
%h3
|
71
|
+
Last books read
|
72
|
+
%p
|
73
|
+
titles...
|
74
|
+
%div
|
75
|
+
%h3
|
76
|
+
Favourite Authors
|
77
|
+
%p
|
78
|
+
name...
|
79
|
+
%div
|
80
|
+
%h3
|
81
|
+
Logins
|
82
|
+
%p
|
83
|
+
?
|
84
|
+
%div
|
85
|
+
%h3
|
86
|
+
Last login
|
87
|
+
%p
|
88
|
+
time
|
89
|
+
%div
|
90
|
+
%h3
|
91
|
+
Last IP
|
92
|
+
%p
|
93
|
+
ip
|
94
|
+
%div
|
95
|
+
%h3
|
96
|
+
Times started up
|
97
|
+
%p
|
98
|
+
?
|
99
|
+
%div
|
100
|
+
%h3
|
101
|
+
Uptime
|
102
|
+
%p
|
103
|
+
? hours ? minutes
|
104
|
+
%div
|
105
|
+
%h3
|
106
|
+
Total uptime
|
107
|
+
%p
|
108
|
+
? hours ? minutes
|