neo.mjs 6.10.4 → 6.10.5

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 (70) hide show
  1. package/apps/ServiceWorker.mjs +2 -2
  2. package/apps/form/model/SideNav.mjs +3 -3
  3. package/apps/form/view/SideNavList.mjs +8 -3
  4. package/apps/form/view/ViewportController.mjs +6 -7
  5. package/apps/portal/Overwrites.mjs +21 -0
  6. package/apps/portal/app.mjs +7 -0
  7. package/apps/portal/data/blog.json +743 -0
  8. package/apps/portal/index.html +15 -0
  9. package/apps/portal/model/BlogPost.mjs +59 -0
  10. package/apps/{learnneo → portal}/model/Content.mjs +3 -3
  11. package/apps/{learnneo → portal}/neo-config.json +1 -1
  12. package/apps/portal/store/BlogPosts.mjs +43 -0
  13. package/apps/{learnneo → portal}/store/Content.mjs +2 -5
  14. package/apps/{learnneo/view/home → portal/view}/HeaderToolbar.mjs +22 -14
  15. package/apps/portal/view/Viewport.mjs +59 -0
  16. package/apps/portal/view/ViewportController.mjs +79 -0
  17. package/apps/portal/view/blog/Container.mjs +50 -0
  18. package/apps/portal/view/blog/List.mjs +173 -0
  19. package/apps/{newwebsite/view/Viewport.mjs → portal/view/home/MainContainer.mjs} +7 -8
  20. package/apps/{learnneo/view/home → portal/view/learn}/ContentTreeList.mjs +6 -6
  21. package/apps/{learnneo/view/home → portal/view/learn}/ContentView.mjs +3 -3
  22. package/apps/{learnneo/view → portal/view/learn}/LivePreview.mjs +6 -6
  23. package/apps/{learnneo/view/home → portal/view/learn}/MainContainer.mjs +27 -31
  24. package/apps/{learnneo/view/home → portal/view/learn}/MainContainerController.mjs +3 -3
  25. package/apps/{learnneo/view/home → portal/view/learn}/MainContainerModel.mjs +3 -3
  26. package/apps/website/Overwrites.mjs +16 -0
  27. package/apps/website/app.mjs +2 -1
  28. package/apps/website/view/blog/List.mjs +1 -1
  29. package/buildScripts/webpack/development/webpack.config.appworker.mjs +3 -1
  30. package/buildScripts/webpack/json/myApps.template.json +1 -1
  31. package/buildScripts/webpack/production/webpack.config.appworker.mjs +3 -1
  32. package/examples/ServiceWorker.mjs +2 -2
  33. package/package.json +2 -2
  34. package/resources/examples/data/formSideNav.json +19 -19
  35. package/resources/scss/src/apps/portal/blog/Container.scss +18 -0
  36. package/resources/scss/src/apps/portal/blog/List.scss +183 -0
  37. package/resources/scss/src/apps/{newwebsite/Viewport.scss → portal/home/MainContainer.scss} +1 -1
  38. package/resources/scss/src/tab/Strip.scss +1 -0
  39. package/resources/scss/theme-neo-light/button/Base.scss +5 -5
  40. package/resources/scss/theme-neo-light/tab/header/Button.scss +8 -7
  41. package/src/DefaultConfig.mjs +2 -2
  42. package/src/component/Base.mjs +5 -0
  43. package/src/component/Toast.mjs +5 -2
  44. package/src/container/Base.mjs +14 -0
  45. package/src/controller/Application.mjs +2 -1
  46. package/src/controller/Base.mjs +14 -3
  47. package/src/controller/Component.mjs +1 -1
  48. package/src/core/Base.mjs +7 -5
  49. package/src/data/RecordFactory.mjs +3 -3
  50. package/src/form/Container.mjs +50 -0
  51. package/src/form/field/Text.mjs +2 -2
  52. package/src/form/field/TextArea.mjs +5 -0
  53. package/src/main/addon/WindowPosition.mjs +24 -14
  54. package/src/tab/Strip.mjs +21 -36
  55. package/src/tab/header/Button.mjs +5 -7
  56. package/src/worker/Base.mjs +41 -29
  57. package/src/worker/Manager.mjs +4 -3
  58. package/src/worker/mixin/RemoteMethodAccess.mjs +20 -18
  59. package/apps/learnneo/app.mjs +0 -6
  60. package/apps/learnneo/index.html +0 -21
  61. package/apps/learnneo/view/Viewport.mjs +0 -52
  62. package/apps/learnneo/view/ViewportController.mjs +0 -19
  63. package/apps/newwebsite/app.mjs +0 -6
  64. package/apps/newwebsite/index.html +0 -13
  65. package/apps/newwebsite/neo-config.json +0 -7
  66. /package/resources/scss/src/apps/{learnneo/home → portal}/HeaderToolbar.scss +0 -0
  67. /package/resources/scss/src/apps/{learnneo → portal}/Viewport.scss +0 -0
  68. /package/resources/scss/src/apps/{learnneo/home → portal/learn}/ContentTreeList.scss +0 -0
  69. /package/resources/scss/src/apps/{learnneo/home → portal/learn}/ContentView.scss +0 -0
  70. /package/resources/scss/src/apps/{learnneo/home → portal/learn}/MainContainer.scss +0 -0
@@ -0,0 +1,15 @@
1
+ <!DOCTYPE HTML>
2
+ <html>
3
+ <head>
4
+ <meta name="viewport" content="width=device-width, initial-scale=1">
5
+ <meta charset="UTF-8">
6
+ <title>neo.mjs</title>
7
+ <link
8
+ href="https://fonts.googleapis.com/css2?family=Source+Code+Pro:ital,wght@0,300;0,400;0,500;0,600;0,700;1,300;1,400;1,500;1,600;1,700&family=Source+Sans+3:ital,wght@0,300;0,400;0,500;0,600;0,700;0,800;1,300;1,400;1,500;1,600;1,700;1,800&family=Source+Serif+4:ital,opsz,wght@0,8..60,400;0,8..60,500;0,8..60,600;0,8..60,700;1,8..60,400;1,8..60,500;1,8..60,600;1,8..60,700&display=swap"
9
+ rel="stylesheet">
10
+ <link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
11
+ </head>
12
+ <body>
13
+ <script src="../../src/MicroLoader.mjs" type="module"></script>
14
+ </body>
15
+ </html>
@@ -0,0 +1,59 @@
1
+ import Model from '../../../src/data/Model.mjs';
2
+
3
+ /**
4
+ * @class Portal.model.BlogPost
5
+ * @extends Neo.data.Model
6
+ */
7
+ class BlogPost extends Model {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='Portal.model.BlogPost'
11
+ * @protected
12
+ */
13
+ className: 'Portal.model.BlogPost',
14
+ /**
15
+ * @member {Object[]} fields
16
+ */
17
+ fields: [{
18
+ name: 'author',
19
+ type: 'String'
20
+ }, {
21
+ name: 'authorImage',
22
+ type: 'String'
23
+ }, {
24
+ name: 'backgroundColor',
25
+ type: 'String'
26
+ }, {
27
+ name: 'date',
28
+ type: 'String'
29
+ }, {
30
+ name: 'id',
31
+ type: 'Integer'
32
+ }, {
33
+ name: 'image',
34
+ type: 'String'
35
+ }, {
36
+ name: 'name',
37
+ type: 'String'
38
+ }, {
39
+ name: 'provider',
40
+ type: 'String'
41
+ },{
42
+ name: 'publisher',
43
+ type: 'String'
44
+ }, {
45
+ name: 'selectedInto',
46
+ type: 'Array'
47
+ }, {
48
+ name: 'type',
49
+ type: 'String'
50
+ }, {
51
+ name: 'url',
52
+ type: 'String'
53
+ }]
54
+ }
55
+ }
56
+
57
+ Neo.applyClassConfig(BlogPost);
58
+
59
+ export default BlogPost;
@@ -1,16 +1,16 @@
1
1
  import Model from '../../../src/data/Model.mjs';
2
2
 
3
3
  /**
4
- * @class LearnNeo.model.Content
4
+ * @class Portal.model.Content
5
5
  * @extends Neo.data.Model
6
6
  */
7
7
  class Content extends Model {
8
8
  static config = {
9
9
  /**
10
- * @member {String} className='LearnNeo.model.Content'
10
+ * @member {String} className='Portal.model.Content'
11
11
  * @protected
12
12
  */
13
- className: 'LearnNeo.model.Content',
13
+ className: 'Portal.model.Content',
14
14
  /**
15
15
  * @member {Object[]} fields
16
16
  */
@@ -1,5 +1,5 @@
1
1
  {
2
- "appPath" : "apps/learnneo/app.mjs",
2
+ "appPath" : "apps/portal/app.mjs",
3
3
  "basePath" : "../../",
4
4
  "environment" : "development",
5
5
  "mainPath" : "./Main.mjs",
@@ -0,0 +1,43 @@
1
+ import BlogPost from '../model/BlogPost.mjs';
2
+ import Store from '../../../src/data/Store.mjs';
3
+
4
+ /**
5
+ * @class Portal.store.BlogPosts
6
+ * @extends Neo.data.Store
7
+ */
8
+ class BlogPosts extends Store {
9
+ static config = {
10
+ /**
11
+ * @member {String} className='Portal.store.BlogPosts'
12
+ * @protected
13
+ */
14
+ className: 'Portal.store.BlogPosts',
15
+ /**
16
+ * @member {Boolean} autoLoad=true
17
+ */
18
+ autoLoad: true,
19
+ /**
20
+ * @member {String} keyProperty='id'
21
+ */
22
+ keyProperty: 'id',
23
+ /**
24
+ * @member {Neo.data.Model} model=BlogPost
25
+ */
26
+ model: BlogPost,
27
+ /**
28
+ * @member {Object[]} sorters=[{property: 'id', direction: 'DESC'}]
29
+ */
30
+ sorters: [{
31
+ property : 'id',
32
+ direction: 'DESC'
33
+ }],
34
+ /**
35
+ * @member {String} url='../../apps/portal/data/blog.json'
36
+ */
37
+ url: '../../apps/portal/data/blog.json'
38
+ }
39
+ }
40
+
41
+ Neo.applyClassConfig(BlogPosts);
42
+
43
+ export default BlogPosts;
@@ -1,5 +1,5 @@
1
1
  import ContentModel from '../model/Content.mjs';
2
- import Store from '../../../src/data/Store.mjs';
2
+ import Store from '../../../src/data/Store.mjs';
3
3
 
4
4
  /**
5
5
  * @class LearnNeo.store.Content
@@ -15,10 +15,7 @@ class Content extends Store {
15
15
  /**
16
16
  * @member {Neo.data.Model} model=ContentModel
17
17
  */
18
- model: ContentModel,
19
- // autoLoad: true
20
-
21
-
18
+ model: ContentModel
22
19
  }
23
20
 
24
21
  xonConstructed() {
@@ -1,38 +1,47 @@
1
- import Base from '../../../../src/toolbar/Base.mjs';
2
- import Label from '../../../../src/component/Label.mjs';
1
+ import Base from '../../../src/toolbar/Base.mjs';
2
+ import Label from '../../../src/component/Label.mjs';
3
3
 
4
4
  /**
5
- * @class LearnNeo.view.home.HeaderToolbar
5
+ * @class Portal.view.learn.HeaderToolbar
6
6
  * @extends Neo.container.Base
7
7
  */
8
8
  class HeaderToolbar extends Base {
9
9
  static config = {
10
10
  /**
11
- * @member {String} className='LearnNeo.view.home.HeaderToolbar'
11
+ * @member {String} className='Portal.view.learn.HeaderToolbar'
12
12
  * @protected
13
13
  */
14
- className: 'LearnNeo.view.home.HeaderToolbar',
14
+ className: 'Portal.view.learn.HeaderToolbar',
15
15
  /**
16
16
  * @member {String[]} cls=['learnneo-header-toolbar']
17
17
  */
18
18
  cls: ['learnneo-header-toolbar'],
19
+ /**
20
+ * @member {Object} itemDefaults
21
+ */
22
+ itemDefaults: {
23
+ ntype: 'button',
24
+ ui : 'ghost'
25
+ },
19
26
  /**
20
27
  * @member {Object[]} items
21
28
  */
22
29
  items: [{
23
- module: Label,
24
- cls : ['logo'],
25
- text : 'neo.mjs'
30
+ cls : ['logo'],
31
+ route: '/home',
32
+ text : 'neo.mjs'
26
33
  }, '->', {
27
- text: 'Docs',
28
- ui : 'ghost'
34
+ text : 'Learn',
35
+ route: '/learn'
36
+ }, {
37
+ text : 'Blog',
38
+ reference: 'blog-header-button',
39
+ route : '/blog'
29
40
  }, {
30
- text: 'Learn',
31
- ui : 'ghost'
41
+ text: 'Docs'
32
42
  }, {
33
43
  cls : ['github-button'],
34
44
  iconCls: 'fa-brands fa-github',
35
- ui : 'ghost',
36
45
  url : 'https://github.com/neomjs/neo',
37
46
  tooltip: {
38
47
  html: 'GitHub',
@@ -41,7 +50,6 @@ class HeaderToolbar extends Base {
41
50
  }
42
51
  }, {
43
52
  iconCls: 'fa-brands fa-slack',
44
- ui : 'ghost',
45
53
  url : 'https://join.slack.com/t/neomjs/shared_invite/zt-6c50ueeu-3E1~M4T9xkNnb~M_prEEOA',
46
54
  tooltip: {
47
55
  html: 'Join Slack',
@@ -0,0 +1,59 @@
1
+ import BaseViewport from '../../../src/container/Viewport.mjs';
2
+ import Container from '../../../src/container/Base.mjs';
3
+ import HeaderToolbar from './HeaderToolbar.mjs';
4
+ import ViewportController from './ViewportController.mjs';
5
+
6
+ /**
7
+ * @class Portal.view.Viewport
8
+ * @extends Neo.container.Viewport
9
+ */
10
+ class Viewport extends BaseViewport {
11
+ static config = {
12
+ /**
13
+ * @member {String} className='Portal.view.Viewport'
14
+ * @protected
15
+ */
16
+ className: 'Portal.view.Viewport',
17
+ /**
18
+ * @member {Neo.controller.Component} controller=ViewportController
19
+ */
20
+ controller: ViewportController,
21
+ /**
22
+ * @member {Object[]} items
23
+ */
24
+ items: [{
25
+ module: HeaderToolbar,
26
+ flex : 'none'
27
+ }, {
28
+ module : Container,
29
+ layout : {ntype: 'card', activeIndex: null},
30
+ reference: 'main-content',
31
+
32
+ items: [
33
+ {module: () => import('./home/MainContainer.mjs')},
34
+ {module: () => import('./learn/MainContainer.mjs')},
35
+ {module: () => import('./blog/Container.mjs')}
36
+ ]
37
+ }]
38
+ }
39
+
40
+ /**
41
+ *
42
+ */
43
+ async onConstructed() {
44
+ super.onConstructed();
45
+
46
+ let me = this,
47
+ data = await Neo.Main.getByPath({path: 'location.search'}),
48
+ searchString = data?.substr(1),
49
+ search = searchString ? JSON.parse(`{"${decodeURI(searchString.replace(/&/g, "\",\"").replace(/=/g, "\":\""))}"}`) : {};
50
+
51
+ me.deck = search.deck || 'learnneo';
52
+
53
+ me.addCls(me.deck)
54
+ }
55
+ }
56
+
57
+ Neo.applyClassConfig(Viewport);
58
+
59
+ export default Viewport;
@@ -0,0 +1,79 @@
1
+ import Controller from '../../../src/controller/Component.mjs';
2
+
3
+ /**
4
+ * @class Portal.view.ViewportController
5
+ * @extends Neo.controller.Component
6
+ */
7
+ class ViewportController extends Controller {
8
+ static config = {
9
+ /**
10
+ * @member {String} className='Portal.view.ViewportController'
11
+ * @protected
12
+ */
13
+ className: 'Portal.view.ViewportController',
14
+ /**
15
+ * @member {String|null} defaultHash='/home'
16
+ */
17
+ defaultHash: '/home',
18
+ /**
19
+ * @member {Object} routes
20
+ */
21
+ routes: {
22
+ '/blog' : 'onBlogRoute',
23
+ '/home' : 'onHomeRoute',
24
+ '/learn': 'onLearnRoute'
25
+ }
26
+ }
27
+
28
+ /**
29
+ * @param {Object[]} records
30
+ */
31
+ onBlogPostStoreLoad(records) {
32
+ this.getReference('blog-header-button').badgeText = records.length + ''
33
+ }
34
+
35
+ /**
36
+ * @param {Object} params
37
+ * @param {Object} value
38
+ * @param {Object} oldValue
39
+ */
40
+ onBlogRoute(params, value, oldValue) {
41
+ this.setMainContentIndex(2)
42
+ }
43
+
44
+ /**
45
+ * @param {Object} data
46
+ */
47
+ onBlogSearchFieldChange(data) {
48
+ this.getReference('blog-list').filterItems(data)
49
+ }
50
+
51
+ /**
52
+ * @param {Object} params
53
+ * @param {Object} value
54
+ * @param {Object} oldValue
55
+ */
56
+ onHomeRoute(params, value, oldValue) {
57
+ this.setMainContentIndex(0)
58
+ }
59
+
60
+ /**
61
+ * @param {Object} params
62
+ * @param {Object} value
63
+ * @param {Object} oldValue
64
+ */
65
+ onLearnRoute(params, value, oldValue) {
66
+ this.setMainContentIndex(1)
67
+ }
68
+
69
+ /**
70
+ * @param {Number} value
71
+ */
72
+ setMainContentIndex(value) {
73
+ this.getReference('main-content').layout.activeIndex = value
74
+ }
75
+ }
76
+
77
+ Neo.applyClassConfig(ViewportController);
78
+
79
+ export default ViewportController;
@@ -0,0 +1,50 @@
1
+ import BaseContainer from '../../../../src/container/Base.mjs';
2
+ import List from './List.mjs';
3
+ import SearchField from '../../../../src/form/field/Search.mjs';
4
+
5
+ /**
6
+ * @class Portal.view.blog.Container
7
+ * @extends Neo.container.Base
8
+ */
9
+ class Container extends BaseContainer {
10
+ static config = {
11
+ /**
12
+ * @member {String} className='Portal.view.blog.Container'
13
+ * @protected
14
+ */
15
+ className: 'Portal.view.blog.Container',
16
+ /**
17
+ * @member {String[]} baseCls=['website-blog-container','neo-container']
18
+ */
19
+ baseCls: ['website-blog-container', 'neo-container'],
20
+ /**
21
+ * @member {Array} items
22
+ */
23
+ items: [{ //#323232
24
+ module: BaseContainer,
25
+ cls : ['website-blog-toolbar', 'neo-container'],
26
+ flex : 'none',
27
+ layout: {ntype: 'hbox', align: 'stretch'},
28
+
29
+ items: [{
30
+ module : SearchField,
31
+ cls : ['website-blog-searchfield', 'neo-searchfield', 'neo-textfield'],
32
+ listeners : {change: 'onBlogSearchFieldChange'},
33
+ placeholderText: 'Filter Items',
34
+ width : 240
35
+ }]
36
+ }, {
37
+ module : List,
38
+ flex : 1,
39
+ reference: 'blog-list'
40
+ }],
41
+ /**
42
+ * @member {Object} layout={ntype: 'vbox', align: 'stretch'}
43
+ */
44
+ layout: {ntype: 'vbox', align: 'stretch'}
45
+ }
46
+ }
47
+
48
+ Neo.applyClassConfig(Container);
49
+
50
+ export default Container;
@@ -0,0 +1,173 @@
1
+ import BaseList from '../../../../src/list/Base.mjs';
2
+ import BlogPosts from '../../store/BlogPosts.mjs';
3
+ import VDomUtil from '../../../../src/util/VDom.mjs';
4
+
5
+ /**
6
+ * @class Portal.view.blog.List
7
+ * @extends Neo.list.Base
8
+ */
9
+ class List extends BaseList {
10
+ /**
11
+ * A regex to enforce a maxLength (word break)
12
+ * @member {RegExp} nameRegEx
13
+ * @protected
14
+ * @static
15
+ */
16
+ static nameRegEx = /^(.{65}[^\s]*).*/
17
+
18
+ static config = {
19
+ /**
20
+ * @member {String} className='Portal.view.blog.List'
21
+ * @protected
22
+ */
23
+ className: 'Portal.view.blog.List',
24
+ /**
25
+ * @member {String[]} baseCls=['website-blog-list','neo-list']
26
+ */
27
+ baseCls: ['website-blog-list', 'neo-list'],
28
+ /**
29
+ * @member {Neo.data.Store} store=BlogPosts
30
+ */
31
+ store: BlogPosts,
32
+ /**
33
+ * @member {Boolean} useWrapperNode=true
34
+ */
35
+ useWrapperNode: true,
36
+ /**
37
+ * @member {Object} _vdom
38
+ */
39
+ _vdom:
40
+ {cn: [
41
+ {tag: 'ul', cn: []}
42
+ ]}
43
+ }
44
+
45
+ /**
46
+ * @param {Neo.data.Store} value
47
+ * @param {Neo.data.Store} oldValue
48
+ */
49
+ afterSetStore(value, oldValue) {
50
+ super.afterSetStore(value, oldValue);
51
+
52
+ value.on({
53
+ load : 'onBlogPostStoreLoad',
54
+ scope: this.getController()
55
+ });
56
+ }
57
+
58
+ /**
59
+ * @param {Object} record
60
+ */
61
+ createItemContent(record) {
62
+ let basePath;
63
+
64
+ if (Neo.config.isGitHubPages) {
65
+ basePath = '../../../../resources/website';
66
+
67
+ if (Neo.config.environment !== 'development') {
68
+ basePath = '../../' + basePath;
69
+ }
70
+ } else {
71
+ basePath = 'https://raw.githubusercontent.com/neomjs/pages/main/resources/website';
72
+ }
73
+
74
+ const vdomCn = [
75
+ {cls: ['content'], cn: [
76
+ {cls: ['neo-full-size', 'preview-image'], style: {
77
+ backgroundImage: `url('${basePath}/blog/${record.image}'), linear-gradient(#777, #333)`}
78
+ },
79
+ {cls: ['neo-relative'], cn: [
80
+ {cls: ['neo-absolute', 'neo-item-bottom-position'], cn: [
81
+ {tag: 'a', cls: ['neo-title'], href: record.url, target: '_blank', cn: [
82
+ {flag: 'name', html: record.name.replace(List.nameRegEx, "$1")}
83
+ ]},
84
+ {cls: ['neo-top-20'], cn: [
85
+ {tag: 'img', cls: ['neo-user-image'], src: `${basePath}/blogAuthor/${record.authorImage}`},
86
+ {cls: ['neo-inner-content'], cn: [
87
+ {cls: ['neo-inner-details'], flag: 'author', cn: [
88
+ {tag: 'span', cls: ['neo-bold'], html: record.author}
89
+ ]},
90
+ {cls: ['neo-inner-details'], html: record.date}
91
+ ]}
92
+ ]}
93
+ ]}
94
+ ]}
95
+ ]}
96
+ ];
97
+
98
+ if (record.publisher.length > 0) {
99
+ VDomUtil.getByFlag(vdomCn[0], 'author').cn.push(
100
+ {vtype: 'text', html : ' in '},
101
+ {tag: 'span', cls: ['neo-bold'], html: record.publisher}
102
+ );
103
+ }
104
+
105
+ if (record.selectedInto.length > 0) {
106
+ vdomCn[0].cn[1].cn.unshift(
107
+ {cls: ['neo-absolute', 'neo-item-top-position'], cn: [
108
+ {html: `Officially selected by ${record.provider} into`},
109
+ {cls: ['neo-bold'], html: record.selectedInto.join('</br>')}
110
+ ]}
111
+ )
112
+ }
113
+
114
+ return vdomCn
115
+ }
116
+
117
+ /**
118
+ * Custom filtering logic
119
+ * @param {Object} data
120
+ */
121
+ filterItems(data) {
122
+ let me = this,
123
+ emptyValue = !data.value || data.value === '',
124
+ store = me.store,
125
+ valueRegEx = new RegExp(data.value, 'gi'),
126
+ hasMatch, itemName, name, record;
127
+
128
+ me.getVdomRoot().cn.forEach((item, index) => {
129
+ hasMatch = false;
130
+ itemName = VDomUtil.getByFlag(item, 'name');
131
+ record = store.getAt(index);
132
+ name = record.name.replace(List.nameRegEx, "$1");
133
+
134
+ item.style = item.style || {};
135
+
136
+ if (emptyValue) {
137
+ itemName.html = name;
138
+ delete item.style.display
139
+ } else {
140
+ itemName.html = name.replace(valueRegEx, match => {
141
+ hasMatch = true;
142
+ return `<span class="neo-highlight-search">${match}</span>`
143
+ });
144
+
145
+ if (hasMatch) {
146
+ delete item.style.display
147
+ } else {
148
+ item.style.display = 'none'
149
+ }
150
+ }
151
+ });
152
+
153
+ me.update()
154
+ }
155
+
156
+ /**
157
+ * @returns {Object}
158
+ */
159
+ getVdomRoot() {
160
+ return this.vdom.cn[0]
161
+ }
162
+
163
+ /**
164
+ * @returns {Object}
165
+ */
166
+ getVnodeRoot() {
167
+ return this.vnode.childNodes[0]
168
+ }
169
+ }
170
+
171
+ Neo.applyClassConfig(List);
172
+
173
+ export default List;
@@ -1,18 +1,17 @@
1
- import BaseViewport from '../../../src/container/Viewport.mjs';
2
- import Button from '../../../src/button/Base.mjs';
3
- import Container from '../../../src/container/Base.mjs';
1
+ import Button from '../../../../src/button/Base.mjs';
2
+ import Container from '../../../../src/container/Base.mjs';
4
3
 
5
4
  /**
6
- * @class NewWebsite.view.Viewport
7
- * @extends Neo.container.Viewport
5
+ * @class Portal.view.home.MainContainer
6
+ * @extends Neo.container.Base
8
7
  */
9
- class Viewport extends BaseViewport {
8
+ class Viewport extends Container {
10
9
  static config = {
11
10
  /**
12
- * @member {String} className='NewWebsite.view.Viewport'
11
+ * @member {String} className='Portal.view.home.MainContainer'
13
12
  * @protected
14
13
  */
15
- className: 'NewWebsite.view.Viewport',
14
+ className: 'Portal.view.home.MainContainer',
16
15
  /**
17
16
  * @member {String[]} cls=['newwebsite-viewport']
18
17
  */
@@ -1,18 +1,18 @@
1
1
  import ContentStore from '../../store/Content.mjs'
2
- import TreeList from '../../../../src/tree/List.mjs';
3
- import LivePreview from '../LivePreview.mjs';
2
+ import LivePreview from './LivePreview.mjs';
3
+ import TreeList from '../../../../src/tree/List.mjs';
4
4
 
5
5
  /**
6
- * @class LearnNeo.view.home.ContentTreeList
6
+ * @class Portal.view.learn.ContentTreeList
7
7
  * @extends Neo.container.Base
8
8
  */
9
9
  class ContentTreeList extends TreeList {
10
10
  static config = {
11
11
  /**
12
- * @member {String} className='LearnNeo.view.home.ContentTreeList'
12
+ * @member {String} className='Portal.view.learn.ContentTreeList'
13
13
  * @protected
14
14
  */
15
- className: 'LearnNeo.view.home.ContentTreeList',
15
+ className: 'Portal.view.learn.ContentTreeList',
16
16
  /**
17
17
  * @member {String[]} cls=['topics-tree']
18
18
  */
@@ -78,7 +78,7 @@ class ContentTreeList extends TreeList {
78
78
  }
79
79
 
80
80
  extractNeoContent(htmlString, map) {
81
- // 1. Replace <pre data-neo> with <div id='neo-preview-2'/>
81
+ // 1. Replace <pre data-neo> with <div id='neo-preview-2'/>
82
82
  // and update map with key/value pairs, where the key is the ID and the value is the <pre> contents.
83
83
 
84
84
  // Define a regular expression to match <pre data-javascript> tags
@@ -1,16 +1,16 @@
1
1
  import Component from '../../../../src/component/Base.mjs';
2
2
 
3
3
  /**
4
- * @class LearnNeo.view.home.ContentView
4
+ * @class Portal.view.learn.ContentView
5
5
  * @extends Neo.component.Base
6
6
  */
7
7
  class ContentView extends Component {
8
8
  static config = {
9
9
  /**
10
- * @member {String} className='LearnNeo.view.home.ContentView'
10
+ * @member {String} className='Portal.view.learn.ContentView'
11
11
  * @protected
12
12
  */
13
- className: 'LearnNeo.view.home.ContentView',
13
+ className: 'Portal.view.learn.ContentView',
14
14
  /**
15
15
  * @member {String[]} baseCls=['learn-content']
16
16
  * @protected