jekyll-theme-open-project 1.2.5 → 1.3

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: f554f580dec2539c21dafb88d79d1b8e72a5a8c2ca86aca931d0234420a050ff
4
- data.tar.gz: abcd76ed84e0ecc88ed9b0f1ca3d42c08b720dff3dbd6acddb36b63b4ab7cee5
3
+ metadata.gz: 82039c5e0b7470495d92c3be14a95d13cfce792e2870a4f8a8750d2c5420352e
4
+ data.tar.gz: 9bc073983409ad7f531b9a98cf560615fddb746a3274ec89edfede271350dc90
5
5
  SHA512:
6
- metadata.gz: ec98188faff28d0c290e4a6a0c0b2061599062bc8ceab89b5fea78afb9448e67540823efd3fef98415acc29d24c054457dc00027d96727330867a3b03e25e41c
7
- data.tar.gz: 89f5a8b43ba97b7abba070275f4c5d575892cfa6cf581b40a0adc0d8ebc8d12881b985ed22384938daa7b0fe28a6f69752c7ce64c422c70e45dea384f47aa629
6
+ metadata.gz: 9e0bb94398bfa1112d58c8df0ee5b4974253cd3e3bc3e64fc192810244a65319571391c71a7b1c8ca1e24f147f8cc1f1d00bb6e43a2ba101b601923c5d0e6219
7
+ data.tar.gz: e04958a143f4bff3bdd185fd052a656f05380e8fb4c83aca8277c6c40406ed65a8f27392cfc201d5365c95d6d626a267db93bacedc899a604ff6b0c7fabc39f7
@@ -11,7 +11,8 @@
11
11
  {% endif %}
12
12
 
13
13
  <li class="item {% if selected %}selected{% endif %}">
14
- <div class="item-title">
14
+ <div class="item-title"
15
+ title="{{ include.item.title }}{% if include.item.description %} ({{ include.item.description }}){% endif %}">
15
16
  {% if include.item.path == null or selected == true %}
16
17
  <span>
17
18
  {{ include.item.title }}
@@ -83,3 +83,6 @@ layout: default
83
83
 
84
84
  </article>
85
85
  </section>
86
+
87
+ <script src="{{ "/assets/js/anchor-scroll.js" | relative_url }}"></script>
88
+ <script src="{{ "/assets/js/adoc-toc.js" | relative_url }}"></script>
@@ -4,3 +4,6 @@ html-class: docs-page
4
4
  ---
5
5
 
6
6
  {% include item-doc-page.html items=site.software item_type='software' %}
7
+
8
+ <script src="{{ "/assets/js/anchor-scroll.js" | relative_url }}"></script>
9
+ <script src="{{ "/assets/js/adoc-toc.js" | relative_url }}"></script>
@@ -145,6 +145,15 @@
145
145
  padding: .3em .6em;
146
146
  }
147
147
 
148
+ h1, h2, h3, h4, h5, h6 {
149
+ &.highlighted {
150
+ &:before {
151
+ content: "→";
152
+ margin-right: .5em;
153
+ }
154
+ }
155
+ }
156
+
148
157
  // Used for tip block labels
149
158
  .admonitionblock {
150
159
  overflow-x: scroll;
@@ -319,7 +328,7 @@
319
328
 
320
329
  // New style: Nav with nested items
321
330
  > ul.nav-items {
322
- $sidePadding: 2em;
331
+ $sidePadding: 1em;
323
332
 
324
333
  @include reset-list;
325
334
 
@@ -328,7 +337,7 @@
328
337
  bottom: 0;
329
338
  right: 0;
330
339
 
331
- padding: 0 $sidePadding;
340
+ padding: .75em $sidePadding;
332
341
 
333
342
  z-index: 5;
334
343
  background: #f7f7f7;
@@ -350,7 +359,19 @@
350
359
  font-size: 15px;
351
360
  font-weight: normal;
352
361
 
362
+ > .item-title {
363
+ white-space: nowrap;
364
+ overflow: hidden;
365
+ text-overflow: ellipsis;
366
+ }
367
+
353
368
  &.selected {
369
+ > .item-title {
370
+ background-color: #f0f0f0;
371
+ margin-left: -.5em;
372
+ padding-left: .5em;
373
+ }
374
+
354
375
  span {
355
376
  font-weight: bold;
356
377
  color: $primary-dark-color;
@@ -362,13 +383,46 @@
362
383
  > li.item {
363
384
  > .item-title {
364
385
  font-size: 20px;
365
- font-weight: bold;
366
386
  margin: 0;
367
387
  line-height: 1.8;
368
388
  }
369
389
  > ul {
370
390
  @include reset-list;
391
+
392
+ margin-left: .75em;
393
+ padding-left: 0;
371
394
  line-height: 2;
395
+ margin-bottom: .5em;
396
+ }
397
+
398
+ ul {
399
+ margin-left: 1.25em;
400
+ padding-left: 0;
401
+ }
402
+
403
+ ul.in-page-toc {
404
+ padding: .25em .25em .25em 1em;
405
+ background-color: #f0f0f0;
406
+
407
+ margin-left: .75em;
408
+
409
+ &, ul {
410
+ list-style: none;
411
+ }
412
+ ul {
413
+ padding: 0;
414
+ }
415
+ li.item {
416
+ font-size: 13px;
417
+ line-height: 1.5;
418
+
419
+ &.highlighted > .item-title {
420
+ a:link, a:visited {
421
+ color: $primary-dark-color;
422
+ font-weight: bold;
423
+ }
424
+ }
425
+ }
372
426
  }
373
427
  }
374
428
  }
@@ -517,9 +571,6 @@
517
571
 
518
572
  .docs-nav {
519
573
  .external-links {
520
- margin-top: 1em;
521
- margin-bottom: .5em;
522
-
523
574
  > .nav-items > .item {
524
575
  margin-bottom: 0;
525
576
  margin-right: -$external-links-side-margin;
@@ -0,0 +1,124 @@
1
+ (function () {
2
+
3
+ const HEADER_TAGS = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
4
+ const IN_PAGE_NAV_HTML_CLASS = 'in-page-toc';
5
+
6
+ /* Given a container of AsciiDoc .sectN elementss,
7
+ * returns an object containing navigation structure like this:
8
+ * { items: [ { title: "Some title", path: "./#some-title", items: [ ...subitems ] }, ... }
9
+ * Works recursively through nested sections.
10
+ */
11
+ function getAdocTocItems(containerEl, sectLvl) {
12
+ sectLvl = sectLvl || 1;
13
+ var items = [];
14
+
15
+ const topLevelSections = Array.from(containerEl.children).filter((el) => {
16
+ return el.matches(`div.sect${sectLvl}`);
17
+ });
18
+
19
+ for (let sectionEl of topLevelSections) {
20
+ const headerEl = Array.from(sectionEl.children).filter((el) => {
21
+ for (let hTagName of HEADER_TAGS) {
22
+ if (el.matches(hTagName)) { return true; }
23
+ }
24
+ return false;
25
+ })[0];
26
+ const headerId = headerEl.getAttribute('id');
27
+
28
+ var subItems = [];
29
+ const sectionBody = sectionEl.querySelector('div.sectionbody');
30
+ if (sectionBody) {
31
+ subItems = getAdocTocItems(sectionBody, sectLvl + 1);
32
+ } else {
33
+ subItems = getAdocTocItems(sectionEl, sectLvl + 1);
34
+ }
35
+
36
+ items.push({
37
+ title: headerEl.innerText,
38
+ description: headerEl.innerText,
39
+ path: `./#${headerId}`,
40
+ items: subItems,
41
+
42
+ id: headerId,
43
+ });
44
+ }
45
+
46
+ return items;
47
+ }
48
+
49
+ function highlightSelected(headerId, itemPath) {
50
+ for (const itemEl of document.querySelectorAll(`.${IN_PAGE_NAV_HTML_CLASS} li`)) {
51
+ const link = (itemEl.firstChild || {}).firstChild;
52
+ if (link && link.getAttribute('href') == itemPath) {
53
+ itemEl.classList.add('highlighted');
54
+ } else {
55
+ itemEl.classList.remove('highlighted');
56
+ }
57
+ }
58
+ for (const hTag of HEADER_TAGS) {
59
+ for (const headerEl of document.querySelectorAll(hTag)) {
60
+ headerEl.classList.remove('highlighted');
61
+ }
62
+ }
63
+ const selectedHeaderEl = document.getElementById(headerId);
64
+ selectedHeaderEl.classList.add('highlighted');
65
+ }
66
+
67
+ /* Given a list of navigation items, returns an <ul> containing items recursively
68
+ * with CSS classes and layout consistent with docs navigation markup expected by the theme.
69
+ */
70
+ function formatSubItems(tocItems) {
71
+ const subItemContainer = document.createElement('ul');
72
+
73
+ subItemContainer.classList.add('nav-items');
74
+ subItemContainer.classList.add('subitems');
75
+
76
+ for (let item of tocItems) {
77
+ let itemEl, itemTitleEl, itemLinkEl;
78
+
79
+ itemEl = document.createElement('li');
80
+ itemEl.classList.add('item');
81
+
82
+ itemTitleEl = document.createElement('div');
83
+ itemTitleEl.classList.add('item-title');
84
+
85
+ itemLinkEl = document.createElement('a');
86
+ itemLinkEl.setAttribute('href', item.path);
87
+ itemLinkEl.setAttribute('title', item.title);
88
+ itemLinkEl.innerText = item.title;
89
+
90
+ itemTitleEl.appendChild(itemLinkEl);
91
+ itemEl.appendChild(itemTitleEl);
92
+
93
+ if (item.items.length > 0) {
94
+ itemEl.appendChild(formatSubItems(item.items));
95
+ }
96
+
97
+ itemLinkEl.addEventListener('click', () => highlightSelected(item.id, item.path));
98
+
99
+ subItemContainer.appendChild(itemEl);
100
+ }
101
+
102
+ return subItemContainer;
103
+ }
104
+
105
+ const articleBody = document.querySelector('main section article .body');
106
+ const selectedItem = document.querySelector('main .docs-nav .nav-items .item.selected');
107
+
108
+ if (articleBody && selectedItem) {
109
+ const items = getAdocTocItems(articleBody);
110
+
111
+ if (items.length > 0) {
112
+ const ulEl = formatSubItems(items);
113
+ ulEl.classList.add(IN_PAGE_NAV_HTML_CLASS);
114
+
115
+ const existingSubItems = selectedItem.querySelector('ul.nav-items');
116
+ if (existingSubItems) {
117
+ selectedItem.insertBefore(ulEl, existingSubItems);
118
+ } else {
119
+ selectedItem.appendChild(ulEl);
120
+ }
121
+ }
122
+ }
123
+
124
+ }());
@@ -0,0 +1,81 @@
1
+ /* Credit: Ian Clark https://stackoverflow.com/a/13067009/247441 */
2
+
3
+ (function(document, history, location) {
4
+ var HISTORY_SUPPORT = !!(history && history.pushState);
5
+
6
+ var anchorScrolls = {
7
+ ANCHOR_REGEX: /^#[^ ]+$/,
8
+ OFFSET_HEIGHT_PX: 150, // Roughly Metanorma’s header
9
+
10
+ /**
11
+ * Establish events, and fix initial scroll position if a hash is provided.
12
+ */
13
+ init: function() {
14
+ this.scrollToCurrent();
15
+ window.addEventListener('hashchange', this.scrollToCurrent.bind(this));
16
+ document.body.addEventListener('click', this.delegateAnchors.bind(this));
17
+ },
18
+
19
+ /**
20
+ * Return the offset amount to deduct from the normal scroll position.
21
+ * Modify as appropriate to allow for dynamic calculations
22
+ */
23
+ getFixedOffset: function() {
24
+ return this.OFFSET_HEIGHT_PX;
25
+ },
26
+
27
+ /**
28
+ * If the provided href is an anchor which resolves to an element on the
29
+ * page, scroll to it.
30
+ * @param {String} href
31
+ * @return {Boolean} - Was the href an anchor.
32
+ */
33
+ scrollIfAnchor: function(href, pushToHistory) {
34
+ var match, rect, anchorOffset;
35
+
36
+ if(!this.ANCHOR_REGEX.test(href)) {
37
+ return false;
38
+ }
39
+
40
+ match = document.getElementById(href.slice(1));
41
+
42
+ if(match) {
43
+ rect = match.getBoundingClientRect();
44
+ anchorOffset = window.pageYOffset + rect.top - this.getFixedOffset();
45
+ window.scrollTo(window.pageXOffset, anchorOffset);
46
+
47
+ // Add the state to history as-per normal anchor links
48
+ if(HISTORY_SUPPORT && pushToHistory) {
49
+ history.pushState({}, document.title, location.pathname + href);
50
+ }
51
+ }
52
+
53
+ return !!match;
54
+ },
55
+
56
+ /**
57
+ * Attempt to scroll to the current location's hash.
58
+ */
59
+ scrollToCurrent: function() {
60
+ this.scrollIfAnchor(window.location.hash);
61
+ },
62
+
63
+ /**
64
+ * If the click event's target was an anchor, fix the scroll position.
65
+ */
66
+ delegateAnchors: function(e) {
67
+ var elem = e.target;
68
+
69
+ if(
70
+ elem.nodeName === 'A' &&
71
+ this.scrollIfAnchor(elem.getAttribute('href'), true)
72
+ ) {
73
+ e.preventDefault();
74
+ }
75
+ }
76
+ };
77
+
78
+ window.addEventListener(
79
+ 'DOMContentLoaded', anchorScrolls.init.bind(anchorScrolls)
80
+ );
81
+ })(window.document, window.history, window.location);
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-theme-open-project
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.5
4
+ version: '1.3'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ribose Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-01-31 00:00:00.000000000 Z
11
+ date: 2019-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -72,14 +72,14 @@ dependencies:
72
72
  requirements:
73
73
  - - '='
74
74
  - !ruby/object:Gem::Version
75
- version: 1.2.5
75
+ version: '1.3'
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - '='
81
81
  - !ruby/object:Gem::Version
82
- version: 1.2.5
82
+ version: '1.3'
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement
@@ -208,6 +208,8 @@ files:
208
208
  - assets/fa/fa-solid.js
209
209
  - assets/fa/fontawesome.js
210
210
  - assets/img/external-link.svg
211
+ - assets/js/adoc-toc.js
212
+ - assets/js/anchor-scroll.js
211
213
  - assets/js/headroom.min.js
212
214
  - assets/js/opf.js
213
215
  homepage: https://github.com/riboseinc/jekyll-theme-open-project/