jekyll-theme-open-project 1.1.16 → 1.1.17
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/_includes/home-project.html +25 -13
- data/_includes/item-doc-page.html +1 -1
- data/_includes/software-card-hub.html +5 -5
- data/_layouts/default.html +5 -1
- data/_layouts/software-index.html +13 -13
- data/_layouts/spec-index.html +14 -12
- data/_sass/headroom.scss +22 -0
- data/_sass/jekyll-theme-open-project.scss +16 -4
- data/_sass/open-project-base.scss +32 -0
- data/_sass/open-project-header-footer.scss +1 -1
- data/_sass/open-project-mixins.scss +24 -7
- data/assets/js/headroom.min.js +7 -0
- data/assets/js/opf.js +217 -0
- metadata +7 -5
- data/assets/js/menu.js +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 985058ab03cdc730f457234ab4c643e7b5c45cfe74fe8653fb9492913bb614e3
|
4
|
+
data.tar.gz: b3a54a0c5596163cd28d30f22d4f3101b9593cdbbfb719230b9b9c946d65d931
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 77ad5de68ffc78ee735e629f3d269bdd687b0d302d3fd8ed03bf0c916b0885ce07a40dafc7d6db02cc4dedc98e88a0b5753b2772879f21ea06d72f37e278beaf
|
7
|
+
data.tar.gz: 77ac7160156d7371abc6d0ba7f9fea277d710f3614ce7b35630b6948f74b6c007a19fec9ff596e9130a30a0e0a2c9a3b02f257eb81629dd2d7a462f5aaef039e
|
data/_includes/home-project.html
CHANGED
@@ -1,21 +1,21 @@
|
|
1
|
-
{% assign software = site.
|
2
|
-
{% assign featured_software =
|
3
|
-
{% assign num_software =
|
4
|
-
{% assign num_featured_software =
|
1
|
+
{% assign software = site.all_software %}
|
2
|
+
{% assign featured_software = site.featured_software %}
|
3
|
+
{% assign num_software = site.num_all_software %}
|
4
|
+
{% assign num_featured_software = site.num_featured_software %}
|
5
5
|
{% if num_featured_software > 0 %}
|
6
6
|
{% assign software = featured_software %}
|
7
7
|
{% endif %}
|
8
8
|
|
9
|
-
{% assign specs = site.
|
10
|
-
{% assign featured_specs =
|
11
|
-
{% assign num_specs =
|
12
|
-
{% assign num_featured_specs =
|
9
|
+
{% assign specs = site.all_specs %}
|
10
|
+
{% assign featured_specs = site.featured_specs %}
|
11
|
+
{% assign num_specs = site.num_all_specs %}
|
12
|
+
{% assign num_featured_specs = site.num_featured_specs %}
|
13
13
|
{% if num_featured_specs > 0 %}
|
14
14
|
{% assign specs = featured_specs %}
|
15
15
|
{% endif %}
|
16
16
|
|
17
|
-
{% assign posts = site.
|
18
|
-
{% assign num_posts = site.
|
17
|
+
{% assign posts = site.posts_combined %}
|
18
|
+
{% assign num_posts = site.num_posts_combined %}
|
19
19
|
|
20
20
|
{% assign num_top_items = num_software + num_posts %}
|
21
21
|
|
@@ -31,7 +31,7 @@
|
|
31
31
|
<h2 class="title">Open Source Software</h2>
|
32
32
|
|
33
33
|
<div class="items">
|
34
|
-
{% for item in software | limit: site.
|
34
|
+
{% for item in software | limit: site.max_featured_software %}
|
35
35
|
<a class="item" href="{{ item.url }}" role="article">
|
36
36
|
<div class="logo-container">
|
37
37
|
{% include software-symbol.html item_id=item.id %}
|
@@ -57,6 +57,12 @@
|
|
57
57
|
</a>
|
58
58
|
{% endfor %}
|
59
59
|
</div>
|
60
|
+
|
61
|
+
{% if num_featured_software < num_software %}
|
62
|
+
<footer>
|
63
|
+
<a class="more-link" href="/software/">See all {{ site.title }} software</a>
|
64
|
+
</footer>
|
65
|
+
{% endif %}
|
60
66
|
</section>
|
61
67
|
{% endif %}
|
62
68
|
|
@@ -65,7 +71,7 @@
|
|
65
71
|
<h2 class="title">From the Blog</h2>
|
66
72
|
|
67
73
|
<div class="items">
|
68
|
-
{% for item in posts | limit: site.
|
74
|
+
{% for item in posts | limit: site.max_featured_posts %}
|
69
75
|
{% include post-card.html post=item %}
|
70
76
|
{% endfor %}
|
71
77
|
</div>
|
@@ -78,7 +84,7 @@
|
|
78
84
|
<h2 class="title">Open Specifications</h2>
|
79
85
|
|
80
86
|
<div class="items">
|
81
|
-
{% for item in specs | limit: site.
|
87
|
+
{% for item in specs | limit: site.max_featured_specs %}
|
82
88
|
<a class="item" href="{{ item.url }}" role="article">
|
83
89
|
<header>
|
84
90
|
<h3 class="title">{{ item.title }}</h3>
|
@@ -100,5 +106,11 @@
|
|
100
106
|
</a>
|
101
107
|
{% endfor %}
|
102
108
|
</div>
|
109
|
+
|
110
|
+
{% if num_featured_specs < num_specs %}
|
111
|
+
<footer>
|
112
|
+
<a class="more-link" href="/specs/">See all {{ site.title }} specs</a>
|
113
|
+
</footer>
|
114
|
+
{% endif %}
|
103
115
|
</section>
|
104
116
|
{% endif %}
|
@@ -1,10 +1,10 @@
|
|
1
|
-
{% if include.project_data != nil and include.project_name != nil %}
|
1
|
+
{% if include.item.project_data != nil and include.item.project_name != nil %}
|
2
2
|
{% if include.item.slug == 'index' %}
|
3
3
|
{% assign item_slug = include.item.id | split: "/" | reverse | slice: 1 | first %}
|
4
4
|
{% else %}
|
5
5
|
{% assign item_slug = include.item.id | split: "/" | reverse | first %}
|
6
6
|
{% endif %}
|
7
|
-
{% assign product_home_url = include.project_data.home_url | append: include.item_type | append: "/" | append: item_slug | append: "/" %}
|
7
|
+
{% assign product_home_url = include.item.project_data.home_url | append: include.item_type | append: "/" | append: item_slug | append: "/" %}
|
8
8
|
{% else %}
|
9
9
|
{% assign product_home_url = include.item.url | relative_url %}
|
10
10
|
{% endif %}
|
@@ -17,12 +17,12 @@
|
|
17
17
|
{% endif %}
|
18
18
|
|
19
19
|
<header>
|
20
|
-
{% if include.project_data != nil and include.project_name != nil %}
|
21
|
-
{% assign project_symbol_path = include.project_name | append: "/assets/symbol.svg" %}
|
20
|
+
{% if include.item.project_data != nil and include.item.project_name != nil %}
|
21
|
+
{% assign project_symbol_path = include.item.project_name | append: "/assets/symbol.svg" %}
|
22
22
|
{% assign relative_symbol_path = "/projects/" | append: project_symbol_path %}
|
23
23
|
<div class="parent-project">
|
24
24
|
<div class="project-logo"><img src="{{ relative_symbol_path }}"></div>
|
25
|
-
<h4 class="project-title">{{ include.project_data.title }}</h4>
|
25
|
+
<h4 class="project-title">{{ include.item.project_data.title }}</h4>
|
26
26
|
</div>
|
27
27
|
{% endif %}
|
28
28
|
<h3 class="title">{{ include.item.title }}</h3>
|
data/_layouts/default.html
CHANGED
@@ -5,6 +5,9 @@
|
|
5
5
|
<meta charset="utf-8">
|
6
6
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
7
7
|
|
8
|
+
<link href="{{ "/assets/favicon.png" | relative_url }}" rel="shortcut icon" type="image/x-icon">
|
9
|
+
<link href="{{ "/assets/webclip.png" | relative_url }}" rel="apple-touch-icon">
|
10
|
+
|
8
11
|
<link id="themeCSS" rel="stylesheet" href="{{ "assets/css/style.css" | relative_url }}">
|
9
12
|
<script defer src="https://pro.fontawesome.com/releases/v5.1.0/js/all.js" integrity="sha384-E5SpgaZcbSJx0Iabb3Jr2AfTRiFnrdOw1mhO19DzzrT9L+wCpDyHUG2q07aQdO6E" crossorigin="anonymous"></script>
|
10
13
|
|
@@ -69,7 +72,8 @@
|
|
69
72
|
</footer>
|
70
73
|
</div>
|
71
74
|
|
72
|
-
<script src="{{ "assets/js/
|
75
|
+
<script src="{{ "assets/js/headroom.min.js" | relative_url }}"></script>
|
76
|
+
<script src="{{ "assets/js/opf.js" | relative_url }}"></script>
|
73
77
|
|
74
78
|
{% include scripts.html %}
|
75
79
|
</body>
|
@@ -6,22 +6,22 @@ layout: default
|
|
6
6
|
{% include index-page-item-filter.html url_tag_prefix="/software/" items=site.all_software tag=page.tag %}
|
7
7
|
{% endif %}
|
8
8
|
|
9
|
-
{% assign items = page.items | default: site.all_software %}
|
10
|
-
|
11
9
|
<section class="items">
|
12
10
|
{% if site.is_hub %}
|
13
11
|
{% include assets/symbol.svg %}
|
14
|
-
|
15
|
-
|
16
|
-
{% for product in items %}
|
17
|
-
{% if site.is_hub %}
|
18
|
-
{% assign project_name = product.url | split: "/" | slice: 2 | first %}
|
19
|
-
{% assign project_index_path = "_projects/" | append: project_name | append: "/index.md" %}
|
20
|
-
{% assign project = site.projects | where: "path", project_index_path | first %}
|
21
|
-
|
22
|
-
{% include software-card-hub.html item=product item_type='software' project_name=project_name project_data=project %}
|
23
|
-
{% else %}
|
12
|
+
{% assign items = page.items | default: site.all_software %}
|
13
|
+
{% for product in items %}
|
24
14
|
{% include software-card-hub.html item=product item_type='software' %}
|
15
|
+
{% endfor %}
|
16
|
+
{% else %}
|
17
|
+
{% if site.num_featured_software > 0 %}
|
18
|
+
{% for product in site.featured_software %}
|
19
|
+
{% include software-card-hub.html item=product item_type='software' %}
|
20
|
+
{% endfor %}
|
21
|
+
<hr>
|
25
22
|
{% endif %}
|
26
|
-
|
23
|
+
{% for product in site.non_featured_software %}
|
24
|
+
{% include software-card-hub.html item=product item_type='software' %}
|
25
|
+
{% endfor %}
|
26
|
+
{% endif %}
|
27
27
|
</section>
|
data/_layouts/spec-index.html
CHANGED
@@ -7,21 +7,23 @@ layout: default
|
|
7
7
|
{% endif %}
|
8
8
|
|
9
9
|
{% assign items = page.items | default: site.all_specs %}
|
10
|
+
{% assign num_items = items | size %}
|
10
11
|
|
11
|
-
<section class="items">
|
12
|
+
<section class="items {% if num_items < 3 %}one-row{% endif %}">
|
12
13
|
{% if site.is_hub %}
|
13
14
|
{% include assets/symbol.svg %}
|
14
|
-
|
15
|
-
|
16
|
-
{% for spec in items %}
|
17
|
-
{% if site.is_hub %}
|
18
|
-
{% assign project_name = spec.url | split: "/" | slice: 2 | first %}
|
19
|
-
{% assign project_index_path = "_projects/" | append: project_name | append: "/index.md" %}
|
20
|
-
{% assign project = site.projects | where: "path", project_index_path | first %}
|
21
|
-
|
22
|
-
{% include software-card-hub.html item=spec item_type='specs' project_name=project_name project_data=project %}
|
23
|
-
{% else %}
|
15
|
+
{% for spec in items %}
|
24
16
|
{% include software-card-hub.html item=spec item_type='specs' %}
|
17
|
+
{% endfor %}
|
18
|
+
{% else %}
|
19
|
+
{% if site.num_featured_specs > 0 %}
|
20
|
+
{% for spec in site.featured_specs %}
|
21
|
+
{% include software-card-hub.html item=spec item_type='specs' %}
|
22
|
+
{% endfor %}
|
23
|
+
<hr>
|
25
24
|
{% endif %}
|
26
|
-
|
25
|
+
{% for spec in site.non_featured_specs %}
|
26
|
+
{% include software-card-hub.html item=spec item_type='specs' %}
|
27
|
+
{% endfor %}
|
28
|
+
{% endif %}
|
27
29
|
</section>
|
data/_sass/headroom.scss
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
.headroom {
|
2
|
+
will-change: transform;
|
3
|
+
transition: transform 200ms linear;
|
4
|
+
}
|
5
|
+
.headroom--pinned {
|
6
|
+
transform: translateY(0%);
|
7
|
+
}
|
8
|
+
.headroom--unpinned {
|
9
|
+
transform: translateY(-100%);
|
10
|
+
}
|
11
|
+
|
12
|
+
body.with-headroom {
|
13
|
+
&.layout--product {
|
14
|
+
.underlay.header {
|
15
|
+
position: fixed;
|
16
|
+
top: 0;
|
17
|
+
left: 0;
|
18
|
+
right: 0;
|
19
|
+
z-index: 6;
|
20
|
+
}
|
21
|
+
}
|
22
|
+
}
|
@@ -29,6 +29,7 @@ $bigscreen-breakpoint: 900px + $gutter * 2;
|
|
29
29
|
|
30
30
|
@import "open-project-base";
|
31
31
|
@import "open-project-header-footer";
|
32
|
+
@import "headroom";
|
32
33
|
|
33
34
|
|
34
35
|
main {
|
@@ -188,10 +189,6 @@ main {
|
|
188
189
|
@extend .item-grid;
|
189
190
|
@extend .index-item-grid;
|
190
191
|
|
191
|
-
.items.one-row {
|
192
|
-
justify-content: center;
|
193
|
-
}
|
194
|
-
|
195
192
|
.item {
|
196
193
|
@extend .item-card;
|
197
194
|
@extend .post-card;
|
@@ -213,6 +210,10 @@ main {
|
|
213
210
|
}
|
214
211
|
}
|
215
212
|
}
|
213
|
+
|
214
|
+
> .items.one-row {
|
215
|
+
justify-content: center;
|
216
|
+
}
|
216
217
|
}
|
217
218
|
|
218
219
|
.layout--post > & {
|
@@ -438,6 +439,17 @@ main {
|
|
438
439
|
&.layout--software-index > main,
|
439
440
|
&.layout--spec-index > main {
|
440
441
|
> .items {
|
442
|
+
> hr {
|
443
|
+
// Separates featured items, listed initially, from the rest
|
444
|
+
width: 10em;
|
445
|
+
margin: 40px auto;
|
446
|
+
border-style: solid;
|
447
|
+
border-color: $primary-color;
|
448
|
+
background-color: $primary-color;
|
449
|
+
color: $primary-color;
|
450
|
+
box-shadow: 2px 2px 0 3px $primary-color;
|
451
|
+
}
|
452
|
+
|
441
453
|
.item {
|
442
454
|
@extend .item-card;
|
443
455
|
@include hoverable-card(2px, 10px, rgba(desaturate($primary-color, 50), 0.08));
|
@@ -95,6 +95,16 @@ a {
|
|
95
95
|
> .items {
|
96
96
|
align-self: stretch;
|
97
97
|
}
|
98
|
+
|
99
|
+
> footer {
|
100
|
+
text-align: center;
|
101
|
+
|
102
|
+
.more-link {
|
103
|
+
@include cta-button-mini(white, $primary-color);
|
104
|
+
border-radius: 25px;
|
105
|
+
border: 1px solid $primary-color;
|
106
|
+
}
|
107
|
+
}
|
98
108
|
}
|
99
109
|
|
100
110
|
.with-symbol-background {
|
@@ -305,12 +315,34 @@ a {
|
|
305
315
|
@include code-snippet-container();
|
306
316
|
}
|
307
317
|
|
318
|
+
dl {
|
319
|
+
dd {
|
320
|
+
margin-left: 1.25em;
|
321
|
+
}
|
322
|
+
}
|
308
323
|
ul, ol {
|
324
|
+
padding-left: 1.25em;
|
325
|
+
|
309
326
|
li > p:only-child {
|
310
327
|
// Keep list items visually together
|
311
328
|
margin: 0;
|
312
329
|
}
|
313
330
|
}
|
331
|
+
blockquote {
|
332
|
+
margin-left: 1.25em;
|
333
|
+
}
|
334
|
+
|
335
|
+
@media screen and (min-width: $bigscreen-breakpoint) {
|
336
|
+
dl dd {
|
337
|
+
margin-left: 2em;
|
338
|
+
}
|
339
|
+
blockquote {
|
340
|
+
margin-left: 2em;
|
341
|
+
}
|
342
|
+
ul, ol {
|
343
|
+
padding-left: 2em;
|
344
|
+
}
|
345
|
+
}
|
314
346
|
|
315
347
|
table {
|
316
348
|
$border-color: lighten($main-font-color, 80);
|
@@ -54,7 +54,6 @@
|
|
54
54
|
}
|
55
55
|
|
56
56
|
@mixin code-snippet() {
|
57
|
-
white-space: pre-wrap;
|
58
57
|
color: lighten($main-font-color, 24);
|
59
58
|
|
60
59
|
@include padded-code-snippet();
|
@@ -71,7 +70,7 @@
|
|
71
70
|
@mixin cta-button($bgcolor, $color) {
|
72
71
|
font-weight: 800;
|
73
72
|
font-size: 18px;
|
74
|
-
padding: 12px
|
73
|
+
padding: 12px 22px;
|
75
74
|
display: inline-block;
|
76
75
|
|
77
76
|
.icon {
|
@@ -96,6 +95,12 @@
|
|
96
95
|
}
|
97
96
|
}
|
98
97
|
|
98
|
+
@mixin cta-button-mini($bgcolor, $color) {
|
99
|
+
@include cta-button($bgcolor, $color);
|
100
|
+
font-size: 14px;
|
101
|
+
padding: 6px 16px;
|
102
|
+
}
|
103
|
+
|
99
104
|
@mixin hoverable-card($base-y, $base-blur, $color) {
|
100
105
|
$hovered-y: $base-y * 2;
|
101
106
|
$hovered-blur: $base-blur * 2;
|
@@ -175,7 +180,7 @@
|
|
175
180
|
}
|
176
181
|
}
|
177
182
|
|
178
|
-
> .nav
|
183
|
+
> .docs-nav {
|
179
184
|
padding-top: 50px;
|
180
185
|
|
181
186
|
> .sidebar-header, > section {
|
@@ -258,11 +263,14 @@
|
|
258
263
|
|
259
264
|
background: white;
|
260
265
|
z-index: 1;
|
266
|
+
overflow-x: hidden;
|
261
267
|
|
262
268
|
> header {
|
263
269
|
> .title {
|
264
|
-
|
265
|
-
|
270
|
+
@media screen and (min-width: $bigscreen-breakpoint) {
|
271
|
+
display: flex;
|
272
|
+
flex-flow: row nowrap;
|
273
|
+
}
|
266
274
|
|
267
275
|
border-bottom: 2px solid $primary-dark-color;
|
268
276
|
padding-top: 70px;
|
@@ -305,6 +313,15 @@
|
|
305
313
|
|
306
314
|
// Used for tip block labels
|
307
315
|
.admonitionblock {
|
316
|
+
overflow-x: scroll;
|
317
|
+
|
318
|
+
table:first-child {
|
319
|
+
margin-top: 0;
|
320
|
+
}
|
321
|
+
table:last-child {
|
322
|
+
margin-bottom: 0;
|
323
|
+
}
|
324
|
+
|
308
325
|
td.icon {
|
309
326
|
vertical-align: top;
|
310
327
|
padding-left: 0;
|
@@ -347,7 +364,7 @@
|
|
347
364
|
}
|
348
365
|
}
|
349
366
|
|
350
|
-
> .nav
|
367
|
+
> .docs-nav {
|
351
368
|
padding-top: 0;
|
352
369
|
}
|
353
370
|
|
@@ -364,7 +381,7 @@
|
|
364
381
|
@media screen and (min-width: $bigscreen-breakpoint) {
|
365
382
|
flex-flow: row nowrap;
|
366
383
|
|
367
|
-
> .nav
|
384
|
+
> .docs-nav {
|
368
385
|
flex: 1;
|
369
386
|
flex-grow: 1;
|
370
387
|
padding-top: 70px;
|
@@ -0,0 +1,7 @@
|
|
1
|
+
/*!
|
2
|
+
* headroom.js v0.9.4 - Give your page some headroom. Hide your header until you need it
|
3
|
+
* Copyright (c) 2017 Nick Williams - http://wicky.nillia.ms/headroom.js
|
4
|
+
* License: MIT
|
5
|
+
*/
|
6
|
+
|
7
|
+
!function(a,b){"use strict";"function"==typeof define&&define.amd?define([],b):"object"==typeof exports?module.exports=b():a.Headroom=b()}(this,function(){"use strict";function a(a){this.callback=a,this.ticking=!1}function b(a){return a&&"undefined"!=typeof window&&(a===window||a.nodeType)}function c(a){if(arguments.length<=0)throw new Error("Missing arguments in extend function");var d,e,f=a||{};for(e=1;e<arguments.length;e++){var g=arguments[e]||{};for(d in g)"object"!=typeof f[d]||b(f[d])?f[d]=f[d]||g[d]:f[d]=c(f[d],g[d])}return f}function d(a){return a===Object(a)?a:{down:a,up:a}}function e(a,b){b=c(b,e.options),this.lastKnownScrollY=0,this.elem=a,this.tolerance=d(b.tolerance),this.classes=b.classes,this.offset=b.offset,this.scroller=b.scroller,this.initialised=!1,this.onPin=b.onPin,this.onUnpin=b.onUnpin,this.onTop=b.onTop,this.onNotTop=b.onNotTop,this.onBottom=b.onBottom,this.onNotBottom=b.onNotBottom}var f={bind:!!function(){}.bind,classList:"classList"in document.documentElement,rAF:!!(window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame)};return window.requestAnimationFrame=window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame,a.prototype={constructor:a,update:function(){this.callback&&this.callback(),this.ticking=!1},requestTick:function(){this.ticking||(requestAnimationFrame(this.rafCallback||(this.rafCallback=this.update.bind(this))),this.ticking=!0)},handleEvent:function(){this.requestTick()}},e.prototype={constructor:e,init:function(){if(e.cutsTheMustard)return this.debouncer=new a(this.update.bind(this)),this.elem.classList.add(this.classes.initial),setTimeout(this.attachEvent.bind(this),100),this},destroy:function(){var a=this.classes;this.initialised=!1;for(var b in a)a.hasOwnProperty(b)&&this.elem.classList.remove(a[b]);this.scroller.removeEventListener("scroll",this.debouncer,!1)},attachEvent:function(){this.initialised||(this.lastKnownScrollY=this.getScrollY(),this.initialised=!0,this.scroller.addEventListener("scroll",this.debouncer,!1),this.debouncer.handleEvent())},unpin:function(){var a=this.elem.classList,b=this.classes;!a.contains(b.pinned)&&a.contains(b.unpinned)||(a.add(b.unpinned),a.remove(b.pinned),this.onUnpin&&this.onUnpin.call(this))},pin:function(){var a=this.elem.classList,b=this.classes;a.contains(b.unpinned)&&(a.remove(b.unpinned),a.add(b.pinned),this.onPin&&this.onPin.call(this))},top:function(){var a=this.elem.classList,b=this.classes;a.contains(b.top)||(a.add(b.top),a.remove(b.notTop),this.onTop&&this.onTop.call(this))},notTop:function(){var a=this.elem.classList,b=this.classes;a.contains(b.notTop)||(a.add(b.notTop),a.remove(b.top),this.onNotTop&&this.onNotTop.call(this))},bottom:function(){var a=this.elem.classList,b=this.classes;a.contains(b.bottom)||(a.add(b.bottom),a.remove(b.notBottom),this.onBottom&&this.onBottom.call(this))},notBottom:function(){var a=this.elem.classList,b=this.classes;a.contains(b.notBottom)||(a.add(b.notBottom),a.remove(b.bottom),this.onNotBottom&&this.onNotBottom.call(this))},getScrollY:function(){return void 0!==this.scroller.pageYOffset?this.scroller.pageYOffset:void 0!==this.scroller.scrollTop?this.scroller.scrollTop:(document.documentElement||document.body.parentNode||document.body).scrollTop},getViewportHeight:function(){return window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight},getElementPhysicalHeight:function(a){return Math.max(a.offsetHeight,a.clientHeight)},getScrollerPhysicalHeight:function(){return this.scroller===window||this.scroller===document.body?this.getViewportHeight():this.getElementPhysicalHeight(this.scroller)},getDocumentHeight:function(){var a=document.body,b=document.documentElement;return Math.max(a.scrollHeight,b.scrollHeight,a.offsetHeight,b.offsetHeight,a.clientHeight,b.clientHeight)},getElementHeight:function(a){return Math.max(a.scrollHeight,a.offsetHeight,a.clientHeight)},getScrollerHeight:function(){return this.scroller===window||this.scroller===document.body?this.getDocumentHeight():this.getElementHeight(this.scroller)},isOutOfBounds:function(a){var b=a<0,c=a+this.getScrollerPhysicalHeight()>this.getScrollerHeight();return b||c},toleranceExceeded:function(a,b){return Math.abs(a-this.lastKnownScrollY)>=this.tolerance[b]},shouldUnpin:function(a,b){var c=a>this.lastKnownScrollY,d=a>=this.offset;return c&&d&&b},shouldPin:function(a,b){var c=a<this.lastKnownScrollY,d=a<=this.offset;return c&&b||d},update:function(){var a=this.getScrollY(),b=a>this.lastKnownScrollY?"down":"up",c=this.toleranceExceeded(a,b);this.isOutOfBounds(a)||(a<=this.offset?this.top():this.notTop(),a+this.getViewportHeight()>=this.getScrollerHeight()?this.bottom():this.notBottom(),this.shouldUnpin(a,c)?this.unpin():this.shouldPin(a,c)&&this.pin(),this.lastKnownScrollY=a)}},e.options={tolerance:{up:0,down:0},offset:0,scroller:window,classes:{pinned:"headroom--pinned",unpinned:"headroom--unpinned",top:"headroom--top",notTop:"headroom--not-top",bottom:"headroom--bottom",notBottom:"headroom--not-bottom",initial:"headroom"}},e.cutsTheMustard="undefined"!=typeof f&&f.rAF&&f.bind&&f.classList,e});
|
data/assets/js/opf.js
ADDED
@@ -0,0 +1,217 @@
|
|
1
|
+
(function () {
|
2
|
+
'use strict';
|
3
|
+
|
4
|
+
|
5
|
+
var body = document.querySelector('body');
|
6
|
+
|
7
|
+
|
8
|
+
|
9
|
+
/* Topmost hamburger menu */
|
10
|
+
|
11
|
+
var initCollapsibleMenu = function(triggerEl, menuEl) {
|
12
|
+
var hasOpened = false;
|
13
|
+
|
14
|
+
if (triggerEl != null && menuEl != null) {
|
15
|
+
triggerEl.addEventListener('click', function (evt) {
|
16
|
+
hasOpened = menuEl.classList.toggle('expanded');
|
17
|
+
if (hasOpened) {
|
18
|
+
triggerEl.setAttribute('aria-expanded', true);
|
19
|
+
menuEl.setAttribute('aria-hidden', false);
|
20
|
+
}
|
21
|
+
});
|
22
|
+
}
|
23
|
+
|
24
|
+
return {
|
25
|
+
hasOpened: function() {
|
26
|
+
return hasOpened;
|
27
|
+
},
|
28
|
+
};
|
29
|
+
};
|
30
|
+
|
31
|
+
var hamburgerMenu = initCollapsibleMenu(
|
32
|
+
document.getElementById('hamburgerButton'),
|
33
|
+
document.getElementById('hamburgerMenu'));
|
34
|
+
|
35
|
+
|
36
|
+
|
37
|
+
/* Collapsible header */
|
38
|
+
|
39
|
+
var initCollapsibleHeader = function(headerEl, hamburgerMenu) {
|
40
|
+
var collapsibleDocsMenu;
|
41
|
+
var body = document.querySelector('body');
|
42
|
+
var headerElH = headerEl.offsetHeight;
|
43
|
+
var isPinned;
|
44
|
+
|
45
|
+
body.style.paddingTop = '' + headerElH + 'px';
|
46
|
+
|
47
|
+
var headroom = new Headroom(headerEl, {
|
48
|
+
onUnpin: function() {
|
49
|
+
if (hamburgerMenu.hasOpened() || (collapsibleDocsMenu && collapsibleDocsMenu.hasOpened())) {
|
50
|
+
this.pin();
|
51
|
+
} else {
|
52
|
+
isPinned = false;
|
53
|
+
}
|
54
|
+
},
|
55
|
+
onPin: function() {
|
56
|
+
isPinned = true;
|
57
|
+
},
|
58
|
+
});
|
59
|
+
|
60
|
+
headroom.init();
|
61
|
+
|
62
|
+
body.style.paddingTop = '' + headerElH + 'px';
|
63
|
+
body.classList.add('with-headroom');
|
64
|
+
|
65
|
+
return {
|
66
|
+
getHeaderHeight: function () {
|
67
|
+
return headerElH;
|
68
|
+
},
|
69
|
+
assignCollapsibleDocsNav: function (nav) {
|
70
|
+
collapsibleDocsMenu = nav;
|
71
|
+
},
|
72
|
+
isPinned: function () {
|
73
|
+
return isPinned;
|
74
|
+
},
|
75
|
+
}
|
76
|
+
};
|
77
|
+
|
78
|
+
var collapsibleHeader;
|
79
|
+
|
80
|
+
if (document.querySelector('body.layout--product .documentation:not(.docs-landing)') != null) {
|
81
|
+
collapsibleHeader = initCollapsibleHeader(
|
82
|
+
document.querySelector('.underlay.header'),
|
83
|
+
hamburgerMenu);
|
84
|
+
}
|
85
|
+
|
86
|
+
|
87
|
+
|
88
|
+
/* Collapsible docs nav */
|
89
|
+
|
90
|
+
var initCollapsibleDocsNav = function(docsRoot, collapsibleHeader) {
|
91
|
+
var article = docsRoot.querySelector('article');
|
92
|
+
var articleHeader = article.querySelector('header:first-child');
|
93
|
+
var docsNav = docsRoot.querySelector('.docs-nav');
|
94
|
+
var docsNavHeader = docsNav.querySelector('.sidebar-header');
|
95
|
+
var docsNavHeaderLink = docsNavHeader.querySelector('a');
|
96
|
+
var docsNavHeaderH = docsNavHeader.offsetHeight + 20; // 20px is padding, below
|
97
|
+
var docsNavH = docsNav.offsetHeight;
|
98
|
+
var docsNavSections = docsNav.querySelectorAll('section');
|
99
|
+
|
100
|
+
// Offet represents the top header height; meaning it is offset
|
101
|
+
// of documentation menu from the topmost edge of viewport
|
102
|
+
var offset = collapsibleHeader.getHeaderHeight();
|
103
|
+
|
104
|
+
article.style.paddingTop = '2em';
|
105
|
+
docsNav.style.zIndex = '4';
|
106
|
+
docsNav.style.position = 'fixed';
|
107
|
+
docsNav.style.top = '' + offset + 'px';
|
108
|
+
docsNav.style.left = '0';
|
109
|
+
docsNav.style.right = '0';
|
110
|
+
docsNav.style.paddingTop = '0';
|
111
|
+
docsNav.style.paddingLeft = '2em';
|
112
|
+
docsNav.style.paddingRight = '2em';
|
113
|
+
docsNav.style.transition = 'background 200ms cubic-bezier(0.23, 1, 0.32, 1), transform 200ms linear';
|
114
|
+
docsNav.style.background = 'transparent';
|
115
|
+
docsNav.style.overflow = 'hidden';
|
116
|
+
|
117
|
+
docsNavHeader.style.background = 'white';
|
118
|
+
docsNavHeader.style.paddingTop = '10px';
|
119
|
+
docsNavHeader.style.paddingBottom = '10px';
|
120
|
+
docsNavHeader.style.cursor = 'pointer';
|
121
|
+
|
122
|
+
docsNavHeader.innerHTML = docsNavHeader.innerHTML + ' ▼';
|
123
|
+
|
124
|
+
docsNavSections.forEach(function (el) {
|
125
|
+
el.style.transition = 'opacity .2s cubic-bezier(0.23, 1, 0.32, 1)';
|
126
|
+
});
|
127
|
+
|
128
|
+
// Triggering opening via header link itself
|
129
|
+
|
130
|
+
var hasOpened = false;
|
131
|
+
var closingTransition;
|
132
|
+
|
133
|
+
var collapse = function (docsNav) {
|
134
|
+
hasOpened = false;
|
135
|
+
docsNav.style.background = 'transparent';
|
136
|
+
docsNavSections.forEach(function (el) {
|
137
|
+
el.style.opacity = '0';
|
138
|
+
});
|
139
|
+
|
140
|
+
closingTransition = window.setTimeout(function () {
|
141
|
+
docsNav.style.overflowY = 'hidden';
|
142
|
+
docsNav.style.height = '' + docsNavHeaderH + 'px';
|
143
|
+
docsNav.style.bottom = 'unset';
|
144
|
+
docsNav.scrollTop = 0;
|
145
|
+
docsNav.style.borderBottom = '1px solid silver';
|
146
|
+
}, 2);
|
147
|
+
};
|
148
|
+
var open = function (docsNav) {
|
149
|
+
hasOpened = true;
|
150
|
+
window.clearTimeout(closingTransition);
|
151
|
+
|
152
|
+
docsNav.style.overflowY = 'scroll';
|
153
|
+
docsNav.style.height = 'auto';
|
154
|
+
|
155
|
+
if (collapsibleHeader.isPinned()) {
|
156
|
+
docsNav.style.bottom = '0';
|
157
|
+
} else {
|
158
|
+
docsNav.style.bottom = '-' + offset + 'px';
|
159
|
+
}
|
160
|
+
|
161
|
+
docsNav.style.background = 'white';
|
162
|
+
docsNav.style.borderBottom = 'none';
|
163
|
+
docsNavSections.forEach(function (el) {
|
164
|
+
el.style.opacity = '1';
|
165
|
+
});
|
166
|
+
};
|
167
|
+
var toggle = function () {
|
168
|
+
if (hasOpened) { collapse(docsNav); }
|
169
|
+
else { open(docsNav); }
|
170
|
+
};
|
171
|
+
docsNavHeader.addEventListener('click', toggle);
|
172
|
+
|
173
|
+
collapse(docsNav);
|
174
|
+
|
175
|
+
// Hiding docs nav
|
176
|
+
|
177
|
+
// TODO: Replace with moving this to the top
|
178
|
+
// in top header’s headroom hook?
|
179
|
+
var headroom = new Headroom(docsNavHeader, {
|
180
|
+
classes: {
|
181
|
+
pinned: 'pinned',
|
182
|
+
unpinned: 'unpinned',
|
183
|
+
},
|
184
|
+
onUnpin: function () {
|
185
|
+
if (hasOpened) {
|
186
|
+
this.pin();
|
187
|
+
} else {
|
188
|
+
docsNav.style.transform = 'translateY(-' + offset + 'px)';
|
189
|
+
}
|
190
|
+
},
|
191
|
+
onPin: function () {
|
192
|
+
docsNav.style.top = '' + offset + 'px';
|
193
|
+
docsNav.style.zIndex = '4';
|
194
|
+
docsNav.style.transform = 'translateY(0)';
|
195
|
+
docsNav.style.borderBottom = '1px solid silver';
|
196
|
+
},
|
197
|
+
});
|
198
|
+
|
199
|
+
headroom.init();
|
200
|
+
|
201
|
+
return {
|
202
|
+
hasOpened: function () {
|
203
|
+
return hasOpened;
|
204
|
+
},
|
205
|
+
}
|
206
|
+
};
|
207
|
+
|
208
|
+
var docsRoot = body.querySelector('body.layout--product .documentation:not(.docs-landing)');
|
209
|
+
var collapsibleDocsNav;
|
210
|
+
|
211
|
+
if (docsRoot !== null) {
|
212
|
+
collapsibleDocsNav = initCollapsibleDocsNav(docsRoot, collapsibleHeader);
|
213
|
+
collapsibleHeader.assignCollapsibleDocsNav(collapsibleDocsNav);
|
214
|
+
}
|
215
|
+
|
216
|
+
|
217
|
+
}());
|
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.1.
|
4
|
+
version: 1.1.17
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ribose Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-10-
|
11
|
+
date: 2018-10-22 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.1.
|
75
|
+
version: 1.1.17
|
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.1.
|
82
|
+
version: 1.1.17
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: bundler
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -193,6 +193,7 @@ files:
|
|
193
193
|
- _pages/blog.html
|
194
194
|
- _pages/software.html
|
195
195
|
- _pages/specs.html
|
196
|
+
- _sass/headroom.scss
|
196
197
|
- _sass/jekyll-theme-open-project.scss
|
197
198
|
- _sass/normalize.scss
|
198
199
|
- _sass/open-project-base.scss
|
@@ -203,7 +204,8 @@ files:
|
|
203
204
|
- assets/fa/fa-solid.js
|
204
205
|
- assets/fa/fontawesome.js
|
205
206
|
- assets/img/external-link.svg
|
206
|
-
- assets/js/
|
207
|
+
- assets/js/headroom.min.js
|
208
|
+
- assets/js/opf.js
|
207
209
|
homepage: https://github.com/riboseinc/jekyll-theme-open-project/
|
208
210
|
licenses:
|
209
211
|
- MIT
|
data/assets/js/menu.js
DELETED
@@ -1,15 +0,0 @@
|
|
1
|
-
(function () {
|
2
|
-
'use strict';
|
3
|
-
|
4
|
-
var hamBtn = document.getElementById('hamburgerButton');
|
5
|
-
var hamMnu = document.getElementById('hamburgerMenu');
|
6
|
-
var hasOpened = false;
|
7
|
-
|
8
|
-
hamBtn.addEventListener('click', function (evt) {
|
9
|
-
hasOpened = hamMnu.classList.toggle('expanded');
|
10
|
-
if (hasOpened) {
|
11
|
-
hamBtn.setAttribute('aria-expanded', true);
|
12
|
-
hamMnu.setAttribute('aria-hidden', false);
|
13
|
-
}
|
14
|
-
});
|
15
|
-
}());
|