jekyll-theme-open-project 1.1.23 → 1.1.24
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +13 -1
- data/_includes/index-page-item-filter.html +68 -14
- data/_includes/software-card-hub.html +1 -1
- data/_includes/tag-list.html +10 -2
- data/_layouts/software-index.html +1 -1
- data/_layouts/spec-index.html +1 -1
- data/_sass/jekyll-theme-open-project.scss +71 -5
- data/_sass/open-project-base.scss +11 -1
- data/assets/js/opf.js +39 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8fce901d2f3924596242e699f0e9719a86a9cb071a3e854489475ac5c650529
|
4
|
+
data.tar.gz: 8fb7ff15b83a37d4c6faf071bce7d30cc8be6b2ce6535550f1ee39d1ea23e07b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f4600c9320dc30fea748bc24ddf95ef2b9db966d6c933088669716fa36edd3df8c244a4bc51f8a34a26fd0f90fbc36348faa186de4c938597e2c4fd92f654d57
|
7
|
+
data.tar.gz: cc18435994f4d649b31febddc894ad7b1a92ad9bcc68884c444fa53e5deb22248b237bca3dfe81dec7a6125dbffe2ac51edc89574c4fbb7caa61d13e37c08969
|
data/README.md
CHANGED
@@ -236,6 +236,14 @@ is_hub: true
|
|
236
236
|
# to individual, this would make sense:
|
237
237
|
seo:
|
238
238
|
type: Organization
|
239
|
+
|
240
|
+
tag_namespaces:
|
241
|
+
software:
|
242
|
+
namespace_id: "Human-readable namespace name"
|
243
|
+
# E.g.:
|
244
|
+
# writtenin: "Written in"
|
245
|
+
specs:
|
246
|
+
namespace_id: "Human-readable namespace name"
|
239
247
|
```
|
240
248
|
|
241
249
|
### Project, spec and software data
|
@@ -262,7 +270,11 @@ home_url: <URL to standalone project site>
|
|
262
270
|
# percent-encode the tag in URLs. Replace " " (a regular space)
|
263
271
|
# with "_" (underline); underlines will be rewritten as spaces when tags
|
264
272
|
# are presented to site users.
|
265
|
-
|
273
|
+
# Tag can be prepended with a namespace to signify the type,
|
274
|
+
# e.g. chosen programming language or target viewer audience
|
275
|
+
# (see hub site configuration for tag namespace setup).
|
276
|
+
# Avoid long namespace/tag combos as they can overflow item’s card widget.
|
277
|
+
tags: [Ruby, Python, RFC, "<some_namespace_id>:<appropriate_tag>"]
|
266
278
|
```
|
267
279
|
|
268
280
|
### Project index page
|
@@ -3,27 +3,81 @@
|
|
3
3
|
{% assign tags = rawtags | split: " " | uniq %}
|
4
4
|
{% assign num_tags = tags | size %}
|
5
5
|
|
6
|
+
{% if include.tag %}
|
7
|
+
{% if include.tag contains ":" %}
|
8
|
+
{% assign tag_namespace = include.tag | split: ":" | first %}
|
9
|
+
{% else %}
|
10
|
+
{% assign tag_namespace = "" %}
|
11
|
+
{% endif %}
|
12
|
+
{% endif %}
|
13
|
+
|
6
14
|
{% if num_tags > 0 %}
|
7
15
|
<nav class="item-filter">
|
16
|
+
{% comment %}Non-namespaced tags{% endcomment %}
|
8
17
|
<ul class="tags">
|
9
|
-
|
10
|
-
{% if
|
11
|
-
|
18
|
+
{% for tag in tags %}
|
19
|
+
{% if tag contains ":" %}
|
20
|
+
{% assign _namespace = tag | split: ":" | first %}
|
12
21
|
{% else %}
|
13
|
-
|
22
|
+
{% assign _namespace = "" %}
|
14
23
|
{% endif %}
|
15
|
-
</li>
|
16
24
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
25
|
+
{% if _namespace == "" %}
|
26
|
+
<li>
|
27
|
+
{% assign tag_human = tag | replace: "_", " " %}
|
28
|
+
{% if tag == include.tag %}
|
29
|
+
<span>{{ tag_human }}</span>
|
30
|
+
{% else %}
|
31
|
+
<a href="{{ include.url_tag_prefix }}{{ tag }}">{{ tag_human }}</a>
|
32
|
+
{% endif %}
|
33
|
+
</li>
|
34
|
+
{% endif %}
|
26
35
|
{% endfor %}
|
27
36
|
</ul>
|
37
|
+
|
38
|
+
{% comment %}Namespaced tags{% endcomment %}
|
39
|
+
{% for namespace in site.tag_namespaces[include.tag_namespaces] %}
|
40
|
+
{% assign namespace_human = namespace[1] %}
|
41
|
+
{% assign namespace_id = namespace[0] %}
|
42
|
+
|
43
|
+
<div class="namespace">
|
44
|
+
<span class="namespace-title">{{ namespace_human }}: </span>
|
45
|
+
|
46
|
+
<ul class="tags">
|
47
|
+
{% for tag in tags %}
|
48
|
+
{% if tag contains ":" %}
|
49
|
+
{% assign _namespace = tag | split: ":" | first %}
|
50
|
+
{% else %}
|
51
|
+
{% assign _namespace = "" %}
|
52
|
+
{% endif %}
|
53
|
+
|
54
|
+
{% if _namespace == namespace_id %}
|
55
|
+
<li>
|
56
|
+
{% assign tag_human = tag | split: ":" | last | replace: "_", " " %}
|
57
|
+
{% if tag == include.tag %}
|
58
|
+
<span>{{ tag_human }}</span>
|
59
|
+
{% else %}
|
60
|
+
<a href="{{ include.url_tag_prefix }}{{ tag }}">{{ tag_human }}</a>
|
61
|
+
{% endif %}
|
62
|
+
</li>
|
63
|
+
{% endif %}
|
64
|
+
{% endfor %}
|
65
|
+
</ul>
|
66
|
+
</div>
|
67
|
+
{% endfor %}
|
28
68
|
</nav>
|
29
69
|
{% endif %}
|
70
|
+
|
71
|
+
{% if include.tag %}
|
72
|
+
{% assign tag_human = include.tag | split: ":" | last | replace: "_", " " %}
|
73
|
+
{% if tag_namespace != "" %}
|
74
|
+
{% assign namespace = site.tag_namespaces[include.tag_namespaces][tag_namespace] %}
|
75
|
+
{% endif %}
|
76
|
+
<header class="filter-header">
|
77
|
+
<h3 class="title">
|
78
|
+
Showing items matching
|
79
|
+
<span class="tag">{% if namespace %}<span class="namespace">{{ namespace }}:</span> {% endif %}{{ tag_human }}</span>
|
80
|
+
<a class="show-all" href="{{ include.url_tag_prefix }}">(show all)</a>
|
81
|
+
</h3>
|
82
|
+
</header>
|
83
|
+
{% endif %}
|
data/_includes/tag-list.html
CHANGED
@@ -2,8 +2,16 @@
|
|
2
2
|
{% if num_tags > 0 %}
|
3
3
|
<ul class="tags">
|
4
4
|
{% for tag in include.tags %}
|
5
|
-
{%
|
6
|
-
|
5
|
+
{% if tag contains ":" %}
|
6
|
+
{% assign namespace_id = tag | split: ":" | first %}
|
7
|
+
{% assign namespace = site.tag_namespaces[include.item_type][namespace_id] %}
|
8
|
+
{% assign tag_human = tag | split: ":" | last | replace: "_", " " %}
|
9
|
+
{% else %}
|
10
|
+
{% assign tag_human = tag | replace: "_", " " %}
|
11
|
+
{% assign namespace = "" %}
|
12
|
+
{% endif %}
|
13
|
+
|
14
|
+
<li>{% if namespace != "" %}<span class="namespace">{{ namespace }}:</span> {% endif %}{{ tag_human }}</li>
|
7
15
|
{% endfor %}
|
8
16
|
</ul>
|
9
17
|
{% endif %}
|
@@ -2,7 +2,7 @@
|
|
2
2
|
layout: default
|
3
3
|
---
|
4
4
|
|
5
|
-
{% include index-page-item-filter.html url_tag_prefix="/software/" items=site.all_software tag=page.tag %}
|
5
|
+
{% include index-page-item-filter.html url_tag_prefix="/software/" tag_namespaces="software" items=site.all_software tag=page.tag %}
|
6
6
|
|
7
7
|
<section class="items">
|
8
8
|
{% if site.is_hub %}
|
data/_layouts/spec-index.html
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
layout: default
|
3
3
|
---
|
4
4
|
|
5
|
-
{% include index-page-item-filter.html url_tag_prefix="/specs/" items=site.all_specs tag=page.tag %}
|
5
|
+
{% include index-page-item-filter.html url_tag_prefix="/specs/" tag_namespaces="specs" items=site.all_specs tag=page.tag %}
|
6
6
|
|
7
7
|
<section class="items">
|
8
8
|
{% if site.is_hub %}
|
@@ -142,17 +142,75 @@ main {
|
|
142
142
|
|
143
143
|
.layout--spec-index > &,
|
144
144
|
.layout--software-index > & {
|
145
|
+
> .filter-header {
|
146
|
+
// Shown when a tag is selected.
|
147
|
+
background-color: #fafafa;
|
148
|
+
font-size: 80%;
|
149
|
+
box-shadow: 0 4px 40px -14px rgba(0, 0, 0, 0.4);
|
150
|
+
border-radius: .5em;
|
151
|
+
margin-top: -.5em;
|
152
|
+
|
153
|
+
.title {
|
154
|
+
font-weight: normal;
|
155
|
+
text-align: center;
|
156
|
+
|
157
|
+
.tag {
|
158
|
+
white-space: nowrap;
|
159
|
+
font-weight: bold;
|
160
|
+
|
161
|
+
.namespace {
|
162
|
+
font-weight: normal;
|
163
|
+
}
|
164
|
+
|
165
|
+
&:before { content: "“"; font-weight: normal; }
|
166
|
+
&:after { content: "”"; font-weight: normal; }
|
167
|
+
}
|
168
|
+
a.show-all {
|
169
|
+
white-space: nowrap;
|
170
|
+
}
|
171
|
+
}
|
172
|
+
}
|
145
173
|
> .item-filter {
|
146
|
-
padding: 18px
|
174
|
+
padding: 18px 2em;
|
147
175
|
background-color: #F3F3F3;
|
148
176
|
align-self: stretch;
|
149
|
-
text-align:
|
177
|
+
text-align: left;
|
178
|
+
|
179
|
+
.namespace, ul.tags {
|
180
|
+
font-size: 14px;
|
181
|
+
}
|
182
|
+
|
183
|
+
.namespace {
|
184
|
+
display: flex;
|
185
|
+
flex-flow: row nowrap;
|
186
|
+
align-items: flex-start;
|
187
|
+
margin-top: .5em;
|
188
|
+
|
189
|
+
.namespace-title {
|
190
|
+
margin-right: 14px;
|
191
|
+
}
|
192
|
+
|
193
|
+
&.empty {
|
194
|
+
display: none;
|
195
|
+
}
|
196
|
+
|
197
|
+
&:first-child {
|
198
|
+
margin-top: 0;
|
199
|
+
}
|
200
|
+
}
|
150
201
|
|
151
202
|
ul.tags {
|
203
|
+
flex: 1;
|
204
|
+
|
152
205
|
list-style: none;
|
153
206
|
margin: 0;
|
154
207
|
padding: 0;
|
155
|
-
|
208
|
+
|
209
|
+
white-space: nowrap;
|
210
|
+
overflow-x: scroll;
|
211
|
+
overflow-y: hidden;
|
212
|
+
|
213
|
+
text-overflow: ellipsis;
|
156
214
|
|
157
215
|
> li {
|
158
216
|
display: inline;
|
@@ -164,22 +222,30 @@ main {
|
|
164
222
|
margin: 0 4px;
|
165
223
|
padding: 3px 10px 3px 10px;
|
166
224
|
white-space: nowrap;
|
225
|
+
|
226
|
+
&:first-child {
|
227
|
+
margin-left: -10px;
|
228
|
+
}
|
167
229
|
}
|
168
230
|
> a {
|
169
231
|
color: grey;
|
170
232
|
}
|
171
233
|
}
|
234
|
+
|
235
|
+
&.scrolled {
|
236
|
+
text-overflow: unset;
|
237
|
+
}
|
172
238
|
}
|
173
239
|
}
|
174
240
|
}
|
175
241
|
// Item filter: color override for selected tags
|
176
242
|
> .item-filter ul.tags li > span {
|
177
243
|
.layout--software-index > & {
|
178
|
-
color: $hub-software--primary-color;
|
244
|
+
color: $hub-software--primary-dark-color;
|
179
245
|
background-color: rgba($hub-software--primary-color, 0.1);
|
180
246
|
}
|
181
247
|
.layout--spec-index > & {
|
182
|
-
color: $hub-specs--primary-color;
|
248
|
+
color: $hub-specs--primary-dark-color;
|
183
249
|
background-color: rgba($hub-specs--primary-color, 0.1);
|
184
250
|
}
|
185
251
|
}
|
@@ -48,6 +48,7 @@ a {
|
|
48
48
|
|
49
49
|
.index-item-grid {
|
50
50
|
margin-top: 40px;
|
51
|
+
padding: 0; // Override padding set by main section
|
51
52
|
|
52
53
|
@media screen and (min-width: $bigscreen-breakpoint) {
|
53
54
|
margin-top: 80px;
|
@@ -210,13 +211,22 @@ a {
|
|
210
211
|
margin: 0;
|
211
212
|
padding: 0;
|
212
213
|
|
214
|
+
white-space: nowrap;
|
215
|
+
|
216
|
+
.namespace {
|
217
|
+
color: lighten($main-font-color, 50%);
|
218
|
+
font-weight: normal;
|
219
|
+
}
|
220
|
+
|
213
221
|
&::after {
|
214
|
-
content: "
|
222
|
+
content: " • ";
|
223
|
+
margin: 0 4px;
|
215
224
|
color: grey;
|
216
225
|
font-weight: normal;
|
217
226
|
}
|
218
227
|
&:last-child::after {
|
219
228
|
content: "";
|
229
|
+
margin: 0;
|
220
230
|
}
|
221
231
|
|
222
232
|
color: $primary-color;
|
data/assets/js/opf.js
CHANGED
@@ -4,6 +4,9 @@
|
|
4
4
|
|
5
5
|
var body = document.querySelector('body');
|
6
6
|
|
7
|
+
// TODO: Best way (preferably w/o Node) to split these across files
|
8
|
+
// and concatenate/minify the result on Jekyll build?
|
9
|
+
|
7
10
|
|
8
11
|
|
9
12
|
/* Search box in top bar */
|
@@ -206,6 +209,36 @@
|
|
206
209
|
|
207
210
|
|
208
211
|
|
212
|
+
/* Software/spec index filter bar */
|
213
|
+
|
214
|
+
var initIndexFilter = function(filterBar) {
|
215
|
+
var namespaces = filterBar.querySelectorAll('.namespace');
|
216
|
+
|
217
|
+
var updateScrolledStatus = function (evt) {
|
218
|
+
if (!evt.target.classList) { return; }
|
219
|
+
|
220
|
+
if (evt.target.scrollLeft > 0) {
|
221
|
+
evt.target.classList.add('scrolled');
|
222
|
+
} else {
|
223
|
+
evt.target.classList.remove('scrolled');
|
224
|
+
}
|
225
|
+
};
|
226
|
+
|
227
|
+
// Mark empty namespaces
|
228
|
+
for (let nsEl of namespaces) {
|
229
|
+
if (nsEl.querySelector('ul.tags > li') === null) {
|
230
|
+
nsEl.classList.add('empty');
|
231
|
+
}
|
232
|
+
}
|
233
|
+
|
234
|
+
// Update styling on tag bar on scroll
|
235
|
+
for (let tags of filterBar.querySelectorAll('ul.tags')) {
|
236
|
+
tags.addEventListener('scroll', updateScrolledStatus);
|
237
|
+
}
|
238
|
+
};
|
239
|
+
|
240
|
+
|
241
|
+
|
209
242
|
// Initializing stuff
|
210
243
|
var hamburgerMenu = initCollapsibleMenu(
|
211
244
|
document.querySelector('header nav.top-menu'),
|
@@ -235,6 +268,11 @@
|
|
235
268
|
if (el) { el.addEventListener('click', collapsibleDocsNav.toggle); }
|
236
269
|
}
|
237
270
|
|
238
|
-
|
271
|
+
if (triggerEl !== null && inputEl !== null && topMenuEl !== null) {
|
272
|
+
initSearchWidget(topMenuEl, triggerEl, inputEl);
|
273
|
+
}
|
274
|
+
|
275
|
+
var indexFilterEl = document.querySelector('nav.item-filter');
|
276
|
+
initIndexFilter(indexFilterEl);
|
239
277
|
|
240
278
|
}());
|
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.24
|
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-11-
|
11
|
+
date: 2018-11-16 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.24
|
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.24
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: bundler
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|