jsajax_wizard 0.2.5 → 0.3.0
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.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/lib/jsajax_wizard.rb +157 -96
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 44ae828bcda7ae8306c1012efd612f2ee13f462e4aa62a4449b8cd780aced624
|
4
|
+
data.tar.gz: 1c4c9bb9169ea27f2618ec0f6e0299afe18ccf9d8af502ef4c2e4fb5360950e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0ceadd9dbda94ed48fe241f736a865ae434bc0b1087d7f3098da4bb23a18e46278b60cba85bfa63f93e47ee1556556a1333ca1e5ae3fbc7a199ea2be2aa705da
|
7
|
+
data.tar.gz: a6d6abb9c4ff6540687b83f5fad0facf44f8446170cb2a61263d2cc7ce7e47c3f87b1c338acc16c4f8cc363c23bcc30c79df575adf300deace9c3d18d12563be
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/lib/jsajax_wizard.rb
CHANGED
@@ -29,6 +29,11 @@
|
|
29
29
|
# AJAX triggered from a button press with the text response passed to eval
|
30
30
|
# jaw.add_request server: 'hello', element: {type: 'button', event: 'onclick'}, target_eval: true
|
31
31
|
|
32
|
+
# AJAX triggered from a speech recognition result
|
33
|
+
# jaw.add_request server: 'hello', trigger: 'recognition.onresult', target_eval: true
|
34
|
+
|
35
|
+
|
36
|
+
|
32
37
|
|
33
38
|
require 'rexle'
|
34
39
|
require 'rexle-builder'
|
@@ -46,8 +51,10 @@ class JsAjaxWizard
|
|
46
51
|
|
47
52
|
end
|
48
53
|
|
49
|
-
def add_request(server: '', element: {}, target_element: {},
|
50
|
-
|
54
|
+
def add_request(server: '', element: {}, trigger: nil, target_element: {},
|
55
|
+
target_eval: false)
|
56
|
+
type = element.any? ? [:element, element] : [:trigger, trigger]
|
57
|
+
@requests << [server, type, target_element, target_eval ]
|
51
58
|
end
|
52
59
|
|
53
60
|
def to_html()
|
@@ -59,57 +66,101 @@ class JsAjaxWizard
|
|
59
66
|
doc = Rexle.new(html)
|
60
67
|
puts 'doc.xml: ' + doc.xml(pretty: true) if @debug
|
61
68
|
add_events(doc)
|
62
|
-
doc
|
69
|
+
js = build_js(doc)
|
70
|
+
doc.root.element('body').add(Rexle.new(js))
|
63
71
|
|
64
72
|
doc.xml
|
65
73
|
end
|
66
74
|
|
67
75
|
private
|
68
76
|
|
69
|
-
def
|
77
|
+
def add_element_function(element, i, server, target, target_eval)
|
78
|
+
|
79
|
+
puts ('element: ' + element.inspect).debug if @debug
|
80
|
+
puts '::' + [element, i, server, target, target_eval].inspect if @debug
|
81
|
+
|
82
|
+
a = []
|
83
|
+
|
84
|
+
a << if element.is_a?(Hash) then
|
85
|
+
|
86
|
+
if element[:type] == 'text' then
|
70
87
|
|
71
|
-
@requests.each.with_index do |x,i|
|
72
|
-
|
73
|
-
puts ('x: ' + x.inspect).debug if @debug
|
74
|
-
element = x[1]
|
75
|
-
|
76
|
-
selector = if element[:id] then
|
77
|
-
'#' + element[:id]
|
78
|
-
elsif element[:type]
|
79
|
-
"*[@type='%s']" % element[:type]
|
80
|
-
end
|
81
|
-
|
82
|
-
if @debug then
|
83
|
-
puts ("selector: %s" % selector.inspect).debug
|
84
|
-
puts 'doc: ' + doc.xml(pretty: true).inspect
|
85
|
-
end
|
86
|
-
|
87
|
-
e = doc.at_css(selector)
|
88
|
-
puts ('e: ' + e.inspect).debug if @debug
|
89
|
-
next unless e
|
90
|
-
puts ('e: ' + e.inspect).debug if @debug
|
91
|
-
|
92
|
-
func = 'ajaxCall' + (i+1).to_s
|
93
|
-
event = e.attributes[:type] == 'button' ? func + '()' : func + '(this)'
|
94
|
-
|
95
|
-
puts ('element: ' + element.inspect).debug if @debug
|
96
|
-
|
97
|
-
key = if element[:event] then
|
98
|
-
|
99
88
|
if element[:event].to_sym == :on_enter then
|
100
|
-
|
101
|
-
|
89
|
+
"
|
90
|
+
function ajaxCall#{i+1}(keyCode, e) {
|
91
|
+
|
92
|
+
if (keyCode==13){
|
93
|
+
ajaxRequest('#{server}' + e.value, ajaxResponse#{i+1})
|
94
|
+
}
|
95
|
+
|
96
|
+
}
|
97
|
+
"
|
102
98
|
else
|
103
|
-
|
99
|
+
"
|
100
|
+
function ajaxCall#{i+1}(e) {
|
101
|
+
ajaxRequest('#{server}' + e.value, ajaxResponse#{i+1})
|
102
|
+
}
|
103
|
+
"
|
104
104
|
end
|
105
105
|
|
106
|
+
elsif element[:type] == 'timer'
|
107
|
+
"
|
108
|
+
setInterval(
|
109
|
+
function() {
|
110
|
+
ajaxRequest('#{server}', ajaxResponse#{i+1})
|
111
|
+
}, #{element[:interval]});
|
112
|
+
"
|
106
113
|
else
|
107
|
-
|
114
|
+
"
|
115
|
+
function ajaxCall#{i+1}() {
|
116
|
+
ajaxRequest('#{server}', ajaxResponse#{i+1})
|
117
|
+
}
|
118
|
+
"
|
108
119
|
end
|
109
120
|
|
110
|
-
|
121
|
+
else
|
122
|
+
|
123
|
+
"
|
124
|
+
function ajaxCall#{i+1}(s) {
|
125
|
+
ajaxRequest('#{server}' + escape(s), ajaxResponse#{i+1})
|
126
|
+
}
|
127
|
+
"
|
128
|
+
end
|
129
|
+
|
130
|
+
a << "
|
131
|
+
function ajaxResponse#{i+1}(xhttp) {
|
132
|
+
"
|
133
|
+
|
134
|
+
if target.is_a?(Hash) and target[:id] then
|
135
|
+
|
136
|
+
a << " document.getElementById('#{target[:id]}')" +
|
137
|
+
".innerHTML = xhttp.responseText;"
|
138
|
+
end
|
139
|
+
|
140
|
+
if target_eval then
|
141
|
+
|
142
|
+
a << " eval(xhttp.responseText);"
|
111
143
|
|
112
144
|
end
|
145
|
+
|
146
|
+
a << "
|
147
|
+
}
|
148
|
+
"
|
149
|
+
|
150
|
+
a.join
|
151
|
+
|
152
|
+
|
153
|
+
end
|
154
|
+
|
155
|
+
def add_events(doc)
|
156
|
+
|
157
|
+
@requests.each.with_index do |x,i|
|
158
|
+
|
159
|
+
puts ('request x: ' + x.inspect).debug if @debug
|
160
|
+
|
161
|
+
method(('modify_' + x[1].first.to_s).to_sym).call(x[1].last, doc, i)
|
162
|
+
|
163
|
+
end
|
113
164
|
|
114
165
|
doc
|
115
166
|
end
|
@@ -118,7 +169,9 @@ class JsAjaxWizard
|
|
118
169
|
|
119
170
|
html = @requests.map.with_index do |x,i|
|
120
171
|
|
121
|
-
|
172
|
+
raw_e, e2 = x[1..-1]
|
173
|
+
|
174
|
+
e = raw_e.last
|
122
175
|
|
123
176
|
# e = element e.g. {type: 'button', event: 'onclick'}
|
124
177
|
# e2 = target_element: {id: '', property: :innerHTML}
|
@@ -161,11 +214,8 @@ class JsAjaxWizard
|
|
161
214
|
|
162
215
|
end
|
163
216
|
|
164
|
-
def build_js()
|
217
|
+
def build_js(doc)
|
165
218
|
|
166
|
-
func_calls = @requests.length.times.map do |i|
|
167
|
-
"// ajaxCall#{i+1}();"
|
168
|
-
end
|
169
219
|
|
170
220
|
ajax=<<EOF
|
171
221
|
function ajaxRequest(url, cFunction) {
|
@@ -183,68 +233,79 @@ EOF
|
|
183
233
|
|
184
234
|
funcs_defined = @requests.map.with_index do |x,i|
|
185
235
|
|
186
|
-
|
187
|
-
server,
|
188
|
-
|
189
|
-
a << if element[:type] == 'text' then
|
236
|
+
puts ('x: ' + x.inspect).debug if @debug
|
237
|
+
server, raw_type, target, target_eval = x
|
190
238
|
|
191
|
-
|
192
|
-
|
193
|
-
function ajaxCall#{i+1}(keyCode, e) {
|
194
|
-
|
195
|
-
if (keyCode==13){
|
196
|
-
ajaxRequest('#{server}' + e.value, ajaxResponse#{i+1})
|
197
|
-
}
|
198
|
-
|
199
|
-
}
|
200
|
-
"
|
201
|
-
else
|
202
|
-
"
|
203
|
-
function ajaxCall#{i+1}(e) {
|
204
|
-
ajaxRequest('#{server}' + e.value, ajaxResponse#{i+1})
|
205
|
-
}
|
206
|
-
"
|
207
|
-
end
|
208
|
-
|
209
|
-
elsif element[:type] == 'timer'
|
210
|
-
"
|
211
|
-
setInterval(
|
212
|
-
function() {
|
213
|
-
ajaxRequest('#{server}', ajaxResponse#{i+1})
|
214
|
-
}, #{element[:interval]});
|
215
|
-
"
|
216
|
-
else
|
217
|
-
"
|
218
|
-
function ajaxCall#{i+1}() {
|
219
|
-
ajaxRequest('#{server}', ajaxResponse#{i+1})
|
220
|
-
}
|
221
|
-
"
|
239
|
+
if raw_type.first == :trigger then
|
240
|
+
modify_trigger_function(raw_type.last, i, server, doc)
|
222
241
|
end
|
242
|
+
|
243
|
+
add_element_function(raw_type.last, i, server, target, target_eval)
|
244
|
+
|
245
|
+
end
|
246
|
+
|
247
|
+
s = "\n\n" + ajax + "\n\n" + funcs_defined.join
|
248
|
+
"\n <script>\n%s\n </script>\n" % s
|
223
249
|
|
224
|
-
|
225
|
-
function ajaxResponse#{i+1}(xhttp) {
|
226
|
-
"
|
227
|
-
if target.is_a? Hash and target[:id] then
|
228
|
-
|
229
|
-
a << " document.getElementById('#{target[:id]}')" +
|
230
|
-
".innerHTML = xhttp.responseText;"
|
250
|
+
end
|
231
251
|
|
252
|
+
def modify_element(element, doc, i)
|
253
|
+
|
254
|
+
selector = if element[:id] then
|
255
|
+
'#' + element[:id]
|
256
|
+
elsif element[:type]
|
257
|
+
"*[@type='%s']" % element[:type]
|
258
|
+
end
|
259
|
+
|
260
|
+
if @debug then
|
261
|
+
puts ("selector: %s" % selector.inspect).debug
|
262
|
+
puts 'doc: ' + doc.xml(pretty: true).inspect
|
263
|
+
end
|
264
|
+
|
265
|
+
e = doc.at_css(selector)
|
266
|
+
puts ('e: ' + e.inspect).debug if @debug
|
267
|
+
return unless e
|
268
|
+
puts ('e: ' + e.inspect).debug if @debug
|
269
|
+
|
270
|
+
func = 'ajaxCall' + (i+1).to_s
|
271
|
+
event = e.attributes[:type] == 'button' ? func + '()' : func + '(this)'
|
272
|
+
|
273
|
+
puts ('element: ' + element.inspect).debug if @debug
|
274
|
+
|
275
|
+
key = if element[:event] then
|
276
|
+
|
277
|
+
if element[:event].to_sym == :on_enter then
|
278
|
+
event = func + '(event.keyCode, this)'
|
279
|
+
:onkeyup
|
232
280
|
else
|
233
|
-
|
234
|
-
a << " eval(xhttp.responseText);"
|
235
|
-
|
281
|
+
element[:event].to_sym
|
236
282
|
end
|
237
283
|
|
238
|
-
|
239
|
-
|
240
|
-
"
|
241
|
-
|
242
|
-
a.join
|
284
|
+
else
|
285
|
+
e.attributes[:type] == 'button' ? :onclick : :onkeyup
|
243
286
|
end
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
287
|
+
|
288
|
+
e.attributes[key] = event
|
289
|
+
end
|
290
|
+
|
291
|
+
def modify_trigger(element, doc, i)
|
292
|
+
end
|
293
|
+
|
294
|
+
def modify_trigger_function(trigger, i, server, doc)
|
295
|
+
|
296
|
+
doc.root.xpath('//script').each do |script|
|
297
|
+
puts 'script: ' + script.inspect
|
298
|
+
s = script.text.to_s
|
299
|
+
|
300
|
+
script.text = s.sub(/#{trigger} = function\(\) {[^}]+/) {|x|
|
301
|
+
a = x.lines
|
302
|
+
indent = a[1][/\s+/]
|
303
|
+
a[0..-2].join + indent + "ajaxCall#{i+1}(event.results[0][0]." +
|
304
|
+
"transcript);\n" + a[-1]
|
305
|
+
}
|
306
|
+
|
307
|
+
end
|
308
|
+
|
248
309
|
end
|
249
310
|
|
250
311
|
# find the ajax requests
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsajax_wizard
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Robertson
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
pZTsghadsRxoGiI7mehrgxkeLLA7q3Zpafsvw3mLrERdifNsVFNBUDMjfE/OnJq8
|
36
36
|
EOz+UVQEw8EJ9wHqaJYIbHBq
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2019-10-
|
38
|
+
date: 2019-10-21 00:00:00.000000000 Z
|
39
39
|
dependencies:
|
40
40
|
- !ruby/object:Gem::Dependency
|
41
41
|
name: rexle
|
metadata.gz.sig
CHANGED
Binary file
|