zepto_rails 1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,8 @@
1
+ .bundle/
2
+ .idea/*
3
+ log/*.log
4
+ pkg/
5
+ test/dummy/db/*.sqlite3
6
+ test/dummy/log/*.log
7
+ test/dummy/tmp/
8
+ test/dummy/.sass-cache
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Declare your gem's dependencies in zepto-rails.gemspec.
4
+ # Bundler will treat runtime dependencies like base dependencies, and
5
+ # development dependencies will be added by default to the :development group.
6
+ gemspec
7
+
8
+ # Declare any dependencies that are still in development here instead of in
9
+ # your gemspec. These might include edge Rails or gems from your path or
10
+ # Git. Remember to move these dependencies to your gemspec before releasing
11
+ # your gem to rubygems.org.
12
+
13
+ # To use debugger
14
+ # gem 'ruby-debug19', :require => 'ruby-debug'
data/Gemfile.lock ADDED
@@ -0,0 +1,91 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ zepto-rails (1.0.0)
5
+ rails (>= 3.2.0)
6
+
7
+ GEM
8
+ remote: http://rubygems.org/
9
+ specs:
10
+ actionmailer (3.2.3)
11
+ actionpack (= 3.2.3)
12
+ mail (~> 2.4.4)
13
+ actionpack (3.2.3)
14
+ activemodel (= 3.2.3)
15
+ activesupport (= 3.2.3)
16
+ builder (~> 3.0.0)
17
+ erubis (~> 2.7.0)
18
+ journey (~> 1.0.1)
19
+ rack (~> 1.4.0)
20
+ rack-cache (~> 1.2)
21
+ rack-test (~> 0.6.1)
22
+ sprockets (~> 2.1.2)
23
+ activemodel (3.2.3)
24
+ activesupport (= 3.2.3)
25
+ builder (~> 3.0.0)
26
+ activerecord (3.2.3)
27
+ activemodel (= 3.2.3)
28
+ activesupport (= 3.2.3)
29
+ arel (~> 3.0.2)
30
+ tzinfo (~> 0.3.29)
31
+ activeresource (3.2.3)
32
+ activemodel (= 3.2.3)
33
+ activesupport (= 3.2.3)
34
+ activesupport (3.2.3)
35
+ i18n (~> 0.6)
36
+ multi_json (~> 1.0)
37
+ arel (3.0.2)
38
+ builder (3.0.0)
39
+ erubis (2.7.0)
40
+ hike (1.2.1)
41
+ i18n (0.6.0)
42
+ journey (1.0.3)
43
+ json (1.6.6)
44
+ mail (2.4.4)
45
+ i18n (>= 0.4.0)
46
+ mime-types (~> 1.16)
47
+ treetop (~> 1.4.8)
48
+ mime-types (1.18)
49
+ multi_json (1.3.2)
50
+ polyglot (0.3.3)
51
+ rack (1.4.1)
52
+ rack-cache (1.2)
53
+ rack (>= 0.4)
54
+ rack-ssl (1.3.2)
55
+ rack
56
+ rack-test (0.6.1)
57
+ rack (>= 1.0)
58
+ rails (3.2.3)
59
+ actionmailer (= 3.2.3)
60
+ actionpack (= 3.2.3)
61
+ activerecord (= 3.2.3)
62
+ activeresource (= 3.2.3)
63
+ activesupport (= 3.2.3)
64
+ bundler (~> 1.0)
65
+ railties (= 3.2.3)
66
+ railties (3.2.3)
67
+ actionpack (= 3.2.3)
68
+ activesupport (= 3.2.3)
69
+ rack-ssl (~> 1.3.2)
70
+ rake (>= 0.8.7)
71
+ rdoc (~> 3.4)
72
+ thor (~> 0.14.6)
73
+ rake (0.9.2.2)
74
+ rdoc (3.12)
75
+ json (~> 1.4)
76
+ sprockets (2.1.3)
77
+ hike (~> 1.2)
78
+ rack (~> 1.0)
79
+ tilt (~> 1.1, != 1.3.0)
80
+ thor (0.14.6)
81
+ tilt (1.3.3)
82
+ treetop (1.4.10)
83
+ polyglot
84
+ polyglot (>= 0.3.1)
85
+ tzinfo (0.3.33)
86
+
87
+ PLATFORMS
88
+ ruby
89
+
90
+ DEPENDENCIES
91
+ zepto-rails!
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2012 Jason T. Carrell
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,46 @@
1
+ # zepto-rails
2
+
3
+ Zepto for the Rails asset pipeline.
4
+
5
+ This gem provides Zepto 1.0.
6
+
7
+ ## Installation
8
+
9
+ Add zepto-rails to the Gemfile.
10
+
11
+ ```
12
+ gem 'zepto_rails'
13
+ ```
14
+
15
+ And run `bundle install`.
16
+
17
+ Then add this lines to your `app/assets/javascripts/application.js`:
18
+
19
+ ```
20
+ // require zepto
21
+ ```
22
+
23
+ If you only want to include some of the modules in zepto you can add them individually. The available modules are:
24
+
25
+ ```
26
+ //= require zepto/polyfill
27
+ //= require zepto/zepto
28
+ //= require zepto/event
29
+ //= require zepto/detect
30
+ //= require zepto/fx
31
+ //= require zepto/fx_methods
32
+ //= require zepto/ajax
33
+ //= require zepto/form
34
+ //= require zepto/assets
35
+ //= require zepto/data
36
+ //= require zepto/selector
37
+ //= require zepto/touch
38
+ //= require zepto/gesture
39
+ //= require zepto/stack
40
+ ```
41
+
42
+ Or if you want to include all of the modules add this line to your `app/assets/javascripts/application.js`:
43
+
44
+ ```
45
+ // require zepto/all
46
+ ```
data/Rakefile ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env rake
2
+ begin
3
+ require 'bundler/setup'
4
+ rescue LoadError
5
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
6
+ end
7
+ begin
8
+ require 'rdoc/task'
9
+ rescue LoadError
10
+ require 'rdoc/rdoc'
11
+ require 'rake/rdoctask'
12
+ RDoc::Task = Rake::RDocTask
13
+ end
14
+
15
+ RDoc::Task.new(:rdoc) do |rdoc|
16
+ rdoc.rdoc_dir = 'rdoc'
17
+ rdoc.title = 'ZeptoRails'
18
+ rdoc.options << '--line-numbers'
19
+ rdoc.rdoc_files.include('README.rdoc')
20
+ rdoc.rdoc_files.include('lib/**/*.rb')
21
+ end
22
+
23
+
24
+
25
+
26
+ Bundler::GemHelper.install_tasks
27
+
@@ -0,0 +1,2 @@
1
+ require 'zepto/rails/engine'
2
+ require 'zepto/rails/version'
@@ -0,0 +1,6 @@
1
+ module Zepto
2
+ module Rails
3
+ class Engine < ::Rails::Engine
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ module Zepto
2
+ module Rails
3
+ VERSION = '1.0'
4
+ end
5
+ end
@@ -0,0 +1 @@
1
+ require 'zepto/rails'
@@ -0,0 +1,7 @@
1
+ //= require zepto/polyfill
2
+ //= require zepto/zepto
3
+ //= require zepto/event
4
+ //= require zepto/detect
5
+ //= require zepto/fx
6
+ //= require zepto/ajax
7
+ //= require zepto/form
@@ -0,0 +1,314 @@
1
+ // Zepto.js
2
+ // (c) 2010-2012 Thomas Fuchs
3
+ // Zepto.js may be freely distributed under the MIT license.
4
+
5
+ ;(function($){
6
+ var jsonpID = 0,
7
+ document = window.document,
8
+ key,
9
+ name,
10
+ rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
11
+ scriptTypeRE = /^(?:text|application)\/javascript/i,
12
+ xmlTypeRE = /^(?:text|application)\/xml/i,
13
+ jsonType = 'application/json',
14
+ htmlType = 'text/html',
15
+ blankRE = /^\s*$/
16
+
17
+ // trigger a custom event and return false if it was cancelled
18
+ function triggerAndReturn(context, eventName, data) {
19
+ var event = $.Event(eventName)
20
+ $(context).trigger(event, data)
21
+ return !event.defaultPrevented
22
+ }
23
+
24
+ // trigger an Ajax "global" event
25
+ function triggerGlobal(settings, context, eventName, data) {
26
+ if (settings.global) return triggerAndReturn(context || document, eventName, data)
27
+ }
28
+
29
+ // Number of active Ajax requests
30
+ $.active = 0
31
+
32
+ function ajaxStart(settings) {
33
+ if (settings.global && $.active++ === 0) triggerGlobal(settings, null, 'ajaxStart')
34
+ }
35
+ function ajaxStop(settings) {
36
+ if (settings.global && !(--$.active)) triggerGlobal(settings, null, 'ajaxStop')
37
+ }
38
+
39
+ // triggers an extra global event "ajaxBeforeSend" that's like "ajaxSend" but cancelable
40
+ function ajaxBeforeSend(xhr, settings) {
41
+ var context = settings.context
42
+ if (settings.beforeSend.call(context, xhr, settings) === false ||
43
+ triggerGlobal(settings, context, 'ajaxBeforeSend', [xhr, settings]) === false)
44
+ return false
45
+
46
+ triggerGlobal(settings, context, 'ajaxSend', [xhr, settings])
47
+ }
48
+ function ajaxSuccess(data, xhr, settings) {
49
+ var context = settings.context, status = 'success'
50
+ settings.success.call(context, data, status, xhr)
51
+ triggerGlobal(settings, context, 'ajaxSuccess', [xhr, settings, data])
52
+ ajaxComplete(status, xhr, settings)
53
+ }
54
+ // type: "timeout", "error", "abort", "parsererror"
55
+ function ajaxError(error, type, xhr, settings) {
56
+ var context = settings.context
57
+ settings.error.call(context, xhr, type, error)
58
+ triggerGlobal(settings, context, 'ajaxError', [xhr, settings, error])
59
+ ajaxComplete(type, xhr, settings)
60
+ }
61
+ // status: "success", "notmodified", "error", "timeout", "abort", "parsererror"
62
+ function ajaxComplete(status, xhr, settings) {
63
+ var context = settings.context
64
+ settings.complete.call(context, xhr, status)
65
+ triggerGlobal(settings, context, 'ajaxComplete', [xhr, settings])
66
+ ajaxStop(settings)
67
+ }
68
+
69
+ // Empty function, used as default callback
70
+ function empty() {}
71
+
72
+ $.ajaxJSONP = function(options){
73
+ if (!('type' in options)) return $.ajax(options)
74
+
75
+ var callbackName = 'jsonp' + (++jsonpID),
76
+ script = document.createElement('script'),
77
+ cleanup = function() {
78
+ clearTimeout(abortTimeout)
79
+ $(script).remove()
80
+ delete window[callbackName]
81
+ },
82
+ abort = function(type){
83
+ cleanup()
84
+ // In case of manual abort or timeout, keep an empty function as callback
85
+ // so that the SCRIPT tag that eventually loads won't result in an error.
86
+ if (!type || type == 'timeout') window[callbackName] = empty
87
+ ajaxError(null, type || 'abort', xhr, options)
88
+ },
89
+ xhr = { abort: abort }, abortTimeout
90
+
91
+ if (ajaxBeforeSend(xhr, options) === false) {
92
+ abort('abort')
93
+ return false
94
+ }
95
+
96
+ window[callbackName] = function(data){
97
+ cleanup()
98
+ ajaxSuccess(data, xhr, options)
99
+ }
100
+
101
+ script.onerror = function() { abort('error') }
102
+
103
+ script.src = options.url.replace(/=\?/, '=' + callbackName)
104
+ $('head').append(script)
105
+
106
+ if (options.timeout > 0) abortTimeout = setTimeout(function(){
107
+ abort('timeout')
108
+ }, options.timeout)
109
+
110
+ return xhr
111
+ }
112
+
113
+ $.ajaxSettings = {
114
+ // Default type of request
115
+ type: 'GET',
116
+ // Callback that is executed before request
117
+ beforeSend: empty,
118
+ // Callback that is executed if the request succeeds
119
+ success: empty,
120
+ // Callback that is executed the the server drops error
121
+ error: empty,
122
+ // Callback that is executed on request complete (both: error and success)
123
+ complete: empty,
124
+ // The context for the callbacks
125
+ context: null,
126
+ // Whether to trigger "global" Ajax events
127
+ global: true,
128
+ // Transport
129
+ xhr: function () {
130
+ return new window.XMLHttpRequest()
131
+ },
132
+ // MIME types mapping
133
+ accepts: {
134
+ script: 'text/javascript, application/javascript',
135
+ json: jsonType,
136
+ xml: 'application/xml, text/xml',
137
+ html: htmlType,
138
+ text: 'text/plain'
139
+ },
140
+ // Whether the request is to another domain
141
+ crossDomain: false,
142
+ // Default timeout
143
+ timeout: 0,
144
+ // Whether data should be serialized to string
145
+ processData: true,
146
+ // Whether the browser should be allowed to cache GET responses
147
+ cache: true
148
+ }
149
+
150
+ function mimeToDataType(mime) {
151
+ if (mime) mime = mime.split(';', 2)[0]
152
+ return mime && ( mime == htmlType ? 'html' :
153
+ mime == jsonType ? 'json' :
154
+ scriptTypeRE.test(mime) ? 'script' :
155
+ xmlTypeRE.test(mime) && 'xml' ) || 'text'
156
+ }
157
+
158
+ function appendQuery(url, query) {
159
+ return (url + '&' + query).replace(/[&?]{1,2}/, '?')
160
+ }
161
+
162
+ // serialize payload and append it to the URL for GET requests
163
+ function serializeData(options) {
164
+ if (options.processData && options.data && $.type(options.data) != "string")
165
+ options.data = $.param(options.data, options.traditional)
166
+ if (options.data && (!options.type || options.type.toUpperCase() == 'GET'))
167
+ options.url = appendQuery(options.url, options.data)
168
+ }
169
+
170
+ $.ajax = function(options){
171
+ var settings = $.extend({}, options || {})
172
+ for (key in $.ajaxSettings) if (settings[key] === undefined) settings[key] = $.ajaxSettings[key]
173
+
174
+ ajaxStart(settings)
175
+
176
+ if (!settings.crossDomain) settings.crossDomain = /^([\w-]+:)?\/\/([^\/]+)/.test(settings.url) &&
177
+ RegExp.$2 != window.location.host
178
+
179
+ if (!settings.url) settings.url = window.location.toString()
180
+ serializeData(settings)
181
+ if (settings.cache === false) settings.url = appendQuery(settings.url, '_=' + Date.now())
182
+
183
+ var dataType = settings.dataType, hasPlaceholder = /=\?/.test(settings.url)
184
+ if (dataType == 'jsonp' || hasPlaceholder) {
185
+ if (!hasPlaceholder) settings.url = appendQuery(settings.url, 'callback=?')
186
+ return $.ajaxJSONP(settings)
187
+ }
188
+
189
+ var mime = settings.accepts[dataType],
190
+ baseHeaders = { },
191
+ protocol = /^([\w-]+:)\/\//.test(settings.url) ? RegExp.$1 : window.location.protocol,
192
+ xhr = settings.xhr(), abortTimeout
193
+
194
+ if (!settings.crossDomain) baseHeaders['X-Requested-With'] = 'XMLHttpRequest'
195
+ if (mime) {
196
+ baseHeaders['Accept'] = mime
197
+ if (mime.indexOf(',') > -1) mime = mime.split(',', 2)[0]
198
+ xhr.overrideMimeType && xhr.overrideMimeType(mime)
199
+ }
200
+ if (settings.contentType || (settings.contentType !== false && settings.data && settings.type.toUpperCase() != 'GET'))
201
+ baseHeaders['Content-Type'] = (settings.contentType || 'application/x-www-form-urlencoded')
202
+ settings.headers = $.extend(baseHeaders, settings.headers || {})
203
+
204
+ xhr.onreadystatechange = function(){
205
+ if (xhr.readyState == 4) {
206
+ xhr.onreadystatechange = empty;
207
+ clearTimeout(abortTimeout)
208
+ var result, error = false
209
+ if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304 || (xhr.status == 0 && protocol == 'file:')) {
210
+ dataType = dataType || mimeToDataType(xhr.getResponseHeader('content-type'))
211
+ result = xhr.responseText
212
+
213
+ try {
214
+ // http://perfectionkills.com/global-eval-what-are-the-options/
215
+ if (dataType == 'script') (1,eval)(result)
216
+ else if (dataType == 'xml') result = xhr.responseXML
217
+ else if (dataType == 'json') result = blankRE.test(result) ? null : $.parseJSON(result)
218
+ } catch (e) { error = e }
219
+
220
+ if (error) ajaxError(error, 'parsererror', xhr, settings)
221
+ else ajaxSuccess(result, xhr, settings)
222
+ } else {
223
+ ajaxError(null, xhr.status ? 'error' : 'abort', xhr, settings)
224
+ }
225
+ }
226
+ }
227
+
228
+ var async = 'async' in settings ? settings.async : true
229
+ xhr.open(settings.type, settings.url, async)
230
+
231
+ for (name in settings.headers) xhr.setRequestHeader(name, settings.headers[name])
232
+
233
+ if (ajaxBeforeSend(xhr, settings) === false) {
234
+ xhr.abort()
235
+ return false
236
+ }
237
+
238
+ if (settings.timeout > 0) abortTimeout = setTimeout(function(){
239
+ xhr.onreadystatechange = empty
240
+ xhr.abort()
241
+ ajaxError(null, 'timeout', xhr, settings)
242
+ }, settings.timeout)
243
+
244
+ // avoid sending empty string (#319)
245
+ xhr.send(settings.data ? settings.data : null)
246
+ return xhr
247
+ }
248
+
249
+ // handle optional data/success arguments
250
+ function parseArguments(url, data, success, dataType) {
251
+ var hasData = !$.isFunction(data)
252
+ return {
253
+ url: url,
254
+ data: hasData ? data : undefined,
255
+ success: !hasData ? data : $.isFunction(success) ? success : undefined,
256
+ dataType: hasData ? dataType || success : success
257
+ }
258
+ }
259
+
260
+ $.get = function(url, data, success, dataType){
261
+ return $.ajax(parseArguments.apply(null, arguments))
262
+ }
263
+
264
+ $.post = function(url, data, success, dataType){
265
+ var options = parseArguments.apply(null, arguments)
266
+ options.type = 'POST'
267
+ return $.ajax(options)
268
+ }
269
+
270
+ $.getJSON = function(url, data, success){
271
+ var options = parseArguments.apply(null, arguments)
272
+ options.dataType = 'json'
273
+ return $.ajax(options)
274
+ }
275
+
276
+ $.fn.load = function(url, data, success){
277
+ if (!this.length) return this
278
+ var self = this, parts = url.split(/\s/), selector,
279
+ options = parseArguments(url, data, success),
280
+ callback = options.success
281
+ if (parts.length > 1) options.url = parts[0], selector = parts[1]
282
+ options.success = function(response){
283
+ self.html(selector ?
284
+ $('<div>').html(response.replace(rscript, "")).find(selector)
285
+ : response)
286
+ callback && callback.apply(self, arguments)
287
+ }
288
+ $.ajax(options)
289
+ return this
290
+ }
291
+
292
+ var escape = encodeURIComponent
293
+
294
+ function serialize(params, obj, traditional, scope){
295
+ var type, array = $.isArray(obj)
296
+ $.each(obj, function(key, value) {
297
+ type = $.type(value)
298
+ if (scope) key = traditional ? scope : scope + '[' + (array ? '' : key) + ']'
299
+ // handle data in serializeArray() format
300
+ if (!scope && array) params.add(value.name, value.value)
301
+ // recurse into nested objects
302
+ else if (type == "array" || (!traditional && type == "object"))
303
+ serialize(params, value, traditional, key)
304
+ else params.add(key, value)
305
+ })
306
+ }
307
+
308
+ $.param = function(obj, traditional){
309
+ var params = []
310
+ params.add = function(k, v){ this.push(escape(k) + '=' + escape(v)) }
311
+ serialize(params, obj, traditional)
312
+ return params.join('&').replace(/%20/g, '+')
313
+ }
314
+ })(Zepto)