alchemy-form 0.1.11 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/assets/stylesheets/form/alchemy_form.scss +2 -16
  3. package/assets/stylesheets/form/elements/_button.scss +52 -0
  4. package/assets/stylesheets/form/{alchemy_code_input.scss → elements/_code_input.scss} +1 -1
  5. package/assets/stylesheets/form/{alchemy_feedback_input.scss → elements/_feedback_input.scss} +6 -8
  6. package/assets/stylesheets/form/{alchemy_field.scss → elements/_field.scss} +1 -1
  7. package/assets/stylesheets/form/{alchemy_field_array.scss → elements/_field_array.scss} +2 -2
  8. package/assets/stylesheets/form/{alchemy_field_translatable.scss → elements/_field_translatable.scss} +1 -1
  9. package/assets/stylesheets/form/elements/_form.scss +16 -0
  10. package/assets/stylesheets/form/{alchemy_pager.scss → elements/_pager.scss} +1 -1
  11. package/assets/stylesheets/form/{query_builder.scss → elements/_query_builder.scss} +7 -7
  12. package/assets/stylesheets/form/{alchemy_select.scss → elements/_select.scss} +2 -2
  13. package/assets/stylesheets/form/elements/_state.scss +8 -0
  14. package/assets/stylesheets/form/{alchemy_table.scss → elements/_table.scss} +2 -2
  15. package/assets/stylesheets/form/elements/_tabs.scss +47 -0
  16. package/assets/stylesheets/form/{alchemy_toggle.scss → elements/_toggle.scss} +1 -1
  17. package/assets/stylesheets/form/elements/index.scss +14 -0
  18. package/controller/form_api_controller.js +0 -1
  19. package/element/00_form_base.js +16 -8
  20. package/element/05_feedback_input.js +4 -13
  21. package/element/10_alchemy_field_custom.js +13 -15
  22. package/element/10_dataprovider.js +282 -0
  23. package/element/15_alchemy_field_entry.js +8 -10
  24. package/element/20_query_builder_base.js +4 -13
  25. package/element/25_query_builder_data.js +2 -2
  26. package/element/30_tab_base.js +29 -0
  27. package/element/40_stateful.js +125 -0
  28. package/element/al_button.js +109 -0
  29. package/element/{code_input.js → al_code_input.js} +1 -10
  30. package/element/{alchemy_field.js → al_field.js} +82 -41
  31. package/element/{alchemy_field_array.js → al_field_array.js} +7 -18
  32. package/element/{alchemy_field_array_entry.js → al_field_array_entry.js} +7 -9
  33. package/element/{alchemy_field_schema.js → al_field_schema.js} +23 -11
  34. package/element/{alchemy_field_translatable.js → al_field_translatable.js} +6 -17
  35. package/element/{alchemy_field_translatable_entry.js → al_field_translatable_entry.js} +2 -4
  36. package/element/{alchemy_form.js → al_form.js} +7 -16
  37. package/element/{alchemy_label.js → al_label.js} +1 -10
  38. package/element/{number_input.js → al_number_input.js} +2 -2
  39. package/element/{alchemy_pager.js → al_pager.js} +49 -41
  40. package/element/{alchemy_password_input.js → al_password_input.js} +0 -0
  41. package/element/{query_builder.js → al_query_builder.js} +3 -12
  42. package/element/{query_builder_entry.js → al_query_builder_entry.js} +8 -7
  43. package/element/{query_builder_group.js → al_query_builder_group.js} +7 -7
  44. package/element/{query_builder_value.js → al_query_builder_value.js} +2 -2
  45. package/element/{query_builder_variable.js → al_query_builder_variable.js} +1 -1
  46. package/element/{alchemy_select.js → al_select.js} +35 -108
  47. package/element/{alchemy_select_item.js → al_select_item.js} +33 -13
  48. package/element/al_state.js +26 -0
  49. package/element/{string_input.js → al_string_input.js} +2 -2
  50. package/element/al_tab_button.js +138 -0
  51. package/element/al_tab_context.js +102 -0
  52. package/element/al_tab_list.js +66 -0
  53. package/element/al_tab_panel.js +44 -0
  54. package/element/{alchemy_table.js → al_table.js} +204 -185
  55. package/element/{alchemy_toggle.js → al_toggle.js} +1 -10
  56. package/helper/form_actions/00_form_action.js +15 -4
  57. package/helper/form_actions/url_action.js +3 -2
  58. package/helper/query_builder_ns.js +108 -0
  59. package/helper/query_builder_variable_definition/00_variable_definition.js +52 -1
  60. package/helper/query_builder_variable_definition/boolean_variable_definition.js +1 -1
  61. package/helper_field/query_builder_field.js +49 -28
  62. package/helper_field/query_builder_value.js +0 -45
  63. package/helper_field/query_builder_variable.js +0 -45
  64. package/package.json +2 -2
  65. package/view/form/elements/alchemy_button.hwk +1 -0
  66. package/view/form/elements/alchemy_field.hwk +4 -4
  67. package/view/form/elements/alchemy_field_array.hwk +2 -2
  68. package/view/form/elements/alchemy_field_schema.hwk +2 -2
  69. package/view/form/elements/alchemy_field_translatable.hwk +2 -2
  70. package/view/form/elements/alchemy_field_translatable_entry.hwk +2 -2
  71. package/view/form/elements/alchemy_select_item.hwk +1 -3
  72. package/view/form/elements/query_builder.hwk +1 -1
  73. package/view/form/elements/query_builder_entry.hwk +6 -6
  74. package/view/form/elements/query_builder_value.hwk +2 -2
  75. package/view/form/elements/query_builder_variable.hwk +2 -2
  76. package/view/form/inputs/edit/belongs_to.hwk +2 -2
  77. package/view/form/inputs/edit/boolean.hwk +2 -2
  78. package/view/form/inputs/edit/enum.hwk +2 -2
  79. package/view/form/inputs/edit/has_and_belongs_to_many.hwk +2 -2
  80. package/view/form/inputs/edit/html.hwk +2 -2
  81. package/view/form/inputs/edit/query_builder.hwk +2 -2
  82. package/view/form/inputs/edit/query_builder_assignment.hwk +2 -2
  83. package/view/form/inputs/edit/query_builder_value.hwk +2 -2
  84. package/view/form/inputs/edit/query_builder_variable.hwk +2 -2
  85. package/view/form/inputs/edit/schema.hwk +2 -2
  86. package/view/form/inputs/edit/sourcecode.hwk +2 -2
  87. package/view/form/inputs/edit_inline/boolean.hwk +2 -2
  88. package/view/form/inputs/view/string.hwk +6 -1
  89. package/view/form/inputs/view_inline/datetime.hwk +8 -4
  90. package/view/form/inputs/view_inline/enum.hwk +1 -0
  91. package/view/form/inputs/view_inline/string.hwk +6 -1
  92. package/view/form/select/qb_item.hwk +1 -0
  93. package/view/form/wrappers/default/default.hwk +2 -2
  94. package/helper/widgets/alchemy_field_widget.js +0 -137
  95. package/helper/widgets/alchemy_form_widget.js +0 -169
  96. package/helper/widgets/alchemy_table_widget.js +0 -53
  97. package/view/form/inputs/view_inline/file.hwk +0 -6
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The alchemy-pager element
2
+ * The al-pager element
3
3
  *
4
4
  * @author Jelle De Loecker <jelle@elevenways.be>
5
5
  * @since 0.1.0
@@ -12,41 +12,32 @@ const Pager = Function.inherits('Alchemy.Element.Form.Base', 'Pager');
12
12
  *
13
13
  * @author Jelle De Loecker <jelle@elevenways.be>
14
14
  * @since 0.1.0
15
- * @version 0.1.0
15
+ * @version 0.2.0
16
16
  */
17
17
  Pager.setTemplate(`<ul>
18
18
  <li class="afp-first">
19
19
  <a href="#" aria-label="First page">
20
- <al-ico type="arrow-left-double"></al-ico>
20
+ <al-icon icon-name="left-to-line"></al-icon>
21
21
  </a>
22
22
  </li>
23
23
  <li class="afp-prev">
24
24
  <a href="#" aria-label="Previous page">
25
- <al-ico type="arrow-left"></al-ico>
25
+ <al-icon icon-name="left"></al-icon>
26
26
  </a>
27
27
  </li>
28
28
 
29
29
  <li class="afp-next">
30
30
  <a href="#" aria-label="Next page">
31
- <al-ico type="arrow-right"></al-ico>
31
+ <al-icon icon-name="right"></al-icon>
32
32
  </a>
33
33
  </li>
34
34
  <li class="afp-last">
35
35
  <a href="#" aria-label="Last page">
36
- <al-ico type="arrow-right-double"></al-ico>
36
+ <al-icon icon-name="right-to-line"></al-icon>
37
37
  </a>
38
38
  </li>
39
39
  </ul>`, true);
40
40
 
41
- /**
42
- * The stylesheet to load for this element
43
- *
44
- * @author Jelle De Loecker <jelle@develry.be>
45
- * @since 0.1.0
46
- * @version 0.1.0
47
- */
48
- Pager.setStylesheetFile('form/alchemy_pager');
49
-
50
41
  /**
51
42
  * Pager links
52
43
  *
@@ -176,7 +167,7 @@ Pager.setMethod(function getVisiblePagesElements() {
176
167
  *
177
168
  * @author Jelle De Loecker <jelle@elevenways.be>
178
169
  * @since 0.1.0
179
- * @version 0.1.0
170
+ * @version 0.2.0
180
171
  *
181
172
  * @param {Number} page
182
173
  * @param {Number} amount_of_pages
@@ -209,7 +200,8 @@ Pager.setMethod(function showPage(page, amount_of_pages) {
209
200
  nr,
210
201
  i;
211
202
 
212
- if (src && url_param) {
203
+ // Create let scope
204
+ if (true) {
213
205
  let first_anchor = this.link_first.children[0],
214
206
  prev_anchor = this.link_prev.children[0],
215
207
  next_anchor = this.link_next.children[0],
@@ -217,46 +209,59 @@ Pager.setMethod(function showPage(page, amount_of_pages) {
217
209
  data,
218
210
  url;
219
211
 
220
- data = {};
221
- data[url_param] = {page: 1};
222
- url = RURL.parse(src);
223
- url.param(data);
212
+ if (url_param) {
213
+ data = {};
214
+ data[url_param] = {page: 1};
215
+ url = RURL.parse(src);
216
+ url.param(data);
217
+ first_anchor.setAttribute('href', url);
218
+ }
224
219
 
225
- first_anchor.setAttribute('href', url);
220
+ first_anchor.dataset.page = 1;
226
221
 
227
222
  let prev = page - 1;
228
223
 
229
224
  if (prev < 1) prev = 1;
230
225
 
231
- data = {};
232
- data[url_param] = {page: prev};
233
- url = RURL.parse(src);
234
- url.param(data);
226
+ if (url_param) {
227
+ data = {};
228
+ data[url_param] = {page: prev};
229
+ url = RURL.parse(src);
230
+ url.param(data);
231
+ prev_anchor.setAttribute('href', url);
232
+ }
235
233
 
236
- prev_anchor.setAttribute('href', url);
234
+ prev_anchor.dataset.page = prev;
237
235
 
238
236
  let next = page + 1;
239
237
 
240
238
  if (next > amount_of_pages) {
241
239
  next_anchor.href = '#';
242
240
  next_anchor.disabled = true;
241
+ next_anchor.removeAttribute('data-page');
243
242
  } else {
244
243
  next_anchor.disabled = false;
245
244
 
245
+ if (url_param) {
246
+ data = {};
247
+ data[url_param] = {page: next};
248
+ url = RURL.parse(src);
249
+ url.param(data);
250
+ next_anchor.setAttribute('href', url);
251
+ }
252
+
253
+ next_anchor.dataset.page = next;
254
+ }
255
+
256
+ if (url_param) {
246
257
  data = {};
247
- data[url_param] = {page: next};
258
+ data[url_param] = {page: amount_of_pages};
248
259
  url = RURL.parse(src);
249
260
  url.param(data);
250
-
251
- next_anchor.setAttribute('href', url);
261
+ last_anchor.setAttribute('href', url);
252
262
  }
253
263
 
254
- data = {};
255
- data[url_param] = {page: amount_of_pages};
256
- url = RURL.parse(src);
257
- url.param(data);
258
-
259
- last_anchor.setAttribute('href', url);
264
+ last_anchor.dataset.page = amount_of_pages;
260
265
  }
261
266
 
262
267
  for (i = 0; i < page_links.length; i++) {
@@ -316,13 +321,16 @@ Pager.setMethod(function introduced() {
316
321
 
317
322
  this.addEventListener('click', function onClick(e) {
318
323
 
319
- if (e.target.nodeName != 'A') {
320
- return;
321
- }
322
-
323
- let page_nr_el = e.target.queryParents('[data-page]');
324
+ let page_nr_el = e.target.queryUp('[data-page]');
324
325
 
325
326
  if (!page_nr_el) {
327
+
328
+ let anchor = e.target.queryUp('a');
329
+
330
+ if (anchor && anchor.href == '#') {
331
+ e.preventDefault();
332
+ }
333
+
326
334
  return;
327
335
  }
328
336
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The alchemy-toggle custom element
2
+ * The al-toggle custom element
3
3
  *
4
4
  * @author Jelle De Loecker <jelle@elevenways.be>
5
5
  * @since 0.1.6
@@ -14,16 +14,7 @@ const QueryBuilder = Function.inherits('Alchemy.Element.Form.Base', 'QueryBuilde
14
14
  * @since 0.1.6
15
15
  * @version 0.1.6
16
16
  */
17
- QueryBuilder.setTemplate(`<alchemy-query-builder-group></alchemy-query-builder-group>`, {plain_html: true, render_immediate: true});
18
-
19
- /**
20
- * The stylesheet to load for this element
21
- *
22
- * @author Jelle De Loecker <jelle@elevenways.be>
23
- * @since 0.1.6
24
- * @version 0.1.6
25
- */
26
- QueryBuilder.setStylesheetFile('form/query_builder');
17
+ QueryBuilder.setTemplate(`<al-query-builder-group></al-query-builder-group>`, {plain_html: true, render_immediate: true});
27
18
 
28
19
  /**
29
20
  * The dataprovider used to get the variables
@@ -41,7 +32,7 @@ QueryBuilder.setAssignedProperty('dataprovider');
41
32
  * @since 0.1.6
42
33
  * @version 0.1.6
43
34
  */
44
- QueryBuilder.addElementGetter('root_group', ':scope > alchemy-query-builder-group');
35
+ QueryBuilder.addElementGetter('root_group', ':scope > al-query-builder-group');
45
36
 
46
37
  /**
47
38
  * Get/set the value
@@ -127,7 +127,7 @@ QueryBuilderEntry.setProperty(function value() {
127
127
  *
128
128
  * @author Jelle De Loecker <jelle@elevenways.be>
129
129
  * @since 0.1.6
130
- * @version 0.1.6
130
+ * @version 0.1.12
131
131
  */
132
132
  QueryBuilderEntry.setMethod(async function loadData(config, element) {
133
133
 
@@ -149,10 +149,11 @@ QueryBuilderEntry.setMethod(async function loadData(config, element) {
149
149
  items = await this.loadValueTypeData(config);
150
150
  }
151
151
 
152
- console.log('Got items:', items);
153
- items.clean(null);
154
- items.clean(undefined);
155
- items.clean(false);
152
+ if (items) {
153
+ items.clean(null);
154
+ items.clean(undefined);
155
+ items.clean(false);
156
+ }
156
157
 
157
158
  return {
158
159
  items: items,
@@ -334,7 +335,7 @@ QueryBuilderEntry.setMethod(async function applyValue(value) {
334
335
  *
335
336
  * @author Jelle De Loecker <jelle@elevenways.be>
336
337
  * @since 0.1.6
337
- * @version 0.1.6
338
+ * @version 0.2.0
338
339
  */
339
340
  QueryBuilderEntry.setMethod(async function applyValueTypeChanges() {
340
341
 
@@ -343,7 +344,7 @@ QueryBuilderEntry.setMethod(async function applyValueTypeChanges() {
343
344
  let type = this.value_type_select.value;
344
345
 
345
346
  if (type == 'variable') {
346
- let select = this.createElement('alchemy-select');
347
+ let select = this.createElement('al-select');
347
348
  select.value_item_template = 'form/select/qb_item';
348
349
  select.option_item_template = 'form/select/qb_item';
349
350
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The alchemy-toggle custom element
2
+ * The al-query-builder-group custom element
3
3
  *
4
4
  * @author Jelle De Loecker <jelle@elevenways.be>
5
5
  * @since 0.1.6
@@ -171,7 +171,7 @@ QueryBuilderGroup.setProperty(function value() {
171
171
  *
172
172
  * @author Jelle De Loecker <jelle@elevenways.be>
173
173
  * @since 0.1.6
174
- * @version 0.1.7
174
+ * @version 0.2.0
175
175
  */
176
176
  QueryBuilderGroup.setMethod(function applyValue(value) {
177
177
 
@@ -198,9 +198,9 @@ QueryBuilderGroup.setMethod(function applyValue(value) {
198
198
 
199
199
  for (rule of value.rules) {
200
200
  if (rule.type == 'qb_entry') {
201
- element = this.createElement('alchemy-query-builder-entry');
201
+ element = this.createElement('al-query-builder-entry');
202
202
  } else {
203
- element = this.createElement('alchemy-query-builder-group');
203
+ element = this.createElement('al-query-builder-group');
204
204
  }
205
205
 
206
206
  element.assigned_data.value = rule;
@@ -214,7 +214,7 @@ QueryBuilderGroup.setMethod(function applyValue(value) {
214
214
  *
215
215
  * @author Jelle De Loecker <jelle@elevenways.be>
216
216
  * @since 0.1.6
217
- * @version 0.1.7
217
+ * @version 0.2.0
218
218
  */
219
219
  QueryBuilderGroup.setMethod(function introduced() {
220
220
 
@@ -225,14 +225,14 @@ QueryBuilderGroup.setMethod(function introduced() {
225
225
  add_rule.addEventListener('click', e => {
226
226
  e.preventDefault();
227
227
 
228
- let new_rule = this.createElement('alchemy-query-builder-entry');
228
+ let new_rule = this.createElement('al-query-builder-entry');
229
229
  this.rules_list.append(new_rule);
230
230
  });
231
231
 
232
232
  add_group.addEventListener('click', e => {
233
233
  e.preventDefault();
234
234
 
235
- let new_group = this.createElement('alchemy-query-builder-group');
235
+ let new_group = this.createElement('al-query-builder-group');
236
236
  this.rules_list.append(new_group);
237
237
  });
238
238
 
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The alchemy-query-builder-value custom element
2
+ * The al-query-builder-value custom element
3
3
  *
4
4
  * @author Jelle De Loecker <jelle@elevenways.be>
5
5
  * @since 0.1.6
@@ -186,7 +186,7 @@ QueryBuilderValue.setMethod(async function applySourceTypeChanges() {
186
186
  let type = this.source_type_select.value;
187
187
 
188
188
  if (type == 'variable') {
189
- let select = this.createElement('alchemy-select');
189
+ let select = this.createElement('al-select');
190
190
  select.dataprovider = this;
191
191
  select.classList.add('qb-value-variable');
192
192
  this.value_input_wrapper.append(select);
@@ -1,5 +1,5 @@
1
1
  /**
2
- * The alchemy-query-builder-value custom element
2
+ * The al-query-builder-value custom element
3
3
  *
4
4
  * @author Jelle De Loecker <jelle@elevenways.be>
5
5
  * @since 0.1.7
@@ -1,20 +1,11 @@
1
1
  /**
2
- * The alchemy-select element
2
+ * The al-select element
3
3
  *
4
4
  * @author Jelle De Loecker <jelle@develry.be>
5
5
  * @since 0.1.0
6
6
  * @version 0.1.0
7
7
  */
8
- const AlchemySelect = Function.inherits('Alchemy.Element.Form.Base', 'Select');
9
-
10
- /**
11
- * The remote url attribute
12
- *
13
- * @author Jelle De Loecker <jelle@develry.be>
14
- * @since 0.1.0
15
- * @version 0.1.0
16
- */
17
- AlchemySelect.setAttribute('src');
8
+ const AlchemySelect = Function.inherits('Alchemy.Element.Form.WithDataprovider', 'Select');
18
9
 
19
10
  /**
20
11
  * The value clear count
@@ -63,15 +54,6 @@ AlchemySelect.setAttribute('option-item-template');
63
54
  */
64
55
  AlchemySelect.setTemplateFile('form/elements/alchemy_select');
65
56
 
66
- /**
67
- * The stylesheet to load for this element
68
- *
69
- * @author Jelle De Loecker <jelle@develry.be>
70
- * @since 0.1.0
71
- * @version 0.1.0
72
- */
73
- AlchemySelect.setStylesheetFile('form/alchemy_select');
74
-
75
57
  /**
76
58
  * Getter for the value-wrapper div
77
59
  *
@@ -135,16 +117,6 @@ AlchemySelect.addElementGetter('result_info', '.result-info');
135
117
  */
136
118
  AlchemySelect.setAssignedProperty('sortable');
137
119
 
138
- /**
139
- * The dataprovider is an instance of something that will load
140
- * the remote data for this element
141
- *
142
- * @author Jelle De Loecker <jelle@elevenways.be>
143
- * @since 0.1.0
144
- * @version 0.1.0
145
- */
146
- AlchemySelect.setAssignedProperty('dataprovider');
147
-
148
120
  /**
149
121
  * The value property
150
122
  *
@@ -495,7 +467,7 @@ AlchemySelect.setMethod(function introduced() {
495
467
 
496
468
  this.addEventListener('keydown', function onKeydown(e) {
497
469
 
498
- // Only listen for keydowns on the alchemy-select itself
470
+ // Only listen for keydowns on the al-select itself
499
471
  if (e.target != that) {
500
472
  return;
501
473
  }
@@ -779,7 +751,7 @@ AlchemySelect.setMethod(function getValueData(value) {
779
751
  *
780
752
  * @author Jelle De Loecker <jelle@develry.be>
781
753
  * @since 0.1.0
782
- * @version 0.1.0
754
+ * @version 0.2.0
783
755
  *
784
756
  * @param {Number} page
785
757
  *
@@ -802,7 +774,7 @@ AlchemySelect.setMethod(function _ensureValueData(value) {
802
774
 
803
775
  this.delayAssemble(pledge);
804
776
 
805
- this._loadRemote({value: value}).done(function gotValueData(err, result) {
777
+ this.fetchRemoteData({value: value}).done(function gotValueData(err, result) {
806
778
 
807
779
  if (err) {
808
780
  return pledge.reject(err);
@@ -928,93 +900,49 @@ AlchemySelect.setMethod(function _processResponseList(list, page) {
928
900
  });
929
901
 
930
902
  /**
931
- * Load remote content
932
- *
933
- * @author Jelle De Loecker <jelle@develry.be>
934
- * @since 0.1.0
935
- * @version 0.1.8
936
- *
937
- * @param {Number} page
903
+ * Construct the config object used to fetch data
938
904
  *
939
- * @return {Pledge}
905
+ * @author Jelle De Loecker <jelle@elevenways.be>
906
+ * @since 0.2.0
907
+ * @version 0.2.0
940
908
  */
941
- AlchemySelect.setMethod(function loadRemote(page) {
942
-
943
- let pledge = new Classes.Pledge();
909
+ AlchemySelect.setMethod(function getRemoteFetchConfig() {
944
910
 
945
911
  // Don't perform request when everything has already been loaded
946
912
  if (this.total_item_count >= this.loaded_item_count) {
947
- pledge.resolve(true);
948
913
  return;
949
914
  }
950
915
 
951
- if (!this.src && !this.dataprovider) {
952
- pledge.resolve(false);
953
- return pledge;
954
- }
955
-
956
- if (page == null) {
957
- page = 1;
958
- }
959
-
960
- const that = this;
961
-
962
- this.loading_dropdown = true;
963
-
964
- let data = {
916
+ let config = {
965
917
  search : this.search_value,
966
- page : page
967
- };
968
-
969
- this._loadRemote(data).done(gotResponse);
970
-
971
- function gotResponse(err, data) {
972
-
973
- if (err) {
974
- that.loading_dropdown = false;
975
- pledge.resolve(false);
976
- throw err;
977
- }
978
-
979
- if (page == null || page == 1) {
980
- Hawkejs.removeChildren(that.dropdown_content);
981
- }
982
-
983
- that._processResponseData(data, page);
984
-
985
- pledge.resolve(true);
918
+ page : this.page || 1,
986
919
  };
987
920
 
988
- return pledge;
921
+ return config;
989
922
  });
990
923
 
924
+
991
925
  /**
992
- * Load remote content
993
- *
994
- * @author Jelle De Loecker <jelle@develry.be>
995
- * @since 0.1.0
996
- * @version 0.1.0
926
+ * Apply the fetched data
997
927
  *
998
- * @param {Object) config
999
- *
1000
- * @return {Pledge}
928
+ * @author Jelle De Loecker <jelle@elevenways.be>
929
+ * @since 0.2.0
930
+ * @version 0.2.0
1001
931
  */
1002
- AlchemySelect.setMethod(function _loadRemote(config) {
932
+ AlchemySelect.setMethod(function applyFetchedData(err, result, config) {
1003
933
 
1004
- let pledge;
934
+ if (err) {
935
+ this.loading_dropdown = false;
936
+ return;
937
+ }
1005
938
 
1006
- if (this.dataprovider) {
1007
- pledge = Blast.Classes.Pledge.cast(this.dataprovider.loadData(config, this));
1008
- } else {
1009
- let url = this.src;
939
+ let page = config.page;
1010
940
 
1011
- pledge = this.hawkejs_helpers.Alchemy.getResource({
1012
- href : url,
1013
- get : config
1014
- });
941
+ if (page == null || page == 1) {
942
+ Hawkejs.removeChildren(this.dropdown_content);
1015
943
  }
1016
944
 
1017
- return pledge;
945
+ this._processResponseData(result, page);
1018
946
  });
1019
947
 
1020
948
  /**
@@ -1091,7 +1019,7 @@ AlchemySelect.setMethod(function setLastSuccessfulLoadedPage(page) {
1091
1019
  *
1092
1020
  * @author Jelle De Loecker <jelle@develry.be>
1093
1021
  * @since 0.1.0
1094
- * @version 0.1.8
1022
+ * @version 0.2.0
1095
1023
  *
1096
1024
  * @param {Number} page
1097
1025
  */
@@ -1131,9 +1059,8 @@ AlchemySelect.setMethod(function loadOptions(page) {
1131
1059
  return;
1132
1060
  }
1133
1061
 
1134
- // If an URL is provided, use that
1135
- if (this.src || this.dataprovider) {
1136
- return this.loadRemote(page);
1062
+ if (this.can_fetch_remote_data) {
1063
+ return this.loadRemoteData({page});
1137
1064
  }
1138
1065
 
1139
1066
  let field = this.model_field;
@@ -1291,7 +1218,7 @@ AlchemySelect.setMethod(function close(event) {
1291
1218
  *
1292
1219
  * @author Jelle De Loecker <jelle@develry.be>
1293
1220
  * @since 0.1.0
1294
- * @version 0.1.6
1221
+ * @version 0.2.0
1295
1222
  *
1296
1223
  * @param {String} type "value" or "option"
1297
1224
  * @param {Mixed} value The actual value of this item
@@ -1301,7 +1228,7 @@ AlchemySelect.setMethod(function close(event) {
1301
1228
  */
1302
1229
  AlchemySelect.setMethod(function _makeValueItem(type, value, data) {
1303
1230
 
1304
- let item = this.createElement('alchemy-select-item');
1231
+ let item = this.createElement('al-select-item');
1305
1232
 
1306
1233
  // Set the type ("value" or "option")
1307
1234
  item.type = type;
@@ -1350,7 +1277,7 @@ AlchemySelect.setMethod(function _makeValueItem(type, value, data) {
1350
1277
  item.prepareRenderVariables = async function() {
1351
1278
 
1352
1279
  try {
1353
- await that.loadRemote();
1280
+ await that.loadRemoteData();
1354
1281
  } catch (err) {
1355
1282
  return
1356
1283
  }
@@ -1796,11 +1723,11 @@ AlchemySelect.setMethod(function applyLocalFilter(query) {
1796
1723
  *
1797
1724
  * @author Jelle De Loecker <jelle@develry.be>
1798
1725
  * @since 0.1.0
1799
- * @version 0.1.8
1726
+ * @version 0.2.0
1800
1727
  */
1801
1728
  AlchemySelect.setMethod('refreshRemote', Fn.throttle(function refreshRemote() {
1802
1729
  this.loaded_page = 0;
1803
- this.loadRemote();
1730
+ this.loadRemoteData();
1804
1731
  }, {
1805
1732
  minimum_wait : 350,
1806
1733
  immediate : false,
@@ -1,14 +1,11 @@
1
1
  /**
2
- * The alchemy-select-item element
2
+ * The al-select-item element
3
3
  *
4
4
  * @author Jelle De Loecker <jelle@elevenways.be>
5
5
  * @since 0.1.0
6
- * @version 0.1.0
6
+ * @version 0.2.0
7
7
  */
8
- const Item = Function.inherits('Alchemy.Element.Form.Base', function SelectItem() {
9
- SelectItem.super.call(this);
10
- this.setAttribute('tabindex', '-1');
11
- });
8
+ const Item = Function.inherits('Alchemy.Element.Form.Base', 'SelectItem');
12
9
 
13
10
  /**
14
11
  * Set the default inner template
@@ -28,6 +25,15 @@ Item.setTemplateFile('form/elements/alchemy_select_item');
28
25
  */
29
26
  Item.setAttribute('type');
30
27
 
28
+ /**
29
+ * The type of this item: "value" or "option"
30
+ *
31
+ * @author Jelle De Loecker <jelle@elevenways.be>
32
+ * @since 0.2.0
33
+ * @version 0.2.0
34
+ */
35
+ Item.setAttribute('tabindex', {default: -1});
36
+
31
37
  /**
32
38
  * Is this item selected?
33
39
  *
@@ -65,16 +71,16 @@ Item.setAssignedProperty('value');
65
71
  Item.setAssignedProperty('data');
66
72
 
67
73
  /**
68
- * The parent alchemy-select item
74
+ * The parent al-select item
69
75
  *
70
76
  * @author Jelle De Loecker <jelle@elevenways.be>
71
77
  * @since 0.1.5
72
- * @version 0.1.5
78
+ * @version 0.2.0
73
79
  */
74
80
  Item.enforceProperty(function alchemy_select(new_value) {
75
81
 
76
82
  if (new_value == null) {
77
- new_value = this.closest('alchemy-select');
83
+ new_value = this.closest('al-select');
78
84
  }
79
85
 
80
86
  return new_value;
@@ -85,13 +91,27 @@ Item.enforceProperty(function alchemy_select(new_value) {
85
91
  *
86
92
  * @author Jelle De Loecker <jelle@elevenways.be>
87
93
  * @since 0.1.5
88
- * @version 0.1.5
94
+ * @version 0.1.12
89
95
  */
90
96
  Item.setProperty(function display_title() {
91
97
 
92
- if (!this.data) {
93
- return '';
98
+ let result;
99
+
100
+ if (this.data) {
101
+ const model = this.data.$model;
102
+
103
+ if (model) {
104
+ result = model.getDisplayTitle(this.data, ['title', 'name']);
105
+ }
106
+ }
107
+
108
+ if (!result) {
109
+ if (this.data) {
110
+ result = this.data.title || this.data.name || this.data.$pk || this.value;
111
+ } else {
112
+ result = this.value;
113
+ }
94
114
  }
95
115
 
96
- return this.data.title || this.data.name || this.data.username || this.data.$pk || this.value;
116
+ return result || '';
97
117
  });