@onetype/framework 2.0.49 → 2.0.51
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/core/commands/front/directives/run.js +1 -1
- package/addons/core/commands/front/directives/submit.js +1 -1
- package/addons/core/commands/front/functions/api.js +1 -1
- package/addons/core/database/back/addon.js +14 -0
- package/addons/core/database/back/events/addon.init.js +42 -0
- package/addons/core/database/back/events/addon.item.init.js +24 -0
- package/addons/core/database/back/functions/item/create.js +92 -0
- package/addons/core/database/back/functions/item/delete.js +34 -0
- package/addons/core/database/back/functions/item/save.js +13 -0
- package/addons/core/database/back/functions/item/update.js +90 -0
- package/addons/core/database/back/functions/items/builder.js +160 -0
- package/addons/core/database/back/functions/items/filter.js +32 -0
- package/addons/core/database/back/functions/items/filters.js +7 -0
- package/addons/core/database/back/functions/items/find.js +28 -0
- package/addons/core/database/back/functions/items/methods/aggregate.js +15 -0
- package/addons/core/database/back/functions/items/methods/count.js +12 -0
- package/addons/core/database/back/functions/items/methods/exists.js +8 -0
- package/addons/core/database/back/functions/items/methods/many.js +13 -0
- package/addons/core/database/back/functions/items/methods/one.js +8 -0
- package/addons/core/database/back/functions/items/methods/plain.js +29 -0
- package/addons/core/database/back/functions/items/methods/query.js +33 -0
- package/addons/core/database/back/functions/items/methods.js +142 -0
- package/addons/core/database/back/functions/items/transform/join.js +63 -0
- package/addons/core/database/back/functions/items/transform/translate.js +57 -0
- package/addons/core/database/back/functions/items/validation.js +125 -0
- package/addons/core/database/back/item/catch/add.js +1 -1
- package/addons/core/database/back/items/commands/create.js +54 -0
- package/addons/core/database/back/items/commands/delete.js +62 -0
- package/addons/core/database/back/items/commands/find.js +118 -0
- package/addons/core/database/back/items/commands/update.js +70 -0
- package/addons/core/database/back/load.js +27 -26
- package/addons/core/database/front/events/addon.init.js +42 -0
- package/addons/core/database/front/functions/create.js +11 -0
- package/addons/core/database/front/functions/delete.js +10 -0
- package/addons/core/database/front/functions/find.js +96 -142
- package/addons/core/database/front/functions/update.js +12 -0
- package/addons/float/popup/css/popup.css +141 -18
- package/addons/float/popup/js/addon.js +5 -0
- package/addons/float/popup/js/functions/confirm.js +100 -0
- package/addons/float/popup/js/functions/toast.js +1 -1
- package/addons/float/popup/js/items/directives/tooltip.js +5 -1
- package/addons/render/directives/front/addon.js +5 -0
- package/addons/render/directives/front/functions/process/data.js +19 -1
- package/addons/render/directives/front/functions/process/locale.js +46 -0
- package/addons/render/directives/front/functions/process.js +4 -1
- package/addons/render/directives/front/items/self/660-form.js +74 -163
- package/addons/render/directives/front/items/self/750-html.js +1 -1
- package/addons/render/elements/front/items/self/form/button/button.css +9 -0
- package/addons/render/elements/front/items/self/form/button/button.js +1 -1
- package/addons/render/elements/front/items/self/form/color/color.css +1 -1
- package/addons/render/elements/front/items/self/form/color/color.js +25 -10
- package/addons/render/elements/front/items/self/form/editor-markdown/editor-markdown.css +410 -0
- package/addons/render/elements/front/items/self/form/editor-markdown/editor-markdown.js +191 -0
- package/addons/render/elements/front/items/self/form/field/field.css +18 -4
- package/addons/render/elements/front/items/self/form/field/field.js +6 -1
- package/addons/render/elements/front/items/self/form/section/section.js +3 -1
- package/addons/render/elements/front/items/self/navigation/tabs/tabs.css +8 -3
- package/addons/render/pages/core/addon.js +1 -1
- package/addons/render/pages/front/items/directives/change.js +1 -1
- package/addons/render/pages/front/styles/page.css +0 -7
- package/addons/render/transforms/js/functions/data.js +21 -2
- package/lib/src/classes/addon/class.js +0 -16
- package/lib/src/classes/addon/classes/item/class.js +0 -2
- package/lib/src/classes/addon/classes/item/mixins/get.js +0 -1
- package/lib/src/classes/addon/classes/render/mixins/compile.js +3 -2
- package/lib/src/classes/addon/mixins/items.js +2 -0
- package/lib/src/mixins/addons.js +2 -0
- package/lib/src/mixins/data.js +10 -9
- package/lib/src/mixins/emitter.js +5 -1
- package/lib/src/mixins/form.js +4 -0
- package/lib/src/mixins/function.js +6 -1
- package/lib/src/mixins/language.js +55 -0
- package/lib/src/mixins/locale.js +49 -0
- package/lib/src/onetype.js +6 -11
- package/package.json +1 -1
- package/addons/core/database/back/events/addon.add.js +0 -18
- package/addons/core/database/back/events/middleware/addon.items.find.js +0 -24
- package/addons/core/database/back/events/middleware/item.crud.create.js +0 -24
- package/addons/core/database/back/events/middleware/item.crud.delete.js +0 -24
- package/addons/core/database/back/events/middleware/item.crud.update.js +0 -24
- package/addons/core/database/back/functions/create.js +0 -6
- package/addons/core/database/back/functions/delete.js +0 -6
- package/addons/core/database/back/functions/find/builder.js +0 -160
- package/addons/core/database/back/functions/find/count.js +0 -12
- package/addons/core/database/back/functions/find/filter.js +0 -37
- package/addons/core/database/back/functions/find/filters.js +0 -7
- package/addons/core/database/back/functions/find/many.js +0 -93
- package/addons/core/database/back/functions/find/methods.js +0 -235
- package/addons/core/database/back/functions/find/plain.js +0 -25
- package/addons/core/database/back/functions/find/validation.js +0 -214
- package/addons/core/database/back/functions/find.js +0 -25
- package/addons/core/database/back/functions/update.js +0 -6
- package/addons/core/database/back/item/functions/create.js +0 -94
- package/addons/core/database/back/item/functions/delete.js +0 -25
- package/addons/core/database/back/item/functions/find.js +0 -19
- package/addons/core/database/back/item/functions/save.js +0 -15
- package/addons/core/database/back/item/functions/transaction.js +0 -17
- package/addons/core/database/back/item/functions/update.js +0 -76
- package/addons/core/database/back/items/commands/expose.js +0 -321
- package/addons/core/database/front/events/addon.add.js +0 -13
- package/lib/src/classes/addon/classes/item/mixins/crud.js +0 -28
- package/lib/src/classes/addon/mixins/find.js +0 -12
- package/lib/src/classes/addon/mixins/table.js +0 -35
- package/lib/src/mixins/dependencies.js +0 -104
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
display: flex;
|
|
14
14
|
align-items: flex-start;
|
|
15
15
|
gap: var(--ot-spacing-l);
|
|
16
|
-
padding: var(--ot-spacing-m);
|
|
16
|
+
padding: calc(var(--ot-spacing-m) * 1.3) var(--ot-spacing-m);
|
|
17
17
|
width: 100%;
|
|
18
18
|
}
|
|
19
19
|
|
|
@@ -52,12 +52,26 @@
|
|
|
52
52
|
flex: 1;
|
|
53
53
|
min-width: 200px;
|
|
54
54
|
max-width: 420px;
|
|
55
|
+
display: flex;
|
|
56
|
+
justify-content: flex-end;
|
|
57
|
+
width: inherit;
|
|
55
58
|
}
|
|
56
59
|
|
|
57
|
-
/* Border variant */
|
|
58
60
|
|
|
59
|
-
|
|
60
|
-
|
|
61
|
+
/* Position bottom */
|
|
62
|
+
|
|
63
|
+
.e-2109a6b9 > .holder.bottom
|
|
64
|
+
{
|
|
65
|
+
flex-direction: column;
|
|
66
|
+
gap: var(--ot-spacing-m);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
.e-2109a6b9 > .holder.bottom > .input
|
|
70
|
+
{
|
|
71
|
+
min-width: 0;
|
|
72
|
+
max-width: none;
|
|
73
|
+
width: 100%;
|
|
74
|
+
}
|
|
61
75
|
|
|
62
76
|
/* Size variants */
|
|
63
77
|
|
|
@@ -16,6 +16,11 @@ onetype.AddonReady('elements', (elements) =>
|
|
|
16
16
|
type: 'string',
|
|
17
17
|
value: ''
|
|
18
18
|
},
|
|
19
|
+
position: {
|
|
20
|
+
type: 'string',
|
|
21
|
+
value: 'right',
|
|
22
|
+
options: ['right', 'bottom']
|
|
23
|
+
},
|
|
19
24
|
variant: {
|
|
20
25
|
type: 'array',
|
|
21
26
|
value: [],
|
|
@@ -25,7 +30,7 @@ onetype.AddonReady('elements', (elements) =>
|
|
|
25
30
|
render: function()
|
|
26
31
|
{
|
|
27
32
|
return `
|
|
28
|
-
<div :class="'holder ' + variant.join(' ')">
|
|
33
|
+
<div :class="'holder ' + position + ' ' + variant.join(' ')">
|
|
29
34
|
<div class="info">
|
|
30
35
|
<label ot-if="label" class="label">{{ label }}</label>
|
|
31
36
|
<p ot-if="description" class="description">{{ description }}</p>
|
|
@@ -24,9 +24,11 @@ onetype.AddonReady('elements', (elements) =>
|
|
|
24
24
|
},
|
|
25
25
|
render: function()
|
|
26
26
|
{
|
|
27
|
+
this.hasHeader = !!this.title || !!this.description;
|
|
28
|
+
|
|
27
29
|
return `
|
|
28
30
|
<div :class="'holder ' + variant.join(' ')">
|
|
29
|
-
<div class="header">
|
|
31
|
+
<div ot-if="hasHeader" class="header">
|
|
30
32
|
<h3 ot-if="title" class="title">{{ title }}</h3>
|
|
31
33
|
<p ot-if="description" class="description">{{ description }}</p>
|
|
32
34
|
</div>
|
|
@@ -61,6 +61,11 @@
|
|
|
61
61
|
|
|
62
62
|
/* Size variants */
|
|
63
63
|
|
|
64
|
-
.e-1a8b6ac1 > .holder.size-s
|
|
65
|
-
.e-1a8b6ac1 > .holder.size-
|
|
66
|
-
|
|
64
|
+
.e-1a8b6ac1 > .holder.size-s { height: var(--ot-height-s); }
|
|
65
|
+
.e-1a8b6ac1 > .holder.size-s > .tab { height: 100%; padding: 0 var(--ot-spacing-s); font-size: var(--ot-size-s); }
|
|
66
|
+
|
|
67
|
+
.e-1a8b6ac1 > .holder.size-m { height: var(--ot-height-m); }
|
|
68
|
+
.e-1a8b6ac1 > .holder.size-m > .tab { height: 100%; padding: 0 var(--ot-spacing-m); font-size: var(--ot-size-m); }
|
|
69
|
+
|
|
70
|
+
.e-1a8b6ac1 > .holder.size-l { height: var(--ot-height-l); }
|
|
71
|
+
.e-1a8b6ac1 > .holder.size-l > .tab { height: 100%; padding: 0 var(--ot-spacing-l); font-size: var(--ot-size-m); }
|
|
@@ -14,15 +14,8 @@
|
|
|
14
14
|
{
|
|
15
15
|
position: relative;
|
|
16
16
|
overflow: auto;
|
|
17
|
-
scrollbar-width: thin;
|
|
18
|
-
scrollbar-color: var(--ot-bg-4) var(--ot-bg-1);
|
|
19
17
|
}
|
|
20
18
|
|
|
21
|
-
.ot-page-area::-webkit-scrollbar { width: 8px; height: 8px; }
|
|
22
|
-
.ot-page-area::-webkit-scrollbar-track { background: var(--ot-bg-1); }
|
|
23
|
-
.ot-page-area::-webkit-scrollbar-thumb { background: var(--ot-bg-4); border-radius: 4px; }
|
|
24
|
-
.ot-page-area::-webkit-scrollbar-thumb:hover { background: var(--ot-bg-4-hover); }
|
|
25
|
-
|
|
26
19
|
.ot-page-area > div
|
|
27
20
|
{
|
|
28
21
|
height: 100%;
|
|
@@ -8,9 +8,28 @@ transforms.Fn('data', function(config, node)
|
|
|
8
8
|
|
|
9
9
|
const attribute = 'ot-' + name;
|
|
10
10
|
const raw = node.getAttribute(attribute);
|
|
11
|
-
|
|
11
|
+
let value = raw;
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
if(raw !== null)
|
|
14
|
+
{
|
|
15
|
+
const type = Array.isArray(definition) ? definition[0] : (definition && definition.type);
|
|
16
|
+
|
|
17
|
+
if(type !== 'string')
|
|
18
|
+
{
|
|
19
|
+
try
|
|
20
|
+
{
|
|
21
|
+
const evaluated = onetype.Function(raw, {}, false);
|
|
22
|
+
|
|
23
|
+
if(evaluated !== undefined)
|
|
24
|
+
{
|
|
25
|
+
value = evaluated;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
catch(e) {}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
data[name] = onetype.DataDefineOne(value, definition);
|
|
14
33
|
|
|
15
34
|
if(raw !== null)
|
|
16
35
|
{
|
|
@@ -4,8 +4,6 @@ import AddonFields from './mixins/fields.js';
|
|
|
4
4
|
import AddonItems from './mixins/items.js';
|
|
5
5
|
import AddonRemove from './mixins/remove.js';
|
|
6
6
|
import AddonFunctions from './mixins/functions.js';
|
|
7
|
-
import AddonTable from './mixins/table.js';
|
|
8
|
-
import AddonFind from './mixins/find.js';
|
|
9
7
|
import AddonRender from './mixins/render.js';
|
|
10
8
|
|
|
11
9
|
class OneTypeAddon
|
|
@@ -17,18 +15,6 @@ class OneTypeAddon
|
|
|
17
15
|
|
|
18
16
|
this.store = {};
|
|
19
17
|
|
|
20
|
-
this.table =
|
|
21
|
-
{
|
|
22
|
-
name: null,
|
|
23
|
-
callbacks:
|
|
24
|
-
{
|
|
25
|
-
get: [],
|
|
26
|
-
create: [],
|
|
27
|
-
update: [],
|
|
28
|
-
delete: []
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
|
|
32
18
|
this.fields =
|
|
33
19
|
{
|
|
34
20
|
data: {},
|
|
@@ -76,8 +62,6 @@ Object.assign(OneTypeAddon.prototype, AddonFields);
|
|
|
76
62
|
Object.assign(OneTypeAddon.prototype, AddonItems);
|
|
77
63
|
Object.assign(OneTypeAddon.prototype, AddonRemove);
|
|
78
64
|
Object.assign(OneTypeAddon.prototype, AddonFunctions);
|
|
79
|
-
Object.assign(OneTypeAddon.prototype, AddonTable);
|
|
80
|
-
Object.assign(OneTypeAddon.prototype, AddonFind);
|
|
81
65
|
Object.assign(OneTypeAddon.prototype, AddonRender);
|
|
82
66
|
|
|
83
67
|
export default OneTypeAddon;
|
|
@@ -2,7 +2,6 @@ import AddonItemGet from './mixins/get.js';
|
|
|
2
2
|
import AddonItemSet from './mixins/set.js';
|
|
3
3
|
import AddonItemRemove from './mixins/remove.js';
|
|
4
4
|
import AddonItemFunctions from './mixins/functions.js';
|
|
5
|
-
import AddonItemCrud from './mixins/crud.js';
|
|
6
5
|
import AddonItemStore from './mixins/store.js';
|
|
7
6
|
|
|
8
7
|
class OneTypeAddonItem
|
|
@@ -19,7 +18,6 @@ Object.assign(OneTypeAddonItem.prototype, AddonItemGet);
|
|
|
19
18
|
Object.assign(OneTypeAddonItem.prototype, AddonItemSet);
|
|
20
19
|
Object.assign(OneTypeAddonItem.prototype, AddonItemRemove);
|
|
21
20
|
Object.assign(OneTypeAddonItem.prototype, AddonItemFunctions);
|
|
22
|
-
Object.assign(OneTypeAddonItem.prototype, AddonItemCrud);
|
|
23
21
|
Object.assign(OneTypeAddonItem.prototype, AddonItemStore);
|
|
24
22
|
|
|
25
23
|
export default OneTypeAddonItem;
|
|
@@ -2,7 +2,7 @@ import onetype from '#framework/load.js';
|
|
|
2
2
|
|
|
3
3
|
const RenderCompile =
|
|
4
4
|
{
|
|
5
|
-
Compile(html, data = null)
|
|
5
|
+
Compile(html, data = null, options = {})
|
|
6
6
|
{
|
|
7
7
|
const element = this.DOMCreateElement(html);
|
|
8
8
|
|
|
@@ -24,7 +24,8 @@ const RenderCompile =
|
|
|
24
24
|
nodes: {},
|
|
25
25
|
time: 0,
|
|
26
26
|
walk: true,
|
|
27
|
-
children: true
|
|
27
|
+
children: true,
|
|
28
|
+
locale: options.locale !== undefined ? options.locale : true
|
|
28
29
|
};
|
|
29
30
|
|
|
30
31
|
if(data)
|
package/lib/src/mixins/addons.js
CHANGED
package/lib/src/mixins/data.js
CHANGED
|
@@ -39,7 +39,8 @@ const OneTypeData =
|
|
|
39
39
|
}
|
|
40
40
|
catch (error)
|
|
41
41
|
{
|
|
42
|
-
|
|
42
|
+
error.path = [key].concat(error.path || []);
|
|
43
|
+
throw error;
|
|
43
44
|
}
|
|
44
45
|
}
|
|
45
46
|
|
|
@@ -68,7 +69,11 @@ const OneTypeData =
|
|
|
68
69
|
{
|
|
69
70
|
if(parsed.required)
|
|
70
71
|
{
|
|
71
|
-
throw this.Error(400, 'Expected :type:.', {
|
|
72
|
+
throw this.Error(400, 'Expected :type:, got :got:.', {
|
|
73
|
+
type: parsed.type,
|
|
74
|
+
got: value === null ? 'null' : (value === undefined ? 'undefined' : (Array.isArray(value) ? 'array' : typeof value)),
|
|
75
|
+
value: value
|
|
76
|
+
});
|
|
72
77
|
}
|
|
73
78
|
|
|
74
79
|
value = value === null ? null : undefined;
|
|
@@ -100,7 +105,8 @@ const OneTypeData =
|
|
|
100
105
|
}
|
|
101
106
|
catch (error)
|
|
102
107
|
{
|
|
103
|
-
|
|
108
|
+
error.path = ['[' + i + ']'].concat(error.path || []);
|
|
109
|
+
throw error;
|
|
104
110
|
}
|
|
105
111
|
}
|
|
106
112
|
}
|
|
@@ -119,12 +125,7 @@ const OneTypeData =
|
|
|
119
125
|
}
|
|
120
126
|
catch (error)
|
|
121
127
|
{
|
|
122
|
-
|
|
123
|
-
{
|
|
124
|
-
throw error;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
throw this.Error(400, 'Data validation error.');
|
|
128
|
+
throw error;
|
|
128
129
|
}
|
|
129
130
|
},
|
|
130
131
|
|
|
@@ -25,7 +25,11 @@ const OneTypeEmitter =
|
|
|
25
25
|
}
|
|
26
26
|
catch(error)
|
|
27
27
|
{
|
|
28
|
-
this.Error(500, 'Error in emitter callback
|
|
28
|
+
this.Error(500, 'Error in emitter callback :name: — :reason:', {
|
|
29
|
+
name,
|
|
30
|
+
reason: error.message,
|
|
31
|
+
stack: error.stack
|
|
32
|
+
});
|
|
29
33
|
}
|
|
30
34
|
}
|
|
31
35
|
|
package/lib/src/mixins/form.js
CHANGED
|
@@ -50,14 +50,18 @@ const OneTypeForm =
|
|
|
50
50
|
if(input.type === 'checkbox')
|
|
51
51
|
{
|
|
52
52
|
input.checked = !!value;
|
|
53
|
+
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
53
54
|
}
|
|
54
55
|
else if(input.type === 'radio')
|
|
55
56
|
{
|
|
56
57
|
input.checked = input.value === value;
|
|
58
|
+
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
57
59
|
}
|
|
58
60
|
else
|
|
59
61
|
{
|
|
60
62
|
input.value = value;
|
|
63
|
+
input.dispatchEvent(new Event('input', { bubbles: true }));
|
|
64
|
+
input.dispatchEvent(new Event('change', { bubbles: true }));
|
|
61
65
|
}
|
|
62
66
|
});
|
|
63
67
|
});
|
|
@@ -27,7 +27,12 @@ const OneTypeFunction =
|
|
|
27
27
|
}
|
|
28
28
|
catch (error)
|
|
29
29
|
{
|
|
30
|
-
this.Error(500, 'Function error on :expression
|
|
30
|
+
this.Error(500, 'Function error on :expression: — :reason:', {
|
|
31
|
+
expression,
|
|
32
|
+
reason: error.message,
|
|
33
|
+
data: Object.keys(data),
|
|
34
|
+
stack: error.stack
|
|
35
|
+
});
|
|
31
36
|
return undefined;
|
|
32
37
|
}
|
|
33
38
|
},
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
const OneTypeLanguage =
|
|
2
|
+
{
|
|
3
|
+
Language(value)
|
|
4
|
+
{
|
|
5
|
+
if(typeof value === 'undefined')
|
|
6
|
+
{
|
|
7
|
+
return this.LanguageGet();
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
this.LanguageSet(value);
|
|
11
|
+
},
|
|
12
|
+
|
|
13
|
+
LanguageGet()
|
|
14
|
+
{
|
|
15
|
+
return this.StateGet('language', 'EN');
|
|
16
|
+
},
|
|
17
|
+
|
|
18
|
+
LanguageSet(value)
|
|
19
|
+
{
|
|
20
|
+
this.LanguageValidate(value);
|
|
21
|
+
this.StateSet('language', value);
|
|
22
|
+
},
|
|
23
|
+
|
|
24
|
+
Languages(value)
|
|
25
|
+
{
|
|
26
|
+
if(typeof value === 'undefined')
|
|
27
|
+
{
|
|
28
|
+
return this.LanguagesGet();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
this.LanguagesSet(value);
|
|
32
|
+
},
|
|
33
|
+
|
|
34
|
+
LanguagesGet()
|
|
35
|
+
{
|
|
36
|
+
return this.StateGet('languages', []);
|
|
37
|
+
},
|
|
38
|
+
|
|
39
|
+
LanguagesSet(value)
|
|
40
|
+
{
|
|
41
|
+
this.StateSet('languages', value);
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
LanguageValidate(code)
|
|
45
|
+
{
|
|
46
|
+
if(typeof code !== 'string' || !/^[A-Z]{2}$/.test(code))
|
|
47
|
+
{
|
|
48
|
+
throw this.Error(400, 'Language must be a 2-letter uppercase code, received: :code:.', {code});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return code;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export default OneTypeLanguage;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
const OneTypeLocale =
|
|
2
|
+
{
|
|
3
|
+
LocaleGet(text, key = null)
|
|
4
|
+
{
|
|
5
|
+
const language = this.Language();
|
|
6
|
+
const hash = this.GenerateHash(key ? key + ':' + text : text);
|
|
7
|
+
const locales = this.LocalesGet(language);
|
|
8
|
+
|
|
9
|
+
if(hash in locales)
|
|
10
|
+
{
|
|
11
|
+
return locales[hash];
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
this.LocaleSet(text, key);
|
|
15
|
+
|
|
16
|
+
return text;
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
LocaleSet(text, key = null)
|
|
20
|
+
{
|
|
21
|
+
const language = this.Language();
|
|
22
|
+
const hash = this.GenerateHash(key ? key + ':' + text : text);
|
|
23
|
+
const locales = this.LocalesGet(language);
|
|
24
|
+
|
|
25
|
+
locales[hash] = text;
|
|
26
|
+
this.LocalesSet(language, locales);
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
LocalesGet(language)
|
|
30
|
+
{
|
|
31
|
+
const locales = this.StateGet('locales', {});
|
|
32
|
+
|
|
33
|
+
if(language in locales)
|
|
34
|
+
{
|
|
35
|
+
return locales[language]
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
return {};
|
|
39
|
+
},
|
|
40
|
+
|
|
41
|
+
LocalesSet(language, values)
|
|
42
|
+
{
|
|
43
|
+
const locales = this.StateGet('locales', {});
|
|
44
|
+
locales[language] = values;
|
|
45
|
+
this.StateSet('locales', locales);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export default OneTypeLocale;
|
package/lib/src/onetype.js
CHANGED
|
@@ -6,7 +6,6 @@ import OneTypeBinaries from './mixins/binaries.js';
|
|
|
6
6
|
import OneTypeString from './mixins/string.js';
|
|
7
7
|
import OneTypeEmitter from './mixins/emitter.js';
|
|
8
8
|
import OneTypeMiddleware from './mixins/middleware.js';
|
|
9
|
-
import OneTypeDependencies from './mixins/dependencies.js';
|
|
10
9
|
import OneTypeFunction from './mixins/function.js';
|
|
11
10
|
import OneTypeOverrides from './mixins/overrides.js';
|
|
12
11
|
import OneTypeDOM from './mixins/dom.js';
|
|
@@ -22,6 +21,8 @@ import OneTypeAssets from './mixins/assets.js';
|
|
|
22
21
|
import OneTypeObserver from './mixins/observer.js';
|
|
23
22
|
import OneTypeMarkdown from './mixins/markdown.js';
|
|
24
23
|
import OneTypeBase from './mixins/base.js';
|
|
24
|
+
import OneTypeLanguage from './mixins/language.js';
|
|
25
|
+
import OneTypeLocale from './mixins/locale.js';
|
|
25
26
|
|
|
26
27
|
class OneType
|
|
27
28
|
{
|
|
@@ -41,14 +42,6 @@ class OneType
|
|
|
41
42
|
}
|
|
42
43
|
};
|
|
43
44
|
|
|
44
|
-
this.dependencies = {
|
|
45
|
-
items: {},
|
|
46
|
-
callbacks: {
|
|
47
|
-
add: [],
|
|
48
|
-
remove: []
|
|
49
|
-
}
|
|
50
|
-
};
|
|
51
|
-
|
|
52
45
|
this.data =
|
|
53
46
|
{
|
|
54
47
|
schemas: {},
|
|
@@ -59,7 +52,8 @@ class OneType
|
|
|
59
52
|
this.$ot =
|
|
60
53
|
{
|
|
61
54
|
get: (key, value = undefined) => this.StateGet(key, undefined),
|
|
62
|
-
set: (key, value) => this.StateSet(key, value)
|
|
55
|
+
set: (key, value) => this.StateSet(key, value),
|
|
56
|
+
t: (text, key) => this.LocaleGet(text, key)
|
|
63
57
|
};
|
|
64
58
|
|
|
65
59
|
this.ObserverStart();
|
|
@@ -74,7 +68,6 @@ Object.assign(OneType.prototype, OneTypeData);
|
|
|
74
68
|
Object.assign(OneType.prototype, OneTypeBinaries);
|
|
75
69
|
Object.assign(OneType.prototype, OneTypeString);
|
|
76
70
|
Object.assign(OneType.prototype, OneTypeMiddleware);
|
|
77
|
-
Object.assign(OneType.prototype, OneTypeDependencies);
|
|
78
71
|
Object.assign(OneType.prototype, OneTypeFunction);
|
|
79
72
|
Object.assign(OneType.prototype, OneTypeOverrides);
|
|
80
73
|
Object.assign(OneType.prototype, OneTypeDOM);
|
|
@@ -90,5 +83,7 @@ Object.assign(OneType.prototype, OneTypeAssets);
|
|
|
90
83
|
Object.assign(OneType.prototype, OneTypeObserver);
|
|
91
84
|
Object.assign(OneType.prototype, OneTypeMarkdown);
|
|
92
85
|
Object.assign(OneType.prototype, OneTypeBase);
|
|
86
|
+
Object.assign(OneType.prototype, OneTypeLanguage);
|
|
87
|
+
Object.assign(OneType.prototype, OneTypeLocale);
|
|
93
88
|
|
|
94
89
|
export default OneType;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@onetype/framework",
|
|
3
|
-
"version": "2.0.
|
|
3
|
+
"version": "2.0.51",
|
|
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",
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import onetype from '#framework/load.js';
|
|
2
|
-
|
|
3
|
-
onetype.EmitOn('@addon.add', (addon) =>
|
|
4
|
-
{
|
|
5
|
-
addon.expose = null;
|
|
6
|
-
|
|
7
|
-
addon.Expose = function(config)
|
|
8
|
-
{
|
|
9
|
-
config = onetype.DataDefine(config, {
|
|
10
|
-
filter: ['array', []],
|
|
11
|
-
sort: ['array', []],
|
|
12
|
-
select: ['array', []],
|
|
13
|
-
callback: ['function']
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
addon.expose = config;
|
|
17
|
-
};
|
|
18
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import onetype from '#framework/load.js';
|
|
2
|
-
import database from '#database/addon.js';
|
|
3
|
-
|
|
4
|
-
onetype.MiddlewareIntercept('addon.items.find', (middleware) =>
|
|
5
|
-
{
|
|
6
|
-
let { addon, table, connection } = middleware.value;
|
|
7
|
-
|
|
8
|
-
if(!table.name)
|
|
9
|
-
{
|
|
10
|
-
throw onetype.Error(400, 'Addon must have table name set.');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
if(typeof connection === 'string')
|
|
14
|
-
{
|
|
15
|
-
connection = database.ItemGet(connection)?.Get('connection');
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
if(!connection)
|
|
19
|
-
{
|
|
20
|
-
throw onetype.Error(500, 'Database connection is not present.');
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
middleware.value.response = database.Fn('find', connection, table, addon);
|
|
24
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import onetype from '#framework/load.js';
|
|
2
|
-
import database from '#database/addon.js';
|
|
3
|
-
|
|
4
|
-
onetype.MiddlewareIntercept('item.crud.create', async (middleware) =>
|
|
5
|
-
{
|
|
6
|
-
let { item, table, connection } = middleware.value;
|
|
7
|
-
|
|
8
|
-
if(!table.name)
|
|
9
|
-
{
|
|
10
|
-
throw onetype.Error(400, 'Addon must have table name set.');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
if(typeof connection === 'string')
|
|
14
|
-
{
|
|
15
|
-
connection = database.ItemGet(connection)?.Get('connection');
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
if(!connection)
|
|
19
|
-
{
|
|
20
|
-
throw onetype.Error(500, 'Database connection is not present.');
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
middleware.value.response = database.Fn('create', connection, table, item);
|
|
24
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import onetype from '#framework/load.js';
|
|
2
|
-
import database from '#database/addon.js';
|
|
3
|
-
|
|
4
|
-
onetype.MiddlewareIntercept('item.crud.delete', async (middleware) =>
|
|
5
|
-
{
|
|
6
|
-
let { item, table, connection } = middleware.value;
|
|
7
|
-
|
|
8
|
-
if(!table.name)
|
|
9
|
-
{
|
|
10
|
-
throw onetype.Error(400, 'Addon must have table name set.');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
if(typeof connection === 'string')
|
|
14
|
-
{
|
|
15
|
-
connection = database.ItemGet(connection)?.Get('connection');
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
if(!connection)
|
|
19
|
-
{
|
|
20
|
-
throw onetype.Error(500, 'Database connection is not present.');
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
middleware.value.response = database.Fn('delete', connection, table, item);
|
|
24
|
-
});
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import onetype from '#framework/load.js';
|
|
2
|
-
import database from '#database/addon.js';
|
|
3
|
-
|
|
4
|
-
onetype.MiddlewareIntercept('item.crud.update', async (middleware) =>
|
|
5
|
-
{
|
|
6
|
-
let { item, table, connection } = middleware.value;
|
|
7
|
-
|
|
8
|
-
if(!table.name)
|
|
9
|
-
{
|
|
10
|
-
throw onetype.Error(400, 'Addon must have table name set.');
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
if(typeof connection === 'string')
|
|
14
|
-
{
|
|
15
|
-
connection = database.ItemGet(connection)?.Get('connection');
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
if(!connection)
|
|
19
|
-
{
|
|
20
|
-
throw onetype.Error(500, 'Database connection is not present.');
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
middleware.value.response = database.Fn('update', connection, table, item);
|
|
24
|
-
});
|