blazer_xlsx 3.0.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (148) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +442 -0
  3. data/CONTRIBUTING.md +42 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +1093 -0
  6. data/app/assets/fonts/blazer/glyphicons-halflings-regular.eot +0 -0
  7. data/app/assets/fonts/blazer/glyphicons-halflings-regular.svg +288 -0
  8. data/app/assets/fonts/blazer/glyphicons-halflings-regular.ttf +0 -0
  9. data/app/assets/fonts/blazer/glyphicons-halflings-regular.woff +0 -0
  10. data/app/assets/fonts/blazer/glyphicons-halflings-regular.woff2 +0 -0
  11. data/app/assets/images/blazer/favicon.png +0 -0
  12. data/app/assets/javascripts/blazer/Sortable.js +3709 -0
  13. data/app/assets/javascripts/blazer/ace/ace.js +19630 -0
  14. data/app/assets/javascripts/blazer/ace/ext-language_tools.js +1981 -0
  15. data/app/assets/javascripts/blazer/ace/mode-sql.js +215 -0
  16. data/app/assets/javascripts/blazer/ace/snippets/sql.js +16 -0
  17. data/app/assets/javascripts/blazer/ace/snippets/text.js +9 -0
  18. data/app/assets/javascripts/blazer/ace/theme-twilight.js +18 -0
  19. data/app/assets/javascripts/blazer/ace.js +6 -0
  20. data/app/assets/javascripts/blazer/application.js +84 -0
  21. data/app/assets/javascripts/blazer/bootstrap.js +2580 -0
  22. data/app/assets/javascripts/blazer/chart.umd.js +13 -0
  23. data/app/assets/javascripts/blazer/chartjs-adapter-date-fns.bundle.js +6322 -0
  24. data/app/assets/javascripts/blazer/chartkick.js +2570 -0
  25. data/app/assets/javascripts/blazer/daterangepicker.js +1578 -0
  26. data/app/assets/javascripts/blazer/fuzzysearch.js +24 -0
  27. data/app/assets/javascripts/blazer/highlight.min.js +466 -0
  28. data/app/assets/javascripts/blazer/jquery.js +10872 -0
  29. data/app/assets/javascripts/blazer/jquery.stickytableheaders.js +325 -0
  30. data/app/assets/javascripts/blazer/mapkick.bundle.js +1029 -0
  31. data/app/assets/javascripts/blazer/moment-timezone-with-data.js +1548 -0
  32. data/app/assets/javascripts/blazer/moment.js +5685 -0
  33. data/app/assets/javascripts/blazer/queries.js +130 -0
  34. data/app/assets/javascripts/blazer/rails-ujs.js +746 -0
  35. data/app/assets/javascripts/blazer/routes.js +26 -0
  36. data/app/assets/javascripts/blazer/selectize.js +3891 -0
  37. data/app/assets/javascripts/blazer/stupidtable-custom-settings.js +13 -0
  38. data/app/assets/javascripts/blazer/stupidtable.js +281 -0
  39. data/app/assets/javascripts/blazer/vue.global.prod.js +1 -0
  40. data/app/assets/stylesheets/blazer/application.css +243 -0
  41. data/app/assets/stylesheets/blazer/bootstrap-propshaft.css +10 -0
  42. data/app/assets/stylesheets/blazer/bootstrap-sprockets.css.erb +10 -0
  43. data/app/assets/stylesheets/blazer/bootstrap.css +6828 -0
  44. data/app/assets/stylesheets/blazer/daterangepicker.css +410 -0
  45. data/app/assets/stylesheets/blazer/github.css +125 -0
  46. data/app/assets/stylesheets/blazer/selectize.css +403 -0
  47. data/app/controllers/blazer/base_controller.rb +135 -0
  48. data/app/controllers/blazer/checks_controller.rb +56 -0
  49. data/app/controllers/blazer/dashboards_controller.rb +99 -0
  50. data/app/controllers/blazer/queries_controller.rb +472 -0
  51. data/app/controllers/blazer/uploads_controller.rb +147 -0
  52. data/app/helpers/blazer/base_helper.rb +39 -0
  53. data/app/models/blazer/audit.rb +6 -0
  54. data/app/models/blazer/check.rb +104 -0
  55. data/app/models/blazer/connection.rb +5 -0
  56. data/app/models/blazer/dashboard.rb +17 -0
  57. data/app/models/blazer/dashboard_query.rb +9 -0
  58. data/app/models/blazer/query.rb +42 -0
  59. data/app/models/blazer/record.rb +5 -0
  60. data/app/models/blazer/upload.rb +11 -0
  61. data/app/models/blazer/uploads_connection.rb +7 -0
  62. data/app/views/blazer/_nav.html.erb +18 -0
  63. data/app/views/blazer/_variables.html.erb +127 -0
  64. data/app/views/blazer/check_mailer/failing_checks.html.erb +7 -0
  65. data/app/views/blazer/check_mailer/state_change.html.erb +48 -0
  66. data/app/views/blazer/checks/_form.html.erb +79 -0
  67. data/app/views/blazer/checks/edit.html.erb +3 -0
  68. data/app/views/blazer/checks/index.html.erb +72 -0
  69. data/app/views/blazer/checks/new.html.erb +3 -0
  70. data/app/views/blazer/dashboards/_form.html.erb +82 -0
  71. data/app/views/blazer/dashboards/edit.html.erb +3 -0
  72. data/app/views/blazer/dashboards/new.html.erb +3 -0
  73. data/app/views/blazer/dashboards/show.html.erb +53 -0
  74. data/app/views/blazer/queries/_caching.html.erb +16 -0
  75. data/app/views/blazer/queries/_cohorts.html.erb +48 -0
  76. data/app/views/blazer/queries/_form.html.erb +255 -0
  77. data/app/views/blazer/queries/docs.html.erb +147 -0
  78. data/app/views/blazer/queries/edit.html.erb +2 -0
  79. data/app/views/blazer/queries/home.html.erb +169 -0
  80. data/app/views/blazer/queries/new.html.erb +2 -0
  81. data/app/views/blazer/queries/run.html.erb +183 -0
  82. data/app/views/blazer/queries/schema.html.erb +55 -0
  83. data/app/views/blazer/queries/show.html.erb +72 -0
  84. data/app/views/blazer/uploads/_form.html.erb +27 -0
  85. data/app/views/blazer/uploads/edit.html.erb +3 -0
  86. data/app/views/blazer/uploads/index.html.erb +55 -0
  87. data/app/views/blazer/uploads/new.html.erb +3 -0
  88. data/app/views/layouts/blazer/application.html.erb +25 -0
  89. data/config/routes.rb +25 -0
  90. data/lib/blazer/adapters/athena_adapter.rb +182 -0
  91. data/lib/blazer/adapters/base_adapter.rb +76 -0
  92. data/lib/blazer/adapters/bigquery_adapter.rb +79 -0
  93. data/lib/blazer/adapters/cassandra_adapter.rb +70 -0
  94. data/lib/blazer/adapters/drill_adapter.rb +38 -0
  95. data/lib/blazer/adapters/druid_adapter.rb +102 -0
  96. data/lib/blazer/adapters/elasticsearch_adapter.rb +61 -0
  97. data/lib/blazer/adapters/hive_adapter.rb +55 -0
  98. data/lib/blazer/adapters/ignite_adapter.rb +64 -0
  99. data/lib/blazer/adapters/influxdb_adapter.rb +57 -0
  100. data/lib/blazer/adapters/neo4j_adapter.rb +62 -0
  101. data/lib/blazer/adapters/opensearch_adapter.rb +52 -0
  102. data/lib/blazer/adapters/presto_adapter.rb +54 -0
  103. data/lib/blazer/adapters/salesforce_adapter.rb +50 -0
  104. data/lib/blazer/adapters/snowflake_adapter.rb +82 -0
  105. data/lib/blazer/adapters/soda_adapter.rb +105 -0
  106. data/lib/blazer/adapters/spark_adapter.rb +14 -0
  107. data/lib/blazer/adapters/sql_adapter.rb +353 -0
  108. data/lib/blazer/adapters.rb +17 -0
  109. data/lib/blazer/anomaly_detectors.rb +22 -0
  110. data/lib/blazer/check_mailer.rb +27 -0
  111. data/lib/blazer/data_source.rb +266 -0
  112. data/lib/blazer/engine.rb +42 -0
  113. data/lib/blazer/forecasters.rb +7 -0
  114. data/lib/blazer/result.rb +178 -0
  115. data/lib/blazer/result_cache.rb +71 -0
  116. data/lib/blazer/run_statement.rb +45 -0
  117. data/lib/blazer/run_statement_job.rb +20 -0
  118. data/lib/blazer/slack_notifier.rb +94 -0
  119. data/lib/blazer/statement.rb +77 -0
  120. data/lib/blazer/version.rb +3 -0
  121. data/lib/blazer.rb +282 -0
  122. data/lib/generators/blazer/install_generator.rb +22 -0
  123. data/lib/generators/blazer/templates/config.yml.tt +79 -0
  124. data/lib/generators/blazer/templates/install.rb.tt +47 -0
  125. data/lib/generators/blazer/templates/uploads.rb.tt +10 -0
  126. data/lib/generators/blazer/uploads_generator.rb +18 -0
  127. data/lib/tasks/blazer.rake +20 -0
  128. data/licenses/LICENSE-ace.txt +24 -0
  129. data/licenses/LICENSE-bootstrap.txt +21 -0
  130. data/licenses/LICENSE-chart.js.txt +9 -0
  131. data/licenses/LICENSE-chartjs-adapter-date-fns.txt +9 -0
  132. data/licenses/LICENSE-chartkick.js.txt +22 -0
  133. data/licenses/LICENSE-date-fns.txt +21 -0
  134. data/licenses/LICENSE-daterangepicker.txt +21 -0
  135. data/licenses/LICENSE-fuzzysearch.txt +20 -0
  136. data/licenses/LICENSE-highlight.js.txt +29 -0
  137. data/licenses/LICENSE-jquery.txt +20 -0
  138. data/licenses/LICENSE-kurkle-color.txt +9 -0
  139. data/licenses/LICENSE-mapkick-bundle.txt +1029 -0
  140. data/licenses/LICENSE-moment-timezone.txt +20 -0
  141. data/licenses/LICENSE-moment.txt +22 -0
  142. data/licenses/LICENSE-rails-ujs.txt +20 -0
  143. data/licenses/LICENSE-selectize.txt +202 -0
  144. data/licenses/LICENSE-sortable.txt +21 -0
  145. data/licenses/LICENSE-stickytableheaders.txt +20 -0
  146. data/licenses/LICENSE-stupidtable.txt +19 -0
  147. data/licenses/LICENSE-vue.txt +21 -0
  148. metadata +271 -0
@@ -0,0 +1,746 @@
1
+ /*
2
+ Unobtrusive JavaScript
3
+ https://github.com/rails/rails/blob/main/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:not([data-turbo=true])',
20
+ formInputClickSelector: 'form:not([data-turbo=true]) input[type=submit], form:not([data-turbo=true]) input[type=image], form:not([data-turbo=true]) button[type=submit], form:not([data-turbo=true]) 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 nonce;
36
+
37
+ nonce = null;
38
+
39
+ Rails.loadCSPNonce = function() {
40
+ var ref;
41
+ return nonce = (ref = document.querySelector("meta[name=csp-nonce]")) != null ? ref.content : void 0;
42
+ };
43
+
44
+ Rails.cspNonce = function() {
45
+ return nonce != null ? nonce : Rails.loadCSPNonce();
46
+ };
47
+
48
+ }).call(this);
49
+ (function() {
50
+ var expando, m;
51
+
52
+ m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;
53
+
54
+ Rails.matches = function(element, selector) {
55
+ if (selector.exclude != null) {
56
+ return m.call(element, selector.selector) && !m.call(element, selector.exclude);
57
+ } else {
58
+ return m.call(element, selector);
59
+ }
60
+ };
61
+
62
+ expando = '_ujsData';
63
+
64
+ Rails.getData = function(element, key) {
65
+ var ref;
66
+ return (ref = element[expando]) != null ? ref[key] : void 0;
67
+ };
68
+
69
+ Rails.setData = function(element, key, value) {
70
+ if (element[expando] == null) {
71
+ element[expando] = {};
72
+ }
73
+ return element[expando][key] = value;
74
+ };
75
+
76
+ Rails.$ = function(selector) {
77
+ return Array.prototype.slice.call(document.querySelectorAll(selector));
78
+ };
79
+
80
+ }).call(this);
81
+ (function() {
82
+ var $, csrfParam, csrfToken;
83
+
84
+ $ = Rails.$;
85
+
86
+ csrfToken = Rails.csrfToken = function() {
87
+ var meta;
88
+ meta = document.querySelector('meta[name=csrf-token]');
89
+ return meta && meta.content;
90
+ };
91
+
92
+ csrfParam = Rails.csrfParam = function() {
93
+ var meta;
94
+ meta = document.querySelector('meta[name=csrf-param]');
95
+ return meta && meta.content;
96
+ };
97
+
98
+ Rails.CSRFProtection = function(xhr) {
99
+ var token;
100
+ token = csrfToken();
101
+ if (token != null) {
102
+ return xhr.setRequestHeader('X-CSRF-Token', token);
103
+ }
104
+ };
105
+
106
+ Rails.refreshCSRFTokens = function() {
107
+ var param, token;
108
+ token = csrfToken();
109
+ param = csrfParam();
110
+ if ((token != null) && (param != null)) {
111
+ return $('form input[name="' + param + '"]').forEach(function(input) {
112
+ return input.value = token;
113
+ });
114
+ }
115
+ };
116
+
117
+ }).call(this);
118
+ (function() {
119
+ var CustomEvent, fire, matches, preventDefault;
120
+
121
+ matches = Rails.matches;
122
+
123
+ CustomEvent = window.CustomEvent;
124
+
125
+ if (typeof CustomEvent !== 'function') {
126
+ CustomEvent = function(event, params) {
127
+ var evt;
128
+ evt = document.createEvent('CustomEvent');
129
+ evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
130
+ return evt;
131
+ };
132
+ CustomEvent.prototype = window.Event.prototype;
133
+ preventDefault = CustomEvent.prototype.preventDefault;
134
+ CustomEvent.prototype.preventDefault = function() {
135
+ var result;
136
+ result = preventDefault.call(this);
137
+ if (this.cancelable && !this.defaultPrevented) {
138
+ Object.defineProperty(this, 'defaultPrevented', {
139
+ get: function() {
140
+ return true;
141
+ }
142
+ });
143
+ }
144
+ return result;
145
+ };
146
+ }
147
+
148
+ fire = Rails.fire = function(obj, name, data) {
149
+ var event;
150
+ event = new CustomEvent(name, {
151
+ bubbles: true,
152
+ cancelable: true,
153
+ detail: data
154
+ });
155
+ obj.dispatchEvent(event);
156
+ return !event.defaultPrevented;
157
+ };
158
+
159
+ Rails.stopEverything = function(e) {
160
+ fire(e.target, 'ujs:everythingStopped');
161
+ e.preventDefault();
162
+ e.stopPropagation();
163
+ return e.stopImmediatePropagation();
164
+ };
165
+
166
+ Rails.delegate = function(element, selector, eventType, handler) {
167
+ return element.addEventListener(eventType, function(e) {
168
+ var target;
169
+ target = e.target;
170
+ while (!(!(target instanceof Element) || matches(target, selector))) {
171
+ target = target.parentNode;
172
+ }
173
+ if (target instanceof Element && handler.call(target, e) === false) {
174
+ e.preventDefault();
175
+ return e.stopPropagation();
176
+ }
177
+ });
178
+ };
179
+
180
+ }).call(this);
181
+ (function() {
182
+ var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;
183
+
184
+ cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;
185
+
186
+ AcceptHeaders = {
187
+ '*': '*/*',
188
+ text: 'text/plain',
189
+ html: 'text/html',
190
+ xml: 'application/xml, text/xml',
191
+ json: 'application/json, text/javascript',
192
+ script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'
193
+ };
194
+
195
+ Rails.ajax = function(options) {
196
+ var xhr;
197
+ options = prepareOptions(options);
198
+ xhr = createXHR(options, function() {
199
+ var ref, response;
200
+ response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));
201
+ if (Math.floor(xhr.status / 100) === 2) {
202
+ if (typeof options.success === "function") {
203
+ options.success(response, xhr.statusText, xhr);
204
+ }
205
+ } else {
206
+ if (typeof options.error === "function") {
207
+ options.error(response, xhr.statusText, xhr);
208
+ }
209
+ }
210
+ return typeof options.complete === "function" ? options.complete(xhr, xhr.statusText) : void 0;
211
+ });
212
+ if ((options.beforeSend != null) && !options.beforeSend(xhr, options)) {
213
+ return false;
214
+ }
215
+ if (xhr.readyState === XMLHttpRequest.OPENED) {
216
+ return xhr.send(options.data);
217
+ }
218
+ };
219
+
220
+ prepareOptions = function(options) {
221
+ options.url = options.url || location.href;
222
+ options.type = options.type.toUpperCase();
223
+ if (options.type === 'GET' && options.data) {
224
+ if (options.url.indexOf('?') < 0) {
225
+ options.url += '?' + options.data;
226
+ } else {
227
+ options.url += '&' + options.data;
228
+ }
229
+ }
230
+ if (AcceptHeaders[options.dataType] == null) {
231
+ options.dataType = '*';
232
+ }
233
+ options.accept = AcceptHeaders[options.dataType];
234
+ if (options.dataType !== '*') {
235
+ options.accept += ', */*; q=0.01';
236
+ }
237
+ return options;
238
+ };
239
+
240
+ createXHR = function(options, done) {
241
+ var xhr;
242
+ xhr = new XMLHttpRequest();
243
+ xhr.open(options.type, options.url, true);
244
+ xhr.setRequestHeader('Accept', options.accept);
245
+ if (typeof options.data === 'string') {
246
+ xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
247
+ }
248
+ if (!options.crossDomain) {
249
+ xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
250
+ CSRFProtection(xhr);
251
+ }
252
+ xhr.withCredentials = !!options.withCredentials;
253
+ xhr.onreadystatechange = function() {
254
+ if (xhr.readyState === XMLHttpRequest.DONE) {
255
+ return done(xhr);
256
+ }
257
+ };
258
+ return xhr;
259
+ };
260
+
261
+ processResponse = function(response, type) {
262
+ var parser, script;
263
+ if (typeof response === 'string' && typeof type === 'string') {
264
+ if (type.match(/\bjson\b/)) {
265
+ try {
266
+ response = JSON.parse(response);
267
+ } catch (error) {}
268
+ } else if (type.match(/\b(?:java|ecma)script\b/)) {
269
+ script = document.createElement('script');
270
+ script.setAttribute('nonce', cspNonce());
271
+ script.text = response;
272
+ document.head.appendChild(script).parentNode.removeChild(script);
273
+ } else if (type.match(/\b(xml|html|svg)\b/)) {
274
+ parser = new DOMParser();
275
+ type = type.replace(/;.+/, '');
276
+ try {
277
+ response = parser.parseFromString(response, type);
278
+ } catch (error) {}
279
+ }
280
+ }
281
+ return response;
282
+ };
283
+
284
+ Rails.href = function(element) {
285
+ return element.href;
286
+ };
287
+
288
+ Rails.isCrossDomain = function(url) {
289
+ var e, originAnchor, urlAnchor;
290
+ originAnchor = document.createElement('a');
291
+ originAnchor.href = location.href;
292
+ urlAnchor = document.createElement('a');
293
+ try {
294
+ urlAnchor.href = url;
295
+ return !(((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host) || (originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host));
296
+ } catch (error) {
297
+ e = error;
298
+ return true;
299
+ }
300
+ };
301
+
302
+ }).call(this);
303
+ (function() {
304
+ var matches, toArray;
305
+
306
+ matches = Rails.matches;
307
+
308
+ toArray = function(e) {
309
+ return Array.prototype.slice.call(e);
310
+ };
311
+
312
+ Rails.serializeElement = function(element, additionalParam) {
313
+ var inputs, params;
314
+ inputs = [element];
315
+ if (matches(element, 'form')) {
316
+ inputs = toArray(element.elements);
317
+ }
318
+ params = [];
319
+ inputs.forEach(function(input) {
320
+ if (!input.name || input.disabled) {
321
+ return;
322
+ }
323
+ if (matches(input, 'fieldset[disabled] *')) {
324
+ return;
325
+ }
326
+ if (matches(input, 'select')) {
327
+ return toArray(input.options).forEach(function(option) {
328
+ if (option.selected) {
329
+ return params.push({
330
+ name: input.name,
331
+ value: option.value
332
+ });
333
+ }
334
+ });
335
+ } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {
336
+ return params.push({
337
+ name: input.name,
338
+ value: input.value
339
+ });
340
+ }
341
+ });
342
+ if (additionalParam) {
343
+ params.push(additionalParam);
344
+ }
345
+ return params.map(function(param) {
346
+ if (param.name != null) {
347
+ return (encodeURIComponent(param.name)) + "=" + (encodeURIComponent(param.value));
348
+ } else {
349
+ return param;
350
+ }
351
+ }).join('&');
352
+ };
353
+
354
+ Rails.formElements = function(form, selector) {
355
+ if (matches(form, 'form')) {
356
+ return toArray(form.elements).filter(function(el) {
357
+ return matches(el, selector);
358
+ });
359
+ } else {
360
+ return toArray(form.querySelectorAll(selector));
361
+ }
362
+ };
363
+
364
+ }).call(this);
365
+ (function() {
366
+ var allowAction, fire, stopEverything;
367
+
368
+ fire = Rails.fire, stopEverything = Rails.stopEverything;
369
+
370
+ Rails.handleConfirm = function(e) {
371
+ if (!allowAction(this)) {
372
+ return stopEverything(e);
373
+ }
374
+ };
375
+
376
+ Rails.confirm = function(message, element) {
377
+ return confirm(message);
378
+ };
379
+
380
+ allowAction = function(element) {
381
+ var answer, callback, message;
382
+ message = element.getAttribute('data-confirm');
383
+ if (!message) {
384
+ return true;
385
+ }
386
+ answer = false;
387
+ if (fire(element, 'confirm')) {
388
+ try {
389
+ answer = Rails.confirm(message, element);
390
+ } catch (error) {}
391
+ callback = fire(element, 'confirm:complete', [answer]);
392
+ }
393
+ return answer && callback;
394
+ };
395
+
396
+ }).call(this);
397
+ (function() {
398
+ var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;
399
+
400
+ matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;
401
+
402
+ Rails.handleDisabledElement = function(e) {
403
+ var element;
404
+ element = this;
405
+ if (element.disabled) {
406
+ return stopEverything(e);
407
+ }
408
+ };
409
+
410
+ Rails.enableElement = function(e) {
411
+ var element;
412
+ if (e instanceof Event) {
413
+ if (isXhrRedirect(e)) {
414
+ return;
415
+ }
416
+ element = e.target;
417
+ } else {
418
+ element = e;
419
+ }
420
+ if (matches(element, Rails.linkDisableSelector)) {
421
+ return enableLinkElement(element);
422
+ } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {
423
+ return enableFormElement(element);
424
+ } else if (matches(element, Rails.formSubmitSelector)) {
425
+ return enableFormElements(element);
426
+ }
427
+ };
428
+
429
+ Rails.disableElement = function(e) {
430
+ var element;
431
+ element = e instanceof Event ? e.target : e;
432
+ if (matches(element, Rails.linkDisableSelector)) {
433
+ return disableLinkElement(element);
434
+ } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {
435
+ return disableFormElement(element);
436
+ } else if (matches(element, Rails.formSubmitSelector)) {
437
+ return disableFormElements(element);
438
+ }
439
+ };
440
+
441
+ disableLinkElement = function(element) {
442
+ var replacement;
443
+ if (getData(element, 'ujs:disabled')) {
444
+ return;
445
+ }
446
+ replacement = element.getAttribute('data-disable-with');
447
+ if (replacement != null) {
448
+ setData(element, 'ujs:enable-with', element.innerHTML);
449
+ element.innerHTML = replacement;
450
+ }
451
+ element.addEventListener('click', stopEverything);
452
+ return setData(element, 'ujs:disabled', true);
453
+ };
454
+
455
+ enableLinkElement = function(element) {
456
+ var originalText;
457
+ originalText = getData(element, 'ujs:enable-with');
458
+ if (originalText != null) {
459
+ element.innerHTML = originalText;
460
+ setData(element, 'ujs:enable-with', null);
461
+ }
462
+ element.removeEventListener('click', stopEverything);
463
+ return setData(element, 'ujs:disabled', null);
464
+ };
465
+
466
+ disableFormElements = function(form) {
467
+ return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);
468
+ };
469
+
470
+ disableFormElement = function(element) {
471
+ var replacement;
472
+ if (getData(element, 'ujs:disabled')) {
473
+ return;
474
+ }
475
+ replacement = element.getAttribute('data-disable-with');
476
+ if (replacement != null) {
477
+ if (matches(element, 'button')) {
478
+ setData(element, 'ujs:enable-with', element.innerHTML);
479
+ element.innerHTML = replacement;
480
+ } else {
481
+ setData(element, 'ujs:enable-with', element.value);
482
+ element.value = replacement;
483
+ }
484
+ }
485
+ element.disabled = true;
486
+ return setData(element, 'ujs:disabled', true);
487
+ };
488
+
489
+ enableFormElements = function(form) {
490
+ return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);
491
+ };
492
+
493
+ enableFormElement = function(element) {
494
+ var originalText;
495
+ originalText = getData(element, 'ujs:enable-with');
496
+ if (originalText != null) {
497
+ if (matches(element, 'button')) {
498
+ element.innerHTML = originalText;
499
+ } else {
500
+ element.value = originalText;
501
+ }
502
+ setData(element, 'ujs:enable-with', null);
503
+ }
504
+ element.disabled = false;
505
+ return setData(element, 'ujs:disabled', null);
506
+ };
507
+
508
+ isXhrRedirect = function(event) {
509
+ var ref, xhr;
510
+ xhr = (ref = event.detail) != null ? ref[0] : void 0;
511
+ return (xhr != null ? xhr.getResponseHeader("X-Xhr-Redirect") : void 0) != null;
512
+ };
513
+
514
+ }).call(this);
515
+ (function() {
516
+ var stopEverything;
517
+
518
+ stopEverything = Rails.stopEverything;
519
+
520
+ Rails.handleMethod = function(e) {
521
+ var csrfParam, csrfToken, form, formContent, href, link, method;
522
+ link = this;
523
+ method = link.getAttribute('data-method');
524
+ if (!method) {
525
+ return;
526
+ }
527
+ href = Rails.href(link);
528
+ csrfToken = Rails.csrfToken();
529
+ csrfParam = Rails.csrfParam();
530
+ form = document.createElement('form');
531
+ formContent = "<input name='_method' value='" + method + "' type='hidden' />";
532
+ if ((csrfParam != null) && (csrfToken != null) && !Rails.isCrossDomain(href)) {
533
+ formContent += "<input name='" + csrfParam + "' value='" + csrfToken + "' type='hidden' />";
534
+ }
535
+ formContent += '<input type="submit" />';
536
+ form.method = 'post';
537
+ form.action = href;
538
+ form.target = link.target;
539
+ form.innerHTML = formContent;
540
+ form.style.display = 'none';
541
+ document.body.appendChild(form);
542
+ form.querySelector('[type="submit"]').click();
543
+ return stopEverything(e);
544
+ };
545
+
546
+ }).call(this);
547
+ (function() {
548
+ var ajax, fire, getData, isCrossDomain, isRemote, matches, serializeElement, setData, stopEverything,
549
+ slice = [].slice;
550
+
551
+ matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;
552
+
553
+ isRemote = function(element) {
554
+ var value;
555
+ value = element.getAttribute('data-remote');
556
+ return (value != null) && value !== 'false';
557
+ };
558
+
559
+ Rails.handleRemote = function(e) {
560
+ var button, data, dataType, element, method, url, withCredentials;
561
+ element = this;
562
+ if (!isRemote(element)) {
563
+ return true;
564
+ }
565
+ if (!fire(element, 'ajax:before')) {
566
+ fire(element, 'ajax:stopped');
567
+ return false;
568
+ }
569
+ withCredentials = element.getAttribute('data-with-credentials');
570
+ dataType = element.getAttribute('data-type') || 'script';
571
+ if (matches(element, Rails.formSubmitSelector)) {
572
+ button = getData(element, 'ujs:submit-button');
573
+ method = getData(element, 'ujs:submit-button-formmethod') || element.method;
574
+ url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;
575
+ if (method.toUpperCase() === 'GET') {
576
+ url = url.replace(/\?.*$/, '');
577
+ }
578
+ if (element.enctype === 'multipart/form-data') {
579
+ data = new FormData(element);
580
+ if (button != null) {
581
+ data.append(button.name, button.value);
582
+ }
583
+ } else {
584
+ data = serializeElement(element, button);
585
+ }
586
+ setData(element, 'ujs:submit-button', null);
587
+ setData(element, 'ujs:submit-button-formmethod', null);
588
+ setData(element, 'ujs:submit-button-formaction', null);
589
+ } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {
590
+ method = element.getAttribute('data-method');
591
+ url = element.getAttribute('data-url');
592
+ data = serializeElement(element, element.getAttribute('data-params'));
593
+ } else {
594
+ method = element.getAttribute('data-method');
595
+ url = Rails.href(element);
596
+ data = element.getAttribute('data-params');
597
+ }
598
+ ajax({
599
+ type: method || 'GET',
600
+ url: url,
601
+ data: data,
602
+ dataType: dataType,
603
+ beforeSend: function(xhr, options) {
604
+ if (fire(element, 'ajax:beforeSend', [xhr, options])) {
605
+ return fire(element, 'ajax:send', [xhr]);
606
+ } else {
607
+ fire(element, 'ajax:stopped');
608
+ return false;
609
+ }
610
+ },
611
+ success: function() {
612
+ var args;
613
+ args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
614
+ return fire(element, 'ajax:success', args);
615
+ },
616
+ error: function() {
617
+ var args;
618
+ args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
619
+ return fire(element, 'ajax:error', args);
620
+ },
621
+ complete: function() {
622
+ var args;
623
+ args = 1 <= arguments.length ? slice.call(arguments, 0) : [];
624
+ return fire(element, 'ajax:complete', args);
625
+ },
626
+ crossDomain: isCrossDomain(url),
627
+ withCredentials: (withCredentials != null) && withCredentials !== 'false'
628
+ });
629
+ return stopEverything(e);
630
+ };
631
+
632
+ Rails.formSubmitButtonClick = function(e) {
633
+ var button, form;
634
+ button = this;
635
+ form = button.form;
636
+ if (!form) {
637
+ return;
638
+ }
639
+ if (button.name) {
640
+ setData(form, 'ujs:submit-button', {
641
+ name: button.name,
642
+ value: button.value
643
+ });
644
+ }
645
+ setData(form, 'ujs:formnovalidate-button', button.formNoValidate);
646
+ setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));
647
+ return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));
648
+ };
649
+
650
+ Rails.preventInsignificantClick = function(e) {
651
+ var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;
652
+ link = this;
653
+ method = (link.getAttribute('data-method') || 'GET').toUpperCase();
654
+ data = link.getAttribute('data-params');
655
+ metaClick = e.metaKey || e.ctrlKey;
656
+ insignificantMetaClick = metaClick && method === 'GET' && !data;
657
+ nonPrimaryMouseClick = (e.button != null) && e.button !== 0;
658
+ if (nonPrimaryMouseClick || insignificantMetaClick) {
659
+ return e.stopImmediatePropagation();
660
+ }
661
+ };
662
+
663
+ }).call(this);
664
+ (function() {
665
+ var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;
666
+
667
+ fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;
668
+
669
+ if ((typeof jQuery !== "undefined" && jQuery !== null) && (jQuery.ajax != null)) {
670
+ if (jQuery.rails) {
671
+ throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');
672
+ }
673
+ jQuery.rails = Rails;
674
+ jQuery.ajaxPrefilter(function(options, originalOptions, xhr) {
675
+ if (!options.crossDomain) {
676
+ return CSRFProtection(xhr);
677
+ }
678
+ });
679
+ }
680
+
681
+ Rails.start = function() {
682
+ if (window._rails_loaded) {
683
+ throw new Error('rails-ujs has already been loaded!');
684
+ }
685
+ window.addEventListener('pageshow', function() {
686
+ $(Rails.formEnableSelector).forEach(function(el) {
687
+ if (getData(el, 'ujs:disabled')) {
688
+ return enableElement(el);
689
+ }
690
+ });
691
+ return $(Rails.linkDisableSelector).forEach(function(el) {
692
+ if (getData(el, 'ujs:disabled')) {
693
+ return enableElement(el);
694
+ }
695
+ });
696
+ });
697
+ delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);
698
+ delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);
699
+ delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);
700
+ delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);
701
+ delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);
702
+ delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);
703
+ delegate(document, Rails.linkClickSelector, 'click', handleConfirm);
704
+ delegate(document, Rails.linkClickSelector, 'click', disableElement);
705
+ delegate(document, Rails.linkClickSelector, 'click', handleRemote);
706
+ delegate(document, Rails.linkClickSelector, 'click', handleMethod);
707
+ delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);
708
+ delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);
709
+ delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);
710
+ delegate(document, Rails.buttonClickSelector, 'click', disableElement);
711
+ delegate(document, Rails.buttonClickSelector, 'click', handleRemote);
712
+ delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);
713
+ delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);
714
+ delegate(document, Rails.inputChangeSelector, 'change', handleRemote);
715
+ delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);
716
+ delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);
717
+ delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);
718
+ delegate(document, Rails.formSubmitSelector, 'submit', function(e) {
719
+ return setTimeout((function() {
720
+ return disableElement(e);
721
+ }), 13);
722
+ });
723
+ delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);
724
+ delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);
725
+ delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);
726
+ delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);
727
+ delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);
728
+ delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);
729
+ document.addEventListener('DOMContentLoaded', refreshCSRFTokens);
730
+ document.addEventListener('DOMContentLoaded', loadCSPNonce);
731
+ return window._rails_loaded = true;
732
+ };
733
+
734
+ if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {
735
+ Rails.start();
736
+ }
737
+
738
+ }).call(this);
739
+ }).call(this);
740
+
741
+ if (typeof module === "object" && module.exports) {
742
+ module.exports = Rails;
743
+ } else if (typeof define === "function" && define.amd) {
744
+ define(Rails);
745
+ }
746
+ }).call(this);