livingstyleguide 2.0.0.alpha.1 → 2.0.0.alpha.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/bin/livingstyleguide +11 -2
- data/lib/livingstyleguide.rb +12 -6
- data/lib/livingstyleguide/command_line_interface.rb +2 -7
- data/lib/livingstyleguide/document.rb +18 -7
- data/lib/livingstyleguide/engine.rb +1 -13
- data/lib/livingstyleguide/filters.rb +0 -1
- data/lib/livingstyleguide/filters/add_wrapper_class.rb +1 -4
- data/lib/livingstyleguide/filters/coffee_script.rb +1 -19
- data/lib/livingstyleguide/filters/colors.rb +0 -29
- data/lib/livingstyleguide/filters/data.rb +3 -0
- data/lib/livingstyleguide/filters/font_example.rb +2 -16
- data/lib/livingstyleguide/filters/full_width.rb +1 -4
- data/lib/livingstyleguide/filters/haml.rb +0 -17
- data/lib/livingstyleguide/filters/import.rb +1 -0
- data/lib/livingstyleguide/filters/javascript.rb +4 -9
- data/lib/livingstyleguide/markdown_extensions.rb +7 -6
- data/lib/livingstyleguide/templates/example.html.erb +2 -2
- data/lib/livingstyleguide/templates/javascript.html.erb +6 -0
- data/lib/livingstyleguide/version.rb +1 -1
- data/stylesheets/_livingstyleguide.scss +1 -27
- data/stylesheets/livingstyleguide/_reset.scss +24 -0
- metadata +4 -23
- data/lib/livingstyleguide/code_block.rb +0 -35
- data/lib/livingstyleguide/example.rb +0 -93
- data/lib/livingstyleguide/filter_hooks.rb +0 -34
- data/lib/livingstyleguide/filters/highlights.rb +0 -9
- data/lib/livingstyleguide/sass_extensions.rb +0 -9
- data/lib/livingstyleguide/sass_extensions/functions.rb +0 -49
- data/lib/livingstyleguide/tilt_template.rb +0 -100
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97dd9be7998179472959f4e7960605b573e36fa1
|
4
|
+
data.tar.gz: 29cc7df7aa57af22558c1dba29eac0fe5d335337
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 31aec84356a0b49da04a65d92dbbf6358f520f173528ed95f9cc755362f280ca3efb6311be04672776fa24acdc011c0498ce4122d9340b9d73f840dea2871937
|
7
|
+
data.tar.gz: 5e685372e9cc6d331e6164c4a8738b0de7b4e6a6357079ba36a64282afd80275dc2522bc68710fa352980ea4dde892e7fcf3728ece11ada5ffe94b16e2dc3934
|
data/bin/livingstyleguide
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
|
3
|
+
require 'rubygems'
|
4
|
+
begin
|
5
|
+
require 'bundler/setup'
|
6
|
+
rescue LoadError
|
7
|
+
end
|
8
|
+
|
9
|
+
lib = File.expand_path('../lib', File.dirname(__FILE__))
|
10
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
11
|
+
|
12
|
+
require 'livingstyleguide'
|
13
|
+
require 'livingstyleguide/command_line_interface'
|
5
14
|
|
6
15
|
LivingStyleGuide::CommandLineInterface.start(ARGV)
|
7
16
|
|
data/lib/livingstyleguide.rb
CHANGED
@@ -7,19 +7,25 @@ rescue LoadError
|
|
7
7
|
end
|
8
8
|
|
9
9
|
module LivingStyleGuide
|
10
|
+
@@default_options = {
|
11
|
+
default_language: :example,
|
12
|
+
title: 'Living Style Guide',
|
13
|
+
header: '<h1 class="livingstyleguide--page-title">Living Style Guide</h1>',
|
14
|
+
footer: '<div class="livingstyleguide--footer"><a class="livingstyleguide--logo" href="http://livingstyleguide.org">Made with the LivingStyleGuide gem.</a></div>',
|
15
|
+
root: '/'
|
16
|
+
}
|
17
|
+
|
18
|
+
def self.default_options
|
19
|
+
@@default_options
|
20
|
+
end
|
21
|
+
|
10
22
|
def self.add_filter(*keys, &block)
|
11
23
|
Filters.add_filter(*keys, &block)
|
12
24
|
end
|
13
25
|
end
|
14
26
|
|
15
27
|
require 'livingstyleguide/version'
|
16
|
-
require 'livingstyleguide/filter_hooks'
|
17
|
-
require 'livingstyleguide/sass_extensions'
|
18
|
-
require 'livingstyleguide/engine'
|
19
28
|
require 'livingstyleguide/markdown_extensions'
|
20
|
-
require 'livingstyleguide/tilt_template'
|
21
|
-
require 'livingstyleguide/code_block'
|
22
|
-
require 'livingstyleguide/example'
|
23
29
|
require 'livingstyleguide/document'
|
24
30
|
require 'livingstyleguide/filters'
|
25
31
|
require 'livingstyleguide/integration'
|
@@ -1,8 +1,3 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
begin
|
3
|
-
require 'bundler/setup'
|
4
|
-
rescue LoadError
|
5
|
-
end
|
6
1
|
require 'thor'
|
7
2
|
require 'tilt'
|
8
3
|
|
@@ -11,10 +6,10 @@ module LivingStyleGuide
|
|
11
6
|
|
12
7
|
desc 'compile input_file output_file', 'Compiles the living style guide to HTML.'
|
13
8
|
def compile(input_file = nil, output_file = nil)
|
14
|
-
|
9
|
+
doc = LivingStyleGuide::Document.new(input_file) do
|
15
10
|
input(input_file)
|
16
11
|
end
|
17
|
-
output
|
12
|
+
output doc.render, input_file, output_file
|
18
13
|
end
|
19
14
|
|
20
15
|
desc 'version', 'Shows the current version of the Gem'
|
@@ -39,7 +39,7 @@ class LivingStyleGuide::Document < ::Tilt::Template
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def source
|
42
|
-
@source ||= erb.gsub(/<%.*?%>\n?/, '')
|
42
|
+
@source ||= set_highlights(@erb.gsub(/<%.*?%>\n?/, ''))
|
43
43
|
end
|
44
44
|
|
45
45
|
def css
|
@@ -65,15 +65,15 @@ class LivingStyleGuide::Document < ::Tilt::Template
|
|
65
65
|
depend_on file if file and options.has_key?(:livingstyleguide)
|
66
66
|
result = ERB.new(erb).result(@filters.get_binding)
|
67
67
|
@html = case @type
|
68
|
-
when :plain, :example
|
69
|
-
result
|
68
|
+
when :plain, :example, :html, :javascript
|
69
|
+
remove_highlights(result)
|
70
70
|
when :markdown
|
71
|
-
renderer = LivingStyleGuide::RedcarpetHTML.new(LivingStyleGuide
|
71
|
+
renderer = LivingStyleGuide::RedcarpetHTML.new(LivingStyleGuide.default_options, self)
|
72
72
|
redcarpet = ::Redcarpet::Markdown.new(renderer, LivingStyleGuide::REDCARPET_RENDER_OPTIONS)
|
73
|
-
redcarpet.render(result)
|
73
|
+
remove_highlights(redcarpet.render(result))
|
74
74
|
else
|
75
75
|
require "tilt/#{@type}"
|
76
|
-
template_class.new{ result }.render(@scope, @locals.merge(locals))
|
76
|
+
template_class.new{ remove_highlights(result) }.render(@scope, @locals.merge(locals))
|
77
77
|
end
|
78
78
|
@classes.unshift "livingstyleguide--#{@type}-example"
|
79
79
|
@classes.unshift "livingstyleguide--example"
|
@@ -84,6 +84,17 @@ class LivingStyleGuide::Document < ::Tilt::Template
|
|
84
84
|
@scope.depend_on(File.expand_path(file)) if @scope.respond_to?(:depend_on)
|
85
85
|
end
|
86
86
|
|
87
|
+
private
|
88
|
+
def set_highlights(code)
|
89
|
+
code.gsub!(/^\s*\*\*\*\n(.+?)\n\s*\*\*\*(\n|$)/m, %Q(\n<strong class="livingstyleguide--code-highlight-block">\\1</strong>\n))
|
90
|
+
code.gsub(/\*\*\*(.+?)\*\*\*/, %Q(<strong class="livingstyleguide--code-highlight">\\1</strong>))
|
91
|
+
end
|
92
|
+
|
93
|
+
private
|
94
|
+
def remove_highlights(code)
|
95
|
+
code.gsub(/\*\*\*(.+?)\*\*\*/m, '\\1')
|
96
|
+
end
|
97
|
+
|
87
98
|
private
|
88
99
|
def template_erb
|
89
100
|
File.read("#{File.dirname(__FILE__)}/templates/#{@template}.html.erb")
|
@@ -93,7 +104,7 @@ class LivingStyleGuide::Document < ::Tilt::Template
|
|
93
104
|
def parse_filters
|
94
105
|
(@type == :erb ? data.gsub('<%', '<%%') : data).gsub(/\G(.*?)((```.+?```)|\Z)/m) do
|
95
106
|
content, code_block = $1, $2
|
96
|
-
content.gsub(
|
107
|
+
content.gsub(/^@([\w\d_-]+)(?: ([^\{\n]+))?(?: *\{\n((?:.|\n)*?)\n\}|\n((?: .*\n)+))?/) do
|
97
108
|
name, arguments, block = $1, $2 || '', $3 || $4
|
98
109
|
name = name.gsub('-', '_').to_sym
|
99
110
|
arguments = arguments.split(',').map(&:strip)
|
@@ -3,20 +3,8 @@ module LivingStyleGuide
|
|
3
3
|
class Engine
|
4
4
|
attr_accessor :markdown, :files, :options, :variables
|
5
5
|
|
6
|
-
@@default_options = {
|
7
|
-
default_language: :example,
|
8
|
-
title: 'Living Style Guide',
|
9
|
-
header: '<h1 class="livingstyleguide--page-title">Living Style Guide</h1>',
|
10
|
-
footer: '<div class="livingstyleguide--footer"><a class="livingstyleguide--logo" href="http://livingstyleguide.org">Made with the LivingStyleGuide gem.</a></div>',
|
11
|
-
root: '/'
|
12
|
-
}
|
13
|
-
|
14
|
-
def self.default_options
|
15
|
-
@@default_options
|
16
|
-
end
|
17
|
-
|
18
6
|
def initialize(options, sass_options)
|
19
|
-
@options =
|
7
|
+
@options = LivingStyleGuide.default_options.merge(options)
|
20
8
|
@sass_options = sass_options
|
21
9
|
@variables = {}
|
22
10
|
@files = []
|
@@ -18,7 +18,6 @@ end
|
|
18
18
|
|
19
19
|
require 'livingstyleguide/filters/options'
|
20
20
|
require 'livingstyleguide/filters/import'
|
21
|
-
require 'livingstyleguide/filters/highlights'
|
22
21
|
require 'livingstyleguide/filters/full_width'
|
23
22
|
require 'livingstyleguide/filters/haml'
|
24
23
|
require 'livingstyleguide/filters/markdown'
|
@@ -1,23 +1,5 @@
|
|
1
|
-
LivingStyleGuide::Example.add_filter :coffee_script do
|
2
|
-
begin
|
3
|
-
|
4
|
-
require 'coffee-script'
|
5
|
-
@syntax = :'coffee-script'
|
6
|
-
|
7
|
-
add_wrapper_class '-lsg-for-javascript'
|
8
|
-
|
9
|
-
pre_processor do |coffee_script|
|
10
|
-
javascript = CoffeeScript.compile(coffee_script)
|
11
|
-
%Q(<script>#{javascript}</script>\n)
|
12
|
-
end
|
13
|
-
|
14
|
-
rescue LoadError
|
15
|
-
raise "Please make sure `gem 'coffee-script'` is added to your Gemfile."
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
19
|
-
|
20
1
|
LivingStyleGuide.add_filter :coffee_script, :coffee do
|
21
2
|
document.type = :coffee
|
3
|
+
document.template = :javascript
|
22
4
|
nil
|
23
5
|
end
|
@@ -1,32 +1,3 @@
|
|
1
|
-
LivingStyleGuide::Example.add_filter :colors do |file|
|
2
|
-
suppress_code_block
|
3
|
-
|
4
|
-
|
5
|
-
if file
|
6
|
-
colors = [engine.variables[file]]
|
7
|
-
else
|
8
|
-
colors = []
|
9
|
-
end
|
10
|
-
|
11
|
-
html do |content|
|
12
|
-
content
|
13
|
-
end
|
14
|
-
|
15
|
-
pre_processor do |content|
|
16
|
-
colors += content.split(/\n+/).map{ |l| l.split(/\s+/) }
|
17
|
-
columns = colors.map{ |l| l.size }.max
|
18
|
-
colors_html = colors.flatten.map do |variable|
|
19
|
-
if variable == '-'
|
20
|
-
css_class = '-lsg-empty'
|
21
|
-
elsif variable[0] != '$'
|
22
|
-
variable = "$#{variable}"
|
23
|
-
end
|
24
|
-
%Q(<li class="livingstyleguide--color-swatch #{css_class || variable}">#{variable}</li>\n)
|
25
|
-
end.join("\n")
|
26
|
-
%(<ul class="livingstyleguide--color-swatches -lsg-#{columns}-columns">\n#{colors_html}\n</ul>\n)
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
1
|
LivingStyleGuide.add_filter :colors do |content|
|
31
2
|
colors = content.split(/\n+/).map{ |l| l.split(/\s+/) }
|
32
3
|
columns = colors.map{ |l| l.size }.max
|
@@ -1,26 +1,12 @@
|
|
1
|
-
LivingStyleGuide
|
1
|
+
LivingStyleGuide.default_options[:font_example] = { text: <<-TEXT }
|
2
2
|
ABCDEFGHIJKLMNOPQRSTUVWXYZ
|
3
3
|
abcdefghijklmnopqrstuvwxyz
|
4
4
|
0123456789
|
5
5
|
!&/()$=@;:,.
|
6
6
|
TEXT
|
7
7
|
|
8
|
-
LivingStyleGuide::Example.add_filter :font_example do |font|
|
9
|
-
suppress_code_block
|
10
|
-
|
11
|
-
html do |content|
|
12
|
-
%(<div class="livingstyleguide--font-example" style="font: #{ERB::Util.html_escape(font)}">\n#{content}\n</div>\n)
|
13
|
-
end
|
14
|
-
|
15
|
-
pre_processor do |content|
|
16
|
-
content = options[:font_example][:text] if content == ''
|
17
|
-
content = ERB::Util.html_escape(content)
|
18
|
-
content.strip.gsub(/\n/, "<br>\n")
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
8
|
LivingStyleGuide.add_filter :font_example do |font, text = nil|
|
23
|
-
text ||= LivingStyleGuide
|
9
|
+
text ||= LivingStyleGuide.default_options[:font_example][:text]
|
24
10
|
text = ERB::Util.html_escape(text)
|
25
11
|
text.strip!
|
26
12
|
text.gsub!(/\n/, "<br>\n")
|
@@ -1,20 +1,3 @@
|
|
1
|
-
LivingStyleGuide::Example.add_filter :haml do
|
2
|
-
begin
|
3
|
-
|
4
|
-
require 'haml'
|
5
|
-
Haml::Options.defaults[:attr_wrapper] = '"'
|
6
|
-
@syntax = :haml
|
7
|
-
|
8
|
-
pre_processor do |haml|
|
9
|
-
Haml::Engine.new(haml).render.strip
|
10
|
-
end
|
11
|
-
|
12
|
-
rescue LoadError
|
13
|
-
raise "Please make sure `gem 'haml'` is added to your Gemfile."
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
|
18
1
|
LivingStyleGuide.add_filter :haml do
|
19
2
|
document.type = :haml
|
20
3
|
nil
|
@@ -1,10 +1,5 @@
|
|
1
|
-
LivingStyleGuide
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
pre_processor do |javascript|
|
7
|
-
%Q(<script>#{javascript}</script>\n)
|
8
|
-
end
|
1
|
+
LivingStyleGuide.add_filter :javascript do
|
2
|
+
document.type = :javascript
|
3
|
+
document.template = :javascript
|
4
|
+
nil
|
9
5
|
end
|
10
|
-
|
@@ -17,6 +17,7 @@ module LivingStyleGuide
|
|
17
17
|
|
18
18
|
def initialize(options = {}, document)
|
19
19
|
@options = options
|
20
|
+
@options[:prefix] ||= 'livingstyleguide--'
|
20
21
|
@document = document
|
21
22
|
super @options
|
22
23
|
end
|
@@ -25,34 +26,34 @@ module LivingStyleGuide
|
|
25
26
|
id = slug(text)
|
26
27
|
klass = %w(page-title headline sub-headline sub-sub-headline)[header_level]
|
27
28
|
header_level += 1
|
28
|
-
%Q(<h#{header_level} class="
|
29
|
+
%Q(<h#{header_level} class="#{@options[:prefix]}#{klass}" id="#{id}"><a class="livingstyleguide--anchor" href="##{id}"></a>#{text}</h#{header_level}>\n)
|
29
30
|
end
|
30
31
|
|
31
32
|
def paragraph(text)
|
32
|
-
%Q(<p class="
|
33
|
+
%Q(<p class="#{@options[:prefix]}paragraph">#{text}</p>\n)
|
33
34
|
end
|
34
35
|
|
35
36
|
def list(contents, list_type)
|
36
37
|
tag_name = "#{list_type.to_s[0, 1]}l"
|
37
|
-
%Q(<#{tag_name} class="
|
38
|
+
%Q(<#{tag_name} class="#{@options[:prefix]}#{list_type}-list">\n#{contents}</#{tag_name}>\n)
|
38
39
|
end
|
39
40
|
|
40
41
|
def list_item(text, list_type)
|
41
|
-
%Q(<li class="
|
42
|
+
%Q(<li class="#{@options[:prefix]}#{list_type}-list-item">#{text.strip}</li>\n)
|
42
43
|
end
|
43
44
|
|
44
45
|
def block_code(code, language)
|
45
46
|
language = language.to_s.strip.to_sym
|
46
47
|
language = @options[:default_language] if language == :''
|
47
48
|
document = Document.new(livingstyleguide: @document) { code }
|
48
|
-
document.type = language == :example ? :
|
49
|
+
document.type = language == :example ? :html : language
|
49
50
|
document.template = template_for(language)
|
50
51
|
document.render(@document.scope)
|
51
52
|
end
|
52
53
|
|
53
54
|
def codespan(code)
|
54
55
|
code = ERB::Util.html_escape(code)
|
55
|
-
%Q(<code class="
|
56
|
+
%Q(<code class="#{@options[:prefix]}code-span #{@options[:prefix]}code">#{code}</code>)
|
56
57
|
end
|
57
58
|
|
58
59
|
private
|
@@ -1,8 +1,8 @@
|
|
1
|
-
<section class="<%= classes.join(' ') %>">
|
1
|
+
<section class="<%= classes.join(' ') %>" id="<%= id %>">
|
2
2
|
<div class="livingstyleguide--html">
|
3
3
|
<%= html %>
|
4
4
|
</div>
|
5
5
|
<pre class="livingstyleguide--code-block"><code class="livingstyleguide--code"><%=
|
6
|
-
[:plain].index(type) ? source : ::MiniSyntax.highlight(source, type)
|
6
|
+
[:plain].index(type) ? source : ::MiniSyntax.highlight(type == :html ? ERB::Util.h(source) : source, type)
|
7
7
|
%></code></pre>
|
8
8
|
</section>
|
@@ -0,0 +1,6 @@
|
|
1
|
+
<section class="<%= classes.join(' ') %>" id="<%= id %>">
|
2
|
+
<script><%= html %></script>
|
3
|
+
<pre class="livingstyleguide--code-block"><code class="livingstyleguide--code"><%=
|
4
|
+
[:plain].index(type) ? source : ::MiniSyntax.highlight(source, type)
|
5
|
+
%></code></pre>
|
6
|
+
</section>
|
@@ -48,37 +48,11 @@ $livingstyleguide--color-swatches-per-line: 2 !default;
|
|
48
48
|
$livingstyleguide--highlight-color: #f6ffa3 !default;
|
49
49
|
$livingstyleguide--highlight-border-radius: 2px;
|
50
50
|
|
51
|
-
//// RESET ////
|
52
|
-
|
53
|
-
%livingstyleguide--reset {
|
54
|
-
background: transparent;
|
55
|
-
border: none;
|
56
|
-
border-collapse: collapse;
|
57
|
-
border-radius: 0;
|
58
|
-
border-spacing: 0;
|
59
|
-
-webkit-box-sizing: border-box;
|
60
|
-
-moz-box-sizing: border-box;
|
61
|
-
box-sizing: border-box;
|
62
|
-
color: inherit;
|
63
|
-
display: block;
|
64
|
-
font-size: inherit;
|
65
|
-
-webkit-font-smoothing: antialiased;
|
66
|
-
font-style: inherit;
|
67
|
-
font-weight: inherit;
|
68
|
-
line-height: inherit;
|
69
|
-
list-style: none;
|
70
|
-
margin: 0;
|
71
|
-
padding: 0;
|
72
|
-
text-align: inherit;
|
73
|
-
text-decoration: none;
|
74
|
-
vertical-align: baseline;
|
75
|
-
}
|
76
|
-
|
77
51
|
//// IMPORTS ////
|
78
52
|
|
53
|
+
@import "livingstyleguide/reset";
|
79
54
|
@import "livingstyleguide/layout";
|
80
55
|
@import "livingstyleguide/content";
|
81
56
|
@import "livingstyleguide/code";
|
82
57
|
@import "livingstyleguide/color-swatches";
|
83
58
|
@import "livingstyleguide/variables";
|
84
|
-
|
@@ -0,0 +1,24 @@
|
|
1
|
+
%livingstyleguide--reset {
|
2
|
+
background: transparent;
|
3
|
+
border: none;
|
4
|
+
border-collapse: collapse;
|
5
|
+
border-radius: 0;
|
6
|
+
border-spacing: 0;
|
7
|
+
-webkit-box-sizing: border-box;
|
8
|
+
-moz-box-sizing: border-box;
|
9
|
+
box-sizing: border-box;
|
10
|
+
color: inherit;
|
11
|
+
display: block;
|
12
|
+
font-size: inherit;
|
13
|
+
-webkit-font-smoothing: antialiased;
|
14
|
+
font-style: inherit;
|
15
|
+
font-weight: inherit;
|
16
|
+
line-height: inherit;
|
17
|
+
list-style: none;
|
18
|
+
margin: 0;
|
19
|
+
padding: 0;
|
20
|
+
text-align: inherit;
|
21
|
+
text-decoration: none;
|
22
|
+
vertical-align: baseline;
|
23
|
+
}
|
24
|
+
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: livingstyleguide
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.0.alpha.
|
4
|
+
version: 2.0.0.alpha.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nico Hagenburger
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minisyntax
|
@@ -80,20 +80,6 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: hooks
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - '='
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 0.3.3
|
90
|
-
type: :runtime
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - '='
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 0.3.3
|
97
83
|
- !ruby/object:Gem::Dependency
|
98
84
|
name: compass
|
99
85
|
requirement: !ruby/object:Gem::Requirement
|
@@ -190,12 +176,9 @@ files:
|
|
190
176
|
- assets/javascripts/livingstyleguide.js
|
191
177
|
- bin/livingstyleguide
|
192
178
|
- lib/livingstyleguide.rb
|
193
|
-
- lib/livingstyleguide/code_block.rb
|
194
179
|
- lib/livingstyleguide/command_line_interface.rb
|
195
180
|
- lib/livingstyleguide/document.rb
|
196
181
|
- lib/livingstyleguide/engine.rb
|
197
|
-
- lib/livingstyleguide/example.rb
|
198
|
-
- lib/livingstyleguide/filter_hooks.rb
|
199
182
|
- lib/livingstyleguide/filters.rb
|
200
183
|
- lib/livingstyleguide/filters/add_wrapper_class.rb
|
201
184
|
- lib/livingstyleguide/filters/coffee_script.rb
|
@@ -204,7 +187,6 @@ files:
|
|
204
187
|
- lib/livingstyleguide/filters/font_example.rb
|
205
188
|
- lib/livingstyleguide/filters/full_width.rb
|
206
189
|
- lib/livingstyleguide/filters/haml.rb
|
207
|
-
- lib/livingstyleguide/filters/highlights.rb
|
208
190
|
- lib/livingstyleguide/filters/import.rb
|
209
191
|
- lib/livingstyleguide/filters/javascript.rb
|
210
192
|
- lib/livingstyleguide/filters/markdown.rb
|
@@ -216,20 +198,19 @@ files:
|
|
216
198
|
- lib/livingstyleguide/integration/sass.rb
|
217
199
|
- lib/livingstyleguide/integration/sprockets.rb
|
218
200
|
- lib/livingstyleguide/markdown_extensions.rb
|
219
|
-
- lib/livingstyleguide/sass_extensions.rb
|
220
|
-
- lib/livingstyleguide/sass_extensions/functions.rb
|
221
201
|
- lib/livingstyleguide/templates/default.html.erb
|
222
202
|
- lib/livingstyleguide/templates/example.html.erb
|
223
203
|
- lib/livingstyleguide/templates/font-example.html.erb
|
204
|
+
- lib/livingstyleguide/templates/javascript.html.erb
|
224
205
|
- lib/livingstyleguide/templates/layout.html.erb
|
225
206
|
- lib/livingstyleguide/templates/plain.html.erb
|
226
|
-
- lib/livingstyleguide/tilt_template.rb
|
227
207
|
- lib/livingstyleguide/version.rb
|
228
208
|
- stylesheets/_livingstyleguide.scss
|
229
209
|
- stylesheets/livingstyleguide/_code.scss
|
230
210
|
- stylesheets/livingstyleguide/_color-swatches.scss
|
231
211
|
- stylesheets/livingstyleguide/_content.scss
|
232
212
|
- stylesheets/livingstyleguide/_layout.scss
|
213
|
+
- stylesheets/livingstyleguide/_reset.scss
|
233
214
|
- stylesheets/livingstyleguide/_variables.scss
|
234
215
|
homepage: http://livingstyleguide.org
|
235
216
|
licenses: []
|
@@ -1,35 +0,0 @@
|
|
1
|
-
require 'minisyntax'
|
2
|
-
require 'erb'
|
3
|
-
require 'hooks'
|
4
|
-
|
5
|
-
class LivingStyleGuide::CodeBlock
|
6
|
-
include Hooks
|
7
|
-
include Hooks::InstanceHooks
|
8
|
-
include LivingStyleGuide::FilterHooks
|
9
|
-
define_hooks :filter_code, :syntax_highlight
|
10
|
-
|
11
|
-
attr_accessor :source, :language
|
12
|
-
|
13
|
-
syntax_highlight do |code|
|
14
|
-
if language.nil?
|
15
|
-
code
|
16
|
-
else
|
17
|
-
::MiniSyntax.highlight(code, language)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def initialize(source, language = nil)
|
22
|
-
@source = source
|
23
|
-
@language = language
|
24
|
-
end
|
25
|
-
|
26
|
-
def render
|
27
|
-
code = @source.strip
|
28
|
-
code = ERB::Util.html_escape(code).gsub(/"/, '"')
|
29
|
-
code = run_last_filter_hook(:syntax_highlight, code)
|
30
|
-
code = run_filter_hook(:filter_code, code)
|
31
|
-
%Q(<pre class="livingstyleguide--code-block"><code class="livingstyleguide--code">#{code}</code></pre>)
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
|
@@ -1,93 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
require 'minisyntax'
|
4
|
-
require 'erb'
|
5
|
-
require 'hooks'
|
6
|
-
|
7
|
-
class LivingStyleGuide::Example
|
8
|
-
include Hooks
|
9
|
-
include Hooks::InstanceHooks
|
10
|
-
include LivingStyleGuide::FilterHooks
|
11
|
-
|
12
|
-
FILTER_REGEXP = /^@([a-z\-_]+)(?:\s+(.+?))?$/
|
13
|
-
|
14
|
-
define_hooks :filter_before, :filter_after, :html, :pre_processor
|
15
|
-
attr_reader :options, :engine
|
16
|
-
@@filters = {}
|
17
|
-
|
18
|
-
def initialize(input, options, engine)
|
19
|
-
@options = { default_filters: [] }.merge(options)
|
20
|
-
@engine = engine
|
21
|
-
@source = input
|
22
|
-
@wrapper_classes = %w(livingstyleguide--example)
|
23
|
-
@syntax = :html
|
24
|
-
@filters = @options[:default_filters].clone
|
25
|
-
@output_code_block = true
|
26
|
-
parse_filters
|
27
|
-
apply_filters
|
28
|
-
end
|
29
|
-
|
30
|
-
html do |content|
|
31
|
-
%Q(<div class="#{wrapper_classes}">\n #{content}\n</div>\n)
|
32
|
-
end
|
33
|
-
|
34
|
-
def render
|
35
|
-
html = run_last_filter_hook(:html, filtered_example)
|
36
|
-
code_block = LivingStyleGuide::CodeBlock.new(@source, @syntax).render if @output_code_block
|
37
|
-
"#{html}#{code_block}"
|
38
|
-
end
|
39
|
-
|
40
|
-
def self.add_filter(key = nil, &block)
|
41
|
-
if key
|
42
|
-
@@filters[key.to_sym] = block
|
43
|
-
else
|
44
|
-
instance_eval &block
|
45
|
-
end
|
46
|
-
end
|
47
|
-
|
48
|
-
def add_wrapper_class(class_name)
|
49
|
-
@wrapper_classes << class_name
|
50
|
-
end
|
51
|
-
|
52
|
-
def wrapper_classes
|
53
|
-
@wrapper_classes.join(' ')
|
54
|
-
end
|
55
|
-
|
56
|
-
def suppress_code_block
|
57
|
-
@output_code_block = false
|
58
|
-
end
|
59
|
-
|
60
|
-
private
|
61
|
-
def parse_filters
|
62
|
-
lines = @source.split(/\n/)
|
63
|
-
@source = lines.reject do |line|
|
64
|
-
if line =~ FILTER_REGEXP
|
65
|
-
@filters << line
|
66
|
-
end
|
67
|
-
end.join("\n")
|
68
|
-
end
|
69
|
-
|
70
|
-
private
|
71
|
-
def apply_filters
|
72
|
-
@filters.each do |filter|
|
73
|
-
set_filter *filter.match(FILTER_REGEXP)[1..2]
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
private
|
78
|
-
def set_filter(key, argument = nil)
|
79
|
-
name = key.to_s.gsub('-', '_').to_sym
|
80
|
-
unless @@filters.has_key?(name)
|
81
|
-
raise NameError.new("Undefined filter “@#{key}” called.", name)
|
82
|
-
end
|
83
|
-
instance_exec argument, &@@filters[name]
|
84
|
-
end
|
85
|
-
|
86
|
-
private
|
87
|
-
def filtered_example
|
88
|
-
source = run_filter_hook(:filter_before, @source)
|
89
|
-
source = run_last_filter_hook(:pre_processor, source)
|
90
|
-
run_filter_hook(:filter_after, source)
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
@@ -1,34 +0,0 @@
|
|
1
|
-
module LivingStyleGuide::FilterHooks
|
2
|
-
def self.included(base)
|
3
|
-
base.class_eval do
|
4
|
-
extend Methods
|
5
|
-
include Methods
|
6
|
-
end
|
7
|
-
end
|
8
|
-
|
9
|
-
module Methods
|
10
|
-
def run_filter_hook(name, source)
|
11
|
-
_hooks[name].each do |hook|
|
12
|
-
source = run_single_hook(hook, source)
|
13
|
-
end
|
14
|
-
source
|
15
|
-
end
|
16
|
-
|
17
|
-
def run_last_filter_hook(name, source)
|
18
|
-
run_single_hook(_hooks[name].last, source)
|
19
|
-
end
|
20
|
-
|
21
|
-
private
|
22
|
-
def run_single_hook(hook, source)
|
23
|
-
if hook.kind_of?(Symbol)
|
24
|
-
send(hook, source)
|
25
|
-
elsif hook.nil?
|
26
|
-
source
|
27
|
-
else
|
28
|
-
instance_exec(source, &hook)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
|
@@ -1,9 +0,0 @@
|
|
1
|
-
LivingStyleGuide::CodeBlock.filter_code do |code|
|
2
|
-
code = code.gsub(/^\s*\*\*\*\n(.+?)\n\s*\*\*\*(\n|$)/m, %Q(\n<strong class="livingstyleguide--code-highlight-block">\\1</strong>\n))
|
3
|
-
code = code.gsub(/\*\*\*(.+?)\*\*\*/, %Q(<strong class="livingstyleguide--code-highlight">\\1</strong>))
|
4
|
-
end
|
5
|
-
|
6
|
-
LivingStyleGuide::Example.filter_before do |code|
|
7
|
-
code.gsub(/\*\*\*(.+?)\*\*\*/m, '\\1')
|
8
|
-
end
|
9
|
-
|
@@ -1,49 +0,0 @@
|
|
1
|
-
module LivingStyleGuide::SassExtensions::Functions
|
2
|
-
|
3
|
-
def list_variables(uri)
|
4
|
-
Sass::Util.sass_warn '`list-variables()` is deprecated and will be removed in v2.0.0.'
|
5
|
-
uri = uri.value
|
6
|
-
variables = parse_variables(uri)
|
7
|
-
variables.map! do |name|
|
8
|
-
Sass::Script::String.new(name)
|
9
|
-
end
|
10
|
-
Sass::Script::List.new(variables, :space)
|
11
|
-
end
|
12
|
-
|
13
|
-
def global_variables
|
14
|
-
ruby = environment.global_env.instance_variable_get(:@vars)
|
15
|
-
sass_script = {}
|
16
|
-
ruby.each do |name, value|
|
17
|
-
sass_script[Sass::Script::String.new(name)] = value
|
18
|
-
end
|
19
|
-
Sass::Script::Value::Map.new(sass_script)
|
20
|
-
end
|
21
|
-
|
22
|
-
if defined?(::Middleman)
|
23
|
-
def asset_url(path, prefix)
|
24
|
-
Sass::Script::String.new(options[:sprockets][:context].asset_url(path.value, prefix.value))
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
private
|
29
|
-
def parse_variables(uri)
|
30
|
-
uri = uri.dup
|
31
|
-
uri += '.s?ss' unless uri =~ /\.s[ac]ss$/
|
32
|
-
uri.gsub! %r{^(.*)/(.+)$}, '\1/{_,}\2'
|
33
|
-
variables = []
|
34
|
-
paths = [Compass.configuration.sass_path, Compass.configuration.additional_import_paths].flatten
|
35
|
-
paths.each do |path|
|
36
|
-
if path.is_a? String
|
37
|
-
Dir.glob(File.join(path, uri)).each do |file|
|
38
|
-
sass = File.read(file)
|
39
|
-
variables << sass.scan(%r(\$([a-z0-9\-_]+)\s*:))
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
variables.flatten!
|
44
|
-
variables.uniq!
|
45
|
-
variables
|
46
|
-
end
|
47
|
-
|
48
|
-
end
|
49
|
-
|
@@ -1,100 +0,0 @@
|
|
1
|
-
require 'tilt'
|
2
|
-
require 'erb'
|
3
|
-
require 'yaml'
|
4
|
-
require 'json'
|
5
|
-
|
6
|
-
module LivingStyleGuide
|
7
|
-
class TiltTemplate < ::Tilt::Template
|
8
|
-
self.default_mime_type = 'text/html'
|
9
|
-
|
10
|
-
def prepare
|
11
|
-
end
|
12
|
-
|
13
|
-
def evaluate(scope, locals, &block)
|
14
|
-
@scope = scope
|
15
|
-
parse_options(data)
|
16
|
-
render_living_style_guide
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
def sass_options
|
21
|
-
if defined?(Compass)
|
22
|
-
options = Compass.configuration.to_sass_plugin_options
|
23
|
-
else
|
24
|
-
load_path = File.join(File.dirname(__FILE__), '..', '..', 'stylesheets')
|
25
|
-
options = { load_paths: [load_path] }
|
26
|
-
end
|
27
|
-
if defined?(Rails)
|
28
|
-
options[:load_paths] += Rails.application.config.assets.paths
|
29
|
-
end
|
30
|
-
if @file.nil?
|
31
|
-
options[:load_paths] << Dir.pwd
|
32
|
-
end
|
33
|
-
if options[:template_location]
|
34
|
-
options[:template_location].each do |path, short|
|
35
|
-
options[:load_paths] << path
|
36
|
-
end
|
37
|
-
end
|
38
|
-
options[:filename] = eval_file
|
39
|
-
options[:line] = line
|
40
|
-
options[:syntax] = @options[:syntax]
|
41
|
-
options[:sprockets] = { context: @scope }
|
42
|
-
options[:custom] = { sprockets_context: @scope }
|
43
|
-
if defined?(Sass::Rails::Resolver)
|
44
|
-
options[:custom][:resolver] = Sass::Rails::Resolver.new(@scope)
|
45
|
-
end
|
46
|
-
options
|
47
|
-
end
|
48
|
-
|
49
|
-
private
|
50
|
-
def parse_options(data)
|
51
|
-
data.strip!
|
52
|
-
@options = (data[0] == '{') ? JSON.parse(data) : YAML.load(data)
|
53
|
-
@options = {} unless @options
|
54
|
-
@options.keys.each do |key|
|
55
|
-
@options[key.gsub('-', '_').to_sym] = @options.delete(key)
|
56
|
-
end
|
57
|
-
@options[:syntax] = @options.has_key?(:styleguide_sass) ? :sass : :scss
|
58
|
-
@options[:source] ||= File.basename(file, '.html.lsg')
|
59
|
-
@options[:filename] = file
|
60
|
-
@options[:root] ||= root
|
61
|
-
end
|
62
|
-
|
63
|
-
private
|
64
|
-
def configure_cache
|
65
|
-
return unless @scope.respond_to?(:depend_on)
|
66
|
-
@engine.files.uniq.each do |file|
|
67
|
-
@scope.depend_on file
|
68
|
-
end
|
69
|
-
end
|
70
|
-
|
71
|
-
private
|
72
|
-
def root
|
73
|
-
if @scope.respond_to?(:environment) and @scope.environment.respond_to?(:root)
|
74
|
-
@scope.environment.root
|
75
|
-
else
|
76
|
-
find_root_path
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
private
|
81
|
-
def find_root_path
|
82
|
-
path = @file.nil? ? Dir.pwd : File.dirname(@file)
|
83
|
-
while path.length > 0 do
|
84
|
-
if File.exists?(File.join(path, 'Gemfile')) or File.exists?(File.join(path, '.git'))
|
85
|
-
break
|
86
|
-
end
|
87
|
-
path = File.expand_path('..', path)
|
88
|
-
end
|
89
|
-
path
|
90
|
-
end
|
91
|
-
|
92
|
-
private
|
93
|
-
def render_living_style_guide
|
94
|
-
@engine = ::LivingStyleGuide::Engine.new(@options, sass_options)
|
95
|
-
html = @engine.render
|
96
|
-
configure_cache
|
97
|
-
html
|
98
|
-
end
|
99
|
-
end
|
100
|
-
end
|