classiccms 0.3.0 → 0.3.1

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 (369) hide show
  1. data/lib/classiccms/application.rb +2 -3
  2. data/lib/classiccms/cli.rb +6 -0
  3. data/lib/classiccms/scaffold/Gemfile +4 -0
  4. data/lib/classiccms/{mongoid.yml → scaffold/config/mongoid.yml} +3 -4
  5. data/lib/classiccms/scaffold/spec/models/article_spec.rb +8 -0
  6. data/lib/classiccms/scaffold/spec/spec_helper.rb +24 -0
  7. data/lib/classiccms/version.rb +1 -1
  8. data/spec/cli_spec.rb +8 -0
  9. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/build/v8/libv8.a +0 -0
  10. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/build/v8/libv8preparser.a +0 -0
  11. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8-debug.h +395 -0
  12. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8-preparser.h +117 -0
  13. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8-profiler.h +505 -0
  14. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8-testing.h +104 -0
  15. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8.h +4124 -0
  16. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/v8/include/v8stdint.h +53 -0
  17. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8/version.rb +6 -0
  18. data/vendor/bundle/gems/libv8-3.3.10.4-x86_64-darwin-11/lib/libv8.rb +15 -0
  19. data/vendor/bundle/gems/sass-3.1.19/.yardopts +11 -0
  20. data/vendor/bundle/gems/sass-3.1.19/CONTRIBUTING +3 -0
  21. data/vendor/bundle/gems/sass-3.1.19/MIT-LICENSE +20 -0
  22. data/vendor/bundle/gems/sass-3.1.19/README.md +200 -0
  23. data/vendor/bundle/gems/sass-3.1.19/REVISION +1 -0
  24. data/vendor/bundle/gems/sass-3.1.19/Rakefile +339 -0
  25. data/vendor/bundle/gems/sass-3.1.19/VERSION +1 -0
  26. data/vendor/bundle/gems/sass-3.1.19/VERSION_NAME +1 -0
  27. data/vendor/bundle/gems/sass-3.1.19/bin/sass +8 -0
  28. data/vendor/bundle/gems/sass-3.1.19/bin/sass-convert +7 -0
  29. data/vendor/bundle/gems/sass-3.1.19/bin/scss +8 -0
  30. data/vendor/bundle/gems/sass-3.1.19/extra/update_watch.rb +13 -0
  31. data/vendor/bundle/gems/sass-3.1.19/init.rb +18 -0
  32. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/base.rb +86 -0
  33. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/chain.rb +33 -0
  34. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/filesystem.rb +61 -0
  35. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/memory.rb +47 -0
  36. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores/null.rb +25 -0
  37. data/vendor/bundle/gems/sass-3.1.19/lib/sass/cache_stores.rb +15 -0
  38. data/vendor/bundle/gems/sass-3.1.19/lib/sass/callbacks.rb +66 -0
  39. data/vendor/bundle/gems/sass-3.1.19/lib/sass/css.rb +390 -0
  40. data/vendor/bundle/gems/sass-3.1.19/lib/sass/engine.rb +880 -0
  41. data/vendor/bundle/gems/sass-3.1.19/lib/sass/environment.rb +180 -0
  42. data/vendor/bundle/gems/sass-3.1.19/lib/sass/error.rb +201 -0
  43. data/vendor/bundle/gems/sass-3.1.19/lib/sass/exec.rb +682 -0
  44. data/vendor/bundle/gems/sass-3.1.19/lib/sass/importers/base.rb +139 -0
  45. data/vendor/bundle/gems/sass-3.1.19/lib/sass/importers/filesystem.rb +149 -0
  46. data/vendor/bundle/gems/sass-3.1.19/lib/sass/importers.rb +22 -0
  47. data/vendor/bundle/gems/sass-3.1.19/lib/sass/less.rb +382 -0
  48. data/vendor/bundle/gems/sass-3.1.19/lib/sass/logger/base.rb +32 -0
  49. data/vendor/bundle/gems/sass-3.1.19/lib/sass/logger/log_level.rb +49 -0
  50. data/vendor/bundle/gems/sass-3.1.19/lib/sass/logger.rb +15 -0
  51. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/compiler.rb +384 -0
  52. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/configuration.rb +123 -0
  53. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/generic.rb +15 -0
  54. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/merb.rb +48 -0
  55. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/rack.rb +60 -0
  56. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/rails.rb +47 -0
  57. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin/staleness_checker.rb +183 -0
  58. data/vendor/bundle/gems/sass-3.1.19/lib/sass/plugin.rb +132 -0
  59. data/vendor/bundle/gems/sass-3.1.19/lib/sass/railtie.rb +9 -0
  60. data/vendor/bundle/gems/sass-3.1.19/lib/sass/repl.rb +57 -0
  61. data/vendor/bundle/gems/sass-3.1.19/lib/sass/root.rb +7 -0
  62. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/bool.rb +18 -0
  63. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/color.rb +475 -0
  64. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/css_lexer.rb +29 -0
  65. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/css_parser.rb +31 -0
  66. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/funcall.rb +175 -0
  67. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/functions.rb +1381 -0
  68. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/interpolation.rb +79 -0
  69. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/lexer.rb +337 -0
  70. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/list.rb +84 -0
  71. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/literal.rb +230 -0
  72. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/node.rb +99 -0
  73. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/number.rb +452 -0
  74. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/operation.rb +107 -0
  75. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/parser.rb +474 -0
  76. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/string.rb +51 -0
  77. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/string_interpolation.rb +103 -0
  78. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/unary_operation.rb +64 -0
  79. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script/variable.rb +58 -0
  80. data/vendor/bundle/gems/sass-3.1.19/lib/sass/script.rb +39 -0
  81. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/css_parser.rb +46 -0
  82. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/parser.rb +1055 -0
  83. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/rx.rb +137 -0
  84. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/sass_parser.rb +11 -0
  85. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/script_lexer.rb +15 -0
  86. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/script_parser.rb +25 -0
  87. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss/static_parser.rb +40 -0
  88. data/vendor/bundle/gems/sass-3.1.19/lib/sass/scss.rb +17 -0
  89. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/abstract_sequence.rb +71 -0
  90. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/comma_sequence.rb +86 -0
  91. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/sequence.rb +296 -0
  92. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/simple.rb +119 -0
  93. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector/simple_sequence.rb +154 -0
  94. data/vendor/bundle/gems/sass-3.1.19/lib/sass/selector.rb +373 -0
  95. data/vendor/bundle/gems/sass-3.1.19/lib/sass/shared.rb +76 -0
  96. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/charset_node.rb +22 -0
  97. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/comment_node.rb +90 -0
  98. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/debug_node.rb +18 -0
  99. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/directive_node.rb +28 -0
  100. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/each_node.rb +24 -0
  101. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/extend_node.rb +29 -0
  102. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/for_node.rb +36 -0
  103. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/function_node.rb +27 -0
  104. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/if_node.rb +52 -0
  105. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/import_node.rb +68 -0
  106. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/media_node.rb +32 -0
  107. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/mixin_def_node.rb +27 -0
  108. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/mixin_node.rb +32 -0
  109. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/node.rb +188 -0
  110. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/prop_node.rb +148 -0
  111. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/return_node.rb +18 -0
  112. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/root_node.rb +28 -0
  113. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/rule_node.rb +127 -0
  114. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/variable_node.rb +30 -0
  115. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/base.rb +75 -0
  116. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/check_nesting.rb +127 -0
  117. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/convert.rb +262 -0
  118. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/cssize.rb +206 -0
  119. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/deep_copy.rb +87 -0
  120. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/extend.rb +42 -0
  121. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/perform.rb +357 -0
  122. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/set_options.rb +97 -0
  123. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/visitors/to_css.rb +219 -0
  124. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/warn_node.rb +18 -0
  125. data/vendor/bundle/gems/sass-3.1.19/lib/sass/tree/while_node.rb +18 -0
  126. data/vendor/bundle/gems/sass-3.1.19/lib/sass/util/multibyte_string_scanner.rb +134 -0
  127. data/vendor/bundle/gems/sass-3.1.19/lib/sass/util/subset_map.rb +101 -0
  128. data/vendor/bundle/gems/sass-3.1.19/lib/sass/util.rb +800 -0
  129. data/vendor/bundle/gems/sass-3.1.19/lib/sass/version.rb +112 -0
  130. data/vendor/bundle/gems/sass-3.1.19/lib/sass.rb +73 -0
  131. data/vendor/bundle/gems/sass-3.1.19/rails/init.rb +1 -0
  132. data/vendor/bundle/gems/sass-3.1.19/test/Gemfile +4 -0
  133. data/vendor/bundle/gems/sass-3.1.19/test/sass/cache_test.rb +89 -0
  134. data/vendor/bundle/gems/sass-3.1.19/test/sass/callbacks_test.rb +61 -0
  135. data/vendor/bundle/gems/sass-3.1.19/test/sass/conversion_test.rb +1245 -0
  136. data/vendor/bundle/gems/sass-3.1.19/test/sass/css2sass_test.rb +397 -0
  137. data/vendor/bundle/gems/sass-3.1.19/test/sass/data/hsl-rgb.txt +319 -0
  138. data/vendor/bundle/gems/sass-3.1.19/test/sass/engine_test.rb +2730 -0
  139. data/vendor/bundle/gems/sass-3.1.19/test/sass/extend_test.rb +1663 -0
  140. data/vendor/bundle/gems/sass-3.1.19/test/sass/fixtures/test_staleness_check_across_importers.css +1 -0
  141. data/vendor/bundle/gems/sass-3.1.19/test/sass/fixtures/test_staleness_check_across_importers.scss +1 -0
  142. data/vendor/bundle/gems/sass-3.1.19/test/sass/functions_test.rb +1047 -0
  143. data/vendor/bundle/gems/sass-3.1.19/test/sass/importer_test.rb +192 -0
  144. data/vendor/bundle/gems/sass-3.1.19/test/sass/less_conversion_test.rb +653 -0
  145. data/vendor/bundle/gems/sass-3.1.19/test/sass/logger_test.rb +58 -0
  146. data/vendor/bundle/gems/sass-3.1.19/test/sass/mock_importer.rb +49 -0
  147. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_results/more1.css +9 -0
  148. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_results/more1_with_line_comments.css +26 -0
  149. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_results/more_import.css +29 -0
  150. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_templates/_more_partial.sass +2 -0
  151. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_templates/more1.sass +23 -0
  152. data/vendor/bundle/gems/sass-3.1.19/test/sass/more_templates/more_import.sass +11 -0
  153. data/vendor/bundle/gems/sass-3.1.19/test/sass/plugin_test.rb +496 -0
  154. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/alt.css +4 -0
  155. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/basic.css +9 -0
  156. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/compact.css +5 -0
  157. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/complex.css +86 -0
  158. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/compressed.css +1 -0
  159. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/expanded.css +19 -0
  160. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/if.css +3 -0
  161. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/import.css +31 -0
  162. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/import_charset.css +5 -0
  163. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/import_charset_1_8.css +5 -0
  164. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/import_charset_ibm866.css +5 -0
  165. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/line_numbers.css +49 -0
  166. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/mixins.css +95 -0
  167. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/multiline.css +24 -0
  168. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/nested.css +22 -0
  169. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/options.css +1 -0
  170. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/parent_ref.css +13 -0
  171. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/script.css +16 -0
  172. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/scss_import.css +31 -0
  173. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/scss_importee.css +2 -0
  174. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/subdir/nested_subdir/nested_subdir.css +1 -0
  175. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/subdir/subdir.css +3 -0
  176. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/units.css +11 -0
  177. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/warn.css +0 -0
  178. data/vendor/bundle/gems/sass-3.1.19/test/sass/results/warn_imported.css +0 -0
  179. data/vendor/bundle/gems/sass-3.1.19/test/sass/script_conversion_test.rb +285 -0
  180. data/vendor/bundle/gems/sass-3.1.19/test/sass/script_test.rb +519 -0
  181. data/vendor/bundle/gems/sass-3.1.19/test/sass/scss/css_test.rb +975 -0
  182. data/vendor/bundle/gems/sass-3.1.19/test/sass/scss/rx_test.rb +156 -0
  183. data/vendor/bundle/gems/sass-3.1.19/test/sass/scss/scss_test.rb +1308 -0
  184. data/vendor/bundle/gems/sass-3.1.19/test/sass/scss/test_helper.rb +37 -0
  185. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/_double_import_loop2.sass +1 -0
  186. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/_imported_charset_ibm866.sass +4 -0
  187. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/_imported_charset_utf8.sass +4 -0
  188. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/_partial.sass +2 -0
  189. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/alt.sass +16 -0
  190. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/basic.sass +23 -0
  191. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork1.sass +2 -0
  192. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork2.sass +2 -0
  193. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork3.sass +2 -0
  194. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork4.sass +2 -0
  195. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/bork5.sass +3 -0
  196. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/compact.sass +17 -0
  197. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/complex.sass +305 -0
  198. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/compressed.sass +15 -0
  199. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/double_import_loop1.sass +1 -0
  200. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/expanded.sass +17 -0
  201. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/if.sass +11 -0
  202. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/import.sass +12 -0
  203. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/import_charset.sass +9 -0
  204. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/import_charset_1_8.sass +6 -0
  205. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/import_charset_ibm866.sass +11 -0
  206. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/importee.less +2 -0
  207. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/importee.sass +19 -0
  208. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/line_numbers.sass +13 -0
  209. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/mixin_bork.sass +5 -0
  210. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/mixins.sass +76 -0
  211. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/multiline.sass +20 -0
  212. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested.sass +25 -0
  213. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork1.sass +2 -0
  214. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork2.sass +2 -0
  215. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork3.sass +2 -0
  216. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork4.sass +2 -0
  217. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_bork5.sass +2 -0
  218. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_import.sass +2 -0
  219. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/nested_mixin_bork.sass +6 -0
  220. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/options.sass +2 -0
  221. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/parent_ref.sass +25 -0
  222. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/script.sass +101 -0
  223. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/scss_import.scss +11 -0
  224. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/scss_importee.scss +1 -0
  225. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/single_import_loop.sass +1 -0
  226. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/subdir/nested_subdir/_nested_partial.sass +2 -0
  227. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/subdir/nested_subdir/nested_subdir.sass +3 -0
  228. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/subdir/subdir.sass +6 -0
  229. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/units.sass +11 -0
  230. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/warn.sass +3 -0
  231. data/vendor/bundle/gems/sass-3.1.19/test/sass/templates/warn_imported.sass +4 -0
  232. data/vendor/bundle/gems/sass-3.1.19/test/sass/test_helper.rb +8 -0
  233. data/vendor/bundle/gems/sass-3.1.19/test/sass/util/multibyte_string_scanner_test.rb +147 -0
  234. data/vendor/bundle/gems/sass-3.1.19/test/sass/util/subset_map_test.rb +91 -0
  235. data/vendor/bundle/gems/sass-3.1.19/test/sass/util_test.rb +282 -0
  236. data/vendor/bundle/gems/sass-3.1.19/test/test_helper.rb +70 -0
  237. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/CHANGELOG.md +90 -0
  238. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/Gemfile +35 -0
  239. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/Guardfile +8 -0
  240. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/LICENSE +20 -0
  241. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/README.md +312 -0
  242. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/Rakefile +47 -0
  243. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/Vagrantfile +96 -0
  244. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapter.rb +167 -0
  245. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapters/darwin.rb +84 -0
  246. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapters/linux.rb +110 -0
  247. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapters/polling.rb +66 -0
  248. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/adapters/windows.rb +81 -0
  249. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/directory_record.rb +317 -0
  250. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/listener.rb +203 -0
  251. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/multi_listener.rb +121 -0
  252. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/turnstile.rb +28 -0
  253. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen/version.rb +3 -0
  254. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/lib/listen.rb +38 -0
  255. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/listen.gemspec +26 -0
  256. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapter_spec.rb +142 -0
  257. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapters/darwin_spec.rb +31 -0
  258. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapters/linux_spec.rb +41 -0
  259. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapters/polling_spec.rb +68 -0
  260. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/adapters/windows_spec.rb +24 -0
  261. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/directory_record_spec.rb +1034 -0
  262. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/listener_spec.rb +155 -0
  263. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/multi_listener_spec.rb +156 -0
  264. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen/turnstile_spec.rb +56 -0
  265. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/listen_spec.rb +73 -0
  266. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/spec_helper.rb +16 -0
  267. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/adapter_helper.rb +716 -0
  268. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/directory_record_helper.rb +55 -0
  269. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/fixtures_helper.rb +29 -0
  270. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/listeners_helper.rb +144 -0
  271. data/vendor/bundle/gems/sass-3.1.19/vendor/listen/spec/support/platform_helper.rb +11 -0
  272. data/vendor/bundle/gems/therubyracer-0.10.1/.gitignore +13 -0
  273. data/vendor/bundle/gems/therubyracer-0.10.1/.gitmodules +3 -0
  274. data/vendor/bundle/gems/therubyracer-0.10.1/.travis.yml +9 -0
  275. data/vendor/bundle/gems/therubyracer-0.10.1/.yardopts +1 -0
  276. data/vendor/bundle/gems/therubyracer-0.10.1/Changelog.md +196 -0
  277. data/vendor/bundle/gems/therubyracer-0.10.1/Gemfile +1 -0
  278. data/vendor/bundle/gems/therubyracer-0.10.1/README.md +167 -0
  279. data/vendor/bundle/gems/therubyracer-0.10.1/Rakefile +23 -0
  280. data/vendor/bundle/gems/therubyracer-0.10.1/bin/therubyracer +11 -0
  281. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/Makefile +213 -0
  282. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/extconf.rb +26 -0
  283. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/gem_make.out +156 -0
  284. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/rr.cpp +189 -0
  285. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/rr.h +41 -0
  286. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8.cpp +48 -0
  287. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_array.cpp +48 -0
  288. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_array.h +8 -0
  289. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_callbacks.cpp +81 -0
  290. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_callbacks.h +8 -0
  291. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_context.cpp +92 -0
  292. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_context.h +6 -0
  293. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_date.cpp +34 -0
  294. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_date.h +6 -0
  295. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_debug.cpp +17 -0
  296. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_debug.h +6 -0
  297. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_exception.cpp +133 -0
  298. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_exception.h +11 -0
  299. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_external.cpp +70 -0
  300. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_external.h +8 -0
  301. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_function.cpp +69 -0
  302. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_function.h +11 -0
  303. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_handle.cpp +186 -0
  304. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_handle.h +48 -0
  305. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_locker.cpp +139 -0
  306. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_locker.h +6 -0
  307. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_message.cpp +67 -0
  308. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_message.h +10 -0
  309. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_object.cpp +122 -0
  310. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_object.h +10 -0
  311. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_script.cpp +36 -0
  312. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_script.h +8 -0
  313. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_string.cpp +52 -0
  314. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_string.h +9 -0
  315. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_template.cpp +344 -0
  316. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_template.h +8 -0
  317. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_try_catch.cpp +70 -0
  318. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_try_catch.h +5 -0
  319. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_v8.cpp +35 -0
  320. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_v8.h +6 -0
  321. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_value.cpp +175 -0
  322. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_value.h +10 -0
  323. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_weakref.cpp +61 -0
  324. data/vendor/bundle/gems/therubyracer-0.10.1/ext/v8/v8_weakref.h +29 -0
  325. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/access.rb +87 -0
  326. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/array.rb +17 -0
  327. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/c/locker.rb +18 -0
  328. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/cli.rb +133 -0
  329. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/context.rb +111 -0
  330. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/error.rb +130 -0
  331. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/function.rb +44 -0
  332. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/object.rb +69 -0
  333. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/caller.rb +37 -0
  334. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/constructor.rb +98 -0
  335. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/function.rb +63 -0
  336. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/interceptors.rb +152 -0
  337. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/proxies.rb +151 -0
  338. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal/templates.rb +73 -0
  339. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/portal.rb +86 -0
  340. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/stack.rb +66 -0
  341. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/tap.rb +9 -0
  342. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8/version.rb +3 -0
  343. data/vendor/bundle/gems/therubyracer-0.10.1/lib/v8.rb +23 -0
  344. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/array_spec.rb +15 -0
  345. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/cxt_spec.rb +57 -0
  346. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/ext_spec_helper.rb +27 -0
  347. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/func_spec.rb +64 -0
  348. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/object_spec.rb +10 -0
  349. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/string_spec.rb +11 -0
  350. data/vendor/bundle/gems/therubyracer-0.10.1/spec/ext/try_catch_spec.rb +60 -0
  351. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs/.gitignore +1 -0
  352. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs/README.txt +8 -0
  353. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs/jsapi_spec.rb +922 -0
  354. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs/loadme.js +1 -0
  355. data/vendor/bundle/gems/therubyracer-0.10.1/spec/redjs_helper.rb +3 -0
  356. data/vendor/bundle/gems/therubyracer-0.10.1/spec/spec_helper.rb +9 -0
  357. data/vendor/bundle/gems/therubyracer-0.10.1/spec/v8/error_spec.rb +131 -0
  358. data/vendor/bundle/gems/therubyracer-0.10.1/spec/v8/portal/proxies_spec.rb +106 -0
  359. data/vendor/bundle/gems/therubyracer-0.10.1/specmem/handle_memspec.rb +41 -0
  360. data/vendor/bundle/gems/therubyracer-0.10.1/specmem/object_memspec.rb +14 -0
  361. data/vendor/bundle/gems/therubyracer-0.10.1/specmem/proxies_memspec.rb +49 -0
  362. data/vendor/bundle/gems/therubyracer-0.10.1/specmem/spec_helper.rb +24 -0
  363. data/vendor/bundle/gems/therubyracer-0.10.1/specthread/spec_helper.rb +2 -0
  364. data/vendor/bundle/gems/therubyracer-0.10.1/specthread/threading_spec.rb +13 -0
  365. data/vendor/bundle/gems/therubyracer-0.10.1/thefrontside.png +0 -0
  366. data/vendor/bundle/gems/therubyracer-0.10.1/therubyracer.gemspec +29 -0
  367. data/vendor/bundle/specifications/libv8-3.3.10.4-x86_64-darwin-11.gemspec +33 -0
  368. data/vendor/bundle/specifications/sass-3.1.19.gemspec +35 -0
  369. metadata +365 -3
@@ -0,0 +1,206 @@
1
+ # A visitor for converting a static Sass tree into a static CSS tree.
2
+ class Sass::Tree::Visitors::Cssize < Sass::Tree::Visitors::Base
3
+ # @param root [Tree::Node] The root node of the tree to visit.
4
+ # @return [(Tree::Node, Sass::Util::SubsetMap)] The resulting tree of static nodes
5
+ # *and* the extensions defined for this tree
6
+ def self.visit(root); super; end
7
+
8
+ protected
9
+
10
+ # Returns the immediate parent of the current node.
11
+ # @return [Tree::Node]
12
+ attr_reader :parent
13
+
14
+ def initialize
15
+ @parent_directives = []
16
+ @extends = Sass::Util::SubsetMap.new
17
+ end
18
+
19
+ # If an exception is raised, this adds proper metadata to the backtrace.
20
+ def visit(node)
21
+ super(node)
22
+ rescue Sass::SyntaxError => e
23
+ e.modify_backtrace(:filename => node.filename, :line => node.line)
24
+ raise e
25
+ end
26
+
27
+ # Keeps track of the current parent node.
28
+ def visit_children(parent)
29
+ with_parent parent do
30
+ parent.children = super.flatten
31
+ parent
32
+ end
33
+ end
34
+
35
+ # Runs a block of code with the current parent node
36
+ # replaced with the given node.
37
+ #
38
+ # @param parent [Tree::Node] The new parent for the duration of the block.
39
+ # @yield A block in which the parent is set to `parent`.
40
+ # @return [Object] The return value of the block.
41
+ def with_parent(parent)
42
+ @parent_directives.push parent if parent.is_a?(Sass::Tree::DirectiveNode)
43
+ old_parent, @parent = @parent, parent
44
+ yield
45
+ ensure
46
+ @parent_directives.pop if parent.is_a?(Sass::Tree::DirectiveNode)
47
+ @parent = old_parent
48
+ end
49
+
50
+ # In Ruby 1.8, ensures that there's only one `@charset` directive
51
+ # and that it's at the top of the document.
52
+ #
53
+ # @return [(Tree::Node, Sass::Util::SubsetMap)] The resulting tree of static nodes
54
+ # *and* the extensions defined for this tree
55
+ def visit_root(node)
56
+ yield
57
+
58
+ if parent.nil?
59
+ # In Ruby 1.9 we can make all @charset nodes invisible
60
+ # and infer the final @charset from the encoding of the final string.
61
+ if Sass::Util.ruby1_8?
62
+ charset = node.children.find {|c| c.is_a?(Sass::Tree::CharsetNode)}
63
+ node.children.reject! {|c| c.is_a?(Sass::Tree::CharsetNode)}
64
+ node.children.unshift charset if charset
65
+ end
66
+
67
+ imports = Sass::Util.extract!(node.children) do |c|
68
+ c.is_a?(Sass::Tree::DirectiveNode) && c.value =~ /^@import /i
69
+ end
70
+ charset_and_index = Sass::Util.ruby1_8? &&
71
+ node.children.each_with_index.find {|c, _| c.is_a?(Sass::Tree::CharsetNode)}
72
+ if charset_and_index
73
+ index = charset_and_index.last
74
+ node.children = node.children[0..index] + imports + node.children[index+1..-1]
75
+ else
76
+ node.children = imports + node.children
77
+ end
78
+ end
79
+
80
+ return node, @extends
81
+ rescue Sass::SyntaxError => e
82
+ e.sass_template ||= node.template
83
+ raise e
84
+ end
85
+
86
+ # A simple struct wrapping up information about a single `@extend` instance. A
87
+ # single [ExtendNode] can have multiple Extends if either the parent node or
88
+ # the extended selector is a comma sequence.
89
+ #
90
+ # @attr extender [Array<Sass::Selector::SimpleSequence, String>]
91
+ # The selector of the CSS rule containing the `@extend`.
92
+ # @attr target [Array<Sass::Selector::Simple>] The selector being `@extend`ed.
93
+ # @attr node [Sass::Tree::ExtendNode] The node that produced this extend.
94
+ # @attr directives [Array<Sass::Tree::DirectiveNode>]
95
+ # The directives containing the `@extend`.
96
+ Extend = Struct.new(:extender, :target, :node, :directives)
97
+
98
+ # Registers an extension in the `@extends` subset map.
99
+ def visit_extend(node)
100
+ node.resolved_selector.members.each do |seq|
101
+ if seq.members.size > 1
102
+ raise Sass::SyntaxError.new("Can't extend #{seq.to_a.join}: can't extend nested selectors")
103
+ end
104
+
105
+ sseq = seq.members.first
106
+ if !sseq.is_a?(Sass::Selector::SimpleSequence)
107
+ raise Sass::SyntaxError.new("Can't extend #{seq.to_a.join}: invalid selector")
108
+ end
109
+
110
+ sel = sseq.members
111
+ parent.resolved_rules.members.each do |seq|
112
+ if !seq.members.last.is_a?(Sass::Selector::SimpleSequence)
113
+ raise Sass::SyntaxError.new("#{seq} can't extend: invalid selector")
114
+ end
115
+
116
+ @extends[sel] = Extend.new(seq, sel, node, @parent_directives.dup)
117
+ end
118
+ end
119
+
120
+ []
121
+ end
122
+
123
+ # Modifies exception backtraces to include the imported file.
124
+ def visit_import(node)
125
+ # Don't use #visit_children to avoid adding the import node to the list of parents.
126
+ node.children.map {|c| visit(c)}.flatten
127
+ rescue Sass::SyntaxError => e
128
+ e.modify_backtrace(:filename => node.children.first.filename)
129
+ e.add_backtrace(:filename => node.filename, :line => node.line)
130
+ raise e
131
+ end
132
+
133
+ # Bubbles the `@media` directive up through RuleNodes
134
+ # and merges it with other `@media` directives.
135
+ def visit_media(node)
136
+ if parent.is_a?(Sass::Tree::RuleNode)
137
+ new_rule = parent.dup
138
+ new_rule.children = node.children
139
+ node.children = with_parent(node) {Array(visit(new_rule))}
140
+ # If the last child is actually the end of the group,
141
+ # the parent's cssize will set it properly
142
+ node.children.last.group_end = false unless node.children.empty?
143
+ else
144
+ yield
145
+ end
146
+
147
+ media = node.children.select {|c| c.is_a?(Sass::Tree::MediaNode)}
148
+ node.children.reject! {|c| c.is_a?(Sass::Tree::MediaNode)}
149
+ media.each do |n|
150
+ n.query = node.query.map {|pq| n.query.map {|cq| "#{pq} and #{cq}"}}.flatten
151
+ end
152
+ (node.children.empty? ? [] : [node]) + media
153
+ end
154
+
155
+ # Asserts that all the mixin's children are valid in their new location.
156
+ def visit_mixin(node)
157
+ # Don't use #visit_children to avoid adding the mixin node to the list of parents.
158
+ node.children.map {|c| visit(c)}.flatten
159
+ rescue Sass::SyntaxError => e
160
+ e.modify_backtrace(:mixin => node.name, :filename => node.filename, :line => node.line)
161
+ e.add_backtrace(:filename => node.filename, :line => node.line)
162
+ raise e
163
+ end
164
+
165
+ # Converts nested properties into flat properties
166
+ # and updates the indentation of the prop node based on the nesting level.
167
+ def visit_prop(node)
168
+ if parent.is_a?(Sass::Tree::PropNode)
169
+ node.resolved_name = "#{parent.resolved_name}-#{node.resolved_name}"
170
+ node.tabs = parent.tabs + (parent.resolved_value.empty? ? 0 : 1) if node.style == :nested
171
+ end
172
+
173
+ yield
174
+
175
+ result = node.children.dup
176
+ if !node.resolved_value.empty? || node.children.empty?
177
+ node.send(:check!)
178
+ result.unshift(node)
179
+ end
180
+
181
+ result
182
+ end
183
+
184
+ # Resolves parent references and nested selectors,
185
+ # and updates the indentation of the rule node based on the nesting level.
186
+ def visit_rule(node)
187
+ parent_resolved_rules = parent.is_a?(Sass::Tree::RuleNode) ? parent.resolved_rules : nil
188
+ # It's possible for resolved_rules to be set if we've duplicated this node during @media bubbling
189
+ node.resolved_rules ||= node.parsed_rules.resolve_parent_refs(parent_resolved_rules)
190
+
191
+ yield
192
+
193
+ rules = node.children.select {|c| c.is_a?(Sass::Tree::RuleNode) || c.is_a?(Sass::Tree::MediaNode)}
194
+ props = node.children.reject {|c| c.is_a?(Sass::Tree::RuleNode) || c.is_a?(Sass::Tree::MediaNode) || c.invisible?}
195
+
196
+ unless props.empty?
197
+ node.children = props
198
+ rules.each {|r| r.tabs += 1} if node.style == :nested
199
+ rules.unshift(node)
200
+ end
201
+
202
+ rules.last.group_end = true unless parent.is_a?(Sass::Tree::RuleNode) || rules.empty?
203
+
204
+ rules
205
+ end
206
+ end
@@ -0,0 +1,87 @@
1
+ # A visitor for copying the full structure of a Sass tree.
2
+ class Sass::Tree::Visitors::DeepCopy < Sass::Tree::Visitors::Base
3
+ protected
4
+
5
+ def visit(node)
6
+ super(node.dup)
7
+ end
8
+
9
+ def visit_children(parent)
10
+ parent.children = parent.children.map {|c| visit(c)}
11
+ parent
12
+ end
13
+
14
+ def visit_debug(node)
15
+ node.expr = node.expr.deep_copy
16
+ yield
17
+ end
18
+
19
+ def visit_each(node)
20
+ node.list = node.list.deep_copy
21
+ yield
22
+ end
23
+
24
+ def visit_extend(node)
25
+ node.selector = node.selector.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c}
26
+ yield
27
+ end
28
+
29
+ def visit_for(node)
30
+ node.from = node.from.deep_copy
31
+ node.to = node.to.deep_copy
32
+ yield
33
+ end
34
+
35
+ def visit_function(node)
36
+ node.args = node.args.map {|k, v| [k.deep_copy, v && v.deep_copy]}
37
+ yield
38
+ end
39
+
40
+ def visit_if(node)
41
+ node.expr = node.expr.deep_copy if node.expr
42
+ node.else = visit(node.else) if node.else
43
+ yield
44
+ end
45
+
46
+ def visit_mixindef(node)
47
+ node.args = node.args.map {|k, v| [k.deep_copy, v && v.deep_copy]}
48
+ yield
49
+ end
50
+
51
+ def visit_mixin(node)
52
+ node.args = node.args.map {|a| a.deep_copy}
53
+ node.keywords = Hash[node.keywords.map {|k, v| [k, v.deep_copy]}]
54
+ yield
55
+ end
56
+
57
+ def visit_prop(node)
58
+ node.name = node.name.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c}
59
+ node.value = node.value.deep_copy
60
+ yield
61
+ end
62
+
63
+ def visit_return(node)
64
+ node.expr = node.expr.deep_copy
65
+ yield
66
+ end
67
+
68
+ def visit_rule(node)
69
+ node.rule = node.rule.map {|c| c.is_a?(Sass::Script::Node) ? c.deep_copy : c}
70
+ yield
71
+ end
72
+
73
+ def visit_variable(node)
74
+ node.expr = node.expr.deep_copy
75
+ yield
76
+ end
77
+
78
+ def visit_warn(node)
79
+ node.expr = node.expr.deep_copy
80
+ yield
81
+ end
82
+
83
+ def visit_while(node)
84
+ node.expr = node.expr.deep_copy
85
+ yield
86
+ end
87
+ end
@@ -0,0 +1,42 @@
1
+ # A visitor for performing selector inheritance on a static CSS tree.
2
+ #
3
+ # Destructively modifies the tree.
4
+ class Sass::Tree::Visitors::Extend < Sass::Tree::Visitors::Base
5
+ # @param root [Tree::Node] The root node of the tree to visit.
6
+ # @param extends [Sass::Util::SubsetMap{Selector::Simple =>
7
+ # Sass::Tree::Visitors::Cssize::Extend}]
8
+ # The extensions to perform on this tree.
9
+ # @return [Object] The return value of \{#visit} for the root node.
10
+ def self.visit(root, extends)
11
+ return if extends.empty?
12
+ new(extends).send(:visit, root)
13
+ end
14
+
15
+ protected
16
+
17
+ def initialize(extends)
18
+ @parent_directives = []
19
+ @extends = extends
20
+ end
21
+
22
+ # If an exception is raised, this adds proper metadata to the backtrace.
23
+ def visit(node)
24
+ super(node)
25
+ rescue Sass::SyntaxError => e
26
+ e.modify_backtrace(:filename => node.filename, :line => node.line)
27
+ raise e
28
+ end
29
+
30
+ # Keeps track of the current parent directives.
31
+ def visit_children(parent)
32
+ @parent_directives.push parent if parent.is_a?(Sass::Tree::DirectiveNode)
33
+ super
34
+ ensure
35
+ @parent_directives.pop if parent.is_a?(Sass::Tree::DirectiveNode)
36
+ end
37
+
38
+ # Applies the extend to a single rule's selector.
39
+ def visit_rule(node)
40
+ node.resolved_rules = node.resolved_rules.do_extend(@extends, @parent_directives)
41
+ end
42
+ end
@@ -0,0 +1,357 @@
1
+ # A visitor for converting a dynamic Sass tree into a static Sass tree.
2
+ class Sass::Tree::Visitors::Perform < Sass::Tree::Visitors::Base
3
+ # @param root [Tree::Node] The root node of the tree to visit.
4
+ # @param environment [Sass::Environment] The lexical environment.
5
+ # @return [Tree::Node] The resulting tree of static nodes.
6
+ def self.visit(root, environment = Sass::Environment.new)
7
+ new(environment).send(:visit, root)
8
+ end
9
+
10
+ protected
11
+
12
+ def initialize(env)
13
+ @environment = env
14
+ end
15
+
16
+ # If an exception is raised, this add proper metadata to the backtrace.
17
+ def visit(node)
18
+ super(node.dup)
19
+ rescue Sass::SyntaxError => e
20
+ e.modify_backtrace(:filename => node.filename, :line => node.line)
21
+ raise e
22
+ end
23
+
24
+ # Keeps track of the current environment.
25
+ def visit_children(parent)
26
+ with_environment Sass::Environment.new(@environment) do
27
+ parent.children = super.flatten
28
+ parent
29
+ end
30
+ end
31
+
32
+ # Runs a block of code with the current environment replaced with the given one.
33
+ #
34
+ # @param env [Sass::Environment] The new environment for the duration of the block.
35
+ # @yield A block in which the environment is set to `env`.
36
+ # @return [Object] The return value of the block.
37
+ def with_environment(env)
38
+ old_env, @environment = @environment, env
39
+ yield
40
+ ensure
41
+ @environment = old_env
42
+ end
43
+
44
+ # Sets the options on the environment if this is the top-level root.
45
+ def visit_root(node)
46
+ @environment.options = node.options if @environment.options.nil? || @environment.options.empty?
47
+ yield
48
+ rescue Sass::SyntaxError => e
49
+ e.sass_template ||= node.template
50
+ raise e
51
+ end
52
+
53
+ # Removes this node from the tree if it's a silent comment.
54
+ def visit_comment(node)
55
+ return [] if node.invisible?
56
+ check_for_loud_silent_comment node
57
+ check_for_comment_interp node
58
+ node.resolved_value = run_interp_no_strip(node.value)
59
+ node.resolved_value.gsub!(/\\([\\#])/, '\1')
60
+ node
61
+ end
62
+
63
+ # Prints the expression to STDERR.
64
+ def visit_debug(node)
65
+ res = node.expr.perform(@environment)
66
+ res = res.value if res.is_a?(Sass::Script::String)
67
+ if node.filename
68
+ $stderr.puts "#{node.filename}:#{node.line} DEBUG: #{res}"
69
+ else
70
+ $stderr.puts "Line #{node.line} DEBUG: #{res}"
71
+ end
72
+ []
73
+ end
74
+
75
+ # Runs the child nodes once for each value in the list.
76
+ def visit_each(node)
77
+ list = node.list.perform(@environment)
78
+
79
+ with_environment Sass::Environment.new(@environment) do
80
+ list.to_a.map do |v|
81
+ @environment.set_local_var(node.var, v)
82
+ node.children.map {|c| visit(c)}
83
+ end.flatten
84
+ end
85
+ end
86
+
87
+ # Runs SassScript interpolation in the selector,
88
+ # and then parses the result into a {Sass::Selector::CommaSequence}.
89
+ def visit_extend(node)
90
+ parser = Sass::SCSS::CssParser.new(run_interp(node.selector), node.filename, node.line)
91
+ node.resolved_selector = parser.parse_selector
92
+ node
93
+ end
94
+
95
+ # Runs the child nodes once for each time through the loop, varying the variable each time.
96
+ def visit_for(node)
97
+ from = node.from.perform(@environment)
98
+ to = node.to.perform(@environment)
99
+ from.assert_int!
100
+ to.assert_int!
101
+
102
+ to = to.coerce(from.numerator_units, from.denominator_units)
103
+ range = Range.new(from.to_i, to.to_i, node.exclusive)
104
+
105
+ with_environment Sass::Environment.new(@environment) do
106
+ range.map do |i|
107
+ @environment.set_local_var(node.var,
108
+ Sass::Script::Number.new(i, from.numerator_units, from.denominator_units))
109
+ node.children.map {|c| visit(c)}
110
+ end.flatten
111
+ end
112
+ end
113
+
114
+ # Loads the function into the environment.
115
+ def visit_function(node)
116
+ @environment.set_function(node.name,
117
+ Sass::Callable.new(node.name, node.args, @environment, node.children))
118
+ []
119
+ end
120
+
121
+ # Runs the child nodes if the conditional expression is true;
122
+ # otherwise, tries the else nodes.
123
+ def visit_if(node)
124
+ if node.expr.nil? || node.expr.perform(@environment).to_bool
125
+ yield
126
+ node.children
127
+ elsif node.else
128
+ visit(node.else)
129
+ else
130
+ []
131
+ end
132
+ end
133
+
134
+ # Returns a static DirectiveNode if this is importing a CSS file,
135
+ # or parses and includes the imported Sass file.
136
+ def visit_import(node)
137
+ if path = node.css_import?
138
+ return Sass::Tree::DirectiveNode.new("@import url(#{path})")
139
+ end
140
+ file = node.imported_file
141
+ handle_import_loop!(node) if @environment.files_in_use.include?(file.options[:filename])
142
+
143
+ @environment.push_frame(:filename => node.filename, :line => node.line)
144
+ root = file.to_tree
145
+ Sass::Tree::Visitors::CheckNesting.visit(root)
146
+ node.children = root.children.map {|c| visit(c)}.flatten
147
+ node
148
+ rescue Sass::SyntaxError => e
149
+ e.modify_backtrace(:filename => node.imported_file.options[:filename])
150
+ e.add_backtrace(:filename => node.filename, :line => node.line)
151
+ raise e
152
+ ensure
153
+ @environment.pop_frame
154
+ end
155
+
156
+ # Loads a mixin into the environment.
157
+ def visit_mixindef(node)
158
+ @environment.set_mixin(node.name,
159
+ Sass::Callable.new(node.name, node.args, @environment, node.children))
160
+ []
161
+ end
162
+
163
+ # Runs a mixin.
164
+ def visit_mixin(node)
165
+ handle_include_loop!(node) if @environment.mixins_in_use.include?(node.name)
166
+
167
+ original_env = @environment
168
+ original_env.push_frame(:filename => node.filename, :line => node.line)
169
+ original_env.prepare_frame(:mixin => node.name)
170
+ raise Sass::SyntaxError.new("Undefined mixin '#{node.name}'.") unless mixin = @environment.mixin(node.name)
171
+
172
+ passed_args = node.args.dup
173
+ passed_keywords = node.keywords.dup
174
+
175
+ raise Sass::SyntaxError.new(<<END.gsub("\n", "")) if mixin.args.size < passed_args.size
176
+ Mixin #{node.name} takes #{mixin.args.size} argument#{'s' if mixin.args.size != 1}
177
+ but #{node.args.size} #{node.args.size == 1 ? 'was' : 'were'} passed.
178
+ END
179
+
180
+ passed_keywords.each do |name, value|
181
+ # TODO: Make this fast
182
+ unless mixin.args.find {|(var, default)| var.underscored_name == name}
183
+ raise Sass::SyntaxError.new("Mixin #{node.name} doesn't have an argument named $#{name}")
184
+ end
185
+ end
186
+
187
+ environment = mixin.args.zip(passed_args).
188
+ inject(Sass::Environment.new(mixin.environment)) do |env, ((var, default), value)|
189
+ env.set_local_var(var.name,
190
+ if value
191
+ value.perform(@environment)
192
+ elsif kv = passed_keywords[var.underscored_name]
193
+ kv.perform(@environment)
194
+ elsif default
195
+ default.perform(env)
196
+ end)
197
+ raise Sass::SyntaxError.new("Mixin #{node.name} is missing parameter #{var.inspect}.") unless env.var(var.name)
198
+ env
199
+ end
200
+
201
+ with_environment(environment) {node.children = mixin.tree.map {|c| visit(c)}.flatten}
202
+ node
203
+ rescue Sass::SyntaxError => e
204
+ if original_env # Don't add backtrace info if this is an @include loop
205
+ e.modify_backtrace(:mixin => node.name, :line => node.line)
206
+ e.add_backtrace(:line => node.line)
207
+ end
208
+ raise e
209
+ ensure
210
+ original_env.pop_frame if original_env
211
+ end
212
+
213
+ # Runs any SassScript that may be embedded in a property.
214
+ def visit_prop(node)
215
+ node.resolved_name = run_interp(node.name)
216
+ val = node.value.perform(@environment)
217
+ node.resolved_value = val.to_s
218
+ yield
219
+ end
220
+
221
+ # Returns the value of the expression.
222
+ def visit_return(node)
223
+ throw :_sass_return, node.expr.perform(@environment)
224
+ end
225
+
226
+ # Runs SassScript interpolation in the selector,
227
+ # and then parses the result into a {Sass::Selector::CommaSequence}.
228
+ def visit_rule(node)
229
+ rule = node.rule
230
+ rule = rule.map {|e| e.is_a?(String) && e != ' ' ? e.strip : e} if node.style == :compressed
231
+ parser = Sass::SCSS::StaticParser.new(run_interp(node.rule), node.filename, node.line)
232
+ node.parsed_rules ||= parser.parse_selector
233
+ if node.options[:trace_selectors]
234
+ @environment.push_frame(:filename => node.filename, :line => node.line)
235
+ node.stack_trace = @environment.stack_trace
236
+ @environment.pop_frame
237
+ end
238
+ yield
239
+ end
240
+
241
+ # Loads the new variable value into the environment.
242
+ def visit_variable(node)
243
+ return [] if node.guarded && !@environment.var(node.name).nil?
244
+ val = node.expr.perform(@environment)
245
+ @environment.set_var(node.name, val)
246
+ []
247
+ end
248
+
249
+ # Prints the expression to STDERR with a stylesheet trace.
250
+ def visit_warn(node)
251
+ @environment.push_frame(:filename => node.filename, :line => node.line)
252
+ res = node.expr.perform(@environment)
253
+ res = res.value if res.is_a?(Sass::Script::String)
254
+ msg = "WARNING: #{res}\n "
255
+ msg << @environment.stack_trace.join("\n ")
256
+ # JRuby doesn't automatically add a newline for #warn
257
+ msg << (RUBY_PLATFORM =~ /java/ ? "\n\n" : "\n")
258
+ Sass::Util.sass_warn msg
259
+ []
260
+ ensure
261
+ @environment.pop_frame
262
+ end
263
+
264
+ # Runs the child nodes until the continuation expression becomes false.
265
+ def visit_while(node)
266
+ children = []
267
+ with_environment Sass::Environment.new(@environment) do
268
+ children += node.children.map {|c| visit(c)} while node.expr.perform(@environment).to_bool
269
+ end
270
+ children.flatten
271
+ end
272
+
273
+ def visit_directive(node)
274
+ if node.value['#{']
275
+ if node.value =~ /^@import (?!url\()/
276
+ Sass::Util.sass_warn <<WARNING
277
+ DEPRECATION WARNING on line #{node.line}#{" of #{node.filename}" if node.filename}:
278
+ @import directives using \#{} interpolation will need to use url() in Sass 3.2.
279
+ For example:
280
+
281
+ @import url("http://\#{$url}/style.css");
282
+ WARNING
283
+ end
284
+ node.value = run_interp(Sass::Engine.parse_interp(node.value, node.line, 0, node.options))
285
+ end
286
+ yield
287
+ node
288
+ end
289
+
290
+ private
291
+
292
+ def run_interp_no_strip(text)
293
+ text.map do |r|
294
+ next r if r.is_a?(String)
295
+ val = r.perform(@environment)
296
+ # Interpolated strings should never render with quotes
297
+ next val.value if val.is_a?(Sass::Script::String)
298
+ val.to_s
299
+ end.join
300
+ end
301
+
302
+ def run_interp(text)
303
+ run_interp_no_strip(text).strip
304
+ end
305
+
306
+ def handle_include_loop!(node)
307
+ msg = "An @include loop has been found:"
308
+ mixins = @environment.stack.map {|s| s[:mixin]}.compact
309
+ raise Sass::SyntaxError.new("#{msg} #{node.name} includes itself") if mixins.size == 1
310
+
311
+ mixins << node.name
312
+ msg << "\n" << Sass::Util.enum_cons(mixins, 2).map do |m1, m2|
313
+ " #{m1} includes #{m2}"
314
+ end.join("\n")
315
+ raise Sass::SyntaxError.new(msg)
316
+ end
317
+
318
+ def handle_import_loop!(node)
319
+ msg = "An @import loop has been found:"
320
+ files = @environment.stack.map {|s| s[:filename]}.compact
321
+ if node.filename == node.imported_file.options[:filename]
322
+ raise Sass::SyntaxError.new("#{msg} #{node.filename} imports itself")
323
+ end
324
+
325
+ files << node.filename << node.imported_file.options[:filename]
326
+ msg << "\n" << Sass::Util.enum_cons(files, 2).map do |m1, m2|
327
+ " #{m1} imports #{m2}"
328
+ end.join("\n")
329
+ raise Sass::SyntaxError.new(msg)
330
+ end
331
+
332
+ def check_for_loud_silent_comment(node)
333
+ return unless node.loud && node.silent
334
+ Sass::Util.sass_warn <<MESSAGE
335
+ WARNING:
336
+ On line #{node.line}#{" of '#{node.filename}'" if node.filename}
337
+ `//` comments will no longer be allowed to use the `!` flag in Sass 3.2.
338
+ Please change to `/*` comments.
339
+ MESSAGE
340
+ end
341
+
342
+ def check_for_comment_interp(node)
343
+ return if node.loud
344
+ node.value.each do |e|
345
+ next unless e.is_a?(String)
346
+ e.scan(/(\\*)#\{/) do |esc|
347
+ Sass::Util.sass_warn <<MESSAGE if esc.first.size.even?
348
+ WARNING:
349
+ On line #{node.line}#{" of '#{node.filename}'" if node.filename}
350
+ Comments will evaluate the contents of interpolations (\#{ ... }) in Sass 3.2.
351
+ Please escape the interpolation by adding a backslash before the `#`.
352
+ MESSAGE
353
+ return
354
+ end
355
+ end
356
+ end
357
+ end