kss 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -1,19 +1,74 @@
1
1
  # Knyle Style Sheets
2
2
 
3
- This is a ruby library for parsing KSS documented stylesheets and generating styleguides.
3
+ Inspired by [TomDoc](http://tomdoc.org), KSS attempts to provide a methodology for writing maintainable, documented CSS within a team. Specifically, KSS is a documentation specification and styleguide format. It is **not** a preprocessor, CSS framework, naming convention, or specificity guideline.
4
4
 
5
- Inspired by [TomDoc](http://tomdoc.org), KSS attempts to provide a methodology for writing maintainable, documented CSS within a team. Specifically, KSS is a CSS structure, documentation specification, and styleguide format. It is **not** a preprocessor, CSS framework, naming convention, or specificity guideline.
5
+ * **[The Spec (What KSS is)](https://github.com/kneath/kss/blob/master/SPEC.md)**
6
+ * **[Example living styleguide](https://github.com/kneath/kss/tree/master/example)**
6
7
 
7
- ## Spec
8
+ ## KSS in a nutshell
8
9
 
9
- If you would like to learn more about the methodology and ideas behind Knyle Style Sheets, you should read SPEC.md. It contains the documenting syntax and styleguide guidelines.
10
+ The methodology and ideas behind Knyle Style Sheets are contained in [SPEC.md](https://github.com/kneath/kss/blob/master/SPEC.md). At it's core, KSS is a documenting syntax for CSS.
11
+
12
+ ```css
13
+ /*
14
+ A button suitable for giving stars to someone.
15
+
16
+ :hover - Subtle hover highlight.
17
+ .stars-given - A highlight indicating you've already given a star.
18
+ .stars-given:hover - Subtle hover highlight on top of stars-given styling.
19
+ .disabled - Dims the button to indicate it cannot be used.
20
+
21
+ Styleguide 2.1.3.
22
+ */
23
+ a.button.star{
24
+ ...
25
+ }
26
+ a.button.star.stars-given{
27
+ ...
28
+ }
29
+ a.button.star.disabled{
30
+ ...
31
+ }
32
+ ```
10
33
 
11
34
  ## Ruby Library
12
35
 
13
- This repository includes a ruby library suitable for parsing SASS, SCSS, and CSS documented with KSS guidelines.
36
+ This repository includes a ruby library suitable for parsing SASS, SCSS, and CSS documented with KSS guidelines. To use the library, include it in your project as a gem from <https://rubygems.org/gems/kss>. Then, create a parser and explore your KSS.
37
+
38
+ ```ruby
39
+ styleguide = Kss::Parser.new("#{RACK_ROOT}public/stylesheets")
40
+
41
+ styleguide.section('2.1.1')
42
+ # => <Kss::Section>
43
+
44
+ styleguide.section('2.1.1').description
45
+ # => "A button suitable for giving stars to someone."
46
+
47
+ styleguide.section('2.1.1').modifiers.first
48
+ # => <Kss::Modifier>
49
+
50
+ styleguide.section('2.1.1').modifiers.first.name
51
+ # => ':hover'
52
+
53
+ styleguide.section('2.1.1').modifiers.first.class_name
54
+ # => 'pseudo-class-hover'
55
+
56
+ styleguide.section('2.1.1').modifiers.first.first.description
57
+ # => 'Subtle hover highlight'
58
+
59
+ ```
14
60
 
15
61
  The library is also fully TomDoc'd, completing the circle of life.
16
62
 
63
+ ## Generating styleguides
64
+
65
+ The documenting syntax and ruby library are intended to generate styleguides automatically. To do this, you'll need to leverage a small javascript library that generates class styles for pseudo-class styles (`:hover`, `:disabled`, etc).
66
+
67
+ * [kss.coffee](https://github.com/kneath/kss/blob/master/lib/kss.coffee)
68
+ * [kss.js](https://github.com/kneath/kss/blob/master/lib/kss.js) (compiled js)
69
+
70
+ For an example of how to generate a styleguide, check out the [`example`](https://github.com/kneath/kss/tree/master/example) sinatra application.
71
+
17
72
  ## Development
18
73
 
19
74
  To hack on KSS, you'll need to install dependencies with `bundle install`. Run tests with `rake`.
@@ -0,0 +1,38 @@
1
+ # This class scans your stylesheets for pseudo classes, then inserts a new CSS
2
+ # rule with the same properties, but named 'psuedo-class-{{name}}'.
3
+ #
4
+ # Supported pseudo classes: hover, disabled.
5
+ #
6
+ # Example:
7
+ #
8
+ # a:hover{ color:blue; }
9
+ # => a.pseudo-class-hover{ color:blue; }
10
+ class KssStateGenerator
11
+ constructor: ->
12
+ hover = /:hover/
13
+ disabled = /:disabled/
14
+
15
+ try
16
+ for stylesheet in document.styleSheets
17
+ idxs = []
18
+ for rule, idx in stylesheet.cssRules
19
+ if rule.type is CSSRule.STYLE_RULE and (hover.test(rule.selectorText) or disabled.test(rule.selectorText))
20
+ @insertRule(rule.cssText.replace(':', '.pseudo-class-'))
21
+
22
+ # Takes a given style and attaches it to the current page.
23
+ #
24
+ # rule - A CSS rule String (ex: ".test{ display:none; }").
25
+ #
26
+ # Returns nothing.
27
+ insertRule: (rule) ->
28
+ headEl = document.getElementsByTagName('head')[0]
29
+ styleEl = document.createElement('style')
30
+ styleEl.type = 'text/css'
31
+ if styleEl.styleSheet
32
+ styleEl.styleSheet.cssText = rule
33
+ else
34
+ styleEl.appendChild(document.createTextNode(rule))
35
+
36
+ headEl.appendChild(styleEl)
37
+
38
+ new KssStateGenerator
@@ -13,17 +13,27 @@ module Kss
13
13
 
14
14
  Dir["#{base_path}/**/*.*"].each do |filename|
15
15
  root_node = Sass::SCSS::Parser.new(File.read(filename), filename).parse
16
- root_node.children.each do |node|
17
- next unless node.is_a? Sass::Tree::CommentNode
18
- comment_text = self.class.clean_comments node.value[0]
16
+ parse_node(root_node, filename)
19
17
 
20
- if self.class.kss_block? comment_text
21
- base_name = File.basename(filename)
22
- section = Section.new(comment_text, base_name)
23
- @sections[section.section] = section
24
- end
18
+ end
19
+ end
20
+
21
+ def parse_node parent_node, filename
22
+ parent_node.children.each do |node|
23
+ unless node.is_a? Sass::Tree::CommentNode
24
+ parse_node(node, filename) if node.has_children
25
+ next
26
+ end
27
+ comment_text = self.class.clean_comments node.value[0]
28
+
29
+ if self.class.kss_block? comment_text
30
+ base_name = File.basename(filename)
31
+ section = Section.new(comment_text, base_name)
32
+ @sections[section.section] = section
25
33
  end
26
34
  end
35
+
36
+ parent_node
27
37
  end
28
38
 
29
39
  # Public: Takes a cleaned (no comment syntax like // or /* */) comment
@@ -34,7 +44,7 @@ module Kss
34
44
  return false unless cleaned_comment.is_a? String
35
45
 
36
46
  possible_reference = cleaned_comment.split("\n\n").last
37
- possible_reference =~ /Styleguide \d/i
47
+ possible_reference =~ /Styleguide \d/
38
48
  end
39
49
 
40
50
  # Takes the raw comment text including comment syntax and strips all
@@ -53,11 +63,13 @@ module Kss
53
63
  text.gsub!(/^\/\*/, '') # starting block
54
64
  text.gsub!(/\*\/$/, '') # ending block
55
65
 
66
+ text.gsub!(/^[ \t]+/, '') # remove leading whitespace
67
+
56
68
  text.strip!
57
69
  text
58
70
  end
59
71
 
60
- # Finds the Section for a given styleguide reference
72
+ # Public: Finds the Section for a given styleguide reference.
61
73
  #
62
74
  # Returns a Section for a reference, or a blank Section if none found.
63
75
  def section(reference)
@@ -1,3 +1,3 @@
1
1
  module Kss
2
- VERSION = "0.1.1"
2
+ VERSION = "0.1.2"
3
3
  end
@@ -0,0 +1,12 @@
1
+ // Your standard form element.
2
+ //
3
+ // Styleguide 3.0.0
4
+ form {
5
+
6
+ // Your standard text input box.
7
+ //
8
+ // Styleguide 3.0.1
9
+ input[type="text"] {
10
+ border: 1px solid #ccc;
11
+ }
12
+ }
@@ -26,6 +26,17 @@ comment
26
26
  * Styleguide 2.2.1. */
27
27
  comment
28
28
 
29
+ @indented_css_comment = <<comment
30
+ /*
31
+ A button suitable for giving stars to someone.
32
+
33
+ .star-given - A highlight indicating you've already given a star.
34
+ .disabled - Dims the button to indicate it cannot be used.
35
+
36
+ Styleguide 2.2.1.
37
+ */
38
+ comment
39
+
29
40
  @cleaned_css_comment = <<comment
30
41
  A button suitable for giving stars to someone.
31
42
 
@@ -53,6 +64,13 @@ comment
53
64
  Kss::Parser.clean_comments(@css_comment)
54
65
  assert_equal @cleaned_css_comment,
55
66
  Kss::Parser.clean_comments(@starred_css_comment)
67
+ assert_equal @cleaned_css_comment,
68
+ Kss::Parser.clean_comments(@indented_css_comment)
69
+ end
70
+
71
+ test "parses nested SCSS documents" do
72
+ assert_equal "Your standard form element.", @scss_parsed.section('3.0.0').description
73
+ assert_equal "Your standard text input box.", @scss_parsed.section('3.0.1').description
56
74
  end
57
75
 
58
- end
76
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kss
3
3
  version: !ruby/object:Gem::Version
4
- hash: 25
4
+ hash: 31
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 1
10
- version: 0.1.1
9
+ - 2
10
+ version: 0.1.2
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kyle Neath
@@ -15,11 +15,10 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-12-02 00:00:00 -08:00
18
+ date: 2011-12-07 00:00:00 -08:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: sass
23
22
  prerelease: false
24
23
  requirement: &id001 !ruby/object:Gem::Requirement
25
24
  none: false
@@ -32,6 +31,7 @@ dependencies:
32
31
  - 1
33
32
  version: "3.1"
34
33
  type: :runtime
34
+ name: sass
35
35
  version_requirements: *id001
36
36
  description: " Inspired by TomDoc, KSS attempts to provide a methodology for writing\n maintainable, documented CSS within a team. Specifically, KSS is a CSS\n structure, documentation specification, and styleguide format.\n\n This is a ruby library for parsing KSS documented CSS and generating\n styleguides.\n"
37
37
  email: kneath@gmail.com
@@ -49,9 +49,11 @@ files:
49
49
  - lib/kss/parser.rb
50
50
  - lib/kss/section.rb
51
51
  - lib/kss/version.rb
52
+ - lib/kss.coffee
52
53
  - lib/kss.rb
53
54
  - test/fixtures/css/buttons.css
54
55
  - test/fixtures/scss/buttons.scss
56
+ - test/fixtures/scss/nested.scss
55
57
  - test/helper.rb
56
58
  - test/parser_test.rb
57
59
  - test/section_test.rb