rawfeed 0.1.4 → 0.2.1

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