neo.mjs 4.0.44 → 4.0.45
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/package.json +1 -1
- package/src/component/Carousel.mjs +37 -1
- package/src/controller/Component.mjs +23 -11
- package/src/manager/Task.mjs +197 -0
- package/src/model/Component.mjs +3 -0
- package/src/table/View.mjs +2 -2
- package/src/worker/App.mjs +4 -4
package/package.json
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import ClassSystemUtil from '../util/ClassSystem.mjs';
|
|
2
2
|
import Component from './Base.mjs';
|
|
3
3
|
import Store from '../data/Store.mjs';
|
|
4
|
+
import TaskManager from '../manager/Task.mjs';
|
|
5
|
+
|
|
4
6
|
|
|
5
7
|
/**
|
|
6
8
|
* @class Neo.component.Carousel
|
|
@@ -31,6 +33,14 @@ class Carousel extends Component {
|
|
|
31
33
|
* @protected
|
|
32
34
|
*/
|
|
33
35
|
ntype: 'carousel',
|
|
36
|
+
/**
|
|
37
|
+
* autoRun allows to run through the all items timebased
|
|
38
|
+
* 0 means it is turned off. Other values are the timer in ms,
|
|
39
|
+
* which will hide the arrows.
|
|
40
|
+
*
|
|
41
|
+
* @member {int} autoRun=0
|
|
42
|
+
*/
|
|
43
|
+
autoRun_: 0,
|
|
34
44
|
/**
|
|
35
45
|
* @member {String[]} cls=['neo-carousel']
|
|
36
46
|
*/
|
|
@@ -82,6 +92,8 @@ class Carousel extends Component {
|
|
|
82
92
|
let me = this,
|
|
83
93
|
domListeners = me.domListeners;
|
|
84
94
|
|
|
95
|
+
if(me.autoRun) return;
|
|
96
|
+
|
|
85
97
|
domListeners.push({
|
|
86
98
|
click: {
|
|
87
99
|
fn : me.onCarouselBtnClick,
|
|
@@ -93,6 +105,30 @@ class Carousel extends Component {
|
|
|
93
105
|
me.domListeners = domListeners;
|
|
94
106
|
}
|
|
95
107
|
|
|
108
|
+
/**
|
|
109
|
+
* Triggered after autoRun config got changed
|
|
110
|
+
* @param {boolean|integer} value
|
|
111
|
+
* @protected
|
|
112
|
+
*/
|
|
113
|
+
afterSetAutoRun(value, oldValue) {
|
|
114
|
+
let me = this;
|
|
115
|
+
|
|
116
|
+
if(!value) return;
|
|
117
|
+
|
|
118
|
+
TaskManager.start({
|
|
119
|
+
id: this.id,
|
|
120
|
+
interval: value,
|
|
121
|
+
run: function() {
|
|
122
|
+
me.onCarouselBtnClick('forward');
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
let vdom = this._vdom;
|
|
127
|
+
vdom.cn[0].cn[0].removeDom = true;
|
|
128
|
+
|
|
129
|
+
this._vdom = vdom;
|
|
130
|
+
}
|
|
131
|
+
|
|
96
132
|
/**
|
|
97
133
|
* Triggered after the store config got changed
|
|
98
134
|
* @param {Neo.data.Store|Object|null} value
|
|
@@ -188,7 +224,7 @@ class Carousel extends Component {
|
|
|
188
224
|
*/
|
|
189
225
|
onCarouselBtnClick(event) {
|
|
190
226
|
let me = this,
|
|
191
|
-
action = event.target.data.carouselaction,
|
|
227
|
+
action = (typeof event === 'string') ? event : event.target.data.carouselaction,
|
|
192
228
|
store = me.store,
|
|
193
229
|
countItems = store.getCount(),
|
|
194
230
|
vdom = me.vdom,
|
|
@@ -182,18 +182,30 @@ class Component extends Base {
|
|
|
182
182
|
if (listeners) {
|
|
183
183
|
Object.entries(listeners).forEach(([key, value]) => {
|
|
184
184
|
if (key !== 'scope' && key !== 'delegate') {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
}
|
|
185
|
+
if (Neo.isString(value)) {
|
|
186
|
+
eventHandler = value;
|
|
187
|
+
handlerScope = me.getHandlerScope(eventHandler);
|
|
188
|
+
|
|
189
|
+
if (!handlerScope) {
|
|
190
|
+
Logger.logError('Unknown event handler for', eventHandler, component);
|
|
191
|
+
} else {
|
|
192
|
+
listeners[key] = {};
|
|
193
|
+
listeners[key].fn = handlerScope[eventHandler].bind(handlerScope);
|
|
195
194
|
}
|
|
196
|
-
}
|
|
195
|
+
} else {
|
|
196
|
+
value.forEach(listener => {
|
|
197
|
+
if (Neo.isObject(listener) && listener.hasOwnProperty('fn') && Neo.isString(listener.fn)) {
|
|
198
|
+
eventHandler = listener.fn;
|
|
199
|
+
handlerScope = me.getHandlerScope(eventHandler);
|
|
200
|
+
|
|
201
|
+
if (!handlerScope) {
|
|
202
|
+
Logger.logError('Unknown event handler for', eventHandler, component);
|
|
203
|
+
} else {
|
|
204
|
+
listener.fn = handlerScope[eventHandler].bind(handlerScope);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
});
|
|
208
|
+
}
|
|
197
209
|
}
|
|
198
210
|
});
|
|
199
211
|
}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import Base from './Base.mjs';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @class Neo.manager.Task
|
|
5
|
+
* @extends Neo.manager.Base
|
|
6
|
+
* @singleton
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* import TaskManager from '../../../node_modules/neo.mjs/src/manager/Task.mjs';
|
|
10
|
+
*
|
|
11
|
+
* task = {
|
|
12
|
+
* args: [clockDom], // arguments passed into the run fn
|
|
13
|
+
* addCountToArgs: true, // adds the count to the arguments
|
|
14
|
+
* fireOnStart: false // run before the first interval
|
|
15
|
+
* id: 'clockcounter', // id for the task or autocreated
|
|
16
|
+
* interval: 1000, // in ms
|
|
17
|
+
* onError: function(){}, // runs in case an error occurred
|
|
18
|
+
* repeat: 10, // stopAfterTenTimes
|
|
19
|
+
* run: function(clock) { // function to run
|
|
20
|
+
* clock.setHtml(new Date());
|
|
21
|
+
* },
|
|
22
|
+
* scope: this // scope of the function
|
|
23
|
+
* };
|
|
24
|
+
*
|
|
25
|
+
* TaskManager.start(task); // or taskId if exists
|
|
26
|
+
* TaskManager.stop('clockcounter', remove); // false to not remove it from the TaskManager
|
|
27
|
+
* TaskManager.stopAll(remove);
|
|
28
|
+
*
|
|
29
|
+
* TaskManager.createTask(task);
|
|
30
|
+
* TaskManager.remove(taskId);
|
|
31
|
+
*
|
|
32
|
+
* TaskManager.run(taskId);
|
|
33
|
+
* TaskManager.get(taskId).repeat = 20;
|
|
34
|
+
*/
|
|
35
|
+
class Task extends Base {
|
|
36
|
+
static getConfig() {return {
|
|
37
|
+
/**
|
|
38
|
+
* @member {String} className='Neo.manager.Task'
|
|
39
|
+
* @protected
|
|
40
|
+
*/
|
|
41
|
+
className: 'Neo.manager.Task',
|
|
42
|
+
/**
|
|
43
|
+
* @member {Boolean} singleton=true
|
|
44
|
+
* @protected
|
|
45
|
+
*/
|
|
46
|
+
singleton: true
|
|
47
|
+
}}
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* Adds a task to collection.
|
|
51
|
+
* Typically used via `start(task)`
|
|
52
|
+
* @param {Object} task
|
|
53
|
+
* @returns {Object}
|
|
54
|
+
*/
|
|
55
|
+
createTask(task) {
|
|
56
|
+
let me = this;
|
|
57
|
+
|
|
58
|
+
if (!task.id) {
|
|
59
|
+
task.id = Neo.core.IdGenerator.getId('task');
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
task.scope && task.run.bind(task.scope);
|
|
63
|
+
task.addCountToArgs && task.args.push(0);
|
|
64
|
+
|
|
65
|
+
task = {
|
|
66
|
+
args : [],
|
|
67
|
+
isRunning : false,
|
|
68
|
+
onError : Neo.emptyFn,
|
|
69
|
+
runCount : 0,
|
|
70
|
+
runner : null,
|
|
71
|
+
runOnStart: false,
|
|
72
|
+
...task
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
me.register(task);
|
|
76
|
+
|
|
77
|
+
return task;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* Removes a task from collection.
|
|
82
|
+
* @param {String} taskId
|
|
83
|
+
*/
|
|
84
|
+
removeTask(taskId) {
|
|
85
|
+
this.unregister(taskId);
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Runs a task from collection.
|
|
90
|
+
* @param {String} taskId
|
|
91
|
+
*/
|
|
92
|
+
run(taskId) {
|
|
93
|
+
let me = this,
|
|
94
|
+
task = me.get(taskId);
|
|
95
|
+
|
|
96
|
+
if (task.isRunning) {
|
|
97
|
+
Neo.logError('[Neo.util.TaskManager] Task is already running');
|
|
98
|
+
return task;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
try {
|
|
102
|
+
let fn = function(task) {
|
|
103
|
+
task.runCount++;
|
|
104
|
+
|
|
105
|
+
if(task.addCountToArgs) {
|
|
106
|
+
task.args[task.args.length - 1] = task.runCount;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
if (task.repeat && task.runCount === task.repeat) {
|
|
110
|
+
me.stop(task.id);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
task.run(...task.args);
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
task.isRunning = true;
|
|
117
|
+
task.runner = setInterval(fn, task.interval, task);
|
|
118
|
+
} catch (taskError) {
|
|
119
|
+
Neo.logError('[Neo.util.TaskManager] Error while running task ' + task.id);
|
|
120
|
+
task.onError(taskError);
|
|
121
|
+
task.isRunning = false;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Adds a task and runs it.
|
|
127
|
+
* @param {Object|String} task or taskId
|
|
128
|
+
* @returns {Object}
|
|
129
|
+
*/
|
|
130
|
+
start(task) {
|
|
131
|
+
let me = this;
|
|
132
|
+
|
|
133
|
+
if (Neo.isString(task)) {
|
|
134
|
+
task = me.get(task);
|
|
135
|
+
!task && Neo.logError('[Neo.util.TaskManager] You passed a taskId which does not exits');
|
|
136
|
+
} else if (!task.id || !me.get(task.id)){
|
|
137
|
+
task = me.createTask(task);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
if (task.isRunning) {
|
|
141
|
+
Neo.logError('[Neo.util.TaskManager] Task is already running');
|
|
142
|
+
return task;
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (task.runOnStart) {
|
|
146
|
+
task.runCount++;
|
|
147
|
+
task.run(...task.args);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
me.run(task.id);
|
|
151
|
+
|
|
152
|
+
return task;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Stops a task and resets configs.
|
|
157
|
+
* If remove is true it will remove the task from the collection
|
|
158
|
+
* @param {String} taskId
|
|
159
|
+
* @param {Boolean} remove
|
|
160
|
+
*/
|
|
161
|
+
stop(taskId, remove) {
|
|
162
|
+
let task = this.get(taskId);
|
|
163
|
+
|
|
164
|
+
task.isRunning && clearInterval(task.runner);
|
|
165
|
+
|
|
166
|
+
if (remove) {
|
|
167
|
+
this.removeTask(task);
|
|
168
|
+
} else {
|
|
169
|
+
task.isRunning = false;
|
|
170
|
+
task.runCount = 0;
|
|
171
|
+
task.runner = null;
|
|
172
|
+
|
|
173
|
+
if(task.addCountToArgs) {
|
|
174
|
+
task.args[task.args.length - 1] = 0;
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
/**
|
|
180
|
+
* Stops all running tasks from collection.
|
|
181
|
+
* If remove is true, it will remove all tasks from Manager
|
|
182
|
+
* @param {Boolean} remove
|
|
183
|
+
*/
|
|
184
|
+
stopAll(remove) {
|
|
185
|
+
Object.keys(this.map).forEach(key => {
|
|
186
|
+
this.stop(key, remove);
|
|
187
|
+
});
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
Neo.applyClassConfig(Task);
|
|
192
|
+
|
|
193
|
+
let instance = Neo.create(Task);
|
|
194
|
+
|
|
195
|
+
Neo.applyToGlobalNs(instance);
|
|
196
|
+
|
|
197
|
+
export default instance;
|
package/src/model/Component.mjs
CHANGED
|
@@ -124,7 +124,10 @@ class Component extends Base {
|
|
|
124
124
|
* @protected
|
|
125
125
|
*/
|
|
126
126
|
beforeSetStores(value, oldValue) {
|
|
127
|
+
let controller = this.component.getController();
|
|
128
|
+
|
|
127
129
|
value && Object.entries(value).forEach(([key, storeValue]) => {
|
|
130
|
+
controller?.parseConfig(storeValue);
|
|
128
131
|
value[key] = ClassSystemUtil.beforeSetInstance(storeValue);
|
|
129
132
|
});
|
|
130
133
|
|
package/src/table/View.mjs
CHANGED
|
@@ -86,7 +86,7 @@ class View extends Component {
|
|
|
86
86
|
|
|
87
87
|
data.push({
|
|
88
88
|
tag : 'tr',
|
|
89
|
-
id
|
|
89
|
+
id,
|
|
90
90
|
cls : trCls,
|
|
91
91
|
cn : [],
|
|
92
92
|
tabIndex: '-1'
|
|
@@ -108,7 +108,7 @@ class View extends Component {
|
|
|
108
108
|
rendererOutput = column.renderer.call(column.rendererScope || container, {
|
|
109
109
|
dataField: column.dataField,
|
|
110
110
|
index : i,
|
|
111
|
-
record
|
|
111
|
+
record,
|
|
112
112
|
value : rendererValue
|
|
113
113
|
});
|
|
114
114
|
|
package/src/worker/App.mjs
CHANGED
|
@@ -118,10 +118,10 @@ class App extends Base {
|
|
|
118
118
|
if (Neo.config.themes.length > 0) {
|
|
119
119
|
className = className || proto.className;
|
|
120
120
|
|
|
121
|
-
let me
|
|
122
|
-
lAppName
|
|
123
|
-
cssMap
|
|
124
|
-
parent
|
|
121
|
+
let me = this,
|
|
122
|
+
lAppName = appName.toLowerCase(),
|
|
123
|
+
cssMap = Neo.cssMap,
|
|
124
|
+
parent = proto?.__proto__,
|
|
125
125
|
classPath, fileName, mapClassName, ns, themeFolders;
|
|
126
126
|
|
|
127
127
|
if (!cssMap) {
|