Introduction
Introduction Statistics Contact Development Disclaimer Help
rails.js - warvox - VoIP based wardialing tool, forked from rapid7/warvox.
git clone git://jay.scot/warvox
Log
Files
Refs
README
---
rails.js (5850B)
---
1 (function() {
2 // Technique from Juriy Zaytsev
3 // http://thinkweb2.com/projects/prototype/detecting-event-support-wit…
4 function isEventSupported(eventName) {
5 var el = document.createElement('div');
6 eventName = 'on' + eventName;
7 var isSupported = (eventName in el);
8 if (!isSupported) {
9 el.setAttribute(eventName, 'return;');
10 isSupported = typeof el[eventName] == 'function';
11 }
12 el = null;
13 return isSupported;
14 }
15
16 function isForm(element) {
17 return Object.isElement(element) && element.nodeName.toUpperCase() =…
18 }
19
20 function isInput(element) {
21 if (Object.isElement(element)) {
22 var name = element.nodeName.toUpperCase()
23 return name == 'INPUT' || name == 'SELECT' || name == 'TEXTAREA'
24 }
25 else return false
26 }
27
28 var submitBubbles = isEventSupported('submit'),
29 changeBubbles = isEventSupported('change')
30
31 if (!submitBubbles || !changeBubbles) {
32 // augment the Event.Handler class to observe custom events when nee…
33 Event.Handler.prototype.initialize = Event.Handler.prototype.initial…
34 function(init, element, eventName, selector, callback) {
35 init(element, eventName, selector, callback)
36 // is the handler being attached to an element that doesn't supp…
37 if ( (!submitBubbles && this.eventName == 'submit' && !isForm(th…
38 (!changeBubbles && this.eventName == 'change' && !isInput(t…
39 // "submit" => "emulated:submit"
40 this.eventName = 'emulated:' + this.eventName
41 }
42 }
43 )
44 }
45
46 if (!submitBubbles) {
47 // discover forms on the page by observing focus events which always…
48 document.on('focusin', 'form', function(focusEvent, form) {
49 // special handler for the real "submit" event (one-time operation)
50 if (!form.retrieve('emulated:submit')) {
51 form.on('submit', function(submitEvent) {
52 var emulated = form.fire('emulated:submit', submitEvent, true)
53 // if custom event received preventDefault, cancel the real on…
54 if (emulated.returnValue === false) submitEvent.preventDefault…
55 })
56 form.store('emulated:submit', true)
57 }
58 })
59 }
60
61 if (!changeBubbles) {
62 // discover form inputs on the page
63 document.on('focusin', 'input, select, texarea', function(focusEvent…
64 // special handler for real "change" events
65 if (!input.retrieve('emulated:change')) {
66 input.on('change', function(changeEvent) {
67 input.fire('emulated:change', changeEvent, true)
68 })
69 input.store('emulated:change', true)
70 }
71 })
72 }
73
74 function handleRemote(element) {
75 var method, url, params;
76
77 var event = element.fire("ajax:before");
78 if (event.stopped) return false;
79
80 if (element.tagName.toLowerCase() === 'form') {
81 method = element.readAttribute('method') || 'post';
82 url = element.readAttribute('action');
83 params = element.serialize();
84 } else {
85 method = element.readAttribute('data-method') || 'get';
86 url = element.readAttribute('href');
87 params = {};
88 }
89
90 new Ajax.Request(url, {
91 method: method,
92 parameters: params,
93 evalScripts: true,
94
95 onComplete: function(request) { element.fire("ajax:complete", r…
96 onSuccess: function(request) { element.fire("ajax:success", r…
97 onFailure: function(request) { element.fire("ajax:failure", r…
98 });
99
100 element.fire("ajax:after");
101 }
102
103 function handleMethod(element) {
104 var method = element.readAttribute('data-method'),
105 url = element.readAttribute('href'),
106 csrf_param = $$('meta[name=csrf-param]')[0],
107 csrf_token = $$('meta[name=csrf-token]')[0];
108
109 var form = new Element('form', { method: "POST", action: url, style:…
110 element.parentNode.insert(form);
111
112 if (method !== 'post') {
113 var field = new Element('input', { type: 'hidden', name: '_method'…
114 form.insert(field);
115 }
116
117 if (csrf_param) {
118 var param = csrf_param.readAttribute('content'),
119 token = csrf_token.readAttribute('content'),
120 field = new Element('input', { type: 'hidden', name: param, va…
121 form.insert(field);
122 }
123
124 form.submit();
125 }
126
127
128 document.on("click", "*[data-confirm]", function(event, element) {
129 var message = element.readAttribute('data-confirm');
130 if (!confirm(message)) event.stop();
131 });
132
133 document.on("click", "a[data-remote]", function(event, element) {
134 if (event.stopped) return;
135 handleRemote(element);
136 event.stop();
137 });
138
139 document.on("click", "a[data-method]", function(event, element) {
140 if (event.stopped) return;
141 handleMethod(element);
142 event.stop();
143 });
144
145 document.on("submit", function(event) {
146 var element = event.findElement(),
147 message = element.readAttribute('data-confirm');
148 if (message && !confirm(message)) {
149 event.stop();
150 return false;
151 }
152
153 var inputs = element.select("input[type=submit][data-disable-with]");
154 inputs.each(function(input) {
155 input.disabled = true;
156 input.writeAttribute('data-original-value', input.value);
157 input.value = input.readAttribute('data-disable-with');
158 });
159
160 var element = event.findElement("form[data-remote]");
161 if (element) {
162 handleRemote(element);
163 event.stop();
164 }
165 });
166
167 document.on("ajax:after", "form", function(event, element) {
168 var inputs = element.select("input[type=submit][disabled=true][data-…
169 inputs.each(function(input) {
170 input.value = input.readAttribute('data-original-value');
171 input.removeAttribute('data-original-value');
172 input.disabled = false;
173 });
174 });
175 })();
You are viewing proxied material from jay.scot. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.