bookreader 1.0.1
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.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/.gitmodules +3 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/LICENSE.txt +21 -0
- data/README.md +43 -0
- data/Rakefile +10 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/bookreader.gemspec +42 -0
- data/lib/bookreader/engine.rb +6 -0
- data/lib/bookreader/version.rb +3 -0
- data/lib/bookreader.rb +8 -0
- data/vendor/assets/images/BRicons.png +0 -0
- data/vendor/assets/images/BRicons.svg +94 -0
- data/vendor/assets/images/BRicons_ia.png +0 -0
- data/vendor/assets/images/back_pages.png +0 -0
- data/vendor/assets/images/book_bottom_icon.png +0 -0
- data/vendor/assets/images/book_down_icon.png +0 -0
- data/vendor/assets/images/book_left_icon.png +0 -0
- data/vendor/assets/images/book_leftmost_icon.png +0 -0
- data/vendor/assets/images/book_right_icon.png +0 -0
- data/vendor/assets/images/book_rightmost_icon.png +0 -0
- data/vendor/assets/images/book_top_icon.png +0 -0
- data/vendor/assets/images/book_up_icon.png +0 -0
- data/vendor/assets/images/books_graphic.svg +177 -0
- data/vendor/assets/images/booksplit.png +0 -0
- data/vendor/assets/images/control_pause_icon.png +0 -0
- data/vendor/assets/images/control_play_icon.png +0 -0
- data/vendor/assets/images/embed_icon.png +0 -0
- data/vendor/assets/images/icon-home-ia.png +0 -0
- data/vendor/assets/images/icon_OL-logo-xs.png +0 -0
- data/vendor/assets/images/icon_alert-xs.png +0 -0
- data/vendor/assets/images/icon_book.svg +12 -0
- data/vendor/assets/images/icon_bookmark.svg +12 -0
- data/vendor/assets/images/icon_close-pop.png +0 -0
- data/vendor/assets/images/icon_download.png +0 -0
- data/vendor/assets/images/icon_gear.svg +17 -0
- data/vendor/assets/images/icon_hamburger.svg +20 -0
- data/vendor/assets/images/icon_home.png +0 -0
- data/vendor/assets/images/icon_home.svg +21 -0
- data/vendor/assets/images/icon_home_ia.png +0 -0
- data/vendor/assets/images/icon_indicator.png +0 -0
- data/vendor/assets/images/icon_info.svg +12 -0
- data/vendor/assets/images/icon_one_page.svg +16 -0
- data/vendor/assets/images/icon_return.png +0 -0
- data/vendor/assets/images/icon_search_button.svg +14 -0
- data/vendor/assets/images/icon_search_button_blue.svg +18 -0
- data/vendor/assets/images/icon_share.svg +17 -0
- data/vendor/assets/images/icon_speaker.svg +18 -0
- data/vendor/assets/images/icon_speaker_open.svg +26 -0
- data/vendor/assets/images/icon_thumbnails.svg +19 -0
- data/vendor/assets/images/icon_two_pages.svg +17 -0
- data/vendor/assets/images/icon_zoomer.png +0 -0
- data/vendor/assets/images/left_edges.png +0 -0
- data/vendor/assets/images/loading.gif +0 -0
- data/vendor/assets/images/logo_icon.png +0 -0
- data/vendor/assets/images/marker_chap-off.png +0 -0
- data/vendor/assets/images/marker_chap-off.svg +11 -0
- data/vendor/assets/images/marker_chap-off_ia.png +0 -0
- data/vendor/assets/images/marker_chap-on.png +0 -0
- data/vendor/assets/images/marker_chap-on.svg +11 -0
- data/vendor/assets/images/marker_srch-off.png +0 -0
- data/vendor/assets/images/marker_srch-off.svg +11 -0
- data/vendor/assets/images/marker_srch-on.png +0 -0
- data/vendor/assets/images/marker_srch-on.svg +11 -0
- data/vendor/assets/images/marker_srchchap-off.png +0 -0
- data/vendor/assets/images/marker_srchchap-on.png +0 -0
- data/vendor/assets/images/nav_control-dn.png +0 -0
- data/vendor/assets/images/nav_control-dn_ia.png +0 -0
- data/vendor/assets/images/nav_control-up.png +0 -0
- data/vendor/assets/images/nav_control-up_ia.png +0 -0
- data/vendor/assets/images/nav_control.png +0 -0
- data/vendor/assets/images/one_page_mode_icon.png +0 -0
- data/vendor/assets/images/paper-badge.png +0 -0
- data/vendor/assets/images/print_icon.png +0 -0
- data/vendor/assets/images/progressbar.gif +0 -0
- data/vendor/assets/images/right_edges.png +0 -0
- data/vendor/assets/images/slider.png +0 -0
- data/vendor/assets/images/slider_ia.png +0 -0
- data/vendor/assets/images/thumbnail_mode_icon.png +0 -0
- data/vendor/assets/images/transparent.png +0 -0
- data/vendor/assets/images/two_page_mode_icon.png +0 -0
- data/vendor/assets/images/zoom_in_icon.png +0 -0
- data/vendor/assets/images/zoom_out_icon.png +0 -0
- data/vendor/assets/javascripts/BookReader.js +4849 -0
- data/vendor/assets/javascripts/BookReaderJSAdvanced.js +115 -0
- data/vendor/assets/javascripts/BookReaderJSSimple.js +56 -0
- data/vendor/assets/javascripts/IIIFBookReader.js +207 -0
- data/vendor/assets/javascripts/demo-iiif.js +26 -0
- data/vendor/assets/javascripts/dragscrollable-br.js +261 -0
- data/vendor/assets/javascripts/excanvas.compiled.js +35 -0
- data/vendor/assets/javascripts/jquery-1.10.1.js +9807 -0
- data/vendor/assets/javascripts/jquery-ui-1.12.0.min.js +18686 -0
- data/vendor/assets/javascripts/jquery.browser.min.js +14 -0
- data/vendor/assets/javascripts/jquery.bt.min.js +8 -0
- data/vendor/assets/javascripts/jquery.colorbox-min.js +6 -0
- data/vendor/assets/javascripts/jquery.ui.touch-punch.min.js +11 -0
- data/vendor/assets/javascripts/mmenu/dist/addons/navbars/jquery.mmenu.navbars.min.js +43 -0
- data/vendor/assets/javascripts/mmenu/dist/addons/offcanvas/jquery.mmenu.offcanvas.min.js +7 -0
- data/vendor/assets/javascripts/mmenu/dist/addons/screenreader/jquery.mmenu.screenreader.min.js +7 -0
- data/vendor/assets/javascripts/mmenu/dist/addons/searchfield/jquery.mmenu.searchfield.min.js +7 -0
- data/vendor/assets/javascripts/mmenu/dist/js/jquery.mmenu.all.min.js +151 -0
- data/vendor/assets/javascripts/mmenu/dist/js/jquery.mmenu.all.min.umd.js +162 -0
- data/vendor/assets/javascripts/mmenu/dist/js/jquery.mmenu.min.js +25 -0
- data/vendor/assets/javascripts/mmenu/dist/js/jquery.mmenu.min.umd.js +36 -0
- data/vendor/assets/javascripts/mmenu/dist/js/jquery.mmenu.oncanvas.min.js +13 -0
- data/vendor/assets/javascripts/mmenu/jquery.mmenu.searchfield.js +510 -0
- data/vendor/assets/javascripts/plugins/plugin.archive_analytics.js +67 -0
- data/vendor/assets/javascripts/plugins/plugin.chapters.js +197 -0
- data/vendor/assets/javascripts/plugins/plugin.iframe.js +73 -0
- data/vendor/assets/javascripts/plugins/plugin.mobile_nav.js +197 -0
- data/vendor/assets/javascripts/plugins/plugin.print.js +70 -0
- data/vendor/assets/javascripts/plugins/plugin.resume.js +73 -0
- data/vendor/assets/javascripts/plugins/plugin.search.js +523 -0
- data/vendor/assets/javascripts/plugins/plugin.themes.js +49 -0
- data/vendor/assets/javascripts/plugins/plugin.tts.js +523 -0
- data/vendor/assets/javascripts/plugins/plugin.url.js +168 -0
- data/vendor/assets/javascripts/soundmanager/license.txt +29 -0
- data/vendor/assets/javascripts/soundmanager/script/soundmanager2-jsmin.js +113 -0
- data/vendor/assets/javascripts/soundmanager/script/soundmanager2-nodebug-jsmin.js +83 -0
- data/vendor/assets/javascripts/soundmanager/script/soundmanager2-nodebug.js +2765 -0
- data/vendor/assets/javascripts/soundmanager/script/soundmanager2.js +6325 -0
- data/vendor/assets/javascripts/soundmanager/swf/soundmanager2.swf +0 -0
- data/vendor/assets/javascripts/soundmanager/swf/soundmanager2_debug.swf +0 -0
- data/vendor/assets/javascripts/soundmanager/swf/soundmanager2_flash9.swf +0 -0
- data/vendor/assets/javascripts/soundmanager/swf/soundmanager2_flash9_debug.swf +0 -0
- data/vendor/assets/javascripts/soundmanager/swf/soundmanager2_flash_xdomain.zip +0 -0
- data/vendor/assets/stylesheets/BookReader.css +1887 -0
- data/vendor/assets/stylesheets/BookReaderDemo.css +18 -0
- data/vendor/assets/stylesheets/BookReaderEmbed.css +0 -0
- data/vendor/assets/stylesheets/demo.css +0 -0
- data/vendor/assets/stylesheets/dist/addons/navbars/jquery.mmenu.navbars.css +29 -0
- data/vendor/assets/stylesheets/dist/addons/offcanvas/jquery.mmenu.offcanvas.css +14 -0
- data/vendor/assets/stylesheets/dist/addons/screenreader/jquery.mmenu.screenreader.css +1 -0
- data/vendor/assets/stylesheets/dist/addons/searchfield/jquery.mmenu.searchfield.css +16 -0
- data/vendor/assets/stylesheets/dist/css/jquery.mmenu.all.css +413 -0
- data/vendor/assets/stylesheets/dist/css/jquery.mmenu.css +80 -0
- data/vendor/assets/stylesheets/dist/css/jquery.mmenu.oncanvas.css +66 -0
- metadata +226 -0
|
@@ -0,0 +1,510 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* jQuery mmenu BookReader Search addon
|
|
3
|
+
* mmenu.frebsite.nl
|
|
4
|
+
*
|
|
5
|
+
* Adapted from searchfield by Fred Heusschen
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
(function( $ ) {
|
|
9
|
+
|
|
10
|
+
var _PLUGIN_ = 'mmenu',
|
|
11
|
+
_ADDON_ = 'searchfield';
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
$[ _PLUGIN_ ].addons[ _ADDON_ ] = {
|
|
15
|
+
|
|
16
|
+
// setup: fired once per menu
|
|
17
|
+
setup: function()
|
|
18
|
+
{
|
|
19
|
+
var that = this,
|
|
20
|
+
opts = this.opts[ _ADDON_ ],
|
|
21
|
+
conf = this.conf[ _ADDON_ ];
|
|
22
|
+
|
|
23
|
+
glbl = $[ _PLUGIN_ ].glbl;
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
// Extend shortcut options
|
|
27
|
+
if ( typeof opts == 'boolean' )
|
|
28
|
+
{
|
|
29
|
+
opts = {
|
|
30
|
+
add: opts
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
if ( typeof opts != 'object' )
|
|
34
|
+
{
|
|
35
|
+
opts = {};
|
|
36
|
+
}
|
|
37
|
+
if ( typeof opts.resultsPanel == 'boolean' )
|
|
38
|
+
{
|
|
39
|
+
opts.resultsPanel = {
|
|
40
|
+
add: opts.resultsPanel
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
opts = this.opts[ _ADDON_ ] = $.extend( true, {}, $[ _PLUGIN_ ].defaults[ _ADDON_ ], opts );
|
|
44
|
+
|
|
45
|
+
// Extend shortcut configuration
|
|
46
|
+
conf = this.conf[ _ADDON_ ] = $.extend( true, {}, $[ _PLUGIN_ ].configuration[ _ADDON_ ], conf );
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
// Blur searchfield
|
|
50
|
+
this.bind( 'close',
|
|
51
|
+
function()
|
|
52
|
+
{
|
|
53
|
+
this.$menu
|
|
54
|
+
.find( '.' + _c.search )
|
|
55
|
+
.find( 'input' )
|
|
56
|
+
.blur();
|
|
57
|
+
}
|
|
58
|
+
);
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
// Bind functions to update
|
|
62
|
+
this.bind( 'init',
|
|
63
|
+
function( $panels )
|
|
64
|
+
{
|
|
65
|
+
// console.log(opts);
|
|
66
|
+
// opts.addTo = ".search-parent";
|
|
67
|
+
// Add the searchfield(s)
|
|
68
|
+
if ( opts.add )
|
|
69
|
+
{
|
|
70
|
+
var $wrapper;
|
|
71
|
+
switch( opts.addTo )
|
|
72
|
+
{
|
|
73
|
+
case 'panels':
|
|
74
|
+
$wrapper = $panels;
|
|
75
|
+
break;
|
|
76
|
+
|
|
77
|
+
default:
|
|
78
|
+
$wrapper = this.$menu.find( opts.addTo );
|
|
79
|
+
break;
|
|
80
|
+
}
|
|
81
|
+
// alert(1);
|
|
82
|
+
// console.log($wrapper);
|
|
83
|
+
|
|
84
|
+
$wrapper
|
|
85
|
+
.each(
|
|
86
|
+
function()
|
|
87
|
+
{
|
|
88
|
+
// Add the searchfield
|
|
89
|
+
var $panl = $(this);
|
|
90
|
+
if ( $panl.is( '.' + _c.panel ) && $panl.is( '.' + _c.vertical ) )
|
|
91
|
+
{
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
if ( !$panl.children( '.' + _c.search ).length )
|
|
96
|
+
{
|
|
97
|
+
var clear = that.__valueOrFn( conf.clear , $panl ),
|
|
98
|
+
form = that.__valueOrFn( conf.form , $panl ),
|
|
99
|
+
input = that.__valueOrFn( conf.input , $panl ),
|
|
100
|
+
submit = that.__valueOrFn( conf.submit, $panl );
|
|
101
|
+
|
|
102
|
+
var $srch = $( '<' + ( form ? 'form' : 'div' ) + ' class="' + _c.search + '" />' ),
|
|
103
|
+
$inpt = $( '<input placeholder="' + opts.placeholder + '" type="text" autocomplete="off"/>' );
|
|
104
|
+
|
|
105
|
+
$srch.append( $inpt );
|
|
106
|
+
|
|
107
|
+
var k;
|
|
108
|
+
|
|
109
|
+
if ( input )
|
|
110
|
+
{
|
|
111
|
+
for ( k in input )
|
|
112
|
+
{
|
|
113
|
+
$inpt.attr( k, input[ k ] );
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
if ( clear )
|
|
117
|
+
{
|
|
118
|
+
$('<a class="' + _c.btn + ' ' + _c.clear + '" href="#" />')
|
|
119
|
+
.appendTo( $srch )
|
|
120
|
+
.on( _e.click + '-searchfield',
|
|
121
|
+
function( e )
|
|
122
|
+
{
|
|
123
|
+
e.preventDefault();
|
|
124
|
+
$inpt
|
|
125
|
+
.val( '' )
|
|
126
|
+
.trigger( _e.keyup + '-searchfield' );
|
|
127
|
+
}
|
|
128
|
+
);
|
|
129
|
+
}
|
|
130
|
+
if ( form )
|
|
131
|
+
{
|
|
132
|
+
for ( k in form )
|
|
133
|
+
{
|
|
134
|
+
$srch.attr( k, form[ k ] );
|
|
135
|
+
}
|
|
136
|
+
if ( submit && !clear )
|
|
137
|
+
{
|
|
138
|
+
$('<a class="' + _c.btn + ' ' + _c.next + '" href="#" />')
|
|
139
|
+
.appendTo( $srch )
|
|
140
|
+
.on( _e.click + '-searchfield',
|
|
141
|
+
function( e )
|
|
142
|
+
{
|
|
143
|
+
e.preventDefault();
|
|
144
|
+
$srch.submit();
|
|
145
|
+
}
|
|
146
|
+
);
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
if ( $panl.hasClass( _c.search ) )
|
|
151
|
+
{
|
|
152
|
+
$panl.replaceWith( $srch );
|
|
153
|
+
}
|
|
154
|
+
else
|
|
155
|
+
{
|
|
156
|
+
$panl.append( $srch )
|
|
157
|
+
.addClass( _c.hassearch );
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
if ( opts.noResults )
|
|
162
|
+
{
|
|
163
|
+
var inPanel = $panl.closest( '.' + _c.panel ).length;
|
|
164
|
+
|
|
165
|
+
// Not in a panel
|
|
166
|
+
if ( !inPanel )
|
|
167
|
+
{
|
|
168
|
+
$panl = that.$pnls.children( '.' + _c.panel ).first();
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Add no-results message
|
|
172
|
+
if ( !$panl.children( '.' + _c.noresultsmsg ).length )
|
|
173
|
+
{
|
|
174
|
+
var $lst = $panl.children( '.' + _c.listview ).first();
|
|
175
|
+
|
|
176
|
+
$( '<div class="' + _c.noresultsmsg + ' ' + _c.hidden + '" />' )
|
|
177
|
+
.append( opts.noResults )
|
|
178
|
+
[ $lst.length ? 'insertAfter' : 'prependTo' ]( $lst.length ? $lst : $panl );
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
);
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
// Search through list items
|
|
186
|
+
if ( opts.search )
|
|
187
|
+
{
|
|
188
|
+
|
|
189
|
+
if ( opts.resultsPanel.add )
|
|
190
|
+
{
|
|
191
|
+
opts.showSubPanels = false;
|
|
192
|
+
|
|
193
|
+
var $rpnl = this.$pnls.children( '.' + _c.resultspanel );
|
|
194
|
+
if ( !$rpnl.length )
|
|
195
|
+
{
|
|
196
|
+
$rpnl = $( '<div class="' + _c.panel + ' ' + _c.resultspanel + ' ' + _c.hidden + '" />' )
|
|
197
|
+
.appendTo( this.$pnls )
|
|
198
|
+
.append( '<div class="' + _c.navbar + ' ' + _c.hidden + '"><a class="' + _c.title + '">' + opts.resultsPanel.title + '</a></div>' )
|
|
199
|
+
.append( '<ul class="' + _c.listview + '" />' )
|
|
200
|
+
.append( this.$pnls.find( '.' + _c.noresultsmsg ).first().clone() );
|
|
201
|
+
|
|
202
|
+
this.init( $rpnl );
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
this.$menu
|
|
207
|
+
.find( '.' + _c.search )
|
|
208
|
+
.each(
|
|
209
|
+
function()
|
|
210
|
+
{
|
|
211
|
+
var $srch = $(this),
|
|
212
|
+
inPanel = $srch.closest( '.' + _c.panel ).length;
|
|
213
|
+
|
|
214
|
+
var $pnls, $panl;
|
|
215
|
+
|
|
216
|
+
// In a panel
|
|
217
|
+
if ( inPanel )
|
|
218
|
+
{
|
|
219
|
+
$pnls = $srch.closest( '.' + _c.panel );
|
|
220
|
+
$panl = $pnls;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
// Not in a panel
|
|
224
|
+
else
|
|
225
|
+
{
|
|
226
|
+
$pnls = $('.' + _c.panel, that.$menu);
|
|
227
|
+
$panl = that.$menu;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
if ( opts.resultsPanel.add )
|
|
231
|
+
{
|
|
232
|
+
$pnls = $pnls.not( $rpnl );
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
var $inpt = $srch.children( 'input' ),
|
|
236
|
+
$itms = that.__findAddBack( $pnls, '.' + _c.listview ).children( 'li' ),
|
|
237
|
+
$dvdr = $itms.filter( '.' + _c.divider ),
|
|
238
|
+
$rslt = that.__filterListItems( $itms );
|
|
239
|
+
|
|
240
|
+
var _anchor = 'a',
|
|
241
|
+
_both = _anchor + ', span';
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
var query = '';
|
|
245
|
+
var search = function()
|
|
246
|
+
{
|
|
247
|
+
|
|
248
|
+
var q = $inpt.val().toLowerCase();
|
|
249
|
+
if ( q == query )
|
|
250
|
+
{
|
|
251
|
+
return;
|
|
252
|
+
}
|
|
253
|
+
query = q;
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
if ( opts.resultsPanel.add )
|
|
257
|
+
{
|
|
258
|
+
$rpnl
|
|
259
|
+
.children( '.' + _c.listview )
|
|
260
|
+
.empty();
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
// Scroll to top
|
|
264
|
+
$pnls.scrollTop( 0 );
|
|
265
|
+
|
|
266
|
+
// Search through items
|
|
267
|
+
$rslt
|
|
268
|
+
.add( $dvdr )
|
|
269
|
+
.addClass( _c.hidden )
|
|
270
|
+
.find( '.' + _c.fullsubopensearch )
|
|
271
|
+
.removeClass( _c.fullsubopen + ' ' + _c.fullsubopensearch );
|
|
272
|
+
|
|
273
|
+
$rslt
|
|
274
|
+
.each(
|
|
275
|
+
function()
|
|
276
|
+
{
|
|
277
|
+
var $item = $(this),
|
|
278
|
+
_search = _anchor;
|
|
279
|
+
|
|
280
|
+
if ( opts.showTextItems || ( opts.showSubPanels && $item.find( '.' + _c.next ) ) )
|
|
281
|
+
{
|
|
282
|
+
_search = _both;
|
|
283
|
+
}
|
|
284
|
+
|
|
285
|
+
var txt = $item.data( _d.searchtext ) || $item.children( _search ).text();
|
|
286
|
+
if ( txt.toLowerCase().indexOf( query ) > -1 )
|
|
287
|
+
{
|
|
288
|
+
$item.add( $item.prevAll( '.' + _c.divider ).first() ).removeClass( _c.hidden );
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
);
|
|
292
|
+
|
|
293
|
+
// Update sub items
|
|
294
|
+
if ( opts.showSubPanels )
|
|
295
|
+
{
|
|
296
|
+
$pnls.each(
|
|
297
|
+
function( i )
|
|
298
|
+
{
|
|
299
|
+
var $panl = $(this);
|
|
300
|
+
that.__filterListItems( $panl.find( '.' + _c.listview ).children() )
|
|
301
|
+
.each(
|
|
302
|
+
function()
|
|
303
|
+
{
|
|
304
|
+
var $li = $(this),
|
|
305
|
+
$su = $li.data( _d.sub );
|
|
306
|
+
|
|
307
|
+
$li.removeClass( _c.nosubresults );
|
|
308
|
+
if ( $su )
|
|
309
|
+
{
|
|
310
|
+
$su.find( '.' + _c.listview ).children().removeClass( _c.hidden );
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
);
|
|
314
|
+
}
|
|
315
|
+
);
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// All results in one panel
|
|
319
|
+
if ( opts.resultsPanel.add )
|
|
320
|
+
{
|
|
321
|
+
if ( query === '' )
|
|
322
|
+
{
|
|
323
|
+
this.closeAllPanels();
|
|
324
|
+
this.openPanel( this.$pnls.children( '.' + _c.subopened ).last() );
|
|
325
|
+
}
|
|
326
|
+
else
|
|
327
|
+
{
|
|
328
|
+
var $itms = $();
|
|
329
|
+
$pnls
|
|
330
|
+
.each(
|
|
331
|
+
function()
|
|
332
|
+
{
|
|
333
|
+
var $i = that.__filterListItems( $(this).find( '.' + _c.listview ).children() ).not( '.' + _c.hidden ).clone( true );
|
|
334
|
+
if ( $i.length )
|
|
335
|
+
{
|
|
336
|
+
if ( opts.resultsPanel.dividers )
|
|
337
|
+
{
|
|
338
|
+
$itms = $itms.add( '<li class="' + _c.divider + '">' + $(this).children( '.' + _c.navbar ).text() + '</li>' );
|
|
339
|
+
}
|
|
340
|
+
$itms = $itms.add( $i );
|
|
341
|
+
}
|
|
342
|
+
}
|
|
343
|
+
);
|
|
344
|
+
|
|
345
|
+
$itms
|
|
346
|
+
.find( '.' + _c.next )
|
|
347
|
+
.remove();
|
|
348
|
+
|
|
349
|
+
$rpnl
|
|
350
|
+
.children( '.' + _c.listview )
|
|
351
|
+
.append( $itms );
|
|
352
|
+
|
|
353
|
+
this.openPanel( $rpnl );
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
// Update parent for submenus
|
|
358
|
+
else
|
|
359
|
+
{
|
|
360
|
+
|
|
361
|
+
$( $pnls.get().reverse() )
|
|
362
|
+
.each(
|
|
363
|
+
function( i )
|
|
364
|
+
{
|
|
365
|
+
var $panl = $(this),
|
|
366
|
+
$prnt = $panl.data( _d.parent );
|
|
367
|
+
|
|
368
|
+
if ( $prnt )
|
|
369
|
+
{
|
|
370
|
+
if ( that.__filterListItems( $panl.find( '.' + _c.listview ).children() ).length )
|
|
371
|
+
{
|
|
372
|
+
if ( $prnt.hasClass( _c.hidden ) )
|
|
373
|
+
{
|
|
374
|
+
$prnt.children( '.' + _c.next )
|
|
375
|
+
.not( '.' + _c.fullsubopen )
|
|
376
|
+
.addClass( _c.fullsubopen )
|
|
377
|
+
.addClass( _c.fullsubopensearch );
|
|
378
|
+
}
|
|
379
|
+
$prnt
|
|
380
|
+
.removeClass( _c.hidden )
|
|
381
|
+
.removeClass( _c.nosubresults )
|
|
382
|
+
.prevAll( '.' + _c.divider )
|
|
383
|
+
.first()
|
|
384
|
+
.removeClass( _c.hidden );
|
|
385
|
+
}
|
|
386
|
+
else if ( !inPanel )
|
|
387
|
+
{
|
|
388
|
+
if ( $panl.hasClass( _c.opened ) )
|
|
389
|
+
{
|
|
390
|
+
// Compensate the timeout for the opening animation
|
|
391
|
+
setTimeout(
|
|
392
|
+
function()
|
|
393
|
+
{
|
|
394
|
+
that.openPanel( $prnt.closest( '.' + _c.panel ) );
|
|
395
|
+
}, ( i + 1 ) * ( that.conf.openingInterval * 1.5 )
|
|
396
|
+
);
|
|
397
|
+
}
|
|
398
|
+
$prnt.addClass( _c.nosubresults );
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
);
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
// Show/hide no results message
|
|
406
|
+
$panl.find( '.' + _c.noresultsmsg )[ $rslt.not( '.' + _c.hidden ).length ? 'addClass' : 'removeClass' ]( _c.hidden );
|
|
407
|
+
|
|
408
|
+
// Update for other addons
|
|
409
|
+
this.update();
|
|
410
|
+
};
|
|
411
|
+
|
|
412
|
+
$inpt
|
|
413
|
+
.off( _e.keyup + '-' + _ADDON_ + ' ' + _e.change + '-' + _ADDON_ )
|
|
414
|
+
.on( _e.keyup + '-' + _ADDON_,
|
|
415
|
+
function( e )
|
|
416
|
+
{
|
|
417
|
+
if ( !preventKeypressSearch( e.keyCode ) )
|
|
418
|
+
{
|
|
419
|
+
search.call( that );
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
)
|
|
423
|
+
.on( _e.change + '-' + _ADDON_,
|
|
424
|
+
function( e )
|
|
425
|
+
{
|
|
426
|
+
search.call( that );
|
|
427
|
+
}
|
|
428
|
+
);
|
|
429
|
+
|
|
430
|
+
var $btn = $srch.children( '.' + _c.btn );
|
|
431
|
+
if ( $btn.length )
|
|
432
|
+
{
|
|
433
|
+
$inpt
|
|
434
|
+
.on( _e.keyup + '-' + _ADDON_,
|
|
435
|
+
function( e )
|
|
436
|
+
{
|
|
437
|
+
$btn[ $inpt.val().length ? 'removeClass' : 'addClass' ]( _c.hidden );
|
|
438
|
+
}
|
|
439
|
+
);
|
|
440
|
+
}
|
|
441
|
+
$inpt.trigger( _e.keyup + '-' + _ADDON_ );
|
|
442
|
+
}
|
|
443
|
+
);
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
);
|
|
448
|
+
},
|
|
449
|
+
|
|
450
|
+
// add: fired once per page load
|
|
451
|
+
add: function()
|
|
452
|
+
{
|
|
453
|
+
_c = $[ _PLUGIN_ ]._c;
|
|
454
|
+
_d = $[ _PLUGIN_ ]._d;
|
|
455
|
+
_e = $[ _PLUGIN_ ]._e;
|
|
456
|
+
|
|
457
|
+
_c.add( 'clear search hassearch resultspanel noresultsmsg noresults nosubresults fullsubopensearch' );
|
|
458
|
+
_d.add( 'searchtext' );
|
|
459
|
+
_e.add( 'change keyup' );
|
|
460
|
+
},
|
|
461
|
+
|
|
462
|
+
// clickAnchor: prevents default behavior when clicking an anchor
|
|
463
|
+
clickAnchor: function( $a, inMenu ) {}
|
|
464
|
+
};
|
|
465
|
+
|
|
466
|
+
|
|
467
|
+
// Default options and configuration
|
|
468
|
+
$[ _PLUGIN_ ].defaults[ _ADDON_ ] = {
|
|
469
|
+
add : false,
|
|
470
|
+
addTo : 'panels',
|
|
471
|
+
placeholder : 'Search',
|
|
472
|
+
noResults : 'No results found.',
|
|
473
|
+
resultsPanel : {
|
|
474
|
+
add : false,
|
|
475
|
+
dividers : true,
|
|
476
|
+
title : 'Search results'
|
|
477
|
+
},
|
|
478
|
+
search : true,
|
|
479
|
+
showTextItems : false,
|
|
480
|
+
showSubPanels : true
|
|
481
|
+
};
|
|
482
|
+
$[ _PLUGIN_ ].configuration[ _ADDON_ ] = {
|
|
483
|
+
clear : false,
|
|
484
|
+
form : false,
|
|
485
|
+
input : false,
|
|
486
|
+
submit : false
|
|
487
|
+
};
|
|
488
|
+
|
|
489
|
+
|
|
490
|
+
var _c, _d, _e, glbl;
|
|
491
|
+
|
|
492
|
+
|
|
493
|
+
function preventKeypressSearch( c )
|
|
494
|
+
{
|
|
495
|
+
switch( c )
|
|
496
|
+
{
|
|
497
|
+
case 9: // tab
|
|
498
|
+
case 16: // shift
|
|
499
|
+
case 17: // control
|
|
500
|
+
case 18: // alt
|
|
501
|
+
case 37: // left
|
|
502
|
+
case 38: // top
|
|
503
|
+
case 39: // right
|
|
504
|
+
case 40: // bottom
|
|
505
|
+
return true;
|
|
506
|
+
}
|
|
507
|
+
return false;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
})( jQuery );
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Plugin for Archive.org analytics
|
|
3
|
+
*/
|
|
4
|
+
jQuery.extend(BookReader.defaultOptions, {
|
|
5
|
+
enableArchiveAnalytics: true
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
BookReader.prototype.init = (function(super_) {
|
|
9
|
+
return function() {
|
|
10
|
+
super_.call(this);
|
|
11
|
+
|
|
12
|
+
if (this.options.enableArchiveAnalytics) {
|
|
13
|
+
this.bind(
|
|
14
|
+
BookReader.eventNames.fragmentChange,
|
|
15
|
+
function() {
|
|
16
|
+
this.archiveAnalyticsSend();
|
|
17
|
+
}.bind(this)
|
|
18
|
+
);
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
})(BookReader.prototype.init);
|
|
22
|
+
|
|
23
|
+
BookReader.prototype.archiveAnalyticsSend = function() {
|
|
24
|
+
if (!window.archive_analytics) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
var prevFragment = this.archiveAnalyticsSend.prevHash;
|
|
29
|
+
|
|
30
|
+
var params = this.paramsFromCurrent();
|
|
31
|
+
var newFragment = this.fragmentFromParams(params);
|
|
32
|
+
|
|
33
|
+
if (prevFragment != newFragment) {
|
|
34
|
+
var values = {
|
|
35
|
+
bookreader: "user_changed_view",
|
|
36
|
+
itemid: this.bookId,
|
|
37
|
+
cache_bust: Math.random()
|
|
38
|
+
};
|
|
39
|
+
// EEK! offsite embedding and /details/ page books look the same in analytics, otherwise!
|
|
40
|
+
values.offsite = 1;
|
|
41
|
+
values.details = 0;
|
|
42
|
+
try {
|
|
43
|
+
values.offsite = window.top.location.hostname.match(/\.archive.org$/)
|
|
44
|
+
? 0
|
|
45
|
+
: 1;
|
|
46
|
+
values.details =
|
|
47
|
+
!values.offsite && window.top.location.pathname.match(/^\/details\//)
|
|
48
|
+
? 1
|
|
49
|
+
: 0;
|
|
50
|
+
} catch (e) {}
|
|
51
|
+
// avoids embed cross site exceptions -- but on (+) side, means it is and keeps marked offite!
|
|
52
|
+
|
|
53
|
+
// Send bookreader ping
|
|
54
|
+
archive_analytics.send_ping(values, null, "augment_for_ao_site");
|
|
55
|
+
|
|
56
|
+
// Also send tracking event ping
|
|
57
|
+
archive_analytics.send_ping({
|
|
58
|
+
kind: "event",
|
|
59
|
+
ec: "BookReader",
|
|
60
|
+
ea: "UserChangedView",
|
|
61
|
+
el: window.location.pathname,
|
|
62
|
+
cache_bust: Math.random()
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
this.archiveAnalyticsSend.prevFragment = newFragment;
|
|
66
|
+
}
|
|
67
|
+
};
|