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,45 @@
1
+ /* --------------------------------------------------------------
2
+
3
+ reset.css
4
+ * Resets default browser CSS.
5
+
6
+ -------------------------------------------------------------- */
7
+
8
+ html, body, div, span, object, iframe,
9
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
10
+ a, abbr, acronym, address, code,
11
+ del, dfn, em, img, q, dl, dt, dd, ol, ul, li,
12
+ fieldset, form, label, legend,
13
+ table, caption, tbody, tfoot, thead, tr, th, td,
14
+ article, aside, dialog, figure, footer, header,
15
+ hgroup, nav, section {
16
+ margin: 0;
17
+ padding: 0;
18
+ border: 0;
19
+ font-weight: inherit;
20
+ font-style: inherit;
21
+ font-size: 100%;
22
+ font-family: inherit;
23
+ vertical-align: baseline;
24
+ }
25
+
26
+ article, aside, dialog, figure, footer, header,
27
+ hgroup, nav, section {
28
+ display:block;
29
+ }
30
+
31
+ body {
32
+ line-height: 1.5;
33
+ }
34
+
35
+ /* Tables still need 'cellspacing="0"' in the markup. */
36
+ table { border-collapse: separate; border-spacing: 0; }
37
+ caption, th, td { text-align: left; font-weight: normal; }
38
+ table, td, th { vertical-align: middle; }
39
+
40
+ /* Remove possible quote marks (") from <q>, <blockquote>. */
41
+ blockquote:before, blockquote:after, q:before, q:after { content: ""; }
42
+ blockquote, q { quotes: "" ""; }
43
+
44
+ /* Remove annoying border on linked images. */
45
+ a img { border: none; }
@@ -0,0 +1,106 @@
1
+ /* --------------------------------------------------------------
2
+
3
+ typography.css
4
+ * Sets up some sensible default typography.
5
+
6
+ -------------------------------------------------------------- */
7
+
8
+ /* Default font settings.
9
+ The font-size percentage is of 16px. (0.75 * 16px = 12px) */
10
+ html { font-size:100.01%; }
11
+ body {
12
+ font-size: 75%;
13
+ color: #222;
14
+ background: #fff;
15
+ font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
16
+ }
17
+
18
+
19
+ /* Headings
20
+ -------------------------------------------------------------- */
21
+
22
+ h1,h2,h3,h4,h5,h6 { font-weight: normal; color: #111; }
23
+
24
+ h1 { font-size: 3em; line-height: 1; margin-bottom: 0.5em; }
25
+ h2 { font-size: 2em; margin-bottom: 0.75em; }
26
+ h3 { font-size: 1.5em; line-height: 1; margin-bottom: 1em; }
27
+ h4 { font-size: 1.2em; line-height: 1.25; margin-bottom: 1.25em; }
28
+ h5 { font-size: 1em; font-weight: bold; margin-bottom: 1.5em; }
29
+ h6 { font-size: 1em; font-weight: bold; }
30
+
31
+ h1 img, h2 img, h3 img,
32
+ h4 img, h5 img, h6 img {
33
+ margin: 0;
34
+ }
35
+
36
+
37
+ /* Text elements
38
+ -------------------------------------------------------------- */
39
+
40
+ p { margin: 0 0 1.5em; }
41
+ p img.left { float: left; margin: 1.5em 1.5em 1.5em 0; padding: 0; }
42
+ p img.right { float: right; margin: 1.5em 0 1.5em 1.5em; }
43
+
44
+ a:focus,
45
+ a:hover { color: #000; }
46
+ a { color: #009; text-decoration: underline; }
47
+
48
+ blockquote { margin: 1.5em; color: #666; font-style: italic; }
49
+ strong { font-weight: bold; }
50
+ em,dfn { font-style: italic; }
51
+ dfn { font-weight: bold; }
52
+ sup, sub { line-height: 0; }
53
+
54
+ abbr,
55
+ acronym { border-bottom: 1px dotted #666; }
56
+ address { margin: 0 0 1.5em; font-style: italic; }
57
+ del { color:#666; }
58
+
59
+ pre { margin: 1.5em 0; white-space: pre; }
60
+ pre,code,tt { font: 1em 'andale mono', 'lucida console', monospace; line-height: 1.5; }
61
+
62
+
63
+ /* Lists
64
+ -------------------------------------------------------------- */
65
+
66
+ li ul,
67
+ li ol { margin: 0; }
68
+ ul, ol { margin: 0 1.5em 1.5em 0; padding-left: 3.333em; }
69
+
70
+ ul { list-style-type: disc; }
71
+ ol { list-style-type: decimal; }
72
+
73
+ dl { margin: 0 0 1.5em 0; }
74
+ dl dt { font-weight: bold; }
75
+ dd { margin-left: 1.5em;}
76
+
77
+
78
+ /* Tables
79
+ -------------------------------------------------------------- */
80
+
81
+ table { margin-bottom: 1.4em; width:100%; }
82
+ th { font-weight: bold; }
83
+ thead th { background: #c3d9ff; }
84
+ th,td,caption { padding: 4px 10px 4px 5px; }
85
+ tr.even td { background: #e5ecf9; }
86
+ tfoot { font-style: italic; }
87
+ caption { background: #eee; }
88
+
89
+
90
+ /* Misc classes
91
+ -------------------------------------------------------------- */
92
+
93
+ .small { font-size: .8em; margin-bottom: 1.875em; line-height: 1.875em; }
94
+ .large { font-size: 1.2em; line-height: 2.5em; margin-bottom: 1.25em; }
95
+ .hide { display: none; }
96
+
97
+ .quiet { color: #666; }
98
+ .loud { color: #000; }
99
+ .highlight { background:#ff0; }
100
+ .added { background:#060; color: #fff; }
101
+ .removed { background:#900; color: #fff; }
102
+
103
+ .first { margin-left:0; padding-left:0; }
104
+ .last { margin-right:0; padding-right:0; }
105
+ .top { margin-top:0; padding-top:0; }
106
+ .bottom { margin-bottom:0; padding-bottom:0; }
@@ -0,0 +1,39 @@
1
+ require 'fileutils'
2
+ module Blueprint
3
+ # path to the root Blueprint directory
4
+ ROOT_PATH = File.join(File.expand_path(File.dirname(__FILE__)), "../../")
5
+ # path to where the Blueprint CSS files are stored
6
+ BLUEPRINT_ROOT_PATH = File.join(Blueprint::ROOT_PATH, "blueprint")
7
+ # path to where the Blueprint CSS raw CSS files are stored
8
+ SOURCE_PATH = File.join(Blueprint::BLUEPRINT_ROOT_PATH, "src")
9
+ # path to where the Blueprint CSS generated test files are stored
10
+ TEST_PATH = File.join(Blueprint::ROOT_PATH, "tests")
11
+ # path to the root of the Blueprint scripts
12
+ LIB_PATH = File.join(Blueprint::ROOT_PATH, "lib", "blueprint")
13
+ # path to where Blueprint plugins are stored
14
+ PLUGINS_PATH = File.join(Blueprint::BLUEPRINT_ROOT_PATH, "plugins")
15
+ # settings YAML file where custom user settings are saved
16
+ SETTINGS_FILE = File.join(Blueprint::ROOT_PATH, "lib", "settings.yml")
17
+ # path to validator jar file to validate generated CSS files
18
+ VALIDATOR_FILE = File.join(Blueprint::LIB_PATH, "validate", "css-validator.jar")
19
+ # hash of compressed and source CSS files
20
+ CSS_FILES = {
21
+ "screen.css" => ["reset.css", "typography.css", "forms.css", "grid.css"],
22
+ "print.css" => ["print.css"],
23
+ "ie.css" => ["ie.css"]
24
+ }
25
+
26
+ # default number of columns for Blueprint layout
27
+ COLUMN_COUNT = 24
28
+ # default column width (in pixels) for Blueprint layout
29
+ COLUMN_WIDTH = 30
30
+ # default gutter width (in pixels) for Blueprint layout
31
+ GUTTER_WIDTH = 10
32
+
33
+ INPUT_PADDING = 5
34
+ INPUT_BORDER = 1
35
+ end
36
+
37
+ Dir["#{File.join(Blueprint::LIB_PATH)}/*"].each do |file|
38
+ require file if file =~ /\.rb$/ && file !~ /blueprint\.rb/
39
+ end
@@ -0,0 +1,290 @@
1
+ require "yaml"
2
+ require "optparse"
3
+ module Blueprint
4
+ class Compressor
5
+ TEST_FILES = ["index.html",
6
+ "parts/elements.html",
7
+ "parts/forms.html",
8
+ "parts/grid.html",
9
+ "parts/sample.html"]
10
+
11
+ attr_accessor :namespace, :custom_css, :custom_layout, :semantic_classes, :project_name, :plugins
12
+ attr_reader :custom_path, :loaded_from_settings, :destination_path, :script_name
13
+
14
+ # overridden setter method for destination_path
15
+ # also sets custom_path flag on Blueprint::Compressor instance
16
+ def destination_path=(path)
17
+ @destination_path = path
18
+ @custom_path = @destination_path != Blueprint::BLUEPRINT_ROOT_PATH
19
+ end
20
+
21
+ # constructor
22
+ def initialize
23
+ # set up defaults
24
+ @script_name = File.basename($0)
25
+ @loaded_from_settings = false
26
+ @settings_file = Blueprint::SETTINGS_FILE
27
+ self.namespace = ""
28
+ self.destination_path = Blueprint::BLUEPRINT_ROOT_PATH
29
+ self.custom_layout = CustomLayout.new
30
+ self.project_name = nil
31
+ self.custom_css = {}
32
+ self.semantic_classes = {}
33
+ self.plugins = []
34
+
35
+ self.options.parse!(ARGV)
36
+ initialize_project_from_yaml(self.project_name)
37
+ end
38
+
39
+ # generates output CSS based on any args passed in
40
+ # overwrites any existing CSS, as well as grid.png and tests
41
+ def generate!
42
+ output_header # information to the user (in the console) describing custom settings
43
+ generate_css_files # loops through Blueprint::CSS_FILES to generate output CSS
44
+ generate_tests # updates HTML with custom namespaces in order to test the generated library. TODO: have tests kick out to custom location
45
+ output_footer # informs the user that the CSS generation process is complete
46
+ end
47
+
48
+ def options #:nodoc:#
49
+ OptionParser.new do |o|
50
+ o.set_summary_indent(" ")
51
+ o.banner = "Usage: #{@script_name} [options]"
52
+ o.define_head "Blueprint Compressor"
53
+ o.separator ""
54
+ o.separator "options"
55
+ o.on( "-fSETTINGS_FILE", "--settings_file=SETTINGS_FILE", String,
56
+ "Specify a non-default settings file path.") { |file| @settings_file = file }
57
+ o.on( "-oOUTPUT_PATH", "--output_path=OUTPUT_PATH", String,
58
+ "Define a different path to output generated CSS files to.") { |path| self.destination_path = path }
59
+ o.on( "-nBP_NAMESPACE", "--namespace=BP_NAMESPACE", String,
60
+ "Define a namespace prepended to all Blueprint classes (e.g. .your-ns-span-24)") { |ns| self.namespace = ns }
61
+ o.on( "-pPROJECT_NAME", "--project=PROJECT_NAME", String,
62
+ "If using the settings.yml file, PROJECT_NAME is the project name you want to export") {|project| @project_name = project }
63
+ o.on( "--column_width=COLUMN_WIDTH", Integer,
64
+ "Set a new column width (in pixels) for the output grid") {|cw| self.custom_layout.column_width = cw }
65
+ o.on( "--gutter_width=GUTTER_WIDTH", Integer,
66
+ "Set a new gutter width (in pixels) for the output grid") {|gw| self.custom_layout.gutter_width = gw }
67
+ o.on( "--column_count=COLUMN_COUNT", Integer,
68
+ "Set a new column count for the output grid") {|cc| self.custom_layout.column_count = cc }
69
+ #o.on("-v", "--verbose", "Turn on verbose output.") { |$verbose| }
70
+ o.on("-h", "--help", "Show this help message.") { puts o; exit }
71
+ end
72
+ end
73
+
74
+ private
75
+
76
+ # attempts to load output settings from settings.yml
77
+ def initialize_project_from_yaml(project_name = nil)
78
+ # ensures project_name is set and settings.yml is present
79
+ return unless (project_name && File.exist?(@settings_file))
80
+
81
+ # loads yaml into hash
82
+ projects = YAML::load(File.path_to_string(@settings_file))
83
+
84
+ if (project = projects[project_name]) # checks to see if project info is present
85
+ self.destination_path = if self.destination_path == Blueprint::BLUEPRINT_ROOT_PATH
86
+ project["path"]
87
+ else
88
+ self.destination_path
89
+ end
90
+ self.destination_path ||= Blueprint::BLUEPRINT_ROOT_PATH
91
+ self.namespace = project["namespace"] || ""
92
+ self.custom_css = project["custom_css"] || {}
93
+ self.semantic_classes = project["semantic_classes"] || {}
94
+ self.plugins = project["plugins"] || []
95
+
96
+ if (layout = project["custom_layout"])
97
+ self.custom_layout = CustomLayout.new(:column_count => layout["column_count"],
98
+ :column_width => layout["column_width"],
99
+ :gutter_width => layout["gutter_width"],
100
+ :input_padding => layout["input_padding"],
101
+ :input_border => layout["input_border"])
102
+ end
103
+ @loaded_from_settings = true
104
+ end
105
+ end
106
+
107
+ def generate_css_files
108
+ Blueprint::CSS_FILES.each do |output_file_name, css_source_file_names|
109
+ css_output_path = File.join(destination_path, output_file_name)
110
+ puts "\n Assembling to #{custom_path ? css_output_path : "default blueprint path"}"
111
+
112
+ # CSS file generation
113
+ css_output = css_file_header # header included on all three Blueprint-generated files
114
+ css_output += "\n\n"
115
+
116
+ # Iterate through src/ .css files and compile to individual core compressed file
117
+ css_source_file_names.each do |css_source_file|
118
+ puts " + src/#{css_source_file}"
119
+ css_output += "/* #{css_source_file} */\n" if css_source_file_names.any?
120
+
121
+ source_options = if self.custom_layout && css_source_file == "grid.css"
122
+ self.custom_layout.generate_grid_css
123
+ else
124
+ File.path_to_string File.join(Blueprint::SOURCE_PATH, css_source_file)
125
+ end
126
+
127
+ css_output += Blueprint::CSSParser.new(source_options,
128
+ :namespace => namespace).to_s
129
+ css_output += "\n"
130
+ end
131
+
132
+ #append CSS from plugins
133
+ css_output = append_plugin_css(css_output, output_file_name)
134
+
135
+ # append CSS from custom files
136
+ css_output = append_custom_css(css_output, output_file_name)
137
+
138
+ #save CSS to correct path, stripping out any extra whitespace at the end of the file
139
+ File.string_to_file(css_output.rstrip, css_output_path)
140
+ end
141
+
142
+ # append semantic class names if set
143
+ append_semantic_classes
144
+
145
+ #attempt to generate a grid.png file
146
+ if (grid_builder = GridBuilder.new(:column_width => self.custom_layout.column_width,
147
+ :gutter_width => self.custom_layout.gutter_width,
148
+ :output_path => File.join(self.destination_path, "src")))
149
+ grid_builder.generate!
150
+ end
151
+ end
152
+
153
+ def append_custom_css(css, current_file_name)
154
+ # check to see if a custom (non-default) location was used for output files
155
+ # if custom path is used, handle custom CSS, if any
156
+ return css unless self.custom_path and self.custom_css[current_file_name]
157
+
158
+ self.custom_css[current_file_name].each do |custom_css|
159
+ overwrite_base = custom_css || "my-#{current_file_name}"
160
+ overwrite_path = File.join(destination_path, overwrite_base)
161
+ overwrite_css = if File.exists?(overwrite_path)
162
+ File.path_to_string(overwrite_path)
163
+ else
164
+ ""
165
+ end
166
+
167
+ # if there's CSS present, add it to the CSS output
168
+ unless overwrite_css.blank?
169
+ puts " + custom styles (#{custom_css})\n"
170
+ css += "/* #{overwrite_base} */\n"
171
+ css += CSSParser.new(overwrite_css).to_s + "\n"
172
+ end
173
+ end
174
+
175
+ css
176
+ end
177
+
178
+ def append_plugin_css(css, current_file_name)
179
+ return css unless self.plugins.any?
180
+
181
+ plugin_css = ""
182
+
183
+ self.plugins.each do |plugin|
184
+ plugin_file_specific = File.join(Blueprint::PLUGINS_PATH, plugin, current_file_name)
185
+ plugin_file_generic = File.join(Blueprint::PLUGINS_PATH, plugin, "#{plugin}.css")
186
+
187
+ file = if File.exists?(plugin_file_specific)
188
+ plugin_file_specific
189
+ elsif File.exists?(plugin_file_generic) && current_file_name =~ /^screen|print/
190
+ plugin_file_generic
191
+ end
192
+
193
+ if file
194
+ puts " + #{plugin} plugin\n"
195
+ plugin_css += "/* #{plugin} */\n"
196
+ plugin_css += CSSParser.new(File.path_to_string(file)).to_s + "\n"
197
+
198
+ Dir.glob(File.join(File.dirname(file), "**", "**")).each do |cp|
199
+ short_path = cp.gsub(/#{File.dirname(file)}./ , "")
200
+ # make directory if it doesn't exist
201
+ directory = File.dirname(short_path)
202
+ if directory != "."
203
+ FileUtils.mkdir_p(File.join(destination_path, directory))
204
+ end
205
+
206
+ unless File.directory?(File.join(File.dirname(file), short_path)) || cp == file
207
+ FileUtils.cp(cp, File.join(destination_path, short_path))
208
+ end
209
+ end
210
+ end
211
+ end
212
+
213
+ css += plugin_css
214
+ end
215
+
216
+ def append_semantic_classes
217
+ screen_output_path = File.join(self.destination_path, "screen.css")
218
+ semantic_classes = SemanticClassNames.new(:namespace => self.namespace,
219
+ :source_file => screen_output_path)
220
+ semantic_styles = semantic_classes.css_from_assignments(self.semantic_classes)
221
+ return if semantic_styles.blank?
222
+
223
+ css = File.path_to_string(screen_output_path)
224
+ css += "\n\n/* semantic class names */\n"
225
+ css += semantic_styles
226
+ File.string_to_file(css.rstrip, screen_output_path)
227
+ end
228
+
229
+ def generate_tests
230
+ puts "\n Updating namespace to \"#{namespace}\" in test files:"
231
+ test_files = Compressor::TEST_FILES.map do |file|
232
+ File.join(Blueprint::TEST_PATH, *file.split(/\//))
233
+ end
234
+
235
+ test_files.each do |file|
236
+ puts " + #{file}"
237
+ Namespace.new(file, namespace)
238
+ end
239
+ end
240
+
241
+ def output_header
242
+ puts "\n"
243
+ puts " #{"*" * 100}"
244
+ puts " **"
245
+ puts " ** Blueprint CSS Compressor"
246
+ puts " **"
247
+ puts " ** Builds compressed files from the source directory."
248
+ puts " **"
249
+ puts " ** Loaded from settings.yml" if loaded_from_settings
250
+ puts " ** Namespace: '#{namespace}'" unless namespace.blank?
251
+ puts " ** Output to: #{destination_path}"
252
+ puts " ** Grid Settings:"
253
+ puts " ** - Column Count: #{self.custom_layout.column_count}"
254
+ puts " ** - Column Width: #{self.custom_layout.column_width}px"
255
+ puts " ** - Gutter Width: #{self.custom_layout.gutter_width}px"
256
+ puts " ** - Total Width : #{self.custom_layout.page_width}px"
257
+ puts " **"
258
+ puts " #{"*" * 100}"
259
+ end
260
+
261
+ def output_footer
262
+ puts "\n\n"
263
+ puts " #{"*" * 100}"
264
+ puts " **"
265
+ puts " ** Done!"
266
+ puts " ** Your compressed files and test files are now up-to-date."
267
+ puts " **"
268
+ puts " #{"*" * 100}\n\n"
269
+ end
270
+
271
+ def css_file_header
272
+ %(/* -----------------------------------------------------------------------
273
+
274
+
275
+ Blueprint CSS Framework 0.9
276
+ http://blueprintcss.org
277
+
278
+ * Copyright (c) 2007-Present. See LICENSE for more info.
279
+ * See README for instructions on how to use Blueprint.
280
+ * For credits and origins, see AUTHORS.
281
+ * This is a compressed file. See the sources in the 'src' directory.
282
+
283
+ ----------------------------------------------------------------------- */)
284
+ end
285
+
286
+ def putsv(str)
287
+ puts str if $verbose
288
+ end
289
+ end
290
+ end