actionview 4.2.10 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of actionview might be problematic. Click here for more details.

Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +141 -272
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +2 -3
  5. data/lib/action_view/base.rb +33 -21
  6. data/lib/action_view/buffers.rb +1 -1
  7. data/lib/action_view/context.rb +1 -1
  8. data/lib/action_view/dependency_tracker.rb +52 -20
  9. data/lib/action_view/digestor.rb +86 -83
  10. data/lib/action_view/flows.rb +9 -11
  11. data/lib/action_view/gem_version.rb +3 -3
  12. data/lib/action_view/helpers/active_model_helper.rb +8 -8
  13. data/lib/action_view/helpers/asset_tag_helper.rb +74 -38
  14. data/lib/action_view/helpers/asset_url_helper.rb +160 -59
  15. data/lib/action_view/helpers/atom_feed_helper.rb +16 -16
  16. data/lib/action_view/helpers/cache_helper.rb +90 -35
  17. data/lib/action_view/helpers/capture_helper.rb +7 -6
  18. data/lib/action_view/helpers/controller_helper.rb +3 -2
  19. data/lib/action_view/helpers/csrf_helper.rb +3 -3
  20. data/lib/action_view/helpers/date_helper.rb +156 -108
  21. data/lib/action_view/helpers/debug_helper.rb +3 -4
  22. data/lib/action_view/helpers/form_helper.rb +475 -94
  23. data/lib/action_view/helpers/form_options_helper.rb +87 -47
  24. data/lib/action_view/helpers/form_tag_helper.rb +88 -57
  25. data/lib/action_view/helpers/javascript_helper.rb +10 -10
  26. data/lib/action_view/helpers/number_helper.rb +76 -59
  27. data/lib/action_view/helpers/output_safety_helper.rb +34 -4
  28. data/lib/action_view/helpers/record_tag_helper.rb +12 -99
  29. data/lib/action_view/helpers/rendering_helper.rb +3 -3
  30. data/lib/action_view/helpers/sanitize_helper.rb +17 -14
  31. data/lib/action_view/helpers/tag_helper.rb +198 -73
  32. data/lib/action_view/helpers/tags/base.rb +132 -97
  33. data/lib/action_view/helpers/tags/check_box.rb +17 -17
  34. data/lib/action_view/helpers/tags/collection_check_boxes.rb +9 -33
  35. data/lib/action_view/helpers/tags/collection_helpers.rb +68 -36
  36. data/lib/action_view/helpers/tags/collection_radio_buttons.rb +3 -11
  37. data/lib/action_view/helpers/tags/collection_select.rb +2 -2
  38. data/lib/action_view/helpers/tags/date_select.rb +36 -36
  39. data/lib/action_view/helpers/tags/datetime_field.rb +1 -1
  40. data/lib/action_view/helpers/tags/grouped_collection_select.rb +2 -2
  41. data/lib/action_view/helpers/tags/label.rb +5 -1
  42. data/lib/action_view/helpers/tags/password_field.rb +1 -1
  43. data/lib/action_view/helpers/tags/placeholderable.rb +1 -1
  44. data/lib/action_view/helpers/tags/radio_button.rb +4 -4
  45. data/lib/action_view/helpers/tags/search_field.rb +12 -9
  46. data/lib/action_view/helpers/tags/select.rb +9 -9
  47. data/lib/action_view/helpers/tags/text_area.rb +1 -1
  48. data/lib/action_view/helpers/tags/text_field.rb +5 -6
  49. data/lib/action_view/helpers/tags/translator.rb +15 -13
  50. data/lib/action_view/helpers/text_helper.rb +47 -30
  51. data/lib/action_view/helpers/translation_helper.rb +60 -30
  52. data/lib/action_view/helpers/url_helper.rb +132 -104
  53. data/lib/action_view/helpers.rb +1 -1
  54. data/lib/action_view/layouts.rb +59 -54
  55. data/lib/action_view/log_subscriber.rb +56 -7
  56. data/lib/action_view/lookup_context.rb +76 -61
  57. data/lib/action_view/model_naming.rb +1 -1
  58. data/lib/action_view/path_set.rb +28 -19
  59. data/lib/action_view/railtie.rb +30 -6
  60. data/lib/action_view/record_identifier.rb +51 -25
  61. data/lib/action_view/renderer/abstract_renderer.rb +19 -15
  62. data/lib/action_view/renderer/partial_renderer/collection_caching.rb +55 -0
  63. data/lib/action_view/renderer/partial_renderer.rb +208 -206
  64. data/lib/action_view/renderer/renderer.rb +2 -6
  65. data/lib/action_view/renderer/streaming_template_renderer.rb +46 -48
  66. data/lib/action_view/renderer/template_renderer.rb +65 -66
  67. data/lib/action_view/rendering.rb +16 -9
  68. data/lib/action_view/routing_url_for.rb +25 -17
  69. data/lib/action_view/tasks/cache_digests.rake +23 -0
  70. data/lib/action_view/template/error.rb +14 -13
  71. data/lib/action_view/template/handlers/builder.rb +7 -7
  72. data/lib/action_view/template/handlers/erb/deprecated_erubis.rb +9 -0
  73. data/lib/action_view/template/handlers/erb/erubi.rb +81 -0
  74. data/lib/action_view/template/handlers/erb/erubis.rb +81 -0
  75. data/lib/action_view/template/handlers/erb.rb +9 -76
  76. data/lib/action_view/template/handlers/html.rb +9 -0
  77. data/lib/action_view/template/handlers/raw.rb +1 -3
  78. data/lib/action_view/template/handlers.rb +8 -6
  79. data/lib/action_view/template/html.rb +2 -4
  80. data/lib/action_view/template/resolver.rb +133 -109
  81. data/lib/action_view/template/text.rb +5 -8
  82. data/lib/action_view/template/types.rb +15 -17
  83. data/lib/action_view/template.rb +51 -28
  84. data/lib/action_view/test_case.rb +32 -27
  85. data/lib/action_view/testing/resolvers.rb +29 -31
  86. data/lib/action_view/version.rb +1 -1
  87. data/lib/action_view/view_paths.rb +26 -32
  88. data/lib/action_view.rb +5 -5
  89. data/lib/assets/compiled/rails-ujs.js +685 -0
  90. metadata +23 -23
  91. data/lib/action_view/tasks/dependencies.rake +0 -23
@@ -0,0 +1,685 @@
1
+ /*
2
+ Unobtrusive JavaScript
3
+ https://github.com/rails/rails/blob/master/actionview/app/assets/javascripts
4
+ Released under the MIT license
5
+ */
6
+
7
+ ;
8
+
9
+ (function() {
10
+ (function() {
11
+ (function() {
12
+ this.Rails = {
13
+ linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',
14
+ buttonClickSelector: {
15
+ selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',
16
+ exclude: 'form button'
17
+ },
18
+ inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',
19
+ formSubmitSelector: 'form',
20
+ formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',
21
+ formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',
22
+ formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',
23
+ fileInputSelector: 'input[name][type=file]:not([disabled])',
24
+ linkDisableSelector: 'a[data-disable-with], a[data-disable]',
25
+ buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'
26
+ };
27
+
28
+ }).call(this);
29
+ }).call(this);
30
+
31
+ var Rails = this.Rails;
32
+
33
+ (function() {
34
+ (function() {
35
+ var expando, m;
36
+
37
+ m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;
38
+
39
+ Rails.matches = function(element, selector) {
40
+ if (selector.exclude != null) {
41
+ return m.call(element, selector.selector) && !m.call(element, selector.exclude);
42
+ } else {
43
+ return m.call(element, selector);
44
+ }
45
+ };
46
+
47
+ expando = '_ujsData';
48
+
49
+ Rails.getData = function(element, key) {
50
+ var ref;
51
+ return (ref = element[expando]) != null ? ref[key] : void 0;
52
+ };
53
+
54
+ Rails.setData = function(element, key, value) {
55
+ if (element[expando] == null) {
56
+ element[expando] = {};
57
+ }
58
+ return element[expando][key] = value;
59
+ };
60
+
61
+ Rails.$ = function(selector) {
62
+ return Array.prototype.slice.call(document.querySelectorAll(selector));
63
+ };
64
+
65
+ }).call(this);
66
+ (function() {
67
+ var $, csrfParam, csrfToken;
68
+
69
+ $ = Rails.$;
70
+
71
+ csrfToken = Rails.csrfToken = function() {
72
+ var meta;
73
+ meta = document.querySelector('meta[name=csrf-token]');
74
+ return meta && meta.content;
75
+ };
76
+
77
+ csrfParam = Rails.csrfParam = function() {
78
+ var meta;
79
+ meta = document.querySelector('meta[name=csrf-param]');
80
+ return meta && meta.content;
81
+ };
82
+
83
+ Rails.CSRFProtection = function(xhr) {
84
+ var token;
85
+ token = csrfToken();
86
+ if (token != null) {
87
+ return xhr.setRequestHeader('X-CSRF-Token', token);
88
+ }
89
+ };
90
+
91
+ Rails.refreshCSRFTokens = function() {
92
+ var param, token;
93
+ token = csrfToken();
94
+ param = csrfParam();
95
+ if ((token != null) && (param != null)) {
96
+ return $('form input[name="' + param + '"]').forEach(function(input) {
97
+ return input.value = token;
98
+ });
99
+ }
100
+ };
101
+
102
+ }).call(this);
103
+ (function() {
104
+ var CustomEvent, fire, matches;
105
+
106
+ matches = Rails.matches;
107
+
108
+ CustomEvent = window.CustomEvent;
109
+
110
+ if (typeof CustomEvent !== 'function') {
111
+ CustomEvent = function(event, params) {
112
+ var evt;
113
+ evt = document.createEvent('CustomEvent');
114
+ evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
115
+ return evt;
116
+ };
117
+ CustomEvent.prototype = window.Event.prototype;
118
+ }
119
+
120
+ fire = Rails.fire = function(obj, name, data) {
121
+ var event;
122
+ event = new CustomEvent(name, {
123
+ bubbles: true,
124
+ cancelable: true,
125
+ detail: data
126
+ });
127
+ obj.dispatchEvent(event);
128
+ return !event.defaultPrevented;
129
+ };
130
+
131
+ Rails.stopEverything = function(e) {
132
+ fire(e.target, 'ujs:everythingStopped');
133
+ e.preventDefault();
134
+ e.stopPropagation();
135
+ return e.stopImmediatePropagation();
136
+ };
137
+
138
+ Rails.delegate = function(element, selector, eventType, handler) {
139
+ return element.addEventListener(eventType, function(e) {
140
+ var target;
141
+ target = e.target;
142
+ while (!(!(target instanceof Element) || matches(target, selector))) {
143
+ target = target.parentNode;
144
+ }
145
+ if (target instanceof Element && handler.call(target, e) === false) {
146
+ e.preventDefault();
147
+ return e.stopPropagation();
148
+ }
149
+ });
150
+ };
151
+
152
+ }).call(this);
153
+ (function() {
154
+ var AcceptHeaders, CSRFProtection, createXHR, fire, prepareOptions, processResponse;
155
+
156
+ CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;
157
+
158
+ AcceptHeaders = {
159
+ '*': '*/*',
160
+ text: 'text/plain',
161
+ html: 'text/html',
162
+ xml: 'application/xml, text/xml',
163
+ json: 'application/json, text/javascript',
164
+ script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'
165
+ };
166
+
167
+ Rails.ajax = function(options) {
168
+ var xhr;
169
+ options = prepareOptions(options);
170
+ xhr = createXHR(options, function() {
171
+ var response;
172
+ response = processResponse(xhr.response, xhr.getResponseHeader('Content-Type'));
173
+ if (Math.floor(xhr.status / 100) === 2) {
174
+ if (typeof options.success === "function") {
175
+ options.success(response, xhr.statusText, xhr);
176
+ }
177
+ } else {
178
+ if (typeof options.error === "function") {
179
+ options.error(response, xhr.statusText, xhr);
180
+ }
181
+ }
182
+ return typeof options.complete === "function" ? options.complete(xhr, xhr.statusText) : void 0;
183
+ });
184
+ if (typeof options.beforeSend === "function") {
185
+ options.beforeSend(xhr, options);
186
+ }
187
+ if (xhr.readyState === XMLHttpRequest.OPENED) {
188
+ return xhr.send(options.data);
189
+ } else {
190
+ return fire(document, 'ajaxStop');
191
+ }
192
+ };
193
+
194
+ prepareOptions = function(options) {
195
+ options.url = options.url || location.href;
196
+ options.type = options.type.toUpperCase();
197
+ if (options.type === 'GET' && options.data) {
198
+ if (options.url.indexOf('?') < 0) {
199
+ options.url += '?' + options.data;
200
+ } else {
201
+ options.url += '&' + options.data;
202
+ }
203
+ }
204
+ if (AcceptHeaders[options.dataType] == null) {
205
+ options.dataType = '*';
206
+ }
207
+ options.accept = AcceptHeaders[options.dataType];
208
+ if (options.dataType !== '*') {
209
+ options.accept += ', */*; q=0.01';
210
+ }
211
+ return options;
212
+ };
213
+
214
+ createXHR = function(options, done) {
215
+ var xhr;
216
+ xhr = new XMLHttpRequest();
217
+ xhr.open(options.type, options.url, true);
218
+ xhr.setRequestHeader('Accept', options.accept);
219
+ if (typeof options.data === 'string') {
220
+ xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
221
+ }
222
+ if (!options.crossDomain) {
223
+ xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
224
+ }
225
+ CSRFProtection(xhr);
226
+ xhr.withCredentials = !!options.withCredentials;
227
+ xhr.onreadystatechange = function() {
228
+ if (xhr.readyState === XMLHttpRequest.DONE) {
229
+ return done(xhr);
230
+ }
231
+ };
232
+ return xhr;
233
+ };
234
+
235
+ processResponse = function(response, type) {
236
+ var parser, script;
237
+ if (typeof response === 'string' && typeof type === 'string') {
238
+ if (type.match(/\bjson\b/)) {
239
+ try {
240
+ response = JSON.parse(response);
241
+ } catch (error) {}
242
+ } else if (type.match(/\b(?:java|ecma)script\b/)) {
243
+ script = document.createElement('script');
244
+ script.text = response;
245
+ document.head.appendChild(script).parentNode.removeChild(script);
246
+ } else if (type.match(/\b(xml|html|svg)\b/)) {
247
+ parser = new DOMParser();
248
+ type = type.replace(/;.+/, '');
249
+ try {
250
+ response = parser.parseFromString(response, type);
251
+ } catch (error) {}
252
+ }
253
+ }
254
+ return response;
255
+ };
256
+
257
+ Rails.href = function(element) {
258
+ return element.href;
259
+ };
260
+
261
+ Rails.isCrossDomain = function(url) {
262
+ var e, originAnchor, urlAnchor;
263
+ originAnchor = document.createElement('a');
264
+ originAnchor.href = location.href;
265
+ urlAnchor = document.createElement('a');
266
+ try {
267
+ urlAnchor.href = url;
268
+ return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) || (originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host));
269
+ } catch (error) {
270
+ e = error;
271
+ return true;
272
+ }
273
+ };
274
+
275
+ }).call(this);
276
+ (function() {
277
+ var matches, toArray;
278
+
279
+ matches = Rails.matches;
280
+
281
+ toArray = function(e) {
282
+ return Array.prototype.slice.call(e);
283
+ };
284
+
285
+ Rails.serializeElement = function(element, additionalParam) {
286
+ var inputs, params;
287
+ inputs = [element];
288
+ if (matches(element, 'form')) {
289
+ inputs = toArray(element.elements);
290
+ }
291
+ params = [];
292
+ inputs.forEach(function(input) {
293
+ if (!input.name) {
294
+ return;
295
+ }
296
+ if (matches(input, 'select')) {
297
+ return toArray(input.options).forEach(function(option) {
298
+ if (option.selected) {
299
+ return params.push({
300
+ name: input.name,
301
+ value: option.value
302
+ });
303
+ }
304
+ });
305
+ } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {
306
+ return params.push({
307
+ name: input.name,
308
+ value: input.value
309
+ });
310
+ }
311
+ });
312
+ if (additionalParam) {
313
+ params.push(additionalParam);
314
+ }
315
+ return params.map(function(param) {
316
+ if (param.name != null) {
317
+ return (encodeURIComponent(param.name)) + "=" + (encodeURIComponent(param.value));
318
+ } else {
319
+ return param;
320
+ }
321
+ }).join('&');
322
+ };
323
+
324
+ Rails.formElements = function(form, selector) {
325
+ if (matches(form, 'form')) {
326
+ return toArray(form.elements).filter(function(el) {
327
+ return matches(el, selector);
328
+ });
329
+ } else {
330
+ return toArray(form.querySelectorAll(selector));
331
+ }
332
+ };
333
+
334
+ }).call(this);
335
+ (function() {
336
+ var allowAction, fire, stopEverything;
337
+
338
+ fire = Rails.fire, stopEverything = Rails.stopEverything;
339
+
340
+ Rails.handleConfirm = function(e) {
341
+ if (!allowAction(this)) {
342
+ return stopEverything(e);
343
+ }
344
+ };
345
+
346
+ allowAction = function(element) {
347
+ var answer, callback, message;
348
+ message = element.getAttribute('data-confirm');
349
+ if (!message) {
350
+ return true;
351
+ }
352
+ answer = false;
353
+ if (fire(element, 'confirm')) {
354
+ try {
355
+ answer = confirm(message);
356
+ } catch (error) {}
357
+ callback = fire(element, 'confirm:complete', [answer]);
358
+ }
359
+ return answer && callback;
360
+ };
361
+
362
+ }).call(this);
363
+ (function() {
364
+ var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, matches, setData, stopEverything;
365
+
366
+ matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;
367
+
368
+ Rails.handleDisabledElement = function(e) {
369
+ var element;
370
+ element = this;
371
+ if (element.disabled) {
372
+ return stopEverything(e);
373
+ }
374
+ };
375
+
376
+ Rails.enableElement = function(e) {
377
+ var element;
378
+ element = e instanceof Event ? e.target : e;
379
+ if (matches(element, Rails.linkDisableSelector)) {
380
+ return enableLinkElement(element);
381
+ } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {
382
+ return enableFormElement(element);
383
+ } else if (matches(element, Rails.formSubmitSelector)) {
384
+ return enableFormElements(element);
385
+ }
386
+ };
387
+
388
+ Rails.disableElement = function(e) {
389
+ var element;
390
+ element = e instanceof Event ? e.target : e;
391
+ if (matches(element, Rails.linkDisableSelector)) {
392
+ return disableLinkElement(element);
393
+ } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {
394
+ return disableFormElement(element);
395
+ } else if (matches(element, Rails.formSubmitSelector)) {
396
+ return disableFormElements(element);
397
+ }
398
+ };
399
+
400
+ disableLinkElement = function(element) {
401
+ var replacement;
402
+ replacement = element.getAttribute('data-disable-with');
403
+ if (replacement != null) {
404
+ setData(element, 'ujs:enable-with', element.innerHTML);
405
+ element.innerHTML = replacement;
406
+ }
407
+ element.addEventListener('click', stopEverything);
408
+ return setData(element, 'ujs:disabled', true);
409
+ };
410
+
411
+ enableLinkElement = function(element) {
412
+ var originalText;
413
+ originalText = getData(element, 'ujs:enable-with');
414
+ if (originalText != null) {
415
+ element.innerHTML = originalText;
416
+ setData(element, 'ujs:enable-with', null);
417
+ }
418
+ element.removeEventListener('click', stopEverything);
419
+ return setData(element, 'ujs:disabled', null);
420
+ };
421
+
422
+ disableFormElements = function(form) {
423
+ return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);
424
+ };
425
+
426
+ disableFormElement = function(element) {
427
+ var replacement;
428
+ replacement = element.getAttribute('data-disable-with');
429
+ if (replacement != null) {
430
+ if (matches(element, 'button')) {
431
+ setData(element, 'ujs:enable-with', element.innerHTML);
432
+ element.innerHTML = replacement;
433
+ } else {
434
+ setData(element, 'ujs:enable-with', element.value);
435
+ element.value = replacement;
436
+ }
437
+ }
438
+ element.disabled = true;
439
+ return setData(element, 'ujs:disabled', true);
440
+ };
441
+
442
+ enableFormElements = function(form) {
443
+ return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);
444
+ };
445
+
446
+ enableFormElement = function(element) {
447
+ var originalText;
448
+ originalText = getData(element, 'ujs:enable-with');
449
+ if (originalText != null) {
450
+ if (matches(element, 'button')) {
451
+ element.innerHTML = originalText;
452
+ } else {
453
+ element.value = originalText;
454
+ }
455
+ setData(element, 'ujs:enable-with', null);
456
+ }
457
+ element.disabled = false;
458
+ return setData(element, 'ujs:disabled', null);
459
+ };
460
+
461
+ }).call(this);
462
+ (function() {
463
+ var stopEverything;
464
+
465
+ stopEverything = Rails.stopEverything;
466
+
467
+ Rails.handleMethod = function(e) {
468
+ var csrfParam, csrfToken, form, formContent, href, link, method;
469
+ link = this;
470
+ method = link.getAttribute('data-method');
471
+ if (!method) {
472
+ return;
473
+ }
474
+ href = Rails.href(link);
475
+ csrfToken = Rails.csrfToken();
476
+ csrfParam = Rails.csrfParam();
477
+ form = document.createElement('form');
478
+ formContent = "<input name='_method' value='" + method + "' type='hidden' />";
479
+ if ((csrfParam != null) && (csrfToken != null) && !Rails.isCrossDomain(href)) {
480
+ formContent += "<input name='" + csrfParam + "' value='" + csrfToken + "' type='hidden' />";
481
+ }
482
+ formContent += '<input type="submit" />';
483
+ form.method = 'post';
484
+ form.action = href;
485
+ form.target = link.target;
486
+ form.innerHTML = formContent;
487
+ form.style.display = 'none';
488
+ document.body.appendChild(form);
489
+ form.querySelector('[type="submit"]').click();
490
+ return stopEverything(e);
491
+ };
492
+
493
+ }).call(this);
494
+ (function() {
495
+ var ajax, fire, getData, isCrossDomain, isRemote, matches, serializeElement, setData, stopEverything,
496
+ slice = [].slice;
497
+
498
+ matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;
499
+
500
+ isRemote = function(element) {
501
+ var value;
502
+ value = element.getAttribute('data-remote');
503
+ return (value != null) && value !== 'false';
504
+ };
505
+
506
+ Rails.handleRemote = function(e) {
507
+ var button, data, dataType, element, method, url, withCredentials;
508
+ element = this;
509
+ if (!isRemote(element)) {
510
+ return true;
511
+ }
512
+ if (!fire(element, 'ajax:before')) {
513
+ fire(element, 'ajax:stopped');
514
+ return false;
515
+ }
516
+ withCredentials = element.getAttribute('data-with-credentials');
517
+ dataType = element.getAttribute('data-type') || 'script';
518
+ if (matches(element, Rails.formSubmitSelector)) {
519
+ button = getData(element, 'ujs:submit-button');
520
+ method = getData(element, 'ujs:submit-button-formmethod') || element.method;
521
+ url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;
522
+ if (method.toUpperCase() === 'GET') {
523
+ url = url.replace(/\?.*$/, '');
524
+ }
525
+ if (element.enctype === 'multipart/form-data') {
526
+ data = new FormData(element);
527
+ if (button != null) {
528
+ data.append(button.name, button.value);
529
+ }
530
+ } else {
531
+ data = serializeElement(element, button);
532
+ }
533
+ setData(element, 'ujs:submit-button', null);
534
+ setData(element, 'ujs:submit-button-formmethod', null);
535
+ setData(element, 'ujs:submit-button-formaction', null);
536
+ } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {
537
+ method = element.getAttribute('data-method');
538
+ url = element.getAttribute('data-url');
539
+ data = serializeElement(element, element.getAttribute('data-params'));
540
+ } else {
541
+ method = element.getAttribute('data-method');
542
+ url = Rails.href(element);
543
+ data = element.getAttribute('data-params');
544
+ }
545
+ ajax({
546
+ type: method || 'GET',
547
+ url: url,
548
+ data: data,
549
+ dataType: dataType,
550
+ beforeSend: function(xhr, options) {
551
+ if (fire(element, 'ajax:beforeSend', [xhr, options])) {
552
+ return fire(element, 'ajax:send', [xhr]);
553
+ } else {
554
+ fire(element, 'ajax:stopped');
555
+ return xhr.abort();
556
+ }
557
+ },
558
+ success: function() {
559
+ var args;
560
+ args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
561
+ return fire(element, 'ajax:success', args);
562
+ },
563
+ error: function() {
564
+ var args;
565
+ args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
566
+ return fire(element, 'ajax:error', args);
567
+ },
568
+ complete: function() {
569
+ var args;
570
+ args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
571
+ return fire(element, 'ajax:complete', args);
572
+ },
573
+ crossDomain: isCrossDomain(url),
574
+ withCredentials: (withCredentials != null) && withCredentials !== 'false'
575
+ });
576
+ return stopEverything(e);
577
+ };
578
+
579
+ Rails.formSubmitButtonClick = function(e) {
580
+ var button, form;
581
+ button = this;
582
+ form = button.form;
583
+ if (!form) {
584
+ return;
585
+ }
586
+ if (button.name) {
587
+ setData(form, 'ujs:submit-button', {
588
+ name: button.name,
589
+ value: button.value
590
+ });
591
+ }
592
+ setData(form, 'ujs:formnovalidate-button', button.formNoValidate);
593
+ setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));
594
+ return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));
595
+ };
596
+
597
+ Rails.handleMetaClick = function(e) {
598
+ var data, link, metaClick, method;
599
+ link = this;
600
+ method = (link.getAttribute('data-method') || 'GET').toUpperCase();
601
+ data = link.getAttribute('data-params');
602
+ metaClick = e.metaKey || e.ctrlKey;
603
+ if (metaClick && method === 'GET' && !data) {
604
+ return e.stopImmediatePropagation();
605
+ }
606
+ };
607
+
608
+ }).call(this);
609
+ (function() {
610
+ var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMetaClick, handleMethod, handleRemote, refreshCSRFTokens;
611
+
612
+ fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMetaClick = Rails.handleMetaClick, handleMethod = Rails.handleMethod;
613
+
614
+ if ((typeof jQuery !== "undefined" && jQuery !== null) && !jQuery.rails) {
615
+ jQuery.rails = Rails;
616
+ jQuery.ajaxPrefilter(function(options, originalOptions, xhr) {
617
+ if (!options.crossDomain) {
618
+ return CSRFProtection(xhr);
619
+ }
620
+ });
621
+ }
622
+
623
+ Rails.start = function() {
624
+ if (window._rails_loaded) {
625
+ throw new Error('rails-ujs has already been loaded!');
626
+ }
627
+ window.addEventListener('pageshow', function() {
628
+ $(Rails.formEnableSelector).forEach(function(el) {
629
+ if (getData(el, 'ujs:disabled')) {
630
+ return enableElement(el);
631
+ }
632
+ });
633
+ return $(Rails.linkDisableSelector).forEach(function(el) {
634
+ if (getData(el, 'ujs:disabled')) {
635
+ return enableElement(el);
636
+ }
637
+ });
638
+ });
639
+ delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);
640
+ delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);
641
+ delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);
642
+ delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);
643
+ delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);
644
+ delegate(document, Rails.linkClickSelector, 'click', handleConfirm);
645
+ delegate(document, Rails.linkClickSelector, 'click', handleMetaClick);
646
+ delegate(document, Rails.linkClickSelector, 'click', disableElement);
647
+ delegate(document, Rails.linkClickSelector, 'click', handleRemote);
648
+ delegate(document, Rails.linkClickSelector, 'click', handleMethod);
649
+ delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);
650
+ delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);
651
+ delegate(document, Rails.buttonClickSelector, 'click', disableElement);
652
+ delegate(document, Rails.buttonClickSelector, 'click', handleRemote);
653
+ delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);
654
+ delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);
655
+ delegate(document, Rails.inputChangeSelector, 'change', handleRemote);
656
+ delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);
657
+ delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);
658
+ delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);
659
+ delegate(document, Rails.formSubmitSelector, 'submit', function(e) {
660
+ return setTimeout((function() {
661
+ return disableElement(e);
662
+ }), 13);
663
+ });
664
+ delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);
665
+ delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);
666
+ delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);
667
+ delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);
668
+ delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);
669
+ document.addEventListener('DOMContentLoaded', refreshCSRFTokens);
670
+ return window._rails_loaded = true;
671
+ };
672
+
673
+ if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {
674
+ Rails.start();
675
+ }
676
+
677
+ }).call(this);
678
+ }).call(this);
679
+
680
+ if (typeof module === "object" && module.exports) {
681
+ module.exports = Rails;
682
+ } else if (typeof define === "function" && define.amd) {
683
+ define(Rails);
684
+ }
685
+ }).call(this);