neo.mjs 9.16.0 → 10.0.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.
- package/README.md +127 -121
- package/ServiceWorker.mjs +2 -2
- package/apps/email/view/Viewport.mjs +2 -2
- package/apps/form/view/Viewport.mjs +1 -1
- package/apps/portal/index.html +1 -1
- package/apps/portal/view/examples/List.mjs +1 -1
- package/apps/portal/view/home/FooterContainer.mjs +1 -1
- package/apps/realworld2/view/HomeContainer.mjs +1 -1
- package/apps/route/view/center/CardAdministration.mjs +3 -3
- package/apps/route/view/center/CardAdministrationDenied.mjs +2 -2
- package/apps/route/view/center/CardContact.mjs +2 -2
- package/apps/route/view/center/CardHome.mjs +2 -2
- package/apps/route/view/center/CardSection1.mjs +2 -2
- package/apps/route/view/center/CardSection2.mjs +2 -2
- package/buildScripts/createApp.mjs +2 -2
- package/docs/app/view/classdetails/HeaderComponent.mjs +3 -3
- package/docs/app/view/classdetails/MembersList.mjs +43 -46
- package/docs/app/view/classdetails/SourceViewComponent.mjs +1 -1
- package/docs/app/view/classdetails/TutorialComponent.mjs +1 -1
- package/examples/component/toast/MainContainer.mjs +16 -16
- package/examples/component/wrapper/googleMaps/MarkerDialog.mjs +4 -4
- package/examples/fields/MainContainer.mjs +1 -1
- package/examples/panel/MainContainer.mjs +2 -2
- package/examples/tab/container/MainContainer.mjs +3 -3
- package/examples/tabs/MainContainer.mjs +2 -2
- package/examples/tabs/MainContainer2.mjs +3 -3
- package/examples/viewport/MainContainer.mjs +2 -2
- package/package.json +33 -5
- package/resources/data/deck/learnneo/pages/benefits/FourEnvironments.md +1 -1
- package/resources/data/deck/learnneo/pages/benefits/Introduction.md +4 -3
- package/resources/data/deck/learnneo/pages/guides/events/DomEvents.md +5 -5
- package/resources/data/deck/training/pages/2022-12-27T21-55-23-144Z.md +2 -2
- package/resources/data/deck/training/pages/2022-12-29T18-36-08-226Z.md +1 -1
- package/resources/data/deck/training/pages/2022-12-29T18-36-56-893Z.md +2 -2
- package/resources/data/deck/training/pages/2022-12-29T20-37-08-919Z.md +2 -2
- package/resources/data/deck/training/pages/2022-12-29T20-37-20-344Z.md +2 -2
- package/resources/data/deck/training/pages/2023-01-13T21-48-17-258Z.md +2 -2
- package/resources/data/deck/training/pages/2023-02-05T17-44-53-815Z.md +9 -9
- package/resources/data/deck/training/pages/2023-10-14T19-25-08-153Z.md +1 -1
- package/src/DefaultConfig.mjs +14 -2
- package/src/Main.mjs +15 -6
- package/src/button/Base.mjs +1 -1
- package/src/calendar/view/calendars/List.mjs +1 -1
- package/src/component/Base.mjs +11 -11
- package/src/component/Chip.mjs +1 -1
- package/src/component/Helix.mjs +3 -3
- package/src/component/Process.mjs +2 -2
- package/src/component/StatusBadge.mjs +2 -2
- package/src/component/Timer.mjs +1 -1
- package/src/component/Toast.mjs +2 -2
- package/src/container/Base.mjs +1 -1
- package/src/form/field/CheckBox.mjs +2 -2
- package/src/form/field/FileUpload.mjs +14 -14
- package/src/form/field/Range.mjs +1 -1
- package/src/form/field/Text.mjs +1 -1
- package/src/form/field/trigger/Base.mjs +2 -2
- package/src/form/field/trigger/SpinUpDown.mjs +2 -2
- package/src/grid/View.mjs +1 -1
- package/src/main/DeltaUpdates.mjs +442 -0
- package/src/main/DomAccess.mjs +13 -95
- package/src/main/render/DomApiRenderer.mjs +138 -0
- package/src/main/render/StringBasedRenderer.mjs +58 -0
- package/src/table/View.mjs +1 -1
- package/src/table/plugin/CellEditing.mjs +1 -1
- package/src/tree/Accordion.mjs +11 -11
- package/src/tree/List.mjs +12 -5
- package/src/vdom/Helper.mjs +179 -309
- package/src/vdom/VNode.mjs +47 -11
- package/src/vdom/domConstants.mjs +65 -0
- package/src/vdom/util/DomApiVnodeCreator.mjs +51 -0
- package/src/vdom/util/StringFromVnode.mjs +123 -0
- package/src/worker/mixin/RemoteMethodAccess.mjs +13 -1
- package/src/main/mixin/DeltaUpdates.mjs +0 -352
package/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
<p align="center">
|
2
|
-
<img height="100"src="https://raw.githubusercontent.com/neomjs/pages/main/resources_pub/images/logo/neo_logo_text_primary.svg">
|
2
|
+
<img height="100"src="https://raw.githubusercontent.com/neomjs/pages/main/resources_pub/images/logo/neo_logo_text_primary.svg" alt="Neo.mjs Logo">
|
3
3
|
</p>
|
4
4
|
</br>
|
5
5
|
<p align="center">
|
@@ -11,104 +11,114 @@
|
|
11
11
|
<a href="./CONTRIBUTING.md"><img src="https://img.shields.io/badge/PRs-welcome-green.svg?logo=GitHub&logoColor=white" alt="PRs Welcome"></a>
|
12
12
|
</p>
|
13
13
|
|
14
|
-
# Build Ultra-Fast,
|
15
|
-
|
14
|
+
# Build Ultra-Fast, Desktop-Like Web Apps. Period. :zap:
|
15
|
+
🚀 **Break Free from UI Freezes — Experience True Multithreading & Uncompromised Responsiveness.**
|
16
16
|
|
17
|
-
Neo.mjs
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
💻 ***Neo.mjs v10 isn't an upgrade — it's a new operating system for the web. Where others optimize at the margins, we reinvented the engine.***
|
18
|
+
|
19
|
+
Imagine web applications that never jank, no matter how complex the logic, how many real-time updates they handle, or how
|
20
|
+
many browser windows they span. Neo.mjs is engineered from the ground up to deliver **desktop-like fluidity and scalability**.
|
21
|
+
**While it excels for Single Page Apps (SPAs), Neo.mjs is simply the best option for browser-based multi-window applications**,
|
22
|
+
operating fundamentally different from traditional frameworks.
|
23
|
+
|
24
|
+
By leveraging a **pioneering Off-Main-Thread (OMT) architecture**, Neo.mjs ensures your UI remains butter-smooth, even during computationally intensive tasks like complex data processing or advanced graphics rendering. The main thread is kept free for one purpose: **flawless user interactions and seamless DOM updates.**
|
21
25
|
|
22
26
|
<p align="center">
|
23
|
-
<a href="https://youtu.be/pYfM28Pz6_0"><img height="316px" width="400px" src="https://raw.githubusercontent.com/neomjs/pages/master/resources_pub/images/neo33s.png"></a>
|
24
|
-
<a href="https://youtu.be/aEA5333WiWY"><img height="316px" width="400px" src="https://raw.githubusercontent.com/neomjs/pages/master/resources_pub/images/neo-movie.png"></a>
|
27
|
+
<a href="https://youtu.be/pYfM28Pz6_0"><img height="316px" width="400px" src="https://raw.githubusercontent.com/neomjs/pages/master/resources_pub/images/neo33s.png" alt="Neo.mjs Performance Demo 1 (YouTube Video)"></a>
|
28
|
+
<a href="https://youtu.be/aEA5333WiWY"><img height="316px" width="400px" src="https://raw.githubusercontent.com/neomjs/pages/master/resources_pub/images/neo-movie.png" alt="Neo.mjs Performance Demo 2 (YouTube Video)"></a>
|
25
29
|
</p>
|
26
30
|
|
27
31
|
</br></br>
|
28
|
-
##
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
## 🌟 Key Features
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
🌀 **Dynamic Component Management**:</br>
|
99
|
-
Unmount, move, and remount components across the UI or even in separate browser windows
|
100
|
-
— without losing the component’s state or logic. This **runtime flexibility** is a game-changer, **preserving JS instances** while still updating the UI dynamically.
|
101
|
-
|
102
|
-
:dependabot: **No npm dependency hell**:</br>
|
103
|
-
Neo.mjs apps do not need any dependencies at all, just some dev dependencies for tooling.
|
32
|
+
## 🚀 Why Choose Neo.mjs? Solving the Toughest UI Challenges
|
33
|
+
Traditional single-threaded frontend frameworks often struggle with performance bottlenecks and UI freezes, especially for
|
34
|
+
large-scale, data-intensive, or real-time applications. Neo.mjs offers a fundamentally different solution, designed for
|
35
|
+
**uncompromising performance, enhanced security, and superior developer experience.**
|
36
|
+
|
37
|
+
1. **Eliminate UI Freezes with True Multithreading**:
|
38
|
+
> *"The browser's main thread should be treated like a neurosurgeon: only perform precise, scheduled operations with zero distractions."*</br></br>
|
39
|
+
— Neo.mjs Core Philosophy
|
40
|
+
|
41
|
+
Neo.mjs's OMT architecture inherently prevents UI freezes. With v10's optimized rendering pipeline, your UI will remain even *more*
|
42
|
+
consistently responsive, even during intense data processing or complex graphics rendering. It achieves an astonishing
|
43
|
+
rate of **over 40,000 delta updates per second** in optimized environments. This translates to an engine with vast untapped
|
44
|
+
potential, limited only by user interaction, not the framework.
|
45
|
+
|
46
|
+
2. **Unmatched Developer Experience: Transpilation-Free ESM**:
|
47
|
+
Say goodbye to complex build steps for development. Neo.mjs apps run **natively as ES Modules directly in the browser**.
|
48
|
+
This means **zero builds or transpilations** in dev mode, offering instant reloads and an **unmatched debugging experience**.
|
49
|
+
You modify code, and your app updates in real-time.
|
50
|
+
|
51
|
+
3. **Inherent Security by Design**:
|
52
|
+
By prioritizing direct DOM API manipulation over string-based methods (like `innerHTML`), Neo.mjs fundamentally reduces
|
53
|
+
the attack surface for vulnerabilities like Cross-Site Scripting (XSS), building a more robust and secure application from the ground up.
|
54
|
+
|
55
|
+
4. **Declarative, Consistent, & Reusable Architecture**:
|
56
|
+
Neo.mjs's unique **unified class config system** allows you to define components, layouts, and logic in a clean, declarative,
|
57
|
+
and highly consistent way. This significantly reduces boilerplate, improves maintainability, and makes complex UI composition surprisingly straightforward.
|
58
|
+
|
59
|
+
5. **Scalability for Enterprise & Beyond**:
|
60
|
+
Whether building sophisticated enterprise dashboards, data-intensive Gen AI interfaces, or desktop-like multi-window applications,
|
61
|
+
Neo.mjs's modular, worker-driven architecture effortlessly scales. Components are persistent, stateful instances that can be unmounted,
|
62
|
+
moved, and even remounted across browser windows without losing their logic or state. This is key to preventing the "re-rendering madness"
|
63
|
+
common in other frameworks.
|
64
|
+
|
65
|
+
</br></br>
|
66
|
+
## 📊 Real-World Win: Crushing UI Lag in Action
|
67
|
+
Imagine a developer building a stock trading app with live feeds updating every millisecond. Traditional frameworks often choke,
|
68
|
+
freezing the UI under the data flood. With Neo.mjs, the heavy lifting happens in worker threads, keeping the main thread free.
|
69
|
+
Traders get real-time updates with zero lag, and the app feels like a native desktop tool. Now, imagine extending this with
|
70
|
+
**multiple synchronized browser windows**, each displaying different real-time views, all remaining butter-smooth.
|
71
|
+
That’s Neo.mjs in action—solving problems others can’t touch.
|
72
|
+
|
73
|
+
</br></br>
|
74
|
+
## 🌟 Key Features (and How They Supercharge Your App)
|
75
|
+
|
76
|
+
* **Persistent Component Instances**: Components maintain their state and logic even when their DOM is removed or moved.
|
77
|
+
No more wasteful re-creations – just surgical, efficient updates.
|
78
|
+
|
79
|
+
* **Reactive State Management**: Built-in reactivity ensures dynamic, efficient updates between components and state providers,
|
80
|
+
all handled off the main thread.
|
81
|
+
|
82
|
+
* **Hierarchical State Management**: Seamlessly manage state between parent and child components with nested state providers.
|
83
|
+
Components intelligently bind to the closest provider, combining data for powerful, maintainable patterns.
|
84
|
+
|
85
|
+
* **Clean Architecture (MVVM-inspired)**: View controllers ensure a clear separation of concerns, isolating business logic
|
86
|
+
from UI components for easier maintenance, testing, and team collaboration.
|
87
|
+
|
88
|
+
* **Multi-Window & Single-Page Applications (SPAs)**: Easily build and manage complex applications that require multiple
|
89
|
+
browser windows or traditional SPAs, all powered by the same underlying multi-threaded architecture without requiring any native shell.
|
90
|
+
|
91
|
+
* **No npm Dependency Hell**: Neo.mjs apps run with **zero runtime dependencies**, just a few dev dependencies for tooling.
|
92
|
+
This means smaller bundles, fewer conflicts, and a simpler dependency graph.
|
93
|
+
|
94
|
+
* **Cutting-Edge Use Cases**: Ideal for **data-intensive applications, real-time dashboards, web-based IDEs, banking
|
95
|
+
applications, and complex multi-window Gen AI interfaces** where performance and responsiveness are non-negotiable.
|
96
|
+
|
97
|
+
<p align="center">
|
98
|
+
<img src="./resources/images/workers-focus.svg" alt="Neo.mjs Worker Architecture Diagram - Shows Main Thread, App Worker, VDom Worker, Canvas Worker, Data Worker, Service Worker, Backend connections.">
|
99
|
+
</p>
|
100
|
+
*Diagram: A high-level overview of Neo.mjs's multi-threaded architecture (Main Thread, App Worker, VDom Worker, Canvas Worker, Data Worker, Service Worker, Backend). Optional workers fade in on hover on neomjs.com.*
|
101
|
+
|
104
102
|
</br></br>
|
105
|
-
##
|
106
|
-
|
103
|
+
## 🔍 Neo.mjs vs. The Rest: Key Differentiators
|
104
|
+
Wondering how Neo.mjs stacks up against React, Angular, or Vue.js? Here’s the breakdown:
|
105
|
+
|
106
|
+
| Feature | Neo.mjs | React / Angular / Vue.js |
|
107
|
+
| :------------------------ | :--------------------------------------------- | :------------------------------------------ |
|
108
|
+
| **UI Responsiveness** | **Guaranteed smooth**: Heavy tasks off-main-thread; main thread free for UI. | **Prone to jank**: Main thread handles all logic + UI, easily blocked. |
|
109
|
+
| **Multithreading** | Native OMT architecture for core app logic, VDom, data, & graphics. | Single-threaded by default; requires complex workarounds (e.g., Web Workers for *specific* tasks). |
|
110
|
+
| **Dev Mode Experience** | **No transpilation, instant reloads**: Native ES Modules directly in browser. | Build tools (Webpack, Babel) required for dev; slower reloads. |
|
111
|
+
| **Component Persistence** | State survives DOM changes; instances move across windows. | Full re-renders common; state often lost on unmount unless managed externally. |
|
112
|
+
| **Security** | Direct DOM API, inherently XSS-resistant by design. | Relies heavily on careful string sanitization; higher XSS risk if not diligent. |
|
113
|
+
| **Multi-Window Apps** | Seamless, browser-native multi-window support. | Complex to achieve; hacky or unsupported natively. |
|
114
|
+
| **Bundle Size** | Zero runtime dependencies for lean apps. | Can be large with many third-party dependencies. |
|
115
|
+
|
116
|
+
**Neo.mjs Edge**: True multithreading, a no-build development mode, and a scalable, secure architecture combine to deliver a framework that's faster to build with and fundamentally faster and more stable to run.
|
107
117
|
|
108
118
|
</br></br>
|
109
|
-
## 📦 Declarative Class Configuration
|
110
|
-
|
111
|
-
This simplifies class creation, reduces boilerplate code, and improves maintainability.
|
119
|
+
## 📦 Declarative Class Configuration: Build Faster, Maintain Easier
|
120
|
+
|
121
|
+
Neo.mjs’s class config system allows you to define and manage classes in a declarative and reusable way. This simplifies class creation, reduces boilerplate code, and improves maintainability.
|
112
122
|
|
113
123
|
```javascript
|
114
124
|
import Component from '../../src/component/Base.mjs';
|
@@ -116,65 +126,61 @@ import Component from '../../src/component/Base.mjs';
|
|
116
126
|
class MyComponent extends Component {
|
117
127
|
static config = {
|
118
128
|
className : 'MyComponent',
|
119
|
-
myConfig_ : 'defaultValue',
|
120
|
-
domListeners: {
|
129
|
+
myConfig_ : 'defaultValue', // Reactive property
|
130
|
+
domListeners: { // Direct DOM event binding
|
121
131
|
click: 'onClick'
|
122
132
|
}
|
123
133
|
}
|
124
134
|
|
135
|
+
// Automatically called when myConfig_ changes
|
125
136
|
afterSetMyConfig(value, oldValue) {
|
126
|
-
console.log('myConfig changed:', value, oldValue)
|
137
|
+
console.log('myConfig changed:', value, oldValue);
|
127
138
|
}
|
128
139
|
|
140
|
+
// Handled in the App Worker, main thread remains free
|
129
141
|
onClick(data) {
|
130
|
-
console.log('Clicked!', data)
|
142
|
+
console.log('Clicked!', data);
|
131
143
|
}
|
132
144
|
}
|
133
145
|
|
134
146
|
export default Neo.setupClass(MyComponent);
|
135
147
|
```
|
136
|
-
With Neo.mjs’s class config system, you can:
|
137
148
|
|
138
|
-
|
139
|
-
* Easily extend and reuse configurations across classes.
|
140
|
-
* Keep your codebase organized and scalable.
|
141
|
-
|
142
|
-
For more details, check out the <a href="https://neomjs.com/dist/production/apps/portal/index.html#/learn/gettingstarted.Config">Class Config System documentation</a>.
|
149
|
+
For more details, check out the [Class Config System documentation](https://neomjs.com/dist/production/apps/portal/index.html#/learn/gettingstarted.Config).
|
143
150
|
|
144
151
|
</br></br>
|
145
|
-
## 🚀
|
146
|
-
Quick Start
|
152
|
+
## 🚀 Jump In: Your First Neo.mjs App in Minutes
|
147
153
|
|
148
|
-
Run
|
154
|
+
Run this command:
|
149
155
|
|
150
156
|
```bash
|
151
157
|
npx neo-app@latest
|
152
158
|
```
|
153
|
-
This one-liner sets up everything you need to start building with Neo, including:
|
154
|
-
- A new app workspace.
|
155
|
-
- A pre-configured app shell.
|
156
|
-
- A local development server.
|
157
|
-
- Opening your app inside a new browser window
|
158
159
|
|
159
|
-
|
160
|
+
This one-liner sets up everything you need to start building with Neo.mjs, including:
|
161
|
+
|
162
|
+
* A new app workspace.
|
163
|
+
* A pre-configured app shell.
|
164
|
+
* A local development server.
|
165
|
+
* Launching your app in a new browser window—all in one go.
|
160
166
|
|
161
|
-
:
|
167
|
+
:book: More details? Check out our [Getting Started Guide](./.github/GETTING_STARTED.md)
|
162
168
|
|
163
|
-
:
|
164
|
-
<a href="https://neomjs.com/dist/production/apps/portal/#/learn/tutorials.Earthquakes">Earthquakes Tutorial</a>
|
169
|
+
:student: Make sure to dive into the [Learning Section](https://neomjs.com/dist/production/apps/portal/#/learn/gettingstarted.Setup)
|
165
170
|
|
166
171
|
Next steps:
|
167
|
-
* :star: **Explore exciting Examples here**: <a href="https://neomjs.com/dist/production/apps/portal/#/examples">Neo.mjs Examples</a>
|
168
|
-
* Many more are included inside the repos <a href="https://github.com/neomjs/neo/tree/dev/apps">apps</a>
|
169
|
-
& <a href="https://github.com/neomjs/neo/tree/dev/examples">examples</a> folders.
|
170
|
-
* :blue_book: All Blog Posts are listed here: <a href="https://neomjs.com/dist/production/apps/portal/#/blog">Neo.mjs Blog</a>
|
171
|
-
</br></br>
|
172
|
-
## :handshake: Join the Community
|
173
172
|
|
174
|
-
:
|
173
|
+
* :star: **Experience stunning Demos & Examples here**: [Neo.mjs Examples Portal](https://neomjs.com/dist/production/apps/portal/#/examples)
|
174
|
+
* Many more are included inside the repos [apps](https://github.com/neomjs/neo/tree/dev/apps)
|
175
|
+
& [examples](https://github.com/neomjs/neo/tree/dev/examples) folders.
|
176
|
+
* :blue_book: All Blog Posts are listed here: [Neo.mjs Blog](https://neomjs.com/dist/production/apps/portal/#/blog)
|
177
|
+
|
178
|
+
</br></br>
|
179
|
+
## :handshake: Join the Community
|
175
180
|
|
176
|
-
:
|
181
|
+
:speech_balloon: Have questions? Join our [Slack channel](https://join.slack.com/t/neomjs/shared_invite/zt-6c50ueeu-3E1~M4T9xkNnb~M_prEEOA) and connect with other developers.
|
177
182
|
|
183
|
+
:hammer_and_wrench: Want to contribute? Check out our [Contributing Guide](https://github.com/neomjs/neo/blob/dev/CONTRIBUTING.md).
|
178
184
|
|
179
185
|
</br></br>
|
180
|
-
Copyright (c) 2015 - today,
|
186
|
+
Copyright (c) 2015 - today, [Tobias Uhlig](https://www.linkedin.com/in/tobiasuhlig/)
|
package/ServiceWorker.mjs
CHANGED
@@ -42,13 +42,13 @@ class Viewport extends BaseViewport {
|
|
42
42
|
iconCls: 'fa fa-home',
|
43
43
|
text : 'Tab 1'
|
44
44
|
},
|
45
|
-
vdom: {
|
45
|
+
vdom: {html: 'Welcome to your new Neo App.'}
|
46
46
|
}, {
|
47
47
|
header: {
|
48
48
|
iconCls: 'fa fa-play-circle',
|
49
49
|
text : 'Tab 2'
|
50
50
|
},
|
51
|
-
vdom: {
|
51
|
+
vdom: {html: 'Have fun creating something awesome!'}
|
52
52
|
}]
|
53
53
|
}]
|
54
54
|
}
|
package/apps/portal/index.html
CHANGED
@@ -60,7 +60,7 @@ class HomeContainer extends Container {
|
|
60
60
|
cls : ['neo-examples-tab-component'],
|
61
61
|
header: {iconCls: 'fa fa-user-ninja', text: 'Your Feed'},
|
62
62
|
style : {padding: '20px'},
|
63
|
-
vdom : {
|
63
|
+
vdom : {html: 'todo'}
|
64
64
|
}, {
|
65
65
|
module: PreviewList,
|
66
66
|
header: {iconCls: 'fa fa-globe-europe', text: 'Global Feed'}
|
@@ -17,14 +17,14 @@ class CardAdministration extends Container {
|
|
17
17
|
username_: '',
|
18
18
|
|
19
19
|
vdom: {
|
20
|
-
tag: 'h1',
|
21
|
-
|
20
|
+
tag : 'h1',
|
21
|
+
html: 'Access Granted.'
|
22
22
|
}
|
23
23
|
}
|
24
24
|
|
25
25
|
|
26
26
|
afterSetUsername(value, oldValue) {
|
27
|
-
this.vdom.
|
27
|
+
this.vdom.html = `Access Granted to ${this.username}.`;
|
28
28
|
}
|
29
29
|
}
|
30
30
|
|
@@ -16,8 +16,8 @@ class CardContact extends Container {
|
|
16
16
|
|
17
17
|
items: [
|
18
18
|
{ cls : ['route_card_simple_page'], vdom: { cn: [
|
19
|
-
{tag: 'h1',
|
20
|
-
{tag: 'a', href: 'https://github.com/neomjs/neo', target: '_blank',
|
19
|
+
{tag: 'h1', html: 'Contact' },
|
20
|
+
{tag: 'a', href: 'https://github.com/neomjs/neo', target: '_blank', html: 'please visit https://github.com/neomjs/neo'}
|
21
21
|
] } }
|
22
22
|
]
|
23
23
|
}
|
@@ -15,8 +15,8 @@ class CardHome extends Container {
|
|
15
15
|
baseCls: ['route_card_simple_page','neo-container'],
|
16
16
|
|
17
17
|
vdom: {
|
18
|
-
tag: 'h1',
|
19
|
-
|
18
|
+
tag : 'h1',
|
19
|
+
html: 'This is the landing page of the example.'
|
20
20
|
}
|
21
21
|
}
|
22
22
|
}
|
@@ -234,13 +234,13 @@ if (programOpts.info) {
|
|
234
234
|
" iconCls: 'fa fa-home',",
|
235
235
|
" text : 'Tab 1'",
|
236
236
|
" },",
|
237
|
-
" vdom: {
|
237
|
+
" vdom: {html: 'Welcome to your new Neo App.'}",
|
238
238
|
" }, {",
|
239
239
|
" header: {",
|
240
240
|
" iconCls: 'fa fa-play-circle',",
|
241
241
|
" text : 'Tab 2'",
|
242
242
|
" },",
|
243
|
-
" vdom: {
|
243
|
+
" vdom: {html: 'Have fun creating something awesome!'}",
|
244
244
|
" }]",
|
245
245
|
" }]",
|
246
246
|
" }",
|
@@ -64,12 +64,12 @@ class HeaderComponent extends Component {
|
|
64
64
|
}
|
65
65
|
}
|
66
66
|
|
67
|
-
me.vdom.cn[0].
|
67
|
+
me.vdom.cn[0].html = singleton ? (className + ' → Singleton') : className;
|
68
68
|
|
69
69
|
if (record.description) {
|
70
70
|
me.vdom.cn.push({
|
71
|
-
cls
|
72
|
-
|
71
|
+
cls : ['neo-docs-header-description'],
|
72
|
+
html: record.description
|
73
73
|
})
|
74
74
|
}
|
75
75
|
|