canjs-rails 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.
- data/.gitignore +7 -0
- data/CHANGELOG.md +3 -0
- data/Gemfile +3 -0
- data/LICENSE +21 -0
- data/README.md +36 -0
- data/Rakefile +2 -0
- data/canjs-rails.gemspec +23 -0
- data/lib/canjs-rails.rb +1 -0
- data/lib/canjs/rails.rb +7 -0
- data/lib/canjs/rails/engine.rb +6 -0
- data/lib/canjs/rails/version.rb +6 -0
- data/vendor/assets/javascripts/can.construct.proxy.js +60 -0
- data/vendor/assets/javascripts/can.construct.super.js +44 -0
- data/vendor/assets/javascripts/can.control.plugin.js +245 -0
- data/vendor/assets/javascripts/can.control.view.js +88 -0
- data/vendor/assets/javascripts/can.fixture.js +1020 -0
- data/vendor/assets/javascripts/can.jquery.js +2995 -0
- data/vendor/assets/javascripts/can.jquery.min.js +52 -0
- data/vendor/assets/javascripts/can.observe.attributes.js +293 -0
- data/vendor/assets/javascripts/can.observe.backup.js +368 -0
- data/vendor/assets/javascripts/can.observe.delegate.js +359 -0
- data/vendor/assets/javascripts/can.observe.setter.js +58 -0
- data/vendor/assets/javascripts/can.observe.validations.js +374 -0
- data/vendor/assets/javascripts/can.view.modifiers.js +292 -0
- data/vendor/assets/javascripts/download_canjs.sh +15 -0
- metadata +108 -0
@@ -0,0 +1,292 @@
|
|
1
|
+
(function(can, window, undefined){
|
2
|
+
|
3
|
+
//---- ADD jQUERY HELPERS -----
|
4
|
+
//converts jquery functions to use views
|
5
|
+
var convert, modify, isTemplate, isHTML, isDOM, getCallback,
|
6
|
+
// text and val cannot produce an element, so don't run hookups on them
|
7
|
+
noHookup = {'val':true,'text':true};
|
8
|
+
|
9
|
+
convert = function( func_name ) {
|
10
|
+
// save the old jQuery helper
|
11
|
+
var old = $.fn[func_name];
|
12
|
+
|
13
|
+
// replace it with our new helper
|
14
|
+
$.fn[func_name] = function() {
|
15
|
+
|
16
|
+
var args = can.makeArray(arguments),
|
17
|
+
callbackNum,
|
18
|
+
callback,
|
19
|
+
self = this,
|
20
|
+
result;
|
21
|
+
|
22
|
+
// if the first arg is a deferred
|
23
|
+
// wait until it finishes, and call
|
24
|
+
// modify with the result
|
25
|
+
if ( can.isDeferred(args[0]) ) {
|
26
|
+
args[0].done(function( res ) {
|
27
|
+
modify.call(self, [res], old);
|
28
|
+
})
|
29
|
+
return this;
|
30
|
+
}
|
31
|
+
//check if a template
|
32
|
+
else if ( isTemplate(args) ) {
|
33
|
+
|
34
|
+
// if we should operate async
|
35
|
+
if ((callbackNum = getCallback(args))) {
|
36
|
+
callback = args[callbackNum];
|
37
|
+
args[callbackNum] = function( result ) {
|
38
|
+
modify.call(self, [result], old);
|
39
|
+
callback.call(self, result);
|
40
|
+
};
|
41
|
+
can.view.apply(can.view, args);
|
42
|
+
return this;
|
43
|
+
}
|
44
|
+
// call view with args (there might be deferreds)
|
45
|
+
result = can.view.apply(can.view, args);
|
46
|
+
|
47
|
+
// if we got a string back
|
48
|
+
if (!can.isDeferred(result) ) {
|
49
|
+
// we are going to call the old method with that string
|
50
|
+
args = [result];
|
51
|
+
} else {
|
52
|
+
// if there is a deferred, wait until it is done before calling modify
|
53
|
+
result.done(function( res ) {
|
54
|
+
modify.call(self, [res], old);
|
55
|
+
})
|
56
|
+
return this;
|
57
|
+
}
|
58
|
+
}
|
59
|
+
return noHookup[func_name] ? old.apply(this,args) :
|
60
|
+
modify.call(this, args, old);
|
61
|
+
};
|
62
|
+
};
|
63
|
+
|
64
|
+
// modifies the content of the element
|
65
|
+
// but also will run any hookup
|
66
|
+
modify = function( args, old ) {
|
67
|
+
var res, stub, hooks;
|
68
|
+
|
69
|
+
//check if there are new hookups
|
70
|
+
for ( var hasHookups in can.view.hookups ) {
|
71
|
+
break;
|
72
|
+
}
|
73
|
+
|
74
|
+
//if there are hookups, turn into a frag
|
75
|
+
// and insert that
|
76
|
+
// by using a frag, the element can be recursively hooked up
|
77
|
+
// before insterion
|
78
|
+
if ( hasHookups && args[0] && isHTML(args[0]) ) {
|
79
|
+
args[0] = can.view.frag(args[0])
|
80
|
+
}
|
81
|
+
|
82
|
+
//then insert into DOM
|
83
|
+
res = old.apply(this, args);
|
84
|
+
|
85
|
+
return res;
|
86
|
+
};
|
87
|
+
|
88
|
+
// returns true or false if the args indicate a template is being used
|
89
|
+
// $('#foo').html('/path/to/template.ejs',{data})
|
90
|
+
// in general, we want to make sure the first arg is a string
|
91
|
+
// and the second arg is data
|
92
|
+
isTemplate = function( args ) {
|
93
|
+
// save the second arg type
|
94
|
+
var secArgType = typeof args[1];
|
95
|
+
|
96
|
+
// the first arg is a string
|
97
|
+
return typeof args[0] == "string" &&
|
98
|
+
// the second arg is an object or function
|
99
|
+
(secArgType == 'object' || secArgType == 'function') &&
|
100
|
+
// but it is not a dom element
|
101
|
+
!isDOM(args[1]);
|
102
|
+
};
|
103
|
+
// returns true if the arg is a jQuery object or HTMLElement
|
104
|
+
isDOM = function(arg){
|
105
|
+
return arg.nodeType || (arg[0] && arg[0].nodeType)
|
106
|
+
};
|
107
|
+
// returns whether the argument is some sort of HTML data
|
108
|
+
isHTML = function( arg ) {
|
109
|
+
if ( isDOM(arg) ) {
|
110
|
+
// if jQuery object or DOM node we're good
|
111
|
+
return true;
|
112
|
+
} else if ( typeof arg === "string" ) {
|
113
|
+
// if string, do a quick sanity check that we're HTML
|
114
|
+
arg = can.trim(arg);
|
115
|
+
return arg.substr(0, 1) === "<" && arg.substr(arg.length - 1, 1) === ">" && arg.length >= 3;
|
116
|
+
} else {
|
117
|
+
// don't know what you are
|
118
|
+
return false;
|
119
|
+
}
|
120
|
+
};
|
121
|
+
|
122
|
+
//returns the callback arg number if there is one (for async view use)
|
123
|
+
getCallback = function( args ) {
|
124
|
+
return typeof args[3] === 'function' ? 3 : typeof args[2] === 'function' && 2;
|
125
|
+
};
|
126
|
+
|
127
|
+
/**
|
128
|
+
* @add jQuery.fn
|
129
|
+
* @parent can.View
|
130
|
+
* Called on a jQuery collection that was rendered with can.View with pending hookups. can.View can render a
|
131
|
+
* template with hookups, but not actually perform the hookup, because it returns a string without actual DOM
|
132
|
+
* elements to hook up to. So hookup performs the hookup and clears the pending hookups, preventing errors in
|
133
|
+
* future templates.
|
134
|
+
*
|
135
|
+
* @codestart
|
136
|
+
* $(can.View('//views/recipes.ejs',recipeData)).hookup()
|
137
|
+
* @codeend
|
138
|
+
*/
|
139
|
+
$.fn.hookup = function() {
|
140
|
+
can.view.frag(this);
|
141
|
+
return this;
|
142
|
+
};
|
143
|
+
|
144
|
+
/**
|
145
|
+
* @add jQuery.fn
|
146
|
+
*/
|
147
|
+
can.each([
|
148
|
+
/**
|
149
|
+
* @function jQuery.fn.prepend
|
150
|
+
* @parent can.view.modifiers
|
151
|
+
*
|
152
|
+
* Extending the original [http://api.jquery.com/prepend/ jQuery().prepend()]
|
153
|
+
* to render [can.view] templates inserted at the beginning of each element in the set of matched elements.
|
154
|
+
*
|
155
|
+
* $('#test').prepend('path/to/template.ejs', { name : 'canjs' });
|
156
|
+
*
|
157
|
+
* @param {String|Object|Function} content A template filename or the id of a view script tag
|
158
|
+
* or a DOM element, array of elements, HTML string, or can object.
|
159
|
+
* @param {Object} [data] The data to render the view with.
|
160
|
+
* If rendering a view template this parameter always has to be present
|
161
|
+
* (use the empty object initializer {} for no data).
|
162
|
+
* @param {Function} [callback] A success callback to load the view asynchronously
|
163
|
+
*
|
164
|
+
* @return {jQuery|can.Deferred} The jQuery object or a [can.Deferred] if a deferred has
|
165
|
+
* been passed in data.
|
166
|
+
*/
|
167
|
+
"prepend",
|
168
|
+
/**
|
169
|
+
* @function jQuery.fn.append
|
170
|
+
* @parent can.view.modifiers
|
171
|
+
*
|
172
|
+
* Extending the original [http://api.jquery.com/append/ jQuery().append()]
|
173
|
+
* to render [can.view] templates inserted at the end of each element in the set of matched elements.
|
174
|
+
*
|
175
|
+
* $('#test').append('path/to/template.ejs', { name : 'canjs' });
|
176
|
+
*
|
177
|
+
* @param {String|Object|Function} content A template filename or the id of a view script tag
|
178
|
+
* or a DOM element, array of elements, HTML string, or can object.
|
179
|
+
* @param {Object} [data] The data to render the view with.
|
180
|
+
* If rendering a view template this parameter always has to be present
|
181
|
+
* (use the empty object initializer {} for no data).
|
182
|
+
* @param {Function} [callback] A success callback to load the view asynchronously
|
183
|
+
*
|
184
|
+
* @return {jQuery|can.Deferred} The jQuery object or a [can.Deferred] if a deferred has
|
185
|
+
* been passed in data.
|
186
|
+
*/
|
187
|
+
"append",
|
188
|
+
/**
|
189
|
+
* @function jQuery.fn.after
|
190
|
+
* @parent can.view.modifiers
|
191
|
+
*
|
192
|
+
* Extending the original [http://api.jquery.com/after/ jQuery().after()]
|
193
|
+
* to render [can.view] templates inserted after each element in the set of matched elements.
|
194
|
+
*
|
195
|
+
* $('#test').after('path/to/template.ejs', { name : 'canjs' });
|
196
|
+
*
|
197
|
+
* @param {String|Object|Function} content A template filename or the id of a view script tag
|
198
|
+
* or a DOM element, array of elements, HTML string, or can object.
|
199
|
+
* @param {Object} [data] The data to render the view with.
|
200
|
+
* If rendering a view template this parameter always has to be present
|
201
|
+
* (use the empty object initializer {} for no data).
|
202
|
+
* @param {Function} [callback] A success callback to load the view asynchronously
|
203
|
+
*
|
204
|
+
* @return {jQuery|can.Deferred} The jQuery object or a [can.Deferred] if a deferred has
|
205
|
+
* been passed in data.
|
206
|
+
*/
|
207
|
+
"after",
|
208
|
+
/**
|
209
|
+
* @function jQuery.fn.before
|
210
|
+
* @parent can.view.modifiers
|
211
|
+
*
|
212
|
+
* Extending the original [http://api.jquery.com/before/ jQuery().before()]
|
213
|
+
* to render [can.view] templates inserted before each element in the set of matched elements.
|
214
|
+
*
|
215
|
+
* $('#test').before('path/to/template.ejs', { name : 'canjs' });
|
216
|
+
*
|
217
|
+
* @param {String|Object|Function} content A template filename or the id of a view script tag
|
218
|
+
* or a DOM element, array of elements, HTML string, or can object.
|
219
|
+
* @param {Object} [data] The data to render the view with.
|
220
|
+
* If rendering a view template this parameter always has to be present
|
221
|
+
* (use the empty object initializer {} for no data).
|
222
|
+
* @param {Function} [callback] A success callback to load the view asynchronously
|
223
|
+
*
|
224
|
+
* @return {jQuery|can.Deferred} The jQuery object or a [can.Deferred] if a deferred has
|
225
|
+
* been passed in data.
|
226
|
+
*/
|
227
|
+
"before",
|
228
|
+
/**
|
229
|
+
* @function jQuery.fn.text
|
230
|
+
* @parent can.view.modifiers
|
231
|
+
*
|
232
|
+
* Extending the original [http://api.jquery.com/text/ jQuery().text()]
|
233
|
+
* to render [can.View] templates as the content of each matched element.
|
234
|
+
* Unlike [jQuery.fn.html] jQuery.fn.text also works with XML, escaping the provided
|
235
|
+
* string as necessary.
|
236
|
+
*
|
237
|
+
* $('#test').text('path/to/template.ejs', { name : 'canjs' });
|
238
|
+
*
|
239
|
+
* @param {String|Object|Function} content A template filename or the id of a view script tag
|
240
|
+
* or a DOM element, array of elements, HTML string, or can object.
|
241
|
+
* @param {Object} [data] The data to render the view with.
|
242
|
+
* If rendering a view template this parameter always has to be present
|
243
|
+
* (use the empty object initializer {} for no data).
|
244
|
+
* @param {Function} [callback] A success callback to load the view asynchronously
|
245
|
+
*
|
246
|
+
* @return {jQuery|can.Deferred} The jQuery object or a [can.Deferred] if a deferred has
|
247
|
+
* been passed in data.
|
248
|
+
*/
|
249
|
+
"text",
|
250
|
+
/**
|
251
|
+
* @function jQuery.fn.html
|
252
|
+
* @parent can.view.modifiers
|
253
|
+
*
|
254
|
+
* Extending the original [http://api.jquery.com/html/ jQuery().html()]
|
255
|
+
* to render [can.view] templates as the content of each matched element.
|
256
|
+
*
|
257
|
+
* $('#test').html('path/to/template.ejs', { name : 'canjs' });
|
258
|
+
*
|
259
|
+
* @param {String|Object|Function} content A template filename or the id of a view script tag
|
260
|
+
* or a DOM element, array of elements, HTML string, or can object.
|
261
|
+
* @param {Object} [data] The data to render the view with.
|
262
|
+
* If rendering a view template this parameter always has to be present
|
263
|
+
* (use the empty object initializer {} for no data).
|
264
|
+
* @param {Function} [callback] A success callback to load the view asynchronously
|
265
|
+
*
|
266
|
+
* @return {jQuery|can.Deferred} The jQuery object or a [can.Deferred] if a deferred has
|
267
|
+
* been passed in data.
|
268
|
+
*/
|
269
|
+
"html",
|
270
|
+
/**
|
271
|
+
* @function jQuery.fn.replaceWith
|
272
|
+
* @parent can.view.modifiers
|
273
|
+
*
|
274
|
+
* Extending the original [http://api.jquery.com/replaceWith/ jQuery().replaceWith()]
|
275
|
+
* to render [can.view] templates replacing each element in the set of matched elements.
|
276
|
+
*
|
277
|
+
* $('#test').replaceWith('path/to/template.ejs', { name : 'canjs' });
|
278
|
+
*
|
279
|
+
* @param {String|Object|Function} content A template filename or the id of a view script tag
|
280
|
+
* or a DOM element, array of elements, HTML string, or can object.
|
281
|
+
* @param {Object} [data] The data to render the view with.
|
282
|
+
* If rendering a view template this parameter always has to be present
|
283
|
+
* (use the empty object initializer {} for no data).
|
284
|
+
* @param {Function} [callback] A success callback to load the view asynchronously
|
285
|
+
*
|
286
|
+
* @return {jQuery|can.Deferred} The jQuery object or a [can.Deferred] if a deferred has
|
287
|
+
* been passed in data.
|
288
|
+
*/
|
289
|
+
"replaceWith", "val"],function(func){
|
290
|
+
convert(func);
|
291
|
+
});
|
292
|
+
})(this.can, this )
|
@@ -0,0 +1,15 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
wget https://github.com/downloads/jupiterjs/canjs/can.jquery-1.0.7.js
|
4
|
+
wget https://github.com/downloads/jupiterjs/canjs/can.jquery-1.0.7.min.js
|
5
|
+
wget http://canjs.us/release/latest/can.construct.proxy.js
|
6
|
+
wget http://canjs.us/release/latest/can.construct.super.js
|
7
|
+
wget http://canjs.us/release/latest/can.observe.delegate.js
|
8
|
+
wget http://canjs.us/release/latest/can.observe.setter.js
|
9
|
+
wget http://canjs.us/release/latest/can.observe.attributes.js
|
10
|
+
wget http://canjs.us/release/latest/can.observe.validations.js
|
11
|
+
wget http://canjs.us/release/latest/can.observe.backup.js
|
12
|
+
wget http://canjs.us/release/latest/can.control.plugin.js
|
13
|
+
wget http://canjs.us/release/latest/can.control.view.js
|
14
|
+
wget http://canjs.us/release/latest/can.view.modifiers.js
|
15
|
+
wget http://canjs.us/release/latest/can.fixture.js
|
metadata
ADDED
@@ -0,0 +1,108 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: canjs-rails
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Craig Wickesser
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2012-06-30 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: railties
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.2.0
|
22
|
+
- - <
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: '5.0'
|
25
|
+
type: :runtime
|
26
|
+
prerelease: false
|
27
|
+
version_requirements: !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 3.2.0
|
33
|
+
- - <
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '5.0'
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: thor
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ~>
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0.14'
|
44
|
+
type: :runtime
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ~>
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0.14'
|
52
|
+
description: This gem provides CanJS for your Rails 3.1+ application.
|
53
|
+
email:
|
54
|
+
- craig@mindscratch.org
|
55
|
+
executables: []
|
56
|
+
extensions: []
|
57
|
+
extra_rdoc_files: []
|
58
|
+
files:
|
59
|
+
- .gitignore
|
60
|
+
- CHANGELOG.md
|
61
|
+
- Gemfile
|
62
|
+
- LICENSE
|
63
|
+
- README.md
|
64
|
+
- Rakefile
|
65
|
+
- canjs-rails.gemspec
|
66
|
+
- lib/canjs-rails.rb
|
67
|
+
- lib/canjs/rails.rb
|
68
|
+
- lib/canjs/rails/engine.rb
|
69
|
+
- lib/canjs/rails/version.rb
|
70
|
+
- vendor/assets/javascripts/can.construct.proxy.js
|
71
|
+
- vendor/assets/javascripts/can.construct.super.js
|
72
|
+
- vendor/assets/javascripts/can.control.plugin.js
|
73
|
+
- vendor/assets/javascripts/can.control.view.js
|
74
|
+
- vendor/assets/javascripts/can.fixture.js
|
75
|
+
- vendor/assets/javascripts/can.jquery.js
|
76
|
+
- vendor/assets/javascripts/can.jquery.min.js
|
77
|
+
- vendor/assets/javascripts/can.observe.attributes.js
|
78
|
+
- vendor/assets/javascripts/can.observe.backup.js
|
79
|
+
- vendor/assets/javascripts/can.observe.delegate.js
|
80
|
+
- vendor/assets/javascripts/can.observe.setter.js
|
81
|
+
- vendor/assets/javascripts/can.observe.validations.js
|
82
|
+
- vendor/assets/javascripts/can.view.modifiers.js
|
83
|
+
- vendor/assets/javascripts/download_canjs.sh
|
84
|
+
homepage: https://github.com/mindscratch/canjs-rails
|
85
|
+
licenses: []
|
86
|
+
post_install_message:
|
87
|
+
rdoc_options: []
|
88
|
+
require_paths:
|
89
|
+
- lib
|
90
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
91
|
+
none: false
|
92
|
+
requirements:
|
93
|
+
- - ! '>='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '0'
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
none: false
|
98
|
+
requirements:
|
99
|
+
- - ! '>='
|
100
|
+
- !ruby/object:Gem::Version
|
101
|
+
version: 1.3.6
|
102
|
+
requirements: []
|
103
|
+
rubyforge_project: canjs-rails
|
104
|
+
rubygems_version: 1.8.24
|
105
|
+
signing_key:
|
106
|
+
specification_version: 3
|
107
|
+
summary: Use CanJS with Rails 3.1+
|
108
|
+
test_files: []
|