spike 0.1.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.
Files changed (142) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/.gitmodules +6 -0
  4. data/LICENSE +20 -0
  5. data/README.md +45 -0
  6. data/Rakefile +56 -0
  7. data/VERSION +1 -0
  8. data/bin/spike +5 -0
  9. data/lib/initializers/960.rb +33 -0
  10. data/lib/initializers/jquery.rb +1 -0
  11. data/lib/spike.rb +61 -0
  12. data/lib/template/app.css +0 -0
  13. data/lib/template/css/960/README.txt +52 -0
  14. data/lib/template/css/960/code/css/960.css +1 -0
  15. data/lib/template/css/960/code/css/960_24_col.css +1 -0
  16. data/lib/template/css/960/code/css/reset.css +1 -0
  17. data/lib/template/css/960/code/css/rtl_960.css +1 -0
  18. data/lib/template/css/960/code/css/rtl_960_24_col.css +1 -0
  19. data/lib/template/css/960/code/css/rtl_text.css +1 -0
  20. data/lib/template/css/960/code/css/text.css +1 -0
  21. data/lib/template/css/960/code/css/uncompressed/960.css +628 -0
  22. data/lib/template/css/960/code/css/uncompressed/960_24_col.css +599 -0
  23. data/lib/template/css/960/code/css/uncompressed/demo.css +47 -0
  24. data/lib/template/css/960/code/css/uncompressed/reset.css +53 -0
  25. data/lib/template/css/960/code/css/uncompressed/rtl_960.css +628 -0
  26. data/lib/template/css/960/code/css/uncompressed/rtl_960_24_col.css +599 -0
  27. data/lib/template/css/960/code/css/uncompressed/rtl_text.css +84 -0
  28. data/lib/template/css/960/code/css/uncompressed/text.css +84 -0
  29. data/lib/template/css/960/code/demo.html +538 -0
  30. data/lib/template/css/960/code/demo_24_col.html +411 -0
  31. data/lib/template/css/960/code/img/12_col.gif +0 -0
  32. data/lib/template/css/960/code/img/16_col.gif +0 -0
  33. data/lib/template/css/960/code/img/24_col.gif +0 -0
  34. data/lib/template/css/960/code/rtl_demo.html +538 -0
  35. data/lib/template/css/960/code/rtl_demo_24_col.html +411 -0
  36. data/lib/template/css/960/fireworks_extension/960.gs Grid Commands.mxp +0 -0
  37. data/lib/template/css/960/fireworks_extension/_source/12 columns.jsf +26 -0
  38. data/lib/template/css/960/fireworks_extension/_source/16 columns.jsf +26 -0
  39. data/lib/template/css/960/fireworks_extension/_source/24 columns.jsf +26 -0
  40. data/lib/template/css/960/fireworks_extension/_source/960.gs Grid Commands.mxi +22 -0
  41. data/lib/template/css/960/licenses/GPL_license.txt +674 -0
  42. data/lib/template/css/960/licenses/MIT_license.txt +20 -0
  43. data/lib/template/css/960/sketch_sheets/960_sketch.pdf +0 -0
  44. data/lib/template/css/960/templates/acorn/960_grid_12_col.acorn +0 -0
  45. data/lib/template/css/960/templates/acorn/960_grid_16_col.acorn +0 -0
  46. data/lib/template/css/960/templates/acorn/960_grid_24_col.acorn +0 -0
  47. data/lib/template/css/960/templates/corel_draw/960_grid_12_col.cdt +0 -0
  48. data/lib/template/css/960/templates/corel_draw/960_grid_16_col.cdt +0 -0
  49. data/lib/template/css/960/templates/corel_draw/960_grid_24_col.cdt +0 -0
  50. data/lib/template/css/960/templates/expression_design/960_grid_12_col.design +0 -0
  51. data/lib/template/css/960/templates/expression_design/960_grid_16_col.design +0 -0
  52. data/lib/template/css/960/templates/expression_design/960_grid_24_col.design +0 -0
  53. data/lib/template/css/960/templates/fireworks/960_grid_12_col.png +0 -0
  54. data/lib/template/css/960/templates/fireworks/960_grid_16_col.png +0 -0
  55. data/lib/template/css/960/templates/fireworks/960_grid_24_col.png +0 -0
  56. data/lib/template/css/960/templates/flash/960_grid_12_col.fla +0 -0
  57. data/lib/template/css/960/templates/flash/960_grid_16_col.fla +0 -0
  58. data/lib/template/css/960/templates/flash/960_grid_24_col.fla +0 -0
  59. data/lib/template/css/960/templates/gimp/960_grid_12_col.xcf +0 -0
  60. data/lib/template/css/960/templates/gimp/960_grid_16_col.xcf +0 -0
  61. data/lib/template/css/960/templates/gimp/960_grid_24_col.xcf +0 -0
  62. data/lib/template/css/960/templates/illustrator/960_grid_12_col.ai +372 -0
  63. data/lib/template/css/960/templates/illustrator/960_grid_16_col.ai +361 -0
  64. data/lib/template/css/960/templates/indesign/960_grid_12_col.inx +1197 -0
  65. data/lib/template/css/960/templates/indesign/960_grid_16_col.inx +1214 -0
  66. data/lib/template/css/960/templates/inkscape/960_grid_12_col.svg +217 -0
  67. data/lib/template/css/960/templates/inkscape/960_grid_16_col.svg +265 -0
  68. data/lib/template/css/960/templates/inkscape/960_grid_24_col.svg +174 -0
  69. data/lib/template/css/960/templates/omnigraffle/960_graffle.graffle +0 -0
  70. data/lib/template/css/960/templates/photoshop/960_grid_12_col.psd +0 -0
  71. data/lib/template/css/960/templates/photoshop/960_grid_16_col.psd +0 -0
  72. data/lib/template/css/960/templates/photoshop/960_grid_24_col.psd +0 -0
  73. data/lib/template/css/960/templates/visio/960_visio.vsd +0 -0
  74. data/lib/template/css/blueprint/AUTHORS.textile +42 -0
  75. data/lib/template/css/blueprint/CHANGELOG +159 -0
  76. data/lib/template/css/blueprint/LICENSE +22 -0
  77. data/lib/template/css/blueprint/README.textile +81 -0
  78. data/lib/template/css/blueprint/TUTORIAL.textile +206 -0
  79. data/lib/template/css/blueprint/blueprint/ie.css +35 -0
  80. data/lib/template/css/blueprint/blueprint/plugins/buttons/icons/cross.png +0 -0
  81. data/lib/template/css/blueprint/blueprint/plugins/buttons/icons/key.png +0 -0
  82. data/lib/template/css/blueprint/blueprint/plugins/buttons/icons/tick.png +0 -0
  83. data/lib/template/css/blueprint/blueprint/plugins/buttons/readme.txt +32 -0
  84. data/lib/template/css/blueprint/blueprint/plugins/buttons/screen.css +97 -0
  85. data/lib/template/css/blueprint/blueprint/plugins/fancy-type/readme.txt +14 -0
  86. data/lib/template/css/blueprint/blueprint/plugins/fancy-type/screen.css +71 -0
  87. data/lib/template/css/blueprint/blueprint/plugins/link-icons/icons/doc.png +0 -0
  88. data/lib/template/css/blueprint/blueprint/plugins/link-icons/icons/email.png +0 -0
  89. data/lib/template/css/blueprint/blueprint/plugins/link-icons/icons/external.png +0 -0
  90. data/lib/template/css/blueprint/blueprint/plugins/link-icons/icons/feed.png +0 -0
  91. data/lib/template/css/blueprint/blueprint/plugins/link-icons/icons/im.png +0 -0
  92. data/lib/template/css/blueprint/blueprint/plugins/link-icons/icons/pdf.png +0 -0
  93. data/lib/template/css/blueprint/blueprint/plugins/link-icons/icons/visited.png +0 -0
  94. data/lib/template/css/blueprint/blueprint/plugins/link-icons/icons/xls.png +0 -0
  95. data/lib/template/css/blueprint/blueprint/plugins/link-icons/readme.txt +18 -0
  96. data/lib/template/css/blueprint/blueprint/plugins/link-icons/screen.css +40 -0
  97. data/lib/template/css/blueprint/blueprint/plugins/rtl/readme.txt +10 -0
  98. data/lib/template/css/blueprint/blueprint/plugins/rtl/screen.css +110 -0
  99. data/lib/template/css/blueprint/blueprint/print.css +29 -0
  100. data/lib/template/css/blueprint/blueprint/screen.css +258 -0
  101. data/lib/template/css/blueprint/blueprint/src/forms.css +65 -0
  102. data/lib/template/css/blueprint/blueprint/src/grid.css +280 -0
  103. data/lib/template/css/blueprint/blueprint/src/grid.png +0 -0
  104. data/lib/template/css/blueprint/blueprint/src/ie.css +76 -0
  105. data/lib/template/css/blueprint/blueprint/src/print.css +85 -0
  106. data/lib/template/css/blueprint/blueprint/src/reset.css +45 -0
  107. data/lib/template/css/blueprint/blueprint/src/typography.css +106 -0
  108. data/lib/template/css/blueprint/lib/blueprint/blueprint.rb +39 -0
  109. data/lib/template/css/blueprint/lib/blueprint/compressor.rb +290 -0
  110. data/lib/template/css/blueprint/lib/blueprint/core_ext.rb +39 -0
  111. data/lib/template/css/blueprint/lib/blueprint/css_parser.rb +72 -0
  112. data/lib/template/css/blueprint/lib/blueprint/custom_layout.rb +72 -0
  113. data/lib/template/css/blueprint/lib/blueprint/grid.css.erb +146 -0
  114. data/lib/template/css/blueprint/lib/blueprint/grid_builder.rb +63 -0
  115. data/lib/template/css/blueprint/lib/blueprint/namespace.rb +38 -0
  116. data/lib/template/css/blueprint/lib/blueprint/semantic_class_names.rb +64 -0
  117. data/lib/template/css/blueprint/lib/blueprint/validate/COPYRIGHT.html +93 -0
  118. data/lib/template/css/blueprint/lib/blueprint/validate/JIGSAW_COPYRIGHT +64 -0
  119. data/lib/template/css/blueprint/lib/blueprint/validate/README.html +83 -0
  120. data/lib/template/css/blueprint/lib/blueprint/validate/XERCES_COPYING.txt +56 -0
  121. data/lib/template/css/blueprint/lib/blueprint/validate/css-validator-javadoc.jar +0 -0
  122. data/lib/template/css/blueprint/lib/blueprint/validate/css-validator.jar +0 -0
  123. data/lib/template/css/blueprint/lib/blueprint/validate/jigsaw.jar +0 -0
  124. data/lib/template/css/blueprint/lib/blueprint/validate/xerces.jar +0 -0
  125. data/lib/template/css/blueprint/lib/blueprint/validator.rb +49 -0
  126. data/lib/template/css/blueprint/lib/compress.rb +167 -0
  127. data/lib/template/css/blueprint/lib/settings.example.yml +33 -0
  128. data/lib/template/css/blueprint/lib/validate.rb +15 -0
  129. data/lib/template/css/blueprint/templates/psd/fixed-width.psd +0 -0
  130. data/lib/template/css/blueprint/tests/index.html +83 -0
  131. data/lib/template/css/blueprint/tests/parts/elements.html +247 -0
  132. data/lib/template/css/blueprint/tests/parts/forms.html +191 -0
  133. data/lib/template/css/blueprint/tests/parts/grid.html +163 -0
  134. data/lib/template/css/blueprint/tests/parts/sample.html +75 -0
  135. data/lib/template/css/blueprint/tests/parts/test-small.jpg +0 -0
  136. data/lib/template/css/blueprint/tests/parts/test.jpg +0 -0
  137. data/lib/template/css/blueprint/tests/parts/valid.png +0 -0
  138. data/lib/template/index.html +16 -0
  139. data/spike.gemspec +190 -0
  140. data/test/helper.rb +10 -0
  141. data/test/test_spike.rb +7 -0
  142. metadata +227 -0
@@ -0,0 +1,39 @@
1
+ class String
2
+ # see if string has any content
3
+ def blank?; self.length.zero?; end
4
+
5
+ # strip space after :, remove newlines, replace multiple spaces with only one space, remove comments
6
+ def strip_space!
7
+ replace self.gsub(/:\s*/, ":").gsub(/\n/, "").gsub(/\s+/, " ").gsub(/(\/\*).*?(\*\/)/, "")
8
+ end
9
+
10
+ # remove newlines, insert space after comma, replace two spaces with one space after comma
11
+ def strip_selector_space!
12
+ replace self.gsub(/\n/, "").gsub(",", ", ").gsub(", ", ", ")
13
+ end
14
+
15
+ # remove leading whitespace, remove end whitespace
16
+ def strip_side_space!
17
+ replace self.gsub(/^\s+/, "").gsub(/\s+$/, $/)
18
+ end
19
+ end
20
+
21
+ class NilClass
22
+ def blank?
23
+ true
24
+ end
25
+ end
26
+
27
+ class File
28
+ # string output from file
29
+ def self.path_to_string(path)
30
+ File.new(path).read
31
+ end
32
+
33
+ # saves a string to a specified file path
34
+ def self.string_to_file(string, path)
35
+ directory = File.dirname(path)
36
+ FileUtils.mkdir_p directory unless File.directory?(directory)
37
+ File.open(path, "w") { |f| f << string }
38
+ end
39
+ end
@@ -0,0 +1,72 @@
1
+ module Blueprint
2
+ # Strips out most whitespace and can return a hash or string of parsed data
3
+ class CSSParser
4
+ attr_accessor :namespace
5
+ attr_reader :css_output, :raw_data
6
+
7
+ # ==== Options
8
+ # * <tt>css_string</tt> String of CSS data
9
+ # * <tt>options</tt>
10
+ # * <tt>:namespace</tt> -- Namespace to use when generating output
11
+ def initialize(css_string = "", options = {})
12
+ @raw_data = css_string
13
+ @namespace = options[:namespace] || ""
14
+ compress(@raw_data)
15
+ end
16
+
17
+ # returns string of CSS which can be saved to a file or otherwise
18
+ def to_s
19
+ @css_output
20
+ end
21
+
22
+ # returns a hash of all CSS data passed
23
+ #
24
+ # ==== Options
25
+ # * <tt>data</tt> -- CSS string; defaults to string passed into the constructor
26
+ def parse(data = nil)
27
+ data ||= @raw_data
28
+
29
+ # wrapper array holding hashes of css tags/rules
30
+ css_out = []
31
+ # clear initial spaces
32
+ data.strip_side_space!.strip_space!
33
+
34
+ # split on end of assignments
35
+ data.split('}').each_with_index do |assignments, index|
36
+ # split again to separate tags from rules
37
+ tags, styles = assignments.split('{').map{|a| a.strip_side_space!}
38
+ unless styles.blank?
39
+ # clean up tags and apply namespaces as needed
40
+ tags.strip_selector_space!
41
+ tags.gsub!(/\./, ".#{namespace}") unless namespace.blank?
42
+
43
+ # split on semicolon to iterate through each rule
44
+ rules = []
45
+ styles.split(";").each do |key_val_pair|
46
+ unless key_val_pair.nil?
47
+ # split by property/val and append to rules array with correct declaration
48
+ property, value = key_val_pair.split(":", 2).map {|kv| kv.strip_side_space! }
49
+ break unless property && value
50
+ rules << "#{property}:#{value};"
51
+ end
52
+ end
53
+ # now keeps track of index as hashes don't keep track of position
54
+ # (which will be fixed in Ruby 1.9)
55
+ unless tags.blank? || rules.to_s.blank?
56
+ css_out << {:tags => tags, :rules => rules.join, :idx => index}
57
+ end
58
+ end
59
+ end
60
+ css_out
61
+ end
62
+
63
+ private
64
+
65
+ def compress(data)
66
+ @css_output = ""
67
+ parse(data).flatten.sort_by {|i| i[:idx]}.each do |line|
68
+ @css_output += "#{line[:tags]} {#{line[:rules]}}\n"
69
+ end
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,72 @@
1
+ require 'erb'
2
+ module Blueprint
3
+ # Generates a custom grid file, using ERB to evaluate custom settings
4
+ class CustomLayout
5
+ # path to ERB file used for CSS template
6
+ CSS_ERB_FILE = File.join(Blueprint::LIB_PATH, 'grid.css.erb')
7
+
8
+ attr_writer :column_count, :column_width, :gutter_width, :input_padding,
9
+ :input_border
10
+
11
+ # Column count of generated CSS. Returns itself or Blueprint's default
12
+ def column_count
13
+ (@column_count || Blueprint::COLUMN_COUNT).to_i
14
+ end
15
+
16
+ # Column width (in pixels) of generated CSS. Returns itself or Blueprint's default
17
+ def column_width
18
+ (@column_width || Blueprint::COLUMN_WIDTH).to_i
19
+ end
20
+
21
+ # Gutter width (in pixels) of generated CSS. Returns itself or Blueprint's default
22
+ def gutter_width
23
+ (@gutter_width || Blueprint::GUTTER_WIDTH).to_i
24
+ end
25
+
26
+ def input_padding
27
+ (@input_padding || Blueprint::INPUT_PADDING).to_i
28
+ end
29
+
30
+ def input_border
31
+ (@input_border || Blueprint::INPUT_BORDER).to_i
32
+ end
33
+
34
+ # Returns page width (in pixels)
35
+ def page_width
36
+ column_count * (column_width + gutter_width) - gutter_width
37
+ end
38
+
39
+ # ==== Options
40
+ # * <tt>options</tt>
41
+ # * <tt>:column_count</tt> -- Sets the column count of generated CSS
42
+ # * <tt>:column_width</tt> -- Sets the column width (in pixels) of generated CSS
43
+ # * <tt>:gutter_width</tt> -- Sets the gutter width (in pixels) of generated CSS
44
+ # * <tt>:input_padding</tt> -- Sets the input padding width (in pixels) of generated CSS
45
+ # * <tt>:input_border</tt> -- Sets the border width (in pixels) of generated CSS
46
+ def initialize(options = {})
47
+ @column_count = options[:column_count]
48
+ @column_width = options[:column_width]
49
+ @gutter_width = options[:gutter_width]
50
+ @input_padding = options[:input_padding]
51
+ @input_border = options[:input_border]
52
+ end
53
+
54
+ # Boolean value if current settings are Blueprint's defaults
55
+ def default?
56
+ self.column_width == Blueprint::COLUMN_WIDTH &&
57
+ self.column_count == Blueprint::COLUMN_COUNT &&
58
+ self.gutter_width == Blueprint::GUTTER_WIDTH &&
59
+ self.input_padding == Blueprint::INPUT_PADDING &&
60
+ self.input_border == Blueprint::INPUT_BORDER
61
+ end
62
+
63
+ # Loads grid.css.erb file, binds it to current instance, and returns output
64
+ def generate_grid_css
65
+ # loads up erb template to evaluate custom widths
66
+ css = ERB::new(File.path_to_string(CustomLayout::CSS_ERB_FILE))
67
+
68
+ # bind it to this instance
69
+ css.result(binding)
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,146 @@
1
+ /* --------------------------------------------------------------
2
+
3
+ grid.css
4
+ * Sets up an easy-to-use grid of 24 columns.
5
+
6
+ By default, the grid is 950px wide, with 24 columns
7
+ spanning 30px, and a 10px margin between columns.
8
+
9
+ If you need fewer or more columns, namespaces or semantic
10
+ element names, use the compressor script (lib/compress.rb)
11
+
12
+ -------------------------------------------------------------- */
13
+
14
+ /* A container should group all your columns. */
15
+ .container {
16
+ width: <%= page_width %>px;
17
+ margin: 0 auto;
18
+ }
19
+
20
+ /* Use this class on any .span-# / .container to see the grid. */
21
+ .showgrid {
22
+ background: url(src/grid.png);
23
+ }
24
+
25
+
26
+ /* Columns
27
+ -------------------------------------------------------------- */
28
+
29
+ /* Sets up basic grid floating and margin. */
30
+ .column, <%= (1..column_count).map {|c| ".span-#{c}" }.join(", ") %> {
31
+ float: left;
32
+ margin-right: <%= gutter_width %>px;
33
+ }
34
+
35
+ /* The last column in a row needs this class. */
36
+ .last { margin-right: 0; }
37
+
38
+ /* Use these classes to set the width of a column. */
39
+ .span-1 {width: <%= column_width %>px;}
40
+ <% (2..column_count-1).each do |column| %>
41
+ .span-<%= column %> {width: <%= (column_width + ((column - 1) * (column_width + gutter_width))).to_i %>px;<%= "margin-right: 0;" if column == column_count %>}<% end %>
42
+ .span-<%= column_count %> {width:<%= page_width %>px; margin-right:0;}
43
+
44
+ /* Use these classes to set the width of an input. */
45
+ <%= (1..column_count).map {|column| "input.span-#{column}, textarea.span-#{column}"}.join(", ") %> {
46
+ border-left-width: <%= input_border %>px;
47
+ border-right-width: <%= input_border %>px;
48
+ padding-left: <%= input_padding %>px;
49
+ padding-right: <%= input_padding %>px;
50
+ }
51
+ <% (1..column_count).each do |column| %>
52
+ input.span-<%= column %>, textarea.span-<%= column %> { width: <%= ((column_width + gutter_width) * (column - 1) + column_width - 2*(input_padding + input_border))%>px; }<% end %>
53
+
54
+ /* Add these to a column to append empty cols. */
55
+ <% (1..(column_count-1)).each do |column| %>
56
+ .append-<%= column %> { padding-right: <%= (column * (column_width + gutter_width)).to_i %>px;}<% end %>
57
+
58
+ /* Add these to a column to prepend empty cols. */
59
+ <% (1..(column_count-1)).each do |column| %>
60
+ .prepend-<%= column %> { padding-left: <%= (column * (column_width + gutter_width)).to_i %>px;}<% end %>
61
+
62
+
63
+ /* Border on right hand side of a column. */
64
+ .border {
65
+ padding-right: <%= (gutter_width * 0.5 - 1).to_i %>px;
66
+ margin-right: <%= (gutter_width * 0.5).to_i %>px;
67
+ border-right: 1px solid #eee;
68
+ }
69
+
70
+ /* Border with more whitespace, spans one column. */
71
+ .colborder {
72
+ padding-right: <%= (column_width + 2*gutter_width - 1)/2.to_i %>px;
73
+ margin-right: <%= (column_width + 2 * gutter_width)/2.to_i %>px;
74
+ border-right: 1px solid #eee;
75
+ }
76
+
77
+
78
+ /* Use these classes on an element to push it into the
79
+ next column, or to pull it into the previous column. */
80
+
81
+ <% (1..column_count).each do |column| %>
82
+ .pull-<%= column %> { margin-left: -<%= (column * (column_width + gutter_width)).to_i %>px; }<% end %>
83
+
84
+ <%= (1..column_count).map {|c| ".pull-#{c}" }.join(", ") %> {float: left; position:relative;}
85
+
86
+ <% (1..(column_count)).each do |column| %>
87
+ .push-<%= column %> { margin: 0 -<%= (column * (column_width + gutter_width)).to_i %>px 1.5em <%= (column * (column_width + gutter_width)).to_i %>px; }<% end %>
88
+
89
+ <%= (1..column_count).map {|c| ".push-#{c}" }.join(", ") %> {float: right; position:relative;}
90
+
91
+
92
+ /* Misc classes and elements
93
+ -------------------------------------------------------------- */
94
+
95
+ /* In case you need to add a gutter above/below an element */
96
+ .prepend-top {
97
+ margin-top:1.5em;
98
+ }
99
+ .append-bottom {
100
+ margin-bottom:1.5em;
101
+ }
102
+
103
+ /* Use a .box to create a padded box inside a column. */
104
+ .box {
105
+ padding: 1.5em;
106
+ margin-bottom: 1.5em;
107
+ background: #E5ECF9;
108
+ }
109
+
110
+ /* Use this to create a horizontal ruler across a column. */
111
+ hr {
112
+ background: #ddd;
113
+ color: #ddd;
114
+ clear: both;
115
+ float: none;
116
+ width: 100%;
117
+ height: .1em;
118
+ margin: 0 0 1.45em;
119
+ border: none;
120
+ }
121
+
122
+ hr.space {
123
+ background: #fff;
124
+ color: #fff;
125
+ visibility: hidden;
126
+ }
127
+
128
+
129
+ /* Clearing floats without extra markup
130
+ Based on How To Clear Floats Without Structural Markup by PiE
131
+ [http://www.positioniseverything.net/easyclearing.html] */
132
+
133
+ .clearfix:after, .container:after {
134
+ content: "\0020";
135
+ display: block;
136
+ height: 0;
137
+ clear: both;
138
+ visibility: hidden;
139
+ overflow:hidden;
140
+ }
141
+ .clearfix, .container {display: block;}
142
+
143
+ /* Regular clearing
144
+ apply to column that should drop below previous ones. */
145
+
146
+ .clear { clear:both; }
@@ -0,0 +1,63 @@
1
+ begin
2
+ require "rubygems"
3
+ gem "rmagick"
4
+ require "rvg/rvg"
5
+ rescue Exception => e
6
+ puts " #{"*" * 100}"
7
+ puts " **"
8
+ puts " ** Warning:"
9
+ puts " ** Could not load the Rmagick gem. Please check your installation."
10
+ puts " ** grid.png will not be generated."
11
+ puts " **"
12
+ puts " #{"*" * 100}\n"
13
+ end
14
+
15
+ module Blueprint
16
+ # Uses ImageMagick and RMagick to generate grid.png file
17
+ class GridBuilder
18
+ begin
19
+ include Magick
20
+ rescue Exception => e
21
+ end
22
+
23
+ attr_reader :column_width, :gutter_width, :output_path, :able_to_generate
24
+
25
+ # ==== Options
26
+ # * <tt>options</tt>
27
+ # * <tt>:column_width</tt> -- Width (in pixels) of current grid column
28
+ # * <tt>:gutter_width</tt> -- Width (in pixels) of current grid gutter
29
+ # * <tt>:output_path</tt> -- Output path of grid.png file
30
+ def initialize(options={})
31
+ @able_to_generate = Magick::Long_version rescue false
32
+ return unless @able_to_generate
33
+ @column_width = options[:column_width] || Blueprint::COLUMN_WIDTH
34
+ @gutter_width = options[:gutter_width] || Blueprint::GUTTER_WIDTH
35
+ @output_path = options[:output_path] || Blueprint::SOURCE_PATH
36
+ end
37
+
38
+ # generates (overwriting if necessary) grid.png image to be tiled in background
39
+ def generate!
40
+ return false unless self.able_to_generate
41
+ total_width = self.column_width + self.gutter_width
42
+ height = 18
43
+ RVG::dpi = 100
44
+
45
+ width_in_inches = (total_width.to_f/RVG::dpi).in
46
+ height_in_inches = (height.to_f/RVG::dpi).in
47
+ rvg = RVG.new(width_in_inches, height_in_inches).viewbox(0, 0, total_width, height) do |canvas|
48
+ canvas.background_fill = "white"
49
+
50
+ canvas.g do |column|
51
+ column.rect(self.column_width - 1, height).styles(:fill => "#e8effb")
52
+ end
53
+
54
+ canvas.g do |baseline|
55
+ baseline.line(0, (height - 1), total_width, (height - 1)).styles(:fill => "#e9e9e9")
56
+ end
57
+ end
58
+
59
+ FileUtils.mkdir self.output_path unless File.exists? self.output_path
60
+ rvg.draw.write(File.join(self.output_path, "grid.png"))
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,38 @@
1
+ module Blueprint
2
+ class Namespace
3
+
4
+ # Read html to string, remove namespace if any,
5
+ # set the new namespace, and update the test file.
6
+ def initialize(path, namespace)
7
+ html = File.path_to_string(path)
8
+ remove_current_namespace(html)
9
+ add_namespace(html, namespace)
10
+ File.string_to_file(html, path)
11
+ end
12
+
13
+ # adds namespace to BP classes in a html file
14
+ def add_namespace(html, namespace)
15
+ html.gsub!(/(class=")([a-zA-Z0-9\-_ ]*)(")/) do |m|
16
+ classes = m.to_s.split('"')[1].split(" ")
17
+ classes.map! { |c| c = namespace + c }
18
+ 'class="' + classes.join(' ') + '"'
19
+ end
20
+ html
21
+ end
22
+
23
+ # removes a namespace from a string of html
24
+ def remove_current_namespace(html)
25
+ current = current_namespace(html)
26
+ html.gsub!(current, "")
27
+ html
28
+ end
29
+
30
+ # returns current namespace in test files
31
+ # based on container class
32
+ def current_namespace(html)
33
+ html =~ /class="([\S]+)container/
34
+ current_namespace = $1 if $1
35
+ current_namespace || ""
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,64 @@
1
+ module Blueprint
2
+ # parses a hash of key/value pairs, key being output CSS selectors, value
3
+ # being a list of CSS selectors to draw from
4
+ class SemanticClassNames
5
+ attr_accessor :class_assignments
6
+ attr_reader :namespace, :source_file
7
+
8
+ # ==== Options
9
+ # * <tt>options</tt>
10
+ # * <tt>:namespace</tt> -- Namespace to be used when matching CSS selectors to draw from
11
+ # * <tt>:source_file</tt> -- Source file to use as reference of CSS selectors. Defaults to Blueprint's generated screen.css
12
+ # * <tt>:class_assignments</tt> -- Hash of key/value pairs, key being output CSS selectors, value being a list of CSS selectors to draw from
13
+ def initialize(options = {})
14
+ @namespace = options[:namespace] || ""
15
+ @source_file = options[:source_file] || File.join(Blueprint::BLUEPRINT_ROOT_PATH, "screen.css")
16
+ self.class_assignments = options[:class_assignments] || {}
17
+ end
18
+
19
+ # Returns a CSS string of semantic selectors and associated styles
20
+ # ==== Options
21
+ # * <tt>assignments</tt> -- Hash of key/value pairs, key being output CSS selectors, value being a list of CSS selectors to draw from; defaults to what was passed in constructor or empty hash
22
+ def css_from_assignments(assignments = {})
23
+ assignments ||= self.class_assignments
24
+
25
+ # define a wrapper hash to hold all the new CSS assignments
26
+ output_css = {}
27
+
28
+ #loads full stylesheet into an array of hashes
29
+ blueprint_assignments = CSSParser.new(File.path_to_string(self.source_file)).parse
30
+
31
+ # iterates through each class assignment ('#footer' => '.span-24', '#header' => '.span-24')
32
+ assignments.each do |semantic_class, blueprint_classes|
33
+ # gathers all BP classes we're going to be mimicing
34
+ blueprint_classes = blueprint_classes.split(/,|\s/).select {|c| !c.blank? }.flatten.map {|c| c.strip }
35
+ classes = []
36
+ # loop through each BP class, grabbing the full hash (containing tags, index, and CSS rules)
37
+ blueprint_classes.each do |bp_class|
38
+ match = if bp_class.include?(".")
39
+ bp_class.gsub(".", ".#{self.namespace}")
40
+ else
41
+ ".#{self.namespace}#{bp_class}"
42
+ end
43
+ classes << blueprint_assignments.select do |line|
44
+ line[:tags] =~ Regexp.new(/^([\w\.\-\:]+, ?)*#{match}(, ?[\w\.\-\:]+)*$/)
45
+ end.uniq
46
+ end
47
+
48
+ # clean up the array
49
+ classes = classes.flatten.uniq
50
+
51
+ # set the semantic class to the rules gathered in classes, sorted by index
52
+ # this way, the styles will be applied in the correct order from top of file to bottom
53
+ output_css[semantic_class] = "#{classes.sort_by {|i| i[:idx] }.map {|i| i[:rules] }}"
54
+ end
55
+
56
+ # return the css in proper format
57
+ css = ""
58
+ output_css.each do |tags, rules|
59
+ css += "#{tags} {#{rules}}\n"
60
+ end
61
+ css
62
+ end
63
+ end
64
+ end