lbenicio-minimal-v1 1.0.3 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +471 -0
  3. data/_includes/analytics.html +10 -0
  4. data/_includes/anchor_headings.html +172 -0
  5. data/_includes/blog-navigation.html +18 -0
  6. data/_includes/conclusion.html +4 -0
  7. data/_includes/footer.html +13 -0
  8. data/_includes/fork.html +6 -0
  9. data/_includes/head.html +45 -0
  10. data/_includes/navigation.html +42 -0
  11. data/_includes/pagination.html +23 -0
  12. data/_includes/postList.html +20 -0
  13. data/_layouts/autopage_category.html +9 -0
  14. data/_layouts/autopage_collection.html +7 -0
  15. data/_layouts/autopage_tags.html +9 -0
  16. data/_layouts/default.html +28 -0
  17. data/_layouts/home.html +19 -0
  18. data/_layouts/posts.html +7 -0
  19. data/assets/favicon.ico +0 -0
  20. data/assets/monokai.scss +354 -0
  21. data/assets/postStyle.scss +26 -0
  22. data/assets/profile.jpg +0 -0
  23. data/assets/style.scss +143 -0
  24. data/assets/vendor/all.min.css +5 -0
  25. data/assets/webfonts/fa-brands-400.eot +0 -0
  26. data/assets/webfonts/fa-brands-400.svg +3717 -0
  27. data/assets/webfonts/fa-brands-400.ttf +0 -0
  28. data/assets/webfonts/fa-brands-400.woff +0 -0
  29. data/assets/webfonts/fa-brands-400.woff2 +0 -0
  30. data/assets/webfonts/fa-regular-400.eot +0 -0
  31. data/assets/webfonts/fa-regular-400.svg +801 -0
  32. data/assets/webfonts/fa-regular-400.ttf +0 -0
  33. data/assets/webfonts/fa-regular-400.woff +0 -0
  34. data/assets/webfonts/fa-regular-400.woff2 +0 -0
  35. data/assets/webfonts/fa-solid-900.eot +0 -0
  36. data/assets/webfonts/fa-solid-900.svg +5034 -0
  37. data/assets/webfonts/fa-solid-900.ttf +0 -0
  38. data/assets/webfonts/fa-solid-900.woff +0 -0
  39. data/assets/webfonts/fa-solid-900.woff2 +0 -0
  40. data/benchmark/capture-assign.rb +23 -0
  41. data/benchmark/conditional_liquid.rb +102 -0
  42. data/benchmark/end-with-vs-regexp +18 -0
  43. data/benchmark/file-dir-ensure-trailing-slash +56 -0
  44. data/benchmark/find-filter-vs-where-first-filters.rb +49 -0
  45. data/benchmark/flat-map +19 -0
  46. data/benchmark/hash-fetch +12 -0
  47. data/benchmark/jekyll-sanitize-path +47 -0
  48. data/benchmark/local-require +29 -0
  49. data/benchmark/native-vs-pathutil-relative +33 -0
  50. data/benchmark/parse-date +26 -0
  51. data/benchmark/parse-include-tag-params.rb +85 -0
  52. data/benchmark/path-manager.rb +65 -0
  53. data/benchmark/proc-call-vs-yield +17 -0
  54. data/benchmark/regexp-vs-include.rb +53 -0
  55. data/benchmark/sanitize-url.rb +27 -0
  56. data/benchmark/schwartzian_transform.rb +110 -0
  57. data/benchmark/sequential-assignment +15 -0
  58. data/benchmark/static-drop-vs-forwarded.rb +83 -0
  59. data/benchmark/string-concat +11 -0
  60. data/benchmark/string-replacement +16 -0
  61. data/benchmark/symbol-to-proc +9 -0
  62. data/rubocop/jekyll/assert_equal_literal_actual.rb +149 -0
  63. data/rubocop/jekyll/no_p_allowed.rb +23 -0
  64. data/rubocop/jekyll/no_puts_allowed.rb +23 -0
  65. data/rubocop/jekyll.rb +5 -0
  66. metadata +71 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 329f710c7d887fe970bf1cc931febede11eb5cb7065cd1f9dd0f44a858e36643
4
- data.tar.gz: 87dbb85b348cfe97b5694fd67f3da4e310686ddbc06487817a426f722448d7c0
3
+ metadata.gz: '07108a7bb9378bc1e91c5e2509d5c7100b956e290759504d459fb78a035f41dd'
4
+ data.tar.gz: a7e6631674b21031b29b6a3f783ac944baf27bff8ffd75d4124cbad7a0fe3b66
5
5
  SHA512:
6
- metadata.gz: a4151e1f9ad1cb6e490069e63056049b4b7f60008763ab3253f6e76ebfc8f1332ac184e9547c214228331b45c5f3d1a7d6c4e4c35f49da16bd2c3471798f5f56
7
- data.tar.gz: 52e182a31d91ab07c4054253dd73fa6c9f8296ca60432392a58a0c983904a3744cfecc5a0af25f7ad8251cf7d7789387d956e43b2b62eecf94ba693d7455e94a
6
+ metadata.gz: 05bd1b6f6344b5223652a2453b0e357f70149b81c618c836515c29c6be134bc4dcf7fc5f15091a9dc6a234a4fc4dd8f2eb1a3950ac4b93e8e04a3f212bfeaaeb
7
+ data.tar.gz: 16b40ca6ef914ef032cdc23f59d6ea2e951404c3a371d006d1a5eac332536e9b468d8a5fe4a61ab0256c4b9d72f65b1f42bc6c2db19391f88b9b46a98c6428e4
data/.rubocop.yml ADDED
@@ -0,0 +1,471 @@
1
+ require:
2
+ - rubocop-minitest
3
+ - rubocop-performance
4
+ - rubocop-rake
5
+ - rubocop-rspec
6
+ - ./rubocop/jekyll
7
+
8
+ Jekyll/NoPutsAllowed:
9
+ Exclude:
10
+ - rake/*.rake
11
+
12
+ AllCops:
13
+ TargetRubyVersion: 2.7
14
+ Include:
15
+ - lib/**/*.rb
16
+ - test/**/*.rb
17
+ Exclude:
18
+ - bin/**/*
19
+ - exe/**/*
20
+ - benchmark/**/*
21
+ - script/**/*
22
+ - vendor/**/*
23
+ - tmp/**/*
24
+
25
+ Gemspec/DeprecatedAttributeAssignment:
26
+ Enabled: true
27
+ Gemspec/RequireMFA:
28
+ Enabled: false
29
+
30
+ Layout/BeginEndAlignment:
31
+ Enabled: true
32
+ Layout/EmptyComment:
33
+ Enabled: false
34
+ Layout/EmptyLinesAroundAttributeAccessor:
35
+ Enabled: true
36
+ Layout/EndAlignment:
37
+ Severity: error
38
+ Layout/FirstArrayElementIndentation:
39
+ EnforcedStyle: consistent
40
+ Layout/FirstHashElementIndentation:
41
+ EnforcedStyle: consistent
42
+ Layout/HashAlignment:
43
+ EnforcedHashRocketStyle: table
44
+ Layout/IndentationWidth:
45
+ Severity: error
46
+ Layout/LineContinuationLeadingSpace:
47
+ Enabled: true
48
+ Layout/LineContinuationSpacing:
49
+ Enabled: true
50
+ Layout/LineEndStringConcatenationIndentation:
51
+ Enabled: true
52
+ Layout/LineLength:
53
+ Exclude:
54
+ - !ruby/regexp /features\/.*.rb/
55
+ - Rakefile
56
+ - rake/*.rake
57
+ - Gemfile
58
+ Max: 100
59
+ Severity: warning
60
+ Layout/MultilineMethodCallIndentation:
61
+ EnforcedStyle: indented
62
+ Layout/MultilineOperationIndentation:
63
+ EnforcedStyle: indented
64
+ Layout/SpaceAroundMethodCallOperator:
65
+ Enabled: true
66
+ Layout/SpaceBeforeBrackets:
67
+ Enabled: true
68
+ Layout/SpaceInsideHashLiteralBraces:
69
+ Enabled: true
70
+ Exclude:
71
+ - test/**/*.rb
72
+
73
+ Lint/AmbiguousAssignment:
74
+ Enabled: true
75
+ Lint/AmbiguousOperatorPrecedence:
76
+ Enabled: true
77
+ Lint/AmbiguousRange:
78
+ Enabled: true
79
+ Lint/BinaryOperatorWithIdenticalOperands:
80
+ Enabled: true
81
+ Lint/ConstantDefinitionInBlock:
82
+ Enabled: true
83
+ Exclude:
84
+ - test/**/*.rb
85
+ Lint/ConstantOverwrittenInRescue:
86
+ Enabled: true
87
+ Lint/DeprecatedConstants:
88
+ Enabled: true
89
+ Lint/DeprecatedOpenSSLConstant:
90
+ Enabled: true
91
+ Lint/DuplicateBranch:
92
+ Enabled: true
93
+ Lint/DuplicateElsifCondition:
94
+ Enabled: true
95
+ Lint/DuplicateRegexpCharacterClassElement:
96
+ Enabled: true
97
+ Lint/DuplicateRequire:
98
+ Enabled: true
99
+ Lint/DuplicateRescueException:
100
+ Enabled: true
101
+ Lint/EmptyBlock:
102
+ Enabled: true
103
+ Lint/EmptyClass:
104
+ Enabled: true
105
+ Lint/EmptyConditionalBody:
106
+ Enabled: true
107
+ Lint/EmptyFile:
108
+ Enabled: true
109
+ Lint/FloatComparison:
110
+ Enabled: true
111
+ Lint/HashCompareByIdentity:
112
+ Enabled: true
113
+ Lint/IdentityComparison:
114
+ Enabled: true
115
+ Lint/LambdaWithoutLiteralBlock:
116
+ Enabled: true
117
+ Lint/MissingSuper:
118
+ Enabled: false
119
+ Lint/MixedRegexpCaptureTypes:
120
+ Enabled: false
121
+ Lint/NestedPercentLiteral:
122
+ Exclude:
123
+ - test/test_site.rb
124
+ Lint/NoReturnInBeginEndBlocks:
125
+ Enabled: true
126
+ Lint/NumberedParameterAssignment:
127
+ Enabled: true
128
+ Lint/OrAssignmentToConstant:
129
+ Enabled: true
130
+ Lint/OutOfRangeRegexpRef:
131
+ Enabled: true
132
+ Lint/RaiseException:
133
+ Enabled: true
134
+ Lint/RedundantDirGlobSort:
135
+ Enabled: true
136
+ Lint/RedundantSafeNavigation:
137
+ Enabled: true
138
+ Lint/RequireRangeParentheses:
139
+ Enabled: true
140
+ Lint/RequireRelativeSelfPath:
141
+ Enabled: true
142
+ Lint/SelfAssignment:
143
+ Enabled: true
144
+ Lint/StructNewOverride:
145
+ Enabled: true
146
+ Lint/SymbolConversion:
147
+ Enabled: true
148
+ Lint/ToEnumArguments:
149
+ Enabled: false
150
+ Lint/TopLevelReturnWithArgument:
151
+ Enabled: true
152
+ Lint/TrailingCommaInAttributeDeclaration:
153
+ Enabled: true
154
+ Lint/TripleQuotes:
155
+ Enabled: true
156
+ Lint/UnexpectedBlockArity:
157
+ Enabled: true
158
+ Lint/UnmodifiedReduceAccumulator:
159
+ Enabled: true
160
+ Lint/UnreachableCode:
161
+ Severity: error
162
+ Lint/UnreachableLoop:
163
+ Enabled: true
164
+ Lint/UselessMethodDefinition:
165
+ Enabled: true
166
+ Lint/UselessTimes:
167
+ Enabled: true
168
+ Lint/Void:
169
+ Exclude:
170
+ - lib/jekyll/site.rb
171
+
172
+ Metrics/AbcSize:
173
+ Max: 23
174
+ Metrics/BlockLength:
175
+ Exclude:
176
+ - test/**/*.rb
177
+ - lib/jekyll/configuration.rb
178
+ - rake/*.rake
179
+ Metrics/ClassLength:
180
+ Exclude:
181
+ - !ruby/regexp /features\/.*.rb$/
182
+ - !ruby/regexp /test\/.*.rb$/
183
+ - lib/jekyll/document.rb
184
+ - lib/jekyll/site.rb
185
+ - lib/jekyll/commands/serve.rb
186
+ - lib/jekyll/configuration.rb
187
+ Max: 240
188
+ Metrics/CyclomaticComplexity:
189
+ Exclude:
190
+ - lib/jekyll/utils.rb
191
+ - lib/jekyll/commands/serve.rb
192
+ Max: 11
193
+ Metrics/MethodLength:
194
+ CountComments: false
195
+ Max: 20
196
+ Severity: error
197
+ Metrics/ModuleLength:
198
+ Exclude:
199
+ - lib/jekyll/filters.rb
200
+ Max: 240
201
+ Metrics/ParameterLists:
202
+ Max: 4
203
+ Metrics/PerceivedComplexity:
204
+ Max: 13
205
+
206
+ Minitest/AssertEmptyLiteral:
207
+ Enabled: false
208
+ Minitest/AssertInDelta:
209
+ Enabled: true
210
+ Minitest/AssertionInLifecycleHook:
211
+ Enabled: true
212
+ Minitest/AssertKindOf:
213
+ Enabled: true
214
+ Minitest/AssertOutput:
215
+ Enabled: true
216
+ Minitest/AssertPathExists:
217
+ Enabled: true
218
+ Minitest/AssertSilent:
219
+ Enabled: true
220
+ Minitest/AssertWithExpectedArgument:
221
+ Enabled: true
222
+ Minitest/LiteralAsActualArgument:
223
+ Enabled: true
224
+ Minitest/TestMethodName:
225
+ Enabled: false
226
+ Minitest/MultipleAssertions:
227
+ Enabled: true
228
+ Minitest/RefuteInDelta:
229
+ Enabled: true
230
+ Minitest/RefuteKindOf:
231
+ Enabled: true
232
+ Minitest/RefutePathExists:
233
+ Enabled: true
234
+ Minitest/UnreachableAssertion:
235
+ Enabled: true
236
+ Minitest/UnspecifiedException:
237
+ Enabled: true
238
+
239
+ Naming/FileName:
240
+ Enabled: false
241
+ Naming/HeredocDelimiterNaming:
242
+ Exclude:
243
+ - test/**/*.rb
244
+ Naming/MemoizedInstanceVariableName:
245
+ Exclude:
246
+ - lib/jekyll/convertible.rb
247
+ - lib/jekyll/drops/site_drop.rb
248
+ - lib/jekyll/drops/unified_payload_drop.rb
249
+ - lib/jekyll/page_without_a_file.rb
250
+
251
+ Performance/AncestorsInclude:
252
+ Enabled: false
253
+ Performance/ArraySemiInfiniteRangeSlice:
254
+ Enabled: true
255
+ Performance/BigDecimalWithNumericArgument:
256
+ Enabled: true
257
+ Performance/BlockGivenWithExplicitBlock:
258
+ Enabled: true
259
+ Performance/ChainArrayAllocation:
260
+ Enabled: true
261
+ Performance/CollectionLiteralInLoop:
262
+ Enabled: true
263
+ Performance/ConstantRegexp:
264
+ Enabled: true
265
+ Performance/MapCompact:
266
+ Enabled: true
267
+ Performance/MethodObjectAsBlock:
268
+ Enabled: true
269
+ Performance/RedundantEqualityComparisonBlock:
270
+ Enabled: false
271
+ Performance/RedundantSortBlock:
272
+ Enabled: true
273
+ Performance/RedundantSplitRegexpArgument:
274
+ Enabled: true
275
+ Performance/RedundantStringChars:
276
+ Enabled: true
277
+ Performance/ReverseFirst:
278
+ Enabled: true
279
+ Performance/SortReverse:
280
+ Enabled: false
281
+ Performance/Squeeze:
282
+ Enabled: true
283
+ Performance/StringIdentifierArgument:
284
+ Enabled: true
285
+ Performance/StringInclude:
286
+ Enabled: true
287
+ Exclude:
288
+ - lib/jekyll/utils/platforms.rb
289
+ Performance/Sum:
290
+ Enabled: true
291
+
292
+ Security/CompoundHash:
293
+ Enabled: true
294
+ Security/IoMethods:
295
+ Enabled: true
296
+ Security/MarshalLoad:
297
+ Exclude:
298
+ - !ruby/regexp /test\/.*.rb$/
299
+ - lib/jekyll/regenerator.rb
300
+ Security/YAMLLoad:
301
+ Exclude:
302
+ - !ruby/regexp /features\/.*.rb/
303
+ - !ruby/regexp /test\/.*.rb$/
304
+
305
+ Style/AccessModifierDeclarations:
306
+ Enabled: false
307
+ Style/AccessorGrouping:
308
+ Enabled: true
309
+ Style/Alias:
310
+ EnforcedStyle: prefer_alias_method
311
+ Style/AndOr:
312
+ Severity: error
313
+ Style/ArgumentsForwarding:
314
+ Enabled: false
315
+ Style/ArrayCoercion:
316
+ Enabled: true
317
+ Style/BisectedAttrAccessor:
318
+ Enabled: true
319
+ Style/CaseLikeIf:
320
+ Enabled: true
321
+ Style/StringChars:
322
+ Enabled: true
323
+ Style/ClassAndModuleChildren:
324
+ Exclude:
325
+ - test/**/*.rb
326
+ Style/ClassEqualityComparison:
327
+ Enabled: true
328
+ Style/CollectionCompact:
329
+ Enabled: true
330
+ Style/CombinableLoops:
331
+ Enabled: true
332
+ Style/DocumentDynamicEvalDefinition:
333
+ Enabled: true
334
+ Style/Documentation:
335
+ Enabled: false
336
+ Style/DoubleNegation:
337
+ Enabled: false
338
+ Style/EmptyHeredoc:
339
+ Enabled: true
340
+ Style/EndlessMethod:
341
+ Enabled: true
342
+ Style/ExplicitBlockArgument:
343
+ Enabled: false
344
+ Style/ExponentialNotation:
345
+ Enabled: true
346
+ Style/EnvHome:
347
+ Enabled: true
348
+ Style/FetchEnvVar:
349
+ Enabled: false
350
+ Style/FileRead:
351
+ Enabled: false
352
+ Style/FormatStringToken:
353
+ Exclude:
354
+ - lib/jekyll/utils/ansi.rb
355
+ - lib/jekyll/liquid_renderer/table.rb
356
+ - lib/jekyll/profiler.rb
357
+ Style/FrozenStringLiteralComment:
358
+ EnforcedStyle: always
359
+ Style/FileWrite:
360
+ Enabled: true
361
+ Style/GlobalStdStream:
362
+ Enabled: true
363
+ Style/GuardClause:
364
+ Enabled: false
365
+ Style/HashAsLastArrayItem:
366
+ Enabled: true
367
+ Style/HashConversion:
368
+ Enabled: true
369
+ Style/HashEachMethods:
370
+ Enabled: true
371
+ Style/HashExcept:
372
+ Enabled: true
373
+ Style/HashLikeCase:
374
+ Enabled: true
375
+ Style/HashSyntax:
376
+ EnforcedStyle: hash_rockets
377
+ Severity: error
378
+ Style/HashTransformKeys:
379
+ Enabled: false
380
+ Style/HashTransformValues:
381
+ Enabled: true
382
+ Style/IfWithBooleanLiteralBranches:
383
+ Enabled: true
384
+ Style/KeywordParametersOrder:
385
+ Enabled: true
386
+ Style/MagicCommentFormat:
387
+ Enabled: true
388
+ Style/MapCompactWithConditionalBlock:
389
+ Enabled: true
390
+ Style/MapToHash:
391
+ Enabled: true
392
+ Style/MixinUsage:
393
+ Exclude:
394
+ - test/helper.rb
395
+ Style/ModuleFunction:
396
+ Enabled: false
397
+ Style/MultilineTernaryOperator:
398
+ Severity: error
399
+ Style/NegatedIfElseCondition:
400
+ Enabled: true
401
+ Style/NestedFileDirname:
402
+ Enabled: true
403
+ Style/NilLambda:
404
+ Enabled: true
405
+ Style/OptionalBooleanParameter:
406
+ Enabled: true
407
+ Exclude:
408
+ - lib/jekyll/log_adapter.rb
409
+ Style/PercentLiteralDelimiters:
410
+ PreferredDelimiters:
411
+ "%Q": "{}"
412
+ "%W": ()
413
+ "%q": "{}"
414
+ "%r": "!!"
415
+ "%s": ()
416
+ "%w": ()
417
+ "%x": ()
418
+ Style/QuotedSymbols:
419
+ Enabled: true
420
+ Style/RedundantArgument:
421
+ Enabled: true
422
+ Style/RedundantAssignment:
423
+ Enabled: true
424
+ Style/RedundantFetchBlock:
425
+ Enabled: false
426
+ Style/RedundantFileExtensionInRequire:
427
+ Enabled: true
428
+ Style/RedundantInitialize:
429
+ Enabled: true
430
+ Exclude:
431
+ - lib/jekyll/plugin.rb
432
+ Style/RedundantRegexpCharacterClass:
433
+ Enabled: true
434
+ Style/RedundantRegexpEscape:
435
+ Enabled: true
436
+ Style/RedundantSelfAssignment:
437
+ Enabled: true
438
+ Style/RedundantSelfAssignmentBranch:
439
+ Enabled: true
440
+ Style/RegexpLiteral:
441
+ EnforcedStyle: percent_r
442
+ Style/RescueModifier:
443
+ Enabled: false
444
+ Style/SafeNavigation:
445
+ Exclude:
446
+ - lib/jekyll/document.rb
447
+ Style/SignalException:
448
+ EnforcedStyle: only_raise
449
+ Style/SingleArgumentDig:
450
+ Enabled: true
451
+ Style/SlicingWithRange:
452
+ Enabled: false
453
+ Style/SoleNestedConditional:
454
+ Enabled: true
455
+ Style/StringConcatenation:
456
+ Enabled: true
457
+ Exclude:
458
+ - lib/jekyll/commands/*.rb
459
+ - test/**/*.rb
460
+ Style/StringLiterals:
461
+ EnforcedStyle: double_quotes
462
+ Style/StringLiteralsInInterpolation:
463
+ EnforcedStyle: double_quotes
464
+ Style/SwapValues:
465
+ Enabled: true
466
+ Style/SymbolArray:
467
+ EnforcedStyle: brackets
468
+ Style/TrailingCommaInArrayLiteral:
469
+ EnforcedStyleForMultiline: consistent_comma
470
+ Style/TrailingCommaInHashLiteral:
471
+ EnforcedStyleForMultiline: consistent_comma
@@ -0,0 +1,10 @@
1
+ {% if site.analytics.google != null %}
2
+ <script async src="https://www.googletagmanager.com/gtag/js?id={{ site.analytics.google }}"></script>
3
+ <script>
4
+ window.dataLayer = window.dataLayer || [];
5
+ function gtag(){dataLayer.push(arguments);}
6
+ gtag('js', new Date());
7
+
8
+ gtag('config', '{{ site.analytics.google }}');
9
+ </script>
10
+ {% endif %}
@@ -0,0 +1,172 @@
1
+ {% capture headingsWorkspace %}
2
+ {% comment %}
3
+ Copyright (c) 2018 Vladimir "allejo" Jimenez
4
+
5
+ Permission is hereby granted, free of charge, to any person
6
+ obtaining a copy of this software and associated documentation
7
+ files (the "Software"), to deal in the Software without
8
+ restriction, including without limitation the rights to use,
9
+ copy, modify, merge, publish, distribute, sublicense, and/or sell
10
+ copies of the Software, and to permit persons to whom the
11
+ Software is furnished to do so, subject to the following
12
+ conditions:
13
+
14
+ The above copyright notice and this permission notice shall be
15
+ included in all copies or substantial portions of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
18
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
19
+ OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
20
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
21
+ HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
22
+ WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
23
+ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
24
+ OTHER DEALINGS IN THE SOFTWARE.
25
+ {% endcomment %}
26
+ {% comment %}
27
+ Version 1.0.11
28
+ https://github.com/allejo/jekyll-anchor-headings
29
+
30
+ "Be the pull request you wish to see in the world." ~Ben Balter
31
+
32
+ Usage:
33
+ {% include anchor_headings.html html=content anchorBody="#" %}
34
+
35
+ Parameters:
36
+ * html (string) - the HTML of compiled markdown generated by kramdown in Jekyll
37
+
38
+ Optional Parameters:
39
+ * beforeHeading (bool) : false - Set to true if the anchor should be placed _before_ the heading's content
40
+ * headerAttrs (string) : '' - Any custom HTML attributes that will be added to the heading tag; you may NOT use `id`;
41
+ the `%heading%` and `%html_id%` placeholders are available
42
+ * anchorAttrs (string) : '' - Any custom HTML attributes that will be added to the `<a>` tag; you may NOT use `href`, `class` or `title`;
43
+ the `%heading%` and `%html_id%` placeholders are available
44
+ * anchorBody (string) : '' - The content that will be placed inside the anchor; the `%heading%` placeholder is available
45
+ * anchorClass (string) : '' - The class(es) that will be used for each anchor. Separate multiple classes with a space
46
+ * anchorTitle (string) : '' - The `title` attribute that will be used for anchors
47
+ * h_min (int) : 1 - The minimum header level to build an anchor for; any header lower than this value will be ignored
48
+ * h_max (int) : 6 - The maximum header level to build an anchor for; any header greater than this value will be ignored
49
+ * bodyPrefix (string) : '' - Anything that should be inserted inside of the heading tag _before_ its anchor and content
50
+ * bodySuffix (string) : '' - Anything that should be inserted inside of the heading tag _after_ its anchor and content
51
+ * generateId (true) : false - Set to true if a header without id should generate an id to use.
52
+
53
+ Output:
54
+ The original HTML with the addition of anchors inside of all of the h1-h6 headings.
55
+ {% endcomment %}
56
+
57
+ {% assign minHeader = include.h_min | default: 1 %}
58
+ {% assign maxHeader = include.h_max | default: 6 %}
59
+ {% assign beforeHeading = include.beforeHeading %}
60
+ {% assign headerAttrs = include.headerAttrs %}
61
+ {% assign nodes = include.html | split: '<h' %}
62
+
63
+ {% capture edited_headings %}{% endcapture %}
64
+
65
+ {% for _node in nodes %}
66
+ {% capture node %}{{ _node | strip }}{% endcapture %}
67
+
68
+ {% if node == "" %}
69
+ {% continue %}
70
+ {% endif %}
71
+
72
+ {% assign nextChar = node | replace: '"', '' | strip | slice: 0, 1 %}
73
+ {% assign headerLevel = nextChar | times: 1 %}
74
+
75
+ <!-- If the level is cast to 0, it means it's not a h1-h6 tag, so let's see if we need to fix it -->
76
+ {% if headerLevel == 0 %}
77
+ <!-- Split up the node based on closing angle brackets and get the first one. -->
78
+ {% assign firstChunk = node | split: '>' | first %}
79
+
80
+ <!-- If the first chunk does NOT contain a '<', that means we've broken another HTML tag that starts with 'h' -->
81
+ {% unless firstChunk contains '<' %}
82
+ {% capture node %}<h{{ node }}{% endcapture %}
83
+ {% endunless %}
84
+
85
+ {% capture edited_headings %}{{ edited_headings }}{{ node }}{% endcapture %}
86
+ {% continue %}
87
+ {% endif %}
88
+
89
+ {% capture _closingTag %}</h{{ headerLevel }}>{% endcapture %}
90
+ {% assign _workspace = node | split: _closingTag %}
91
+ {% capture _hAttrToStrip %}{{ _workspace[0] | split: '>' | first }}>{% endcapture %}
92
+ {% assign header = _workspace[0] | replace: _hAttrToStrip, '' %}
93
+ {% assign escaped_header = header | strip_html | strip %}
94
+
95
+ {% assign _classWorkspace = _workspace[0] | split: 'class="' %}
96
+ {% assign _classWorkspace = _classWorkspace[1] | split: '"' %}
97
+ {% assign _html_class = _classWorkspace[0] %}
98
+
99
+ {% if _html_class contains "no_anchor" %}
100
+ {% assign skip_anchor = true %}
101
+ {% else %}
102
+ {% assign skip_anchor = false %}
103
+ {% endif %}
104
+
105
+ {% assign _idWorkspace = _workspace[0] | split: 'id="' %}
106
+ {% if _idWorkspace[1] %}
107
+ {% assign _idWorkspace = _idWorkspace[1] | split: '"' %}
108
+ {% assign html_id = _idWorkspace[0] %}
109
+ {% elsif include.generateId %}
110
+ <!-- If the header did not have an id we create one. -->
111
+ {% assign html_id = escaped_header | slugify %}
112
+ {% if html_id == "" %}
113
+ {% assign html_id = false %}
114
+ {% endif %}
115
+ {% capture headerAttrs %}{{ headerAttrs }} id="%html_id%"{% endcapture %}
116
+ {% endif %}
117
+
118
+ <!-- Build the anchor to inject for our heading -->
119
+ {% capture anchor %}{% endcapture %}
120
+
121
+ {% if skip_anchor == false and html_id and headerLevel >= minHeader and headerLevel <= maxHeader %}
122
+ {% if headerAttrs %}
123
+ {% capture _hAttrToStrip %}{{ _hAttrToStrip | split: '>' | first }} {{ headerAttrs | replace: '%heading%', escaped_header | replace: '%html_id%', html_id }}>{% endcapture %}
124
+ {% endif %}
125
+
126
+ {% capture anchor %}href="#{{ html_id }}"{% endcapture %}
127
+
128
+ {% if include.anchorClass %}
129
+ {% capture anchor %}{{ anchor }} class="{{ include.anchorClass }}"{% endcapture %}
130
+ {% endif %}
131
+
132
+ {% if include.anchorTitle %}
133
+ {% capture anchor %}{{ anchor }} title="{{ include.anchorTitle | replace: '%heading%', escaped_header }}"{% endcapture %}
134
+ {% endif %}
135
+
136
+ {% if include.anchorAttrs %}
137
+ {% capture anchor %}{{ anchor }} {{ include.anchorAttrs | replace: '%heading%', escaped_header | replace: '%html_id%', html_id }}{% endcapture %}
138
+ {% endif %}
139
+
140
+ {% capture anchor %}<a {{ anchor }}>{{ include.anchorBody | replace: '%heading%', escaped_header | default: '' }}</a>{% endcapture %}
141
+
142
+ <!-- In order to prevent adding extra space after a heading, we'll let the 'anchor' value contain it -->
143
+ {% if beforeHeading %}
144
+ {% capture anchor %}{{ anchor }} {% endcapture %}
145
+ {% else %}
146
+ {% capture anchor %} {{ anchor }}{% endcapture %}
147
+ {% endif %}
148
+ {% endif %}
149
+
150
+ {% capture new_heading %}
151
+ <h{{ _hAttrToStrip }}
152
+ {{ include.bodyPrefix }}
153
+ {% if beforeHeading %}
154
+ {{ anchor }}{{ header }}
155
+ {% else %}
156
+ {{ header }}{{ anchor }}
157
+ {% endif %}
158
+ {{ include.bodySuffix }}
159
+ </h{{ headerLevel }}>
160
+ {% endcapture %}
161
+
162
+ <!--
163
+ If we have content after the `</hX>` tag, then we'll want to append that here so we don't lost any content.
164
+ -->
165
+ {% assign chunkCount = _workspace | size %}
166
+ {% if chunkCount > 1 %}
167
+ {% capture new_heading %}{{ new_heading }}{{ _workspace | last }}{% endcapture %}
168
+ {% endif %}
169
+
170
+ {% capture edited_headings %}{{ edited_headings }}{{ new_heading }}{% endcapture %}
171
+ {% endfor %}
172
+ {% endcapture %}{% assign headingsWorkspace = '' %}{{ edited_headings | strip }}
@@ -0,0 +1,18 @@
1
+ <div class="mt-1 mb-5 border-bottom border-1 border-light">
2
+ <nav class="offset-3 col-6">
3
+ <ul class="list-group list-group-horizontal justify-content-center">
4
+ <li class="list-group-item border-0">
5
+ <a class="text-dark nav-blog-links" href="/">Articles</a>
6
+ </li>
7
+ <li class="list-group-item border-0">
8
+ <a class="text-dark nav-blog-links" href="/feed/posts">Feed</a>
9
+ </li>
10
+ <li class="list-group-item border-0">
11
+ <a class="text-dark nav-blog-links" href="/category">Categories</a>
12
+ </li>
13
+ <li class="list-group-item border-0">
14
+ <a class="text-dark nav-blog-links" href="/tag">Tags</a>
15
+ </li>
16
+ </ul>
17
+ </nav>
18
+ </div>
@@ -0,0 +1,4 @@
1
+ <h1 id="conclusion"> Conclusion <a href="#conclusion" class="link-anchor">#</a> </h1>
2
+ <p>That its folks! Thank you for following up until here, and if you have any question or just want to chat, send me a message on GitHub of this project or an email. Am I doing it right? Was it a good hello world post for the blogging community?</p>
3
+ <p><a href="https://github.com/lbenicio/lbenicio.blog">https://github.com/lbenicio/lbenicio.blog</a></p>
4
+ <p><a href="mailto:hello@lbenicio.dev">hello@lbenicio.dev</a></p>
@@ -0,0 +1,13 @@
1
+ <footer class="footer border-top border-1 border-light pt-3 mt-auto fs-6 text-center text-muted">
2
+ <div class="container">
3
+ <div class="row">
4
+ <div class="offset-md-4 col-md-4 col-10 offset-1">
5
+ <p>
6
+ The theme of this blog is open sourced <a href="https://github.com/{{ site.github_username }}/{{ site.github_username }}.github.io" target="_blank" id="repo">on GitHub</a> by <a href="https://twitter.com/{{ site.twitter_username }}" target="_blank" id="twitter">{{ site.twitter_username }}</a>.
7
+ </p>
8
+ </div>
9
+ </div>
10
+ </div>
11
+ </footer>
12
+ <!-- JS -->
13
+ <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-pprn3073KE6tl6bjs2QrFaJGz5/SUsLqktiwsUTF55Jfv3qYSDhgCecCxMW52nD2" crossorigin="anonymous"></script>