jekyll-dictionaries 1.0.2 → 1.0.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 +4 -4
- data/.DS_Store +0 -0
- data/.idea/workspace.xml +22 -4
- data/README.md +28 -86
- data/_includes/.DS_Store +0 -0
- data/_includes/dictionaries/accordion.html +16 -0
- data/_includes/dictionaries/collectionItem.html +4 -0
- data/_includes/dictionaries/collectionName.html +2 -0
- data/_includes/dictionaries/head.html +37 -0
- data/_includes/dictionaries/list.html +13 -0
- data/_includes/dictionaries/multiple/collection.html +24 -0
- data/_includes/dictionaries/multiple/container.html +13 -0
- data/_includes/dictionaries/single/collection.html +20 -0
- data/_includes/dictionaries/single/container.html +13 -0
- data/_layouts/dictionary.html +63 -0
- data/_layouts/dictionary_api.json +3 -0
- data/jekyll-dictionaries.gemspec +2 -1
- data/lib/jekyll-dictionaries/generator.rb +30 -50
- data/lib/jekyll-dictionaries/generators/dictionaries.rb +62 -0
- data/lib/jekyll-dictionaries/generators/theme.rb +61 -0
- data/lib/jekyll-dictionaries/pages/dictionary.rb +53 -0
- data/lib/jekyll-dictionaries/pages/dictionary_api.rb +12 -0
- data/lib/jekyll-dictionaries/version.rb +1 -1
- data/lib/jekyll-dictionaries.rb +0 -3
- metadata +34 -5
- data/lib/jekyll-dictionaries/dictionary_api_page.rb +0 -10
- data/lib/jekyll-dictionaries/dictionary_page.rb +0 -51
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0ae6fbb1a2c9e99134e6a3c2efa23a802b6b23b9a2990f3cb24de390d86e3b2a
|
|
4
|
+
data.tar.gz: daec5bcd991748fbcc89e55bc74f1c86998ad3d8d68ef3a11c4de77a792dcb7f
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: f7ccbf3eb1883c6286a4059eaa019cb6975480e57eaeedd351cd8e23a2d1f9505b2a8cf500e733249d31085ada93d076997d8934934fc45e7b86942f5efedbc6
|
|
7
|
+
data.tar.gz: b9ad86763fa24cfc53ee6abfc77f0d052a2927db263b8a4e5f99fa9034a10ce6a26b55da14c6f988887face3cab1cd9c1f9be73e1d2ac3b8204e4610e8f7b931
|
data/.DS_Store
CHANGED
|
Binary file
|
data/.idea/workspace.xml
CHANGED
|
@@ -5,8 +5,25 @@
|
|
|
5
5
|
</component>
|
|
6
6
|
<component name="ChangeListManager">
|
|
7
7
|
<list default="true" id="a0de0db4-04ba-4a6e-9544-85d905789a03" name="Changes" comment="">
|
|
8
|
+
<change afterPath="$PROJECT_DIR$/lib/jekyll-dictionaries/generators/dictionaries.rb" afterDir="false" />
|
|
9
|
+
<change afterPath="$PROJECT_DIR$/lib/jekyll-dictionaries/generators/theme.rb" afterDir="false" />
|
|
10
|
+
<change afterPath="$PROJECT_DIR$/lib/jekyll-dictionaries/pages/dictionary.rb" afterDir="false" />
|
|
11
|
+
<change afterPath="$PROJECT_DIR$/lib/jekyll-dictionaries/pages/dictionary_api.rb" afterDir="false" />
|
|
12
|
+
<change afterPath="$PROJECT_DIR$/spec/fixtures/jekyll/_includes/head.html" afterDir="false" />
|
|
8
13
|
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
|
|
9
14
|
<change beforePath="$PROJECT_DIR$/README.md" beforeDir="false" afterPath="$PROJECT_DIR$/README.md" afterDir="false" />
|
|
15
|
+
<change beforePath="$PROJECT_DIR$/jekyll-dictionaries.gemspec" beforeDir="false" afterPath="$PROJECT_DIR$/jekyll-dictionaries.gemspec" afterDir="false" />
|
|
16
|
+
<change beforePath="$PROJECT_DIR$/lib/jekyll-dictionaries.rb" beforeDir="false" afterPath="$PROJECT_DIR$/lib/jekyll-dictionaries.rb" afterDir="false" />
|
|
17
|
+
<change beforePath="$PROJECT_DIR$/lib/jekyll-dictionaries/dictionary_api_page.rb" beforeDir="false" />
|
|
18
|
+
<change beforePath="$PROJECT_DIR$/lib/jekyll-dictionaries/dictionary_page.rb" beforeDir="false" />
|
|
19
|
+
<change beforePath="$PROJECT_DIR$/lib/jekyll-dictionaries/generator.rb" beforeDir="false" afterPath="$PROJECT_DIR$/lib/jekyll-dictionaries/generator.rb" afterDir="false" />
|
|
20
|
+
<change beforePath="$PROJECT_DIR$/spec/fixtures/jekyll/_config.yml" beforeDir="false" afterPath="$PROJECT_DIR$/spec/fixtures/jekyll/_config.yml" afterDir="false" />
|
|
21
|
+
<change beforePath="$PROJECT_DIR$/spec/fixtures/jekyll/_layouts/dictionary.html" beforeDir="false" />
|
|
22
|
+
<change beforePath="$PROJECT_DIR$/spec/fixtures/jekyll/_layouts/dictionary_api.json" beforeDir="false" />
|
|
23
|
+
<change beforePath="$PROJECT_DIR$/spec/fixtures/snapshots/api/multiple.json" beforeDir="false" afterPath="$PROJECT_DIR$/spec/fixtures/snapshots/api/multiple.json" afterDir="false" />
|
|
24
|
+
<change beforePath="$PROJECT_DIR$/spec/fixtures/snapshots/api/single.json" beforeDir="false" afterPath="$PROJECT_DIR$/spec/fixtures/snapshots/api/single.json" afterDir="false" />
|
|
25
|
+
<change beforePath="$PROJECT_DIR$/spec/fixtures/snapshots/pages/multiple.html" beforeDir="false" afterPath="$PROJECT_DIR$/spec/fixtures/snapshots/pages/multiple.html" afterDir="false" />
|
|
26
|
+
<change beforePath="$PROJECT_DIR$/spec/fixtures/snapshots/pages/single.html" beforeDir="false" afterPath="$PROJECT_DIR$/spec/fixtures/snapshots/pages/single.html" afterDir="false" />
|
|
10
27
|
</list>
|
|
11
28
|
<option name="SHOW_DIALOG" value="false" />
|
|
12
29
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
|
@@ -44,16 +61,17 @@
|
|
|
44
61
|
<component name="RecentsManager">
|
|
45
62
|
<key name="CopyFile.RECENT_KEYS">
|
|
46
63
|
<recent name="$PROJECT_DIR$/spec/fixtures/snapshots/pages" />
|
|
64
|
+
<recent name="$PROJECT_DIR$/spec/fixtures/snapshots/api" />
|
|
47
65
|
<recent name="$PROJECT_DIR$/spec/fixtures/jekyll" />
|
|
48
66
|
<recent name="$PROJECT_DIR$" />
|
|
49
67
|
<recent name="$PROJECT_DIR$/.idea" />
|
|
50
68
|
</key>
|
|
51
69
|
<key name="MoveFile.RECENT_KEYS">
|
|
70
|
+
<recent name="$PROJECT_DIR$/lib/jekyll-dictionaries/pages" />
|
|
71
|
+
<recent name="$PROJECT_DIR$/lib/jekyll-dictionaries/generators" />
|
|
72
|
+
<recent name="$PROJECT_DIR$/_includes/dictionary" />
|
|
52
73
|
<recent name="$PROJECT_DIR$/" />
|
|
53
74
|
<recent name="$PROJECT_DIR$/spec/fixtures/snapshots/pages" />
|
|
54
|
-
<recent name="$PROJECT_DIR$/spec/fixtures/jekyll" />
|
|
55
|
-
<recent name="$PROJECT_DIR$" />
|
|
56
|
-
<recent name="$PROJECT_DIR$/spec/fixtures/snapshots/api" />
|
|
57
75
|
</key>
|
|
58
76
|
</component>
|
|
59
77
|
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
|
@@ -67,7 +85,7 @@
|
|
|
67
85
|
<updated>1696301317963</updated>
|
|
68
86
|
<workItem from="1696301319406" duration="9538000" />
|
|
69
87
|
<workItem from="1696310885150" duration="15107000" />
|
|
70
|
-
<workItem from="1696338033417" duration="
|
|
88
|
+
<workItem from="1696338033417" duration="29066000" />
|
|
71
89
|
</task>
|
|
72
90
|
<servers />
|
|
73
91
|
</component>
|
data/README.md
CHANGED
|
@@ -7,8 +7,8 @@ Welcome to the Jekyll Dictionaries Plugin project! This open-source project allo
|
|
|
7
7
|
|
|
8
8
|
## Table of Contents
|
|
9
9
|
|
|
10
|
+
- [Intro](#intro)
|
|
10
11
|
- [Installation](#installation)
|
|
11
|
-
- [Usage](#usage)
|
|
12
12
|
- [Dictionaries Structure](#dictionaries-structure)
|
|
13
13
|
- [Dictionary Types](#dictionary-types)
|
|
14
14
|
- [1. Single Translation Dictionary](#1-single-translation-dictionary)
|
|
@@ -23,103 +23,46 @@ Welcome to the Jekyll Dictionaries Plugin project! This open-source project allo
|
|
|
23
23
|
- [Push New Version Commands](#push-new-version-commands)
|
|
24
24
|
- [License](#license)
|
|
25
25
|
|
|
26
|
+
## Intro
|
|
27
|
+
|
|
28
|
+
The plugin will automatically generate dictionary and dictionary api pages for all dictionaries located into folder `_data/dictionaries` of jekyll project.
|
|
29
|
+
|
|
26
30
|
## Installation
|
|
27
31
|
|
|
28
|
-
Add this line to your site's Gemfile:
|
|
32
|
+
1. Add this line to your site's Gemfile:
|
|
29
33
|
|
|
30
34
|
```ruby
|
|
31
35
|
gem 'jekyll-dictionaries'
|
|
32
36
|
```
|
|
33
37
|
|
|
34
|
-
|
|
38
|
+
2. Include `dictionary/head.html` into default layout to add custom styles of the plugin (the plugin styles are added as inline css styles and it might be updated if it's needed):
|
|
35
39
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
{% assign content = page.content | jsonify %}{% assign docPage = page.related_page %}{% if docPage %}{"docPath":"{{ docPage.url | absolute_url }}",{{ content | remove_first: '{' }}{% else %}{{ content }}{% endif %}
|
|
40
|
+
```html
|
|
41
|
+
<head>
|
|
42
|
+
...
|
|
43
|
+
{% include dictionaries/head.html %}
|
|
44
|
+
</head>
|
|
42
45
|
```
|
|
43
46
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
layout: page
|
|
49
|
-
---
|
|
50
|
-
|
|
51
|
-
<h1>Info</h1>
|
|
52
|
-
<table>
|
|
53
|
-
<tbody>
|
|
54
|
-
<tr>
|
|
55
|
-
<th>Name</th>
|
|
56
|
-
<td>{{ page.content.name }}</td>
|
|
57
|
-
</tr>
|
|
58
|
-
<tr>
|
|
59
|
-
<th>Version</th>
|
|
60
|
-
<td>{{ page.content.version }}</td>
|
|
61
|
-
</tr>
|
|
62
|
-
<tr>
|
|
63
|
-
<th>Learning</th>
|
|
64
|
-
<td>{{ page.content.learning }}</td>
|
|
65
|
-
</tr>
|
|
66
|
-
|
|
67
|
-
<tr>
|
|
68
|
-
<th>Translation Type</th>
|
|
69
|
-
<td>{{ page.content.translationType }}</td>
|
|
70
|
-
</tr>
|
|
71
|
-
|
|
72
|
-
{% if page.content.translationType == 'multiple' %}
|
|
73
|
-
|
|
74
|
-
<tr>
|
|
75
|
-
<th>Translations</th>
|
|
76
|
-
<td>{{ page.content.translations | join: ', ' }}</td>
|
|
77
|
-
</tr>
|
|
78
|
-
{% endif %}
|
|
79
|
-
|
|
80
|
-
{% assign apiPage = page.related_page %}
|
|
81
|
-
|
|
82
|
-
{% if apiPage %}
|
|
83
|
-
|
|
84
|
-
<tr>
|
|
85
|
-
<th> <a href="{{ apiPage.url | relative_url }}" target="_blank">API LINK</a> </th>
|
|
86
|
-
<td>
|
|
87
|
-
<button onclick="copyToClipboard('{{ apiPage.url | absolute_url }}')">Copy to Clipboard</button>
|
|
88
|
-
</td>
|
|
89
|
-
</tr>
|
|
90
|
-
{% endif %}
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
</tbody>
|
|
94
|
-
</table>
|
|
95
|
-
|
|
96
|
-
<script>
|
|
97
|
-
function copyToClipboard(text) {
|
|
98
|
-
// Copy the text inside the text field
|
|
99
|
-
navigator.clipboard.writeText(text);
|
|
100
|
-
}
|
|
101
|
-
</script>
|
|
47
|
+
3. Include `dictionaries/list.html` into index page to show a list of available dictionaries:
|
|
48
|
+
|
|
49
|
+
```html
|
|
50
|
+
{% include dictionaries/list.html %}
|
|
102
51
|
```
|
|
103
52
|
|
|
104
|
-
|
|
53
|
+
4. (OPTIONAL) Also it's possible to change layout and permalink of dictionary pages on site's `_config.yml`:
|
|
105
54
|
|
|
106
55
|
```yml
|
|
107
|
-
plugins:
|
|
108
|
-
- jekyll-dictionaries
|
|
109
|
-
|
|
110
56
|
dictionaries:
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
57
|
+
pages:
|
|
58
|
+
dictionary:
|
|
59
|
+
layout: dictionary
|
|
60
|
+
permalink: dictionaries/:name
|
|
61
|
+
dictionary_api:
|
|
62
|
+
layout: dictionary_api
|
|
63
|
+
permalink: api/dictionaries/:name.json
|
|
117
64
|
```
|
|
118
65
|
|
|
119
|
-
## Usage
|
|
120
|
-
|
|
121
|
-
The plugin will automatically generate dictionary and dictionary api pages for all dictionaries located into folder `_data/dictionaries` of jekyll project.
|
|
122
|
-
|
|
123
66
|
## Dictionaries Structure
|
|
124
67
|
|
|
125
68
|
The dictionaries in this project have a specific structure that consists of the following components:
|
|
@@ -336,7 +279,7 @@ _data/dictionaries/single/unit1/numbers.json
|
|
|
336
279
|
The plugin will generate JSON API **/api/dictionaries/single.json**
|
|
337
280
|
|
|
338
281
|
```json
|
|
339
|
-
{"
|
|
282
|
+
{"docUrl":"http://example.org/dictionaries/single","version":"1.0.0","name":"Basic (One Language)","translationType":"single","learning":"es","data":[{"name":"Greetings","type":"collection","data":[{"learning":"¡Hola!","primary":"Hello!"}]},{"type":"folder","name":"unit1","data":[{"name":"numbers","type":"collection","data":[{"primary":"one","learning":"uno"},{"primary":"two","learning":"dos"},{"primary":"three","learning":"tres"},{"primary":"four","learning":"cuatro"},{"primary":"five","learning":"cinco"},{"primary":"six","elearnings":"seis"},{"primary":"seven","learning":"siete"},{"primary":"eight","learning":"ocho"},{"primary":"nine","learning":"nueve"},{"primary":"ten","learning":"diez"}]}]}]}
|
|
340
283
|
```
|
|
341
284
|
|
|
342
285
|
### 2. Multiple Translations Dictionary Example
|
|
@@ -477,7 +420,7 @@ _data/dictionaries/multiple/unit1/numbers.json
|
|
|
477
420
|
The plugin will generate JSON API **/api/dictionaries/multiple.json**
|
|
478
421
|
|
|
479
422
|
```json
|
|
480
|
-
{"
|
|
423
|
+
{"docUrl":"http://example.org/dictionaries/multiple","version":"1.0.0","name":"Basic (Multiple Languages)","translationType":"multiple","learning":"es","translations":["en","ru","de","fr","pt"],"data":[{"name":"Greetings","type":"collection","data":[{"learning":"¡Hola!","en":"Hello!","ru":"Привет!","de":"Hallo!","fr":"Bonjour!","pt":"Olá!"}]},{"type":"folder","name":"Unit 1","data":[{"name":"numbers","type":"collection","data":[{"learning":"uno","en":"one","ru":"один","de":"eins","fr":"un","pt":"um"},{"learning":"dos","en":"two","ru":"два","de":"zwei","fr":"deux","pt":"dois"},{"learning":"tres","en":"three","ru":"три","de":"drei","fr":"trois","pt":"três"},{"learning":"cuatro","en":"four","ru":"четыре","de":"vier","fr":"quatre","pt":"quatro"},{"learning":"cinco","en":"five","ru":"пять","de":"fünf","fr":"cinq","pt":"cinco"},{"learning":"seis","en":"six","ru":"шесть","de":"sechs","fr":"six","pt":"seis"},{"learning":"siete","en":"seven","ru":"семь","de":"sieben","fr":"sept","pt":"sete"},{"learning":"ocho","en":"eight","ru":"восемь","de":"acht","fr":"huit","pt":"oito"},{"learning":"nueve","en":"nine","ru":"девять","de":"neun","fr":"neuf","pt":"nove"},{"learning":"diez","en":"ten","ru":"десять","de":"zehn","fr":"dix","pt":"dez"}]}]}]}
|
|
481
424
|
```
|
|
482
425
|
|
|
483
426
|
As you can see collection `greetings` and folder `un1` have names that are defined by property `name`.
|
|
@@ -486,11 +429,10 @@ As you can see collection `greetings` and folder `un1` have names that are defin
|
|
|
486
429
|
|
|
487
430
|
```bash
|
|
488
431
|
gem bump
|
|
489
|
-
|
|
432
|
+
gem build jekyll-dictionaries.gemspec
|
|
433
|
+
gem push jekyll-dictionaries-1.0.2.gem
|
|
490
434
|
```
|
|
491
435
|
|
|
492
|
-
|
|
493
|
-
|
|
494
436
|
## License
|
|
495
437
|
|
|
496
438
|
This project is licensed under the MIT License.
|
data/_includes/.DS_Store
ADDED
|
Binary file
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script>
|
|
2
|
+
var acc = document.getElementsByClassName("accordion");
|
|
3
|
+
var i;
|
|
4
|
+
|
|
5
|
+
for (i = 0; i < acc.length; i++) {
|
|
6
|
+
acc[i].addEventListener("click", function () {
|
|
7
|
+
this.classList.toggle("active");
|
|
8
|
+
var panel = this.nextElementSibling;
|
|
9
|
+
if (panel.style.display === "block") {
|
|
10
|
+
panel.style.display = "none";
|
|
11
|
+
} else {
|
|
12
|
+
panel.style.display = "block";
|
|
13
|
+
}
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
</script>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.2/css/all.min.css" integrity="sha512-z3gLpd7yknf1YoNbCzqRKc4qyor8gaKU1qmn+CShxbuBusANI9QpRohGBreCFkKxLhei6S9CQXFEbbKuqLg0DA==" crossorigin="anonymous" referrerpolicy="no-referrer" />
|
|
2
|
+
|
|
3
|
+
<style>
|
|
4
|
+
.accordion {
|
|
5
|
+
background-color: #eee;
|
|
6
|
+
color: #444;
|
|
7
|
+
cursor: pointer;
|
|
8
|
+
padding: 18px;
|
|
9
|
+
width: 100%;
|
|
10
|
+
border: none;
|
|
11
|
+
text-align: left;
|
|
12
|
+
outline: none;
|
|
13
|
+
font-size: 15px;
|
|
14
|
+
transition: 0.4s;
|
|
15
|
+
margin: 5px 0;
|
|
16
|
+
}
|
|
17
|
+
.accordion.active, .accordion:hover {
|
|
18
|
+
background-color: #ccc;
|
|
19
|
+
}
|
|
20
|
+
.accordion-panel {
|
|
21
|
+
padding: 5px;
|
|
22
|
+
padding-right: 0;
|
|
23
|
+
padding-left: 0;
|
|
24
|
+
display: none;
|
|
25
|
+
background-color: white;
|
|
26
|
+
overflow: hidden;
|
|
27
|
+
}
|
|
28
|
+
.accordion-panel.folder-container {
|
|
29
|
+
padding-left: 10px;
|
|
30
|
+
}
|
|
31
|
+
.accordion-icon {
|
|
32
|
+
margin-right: 10px;
|
|
33
|
+
}
|
|
34
|
+
.dictionary-list .list-header {
|
|
35
|
+
margin-bottom: 20px;
|
|
36
|
+
}
|
|
37
|
+
</style>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<div class="dictionary-list">
|
|
2
|
+
<h2 class="list-header">Dictionary APIs</h2>
|
|
3
|
+
{% assign dictPages = site.pages | where_exp: "item", "item.scope == 'dictionary'" %}
|
|
4
|
+
{% if dictPages.size > 0 %}
|
|
5
|
+
<ul>
|
|
6
|
+
{% for page in dictPages %}
|
|
7
|
+
<li>
|
|
8
|
+
<a href="{{ page.url | relative_url }}" target="blank">{{ page.name | escape }}</a>
|
|
9
|
+
</li>
|
|
10
|
+
{% endfor %}
|
|
11
|
+
</ul>
|
|
12
|
+
{% endif %}
|
|
13
|
+
</div>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<table>
|
|
2
|
+
<thead>
|
|
3
|
+
<tr>
|
|
4
|
+
<th>Learning</th>
|
|
5
|
+
{% for translation in include.translations %}
|
|
6
|
+
<th>{{ translation }}</th>
|
|
7
|
+
{% endfor %}
|
|
8
|
+
</tr>
|
|
9
|
+
</thead>
|
|
10
|
+
<tbody>
|
|
11
|
+
{% for item in include.items %}
|
|
12
|
+
<tr>
|
|
13
|
+
<td>
|
|
14
|
+
{% include dictionaries/collectionItem.html value=item.learning note=item.notes.learning %}
|
|
15
|
+
</td>
|
|
16
|
+
{% for translation in include.translations %}
|
|
17
|
+
{% assign value = item[translation] %}
|
|
18
|
+
{% assign note = item.notes[translation] %}
|
|
19
|
+
<td>{% include dictionaries/collectionItem.html value=value note=note %}</td>
|
|
20
|
+
{% endfor %}
|
|
21
|
+
</tr>
|
|
22
|
+
{% endfor %}
|
|
23
|
+
</tbody>
|
|
24
|
+
</table>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{% for item in include.items %}
|
|
2
|
+
|
|
3
|
+
{% include dictionaries/collectionName.html item=item %}
|
|
4
|
+
|
|
5
|
+
<div class="accordion-panel {{ item.type }}-container">
|
|
6
|
+
{% case item.type %}
|
|
7
|
+
{% when "folder" %}
|
|
8
|
+
{% include dictionaries/multiple/container.html items=item.data translations=include.translations %}
|
|
9
|
+
{% when "collection" %}
|
|
10
|
+
{% include dictionaries/multiple/collection.html items=item.data translations=include.translations %}
|
|
11
|
+
{% endcase %}
|
|
12
|
+
</div>
|
|
13
|
+
{% endfor %}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<table>
|
|
2
|
+
<thead>
|
|
3
|
+
<tr>
|
|
4
|
+
<th>Learning</th>
|
|
5
|
+
<th>Primary</th>
|
|
6
|
+
</tr>
|
|
7
|
+
</thead>
|
|
8
|
+
<tbody>
|
|
9
|
+
{% for item in include.items %}
|
|
10
|
+
<tr>
|
|
11
|
+
<td>
|
|
12
|
+
{% include dictionaries/collectionItem.html value=item.learning note=item.notes.learning %}
|
|
13
|
+
</td>
|
|
14
|
+
<td>
|
|
15
|
+
{% include dictionaries/collectionItem.html value=item.primary note=item.notes.primary %}
|
|
16
|
+
</td>
|
|
17
|
+
</tr>
|
|
18
|
+
{% endfor %}
|
|
19
|
+
</tbody>
|
|
20
|
+
</table>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{% for item in include.items %}
|
|
2
|
+
|
|
3
|
+
{% include dictionaries/collectionName.html item=item %}
|
|
4
|
+
|
|
5
|
+
<div class="accordion-panel {{ item.type }}-container">
|
|
6
|
+
{% case item.type %}
|
|
7
|
+
{% when "folder" %}
|
|
8
|
+
{% include dictionaries/single/container.html items=item.data %}
|
|
9
|
+
{% when "collection" %}
|
|
10
|
+
{% include dictionaries/single/collection.html items=item.data %}
|
|
11
|
+
{% endcase %}
|
|
12
|
+
</div>
|
|
13
|
+
{% endfor %}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: page
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<h1>Info</h1>
|
|
6
|
+
<table>
|
|
7
|
+
<tbody>
|
|
8
|
+
<tr>
|
|
9
|
+
<th>Name</th>
|
|
10
|
+
<td>{{ page.content.name }}</td>
|
|
11
|
+
</tr>
|
|
12
|
+
<tr>
|
|
13
|
+
<th>Version</th>
|
|
14
|
+
<td>{{ page.content.version }}</td>
|
|
15
|
+
</tr>
|
|
16
|
+
<tr>
|
|
17
|
+
<th>Learning</th>
|
|
18
|
+
<td>{{ page.content.learning }}</td>
|
|
19
|
+
</tr>
|
|
20
|
+
|
|
21
|
+
<tr>
|
|
22
|
+
<th>Translation Type</th>
|
|
23
|
+
<td>{{ page.content.translationType }}</td>
|
|
24
|
+
</tr>
|
|
25
|
+
|
|
26
|
+
{% if page.content.translationType == 'multiple' %}
|
|
27
|
+
|
|
28
|
+
<tr>
|
|
29
|
+
<th>Translations</th>
|
|
30
|
+
<td>{{ page.content.translations | join: ', ' }}</td>
|
|
31
|
+
</tr>
|
|
32
|
+
{% endif %}
|
|
33
|
+
|
|
34
|
+
{% assign apiPage = page.related_page %}
|
|
35
|
+
|
|
36
|
+
{% if apiPage %}
|
|
37
|
+
|
|
38
|
+
<tr>
|
|
39
|
+
<th> <a href="{{ apiPage.url | relative_url }}" target="_blank">API LINK</a> </th>
|
|
40
|
+
<td>
|
|
41
|
+
<button onclick="copyToClipboard('{{ apiPage.url | absolute_url }}')">Copy to Clipboard</button>
|
|
42
|
+
</td>
|
|
43
|
+
</tr>
|
|
44
|
+
{% endif %}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
</tbody>
|
|
48
|
+
</table>
|
|
49
|
+
|
|
50
|
+
{% if page.content.translationType == 'single' %}
|
|
51
|
+
{% include dictionaries/single/container.html items=page.content.data prefix='dict-level' %}
|
|
52
|
+
{% else %}
|
|
53
|
+
{% include dictionaries/multiple/container.html items=page.content.data translations=page.content.translations prefix='dict-level' %}
|
|
54
|
+
{% endif %}
|
|
55
|
+
|
|
56
|
+
{% include dictionaries/accordion.html %}
|
|
57
|
+
|
|
58
|
+
<script>
|
|
59
|
+
function copyToClipboard(text) {
|
|
60
|
+
// Copy the text inside the text field
|
|
61
|
+
navigator.clipboard.writeText(text);
|
|
62
|
+
}
|
|
63
|
+
</script>
|
data/jekyll-dictionaries.gemspec
CHANGED
|
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
|
|
|
8
8
|
spec.authors = ["hinkoulabs"]
|
|
9
9
|
spec.email = ["siarhei.hinkou@hinkoulabs.com"]
|
|
10
10
|
|
|
11
|
-
spec.summary = "A Jekyll plugin to generate JSON dictionaries for language learning applications"
|
|
11
|
+
spec.summary = "A Jekyll theme plugin to generate JSON dictionaries for language learning applications"
|
|
12
12
|
spec.homepage = "https://github.com/hinkoulabs/jekyll-dictionaries"
|
|
13
13
|
spec.license = "MIT"
|
|
14
14
|
spec.required_ruby_version = ">= 2.6.0"
|
|
@@ -29,4 +29,5 @@ Gem::Specification.new do |spec|
|
|
|
29
29
|
spec.require_paths = ["lib"]
|
|
30
30
|
|
|
31
31
|
spec.add_development_dependency 'rspec'
|
|
32
|
+
spec.add_development_dependency 'minima', '~> 2.5'
|
|
32
33
|
end
|
|
@@ -1,73 +1,53 @@
|
|
|
1
|
-
require_relative '
|
|
2
|
-
require_relative '
|
|
1
|
+
require_relative 'pages/dictionary'
|
|
2
|
+
require_relative 'pages/dictionary_api'
|
|
3
|
+
|
|
4
|
+
require_relative 'generators/dictionaries'
|
|
5
|
+
require_relative 'generators/theme'
|
|
3
6
|
|
|
4
7
|
module JekyllDictionaries
|
|
5
8
|
class Generator < Jekyll::Generator
|
|
6
|
-
|
|
9
|
+
CONFIG = {
|
|
10
|
+
'pages' => {
|
|
11
|
+
'dictionary' => {
|
|
12
|
+
'layout' => 'dictionary',
|
|
13
|
+
'permalink' => 'dictionaries/:name'
|
|
14
|
+
},
|
|
15
|
+
'dictionary_api' => {
|
|
16
|
+
'layout' => 'dictionary_api',
|
|
17
|
+
'permalink' => 'api/dictionaries/:name.json'
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
7
21
|
|
|
8
22
|
safe true
|
|
9
23
|
|
|
10
24
|
def generate(site)
|
|
11
25
|
@site = site
|
|
12
|
-
dicts = site.data['dictionaries'].inject([]) do |memo, (k, v)|
|
|
13
|
-
# dictionary start with _
|
|
14
|
-
m = k.match(DICT_REGEX)
|
|
15
|
-
if m
|
|
16
|
-
dict = v.merge('data' => [])
|
|
17
|
-
|
|
18
|
-
name = m[1]
|
|
19
|
-
|
|
20
|
-
folder = site.data['dictionaries'][name]
|
|
21
|
-
|
|
22
|
-
if (folder)
|
|
23
|
-
dict['data'] = build_collections(folder)
|
|
24
|
-
end
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
end
|
|
28
|
-
memo
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
dicts.each do |dict|
|
|
32
|
-
api_page = DictionaryApiPage.new(site, dict, config)
|
|
33
|
-
doc_page = DictionaryPage.new(site, dict, config)
|
|
27
|
+
Generators::Theme.new(site).generate
|
|
34
28
|
|
|
35
|
-
|
|
36
|
-
doc_page.related_page = api_page
|
|
29
|
+
dictionaries = Generators::Dictionaries.new(site).generate
|
|
37
30
|
|
|
38
|
-
|
|
39
|
-
|
|
31
|
+
dictionaries.each do |dictionary|
|
|
32
|
+
build_dictionary_pages(dictionary)
|
|
40
33
|
end
|
|
41
34
|
end
|
|
42
35
|
|
|
43
36
|
protected
|
|
44
37
|
|
|
45
38
|
def config
|
|
46
|
-
@config ||= @site.config["dictionaries"] || {}
|
|
39
|
+
@config ||= Jekyll::Utils.deep_merge_hashes(CONFIG, @site.config["dictionaries"] || {})
|
|
47
40
|
end
|
|
48
41
|
|
|
49
|
-
def
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
# collection is detected
|
|
53
|
-
if (v['type'] == 'collection')
|
|
54
|
-
# set k as title if title is missing
|
|
55
|
-
memo << { 'name' => v['name'] || k }.merge(v)
|
|
56
|
-
else
|
|
57
|
-
metadata = v['_metadata']
|
|
58
|
-
# folder is detected
|
|
59
|
-
memo
|
|
60
|
-
folder = {
|
|
61
|
-
'type' => 'folder',
|
|
62
|
-
'name' => metadata ? metadata['name'] : k,
|
|
63
|
-
'data' => build_collections(v.select { |kk, _| kk != '_metadata' })
|
|
64
|
-
}
|
|
65
|
-
memo << folder
|
|
66
|
-
end
|
|
67
|
-
end
|
|
42
|
+
def build_dictionary_pages(dictionary)
|
|
43
|
+
api_page = Pages::DictionaryApi.new(@site, dictionary, config['pages']['dictionary_api'])
|
|
44
|
+
doc_page = Pages::Dictionary.new(@site, dictionary, config['pages']['dictionary'])
|
|
68
45
|
|
|
69
|
-
|
|
70
|
-
|
|
46
|
+
api_page.related_page = doc_page
|
|
47
|
+
doc_page.related_page = api_page
|
|
48
|
+
|
|
49
|
+
@site.pages << api_page
|
|
50
|
+
@site.pages << doc_page
|
|
71
51
|
end
|
|
72
52
|
end
|
|
73
53
|
end
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
module JekyllDictionaries
|
|
2
|
+
module Generators
|
|
3
|
+
class Dictionaries
|
|
4
|
+
DICT_REGEX = /^_(.*)/
|
|
5
|
+
|
|
6
|
+
def initialize(site)
|
|
7
|
+
@site = site
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def generate
|
|
11
|
+
build_dictionaries_from_data
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
protected
|
|
15
|
+
|
|
16
|
+
def build_dictionaries_from_data
|
|
17
|
+
@site.data['dictionaries'].inject([]) do |memo, (k, v)|
|
|
18
|
+
# dictionary start with _
|
|
19
|
+
m = k.match(DICT_REGEX)
|
|
20
|
+
if m
|
|
21
|
+
dict = v.merge('data' => [])
|
|
22
|
+
|
|
23
|
+
name = m[1]
|
|
24
|
+
|
|
25
|
+
folder = @site.data['dictionaries'][name]
|
|
26
|
+
|
|
27
|
+
if (folder)
|
|
28
|
+
dict['data'] = build_collections(folder)
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
memo << OpenStruct.new(filename: name, content: dict)
|
|
32
|
+
end
|
|
33
|
+
memo
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def build_collections(folder_content)
|
|
38
|
+
folder_content.inject([]) do |memo, (k, v)|
|
|
39
|
+
if v.is_a?(Hash)
|
|
40
|
+
# collection is detected
|
|
41
|
+
if (v['type'] == 'collection')
|
|
42
|
+
# set k as title if title is missing
|
|
43
|
+
memo << { 'name' => v['name'] || k }.merge(v)
|
|
44
|
+
else
|
|
45
|
+
metadata = v['_metadata']
|
|
46
|
+
# folder is detected
|
|
47
|
+
memo
|
|
48
|
+
folder = {
|
|
49
|
+
'type' => 'folder',
|
|
50
|
+
'name' => metadata ? metadata['name'] : k,
|
|
51
|
+
'data' => build_collections(v.select { |kk, _| kk != '_metadata' })
|
|
52
|
+
}
|
|
53
|
+
memo << folder
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
memo
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
require 'delegate'
|
|
2
|
+
|
|
3
|
+
module JekyllDictionaries
|
|
4
|
+
module Generators
|
|
5
|
+
class Theme
|
|
6
|
+
attr_reader :site, :theme
|
|
7
|
+
def initialize(site)
|
|
8
|
+
@site = site
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def generate
|
|
12
|
+
add_includes
|
|
13
|
+
add_layouts
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
protected
|
|
17
|
+
|
|
18
|
+
def theme
|
|
19
|
+
@theme ||= Jekyll::Theme.new("jekyll-dictionaries")
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def add_includes
|
|
23
|
+
@site.includes_load_paths << theme.includes_path
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def add_layouts
|
|
27
|
+
layouts_path = theme.layouts_path
|
|
28
|
+
wrap_custom_theme do
|
|
29
|
+
entries_in(layouts_path).each do |layout_file|
|
|
30
|
+
@site.layouts[theme_file_name(layout_file)] ||= Jekyll::Layout.new(@site, layouts_path, layout_file)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def wrap_custom_theme
|
|
36
|
+
site_theme = @site.theme
|
|
37
|
+
@site.theme = theme
|
|
38
|
+
yield
|
|
39
|
+
@site.theme = site_theme
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def entries_in(dir)
|
|
43
|
+
entries = []
|
|
44
|
+
within(dir) do
|
|
45
|
+
entries = Jekyll::EntryFilter.new(@site).filter(Dir["**/*.*"])
|
|
46
|
+
end
|
|
47
|
+
entries
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def within(directory)
|
|
51
|
+
return unless File.exist?(directory)
|
|
52
|
+
|
|
53
|
+
Dir.chdir(directory) { yield }
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def theme_file_name(file)
|
|
57
|
+
file.split(".")[0..-2].join(".")
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
module JekyllDictionaries
|
|
2
|
+
module Pages
|
|
3
|
+
class Dictionary < Jekyll::Page
|
|
4
|
+
attr_accessor :type
|
|
5
|
+
attr_reader :related_page
|
|
6
|
+
|
|
7
|
+
def initialize(site, dic, default_opts)
|
|
8
|
+
@site = site # the current site instance.
|
|
9
|
+
@base = site.source # path to the source directory.
|
|
10
|
+
@dir = dic.filename # the directory the page will reside in.
|
|
11
|
+
|
|
12
|
+
add_scope_data
|
|
13
|
+
|
|
14
|
+
# All pages have the same filename, so define attributes straight away.
|
|
15
|
+
@basename = dic.filename # filename without the extension.
|
|
16
|
+
@name = dic.content['name'] || dic.filename # basically @basename + @ext.
|
|
17
|
+
|
|
18
|
+
# Initialize data hash with a key pointing to all posts under current category.
|
|
19
|
+
# This allows accessing the list in a template via `page.linked_docs`.
|
|
20
|
+
@data = {
|
|
21
|
+
'content' => dic.content,
|
|
22
|
+
'scope' => @type
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
# Look up front matter defaults scoped to type `dictionary`, if given key
|
|
26
|
+
# doesn't exist in the `data` hash.
|
|
27
|
+
data.default_proc = proc do |_, key|
|
|
28
|
+
(default_opts || {})[key]
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def related_page=(page)
|
|
33
|
+
@related_page = page
|
|
34
|
+
@data['related_page'] = @related_page
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
def add_scope_data
|
|
38
|
+
@type = :dictionary
|
|
39
|
+
@ext = '.html'
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Placeholders that are used in constructing page URL.
|
|
43
|
+
def url_placeholders
|
|
44
|
+
{
|
|
45
|
+
:path => @dir,
|
|
46
|
+
:name => @dir,
|
|
47
|
+
:basename => basename,
|
|
48
|
+
:output_ext => output_ext,
|
|
49
|
+
}
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
data/lib/jekyll-dictionaries.rb
CHANGED
|
@@ -4,9 +4,6 @@ require "jekyll"
|
|
|
4
4
|
require "jekyll-dictionaries/generator"
|
|
5
5
|
|
|
6
6
|
module JekyllDictionaries
|
|
7
|
-
autoload :DictionaryPage, "jekyll-dictionaries/dictionary_page.rb"
|
|
8
|
-
autoload :DictionaryApiPage, "jekyll-dictionaries/dictionary_api_page.rb"
|
|
9
|
-
|
|
10
7
|
def self.root
|
|
11
8
|
File.dirname __dir__
|
|
12
9
|
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jekyll-dictionaries
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.0.
|
|
4
|
+
version: 1.0.3
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- hinkoulabs
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-10-
|
|
11
|
+
date: 2023-10-05 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rspec
|
|
@@ -24,6 +24,20 @@ dependencies:
|
|
|
24
24
|
- - ">="
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
26
|
version: '0'
|
|
27
|
+
- !ruby/object:Gem::Dependency
|
|
28
|
+
name: minima
|
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
|
30
|
+
requirements:
|
|
31
|
+
- - "~>"
|
|
32
|
+
- !ruby/object:Gem::Version
|
|
33
|
+
version: '2.5'
|
|
34
|
+
type: :development
|
|
35
|
+
prerelease: false
|
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
+
requirements:
|
|
38
|
+
- - "~>"
|
|
39
|
+
- !ruby/object:Gem::Version
|
|
40
|
+
version: '2.5'
|
|
27
41
|
description:
|
|
28
42
|
email:
|
|
29
43
|
- siarhei.hinkou@hinkoulabs.com
|
|
@@ -44,11 +58,25 @@ files:
|
|
|
44
58
|
- LICENSE.txt
|
|
45
59
|
- README.md
|
|
46
60
|
- Rakefile
|
|
61
|
+
- _includes/.DS_Store
|
|
62
|
+
- _includes/dictionaries/accordion.html
|
|
63
|
+
- _includes/dictionaries/collectionItem.html
|
|
64
|
+
- _includes/dictionaries/collectionName.html
|
|
65
|
+
- _includes/dictionaries/head.html
|
|
66
|
+
- _includes/dictionaries/list.html
|
|
67
|
+
- _includes/dictionaries/multiple/collection.html
|
|
68
|
+
- _includes/dictionaries/multiple/container.html
|
|
69
|
+
- _includes/dictionaries/single/collection.html
|
|
70
|
+
- _includes/dictionaries/single/container.html
|
|
71
|
+
- _layouts/dictionary.html
|
|
72
|
+
- _layouts/dictionary_api.json
|
|
47
73
|
- jekyll-dictionaries.gemspec
|
|
48
74
|
- lib/jekyll-dictionaries.rb
|
|
49
|
-
- lib/jekyll-dictionaries/dictionary_api_page.rb
|
|
50
|
-
- lib/jekyll-dictionaries/dictionary_page.rb
|
|
51
75
|
- lib/jekyll-dictionaries/generator.rb
|
|
76
|
+
- lib/jekyll-dictionaries/generators/dictionaries.rb
|
|
77
|
+
- lib/jekyll-dictionaries/generators/theme.rb
|
|
78
|
+
- lib/jekyll-dictionaries/pages/dictionary.rb
|
|
79
|
+
- lib/jekyll-dictionaries/pages/dictionary_api.rb
|
|
52
80
|
- lib/jekyll-dictionaries/version.rb
|
|
53
81
|
homepage: https://github.com/hinkoulabs/jekyll-dictionaries
|
|
54
82
|
licenses:
|
|
@@ -73,5 +101,6 @@ requirements: []
|
|
|
73
101
|
rubygems_version: 3.2.32
|
|
74
102
|
signing_key:
|
|
75
103
|
specification_version: 4
|
|
76
|
-
summary: A Jekyll plugin to generate JSON dictionaries for language learning
|
|
104
|
+
summary: A Jekyll theme plugin to generate JSON dictionaries for language learning
|
|
105
|
+
applications
|
|
77
106
|
test_files: []
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
module JekyllDictionaries
|
|
2
|
-
class DictionaryPage < Jekyll::Page
|
|
3
|
-
attr_accessor :type
|
|
4
|
-
attr_reader :related_page
|
|
5
|
-
|
|
6
|
-
def initialize(site, dic, default_opts)
|
|
7
|
-
@site = site # the current site instance.
|
|
8
|
-
@base = site.source # path to the source directory.
|
|
9
|
-
@dir = dic.filename # the directory the page will reside in.
|
|
10
|
-
|
|
11
|
-
add_scope_data
|
|
12
|
-
|
|
13
|
-
# All pages have the same filename, so define attributes straight away.
|
|
14
|
-
@basename = dic.filename # filename without the extension.
|
|
15
|
-
@name = dic.content['name'] || dic.filename # basically @basename + @ext.
|
|
16
|
-
|
|
17
|
-
# Initialize data hash with a key pointing to all posts under current category.
|
|
18
|
-
# This allows accessing the list in a template via `page.linked_docs`.
|
|
19
|
-
@data = {
|
|
20
|
-
'content' => dic.content,
|
|
21
|
-
'scope' => @type
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
# Look up front matter defaults scoped to type `dictionary`, if given key
|
|
25
|
-
# doesn't exist in the `data` hash.
|
|
26
|
-
data.default_proc = proc do |_, key|
|
|
27
|
-
(default_opts[@type.to_s] || {})[key]
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def related_page=(page)
|
|
32
|
-
@related_page = page
|
|
33
|
-
@data['related_page'] = @related_page
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def add_scope_data
|
|
37
|
-
@type = :dictionary
|
|
38
|
-
@ext = '.html'
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
# Placeholders that are used in constructing page URL.
|
|
42
|
-
def url_placeholders
|
|
43
|
-
{
|
|
44
|
-
:path => @dir,
|
|
45
|
-
:name => @dir,
|
|
46
|
-
:basename => basename,
|
|
47
|
-
:output_ext => output_ext,
|
|
48
|
-
}
|
|
49
|
-
end
|
|
50
|
-
end
|
|
51
|
-
end
|