alchemymvc 1.3.22 → 1.4.0-alpha.2

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 (155) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -3
  3. package/lib/app/behaviour/publishable_behaviour.js +5 -5
  4. package/lib/app/behaviour/revision_behaviour.js +96 -59
  5. package/lib/app/behaviour/sluggable_behaviour.js +14 -14
  6. package/lib/app/conduit/electron_conduit.js +9 -9
  7. package/lib/app/conduit/http_conduit.js +13 -13
  8. package/lib/app/conduit/loopback_conduit.js +15 -15
  9. package/lib/app/conduit/socket_conduit.js +43 -43
  10. package/lib/app/config/routes.js +26 -0
  11. package/lib/app/controller/00-default_app_controller.js +21 -0
  12. package/lib/app/controller/alchemy_info_controller.js +12 -12
  13. package/lib/app/datasource/mongo_datasource.js +27 -18
  14. package/lib/app/element/00-default_app_element.js +19 -0
  15. package/lib/app/element/time_ago.js +5 -5
  16. package/lib/app/helper/00-default_app_helper.js +11 -0
  17. package/lib/app/helper/alchemy_helper.js +22 -22
  18. package/lib/app/helper/backed_map.js +1 -1
  19. package/lib/app/helper/breadcrumb.js +10 -10
  20. package/lib/app/helper/client_collection.js +3 -3
  21. package/lib/app/helper/cron.js +29 -29
  22. package/lib/app/helper/enum_values.js +6 -6
  23. package/lib/app/helper/pagination_helper.js +36 -36
  24. package/lib/app/helper/router_helper.js +35 -35
  25. package/lib/app/helper/socket_helper.js +57 -57
  26. package/lib/app/helper/syncable.js +62 -62
  27. package/lib/app/helper_component/paginate_component.js +9 -9
  28. package/lib/app/helper_controller/component.js +1 -1
  29. package/lib/app/helper_controller/conduit.js +31 -31
  30. package/lib/app/helper_controller/controller.js +54 -39
  31. package/lib/app/helper_datasource/00-nosql_datasource.js +624 -70
  32. package/lib/app/helper_datasource/05-fallback_datasource.js +10 -10
  33. package/lib/app/helper_datasource/idb_datasource.js +6 -6
  34. package/lib/app/helper_datasource/indexed_db.js +22 -22
  35. package/lib/app/helper_datasource/remote_datasource.js +5 -5
  36. package/lib/app/helper_error/http_error.js +4 -4
  37. package/lib/app/helper_error/model_error.js +2 -2
  38. package/lib/app/helper_error/validation_error.js +12 -12
  39. package/lib/app/helper_field/00-objectid_field.js +7 -7
  40. package/lib/app/helper_field/05-string_field.js +16 -12
  41. package/lib/app/helper_field/06-text_field.js +2 -4
  42. package/lib/app/helper_field/10-number_field.js +9 -12
  43. package/lib/app/helper_field/11-date_field.js +15 -15
  44. package/lib/app/helper_field/15-local_temporal_field.js +10 -10
  45. package/lib/app/helper_field/20-decimal_field.js +8 -9
  46. package/lib/app/helper_field/belongsto_field.js +1 -1
  47. package/lib/app/helper_field/big_int_field.js +8 -8
  48. package/lib/app/helper_field/boolean_field.js +9 -11
  49. package/lib/app/helper_field/datetime_field.js +3 -3
  50. package/lib/app/helper_field/enum_field.js +13 -8
  51. package/lib/app/helper_field/fixed_decimal_field.js +6 -7
  52. package/lib/app/helper_field/geopoint_field.js +9 -10
  53. package/lib/app/helper_field/habtm_field.js +3 -3
  54. package/lib/app/helper_field/hasoneparent_field.js +1 -1
  55. package/lib/app/helper_field/html_field.js +2 -4
  56. package/lib/app/helper_field/integer_field.js +8 -11
  57. package/lib/app/helper_field/local_date_field.js +5 -5
  58. package/lib/app/helper_field/local_date_time_field.js +5 -5
  59. package/lib/app/helper_field/local_time_field.js +5 -5
  60. package/lib/app/helper_field/mixed_field.js +5 -5
  61. package/lib/app/helper_field/object_field.js +6 -6
  62. package/lib/app/helper_field/password_field.js +3 -3
  63. package/lib/app/helper_field/regexp_field.js +7 -9
  64. package/lib/app/helper_field/schema_field.js +91 -88
  65. package/lib/app/helper_field/settings_field.js +92 -0
  66. package/lib/app/helper_field/time_field.js +6 -6
  67. package/lib/app/helper_field/url_field.js +2 -4
  68. package/lib/app/helper_model/00-base_criteria.js +662 -0
  69. package/lib/app/helper_model/05-criteria_expressions.js +605 -0
  70. package/lib/app/helper_model/10-model_criteria.js +1182 -0
  71. package/lib/app/helper_model/data_provider.js +2 -2
  72. package/lib/app/helper_model/document.js +103 -92
  73. package/lib/app/helper_model/document_list.js +14 -14
  74. package/lib/app/helper_model/field_config.js +11 -11
  75. package/lib/app/helper_model/field_set.js +17 -17
  76. package/lib/app/helper_model/model.js +201 -123
  77. package/lib/app/helper_model/remote_data_provider.js +2 -2
  78. package/lib/app/helper_validator/00_validator.js +16 -16
  79. package/lib/app/helper_validator/not_empty_validator.js +9 -9
  80. package/lib/app/model/00-default_app_model.js +18 -0
  81. package/lib/app/model/05-system_model.js +27 -0
  82. package/lib/app/model/{alchemy_migration_model.js → system_migration_model.js} +4 -4
  83. package/lib/app/model/system_setting_model.js +154 -0
  84. package/lib/app/model/{alchemy_task_history_model.js → system_task_history_model.js} +7 -7
  85. package/lib/app/model/{alchemy_task_model.js → system_task_model.js} +11 -11
  86. package/lib/bootstrap.js +22 -312
  87. package/lib/class/accumulator.js +5 -5
  88. package/lib/class/behaviour.js +5 -5
  89. package/lib/class/component.js +3 -3
  90. package/lib/class/conduit.js +152 -150
  91. package/lib/class/controller.js +42 -42
  92. package/lib/class/datasource.js +74 -79
  93. package/lib/class/document.js +74 -95
  94. package/lib/class/document_list.js +5 -5
  95. package/lib/class/element.js +17 -17
  96. package/lib/class/error.js +3 -3
  97. package/lib/class/field.js +169 -91
  98. package/lib/class/field_value.js +6 -6
  99. package/lib/class/helper.js +3 -3
  100. package/lib/class/inode.js +17 -17
  101. package/lib/class/inode_dir.js +12 -12
  102. package/lib/class/inode_file.js +26 -26
  103. package/lib/class/inode_list.js +4 -4
  104. package/lib/class/migration.js +4 -4
  105. package/lib/class/model.js +146 -165
  106. package/lib/class/path_definition.js +22 -22
  107. package/lib/class/path_evaluator.js +5 -5
  108. package/lib/class/path_param_definition.js +7 -7
  109. package/lib/class/plugin.js +312 -0
  110. package/lib/class/postponement.js +29 -29
  111. package/lib/class/reciprocal.js +8 -8
  112. package/lib/class/route.js +33 -33
  113. package/lib/class/router.js +73 -73
  114. package/lib/class/schema.js +21 -21
  115. package/lib/class/schema_client.js +105 -82
  116. package/lib/class/session.js +63 -29
  117. package/lib/class/session_scene.js +4 -4
  118. package/lib/class/sitemap.js +16 -16
  119. package/lib/class/task.js +39 -39
  120. package/lib/class/task_service.js +43 -47
  121. package/lib/{init → core}/alchemy.js +411 -373
  122. package/lib/{init/functions.js → core/alchemy_functions.js} +113 -91
  123. package/lib/core/alchemy_load_functions.js +715 -0
  124. package/lib/core/base.js +50 -62
  125. package/lib/core/client_alchemy.js +144 -152
  126. package/lib/core/client_base.js +27 -50
  127. package/lib/core/discovery.js +16 -18
  128. package/lib/core/middleware.js +54 -43
  129. package/lib/core/{routing.js → prefix.js} +14 -16
  130. package/lib/core/setting.js +1684 -0
  131. package/lib/core/stage.js +758 -0
  132. package/lib/scripts/create_constants.js +119 -0
  133. package/lib/{init/languages.js → scripts/create_languages.js} +5 -5
  134. package/lib/scripts/create_settings.js +449 -0
  135. package/lib/scripts/create_shared_constants.js +95 -0
  136. package/lib/scripts/create_stages.js +55 -0
  137. package/lib/scripts/init_alchemy.js +51 -0
  138. package/lib/{init/requirements.js → scripts/preload_modules.js} +15 -2
  139. package/lib/scripts/setup_devwatch.js +238 -0
  140. package/lib/stages/00-load_core.js +342 -0
  141. package/lib/stages/05-load_app.js +57 -0
  142. package/lib/stages/10-datasource.js +61 -0
  143. package/lib/stages/15-tasks.js +27 -0
  144. package/lib/stages/20-settings.js +68 -0
  145. package/lib/stages/50-routes.js +218 -0
  146. package/lib/stages/90-server.js +347 -0
  147. package/package.json +5 -7
  148. package/lib/app/helper_model/criteria.js +0 -2294
  149. package/lib/app/helper_model/db_query.js +0 -1488
  150. package/lib/app/routes.js +0 -11
  151. package/lib/core/socket.js +0 -171
  152. package/lib/init/constants.js +0 -158
  153. package/lib/init/devwatch.js +0 -238
  154. package/lib/init/load_functions.js +0 -979
  155. package/lib/stages.js +0 -515
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * @constructor
6
6
  *
7
- * @author Jelle De Loecker <jelle@develry.be>
7
+ * @author Jelle De Loecker <jelle@elevenways.be>
8
8
  * @since 1.0.0
9
9
  * @version 1.1.3
10
10
  */
@@ -32,7 +32,7 @@ var Conduit = Function.inherits('Alchemy.Client.Base', 'Alchemy.Client.Conduit',
32
32
  /**
33
33
  * Handle a local url
34
34
  *
35
- * @author Jelle De Loecker <jelle@develry.be>
35
+ * @author Jelle De Loecker <jelle@elevenways.be>
36
36
  * @since 1.1.0
37
37
  * @version 1.2.2
38
38
  *
@@ -202,7 +202,7 @@ Conduit.setStatic(function handleUrlLocal(url, options) {
202
202
  /**
203
203
  * When this response was sent
204
204
  *
205
- * @author Jelle De Loecker <jelle@develry.be>
205
+ * @author Jelle De Loecker <jelle@elevenways.be>
206
206
  * @since 1.1.0
207
207
  * @version 1.1.0
208
208
  */
@@ -211,7 +211,7 @@ Conduit.setProperty('ended', false);
211
211
  /**
212
212
  * The "body" property
213
213
  *
214
- * @author Jelle De Loecker <jelle@develry.be>
214
+ * @author Jelle De Loecker <jelle@elevenways.be>
215
215
  * @since 1.0.0
216
216
  * @version 1.0.0
217
217
  */
@@ -230,7 +230,7 @@ Conduit.setProperty(function body() {
230
230
  /**
231
231
  * The "view_render" property
232
232
  *
233
- * @author Jelle De Loecker <jelle@develry.be>
233
+ * @author Jelle De Loecker <jelle@elevenways.be>
234
234
  * @since 1.0.0
235
235
  * @version 1.1.0
236
236
  */
@@ -241,7 +241,7 @@ Conduit.setProperty(function view_render() {
241
241
  /**
242
242
  * The "renderer" property
243
243
  *
244
- * @author Jelle De Loecker <jelle@develry.be>
244
+ * @author Jelle De Loecker <jelle@elevenways.be>
245
245
  * @since 1.1.0
246
246
  * @version 1.1.5
247
247
  */
@@ -269,7 +269,7 @@ Conduit.setProperty(function renderer() {
269
269
  /**
270
270
  * Throw an error when a conduit is checksummed
271
271
  *
272
- * @author Jelle De Loecker <jelle@develry.be>
272
+ * @author Jelle De Loecker <jelle@elevenways.be>
273
273
  * @since 1.1.0
274
274
  * @version 1.1.0
275
275
  */
@@ -280,11 +280,11 @@ Conduit.setMethod(Blast.checksumSymbol, function toChecksum() {
280
280
  /**
281
281
  * Get a parameter from the route, post or get query or cookie
282
282
  *
283
- * @author Jelle De Loecker <jelle@develry.be>
283
+ * @author Jelle De Loecker <jelle@elevenways.be>
284
284
  * @since 0.2.0
285
285
  * @version 1.0.0
286
286
  *
287
- * @param {String} name
287
+ * @param {string} name
288
288
  * @param {Mixed} value Overrides the value if set
289
289
  */
290
290
  Conduit.setMethod(function param(name, value) {
@@ -325,11 +325,11 @@ Conduit.setMethod(function param(name, value) {
325
325
  /**
326
326
  * Set a variable for ViewRender
327
327
  *
328
- * @author Jelle De Loecker <jelle@develry.be>
328
+ * @author Jelle De Loecker <jelle@elevenways.be>
329
329
  * @since 0.2.0
330
330
  * @version 0.2.0
331
331
  *
332
- * @param {String} name
332
+ * @param {string} name
333
333
  * @param {Mixed} value
334
334
  */
335
335
  Conduit.setMethod(function set(name, value) {
@@ -344,11 +344,11 @@ Conduit.setMethod(function set(name, value) {
344
344
  /**
345
345
  * Set an internal variable for ViewRender
346
346
  *
347
- * @author Jelle De Loecker <jelle@develry.be>
347
+ * @author Jelle De Loecker <jelle@elevenways.be>
348
348
  * @since 0.2.0
349
349
  * @version 0.2.0
350
350
  *
351
- * @param {String} name
351
+ * @param {string} name
352
352
  * @param {Mixed} value
353
353
  */
354
354
  Conduit.setMethod(function internal(name, value) {
@@ -363,11 +363,11 @@ Conduit.setMethod(function internal(name, value) {
363
363
  /**
364
364
  * Expose a variable for ViewRender
365
365
  *
366
- * @author Jelle De Loecker <jelle@develry.be>
366
+ * @author Jelle De Loecker <jelle@elevenways.be>
367
367
  * @since 0.2.0
368
368
  * @version 0.2.0
369
369
  *
370
- * @param {String} name
370
+ * @param {string} name
371
371
  * @param {Mixed} value
372
372
  */
373
373
  Conduit.setMethod(function expose(name, value) {
@@ -382,13 +382,13 @@ Conduit.setMethod(function expose(name, value) {
382
382
  /**
383
383
  * Get the best locale to use for this connection
384
384
  *
385
- * @author Jelle De Loecker <jelle@develry.be>
385
+ * @author Jelle De Loecker <jelle@elevenways.be>
386
386
  * @since 1.0.0
387
387
  * @version 1.0.0
388
388
  *
389
389
  * @param {Array} locales Locales to choose from
390
390
  *
391
- * @return {String}
391
+ * @return {string}
392
392
  */
393
393
  Conduit.setMethod(function chooseBestLocale(locales) {
394
394
 
@@ -408,13 +408,13 @@ Conduit.setMethod(function chooseBestLocale(locales) {
408
408
  /**
409
409
  * Check if this request has a permission
410
410
  *
411
- * @author Jelle De Loecker <jelle@elevenways.be>
411
+ * @author Jelle De Loecker <jelle@elevenways.be>
412
412
  * @since 1.2.5
413
413
  * @version 1.2.5
414
414
  *
415
- * @param {String} permission
415
+ * @param {string} permission
416
416
  *
417
- * @return {Boolean} True if the user has the permission, false otherwise
417
+ * @return {boolean} True if the user has the permission, false otherwise
418
418
  */
419
419
  Conduit.setMethod(function hasPermission(permission) {
420
420
 
@@ -432,11 +432,11 @@ if (Blast.isNode) {
432
432
  /**
433
433
  * End the call
434
434
  *
435
- * @author Jelle De Loecker <jelle@develry.be>
435
+ * @author Jelle De Loecker <jelle@elevenways.be>
436
436
  * @since 1.0.0
437
437
  * @version 1.1.0
438
438
  *
439
- * @param {String} name
439
+ * @param {string} name
440
440
  * @param {Mixed} value Overrides the value if set
441
441
  */
442
442
  Conduit.setMethod(function end(message) {
@@ -451,11 +451,11 @@ Conduit.setMethod(function end(message) {
451
451
  /**
452
452
  * Get/set cookies
453
453
  *
454
- * @author Jelle De Loecker <jelle@develry.be>
454
+ * @author Jelle De Loecker <jelle@elevenways.be>
455
455
  * @since 1.0.0
456
456
  * @version 1.0.0
457
457
  *
458
- * @param {String} name
458
+ * @param {string} name
459
459
  * @param {Mixed} value Overrides the value if set
460
460
  */
461
461
  Conduit.setMethod(function cookie(name, value) {
@@ -465,11 +465,11 @@ Conduit.setMethod(function cookie(name, value) {
465
465
  /**
466
466
  * Throw an error
467
467
  *
468
- * @author Jelle De Loecker <jelle@develry.be>
468
+ * @author Jelle De Loecker <jelle@elevenways.be>
469
469
  * @since 1.0.0
470
470
  * @version 1.0.0
471
471
  *
472
- * @param {Number} status Response statuscode
472
+ * @param {number} status Response statuscode
473
473
  * @param {Error} message Optional error to send
474
474
  */
475
475
  Conduit.setMethod(function error(status, message) {
@@ -484,12 +484,12 @@ Conduit.setMethod(function error(status, message) {
484
484
  /**
485
485
  * Local redirect
486
486
  *
487
- * @author Jelle De Loecker <jelle@develry.be>
487
+ * @author Jelle De Loecker <jelle@elevenways.be>
488
488
  * @since 1.1.0
489
489
  * @version 1.1.0
490
490
  *
491
- * @param {Number} status 3xx redirection codes. 302 (temporary redirect) by default
492
- * @param {String|Object} options Options or url
491
+ * @param {number} status 3xx redirection codes. 302 (temporary redirect) by default
492
+ * @param {string|Object} options Options or url
493
493
  */
494
494
  Conduit.setMethod(async function redirect(status, options) {
495
495
 
@@ -515,7 +515,7 @@ Conduit.setMethod(async function redirect(status, options) {
515
515
  /**
516
516
  * Get the alchemy routes, compile paths
517
517
  *
518
- * @author Jelle De Loecker <jelle@develry.be>
518
+ * @author Jelle De Loecker <jelle@elevenways.be>
519
519
  * @since 1.0.0
520
520
  * @version 1.0.0
521
521
  *
@@ -554,7 +554,7 @@ Hawkejs.Scene.setMethod(function getAlchemyRoutes() {
554
554
  /**
555
555
  * Intercept Scene#openUrl calls
556
556
  *
557
- * @author Jelle De Loecker <jelle@develry.be>
557
+ * @author Jelle De Loecker <jelle@elevenways.be>
558
558
  * @since 1.0.0
559
559
  * @version 1.1.0
560
560
  *
@@ -4,7 +4,7 @@
4
4
  *
5
5
  * @constructor
6
6
  *
7
- * @author Jelle De Loecker <jelle@develry.be>
7
+ * @author Jelle De Loecker <jelle@elevenways.be>
8
8
  * @since 1.0.0
9
9
  * @version 1.0.0
10
10
  */
@@ -16,7 +16,7 @@ var Controller = Function.inherits('Alchemy.Client.Base', 'Alchemy.Client.Contro
16
16
  /**
17
17
  * Map these events to methods
18
18
  *
19
- * @author Jelle De Loecker <jelle@elevenways.be>
19
+ * @author Jelle De Loecker <jelle@elevenways.be>
20
20
  * @since 1.1.1
21
21
  * @version 1.1.1
22
22
  */
@@ -29,7 +29,7 @@ Controller.mapEventToMethod({
29
29
  /**
30
30
  * Add action object
31
31
  *
32
- * @author Jelle De Loecker <jelle@develry.be>
32
+ * @author Jelle De Loecker <jelle@elevenways.be>
33
33
  * @since 1.0.0
34
34
  * @version 1.0.0
35
35
  */
@@ -46,7 +46,7 @@ Controller.constitute(function addActions() {
46
46
  /**
47
47
  * Add an action
48
48
  *
49
- * @author Jelle De Loecker <jelle@develry.be>
49
+ * @author Jelle De Loecker <jelle@elevenways.be>
50
50
  * @since 1.0.0
51
51
  * @version 1.0.0
52
52
  */
@@ -89,14 +89,14 @@ Controller.setStatic(function setAction(name, fnc, on_server) {
89
89
  /**
90
90
  * Object where components are stored
91
91
  *
92
- * @type {Object}
92
+ * @type {Object}
93
93
  */
94
94
  Controller.prepareProperty('components', Object);
95
95
 
96
96
  /**
97
97
  * The controller name
98
98
  *
99
- * @type {String}
99
+ * @type {string}
100
100
  */
101
101
  Controller.prepareProperty('name', function name() {
102
102
  return this.constructor.name;
@@ -105,7 +105,7 @@ Controller.prepareProperty('name', function name() {
105
105
  /**
106
106
  * The model linked to this controller
107
107
  *
108
- * @author Jelle De Loecker <jelle@develry.be>
108
+ * @author Jelle De Loecker <jelle@elevenways.be>
109
109
  * @since 1.0.0
110
110
  * @version 1.0.5
111
111
  *
@@ -123,7 +123,7 @@ Controller.prepareProperty(function model() {
123
123
  /**
124
124
  * Alias to the viewRender
125
125
  *
126
- * @type {Hawkejs.ViewRender}
126
+ * @type {Hawkejs.ViewRender}
127
127
  */
128
128
  Controller.setProperty(function view_render() {
129
129
  return this.conduit.view_render;
@@ -132,11 +132,11 @@ Controller.setProperty(function view_render() {
132
132
  /**
133
133
  * Enable a component
134
134
  *
135
- * @author Jelle De Loecker <jelle@develry.be>
135
+ * @author Jelle De Loecker <jelle@elevenways.be>
136
136
  * @since 1.0.0
137
137
  * @version 1.0.0
138
138
  *
139
- * @param {String} name The name of the component
139
+ * @param {string} name The name of the component
140
140
  * @param {Object} options
141
141
  */
142
142
  Controller.setMethod(function addComponent(name, options) {
@@ -162,11 +162,11 @@ Controller.setMethod(function addComponent(name, options) {
162
162
  /**
163
163
  * Change the response URL (or disable it)
164
164
  *
165
- * @author Jelle De Loecker <jelle@elevenways.be>
165
+ * @author Jelle De Loecker <jelle@elevenways.be>
166
166
  * @since 1.3.0
167
167
  * @version 1.3.0
168
168
  *
169
- * @param {String|RURL|Boolean} new_url
169
+ * @param {string|RURL|boolean} new_url
170
170
  */
171
171
  Controller.setMethod(function setResponseUrl(new_url) {
172
172
 
@@ -179,11 +179,11 @@ Controller.setMethod(function setResponseUrl(new_url) {
179
179
  /**
180
180
  * Set a variable for ViewRender, through conduit
181
181
  *
182
- * @author Jelle De Loecker <jelle@develry.be>
182
+ * @author Jelle De Loecker <jelle@elevenways.be>
183
183
  * @since 0.2.0
184
184
  * @version 0.2.0
185
185
  *
186
- * @param {String} name
186
+ * @param {string} name
187
187
  * @param {Mixed} value
188
188
  */
189
189
  Controller.setMethod(function set(name, value) {
@@ -198,11 +198,11 @@ Controller.setMethod(function set(name, value) {
198
198
  /**
199
199
  * Set a variable for ViewRender, encode HTML if it's a string
200
200
  *
201
- * @author Jelle De Loecker <jelle@develry.be>
201
+ * @author Jelle De Loecker <jelle@elevenways.be>
202
202
  * @since 0.4.1
203
203
  * @version 0.4.1
204
204
  *
205
- * @param {String} name
205
+ * @param {string} name
206
206
  * @param {Mixed} value
207
207
  */
208
208
  Controller.setMethod(function safeSet(name, value) {
@@ -221,11 +221,11 @@ Controller.setMethod(function safeSet(name, value) {
221
221
  /**
222
222
  * Set the page title
223
223
  *
224
- * @author Jelle De Loecker <jelle@develry.be>
224
+ * @author Jelle De Loecker <jelle@elevenways.be>
225
225
  * @since 0.4.1
226
226
  * @version 0.4.1
227
227
  *
228
- * @param {String} title
228
+ * @param {string} title
229
229
  */
230
230
  Controller.setMethod(function setTitle(title) {
231
231
  this.set('pagetitle', title);
@@ -235,11 +235,11 @@ Controller.setMethod(function setTitle(title) {
235
235
  /**
236
236
  * Set an internal variable for ViewRender
237
237
  *
238
- * @author Jelle De Loecker <jelle@develry.be>
238
+ * @author Jelle De Loecker <jelle@elevenways.be>
239
239
  * @since 0.2.0
240
240
  * @version 1.0.0
241
241
  *
242
- * @param {String} name
242
+ * @param {string} name
243
243
  * @param {Mixed} value
244
244
  */
245
245
  Controller.setMethod(function internal(name, value) {
@@ -254,11 +254,11 @@ Controller.setMethod(function internal(name, value) {
254
254
  /**
255
255
  * Expose a variable for ViewRender
256
256
  *
257
- * @author Jelle De Loecker <jelle@develry.be>
257
+ * @author Jelle De Loecker <jelle@elevenways.be>
258
258
  * @since 0.2.0
259
259
  * @version 1.0.0
260
260
  *
261
- * @param {String} name
261
+ * @param {string} name
262
262
  * @param {Mixed} value
263
263
  */
264
264
  Controller.setMethod(function expose(name, value) {
@@ -273,12 +273,12 @@ Controller.setMethod(function expose(name, value) {
273
273
  /**
274
274
  * Render the given template
275
275
  *
276
- * @author Jelle De Loecker <jelle@develry.be>
276
+ * @author Jelle De Loecker <jelle@elevenways.be>
277
277
  * @since 1.0.0
278
278
  * @version 1.1.0
279
279
  *
280
- * @param {Number} status
281
- * @param {Array} templates
280
+ * @param {number} status
281
+ * @param {Array} templates
282
282
  */
283
283
  Controller.setMethod(function render(status, templates) {
284
284
 
@@ -309,11 +309,11 @@ Controller.setMethod(function render(status, templates) {
309
309
  /**
310
310
  * End the response
311
311
  *
312
- * @author Jelle De Loecker <jelle@develry.be>
312
+ * @author Jelle De Loecker <jelle@elevenways.be>
313
313
  * @since 1.1.0
314
314
  * @version 1.1.0
315
315
  *
316
- * @param {String|Object} message
316
+ * @param {string|Object} message
317
317
  */
318
318
  Controller.setMethod(function end(message) {
319
319
  return this.conduit.end(message);
@@ -322,12 +322,12 @@ Controller.setMethod(function end(message) {
322
322
  /**
323
323
  * Perform the wanted action and fire expected events
324
324
  *
325
- * @author Jelle De Loecker <jelle@develry.be>
325
+ * @author Jelle De Loecker <jelle@elevenways.be>
326
326
  * @since 0.2.0
327
- * @version 1.3.0
327
+ * @version 1.4.0
328
328
  *
329
- * @param {String} name The name of the action to execute
330
- * @param {Array} args Arguments to apply to the action
329
+ * @param {string} name The name of the action to execute
330
+ * @param {Array} args Arguments to apply to the action
331
331
  */
332
332
  Controller.setMethod(async function doAction(name, args) {
333
333
 
@@ -362,8 +362,8 @@ Controller.setMethod(async function doAction(name, args) {
362
362
  // @TODO: Add support for objects with language keys
363
363
  let title = route.options.title;
364
364
 
365
- if (alchemy.settings && alchemy.settings.title_suffix) {
366
- title += alchemy.settings.title_suffix;
365
+ if (alchemy.settings && alchemy.settings.frontend.title_suffix) {
366
+ title += alchemy.settings.frontend.title_suffix;
367
367
  }
368
368
 
369
369
  this.setTitle(title);
@@ -384,9 +384,24 @@ Controller.setMethod(async function doAction(name, args) {
384
384
  }
385
385
 
386
386
  try {
387
- await this.issueEvent('initializing');
388
- await this.issueEvent('filtering');
389
- await this.issueEvent('starting', [name]);
387
+ let result = await this.issueEvent('initializing');
388
+
389
+ if (result === false) {
390
+ return;
391
+ }
392
+
393
+ result = await this.issueEvent('filtering');
394
+
395
+ if (result === false) {
396
+ return;
397
+ }
398
+
399
+ result = await this.issueEvent('starting', [name]);
400
+
401
+ if (result === false) {
402
+ return;
403
+ }
404
+
390
405
  await this.constructor.actions[name].apply(this, args);
391
406
  } catch (err) {
392
407
  this.conduit.error(err);
@@ -396,11 +411,11 @@ Controller.setMethod(async function doAction(name, args) {
396
411
  /**
397
412
  * Create client controller class for specific controller name
398
413
  *
399
- * @author Jelle De Loecker <jelle@develry.be>
414
+ * @author Jelle De Loecker <jelle@elevenways.be>
400
415
  * @since 1.0.5
401
416
  * @version 1.0.5
402
417
  *
403
- * @param {String} controller_name
418
+ * @param {string} controller_name
404
419
  */
405
420
  Controller.setStatic(function getClass(controller_name) {
406
421
 
@@ -423,7 +438,7 @@ Controller.setStatic(function getClass(controller_name) {
423
438
 
424
439
  if (ControllerClass == null) {
425
440
  model_constructor = Function.create(class_name, function ControllerConstructor(record, options) {
426
- ControllerConstructor.wrapper.super.call(this, record, options);
441
+ ControllerConstructor.super.call(this, record, options);
427
442
  });
428
443
 
429
444
  // @TODO: inherit from parents