jekyll-code-example-tag 0.0.5 → 0.0.6
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 +12 -0
- data/Gemfile.lock +1 -1
- data/README.md +14 -0
- data/jekyll-code-example-tag.gemspec +1 -1
- data/lib/jekyll-code-example-tag.rb +11 -11
- data/lib/js/jekyll-code-example-buttons.js.rb +24 -0
- data/spec/code_example_spec.rb +28 -3
- metadata +3 -2
- data/lib/js/jekyll-code-example-buttons.js +0 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 445ae1847daf8f0cf13a31c1e42f271db93c35f7
|
4
|
+
data.tar.gz: 19112d1ad9e6f7dde6050e70c4b3f6f218eff2d5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33c5c0e3de929fe09bb757ca32845b8bd74f79ab8f610cede0640ec42dd6ad1712bbe7ab13d4d9a3ad1007e09703c8922c5ffbe0e56776572c55f2cc4ce83fc7
|
7
|
+
data.tar.gz: cb04d87c67fad9f267df293bb4e9e4751ed2da5a0494e7c8e7e9d2dfa51d5816ac3c2fc861f867db3043d34fa2b4520b661ec9c97ba84fbc6d6c3e7fe987c758
|
data/CHANGELOG
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
CHANGELOG
|
2
|
+
==========
|
3
|
+
|
4
|
+
This project does *not* adhere to Semantic Versioning
|
5
|
+
|
6
|
+
## 0.0.6 - 2015-03-16
|
7
|
+
|
8
|
+
### Added
|
9
|
+
|
10
|
+
- CSS classes applied to buttons and button container elements can now be
|
11
|
+
configured via _config.yml. Supporting JavaScript also uses classes set in
|
12
|
+
_config.yml.
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -32,6 +32,20 @@ file in the `/js/` directory of your Jekyll project.
|
|
32
32
|
|
33
33
|
## Usage
|
34
34
|
|
35
|
+
### Configure CSS Classes
|
36
|
+
|
37
|
+
Via your site's _config.yml, you can define what CSS class or classes the
|
38
|
+
example buttons and button containers will have. For example:
|
39
|
+
|
40
|
+
code_example_buttons_class: 'the_buttons'
|
41
|
+
code_example_button_class: 'a_button'
|
42
|
+
|
43
|
+
will cause each button to have the class `a_button`, and buttons will be inside
|
44
|
+
a div with the class `the_buttons`.
|
45
|
+
|
46
|
+
`code_example_buttons_class` defaults to 'buttons', and
|
47
|
+
`code_example_button_class` defaults to 'button'.
|
48
|
+
|
35
49
|
### code_example
|
36
50
|
|
37
51
|
First, select a folder to place your code examples in. By default, the top
|
@@ -1,3 +1,5 @@
|
|
1
|
+
require_relative 'js/jekyll-code-example-buttons.js.rb'
|
2
|
+
|
1
3
|
module Jekyll
|
2
4
|
module CodeExampleTags
|
3
5
|
|
@@ -28,13 +30,16 @@ module Jekyll
|
|
28
30
|
examples
|
29
31
|
end
|
30
32
|
|
31
|
-
def self.buttons_markup(examples)
|
33
|
+
def self.buttons_markup(examples, context)
|
34
|
+
site = context['site']
|
35
|
+
buttons_class = site['code_example_buttons_class'] ? site['code_example_buttons_class'] : 'buttons'
|
36
|
+
button_class = site['code_example_button_class'] ? site['code_example_button_class'] : 'button'
|
32
37
|
menu_items = ""
|
33
38
|
examples.each_key do |lang|
|
34
|
-
menu_items << "<li><a href='#' class='
|
39
|
+
menu_items << "<li><a href='#' class='#{button_class}' target='#{lang}'>#{lang.capitalize}</a></li>"
|
35
40
|
end
|
36
41
|
<<EOF
|
37
|
-
<div class="
|
42
|
+
<div class="#{buttons_class} examples">
|
38
43
|
<ul>
|
39
44
|
#{menu_items}
|
40
45
|
</ul>
|
@@ -80,7 +85,7 @@ EOF
|
|
80
85
|
examples = Jekyll::CodeExampleTags::code_examples(@context_path, @example_name, context['site'])
|
81
86
|
|
82
87
|
# Build the code example elements
|
83
|
-
output = Jekyll::CodeExampleTags::buttons_markup(examples)
|
88
|
+
output = Jekyll::CodeExampleTags::buttons_markup(examples, context)
|
84
89
|
examples.each do |lang, path|
|
85
90
|
example_content = File.read(path)
|
86
91
|
output << Jekyll::CodeExampleTags::example_markup(lang, example_content)
|
@@ -100,7 +105,7 @@ EOF
|
|
100
105
|
end
|
101
106
|
|
102
107
|
# Build the code example elements
|
103
|
-
output = Jekyll::CodeExampleTags::buttons_markup(examples)
|
108
|
+
output = Jekyll::CodeExampleTags::buttons_markup(examples, context)
|
104
109
|
examples.each do |lang, paths|
|
105
110
|
example_content = ""
|
106
111
|
for path in paths.split("\n")
|
@@ -116,15 +121,10 @@ EOF
|
|
116
121
|
class CodeExamplesJsFile < Jekyll::StaticFile
|
117
122
|
def write(dest)
|
118
123
|
|
119
|
-
if File.file?(File.join(FileUtils.pwd, @dir, @name))
|
120
|
-
in_path = File.join(FileUtils.pwd, @dir, @name)
|
121
|
-
else
|
122
|
-
in_path = File.join(File.dirname(__FILE__), @dir, @name)
|
123
|
-
end
|
124
124
|
dest_path = File.join(dest, @dir, @name)
|
125
125
|
|
126
126
|
FileUtils.mkdir_p(File.dirname(dest_path))
|
127
|
-
content =
|
127
|
+
content = code_example_buttons_js(@site)
|
128
128
|
File.open(dest_path, 'w') do |f|
|
129
129
|
f.write(content)
|
130
130
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
def code_example_buttons_js(site)
|
2
|
+
buttons_class = site.config['code_example_buttons_class'] ? site.config['code_example_buttons_class'] : 'buttons'
|
3
|
+
button_class = site.config['code_example_button_class'] ? site.config['code_example_button_class'] : 'button'
|
4
|
+
|
5
|
+
<<EOF
|
6
|
+
"use strict";
|
7
|
+
|
8
|
+
jQuery(function(){
|
9
|
+
jQuery('.#{buttons_class}.examples .#{button_class}').click(function(e){
|
10
|
+
e.preventDefault();
|
11
|
+
var parent = jQuery(this).closest('body');
|
12
|
+
var target = jQuery(this).attr('target');
|
13
|
+
|
14
|
+
parent.find('.example').hide();
|
15
|
+
parent.find('.example.'+target).show();
|
16
|
+
parent.find('.#{buttons_class}.examples .#{button_class}.active').removeClass('active');
|
17
|
+
parent.find('.#{buttons_class}.examples .#{button_class}[target="'+target+'"]').addClass('active');
|
18
|
+
});
|
19
|
+
|
20
|
+
|
21
|
+
jQuery('.#{buttons_class}.examples li:first-child .#{button_class}').click();
|
22
|
+
});
|
23
|
+
EOF
|
24
|
+
end
|
data/spec/code_example_spec.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require_relative './spec_helper.rb'
|
2
2
|
|
3
|
-
def check_code_example_conditions(o_obj)
|
4
|
-
expect(o_obj.xpath('/div[@class="code-examples"]/div[@class="
|
5
|
-
expect(o_obj.xpath('/div[@class="code-examples"]/div[@class="
|
3
|
+
def check_code_example_conditions(o_obj, buttons_class: 'buttons', button_class: 'button')
|
4
|
+
expect(o_obj.xpath('/div[@class="code-examples"]/div[@class="'+buttons_class+' examples"]/ul/li/a[@class="'+button_class+'"][@target="ruby"][.="Ruby"]')).not_to be_empty
|
5
|
+
expect(o_obj.xpath('/div[@class="code-examples"]/div[@class="'+buttons_class+' examples"]/ul/li/a[@class="'+button_class+'"][@target="python"][.="Python"]')).not_to be_empty
|
6
6
|
ruby_example = o_obj.xpath('/div[@class="code-examples"]/div[@class="highlight example ruby"]/pre/code[@class="language ruby"][@data-lang="ruby"]')
|
7
7
|
expect(ruby_example).not_to be_empty
|
8
8
|
expect(ruby_example.first.content).to eq 'puts "Hello World"'
|
@@ -47,6 +47,31 @@ describe 'code_example', fakefs: true do
|
|
47
47
|
check_code_example_conditions(o_obj)
|
48
48
|
end
|
49
49
|
|
50
|
+
it 'can be configured via "code_example_button_class"' do
|
51
|
+
FileUtils.mkdir_p('code_examples/ruby')
|
52
|
+
FileUtils.mkdir_p('code_examples/python')
|
53
|
+
File.open('code_examples/ruby/hello_world', 'w') { |f| f << 'puts "Hello World"'}
|
54
|
+
File.open('code_examples/python/hello_world', 'w') { |f| f << 'print "Hello World"'}
|
55
|
+
|
56
|
+
t = Liquid::Template.parse(page)
|
57
|
+
o = t.render!({'site' => {'code_example_button_class' => 'button'}})
|
58
|
+
o_obj = Nokogiri::XML.parse(o)
|
59
|
+
check_code_example_conditions(o_obj, button_class: 'button')
|
60
|
+
end
|
61
|
+
|
62
|
+
it 'can be configured via "code_example_buttons_class"' do
|
63
|
+
FileUtils.mkdir_p('code_examples/ruby')
|
64
|
+
FileUtils.mkdir_p('code_examples/python')
|
65
|
+
File.open('code_examples/ruby/hello_world', 'w') { |f| f << 'puts "Hello World"'}
|
66
|
+
File.open('code_examples/python/hello_world', 'w') { |f| f << 'print "Hello World"'}
|
67
|
+
|
68
|
+
t = Liquid::Template.parse(page)
|
69
|
+
o = t.render!({'site' => {'code_example_buttons_class' => 'button-group'}})
|
70
|
+
o_obj = Nokogiri::XML.parse(o)
|
71
|
+
check_code_example_conditions(o_obj, buttons_class: 'button-group')
|
72
|
+
end
|
73
|
+
|
74
|
+
|
50
75
|
it 'allows for dividing examples via context' do
|
51
76
|
FileUtils.mkdir_p('code_examples/v1/ruby')
|
52
77
|
FileUtils.mkdir_p('code_examples/v1/python')
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jekyll-code-example-tag
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- GovDelivery
|
@@ -35,13 +35,14 @@ extra_rdoc_files: []
|
|
35
35
|
files:
|
36
36
|
- ".ruby-version"
|
37
37
|
- ".travis.yml"
|
38
|
+
- CHANGELOG
|
38
39
|
- Gemfile
|
39
40
|
- Gemfile.lock
|
40
41
|
- LICENSE.md
|
41
42
|
- README.md
|
42
43
|
- jekyll-code-example-tag.gemspec
|
43
44
|
- lib/jekyll-code-example-tag.rb
|
44
|
-
- lib/js/jekyll-code-example-buttons.js
|
45
|
+
- lib/js/jekyll-code-example-buttons.js.rb
|
45
46
|
- spec/all_page_code_examples_spec.rb
|
46
47
|
- spec/code_example_spec.rb
|
47
48
|
- spec/spec_helper.rb
|
@@ -1,17 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
|
3
|
-
jQuery(function(){
|
4
|
-
jQuery('.buttons.examples .button').click(function(e){
|
5
|
-
e.preventDefault();
|
6
|
-
var parent = jQuery(this).closest('body');
|
7
|
-
var target = jQuery(this).attr('target');
|
8
|
-
|
9
|
-
parent.find('.example').hide();
|
10
|
-
parent.find('.example.'+target).show();
|
11
|
-
parent.find('.buttons.examples .button.active').removeClass('active');
|
12
|
-
parent.find('.buttons.examples .button[target="'+target+'"]').addClass('active');
|
13
|
-
});
|
14
|
-
|
15
|
-
|
16
|
-
jQuery('.buttons.examples li:first-child .button').click();
|
17
|
-
});
|