shared_mustache 0.0.3 → 0.1.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.
@@ -1,4 +1,4 @@
|
|
1
|
-
require '
|
1
|
+
require 'shared_mustache/mustache_view'
|
2
2
|
|
3
3
|
module SharedMustache
|
4
4
|
module ViewHelpers
|
@@ -13,8 +13,9 @@ module SharedMustache
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def render_mustache(template, options={})
|
16
|
-
view =
|
17
|
-
view.
|
16
|
+
view = MustacheView.new
|
17
|
+
view.template_name = SharedMustache.find_template_path(template, params[:controller])
|
18
|
+
view.template_path = SharedMustache.view_dir
|
18
19
|
view.render(options).html_safe
|
19
20
|
end
|
20
21
|
end
|
data/lib/shared_mustache.rb
CHANGED
@@ -13,7 +13,7 @@ module SharedMustache
|
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.file_name_to_id(filename)
|
16
|
-
filename.gsub('.mustache', '').gsub("#{view_dir}/", '')
|
16
|
+
filename.gsub('.mustache', '').gsub("#{view_dir}/", '')
|
17
17
|
end
|
18
18
|
|
19
19
|
def self.find_template_path(filename, controller)
|
@@ -21,7 +21,6 @@ module SharedMustache
|
|
21
21
|
if directory == '.'
|
22
22
|
directory = controller
|
23
23
|
end
|
24
|
-
|
25
|
-
File.join(view_dir, directory, "_#{File.basename(filename)}.mustache")
|
24
|
+
File.join(directory, "_#{File.basename(filename)}")
|
26
25
|
end
|
27
26
|
end
|
@@ -29,15 +29,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
29
|
/*
|
30
30
|
* mustache-loader.js - Mustache template loader to go with flask-mustache
|
31
31
|
*
|
32
|
-
* This depends on jQuery, and
|
33
|
-
*
|
34
|
-
* - Mustache.js: https://github.com/janl/mustache.js
|
32
|
+
* This depends on jQuery, and Twitter's Hogan.js
|
33
|
+
* https://github.com/twitter/hogan.js or
|
35
34
|
*
|
36
35
|
* Usage:
|
37
36
|
*
|
38
37
|
* $('#target').mustache('includes/_user.mustache', {user_name:'Jan'});
|
39
38
|
* var html = $.mustache('includes/_user.mustache', {user_name:'Jan'});
|
40
|
-
* $.mustacheAsFunction('includes/_user.mustache')({user_name:'Jan'});
|
41
39
|
*/
|
42
40
|
|
43
41
|
/*jslint
|
@@ -55,14 +53,13 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
55
53
|
// this is a cached lookup table of templates
|
56
54
|
var cache = {};
|
57
55
|
|
56
|
+
// only load partials once
|
57
|
+
var partialsLoaded = false;
|
58
|
+
|
58
59
|
var load = function(templateName) {
|
59
60
|
// this function takes names like: "includes/_user.mustache"
|
60
61
|
// and loads them from somewhere else.
|
61
62
|
|
62
|
-
// first we need to convert slashes to hyphens, since
|
63
|
-
// they're DOM valid
|
64
|
-
templateName = templateName.replace('/', '-');
|
65
|
-
|
66
63
|
// they can be cached as functions, or as strings.
|
67
64
|
// Strings are template content.
|
68
65
|
if (typeof cache[templateName] === 'undefined') {
|
@@ -72,7 +69,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
72
69
|
cache[templateName] = $('<div />').html(
|
73
70
|
$(document.getElementById(templateName)).html().trim()).text();
|
74
71
|
}
|
75
|
-
else if (templates[templateName]){
|
72
|
+
else if (window.templates && templates[templateName]){
|
76
73
|
cache[templateName] = templates[templateName];
|
77
74
|
}
|
78
75
|
}
|
@@ -80,34 +77,30 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
80
77
|
return cache[templateName];
|
81
78
|
};
|
82
79
|
|
83
|
-
var
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
80
|
+
var loadPartials = function() {
|
81
|
+
var templateName;
|
82
|
+
|
83
|
+
if (partialsLoaded === false){
|
84
|
+
if(typeof templates === "undefined"){
|
85
|
+
$('script[type="text/mustache"]').each(function(i, el){
|
86
|
+
templateName = $(el).attr('id');
|
87
|
+
// stupid hack to turn HTML-encoded templates into strings, see:
|
88
|
+
// http://stackoverflow.com/a/2419664/61435
|
89
|
+
cache[templateName] = $('<div />').html($(el).html().trim()).text();
|
90
|
+
});
|
91
|
+
}
|
91
92
|
}
|
92
|
-
if (
|
93
|
-
|
93
|
+
else if (window.templates) {
|
94
|
+
for(template in templates){
|
95
|
+
cache[templateName] = templates[templateName];
|
96
|
+
}
|
94
97
|
}
|
95
|
-
return template;
|
96
98
|
};
|
97
99
|
|
98
|
-
var renderFunction = function(templateName) {
|
99
|
-
// returns a wrapped `render` function
|
100
|
-
// only works with Hogan.js or if templates pre-compiled.
|
101
|
-
var template = compile(templateName);
|
102
|
-
|
103
|
-
return function(context) {
|
104
|
-
return template.render(context);
|
105
|
-
};
|
106
|
-
};
|
107
100
|
|
108
101
|
var render = function(templateName, context) {
|
109
|
-
|
110
|
-
|
102
|
+
// first we need to try and load the template and partials
|
103
|
+
loadPartials();
|
111
104
|
var template = load(templateName);
|
112
105
|
|
113
106
|
if (typeof template === 'undefined') {
|
@@ -116,21 +109,17 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
116
109
|
// pre-compiled hogan templates are objects
|
117
110
|
else if (typeof template === 'object') {
|
118
111
|
// template has been pre-compiled, just render and return it
|
119
|
-
return template.render(context);
|
112
|
+
return template.render(context, cache);
|
120
113
|
}
|
121
114
|
|
122
115
|
// template hasn't been pre-compiled yet
|
123
116
|
// so we need to do other things
|
124
117
|
if (window.Hogan) {
|
125
|
-
return window.Hogan.compile(template).render(context);
|
126
|
-
}
|
127
|
-
|
128
|
-
if (window.Mustache) {
|
129
|
-
return window.Mustache.render(template, context);
|
118
|
+
return window.Hogan.compile(template).render(context, cache);
|
130
119
|
}
|
131
120
|
|
132
|
-
// we don't have Hogan
|
133
|
-
$.error('Must have
|
121
|
+
// we don't have Hogan so we need to bail
|
122
|
+
$.error('Must have Hogan.js to load string templates');
|
134
123
|
};
|
135
124
|
|
136
125
|
$.fn.mustache = function(templateName, context) {
|
@@ -145,12 +134,4 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
145
134
|
|
146
135
|
return render(templateName, context);
|
147
136
|
};
|
148
|
-
|
149
|
-
$.mustacheAsFunction = function(templateName) {
|
150
|
-
// returns a function that can be used to render the
|
151
|
-
// mustache template
|
152
|
-
|
153
|
-
return renderFunction(templateName);
|
154
|
-
};
|
155
|
-
|
156
137
|
}(jQuery));
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shared_mustache
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-05-
|
12
|
+
date: 2014-05-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: mustache
|
@@ -77,6 +77,7 @@ files:
|
|
77
77
|
- lib/shared_mustache/config.rb
|
78
78
|
- lib/shared_mustache/engine.rb
|
79
79
|
- lib/shared_mustache/hogan.rb
|
80
|
+
- lib/shared_mustache/mustache_view.rb
|
80
81
|
- lib/shared_mustache/railtie.rb
|
81
82
|
- lib/shared_mustache/version.rb
|
82
83
|
- lib/shared_mustache/view_helpers.rb
|
@@ -101,7 +102,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
101
102
|
version: '0'
|
102
103
|
segments:
|
103
104
|
- 0
|
104
|
-
hash: -
|
105
|
+
hash: -2201938304553543237
|
105
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
106
107
|
none: false
|
107
108
|
requirements:
|
@@ -110,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
110
111
|
version: '0'
|
111
112
|
segments:
|
112
113
|
- 0
|
113
|
-
hash: -
|
114
|
+
hash: -2201938304553543237
|
114
115
|
requirements: []
|
115
116
|
rubyforge_project:
|
116
117
|
rubygems_version: 1.8.23
|