eyeballs 0.3.7 → 0.4.1
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +6 -0
- data/Gemfile +13 -0
- data/Gemfile.lock +47 -0
- data/README.md +62 -17
- data/Rakefile +1 -1
- data/dist/{jquery-1.4.2.min.js → jquery/jquery-1.4.2.min.js} +0 -0
- data/dist/jquery/jquery.ba-hashchange.js +244 -0
- data/dist/{jquery.livequery.js → jquery/jquery.livequery.js} +0 -0
- data/dist/{mustache.js → mustache/mustache.0.2.3.js} +27 -50
- data/eyeballs.gemspec +23 -14
- data/lib/eyeballs/app_generator.rb +3 -3
- data/spec/app_generator_spec.rb +7 -1
- data/spec/spec_helper.rb +1 -2
- data/src/{o_O.localstorage.js → adapters/o_O.localstorage.js} +0 -0
- data/src/{jquery.o_O.couchdb.js → drivers/jquery/adapters/o_O.couchdb.js} +0 -0
- data/src/{jquery.o_O.dom.js → drivers/jquery/adapters/o_O.dom.js} +0 -0
- data/src/{jquery.o_O.rails.js → drivers/jquery/adapters/o_O.rest.js} +1 -1
- data/src/{jquery.o_O.js → drivers/jquery/modules/o_O.controller.js} +3 -65
- data/src/drivers/jquery/modules/o_O.routes.js +45 -0
- data/src/drivers/jquery/modules/o_O.support.js +69 -0
- data/src/modules/o_O.model.js +188 -0
- data/src/modules/o_O.validations.js +45 -0
- data/src/o_O.js +0 -235
- data/templates/app_root/config/initializer.js +3 -0
- data/templates/app_root/config/routes.js +7 -0
- data/test/unit/test_controller.html +7 -7
- data/test/unit/test_dom.html +7 -4
- data/test/unit/test_dom_with_callbacks.html +7 -3
- data/test/unit/test_form.html +7 -2
- data/test/unit/test_localstorage.html +7 -4
- data/test/unit/test_model.html +7 -3
- data/test/unit/test_model_with_callbacks.html +7 -3
- data/test/unit/{test_rails.html → test_rest.html} +9 -6
- data/test/unit/test_routing.html +76 -0
- metadata +39 -15
- data/eyeballs.js.gemspec +0 -83
File without changes
|
@@ -1,7 +1,12 @@
|
|
1
1
|
/*
|
2
|
-
|
2
|
+
Shameless port of http://github.com/defunkt/mustache
|
3
|
+
by Jan Lehnardt <jan@apache.org>,
|
4
|
+
Alexander Lang <alex@upstream-berlin.com>,
|
5
|
+
Sebastian Cohnen <sebastian.cohnen@googlemail.com>
|
3
6
|
|
4
|
-
|
7
|
+
Thanks @defunkt for the awesome code.
|
8
|
+
|
9
|
+
See http://github.com/defunkt/mustache for more info.
|
5
10
|
*/
|
6
11
|
|
7
12
|
var Mustache = function() {
|
@@ -17,12 +22,8 @@ var Mustache = function() {
|
|
17
22
|
},
|
18
23
|
|
19
24
|
render: function(template, context, partials, in_recursion) {
|
20
|
-
// reset buffer
|
21
|
-
// TODO: make this non-lazy
|
22
|
-
if(!in_recursion)
|
23
|
-
this.buffer = [];
|
24
25
|
// fail fast
|
25
|
-
if(
|
26
|
+
if(template.indexOf(this.otag) == -1) {
|
26
27
|
if(in_recursion) {
|
27
28
|
return template;
|
28
29
|
} else {
|
@@ -58,7 +59,7 @@ var Mustache = function() {
|
|
58
59
|
*/
|
59
60
|
render_pragmas: function(template) {
|
60
61
|
// no pragmas
|
61
|
-
if(
|
62
|
+
if(template.indexOf(this.otag + "%") == -1) {
|
62
63
|
return template;
|
63
64
|
}
|
64
65
|
|
@@ -94,48 +95,29 @@ var Mustache = function() {
|
|
94
95
|
},
|
95
96
|
|
96
97
|
/*
|
97
|
-
Renders
|
98
|
+
Renders boolean and enumerable sections
|
98
99
|
*/
|
99
100
|
render_section: function(template, context, partials) {
|
100
|
-
if(
|
101
|
+
if(template.indexOf(this.otag + "#") == -1) {
|
101
102
|
return template;
|
102
103
|
}
|
103
|
-
|
104
104
|
var that = this;
|
105
105
|
// CSW - Added "+?" so it finds the tighest bound, not the widest
|
106
|
-
var regex = new RegExp(this.otag + "(
|
107
|
-
"\\s*([\\s\\S]+?)" + this.otag + "\\/\\
|
108
|
-
"\\s*", "mg");
|
106
|
+
var regex = new RegExp(this.otag + "\\#(.+)" + this.ctag +
|
107
|
+
"\\s*([\\s\\S]+?)" + this.otag + "\\/\\1" + this.ctag + "\\s*", "mg");
|
109
108
|
|
110
109
|
// for each {{#foo}}{{/foo}} section do...
|
111
|
-
return template.replace(regex, function(match,
|
110
|
+
return template.replace(regex, function(match, name, content) {
|
112
111
|
var value = that.find(name, context);
|
113
|
-
if(
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
}
|
118
|
-
|
119
|
-
|
120
|
-
} else
|
121
|
-
|
122
|
-
return that.map(value, function(row) {
|
123
|
-
return that.render(content, that.merge(context,
|
124
|
-
that.create_context(row)), partials, true);
|
125
|
-
}).join("");
|
126
|
-
} else if(that.is_object(value)) { // Object, Use it as subcontext!
|
127
|
-
return that.render(content,
|
128
|
-
that.merge(context, that.create_context(value)), partials, true);
|
129
|
-
} else if(typeof value === "function") {
|
130
|
-
// higher order section
|
131
|
-
return value.call(context, content, function(text) {
|
132
|
-
return that.render(text, context, partials, true);
|
133
|
-
})
|
134
|
-
} else if(value) { // boolean section
|
135
|
-
return that.render(content, context, partials, true);
|
136
|
-
} else {
|
137
|
-
return "";
|
138
|
-
}
|
112
|
+
if(that.is_array(value)) { // Enumerable, Let's loop!
|
113
|
+
return that.map(value, function(row) {
|
114
|
+
return that.render(content, that.merge(context,
|
115
|
+
that.create_context(row)), partials, true);
|
116
|
+
}).join("");
|
117
|
+
} else if(value) { // boolean section
|
118
|
+
return that.render(content, context, partials, true);
|
119
|
+
} else {
|
120
|
+
return "";
|
139
121
|
}
|
140
122
|
});
|
141
123
|
},
|
@@ -148,7 +130,7 @@ var Mustache = function() {
|
|
148
130
|
var that = this;
|
149
131
|
|
150
132
|
var new_regex = function() {
|
151
|
-
return new RegExp(that.otag + "(=|!|>|\\{|%)?([
|
133
|
+
return new RegExp(that.otag + "(=|!|>|\\{|%)?([^\/#]+?)\\1?" +
|
152
134
|
that.ctag + "+", "g");
|
153
135
|
};
|
154
136
|
|
@@ -158,7 +140,7 @@ var Mustache = function() {
|
|
158
140
|
lines[i] = lines[i].replace(regex, function(match, operator, name) {
|
159
141
|
switch(operator) {
|
160
142
|
case "!": // ignore comments
|
161
|
-
return
|
143
|
+
return match;
|
162
144
|
case "=": // set new delimiters, rebuild the replace regexp
|
163
145
|
that.set_delimiters(name);
|
164
146
|
regex = new_regex();
|
@@ -219,16 +201,11 @@ var Mustache = function() {
|
|
219
201
|
|
220
202
|
// Utility methods
|
221
203
|
|
222
|
-
/* includes tag */
|
223
|
-
includes: function(needle, haystack) {
|
224
|
-
return haystack.indexOf(this.otag + needle) != -1;
|
225
|
-
},
|
226
|
-
|
227
204
|
/*
|
228
205
|
Does away with nasty characters
|
229
206
|
*/
|
230
207
|
escape: function(s) {
|
231
|
-
return ((s == null) ? "" : s).toString().replace(
|
208
|
+
return ((s == null) ? "" : s).toString().replace(/[&"<>\\]/g, function(s) {
|
232
209
|
switch(s) {
|
233
210
|
case "&": return "&";
|
234
211
|
case "\\": return "\\\\";;
|
@@ -305,7 +282,7 @@ var Mustache = function() {
|
|
305
282
|
|
306
283
|
return({
|
307
284
|
name: "mustache.js",
|
308
|
-
version: "0.3
|
285
|
+
version: "0.2.3",
|
309
286
|
|
310
287
|
/*
|
311
288
|
Turns a template and view into HTML
|
data/eyeballs.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{eyeballs}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Paul Campbell"]
|
12
|
-
s.date = %q{2010-07-
|
12
|
+
s.date = %q{2010-07-06}
|
13
13
|
s.default_executable = %q{eyeballs}
|
14
14
|
s.email = %q{paul@rslw.com}
|
15
15
|
s.executables = ["eyeballs"]
|
@@ -18,16 +18,18 @@ Gem::Specification.new do |s|
|
|
18
18
|
]
|
19
19
|
s.files = [
|
20
20
|
"CHANGELOG",
|
21
|
+
"Gemfile",
|
22
|
+
"Gemfile.lock",
|
21
23
|
"README.md",
|
22
24
|
"Rakefile",
|
23
25
|
"app.rb",
|
24
26
|
"bin/eyeballs",
|
25
27
|
"config.ru",
|
26
|
-
"dist/jquery-1.4.2.min.js",
|
27
|
-
"dist/jquery.
|
28
|
-
"dist/
|
28
|
+
"dist/jquery/jquery-1.4.2.min.js",
|
29
|
+
"dist/jquery/jquery.ba-hashchange.js",
|
30
|
+
"dist/jquery/jquery.livequery.js",
|
31
|
+
"dist/mustache/mustache.0.2.3.js",
|
29
32
|
"eyeballs.gemspec",
|
30
|
-
"eyeballs.js.gemspec",
|
31
33
|
"lib/eyeballs.rb",
|
32
34
|
"lib/eyeballs/app_detector.rb",
|
33
35
|
"lib/eyeballs/app_generator.rb",
|
@@ -35,12 +37,18 @@ Gem::Specification.new do |s|
|
|
35
37
|
"lib/eyeballs/controller_generator.rb",
|
36
38
|
"lib/eyeballs/model_generator.rb",
|
37
39
|
"lib/eyeballs/scaffold_generator.rb",
|
38
|
-
"src/
|
39
|
-
"src/jquery
|
40
|
-
"src/jquery
|
41
|
-
"src/jquery
|
40
|
+
"src/adapters/o_O.localstorage.js",
|
41
|
+
"src/drivers/jquery/adapters/o_O.couchdb.js",
|
42
|
+
"src/drivers/jquery/adapters/o_O.dom.js",
|
43
|
+
"src/drivers/jquery/adapters/o_O.rest.js",
|
44
|
+
"src/drivers/jquery/modules/o_O.controller.js",
|
45
|
+
"src/drivers/jquery/modules/o_O.routes.js",
|
46
|
+
"src/drivers/jquery/modules/o_O.support.js",
|
47
|
+
"src/modules/o_O.model.js",
|
48
|
+
"src/modules/o_O.validations.js",
|
42
49
|
"src/o_O.js",
|
43
|
-
"
|
50
|
+
"templates/app_root/config/initializer.js",
|
51
|
+
"templates/app_root/config/routes.js",
|
44
52
|
"templates/app_root/index.html",
|
45
53
|
"templates/controller.js",
|
46
54
|
"templates/model.js",
|
@@ -58,12 +66,13 @@ Gem::Specification.new do |s|
|
|
58
66
|
"test/unit/test_localstorage.html",
|
59
67
|
"test/unit/test_model.html",
|
60
68
|
"test/unit/test_model_with_callbacks.html",
|
61
|
-
"test/unit/
|
69
|
+
"test/unit/test_rest.html",
|
70
|
+
"test/unit/test_routing.html"
|
62
71
|
]
|
63
72
|
s.homepage = %q{http://www.github.com/paulca/eyeballs.js}
|
64
73
|
s.rdoc_options = ["--charset=UTF-8"]
|
65
74
|
s.require_paths = ["lib"]
|
66
|
-
s.rubygems_version = %q{1.3.
|
75
|
+
s.rubygems_version = %q{1.3.7}
|
67
76
|
s.summary = %q{A lightweight javascript MVC framework.}
|
68
77
|
s.test_files = [
|
69
78
|
"spec/app_generator_spec.rb",
|
@@ -78,7 +87,7 @@ Gem::Specification.new do |s|
|
|
78
87
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
79
88
|
s.specification_version = 3
|
80
89
|
|
81
|
-
if Gem::Version.new(Gem::
|
90
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
82
91
|
s.add_runtime_dependency(%q<thor>, [">= 0"])
|
83
92
|
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
84
93
|
else
|
@@ -17,9 +17,9 @@ module Eyeballs
|
|
17
17
|
|
18
18
|
def build_the_app
|
19
19
|
directory "templates/app_root", new_app_path
|
20
|
-
copy_file 'dist/jquery-1.4.2.min.js', "#{new_app_path}/vendor/jquery/jquery-1.4.2.min.js"
|
21
|
-
copy_file 'dist/jquery.livequery.js', "#{new_app_path}/vendor/jquery/jquery.livequery.js"
|
22
|
-
copy_file 'dist/mustache.js', "#{new_app_path}/vendor/mustache/mustache.js"
|
20
|
+
copy_file 'dist/jquery/jquery-1.4.2.min.js', "#{new_app_path}/vendor/jquery/jquery-1.4.2.min.js"
|
21
|
+
copy_file 'dist/jquery/jquery.livequery.js', "#{new_app_path}/vendor/jquery/jquery.livequery.js"
|
22
|
+
copy_file 'dist/mustache/mustache.0.2.3.js', "#{new_app_path}/vendor/mustache/mustache.0.2.3.js"
|
23
23
|
directory "src", "#{new_app_path}/vendor/eyeballs/"
|
24
24
|
end
|
25
25
|
|
data/spec/app_generator_spec.rb
CHANGED
@@ -12,6 +12,7 @@ describe Eyeballs::AppGenerator do
|
|
12
12
|
let(:model_dir) { file('test', 'app', 'models') }
|
13
13
|
let(:controller_dir) { file('test', 'app', 'controllers') }
|
14
14
|
let(:view_dir) { file('test', 'app', 'views') }
|
15
|
+
let(:config_dir) { file('test', 'config') }
|
15
16
|
let(:vendor_dir) { file('test', 'vendor') }
|
16
17
|
let(:jquery_dir) { file('test', 'vendor', 'jquery') }
|
17
18
|
let(:eyeballs_dir) { file('test', 'vendor', 'eyeballs') }
|
@@ -19,8 +20,10 @@ describe Eyeballs::AppGenerator do
|
|
19
20
|
|
20
21
|
let(:jquery_file) { file('test', 'vendor', 'jquery', 'jquery-1.4.2.min.js') }
|
21
22
|
let(:livequery_file) { file('test', 'vendor', 'jquery', 'jquery.livequery.js') }
|
22
|
-
let(:mustache_file) { file('test', 'vendor', 'mustache', 'mustache.js') }
|
23
|
+
let(:mustache_file) { file('test', 'vendor', 'mustache', 'mustache.0.2.3.js') }
|
23
24
|
let(:index_file) { file('test', 'index.html') }
|
25
|
+
let(:initializer_file) { file('test', 'config', 'initializer.js')}
|
26
|
+
let(:routes_file) { file('test', 'config', 'routes.js')}
|
24
27
|
|
25
28
|
it "should create the test root" do
|
26
29
|
File.exists?(test_root).should be_true
|
@@ -31,6 +34,7 @@ describe Eyeballs::AppGenerator do
|
|
31
34
|
model_dir.should exist
|
32
35
|
controller_dir.should exist
|
33
36
|
view_dir.should exist
|
37
|
+
config_dir.should exist
|
34
38
|
vendor_dir.should exist
|
35
39
|
jquery_dir.should exist
|
36
40
|
eyeballs_dir.should exist
|
@@ -42,6 +46,8 @@ describe Eyeballs::AppGenerator do
|
|
42
46
|
livequery_file.should exist
|
43
47
|
mustache_file.should exist
|
44
48
|
index_file.should exist
|
49
|
+
initializer_file.should exist
|
50
|
+
routes_file.should exist
|
45
51
|
end
|
46
52
|
|
47
53
|
after(:all) do
|
data/spec/spec_helper.rb
CHANGED
File without changes
|
File without changes
|
File without changes
|
@@ -12,6 +12,7 @@ o_O.controller = {
|
|
12
12
|
var controller = controller;
|
13
13
|
|
14
14
|
$(function(){
|
15
|
+
|
15
16
|
for(var action in controller)
|
16
17
|
{
|
17
18
|
var selector = '[data-controller=' + controller_name + '][data-action=' + action + ']';
|
@@ -25,13 +26,13 @@ o_O.controller = {
|
|
25
26
|
})
|
26
27
|
}
|
27
28
|
$('[data-bind]').livequery(function(){
|
28
|
-
var binders = $(this).attr('data-bind').match(/[\+]?(\s+)?[^ :]?[: ]?[^
|
29
|
+
var binders = $(this).attr('data-bind').match(/[\+]?(\s+)?[^ :]?[: ]?[^ #]+[ #]+[^ ;]+[ ;]?/g)
|
29
30
|
if(binders != null && binders.length > 0)
|
30
31
|
{
|
31
32
|
for(i = 0; i < binders.length; i++)
|
32
33
|
{
|
33
34
|
var rule = binders[i];
|
34
|
-
var parts = rule.match(/([\+])?(\s+)?(([^ :]+)([: ]+))?([^
|
35
|
+
var parts = rule.match(/([\+])?(\s+)?(([^ :]+)([: ]+))?([^ #]+)[ #]+([^ ;]+)[ ;]?/)
|
35
36
|
var default_bit = parts[1];
|
36
37
|
var this_action_event = parts[4];
|
37
38
|
if(this_action_event === undefined)
|
@@ -54,67 +55,4 @@ o_O.controller = {
|
|
54
55
|
});
|
55
56
|
return controller;
|
56
57
|
}
|
57
|
-
}
|
58
|
-
|
59
|
-
o_O.find_attributes = function(template, callback){
|
60
|
-
var object = {};
|
61
|
-
for(i = 0; i<template.find('[data-attribute]').length; i++)
|
62
|
-
{
|
63
|
-
field = $(template.find('[data-attribute]')[i]);
|
64
|
-
object[field.attr('data-attribute')] = callback(field);
|
65
|
-
}
|
66
|
-
return object;
|
67
|
-
}
|
68
|
-
|
69
|
-
o_O.params = function(form){
|
70
|
-
return o_O.find_attributes(form, function(field){
|
71
|
-
if(field.is('[type=radio]'))
|
72
|
-
{
|
73
|
-
return $('[data-attribute=' + field.attr('data-attribute') + ']:checked').val()
|
74
|
-
}
|
75
|
-
else
|
76
|
-
{
|
77
|
-
return field.val();
|
78
|
-
}
|
79
|
-
});
|
80
|
-
}
|
81
|
-
|
82
|
-
o_O.render = function(template, data, options){
|
83
|
-
o_O.get_template(template, data, function(data, template){
|
84
|
-
var rendered = Mustache.to_html(template, data);
|
85
|
-
if(typeof options === 'object')
|
86
|
-
{
|
87
|
-
if(options.append)
|
88
|
-
{
|
89
|
-
$(options.append).append(rendered);
|
90
|
-
}
|
91
|
-
if(options.prepend)
|
92
|
-
{
|
93
|
-
$(options.prepend).prepend(rendered);
|
94
|
-
}
|
95
|
-
}
|
96
|
-
});
|
97
|
-
}
|
98
|
-
|
99
|
-
o_O.get_template = function(template, data, callback){
|
100
|
-
if(o_O.templates[template])
|
101
|
-
{
|
102
|
-
callback(data, o_O.templates[template]);
|
103
|
-
}
|
104
|
-
else
|
105
|
-
{
|
106
|
-
var url;
|
107
|
-
if(o_O.config.template_path)
|
108
|
-
{
|
109
|
-
url = o_O.config.template_path + '/';
|
110
|
-
}
|
111
|
-
else
|
112
|
-
{
|
113
|
-
url = 'app/views/'
|
114
|
-
}
|
115
|
-
$.get(url + template + '.html.mustache', function(response){
|
116
|
-
o_O.templates[template] = response;
|
117
|
-
callback(data, response);
|
118
|
-
});
|
119
|
-
}
|
120
58
|
}
|
@@ -0,0 +1,45 @@
|
|
1
|
+
o_O.routes = {
|
2
|
+
|
3
|
+
rules: {},
|
4
|
+
urls: [],
|
5
|
+
|
6
|
+
router: {
|
7
|
+
match: function(route, options){
|
8
|
+
|
9
|
+
var figure_action = function(options){
|
10
|
+
var parts = options.to.split('#');
|
11
|
+
var controller = parts[0];
|
12
|
+
var action = parts[1];
|
13
|
+
|
14
|
+
controller = controller.capitalize() + "Controller";
|
15
|
+
return window[controller][action];
|
16
|
+
}
|
17
|
+
|
18
|
+
o_O.routes.rules[route] = {"action": figure_action(options), "with": options.with};
|
19
|
+
o_O.routes.urls.push(route);
|
20
|
+
}
|
21
|
+
},
|
22
|
+
|
23
|
+
draw: function(callback){
|
24
|
+
$(function(){
|
25
|
+
|
26
|
+
callback(o_O.routes.router);
|
27
|
+
|
28
|
+
$(window).bind( 'hashchange', function(){
|
29
|
+
var hash = location.hash.replace(/^(#)/, '');
|
30
|
+
if(o_O.routes.urls.indexOf(hash) >= 0)
|
31
|
+
{
|
32
|
+
o_O.routes.rules[hash].action(o_O.routes.rules[hash].with);
|
33
|
+
}
|
34
|
+
});
|
35
|
+
|
36
|
+
$('a').live('click', function(){
|
37
|
+
if($(this).is('a[data-ajax-history=true]'))
|
38
|
+
{
|
39
|
+
document.location.hash = $(this).attr('href')
|
40
|
+
return false;
|
41
|
+
}
|
42
|
+
});
|
43
|
+
})
|
44
|
+
}
|
45
|
+
}
|
@@ -0,0 +1,69 @@
|
|
1
|
+
o_O.find_attributes = function(template, callback){
|
2
|
+
var object = {};
|
3
|
+
for(i = 0; i<template.find('[data-attribute]').length; i++)
|
4
|
+
{
|
5
|
+
field = $(template.find('[data-attribute]')[i]);
|
6
|
+
object[field.attr('data-attribute')] = callback(field);
|
7
|
+
}
|
8
|
+
return object;
|
9
|
+
}
|
10
|
+
|
11
|
+
o_O.params = function(form){
|
12
|
+
return o_O.find_attributes(form, function(field){
|
13
|
+
if(field.is('[type=radio]'))
|
14
|
+
{
|
15
|
+
return $('[data-attribute=' + field.attr('data-attribute') + ']:checked').val()
|
16
|
+
}
|
17
|
+
else
|
18
|
+
{
|
19
|
+
return field.val();
|
20
|
+
}
|
21
|
+
});
|
22
|
+
}
|
23
|
+
|
24
|
+
o_O.render = function(template, data, options){
|
25
|
+
o_O.get_template(template, data, function(data, template){
|
26
|
+
var rendered = Mustache.to_html(template, data);
|
27
|
+
if(typeof options === 'object')
|
28
|
+
{
|
29
|
+
if(options.append)
|
30
|
+
{
|
31
|
+
$(options.append).append(rendered);
|
32
|
+
}
|
33
|
+
if(options.prepend)
|
34
|
+
{
|
35
|
+
$(options.prepend).prepend(rendered);
|
36
|
+
}
|
37
|
+
}
|
38
|
+
});
|
39
|
+
}
|
40
|
+
|
41
|
+
o_O.get_template = function(template, data, callback){
|
42
|
+
if(o_O.templates[template])
|
43
|
+
{
|
44
|
+
callback(data, o_O.templates[template]);
|
45
|
+
}
|
46
|
+
else
|
47
|
+
{
|
48
|
+
var url;
|
49
|
+
if(o_O.config.template_path)
|
50
|
+
{
|
51
|
+
url = o_O.config.template_path + '/';
|
52
|
+
}
|
53
|
+
else
|
54
|
+
{
|
55
|
+
url = 'app/views/'
|
56
|
+
}
|
57
|
+
$.get(url + template + '.html.mustache', function(response){
|
58
|
+
o_O.templates[template] = response;
|
59
|
+
callback(data, response);
|
60
|
+
});
|
61
|
+
}
|
62
|
+
}
|
63
|
+
|
64
|
+
if(typeof String.prototype.capitalize == 'undefined')
|
65
|
+
{
|
66
|
+
String.prototype.capitalize = function(){
|
67
|
+
return this.charAt(0).toUpperCase() + this.slice(1);
|
68
|
+
}
|
69
|
+
}
|