jekyll-web-novel 0.1.8 → 0.2.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.
- checksums.yaml +4 -4
- data/_boilerplates/chapter.md +1 -4
- data/_boilerplates/preview.md +5 -8
- data/_boilerplates/{page.md → tab.md} +3 -2
- data/_boilerplates/volume.md +1 -1
- data/_config.yml +10 -2
- data/_includes/alerts.html +5 -0
- data/_includes/header.html +18 -12
- data/_includes/reader.html +1 -3
- data/_includes/share_link.html +20 -0
- data/_includes/toc.html +1 -1
- data/_layouts/chapter.html +3 -2
- data/_layouts/home.html +1 -1
- data/_layouts/page.html +1 -1
- data/_layouts/preview.html +3 -0
- data/_layouts/root.html +5 -0
- data/_sass/jekyll-web-novel.sass +10 -5
- data/_sass/web-novel/alerts.sass +45 -0
- data/_sass/web-novel/colors.sass +3 -2
- data/_sass/web-novel/reader.sass +1 -2
- data/_sass/web-novel/scrollNav.sass +3 -0
- data/admin/config.yml +5 -2
- data/assets/js/CopyBtn.js +56 -0
- data/assets/js/bookReader.js +46 -11
- metadata +11 -9
- data/pages/chapters.md +0 -9
- data/pages/home.md +0 -16
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 01a90aba493fb6c9e1a54a59adf150447c5024b7e5deac759b4c04a581879894
|
|
4
|
+
data.tar.gz: a063bdf3620e148d027ad1ca78cb66d5a6dfaf7fef755e387ae5f1c691a2d74c
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9142b4ea5cd79aba0016c67bd0e3cac950b4548a1e7eb6843c07a6f0beebca44e2640630f2995d29e2322fc5febbe1b99e3c3b0f34243452ee4283f7496a7872
|
|
7
|
+
data.tar.gz: 2552b29ac4d2fb78e82eabcdec0f3f0b7b7146fce5b6bc43a9ae868db33fa35eed4b5cc34f1f2362cc3a186eabfe2d6e44cc9276b107cb88701a8c9e548e74ba
|
data/_boilerplates/chapter.md
CHANGED
|
@@ -3,14 +3,11 @@ _boilerplate:
|
|
|
3
3
|
path: '_chapters'
|
|
4
4
|
timestamp: false
|
|
5
5
|
title: title
|
|
6
|
-
slug: "{{ vol }}-{{ cht }}-{{ title }}
|
|
6
|
+
slug: "{{ vol }}-{{ cht }}-{{ title }}"
|
|
7
7
|
vol: '01'
|
|
8
8
|
|
|
9
9
|
title: {{ boilerplate.title }}
|
|
10
10
|
created: {{ boilerplate.time }}
|
|
11
|
-
# permalink: /chapters/{{ boilerplate.random_url }}
|
|
12
|
-
permalink: /chapters/{{ boilerplate.slug }}
|
|
13
|
-
layout: chapter
|
|
14
11
|
chapter: {{ boilerplate.cht }}
|
|
15
12
|
volume: {{ boilerplate.vol }}
|
|
16
13
|
---
|
data/_boilerplates/preview.md
CHANGED
|
@@ -3,20 +3,17 @@ _boilerplate:
|
|
|
3
3
|
path: '_previews'
|
|
4
4
|
timestamp: false
|
|
5
5
|
title: title
|
|
6
|
-
slug: "{{ vol }}-{{ cht }}-{{ title }}
|
|
6
|
+
slug: "{{ vol }}-{{ cht }}-{{ title }}"
|
|
7
7
|
vol: '01'
|
|
8
|
-
localhost:
|
|
9
|
-
baseurl:
|
|
10
8
|
|
|
11
|
-
# http://localhost:4000/chapters/{{ boilerplate.random_url }}#reader
|
|
12
|
-
# https://example.com/chapters/{{ boilerplate.random_url }}#reader
|
|
13
9
|
title: {{ boilerplate.title }}
|
|
14
10
|
created: {{ boilerplate.time }}
|
|
15
|
-
permalink: /chapters/{{ boilerplate.random_url }}
|
|
16
|
-
# permalink: /chapters/{{ boilerplate.slug }}
|
|
17
|
-
layout: chapter
|
|
18
11
|
chapter: {{ boilerplate.cht }}
|
|
19
12
|
volume: {{ boilerplate.vol }}
|
|
13
|
+
|
|
14
|
+
share_link: https://example.com/chapters/{{ boilerplate.random_url }}#reader
|
|
15
|
+
preview_id: {{ boilerplate.random_url }}
|
|
16
|
+
permalink: /chapters/{{ boilerplate.random_url }}
|
|
20
17
|
---
|
|
21
18
|
|
|
22
19
|
### Chapter {{ boilerplate.cht }}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
_boilerplate:
|
|
3
|
-
path:
|
|
3
|
+
path: _tabs
|
|
4
|
+
order: 0
|
|
4
5
|
|
|
5
6
|
title: {{ boilerplate.title }}
|
|
6
7
|
created: {{ boilerplate.time }}
|
|
7
8
|
permalink: {{ boilerplate.slug }}
|
|
8
|
-
|
|
9
|
+
order: {{ boilerplate.order }}
|
|
9
10
|
---
|
|
10
11
|
|
|
11
12
|
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
data/_boilerplates/volume.md
CHANGED
data/_config.yml
CHANGED
|
@@ -22,6 +22,7 @@ novel:
|
|
|
22
22
|
title: "The Upper Crust"
|
|
23
23
|
author: "John Doe"
|
|
24
24
|
lang: en
|
|
25
|
+
start_chapter: 1
|
|
25
26
|
copyright:
|
|
26
27
|
short: >-
|
|
27
28
|
**The Upper Crust, Vol 1**
|
|
@@ -41,13 +42,17 @@ collections:
|
|
|
41
42
|
chapters:
|
|
42
43
|
sort_by: chapter
|
|
43
44
|
output: true
|
|
45
|
+
permalink: /:collection/:name
|
|
44
46
|
previews:
|
|
45
47
|
sort_by: chapter
|
|
46
48
|
output: true
|
|
47
|
-
|
|
49
|
+
permalink: /chapters/:name
|
|
48
50
|
volumes:
|
|
49
51
|
sort_by: volume
|
|
50
52
|
output: false
|
|
53
|
+
tabs:
|
|
54
|
+
sort_by: order
|
|
55
|
+
output: true
|
|
51
56
|
|
|
52
57
|
|
|
53
58
|
defaults:
|
|
@@ -56,15 +61,18 @@ defaults:
|
|
|
56
61
|
values:
|
|
57
62
|
layout: "chapter"
|
|
58
63
|
type: 'chapters'
|
|
64
|
+
published: true
|
|
59
65
|
- scope:
|
|
60
66
|
path: "_previews/*"
|
|
61
67
|
values:
|
|
62
68
|
layout: "preview"
|
|
63
69
|
type: 'previews'
|
|
70
|
+
published: false
|
|
64
71
|
- scope:
|
|
65
|
-
path: "
|
|
72
|
+
path: "_tabs/*"
|
|
66
73
|
values:
|
|
67
74
|
layout: "page"
|
|
75
|
+
type: 'tabs'
|
|
68
76
|
|
|
69
77
|
plugins:
|
|
70
78
|
- jekyll-feed
|
data/_includes/header.html
CHANGED
|
@@ -1,16 +1,22 @@
|
|
|
1
1
|
|
|
2
2
|
<header scroll-nav class="hbox nav hbox:long">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
<h1>
|
|
4
|
+
<a href={{site.baseurl}}>
|
|
5
|
+
{{ site.title }}
|
|
6
|
+
</a>
|
|
7
|
+
</h1>
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
<a
|
|
14
|
-
|
|
15
|
-
|
|
9
|
+
<div class="hbox nav">
|
|
10
|
+
|
|
11
|
+
{% for tab in site.tabs %}
|
|
12
|
+
{% unless page.path == tab.path %}
|
|
13
|
+
<a href="{{ tab.url }}">{{ tab.title }}</a>
|
|
14
|
+
{% endunless %}
|
|
15
|
+
{% endfor %}
|
|
16
|
+
|
|
17
|
+
{% if site.novel.start_chapter %}
|
|
18
|
+
{% assign cht1 = site.chapters | find: 'chapter', page.start_chapter %}
|
|
19
|
+
<a go-to-bookmark class="big-link" href="{{ cht1.url }}#reader">Read</a>
|
|
20
|
+
{% endif %}
|
|
21
|
+
</div>
|
|
16
22
|
</header>
|
data/_includes/reader.html
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
|
|
2
|
-
<div data-page="{{ page.chapter }}" class="reader" id="reader" lang="{{ site.novel.lang }}">
|
|
2
|
+
<div data-page="{{ page.chapter }}" class="reader container" id="reader" lang="{{ site.novel.lang }}">
|
|
3
3
|
<div class="chapter__content">
|
|
4
4
|
{{ content }}
|
|
5
5
|
</div>
|
|
6
6
|
</div>
|
|
7
|
-
|
|
8
|
-
<script src="{{ '/assets/js/bookReader.js' | relative_url }}"></script>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
|
|
2
|
+
{% if page.published %}
|
|
3
|
+
{% if page.share_link != false %}
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
{% assign share = page.share_link %}
|
|
7
|
+
{% unless share %}
|
|
8
|
+
{% assign share = page.url | | prepend: site.url %}
|
|
9
|
+
{% endunless %}
|
|
10
|
+
{% assign share = share | append: '#reader' %}
|
|
11
|
+
|
|
12
|
+
<div class="container mt hbox">
|
|
13
|
+
<div class="div"></div>
|
|
14
|
+
<button copy="{{ share }}" title="{{ share }}">
|
|
15
|
+
Share Link
|
|
16
|
+
</button>
|
|
17
|
+
</div>
|
|
18
|
+
|
|
19
|
+
{% endif %}
|
|
20
|
+
{% endif %}
|
data/_includes/toc.html
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
|
|
2
2
|
<h1 id="#{{page.title | slugify }}">{{ page.title }}</h1>
|
|
3
3
|
|
|
4
|
-
{% assign volumes =
|
|
4
|
+
{% assign volumes = include.chapters | group_by: 'volume' %}
|
|
5
5
|
{% for vol in volumes %}
|
|
6
6
|
|
|
7
7
|
{% assign volume = site.volumes | find: 'volume', vol.name %}
|
data/_layouts/chapter.html
CHANGED
data/_layouts/home.html
CHANGED
data/_layouts/page.html
CHANGED
data/_layouts/preview.html
CHANGED
data/_layouts/root.html
CHANGED
|
@@ -5,11 +5,16 @@
|
|
|
5
5
|
</head>
|
|
6
6
|
<body>
|
|
7
7
|
|
|
8
|
+
{% include alerts.html %}
|
|
8
9
|
|
|
9
10
|
{{content}}
|
|
10
11
|
|
|
11
12
|
{% include footer.html %}
|
|
12
13
|
|
|
14
|
+
|
|
15
|
+
<script src="{{ '/assets/js/bookReader.js' | relative_url }}"></script>
|
|
13
16
|
<script src="{{ '/assets/js/scrollNav.js' | relative_url }}"></script>
|
|
17
|
+
<!-- vvv keep as last script to run vvv -->
|
|
18
|
+
<script src="{{ '/assets/js/CopyBtn.js' | relative_url }}"></script>
|
|
14
19
|
</body>
|
|
15
20
|
</html>
|
data/_sass/jekyll-web-novel.sass
CHANGED
|
@@ -5,14 +5,11 @@
|
|
|
5
5
|
@import 'web-novel/footer'
|
|
6
6
|
@import 'web-novel/header'
|
|
7
7
|
@import 'web-novel/scrollNav'
|
|
8
|
+
@import 'web-novel/alerts'
|
|
8
9
|
|
|
9
10
|
\:root
|
|
10
11
|
font-size: 16px
|
|
11
12
|
|
|
12
|
-
html
|
|
13
|
-
scroll-behavior: smooth
|
|
14
|
-
|
|
15
|
-
|
|
16
13
|
.hbox
|
|
17
14
|
display: grid
|
|
18
15
|
grid-auto-flow: column
|
|
@@ -23,6 +20,9 @@ html
|
|
|
23
20
|
.vbox > * + *
|
|
24
21
|
margin-top: 2em
|
|
25
22
|
|
|
23
|
+
.vbox > *
|
|
24
|
+
display: block
|
|
25
|
+
|
|
26
26
|
h1 a
|
|
27
27
|
color: var(--text-main)
|
|
28
28
|
text-decoration: none
|
|
@@ -42,7 +42,7 @@ h1 a
|
|
|
42
42
|
|
|
43
43
|
margin: 1em 0
|
|
44
44
|
|
|
45
|
-
.
|
|
45
|
+
.container
|
|
46
46
|
max-width: 35em
|
|
47
47
|
margin: 0 auto
|
|
48
48
|
|
|
@@ -54,6 +54,11 @@ h1 a
|
|
|
54
54
|
line-height: 1em
|
|
55
55
|
margin: 1em 0
|
|
56
56
|
|
|
57
|
+
.mt
|
|
58
|
+
margin-top: 2em
|
|
59
|
+
|
|
60
|
+
button
|
|
61
|
+
border: solid 2px var(--text-muted, #888)
|
|
57
62
|
|
|
58
63
|
|
|
59
64
|
@media only screen and (max-width: 40rem)
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
|
|
2
|
+
.alerts
|
|
3
|
+
font-size: 1.4rem
|
|
4
|
+
position: fixed
|
|
5
|
+
color: var(--text-bright)
|
|
6
|
+
right: 0
|
|
7
|
+
left: 0
|
|
8
|
+
bottom: 0
|
|
9
|
+
margin: 3px
|
|
10
|
+
max-width: 100vw
|
|
11
|
+
pointer-events: none
|
|
12
|
+
|
|
13
|
+
@keyframes slideOutRight
|
|
14
|
+
0%
|
|
15
|
+
transform: translateX(0) scaleY(100%)
|
|
16
|
+
90%
|
|
17
|
+
transform: translateX(0) scaleY(100%)
|
|
18
|
+
opacity: 1
|
|
19
|
+
99%
|
|
20
|
+
transform: translateX(00%) scaleY(0%)
|
|
21
|
+
opacity: 0
|
|
22
|
+
margin-top: 2em
|
|
23
|
+
100%
|
|
24
|
+
margin-top: 0
|
|
25
|
+
|
|
26
|
+
.alerts > *
|
|
27
|
+
outline: solid 1px var(--selection)
|
|
28
|
+
box-shadow: 0 0 20px 5px var(--background-body)
|
|
29
|
+
background-color: var(--button-base)
|
|
30
|
+
padding: .2em .6em
|
|
31
|
+
border-radius: 6px
|
|
32
|
+
transform: translateX(200%)
|
|
33
|
+
animation: 2s ease-in 0s slideOutRight
|
|
34
|
+
// transform: translateX(0)
|
|
35
|
+
// transition: transform 150ms ease-in 1s
|
|
36
|
+
// transform: translateX(200%)
|
|
37
|
+
|
|
38
|
+
@media only screen and (min-width: 40rem)
|
|
39
|
+
.alerts
|
|
40
|
+
padding-bottom: 5rem
|
|
41
|
+
@media only screen and (min-width: 60rem)
|
|
42
|
+
.alerts
|
|
43
|
+
left: unset
|
|
44
|
+
max-width: 60%
|
|
45
|
+
padding-right: 5rem
|
data/_sass/web-novel/colors.sass
CHANGED
data/_sass/web-novel/reader.sass
CHANGED
data/admin/config.yml
CHANGED
|
@@ -13,9 +13,9 @@ public_folder: "/assets/uploads"
|
|
|
13
13
|
site_url: https://example.com
|
|
14
14
|
|
|
15
15
|
collections:
|
|
16
|
-
- name:
|
|
16
|
+
- name: tabs
|
|
17
17
|
label: 'Pages'
|
|
18
|
-
folder: '
|
|
18
|
+
folder: '_tabs/'
|
|
19
19
|
create: false
|
|
20
20
|
slug: "{{slug}}"
|
|
21
21
|
summery: "{{title}}"
|
|
@@ -23,6 +23,7 @@ collections:
|
|
|
23
23
|
preview: false
|
|
24
24
|
fields:
|
|
25
25
|
- { label: 'Title', name: "title", widget: 'string' }
|
|
26
|
+
- { label: 'Published', name: 'published', widget: 'boolean', default: true, required: false }
|
|
26
27
|
- { label: 'Permalink', name: "permalink", widget: 'string', default: '/:basename/', required: false }
|
|
27
28
|
- { label: 'Body', name: 'body', widget: 'markdown' }
|
|
28
29
|
|
|
@@ -36,6 +37,7 @@ collections:
|
|
|
36
37
|
preview: false
|
|
37
38
|
fields:
|
|
38
39
|
- { label: 'Title', name: "title", widget: 'string' }
|
|
40
|
+
- { label: 'Published', name: 'published', widget: 'boolean', default: true, required: false }
|
|
39
41
|
- { label: 'Chapter', name: "chapter", widget: 'number', default: 01, value_type: 'int' }
|
|
40
42
|
- { label: 'Volume', name: "volume", widget: 'number', default: 01, value_type: 'int' }
|
|
41
43
|
- { label: 'Permalink', name: "permalink", widget: 'string', default: '/:basename/', required: false }
|
|
@@ -51,6 +53,7 @@ collections:
|
|
|
51
53
|
preview: false
|
|
52
54
|
fields:
|
|
53
55
|
- { label: 'Title', name: "title", widget: 'string' }
|
|
56
|
+
- { label: 'Published', name: 'published', widget: 'boolean', default: false, required: false }
|
|
54
57
|
- { label: 'Chapter', name: "chapter", widget: 'number', default: 01, value_type: 'int' }
|
|
55
58
|
- { label: 'Volume', name: "volume", widget: 'number', default: 01, value_type: 'int' }
|
|
56
59
|
- { label: 'Permalink', name: "permalink", widget: 'string', default: '/:basename/', required: false }
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
class CopyBtn {
|
|
2
|
+
constructor(
|
|
3
|
+
target = '[copy]',
|
|
4
|
+
attr = 'copy',
|
|
5
|
+
fun = (t) => {
|
|
6
|
+
alert(CopyBtn.copyMsg(t));
|
|
7
|
+
return(t);
|
|
8
|
+
}
|
|
9
|
+
) {
|
|
10
|
+
this.target = target;
|
|
11
|
+
this.field = attr;
|
|
12
|
+
this.fun = fun;
|
|
13
|
+
this.activateButtons();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
activateButtons() {
|
|
17
|
+
document.querySelectorAll(this.target).forEach((b)=>{
|
|
18
|
+
b.addEventListener('click', (e)=>{
|
|
19
|
+
this.copyElementText(b);
|
|
20
|
+
})
|
|
21
|
+
})
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
copyElementText(el) {
|
|
25
|
+
var text = el.getAttribute(this.field);
|
|
26
|
+
console.log(text)
|
|
27
|
+
navigator.clipboard.writeText(this.fun(text, el));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
static copyMsg(m) {
|
|
31
|
+
return('Copied: <code>'+m+'</code>');
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
// TODO: figure out how to import this vv
|
|
37
|
+
custom_alert_function = function(msg) {
|
|
38
|
+
var sp = document.createElement('span');
|
|
39
|
+
sp.innerHTML = msg;
|
|
40
|
+
document.querySelector('#alerts').appendChild(sp);
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
window.addEventListener('load', (e) => {
|
|
46
|
+
new CopyBtn('button[copy]', 'copy', (t) => {
|
|
47
|
+
custom_alert_function(CopyBtn.copyMsg(t));
|
|
48
|
+
return(t);
|
|
49
|
+
});
|
|
50
|
+
new CopyBtn('a[copy]', 'copy', (t)=>{
|
|
51
|
+
var cUrl = new URL(window.location);
|
|
52
|
+
cUrl.hash = t;
|
|
53
|
+
custom_alert_function(CopyBtn.copyMsg(cUrl));
|
|
54
|
+
return(cUrl);
|
|
55
|
+
});
|
|
56
|
+
});
|
data/assets/js/bookReader.js
CHANGED
|
@@ -1,18 +1,24 @@
|
|
|
1
1
|
class BookReader {
|
|
2
|
-
constructor (selector = '#reader', getCurrent = true) {
|
|
2
|
+
constructor (selector = '#reader', getCurrent = true, anchorTag = 'href') {
|
|
3
3
|
this.pNodes = document.querySelectorAll(`${selector} p`);
|
|
4
4
|
this.reader = document.querySelector(selector);
|
|
5
|
-
this.
|
|
6
|
-
this.
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
this.
|
|
10
|
-
|
|
5
|
+
this.setBookMarkLink();
|
|
6
|
+
if(this.reader) {
|
|
7
|
+
this.pSelected = null;
|
|
8
|
+
this.anchorTag = anchorTag;
|
|
9
|
+
this.anchorParagraphs();
|
|
10
|
+
this.scrollToAnchor();
|
|
11
|
+
if(getCurrent){
|
|
12
|
+
this.tackSelectedParagraph();
|
|
13
|
+
};
|
|
14
|
+
}
|
|
11
15
|
}
|
|
12
16
|
|
|
13
17
|
tackSelectedParagraph() {
|
|
14
18
|
this.pNodes.forEach((p, i) => {
|
|
15
|
-
p.addEventListener('click',(e) =>
|
|
19
|
+
p.addEventListener('click',(e) => {
|
|
20
|
+
this.setCurrent(p)
|
|
21
|
+
});
|
|
16
22
|
p.addEventListener('select',(e) => this.setCurrent(p));
|
|
17
23
|
});
|
|
18
24
|
}
|
|
@@ -33,11 +39,13 @@ class BookReader {
|
|
|
33
39
|
|
|
34
40
|
anchorParagraphs() {
|
|
35
41
|
var c = 0;
|
|
42
|
+
var anchorTag = this.anchorTag;
|
|
36
43
|
this.pNodes.forEach(function(p){
|
|
37
44
|
if(p.innerHTML.match('...')) {
|
|
38
45
|
c = c+1;
|
|
39
|
-
var a = document.createElement('a')
|
|
40
|
-
a.
|
|
46
|
+
var a = document.createElement('a');
|
|
47
|
+
a.addEventListener('click',(e)=>{BookReader.saveBookMark(p)});
|
|
48
|
+
a.setAttribute(anchorTag, `#p${c}`)
|
|
41
49
|
a.setAttribute('class', `anchor`)
|
|
42
50
|
p.setAttribute('id', `p${c}`)
|
|
43
51
|
a.innerHTML = String(c)
|
|
@@ -54,7 +62,34 @@ class BookReader {
|
|
|
54
62
|
document.querySelector(hash).scrollIntoView()
|
|
55
63
|
};
|
|
56
64
|
}
|
|
65
|
+
|
|
66
|
+
static saveBookMark(p) {
|
|
67
|
+
var url = new URL(window.location);
|
|
68
|
+
url.hash = '#'+p.getAttribute('id');
|
|
69
|
+
window.localStorage.setItem('bookmark', url.href)
|
|
70
|
+
custom_alert_function('Saved Bookmark')
|
|
71
|
+
console.log(window.localStorage.getItem('bookmark'));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
setBookMarkLink() {
|
|
75
|
+
var bm = window.localStorage.getItem('bookmark');
|
|
76
|
+
if(bm != undefined) {
|
|
77
|
+
bm = new URL(bm);
|
|
78
|
+
document.querySelectorAll('[go-to-bookmark]').forEach((b)=>{
|
|
79
|
+
b.setAttribute('href', bm.href)
|
|
80
|
+
b.setAttribute('title', 'Bookmark: '+bm.pathname+bm.hash)
|
|
81
|
+
})
|
|
82
|
+
}
|
|
83
|
+
}
|
|
57
84
|
}
|
|
85
|
+
|
|
86
|
+
// TODO: figure out how to import this vv
|
|
87
|
+
custom_alert_function = function(msg) {
|
|
88
|
+
var sp = document.createElement('span');
|
|
89
|
+
sp.innerHTML = msg;
|
|
90
|
+
document.querySelector('#alerts').appendChild(sp);
|
|
91
|
+
};
|
|
92
|
+
|
|
58
93
|
window.addEventListener('load', (e) => {
|
|
59
|
-
new BookReader('#reader', true);
|
|
94
|
+
new BookReader('#reader', true, 'copy');
|
|
60
95
|
});
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jekyll-web-novel
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- opsaaaaa
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2022-05-
|
|
11
|
+
date: 2022-05-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: webrick
|
|
@@ -36,20 +36,20 @@ dependencies:
|
|
|
36
36
|
requirements:
|
|
37
37
|
- - "~>"
|
|
38
38
|
- !ruby/object:Gem::Version
|
|
39
|
-
version: '4.
|
|
39
|
+
version: '4.3'
|
|
40
40
|
- - ">="
|
|
41
41
|
- !ruby/object:Gem::Version
|
|
42
|
-
version: 4.
|
|
42
|
+
version: 4.3.0
|
|
43
43
|
type: :development
|
|
44
44
|
prerelease: false
|
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
|
46
46
|
requirements:
|
|
47
47
|
- - "~>"
|
|
48
48
|
- !ruby/object:Gem::Version
|
|
49
|
-
version: '4.
|
|
49
|
+
version: '4.3'
|
|
50
50
|
- - ">="
|
|
51
51
|
- !ruby/object:Gem::Version
|
|
52
|
-
version: 4.
|
|
52
|
+
version: 4.3.0
|
|
53
53
|
- !ruby/object:Gem::Dependency
|
|
54
54
|
name: jekyll
|
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -103,10 +103,11 @@ files:
|
|
|
103
103
|
- LICENSE.txt
|
|
104
104
|
- README.md
|
|
105
105
|
- _boilerplates/chapter.md
|
|
106
|
-
- _boilerplates/page.md
|
|
107
106
|
- _boilerplates/preview.md
|
|
107
|
+
- _boilerplates/tab.md
|
|
108
108
|
- _boilerplates/volume.md
|
|
109
109
|
- _config.yml
|
|
110
|
+
- _includes/alerts.html
|
|
110
111
|
- _includes/chapter_header.html
|
|
111
112
|
- _includes/chapter_list.html
|
|
112
113
|
- _includes/chapter_nav.html
|
|
@@ -115,6 +116,7 @@ files:
|
|
|
115
116
|
- _includes/head.html
|
|
116
117
|
- _includes/header.html
|
|
117
118
|
- _includes/reader.html
|
|
119
|
+
- _includes/share_link.html
|
|
118
120
|
- _includes/toc.html
|
|
119
121
|
- _layouts/chapter.html
|
|
120
122
|
- _layouts/default.html
|
|
@@ -124,6 +126,7 @@ files:
|
|
|
124
126
|
- _layouts/root.html
|
|
125
127
|
- _layouts/volume.html
|
|
126
128
|
- _sass/jekyll-web-novel.sass
|
|
129
|
+
- _sass/web-novel/alerts.sass
|
|
127
130
|
- _sass/web-novel/chapter.sass
|
|
128
131
|
- _sass/web-novel/colors.sass
|
|
129
132
|
- _sass/web-novel/footer.sass
|
|
@@ -134,12 +137,11 @@ files:
|
|
|
134
137
|
- admin/index.html
|
|
135
138
|
- assets/404.html
|
|
136
139
|
- assets/css/style.sass
|
|
140
|
+
- assets/js/CopyBtn.js
|
|
137
141
|
- assets/js/bookReader.js
|
|
138
142
|
- assets/js/forwardNetlifyIdentityToken.js
|
|
139
143
|
- assets/js/scrollNav.js
|
|
140
144
|
- exe/jekyll-web-novel
|
|
141
|
-
- pages/chapters.md
|
|
142
|
-
- pages/home.md
|
|
143
145
|
homepage: https://github.com/opsaaaaa/web_novel_theme
|
|
144
146
|
licenses:
|
|
145
147
|
- MIT
|
data/pages/chapters.md
DELETED
data/pages/home.md
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
title: Web Novel Theme for Jekyll
|
|
3
|
-
permalink: /
|
|
4
|
-
layout: home
|
|
5
|
-
start_chapter: 1
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# {{ site.novel.title }}
|
|
9
|
-
|
|
10
|
-
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Orci porta non pulvinar neque laoreet suspendisse interdum. Ut porttitor leo a diam sollicitudin tempor id eu nisl.
|
|
11
|
-
{: .big-text}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
{% assign cht1 = site.chapters | find: 'chapter', page.start_chapter %}
|
|
15
|
-
[Read Now]({{ cht1.url | relative_url}}#reader){: .mega-link}
|
|
16
|
-
|