WFC 2.0.0__py3-none-any.whl
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.
- WebForms.py +2010 -0
- wfc-2.0.0.dist-info/METADATA +71 -0
- wfc-2.0.0.dist-info/RECORD +5 -0
- wfc-2.0.0.dist-info/WHEEL +5 -0
- wfc-2.0.0.dist-info/top_level.txt +1 -0
WebForms.py
ADDED
|
@@ -0,0 +1,2010 @@
|
|
|
1
|
+
# WebForms.py 2.0 - The Back-End Part of WebForms Core Technology, Owned by Elanat (https://elanat.net)
|
|
2
|
+
# Compatible with WebFormsJS version 2.0
|
|
3
|
+
|
|
4
|
+
import re
|
|
5
|
+
import time
|
|
6
|
+
from typing import Optional, List, Union
|
|
7
|
+
|
|
8
|
+
class WebForms:
|
|
9
|
+
def __init__(self):
|
|
10
|
+
self.web_forms_data = []
|
|
11
|
+
|
|
12
|
+
def _add(self, name: str, value: str = ""):
|
|
13
|
+
if value:
|
|
14
|
+
self.web_forms_data.append(f"{name}={value}")
|
|
15
|
+
else:
|
|
16
|
+
self.web_forms_data.append(name)
|
|
17
|
+
|
|
18
|
+
def _get_line_by_index(self, index: int) -> str:
|
|
19
|
+
if not self.web_forms_data or index >= len(self.web_forms_data):
|
|
20
|
+
return ""
|
|
21
|
+
|
|
22
|
+
if index < 0:
|
|
23
|
+
index = len(self.web_forms_data) + index
|
|
24
|
+
|
|
25
|
+
if index < 0 or index >= len(self.web_forms_data):
|
|
26
|
+
return ""
|
|
27
|
+
|
|
28
|
+
return self.web_forms_data[index]
|
|
29
|
+
|
|
30
|
+
def _update_line_by_index(self, index: int, name: str, value: str = ""):
|
|
31
|
+
if not self.web_forms_data or index >= len(self.web_forms_data):
|
|
32
|
+
return
|
|
33
|
+
|
|
34
|
+
if index < 0:
|
|
35
|
+
index = len(self.web_forms_data) + index
|
|
36
|
+
|
|
37
|
+
if index < 0 or index >= len(self.web_forms_data):
|
|
38
|
+
return
|
|
39
|
+
|
|
40
|
+
if value:
|
|
41
|
+
self.web_forms_data[index] = f"{name}={value}"
|
|
42
|
+
else:
|
|
43
|
+
self.web_forms_data[index] = name
|
|
44
|
+
|
|
45
|
+
# For Extension
|
|
46
|
+
def add_line(self, name: str, value: str):
|
|
47
|
+
self._add(name, value)
|
|
48
|
+
|
|
49
|
+
# Add
|
|
50
|
+
def add_id(self, input_place: str, element_id: str):
|
|
51
|
+
self._add(f"ai{input_place}", element_id)
|
|
52
|
+
|
|
53
|
+
def add_name(self, input_place: str, name: str):
|
|
54
|
+
self._add(f"an{input_place}", name)
|
|
55
|
+
|
|
56
|
+
def add_value(self, input_place: str, value: str):
|
|
57
|
+
self._add(f"av{input_place}", value)
|
|
58
|
+
|
|
59
|
+
def add_class(self, input_place: str, class_name: str):
|
|
60
|
+
self._add(f"ac{input_place}", class_name)
|
|
61
|
+
|
|
62
|
+
def add_style(self, input_place: str, style: str):
|
|
63
|
+
self._add(f"as{input_place}", style)
|
|
64
|
+
|
|
65
|
+
def add_style_property(self, input_place: str, name: str, value: str):
|
|
66
|
+
self._add(f"as{input_place}", f"{name}:{value}")
|
|
67
|
+
|
|
68
|
+
def add_option_tag(self, input_place: str, text: str, value: str, selected: bool = False):
|
|
69
|
+
self._add(f"ao{input_place}", f"{value}|{text}" + ("|1" if selected else ""))
|
|
70
|
+
|
|
71
|
+
def add_checkbox_tag(self, input_place: str, text: str, value: str, checked: bool = False):
|
|
72
|
+
self._add(f"ak{input_place}", f"{value}|{text}" + ("|1" if checked else ""))
|
|
73
|
+
|
|
74
|
+
def add_title(self, input_place: str, title: str):
|
|
75
|
+
self._add(f"al{input_place}", title)
|
|
76
|
+
|
|
77
|
+
def add_label(self, input_place: str, label: str):
|
|
78
|
+
self._add(f"aA{input_place}", label)
|
|
79
|
+
|
|
80
|
+
def add_text(self, input_place: str, text: str):
|
|
81
|
+
self._add(f"at{input_place}", text.replace('\n', '$[ln];'))
|
|
82
|
+
|
|
83
|
+
def add_text_to_up(self, input_place: str, text: str):
|
|
84
|
+
self._add(f"pt{input_place}", text.replace('\n', '$[ln];'))
|
|
85
|
+
|
|
86
|
+
def add_attribute(self, input_place: str, attribute: str, value: str = "", splitter: str = '\0'):
|
|
87
|
+
splitter_str = splitter if splitter != '\0' else ""
|
|
88
|
+
self._add(f"aa{input_place}", f"{attribute}|{splitter_str}" + (f"|{value}" if value else ""))
|
|
89
|
+
|
|
90
|
+
def add_tag(self, input_place: str, tag_name: str, element_id: str = ""):
|
|
91
|
+
self._add(f"nt{input_place}", tag_name + (f"|{element_id}" if element_id else ""))
|
|
92
|
+
|
|
93
|
+
def add_tag_to_up(self, input_place: str, tag_name: str, element_id: str = ""):
|
|
94
|
+
self._add(f"ut{input_place}", tag_name + (f"|{element_id}" if element_id else ""))
|
|
95
|
+
|
|
96
|
+
def add_tag_before(self, input_place: str, tag_name: str, element_id: str = ""):
|
|
97
|
+
self._add(f"bt{input_place}", tag_name + (f"|{element_id}" if element_id else ""))
|
|
98
|
+
|
|
99
|
+
def add_tag_after(self, input_place: str, tag_name: str, element_id: str = ""):
|
|
100
|
+
self._add(f"ft{input_place}", tag_name + (f"|{element_id}" if element_id else ""))
|
|
101
|
+
|
|
102
|
+
def add_hidden(self, input_place: str, value: str, element_id: str = ""):
|
|
103
|
+
self._add(f"ah{input_place}", value + (f"|{element_id}" if element_id else ""))
|
|
104
|
+
|
|
105
|
+
# Set
|
|
106
|
+
def set_id(self, input_place: str, element_id: str):
|
|
107
|
+
self._add(f"si{input_place}", element_id)
|
|
108
|
+
|
|
109
|
+
def set_name(self, input_place: str, name: str):
|
|
110
|
+
self._add(f"sn{input_place}", name)
|
|
111
|
+
|
|
112
|
+
def set_value(self, input_place: str, value: str):
|
|
113
|
+
self._add(f"sv{input_place}", value)
|
|
114
|
+
|
|
115
|
+
def set_class(self, input_place: str, class_name: str):
|
|
116
|
+
self._add(f"sc{input_place}", class_name)
|
|
117
|
+
|
|
118
|
+
def set_style(self, input_place: str, style: str):
|
|
119
|
+
self._add(f"ss{input_place}", style)
|
|
120
|
+
|
|
121
|
+
def set_style_property(self, input_place: str, name: str, value: str):
|
|
122
|
+
self._add(f"ss{input_place}", f"{name}:{value}")
|
|
123
|
+
|
|
124
|
+
def set_option_tag(self, input_place: str, text: str, value: str, selected: bool = False):
|
|
125
|
+
self._add(f"so{input_place}", f"{value}|{text}" + ("|1" if selected else ""))
|
|
126
|
+
|
|
127
|
+
def set_checked(self, input_place: str, checked: bool = False):
|
|
128
|
+
self._add(f"sk{input_place}", "1" if checked else "0")
|
|
129
|
+
|
|
130
|
+
def set_checkbox_tag(self, input_place: str, text: str, value: str, checked: bool = False):
|
|
131
|
+
self._add(f"sk{input_place}", f"{value}|{text}" + ("|1" if checked else ""))
|
|
132
|
+
|
|
133
|
+
def set_title(self, input_place: str, title: str):
|
|
134
|
+
self._add(f"sl{input_place}", title)
|
|
135
|
+
|
|
136
|
+
def set_label(self, input_place: str, label: str):
|
|
137
|
+
self._add(f"sA{input_place}", label)
|
|
138
|
+
|
|
139
|
+
def set_text(self, input_place: str, text: str):
|
|
140
|
+
self._add(f"st{input_place}", text.replace('\n', '$[ln];'))
|
|
141
|
+
|
|
142
|
+
def set_attribute(self, input_place: str, attribute: str, value: str = ""):
|
|
143
|
+
self._add(f"sa{input_place}", f"{attribute}" + (f"|{value}" if value else ""))
|
|
144
|
+
|
|
145
|
+
def set_width(self, input_place: str, width: Union[str, int]):
|
|
146
|
+
if isinstance(width, int):
|
|
147
|
+
width = f"{width}px"
|
|
148
|
+
self._add(f"sw{input_place}", width)
|
|
149
|
+
|
|
150
|
+
def set_height(self, input_place: str, height: Union[str, int]):
|
|
151
|
+
if isinstance(height, int):
|
|
152
|
+
height = f"{height}px"
|
|
153
|
+
self._add(f"sh{input_place}", height)
|
|
154
|
+
|
|
155
|
+
def set_background_color(self, input_place: str, color: str):
|
|
156
|
+
self._add(f"bc{input_place}", color)
|
|
157
|
+
|
|
158
|
+
def set_text_color(self, input_place: str, color: str):
|
|
159
|
+
self._add(f"tc{input_place}", color)
|
|
160
|
+
|
|
161
|
+
def set_font_name(self, input_place: str, name: str):
|
|
162
|
+
self._add(f"fn{input_place}", name)
|
|
163
|
+
|
|
164
|
+
def set_font_size(self, input_place: str, size: Union[str, int]):
|
|
165
|
+
if isinstance(size, int):
|
|
166
|
+
size = f"{size}px"
|
|
167
|
+
self._add(f"fs{input_place}", size)
|
|
168
|
+
|
|
169
|
+
def set_font_bold(self, input_place: str, bold: bool):
|
|
170
|
+
self._add(f"fb{input_place}", "1" if bold else "0")
|
|
171
|
+
|
|
172
|
+
def set_visible(self, input_place: str, visible: bool):
|
|
173
|
+
self._add(f"vi{input_place}", "1" if visible else "0")
|
|
174
|
+
|
|
175
|
+
def set_text_align(self, input_place: str, align: str):
|
|
176
|
+
self._add(f"ta{input_place}", align)
|
|
177
|
+
|
|
178
|
+
def set_read_only(self, input_place: str, read_only: bool):
|
|
179
|
+
self._add(f"sr{input_place}", "1" if read_only else "0")
|
|
180
|
+
|
|
181
|
+
def set_disabled(self, input_place: str, disabled: bool):
|
|
182
|
+
self._add(f"sd{input_place}", "1" if disabled else "0")
|
|
183
|
+
|
|
184
|
+
def set_focus(self, input_place: str, focus: bool):
|
|
185
|
+
self._add(f"sf{input_place}", "1" if focus else "0")
|
|
186
|
+
|
|
187
|
+
def set_min_length(self, input_place: str, length: int):
|
|
188
|
+
self._add(f"mn{input_place}", str(length))
|
|
189
|
+
|
|
190
|
+
def set_max_length(self, input_place: str, length: int):
|
|
191
|
+
self._add(f"mx{input_place}", str(length))
|
|
192
|
+
|
|
193
|
+
def set_selected_value(self, input_place: str, value: str):
|
|
194
|
+
self._add(f"ts{input_place}", value)
|
|
195
|
+
|
|
196
|
+
def set_selected_index(self, input_place: str, index: int):
|
|
197
|
+
self._add(f"ti{input_place}", str(index))
|
|
198
|
+
|
|
199
|
+
def set_checked_value(self, input_place: str, value: str, selected: bool):
|
|
200
|
+
self._add(f"ks{input_place}", f"{value}|{'1' if selected else '0'}")
|
|
201
|
+
|
|
202
|
+
def set_checked_index(self, input_place: str, index: int, selected: bool):
|
|
203
|
+
self._add(f"ki{input_place}", f"{index}|{'1' if selected else '0'}")
|
|
204
|
+
|
|
205
|
+
# Insert
|
|
206
|
+
def insert_id(self, input_place: str, element_id: str):
|
|
207
|
+
self._add(f"ii{input_place}", element_id)
|
|
208
|
+
|
|
209
|
+
def insert_name(self, input_place: str, name: str):
|
|
210
|
+
self._add(f"in{input_place}", name)
|
|
211
|
+
|
|
212
|
+
def insert_value(self, input_place: str, value: str):
|
|
213
|
+
self._add(f"iv{input_place}", value)
|
|
214
|
+
|
|
215
|
+
def insert_class(self, input_place: str, class_name: str):
|
|
216
|
+
self._add(f"ic{input_place}", class_name)
|
|
217
|
+
|
|
218
|
+
def insert_style(self, input_place: str, style: str):
|
|
219
|
+
self._add(f"is{input_place}", style)
|
|
220
|
+
|
|
221
|
+
def insert_style_property(self, input_place: str, name: str, value: str):
|
|
222
|
+
self._add(f"is{input_place}", f"{name}:{value}")
|
|
223
|
+
|
|
224
|
+
def insert_option_tag(self, input_place: str, text: str, value: str, selected: bool = False):
|
|
225
|
+
self._add(f"io{input_place}", f"{value}|{text}" + ("|1" if selected else ""))
|
|
226
|
+
|
|
227
|
+
def insert_checkbox_tag(self, input_place: str, text: str, value: str, checked: bool = False):
|
|
228
|
+
self._add(f"ik{input_place}", f"{value}|{text}" + ("|1" if checked else ""))
|
|
229
|
+
|
|
230
|
+
def insert_title(self, input_place: str, title: str):
|
|
231
|
+
self._add(f"il{input_place}", title)
|
|
232
|
+
|
|
233
|
+
def insert_label(self, input_place: str, label: str):
|
|
234
|
+
self._add(f"iA{input_place}", label)
|
|
235
|
+
|
|
236
|
+
def insert_text(self, input_place: str, text: str):
|
|
237
|
+
self._add(f"it{input_place}", text.replace('\n', '$[ln];'))
|
|
238
|
+
|
|
239
|
+
def insert_attribute(self, input_place: str, attribute: str, value: str = "", splitter: str = '\0'):
|
|
240
|
+
splitter_str = splitter if splitter != '\0' else ""
|
|
241
|
+
self._add(f"ia{input_place}", f"{attribute}|{splitter_str}" + (f"|{value}" if value else ""))
|
|
242
|
+
|
|
243
|
+
# Delete
|
|
244
|
+
def delete_id(self, input_place: str):
|
|
245
|
+
self._add(f"di{input_place}")
|
|
246
|
+
|
|
247
|
+
def delete_name(self, input_place: str):
|
|
248
|
+
self._add(f"dn{input_place}")
|
|
249
|
+
|
|
250
|
+
def delete_value(self, input_place: str):
|
|
251
|
+
self._add(f"dv{input_place}")
|
|
252
|
+
|
|
253
|
+
def delete_class(self, input_place: str, class_name: str):
|
|
254
|
+
self._add(f"dc{input_place}", class_name)
|
|
255
|
+
|
|
256
|
+
def delete_style(self, input_place: str, style_name: str):
|
|
257
|
+
self._add(f"ds{input_place}", style_name)
|
|
258
|
+
|
|
259
|
+
def delete_option_tag(self, input_place: str, value: str):
|
|
260
|
+
self._add(f"do{input_place}", value)
|
|
261
|
+
|
|
262
|
+
def delete_all_option_tag(self, input_place: str):
|
|
263
|
+
self._add(f"do{input_place}", "*")
|
|
264
|
+
|
|
265
|
+
def delete_checkbox_tag(self, input_place: str, value: str):
|
|
266
|
+
self._add(f"dk{input_place}", value)
|
|
267
|
+
|
|
268
|
+
def delete_all_checkbox_tag(self, input_place: str):
|
|
269
|
+
self._add(f"dk{input_place}", "*")
|
|
270
|
+
|
|
271
|
+
def delete_title(self, input_place: str):
|
|
272
|
+
self._add(f"dl{input_place}")
|
|
273
|
+
|
|
274
|
+
def delete_label(self, input_place: str):
|
|
275
|
+
self._add(f"dA{input_place}")
|
|
276
|
+
|
|
277
|
+
def delete_text(self, input_place: str):
|
|
278
|
+
self._add(f"dt{input_place}")
|
|
279
|
+
|
|
280
|
+
def delete_attribute(self, input_place: str, attribute: str):
|
|
281
|
+
self._add(f"da{input_place}", attribute)
|
|
282
|
+
|
|
283
|
+
def delete(self, input_place: str):
|
|
284
|
+
self._add(f"de{input_place}")
|
|
285
|
+
|
|
286
|
+
def delete_parent(self, input_place: str):
|
|
287
|
+
self._add(f"dp{input_place}")
|
|
288
|
+
|
|
289
|
+
# Tag
|
|
290
|
+
def swap_tag(self, input_place: str, output_place: str):
|
|
291
|
+
self._add(f"sp{input_place}", output_place)
|
|
292
|
+
|
|
293
|
+
def set_reflection(self, input_place: str, tag: str):
|
|
294
|
+
self._add(f"sR{input_place}", tag)
|
|
295
|
+
|
|
296
|
+
def set_reflection_by_output_place(self, input_place: str, output_place: str):
|
|
297
|
+
self._add(f"iR{input_place}", output_place)
|
|
298
|
+
|
|
299
|
+
# Browser
|
|
300
|
+
def change_url(self, url: str):
|
|
301
|
+
self._add("cu", url)
|
|
302
|
+
|
|
303
|
+
def set_head_title(self, title: str):
|
|
304
|
+
self._add("ht", title)
|
|
305
|
+
|
|
306
|
+
def clipboard_write_text(self, text: str):
|
|
307
|
+
self._add("nw", text)
|
|
308
|
+
|
|
309
|
+
def scroll_to(self, x: int, y: int):
|
|
310
|
+
self._add("ws", f"{x}|{y}")
|
|
311
|
+
|
|
312
|
+
def history_go(self, steps: int):
|
|
313
|
+
self._add("wg", str(steps))
|
|
314
|
+
|
|
315
|
+
def reload_page(self):
|
|
316
|
+
self._add("lr")
|
|
317
|
+
|
|
318
|
+
def redirect(self, path: str):
|
|
319
|
+
self._add("lh", path)
|
|
320
|
+
|
|
321
|
+
# Increase
|
|
322
|
+
def increase_min_length(self, input_place: str, value: int):
|
|
323
|
+
self._add(f"+n{input_place}", str(value))
|
|
324
|
+
|
|
325
|
+
def increase_max_length(self, input_place: str, value: int):
|
|
326
|
+
self._add(f"+x{input_place}", str(value))
|
|
327
|
+
|
|
328
|
+
def increase_font_size(self, input_place: str, value: int):
|
|
329
|
+
self._add(f"+f{input_place}", str(value))
|
|
330
|
+
|
|
331
|
+
def increase_width(self, input_place: str, value: int):
|
|
332
|
+
self._add(f"+w{input_place}", str(value))
|
|
333
|
+
|
|
334
|
+
def increase_height(self, input_place: str, value: int):
|
|
335
|
+
self._add(f"+h{input_place}", str(value))
|
|
336
|
+
|
|
337
|
+
def increase_value(self, input_place: str, value: int):
|
|
338
|
+
self._add(f"+v{input_place}", str(value))
|
|
339
|
+
|
|
340
|
+
# Decrease
|
|
341
|
+
def decrease_min_length(self, input_place: str, value: int):
|
|
342
|
+
self._add(f"-n{input_place}", str(value))
|
|
343
|
+
|
|
344
|
+
def decrease_max_length(self, input_place: str, value: int):
|
|
345
|
+
self._add(f"-x{input_place}", str(value))
|
|
346
|
+
|
|
347
|
+
def decrease_font_size(self, input_place: str, value: int):
|
|
348
|
+
self._add(f"-f{input_place}", str(value))
|
|
349
|
+
|
|
350
|
+
def decrease_width(self, input_place: str, value: int):
|
|
351
|
+
self._add(f"-w{input_place}", str(value))
|
|
352
|
+
|
|
353
|
+
def decrease_height(self, input_place: str, value: int):
|
|
354
|
+
self._add(f"-h{input_place}", str(value))
|
|
355
|
+
|
|
356
|
+
def decrease_value(self, input_place: str, value: int):
|
|
357
|
+
self._add(f"-v{input_place}", str(value))
|
|
358
|
+
|
|
359
|
+
# Event
|
|
360
|
+
def trigger_event(self, input_place: str, html_event_listener: str, constructor_name: Optional[str] = None):
|
|
361
|
+
value = html_event_listener
|
|
362
|
+
if constructor_name:
|
|
363
|
+
value += f"|{constructor_name}"
|
|
364
|
+
self._add(f"TE{input_place}", value)
|
|
365
|
+
|
|
366
|
+
def set_post_event(self, input_place: str, html_event: str):
|
|
367
|
+
self._add(f"Ep{input_place}", html_event)
|
|
368
|
+
|
|
369
|
+
def set_post_event_view(self, input_place: str, html_event: str):
|
|
370
|
+
self._add(f"Ep{input_place}", f"{html_event}|+")
|
|
371
|
+
|
|
372
|
+
def set_post_event_to(self, input_place: str, html_event: str, output_place: str):
|
|
373
|
+
self._add(f"Ep{input_place}", f"{html_event}|{output_place}")
|
|
374
|
+
|
|
375
|
+
def set_post_event_listener(self, input_place: str, html_event_listener: str):
|
|
376
|
+
self._add(f"EP{input_place}", html_event_listener)
|
|
377
|
+
|
|
378
|
+
def set_post_event_listener_view(self, input_place: str, html_event_listener: str):
|
|
379
|
+
self._add(f"EP{input_place}", f"{html_event_listener}|+")
|
|
380
|
+
|
|
381
|
+
def set_post_event_listener_to(self, input_place: str, html_event_listener: str, output_place: str):
|
|
382
|
+
self._add(f"EP{input_place}", f"{html_event_listener}|{output_place}")
|
|
383
|
+
|
|
384
|
+
def set_get_event(self, input_place: str, html_event: str, path: Optional[str] = None, output_place: Optional[str] = None):
|
|
385
|
+
path_str = path if path else "#"
|
|
386
|
+
if output_place:
|
|
387
|
+
self._add(f"Eg{input_place}", f"{html_event}|{path_str}|{output_place}")
|
|
388
|
+
else:
|
|
389
|
+
self._add(f"Eg{input_place}", f"{html_event}|{path_str}")
|
|
390
|
+
|
|
391
|
+
def set_get_event_listener(self, input_place: str, html_event_listener: str, path: Optional[str] = None, output_place: Optional[str] = None):
|
|
392
|
+
path_str = path if path else "#"
|
|
393
|
+
if output_place:
|
|
394
|
+
self._add(f"EG{input_place}", f"{html_event_listener}|{path_str}|{output_place}")
|
|
395
|
+
else:
|
|
396
|
+
self._add(f"EG{input_place}", f"{html_event_listener}|{path_str}")
|
|
397
|
+
|
|
398
|
+
def set_patch_event(self, input_place: str, html_event: str, path: Optional[str] = None, output_place: Optional[str] = None):
|
|
399
|
+
path_str = path if path else "#"
|
|
400
|
+
if output_place:
|
|
401
|
+
self._add(f"Ea{input_place}", f"{html_event}|{path_str}|{output_place}")
|
|
402
|
+
else:
|
|
403
|
+
self._add(f"Ea{input_place}", f"{html_event}|{path_str}")
|
|
404
|
+
|
|
405
|
+
def set_patch_event_listener(self, input_place: str, html_event_listener: str, path: Optional[str] = None, output_place: Optional[str] = None):
|
|
406
|
+
path_str = path if path else "#"
|
|
407
|
+
if output_place:
|
|
408
|
+
self._add(f"EA{input_place}", f"{html_event_listener}|{path_str}|{output_place}")
|
|
409
|
+
else:
|
|
410
|
+
self._add(f"EA{input_place}", f"{html_event_listener}|{path_str}")
|
|
411
|
+
|
|
412
|
+
def set_delete_event(self, input_place: str, html_event: str, path: Optional[str] = None, output_place: Optional[str] = None):
|
|
413
|
+
path_str = path if path else "#"
|
|
414
|
+
if output_place:
|
|
415
|
+
self._add(f"El{input_place}", f"{html_event}|{path_str}|{output_place}")
|
|
416
|
+
else:
|
|
417
|
+
self._add(f"El{input_place}", f"{html_event}|{path_str}")
|
|
418
|
+
|
|
419
|
+
def set_delete_event_listener(self, input_place: str, html_event_listener: str, path: Optional[str] = None, output_place: Optional[str] = None):
|
|
420
|
+
path_str = path if path else "#"
|
|
421
|
+
if output_place:
|
|
422
|
+
self._add(f"EL{input_place}", f"{html_event_listener}|{path_str}|{output_place}")
|
|
423
|
+
else:
|
|
424
|
+
self._add(f"EL{input_place}", f"{html_event_listener}|{path_str}")
|
|
425
|
+
|
|
426
|
+
def set_options_event(self, input_place: str, html_event: str, path: Optional[str] = None, output_place: Optional[str] = None):
|
|
427
|
+
path_str = path if path else "#"
|
|
428
|
+
if output_place:
|
|
429
|
+
self._add(f"Eo{input_place}", f"{html_event}|{path_str}|{output_place}")
|
|
430
|
+
else:
|
|
431
|
+
self._add(f"Eo{input_place}", f"{html_event}|{path_str}")
|
|
432
|
+
|
|
433
|
+
def set_options_event_listener(self, input_place: str, html_event_listener: str, path: Optional[str] = None, output_place: Optional[str] = None):
|
|
434
|
+
path_str = path if path else "#"
|
|
435
|
+
if output_place:
|
|
436
|
+
self._add(f"EO{input_place}", f"{html_event_listener}|{path_str}|{output_place}")
|
|
437
|
+
else:
|
|
438
|
+
self._add(f"EO{input_place}", f"{html_event_listener}|{path_str}")
|
|
439
|
+
|
|
440
|
+
def set_trace_event(self, input_place: str, html_event: str, path: Optional[str] = None, output_place: Optional[str] = None):
|
|
441
|
+
path_str = path if path else "#"
|
|
442
|
+
if output_place:
|
|
443
|
+
self._add(f"Er{input_place}", f"{html_event}|{path_str}|{output_place}")
|
|
444
|
+
else:
|
|
445
|
+
self._add(f"Er{input_place}", f"{html_event}|{path_str}")
|
|
446
|
+
|
|
447
|
+
def set_trace_event_listener(self, input_place: str, html_event_listener: str, path: Optional[str] = None, output_place: Optional[str] = None):
|
|
448
|
+
path_str = path if path else "#"
|
|
449
|
+
if output_place:
|
|
450
|
+
self._add(f"ER{input_place}", f"{html_event_listener}|{path_str}|{output_place}")
|
|
451
|
+
else:
|
|
452
|
+
self._add(f"ER{input_place}", f"{html_event_listener}|{path_str}")
|
|
453
|
+
|
|
454
|
+
def set_connect_event(self, input_place: str, html_event: str, path: Optional[str] = None, output_place: Optional[str] = None):
|
|
455
|
+
path_str = path if path else "#"
|
|
456
|
+
if output_place:
|
|
457
|
+
self._add(f"Ec{input_place}", f"{html_event}|{path_str}|{output_place}")
|
|
458
|
+
else:
|
|
459
|
+
self._add(f"Ec{input_place}", f"{html_event}|{path_str}")
|
|
460
|
+
|
|
461
|
+
def set_connect_event_listener(self, input_place: str, html_event_listener: str, path: Optional[str] = None, output_place: Optional[str] = None):
|
|
462
|
+
path_str = path if path else "#"
|
|
463
|
+
if output_place:
|
|
464
|
+
self._add(f"EC{input_place}", f"{html_event_listener}|{path_str}|{output_place}")
|
|
465
|
+
else:
|
|
466
|
+
self._add(f"EC{input_place}", f"{html_event_listener}|{path_str}")
|
|
467
|
+
|
|
468
|
+
def set_head_event(self, input_place: str, html_event: str, path: Optional[str] = None):
|
|
469
|
+
path_str = path if path else "#"
|
|
470
|
+
self._add(f"Eh{input_place}", f"{html_event}|{path_str}")
|
|
471
|
+
|
|
472
|
+
def set_head_event_listener(self, input_place: str, html_event_listener: str, path: Optional[str] = None):
|
|
473
|
+
path_str = path if path else "#"
|
|
474
|
+
self._add(f"EH{input_place}", f"{html_event_listener}|{path_str}")
|
|
475
|
+
|
|
476
|
+
def set_tag_event(self, input_place: str, html_event: str, output_place: str):
|
|
477
|
+
self._add(f"Et{input_place}", f"{html_event}|{output_place}")
|
|
478
|
+
|
|
479
|
+
def set_tag_event_listener(self, input_place: str, html_event_listener: str, output_place: str):
|
|
480
|
+
self._add(f"ET{input_place}", f"{html_event_listener}|{output_place}")
|
|
481
|
+
|
|
482
|
+
def set_comment_event(self, input_place: str, html_event: str, index: Optional[Union[str, int]] = None, output_place: Optional[str] = None):
|
|
483
|
+
index_str = str(index) if index is not None else ""
|
|
484
|
+
output_str = output_place if output_place else ""
|
|
485
|
+
self._add(f"Eb{input_place}", f"{html_event}|{index_str}|{output_str}")
|
|
486
|
+
|
|
487
|
+
def set_comment_event_listener(self, input_place: str, html_event_listener: str, index: Optional[Union[str, int]] = None, output_place: Optional[str] = None):
|
|
488
|
+
index_str = str(index) if index is not None else ""
|
|
489
|
+
output_str = output_place if output_place else ""
|
|
490
|
+
self._add(f"EB{input_place}", f"{html_event_listener}|{index_str}|{output_str}")
|
|
491
|
+
|
|
492
|
+
def set_wasm_event(self, input_place: str, html_event: str, wasm_language: str, wasm_url: str,
|
|
493
|
+
method_name: str, args: Optional[List[str]] = None, output_place: Optional[str] = None):
|
|
494
|
+
args_join = ",".join(args) if args else ""
|
|
495
|
+
output_str = output_place if output_place else ""
|
|
496
|
+
self._add(f"Ey{input_place}", f"{html_event}|{wasm_language}|{wasm_url}|{method_name}|{args_join}|{output_str}")
|
|
497
|
+
|
|
498
|
+
def set_wasm_event_listener(self, input_place: str, html_event_listener: str, wasm_language: str, wasm_url: str,
|
|
499
|
+
method_name: str, args: Optional[List[str]] = None, output_place: Optional[str] = None):
|
|
500
|
+
args_join = ",".join(args) if args else ""
|
|
501
|
+
output_str = output_place if output_place else ""
|
|
502
|
+
self._add(f"EY{input_place}", f"{html_event_listener}|{wasm_language}|{wasm_url}|{method_name}|{args_join}|{output_str}")
|
|
503
|
+
|
|
504
|
+
def set_websocket_event(self, input_place: str, html_event: str, path: str):
|
|
505
|
+
self._add(f"Ew{input_place}", f"{html_event}|{path}")
|
|
506
|
+
|
|
507
|
+
def set_websocket_event_listener(self, input_place: str, html_event_listener: str, path: str):
|
|
508
|
+
self._add(f"EW{input_place}", f"{html_event_listener}|{path}")
|
|
509
|
+
|
|
510
|
+
def set_sse_event(self, input_place: str, html_event: str, path: str, should_reconnect: bool = True,
|
|
511
|
+
reconnect_try_timeout: int = 3000, output_place: Optional[str] = None):
|
|
512
|
+
value = f"{html_event}|{path}|{'1' if should_reconnect else '0'}|{reconnect_try_timeout}"
|
|
513
|
+
if output_place:
|
|
514
|
+
value += f"|{output_place}"
|
|
515
|
+
self._add(f"Ee{input_place}", value)
|
|
516
|
+
|
|
517
|
+
def set_sse_event_listener(self, input_place: str, html_event_listener: str, path: str, should_reconnect: bool = True,
|
|
518
|
+
reconnect_try_timeout: int = 3000, output_place: Optional[str] = None):
|
|
519
|
+
value = f"{html_event_listener}|{path}|{'1' if should_reconnect else '0'}|{reconnect_try_timeout}"
|
|
520
|
+
if output_place:
|
|
521
|
+
value += f"|{output_place}"
|
|
522
|
+
self._add(f"EE{input_place}", value)
|
|
523
|
+
|
|
524
|
+
def set_front_event(self, input_place: str, html_event: str, module_path: str,
|
|
525
|
+
args: Optional[List[str]] = None, output_place: Optional[str] = None):
|
|
526
|
+
args_join = "|" + "|".join(args) if args else ""
|
|
527
|
+
output_str = output_place if output_place else ""
|
|
528
|
+
self._add(f"Ej{input_place}", f"{html_event}|{module_path}|{output_str}{args_join}")
|
|
529
|
+
|
|
530
|
+
def set_front_event_listener(self, input_place: str, html_event_listener: str, module_path: str,
|
|
531
|
+
args: Optional[List[str]] = None, output_place: Optional[str] = None):
|
|
532
|
+
args_join = "|" + "|".join(args) if args else ""
|
|
533
|
+
output_str = output_place if output_place else ""
|
|
534
|
+
self._add(f"EJ{input_place}", f"{html_event_listener}|{module_path}|{output_str}{args_join}")
|
|
535
|
+
|
|
536
|
+
def set_send_event(self, input_place: str, html_event: str, data: str, path: Optional[str] = None,
|
|
537
|
+
method: str = "POST", is_multi_part: bool = False, content_type: str = "text/plain",
|
|
538
|
+
output_place: Optional[str] = None):
|
|
539
|
+
path_str = path if path else "#"
|
|
540
|
+
data_safe = data.replace('\n', '$[ln];').replace('"', '$[dq];').replace("'", '$[sq];')
|
|
541
|
+
output_str = output_place if output_place else ""
|
|
542
|
+
self._add(f"En{input_place}", f"{html_event}|{data_safe}|{path_str}|{method}|{'1' if is_multi_part else '0'}|{content_type}|{output_str}")
|
|
543
|
+
|
|
544
|
+
def set_send_event_listener(self, input_place: str, html_event_listener: str, data: str, path: Optional[str] = None,
|
|
545
|
+
method: str = "POST", is_multi_part: bool = False, content_type: str = "text/plain",
|
|
546
|
+
output_place: Optional[str] = None):
|
|
547
|
+
path_str = path if path else "#"
|
|
548
|
+
data_safe = data.replace('\n', '$[ln];')
|
|
549
|
+
output_str = output_place if output_place else ""
|
|
550
|
+
self._add(f"EN{input_place}", f"{html_event_listener}|{data_safe}|{path_str}|{method}|{'1' if is_multi_part else '0'}|{content_type}|{output_str}")
|
|
551
|
+
|
|
552
|
+
def set_master_pages_event(self, input_place: str, html_event: str, output_place: Optional[str] = None):
|
|
553
|
+
value = html_event
|
|
554
|
+
if output_place:
|
|
555
|
+
value += f"|{output_place}"
|
|
556
|
+
self._add(f"Eu{input_place}", value)
|
|
557
|
+
|
|
558
|
+
def set_master_pages_event_listener(self, input_place: str, html_event_listener: str, output_place: Optional[str] = None):
|
|
559
|
+
value = html_event_listener
|
|
560
|
+
if output_place:
|
|
561
|
+
value += f"|{output_place}"
|
|
562
|
+
self._add(f"EU{input_place}", value)
|
|
563
|
+
|
|
564
|
+
def set_prevent_default_event(self, input_place: str, html_event: str):
|
|
565
|
+
self._add(f"Ed{input_place}", html_event)
|
|
566
|
+
|
|
567
|
+
def set_prevent_default_event_listener(self, input_place: str, html_event_listener: str):
|
|
568
|
+
self._add(f"ED{input_place}", html_event_listener)
|
|
569
|
+
|
|
570
|
+
def set_stop_propagation_event(self, input_place: str, html_event: str):
|
|
571
|
+
self._add(f"Es{input_place}", html_event)
|
|
572
|
+
|
|
573
|
+
def set_stop_propagation_event_listener(self, input_place: str, html_event_listener: str):
|
|
574
|
+
self._add(f"ES{input_place}", html_event_listener)
|
|
575
|
+
|
|
576
|
+
def set_method_event(self, input_place: str, html_event: str, method_name: str, args: Optional[List[str]] = None):
|
|
577
|
+
args_join = "|" + "|".join(args) if args else ""
|
|
578
|
+
self._add(f"Em{input_place}", f"{html_event}|{method_name}{args_join}")
|
|
579
|
+
|
|
580
|
+
def set_method_event_listener(self, input_place: str, html_event_listener: str, method_name: str, args: Optional[List[str]] = None):
|
|
581
|
+
args_join = "|" + "|".join(args) if args else ""
|
|
582
|
+
self._add(f"EM{input_place}", f"{html_event_listener}|{method_name}{args_join}")
|
|
583
|
+
|
|
584
|
+
def set_module_method_event(self, input_place: str, html_event: str, method_name: str, args: Optional[List[str]] = None):
|
|
585
|
+
args_join = "|" + "|".join(args) if args else ""
|
|
586
|
+
self._add(f"Ex{input_place}", f"{html_event}|{method_name}{args_join}")
|
|
587
|
+
|
|
588
|
+
def set_module_method_event_listener(self, input_place: str, html_event_listener: str, method_name: str, args: Optional[List[str]] = None):
|
|
589
|
+
args_join = "|" + "|".join(args) if args else ""
|
|
590
|
+
self._add(f"EX{input_place}", f"{html_event_listener}|{method_name}{args_join}")
|
|
591
|
+
|
|
592
|
+
def assign_confirm_event(self, input_place: str, html_event: str, text: str = "Are you sure you want to proceed?",
|
|
593
|
+
type_: str = "none", title: str = "Confirm", ok_text: str = "OK", cancel_text: str = "Cancel"):
|
|
594
|
+
text_str = "" if text == "Are you sure you want to proceed?" else text
|
|
595
|
+
type_str = "" if type_ == "none" else type_
|
|
596
|
+
title_str = "" if title == "Confirm" else title
|
|
597
|
+
ok_str = "" if ok_text == "OK" else ok_text
|
|
598
|
+
cancel_str = "" if cancel_text == "Cancel" else cancel_text
|
|
599
|
+
self._add(f"Ef{input_place}", f"{html_event}|{text_str}|{type_str}|{title_str}|{ok_str}|{cancel_str}")
|
|
600
|
+
|
|
601
|
+
def remove_post_event(self, input_place: str, html_event: str):
|
|
602
|
+
self._add(f"Rp{input_place}", html_event)
|
|
603
|
+
|
|
604
|
+
def remove_post_event_listener(self, input_place: str, html_event_listener: str):
|
|
605
|
+
self._add(f"RP{input_place}", html_event_listener)
|
|
606
|
+
|
|
607
|
+
# Note: Many more remove methods would be added here following the same pattern
|
|
608
|
+
# For brevity, I'm showing a few examples
|
|
609
|
+
|
|
610
|
+
def remove_get_event(self, input_place: str, html_event: str):
|
|
611
|
+
self._add(f"Rg{input_place}", html_event)
|
|
612
|
+
|
|
613
|
+
def remove_get_event_listener(self, input_place: str, html_event_listener: str):
|
|
614
|
+
self._add(f"RG{input_place}", html_event_listener)
|
|
615
|
+
|
|
616
|
+
# Custom Event
|
|
617
|
+
def create_custom_dom_event(self, input_place: str, event_name: str, watch: str, key: str,
|
|
618
|
+
compare: str, value: str, range_: str, immediate: bool = False, delay: int = 0):
|
|
619
|
+
self._add(f"eC{input_place}", f"{event_name}|{watch}|{key}|{compare}|{value}|{range_}|{'1' if immediate else '0'}|{delay}")
|
|
620
|
+
|
|
621
|
+
def enable_scroll_bottom_event(self, enable: bool = True):
|
|
622
|
+
self._add("eb", "1" if enable else "0")
|
|
623
|
+
|
|
624
|
+
def enable_reached_element_event(self, input_place: str, once: bool, enable: bool = True):
|
|
625
|
+
self._add(f"er{input_place}", f"{'1' if once else '0'}|{'1' if enable else '0'}")
|
|
626
|
+
|
|
627
|
+
# Module
|
|
628
|
+
def load_module(self, module_path: str, methods: List[str]):
|
|
629
|
+
methods_str = "|" + "|".join(methods) if methods else ""
|
|
630
|
+
self._add("Ml", f"{module_path}{methods_str}")
|
|
631
|
+
|
|
632
|
+
def unload_module(self, module_path: str):
|
|
633
|
+
self._add("Mu", module_path)
|
|
634
|
+
|
|
635
|
+
def delete_module_method(self, method_name: str):
|
|
636
|
+
self._add("Md", method_name)
|
|
637
|
+
|
|
638
|
+
# Unit Testing
|
|
639
|
+
def assert_equal(self, input_place: str, tag: str):
|
|
640
|
+
self._add(f"At{input_place}", tag.replace('\n', '$[ln];'))
|
|
641
|
+
|
|
642
|
+
def assert_equal_by_output_place(self, input_place: str, output_place: str):
|
|
643
|
+
self._add(f"Ao{input_place}", output_place)
|
|
644
|
+
|
|
645
|
+
# Service Worker
|
|
646
|
+
def service_worker_register(self, path: Optional[str] = None, scope_path: Optional[str] = None):
|
|
647
|
+
self._add("wR", f"{path if path else ''}|{scope_path if scope_path else ''}")
|
|
648
|
+
|
|
649
|
+
def service_worker_pre_cache_static(self, path_list: List[str]):
|
|
650
|
+
self._add("wp", "|".join(path_list))
|
|
651
|
+
|
|
652
|
+
def service_worker_dynamic_cache(self, path: str, seconds: int = 0):
|
|
653
|
+
value = path
|
|
654
|
+
if seconds > 0:
|
|
655
|
+
value += f"|{seconds}"
|
|
656
|
+
self._add("wc", value)
|
|
657
|
+
|
|
658
|
+
def service_worker_delete_dynamic_cache(self, path: Optional[str] = None):
|
|
659
|
+
if path:
|
|
660
|
+
self._add("wd", path)
|
|
661
|
+
else:
|
|
662
|
+
self._add("wd")
|
|
663
|
+
|
|
664
|
+
def service_worker_dynamic_cache_ttl_update(self, path: str, seconds: int = 0):
|
|
665
|
+
value = path
|
|
666
|
+
if seconds > 0:
|
|
667
|
+
value += f"|{seconds}"
|
|
668
|
+
self._add("wt", value)
|
|
669
|
+
|
|
670
|
+
def service_worker_route_set(self, path: str, type_: str, cache_dynamic: bool = False):
|
|
671
|
+
self._add("wr", f"{path}|{type_}" + ("|1" if cache_dynamic else ""))
|
|
672
|
+
|
|
673
|
+
def service_worker_route_alias(self, path: str, to: str):
|
|
674
|
+
self._add("wa", f"{path}|{to}")
|
|
675
|
+
|
|
676
|
+
def service_worker_delete_route_alias(self, path: Optional[str] = None):
|
|
677
|
+
self._add("wC", path if path else "")
|
|
678
|
+
|
|
679
|
+
def service_worker_delete_route(self, path: Optional[str] = None):
|
|
680
|
+
if path:
|
|
681
|
+
self._add("wD", path)
|
|
682
|
+
else:
|
|
683
|
+
self._add("wD")
|
|
684
|
+
|
|
685
|
+
# SSE
|
|
686
|
+
def disconnect_sse(self, path: Optional[str] = None):
|
|
687
|
+
if path:
|
|
688
|
+
self._add("Ds", path)
|
|
689
|
+
else:
|
|
690
|
+
self._add("Ds")
|
|
691
|
+
|
|
692
|
+
# State
|
|
693
|
+
def add_state(self, path: Optional[str] = None, title: Optional[str] = None):
|
|
694
|
+
self._add("AS", f"{path if path else ''}|{title if title else ''}")
|
|
695
|
+
|
|
696
|
+
def delete_state(self, path: Optional[str] = None):
|
|
697
|
+
if path:
|
|
698
|
+
self._add("DS", path)
|
|
699
|
+
else:
|
|
700
|
+
self._add("DS", "*")
|
|
701
|
+
|
|
702
|
+
def delete_all_state(self):
|
|
703
|
+
self._add("DS", "*")
|
|
704
|
+
|
|
705
|
+
# Cookie
|
|
706
|
+
def set_cookie(self, key: str, value: str, seconds: int, path: Optional[str] = None):
|
|
707
|
+
value_str = f"{key}|{value}|{seconds}"
|
|
708
|
+
if path:
|
|
709
|
+
value_str += f"|{path}"
|
|
710
|
+
self._add("sC", value_str)
|
|
711
|
+
|
|
712
|
+
# Save/Session Cache
|
|
713
|
+
def save_id(self, input_place: str, key: str = "."):
|
|
714
|
+
self._add(f"@gi{input_place}", key)
|
|
715
|
+
|
|
716
|
+
def save_name(self, input_place: str, key: str = "."):
|
|
717
|
+
self._add(f"@gn{input_place}", key)
|
|
718
|
+
|
|
719
|
+
def save_value(self, input_place: str, key: str = "."):
|
|
720
|
+
self._add(f"@gv{input_place}", key)
|
|
721
|
+
|
|
722
|
+
def save_value_length(self, input_place: str, key: str = "."):
|
|
723
|
+
self._add(f"@ge{input_place}", key)
|
|
724
|
+
|
|
725
|
+
def save_class(self, input_place: str, key: str = "."):
|
|
726
|
+
self._add(f"@gc{input_place}", key)
|
|
727
|
+
|
|
728
|
+
def save_style(self, input_place: str, key: str = "."):
|
|
729
|
+
self._add(f"@gs{input_place}", key)
|
|
730
|
+
|
|
731
|
+
def save_title(self, input_place: str, key: str = "."):
|
|
732
|
+
self._add(f"@gl{input_place}", key)
|
|
733
|
+
|
|
734
|
+
def save_label(self, input_place: str, key: str = "."):
|
|
735
|
+
self._add(f"@gA{input_place}", key)
|
|
736
|
+
|
|
737
|
+
def save_text(self, input_place: str, key: str = "."):
|
|
738
|
+
self._add(f"@gt{input_place}", key)
|
|
739
|
+
|
|
740
|
+
def save_outer_text(self, input_place: str, key: str = "."):
|
|
741
|
+
self._add(f"@go{input_place}", key)
|
|
742
|
+
|
|
743
|
+
def save_text_length(self, input_place: str, key: str = "."):
|
|
744
|
+
self._add(f"@gg{input_place}", key)
|
|
745
|
+
|
|
746
|
+
def save_attribute(self, input_place: str, attribute: str, key: str = "."):
|
|
747
|
+
self._add(f"@ga{input_place}", f"{key}|{attribute}")
|
|
748
|
+
|
|
749
|
+
def save_width(self, input_place: str, key: str = "."):
|
|
750
|
+
self._add(f"@gw{input_place}", key)
|
|
751
|
+
|
|
752
|
+
def save_height(self, input_place: str, key: str = "."):
|
|
753
|
+
self._add(f"@gh{input_place}", key)
|
|
754
|
+
|
|
755
|
+
def save_read_only(self, input_place: str, key: str = "."):
|
|
756
|
+
self._add(f"@gr{input_place}", key)
|
|
757
|
+
|
|
758
|
+
def save_selected_index(self, input_place: str, key: str = "."):
|
|
759
|
+
self._add(f"@gx{input_place}", key)
|
|
760
|
+
|
|
761
|
+
def save_text_align(self, input_place: str, key: str = "."):
|
|
762
|
+
self._add(f"@gT{input_place}", key)
|
|
763
|
+
|
|
764
|
+
def save_node_length(self, input_place: str, key: str = "."):
|
|
765
|
+
self._add(f"@gL{input_place}", key)
|
|
766
|
+
|
|
767
|
+
def save_visible(self, input_place: str, key: str = "."):
|
|
768
|
+
self._add(f"@gV{input_place}", key)
|
|
769
|
+
|
|
770
|
+
def save_url(self, url: str, fetch_script: bool = False, key: str = "."):
|
|
771
|
+
self._add(f"@gu", f"{key}|{url}" + ("|1" if fetch_script else ""))
|
|
772
|
+
|
|
773
|
+
def save_index(self, input_place: str, key: str = "."):
|
|
774
|
+
self._add(f"@gI{input_place}", key)
|
|
775
|
+
|
|
776
|
+
def remove_session_cache(self, cache_key: str):
|
|
777
|
+
self._add("rs", cache_key)
|
|
778
|
+
|
|
779
|
+
def remove_all_session_cache(self):
|
|
780
|
+
self._add("rs", "*")
|
|
781
|
+
|
|
782
|
+
def set_session_cache(self):
|
|
783
|
+
self._add("cs", "*")
|
|
784
|
+
|
|
785
|
+
def add_session_cache_value(self, cache_key: str, value: str):
|
|
786
|
+
self._add("SA", f"{cache_key}|{value.replace(chr(10), '$[ln];')}")
|
|
787
|
+
|
|
788
|
+
def insert_session_cache_value(self, cache_key: str, value: str):
|
|
789
|
+
self._add("SI", f"{cache_key}|{value.replace(chr(10), '$[ln];')}")
|
|
790
|
+
|
|
791
|
+
# Cache
|
|
792
|
+
def cache_id(self, input_place: str, key: str = "."):
|
|
793
|
+
self._add(f"@ci{input_place}", key)
|
|
794
|
+
|
|
795
|
+
def cache_name(self, input_place: str, key: str = "."):
|
|
796
|
+
self._add(f"@cn{input_place}", key)
|
|
797
|
+
|
|
798
|
+
def cache_value(self, input_place: str, key: str = "."):
|
|
799
|
+
self._add(f"@cv{input_place}", key)
|
|
800
|
+
|
|
801
|
+
def cache_value_length(self, input_place: str, key: str = "."):
|
|
802
|
+
self._add(f"@ce{input_place}", key)
|
|
803
|
+
|
|
804
|
+
def cache_class(self, input_place: str, key: str = "."):
|
|
805
|
+
self._add(f"@cc{input_place}", key)
|
|
806
|
+
|
|
807
|
+
def cache_style(self, input_place: str, key: str = "."):
|
|
808
|
+
self._add(f"@cs{input_place}", key)
|
|
809
|
+
|
|
810
|
+
def cache_title(self, input_place: str, key: str = "."):
|
|
811
|
+
self._add(f"@cl{input_place}", key)
|
|
812
|
+
|
|
813
|
+
def cache_label(self, input_place: str, key: str = "."):
|
|
814
|
+
self._add(f"@cA{input_place}", key)
|
|
815
|
+
|
|
816
|
+
def cache_text(self, input_place: str, key: str = "."):
|
|
817
|
+
self._add(f"@ct{input_place}", key)
|
|
818
|
+
|
|
819
|
+
def cache_outer_text(self, input_place: str, key: str = "."):
|
|
820
|
+
self._add(f"@co{input_place}", key)
|
|
821
|
+
|
|
822
|
+
def cache_text_length(self, input_place: str, key: str = "."):
|
|
823
|
+
self._add(f"@cg{input_place}", key)
|
|
824
|
+
|
|
825
|
+
def cache_attribute(self, input_place: str, attribute: str, key: str = "."):
|
|
826
|
+
self._add(f"@ca{input_place}", f"{key}|{attribute}")
|
|
827
|
+
|
|
828
|
+
def cache_width(self, input_place: str, key: str = "."):
|
|
829
|
+
self._add(f"@cw{input_place}", key)
|
|
830
|
+
|
|
831
|
+
def cache_height(self, input_place: str, key: str = "."):
|
|
832
|
+
self._add(f"@ch{input_place}", key)
|
|
833
|
+
|
|
834
|
+
def cache_read_only(self, input_place: str, key: str = "."):
|
|
835
|
+
self._add(f"@cr{input_place}", key)
|
|
836
|
+
|
|
837
|
+
def cache_selected_index(self, input_place: str, key: str = "."):
|
|
838
|
+
self._add(f"@cx{input_place}", key)
|
|
839
|
+
|
|
840
|
+
def cache_text_align(self, input_place: str, key: str = "."):
|
|
841
|
+
self._add(f"@cT{input_place}", key)
|
|
842
|
+
|
|
843
|
+
def cache_node_length(self, input_place: str, key: str = "."):
|
|
844
|
+
self._add(f"@cL{input_place}", key)
|
|
845
|
+
|
|
846
|
+
def cache_visible(self, input_place: str, key: str = "."):
|
|
847
|
+
self._add(f"@cV{input_place}", key)
|
|
848
|
+
|
|
849
|
+
def cache_url(self, url: str, fetch_script: bool = False, key: str = "."):
|
|
850
|
+
self._add(f"@cu", f"{key}|{url}" + ("|1" if fetch_script else ""))
|
|
851
|
+
|
|
852
|
+
def cache_index(self, input_place: str, key: str = "."):
|
|
853
|
+
self._add(f"@cI{input_place}", key)
|
|
854
|
+
|
|
855
|
+
def remove_cache(self, cache_key: str):
|
|
856
|
+
self._add("rd", cache_key)
|
|
857
|
+
|
|
858
|
+
def remove_all_cache(self):
|
|
859
|
+
self._add("rd", "*")
|
|
860
|
+
|
|
861
|
+
def set_cache(self, seconds: Optional[int] = None):
|
|
862
|
+
if seconds is not None:
|
|
863
|
+
self._add("cd", str(seconds))
|
|
864
|
+
else:
|
|
865
|
+
self._add("cd", "*")
|
|
866
|
+
|
|
867
|
+
def add_cache_value(self, cache_key: str, value: str):
|
|
868
|
+
self._add("CA", f"{cache_key}|{value.replace(chr(10), '$[ln];')}")
|
|
869
|
+
|
|
870
|
+
def insert_cache_value(self, cache_key: str, value: str):
|
|
871
|
+
self._add("CI", f"{cache_key}|{value.replace(chr(10), '$[ln];')}")
|
|
872
|
+
|
|
873
|
+
# Call
|
|
874
|
+
def load_url(self, input_place: str, url: str):
|
|
875
|
+
self._add(f"lu{input_place}", url)
|
|
876
|
+
|
|
877
|
+
def run_action_controls(self, action_controls: str, index: Optional[Union[str, int]] = None,
|
|
878
|
+
without_webforms_section: bool = False, use_current_event: bool = True):
|
|
879
|
+
index_str = str(index) if index is not None else ""
|
|
880
|
+
self._add("lA", f"{'1' if use_current_event else '0'}|{'1' if without_webforms_section else '0'}|{index_str}|{action_controls}")
|
|
881
|
+
|
|
882
|
+
def call_script(self, script_text: str):
|
|
883
|
+
self._add("_", script_text.replace(chr(10), '$[ln];'))
|
|
884
|
+
|
|
885
|
+
def call_method(self, method_name: str, args: Optional[List[str]] = None):
|
|
886
|
+
args_str = "|" + "|".join(args) if args else ""
|
|
887
|
+
self._add("lm", f"{method_name}{args_str}")
|
|
888
|
+
|
|
889
|
+
def call_module_method(self, method_name: str, args: Optional[List[str]] = None):
|
|
890
|
+
args_str = "|" + "|".join(args) if args else ""
|
|
891
|
+
self._add("lM", f"{method_name}{args_str}")
|
|
892
|
+
|
|
893
|
+
def call_post_back(self, form_input_place: str, output_place: Optional[str] = None):
|
|
894
|
+
value = f"1|{form_input_place}"
|
|
895
|
+
if output_place:
|
|
896
|
+
value += f"|{output_place}"
|
|
897
|
+
self._add("Lp", value)
|
|
898
|
+
|
|
899
|
+
def call_tag_back(self, output_place: Optional[str] = None, use_current_event: bool = True):
|
|
900
|
+
value = "1" if use_current_event else "0"
|
|
901
|
+
if output_place:
|
|
902
|
+
value += f"|{output_place}"
|
|
903
|
+
self._add("Lt", value)
|
|
904
|
+
|
|
905
|
+
def call_comment_back(self, index: Optional[Union[str, int]] = None, output_place: Optional[str] = None,
|
|
906
|
+
use_current_event: bool = True):
|
|
907
|
+
index_str = str(index) if index is not None else ""
|
|
908
|
+
output_str = output_place if output_place else ""
|
|
909
|
+
self._add("LC", f"{'1' if use_current_event else '0'}|{index_str}|{output_str}")
|
|
910
|
+
|
|
911
|
+
def call_wasm_back(self, wasm_language: str, wasm_url: str, method_name: str,
|
|
912
|
+
args: Optional[List[str]] = None, output_place: Optional[str] = None,
|
|
913
|
+
use_current_event: bool = True):
|
|
914
|
+
args_join = ",".join(args) if args else ""
|
|
915
|
+
output_str = output_place if output_place else ""
|
|
916
|
+
self._add("Ly", f"{'1' if use_current_event else '0'}|{wasm_language}|{wasm_url}|{method_name}|{args_join}|{output_str}")
|
|
917
|
+
|
|
918
|
+
def call_websocket_back(self, path: str, use_current_event: bool = True):
|
|
919
|
+
self._add("Lw", f"{'1' if use_current_event else '0'}|{path}")
|
|
920
|
+
|
|
921
|
+
def call_sse_back(self, path: str, output_place: Optional[str] = None, use_current_event: bool = True,
|
|
922
|
+
should_reconnect: bool = True, reconnect_try_timeout: int = 3000):
|
|
923
|
+
value = f"{'1' if use_current_event else '0'}|{path}|{'1' if should_reconnect else '0'}|{reconnect_try_timeout}"
|
|
924
|
+
if output_place:
|
|
925
|
+
value += f"|{output_place}"
|
|
926
|
+
self._add("Ls", value)
|
|
927
|
+
|
|
928
|
+
def call_front(self, module_path: str, args: Optional[List[str]] = None, output_place: Optional[str] = None,
|
|
929
|
+
use_current_event: bool = True):
|
|
930
|
+
args_str = "|" + "|".join(args) if args else ""
|
|
931
|
+
output_str = output_place if output_place else ""
|
|
932
|
+
self._add("Lj", f"{'1' if use_current_event else '0'}|{module_path}|{output_str}{args_str}")
|
|
933
|
+
|
|
934
|
+
def call_get_back(self, path: str, output_place: Optional[str] = None, use_current_event: bool = True):
|
|
935
|
+
value = f"{'1' if use_current_event else '0'}|{path}"
|
|
936
|
+
if output_place:
|
|
937
|
+
value += f"|{output_place}"
|
|
938
|
+
self._add("Lg", value)
|
|
939
|
+
|
|
940
|
+
def call_put_back(self, path: str, output_place: Optional[str] = None, use_current_event: bool = True):
|
|
941
|
+
value = f"{'1' if use_current_event else '0'}|{path}"
|
|
942
|
+
if output_place:
|
|
943
|
+
value += f"|{output_place}"
|
|
944
|
+
self._add("Lu", value)
|
|
945
|
+
|
|
946
|
+
def call_patch_back(self, path: str, output_place: Optional[str] = None, use_current_event: bool = True):
|
|
947
|
+
value = f"{'1' if use_current_event else '0'}|{path}"
|
|
948
|
+
if output_place:
|
|
949
|
+
value += f"|{output_place}"
|
|
950
|
+
self._add("LP", value)
|
|
951
|
+
|
|
952
|
+
def call_delete_back(self, path: str, output_place: Optional[str] = None, use_current_event: bool = True):
|
|
953
|
+
value = f"{'1' if use_current_event else '0'}|{path}"
|
|
954
|
+
if output_place:
|
|
955
|
+
value += f"|{output_place}"
|
|
956
|
+
self._add("Ld", value)
|
|
957
|
+
|
|
958
|
+
def call_head_back(self, path: str, output_place: Optional[str] = None, use_current_event: bool = True):
|
|
959
|
+
value = f"{'1' if use_current_event else '0'}|{path}"
|
|
960
|
+
if output_place:
|
|
961
|
+
value += f"|{output_place}"
|
|
962
|
+
self._add("Lh", value)
|
|
963
|
+
|
|
964
|
+
def call_options_back(self, path: str, output_place: Optional[str] = None, use_current_event: bool = True):
|
|
965
|
+
value = f"{'1' if use_current_event else '0'}|{path}"
|
|
966
|
+
if output_place:
|
|
967
|
+
value += f"|{output_place}"
|
|
968
|
+
self._add("Lo", value)
|
|
969
|
+
|
|
970
|
+
def call_trace_back(self, path: str, output_place: Optional[str] = None, use_current_event: bool = True):
|
|
971
|
+
value = f"{'1' if use_current_event else '0'}|{path}"
|
|
972
|
+
if output_place:
|
|
973
|
+
value += f"|{output_place}"
|
|
974
|
+
self._add("LT", value)
|
|
975
|
+
|
|
976
|
+
def call_connect_back(self, path: str, output_place: Optional[str] = None, use_current_event: bool = True):
|
|
977
|
+
value = f"{'1' if use_current_event else '0'}|{path}"
|
|
978
|
+
if output_place:
|
|
979
|
+
value += f"|{output_place}"
|
|
980
|
+
self._add("Lc", value)
|
|
981
|
+
|
|
982
|
+
def call_send_back(self, path: str, method: str, is_multi_part: bool, content_type: str, data: str,
|
|
983
|
+
output_place: Optional[str] = None, use_current_event: bool = True):
|
|
984
|
+
data_safe = data.replace(chr(10), '$[ln];').replace('|', '$[vb];')
|
|
985
|
+
value = f"{'1' if use_current_event else '0'}|{path}|{method}|{'1' if is_multi_part else '0'}|{content_type}|{data_safe}"
|
|
986
|
+
if output_place:
|
|
987
|
+
value += f"|{output_place}"
|
|
988
|
+
self._add("LS", value)
|
|
989
|
+
|
|
990
|
+
# Update
|
|
991
|
+
def increase(self, input_place: str, value: float):
|
|
992
|
+
self._add(f"gt{input_place}", f"i|{value}")
|
|
993
|
+
|
|
994
|
+
def decrease(self, input_place: str, value: float):
|
|
995
|
+
self._add(f"gt{input_place}", f"i|{-value}")
|
|
996
|
+
|
|
997
|
+
def replace(self, input_place: str, value: str, new_value: str, also_start_tag: bool = False, deep: bool = False):
|
|
998
|
+
if value and value.startswith('@'):
|
|
999
|
+
value = "$[at];" + value[1:]
|
|
1000
|
+
|
|
1001
|
+
if new_value and new_value.startswith('@'):
|
|
1002
|
+
new_value = "$[at];" + new_value[1:]
|
|
1003
|
+
|
|
1004
|
+
self._add(f"gt{input_place}", f"r|{value}|{new_value}|{'1' if also_start_tag else '0'}|{'1' if deep else '0'}")
|
|
1005
|
+
|
|
1006
|
+
def replace_start_tag(self, input_place: str, value: str, new_value: str):
|
|
1007
|
+
if value and value.startswith('@'):
|
|
1008
|
+
value = "$[at];" + value[1:]
|
|
1009
|
+
|
|
1010
|
+
if new_value and new_value.startswith('@'):
|
|
1011
|
+
new_value = "$[at];" + new_value[1:]
|
|
1012
|
+
|
|
1013
|
+
self._add(f"gt{input_place}", f"s|{value}|{new_value}")
|
|
1014
|
+
|
|
1015
|
+
# Pre Runner
|
|
1016
|
+
def assign_delay(self, milliseconds: int, index: int = -1):
|
|
1017
|
+
line = self._get_line_by_index(index)
|
|
1018
|
+
if not line:
|
|
1019
|
+
return
|
|
1020
|
+
|
|
1021
|
+
parts = line.split('=', 1)
|
|
1022
|
+
if len(parts) == 2:
|
|
1023
|
+
name, value = parts
|
|
1024
|
+
new_name = f":{milliseconds}){name}"
|
|
1025
|
+
self._update_line_by_index(index, new_name, value)
|
|
1026
|
+
else:
|
|
1027
|
+
name = parts[0]
|
|
1028
|
+
new_name = f":{milliseconds}){name}"
|
|
1029
|
+
self._update_line_by_index(index, new_name)
|
|
1030
|
+
|
|
1031
|
+
def assign_delay_change(self, milliseconds: int, index: int = -1):
|
|
1032
|
+
line = self._get_line_by_index(index)
|
|
1033
|
+
if not line:
|
|
1034
|
+
return
|
|
1035
|
+
|
|
1036
|
+
parts = line.split('=', 1)
|
|
1037
|
+
if len(parts) == 2:
|
|
1038
|
+
name, value = parts
|
|
1039
|
+
else:
|
|
1040
|
+
name = parts[0]
|
|
1041
|
+
value = ""
|
|
1042
|
+
|
|
1043
|
+
if name.startswith(':') and ')' in name:
|
|
1044
|
+
closing_bracket = name.find(')')
|
|
1045
|
+
name = name[closing_bracket + 1:]
|
|
1046
|
+
|
|
1047
|
+
new_name = f":{milliseconds}){name}"
|
|
1048
|
+
self._update_line_by_index(index, new_name, value)
|
|
1049
|
+
|
|
1050
|
+
def assign_interval(self, milliseconds: int, interval_id: Optional[str] = None, index: int = -1):
|
|
1051
|
+
line = self._get_line_by_index(index)
|
|
1052
|
+
if not line:
|
|
1053
|
+
return
|
|
1054
|
+
|
|
1055
|
+
parts = line.split('=', 1)
|
|
1056
|
+
if len(parts) == 2:
|
|
1057
|
+
name, value = parts
|
|
1058
|
+
new_name = f"({milliseconds}" + (f"|{interval_id}" if interval_id else "") + f"){name}"
|
|
1059
|
+
self._update_line_by_index(index, new_name, value)
|
|
1060
|
+
else:
|
|
1061
|
+
name = parts[0]
|
|
1062
|
+
new_name = f"({milliseconds}" + (f"|{interval_id}" if interval_id else "") + f"){name}"
|
|
1063
|
+
self._update_line_by_index(index, new_name)
|
|
1064
|
+
|
|
1065
|
+
def assign_interval_change(self, milliseconds: int, interval_id: Optional[str] = None, index: int = -1):
|
|
1066
|
+
line = self._get_line_by_index(index)
|
|
1067
|
+
if not line:
|
|
1068
|
+
return
|
|
1069
|
+
|
|
1070
|
+
parts = line.split('=', 1)
|
|
1071
|
+
if len(parts) == 2:
|
|
1072
|
+
name, value = parts
|
|
1073
|
+
else:
|
|
1074
|
+
name = parts[0]
|
|
1075
|
+
value = ""
|
|
1076
|
+
|
|
1077
|
+
if name.startswith('(') and ')' in name:
|
|
1078
|
+
closing_bracket = name.find(')')
|
|
1079
|
+
name = name[closing_bracket + 1:]
|
|
1080
|
+
|
|
1081
|
+
new_name = f"({milliseconds}" + (f"|{interval_id}" if interval_id else "") + f"){name}"
|
|
1082
|
+
self._update_line_by_index(index, new_name, value)
|
|
1083
|
+
|
|
1084
|
+
def delete_interval(self, interval_id: str):
|
|
1085
|
+
self._add("Di", interval_id)
|
|
1086
|
+
|
|
1087
|
+
def assign_repeat(self, count: int, index: int = -1):
|
|
1088
|
+
line = self._get_line_by_index(index)
|
|
1089
|
+
if not line:
|
|
1090
|
+
return
|
|
1091
|
+
|
|
1092
|
+
parts = line.split('=', 1)
|
|
1093
|
+
if len(parts) == 2:
|
|
1094
|
+
name, value = parts
|
|
1095
|
+
new_name = f",{count}){name}"
|
|
1096
|
+
self._update_line_by_index(index, new_name, value)
|
|
1097
|
+
else:
|
|
1098
|
+
name = parts[0]
|
|
1099
|
+
new_name = f",{count}){name}"
|
|
1100
|
+
self._update_line_by_index(index, new_name)
|
|
1101
|
+
|
|
1102
|
+
def assign_repeat_change(self, count: int, index: int = -1):
|
|
1103
|
+
line = self._get_line_by_index(index)
|
|
1104
|
+
if not line:
|
|
1105
|
+
return
|
|
1106
|
+
|
|
1107
|
+
parts = line.split('=', 1)
|
|
1108
|
+
if len(parts) == 2:
|
|
1109
|
+
name, value = parts
|
|
1110
|
+
else:
|
|
1111
|
+
name = parts[0]
|
|
1112
|
+
value = ""
|
|
1113
|
+
|
|
1114
|
+
if name.startswith(',') and ')' in name:
|
|
1115
|
+
closing_bracket = name.find(')')
|
|
1116
|
+
name = name[closing_bracket + 1:]
|
|
1117
|
+
|
|
1118
|
+
new_name = f",{count}){name}"
|
|
1119
|
+
self._update_line_by_index(index, new_name, value)
|
|
1120
|
+
|
|
1121
|
+
# Index
|
|
1122
|
+
def start_index(self, name: str = ""):
|
|
1123
|
+
self._add("#", name)
|
|
1124
|
+
|
|
1125
|
+
def go_to(self, line: Union[int, str], repeat: int = 1):
|
|
1126
|
+
if isinstance(line, int):
|
|
1127
|
+
self._add("&", f"{line}|{repeat}")
|
|
1128
|
+
else:
|
|
1129
|
+
self._add("&", f"#{line}|{repeat}")
|
|
1130
|
+
|
|
1131
|
+
# Start
|
|
1132
|
+
def start_transient_dom(self, input_place: str):
|
|
1133
|
+
self._add("td", input_place)
|
|
1134
|
+
|
|
1135
|
+
def end_transient_dom(self):
|
|
1136
|
+
self._add("td", ";")
|
|
1137
|
+
|
|
1138
|
+
# Message
|
|
1139
|
+
def alert(self, text: str, type_: str = "none", title: str = "Alert", ok_text: str = "OK"):
|
|
1140
|
+
type_str = "" if type_ == "none" else type_
|
|
1141
|
+
title_str = "" if title == "Alert" else title
|
|
1142
|
+
ok_str = "" if ok_text == "OK" else ok_text
|
|
1143
|
+
self._add("Al", f"{text}|{type_str}|{title_str}|{ok_str}")
|
|
1144
|
+
|
|
1145
|
+
def message(self, text: str, type_: str = "none", duration: int = 0):
|
|
1146
|
+
type_str = "" if type_ == "none" else type_
|
|
1147
|
+
duration_str = "" if duration == 0 else str(duration)
|
|
1148
|
+
self._add("me", f"{text}|{type_str}|{duration_str}")
|
|
1149
|
+
|
|
1150
|
+
def console_message(self, text: str, type_: str = "log"):
|
|
1151
|
+
type_str = "" if type_ == "log" else type_
|
|
1152
|
+
self._add("mc", f"{text.replace(chr(10), '$[ln];')}" + (f"|{type_str}" if type_str else ""))
|
|
1153
|
+
|
|
1154
|
+
def console_message_assert(self, text: str, condition: str):
|
|
1155
|
+
self._add("ma", f"{text.replace(chr(10), '$[ln];')}|{condition}")
|
|
1156
|
+
|
|
1157
|
+
# Enable
|
|
1158
|
+
def enable_websocket(self, enable: bool = True):
|
|
1159
|
+
self._add("ew", "1" if enable else "0")
|
|
1160
|
+
|
|
1161
|
+
def enable_websocket_once(self):
|
|
1162
|
+
self._add("ew", "$")
|
|
1163
|
+
|
|
1164
|
+
def add_websocket(self, path: str):
|
|
1165
|
+
self._add(f"aw{path}")
|
|
1166
|
+
|
|
1167
|
+
# Use
|
|
1168
|
+
def use_websocket(self, input_place: str):
|
|
1169
|
+
self._add(f"uw{input_place}")
|
|
1170
|
+
|
|
1171
|
+
def use_only_change_update(self, input_place: str):
|
|
1172
|
+
self._add(f"uo{input_place}")
|
|
1173
|
+
|
|
1174
|
+
# Condition
|
|
1175
|
+
def confirm_is_true_accept(self, text: str = "Are you sure you want to proceed?", type_: str = "none",
|
|
1176
|
+
title: str = "Confirm", ok_text: str = "OK", cancel_text: str = "Cancel",
|
|
1177
|
+
interval: float = 100):
|
|
1178
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1179
|
+
text_str = "" if text == "Are you sure you want to proceed?" else text
|
|
1180
|
+
type_str = "" if type_ == "none" else type_
|
|
1181
|
+
title_str = "" if title == "Confirm" else title
|
|
1182
|
+
ok_str = "" if ok_text == "OK" else ok_text
|
|
1183
|
+
cancel_str = "" if cancel_text == "Cancel" else cancel_text
|
|
1184
|
+
self._add(f"{prefix}ct", f"{text_str}|{type_str}|{title_str}|{ok_str}|{cancel_str}")
|
|
1185
|
+
|
|
1186
|
+
def confirm_is_false_accept(self, text: str = "Are you sure you want to proceed?", type_: str = "none",
|
|
1187
|
+
title: str = "Confirm", ok_text: str = "OK", cancel_text: str = "Cancel",
|
|
1188
|
+
interval: float = 100):
|
|
1189
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1190
|
+
text_str = "" if text == "Are you sure you want to proceed?" else text
|
|
1191
|
+
type_str = "" if type_ == "none" else type_
|
|
1192
|
+
title_str = "" if title == "Confirm" else title
|
|
1193
|
+
ok_str = "" if ok_text == "OK" else ok_text
|
|
1194
|
+
cancel_str = "" if cancel_text == "Cancel" else cancel_text
|
|
1195
|
+
self._add(f"{prefix}cf", f"{text_str}|{type_str}|{title_str}|{ok_str}|{cancel_str}")
|
|
1196
|
+
|
|
1197
|
+
def is_greater_than(self, first_value: str, second_value: str, interval: int = -1):
|
|
1198
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1199
|
+
self._add(f"{prefix}gt", f"{first_value}|{second_value}")
|
|
1200
|
+
|
|
1201
|
+
def is_less_than(self, first_value: str, second_value: str, interval: int = -1):
|
|
1202
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1203
|
+
self._add(f"{prefix}lt", f"{first_value}|{second_value}")
|
|
1204
|
+
|
|
1205
|
+
def is_equal_to(self, first_value: str, second_value: str, interval: int = -1):
|
|
1206
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1207
|
+
self._add(f"{prefix}et", f"{first_value}|{second_value}")
|
|
1208
|
+
|
|
1209
|
+
def is_not_equal_to(self, first_value: str, second_value: str, interval: int = -1):
|
|
1210
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1211
|
+
self._add(f"{prefix}Nt", f"{first_value}|{second_value}")
|
|
1212
|
+
|
|
1213
|
+
def exist(self, value: str, interval: int = -1):
|
|
1214
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1215
|
+
self._add(f"{prefix}ex", value)
|
|
1216
|
+
|
|
1217
|
+
def not_exist(self, value: str, interval: int = -1):
|
|
1218
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1219
|
+
self._add(f"{prefix}nx", value)
|
|
1220
|
+
|
|
1221
|
+
def is_true(self, value: str, interval: int = -1):
|
|
1222
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1223
|
+
self._add(f"{prefix}tr", value)
|
|
1224
|
+
|
|
1225
|
+
def is_false(self, value: str, interval: int = -1):
|
|
1226
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1227
|
+
self._add(f"{prefix}fa", value)
|
|
1228
|
+
|
|
1229
|
+
def is_match_media(self, value: str, interval: int = -1):
|
|
1230
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1231
|
+
self._add(f"{prefix}mm", value)
|
|
1232
|
+
|
|
1233
|
+
def is_not_match_media(self, value: str, interval: int = -1):
|
|
1234
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1235
|
+
self._add(f"{prefix}nm", value)
|
|
1236
|
+
|
|
1237
|
+
def include(self, text: str, value: str, interval: int = -1):
|
|
1238
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1239
|
+
self._add(f"{prefix}In", f"{value}|{text}")
|
|
1240
|
+
|
|
1241
|
+
def not_include(self, text: str, value: str, interval: int = -1):
|
|
1242
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1243
|
+
self._add(f"{prefix}Nn", f"{value}|{text}")
|
|
1244
|
+
|
|
1245
|
+
def element_exists(self, input_place: str, interval: int = -1):
|
|
1246
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1247
|
+
self._add(f"{prefix}eE", input_place)
|
|
1248
|
+
|
|
1249
|
+
def element_not_exists(self, input_place: str, interval: int = -1):
|
|
1250
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1251
|
+
self._add(f"{prefix}nE", input_place)
|
|
1252
|
+
|
|
1253
|
+
def is_regex_match(self, value: str, pattern: str, interval: int = -1):
|
|
1254
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1255
|
+
self._add(f"{prefix}re", f"{value}|{pattern}")
|
|
1256
|
+
|
|
1257
|
+
def is_regex_not_match(self, value: str, pattern: str, interval: int = -1):
|
|
1258
|
+
prefix = f"{{({interval})" if interval >= 0 else "{"
|
|
1259
|
+
self._add(f"{prefix}rn", f"{value}|{pattern}")
|
|
1260
|
+
|
|
1261
|
+
def break_condition(self):
|
|
1262
|
+
self._add(";")
|
|
1263
|
+
|
|
1264
|
+
def start_bracket(self):
|
|
1265
|
+
self._add("{")
|
|
1266
|
+
|
|
1267
|
+
def end_bracket(self):
|
|
1268
|
+
self._add("}")
|
|
1269
|
+
|
|
1270
|
+
# Async
|
|
1271
|
+
def async_start(self):
|
|
1272
|
+
self._add("{(a)")
|
|
1273
|
+
|
|
1274
|
+
def delay(self, milliseconds: int):
|
|
1275
|
+
self._add("De", str(milliseconds))
|
|
1276
|
+
|
|
1277
|
+
# Format Storage
|
|
1278
|
+
def create_format_storage(self, key: str, data: str):
|
|
1279
|
+
self._add(".C", f"{key}|{data}")
|
|
1280
|
+
|
|
1281
|
+
def delete_format_storage(self, key: str):
|
|
1282
|
+
self._add(".D", key)
|
|
1283
|
+
|
|
1284
|
+
def add_json(self, key: str, path: str, value: str):
|
|
1285
|
+
self._add(".a", f"{key}|j|{value}|{path}")
|
|
1286
|
+
|
|
1287
|
+
def add_xml(self, key: str, path: str, name: str, value: Optional[str] = None):
|
|
1288
|
+
if name and name.startswith('@'):
|
|
1289
|
+
name = "$[at];" + name[1:]
|
|
1290
|
+
name_safe = name.replace("@", "$[at];")
|
|
1291
|
+
self._add(".a", f"{key}|x|{name_safe}|{value if value else ''}|{path}")
|
|
1292
|
+
|
|
1293
|
+
def add_ini(self, key: str, path: str, value: str, is_ini_like: bool = False):
|
|
1294
|
+
self._add(".a", f"{key}|i|{'1' if is_ini_like else '0'}|{value}|{path}")
|
|
1295
|
+
|
|
1296
|
+
def add_text_line(self, key: str, line: int, text: str):
|
|
1297
|
+
self._add(".a", f"{key}|t|{text}|{line}")
|
|
1298
|
+
|
|
1299
|
+
def add_variable(self, key: str, value: str):
|
|
1300
|
+
self._add(".a", f"{key}|v|{value}")
|
|
1301
|
+
|
|
1302
|
+
def update_json(self, key: str, path: str, value: str):
|
|
1303
|
+
self._add(".u", f"{key}|j|{value}|{path}")
|
|
1304
|
+
|
|
1305
|
+
def update_xml(self, key: str, path: str, value: str):
|
|
1306
|
+
self._add(".u", f"{key}|x|{value}|{path}")
|
|
1307
|
+
|
|
1308
|
+
def update_ini(self, key: str, path: str, value: str, is_ini_like: bool = False):
|
|
1309
|
+
self._add(".u", f"{key}|i|{'1' if is_ini_like else '0'}|{value}|{path}")
|
|
1310
|
+
|
|
1311
|
+
def update_text_line(self, key: str, line: int, text: str):
|
|
1312
|
+
self._add(".u", f"{key}|t|{text}|{line}")
|
|
1313
|
+
|
|
1314
|
+
def update_variable(self, key: str, value: str):
|
|
1315
|
+
self._add(".u", f"{key}|v|{value}")
|
|
1316
|
+
|
|
1317
|
+
def increase_variable(self, key: str, value: int):
|
|
1318
|
+
self._add(".i", f"{key}|v|{value}")
|
|
1319
|
+
|
|
1320
|
+
def decrease_variable(self, key: str, value: int):
|
|
1321
|
+
self.increase_variable(key, -value)
|
|
1322
|
+
|
|
1323
|
+
def delete_json(self, key: str, path: str):
|
|
1324
|
+
self._add(".d", f"{key}|j|{path}")
|
|
1325
|
+
|
|
1326
|
+
def delete_xml(self, key: str, path: str):
|
|
1327
|
+
self._add(".d", f"{key}|x|{path}")
|
|
1328
|
+
|
|
1329
|
+
def delete_ini(self, key: str, path: str, is_ini_like: bool = False):
|
|
1330
|
+
self._add(".d", f"{key}|i|{is_ini_like}|{path}")
|
|
1331
|
+
|
|
1332
|
+
def delete_text_line(self, key: str, line: int):
|
|
1333
|
+
self._add(".d", f"{key}|t|{line}")
|
|
1334
|
+
|
|
1335
|
+
def delete_variable(self, key: str):
|
|
1336
|
+
self._add(".d", f"{key}|v")
|
|
1337
|
+
|
|
1338
|
+
# Inject
|
|
1339
|
+
@staticmethod
|
|
1340
|
+
def inject(value: str) -> str:
|
|
1341
|
+
return f"$[{value}];"
|
|
1342
|
+
|
|
1343
|
+
# Hash and Checksum
|
|
1344
|
+
def set_hash(self):
|
|
1345
|
+
self._add("SH")
|
|
1346
|
+
|
|
1347
|
+
def set_checksum(self):
|
|
1348
|
+
self._add("CS")
|
|
1349
|
+
|
|
1350
|
+
@staticmethod
|
|
1351
|
+
def checksum_calculation(text: str) -> str:
|
|
1352
|
+
sum_val = 0
|
|
1353
|
+
mod = 65536
|
|
1354
|
+
shift = 5
|
|
1355
|
+
|
|
1356
|
+
for c in text:
|
|
1357
|
+
sum_val = ((sum_val << shift) | (sum_val >> (16 - shift))) ^ ord(c)
|
|
1358
|
+
sum_val %= mod
|
|
1359
|
+
|
|
1360
|
+
return str(sum_val)
|
|
1361
|
+
|
|
1362
|
+
def get_checksum(self) -> str:
|
|
1363
|
+
return self.checksum_calculation(self.get_webforms_data())
|
|
1364
|
+
|
|
1365
|
+
# Get
|
|
1366
|
+
def get_forms_action_data(self) -> str:
|
|
1367
|
+
return "\n".join(self.web_forms_data)
|
|
1368
|
+
|
|
1369
|
+
def response(self) -> str:
|
|
1370
|
+
return "[web-forms]\n" + self.get_forms_action_data()
|
|
1371
|
+
|
|
1372
|
+
def get_forms_action_data_line_break(self) -> str:
|
|
1373
|
+
data = self.get_forms_action_data()
|
|
1374
|
+
processed_data = data.replace('"', '$[dq];')
|
|
1375
|
+
return processed_data.replace('\n', '$[sln];')
|
|
1376
|
+
|
|
1377
|
+
# Export
|
|
1378
|
+
def export_to_webforms_tag(self, src: Optional[str] = None) -> str:
|
|
1379
|
+
src_str = f' src="{src}"' if src else ""
|
|
1380
|
+
return f'<web-forms ac="{self.get_forms_action_data_line_break()}"{src_str}></web-forms>'
|
|
1381
|
+
|
|
1382
|
+
def export_to_line_break(self, src: Optional[str] = None) -> str:
|
|
1383
|
+
src_str = f' src="{src}"' if src else ""
|
|
1384
|
+
return f'[web-forms]$[sln];{self.get_forms_action_data_line_break()}'
|
|
1385
|
+
|
|
1386
|
+
def export_to_webforms_tag_with_size(self, width: Union[str, int], height: Union[str, int], src: Optional[str] = None) -> str:
|
|
1387
|
+
if isinstance(width, int):
|
|
1388
|
+
width = f"{width}px"
|
|
1389
|
+
if isinstance(height, int):
|
|
1390
|
+
height = f"{height}px"
|
|
1391
|
+
|
|
1392
|
+
src_str = f' src="{src}"' if src else ""
|
|
1393
|
+
return f'<web-forms ac="{self.get_forms_action_data_line_break()}" width="{width}" height="{height}"{src_str}></web-forms>'
|
|
1394
|
+
|
|
1395
|
+
def done_to_webforms_tag(self, element_id: Optional[str] = None) -> str:
|
|
1396
|
+
id_str = f' id="{element_id}" done="true"' if element_id else ""
|
|
1397
|
+
return f'<web-forms ac="{self.get_forms_action_data_line_break()}"{id_str}></web-forms>'
|
|
1398
|
+
|
|
1399
|
+
def export_to_html_comment(self, add_line: bool = False) -> str:
|
|
1400
|
+
prefix = "\n" if add_line else ""
|
|
1401
|
+
return f"{prefix}<!--{self.response()}-->"
|
|
1402
|
+
|
|
1403
|
+
def get_webforms_data(self) -> str:
|
|
1404
|
+
return "\n".join(self.web_forms_data)
|
|
1405
|
+
|
|
1406
|
+
def append_form(self, form: 'WebForms'):
|
|
1407
|
+
if form:
|
|
1408
|
+
other_data = form.get_webforms_data()
|
|
1409
|
+
if other_data:
|
|
1410
|
+
if self.web_forms_data:
|
|
1411
|
+
self.web_forms_data.extend(other_data.split('\n'))
|
|
1412
|
+
else:
|
|
1413
|
+
self.web_forms_data = other_data.split('\n')
|
|
1414
|
+
|
|
1415
|
+
def clean(self):
|
|
1416
|
+
self.web_forms_data = []
|
|
1417
|
+
|
|
1418
|
+
|
|
1419
|
+
class Security:
|
|
1420
|
+
@staticmethod
|
|
1421
|
+
def safe_value(value: str) -> str:
|
|
1422
|
+
if not value:
|
|
1423
|
+
return value
|
|
1424
|
+
|
|
1425
|
+
if value.startswith('@'):
|
|
1426
|
+
value = "$[at];" + value[1:]
|
|
1427
|
+
|
|
1428
|
+
value = value.replace('\n', '$[ln];')
|
|
1429
|
+
value = value.replace('|', '$[vb];')
|
|
1430
|
+
value = value.replace(',@', '$[co];@')
|
|
1431
|
+
|
|
1432
|
+
return value
|
|
1433
|
+
|
|
1434
|
+
|
|
1435
|
+
class InputPlace:
|
|
1436
|
+
WINDOW = '`'
|
|
1437
|
+
ROOT = '~'
|
|
1438
|
+
CURRENT = '$'
|
|
1439
|
+
TARGET = '!'
|
|
1440
|
+
UPPER = '-'
|
|
1441
|
+
HEAD = '^'
|
|
1442
|
+
SCREEN_ORIENTATION = '%'
|
|
1443
|
+
|
|
1444
|
+
@staticmethod
|
|
1445
|
+
def id(element_id: str) -> str:
|
|
1446
|
+
return element_id
|
|
1447
|
+
|
|
1448
|
+
@staticmethod
|
|
1449
|
+
def name(name: str, index: Optional[int] = None) -> str:
|
|
1450
|
+
return f'({name}){index}' if index is not None else f'({name})'
|
|
1451
|
+
|
|
1452
|
+
@staticmethod
|
|
1453
|
+
def all_names(name: str) -> str:
|
|
1454
|
+
return f'({name})*'
|
|
1455
|
+
|
|
1456
|
+
@staticmethod
|
|
1457
|
+
def tag(tag_name: str, index: Optional[int] = None) -> str:
|
|
1458
|
+
return f'<{tag_name}>{index}' if index is not None else f'<{tag_name}>'
|
|
1459
|
+
|
|
1460
|
+
@staticmethod
|
|
1461
|
+
def all_tags(tag_name: str) -> str:
|
|
1462
|
+
return f'<{tag_name}>*'
|
|
1463
|
+
|
|
1464
|
+
@staticmethod
|
|
1465
|
+
def css_class(class_name: str, index: Optional[int] = None) -> str:
|
|
1466
|
+
return f'{{{class_name}}}{index}' if index is not None else f'{{{class_name}}}'
|
|
1467
|
+
|
|
1468
|
+
@staticmethod
|
|
1469
|
+
def all_css_classes(class_name: str) -> str:
|
|
1470
|
+
return f'{{{class_name}}}*'
|
|
1471
|
+
|
|
1472
|
+
@staticmethod
|
|
1473
|
+
def query(query_str: str) -> str:
|
|
1474
|
+
return "*" + query_str.replace("=", "$[eq];")
|
|
1475
|
+
|
|
1476
|
+
@staticmethod
|
|
1477
|
+
def query_all(query_str: str) -> str:
|
|
1478
|
+
return "[" + query_str.replace("=", "$[eq];")
|
|
1479
|
+
|
|
1480
|
+
|
|
1481
|
+
class OutputPlace(InputPlace):
|
|
1482
|
+
pass
|
|
1483
|
+
|
|
1484
|
+
|
|
1485
|
+
class Fetch:
|
|
1486
|
+
# Method
|
|
1487
|
+
@staticmethod
|
|
1488
|
+
def random(max_value: int, min_value: Optional[int] = None) -> str:
|
|
1489
|
+
if min_value is not None:
|
|
1490
|
+
return f"@mr{max_value},{min_value}"
|
|
1491
|
+
return f"@mr{max_value}"
|
|
1492
|
+
|
|
1493
|
+
@staticmethod
|
|
1494
|
+
def space_to_char(text: str, char: str = "-") -> str:
|
|
1495
|
+
return f"@sc{char},{text}"
|
|
1496
|
+
|
|
1497
|
+
@staticmethod
|
|
1498
|
+
def encode_uri(text: str) -> str:
|
|
1499
|
+
return f"@ue{text}"
|
|
1500
|
+
|
|
1501
|
+
@staticmethod
|
|
1502
|
+
def decode_uri(text: str) -> str:
|
|
1503
|
+
return f"@ud{text}"
|
|
1504
|
+
|
|
1505
|
+
@staticmethod
|
|
1506
|
+
def method(method_name: str, args: Optional[List[str]] = None) -> str:
|
|
1507
|
+
result = f"@cm{method_name}"
|
|
1508
|
+
if args:
|
|
1509
|
+
result += "," + ",".join(args)
|
|
1510
|
+
return result
|
|
1511
|
+
|
|
1512
|
+
@staticmethod
|
|
1513
|
+
def module_method(method_name: str, args: Optional[List[str]] = None) -> str:
|
|
1514
|
+
result = f"@cM{method_name}"
|
|
1515
|
+
if args:
|
|
1516
|
+
result += "," + ",".join(args)
|
|
1517
|
+
return result
|
|
1518
|
+
|
|
1519
|
+
@staticmethod
|
|
1520
|
+
def wasm_method(wasm_language: str, wasm_url: str, method_name: str,
|
|
1521
|
+
args: Optional[List[str]] = None, key: str = ".") -> str:
|
|
1522
|
+
result = f"@wA{wasm_language},{wasm_url},{method_name}"
|
|
1523
|
+
if args:
|
|
1524
|
+
result += "," + ",".join(args)
|
|
1525
|
+
return result
|
|
1526
|
+
|
|
1527
|
+
@staticmethod
|
|
1528
|
+
def script(script_text: str) -> str:
|
|
1529
|
+
return f"@_{script_text.replace(chr(10), '$[ln];')}"
|
|
1530
|
+
|
|
1531
|
+
@staticmethod
|
|
1532
|
+
def load_url(url: str, fetch_script: bool = False) -> str:
|
|
1533
|
+
return f"@lu{url}" + (",1" if fetch_script else "")
|
|
1534
|
+
|
|
1535
|
+
@staticmethod
|
|
1536
|
+
def load_html(url: str, fetch_input_place: str = "", fetch_script: bool = False) -> str:
|
|
1537
|
+
result = f"@lh{url}," + ("1" if fetch_script else "0")
|
|
1538
|
+
if fetch_input_place:
|
|
1539
|
+
result += f",{fetch_input_place}"
|
|
1540
|
+
return result
|
|
1541
|
+
|
|
1542
|
+
@staticmethod
|
|
1543
|
+
def load_line(url: str, line: int) -> str:
|
|
1544
|
+
return f"@ll{url},{line}"
|
|
1545
|
+
|
|
1546
|
+
@staticmethod
|
|
1547
|
+
def load_ini(url: str, name: str, is_ini_like: bool = False) -> str:
|
|
1548
|
+
return f"@li{url},{name}" + (",1" if is_ini_like else "")
|
|
1549
|
+
|
|
1550
|
+
@staticmethod
|
|
1551
|
+
def load_json(url: str, name: str) -> str:
|
|
1552
|
+
return f"@lj{url},{name}"
|
|
1553
|
+
|
|
1554
|
+
@staticmethod
|
|
1555
|
+
def load_xml(url: str, name: str) -> str:
|
|
1556
|
+
return f"@lx{url},{name}"
|
|
1557
|
+
|
|
1558
|
+
@staticmethod
|
|
1559
|
+
def has_method(method_name: str) -> str:
|
|
1560
|
+
return f"@hm{method_name}"
|
|
1561
|
+
|
|
1562
|
+
@staticmethod
|
|
1563
|
+
def has_module_method(method_name: str) -> str:
|
|
1564
|
+
return f"@hM{method_name}"
|
|
1565
|
+
|
|
1566
|
+
@staticmethod
|
|
1567
|
+
def get_modifier_state(modifier: str) -> str:
|
|
1568
|
+
return f"@ms{modifier}"
|
|
1569
|
+
|
|
1570
|
+
# Math
|
|
1571
|
+
@staticmethod
|
|
1572
|
+
def math(method_name: str, args: Optional[List[str]] = None) -> str:
|
|
1573
|
+
result = f"@M#{method_name}"
|
|
1574
|
+
if args:
|
|
1575
|
+
result += "," + ",".join(args)
|
|
1576
|
+
return result
|
|
1577
|
+
|
|
1578
|
+
# Data
|
|
1579
|
+
DATE_YEAR = "@dy"
|
|
1580
|
+
DATE_MONTH = "@dm"
|
|
1581
|
+
DATE_DAY = "@dd"
|
|
1582
|
+
DATE_HOURS = "@dh"
|
|
1583
|
+
DATE_MINUTES = "@di"
|
|
1584
|
+
DATE_SECONDS = "@ds"
|
|
1585
|
+
DATE_MILLISECONDS = "@dl"
|
|
1586
|
+
|
|
1587
|
+
# String
|
|
1588
|
+
SPACE = "@sp"
|
|
1589
|
+
AT_SIGN = "@sa"
|
|
1590
|
+
|
|
1591
|
+
# Tag
|
|
1592
|
+
@staticmethod
|
|
1593
|
+
def get_id(input_place: str) -> str:
|
|
1594
|
+
return f"@$i{input_place}"
|
|
1595
|
+
|
|
1596
|
+
@staticmethod
|
|
1597
|
+
def get_name(input_place: str) -> str:
|
|
1598
|
+
return f"@$n{input_place}"
|
|
1599
|
+
|
|
1600
|
+
@staticmethod
|
|
1601
|
+
def get_value(input_place: str) -> str:
|
|
1602
|
+
return f"@$v{input_place}"
|
|
1603
|
+
|
|
1604
|
+
@staticmethod
|
|
1605
|
+
def get_value_length(input_place: str) -> str:
|
|
1606
|
+
return f"@$e{input_place}"
|
|
1607
|
+
|
|
1608
|
+
@staticmethod
|
|
1609
|
+
def get_class(input_place: str) -> str:
|
|
1610
|
+
return f"@$c{input_place}"
|
|
1611
|
+
|
|
1612
|
+
@staticmethod
|
|
1613
|
+
def get_style(input_place: str) -> str:
|
|
1614
|
+
return f"@$s{input_place}"
|
|
1615
|
+
|
|
1616
|
+
@staticmethod
|
|
1617
|
+
def get_title(input_place: str) -> str:
|
|
1618
|
+
return f"@$l{input_place}"
|
|
1619
|
+
|
|
1620
|
+
@staticmethod
|
|
1621
|
+
def get_label(input_place: str) -> str:
|
|
1622
|
+
return f"@$A{input_place}"
|
|
1623
|
+
|
|
1624
|
+
@staticmethod
|
|
1625
|
+
def get_text(input_place: str) -> str:
|
|
1626
|
+
return f"@$t{input_place}"
|
|
1627
|
+
|
|
1628
|
+
@staticmethod
|
|
1629
|
+
def get_outer_text(input_place: str) -> str:
|
|
1630
|
+
return f"@$o{input_place}"
|
|
1631
|
+
|
|
1632
|
+
@staticmethod
|
|
1633
|
+
def get_text_length(input_place: str) -> str:
|
|
1634
|
+
return f"@$g{input_place}"
|
|
1635
|
+
|
|
1636
|
+
@staticmethod
|
|
1637
|
+
def get_attribute(input_place: str, attribute: str) -> str:
|
|
1638
|
+
return f"@$a{input_place},{attribute}"
|
|
1639
|
+
|
|
1640
|
+
@staticmethod
|
|
1641
|
+
def get_width(input_place: str) -> str:
|
|
1642
|
+
return f"@$w{input_place}"
|
|
1643
|
+
|
|
1644
|
+
@staticmethod
|
|
1645
|
+
def get_height(input_place: str) -> str:
|
|
1646
|
+
return f"@$h{input_place}"
|
|
1647
|
+
|
|
1648
|
+
@staticmethod
|
|
1649
|
+
def get_is_read_only(input_place: str) -> str:
|
|
1650
|
+
return f"@$r{input_place}"
|
|
1651
|
+
|
|
1652
|
+
@staticmethod
|
|
1653
|
+
def get_selected_index(input_place: str) -> str:
|
|
1654
|
+
return f"@$x{input_place}"
|
|
1655
|
+
|
|
1656
|
+
@staticmethod
|
|
1657
|
+
def get_index(input_place: str) -> str:
|
|
1658
|
+
return f"@$I{input_place}"
|
|
1659
|
+
|
|
1660
|
+
@staticmethod
|
|
1661
|
+
def get_text_align(input_place: str) -> str:
|
|
1662
|
+
return f"@$T{input_place}"
|
|
1663
|
+
|
|
1664
|
+
@staticmethod
|
|
1665
|
+
def get_node_length(input_place: str) -> str:
|
|
1666
|
+
return f"@$L{input_place}"
|
|
1667
|
+
|
|
1668
|
+
@staticmethod
|
|
1669
|
+
def get_is_visible(input_place: str) -> str:
|
|
1670
|
+
return f"@$V{input_place}"
|
|
1671
|
+
|
|
1672
|
+
# Save
|
|
1673
|
+
@staticmethod
|
|
1674
|
+
def has_hash(hash_value: str) -> str:
|
|
1675
|
+
return f"@HH{hash_value}"
|
|
1676
|
+
|
|
1677
|
+
@staticmethod
|
|
1678
|
+
def cookie(key: str) -> str:
|
|
1679
|
+
return f"@co{key}"
|
|
1680
|
+
|
|
1681
|
+
@staticmethod
|
|
1682
|
+
def session(key: str, replace_value: Optional[str] = None) -> str:
|
|
1683
|
+
if replace_value:
|
|
1684
|
+
return f"@cs{key},{replace_value}"
|
|
1685
|
+
return f"@cs{key}"
|
|
1686
|
+
|
|
1687
|
+
@staticmethod
|
|
1688
|
+
def session_and_remove(key: str) -> str:
|
|
1689
|
+
return f"@cl{key}"
|
|
1690
|
+
|
|
1691
|
+
@staticmethod
|
|
1692
|
+
def saved(key: str = ".") -> str:
|
|
1693
|
+
return Fetch.session(key)
|
|
1694
|
+
|
|
1695
|
+
@staticmethod
|
|
1696
|
+
def cache(key: str = ".", replace_value: Optional[str] = None) -> str:
|
|
1697
|
+
if replace_value:
|
|
1698
|
+
return f"@cd{key},{replace_value}"
|
|
1699
|
+
return f"@cd{key}"
|
|
1700
|
+
|
|
1701
|
+
@staticmethod
|
|
1702
|
+
def cache_and_remove(key: str) -> str:
|
|
1703
|
+
return f"@ct{key}"
|
|
1704
|
+
|
|
1705
|
+
@staticmethod
|
|
1706
|
+
def saved_line(key: str = ".", line: int = 0) -> str:
|
|
1707
|
+
return f"@lL{key}[{line}"
|
|
1708
|
+
|
|
1709
|
+
@staticmethod
|
|
1710
|
+
def saved_line_consume(key: str = ".") -> str:
|
|
1711
|
+
return f"@lL{key}"
|
|
1712
|
+
|
|
1713
|
+
@staticmethod
|
|
1714
|
+
def saved_ini(key: str, ini_key: str) -> str:
|
|
1715
|
+
return f"@lI{key}[{ini_key}"
|
|
1716
|
+
|
|
1717
|
+
@staticmethod
|
|
1718
|
+
def cache_line(key: str = ".", line: int = 0) -> str:
|
|
1719
|
+
return f"@dL{key}[{line}"
|
|
1720
|
+
|
|
1721
|
+
@staticmethod
|
|
1722
|
+
def cache_line_consume(key: str = ".") -> str:
|
|
1723
|
+
return f"@dL{key}"
|
|
1724
|
+
|
|
1725
|
+
@staticmethod
|
|
1726
|
+
def cache_ini(key: str, ini_key: str) -> str:
|
|
1727
|
+
return f"@dI{key}[{ini_key}"
|
|
1728
|
+
|
|
1729
|
+
# Format Storage
|
|
1730
|
+
@staticmethod
|
|
1731
|
+
def format_store(key: str) -> str:
|
|
1732
|
+
return f"@fr{key}"
|
|
1733
|
+
|
|
1734
|
+
@staticmethod
|
|
1735
|
+
def format_store_by_xml_query(key: str, xpath: str) -> str:
|
|
1736
|
+
return f"@fx{key},{xpath}"
|
|
1737
|
+
|
|
1738
|
+
@staticmethod
|
|
1739
|
+
def format_store_by_json_query(key: str, query: str) -> str:
|
|
1740
|
+
return f"@fj{key},{query}"
|
|
1741
|
+
|
|
1742
|
+
@staticmethod
|
|
1743
|
+
def format_store_by_ini(key: str, name: str) -> str:
|
|
1744
|
+
return f"@fi{key},{name}"
|
|
1745
|
+
|
|
1746
|
+
@staticmethod
|
|
1747
|
+
def format_store_by_text(key: str, line: int) -> str:
|
|
1748
|
+
return f"@ft{key},{line}"
|
|
1749
|
+
|
|
1750
|
+
@staticmethod
|
|
1751
|
+
def format_store_by_variable(key: str) -> str:
|
|
1752
|
+
return f"@fv{key}"
|
|
1753
|
+
|
|
1754
|
+
# Document
|
|
1755
|
+
TAB_IS_ACTIVE = "@da"
|
|
1756
|
+
|
|
1757
|
+
# Window
|
|
1758
|
+
HREF = "@wf"
|
|
1759
|
+
PATH_NAME = "@wP"
|
|
1760
|
+
QUERY = "@wq"
|
|
1761
|
+
HASH = "@wh"
|
|
1762
|
+
HOST = "@wH"
|
|
1763
|
+
HOST_NAME = "@wn"
|
|
1764
|
+
PORT = "@wT"
|
|
1765
|
+
ORIGIN = "@wo"
|
|
1766
|
+
GET_SELECTION = "@ws"
|
|
1767
|
+
SCROLL_X = "@wx"
|
|
1768
|
+
SCROLL_Y = "@wy"
|
|
1769
|
+
|
|
1770
|
+
# Navigator
|
|
1771
|
+
CLIPBOARD_TEXT = "@nC"
|
|
1772
|
+
GEO_LATITUDE = "@nW"
|
|
1773
|
+
GEO_LONGITUDE = "@nO"
|
|
1774
|
+
LANGUAGE = "@nL"
|
|
1775
|
+
IS_ONLINE = "@no"
|
|
1776
|
+
USER_AGENT = "@na"
|
|
1777
|
+
|
|
1778
|
+
# Screen
|
|
1779
|
+
SCREEN_WIDTH = "@sw"
|
|
1780
|
+
SCREEN_HEIGHT = "@sh"
|
|
1781
|
+
SCREEN_ORIENTATION_TYPE = "@so"
|
|
1782
|
+
SCREEN_ORIENTATION_ANGLE = "@sr"
|
|
1783
|
+
|
|
1784
|
+
# Performance
|
|
1785
|
+
TIME_ORIGIN = "@pt"
|
|
1786
|
+
PERFORMANCE_NOW = "@pn"
|
|
1787
|
+
|
|
1788
|
+
# Event
|
|
1789
|
+
EVENT = "@EV"
|
|
1790
|
+
EVENT_SERIALIZE = "@Es"
|
|
1791
|
+
EVENT_KEY = "@ek"
|
|
1792
|
+
EVENT_WHICH = "@ew"
|
|
1793
|
+
EVENT_CLIENT_X = "@ex"
|
|
1794
|
+
EVENT_CLIENT_Y = "@ey"
|
|
1795
|
+
EVENT_PAGE_X = "@eX"
|
|
1796
|
+
EVENT_PAGE_Y = "@eY"
|
|
1797
|
+
EVENT_OFFSET_X = "@Ex"
|
|
1798
|
+
EVENT_OFFSET_Y = "@Ey"
|
|
1799
|
+
EVENT_DELTA_Y = "@ed"
|
|
1800
|
+
|
|
1801
|
+
|
|
1802
|
+
class WasmLanguage:
|
|
1803
|
+
C = "c"
|
|
1804
|
+
CPP = "c"
|
|
1805
|
+
RUST = "rust"
|
|
1806
|
+
CSHARP = "csharp"
|
|
1807
|
+
GO = "go"
|
|
1808
|
+
JAVA = "java"
|
|
1809
|
+
ASSEMBLY_SCRIPT = "as"
|
|
1810
|
+
|
|
1811
|
+
|
|
1812
|
+
class HtmlEvent:
|
|
1813
|
+
ON_ABORT = "onabort"
|
|
1814
|
+
ON_AFTER_PRINT = "onafterprint"
|
|
1815
|
+
ON_BEFORE_PRINT = "onbeforeprint"
|
|
1816
|
+
ON_BEFORE_UNLOAD = "onbeforeunload"
|
|
1817
|
+
ON_BLUR = "onblur"
|
|
1818
|
+
ON_CAN_PLAY = "oncanplay"
|
|
1819
|
+
ON_CAN_PLAY_THROUGH = "oncanplaythrough"
|
|
1820
|
+
ON_CHANGE = "onchange"
|
|
1821
|
+
ON_CLICK = "onclick"
|
|
1822
|
+
ON_COPY = "oncopy"
|
|
1823
|
+
ON_CUT = "oncut"
|
|
1824
|
+
ON_DOUBLE_CLICK = "ondblclick"
|
|
1825
|
+
ON_DRAG = "ondrag"
|
|
1826
|
+
ON_DRAG_END = "ondragend"
|
|
1827
|
+
ON_DRAG_ENTER = "ondragenter"
|
|
1828
|
+
ON_DRAG_LEAVE = "ondragleave"
|
|
1829
|
+
ON_DRAG_OVER = "ondragover"
|
|
1830
|
+
ON_DRAG_START = "ondragstart"
|
|
1831
|
+
ON_DROP = "ondrop"
|
|
1832
|
+
ON_DURATION_CHANGE = "ondurationchange"
|
|
1833
|
+
ON_ENDED = "onended"
|
|
1834
|
+
ON_ERROR = "onerror"
|
|
1835
|
+
ON_FOCUS = "onfocus"
|
|
1836
|
+
ON_FOCUSIN = "onfocusin"
|
|
1837
|
+
ON_FOCUS_OUT = "onfocusout"
|
|
1838
|
+
ON_HASH_CHANGE = "onhashchange"
|
|
1839
|
+
ON_INPUT = "oninput"
|
|
1840
|
+
ON_INVALID = "oninvalid"
|
|
1841
|
+
ON_KEY_DOWN = "onkeydown"
|
|
1842
|
+
ON_KEY_PRESS = "onkeypress"
|
|
1843
|
+
ON_KEY_UP = "onkeyup"
|
|
1844
|
+
ON_LOAD = "onload"
|
|
1845
|
+
ON_LOADED_DATA = "onloadeddata"
|
|
1846
|
+
ON_LOADED_META_DATA = "onloadedmetadata"
|
|
1847
|
+
ON_LOAD_START = "onloadstart"
|
|
1848
|
+
ON_MOUSE_DOWN = "onmousedown"
|
|
1849
|
+
ON_MOUSE_ENTER = "onmouseenter"
|
|
1850
|
+
ON_MOUSE_LEAVE = "onmouseleave"
|
|
1851
|
+
ON_MOUSE_MOVE = "onmousemove"
|
|
1852
|
+
ON_MOUSE_OVER = "onmouseover"
|
|
1853
|
+
ON_MOUSE_OUT = "onmouseout"
|
|
1854
|
+
ON_MOUSE_UP = "onmouseup"
|
|
1855
|
+
ON_OFFLINE = "onoffline"
|
|
1856
|
+
ON_ONLINE = "ononline"
|
|
1857
|
+
ON_PAGE_HIDE = "onpagehide"
|
|
1858
|
+
ON_PAGE_SHOW = "onpageshow"
|
|
1859
|
+
ON_PASTE = "onpaste"
|
|
1860
|
+
ON_PAUSE = "onpause"
|
|
1861
|
+
ON_PLAY = "onplay"
|
|
1862
|
+
ON_PLAYING = "onplaying"
|
|
1863
|
+
ON_PROGRESS = "onprogress"
|
|
1864
|
+
ON_RATE_CHANGE = "onratechange"
|
|
1865
|
+
ON_RESIZE = "onresize"
|
|
1866
|
+
ON_RESET = "onreset"
|
|
1867
|
+
ON_SCROLL = "onscroll"
|
|
1868
|
+
ON_SEARCH = "onsearch"
|
|
1869
|
+
ON_SEEKED = "onseeked"
|
|
1870
|
+
ON_SEEKING = "onseeking"
|
|
1871
|
+
ON_SELECT = "onselect"
|
|
1872
|
+
ON_STALLED = "onstalled"
|
|
1873
|
+
ON_SUBMIT = "onsubmit"
|
|
1874
|
+
ON_SUSPEND = "onsuspend"
|
|
1875
|
+
ON_TIME_UPDATE = "ontimeupdate"
|
|
1876
|
+
ON_TOGGLE = "ontoggle"
|
|
1877
|
+
ON_TOUCH_CANCEL = "ontouchcancel"
|
|
1878
|
+
ON_TOUCHEND = "ontouchend"
|
|
1879
|
+
ON_TOUCH_MOVE = "ontouchmove"
|
|
1880
|
+
ON_TOUCH_START = "ontouchstart"
|
|
1881
|
+
ON_UNLOAD = "onunload"
|
|
1882
|
+
ON_VOLUME_CHANGE = "onvolumechange"
|
|
1883
|
+
ON_WAITING = "onwaiting"
|
|
1884
|
+
ON_WHEEL = "onwheel"
|
|
1885
|
+
|
|
1886
|
+
|
|
1887
|
+
class HtmlEventListener:
|
|
1888
|
+
ABORT = "abort"
|
|
1889
|
+
AFTER_PRINT = "afterprint"
|
|
1890
|
+
BEFORE_PRINT = "beforeprint"
|
|
1891
|
+
BEFORE_UNLOAD = "beforeunload"
|
|
1892
|
+
BLUR = "blur"
|
|
1893
|
+
CAN_PLAY = "canplay"
|
|
1894
|
+
CAN_PLAY_THROUGH = "canplaythrough"
|
|
1895
|
+
CHANGE = "change"
|
|
1896
|
+
CLICK = "click"
|
|
1897
|
+
COPY = "copy"
|
|
1898
|
+
CUT = "cut"
|
|
1899
|
+
DOUBLE_CLICK = "dblclick"
|
|
1900
|
+
DRAG = "drag"
|
|
1901
|
+
DRAG_END = "dragend"
|
|
1902
|
+
DRAG_ENTER = "dragenter"
|
|
1903
|
+
DRAG_LEAVE = "dragleave"
|
|
1904
|
+
DRAG_OVER = "dragover"
|
|
1905
|
+
DRAG_START = "dragstart"
|
|
1906
|
+
DROP = "drop"
|
|
1907
|
+
DURATION_CHANGE = "durationchange"
|
|
1908
|
+
ENDED = "ended"
|
|
1909
|
+
ERROR = "error"
|
|
1910
|
+
FOCUS = "focus"
|
|
1911
|
+
FOCUSIN = "focusin"
|
|
1912
|
+
FOCUS_OUT = "focusout"
|
|
1913
|
+
HASH_CHANGE = "hashchange"
|
|
1914
|
+
INPUT = "input"
|
|
1915
|
+
INVALID = "invalid"
|
|
1916
|
+
KEY_DOWN = "keydown"
|
|
1917
|
+
KEY_PRESS = "keypress"
|
|
1918
|
+
KEY_UP = "keyup"
|
|
1919
|
+
LOAD = "load"
|
|
1920
|
+
LOADED_DATA = "loadeddata"
|
|
1921
|
+
LOADED_META_DATA = "loadedmetadata"
|
|
1922
|
+
LOAD_START = "loadstart"
|
|
1923
|
+
MOUSE_DOWN = "mousedown"
|
|
1924
|
+
MOUSE_ENTER = "mouseenter"
|
|
1925
|
+
MOUSE_LEAVE = "mouseleave"
|
|
1926
|
+
MOUSE_MOVE = "mousemove"
|
|
1927
|
+
MOUSE_OVER = "mouseover"
|
|
1928
|
+
MOUSE_OUT = "mouseout"
|
|
1929
|
+
MOUSE_UP = "mouseup"
|
|
1930
|
+
OFFLINE = "offline"
|
|
1931
|
+
ONLINE = "online"
|
|
1932
|
+
PAGE_HIDE = "pagehide"
|
|
1933
|
+
PAGE_SHOW = "pageshow"
|
|
1934
|
+
PASTE = "paste"
|
|
1935
|
+
PAUSE = "pause"
|
|
1936
|
+
PLAY = "play"
|
|
1937
|
+
PLAYING = "playing"
|
|
1938
|
+
PROGRESS = "progress"
|
|
1939
|
+
RATE_CHANGE = "ratechange"
|
|
1940
|
+
RESIZE = "resize"
|
|
1941
|
+
RESET = "reset"
|
|
1942
|
+
SCROLL = "scroll"
|
|
1943
|
+
SEARCH = "search"
|
|
1944
|
+
SEEKED = "seeked"
|
|
1945
|
+
SEEKING = "seeking"
|
|
1946
|
+
SELECT = "select"
|
|
1947
|
+
STALLED = "stalled"
|
|
1948
|
+
SUBMIT = "submit"
|
|
1949
|
+
SUSPEND = "suspend"
|
|
1950
|
+
TIME_UPDATE = "timeupdate"
|
|
1951
|
+
TOGGLE = "toggle"
|
|
1952
|
+
TOUCH_CANCEL = "touchcancel"
|
|
1953
|
+
TOUCHEND = "touchend"
|
|
1954
|
+
TOUCH_MOVE = "touchmove"
|
|
1955
|
+
TOUCH_START = "touchstart"
|
|
1956
|
+
UNLOAD = "unload"
|
|
1957
|
+
VOLUME_CHANGE = "volumechange"
|
|
1958
|
+
WAITING = "waiting"
|
|
1959
|
+
WHEEL = "wheel"
|
|
1960
|
+
|
|
1961
|
+
ANIMATION_END = "animationend"
|
|
1962
|
+
ANIMATION_ITERATION = "animationiteration"
|
|
1963
|
+
ANIMATION_START = "animationstart"
|
|
1964
|
+
CONTEXT_MENU = "contextmenu"
|
|
1965
|
+
FULL_SCREEN_CHANGE = "fullscreenchange"
|
|
1966
|
+
FULL_SCREEN_ERROR = "fullscreenerror"
|
|
1967
|
+
POP_STATE = "popstate"
|
|
1968
|
+
TRANSITION_END = "transitionend"
|
|
1969
|
+
STORAGE = "storage"
|
|
1970
|
+
|
|
1971
|
+
# Custom
|
|
1972
|
+
SCROLL_BOTTOM = "scrollbottom"
|
|
1973
|
+
ELEMENT_REACHED = "elementreached"
|
|
1974
|
+
|
|
1975
|
+
|
|
1976
|
+
# Extension methods
|
|
1977
|
+
def append_place(text: str, value: str) -> str:
|
|
1978
|
+
if not text:
|
|
1979
|
+
return value
|
|
1980
|
+
return f"{text}|{value}"
|
|
1981
|
+
|
|
1982
|
+
def append_parent(text: str) -> str:
|
|
1983
|
+
return f"/{text}"
|
|
1984
|
+
|
|
1985
|
+
def export_action_controls_to_webforms_tag(action_controls: str, add_line: bool = False) -> str:
|
|
1986
|
+
prefix = "\n" if add_line else ""
|
|
1987
|
+
return f'{prefix}<web-forms ac="{action_controls}"></web-forms>'
|
|
1988
|
+
|
|
1989
|
+
def export_action_controls_to_html_comment(action_controls: str, add_line: bool = False) -> str:
|
|
1990
|
+
prefix = "\n" if add_line else ""
|
|
1991
|
+
return f'{prefix}<!--[web-forms]\n{action_controls}-->'
|
|
1992
|
+
|
|
1993
|
+
def export_action_controls_to_response(action_controls: str) -> str:
|
|
1994
|
+
return f"[web-forms]\n{action_controls}"
|
|
1995
|
+
|
|
1996
|
+
def remove_outer(text: str, start_string: str, end_string: str) -> str:
|
|
1997
|
+
start = text.find(start_string)
|
|
1998
|
+
if start == -1:
|
|
1999
|
+
return text
|
|
2000
|
+
|
|
2001
|
+
end = text.find(end_string, start)
|
|
2002
|
+
if end == -1:
|
|
2003
|
+
return text
|
|
2004
|
+
|
|
2005
|
+
length_to_remove = (end - start) + len(end_string)
|
|
2006
|
+
return text[:start] + text[end + len(end_string):]
|
|
2007
|
+
|
|
2008
|
+
def line_break(text: str) -> str:
|
|
2009
|
+
return text.replace("\n", "$[sln]")
|
|
2010
|
+
|