rawfeed 0.1.3 → 0.2.0
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/LICENSE.txt +20 -21
- data/README.md +13 -112
- data/_data/options.yml +270 -0
- data/_data/resume.yml +8 -9
- data/_includes/alert +3 -1
- data/_includes/chart +13 -32
- data/_includes/details +1 -57
- data/_includes/image +12 -4
- data/_includes/layout/blog_search.html +7 -5
- data/_includes/layout/data.liquid +21 -3
- data/_includes/layout/disqus.html +12 -26
- data/_includes/layout/footer.html +34 -16
- data/_includes/layout/giscus.html +27 -19
- data/_includes/layout/head.html +58 -19
- data/_includes/layout/header.html +127 -101
- data/_includes/layout/maintenance.html +8 -12
- data/_includes/layout/paginator.html +6 -4
- data/_includes/socials +7 -5
- data/_includes/tabs +1 -94
- data/_includes/toc +12 -152
- data/_includes/video +4 -1
- data/_layouts/blog.html +8 -7
- data/_layouts/contact.html +90 -196
- data/_layouts/default.html +42 -339
- data/_layouts/error.html +6 -4
- data/_layouts/home.html +45 -36
- data/_layouts/licenses.html +10 -0
- data/_layouts/page.html +4 -6
- data/_layouts/pixel.html +48 -0
- data/_layouts/pixels.html +71 -0
- data/_layouts/post.html +28 -31
- data/_layouts/resume.html +43 -36
- data/_layouts/tag.html +14 -3
- data/_layouts/tag_posts.html +3 -3
- data/_sass/base/_index.scss +39 -3
- data/_sass/components/_badges.scss +10 -0
- data/_sass/components/_markdown.scss +20 -17
- data/_sass/includes/_footer.scss +18 -8
- data/_sass/includes/_header.scss +24 -19
- data/_sass/includes/_highlight.scss +20 -7
- data/_sass/includes/_maintenance.scss +2 -3
- data/_sass/includes/_terminal.scss +35 -12
- data/_sass/layouts/_blog.scss +13 -9
- data/_sass/layouts/_contact.scss +6 -5
- data/_sass/layouts/_default.scss +5 -5
- data/_sass/layouts/_index.scss +3 -0
- data/_sass/layouts/_licenses.scss +7 -0
- data/_sass/layouts/_page.scss +1 -0
- data/_sass/layouts/_pixel.scss +61 -0
- data/_sass/layouts/_pixels.scss +86 -0
- data/_sass/layouts/_post.scss +4 -11
- data/_sass/layouts/_resume.scss +17 -7
- data/_sass/layouts/_tag-posts.scss +1 -2
- data/_sass/layouts/_tag.scss +12 -1
- data/_sass/main.scss +16 -1
- data/_sass/theme/_dark.scss +15 -5
- data/_sass/theme/_light.scss +9 -2
- data/assets/images/blog/.keep +0 -0
- data/assets/images/pixels/luffy.jpg +0 -0
- data/assets/js/blog.coffee +102 -0
- data/assets/js/contact.coffee +105 -0
- data/assets/js/default.coffee +172 -0
- data/assets/js/discus.coffee +30 -0
- data/assets/js/fallback/README.md +3 -0
- data/assets/js/fallback/blog.js +113 -0
- data/assets/js/fallback/contact.js +116 -0
- data/assets/js/{default.js → fallback/default.js} +50 -0
- data/assets/js/fallback/discus.js +32 -0
- data/{_includes/layout/google_analytics.html → assets/js/fallback/google_analytics.js} +7 -3
- data/assets/js/fallback/home.js +275 -0
- data/assets/js/fallback/no_inframe.js +4 -0
- data/assets/js/fallback/page.js +423 -0
- data/assets/js/fallback/pixels.js +1 -0
- data/assets/js/fallback/resume.js +13 -0
- data/assets/js/fallback/tags.js +1 -0
- data/assets/js/fallback/theme_load.js +4 -0
- data/assets/js/google_analytics.coffee +24 -0
- data/assets/js/home.coffee +250 -0
- data/assets/js/no_inframe.coffee +9 -0
- data/assets/js/page.coffee +379 -0
- data/assets/js/pixels.coffee +2 -0
- data/assets/js/resume.coffee +9 -0
- data/assets/js/tags.coffee +2 -0
- data/assets/js/theme_load.coffee +6 -0
- data/assets/json/blog_search.json +2 -2
- data/lib/rawfeed/author.rb +59 -0
- data/lib/rawfeed/csp_filters.rb +19 -0
- data/lib/rawfeed/draft.rb +1 -1
- data/lib/rawfeed/layout.rb +7 -0
- data/lib/rawfeed/page.rb +4 -2
- data/lib/rawfeed/pixel.rb +32 -0
- data/lib/rawfeed/post.rb +2 -2
- data/lib/rawfeed/resume.rb +1 -0
- data/lib/rawfeed/typescript_liquid.rb +172 -0
- data/lib/rawfeed/utils.rb +1 -0
- data/lib/rawfeed/version.rb +1 -1
- data/lib/rawfeed/with_class.rb +20 -0
- data/lib/rawfeed.rb +5 -0
- metadata +46 -12
- data/assets/js/avatar.js +0 -50
- data/assets/js/terminal.js +0 -18
- data/assets/js/toc.js +0 -22
data/_layouts/default.html
CHANGED
|
@@ -1,351 +1,54 @@
|
|
|
1
|
-
<!-- Theme for Jekyll.rb by: ©
|
|
2
|
-
{%- if site.maintenance.enable -%}
|
|
3
|
-
{%- include layout/maintenance.html -%}
|
|
4
|
-
{%- else -%}
|
|
5
|
-
|
|
1
|
+
<!-- Theme for Jekyll.rb by: © rawfeed <https://rawfeed.github.io> -->
|
|
6
2
|
{%- include layout/data.liquid -%}
|
|
7
3
|
|
|
8
|
-
{%-
|
|
9
|
-
|
|
10
|
-
<!DOCTYPE html>
|
|
11
|
-
<html id="top" lang="{{ site.lang | default: 'en-US' }}" data-theme="light">
|
|
12
|
-
{%- include layout/head.html -%}
|
|
13
|
-
<body data-layout="{{ page.layout | default: '' }}" data-terminal-enabled="{{ site.home.terminal.enable | default: false }}">
|
|
14
|
-
{%- if site.home.terminal.enable and page.url == "/" and index.layout == "home" -%}
|
|
15
|
-
<div class="default default-terminal" style="max-width: {{ site.layout.width | default: '780px' }} !important;">
|
|
16
|
-
{%- include layout/header.html -%}
|
|
17
|
-
</div>
|
|
18
|
-
<main class="content">{{ content }}</main>
|
|
19
|
-
{%- include layout/footer.html -%}
|
|
20
|
-
{%- else -%}
|
|
21
|
-
<div class="default" style="max-width: {{ site.layout.width | default: '780px' }} !important;">
|
|
22
|
-
{%- include layout/header.html -%}
|
|
23
|
-
<main class="content">{{ content }}</main>
|
|
24
|
-
|
|
25
|
-
{%- include layout/footer.html -%}
|
|
26
|
-
</div>
|
|
27
|
-
{%- endif -%}
|
|
28
|
-
</body>
|
|
29
|
-
|
|
30
|
-
<!-- Scripts -->
|
|
31
|
-
<script src="{{ '/assets/vendor/bootstrap/js/bootstrap.bundle.js' | relative_url }}"></script>
|
|
32
|
-
|
|
33
|
-
{%- if page.comments != false and site.blog.post.comments.provider == 'giscus' -%}
|
|
34
|
-
<script>
|
|
35
|
-
window.giscusThemes = {
|
|
36
|
-
light: "{{ site.blog.post.comments.giscus.theme_light | default: 'light' }}",
|
|
37
|
-
dark: "{{ site.blog.post.comments.giscus.theme_dark | default: 'dark' }}"
|
|
38
|
-
};
|
|
39
|
-
</script>
|
|
40
|
-
{%- endif -%}
|
|
41
|
-
|
|
42
|
-
<script src="{{ '/assets/js/default.js' | relative_url }}"></script>
|
|
43
|
-
|
|
44
|
-
{%- if page.url == '/' and site.home.terminal.enable -%}
|
|
45
|
-
<script src="{{ '/assets/js/terminal.js' | relative_url }}"></script>
|
|
46
|
-
{%- endif -%}
|
|
47
|
-
|
|
48
|
-
{%- if site.avatar.open -%}
|
|
49
|
-
<script src="{{ '/assets/js/avatar.js' | relative_url }}"></script>
|
|
50
|
-
{%- endif -%}
|
|
51
|
-
|
|
52
|
-
{%- if site.blog.search.enable -%}
|
|
53
|
-
{%- if page.url == '/blog/' or page.url == '/blog/index.html' -%}
|
|
54
|
-
<script src="{{ '/assets/vendor/simple-jekyll-search.min.js' | relative_url }}"></script>
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
<script>
|
|
59
|
-
document.addEventListener("DOMContentLoaded", () => {
|
|
60
|
-
const btn = document.getElementById('blog-search__btn');
|
|
61
|
-
const box = document.querySelector('.blog-search');
|
|
62
|
-
const searchInput = document.getElementById('blog-search__input');
|
|
63
|
-
const blogPosts = document.getElementById('posts');
|
|
64
|
-
const searchResults = document.getElementById('blog-search__results');
|
|
65
|
-
const searchResultsWrapper = document.getElementById('blog-search__results-wrapper');
|
|
66
|
-
const btnSearchClean = document.getElementById('blog-search__btn-clean');
|
|
67
|
-
const blogSeachInput = document.getElementById('blog-search__input');
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
if (!btn || !box) return;
|
|
71
|
-
|
|
72
|
-
const openSearch = () => {
|
|
73
|
-
box.classList.add('is-open');
|
|
74
|
-
box.style.maxHeight = box.scrollHeight + 'px';
|
|
75
|
-
box.style.opacity = '1';
|
|
76
|
-
box.addEventListener('transitionend', function onOpened(e) {
|
|
77
|
-
if (e.propertyName === 'max-height') {
|
|
78
|
-
box.style.maxHeight = 'none';
|
|
79
|
-
box.removeEventListener('transitionend', onOpened);
|
|
80
|
-
}
|
|
81
|
-
});
|
|
82
|
-
blogSeachInput.focus();
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
const closeSearch = () => {
|
|
86
|
-
box.style.maxHeight = box.scrollHeight + 'px';
|
|
87
|
-
void box.offsetHeight; // reflow force
|
|
88
|
-
requestAnimationFrame(() => {
|
|
89
|
-
box.style.maxHeight = '0';
|
|
90
|
-
box.style.opacity = '0';
|
|
91
|
-
});
|
|
92
|
-
box.classList.remove('is-open');
|
|
93
|
-
};
|
|
94
|
-
|
|
95
|
-
btn.addEventListener('click', (e) => {
|
|
96
|
-
e.preventDefault();
|
|
97
|
-
|
|
98
|
-
// if are already in /blog/, toggle
|
|
99
|
-
const pathname = location.pathname.replace(/\/$/, '');
|
|
100
|
-
const isBlog = pathname === '/blog' || pathname === '/blog/index.html';
|
|
101
|
-
|
|
102
|
-
if (!isBlog) {
|
|
103
|
-
// if are on another page, go to /blog/ and open it
|
|
104
|
-
window.location.href = "{{ search_url }}";
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// toggle
|
|
109
|
-
if (box.classList.contains('is-open')) {
|
|
110
|
-
closeSearch();
|
|
111
|
-
searchInput.value = '';
|
|
112
|
-
blogPosts.classList.remove('disabled');
|
|
113
|
-
searchResultsWrapper.classList.add('disabled');
|
|
114
|
-
} else {
|
|
115
|
-
openSearch();
|
|
116
|
-
}
|
|
117
|
-
});
|
|
118
|
-
|
|
119
|
-
// opens automatically if arrived from another link with ?search=open
|
|
120
|
-
const params = new URLSearchParams(location.search);
|
|
121
|
-
if (params.get('search') === 'open') {
|
|
122
|
-
setTimeout(openSearch, 30);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
/* clean button input blog search
|
|
126
|
-
--------------------------------------------------------------------------------------------------
|
|
127
|
-
*/
|
|
128
|
-
function clearSearch() {
|
|
129
|
-
blogSeachInput.value = '';
|
|
130
|
-
blogPosts.classList.remove('disabled');
|
|
131
|
-
searchResults.classList.add('disabled');
|
|
132
|
-
searchResultsWrapper.classList.add('disabled');
|
|
133
|
-
blogSeachInput.focus();
|
|
134
|
-
}
|
|
135
|
-
btnSearchClean.addEventListener('click', clearSearch);
|
|
136
|
-
document.addEventListener('keydown', (e) => {
|
|
137
|
-
if (e.key === 'Escape') {
|
|
138
|
-
clearSearch();
|
|
139
|
-
closeSearch();
|
|
140
|
-
}
|
|
141
|
-
});
|
|
4
|
+
{%- if maintenance_.enable != true -%}
|
|
142
5
|
|
|
143
|
-
|
|
144
|
-
--------------------------------------------------------------------------------------------------
|
|
145
|
-
*/
|
|
146
|
-
searchInput.addEventListener('input', () => {
|
|
147
|
-
if (searchInput.value.trim().length > 0) {
|
|
148
|
-
blogPosts.classList.add('disabled');
|
|
149
|
-
searchResults.classList.remove('disabled');
|
|
150
|
-
searchResultsWrapper.classList.remove('disabled');
|
|
151
|
-
} else {
|
|
152
|
-
blogPosts.classList.remove('disabled');
|
|
153
|
-
searchResults.classList.add('disabled');
|
|
154
|
-
searchResultsWrapper.classList.add('disabled');
|
|
155
|
-
}
|
|
156
|
-
});
|
|
157
|
-
var sjs = SimpleJekyllSearch({
|
|
158
|
-
searchInput: document.getElementById('blog-search__input'),
|
|
159
|
-
resultsContainer: document.getElementById('blog-search__results'),
|
|
160
|
-
searchResultTemplate: '<li><span class="blog-list__meta"><time datetime="{date}">{date}</time></span> » <a class="blog-list__link" href="{{ site.url }}{url}">{title}</a></li>',
|
|
161
|
-
noResultsText: '<p>{{ site.text.blog.no_results | default: "No results found" }}</p>',
|
|
162
|
-
json: "{{ '/assets/json/blog_search.json' | relative_url }}"
|
|
163
|
-
})
|
|
164
|
-
});
|
|
165
|
-
</script>
|
|
166
|
-
{%- endif -%}
|
|
167
|
-
{%- endif -%}
|
|
168
|
-
|
|
169
|
-
{%- if site.home.terminal.enable and page.url == "/" -%}
|
|
170
|
-
<script>
|
|
171
|
-
document.addEventListener("DOMContentLoaded", () => {
|
|
172
|
-
const screen = document.getElementById('screen');
|
|
173
|
-
const terminal = document.getElementById("terminal");
|
|
174
|
-
const socialsEl = document.getElementById("terminal-screen--socials");
|
|
175
|
-
|
|
176
|
-
const commands = {
|
|
177
|
-
help: `{{ site.text.home.terminal.commands }}`,
|
|
178
|
-
about: document.getElementById("home-content").innerHTML,
|
|
179
|
-
socials: socialsEl ? socialsEl.innerHTML : `{{ site.text.home.terminal.no_socials }}`,
|
|
180
|
-
};
|
|
181
|
-
|
|
182
|
-
function createInputLine() {
|
|
183
|
-
const line = document.createElement('div');
|
|
184
|
-
line.className = 'line';
|
|
185
|
-
|
|
186
|
-
const prompt = document.createElement('span');
|
|
187
|
-
prompt.className = 'prompt';
|
|
188
|
-
prompt.textContent = `[{{ site.text.home.terminal.user }}@{{ site.text.home.terminal.hostname }}:~]$`;
|
|
189
|
-
|
|
190
|
-
// wrapper para conter input, cursor e measure
|
|
191
|
-
const wrapper = document.createElement('span');
|
|
192
|
-
wrapper.className = 'input-wrapper';
|
|
193
|
-
|
|
194
|
-
const input = document.createElement('input');
|
|
195
|
-
input.type = 'text';
|
|
196
|
-
input.className = 'input';
|
|
197
|
-
input.placeholder = `{{ site.text.home.terminal.welcome }}`;
|
|
198
|
-
input.spellcheck = false;
|
|
199
|
-
input.autocomplete = 'off';
|
|
200
|
-
input.autocorrect = 'off';
|
|
201
|
-
input.autocapitalize = 'off';
|
|
202
|
-
|
|
203
|
-
const cursor = document.createElement('span');
|
|
204
|
-
cursor.className = 'cursor';
|
|
205
|
-
|
|
206
|
-
const measure = document.createElement('span');
|
|
207
|
-
measure.className = 'measure';
|
|
208
|
-
|
|
209
|
-
wrapper.appendChild(input);
|
|
210
|
-
wrapper.appendChild(cursor);
|
|
211
|
-
wrapper.appendChild(measure);
|
|
212
|
-
|
|
213
|
-
line.appendChild(prompt);
|
|
214
|
-
line.appendChild(wrapper);
|
|
215
|
-
screen.appendChild(line);
|
|
216
|
-
|
|
217
|
-
input.focus();
|
|
218
|
-
screen.scrollTop = screen.scrollHeight;
|
|
219
|
-
|
|
220
|
-
// Updates the fake cursor position based on the input's selectionStart
|
|
221
|
-
function updateCursor() {
|
|
222
|
-
const sel = input.selectionStart || 0;
|
|
223
|
-
// measure the text to the position of the caret
|
|
224
|
-
measure.textContent = input.value.slice(0, sel);
|
|
225
|
-
const textWidth = measure.offsetWidth; // largura do texto sem scroll
|
|
226
|
-
const visibleLeft = textWidth - input.scrollLeft;
|
|
227
|
-
cursor.style.left = visibleLeft + 'px';
|
|
228
|
-
|
|
229
|
-
// ensure the caret is visible (for long texts): adjust input's scrollLeft
|
|
230
|
-
const paddingRight = 10;
|
|
231
|
-
if (textWidth - input.scrollLeft > input.clientWidth - paddingRight) {
|
|
232
|
-
input.scrollLeft = textWidth - input.clientWidth + paddingRight;
|
|
233
|
-
cursor.style.left = (textWidth - input.scrollLeft) + 'px';
|
|
234
|
-
} else if (textWidth < input.scrollLeft) {
|
|
235
|
-
input.scrollLeft = textWidth;
|
|
236
|
-
cursor.style.left = (textWidth - input.scrollLeft) + 'px';
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
// show/hide cursor animation as focus changes
|
|
241
|
-
function onFocus() { cursor.style.opacity = '1'; updateCursor(); }
|
|
242
|
-
function onBlur() { cursor.style.opacity = '0'; }
|
|
243
|
-
|
|
244
|
-
input.addEventListener('input', updateCursor);
|
|
245
|
-
input.addEventListener('keydown', (e) => {
|
|
246
|
-
// Update position on keys that do not trigger input immediately (arrows, delete, etc.)
|
|
247
|
-
setTimeout(updateCursor, 0);
|
|
248
|
-
|
|
249
|
-
if (e.key === 'Enter') {
|
|
250
|
-
e.preventDefault();
|
|
251
|
-
const cmd = input.value.trim().toLowerCase();
|
|
252
|
-
if (cmd) {
|
|
253
|
-
// remove input/cursor/measure and place fixed text
|
|
254
|
-
wrapper.removeChild(input);
|
|
255
|
-
wrapper.removeChild(cursor);
|
|
256
|
-
wrapper.removeChild(measure);
|
|
257
|
-
const cmdText = document.createElement('span');
|
|
258
|
-
cmdText.textContent = cmd;
|
|
259
|
-
wrapper.appendChild(cmdText);
|
|
260
|
-
processCommand(cmd);
|
|
261
|
-
} else {
|
|
262
|
-
// if you enter without command, it just creates a new empty line (with prompt)
|
|
263
|
-
wrapper.removeChild(input);
|
|
264
|
-
wrapper.removeChild(cursor);
|
|
265
|
-
wrapper.removeChild(measure);
|
|
266
|
-
const blank = document.createElement('span');
|
|
267
|
-
blank.textContent = '';
|
|
268
|
-
wrapper.appendChild(blank);
|
|
269
|
-
}
|
|
270
|
-
// New linr input
|
|
271
|
-
createInputLine();
|
|
272
|
-
} else if (e.key === 'Escape') {
|
|
273
|
-
e.preventDefault();
|
|
274
|
-
screen.innerHTML = '';
|
|
275
|
-
createInputLine();
|
|
276
|
-
}
|
|
277
|
-
});
|
|
278
|
-
|
|
279
|
-
// arrows, mouse click, mouseup (position caret), etc.
|
|
280
|
-
input.addEventListener('keyup', updateCursor);
|
|
281
|
-
input.addEventListener('click', () => {
|
|
282
|
-
// updates after click (selectionStart already set)
|
|
283
|
-
setTimeout(updateCursor, 0);
|
|
284
|
-
});
|
|
285
|
-
input.addEventListener('mouseup', () => setTimeout(updateCursor, 0));
|
|
286
|
-
input.addEventListener('focus', onFocus);
|
|
287
|
-
input.addEventListener('blur', onBlur);
|
|
288
|
-
|
|
289
|
-
updateCursor();
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
// processes commands
|
|
293
|
-
function processCommand(cmd) {
|
|
294
|
-
switch(true){
|
|
295
|
-
case cmd === 'help': commandsPrint(commands.help, mode='html'); break;
|
|
296
|
-
case cmd === 'date': commandsPrint(new Date().toString(), mode='text'); break;
|
|
297
|
-
// case cmd.startsWith('echo '): commandsPrint(cmd.split(' ').slice(1).join(' ')); break;
|
|
298
|
-
case cmd === 'about': writeLineHTML(commands.about); break;
|
|
299
|
-
case cmd === 'socials': writeLineHTML(commands.socials); break;
|
|
300
|
-
case cmd === 'clear': screen.innerHTML=''; break;
|
|
301
|
-
default: if(cmd) commandsPrint(cmd + `{{ site.text.home.terminal.error }}`, mode='text');
|
|
302
|
-
}
|
|
303
|
-
}
|
|
6
|
+
{%- assign index = site.pages | where: "path", "index.md" | first -%}
|
|
304
7
|
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
8
|
+
{%- if home_.terminal.enable and page.url == "/" and index.layout == "home" -%}
|
|
9
|
+
{%- assign default_term = " default-terminal" -%}
|
|
10
|
+
{%- assign default_style = "" -%}
|
|
11
|
+
{%- else -%}
|
|
12
|
+
{%- assign default_term = "" -%}
|
|
13
|
+
{%- assign width = default_.width | default: '860' -%}
|
|
14
|
+
{%- assign default_style = "max-width: " | append: width | append: "px !important;" -%}
|
|
15
|
+
{%- endif -%}
|
|
308
16
|
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
} else {
|
|
312
|
-
wrapper.textContent = content;
|
|
313
|
-
}
|
|
314
|
-
screen.appendChild(wrapper);
|
|
315
|
-
screen.scrollTop = screen.scrollHeight;
|
|
316
|
-
}
|
|
17
|
+
<!DOCTYPE html>
|
|
18
|
+
<html id="top" lang="{{ default_.lang | default: 'en-US' }}" data-theme="light">
|
|
317
19
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
wrapper.className = 'line-wrapper';
|
|
20
|
+
<!-- head -->
|
|
21
|
+
{%- include layout/head.html -%}
|
|
22
|
+
<!-- head -->
|
|
322
23
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
line.className = 'line';
|
|
326
|
-
if (mode === 'html') {
|
|
327
|
-
line.innerHTML = t;
|
|
328
|
-
} else {
|
|
329
|
-
line.textContent = t;
|
|
330
|
-
}
|
|
331
|
-
wrapper.appendChild(line);
|
|
332
|
-
});
|
|
24
|
+
<!-- body -->
|
|
25
|
+
<body data-layout="{{ page.layout | default: '' }}" data-terminal-enabled="{{ home_.terminal.enable | default: false }}" style="font-family: {{ default_.font.style }} !important; font-size: {{ default_.font.size }} !important; letter-spacing: {{ default_.font.spacing }} !important;">
|
|
333
26
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
}
|
|
27
|
+
<!-- container -->
|
|
28
|
+
<div class="container-fluid">
|
|
29
|
+
{%- include layout/header.html -%}
|
|
337
30
|
|
|
338
|
-
|
|
339
|
-
|
|
31
|
+
<div class="default{{default_term}}" style="{{default_style}}">
|
|
32
|
+
<main class="content">{{ content }}</main>
|
|
33
|
+
</div>
|
|
340
34
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
|
|
35
|
+
{%- include layout/footer.html -%}
|
|
36
|
+
</div>
|
|
37
|
+
<!-- container -->
|
|
38
|
+
|
|
39
|
+
<!-- scripts -->
|
|
40
|
+
<script src="{{ '/assets/vendor/bootstrap/js/bootstrap.bundle.min.js' | relative_url }}"></script>
|
|
41
|
+
<script src="{{ '/assets/js/default.js' | relative_url }}"></script>
|
|
42
|
+
<script src="{{ '/assets/js/home.js' | relative_url }}"></script>
|
|
43
|
+
<script src="{{ '/assets/vendor/simple-jekyll-search.min.js' | relative_url }}"></script>
|
|
44
|
+
<script src="{{ '/assets/js/blog.js' | relative_url }}"></script>
|
|
45
|
+
<script src="{{ '/assets/js/page.js' | relative_url }}"></script>
|
|
46
|
+
<script src="{{ '/assets/js/contact.js' | relative_url }}"></script>
|
|
47
|
+
<!-- scripts -->
|
|
48
|
+
</body>
|
|
49
|
+
<!-- body -->
|
|
350
50
|
</html>
|
|
51
|
+
|
|
52
|
+
{%- else -%}
|
|
53
|
+
{%- include layout/maintenance.html -%}
|
|
351
54
|
{%- endif -%}
|
data/_layouts/error.html
CHANGED
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
layout: default
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
+
{%- include layout/data.liquid -%}
|
|
6
|
+
|
|
5
7
|
<div class="container error">
|
|
6
8
|
<div class="row">
|
|
7
9
|
<div class="col-sm text-center">
|
|
8
|
-
{%- if
|
|
9
|
-
<img class="error-image" src="{{
|
|
10
|
+
{%- if page_.error.image -%}
|
|
11
|
+
<img class="error-image" src="{{ page_.error.image }}" alt="error 404">
|
|
10
12
|
{%- endif -%}
|
|
11
|
-
<h1 class="error-title">{{
|
|
12
|
-
<h2 class="error-description">{{
|
|
13
|
+
<h1 class="error-title">{{ page_.error.title | escape }}</h1>
|
|
14
|
+
<h2 class="error-description">{{ page_.error.message | markdownify }}</h2>
|
|
13
15
|
</div>
|
|
14
16
|
</div>
|
|
15
17
|
</div>
|
data/_layouts/home.html
CHANGED
|
@@ -2,57 +2,66 @@
|
|
|
2
2
|
layout: default
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
{%-
|
|
6
|
-
<div class="d-flex justify-content-center align-items-center mb-5 home home-terminal">
|
|
7
|
-
<div id="terminal" class="terminal">
|
|
8
|
-
<div class="terminal-header">
|
|
9
|
-
<div class="terminal-header__btn terminal-header__close" title="close"></div>
|
|
10
|
-
<div class="terminal-header__btn terminal-header__min" title="minimize"></div>
|
|
11
|
-
<div class="terminal-header__btn terminal-header__max" title="maximize"></div>
|
|
12
|
-
<div class="terminal-header__title">{{ site.text.home.terminal.user }}@{{ site.text.home.terminal.hostname }}</div>
|
|
13
|
-
</div>
|
|
5
|
+
{%- include layout/data.liquid -%}
|
|
14
6
|
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
{%- if home_.terminal.enable and page.url == "/" -%}
|
|
8
|
+
<div class="d-flex justify-content-center align-items-center mb-5 home home-terminal">
|
|
9
|
+
<div id="terminal" class="terminal">
|
|
10
|
+
<div class="terminal-header">
|
|
11
|
+
<div class="terminal-header__btn terminal-header__close" title="close"></div>
|
|
12
|
+
<div class="terminal-header__btn terminal-header__min" title="minimize"></div>
|
|
13
|
+
<div class="terminal-header__btn terminal-header__max" title="maximize"></div>
|
|
14
|
+
<div class="terminal-header__title">{{ home_.terminal.user }}@{{ home_.terminal.hostname }}</div>
|
|
18
15
|
</div>
|
|
19
16
|
|
|
20
|
-
<div id="
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
17
|
+
<div id="screen" class="terminal-screen">
|
|
18
|
+
<div id="home-content" style="display:none !important;">
|
|
19
|
+
{{ content }}
|
|
20
|
+
{{ socials_.description.terminal.about.description | markdownify }}
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div id="terminal-screen--socials" style="display:none">
|
|
24
|
+
{%- assign menu_separator = default_.separator -%}
|
|
25
|
+
{% assign links = socials_.links %}
|
|
26
|
+
{% for item in links %}
|
|
27
|
+
<a class="socials-link" title="{{ item.title }}" href="{{ item.url }}" target="_blank">{{ item.title }}</a><strong class="separator">{{menu_separator}}</strong>
|
|
28
|
+
{% endfor %}
|
|
29
|
+
</div>
|
|
28
30
|
|
|
31
|
+
</div>
|
|
29
32
|
</div>
|
|
30
33
|
</div>
|
|
31
|
-
</div>
|
|
32
34
|
|
|
33
|
-
|
|
34
|
-
<div class="
|
|
35
|
-
<div class="
|
|
36
|
-
<div class="
|
|
37
|
-
{{
|
|
35
|
+
<!-- For responsive/mobile (disable terminal) --->
|
|
36
|
+
<div class="home-text">
|
|
37
|
+
<div class="container home">
|
|
38
|
+
<div class="row">
|
|
39
|
+
<div class="content" style="{%- if page.text_center -%} text-align: center; {%- endif -%}">
|
|
40
|
+
{{ content }}
|
|
41
|
+
{{ socials_.description.text | markdownify }}
|
|
42
|
+
</div>
|
|
38
43
|
</div>
|
|
39
44
|
</div>
|
|
45
|
+
{%- include socials pos="center" -%}
|
|
40
46
|
</div>
|
|
41
|
-
{%- include socials pos="center" -%}
|
|
42
|
-
</div>
|
|
43
47
|
|
|
44
48
|
{%- else -%}
|
|
45
|
-
<div class="
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
+
<div class="home">
|
|
50
|
+
<div class="row">
|
|
51
|
+
<div class="content" style="{%- if page.text_center -%} text-align: center; {%- endif -%}">
|
|
52
|
+
{{ content }}
|
|
53
|
+
{{ socials_.description.text | markdownify }}
|
|
54
|
+
</div>
|
|
49
55
|
</div>
|
|
50
56
|
</div>
|
|
51
|
-
</div>
|
|
52
57
|
{%- endif -%}
|
|
53
58
|
|
|
54
|
-
{%- if
|
|
55
|
-
{%- if page.url == "/" and
|
|
56
|
-
{%-
|
|
59
|
+
{%- if home_.terminal.enable == false -%}
|
|
60
|
+
{%- if page.url == "/" and socials_.enable -%}
|
|
61
|
+
{%- if page.text_center -%}
|
|
62
|
+
{%- include socials pos="center" -%}
|
|
63
|
+
{%- else -%}
|
|
64
|
+
{%- include socials pos="left" -%}
|
|
65
|
+
{%- endif -%}
|
|
57
66
|
{%- endif -%}
|
|
58
67
|
{%- endif -%}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
{%- include layout/data.liquid -%}
|
|
6
|
+
|
|
7
|
+
<div class="licenses{% if default_.background_focus %} background_focus{% endif %} {% if default_.rounding %} rounding{% endif %}">
|
|
8
|
+
<h1 class="licenses-title">{{ page.title | capitalize }}</h1>
|
|
9
|
+
<div class="licenses-content">{{ content }}</div>
|
|
10
|
+
</div>
|
data/_layouts/page.html
CHANGED
|
@@ -4,13 +4,13 @@ layout: default
|
|
|
4
4
|
|
|
5
5
|
{%- include layout/data.liquid -%}
|
|
6
6
|
|
|
7
|
-
<div class="
|
|
7
|
+
<div id="page" class="page{% if default_.background_focus %} background_focus{% endif %} {% if default_.rounding %} rounding{% endif %}">
|
|
8
8
|
{%- if page.date or page.reading_time -%}
|
|
9
9
|
<div class="row">
|
|
10
10
|
{%- if page.date -%}
|
|
11
11
|
<time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
|
|
12
|
-
{%- if
|
|
13
|
-
{% datelang page.date format:
|
|
12
|
+
{%- if datelang_ -%}
|
|
13
|
+
{% datelang page.date format:datelang_.format %}
|
|
14
14
|
{%- else -%}
|
|
15
15
|
{{ page.date | date: "%b %-d, %Y" }}
|
|
16
16
|
{%- endif -%}
|
|
@@ -31,10 +31,8 @@ layout: default
|
|
|
31
31
|
{%- if page.update_date -%}
|
|
32
32
|
<div class="row page-modified">
|
|
33
33
|
<time class="dt-modified" datetime="{{ page.date | date_to_xmlschema }}" itemprop="dateModified">
|
|
34
|
-
<strong>{{
|
|
34
|
+
<strong>{{ page_.updated_on | default: "Page updated on" }}:</strong> {% datelang page.update_date format:datelang_.format %}
|
|
35
35
|
</time>
|
|
36
36
|
</div>
|
|
37
37
|
{%- endif -%}
|
|
38
38
|
</div>
|
|
39
|
-
|
|
40
|
-
<script src="{{ '/assets/js/toc.js' | relative_url }}"></script>
|
data/_layouts/pixel.html
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
{%- include layout/data.liquid -%}
|
|
6
|
+
|
|
7
|
+
{%- assign menu_separator = default_.separator -%}
|
|
8
|
+
|
|
9
|
+
<article class="pixel{% if default_.background_focus %} background_focus{% endif %} {% if default_.rounding %} rounding{% endif %}" itemscope itemtype="http://schema.org/BlogPosting">
|
|
10
|
+
<div class="row">
|
|
11
|
+
|
|
12
|
+
<header class="pixel-header">
|
|
13
|
+
<h1 class="pixel-title p-name" itemprop="name headline">» {{ page.title | escape }}</h1>
|
|
14
|
+
|
|
15
|
+
<div class="row pixel-meta">
|
|
16
|
+
<div class="col-sm d-flex justify-content-start">
|
|
17
|
+
<time class="dt-published" datetime="{{ page.date | date_to_xmlschema }}" itemprop="datePublished">
|
|
18
|
+
{%- if datelang_ -%}
|
|
19
|
+
{% datelang page.date format:datelang_.format %}
|
|
20
|
+
{%- else -%}
|
|
21
|
+
{{ page.date | date: "%b %-d, %Y" }}
|
|
22
|
+
{%- endif -%}
|
|
23
|
+
</time>
|
|
24
|
+
</div>
|
|
25
|
+
</div>
|
|
26
|
+
|
|
27
|
+
{%- if page.image.path -%}
|
|
28
|
+
<div class="pixel-image">
|
|
29
|
+
{%- if page.image.width -%}
|
|
30
|
+
<figure style="width: {{ page.image.width }} !important;">
|
|
31
|
+
{%- else -%}
|
|
32
|
+
<figure>
|
|
33
|
+
{%- endif -%}
|
|
34
|
+
<img src="{{ page.image.path | relative_url }}" alt="{{ page.title }}">
|
|
35
|
+
{%- if page.image.caption -%}
|
|
36
|
+
<figcaption>{{ page.image.caption }}</figcaption>
|
|
37
|
+
{%- endif -%}
|
|
38
|
+
</figure>
|
|
39
|
+
</div>
|
|
40
|
+
{%- endif -%}
|
|
41
|
+
|
|
42
|
+
</header>
|
|
43
|
+
|
|
44
|
+
<div class="e-content pixel-content" itemprop="articleBody">
|
|
45
|
+
{{ content }}
|
|
46
|
+
</div>
|
|
47
|
+
</div>
|
|
48
|
+
</article>
|