livingstyleguide 2.0.0.alpha.10 → 2.0.0.alpha.11

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 (71) hide show
  1. checksums.yaml +4 -4
  2. data/bin/livingstyleguide +5 -6
  3. data/lib/livingstyleguide.rb +18 -12
  4. data/lib/livingstyleguide/command_line_interface.rb +5 -6
  5. data/lib/livingstyleguide/commands.rb +39 -0
  6. data/lib/livingstyleguide/commands/add_wrapper_class.rb +4 -0
  7. data/lib/livingstyleguide/commands/coffee_script.rb +5 -0
  8. data/lib/livingstyleguide/{filters → commands}/colors.rb +1 -1
  9. data/lib/livingstyleguide/{filters → commands}/css.rb +1 -1
  10. data/lib/livingstyleguide/{filters → commands}/data.rb +1 -1
  11. data/lib/livingstyleguide/{filters → commands}/default.rb +1 -1
  12. data/lib/livingstyleguide/{filters → commands}/font_example.rb +2 -2
  13. data/lib/livingstyleguide/commands/full_width.rb +4 -0
  14. data/lib/livingstyleguide/commands/haml.rb +4 -0
  15. data/lib/livingstyleguide/{filters → commands}/import_and_use.rb +5 -5
  16. data/lib/livingstyleguide/{filters → commands}/javascript.rb +1 -1
  17. data/lib/livingstyleguide/{filters → commands}/layout.rb +4 -4
  18. data/lib/livingstyleguide/commands/markdown.rb +4 -0
  19. data/lib/livingstyleguide/{filters → commands}/options.rb +3 -3
  20. data/lib/livingstyleguide/commands/require.rb +4 -0
  21. data/lib/livingstyleguide/{filters → commands}/sass.rb +4 -2
  22. data/lib/livingstyleguide/commands/search_box.rb +10 -0
  23. data/lib/livingstyleguide/{filters → commands}/style.rb +1 -1
  24. data/lib/livingstyleguide/commands/syntax.rb +4 -0
  25. data/lib/livingstyleguide/commands/toggle_code.rb +4 -0
  26. data/lib/livingstyleguide/commands/type.rb +4 -0
  27. data/lib/livingstyleguide/document.rb +29 -26
  28. data/lib/livingstyleguide/integration.rb +4 -4
  29. data/lib/livingstyleguide/integration/compass.rb +2 -3
  30. data/lib/livingstyleguide/integration/rails.rb +3 -6
  31. data/lib/livingstyleguide/integration/sass.rb +1 -1
  32. data/lib/livingstyleguide/integration/sprockets.rb +2 -3
  33. data/lib/livingstyleguide/markdown_extensions.rb +9 -9
  34. data/lib/livingstyleguide/templates/code.html.erb +1 -1
  35. data/lib/livingstyleguide/templates/example.html.erb +1 -1
  36. data/lib/livingstyleguide/templates/javascript.html.erb +1 -1
  37. data/lib/livingstyleguide/templates/layout.html.erb +13 -1
  38. data/lib/livingstyleguide/templates/scripts/copy.js.erb +24 -0
  39. data/lib/livingstyleguide/templates/scripts/copy_code.js.erb +19 -0
  40. data/lib/livingstyleguide/templates/scripts/copy_colors.js.erb +36 -0
  41. data/lib/livingstyleguide/templates/scripts/search.js.erb +66 -0
  42. data/lib/livingstyleguide/templates/scripts/toggle_code.js.erb +53 -0
  43. data/lib/livingstyleguide/templates/search-box.html.erb +1 -68
  44. data/lib/livingstyleguide/templates/toggle-code.html.erb +1 -0
  45. data/lib/livingstyleguide/version.rb +1 -1
  46. data/stylesheets/_livingstyleguide.scss +6 -3
  47. data/stylesheets/livingstyleguide/_before.scss +10 -0
  48. data/stylesheets/livingstyleguide/_code.scss +4 -7
  49. data/stylesheets/livingstyleguide/_color-swatches.scss +15 -16
  50. data/stylesheets/livingstyleguide/_content.scss +5 -5
  51. data/stylesheets/livingstyleguide/_layout.scss +4 -3
  52. data/stylesheets/livingstyleguide/_reset.scss +2 -1
  53. data/stylesheets/livingstyleguide/_toggle-code.scss +21 -0
  54. data/stylesheets/livingstyleguide/_variables.scss +5 -1
  55. metadata +46 -29
  56. data/assets/javascripts/livingstyleguide.js +0 -75
  57. data/lib/livingstyleguide/engine.rb +0 -194
  58. data/lib/livingstyleguide/filters.rb +0 -38
  59. data/lib/livingstyleguide/filters/add_wrapper_class.rb +0 -4
  60. data/lib/livingstyleguide/filters/coffee_script.rb +0 -5
  61. data/lib/livingstyleguide/filters/full_width.rb +0 -4
  62. data/lib/livingstyleguide/filters/haml.rb +0 -4
  63. data/lib/livingstyleguide/filters/markdown.rb +0 -4
  64. data/lib/livingstyleguide/filters/require.rb +0 -4
  65. data/lib/livingstyleguide/filters/search_box.rb +0 -9
  66. data/lib/livingstyleguide/filters/syntax.rb +0 -4
  67. data/lib/livingstyleguide/filters/type.rb +0 -4
  68. data/lib/livingstyleguide/templates/code-example.html.erb +0 -21
  69. data/lib/livingstyleguide/templates/colors-example.html.erb +0 -38
  70. data/lib/livingstyleguide/templates/javascript-copy.html.erb +0 -26
  71. data/stylesheets/livingstyleguide/_search.scss +0 -8
@@ -1,194 +0,0 @@
1
- module LivingStyleGuide
2
-
3
- class Engine
4
- attr_accessor :markdown, :files, :options, :variables
5
-
6
- def initialize(options, sass_options)
7
- @options = LivingStyleGuide.default_options.merge(options)
8
- @sass_options = sass_options
9
- @variables = {}
10
- @files = []
11
- @markdown = ''
12
- end
13
-
14
- def render
15
- template('layout.html.erb')
16
- end
17
-
18
- def files
19
- collect_data if @files.empty?
20
- @files
21
- end
22
-
23
- def variables
24
- collect_data if @variables.empty?
25
- @variables
26
- end
27
-
28
- def markdown
29
- generate_markdown if @markdown.empty?
30
- @markdown
31
- end
32
-
33
- def sass
34
- separator = @options[:syntax] == :sass ? "\n" : ';'
35
- [
36
- %Q(@import "#{@options[:source]}"),
37
- style_variables,
38
- %Q(@import "livingstyleguide"),
39
- @options[:styleguide_sass] || @options[:styleguide_scss]
40
- ].flatten.join(separator)
41
- end
42
-
43
- def css
44
- sass_engine.render
45
- end
46
-
47
- def html
48
- renderer = RedcarpetHTML.new(@options, self)
49
- redcarpet = ::Redcarpet::Markdown.new(renderer, REDCARPET_RENDER_OPTIONS)
50
- redcarpet.render(markdown)
51
- end
52
-
53
- private
54
- def collect_data
55
- traverse_children sass_engine.to_tree
56
- end
57
-
58
- private
59
- def traverse_children(node)
60
- node.children.each do |child|
61
- if child.is_a?(Sass::Tree::ImportNode)
62
- add_file child.imported_file.to_tree
63
- elsif child.is_a?(Sass::Tree::VariableNode)
64
- add_variable child
65
- end
66
- end
67
- end
68
-
69
- private
70
- def add_file(node)
71
- filename = File.expand_path(node.filename)
72
- if local_sass_file?(filename)
73
- @files << filename
74
- traverse_children node
75
- end
76
- end
77
-
78
- private
79
- def add_variable(node)
80
- key = import_filename(node.filename)
81
- @variables[key] ||= []
82
- @variables[key] << node.name
83
- end
84
-
85
- private
86
- def local_sass_file?(filename)
87
- @local_sass_file_regexp ||= /^#{File.expand_path(@options[:root])}\/.+\.s[ac]ss$/
88
- filename =~ @local_sass_file_regexp
89
- end
90
-
91
- private
92
- def import_filename(filename)
93
- @import_filename_regexp ||= /(?<=^|\/)_?([^\/]+?)\.s[ac]ss$/
94
- filename.sub(@import_filename_regexp, '\\1')
95
- end
96
-
97
- private
98
- def sass_engine
99
- return @sass_engine if @sass_engine
100
- sass_options = @sass_options.clone
101
- sass_options[:living_style_guide] = self
102
- @sass_engine = ::Sass::Engine.new(sass, sass_options)
103
- collect_data
104
- @sass_engine
105
- end
106
-
107
- private
108
- def style_variables
109
- return unless @options.has_key?(:style)
110
- @options[:style].map do |key, value|
111
- "$lsg--#{key}: #{value}"
112
- end
113
- end
114
-
115
- private
116
- def generate_markdown
117
- files.clone.each do |sass_filename|
118
- next unless sass_filename.is_a?(String)
119
- glob = "#{sass_filename.sub(/\.s[ac]ss$/, '')}.md"
120
- Dir.glob(glob) do |markdown_filename|
121
- next if files.include?(markdown_filename)
122
-
123
- files << markdown_filename
124
- @markdown << File.read(markdown_filename)
125
- end
126
- end
127
- end
128
-
129
- private
130
- def template(filename)
131
- data = TemplateData.new(self)
132
- erb = File.read(File.join(File.dirname(__FILE__), 'templates', filename))
133
- ERB.new(erb).result(data.get_binding)
134
- end
135
-
136
- end
137
-
138
- class TemplateData
139
- include ERB::Util
140
-
141
- def initialize(engine)
142
- @engine = engine
143
- end
144
-
145
- def get_binding
146
- binding
147
- end
148
-
149
- def title
150
- @engine.options[:title]
151
- end
152
-
153
- def css
154
- @engine.css
155
- end
156
-
157
- def variables
158
- @engine.variables
159
- end
160
-
161
- def html
162
- @engine.html
163
- end
164
-
165
- def head
166
- javascript_tags_for(@engine.options[:javascript_before]).join("\n")
167
- end
168
-
169
- def header
170
- contents = [@engine.options[:header]]
171
- contents.join("\n")
172
- end
173
-
174
- def footer
175
- contents = [@engine.options[:footer]]
176
- contents << javascript_tags_for(@engine.options[:javascript_after])
177
- contents.join("\n")
178
- end
179
-
180
- private
181
- def javascript_tags_for(list)
182
- return [] unless list
183
- list.map do |src|
184
- if src =~ /\.js$/
185
- %Q(<script src="#{src}"></script>)
186
- else
187
- %Q(<script>#{src}</script>)
188
- end
189
- end
190
- end
191
-
192
- end
193
-
194
- end
@@ -1,38 +0,0 @@
1
- class LivingStyleGuide::Filters
2
- attr_reader :document
3
-
4
- def initialize(doc)
5
- @document = doc
6
- end
7
-
8
- def get_binding
9
- binding
10
- end
11
-
12
- def self.add_filter(*keys, &block)
13
- keys.each do |key|
14
- define_method key, &block
15
- end
16
- end
17
- end
18
-
19
- require 'livingstyleguide/filters/options'
20
- require 'livingstyleguide/filters/default'
21
- require 'livingstyleguide/filters/import_and_use'
22
- require 'livingstyleguide/filters/require'
23
- require 'livingstyleguide/filters/full_width'
24
- require 'livingstyleguide/filters/haml'
25
- require 'livingstyleguide/filters/type'
26
- require 'livingstyleguide/filters/markdown'
27
- require 'livingstyleguide/filters/javascript'
28
- require 'livingstyleguide/filters/coffee_script'
29
- require 'livingstyleguide/filters/add_wrapper_class'
30
- require 'livingstyleguide/filters/font_example'
31
- require 'livingstyleguide/filters/colors'
32
- require 'livingstyleguide/filters/css'
33
- require 'livingstyleguide/filters/sass'
34
- require 'livingstyleguide/filters/style'
35
- require 'livingstyleguide/filters/data'
36
- require 'livingstyleguide/filters/layout'
37
- require 'livingstyleguide/filters/syntax'
38
- require 'livingstyleguide/filters/search_box'
@@ -1,4 +0,0 @@
1
- LivingStyleGuide.add_filter :add_wrapper_class do |arguments, options, block|
2
- document.classes << arguments.first
3
- nil
4
- end
@@ -1,5 +0,0 @@
1
- LivingStyleGuide.add_filter :coffee_script, :coffee do |arguments, options, block|
2
- document.type = :coffee
3
- document.template = :javascript
4
- nil
5
- end
@@ -1,4 +0,0 @@
1
- LivingStyleGuide.add_filter :full_width do |arguments, options, block|
2
- document.classes << '-lsg-has-full-width'
3
- nil
4
- end
@@ -1,4 +0,0 @@
1
- LivingStyleGuide.add_filter :haml do |arguments, options, block|
2
- document.type = :haml
3
- nil
4
- end
@@ -1,4 +0,0 @@
1
- LivingStyleGuide.add_filter :markdown do |arguments, options, block|
2
- document.type = :markdown
3
- nil
4
- end
@@ -1,4 +0,0 @@
1
- LivingStyleGuide.add_filter :require do |arguments, options, block|
2
- Kernel.require arguments.first
3
- nil
4
- end
@@ -1,9 +0,0 @@
1
- LivingStyleGuide.default_options[:search_box] = {
2
- placeholder: "Search …"
3
- }
4
-
5
- LivingStyleGuide.add_filter :search_box do |arguments, options, content|
6
- placeholder = options[:placeholder] || LivingStyleGuide.default_options[:search_box][:placeholder]
7
- document.header << ERB.new(File.read("#{File.dirname(__FILE__)}/../templates/search-box.html.erb")).result(binding)
8
- nil
9
- end
@@ -1,4 +0,0 @@
1
- LivingStyleGuide.add_filter :syntax do |arguments, options, block|
2
- document.syntax = arguments.first.to_sym
3
- nil
4
- end
@@ -1,4 +0,0 @@
1
- LivingStyleGuide.add_filter :type do |arguments, options, block|
2
- document.type = arguments.first.to_sym
3
- nil
4
- end
@@ -1,21 +0,0 @@
1
- <script>
2
- document.addEventListener("DOMContentLoaded", function() {
3
- if (testCopy()) {
4
- var code = document.getElementsByClassName("lsg--code");
5
-
6
- for (var i = 0; i < code.length; i++) {
7
- var newButton = createButton()
8
- code[i].appendChild(newButton)
9
- newButton.addEventListener("click", function(event) {
10
- selectElementRange(this.parentNode);
11
- })
12
- }
13
- }
14
- });
15
-
16
- function createButton(copyCodeSelect) {
17
- var buttonCopy = document.createElement("button");
18
- buttonCopy.className = "lsg--button";
19
- return buttonCopy;
20
- }
21
- </script>
@@ -1,38 +0,0 @@
1
- <script>
2
- document.addEventListener("DOMContentLoaded", function() {
3
- if (testCopy()) {
4
- var colorSwatches = document.getElementsByClassName("lsg--color-swatch");
5
- for (var i = 0; i < colorSwatches.length; i++) {
6
- if (!colorSwatches[i].classList.contains("-lsg-empty")) {
7
- colorSwatches[i].appendChild(createSpan());
8
- colorSwatches[i].addEventListener("click", function(event) {
9
- if (event.altKey) {
10
- var copyHexColors = window.getComputedStyle(this, ":after").getPropertyValue("content");
11
- copyHexColors = copyHexColors.replace(/'/g, "");
12
- selectElementRange(createDiv(copyHexColors));
13
- }
14
- else {
15
- selectElementRange(this.children[0]);
16
- }
17
- });
18
- }
19
- }
20
- }
21
- });
22
-
23
- function createDiv(copyHexColors) {
24
- var divCopy = document.createElement("div");
25
- divCopy.className = "-lsg-remove";
26
- divCopy.setAttribute("style", "opacity: 0; position: absolute; top: -10000px");
27
- divCopy.appendChild(document.createTextNode(copyHexColors));
28
- document.body.appendChild(divCopy);
29
- return divCopy
30
- }
31
-
32
- function createSpan() {
33
- var spanHover = document.createElement("span");
34
- spanHover.className = "lsg--copy-color";
35
- spanHover.appendChild(document.createTextNode("Click to copy variable\nAlt + click to copy HEX code"));
36
- return spanHover
37
- }
38
- </script>
@@ -1,26 +0,0 @@
1
- <script>
2
- function selectElementRange(copyElementSelect) {
3
- var range = document.createRange();
4
- range.selectNode(copyElementSelect);
5
- window.getSelection().removeAllRanges();
6
- window.getSelection().addRange(range);
7
-
8
- document.execCommand("copy");
9
-
10
- if (copyElementSelect.classList.contains("-lsg-remove")) {
11
- document.body.removeChild(copyElementSelect);
12
- }
13
-
14
- window.getSelection().removeAllRanges();
15
- }
16
-
17
- function testCopy() {
18
- try {
19
- document.execCommand("copy");
20
- return true;
21
- }
22
- catch(err) {
23
- return false;
24
- }
25
- }
26
- </script>
@@ -1,8 +0,0 @@
1
- .lsg--search {
2
- margin: 0px auto;
3
- width: $lsg--width + ($lsg--width / 2);
4
- }
5
-
6
- .lsg--search-box {
7
- margin: 2 * $lsg--gap-width $lsg--width + ($lsg--width / 4);
8
- }