neo.mjs 6.18.1 → 6.18.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/apps/ServiceWorker.mjs +2 -2
- package/apps/colors/view/HeaderToolbar.mjs +6 -6
- package/apps/portal/view/HeaderToolbar.mjs +1 -2
- package/apps/portal/view/home/MainContainer.mjs +14 -12
- package/apps/portal/view/home/parts/AfterMath.mjs +19 -16
- package/apps/portal/view/home/parts/BaseContainer.mjs +31 -0
- package/apps/portal/view/home/parts/Colors.mjs +14 -14
- package/apps/portal/view/home/parts/Features.mjs +6 -6
- package/apps/portal/view/home/parts/Helix.mjs +8 -11
- package/apps/portal/view/home/parts/HelloWorld.mjs +5 -7
- package/apps/portal/view/home/parts/How.mjs +8 -8
- package/apps/portal/view/home/parts/MainNeo.mjs +14 -12
- package/examples/ServiceWorker.mjs +2 -2
- package/examples/model/dialog/EditUserDialog.mjs +1 -8
- package/package.json +1 -1
- package/resources/data/deck/learnneo/pages/GuideViewModels.md +444 -0
- package/resources/data/deck/learnneo/tree.json +1 -0
- package/resources/scss/src/apps/portal/HeaderToolbar.scss +1 -1
- package/resources/scss/src/apps/portal/home/MainContainer.scss +0 -32
- package/resources/scss/src/apps/portal/home/parts/BaseContainer.scss +27 -0
- package/resources/scss/src/apps/portal/home/parts/MainNeo.scss +3 -1
- package/resources/scss/src/apps/portal/learn/ContentTreeList.scss +1 -1
- package/resources/scss/src/calendar/view/EditEventContainer.scss +1 -1
- package/resources/scss/src/calendar/view/calendars/List.scss +1 -1
- package/resources/scss/src/dialog/Base.scss +1 -6
- package/resources/scss/theme-dark/dialog/Base.scss +1 -0
- package/resources/scss/theme-light/dialog/Base.scss +1 -0
- package/resources/scss/theme-neo-light/Global.scss +13 -11
- package/resources/scss/theme-neo-light/dialog/Base.scss +1 -0
- package/src/DefaultConfig.mjs +2 -2
- package/src/button/Base.mjs +3 -2
- package/src/calendar/view/EditEventContainer.mjs +1 -1
- package/src/component/Base.mjs +1 -6
- package/src/controller/Base.mjs +5 -5
- package/src/dialog/Base.mjs +23 -45
- package/src/form/field/Color.mjs +5 -5
- package/src/selection/DateSelectorModel.mjs +2 -2
- package/src/util/HashHistory.mjs +45 -12
- package/src/worker/Base.mjs +15 -8
package/apps/ServiceWorker.mjs
CHANGED
@@ -39,31 +39,31 @@ class HeaderToolbar extends Toolbar {
|
|
39
39
|
clearable : false,
|
40
40
|
editable : false,
|
41
41
|
labelPosition: 'inline',
|
42
|
-
labelText : '
|
42
|
+
labelText : '# Colors',
|
43
43
|
listeners : {change: 'onChangeAmountColors'},
|
44
44
|
maxValue : 10,
|
45
45
|
minValue : 3,
|
46
|
-
width :
|
46
|
+
width : 90
|
47
47
|
}, {
|
48
48
|
module : ComboBox,
|
49
49
|
bind : {value: data => String(data.amountColumns)},
|
50
50
|
clearable : false,
|
51
51
|
editable : false,
|
52
52
|
labelPosition: 'inline',
|
53
|
-
labelText : '
|
53
|
+
labelText : '# Columns',
|
54
54
|
listeners : {change: 'onChangeAmountColumns'},
|
55
55
|
store : ['5', '10', '15', '20', '26'],
|
56
|
-
width :
|
56
|
+
width : 90
|
57
57
|
}, {
|
58
58
|
module : ComboBox,
|
59
59
|
bind : {value: data => String(data.amountRows)},
|
60
60
|
clearable : false,
|
61
61
|
editable : false,
|
62
62
|
labelPosition: 'inline',
|
63
|
-
labelText : '
|
63
|
+
labelText : '# Rows',
|
64
64
|
listeners : {change: 'onChangeAmountRows'},
|
65
65
|
store : ['5', '10', '15', '20'],
|
66
|
-
width :
|
66
|
+
width : 90
|
67
67
|
}, '->', {
|
68
68
|
handler : 'onDetachTableButtonClick',
|
69
69
|
iconCls : 'fas fa-table',
|
@@ -22,11 +22,22 @@ class MainContainer extends Container {
|
|
22
22
|
* @member {String[]} cls=['portal-home-maincontainer']
|
23
23
|
*/
|
24
24
|
cls: ['portal-home-maincontainer'],
|
25
|
+
/**
|
26
|
+
* @member {Object[]} domListeners
|
27
|
+
*/
|
28
|
+
domListeners: [{
|
29
|
+
intersect(data) {
|
30
|
+
Neo.getComponent(data.targetId)?.activate?.()
|
31
|
+
},
|
32
|
+
scroll(event) {
|
33
|
+
this.toggleCls('hide-sidebar', event.scrollTop > 80)
|
34
|
+
}
|
35
|
+
}],
|
25
36
|
/**
|
26
37
|
* @member {Object[]} items
|
27
38
|
*/
|
28
39
|
items: [
|
29
|
-
{ntype: 'component',
|
40
|
+
{ntype: 'component', cls: ['portal-home-progress']},
|
30
41
|
MainNeo,
|
31
42
|
Features,
|
32
43
|
HelloWorld,
|
@@ -38,16 +49,7 @@ class MainContainer extends Container {
|
|
38
49
|
/**
|
39
50
|
* @member {Boolean} scrollable=true
|
40
51
|
*/
|
41
|
-
scrollable: true
|
42
|
-
|
43
|
-
domListeners: [{
|
44
|
-
intersect(data) {
|
45
|
-
Neo.getComponent(data.targetId)?.activate?.()
|
46
|
-
},
|
47
|
-
scroll(event) {
|
48
|
-
this.toggleCls('hide-sidebar', event.scrollTop > 80)
|
49
|
-
}
|
50
|
-
}]
|
52
|
+
scrollable: true
|
51
53
|
}
|
52
54
|
|
53
55
|
/**
|
@@ -66,7 +68,7 @@ class MainContainer extends Container {
|
|
66
68
|
Neo.main.addon.IntersectionObserver.register({
|
67
69
|
callback : 'isVisible',
|
68
70
|
id,
|
69
|
-
observe : ['.
|
71
|
+
observe : ['.portal-home-content-view'],
|
70
72
|
root : `#${id}`,
|
71
73
|
threshold: 1.0,
|
72
74
|
windowId
|
@@ -1,54 +1,57 @@
|
|
1
|
-
import
|
1
|
+
import BaseContainer from './BaseContainer.mjs';
|
2
2
|
|
3
3
|
/**
|
4
4
|
* @class Portal.view.home.parts.AfterMath
|
5
|
-
* @extends
|
5
|
+
* @extends Portal.view.home.parts.BaseContainer
|
6
6
|
*/
|
7
|
-
class AfterMath extends
|
7
|
+
class AfterMath extends BaseContainer {
|
8
8
|
static config = {
|
9
9
|
/**
|
10
10
|
* @member {String} className='Portal.view.home.parts.AfterMath'
|
11
11
|
* @protected
|
12
12
|
*/
|
13
13
|
className: 'Portal.view.home.parts.AfterMath',
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
/**
|
15
|
+
* @member {Object} layout={ntype:'vbox',align:'stretch',pack:'center'}
|
16
|
+
*/
|
17
17
|
layout: {ntype: 'vbox', align: 'stretch', pack: 'center'},
|
18
18
|
/**
|
19
19
|
* @member {Object[]} items
|
20
20
|
*/
|
21
21
|
items: [{
|
22
|
-
|
23
|
-
flex
|
22
|
+
ntype: 'container',
|
23
|
+
flex : 1
|
24
24
|
}, {
|
25
25
|
cls : 'neo-h1',
|
26
26
|
flex: 'none',
|
27
|
-
html: 'Additional Stuff'
|
27
|
+
html: 'Additional Stuff',
|
28
|
+
vdom: {tag: 'h1'}
|
28
29
|
}, {
|
29
30
|
cls : 'neo-h2',
|
30
31
|
flex: 'none',
|
31
32
|
html: 'More to come here',
|
32
|
-
|
33
|
+
vdom: {tag: 'h2'}
|
33
34
|
}, {
|
34
35
|
cls : 'neo-content',
|
35
36
|
flex: 'none',
|
36
37
|
html: 'Neo uses several cores to run the application. See the spinner on the page?',
|
37
|
-
|
38
|
+
vdom: {tag: 'p'}
|
38
39
|
}, {
|
39
|
-
|
40
|
-
flex
|
40
|
+
ntype: 'container',
|
41
|
+
flex : 1
|
41
42
|
}, {
|
42
|
-
|
43
|
+
ntype : 'container',
|
43
44
|
cls : 'home-footer',
|
44
45
|
height: '40%',
|
46
|
+
html : 'This is the footer',
|
47
|
+
vdom : {tag: 'footer'},
|
48
|
+
|
45
49
|
style : { // todo: css
|
46
50
|
background: 'black',
|
47
51
|
color : 'white',
|
48
52
|
height : '40%',
|
49
53
|
padding : '15px'
|
50
|
-
}
|
51
|
-
html : 'This is the footer'
|
54
|
+
}
|
52
55
|
}]
|
53
56
|
}
|
54
57
|
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
import Container from '../../../../../src/container/Base.mjs';
|
2
|
+
|
3
|
+
/**
|
4
|
+
* Abstract base class for all views inside the landing page
|
5
|
+
* @class Portal.view.home.parts.BaseContainer
|
6
|
+
* @extends Neo.container.Base
|
7
|
+
* @abstract
|
8
|
+
*/
|
9
|
+
class BaseContainer extends Container {
|
10
|
+
static config = {
|
11
|
+
/**
|
12
|
+
* @member {String} className='Portal.view.home.parts.BaseContainer'
|
13
|
+
* @protected
|
14
|
+
*/
|
15
|
+
className: 'Portal.view.home.parts.BaseContainer',
|
16
|
+
/**
|
17
|
+
* @member {String[]} cls=['portal-home-content-view','neo-container']
|
18
|
+
*/
|
19
|
+
baseCls: ['portal-home-content-view', 'neo-container']
|
20
|
+
}
|
21
|
+
|
22
|
+
/**
|
23
|
+
* Hook which will trigger whenever the container fully gets scrolled into the visible area.
|
24
|
+
* Override it as needed.
|
25
|
+
*/
|
26
|
+
activate() {}
|
27
|
+
}
|
28
|
+
|
29
|
+
Neo.setupClass(BaseContainer);
|
30
|
+
|
31
|
+
export default BaseContainer;
|
@@ -1,30 +1,29 @@
|
|
1
|
-
import
|
2
|
-
import LivePreview
|
1
|
+
import BaseContainer from './BaseContainer.mjs';
|
2
|
+
import LivePreview from '../../learn/LivePreview.mjs';
|
3
3
|
|
4
4
|
/**
|
5
5
|
* @class Portal.view.home.parts.Colors
|
6
|
-
* @extends
|
6
|
+
* @extends Portal.view.home.parts.BaseContainer
|
7
7
|
*/
|
8
|
-
class Colors extends
|
8
|
+
class Colors extends BaseContainer {
|
9
9
|
static config = {
|
10
10
|
/**
|
11
11
|
* @member {String} className='Portal.view.home.parts.Colors'
|
12
12
|
* @protected
|
13
13
|
*/
|
14
14
|
className: 'Portal.view.home.parts.Colors',
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
/**
|
16
|
+
* @member {Object} responsive
|
17
|
+
*/
|
18
18
|
responsive: {
|
19
19
|
medium: {layout: {ntype: 'vbox', align: 'stretch', pack: 'center'}},
|
20
20
|
large : {layout: {ntype: 'hbox', align: 'stretch', pack: 'center'}}
|
21
21
|
},
|
22
|
-
|
23
22
|
/**
|
24
23
|
* @member {Object[]} items
|
25
24
|
*/
|
26
25
|
items: [{
|
27
|
-
|
26
|
+
ntype : 'container',
|
28
27
|
flex : '1',
|
29
28
|
style : {padding: '2rem'},
|
30
29
|
layout: {ntype: 'vbox', align: 'center', pack: 'center'},
|
@@ -42,8 +41,8 @@ class Colors extends Container {
|
|
42
41
|
flex: 'none',
|
43
42
|
vdom: {tag: 'p'},
|
44
43
|
html: [
|
45
|
-
'This is similar to the Helix demo — it\'s an extremely fast multi-window app. Click the start button',
|
46
|
-
'to see the view reflect changes in the data. And the app is multi-window: the table and charts can be',
|
44
|
+
'This is similar to the Helix demo — it\'s an extremely fast multi-window app. Click the start button ',
|
45
|
+
'to see the view reflect changes in the data. And the app is multi-window: the table and charts can be ',
|
47
46
|
'undocked into their own windows. In fact, the entire demo can be undocked.'
|
48
47
|
].join('')
|
49
48
|
}, {
|
@@ -54,12 +53,12 @@ class Colors extends Container {
|
|
54
53
|
flex: 'none',
|
55
54
|
vdom: {tag: 'p'},
|
56
55
|
html: [
|
57
|
-
'Neo.mjs uniquely fits the bill for applications that need real-time visualizations of real-time data, such as',
|
56
|
+
'Neo.mjs uniquely fits the bill for applications that need real-time visualizations of real-time data, such as ',
|
58
57
|
'stock market trading data and medical or scientific telemetry.'
|
59
58
|
].join('')
|
60
59
|
}]
|
61
60
|
}, {
|
62
|
-
|
61
|
+
ntype : 'container',
|
63
62
|
flex : '2',
|
64
63
|
style : {background: 'lightgray', padding: '20px'},
|
65
64
|
layout: {ntype: 'vbox', align: 'stretch', pack: 'center'},
|
@@ -88,7 +87,8 @@ class Colors extends Container {
|
|
88
87
|
/**
|
89
88
|
*
|
90
89
|
*/
|
91
|
-
activate() {
|
90
|
+
async activate() {
|
91
|
+
await this.timeout(1000);
|
92
92
|
this.getReference('live-preview').activeView = 'preview'
|
93
93
|
}
|
94
94
|
}
|
@@ -1,11 +1,11 @@
|
|
1
|
-
import
|
2
|
-
import ContentBox
|
1
|
+
import BaseContainer from './BaseContainer.mjs';
|
2
|
+
import ContentBox from '../ContentBox.mjs';
|
3
3
|
|
4
4
|
/**
|
5
5
|
* @class Portal.view.home.parts.Features
|
6
|
-
* @extends
|
6
|
+
* @extends Portal.view.home.parts.BaseContainer
|
7
7
|
*/
|
8
|
-
class Features extends
|
8
|
+
class Features extends BaseContainer {
|
9
9
|
static config = {
|
10
10
|
/**
|
11
11
|
* @member {String} className='Portal.view.home.parts.Features'
|
@@ -13,9 +13,9 @@ class Features extends Container {
|
|
13
13
|
*/
|
14
14
|
className: 'Portal.view.home.parts.Features',
|
15
15
|
/**
|
16
|
-
* @member {String[]} cls=['portal-home-features'
|
16
|
+
* @member {String[]} cls=['portal-home-features']
|
17
17
|
*/
|
18
|
-
cls: ['portal-home-features'
|
18
|
+
cls: ['portal-home-features'],
|
19
19
|
/**
|
20
20
|
* @member {Object} layout={ntype:'hbox',align:'stretch',wrap:'wrap'}
|
21
21
|
*/
|
@@ -1,21 +1,17 @@
|
|
1
|
-
import
|
2
|
-
import LivePreview
|
1
|
+
import BaseContainer from './BaseContainer.mjs';
|
2
|
+
import LivePreview from '../../learn/LivePreview.mjs';
|
3
3
|
|
4
4
|
/**
|
5
5
|
* @class Portal.view.home.parts.Helix
|
6
|
-
* @extends
|
6
|
+
* @extends Portal.view.home.parts.BaseContainer
|
7
7
|
*/
|
8
|
-
class Helix extends
|
8
|
+
class Helix extends BaseContainer {
|
9
9
|
static config = {
|
10
10
|
/**
|
11
11
|
* @member {String} className='Portal.view.home.parts.Helix'
|
12
12
|
* @protected
|
13
13
|
*/
|
14
14
|
className: 'Portal.view.home.parts.Helix',
|
15
|
-
/**
|
16
|
-
* @member {String[]} cls=['page','cool-stuff']
|
17
|
-
*/
|
18
|
-
cls: ['page', 'cool-stuff'],
|
19
15
|
/**
|
20
16
|
* @member {Object} responsive
|
21
17
|
*/
|
@@ -27,7 +23,7 @@ class Helix extends Container {
|
|
27
23
|
* @member {Object[]} items
|
28
24
|
*/
|
29
25
|
items: [{
|
30
|
-
|
26
|
+
ntype : 'container',
|
31
27
|
flex : '1',
|
32
28
|
style : {padding: '2rem'},
|
33
29
|
layout: {ntype: 'vbox', align: 'center', pack: 'center'},
|
@@ -74,7 +70,7 @@ class Helix extends Container {
|
|
74
70
|
].join('')
|
75
71
|
}]
|
76
72
|
}, {
|
77
|
-
|
73
|
+
ntype : 'container',
|
78
74
|
flex : '2',
|
79
75
|
style : {background: 'lightgray', padding: '20px'},
|
80
76
|
layout: {ntype: 'vbox', align: 'stretch', pack: 'center'},
|
@@ -104,7 +100,8 @@ class Helix extends Container {
|
|
104
100
|
/**
|
105
101
|
*
|
106
102
|
*/
|
107
|
-
activate() {
|
103
|
+
async activate() {
|
104
|
+
await this.timeout(1000);
|
108
105
|
this.getReference('live-preview').activeView = 'preview'
|
109
106
|
}
|
110
107
|
}
|
@@ -1,11 +1,11 @@
|
|
1
|
-
import
|
1
|
+
import BaseContainer from './BaseContainer.mjs';
|
2
2
|
import LivePreviewContainer from '../preview/PageCodeContainer.mjs';
|
3
3
|
|
4
4
|
/**
|
5
5
|
* @class Portal.view.home.parts.HelloWorld
|
6
|
-
* @extends
|
6
|
+
* @extends Portal.view.home.parts.BaseContainer
|
7
7
|
*/
|
8
|
-
class HelloWorld extends
|
8
|
+
class HelloWorld extends BaseContainer {
|
9
9
|
static config = {
|
10
10
|
/**
|
11
11
|
* @member {String} className='Portal.view.home.parts.HelloWorld'
|
@@ -31,18 +31,16 @@ class HelloWorld extends Container {
|
|
31
31
|
medium: {layout: {ntype: 'vbox', align: 'stretch', pack: 'center'}},
|
32
32
|
large : {layout: {ntype: 'hbox', align: 'stretch', pack: 'center'}}
|
33
33
|
},
|
34
|
-
|
35
34
|
/**
|
36
35
|
* @member {Object[]} items
|
37
36
|
*/
|
38
37
|
items: [{
|
39
|
-
|
38
|
+
ntype : 'container',
|
40
39
|
flex : '1',
|
41
40
|
style : {padding: '2rem'},
|
42
41
|
layout: {ntype: 'vbox', align: 'center', pack: 'center'},
|
43
42
|
items : [{
|
44
43
|
cls : 'neo-h1',
|
45
|
-
id : 'neo-hello-world-h1',
|
46
44
|
flex: 'none',
|
47
45
|
html: 'Hello World',
|
48
46
|
vdom: {tag: 'h1'}
|
@@ -59,7 +57,7 @@ class HelloWorld extends Container {
|
|
59
57
|
}]
|
60
58
|
}, {
|
61
59
|
module: LivePreviewContainer,
|
62
|
-
flex: 0.8,
|
60
|
+
flex : 0.8,
|
63
61
|
value : [
|
64
62
|
"import Container from '../../../../src/container/Base.mjs';",
|
65
63
|
"",
|
@@ -1,16 +1,16 @@
|
|
1
|
-
import
|
1
|
+
import BaseContainer from './BaseContainer.mjs';
|
2
2
|
|
3
3
|
/**
|
4
4
|
* @class Portal.view.home.parts.How
|
5
|
-
* @extends
|
5
|
+
* @extends Portal.view.home.parts.BaseContainer
|
6
6
|
*/
|
7
|
-
class How extends
|
7
|
+
class How extends BaseContainer {
|
8
8
|
static config = {
|
9
|
-
className: 'Portal.view.home.parts.How',
|
10
9
|
/**
|
11
|
-
* @member {String
|
10
|
+
* @member {String} className='Portal.view.home.parts.How'
|
11
|
+
* @protected
|
12
12
|
*/
|
13
|
-
|
13
|
+
className: 'Portal.view.home.parts.How',
|
14
14
|
/**
|
15
15
|
* @member {Object} responsive
|
16
16
|
*/
|
@@ -22,7 +22,7 @@ class How extends Container {
|
|
22
22
|
* @member {Object[]} items
|
23
23
|
*/
|
24
24
|
items: [{
|
25
|
-
|
25
|
+
ntype : 'container',
|
26
26
|
flex : '1',
|
27
27
|
style : {padding: '2rem'},
|
28
28
|
layout: {ntype: 'vbox', align: 'center', pack: 'center'},
|
@@ -48,7 +48,7 @@ class How extends Container {
|
|
48
48
|
].join('')
|
49
49
|
}]
|
50
50
|
}, {
|
51
|
-
|
51
|
+
ntype : 'container',
|
52
52
|
flex : '2',
|
53
53
|
style : {background: 'lightgray', padding: '20px'},
|
54
54
|
layout: {ntype: 'vbox', align: 'stretch', pack: 'center'},
|
@@ -1,37 +1,39 @@
|
|
1
|
-
import
|
2
|
-
import
|
1
|
+
import BaseContainer from './BaseContainer.mjs';
|
2
|
+
import Button from '../../../../../src/button/Base.mjs';
|
3
3
|
|
4
4
|
/**
|
5
5
|
* @class Portal.view.home.parts.MainNeo
|
6
|
-
* @extends
|
6
|
+
* @extends Portal.view.home.parts.BaseContainer
|
7
7
|
*/
|
8
|
-
class MainNeo extends
|
8
|
+
class MainNeo extends BaseContainer {
|
9
9
|
static config = {
|
10
10
|
/**
|
11
11
|
* @member {String} className='Portal.view.home.parts.MainNeo'
|
12
12
|
* @protected
|
13
13
|
*/
|
14
14
|
className: 'Portal.view.home.parts.MainNeo',
|
15
|
-
|
16
|
-
|
15
|
+
/**
|
16
|
+
* @member {String[]} cls=['portal-home-main-neo']
|
17
|
+
*/
|
18
|
+
cls: ['portal-home-main-neo'],
|
17
19
|
|
18
20
|
layout: {ntype: 'vbox', align: 'center', pack: 'center'},
|
19
21
|
/**
|
20
22
|
* @member {Object[]} items
|
21
23
|
*/
|
22
24
|
items: [{
|
23
|
-
|
24
|
-
cls
|
25
|
-
flex
|
25
|
+
ntype: 'container',
|
26
|
+
cls : ['vector'],
|
27
|
+
flex : 'none',
|
26
28
|
}, {
|
27
29
|
cls : ['neo-h1'],
|
28
30
|
flex: 'none',
|
29
31
|
html: 'The High-Performance Web Framework for Next Generation Interfaces',
|
30
32
|
vdom: {tag: 'h1'}
|
31
33
|
}, {
|
32
|
-
|
33
|
-
cls
|
34
|
-
flex
|
34
|
+
ntype: 'container',
|
35
|
+
cls : ['button-group'],
|
36
|
+
flex : 'none',
|
35
37
|
|
36
38
|
items: [{
|
37
39
|
module : Button,
|
@@ -46,14 +46,7 @@ class EditUserDialog extends Dialog {
|
|
46
46
|
labelText : 'Lastname:',
|
47
47
|
labelWidth: 110,
|
48
48
|
listeners : {change: 'onLastnameTextFieldChange'}
|
49
|
-
}]
|
50
|
-
/**
|
51
|
-
* @member {Object} wrapperStyle={height: '300px',width : '400px'}
|
52
|
-
*/
|
53
|
-
wrapperStyle: {
|
54
|
-
height: '300px',
|
55
|
-
width : '400px'
|
56
|
-
}
|
49
|
+
}]
|
57
50
|
}
|
58
51
|
}
|
59
52
|
|