@onetype/framework 2.0.27 → 2.0.29
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/addons/render/pages/front/functions/open.js +33 -0
- package/addons/render/pages/front/item/functions/enter.js +6 -2
- package/lib/items/elements/navigation/navbar/navbar.css +2 -1
- package/lib/items/elements/navigation/navbar/navbar.js +24 -4
- package/lib/items/elements/navigation/sidebar/sidebar.js +13 -1
- package/lib/src/classes/addon/classes/render/mixins/process.js +16 -0
- package/package.json +1 -1
|
@@ -10,6 +10,39 @@ pages.Fn('open', async function(id, parameters = {})
|
|
|
10
10
|
|
|
11
11
|
const active = pages.StoreGet('active');
|
|
12
12
|
|
|
13
|
+
if(page.Get('data'))
|
|
14
|
+
{
|
|
15
|
+
const data = {};
|
|
16
|
+
let loaded = false;
|
|
17
|
+
|
|
18
|
+
const promise = page.Get('data').call(page, parameters).then(result =>
|
|
19
|
+
{
|
|
20
|
+
Object.assign(data, result);
|
|
21
|
+
loaded = true;
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
await Promise.race([promise, new Promise(resolve => setTimeout(resolve, 500))]);
|
|
25
|
+
|
|
26
|
+
if(!loaded)
|
|
27
|
+
{
|
|
28
|
+
if(active && active.Fn('leave') === false)
|
|
29
|
+
{
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
await promise;
|
|
34
|
+
}
|
|
35
|
+
else
|
|
36
|
+
{
|
|
37
|
+
if(active && active.Fn('leave') === false)
|
|
38
|
+
{
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return await page.Fn('enter', parameters, data);
|
|
44
|
+
}
|
|
45
|
+
|
|
13
46
|
if(active && active.Fn('leave') === false)
|
|
14
47
|
{
|
|
15
48
|
return false;
|
|
@@ -1,11 +1,15 @@
|
|
|
1
|
-
pages.Fn('item.enter', async function(item, parameters = {})
|
|
1
|
+
pages.Fn('item.enter', async function(item, parameters = {}, preloaded = null)
|
|
2
2
|
{
|
|
3
3
|
const onEnter = item.Get('onEnter');
|
|
4
4
|
const onBeforeEnter = item.Get('onBeforeEnter');
|
|
5
5
|
|
|
6
6
|
const data = {};
|
|
7
7
|
|
|
8
|
-
if(
|
|
8
|
+
if(preloaded)
|
|
9
|
+
{
|
|
10
|
+
Object.assign(data, preloaded);
|
|
11
|
+
}
|
|
12
|
+
else if(item.Get('data'))
|
|
9
13
|
{
|
|
10
14
|
Object.assign(data, await item.Get('data').call(item, parameters));
|
|
11
15
|
}
|
|
@@ -21,8 +21,28 @@ onetype.AddonReady('elements', (elements) =>
|
|
|
21
21
|
},
|
|
22
22
|
render: function()
|
|
23
23
|
{
|
|
24
|
-
|
|
25
|
-
|
|
24
|
+
const path = onetype.RouteCurrent();
|
|
25
|
+
|
|
26
|
+
const isActive = (item) =>
|
|
27
|
+
{
|
|
28
|
+
if(item.match)
|
|
29
|
+
{
|
|
30
|
+
const patterns = Array.isArray(item.match) ? item.match : [item.match];
|
|
31
|
+
return patterns.some(pattern => onetype.RouteMatch(pattern, path).match);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
return item.href === '/' ? path === '/' : path.startsWith(item.href);
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
this.left = this.items.filter(item => item.position === 'left').map(item => ({
|
|
38
|
+
...item,
|
|
39
|
+
active: isActive(item)
|
|
40
|
+
}));
|
|
41
|
+
|
|
42
|
+
this.right = this.items.filter(item => item.position === 'right').map(item => ({
|
|
43
|
+
...item,
|
|
44
|
+
active: isActive(item)
|
|
45
|
+
}));
|
|
26
46
|
|
|
27
47
|
return `
|
|
28
48
|
<nav class="holder">
|
|
@@ -30,10 +50,10 @@ onetype.AddonReady('elements', (elements) =>
|
|
|
30
50
|
<img class="logo-icon" src="https://global.divhunt.com/bd8ffd2fc9cf3a7e81b3326ac63a7cfe_4406.svg" alt="OneType" />
|
|
31
51
|
</a>
|
|
32
52
|
<div class="tabs">
|
|
33
|
-
<a ot-for="item in left" class="tab" :href="item.href"><i>{{ item.icon }}</i> {{ item.label }}</a>
|
|
53
|
+
<a ot-for="item in left" :class="'tab' + (item.active ? ' active' : '')" :href="item.href"><i>{{ item.icon }}</i> {{ item.label }}</a>
|
|
34
54
|
</div>
|
|
35
55
|
<div class="right">
|
|
36
|
-
<a ot-for="item in right" class="tab" :href="item.href"><i>{{ item.icon }}</i> {{ item.label }}</a>
|
|
56
|
+
<a ot-for="item in right" :class="'tab' + (item.active ? ' active' : '')" :href="item.href"><i>{{ item.icon }}</i> {{ item.label }}</a>
|
|
37
57
|
</div>
|
|
38
58
|
</nav>
|
|
39
59
|
`;
|
|
@@ -27,6 +27,18 @@ onetype.AddonReady('elements', (elements) =>
|
|
|
27
27
|
},
|
|
28
28
|
render: function()
|
|
29
29
|
{
|
|
30
|
+
const path = onetype.RouteCurrent();
|
|
31
|
+
|
|
32
|
+
this.isActive = (item) =>
|
|
33
|
+
{
|
|
34
|
+
if(item.href)
|
|
35
|
+
{
|
|
36
|
+
return item.href === '/' ? path === '/' : path.startsWith(item.href);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return item.value === this.active;
|
|
40
|
+
};
|
|
41
|
+
|
|
30
42
|
this.handleClick = (item) =>
|
|
31
43
|
{
|
|
32
44
|
this.active = item.value;
|
|
@@ -42,7 +54,7 @@ onetype.AddonReady('elements', (elements) =>
|
|
|
42
54
|
<slot name="top"></slot>
|
|
43
55
|
<div ot-for="group in groups" class="group">
|
|
44
56
|
<p ot-if="group.title" class="title">{{ group.title }}</p>
|
|
45
|
-
<a ot-for="item in group.items" :class="'item' + (item
|
|
57
|
+
<a ot-for="item in group.items" :class="'item' + (isActive(item) ? ' active' : '')" :href="item.href || 'javascript:void(0)'" ot-click="handleClick(item)">
|
|
46
58
|
<i ot-if="item.icon">{{ item.icon }}</i>
|
|
47
59
|
<span>{{ item.label }}</span>
|
|
48
60
|
<span ot-if="item.count !== undefined" class="count">{{ item.count }}</span>
|
|
@@ -62,6 +62,22 @@ const RenderProcess =
|
|
|
62
62
|
const html = this.GetCallback().call(this, this.GetData());
|
|
63
63
|
this.State.rendering = false;
|
|
64
64
|
|
|
65
|
+
if(html && typeof html.then === 'function')
|
|
66
|
+
{
|
|
67
|
+
html.then(resolved =>
|
|
68
|
+
{
|
|
69
|
+
if(typeof resolved !== 'string')
|
|
70
|
+
{
|
|
71
|
+
throw new Error('Render function must return a string');
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
this.Html = resolved;
|
|
75
|
+
this.Update();
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
return '';
|
|
79
|
+
}
|
|
80
|
+
|
|
65
81
|
if(typeof html !== 'string')
|
|
66
82
|
{
|
|
67
83
|
throw new Error('Render function must return a string');
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onetype/framework",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.29",
|
|
4
4
|
"description": "OneType Framework — Full-stack isomorphic JavaScript framework built from scratch. One addon abstraction powers databases, servers, commands, pages, directives, queues, and more.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/load.js",
|