@@ -7,36 +7,27 @@ module RequirejsHelper
7
7
mattr_accessor :_priority
8
8
@@_priority = [ ]
9
9
10
- def _requirejs_data ( name , &block )
11
- { } . tap do |data |
12
- if name
13
- name += ".js" unless name =~ /\. js$/
14
- data [ 'main' ] = _javascript_path ( name ) \
15
- . sub ( /\. js$/ , '' ) \
16
- . sub ( base_url ( name ) , '' ) \
17
- . sub ( /\A \/ / , '' )
18
- end
19
-
20
- data . merge! ( yield controller ) if block_given?
21
- end . map do |k , v |
22
- %Q{data-#{ k } ="#{ v } "}
23
- end . join ( " " )
24
- end
25
-
26
10
def requirejs_include_tag ( name = nil , &block )
27
11
requirejs = Rails . application . config . requirejs
28
12
29
13
if requirejs . loader == :almond
30
14
name = requirejs . module_name_for ( requirejs . build_config [ 'modules' ] [ 0 ] )
31
- return _almond_include_tag ( name , &block )
15
+ return almond_include_tag ( name , &block )
32
16
end
33
17
34
18
html = ""
35
19
36
- _once_guard do
37
- html . concat <<-HTML
38
- < script #{ _requirejs_data ( name , &block ) } src="#{ _javascript_path 'require.js' } "> </ script>
39
- HTML
20
+ once_guard do
21
+ rjs_attributes = {
22
+ src : javascript_path ( "require" )
23
+ }
24
+
25
+ rjs_attributes = rjs_attributes . merge ( Hash [ block . call ( controller ) . map do |key , value |
26
+ [ "data-#{ key } " , value ]
27
+ end ] ) \
28
+ if block
29
+
30
+ html . concat ( content_tag ( :script , "" , rjs_attributes ) )
40
31
41
32
unless requirejs . run_config . empty?
42
33
run_config = requirejs . run_config . dup
@@ -52,7 +43,7 @@ def requirejs_include_tag(name=nil, &block)
52
43
53
44
# Generate digestified paths from the modules spec
54
45
paths = { }
55
- modules . each { |m | paths [ m ] = _javascript_path ( m ) . sub /\. js$/ , '' }
46
+ modules . each { |m | paths [ m ] = javascript_path ( m ) . sub /\. js$/ , '' }
56
47
57
48
if run_config . has_key? 'paths'
58
49
# Add paths for assets specified by full URL (on a CDN)
@@ -67,16 +58,34 @@ def requirejs_include_tag(name=nil, &block)
67
58
end
68
59
69
60
run_config [ 'baseUrl' ] = base_url ( name )
70
- html . concat <<-HTML
71
- < script > require.config(#{ run_config . to_json } );</ script>
72
- HTML
61
+
62
+ html . concat ( content_tag ( :script ) do
63
+ script = "require.config(#{ run_config . to_json } );"
64
+
65
+ # Pass an array to `require`, since it's a top-level module about to be loaded asynchronously (see
66
+ # `http://requirejs.org/docs/errors.html#notloaded`).
67
+ script . concat ( " require([#{ name . dump } ]);" ) \
68
+ if name
69
+
70
+ script . html_safe
71
+ end )
73
72
end
74
73
75
74
html . html_safe
76
75
end
77
76
end
78
77
79
- def _once_guard
78
+ def javascript_path ( name )
79
+ if defined? ( super )
80
+ super
81
+ else
82
+ "/assets/#{ name } "
83
+ end
84
+ end
85
+
86
+ private
87
+
88
+ def once_guard
80
89
if defined? ( controller ) && controller . requirejs_included
81
90
raise Requirejs ::MultipleIncludeError , "Only one requirejs_include_tag allowed per page."
82
91
end
@@ -87,16 +96,8 @@ def _once_guard
87
96
retval
88
97
end
89
98
90
- def _almond_include_tag ( name , &block )
91
- "<script src='#{ _javascript_path name } '></script>\n " . html_safe
92
- end
93
-
94
- def _javascript_path ( name )
95
- if defined? ( javascript_path )
96
- javascript_path ( name )
97
- else
98
- "/assets/#{ name } "
99
- end
99
+ def almond_include_tag ( name , &block )
100
+ content_tag ( :script , "" , src : javascript_path ( name ) )
100
101
end
101
102
102
103
def base_url ( js_asset )
0 commit comments