neo.mjs 7.7.0 → 7.8.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 (39) hide show
  1. package/apps/ServiceWorker.mjs +2 -2
  2. package/apps/portal/index.html +1 -1
  3. package/apps/portal/neo-config.json +1 -0
  4. package/apps/portal/view/ViewportController.mjs +20 -4
  5. package/apps/portal/view/home/FooterContainer.mjs +1 -1
  6. package/apps/portal/view/learn/{ContentView.mjs → ContentComponent.mjs} +98 -38
  7. package/apps/portal/view/learn/CubeLayoutButton.mjs +77 -0
  8. package/apps/portal/view/learn/MainContainerController.mjs +1 -0
  9. package/apps/portal/view/learn/PageContainer.mjs +4 -4
  10. package/apps/shareddialog/view/DemoDialog.mjs +2 -10
  11. package/apps/shareddialog/view/MainContainerController.mjs +107 -105
  12. package/buildScripts/webpack/json/myApps.template.json +1 -1
  13. package/examples/ServiceWorker.mjs +2 -2
  14. package/package.json +3 -3
  15. package/resources/data/deck/learnneo/pages/Welcome.md +1 -1
  16. package/resources/data/deck/learnneo/pages/benefits/FormsEngine.md +1 -1
  17. package/resources/data/deck/learnneo/pages/guides/PortalApp.md +35 -0
  18. package/resources/data/deck/learnneo/tree.json +1 -0
  19. package/src/DefaultConfig.mjs +2 -2
  20. package/src/collection/Base.mjs +4 -3
  21. package/src/container/Base.mjs +12 -7
  22. package/src/draggable/DragProxyComponent.mjs +10 -20
  23. package/src/main/addon/Navigator.mjs +34 -32
  24. package/src/main/addon/WindowPosition.mjs +9 -11
  25. package/src/plugin/Resizable.mjs +12 -6
  26. package/src/tab/Container.mjs +5 -1
  27. package/test/siesta/siesta.js +1 -0
  28. package/test/siesta/tests/ManagerInstance.mjs +35 -0
  29. package/apps/krausest/README.md +0 -3
  30. package/apps/krausest/TableCollection.mjs +0 -46
  31. package/apps/krausest/app.mjs +0 -8
  32. package/apps/krausest/css/currentStyle.css +0 -2
  33. package/apps/krausest/css/main.css +0 -26
  34. package/apps/krausest/index.html +0 -12
  35. package/apps/krausest/neo-config.json +0 -10
  36. package/apps/krausest/view/MainComponent.mjs +0 -122
  37. package/apps/krausest/view/MainComponentController.mjs +0 -33
  38. package/apps/krausest/view/TableComponent.mjs +0 -152
  39. /package/resources/scss/src/apps/portal/learn/{ContentView.scss → ContentComponent.scss} +0 -0
@@ -440,40 +440,42 @@ class Navigator extends Base {
440
440
  subject = data.subject = DomAccess.getElement(data.id),
441
441
  eventSource = data.eventSource = data.eventSource ? DomAccess.getElement(data.eventSource) : subject;
442
442
 
443
- subject.$navigator = data;
443
+ if (subject) {
444
+ subject.$navigator = data;
444
445
 
445
- if (!data.activeCls) {
446
- data.activeCls = 'neo-navigator-active-item'
447
- }
448
-
449
- // Ensure that only *one* of the child focusables is actually tabbable.
450
- // We use arrow keys for internal navigation. TAB must move out.
451
- me.fixItemFocusability(data);
452
-
453
- // Finds a focusable item starting from a descendant el within one of our selector items
454
- data.findFocusable = el => DomUtils.closest(el, el =>
455
- // We're looking for an element that is focusable
456
- DomUtils.isFocusable(el) &&
457
- // And within our subject element
458
- (subject.compareDocumentPosition(el) & Node.DOCUMENT_POSITION_CONTAINED_BY) &&
459
- // And within an element that matches our selector
460
- el.closest(data.selector)
461
- );
462
-
463
- // TreeWalker so that we can easily move between navigable elements within the target.
464
- data.treeWalker = document.createTreeWalker(subject, NodeFilter.SHOW_ELEMENT, node => me.navigateNodeFilter(node, data));
465
-
466
- // We have to know when the DOM mutates in case the active item is removed.
467
- (data.targetMutationMonitor = new MutationObserver(e => me.navigateTargetChildListChange(e, data))).observe(subject, {
468
- childList : true,
469
- subtree : true
470
- });
446
+ if (!data.activeCls) {
447
+ data.activeCls = 'neo-navigator-active-item'
448
+ }
471
449
 
472
- eventSource.addEventListener('keydown', data.l1 = e => me.navigateKeyDownHandler(e, data));
473
- subject.addEventListener('mousedown', data.l2 = e => me.navigateMouseDownHandler(e, data));
474
- subject.addEventListener('click', data.l3 = e => me.navigateClickHandler(e, data));
475
- subject.addEventListener('focusin', data.l4 = e => me.navigateFocusInHandler(e, data));
476
- subject.addEventListener('focusout', data.l5 = e => me.navigateFocusOutHandler(e, data));
450
+ // Ensure that only *one* of the child focusables is actually tabbable.
451
+ // We use arrow keys for internal navigation. TAB must move out.
452
+ me.fixItemFocusability(data);
453
+
454
+ // Finds a focusable item starting from a descendant el within one of our selector items
455
+ data.findFocusable = el => DomUtils.closest(el, el =>
456
+ // We're looking for an element that is focusable
457
+ DomUtils.isFocusable(el) &&
458
+ // And within our subject element
459
+ (subject.compareDocumentPosition(el) & Node.DOCUMENT_POSITION_CONTAINED_BY) &&
460
+ // And within an element that matches our selector
461
+ el.closest(data.selector)
462
+ );
463
+
464
+ // TreeWalker so that we can easily move between navigable elements within the target.
465
+ data.treeWalker = document.createTreeWalker(subject, NodeFilter.SHOW_ELEMENT, node => me.navigateNodeFilter(node, data));
466
+
467
+ // We have to know when the DOM mutates in case the active item is removed.
468
+ (data.targetMutationMonitor = new MutationObserver(e => me.navigateTargetChildListChange(e, data))).observe(subject, {
469
+ childList : true,
470
+ subtree : true
471
+ });
472
+
473
+ eventSource.addEventListener('keydown', data.l1 = e => me.navigateKeyDownHandler(e, data));
474
+ subject.addEventListener('mousedown', data.l2 = e => me.navigateMouseDownHandler(e, data));
475
+ subject.addEventListener('click', data.l3 = e => me.navigateClickHandler(e, data));
476
+ subject.addEventListener('focusin', data.l4 = e => me.navigateFocusInHandler(e, data));
477
+ subject.addEventListener('focusout', data.l5 = e => me.navigateFocusOutHandler(e, data))
478
+ }
477
479
  }
478
480
 
479
481
  /**
@@ -67,13 +67,13 @@ class WindowPosition extends Base {
67
67
  construct(config) {
68
68
  super.construct(config);
69
69
 
70
- let me = this,
71
- win = window;
70
+ let me = this,
71
+ {screenLeft, screenTop} = window;
72
72
 
73
- me.screenLeft = win.screenLeft;
74
- me.screenTop = win.screenTop;
73
+ me.screenLeft = screenLeft;
74
+ me.screenTop = screenTop;
75
75
 
76
- win.addEventListener('mouseout', me.onMouseOut.bind(me))
76
+ window.addEventListener('mouseout', me.onMouseOut.bind(me))
77
77
  }
78
78
 
79
79
  /**
@@ -96,15 +96,13 @@ class WindowPosition extends Base {
96
96
  *
97
97
  */
98
98
  adjustPositions() {
99
- let position;
100
-
101
99
  Object.entries(this.windows).forEach(([key, value]) => {
102
- position = this.getPosition(value);
100
+ let {left, top} = this.getPosition(value);
103
101
 
104
102
  Neo.Main.windowMoveTo({
105
103
  windowName: key,
106
- x : position.left,
107
- y : position.top
104
+ x : left,
105
+ y : top
108
106
  })
109
107
  })
110
108
  }
@@ -199,7 +197,7 @@ class WindowPosition extends Base {
199
197
  /**
200
198
  * @param {Object} event
201
199
  */
202
- onResize(event) { console.log('onResize');
200
+ onResize(event) {
203
201
  let me = this,
204
202
  win = window,
205
203
  height, width;
@@ -389,12 +389,12 @@ class Resizable extends Base {
389
389
  * @param {Object} data
390
390
  */
391
391
  onDragStart(data) {
392
- let me = this,
393
- containerId = me.boundaryContainerId,
394
- i = 0,
395
- len = data.path.length,
396
- {appName, owner} = me,
397
- style = owner.wrapperStyle, // todo: delegation target
392
+ let me = this,
393
+ containerId = me.boundaryContainerId,
394
+ i = 0,
395
+ len = data.path.length,
396
+ {appName, owner, windowId} = me,
397
+ style = owner.wrapperStyle, // todo: delegation target
398
398
  target, vdom, vdomStyle;
399
399
 
400
400
  me.isDragging = true;
@@ -429,11 +429,16 @@ class Resizable extends Base {
429
429
  vdom = Neo.clone(owner.vdom, true);
430
430
  vdomStyle = vdom.style;
431
431
 
432
+ delete vdom.height;
433
+ delete vdom.width;
434
+
432
435
  delete vdomStyle.height;
433
436
  delete vdomStyle.left;
434
437
  delete vdomStyle.top;
435
438
  delete vdomStyle.width;
436
439
 
440
+ vdomStyle.opacity = 0.7;
441
+
437
442
  me.dragZone = Neo.create({
438
443
  module : DragZone,
439
444
  appName,
@@ -441,6 +446,7 @@ class Resizable extends Base {
441
446
  dragElement : vdom,
442
447
  moveInMainThread : false,
443
448
  owner,
449
+ windowId,
444
450
  ...me.dragZoneConfig
445
451
  })
446
452
  } else {
@@ -57,6 +57,10 @@ class Container extends BaseContainer {
57
57
  * @member {Object|null} headerToolbarDefaults=null
58
58
  */
59
59
  headerToolbarDefaults: null,
60
+ /**
61
+ * @member {Object|null} layout=null
62
+ */
63
+ layout: null,
60
64
  /**
61
65
  * True to not apply a background effect to the tab header container
62
66
  * @member {Boolean} plain_=true
@@ -514,7 +518,7 @@ class Container extends BaseContainer {
514
518
  *
515
519
  */
516
520
  onConstructed() {
517
- this._layout = this.getLayoutConfig(); // silent update
521
+ this.layout = this.getLayoutConfig(); // silent update
518
522
  super.onConstructed()
519
523
  }
520
524
 
@@ -20,6 +20,7 @@ project.plan(
20
20
  'tests/ClassConfigsAndFields.mjs',
21
21
  'tests/ClassSystem.mjs',
22
22
  'tests/CollectionBase.mjs',
23
+ 'tests/ManagerInstance.mjs',
23
24
  'tests/Rectangle.mjs',
24
25
  'tests/VdomHelper.mjs',
25
26
  'tests/VdomCalendar.mjs',
@@ -0,0 +1,35 @@
1
+ import Neo from '../../../src/Neo.mjs';
2
+ import * as core from '../../../src/core/_export.mjs';
3
+ import InstanceManager from '../../../src/manager/Instance.mjs';
4
+
5
+ let startCount;
6
+
7
+ StartTest(t => {
8
+ t.it('Module imports', t => {
9
+ t.ok(Neo, 'Neo is imported as a JS module');
10
+ t.ok(InstanceManager, 'InstanceManager is imported as a JS module');
11
+ });
12
+
13
+ t.it('Adding & removing items', t => {
14
+ startCount = InstanceManager.getCount();
15
+
16
+ t.diag("Create 3 Neo instances");
17
+
18
+ const
19
+ item1 = Neo.create('Neo.core.Base'),
20
+ item2 = Neo.create('Neo.core.Base'),
21
+ item3 = Neo.create('Neo.core.Base');
22
+
23
+ t.is(InstanceManager.getCount() - startCount, 3, '3 instances got added');
24
+
25
+ t.is(InstanceManager.findFirst(item2), item2, 'Found item via reference');
26
+
27
+ t.is(InstanceManager.findFirst({id: item3.id}), item3, 'Found item via id');
28
+
29
+ item1.destroy();
30
+ item2.destroy();
31
+ item3.destroy()
32
+
33
+ t.is(InstanceManager.getCount(), startCount, '3 instances got removed');
34
+ });
35
+ });
@@ -1,3 +0,0 @@
1
- neo.mjs based demo implementation for:
2
-
3
- https://github.com/krausest/js-framework-benchmark
@@ -1,46 +0,0 @@
1
- import BaseCollection from '../../src/collection/Base.mjs';
2
-
3
- function _random(max) {
4
- return Math.round(Math.random()*1000)%max;
5
- }
6
-
7
- /**
8
- * @class NeoApp.TableCollection
9
- * @extends Neo.collection.Base
10
- */
11
- class TableCollection extends BaseCollection {
12
- static config = {
13
- /**
14
- * @member {String} className='NeoApp.TableCollection'
15
- * @protected
16
- */
17
- className: 'NeoApp.TableCollection',
18
- /**
19
- * @member {Number} idCounter=1
20
- */
21
- idCounter: 1
22
- }
23
-
24
- /**
25
- * @param {Number} count
26
- * @returns {Object[]}
27
- */
28
- buildData(count=1000) {
29
- let adjectives = ['pretty', 'large', 'big', 'small', 'tall', 'short', 'long', 'handsome', 'plain', 'quaint', 'clean', 'elegant', 'easy', 'angry', 'crazy', 'helpful', 'mushy', 'odd', 'unsightly', 'adorable', 'important', 'inexpensive', 'cheap', 'expensive', 'fancy'],
30
- colours = ['red', 'yellow', 'blue', 'green', 'pink', 'brown', 'purple', 'brown', 'white', 'black', 'orange'],
31
- nouns = ['table', 'chair', 'house', 'bbq', 'desk', 'car', 'pony', 'cookie', 'sandwich', 'burger', 'pizza', 'mouse', 'keyboard'],
32
- data = [],
33
- i = 0;
34
-
35
- for (; i < count; i++) {
36
- data.push({
37
- id : this.idCounter++,
38
- label: adjectives[_random(adjectives.length)] + ' ' + colours[_random(colours.length)] + ' ' + nouns[_random(nouns.length)]
39
- });
40
- }
41
-
42
- return data;
43
- }
44
- }
45
-
46
- export default Neo.setupClass(TableCollection);;
@@ -1,8 +0,0 @@
1
- import MainComponent from './view/MainComponent.mjs';
2
-
3
- export const onStart = () => Neo.app({
4
- appPath : 'apps/neoapp/',
5
- mainView: MainComponent,
6
- name : 'NeoApp',
7
- parentId: 'main'
8
- });
@@ -1,2 +0,0 @@
1
- @import url("https://stackpath.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css");
2
- @import url("./main.css");
@@ -1,26 +0,0 @@
1
- body {
2
- padding: 10px 0 0 0;
3
- margin: 0;
4
- overflow-y: scroll;
5
- }
6
- #duration {
7
- padding-top: 0px;
8
- }
9
- .jumbotron {
10
- padding-top:10px;
11
- padding-bottom:10px;
12
- }
13
- .test-data a {
14
- display: block;
15
- }
16
- .preloadicon {
17
- position: absolute;
18
- top:-20px;
19
- left:-20px;
20
- }
21
- .col-sm-6.smallpad {
22
- padding: 5px;
23
- }
24
- .jumbotron .row h1 {
25
- font-size: 40px;
26
- }
@@ -1,12 +0,0 @@
1
- <!DOCTYPE html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="utf-8"/>
5
- <title>neo.mjs-"keyed"</title>
6
- <link href="./css/currentStyle.css" rel="stylesheet"/>
7
- </head>
8
- <body>
9
- <div id="main"></div>
10
- <script src="../../src/MicroLoader.mjs" type="module"></script>
11
- </body>
12
- </html>
@@ -1,10 +0,0 @@
1
- {
2
- "appPath": "apps/krausest/app.mjs",
3
- "basePath": "../../",
4
- "environment": "development",
5
- "mainPath": "./Main.mjs",
6
- "mainThreadAddons": ["CloneNode"],
7
- "themes": [],
8
- "useFontAwesome": false,
9
- "useTouchEvents": false
10
- }
@@ -1,122 +0,0 @@
1
- import Base from '../../../src/component/Base.mjs';
2
- import MainComponentController from './MainComponentController.mjs';
3
- import TableComponent from './TableComponent.mjs';
4
- import VdomUtil from '../../../src/util/VDom.mjs';
5
-
6
- /**
7
- * @class NeoApp.view.MainComponent
8
- * @extends Neo.component.Base
9
- */
10
- class MainComponent extends Base {
11
- static config = {
12
- /**
13
- * @member {String} className='NeoApp.view.MainComponent'
14
- * @protected
15
- */
16
- className: 'NeoApp.view.MainComponent',
17
- /**
18
- * True automatically mounts a component after being rendered.
19
- * @member {Boolean} autoMount=true
20
- */
21
- autoMount: true,
22
- /**
23
- * @member {String[]} baseCls=['container']
24
- */
25
- baseCls: ['container'],
26
- /**
27
- * @member {Neo.controller.Component} controller=MainComponentController
28
- */
29
- controller: MainComponentController,
30
- /**
31
- * @member {Object[]} domListeners
32
- * @protected
33
- */
34
- domListeners: [{
35
- click : 'onButtonClick',
36
- delegate: '.btn'
37
- }],
38
- /**
39
- * @member {NeoApp.view.TableComponent|null} table=null
40
- */
41
- table: null,
42
- /**
43
- * @member {Object} _vdom
44
- */
45
- _vdom:
46
- {cls: ['container'], cn: [
47
- {cls: ['jumbotron'], cn: [
48
- {cls: ['row'], cn: [
49
- {cls: ['col-md-6'], cn: [
50
- {cls: ['row'], cn: [
51
- {tag: 'h1', html: 'neo.mjs'}
52
- ]}
53
- ]},
54
- {cls: ['col-md-6'], cn: [
55
- {cls: ['row'], flag: 'row', cn: []}
56
- ]}
57
- ]}
58
- ]},
59
- {tag: 'span', cls: ['preloadicon', 'glyphicon', 'glyphicon-remove'], 'aria-hidden': true}
60
- ]}
61
- }
62
-
63
- /**
64
- * @param {Object} config
65
- */
66
- construct(config) {
67
- super.construct(config);
68
-
69
- this.createColumns(); // silent vdom update
70
- this.createTable();
71
- }
72
-
73
- /**
74
- *
75
- */
76
- createColumns() {
77
- let me = this,
78
- vdom = me.vdom,
79
- row = VdomUtil.getByFlag(vdom, 'row'),
80
- i = 0,
81
- item,
82
-
83
- map = [
84
- {id: 'run', html: 'Create 1,000 rows'},
85
- {id: 'runlots', html: 'Create 10,000 rows'},
86
- {id: 'add', html: 'Append 1,000 rows'},
87
- {id: 'update', html: 'Update every 10th row'},
88
- {id: 'clear', html: 'Clear'},
89
- {id: 'swaprows', html: 'Swap Rows'}
90
- ];
91
-
92
- for (; i < 6; i++) {
93
- item = map[i];
94
-
95
- row.cn.push(
96
- {cls: ['col-sm-6 smallpad'], cn: [
97
- {tag: 'button', type: 'button', cls: ['btn', 'btn-primary', 'btn-block'], id: item.id, html: item.html}
98
- ]}
99
- );
100
- }
101
- }
102
-
103
- /**
104
- *
105
- */
106
- createTable() {
107
- let me = this;
108
-
109
- me.table = Neo.create({
110
- module : TableComponent,
111
- appName : me.appName,
112
- parentId : me.id,
113
- reference: 'table'
114
- });
115
-
116
- me.vdom.cn.splice(1, 0, me.table.vdom);
117
-
118
- me.update();
119
- }
120
- }
121
-
122
- export default Neo.setupClass(MainComponent);
@@ -1,33 +0,0 @@
1
- import ComponentController from '../../../src/controller/Component.mjs';
2
-
3
- /**
4
- * @class NeoApp.view.MainComponentController
5
- * @extends Neo.controller.Component
6
- */
7
- class MainComponentController extends ComponentController {
8
- static config = {
9
- /**
10
- * @member {String} className='NeoApp.view.MainComponentController'
11
- * @protected
12
- */
13
- className: 'NeoApp.view.MainComponentController'
14
- }
15
-
16
- /**
17
- * @param {Object} data
18
- */
19
- onButtonClick(data) {
20
- let me = this,
21
- table = me.getReference('table');
22
-
23
- switch (data.path[0].id) {
24
- case 'add' : table.add(); break;
25
- case 'clear' : table.clear(); break;
26
- case 'runlots': table.runlots(); break;
27
- }
28
-
29
- // console.log(data.path[0].id);
30
- }
31
- }
32
-
33
- export default Neo.setupClass(MainComponentController);
@@ -1,152 +0,0 @@
1
- import Base from '../../../src/component/Base.mjs';
2
- import ClassSystemUtil from '../../../src/util/ClassSystem.mjs';
3
- import TableCollection from '../TableCollection.mjs';
4
-
5
- function _random(max) {
6
- return Math.round(Math.random()*1000)%max;
7
- }
8
-
9
- /**
10
- * @class NeoApp.view.TableComponent
11
- * @extends Neo.component.Base
12
- */
13
- class TableComponent extends Base {
14
- static config = {
15
- /**
16
- * @member {String} className='NeoApp.view.TableComponent'
17
- * @protected
18
- */
19
- className: 'NeoApp.view.TableComponent',
20
- /**
21
- * @member {String[]} baseCls=['table','table-hover','table-striped','test-data']
22
- */
23
- baseCls: ['table', 'table-hover', 'table-striped', 'test-data'],
24
- /**
25
- * @member {NeoApp.TableCollection|null} store_=TableCollection
26
- */
27
- store_: TableCollection,
28
- /**
29
- * @member {Object} _vdom
30
- */
31
- _vdom:
32
- {tag: 'table', cn: [
33
- {tag: 'tbody', id: 'tbody', cn: []}
34
- ]}
35
- }
36
-
37
- /**
38
- * @param {Object} config
39
- */
40
- construct(config) {
41
- super.construct(config);
42
-
43
- Neo.main.addon.CloneNode.createNode({
44
- id : this.id,
45
- tag : 'tr',
46
- html: [
47
- '<td class="col-md-1"></td>',
48
- '<td class="col-md-4"><a class="lbl"></a></td>',
49
- '<td class="col-md-1"><a class="remove"><span class="remove glyphicon glyphicon-remove" aria-hidden="true"></span></a></td>',
50
- '<td class="col-md-6"></td>'
51
- ].join(''),
52
- paths: {
53
- id : '0',
54
- label: '1/0'
55
- }
56
- });
57
- }
58
-
59
- /**
60
- *
61
- */
62
- add() {
63
- let me = this,
64
- store = me.store,
65
- items = store.buildData();
66
-
67
- store.add(items);
68
-
69
- Neo.main.addon.CloneNode.applyClones({
70
- data : items,
71
- id : me.id,
72
- parentId: 'tbody'
73
- });
74
-
75
- // this works pretty fast as well
76
- /*items.forEach(item => {
77
- me.vdom.cn[0].cn.push(me.createTableRow(item));
78
- });
79
-
80
- me.update();*/
81
- }
82
-
83
- /**
84
- * Triggered before the store config gets changed.
85
- * @param {Object|Neo.data.Store} value
86
- * @param {Object|Neo.data.Store} oldValue
87
- * @returns {Neo.data.Store}
88
- * @protected
89
- */
90
- beforeSetStore(value, oldValue) {
91
- oldValue && oldValue.destroy();
92
- return ClassSystemUtil.beforeSetInstance(value);
93
- }
94
-
95
- /**
96
- *
97
- */
98
- clear() {
99
- let me = this,
100
- store = me.store;
101
-
102
- if (store.getCount() > 0) {
103
- store.clear();
104
- Neo.applyDeltas(me.appName, {
105
- action: 'setTextContent',
106
- id : 'tbody',
107
- value : ''
108
- });
109
- }
110
- }
111
-
112
- /**
113
- * @param {Object} data
114
- * @param {Number} data.id
115
- * @param {String} data.label
116
- * @returns {Object}
117
- */
118
- createTableRow(data) {
119
- return {tag: 'tr', cn: [
120
- {tag: 'td', cls: ['col-md-1'], html: data.id},
121
- {tag: 'td', cls: ['col-md-4'], cn: [
122
- {tag: 'a', cls: ['lbl'], html: data.label}
123
- ]},
124
- {tag: 'td', cls: ['col-md-1'], cn: [
125
- {tag: 'a', cls: ['remove'], cn: [
126
- {tag: 'span', cls: ['remove', 'glyphicon', 'glyphicon-remove'], 'aria-hidden': true}
127
- ]}
128
- ]},
129
- {tag: 'td', cls: ['col-md-6']}
130
- ]};
131
- }
132
-
133
- /**
134
- *
135
- */
136
- runlots() {
137
- let me = this,
138
- store = me.store,
139
- items = store.buildData(10000);
140
-
141
- me.clear();
142
- store.add(items);
143
-
144
- Neo.main.addon.CloneNode.applyClones({
145
- data : items,
146
- id : me.id,
147
- parentId: 'tbody'
148
- });
149
- }
150
- }
151
-
152
- export default Neo.setupClass(TableComponent);