css-annotate 1.3.0 → 2.0.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.
data/CHANGELOG CHANGED
@@ -1,3 +1,14 @@
1
+ 2010-11-21 version 2.0.0
2
+
3
+ Rack support! Mount css-annotate in your Web app to serve annotated
4
+ CSS/SCSS/SASS along the originals. See README for examples.
5
+
6
+
7
+ If no commented styles, show all styles by default.
8
+
9
+ Remove dependency on Compass, but absolutely use Compass when installed.
10
+
11
+
1
12
  2010-11-18 version 1.3.0
2
13
 
3
14
  By default only show commented styles (the ones that matter).
@@ -9,9 +9,34 @@
9
9
  -s --server Run a Web server
10
10
  --syntax [name] Either sass or scss (default)
11
11
 
12
- Example:
12
+ CSS annotate single file and pipe to browser:
13
13
  css-annotate lib/css/annotate/style.scss | bcat
14
- css-annotate --server lib/css/annotate/style.scss
14
+
15
+ Run as server on port 8080, annotate files in public/stylesheets:
16
+ css-annotate --server public/stylesheets
17
+ open http://localhost:8080/main.css
18
+
19
+
20
+ == Mount To Your App
21
+
22
+ You can mount css-annotate in your Web app (Rails 3.x, Padrino, etc) to serve
23
+ annotated versions of all CSS, SCSS and SASS files. For example, to mount all
24
+ files from public/stylesheets under the path /stylesheets/annotated:
25
+
26
+ mount CSS::Annotate.new=>"/stylesheets/annotated"
27
+
28
+ With yout browser, you can now access the CSS file /stylesheets/screen.css and
29
+ its annotated version from /stylesheets/annotated/screen.css.
30
+
31
+ To mount files from a different path, pass it as the sole argument to
32
+ CSS::Annotate. For example:
33
+
34
+ mount CSS::Annotate.new("app/views/stylesheets")=>"/stylesheets/annotated"
35
+
36
+ With your browser, you can now access the annotated SCSS file
37
+ /stylesheets/annotated/screen.scss. Note that both filename and extension must
38
+ match the file you want annotated.
39
+
15
40
 
16
41
  == Screenshot
17
42
 
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.3.0
1
+ 2.0.0
@@ -18,21 +18,12 @@ end
18
18
  if filename = ARGV[0]
19
19
  if server
20
20
  require "rack"
21
- app = lambda do |env|
22
- request = Rack::Request.new(env)
23
- if request.path == "/"
24
- html = CSS::Annotate.new(filename, options).to_html
25
- [200, { "Content-Type"=>"text/html", "Content-Length"=>html.length.to_s }, [html]]
26
- else
27
- [404, {}, "Not found"]
28
- end
29
- end
30
21
  trap(:INT) { exit! }
31
22
  trap(:QUIT) { exit! }
32
23
  server = Rack::Handler.default
33
- server.run app, :Host=>"127.0.0.1", :Port=>port || 8080
24
+ server.run CSS::Annotate.new(filename), :Host=>"127.0.0.1", :Port=>port || 8080
34
25
  else
35
- $stdout << CSS::Annotate.new(filename, options).to_html
26
+ $stdout << CSS::Annotate.new(options).to_html(filename)
36
27
  end
37
28
  else
38
29
  print <<-TEXT
@@ -45,9 +36,19 @@ Options:
45
36
  -s --server Run a Web server
46
37
  --syntax [name] Either sass or scss (default)
47
38
 
48
- Example:
49
- css-annotate lib/css/annotate/style.scss | bcat
50
- css-annotate --server lib/css/annotate/style.scss
39
+ CSS annotate single file and pipe to browser:
40
+ $ css-annotate lib/css/annotate/style.scss | bcat
41
+
42
+ Run as server on port 8080, annotate files in public/stylesheets:
43
+ $ css-annotate --server public/stylesheets
44
+ $ open http://localhost:8080/main.css
45
+
46
+ Mount to your Web app, annotate all files in app/view/stylesheets, access them
47
+ from /stylesheets/annotated:
48
+ Application.routes.draw do
49
+ mount CSS::Annotate.new("app/views/stylesheets")=>"/stylesheets/annotated"
50
+ end
51
+ $ open http://localhost:3000/stylesheets/annotated/screen.scss
51
52
 
52
53
  TEXT
53
54
  exit -1
@@ -19,7 +19,6 @@ Gem::Specification.new do |spec|
19
19
  "--webcvs", "http://github.com/assaf/#{spec.name}"
20
20
 
21
21
  spec.required_ruby_version = '>= 1.8.7'
22
- spec.add_dependency "compass", "~>0.10"
23
22
  spec.add_dependency "haml", "~>3.0"
24
23
  spec.add_dependency "rack", "~>1.1"
25
24
  end
@@ -1,52 +1,76 @@
1
1
  require "haml"
2
2
  require "sass/engine"
3
- require "compass"
4
3
  require "erb"
5
4
  require "cgi"
5
+ require "rack"
6
6
 
7
7
  module CSS
8
8
  class Annotate
9
9
 
10
- def initialize(filename, options = {})
11
- @filename = filename
12
- @options = options.clone
13
- paths = @options[:load_paths] || []
14
- paths.push File.dirname(@filename)
15
- paths.concat Compass::Frameworks::ALL.map { |framework| framework.stylesheets_directory }
10
+ # @param [Hash, String, nil] options Hash with options, just the path, or
11
+ # nil
12
+ # @options options [String] path Path to your CSS/SCSS/SASS source files
13
+ # @options options [Array<String>] load_paths Additional paths for loading
14
+ # CSS files
15
+ # @options options [Boolean] all If nil, true show all styles (with buttons to
16
+ # show only commented); if false show only commented styles.
17
+ def initialize(options = nil)
18
+ @options = String === options ? { :path=>options } : options ? options.clone : {}
19
+ @options[:path] ||= "public/stylesheets/"
20
+ paths =[@options[:path]]
21
+ paths.concat Compass::Frameworks::ALL.map { |framework| framework.stylesheets_directory } if defined?(Compass)
16
22
  @options[:load_paths] = paths
17
- @options[:syntax] ||= guess_syntax(filename)
23
+ @options[:all] = true unless @options.has_key?(:all)
18
24
  end
19
25
 
20
- attr_reader :filename, :options, :rows
26
+ attr_reader :options, :rows
21
27
 
22
- def annotate
23
- engine = Sass::Engine.new(IO.read(filename), options)
28
+ # Annotate the named file. Sets and returns rows.
29
+ def annotate(filename)
30
+ engine = Sass::Engine.new(IO.read(filename), options.merge(:syntax=>guess_syntax(filename)))
24
31
  tree = engine.to_tree
25
32
  tree.perform!(Sass::Environment.new)
26
33
  resolve_rules tree
27
34
  @rows = to_rows(tree)
28
35
  end
29
36
 
30
- def h(raw)
31
- CGI.escapeHTML(raw.to_s)
32
- end
33
-
34
- def to_html
35
- rows = annotate
37
+ # Annotate the named file, returns HTML document.
38
+ def to_html(filename)
39
+ rows = annotate(filename)
36
40
  ERB.new(IO.read(File.dirname(__FILE__) + "/annotate/template.erb")).result(binding)
37
41
  rescue Sass::SyntaxError=>error
38
42
  error = Sass::SyntaxError.exception_to_css error, @options.merge(:full_exception=>true)
39
43
  ERB.new(IO.read(File.dirname(__FILE__) + "/annotate/template.erb")).result(binding)
40
44
  end
41
45
 
46
+ # ERB template uses this to HTML escape content.
47
+ def h(raw)
48
+ CGI.escapeHTML(raw.to_s)
49
+ end
50
+
51
+ # ERB template uses this to obtain our own stylesheet.
42
52
  def styles
43
53
  Sass::Engine.new(IO.read(File.dirname(__FILE__) + "/annotate/style.scss"), :syntax=>:scss).render
44
54
  end
45
-
55
+
56
+ # EBB template uses this to determine if it should show all, or just
57
+ # commented, styles.
46
58
  def all?
47
59
  !!options[:all]
48
60
  end
49
61
 
62
+ def call(env)
63
+ request = Rack::Request.new(env)
64
+ filename = request.path_info.split("/").last
65
+ filename = File.expand_path(filename, @options[:path]) if filename
66
+ if filename && File.exist?(filename)
67
+ html = to_html(filename)
68
+ [200, { "Content-Type"=>"text/html", "Content-Length"=>html.length.to_s }, [html]]
69
+ else
70
+ [404, { "Content-Type"=>"text/plain" }, ["Could not find '#{filename}'"]]
71
+ end
72
+ end
73
+
50
74
  protected
51
75
 
52
76
  def resolve_rules(parent)
@@ -30,6 +30,15 @@ h3, h4, h5, h6 {
30
30
  right: 1em;
31
31
  top: 0.3em;
32
32
  font-size: 90%;
33
+ a {
34
+ color: #261a3b;
35
+ text-decoration: none;
36
+ font-weight: bold;
37
+ background: #fff;
38
+ padding: 2px 6px;
39
+ -moz-border-radius: 4px;
40
+ -webkit-border-radius: 4px;
41
+ }
33
42
  /* Link to show all rules */
34
43
  [rel="show"] { display: none }
35
44
  /* Link to show only commented rules */
@@ -71,7 +80,7 @@ table.annotated {
71
80
  /* Apply to column that contains CSS style */
72
81
  td.style {
73
82
  width: 40em;
74
- background: #eef;
83
+ background: #f5f5ff;
75
84
  vertical-align: top;
76
85
  padding: 1em 1em 1em 2em;
77
86
  border-left: 1px solid #ccc;
@@ -80,7 +89,7 @@ table.annotated {
80
89
  }
81
90
 
82
91
  &:hover td {
83
- background: #ddf;
92
+ background: #f5f5ff;
84
93
  }
85
94
  }
86
95
  }
@@ -2,24 +2,6 @@
2
2
  <head>
3
3
  <title>Your CSS, annotated</title>
4
4
  <style><%= styles %><%= error %></style>
5
- <% if all? %>
6
- <script type="text/javascript">
7
- function toggle(show) {
8
- var styles = document.styleSheets[0];
9
- var rules = styles.cssRules || styles.rules;
10
- for (var i in rules) {
11
- var rule = rules[i];
12
- if (rule.selectorText == "table.annotated tr")
13
- rule.style.display = show ? "table-row" : "none";
14
- if (rule.selectorText == ".toggle [rel=\"show\"]")
15
- rule.style.display = show ? "none" : "inherit";
16
- if (rule.selectorText == ".toggle [rel=\"hide\"]")
17
- rule.style.display = show ? "inherit" : "none";
18
- }
19
- }
20
- toggle(false);
21
- </script>
22
- <% end %>
23
5
  </head>
24
6
  <body>
25
7
  <% if rows %>
@@ -45,5 +27,24 @@
45
27
  Generated from <span class="filename"><%= filename %></span> on
46
28
  <%= Time.now.strftime("%c") %> by <a href="http://github.com/assaf/css-annotate">CSS Annotate</a>
47
29
  </div>
30
+ <% if all? %>
31
+ <script type="text/javascript">
32
+ function toggle(show) {
33
+ var styles = document.styleSheets[0];
34
+ var rules = styles.cssRules || styles.rules;
35
+ for (var i in rules) {
36
+ var rule = rules[i];
37
+ if (rule.selectorText == "table.annotated tr")
38
+ rule.style.display = show ? "table-row" : "none";
39
+ if (rule.selectorText == ".toggle [rel=\"show\"]")
40
+ rule.style.display = show ? "none" : "inherit";
41
+ if (rule.selectorText == ".toggle [rel=\"hide\"]")
42
+ rule.style.display = show ? "inherit" : "none";
43
+ }
44
+ }
45
+ var commented = document.getElementsByClassName("commented");
46
+ toggle(commented.length == 0);
47
+ </script>
48
+ <% end %>
48
49
  </body>
49
50
  </html>
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: css-annotate
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
- - 1
8
- - 3
7
+ - 2
9
8
  - 0
10
- version: 1.3.0
9
+ - 0
10
+ version: 2.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Assaf Arkin
@@ -15,28 +15,13 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-18 00:00:00 -08:00
18
+ date: 2010-11-21 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
- - !ruby/object:Gem::Dependency
22
- name: compass
23
- prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- hash: 31
30
- segments:
31
- - 0
32
- - 10
33
- version: "0.10"
34
- type: :runtime
35
- version_requirements: *id001
36
21
  - !ruby/object:Gem::Dependency
37
22
  name: haml
38
23
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
24
+ requirement: &id001 !ruby/object:Gem::Requirement
40
25
  none: false
41
26
  requirements:
42
27
  - - ~>
@@ -47,11 +32,11 @@ dependencies:
47
32
  - 0
48
33
  version: "3.0"
49
34
  type: :runtime
50
- version_requirements: *id002
35
+ version_requirements: *id001
51
36
  - !ruby/object:Gem::Dependency
52
37
  name: rack
53
38
  prerelease: false
54
- requirement: &id003 !ruby/object:Gem::Requirement
39
+ requirement: &id002 !ruby/object:Gem::Requirement
55
40
  none: false
56
41
  requirements:
57
42
  - - ~>
@@ -62,7 +47,7 @@ dependencies:
62
47
  - 1
63
48
  version: "1.1"
64
49
  type: :runtime
65
- version_requirements: *id003
50
+ version_requirements: *id002
66
51
  description: Uses in-line docs to map the stylesheet. Supports CSS and SCSS.
67
52
  email: assaf@labnotes.org
68
53
  executables:
@@ -92,7 +77,7 @@ licenses: []
92
77
  post_install_message: To get started, run the command css-annotate
93
78
  rdoc_options:
94
79
  - --title
95
- - css-annotate 1.3.0
80
+ - css-annotate 2.0.0
96
81
  - --main
97
82
  - README.rdoc
98
83
  - --webcvs