alchemy-form 0.1.12 → 0.2.1

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 (89) hide show
  1. package/CHANGELOG.md +24 -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} +14 -8
  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 +6 -2
  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 +147 -0
  29. package/element/{code_input.js → al_code_input.js} +1 -10
  30. package/element/{alchemy_field.js → al_field.js} +18 -25
  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} +3 -3
  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} +11 -18
  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} +52 -16
  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} +16 -7
  45. package/element/{query_builder_variable.js → al_query_builder_variable.js} +1 -1
  46. package/element/{alchemy_select.js → al_select.js} +64 -118
  47. package/element/{alchemy_select_item.js → al_select_item.js} +15 -9
  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} +187 -174
  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_variable_definition/boolean_variable_definition.js +1 -1
  59. package/helper_field/query_builder_field.js +2 -2
  60. package/package.json +2 -2
  61. package/view/form/elements/alchemy_button.hwk +1 -0
  62. package/view/form/elements/alchemy_field.hwk +4 -4
  63. package/view/form/elements/alchemy_field_array.hwk +2 -2
  64. package/view/form/elements/alchemy_field_schema.hwk +2 -2
  65. package/view/form/elements/alchemy_field_translatable.hwk +2 -2
  66. package/view/form/elements/alchemy_field_translatable_entry.hwk +2 -2
  67. package/view/form/elements/query_builder.hwk +1 -1
  68. package/view/form/elements/query_builder_entry.hwk +20 -11
  69. package/view/form/elements/query_builder_value.hwk +2 -2
  70. package/view/form/elements/query_builder_variable.hwk +2 -2
  71. package/view/form/inputs/edit/belongs_to.hwk +2 -2
  72. package/view/form/inputs/edit/boolean.hwk +2 -2
  73. package/view/form/inputs/edit/enum.hwk +2 -2
  74. package/view/form/inputs/edit/has_and_belongs_to_many.hwk +2 -2
  75. package/view/form/inputs/edit/html.hwk +2 -2
  76. package/view/form/inputs/edit/query_builder.hwk +2 -2
  77. package/view/form/inputs/edit/query_builder_assignment.hwk +2 -2
  78. package/view/form/inputs/edit/query_builder_value.hwk +2 -2
  79. package/view/form/inputs/edit/query_builder_variable.hwk +2 -2
  80. package/view/form/inputs/edit/schema.hwk +2 -2
  81. package/view/form/inputs/edit/sourcecode.hwk +2 -2
  82. package/view/form/inputs/edit_inline/boolean.hwk +2 -2
  83. package/view/form/inputs/view/string.hwk +6 -1
  84. package/view/form/inputs/view_inline/datetime.hwk +8 -4
  85. package/view/form/inputs/view_inline/string.hwk +6 -1
  86. package/view/form/wrappers/default/default.hwk +2 -2
  87. package/helper/widgets/alchemy_field_widget.js +0 -112
  88. package/helper/widgets/alchemy_form_widget.js +0 -183
  89. package/helper/widgets/alchemy_table_widget.js +0 -67
@@ -1,11 +1,13 @@
1
+ const OLD_ROWS = Symbol('old_rows');
2
+
1
3
  /**
2
- * The alchemy-table element
4
+ * The al-table element
3
5
  *
4
6
  * @author Jelle De Loecker <jelle@elevenways.be>
5
7
  * @since 0.1.0
6
8
  * @version 0.1.0
7
9
  */
8
- const Table = Function.inherits('Alchemy.Element.Form.Base', 'Table');
10
+ const Table = Function.inherits('Alchemy.Element.Form.WithDataprovider', 'Table');
9
11
 
10
12
  /**
11
13
  * The template code
@@ -27,15 +29,6 @@ Table.setTemplate(`<header class="aft-header"></header>
27
29
  </div>
28
30
  <footer data-he-slot="footer" class="aft-footer"></footer>`, {plain_html: true, render_immediate: true});
29
31
 
30
- /**
31
- * The stylesheet to load for this element
32
- *
33
- * @author Jelle De Loecker <jelle@develry.be>
34
- * @since 0.1.0
35
- * @version 0.1.0
36
- */
37
- Table.setStylesheetFile('form/alchemy_table');
38
-
39
32
  /**
40
33
  * Getter for the header element
41
34
  *
@@ -100,31 +93,22 @@ Table.addElementGetter('column_names_row', 'tr.aft-column-names');
100
93
  Table.addElementGetter('column_filters_row', 'tr.aft-column-filters');
101
94
 
102
95
  /**
103
- * The page attribute
104
- *
105
- * @author Jelle De Loecker <jelle@elevenways.be>
106
- * @since 0.1.0
107
- * @version 0.1.0
108
- */
109
- Table.setAttribute('page', {number: true});
110
-
111
- /**
112
- * The page-size attribute
96
+ * Should filters be shown?
113
97
  *
114
98
  * @author Jelle De Loecker <jelle@elevenways.be>
115
99
  * @since 0.1.0
116
100
  * @version 0.1.0
117
101
  */
118
- Table.setAttribute('page-size', {number: true});
102
+ Table.setAttribute('show-filters', {boolean: true});
119
103
 
120
104
  /**
121
- * Should filters be shown?
105
+ * Should the url be used for pagination?
122
106
  *
123
107
  * @author Jelle De Loecker <jelle@elevenways.be>
124
- * @since 0.1.0
125
- * @version 0.1.0
108
+ * @since 0.2.0
109
+ * @version 0.2.0
126
110
  */
127
- Table.setAttribute('show-filters', {boolean: true});
111
+ Table.setAttribute('use-url-pagination', {boolean: true});
128
112
 
129
113
  /**
130
114
  * Which optional view-type to use for field values
@@ -136,13 +120,13 @@ Table.setAttribute('show-filters', {boolean: true});
136
120
  Table.setAttribute('view-type');
137
121
 
138
122
  /**
139
- * Keep track of the loadRemote calls
123
+ * Should existing rows be re-used when new data is loaded?
140
124
  *
141
- * @author Jelle De Loecker <jelle@elevenways.be>
142
- * @since 0.1.3
143
- * @version 0.1.3
125
+ * @author Jelle De Loecker <jelle@elevenways.be>
126
+ * @since 0.2.0
127
+ * @version 0.2.0
144
128
  */
145
- Table.setProperty('load_remote_counter', 0);
129
+ Table.setAttribute('update-existing-rows', {boolean: true});
146
130
 
147
131
  /**
148
132
  * Look for changes to the show-filters attribute
@@ -251,76 +235,15 @@ Table.setAssignedProperty('records');
251
235
  Table.setAssignedProperty('filters');
252
236
 
253
237
  /**
254
- * The records property
255
- *
256
- * @author Jelle De Loecker <jelle@elevenways.be>
257
- * @since 0.1.0
258
- * @version 0.1.0
259
- */
260
- Table.setAssignedProperty('recordsource', null, function onRecordsource(value) {
261
- this.setRecordsource(value);
262
- return value;
263
- });
264
-
265
- /**
266
- * Look for a new src value
238
+ * Get the active row
267
239
  *
268
240
  * @author Jelle De Loecker <jelle@elevenways.be>
269
- * @since 0.1.0
270
- * @version 0.1.0
241
+ * @since 0.2.0
242
+ * @version 0.2.0
271
243
  */
272
- Table.enforceProperty(function src(new_value, old_value) {
273
-
274
- if (new_value == old_value) {
275
- return new_value;
276
- }
277
-
278
- this.setAttributeSilent('src', new_value);
279
-
280
- return new_value;
281
- });
282
-
283
- /**
284
- * Look for a new src value
285
- *
286
- * @author Jelle De Loecker <jelle@elevenways.be>
287
- * @since 0.1.0
288
- * @version 0.1.0
289
- */
290
- Table.addObservedAttribute('src', function onSource(src) {
291
- this.src = src;
292
- });
293
-
294
- /**
295
- * Clear the header elements
296
- *
297
- * @author Jelle De Loecker <jelle@elevenways.be>
298
- * @since 0.1.0
299
- * @version 0.1.11
300
- *
301
- * @param {*} config
302
- */
303
- Table.setMethod(function setRecordsource(config) {
304
-
305
- let url;
306
-
307
- if (typeof config == 'object') {
308
- url = alchemy.routeUrl(config.route, config.parameters);
309
- } else {
310
- url = config;
311
- }
312
-
313
- if (url == '#') {
314
- let current_url = this.getCurrentUrl();
315
-
316
- if (current_url) {
317
- url = ''+current_url;
318
- }
319
- }
320
-
321
- this.src = url;
322
-
323
- this.loadRemoteData();
244
+ Table.setProperty(function active_row() {
245
+ let result = this.queryAllNotNested('tr.aft-selected');
246
+ return result[0];
324
247
  });
325
248
 
326
249
  /**
@@ -358,6 +281,35 @@ Table.setMethod(function clearBody() {
358
281
  Hawkejs.removeChildren(this.table_body);
359
282
  });
360
283
 
284
+ /**
285
+ * Get the current rows by their pk
286
+ *
287
+ * @author Jelle De Loecker <jelle@elevenways.be>
288
+ * @since 0.2.0
289
+ * @version 0.2.0
290
+ *
291
+ * @return {Object<string,HTMLTableRowElement>}
292
+ */
293
+ Table.setMethod(function getTableRowsByPk() {
294
+
295
+ let result = {},
296
+ rows = this.table_body.queryAllNotNested('tr[data-pk]'),
297
+ row,
298
+ pk,
299
+ i;
300
+
301
+ for (i = 0; i < rows.length; i++) {
302
+ row = rows[i];
303
+ pk = row.dataset.pk;
304
+
305
+ if (pk) {
306
+ result[pk] = row;
307
+ }
308
+ }
309
+
310
+ return result;
311
+ });
312
+
361
313
  /**
362
314
  * Get the wanted page
363
315
  *
@@ -539,7 +491,7 @@ Table.setMethod(function getCurrentStateUrl() {
539
491
  *
540
492
  * @author Jelle De Loecker <jelle@elevenways.be>
541
493
  * @since 0.1.0
542
- * @version 0.1.11
494
+ * @version 0.2.0
543
495
  *
544
496
  * @param {Array} records
545
497
  */
@@ -547,6 +499,12 @@ Table.setMethod(function setRecords(records) {
547
499
 
548
500
  this.assigned_data.records = records;
549
501
 
502
+ if (this.update_existing_rows) {
503
+ this[OLD_ROWS] = this.getTableRowsByPk();
504
+ } else {
505
+ this[OLD_ROWS] = null;
506
+ }
507
+
550
508
  this.clearBody();
551
509
 
552
510
  let record;
@@ -555,6 +513,10 @@ Table.setMethod(function setRecords(records) {
555
513
  this.addDataRow(record);
556
514
  }
557
515
 
516
+ if (this.update_existing_rows) {
517
+ this[OLD_ROWS] = null;
518
+ }
519
+
558
520
  this.showPagination();
559
521
  this.attachContextMenus();
560
522
  });
@@ -591,7 +553,7 @@ Table.setMethod(function setFilter(field, value) {
591
553
  *
592
554
  * @author Jelle De Loecker <jelle@elevenways.be>
593
555
  * @since 0.1.0
594
- * @version 0.1.11
556
+ * @version 0.2.0
595
557
  */
596
558
  Table.setMethod(function showPagination() {
597
559
 
@@ -601,21 +563,30 @@ Table.setMethod(function showPagination() {
601
563
  return;
602
564
  }
603
565
 
604
- let url = this.getCurrentUrl();
566
+ const use_url_pagination = this.use_url_pagination;
605
567
 
606
- if (!url) {
607
- return;
568
+ let url;
569
+
570
+ if (use_url_pagination) {
571
+ url = this.getCurrentUrl();
572
+
573
+ if (!url) {
574
+ return;
575
+ }
608
576
  }
609
577
 
610
- let pager = this.querySelector('alchemy-pager');
578
+ let pager = this.querySelector('al-pager');
611
579
 
612
580
  if (!pager) {
613
- pager = this.createElement('alchemy-pager');
581
+ pager = this.createElement('al-pager');
614
582
  this.footer.append(pager);
615
583
  }
616
584
 
617
- pager.src = url;
618
- pager.url_param = this.getBaseUrlParam();
585
+ if (use_url_pagination) {
586
+ pager.src = url;
587
+ pager.url_param = this.getBaseUrlParam();
588
+ }
589
+
619
590
  pager.page_size = records.page_size;
620
591
 
621
592
  pager.showPage(records.page, Math.ceil(records.available / records.page_size));
@@ -626,7 +597,7 @@ Table.setMethod(function showPagination() {
626
597
  *
627
598
  * @author Jelle De Loecker <jelle@elevenways.be>
628
599
  * @since 0.1.8
629
- * @version 0.1.12
600
+ * @version 0.2.0
630
601
  *
631
602
  * @param {FieldConfig} field_config The config on how to display the field
632
603
  * @param {Object} container The container where the field should be in
@@ -659,7 +630,7 @@ Table.setMethod(function getFieldConfigView(field_config, container) {
659
630
  return Hawkejs.createText(text);
660
631
  }
661
632
 
662
- let alchemy_field = this.createElement('alchemy-field');
633
+ let alchemy_field = this.createElement('al-field');
663
634
  alchemy_field.purpose = this.purpose || 'view';
664
635
  alchemy_field.mode = this.mode || 'inline';
665
636
 
@@ -706,7 +677,7 @@ Table.setMethod(function addDataRow(entry) {
706
677
  *
707
678
  * @author Jelle De Loecker <jelle@elevenways.be>
708
679
  * @since 0.1.0
709
- * @version 0.1.8
680
+ * @version 0.2.0
710
681
  *
711
682
  * @param {Object} entry
712
683
  *
@@ -719,49 +690,97 @@ Table.setMethod(function createDataRow(entry) {
719
690
  }
720
691
 
721
692
  let field_set_config,
722
- value,
723
- tr = this.createElement('tr'),
724
- td,
725
- id = entry.$pk || entry._id || entry.id;
693
+ is_existing_row,
694
+ tr,
695
+ id = entry.$pk || entry._id || entry.id;
696
+
697
+ if (id && this[OLD_ROWS] && this[OLD_ROWS][id]) {
698
+ tr = this[OLD_ROWS][id];
699
+ is_existing_row = true;
700
+ } else {
701
+ tr = this.createElement('tr');
702
+ }
726
703
 
727
704
  if (id) {
728
705
  tr.dataset.pk = id;
729
706
  }
730
707
 
731
708
  for (field_set_config of this.fieldset) {
732
- td = this.createElement('td');
733
709
 
734
- let element = this.getFieldConfigView(field_set_config, entry);
710
+ let create_new_contents = true,
711
+ td;
712
+
713
+ if (is_existing_row && field_set_config.path) {
714
+ td = tr.querySelector('td[data-path="' + field_set_config.path + '"]');
715
+
716
+ if (td) {
717
+ let checksum = Object.checksum(field_set_config.getValueIn(entry));
735
718
 
736
- if (element) {
737
- td.append(element);
719
+ if (td.dataset.checksum == checksum) {
720
+ create_new_contents = false;
721
+ } else {
722
+ Hawkejs.removeChildren(td);
723
+ }
724
+ }
725
+ }
726
+
727
+ if (!td) {
728
+ td = this.createElement('td');
729
+ td.dataset.path = field_set_config.path;
738
730
  }
739
731
 
740
- tr.append(td);
732
+ if (create_new_contents) {
733
+ let element = this.getFieldConfigView(field_set_config, entry);
734
+
735
+ if (element) {
736
+ if (this.update_existing_rows) {
737
+ let checksum = Object.checksum(element.original_value);
738
+ td.dataset.checksum = checksum;
739
+ }
740
+
741
+ td.append(element);
742
+ }
743
+ }
744
+
745
+ if (!is_existing_row) {
746
+ tr.append(td);
747
+ }
741
748
  }
742
749
 
743
750
  if (this.has_actions) {
744
- td = this.createElement('td');
745
- td.classList.add('aft-actions');
746
- tr.append(td);
751
+
752
+ let td;
753
+
754
+ if (is_existing_row) {
755
+ td = tr.querySelector('td.aft-actions');
756
+ if (td) {
757
+ Hawkejs.removeChildren(td);
758
+ }
759
+ }
760
+
761
+ if (!td) {
762
+ td = this.createElement('td');
763
+ td.classList.add('aft-actions');
764
+ tr.append(td);
765
+ }
747
766
 
748
767
  let actions = this.getEntryActions(entry, 'row');
749
768
 
750
769
  if (actions && actions.length) {
751
770
 
752
771
  let action,
753
- anchor;
772
+ element;
754
773
 
755
774
  // Iterate over all the defined actions
756
775
  for (action of actions) {
757
776
 
758
- anchor = action.constructElement(this);
777
+ element = action.constructElement(this);
759
778
 
760
- if (!anchor) {
779
+ if (!element) {
761
780
  continue;
762
781
  }
763
782
 
764
- td.append(anchor);
783
+ td.append(element);
765
784
  }
766
785
  }
767
786
 
@@ -922,7 +941,7 @@ Table.setMethod(function onFieldsetAssignment(value, old_value) {
922
941
 
923
942
  if (field.options.sortable !== false) {
924
943
  col.classList.add('sortable');
925
- icon = this.createElement('al-ico');
944
+ icon = this.createElement('al-icon');
926
945
  icon.setAttribute('type', 'sorting-arrow');
927
946
 
928
947
  // Wrap it in an anchor
@@ -978,7 +997,7 @@ Table.setMethod(function onFieldsetAssignment(value, old_value) {
978
997
  *
979
998
  * @author Jelle De Loecker <jelle@elevenways.be>
980
999
  * @since 0.1.0
981
- * @version 0.1.11
1000
+ * @version 0.2.0
982
1001
  *
983
1002
  * @param {String|RURL} base_url
984
1003
  */
@@ -1008,7 +1027,7 @@ Table.setMethod(function updateAnchors(base_url) {
1008
1027
  for (i = 0; i < anchors.length; i++) {
1009
1028
  anchor = anchors[i];
1010
1029
 
1011
- ico = anchor.querySelector('al-ico');
1030
+ ico = anchor.querySelector('al-icon');
1012
1031
 
1013
1032
  ico.classList.remove('up');
1014
1033
  ico.classList.remove('down');
@@ -1029,7 +1048,7 @@ Table.setMethod(function updateAnchors(base_url) {
1029
1048
  anchor.setAttribute('href', url);
1030
1049
  }
1031
1050
 
1032
- let pager = this.querySelector('alchemy-pager');
1051
+ let pager = this.querySelector('al-pager');
1033
1052
 
1034
1053
  if (pager) {
1035
1054
  pager.src = base_url;
@@ -1074,64 +1093,58 @@ Table.setMethod(function selectRow(row) {
1074
1093
  });
1075
1094
 
1076
1095
  /**
1077
- * Load the remote data
1096
+ * Construct the config object used to fetch data
1078
1097
  *
1079
- * @author Jelle De Loecker <jelle@elevenways.be>
1080
- * @since 0.1.0
1081
- * @version 0.1.3
1098
+ * @author Jelle De Loecker <jelle@elevenways.be>
1099
+ * @since 0.2.0
1100
+ * @version 0.2.0
1082
1101
  */
1083
- Table.setMethod(function loadRemoteData() {
1084
-
1085
- let that = this,
1086
- src = this.src;
1102
+ Table.setMethod(function getRemoteFetchConfig() {
1087
1103
 
1088
- let body = {
1104
+ let config = {
1089
1105
  fields : this.fieldset.toJSON(),
1090
1106
  };
1091
1107
 
1092
1108
  if (this.page_size) {
1093
- body.page_size = this.page_size;
1094
- body.page = this.getWantedPage();
1109
+ config.page_size = this.page_size;
1110
+ config.page = this.getWantedPage();
1095
1111
  }
1096
1112
 
1097
- body.sort = this.getWantedSort();
1098
- body.filters = this.getWantedFilters();
1099
-
1100
- let options = {
1101
- href : this.src,
1102
- post : true,
1103
- body : body
1104
- };
1105
-
1106
- let load_remote_id = ++this.load_remote_counter;
1107
-
1108
- this.delayAssemble(async function() {
1109
-
1110
- if (load_remote_id != that.load_remote_counter) {
1111
- return;
1112
- }
1113
+ config.sort = this.getWantedSort();
1114
+ config.filters = this.getWantedFilters();
1113
1115
 
1114
- let result = await that.getResource(options);
1116
+ return config;
1117
+ });
1115
1118
 
1116
- if (!result) {
1117
- return;
1118
- }
1119
+ /**
1120
+ * Apply the fetched data
1121
+ *
1122
+ * @author Jelle De Loecker <jelle@elevenways.be>
1123
+ * @since 0.2.0
1124
+ * @version 0.2.0
1125
+ */
1126
+ Table.setMethod(function applyFetchedData(err, result, config) {
1119
1127
 
1120
- if (load_remote_id != that.load_remote_counter) {
1121
- return;
1122
- }
1128
+ if (err) {
1129
+ console.error(err);
1130
+ return;
1131
+ }
1123
1132
 
1124
- let records = result.records;
1133
+ let records;
1125
1134
 
1126
- that.records = records;
1135
+ if (Array.isArray(result)) {
1136
+ records = result;
1137
+ } else {
1138
+ records = result.records;
1139
+ }
1127
1140
 
1128
- that.updateAnchors();
1141
+ this.records = records;
1142
+ this.updateAnchors();
1129
1143
 
1130
- if (Blast.isBrowser) {
1131
- let current_url = that.getCurrentStateUrl();
1132
- history.pushState(null, document.title, current_url+'');
1133
- }
1134
- });
1144
+ if (Blast.isBrowser) {
1145
+ let current_url = this.getCurrentStateUrl();
1146
+ history.pushState(null, document.title, current_url+'');
1147
+ }
1135
1148
  });
1136
1149
 
1137
1150
  /**
@@ -1166,7 +1179,7 @@ Table.setMethod(function sortData() {
1166
1179
  *
1167
1180
  * @author Jelle De Loecker <jelle@elevenways.be>
1168
1181
  * @since 0.1.0
1169
- * @version 0.1.6
1182
+ * @version 0.2.0
1170
1183
  */
1171
1184
  Table.setMethod(function introduced() {
1172
1185
 
@@ -1224,7 +1237,7 @@ Table.setMethod(function introduced() {
1224
1237
  }
1225
1238
  }, 300, false, true));
1226
1239
 
1227
- let pager = this.querySelector('alchemy-pager');
1240
+ let pager = this.querySelector('al-pager');
1228
1241
 
1229
1242
  if (pager) {
1230
1243
  pager.addEventListener('pager-request', function requestPage(e) {
@@ -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.0
@@ -16,15 +16,6 @@ const AlchemyToggle = Function.inherits('Alchemy.Element.Form.Base', 'Toggle');
16
16
  */
17
17
  AlchemyToggle.setTemplateFile('form/elements/alchemy_toggle');
18
18
 
19
- /**
20
- * The stylesheet to load for this element
21
- *
22
- * @author Jelle De Loecker <jelle@elevenways.be>
23
- * @since 0.1.0
24
- * @version 0.1.0
25
- */
26
- AlchemyToggle.setStylesheetFile('form/alchemy_toggle');
27
-
28
19
  /**
29
20
  * Get/set the value
30
21
  *
@@ -226,15 +226,26 @@ FormAction.setMethod(function constructElement(renderer) {
226
226
  *
227
227
  * @author Jelle De Loecker <jelle@elevenways.be>
228
228
  * @since 0.1.6
229
- * @version 0.1.6
229
+ * @version 0.2.0
230
230
  *
231
231
  * @return {HTMLElement}
232
232
  */
233
233
  FormAction.setMethod(function _constructElement(renderer) {
234
234
 
235
- let span = renderer.createElement('span');
236
- span.textContent = this.title;
237
- return span;
235
+ let button = renderer.createElement('al-button');
236
+ button.action_instance = this;
237
+
238
+ if (this.icon) {
239
+ let icon = renderer.createElement('al-icon');
240
+ icon.icon_name = this.icon;
241
+ button.append(icon);
242
+ }
243
+
244
+ if (this.title) {
245
+ button.append(this.title);
246
+ }
247
+
248
+ return button;
238
249
  });
239
250
 
240
251
  /**
@@ -23,7 +23,7 @@ UrlAction.addConfigProperty('url');
23
23
  *
24
24
  * @author Jelle De Loecker <jelle@elevenways.be>
25
25
  * @since 0.1.6
26
- * @version 0.1.11
26
+ * @version 0.2.0
27
27
  *
28
28
  * @return {HTMLElement}
29
29
  */
@@ -34,7 +34,7 @@ UrlAction.setMethod(function _constructElement(renderer) {
34
34
  anchor.dataset.name = this.name;
35
35
 
36
36
  if (this.icon) {
37
- let alico = renderer.createElement('al-ico');
37
+ let alico = renderer.createElement('al-icon');
38
38
  alico.setIcon(this.icon);
39
39
  anchor.append(alico);
40
40
  } else {
@@ -42,6 +42,7 @@ UrlAction.setMethod(function _constructElement(renderer) {
42
42
  }
43
43
 
44
44
  anchor.setAttribute('href', this.url);
45
+ anchor.setAttribute('title', this.title || this.name);
45
46
 
46
47
  return anchor;
47
48
  });
@@ -19,6 +19,6 @@ const BooleanDefinition = Function.inherits('Alchemy.QueryBuilder.VariableDefini
19
19
  * @param {Hawkejs.Renderer}
20
20
  */
21
21
  BooleanDefinition.setMethod(function createValueInput(renderer) {
22
- let toggle = renderer.createElement('alchemy-toggle');
22
+ let toggle = renderer.createElement('al-toggle');
23
23
  return toggle;
24
24
  });
@@ -50,7 +50,7 @@ QueryBuilderField.setMethod(function cast(value, to_datasource) {
50
50
  *
51
51
  * @author Jelle De Loecker <jelle@elevenways.be>
52
52
  * @since 0.1.6
53
- * @version 0.1.12
53
+ * @version 0.2.0
54
54
  *
55
55
  * @param {Object} config
56
56
  * @param {HTMLElement} element
@@ -70,7 +70,7 @@ QueryBuilderField.setMethod(function loadData(config, element) {
70
70
  };
71
71
 
72
72
  if (element) {
73
- form = element.queryParents('alchemy-form');
73
+ form = element.queryParents('al-form');
74
74
 
75
75
  if (add_form_value && form) {
76
76
  body.form_value = form.value;
package/package.json CHANGED
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "name": "alchemy-form",
3
3
  "description": "Form plugin for Alchemy",
4
- "version": "0.1.12",
4
+ "version": "0.2.1",
5
5
  "repository": {
6
6
  "type" : "git",
7
7
  "url" : "https://github.com/11ways/alchemy-form.git"
8
8
  },
9
9
  "peerDependencies": {
10
10
  "alchemymvc" : ">=1.2.0",
11
- "alchemy-media" : "~0.6.3"
11
+ "alchemy-media" : "~0.7.1"
12
12
  },
13
13
  "license": "MIT",
14
14
  "engines": {
@@ -0,0 +1 @@
1
+ <div class="apb-content"><% Hawkejs.replaceChildren($0, child_nodes) %></div>