xass 0.1.8 → 0.1.9

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1379c927e3705f0b1b043c71175479304ad30d03
4
- data.tar.gz: 2f7fcce9680f8c8eb9ec60a9edb0e6e21da10647
3
+ metadata.gz: 80a50e4ca63afeb3d5131cdf4cdd811b930b8ea8
4
+ data.tar.gz: 8bddf67014de48ec254ddef2faed3155305b508d
5
5
  SHA512:
6
- metadata.gz: 65808d49586c48ae14721767581591bc76b604fb0dd1f1c065ea92f8e59c1a27c1795fa8c094372dbedd2ff671b4dc3d89d709faf97d3c9392944446b3deb61d
7
- data.tar.gz: c0862d2067d4328c79e06ae1d4b5ff2ca2f6c3846c145bea648b0bcfeff09d622aa7a25a89e5085522f3e761dbc6555ad2c1e6e807b54b67343d94ea7f8e20ef
6
+ metadata.gz: 9e3e98cd4b5b969ffba2c7fe4ab8b4e1ec4f8e20c0ee46b492b53909a9616f26a55214b6bdf05b28599d6d80abc37285cece2035a05b631a18edd7047771690f
7
+ data.tar.gz: 1dc7a5bd0f6eb59c0dba2de7213501ea292e879d314876592cc21cff2996fecc6f88ced0063dcfd0e9d576e551cb77366d71a03fc122d0b4bd9a8d1e53052f76
@@ -1,15 +1,13 @@
1
1
  module Xass
2
2
  module ViewHelpers
3
3
  def namespace(*names, reset: false, &block)
4
- nss = namespaces
5
- if reset
6
- @namespaces = [names]
7
- else
8
- @namespaces = nss + [names]
9
- end
4
+ n = reset ? names : namespace_stack.last + names
5
+ namespace_stack.push(n)
10
6
  res = capture(&block)
11
- @namespaces = nss
12
- res
7
+ namespace_stack.pop
8
+ node = Nokogiri::HTML(res)
9
+ process_namespace_classes(node, n)
10
+ node.to_html.html_safe
13
11
  end
14
12
 
15
13
  def namespace!(*names, &block)
@@ -17,8 +15,8 @@ module Xass
17
15
  end
18
16
 
19
17
  def namespace_with_root(*names, tag: :div, attrs: {}, reset: false, &block)
20
- nss = reset ? [] : namespaces
21
- content_tag(tag, block ? namespace(*names, reset: reset, &block) : '', attrs_with_additional_class(attrs, ns_root!(*(nss.flatten + names))))
18
+ nss = reset ? [] : namespace_stack.last
19
+ content_tag(tag, block ? namespace(*names, reset: reset, &block) : '', attrs_with_additional_class(attrs, ns_root!(*(nss + names))))
22
20
  end
23
21
 
24
22
  def namespace_with_root!(*names, tag: :div, attrs: {}, &block)
@@ -31,18 +29,14 @@ module Xass
31
29
  content_tag(_tag, block ? capture(&block) : '', attrs_with_additional_name(_attrs, name))
32
30
  end
33
31
 
34
- def ns_link_to(name, _name = nil, options = nil, html_options = nil, &block)
35
- if block
36
- options ||= {}
37
- link_to(_name, attrs_with_additional_name(options, name), &block)
38
- else
39
- html_options ||= {}
40
- link_to(_name, options, attrs_with_additional_name(html_options, name), &block)
41
- end
32
+ def ns_content(name = :content, _tag = nil, _attrs = nil, tag: :div, attrs: {}, &block)
33
+ _tag ||= tag
34
+ _attrs ||= attrs
35
+ ns_wrap(name, tag: _tag, attrs: _attrs, &block)
42
36
  end
43
37
 
44
38
  def ns_root(*names)
45
- ns_root!(*(namespaces.flatten + names))
39
+ ns_root!(*(namespace_stack.last + names))
46
40
  end
47
41
 
48
42
  def ns_root!(*names)
@@ -50,17 +44,35 @@ module Xass
50
44
  end
51
45
 
52
46
  def ns(*names)
53
- "#{ns_root(*names[0...-1])}___#{names[-1]}"
47
+ ns!(*(namespace_stack.last + names))
54
48
  end
55
49
 
56
50
  def ns!(*names)
57
51
  "#{ns_root!(*names[0...-1])}___#{names[-1]}"
58
52
  end
59
53
 
54
+ def ns_link_to(name, _name = nil, options = nil, html_options = nil, &block)
55
+ if block
56
+ options ||= {}
57
+ link_to(_name, attrs_with_additional_name(options, name), &block)
58
+ else
59
+ html_options ||= {}
60
+ link_to(_name, options, attrs_with_additional_name(html_options, name), &block)
61
+ end
62
+ end
63
+
64
+ alias :dns :namespace
65
+ alias :dns! :namespace!
66
+ alias :dnsr :namespace_with_root
67
+ alias :dnsr! :namespace_with_root!
68
+ alias :nsr :ns_root
69
+ alias :nsr! :ns_root!
70
+ alias :nsc :ns_content
71
+
60
72
  private
61
73
 
62
- def namespaces
63
- @namespaces ||= []
74
+ def namespace_stack
75
+ @namespace_stack ||= [[]]
64
76
  end
65
77
 
66
78
  def attrs_with_additional_class(attrs, klass)
@@ -72,5 +84,40 @@ module Xass
72
84
  def attrs_with_additional_name(attrs, name)
73
85
  attrs_with_additional_class(attrs, ns(name))
74
86
  end
87
+
88
+ def process_namespace_classes(node, n)
89
+ unless node['class'].blank?
90
+ node['class'] = node['class'].split(/ +/).map { |c|
91
+ if c.start_with?('ns-')
92
+ ns!(*n, *c[3..-1].split('--'))
93
+ elsif c.start_with?('nsb-')
94
+ ns!(*c[4..-1].split('--'))
95
+ elsif c.start_with?('dns-')
96
+ n = n + c[4..-1].split('--')
97
+ ''
98
+ elsif c.start_with?('dnsb-')
99
+ n = c[5..-1].split('--')
100
+ ''
101
+ elsif c == 'nsr'
102
+ nsr!(*n)
103
+ elsif c.start_with?('nsr-')
104
+ nsr!(*n, *c[4..-1].split('--'))
105
+ elsif c.start_with?('nsrb-')
106
+ nsr!(*c[5..-1].split('--'))
107
+ elsif c.start_with?('dnsr-')
108
+ n = n + c[5..-1].split('--')
109
+ nsr!(*n)
110
+ elsif c.start_with?('dnsrb-')
111
+ n = c[6..-1].split('--')
112
+ nsr!(*n)
113
+ else
114
+ c
115
+ end
116
+ }.join(' ')
117
+ end
118
+ node.children.each do |c|
119
+ process_namespace_classes(c, n)
120
+ end
121
+ end
75
122
  end
76
123
  end
data/lib/xass.rb CHANGED
@@ -25,8 +25,8 @@ module Sass::Tree
25
25
  trace_node = Sass::Tree::TraceNode.from_node(node.name, node)
26
26
  with_environment(env) {
27
27
  trace_node.children = mixin.tree.map {|c|
28
- d = c.dup
29
- d.filename = node.filename
28
+ d = c.deep_copy
29
+ xass_recursive_set_filename(d, node.filename)
30
30
  visit(d)
31
31
  }.flatten
32
32
  }
@@ -41,6 +41,13 @@ module Sass::Tree
41
41
  ensure
42
42
  @stack.pop unless include_loop
43
43
  end
44
+
45
+ private
46
+
47
+ def xass_recursive_set_filename(node, filename)
48
+ node.filename = filename
49
+ node.children.each { |x| xass_recursive_set_filename(x, filename) }
50
+ end
44
51
  end
45
52
 
46
53
  class RootNode
@@ -50,9 +57,12 @@ module Sass::Tree
50
57
  old_render.split('/*').map { |x|
51
58
  next x unless x.match(/^ line [0-9]+, /)
52
59
  a, b = x.split("\n", 2)
53
- m = a.match(/\/app\/assets\/stylesheets\/([^. ]+)\./)
54
- next "#{a}\n#{b}" unless m
55
- selector = class_replaced_selector(b.split("\n")[0].strip[0...-1].strip, class_prefix(m[1]))
60
+ m = a.match(/#{Rails.root}\/app\/assets\/stylesheets\/([^. ]+)\./)
61
+ d = "#{a}\n#{b}"
62
+ next d unless m
63
+ p = class_prefix(m[1])
64
+ next d unless p
65
+ selector = class_replaced_selector(b.split("\n")[0].strip[0...-1].strip, p)
56
66
  "#{a}\n#{selector} {\n#{b.split("\n", 2)[1]}"
57
67
  }.join('/*')
58
68
  end
@@ -68,7 +78,8 @@ module Sass::Tree
68
78
  def class_prefix(name)
69
79
  names = name.split('/')
70
80
  names = names[1..(names.index { |x| x.start_with?('!') } || -1)]
71
- names.join('__')
81
+ p = names.join('__')
82
+ p.empty? ? nil : p
72
83
  end
73
84
 
74
85
  def replace_class(doc, class_prefix)
data/xass.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'xass'
3
- s.version = '0.1.8'
3
+ s.version = '0.1.9'
4
4
  s.authors = ['Tetsuri Moriya']
5
5
  s.email = ['tetsuri.moriya@gmail.com']
6
6
  s.summary = 'Sass namespace extension'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: xass
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tetsuri Moriya
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-02 00:00:00.000000000 Z
11
+ date: 2014-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rspec
@@ -112,4 +112,3 @@ signing_key:
112
112
  specification_version: 4
113
113
  summary: Sass namespace extension
114
114
  test_files: []
115
- has_rdoc: