actionview 5.0.7.2 → 5.1.7

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