jekyll-ebook_reader 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ccdea2673cc4e1899604b328a1f43ed3709a362d5020dc9affe02f2a3afc4e44
4
- data.tar.gz: c895480b789f80577cf8f1b6064bca2ca8270369dd564ed30337d13b647b2fdf
3
+ metadata.gz: e361e553631b855b813f001eb2d58d78bfb8c5752042a9316ea850146941b60d
4
+ data.tar.gz: 82bd977ff5b759642f7e599f32f299b6e235641196226c97fd2ce11ea716e99b
5
5
  SHA512:
6
- metadata.gz: 5d46a21953420e4b79c53c4364e78c645e6e77852ee3bb74d2c4e6a8e12e8e5cd3c45f5cdaff2ed0c75df3f2e4e879ebd6687c47f48f104119060ebd618ffbbb
7
- data.tar.gz: 519f93377b19398884a9263cdde4103b32b2f6cd261a82a31a3fdd15109da27fe01d38dfa38628400c02c037ac99ef1327ec2eb7a47be9b05a609598399e8f5d
6
+ metadata.gz: d52f0daa15ee8d4f89e6170eb61761d0b98d913fa5fe0489e41eda0d62f5d097968e0c5b53d31ebb2cb23551cd4b484b4ecd9c467ab3e828304a7e037d45fc3d
7
+ data.tar.gz: d715edc681a9abac59d4e6291824ef3fb21071cc7a2b00e23e24db64321c62d35e8521b075f8299ea55d6328f987d79e6b6febfaddeb1da131f4430680d74175
data/.gitignore CHANGED
@@ -6,3 +6,4 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ jekyll-ebook_reader-*.gem
data/Gemfile.lock ADDED
@@ -0,0 +1,100 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ jekyll-ebook_reader (0.1.1)
5
+ fileutils (>= 1.1.0, <= 1.5.0)
6
+ jekyll (>= 3.0, < 5.0)
7
+
8
+ GEM
9
+ remote: https://rubygems.org/
10
+ specs:
11
+ addressable (2.7.0)
12
+ public_suffix (>= 2.0.2, < 5.0)
13
+ ast (2.4.2)
14
+ colorator (1.1.0)
15
+ concurrent-ruby (1.1.8)
16
+ em-websocket (0.5.2)
17
+ eventmachine (>= 0.12.9)
18
+ http_parser.rb (~> 0.6.0)
19
+ eventmachine (1.2.7)
20
+ ffi (1.14.2)
21
+ fileutils (1.5.0)
22
+ forwardable-extended (2.6.0)
23
+ http_parser.rb (0.6.0)
24
+ i18n (1.8.9)
25
+ concurrent-ruby (~> 1.0)
26
+ jekyll (4.2.0)
27
+ addressable (~> 2.4)
28
+ colorator (~> 1.0)
29
+ em-websocket (~> 0.5)
30
+ i18n (~> 1.0)
31
+ jekyll-sass-converter (~> 2.0)
32
+ jekyll-watch (~> 2.0)
33
+ kramdown (~> 2.3)
34
+ kramdown-parser-gfm (~> 1.0)
35
+ liquid (~> 4.0)
36
+ mercenary (~> 0.4.0)
37
+ pathutil (~> 0.9)
38
+ rouge (~> 3.0)
39
+ safe_yaml (~> 1.0)
40
+ terminal-table (~> 2.0)
41
+ jekyll-sass-converter (2.1.0)
42
+ sassc (> 2.0.1, < 3.0)
43
+ jekyll-watch (2.2.1)
44
+ listen (~> 3.0)
45
+ kramdown (2.3.0)
46
+ rexml
47
+ kramdown-parser-gfm (1.1.0)
48
+ kramdown (~> 2.0)
49
+ liquid (4.0.3)
50
+ listen (3.4.1)
51
+ rb-fsevent (~> 0.10, >= 0.10.3)
52
+ rb-inotify (~> 0.9, >= 0.9.10)
53
+ mercenary (0.4.0)
54
+ parallel (1.20.1)
55
+ parser (3.0.0.0)
56
+ ast (~> 2.4.1)
57
+ pathutil (0.16.2)
58
+ forwardable-extended (~> 2.6)
59
+ public_suffix (4.0.6)
60
+ rainbow (3.0.0)
61
+ rake (13.0.3)
62
+ rb-fsevent (0.10.4)
63
+ rb-inotify (0.10.1)
64
+ ffi (~> 1.0)
65
+ regexp_parser (2.0.3)
66
+ rexml (3.2.4)
67
+ rouge (3.26.0)
68
+ rubocop (1.9.1)
69
+ parallel (~> 1.10)
70
+ parser (>= 3.0.0.0)
71
+ rainbow (>= 2.2.2, < 4.0)
72
+ regexp_parser (>= 1.8, < 3.0)
73
+ rexml
74
+ rubocop-ast (>= 1.2.0, < 2.0)
75
+ ruby-progressbar (~> 1.7)
76
+ unicode-display_width (>= 1.4.0, < 3.0)
77
+ rubocop-ast (1.4.1)
78
+ parser (>= 2.7.1.5)
79
+ rubocop-rake (0.5.1)
80
+ rubocop
81
+ ruby-progressbar (1.11.0)
82
+ safe_yaml (1.0.5)
83
+ sassc (2.4.0)
84
+ ffi (~> 1.9)
85
+ terminal-table (2.0.0)
86
+ unicode-display_width (~> 1.1, >= 1.1.1)
87
+ unicode-display_width (1.7.0)
88
+
89
+ PLATFORMS
90
+ x86_64-darwin-18
91
+
92
+ DEPENDENCIES
93
+ bundler
94
+ jekyll-ebook_reader!
95
+ rake (~> 13.0)
96
+ rubocop (~> 1.7)
97
+ rubocop-rake
98
+
99
+ BUNDLED WITH
100
+ 2.2.9
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
- # Jekyll::EbookReader
1
+ # Jekyll-EbookReader
2
2
 
3
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/jekyll/ebook_reader`. To experiment with that code, run `bin/console` for an interactive prompt.
3
+ This plugin allows you to embed eBooks in your site on any page or post!
4
+
5
+ It uses [EPUB.js](http://futurepress.org/) to do so.
4
6
 
5
- TODO: Delete this and the text above, and describe your gem
6
7
 
7
8
  ## Installation
8
9
 
@@ -22,7 +23,30 @@ Or install it yourself as:
22
23
 
23
24
  ## Usage
24
25
 
25
- TODO: Write usage instructions here
26
+ To embed a book on a page/post:
27
+ 1. Add your ebook file to your `/assets` folder. Take note of the path to your book, starting at the base of your site. (E.g. it may be '/assets/myBook.epub', or if you put it inside an "ebooks" subfolder, it might be 'assets/ebooks/myBook.epub'.)
28
+ 2. Go to the page you want to embed it on and
29
+ a. add an 'ebook_path' variable to your front matter.
30
+ b. add an `{% ebook %}` tag wherever you'd like the book to appear.
31
+ That's it!
32
+
33
+ For example, if you wanted to embed Moby Dick on a page, you could add MobyDick.epub to your assets folder, and then make a page that looks like this:
34
+
35
+ ```
36
+ ---
37
+ layout: default
38
+ title: "EbookExample"
39
+ date: 2021-02-12 15:01:30 -0500
40
+ ebook_path: "/assets/MobyDick.epub"
41
+ ---
42
+
43
+ Gosh this is my favorite book!!
44
+
45
+ {% ebook %}
46
+
47
+ ```
48
+
49
+
26
50
 
27
51
  ## Development
28
52
 
@@ -32,7 +56,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
32
56
 
33
57
  ## Contributing
34
58
 
35
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/jekyll-ebook_reader.
59
+ Bug reports and pull requests are welcome on GitHub at https://github.com/qbatten/jekyll-ebook_reader.
36
60
 
37
61
  ## License
38
62
 
data/Rakefile CHANGED
@@ -6,3 +6,6 @@ require "rubocop/rake_task"
6
6
  RuboCop::RakeTask.new
7
7
 
8
8
  task default: :rubocop
9
+ RuboCop::RakeTask.new(:rubocop) do |t|
10
+ t.options = ["--display-cop-names", "--auto-correct"]
11
+ end
@@ -27,8 +27,9 @@ Gem::Specification.new do |spec|
27
27
  spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
28
28
  spec.require_paths = ["lib"]
29
29
 
30
- spec.add_dependency "jekyll", ">= 3.0", "< 5.0"
31
30
  spec.add_dependency "fileutils", ">= 1.1.0", "<= 1.5.0"
31
+ spec.add_dependency "jekyll", ">= 3.0", "< 5.0"
32
32
 
33
33
  spec.add_development_dependency "bundler"
34
+ spec.add_development_dependency "rubocop-rake"
34
35
  end
@@ -1,19 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "fileutils"
2
4
  require "jekyll"
3
5
 
4
-
5
6
  module Jekyll
6
7
  module EbookReader
8
+ # Generates static files
7
9
  class EbookEmbed < Jekyll::Generator
8
10
  safe false
9
11
  priority :low
10
12
  def generate(site)
11
13
  @site = site
12
14
  @site = site.static_files += add_all_static_files
13
-
14
15
  end
15
16
 
16
- private
17
+ private
17
18
 
18
19
  # Destination for sitemap.xml file within the site source directory
19
20
  def destination_path(file)
@@ -21,24 +22,24 @@ module Jekyll
21
22
  end
22
23
 
23
24
  def static_files_to_include
24
- ["reader.js" , "ebookreader_main.css", "ebookreader_iframe.css", "ajax-loader.gif"]
25
+ ["reader.js", "ebookreader_main.css", "ebookreader_iframe.css", "ajax-loader.gif"]
25
26
  end
26
27
 
27
28
  def add_all_static_files
28
29
  files ||= []
29
30
  static_files_to_include.each do |file_name|
30
- incl = Jekyll::StaticFile.new(@site, File.join( File.dirname(__FILE__), 'ebook_reader'), "assets/jekyll-ebookreader-assets", file_name)
31
+ incl = Jekyll::StaticFile.new(@site, File.join(File.dirname(__FILE__), "ebook_reader"),
32
+ "assets/jekyll-ebookreader-assets", file_name)
31
33
  incl.destination(destination_path(file_name))
32
34
  files.append(incl)
33
35
  end
34
36
  files
35
37
  end
36
38
  end
37
-
38
39
  end
39
40
  end
40
41
 
41
-
42
+ # Adds relevant scripts and html tags to html body
42
43
  class EBookReaderTag < Liquid::Tag
43
44
  def initialize(tag_name, input, tokens)
44
45
  super
@@ -46,21 +47,18 @@ class EBookReaderTag < Liquid::Tag
46
47
  end
47
48
 
48
49
  def render(context)
49
- path = File.join(File.dirname(__FILE__), 'ebook_reader', "assets/jekyll-ebookreader-assets/ebook_include_body_tag.html")
50
+ path = File.join(File.dirname(__FILE__), "ebook_reader",
51
+ "assets/jekyll-ebookreader-assets/ebook_include_body_tag.html")
50
52
  include_string = File.read(path)
51
- processed = Liquid::Template.parse(include_string).render(context)
52
- return processed
53
+ Liquid::Template.parse(include_string).render(context)
53
54
  end
54
55
  end
55
56
 
56
- # Add relevant scripts and style tags to doc head
57
+ # Add relevant scripts and style tags to doc head
57
58
  Jekyll::Hooks.register [:pages, :posts], :post_render do |post|
58
- path = File.join(File.dirname(__FILE__), 'ebook_reader', "assets/jekyll-ebookreader-assets/ebook_include_header.html")
59
+ path = File.join(File.dirname(__FILE__), "ebook_reader", "assets/jekyll-ebookreader-assets/ebook_include_header.html")
59
60
  include_string = File.read(path)
60
-
61
- if post.data.has_key? ("ebook_path")
62
- post.output = post.output.gsub("</head>", include_string + "</head>")
63
- end
61
+ post.output = post.output.gsub("</head>", "#{include_string}</head>") if post.data.key?("ebook_path")
64
62
  end
65
63
 
66
- Liquid::Template.register_tag('ebook', EBookReaderTag)
64
+ Liquid::Template.register_tag("ebook", EBookReaderTag)
@@ -1,42 +1,41 @@
1
1
  <div id="ebook-includes">
2
2
  <script type="text/javascript">
3
- let ebookPath = "{{page.ebook.ebook_path}}" || "{{page.ebook_path}}";
4
- let style_path = "{{page.ebook_iframe_custom_stylesheet}}" || "/assets/jekyll-ebookreader-assets/ebookreader_iframe.css"
5
- let eBookRenderOptions = {
6
- flow: "scrolled-doc",
7
- ignoreClass: "annotator-hl",
8
- width: "100%",
9
- height: "100%",
10
- stylesheet: style_path
11
- }
12
- document.addEventListener(
13
- 'DOMContentLoaded',
14
- () => launchEpubJS(ebookPath, eBookRenderOptions),
15
- false);
16
- </script>
17
- <a id="opener">
18
- <i class="material-icons">menu</i>
19
- </a>
20
- <div id="ebook-main">
21
- <div id="viewer" class="loading"></div>
22
- <span id="hiddenTitle"></span>
23
- <div id="bottom-nav-arrows">
24
- <a id="prev" href="#prev" class="arrow">
25
- <i class="material-icons">chevron_left</i>
26
- </a>
27
- <a id="next" href="#next" class="arrow">
28
- <i class="material-icons">chevron_right</i>
29
- </a>
30
- </div>
31
- </div>
32
- <div id="navigation">
33
- <a id="closer">
34
- <i class="material-icons">close</i>
3
+ let ebookPath = "{{page.ebook.ebook_path}}" || "{{page.ebook_path}}";
4
+ let style_path = "{{page.ebook_iframe_custom_stylesheet}}" || "/assets/jekyll-ebookreader-assets/ebookreader_iframe.css"
5
+ let eBookRenderOptions = {
6
+ flow: "scrolled-doc",
7
+ ignoreClass: "annotator-hl",
8
+ width: "100%",
9
+ height: "100%",
10
+ stylesheet: style_path
11
+ }
12
+ document.addEventListener(
13
+ 'DOMContentLoaded',
14
+ () => launchEpubJS(ebookPath, eBookRenderOptions),
15
+ false);
16
+ </script>
17
+ <a id="opener">
18
+ <i class="material-icons">menu</i>
19
+ </a>
20
+ <div id="ebook-main">
21
+ <div id="viewer" class="loading"></div>
22
+ <span id="hiddenTitle"></span>
23
+ <div id="bottom-nav-arrows">
24
+ <a id="prev" href="#prev" class="arrow">
25
+ <i class="material-icons">chevron_left</i>
26
+ </a>
27
+ <a id="next" href="#next" class="arrow">
28
+ <i class="material-icons">chevron_right</i>
35
29
  </a>
36
- <h1 id="title">...</h1>
37
- <image id="cover" width="150px" />
38
- <h2 id="author">...</h2>
39
- <ul id="toc"></ul>
40
30
  </div>
41
31
  </div>
32
+ <div id="navigation">
33
+ <a id="closer">
34
+ <i class="material-icons">close</i>
35
+ </a>
36
+ <h1 id="title">...</h1>
37
+ <image id="cover" width="150px" />
38
+ <h2 id="author">...</h2>
39
+ <ul id="toc"></ul>
40
+ </div>
42
41
  </div>
@@ -204,102 +204,4 @@ function launchEpubJS(bookURL, bookRenderOptions) {
204
204
 
205
205
  });
206
206
 
207
- }
208
-
209
-
210
- function wait(t) {
211
- return new Promise(function(resolve) {
212
- window.setTimeout(resolve, t)
213
- });
214
- }
215
-
216
- function handleHypothesisChange(state) {
217
-
218
- let epubjsStyleIfHypoOpen = `body.hypothesis-highlights-always-on { padding-left: 5px !important; }`
219
-
220
- let main = document.querySelector('#ebook-main');
221
- let hypoWasAlreadyOpen = main.classList.contains('hypoIsOpen');
222
- let hypoSidebarDidChange = (
223
- (hypoWasAlreadyOpen && !state.expanded)
224
- || (!hypoWasAlreadyOpen && state.expanded));
225
- if (hypoSidebarDidChange) {
226
- // Wait until epub.js iframe is loaded
227
- if (!document.querySelector('div.epub-view iframe')) {
228
- wait(1500)
229
- .then(
230
- (a) => {
231
- console.log('waiting...', a);
232
- resizeReflowAndScroll();
233
- }
234
- );
235
- } else {
236
- resizeReflowAndScroll();
237
- }
238
- } else {
239
- return;
240
- }
241
-
242
- // Reflow txt to still be visible, scroll to maintain location
243
- function resizeReflowAndScroll() {
244
- console.log('reflowing...')
245
-
246
- // Main window
247
- let currScroll = scrollY;
248
- let viewer = document.querySelector("#viewer");
249
- let parsedRenditionWidthPct = Number.parseInt(rendition.settings.width) / 100;
250
-
251
- // Hypothesis
252
- let hypoSidebar = document.querySelector("hypothesis-sidebar")
253
- .shadowRoot.querySelector('div.annotator-frame');
254
-
255
- // epub.js iframe
256
- let iframeEl = document.querySelector('iframe');
257
- let iframePaddingElement = iframeEl.contentDocument.querySelector("#iframePaddingElement");
258
- console.log(iframeEl, iframePaddingElement);
259
- if (!iframePaddingElement) {
260
- iframePaddingElement = document.createElement("style");
261
- iframePaddingElement.id = "iframePaddingElement";
262
- iframeEl.contentDocument.head.appendChild(iframePaddingElement);
263
- }
264
- console.log(iframeEl, iframePaddingElement);
265
-
266
- let bodyEl = iframeEl.contentDocument.body;
267
- let currBodyPadding = [Number.parseInt(bodyEl.style.paddingLeft),
268
- Number.parseInt(bodyEl.style.paddingRight)
269
- ];
270
-
271
- // If hypothesis expanded (this fn is only called if it was a real sidebar open/close)
272
- if (state.expanded) {
273
- main.classList.add('hypoIsOpen');
274
-
275
- // Inject reduced padding styling to epub iframe
276
- iframePaddingElement.textContent = epubjsStyleIfHypoOpen;
277
-
278
- // Calculate new size
279
- let rectViewer = viewer.getBoundingClientRect();
280
- let rectHypo = hypoSidebar.getBoundingClientRect();
281
- let spaceNeeded = Number.parseFloat(rectViewer.right - (rectHypo.left - rectHypo.width));
282
- let pct = spaceNeeded / Number.parseFloat(rectViewer.width);
283
- pct = (1 - pct) * 100;
284
- pct = Number.parseInt(pct).toString();
285
- pct = pct + '%';
286
- console.log('resizeDetails', {pct, spaceNeeded, rectHypo, rectViewer});
287
- rendition.resize(pct);
288
-
289
- let scrollNew = currScroll + 0.262 * currScroll;
290
- wait(300).then(() => scrollTo({ 'top': scrollNew }));
291
-
292
- } else if ((state.expanded === false)) {
293
- rendition.resize("100%");
294
- main.classList.remove("hypoIsOpen");
295
- iframePaddingElement.textContent = "";
296
-
297
- let scrollNew = currScroll / 1.262;
298
- wait(300)
299
- .then(() => scrollTo({ 'top': scrollNew }));
300
-
301
- }
302
-
303
- };
304
-
305
207
  }
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Jekyll
4
4
  module EbookReader
5
- VERSION = "0.1.0"
5
+ VERSION = "0.1.1"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-ebook_reader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Quinn Batten
@@ -10,6 +10,26 @@ bindir: exe
10
10
  cert_chain: []
11
11
  date: 2021-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: fileutils
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.1.0
20
+ - - "<="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.5.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - ">="
28
+ - !ruby/object:Gem::Version
29
+ version: 1.1.0
30
+ - - "<="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.5.0
13
33
  - !ruby/object:Gem::Dependency
14
34
  name: jekyll
15
35
  requirement: !ruby/object:Gem::Requirement
@@ -31,27 +51,21 @@ dependencies:
31
51
  - !ruby/object:Gem::Version
32
52
  version: '5.0'
33
53
  - !ruby/object:Gem::Dependency
34
- name: fileutils
54
+ name: bundler
35
55
  requirement: !ruby/object:Gem::Requirement
36
56
  requirements:
37
57
  - - ">="
38
58
  - !ruby/object:Gem::Version
39
- version: 1.1.0
40
- - - "<="
41
- - !ruby/object:Gem::Version
42
- version: 1.5.0
43
- type: :runtime
59
+ version: '0'
60
+ type: :development
44
61
  prerelease: false
45
62
  version_requirements: !ruby/object:Gem::Requirement
46
63
  requirements:
47
64
  - - ">="
48
65
  - !ruby/object:Gem::Version
49
- version: 1.1.0
50
- - - "<="
51
- - !ruby/object:Gem::Version
52
- version: 1.5.0
66
+ version: '0'
53
67
  - !ruby/object:Gem::Dependency
54
- name: bundler
68
+ name: rubocop-rake
55
69
  requirement: !ruby/object:Gem::Requirement
56
70
  requirements:
57
71
  - - ">="
@@ -76,6 +90,7 @@ files:
76
90
  - ".rubocop.yml"
77
91
  - CHANGELOG.md
78
92
  - Gemfile
93
+ - Gemfile.lock
79
94
  - LICENSE.txt
80
95
  - README.md
81
96
  - Rakefile