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.
Files changed (103) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +20 -21
  3. data/README.md +13 -112
  4. data/_data/options.yml +270 -0
  5. data/_data/resume.yml +8 -9
  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 +7 -5
  11. data/_includes/layout/data.liquid +21 -3
  12. data/_includes/layout/disqus.html +12 -26
  13. data/_includes/layout/footer.html +34 -16
  14. data/_includes/layout/giscus.html +27 -19
  15. data/_includes/layout/head.html +58 -19
  16. data/_includes/layout/header.html +127 -101
  17. data/_includes/layout/maintenance.html +8 -12
  18. data/_includes/layout/paginator.html +6 -4
  19. data/_includes/socials +7 -5
  20. data/_includes/tabs +1 -94
  21. data/_includes/toc +12 -152
  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 -339
  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 -6
  30. data/_layouts/pixel.html +48 -0
  31. data/_layouts/pixels.html +71 -0
  32. data/_layouts/post.html +28 -31
  33. data/_layouts/resume.html +43 -36
  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 +20 -17
  39. data/_sass/includes/_footer.scss +18 -8
  40. data/_sass/includes/_header.scss +24 -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 +17 -7
  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 +15 -5
  58. data/_sass/theme/_light.scss +9 -2
  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/assets/js/fallback/theme_load.js +4 -0
  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 +19 -0
  89. data/lib/rawfeed/draft.rb +1 -1
  90. data/lib/rawfeed/layout.rb +7 -0
  91. data/lib/rawfeed/page.rb +4 -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 -0
  100. metadata +46 -12
  101. data/assets/js/avatar.js +0 -50
  102. data/assets/js/terminal.js +0 -18
  103. data/assets/js/toc.js +0 -22
@@ -1,351 +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-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
- /* open results and close posts in search (toggle)
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>&nbsp;»&nbsp; <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
- function writeLineHTML(content, mode = 'html') {
306
- const wrapper = document.createElement('div');
307
- 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 -%}
308
16
 
309
- if (mode === 'html') {
310
- wrapper.innerHTML = content;
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
- function commandsPrint(text, mode = 'html') {
319
- // creates the wrapper to group all the lined
320
- const wrapper = document.createElement('div');
321
- wrapper.className = 'line-wrapper';
20
+ <!-- head -->
21
+ {%- include layout/head.html -%}
22
+ <!-- head -->
322
23
 
323
- text.split('\n').forEach((t) => {
324
- const line = document.createElement('div');
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
- screen.appendChild(wrapper);
335
- screen.scrollTop = screen.scrollHeight;
336
- }
27
+ <!-- container -->
28
+ <div class="container-fluid">
29
+ {%- include layout/header.html -%}
337
30
 
338
- // start terminal
339
- createInputLine();
31
+ <div class="default{{default_term}}" style="{{default_style}}">
32
+ <main class="content">{{ content }}</main>
33
+ </div>
340
34
 
341
- // when clicking on the terminal, it always focuses on the last existing input
342
- terminal.addEventListener("click", (e) => {
343
- // avoids focusing when clicking a header button, etc.
344
- const lastInput = screen.querySelector('.input:last-of-type');
345
- if (lastInput) lastInput.focus();
346
- });
347
- });
348
- </script>
349
- {%- 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 -->
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 site.text.error.image -%}
9
- <img class="error-image" src="{{ site.text.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.text.error.title | escape }}</h1>
12
- <h2 class="error-description">{{ site.text.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.text.home.terminal.user }}@{{ site.text.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,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>{{ site.text.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 -%}
38
38
  </div>
39
-
40
- <script src="{{ '/assets/js/toc.js' | relative_url }}"></script>
@@ -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>