jekyll-ebook_reader 0.1.0 → 0.1.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 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