html_namespacing 0.1.8 → 0.2.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.
@@ -221,7 +221,12 @@ add_namespace_to_html_with_length_and_allocation_strategy(
|
|
221
221
|
} \
|
222
222
|
} while (0)/*;*/
|
223
223
|
#define ADVANCE_UNTIL_ONE_OF_THESE_CHARS(chars) \
|
224
|
-
|
224
|
+
do { \
|
225
|
+
const size_t num_chars = strcspn(html_p, chars); \
|
226
|
+
ADVANCE(num_chars); \
|
227
|
+
if (*html_p == '\0') \
|
228
|
+
goto end; \
|
229
|
+
} while (0) /*;*/
|
225
230
|
|
226
231
|
unsigned int state;
|
227
232
|
char *r; /* Start of retval */
|
@@ -385,6 +390,7 @@ add_namespace_to_html_with_length_and_allocation_strategy(
|
|
385
390
|
}
|
386
391
|
}
|
387
392
|
|
393
|
+
end:
|
388
394
|
COPY_TO_HERE();
|
389
395
|
APPEND_END_OF_STRING();
|
390
396
|
|
@@ -34,29 +34,83 @@ module HtmlNamespacing
|
|
34
34
|
@options[:javascript_root] || RAILS_ROOT + '/app/javascripts/views'
|
35
35
|
end
|
36
36
|
|
37
|
+
def self.stylesheet_root
|
38
|
+
@options[:stylesheet_root] || RAILS_ROOT + '/app/stylesheets/views'
|
39
|
+
end
|
40
|
+
|
37
41
|
def self.javascript_optional_suffix
|
38
42
|
@options[:javascript_optional_suffix]
|
39
43
|
end
|
40
44
|
|
45
|
+
def self.stylesheet_optional_suffix
|
46
|
+
@options[:stylesheet_optional_suffix]
|
47
|
+
end
|
48
|
+
|
41
49
|
def self.template_formats
|
42
50
|
@formats ||= Set.new(@options[:template_formats] || ['html'])
|
43
51
|
end
|
44
52
|
|
45
53
|
module Helpers
|
54
|
+
#
|
55
|
+
# Return the javascript for the rendered partials, wrapped in
|
56
|
+
# a script tag.
|
57
|
+
#
|
46
58
|
def html_namespacing_javascript_tag(framework, options = {})
|
47
|
-
|
48
|
-
|
59
|
+
js = html_namespacing_javascript(framework, options)
|
60
|
+
unless js.blank?
|
61
|
+
"<script type=\"text/javascript\"><!--//--><![CDATA[//><!--\n#{js}//--><!]]></script>"
|
62
|
+
end
|
63
|
+
end
|
49
64
|
|
65
|
+
#
|
66
|
+
# Return the javascript for the rendered partials.
|
67
|
+
#
|
68
|
+
def html_namespacing_javascript(framework, options = {})
|
69
|
+
root = Pathname.new(Rails.javascript_root)
|
70
|
+
optional_suffix = Rails.javascript_optional_suffix
|
71
|
+
files = html_namespacing_files('js',
|
72
|
+
:format => options[:format],
|
73
|
+
:optional_suffix => optional_suffix,
|
74
|
+
:root => root.to_s)
|
50
75
|
unless files.empty?
|
51
|
-
r =
|
52
|
-
|
53
|
-
r << "\n"
|
54
|
-
files.collect do |path|
|
76
|
+
r = [HtmlNamespaceJs[framework][:top]] << "\n"
|
77
|
+
files.each do |path|
|
55
78
|
relative_path = Pathname.new(path).relative_path_from(root)
|
56
|
-
r << html_namespacing_inline_js(framework, relative_path.to_s, path)
|
57
|
-
r << "\n"
|
79
|
+
r << html_namespacing_inline_js(framework, relative_path.to_s, path) << "\n"
|
58
80
|
end
|
59
|
-
r
|
81
|
+
r.join
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
#
|
86
|
+
# Return the CSS for the rendered partials, wrapped in a style
|
87
|
+
# tag.
|
88
|
+
#
|
89
|
+
def html_namespacing_style_tag(options = {}, style_tag_attributes = {})
|
90
|
+
css = html_namespacing_styles(options)
|
91
|
+
unless css.blank?
|
92
|
+
attribute_string = style_tag_attributes.map{|k,v| " #{k}=\"#{v}\""}.join
|
93
|
+
"<style type=\"text/css\"#{attribute_string}>#{css}</style>"
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
#
|
98
|
+
# Return the CSS for the rendered partials.
|
99
|
+
#
|
100
|
+
def html_namespacing_styles(options = {})
|
101
|
+
root = Pathname.new(Rails.stylesheet_root)
|
102
|
+
optional_suffix = Rails.stylesheet_optional_suffix
|
103
|
+
files = html_namespacing_files('sass',
|
104
|
+
:format => options[:format],
|
105
|
+
:optional_suffix => optional_suffix,
|
106
|
+
:root => root.to_s)
|
107
|
+
unless files.empty?
|
108
|
+
r = []
|
109
|
+
files.each do |path|
|
110
|
+
relative_path = Pathname.new(path).relative_path_from(root)
|
111
|
+
r << html_namespacing_inline_css(relative_path.to_s, path)
|
112
|
+
end
|
113
|
+
r.join
|
60
114
|
end
|
61
115
|
end
|
62
116
|
|
@@ -69,14 +123,15 @@ module HtmlNamespacing
|
|
69
123
|
}
|
70
124
|
}
|
71
125
|
|
72
|
-
def html_namespacing_files(
|
126
|
+
def html_namespacing_files(suffix, options={})
|
127
|
+
format = options[:format]
|
73
128
|
(Array === format ? format : [format]).inject([]) do |r, f|
|
74
129
|
r.concat(GlobFu.find(
|
75
130
|
html_namespacing_rendered_paths,
|
76
|
-
:suffix =>
|
131
|
+
:suffix => suffix,
|
77
132
|
:extra_suffix => f && f.to_s,
|
78
|
-
:optional_suffix =>
|
79
|
-
:root =>
|
133
|
+
:optional_suffix => options[:optional_suffix],
|
134
|
+
:root => options[:root]
|
80
135
|
))
|
81
136
|
end
|
82
137
|
end
|
@@ -87,6 +142,10 @@ module HtmlNamespacing
|
|
87
142
|
|
88
143
|
HtmlNamespaceJs[framework][:each] % [namespace.to_json, content]
|
89
144
|
end
|
145
|
+
|
146
|
+
def html_namespacing_inline_css(relative_path, absolute_path)
|
147
|
+
HtmlNamespacing.options[:styles_for].call(relative_path, absolute_path)
|
148
|
+
end
|
90
149
|
end
|
91
150
|
|
92
151
|
private
|
@@ -1,10 +1,27 @@
|
|
1
1
|
module HtmlNamespacing
|
2
2
|
module Plugin
|
3
3
|
module Sass
|
4
|
-
|
5
|
-
options
|
6
|
-
|
7
|
-
|
4
|
+
class << self
|
5
|
+
def install(options = {})
|
6
|
+
options[:prefix] ||= 'views'
|
7
|
+
options[:callback] ||= lambda { |p| HtmlNamespacing::Plugin.default_relative_path_to_namespace(p) }
|
8
|
+
options[:compress] ||= false
|
9
|
+
@options = options
|
10
|
+
Sass_2_2.install(options)
|
11
|
+
HtmlNamespacing.options[:styles_for] = method(:styles_for)
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_reader :options
|
15
|
+
|
16
|
+
def sass_options
|
17
|
+
::Sass::Plugin.options
|
18
|
+
end
|
19
|
+
|
20
|
+
def styles_for(relative_path, absolute_path)
|
21
|
+
# Assume the file exists. (If it was found by GlobFu, it should.)
|
22
|
+
css_path = File.join(sass_options[:css_location], self.options[:prefix], relative_path.sub(/\.[^\.\/]*\z/, '.css'))
|
23
|
+
File.read(css_path)
|
24
|
+
end
|
8
25
|
end
|
9
26
|
|
10
27
|
module Sass_2_2
|
@@ -46,7 +63,7 @@ module HtmlNamespacing
|
|
46
63
|
end
|
47
64
|
|
48
65
|
def namespacing_regex
|
49
|
-
/^#{Regexp.quote(
|
66
|
+
/^#{Regexp.quote(Sass.sass_options[:css_location])}\/#{Regexp.quote(namespacing_prefix)}\/(.*)\.css$/
|
50
67
|
end
|
51
68
|
|
52
69
|
def namespace
|
data/lib/html_namespacing.rb
CHANGED
data/spec/c_extension_spec.rb
CHANGED
@@ -52,4 +52,7 @@ describe(HtmlNamespacing) do
|
|
52
52
|
self.define_failing_test('unclosed tag', '<div>foo')
|
53
53
|
self.define_failing_test('closing tag', 'foo</div>')
|
54
54
|
self.define_failing_test('wrong attr syntax', '<div foo=bar>foo</div>')
|
55
|
+
self.define_failing_test("missing closing '>' on last tag", '<div foo="bar">foo</div')
|
56
|
+
self.define_failing_test('end of string during attribute value', '<div foo="x')
|
57
|
+
self.define_failing_test('end of string during doctype declaration', '<!DOCTYPE')
|
55
58
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: html_namespacing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- adamh
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-30 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|