alchemy-form 0.2.4 → 0.2.6
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.
- package/CHANGELOG.md +11 -0
- package/README.md +0 -0
- package/assets/stylesheets/form/alchemy_form.scss +0 -0
- package/assets/stylesheets/form/elements/_button.scss +0 -0
- package/assets/stylesheets/form/elements/_code_input.scss +0 -0
- package/assets/stylesheets/form/elements/_feedback_input.scss +0 -0
- package/assets/stylesheets/form/elements/_field.scss +0 -0
- package/assets/stylesheets/form/elements/_field_array.scss +0 -0
- package/assets/stylesheets/form/elements/_field_translatable.scss +0 -0
- package/assets/stylesheets/form/elements/_form.scss +0 -0
- package/assets/stylesheets/form/elements/_pager.scss +0 -0
- package/assets/stylesheets/form/elements/_pathway.scss +56 -0
- package/assets/stylesheets/form/elements/_query_builder.scss +0 -0
- package/assets/stylesheets/form/elements/_select.scss +0 -0
- package/assets/stylesheets/form/elements/_state.scss +0 -0
- package/assets/stylesheets/form/elements/_table.scss +0 -0
- package/assets/stylesheets/form/elements/_tabs.scss +0 -0
- package/assets/stylesheets/form/elements/_toggle.scss +0 -0
- package/assets/stylesheets/form/elements/index.scss +2 -1
- package/assets/stylesheets/form/general/_colors.scss +0 -0
- package/assets/stylesheets/form/general/_textsizes.scss +0 -0
- package/assets/stylesheets/form/general/index.scss +0 -0
- package/config/routes.js +0 -0
- package/controller/form_api_controller.js +0 -0
- package/element/10_alchemy_field_custom.js +0 -0
- package/element/10_dataprovider.js +0 -0
- package/element/15_alchemy_field_entry.js +0 -0
- package/element/20_query_builder_base.js +0 -0
- package/element/25_query_builder_data.js +0 -2
- package/element/30_tab_base.js +0 -0
- package/element/40_stateful.js +0 -0
- package/element/al_button.js +0 -0
- package/element/al_code_input.js +79 -3
- package/element/al_field_array.js +0 -0
- package/element/al_field_array_entry.js +0 -0
- package/element/al_field_schema.js +14 -1
- package/element/al_field_translatable.js +0 -0
- package/element/al_field_translatable_entry.js +0 -0
- package/element/al_label.js +0 -0
- package/element/al_number_input.js +0 -0
- package/element/al_pager.js +0 -0
- package/element/al_password_input.js +0 -0
- package/element/al_pathway.js +82 -0
- package/element/al_pathway_selection.js +690 -0
- package/element/al_query_builder.js +0 -0
- package/element/al_query_builder_entry.js +18 -3
- package/element/al_query_builder_group.js +0 -0
- package/element/al_query_builder_value.js +0 -0
- package/element/al_query_builder_variable.js +0 -0
- package/element/al_select.js +6 -2
- package/element/al_select_item.js +0 -0
- package/element/al_state.js +0 -0
- package/element/al_tab_button.js +0 -0
- package/element/al_tab_context.js +0 -0
- package/element/al_tab_list.js +0 -0
- package/element/al_tab_panel.js +0 -0
- package/element/al_table.js +0 -0
- package/element/al_toggle.js +0 -0
- package/helper/form_actions/00_form_action.js +0 -0
- package/helper/form_actions/url_action.js +0 -0
- package/helper/pathway/leaf.js +174 -0
- package/helper/query_builder_ns.js +0 -0
- package/helper/query_builder_variable_definition/00_variable_definition.js +0 -0
- package/helper/query_builder_variable_definition/boolean_variable_definition.js +0 -0
- package/helper/query_builder_variable_definition/list_variable_definition.js +0 -0
- package/helper/query_builder_variable_definition/number_variable_definition.js +0 -0
- package/helper/query_builder_variable_definition/string_variable_definition.js +0 -0
- package/helper_field/query_builder_assignment.js +0 -0
- package/helper_field/query_builder_field.js +0 -0
- package/helper_field/query_builder_value.js +0 -0
- package/helper_field/query_builder_variable.js +0 -0
- package/package.json +2 -2
- package/view/form/elements/al_pathway.hwk +5 -0
- package/view/form/elements/al_pathway_selection.hwk +10 -0
- package/view/form/elements/alchemy_button.hwk +0 -0
- package/view/form/elements/alchemy_field_array.hwk +0 -0
- package/view/form/elements/alchemy_field_array_entry.hwk +0 -0
- package/view/form/elements/alchemy_field_schema.hwk +0 -0
- package/view/form/elements/alchemy_field_translatable.hwk +0 -0
- package/view/form/elements/alchemy_field_translatable_entry.hwk +0 -0
- package/view/form/elements/alchemy_select.hwk +0 -0
- package/view/form/elements/alchemy_select_item.hwk +0 -0
- package/view/form/elements/alchemy_toggle.hwk +0 -0
- package/view/form/elements/code_input.hwk +0 -0
- package/view/form/elements/number_input.hwk +0 -0
- package/view/form/elements/password_input.hwk +0 -0
- package/view/form/elements/query_builder.hwk +0 -0
- package/view/form/elements/query_builder_entry.hwk +0 -0
- package/view/form/elements/query_builder_group.hwk +0 -0
- package/view/form/elements/query_builder_value.hwk +0 -0
- package/view/form/elements/query_builder_variable.hwk +0 -0
- package/view/form/inputs/edit/belongs_to.hwk +0 -0
- package/view/form/inputs/edit/boolean.hwk +0 -0
- package/view/form/inputs/edit/date.hwk +0 -0
- package/view/form/inputs/edit/datetime.hwk +0 -0
- package/view/form/inputs/edit/enum.hwk +0 -0
- package/view/form/inputs/edit/has_and_belongs_to_many.hwk +0 -0
- package/view/form/inputs/edit/has_one_parent.hwk +0 -0
- package/view/form/inputs/edit/html.hwk +0 -0
- package/view/form/inputs/edit/number.hwk +0 -0
- package/view/form/inputs/edit/query_builder.hwk +0 -0
- package/view/form/inputs/edit/query_builder_assignment.hwk +0 -0
- package/view/form/inputs/edit/query_builder_value.hwk +0 -0
- package/view/form/inputs/edit/query_builder_variable.hwk +0 -0
- package/view/form/inputs/edit/schema.hwk +0 -0
- package/view/form/inputs/edit/sourcecode.hwk +0 -0
- package/view/form/inputs/edit/string.hwk +0 -0
- package/view/form/inputs/edit/text.hwk +0 -0
- package/view/form/inputs/edit_inline/boolean.hwk +0 -0
- package/view/form/inputs/view/datetime.hwk +0 -0
- package/view/form/inputs/view/string.hwk +0 -0
- package/view/form/inputs/view_inline/boolean.hwk +0 -0
- package/view/form/inputs/view_inline/date.hwk +0 -0
- package/view/form/inputs/view_inline/datetime.hwk +0 -0
- package/view/form/inputs/view_inline/enum.hwk +0 -0
- package/view/form/inputs/view_inline/objectid.hwk +0 -0
- package/view/form/inputs/view_inline/string.hwk +0 -0
- package/view/form/select/qb_item.hwk +0 -0
- package/view/form/wrappers/default/default.hwk +0 -0
- package/view/form/wrappers/edit_inline/default.hwk +0 -0
- package/view/form/wrappers/view_inline/default.hwk +0 -0
|
@@ -0,0 +1,690 @@
|
|
|
1
|
+
const LEAF_DROPDOWN = 'al-pathway-leaf-dropdown';
|
|
2
|
+
const LEAF_TYPE_SELECT = 'al-pathway-select-leaf-type';
|
|
3
|
+
const LEAF_TYPE_ITEM = 'al-pathway-select-leaf-type-item';
|
|
4
|
+
const LEAF_VALUE_SELECT = 'al-pathway-select-leaf-value';
|
|
5
|
+
const LEAF_VALUE_ITEM = 'al-pathway-select-leaf-value-item';
|
|
6
|
+
const LEAF_CHILD = 'al-pathway-leaf-child';
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* The al-pathway-selection element.
|
|
10
|
+
* This represents a leaf (and its children) in the pathway
|
|
11
|
+
* but also a selected value.
|
|
12
|
+
*
|
|
13
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
14
|
+
* @since 0.2.6
|
|
15
|
+
* @version 0.2.6
|
|
16
|
+
*/
|
|
17
|
+
const Selection = Function.inherits('Alchemy.Element.Form.Base', 'PathwaySelection');
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* The hawkejs template to use
|
|
21
|
+
*
|
|
22
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
23
|
+
* @since 0.2.6
|
|
24
|
+
* @version 0.2.6
|
|
25
|
+
*/
|
|
26
|
+
Selection.setTemplateFile('form/elements/al_pathway_selection');
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* The possibles leaves that can be chosen
|
|
30
|
+
*
|
|
31
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
32
|
+
* @since 0.2.6
|
|
33
|
+
* @version 0.2.6
|
|
34
|
+
*/
|
|
35
|
+
Selection.setAssignedProperty('leaf_options');
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* The current selected leaf
|
|
39
|
+
*
|
|
40
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
41
|
+
* @since 0.2.6
|
|
42
|
+
* @version 0.2.6
|
|
43
|
+
*/
|
|
44
|
+
Selection.setAssignedProperty('selected_leaf');
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* The current value
|
|
48
|
+
*
|
|
49
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
50
|
+
* @since 0.2.6
|
|
51
|
+
* @version 0.2.6
|
|
52
|
+
*/
|
|
53
|
+
Selection.setAssignedProperty('selected_value_id');
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The value of the selection itself
|
|
57
|
+
*
|
|
58
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
59
|
+
* @since 0.2.6
|
|
60
|
+
* @version 0.2.6
|
|
61
|
+
*/
|
|
62
|
+
Selection.setAssignedProperty('value', function getValue(val) {
|
|
63
|
+
|
|
64
|
+
let new_val = this.getValue();
|
|
65
|
+
|
|
66
|
+
if (new_val) {
|
|
67
|
+
return new_val;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
return val;
|
|
71
|
+
}, function setValue(val) {
|
|
72
|
+
|
|
73
|
+
if (!val) {
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
if (val.leaf_id) {
|
|
78
|
+
let leaf_options = this.getLeafOptions();
|
|
79
|
+
|
|
80
|
+
if (leaf_options) {
|
|
81
|
+
for (let i = 0; i < leaf_options.length; i++) {
|
|
82
|
+
let leaf = leaf_options[i];
|
|
83
|
+
|
|
84
|
+
if (leaf.id == val.leaf_id) {
|
|
85
|
+
this.selected_leaf = leaf;
|
|
86
|
+
break;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
if (val.value_id) {
|
|
93
|
+
this.selected_value_id = val.value_id;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Get the current value
|
|
99
|
+
*
|
|
100
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
101
|
+
* @since 0.2.6
|
|
102
|
+
* @version 0.2.6
|
|
103
|
+
*/
|
|
104
|
+
Selection.setMethod(function getValue() {
|
|
105
|
+
|
|
106
|
+
let result = {
|
|
107
|
+
leaf_id : this.selected_leaf?.id,
|
|
108
|
+
value_id : this.selected_value_id,
|
|
109
|
+
child : null,
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
let children_wrapper = this.querySelector('.leaf-children');
|
|
113
|
+
|
|
114
|
+
if (children_wrapper?.children?.length) {
|
|
115
|
+
let child = children_wrapper.children[0];
|
|
116
|
+
|
|
117
|
+
result.child = child.getValue();
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
return result;
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
/**
|
|
125
|
+
* Get the root al-pathway element
|
|
126
|
+
*
|
|
127
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
128
|
+
* @since 0.2.6
|
|
129
|
+
* @version 0.2.6
|
|
130
|
+
*
|
|
131
|
+
* @return {AlPathway}
|
|
132
|
+
*/
|
|
133
|
+
Selection.setMethod(function getRootAlPathway() {
|
|
134
|
+
return this.closest('al-pathway');
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Get the current selected value instance
|
|
139
|
+
*
|
|
140
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
141
|
+
* @since 0.2.6
|
|
142
|
+
* @version 0.2.6
|
|
143
|
+
*
|
|
144
|
+
* @return {null|Promise}
|
|
145
|
+
*/
|
|
146
|
+
Selection.setMethod(function getSelectedValue() {
|
|
147
|
+
|
|
148
|
+
if (!this.selected_value_id) {
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
if (!this.selected_leaf) {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
let provider = this.selected_leaf.getProvider();
|
|
157
|
+
|
|
158
|
+
if (!provider) {
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
return provider.getById(this.selected_value_id);
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Trigger a change
|
|
167
|
+
*
|
|
168
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
169
|
+
* @since 0.2.6
|
|
170
|
+
* @version 0.2.6
|
|
171
|
+
*/
|
|
172
|
+
Selection.setMethod(function triggerChange() {
|
|
173
|
+
|
|
174
|
+
this.updateButtonTitle();
|
|
175
|
+
|
|
176
|
+
let root = this.getRootAlPathway();
|
|
177
|
+
|
|
178
|
+
if (root) {
|
|
179
|
+
root.triggerChange(this);
|
|
180
|
+
}
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
/**
|
|
184
|
+
* Update the button title
|
|
185
|
+
*
|
|
186
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
187
|
+
* @since 0.2.6
|
|
188
|
+
* @version 0.2.6
|
|
189
|
+
*/
|
|
190
|
+
Selection.setMethod(async function updateButtonTitle() {
|
|
191
|
+
|
|
192
|
+
let title = await this.getDisplayTitle();
|
|
193
|
+
|
|
194
|
+
if (typeof title == 'object' && typeof title.toElement == 'function') {
|
|
195
|
+
title = title.toElement();
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
let wrapper = this.querySelector('.select-button-title');
|
|
199
|
+
|
|
200
|
+
if (wrapper) {
|
|
201
|
+
Hawkejs.replaceChildren(wrapper, title);
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* Get the current title to display
|
|
207
|
+
*
|
|
208
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
209
|
+
* @since 0.2.6
|
|
210
|
+
* @version 0.2.6
|
|
211
|
+
*/
|
|
212
|
+
Selection.setMethod(function getDisplayTitle() {
|
|
213
|
+
|
|
214
|
+
let value_promise = this.getSelectedValue();
|
|
215
|
+
|
|
216
|
+
if (value_promise) {
|
|
217
|
+
let pledge = new Pledge();
|
|
218
|
+
|
|
219
|
+
Pledge.done(value_promise, (err, res) => {
|
|
220
|
+
|
|
221
|
+
if (err) {
|
|
222
|
+
pledge.reject(err);
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
pledge.resolve(alchemy.getDisplayTitle(res));
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
return pledge;
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
if (this.selected_leaf) {
|
|
233
|
+
return this.selected_leaf.getDisplayTitle();
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
return new Classes.Alchemy.Microcopy('pathway-leaf-click-to-select');
|
|
237
|
+
});
|
|
238
|
+
|
|
239
|
+
/**
|
|
240
|
+
* The element is added to the DOM for the first time
|
|
241
|
+
*
|
|
242
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
243
|
+
* @since 0.2.6
|
|
244
|
+
* @version 0.2.6
|
|
245
|
+
*/
|
|
246
|
+
Selection.setMethod(function introduced() {
|
|
247
|
+
|
|
248
|
+
let select_button = this.querySelector('.leaf-info');
|
|
249
|
+
|
|
250
|
+
let added_listener = false;
|
|
251
|
+
|
|
252
|
+
select_button.addEventListener('click', (e) => {
|
|
253
|
+
const that = this;
|
|
254
|
+
|
|
255
|
+
e.preventDefault();
|
|
256
|
+
e.stopPropagation();
|
|
257
|
+
|
|
258
|
+
this.showLeafDropdown();
|
|
259
|
+
|
|
260
|
+
if (added_listener) {
|
|
261
|
+
return;
|
|
262
|
+
}
|
|
263
|
+
|
|
264
|
+
added_listener = true;
|
|
265
|
+
|
|
266
|
+
document.body.addEventListener('click', function onceOnClick(e) {
|
|
267
|
+
|
|
268
|
+
if (e.target.closest('.leaf-options')) {
|
|
269
|
+
return;
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
if (e.target.closest('.' + LEAF_DROPDOWN)) {
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
if (that._current_element_under_us) {
|
|
277
|
+
that.removeDropdown();
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
document.body.removeEventListener('click', onceOnClick);
|
|
281
|
+
added_listener = false;
|
|
282
|
+
});
|
|
283
|
+
});
|
|
284
|
+
|
|
285
|
+
if (!this.selected_leaf) {
|
|
286
|
+
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
});
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Get all the leaves this can represent
|
|
293
|
+
*
|
|
294
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
295
|
+
* @since 0.2.6
|
|
296
|
+
* @version 0.2.6
|
|
297
|
+
*
|
|
298
|
+
* @return {Leaf[]}
|
|
299
|
+
*/
|
|
300
|
+
Selection.setMethod(function getLeafOptions() {
|
|
301
|
+
|
|
302
|
+
if (this.leaf_options) {
|
|
303
|
+
return this.leaf_options;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
if (this.selected_leaf) {
|
|
307
|
+
return [this.selected_leaf];
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
return null;
|
|
311
|
+
});
|
|
312
|
+
|
|
313
|
+
/**
|
|
314
|
+
* Show the leaf options
|
|
315
|
+
*
|
|
316
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
317
|
+
* @since 0.2.6
|
|
318
|
+
* @version 0.2.6
|
|
319
|
+
*/
|
|
320
|
+
Selection.setMethod(async function showLeafDropdown() {
|
|
321
|
+
|
|
322
|
+
let leaf_options = this.getLeafOptions();
|
|
323
|
+
|
|
324
|
+
if (!leaf_options?.length) {
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// Close all existing dropdowns
|
|
329
|
+
this.removeDropdown();
|
|
330
|
+
|
|
331
|
+
let div = this.createElement('div');
|
|
332
|
+
div.classList.add(LEAF_DROPDOWN);
|
|
333
|
+
|
|
334
|
+
if (leaf_options.length > 1) {
|
|
335
|
+
await this.addLeafSelectionElement(leaf_options, div);
|
|
336
|
+
} else {
|
|
337
|
+
await this.addValuesOfLeafToElement(leaf_options[0], div);
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
this.positionElementUnderUs(div);
|
|
341
|
+
});
|
|
342
|
+
|
|
343
|
+
/**
|
|
344
|
+
* Get a leaf option by id
|
|
345
|
+
*
|
|
346
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
347
|
+
* @since 0.2.6
|
|
348
|
+
* @version 0.2.6
|
|
349
|
+
*
|
|
350
|
+
* @param {String} id
|
|
351
|
+
*
|
|
352
|
+
* @return {Leaf}
|
|
353
|
+
*/
|
|
354
|
+
Selection.setMethod(function getLeafOptionById(id) {
|
|
355
|
+
|
|
356
|
+
let leaf_options = this.getLeafOptions();
|
|
357
|
+
|
|
358
|
+
if (!leaf_options) {
|
|
359
|
+
return null;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
for (let leaf of leaf_options) {
|
|
363
|
+
if (leaf.id == id) {
|
|
364
|
+
return leaf;
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
return null;
|
|
369
|
+
});
|
|
370
|
+
|
|
371
|
+
/**
|
|
372
|
+
* Add the leaf options element to the given wrapper.
|
|
373
|
+
* The user will select a leaf type from this element.
|
|
374
|
+
*
|
|
375
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
376
|
+
* @since 0.2.6
|
|
377
|
+
* @version 0.2.6
|
|
378
|
+
*
|
|
379
|
+
* @param {Leaf[]} options
|
|
380
|
+
* @param {HTMLElement} target_wrapper
|
|
381
|
+
*/
|
|
382
|
+
Selection.setMethod(function addLeafSelectionElement(options, target_wrapper) {
|
|
383
|
+
|
|
384
|
+
let div = this.createElement('div');
|
|
385
|
+
div.classList.add(LEAF_TYPE_SELECT);
|
|
386
|
+
|
|
387
|
+
let ul = this.createElement('ul');
|
|
388
|
+
ul.classList.add(LEAF_TYPE_SELECT + '-ul');
|
|
389
|
+
div.appendChild(ul);
|
|
390
|
+
|
|
391
|
+
for (let leaf of options) {
|
|
392
|
+
|
|
393
|
+
let li = this.createElement('li');
|
|
394
|
+
li.classList.add(LEAF_TYPE_ITEM);
|
|
395
|
+
|
|
396
|
+
li.dataset.value = leaf.id;
|
|
397
|
+
|
|
398
|
+
let microcopy = this.createElement('micro-copy');
|
|
399
|
+
microcopy.key = 'pathway-leaf-selection-item';
|
|
400
|
+
microcopy.parameters = {leaf_id: leaf.id || leaf.name};
|
|
401
|
+
|
|
402
|
+
li.append(microcopy);
|
|
403
|
+
|
|
404
|
+
ul.append(li);
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
div.addEventListener('click', e => {
|
|
408
|
+
|
|
409
|
+
let clicked_on = e.target;
|
|
410
|
+
|
|
411
|
+
if (!clicked_on) {
|
|
412
|
+
return;
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
let li = clicked_on.closest('li');
|
|
416
|
+
|
|
417
|
+
if (!li) {
|
|
418
|
+
return;
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
let leaf_id = li.dataset.value;
|
|
422
|
+
|
|
423
|
+
let leaf = this.getLeafOptionById(leaf_id);
|
|
424
|
+
|
|
425
|
+
this.setSelectedLeaf(leaf);
|
|
426
|
+
this.addValuesOfLeafToElement(leaf, target_wrapper);
|
|
427
|
+
});
|
|
428
|
+
|
|
429
|
+
target_wrapper.appendChild(div);
|
|
430
|
+
});
|
|
431
|
+
|
|
432
|
+
/**
|
|
433
|
+
* Add the values of the given leaf to the given element
|
|
434
|
+
*
|
|
435
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
436
|
+
* @since 0.2.6
|
|
437
|
+
* @version 0.2.6
|
|
438
|
+
*
|
|
439
|
+
* @param {Leaf} leaf
|
|
440
|
+
* @param {HTMLElement} target_wrapper
|
|
441
|
+
*/
|
|
442
|
+
Selection.setMethod(async function addValuesOfLeafToElement(leaf, target_wrapper) {
|
|
443
|
+
|
|
444
|
+
let existing = target_wrapper.querySelector('.' + LEAF_VALUE_SELECT);
|
|
445
|
+
|
|
446
|
+
if (existing) {
|
|
447
|
+
existing.remove();
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
let values_element = await this.createLeafValuesElement(leaf);
|
|
451
|
+
|
|
452
|
+
if (!values_element) {
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
|
|
456
|
+
target_wrapper.append(values_element);
|
|
457
|
+
});
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* Select a leaf
|
|
461
|
+
*
|
|
462
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
463
|
+
* @since 0.2.6
|
|
464
|
+
* @version 0.2.6
|
|
465
|
+
*
|
|
466
|
+
* @param {mixed} leaf
|
|
467
|
+
*/
|
|
468
|
+
Selection.setMethod(function setSelectedLeaf(leaf) {
|
|
469
|
+
this.selected_leaf = leaf;
|
|
470
|
+
this.selected_value_id = null;
|
|
471
|
+
this.triggerChange();
|
|
472
|
+
});
|
|
473
|
+
|
|
474
|
+
/**
|
|
475
|
+
* Set out leaf type options
|
|
476
|
+
*
|
|
477
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
478
|
+
* @since 0.2.6
|
|
479
|
+
* @version 0.2.6
|
|
480
|
+
*
|
|
481
|
+
* @param {Leaf[]} leaves
|
|
482
|
+
*/
|
|
483
|
+
Selection.setMethod(function setLeafOptions(leaves) {
|
|
484
|
+
|
|
485
|
+
if (!leaves?.length) {
|
|
486
|
+
return;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
this.leaf_options = leaves;
|
|
490
|
+
});
|
|
491
|
+
|
|
492
|
+
/**
|
|
493
|
+
* Set the selected child
|
|
494
|
+
*
|
|
495
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
496
|
+
* @since 0.2.6
|
|
497
|
+
* @version 0.2.6
|
|
498
|
+
*
|
|
499
|
+
* @param {mixed} value_id
|
|
500
|
+
*/
|
|
501
|
+
Selection.setMethod(function setSelectedValue(value_id) {
|
|
502
|
+
|
|
503
|
+
if (!this.selected_leaf && this.leaf_options?.length == 1) {
|
|
504
|
+
this.setSelectedLeaf(this.leaf_options[0]);
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
this.selected_value_id = value_id;
|
|
508
|
+
|
|
509
|
+
this.removeDropdown();
|
|
510
|
+
|
|
511
|
+
let children = this.querySelector('.leaf-children');
|
|
512
|
+
|
|
513
|
+
if (!children) {
|
|
514
|
+
this.triggerChange();
|
|
515
|
+
return;
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
Hawkejs.removeChildren(children);
|
|
519
|
+
|
|
520
|
+
if (this.selected_leaf?.children?.length) {
|
|
521
|
+
let child_selection = this.createElement('al-pathway-selection');
|
|
522
|
+
child_selection.classList.add(LEAF_CHILD);
|
|
523
|
+
child_selection.setLeafOptions(this.selected_leaf?.children);
|
|
524
|
+
|
|
525
|
+
children.appendChild(child_selection);
|
|
526
|
+
}
|
|
527
|
+
|
|
528
|
+
this.triggerChange();
|
|
529
|
+
});
|
|
530
|
+
|
|
531
|
+
|
|
532
|
+
/**
|
|
533
|
+
* Update the children
|
|
534
|
+
*
|
|
535
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
536
|
+
* @since 0.2.6
|
|
537
|
+
* @version 0.2.6
|
|
538
|
+
*/
|
|
539
|
+
Selection.setMethod(function populateChildren(children) {
|
|
540
|
+
|
|
541
|
+
if (this.selected_leaf?.children?.length) {
|
|
542
|
+
|
|
543
|
+
if (!children) {
|
|
544
|
+
children = this.querySelector('.leaf-children');
|
|
545
|
+
}
|
|
546
|
+
|
|
547
|
+
let child_selection = this.createElement('al-pathway-selection');
|
|
548
|
+
child_selection.classList.add(LEAF_CHILD);
|
|
549
|
+
child_selection.setLeafOptions(this.selected_leaf?.children);
|
|
550
|
+
|
|
551
|
+
children.appendChild(child_selection);
|
|
552
|
+
|
|
553
|
+
let value = this.assigned_data.value;
|
|
554
|
+
|
|
555
|
+
if (value?.child) {
|
|
556
|
+
child_selection.value = value.child;
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
});
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* Show the leaf values
|
|
563
|
+
*
|
|
564
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
565
|
+
* @since 0.2.6
|
|
566
|
+
* @version 0.2.6
|
|
567
|
+
*
|
|
568
|
+
* @param {Leaf} leaf
|
|
569
|
+
* @param {Element} values_element
|
|
570
|
+
*/
|
|
571
|
+
Selection.setMethod(async function createLeafValuesElement(leaf, values_element) {
|
|
572
|
+
|
|
573
|
+
if (!values_element) {
|
|
574
|
+
values_element = this.createElement('div');
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
values_element.classList.add(LEAF_VALUE_SELECT);
|
|
578
|
+
|
|
579
|
+
let provider = leaf.getProvider();
|
|
580
|
+
|
|
581
|
+
if (!provider) {
|
|
582
|
+
return;
|
|
583
|
+
}
|
|
584
|
+
|
|
585
|
+
if (!provider.context) {
|
|
586
|
+
provider.context = {};
|
|
587
|
+
}
|
|
588
|
+
|
|
589
|
+
let root = this.queryUp('.al-pathway-selection-root');
|
|
590
|
+
provider.context.current_value = root.getValue();
|
|
591
|
+
|
|
592
|
+
let page_values = await provider.getAll();
|
|
593
|
+
|
|
594
|
+
if (!page_values) {
|
|
595
|
+
return;
|
|
596
|
+
}
|
|
597
|
+
|
|
598
|
+
let ul = this.createElement('ul');
|
|
599
|
+
|
|
600
|
+
for (let i = 0; i < page_values.length; i++) {
|
|
601
|
+
let value = page_values[i];
|
|
602
|
+
|
|
603
|
+
let option = this.createElement('li');
|
|
604
|
+
option.classList.add(LEAF_VALUE_ITEM);
|
|
605
|
+
option.setAttribute('data-value', value.$pk || value._id || value.id);
|
|
606
|
+
option.textContent = alchemy.getDisplayTitle(value);
|
|
607
|
+
|
|
608
|
+
ul.appendChild(option);
|
|
609
|
+
}
|
|
610
|
+
|
|
611
|
+
values_element.appendChild(ul);
|
|
612
|
+
|
|
613
|
+
values_element.addEventListener('click', (e) => {
|
|
614
|
+
|
|
615
|
+
let clicked_on = e.target;
|
|
616
|
+
|
|
617
|
+
if (!clicked_on) {
|
|
618
|
+
return;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
let value_option = clicked_on.closest('.' + LEAF_VALUE_ITEM);
|
|
622
|
+
|
|
623
|
+
if (!value_option) {
|
|
624
|
+
return;
|
|
625
|
+
}
|
|
626
|
+
|
|
627
|
+
let value_id = value_option.dataset.value;
|
|
628
|
+
|
|
629
|
+
this.setSelectedValue(value_id);
|
|
630
|
+
});
|
|
631
|
+
|
|
632
|
+
return values_element;
|
|
633
|
+
});
|
|
634
|
+
|
|
635
|
+
/**
|
|
636
|
+
* Position the given element under us
|
|
637
|
+
*
|
|
638
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
639
|
+
* @since 0.2.6
|
|
640
|
+
* @version 0.2.6
|
|
641
|
+
*/
|
|
642
|
+
Selection.setMethod(function positionElementUnderUs(element) {
|
|
643
|
+
|
|
644
|
+
if (this._current_element_under_us) {
|
|
645
|
+
this._current_element_under_us.remove();
|
|
646
|
+
this._current_element_under_us = null;
|
|
647
|
+
return;
|
|
648
|
+
}
|
|
649
|
+
|
|
650
|
+
document.body.append(element);
|
|
651
|
+
|
|
652
|
+
let rect = this.getBoundingClientRect();
|
|
653
|
+
|
|
654
|
+
let left = rect.x,
|
|
655
|
+
top = rect.y;
|
|
656
|
+
|
|
657
|
+
top += rect.height + 5;
|
|
658
|
+
|
|
659
|
+
element.style.left = left + 'px';
|
|
660
|
+
element.style.top = top + 'px';
|
|
661
|
+
element.style.position = 'absolute';
|
|
662
|
+
|
|
663
|
+
this._current_element_under_us = element;
|
|
664
|
+
});
|
|
665
|
+
|
|
666
|
+
/**
|
|
667
|
+
* Remove the current dropdown
|
|
668
|
+
*
|
|
669
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
670
|
+
* @since 0.2.6
|
|
671
|
+
* @version 0.2.6
|
|
672
|
+
*/
|
|
673
|
+
Selection.setMethod(function removeDropdown() {
|
|
674
|
+
|
|
675
|
+
let elements = document.querySelectorAll('.' + LEAF_DROPDOWN),
|
|
676
|
+
result = false;
|
|
677
|
+
|
|
678
|
+
if (this._current_element_under_us) {
|
|
679
|
+
this._current_element_under_us.remove();
|
|
680
|
+
this._current_element_under_us = null;
|
|
681
|
+
result = true;
|
|
682
|
+
}
|
|
683
|
+
|
|
684
|
+
for (let i = 0; i < elements.length; i++) {
|
|
685
|
+
elements[i].remove();
|
|
686
|
+
result = true;
|
|
687
|
+
}
|
|
688
|
+
|
|
689
|
+
return result;
|
|
690
|
+
});
|
|
File without changes
|
|
@@ -72,16 +72,31 @@ QueryBuilderEntry.addElementGetter('value_input_wrapper', '.qb-value-input-wrapp
|
|
|
72
72
|
*/
|
|
73
73
|
QueryBuilderEntry.addElementGetter('delete_button', '.qb-delete-entry');
|
|
74
74
|
|
|
75
|
+
/**
|
|
76
|
+
* Get the current operator
|
|
77
|
+
*
|
|
78
|
+
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
79
|
+
* @since 0.2.6
|
|
80
|
+
* @version 0.2.6
|
|
81
|
+
*/
|
|
82
|
+
QueryBuilderEntry.setProperty(function operator() {
|
|
83
|
+
return this.operator_select?.value;
|
|
84
|
+
}, function setValue(value) {
|
|
85
|
+
if (this.operator_select) {
|
|
86
|
+
this.operator_select.value = value;
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
|
|
75
90
|
/**
|
|
76
91
|
* Get/set the value
|
|
77
92
|
*
|
|
78
93
|
* @author Jelle De Loecker <jelle@elevenways.be>
|
|
79
94
|
* @since 0.1.6
|
|
80
|
-
* @version 0.
|
|
95
|
+
* @version 0.2.6
|
|
81
96
|
*/
|
|
82
97
|
QueryBuilderEntry.setProperty(function value() {
|
|
83
98
|
|
|
84
|
-
if (!this.field_select
|
|
99
|
+
if (!this.field_select?.value) {
|
|
85
100
|
return;
|
|
86
101
|
}
|
|
87
102
|
|
|
@@ -325,7 +340,7 @@ QueryBuilderEntry.setMethod(async function showValueInput() {
|
|
|
325
340
|
return;
|
|
326
341
|
}
|
|
327
342
|
|
|
328
|
-
let element = entry.createValueInput(this.hawkejs_renderer);
|
|
343
|
+
let element = entry.createValueInput(this.hawkejs_renderer, this);
|
|
329
344
|
|
|
330
345
|
element.classList.add('qb-value-input');
|
|
331
346
|
|
|
File without changes
|
|
File without changes
|