jekyll_pre 1.3.1 → 1.4.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/CHANGELOG.md +7 -0
- data/README.md +47 -3
- data/jekyll_pre.gemspec +2 -0
- data/lib/exec_tag.rb +19 -11
- data/lib/jekyll_pre/version.rb +1 -1
- data/lib/jekyll_pre.rb +8 -4
- data/lib/noselect_tag.rb +1 -1
- data/lib/pre_tag_block.rb +30 -12
- data/spec/exec_spec.rb +34 -0
- data/spec/pre_spec.rb +65 -1
- data/spec/spec_helper.rb +2 -0
- data/spec/status_persistence.txt +13 -5
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4cc10df37a945ecc8abddce501dd71a176084b9fafdde6e3aa6a48e18c7e4551
|
4
|
+
data.tar.gz: 73fe925e47914475d889e814cae15f8c8331ed7abf2498aaf0a207fd2e0bf7d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76a1487e85b498708d27a2258fce364703fe2613253eff69e80475b22303f81f519a8bcedb14671fd62179d53521c80ca9c47d859e838d2bb43060ef58adc236
|
7
|
+
data.tar.gz: 59edd4611b9d6553096d76ce57d518a4e6dd670d2e7f236cfa6ae000c34b269584ecf318705db9bd68d32d9da42590ff71628a7a122107dca8d8e2057e048900
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
## 1.4.0
|
2
|
+
* Added `dedent` option and config setting.
|
3
|
+
* No longer dies when exec is passed an empty string, or a string with just whitespace.
|
4
|
+
|
5
|
+
## 1.3.2
|
6
|
+
* No longer strips leading spaces from exec result lines.
|
7
|
+
|
1
8
|
## 1.3.1
|
2
9
|
* Generates outer `div` with `jekyll_pre` class, like this:
|
3
10
|
```html
|
data/README.md
CHANGED
@@ -15,6 +15,7 @@ This Jekyll plugin provides 3 new Liquid tags that work together:
|
|
15
15
|
- `clear` – Line break after floating HTML elements
|
16
16
|
- `copyButton` – Generate a copy button
|
17
17
|
- `dark` – Dark mode
|
18
|
+
- `dedent` – Remove leading spaces common to all lines, like Ruby's <<~ squiggly heredoc (default is false)
|
18
19
|
- `label='This is a label'` – Apply text above `pre` tag.
|
19
20
|
The `label` parameter value can also be specified in free text.
|
20
21
|
For example, the following produce the same results:
|
@@ -64,8 +65,38 @@ See [`demo/assets/css/style.css`](demo/assets/css/style.css) for the CSS declara
|
|
64
65
|
between `/* Start of pre tag css */` and `/* End of pre tag css */`.
|
65
66
|
|
66
67
|
|
68
|
+
## Configuration
|
69
|
+
Default options can be set for the `pre` tag by entries in `_config.yml`.
|
70
|
+
The following demonstrates setting a default value for every possible option:
|
71
|
+
|
72
|
+
```yml
|
73
|
+
pre:
|
74
|
+
class: bg_yellow
|
75
|
+
clear: true
|
76
|
+
dark: true
|
77
|
+
dedent: true
|
78
|
+
highlight: 'Error:.*'
|
79
|
+
label: Shell
|
80
|
+
copyButton: true
|
81
|
+
number: true
|
82
|
+
style: 'font-face: courier'
|
83
|
+
wrapper_class: rounded shadow
|
84
|
+
wrapper_style: 'padding: 2em; border: thin green dashed;'
|
85
|
+
```
|
86
|
+
|
87
|
+
The default values used on [`mslinn.com`](https://www.mslinn.com) are:
|
88
|
+
|
89
|
+
```yml
|
90
|
+
pre:
|
91
|
+
dedent: true
|
92
|
+
label: Shell
|
93
|
+
copyButton: true
|
94
|
+
```
|
95
|
+
|
96
|
+
|
67
97
|
## Additional Information
|
68
|
-
More information is available on
|
98
|
+
More information is available on
|
99
|
+
[Mike Slinn’s website](https://www.mslinn.com/jekyll_plugins/jekyll_pre.html).
|
69
100
|
|
70
101
|
|
71
102
|
## Installation
|
@@ -80,11 +111,24 @@ end
|
|
80
111
|
|
81
112
|
And then execute:
|
82
113
|
|
83
|
-
$ bundle
|
114
|
+
$ bundle
|
84
115
|
|
85
116
|
|
86
117
|
## Usage
|
87
|
-
The following examples are rendered on
|
118
|
+
The following examples are rendered on
|
119
|
+
[Mike Slinn’s website](https://www.mslinn.com/jekyll_plugins/jekyll_pre.html).
|
120
|
+
|
121
|
+
### Example 0
|
122
|
+
<pre data-lt-active="false" class="maxOneScreenHigh copyContainer" id="id110c50d624b4">{% pre dedent %}
|
123
|
+
This line was indented 4 spaces
|
124
|
+
This line was indented 6 spaces
|
125
|
+
This line was indented 4 spaces
|
126
|
+
{% endpre %}</pre>
|
127
|
+
Which renders as:
|
128
|
+
|
129
|
+
<pre data-lt-active="false" class="maxOneScreenHigh copyContainer" id="id377433c30186">This line was indented 4 spaces
|
130
|
+
This line was indented 6 spaces
|
131
|
+
This line was indented 4 spaces</pre>
|
88
132
|
|
89
133
|
### Example 1
|
90
134
|
This example does not generate a copy button and does not demonstrate `noselect`.
|
data/jekyll_pre.gemspec
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
require 'jekyll'
|
1
2
|
require_relative 'lib/jekyll_pre/version'
|
2
3
|
|
3
4
|
Gem::Specification.new do |spec|
|
@@ -33,4 +34,5 @@ Gem::Specification.new do |spec|
|
|
33
34
|
|
34
35
|
spec.add_dependency 'jekyll', '>= 3.5.0'
|
35
36
|
spec.add_dependency 'jekyll_plugin_support', '~> 0.6.0'
|
37
|
+
spec.add_dependency 'rack'
|
36
38
|
end
|
data/lib/exec_tag.rb
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
require 'jekyll_plugin_support'
|
2
|
+
require 'rack/utils'
|
2
3
|
require_relative 'jekyll_pre/version'
|
3
4
|
|
4
|
-
module
|
5
|
+
module JekyllPreModule
|
6
|
+
def self.compress(response, no_strip)
|
7
|
+
result = response.chomp
|
8
|
+
result = result.strip unless no_strip
|
9
|
+
result = result.gsub('\n\n', '<br>\n')
|
10
|
+
result = Rack::Utils.escape_html(result) unless @no_escape
|
11
|
+
result
|
12
|
+
end
|
13
|
+
|
5
14
|
class ExecTag < JekyllSupport::JekyllTag
|
6
15
|
include JekyllPreVersion
|
7
16
|
|
@@ -13,11 +22,18 @@ module ExecTag
|
|
13
22
|
parse_args
|
14
23
|
@original_command = @helper.remaining_markup_original
|
15
24
|
command = JekyllPluginHelper.expand_env @original_command
|
16
|
-
|
25
|
+
if command.strip.empty?
|
26
|
+
msg = "Command is empty on on line #{@line_number} (after front matter) of #{@page['path']}"
|
27
|
+
unless @die_if_error
|
28
|
+
@logger.warn { msg }
|
29
|
+
return ''
|
30
|
+
end
|
31
|
+
raise PreError, msg, []
|
32
|
+
end
|
17
33
|
|
18
34
|
response = run_command(command)
|
19
35
|
response = if @child_status.success?
|
20
|
-
compress(response)
|
36
|
+
ExecTagModule.compress(response, @no_strip)
|
21
37
|
else
|
22
38
|
handle_error(command)
|
23
39
|
end
|
@@ -36,14 +52,6 @@ module ExecTag
|
|
36
52
|
|
37
53
|
private
|
38
54
|
|
39
|
-
def compress(response)
|
40
|
-
result = response.chomp
|
41
|
-
result = result.strip unless @no_strip
|
42
|
-
result = result.gsub('\n\n', '<br>\n')
|
43
|
-
result = Rack::Utils.escape_html(result) unless @no_escape
|
44
|
-
result
|
45
|
-
end
|
46
|
-
|
47
55
|
def die(msg)
|
48
56
|
msg_no_html = self.class.remove_html_tags(msg)
|
49
57
|
@logger.error("#{@page['path']} - #{msg_no_html}")
|
data/lib/jekyll_pre/version.rb
CHANGED
data/lib/jekyll_pre.rb
CHANGED
@@ -8,10 +8,14 @@ require_relative './pre_tag_block'
|
|
8
8
|
|
9
9
|
PreError = Class.new(Liquid::Error)
|
10
10
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
11
|
+
class String
|
12
|
+
# Works like <<~ from Ruby 2.3.0
|
13
|
+
def dedent
|
14
|
+
# Find the margin whitespace on the first line
|
15
|
+
margin = self[/\A\s*/]
|
16
|
+
# Remove margin-sized whitespace from each line
|
17
|
+
gsub(/^\s{#{margin.size}}/, '')
|
18
|
+
end
|
15
19
|
end
|
16
20
|
|
17
21
|
PluginMetaLogger.instance.info { "Loaded #{JekyllPluginPreName::PLUGIN_NAME} v#{JekyllPreVersion::VERSION} plugin." }
|
data/lib/noselect_tag.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'jekyll_plugin_support'
|
2
2
|
require_relative 'jekyll_pre/version'
|
3
3
|
|
4
|
-
module
|
4
|
+
module JekyllPreModule
|
5
5
|
# """\\{% noselect %} or \\{% noselect this all gets copied.
|
6
6
|
# Also, space before the closing percent is signficant %}"""
|
7
7
|
class NoSelectTag < JekyllSupport::JekyllTagNoArgParsing
|
data/lib/pre_tag_block.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require 'jekyll_plugin_support'
|
2
2
|
require_relative 'jekyll_pre/version'
|
3
3
|
|
4
|
-
module
|
4
|
+
module JekyllPreModule
|
5
5
|
class PreTagBlock < JekyllSupport::JekyllBlock
|
6
6
|
include JekyllPreVersion
|
7
7
|
|
@@ -31,20 +31,36 @@ module PreTagBlock
|
|
31
31
|
result
|
32
32
|
end
|
33
33
|
|
34
|
+
# remove leading blank lines and trailing whitespace
|
35
|
+
def self.remove_surrounding(text)
|
36
|
+
text.gsub(/\A(\s?\n)*/, '').rstrip
|
37
|
+
end
|
38
|
+
|
39
|
+
def option(name)
|
40
|
+
value = @helper.parameter_specified? name
|
41
|
+
return value unless value.nil?
|
42
|
+
|
43
|
+
@pre_config[name] if @pre_config
|
44
|
+
end
|
45
|
+
|
34
46
|
def render_impl(text)
|
35
|
-
text.
|
47
|
+
text = PreTagBlock.remove_surrounding text
|
48
|
+
|
36
49
|
@helper.gem_file __FILE__ # Enables plugin attribution
|
37
50
|
|
38
|
-
@
|
39
|
-
|
40
|
-
@
|
41
|
-
@
|
42
|
-
@
|
43
|
-
@
|
44
|
-
@
|
45
|
-
@
|
46
|
-
@
|
47
|
-
@
|
51
|
+
@pre_config = @config['pre']
|
52
|
+
|
53
|
+
@class = option 'class'
|
54
|
+
@clear = option 'clear'
|
55
|
+
@dark = ' dark' if option 'dark'
|
56
|
+
@dedent = option 'dedent'
|
57
|
+
@highlight = option 'highlight'
|
58
|
+
@label = option 'label'
|
59
|
+
@make_copy_button = option 'copyButton'
|
60
|
+
@number_lines = option 'number'
|
61
|
+
@style = option 'style'
|
62
|
+
@wrapper_class = option 'wrapper_class'
|
63
|
+
@wrapper_style = option 'wrapper_style'
|
48
64
|
|
49
65
|
@class = @class ? " #{@class}" : ''
|
50
66
|
@style = @style ? " style='#{@style}'" : ''
|
@@ -55,6 +71,8 @@ module PreTagBlock
|
|
55
71
|
@label ||= @helper.argv.join(' ')
|
56
72
|
|
57
73
|
@logger.debug { "@make_copy_button = '#{@make_copy_button}'; @label = '#{@label}'" }
|
74
|
+
|
75
|
+
text = text.dedent if @dedent
|
58
76
|
make_pre(text)
|
59
77
|
end
|
60
78
|
|
data/spec/exec_spec.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
require_relative '../lib/jekyll_pre'
|
2
|
+
|
3
|
+
module ExecTagSpec
|
4
|
+
RSpec.describe(JekyllPreModule) do
|
5
|
+
it 'strips properly' do
|
6
|
+
content = <<~END_CONTENT
|
7
|
+
Line 1
|
8
|
+
Line 2
|
9
|
+
Line 3
|
10
|
+
Line 4
|
11
|
+
Line 5
|
12
|
+
Line 6
|
13
|
+
Line 7
|
14
|
+
Line 8
|
15
|
+
Line 9
|
16
|
+
Line 10
|
17
|
+
END_CONTENT
|
18
|
+
actual = described_class.compress content, false
|
19
|
+
expected = <<~END_CONTENT
|
20
|
+
Line 1
|
21
|
+
Line 2
|
22
|
+
Line 3
|
23
|
+
Line 4
|
24
|
+
Line 5
|
25
|
+
Line 6
|
26
|
+
Line 7
|
27
|
+
Line 8
|
28
|
+
Line 9
|
29
|
+
Line 10
|
30
|
+
END_CONTENT
|
31
|
+
expect(expected.strip).to eq(actual)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
data/spec/pre_spec.rb
CHANGED
@@ -4,7 +4,71 @@ require 'key_value_parser'
|
|
4
4
|
require 'shellwords'
|
5
5
|
require_relative '../lib/jekyll_pre'
|
6
6
|
|
7
|
-
RSpec.describe(PreTagBlock) do
|
7
|
+
RSpec.describe(JekyllPreModule::PreTagBlock) do
|
8
|
+
it 'dedents content lines' do
|
9
|
+
content = <<-END_CONTENT
|
10
|
+
Line 1
|
11
|
+
Line 2
|
12
|
+
Line 3
|
13
|
+
Line 4
|
14
|
+
Line 5
|
15
|
+
Line 6
|
16
|
+
Line 7
|
17
|
+
Line 8
|
18
|
+
Line 9
|
19
|
+
Line 10
|
20
|
+
END_CONTENT
|
21
|
+
expected = <<~END_CONTENT
|
22
|
+
Line 1
|
23
|
+
Line 2
|
24
|
+
Line 3
|
25
|
+
Line 4
|
26
|
+
Line 5
|
27
|
+
Line 6
|
28
|
+
Line 7
|
29
|
+
Line 8
|
30
|
+
Line 9
|
31
|
+
Line 10
|
32
|
+
END_CONTENT
|
33
|
+
actual = content.dedent
|
34
|
+
expect(actual).to eq(expected)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'removes surrounding whitespace' do
|
38
|
+
text = <<-END_CONTENT
|
39
|
+
|
40
|
+
|
41
|
+
Line 1
|
42
|
+
Line 2
|
43
|
+
Line 3
|
44
|
+
Line 4
|
45
|
+
Line 5
|
46
|
+
Line 6
|
47
|
+
Line 7
|
48
|
+
Line 8
|
49
|
+
Line 9
|
50
|
+
Line 10
|
51
|
+
|
52
|
+
|
53
|
+
END_CONTENT
|
54
|
+
actual = described_class.remove_surrounding(text)
|
55
|
+
|
56
|
+
expected = <<-END_CONTENT
|
57
|
+
Line 1
|
58
|
+
Line 2
|
59
|
+
Line 3
|
60
|
+
Line 4
|
61
|
+
Line 5
|
62
|
+
Line 6
|
63
|
+
Line 7
|
64
|
+
Line 8
|
65
|
+
Line 9
|
66
|
+
Line 10
|
67
|
+
END_CONTENT
|
68
|
+
|
69
|
+
expect(actual).to eq(expected.rstrip)
|
70
|
+
end
|
71
|
+
|
8
72
|
it 'parses arguments' do
|
9
73
|
argv = Shellwords.split 'number copyButton shell'
|
10
74
|
options = KeyValueParser.new.parse(argv)
|
data/spec/spec_helper.rb
CHANGED
data/spec/status_persistence.txt
CHANGED
@@ -1,5 +1,13 @@
|
|
1
|
-
example_id
|
2
|
-
|
3
|
-
./spec/
|
4
|
-
./spec/pre_spec.rb[1:
|
5
|
-
./spec/pre_spec.rb[1:
|
1
|
+
example_id | status | run_time |
|
2
|
+
--------------------------------------------------------------- | ------ | --------------- |
|
3
|
+
./spec/exec_spec.rb[1:1] | passed | 0.00377 seconds |
|
4
|
+
./spec/pre_spec.rb[1:1] | passed | 0.00014 seconds |
|
5
|
+
./spec/pre_spec.rb[1:2] | passed | 0.00351 seconds |
|
6
|
+
./spec/pre_spec.rb[1:3] | passed | 0.00016 seconds |
|
7
|
+
./spec/pre_spec.rb[1:4] | passed | 0.00011 seconds |
|
8
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_pre/spec/exec_spec.rb[1:1] | passed | 0.00457 seconds |
|
9
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_pre/spec/pre_spec.rb[1:1] | passed | 0.00326 seconds |
|
10
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_pre/spec/pre_spec.rb[1:2] | passed | 0.00067 seconds |
|
11
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_pre/spec/pre_spec.rb[1:3] | passed | 0.00362 seconds |
|
12
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_pre/spec/pre_spec.rb[1:4] | passed | 0.00033 seconds |
|
13
|
+
/mnt/_/work/jekyll/my_plugins/jekyll_pre/spec/pre_spec.rb[1:5] | passed | 0.00083 seconds |
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll_pre
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Slinn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: jekyll
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.6.0
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rack
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
description: 'Jekyll tags pre and noselect, for HTML <pre/> tag, prompts and unselectable
|
42
56
|
text. Can number lines.
|
43
57
|
|
@@ -59,6 +73,7 @@ files:
|
|
59
73
|
- lib/jekyll_pre/version.rb
|
60
74
|
- lib/noselect_tag.rb
|
61
75
|
- lib/pre_tag_block.rb
|
76
|
+
- spec/exec_spec.rb
|
62
77
|
- spec/pre_spec.rb
|
63
78
|
- spec/spec_helper.rb
|
64
79
|
- spec/status_persistence.txt
|
@@ -95,6 +110,7 @@ specification_version: 4
|
|
95
110
|
summary: Jekyll tags pre and noselect, for HTML <pre/> tag, prompts and unselectable
|
96
111
|
text. Can number lines.
|
97
112
|
test_files:
|
113
|
+
- spec/exec_spec.rb
|
98
114
|
- spec/pre_spec.rb
|
99
115
|
- spec/spec_helper.rb
|
100
116
|
- spec/status_persistence.txt
|