@smallwei/avue 3.4.7 → 3.4.9
Sign up to get free protection for your applications and to get access to all the features.
- package/LICENSE +19 -19
- package/README.md +36 -36
- package/lib/avue.js +5183 -5183
- package/lib/avue.min.js +7 -7
- package/lib/index.css +0 -0
- package/lib/locale/format.js +46 -46
- package/lib/locale/index.js +47 -47
- package/lib/locale/lang/en.js +100 -100
- package/lib/locale/lang/zh.js +100 -100
- package/package.json +74 -74
package/lib/index.css
CHANGED
File without changes
|
package/lib/locale/format.js
CHANGED
@@ -1,46 +1,46 @@
|
|
1
|
-
import { hasOwn } from 'utils/util';
|
2
|
-
|
3
|
-
const RE_NARGS = /(%|)\{([0-9a-zA-Z_]+)\}/g;
|
4
|
-
/**
|
5
|
-
* String format template
|
6
|
-
* - Inspired:
|
7
|
-
* https://github.com/Matt-Esch/string-template/index.js
|
8
|
-
*/
|
9
|
-
export default function(Vue) {
|
10
|
-
|
11
|
-
/**
|
12
|
-
* template
|
13
|
-
*
|
14
|
-
* @param {String} string
|
15
|
-
* @param {Array} ...args
|
16
|
-
* @return {String}
|
17
|
-
*/
|
18
|
-
|
19
|
-
function template(string = '', ...args) {
|
20
|
-
if (args.length === 1 && typeof args[0] === 'object') {
|
21
|
-
args = args[0];
|
22
|
-
}
|
23
|
-
|
24
|
-
if (!args || !args.hasOwnProperty) {
|
25
|
-
args = {};
|
26
|
-
}
|
27
|
-
|
28
|
-
return string.replace(RE_NARGS, (match, prefix, i, index) => {
|
29
|
-
let result;
|
30
|
-
|
31
|
-
if (string[index - 1] === '{' &&
|
32
|
-
string[index + match.length] === '}') {
|
33
|
-
return i;
|
34
|
-
} else {
|
35
|
-
result = hasOwn(args, i) ? args[i] : null;
|
36
|
-
if (result === null || result === undefined) {
|
37
|
-
return '';
|
38
|
-
}
|
39
|
-
|
40
|
-
return result;
|
41
|
-
}
|
42
|
-
});
|
43
|
-
}
|
44
|
-
|
45
|
-
return template;
|
46
|
-
}
|
1
|
+
import { hasOwn } from 'utils/util';
|
2
|
+
|
3
|
+
const RE_NARGS = /(%|)\{([0-9a-zA-Z_]+)\}/g;
|
4
|
+
/**
|
5
|
+
* String format template
|
6
|
+
* - Inspired:
|
7
|
+
* https://github.com/Matt-Esch/string-template/index.js
|
8
|
+
*/
|
9
|
+
export default function(Vue) {
|
10
|
+
|
11
|
+
/**
|
12
|
+
* template
|
13
|
+
*
|
14
|
+
* @param {String} string
|
15
|
+
* @param {Array} ...args
|
16
|
+
* @return {String}
|
17
|
+
*/
|
18
|
+
|
19
|
+
function template(string = '', ...args) {
|
20
|
+
if (args.length === 1 && typeof args[0] === 'object') {
|
21
|
+
args = args[0];
|
22
|
+
}
|
23
|
+
|
24
|
+
if (!args || !args.hasOwnProperty) {
|
25
|
+
args = {};
|
26
|
+
}
|
27
|
+
|
28
|
+
return string.replace(RE_NARGS, (match, prefix, i, index) => {
|
29
|
+
let result;
|
30
|
+
|
31
|
+
if (string[index - 1] === '{' &&
|
32
|
+
string[index + match.length] === '}') {
|
33
|
+
return i;
|
34
|
+
} else {
|
35
|
+
result = hasOwn(args, i) ? args[i] : null;
|
36
|
+
if (result === null || result === undefined) {
|
37
|
+
return '';
|
38
|
+
}
|
39
|
+
|
40
|
+
return result;
|
41
|
+
}
|
42
|
+
});
|
43
|
+
}
|
44
|
+
|
45
|
+
return template;
|
46
|
+
}
|
package/lib/locale/index.js
CHANGED
@@ -1,47 +1,47 @@
|
|
1
|
-
import Format from './format';
|
2
|
-
import defaultLang from './lang/zh';
|
3
|
-
import { createApp } from 'vue'
|
4
|
-
const Vue = createApp({})
|
5
|
-
const format = Format(Vue);
|
6
|
-
let lang = defaultLang;
|
7
|
-
let merged = false;
|
8
|
-
let i18nHandler = function () {
|
9
|
-
const vuei18n = Object.getPrototypeOf(this || Vue || {}).$t;
|
10
|
-
if (typeof vuei18n === 'function' && !!Vue.locale) {
|
11
|
-
if (!merged) {
|
12
|
-
merged = true;
|
13
|
-
Vue.locale(
|
14
|
-
Vue.config.lang,
|
15
|
-
Object.assign(lang, Vue.locale(Vue.config.lang) || {}, { clone: true })
|
16
|
-
);
|
17
|
-
}
|
18
|
-
return vuei18n.apply(this, arguments);
|
19
|
-
}
|
20
|
-
};
|
21
|
-
|
22
|
-
export const t = function (path, options) {
|
23
|
-
let value = i18nHandler.apply(this, arguments);
|
24
|
-
if (value !== null && value !== undefined) return value;
|
25
|
-
|
26
|
-
const array = path.split('.');
|
27
|
-
let current = lang;
|
28
|
-
|
29
|
-
for (let i = 0, j = array.length; i < j; i++) {
|
30
|
-
const property = array[i];
|
31
|
-
value = current[property];
|
32
|
-
if (i === j - 1) return format(value, options);
|
33
|
-
if (!value) return '';
|
34
|
-
current = value;
|
35
|
-
}
|
36
|
-
return '';
|
37
|
-
};
|
38
|
-
|
39
|
-
export const use = function (l) {
|
40
|
-
lang = l || lang;
|
41
|
-
};
|
42
|
-
|
43
|
-
export const i18n = function (fn) {
|
44
|
-
i18nHandler = fn || i18nHandler;
|
45
|
-
};
|
46
|
-
|
47
|
-
export default { use, t, i18n };
|
1
|
+
import Format from './format';
|
2
|
+
import defaultLang from './lang/zh';
|
3
|
+
import { createApp } from 'vue'
|
4
|
+
const Vue = createApp({})
|
5
|
+
const format = Format(Vue);
|
6
|
+
let lang = defaultLang;
|
7
|
+
let merged = false;
|
8
|
+
let i18nHandler = function () {
|
9
|
+
const vuei18n = Object.getPrototypeOf(this || Vue || {}).$t;
|
10
|
+
if (typeof vuei18n === 'function' && !!Vue.locale) {
|
11
|
+
if (!merged) {
|
12
|
+
merged = true;
|
13
|
+
Vue.locale(
|
14
|
+
Vue.config.lang,
|
15
|
+
Object.assign(lang, Vue.locale(Vue.config.lang) || {}, { clone: true })
|
16
|
+
);
|
17
|
+
}
|
18
|
+
return vuei18n.apply(this, arguments);
|
19
|
+
}
|
20
|
+
};
|
21
|
+
|
22
|
+
export const t = function (path, options) {
|
23
|
+
let value = i18nHandler.apply(this, arguments);
|
24
|
+
if (value !== null && value !== undefined) return value;
|
25
|
+
|
26
|
+
const array = path.split('.');
|
27
|
+
let current = lang;
|
28
|
+
|
29
|
+
for (let i = 0, j = array.length; i < j; i++) {
|
30
|
+
const property = array[i];
|
31
|
+
value = current[property];
|
32
|
+
if (i === j - 1) return format(value, options);
|
33
|
+
if (!value) return '';
|
34
|
+
current = value;
|
35
|
+
}
|
36
|
+
return '';
|
37
|
+
};
|
38
|
+
|
39
|
+
export const use = function (l) {
|
40
|
+
lang = l || lang;
|
41
|
+
};
|
42
|
+
|
43
|
+
export const i18n = function (fn) {
|
44
|
+
i18nHandler = fn || i18nHandler;
|
45
|
+
};
|
46
|
+
|
47
|
+
export default { use, t, i18n };
|
package/lib/locale/lang/en.js
CHANGED
@@ -1,100 +1,100 @@
|
|
1
|
-
export default {
|
2
|
-
common: {
|
3
|
-
submitBtn: 'Submit',
|
4
|
-
cancelBtn: 'Cancel',
|
5
|
-
condition: 'Condition',
|
6
|
-
display: 'Display',
|
7
|
-
hide: 'Hide'
|
8
|
-
},
|
9
|
-
tip: {
|
10
|
-
select: 'Please select',
|
11
|
-
input: 'Please input'
|
12
|
-
},
|
13
|
-
check: {
|
14
|
-
checkAll: 'Select All'
|
15
|
-
},
|
16
|
-
upload: {
|
17
|
-
upload: 'Click to Upload',
|
18
|
-
tip: 'Drop files here, or'
|
19
|
-
},
|
20
|
-
time: {
|
21
|
-
start: 'Start',
|
22
|
-
end: 'End'
|
23
|
-
},
|
24
|
-
date: {
|
25
|
-
start: 'Start Date',
|
26
|
-
end: 'End Date',
|
27
|
-
t: 'Today',
|
28
|
-
y: 'Yesterday',
|
29
|
-
n: 'Last 7 days',
|
30
|
-
a: 'All'
|
31
|
-
},
|
32
|
-
form: {
|
33
|
-
printBtn: 'Print',
|
34
|
-
mockBtn: 'Mock',
|
35
|
-
submitBtn: 'Submit',
|
36
|
-
emptyBtn: 'Empty'
|
37
|
-
},
|
38
|
-
crud: {
|
39
|
-
excel: {
|
40
|
-
name: 'File Name',
|
41
|
-
type: 'Data',
|
42
|
-
typeDic: {
|
43
|
-
true: 'Data on this page (all of the data on this page)',
|
44
|
-
false: 'Selected Data (the selected data on this page)'
|
45
|
-
},
|
46
|
-
prop: 'Field',
|
47
|
-
params: 'Parameters',
|
48
|
-
paramsDic: {
|
49
|
-
header: 'Table Header',
|
50
|
-
data: 'Data Source',
|
51
|
-
headers: 'Complex Table Header',
|
52
|
-
sum: 'Total'
|
53
|
-
}
|
54
|
-
},
|
55
|
-
filter: {
|
56
|
-
addBtn: 'Add',
|
57
|
-
clearBtn: 'Clear',
|
58
|
-
resetBtn: 'Reset',
|
59
|
-
cancelBtn: 'Cancel',
|
60
|
-
submitBtn: 'Submit'
|
61
|
-
},
|
62
|
-
column: {
|
63
|
-
name: 'Name',
|
64
|
-
hide: 'Hide',
|
65
|
-
fixed: 'Fixed',
|
66
|
-
filters: 'Filter',
|
67
|
-
sortable: 'Sort',
|
68
|
-
index: 'Index',
|
69
|
-
width: 'Width'
|
70
|
-
},
|
71
|
-
emptyText: 'No Data',
|
72
|
-
tipStartTitle: 'Selected',
|
73
|
-
tipEndTitle: 'Items ',
|
74
|
-
editTitle: 'Edit',
|
75
|
-
copyTitle: 'Copy',
|
76
|
-
addTitle: 'Add',
|
77
|
-
viewTitle: 'View',
|
78
|
-
filterTitle: 'Filter Conditions',
|
79
|
-
showTitle: 'Column Display',
|
80
|
-
menu: 'Menu',
|
81
|
-
addBtn: 'Add',
|
82
|
-
show: 'Show',
|
83
|
-
hide: 'Hide',
|
84
|
-
open: 'Open',
|
85
|
-
shrink: 'Shrink',
|
86
|
-
printBtn: 'Print',
|
87
|
-
mockBtn: 'Mock',
|
88
|
-
excelBtn: 'Export',
|
89
|
-
updateBtn: 'Update',
|
90
|
-
cancelBtn: 'Cancel',
|
91
|
-
searchBtn: 'Search',
|
92
|
-
emptyBtn: 'Empty',
|
93
|
-
menuBtn: 'Menu',
|
94
|
-
saveBtn: 'Save',
|
95
|
-
viewBtn: 'View',
|
96
|
-
editBtn: 'Edit',
|
97
|
-
copyBtn: 'Copy',
|
98
|
-
delBtn: 'Delete'
|
99
|
-
}
|
100
|
-
};
|
1
|
+
export default {
|
2
|
+
common: {
|
3
|
+
submitBtn: 'Submit',
|
4
|
+
cancelBtn: 'Cancel',
|
5
|
+
condition: 'Condition',
|
6
|
+
display: 'Display',
|
7
|
+
hide: 'Hide'
|
8
|
+
},
|
9
|
+
tip: {
|
10
|
+
select: 'Please select',
|
11
|
+
input: 'Please input'
|
12
|
+
},
|
13
|
+
check: {
|
14
|
+
checkAll: 'Select All'
|
15
|
+
},
|
16
|
+
upload: {
|
17
|
+
upload: 'Click to Upload',
|
18
|
+
tip: 'Drop files here, or'
|
19
|
+
},
|
20
|
+
time: {
|
21
|
+
start: 'Start',
|
22
|
+
end: 'End'
|
23
|
+
},
|
24
|
+
date: {
|
25
|
+
start: 'Start Date',
|
26
|
+
end: 'End Date',
|
27
|
+
t: 'Today',
|
28
|
+
y: 'Yesterday',
|
29
|
+
n: 'Last 7 days',
|
30
|
+
a: 'All'
|
31
|
+
},
|
32
|
+
form: {
|
33
|
+
printBtn: 'Print',
|
34
|
+
mockBtn: 'Mock',
|
35
|
+
submitBtn: 'Submit',
|
36
|
+
emptyBtn: 'Empty'
|
37
|
+
},
|
38
|
+
crud: {
|
39
|
+
excel: {
|
40
|
+
name: 'File Name',
|
41
|
+
type: 'Data',
|
42
|
+
typeDic: {
|
43
|
+
true: 'Data on this page (all of the data on this page)',
|
44
|
+
false: 'Selected Data (the selected data on this page)'
|
45
|
+
},
|
46
|
+
prop: 'Field',
|
47
|
+
params: 'Parameters',
|
48
|
+
paramsDic: {
|
49
|
+
header: 'Table Header',
|
50
|
+
data: 'Data Source',
|
51
|
+
headers: 'Complex Table Header',
|
52
|
+
sum: 'Total'
|
53
|
+
}
|
54
|
+
},
|
55
|
+
filter: {
|
56
|
+
addBtn: 'Add',
|
57
|
+
clearBtn: 'Clear',
|
58
|
+
resetBtn: 'Reset',
|
59
|
+
cancelBtn: 'Cancel',
|
60
|
+
submitBtn: 'Submit'
|
61
|
+
},
|
62
|
+
column: {
|
63
|
+
name: 'Name',
|
64
|
+
hide: 'Hide',
|
65
|
+
fixed: 'Fixed',
|
66
|
+
filters: 'Filter',
|
67
|
+
sortable: 'Sort',
|
68
|
+
index: 'Index',
|
69
|
+
width: 'Width'
|
70
|
+
},
|
71
|
+
emptyText: 'No Data',
|
72
|
+
tipStartTitle: 'Selected',
|
73
|
+
tipEndTitle: 'Items ',
|
74
|
+
editTitle: 'Edit',
|
75
|
+
copyTitle: 'Copy',
|
76
|
+
addTitle: 'Add',
|
77
|
+
viewTitle: 'View',
|
78
|
+
filterTitle: 'Filter Conditions',
|
79
|
+
showTitle: 'Column Display',
|
80
|
+
menu: 'Menu',
|
81
|
+
addBtn: 'Add',
|
82
|
+
show: 'Show',
|
83
|
+
hide: 'Hide',
|
84
|
+
open: 'Open',
|
85
|
+
shrink: 'Shrink',
|
86
|
+
printBtn: 'Print',
|
87
|
+
mockBtn: 'Mock',
|
88
|
+
excelBtn: 'Export',
|
89
|
+
updateBtn: 'Update',
|
90
|
+
cancelBtn: 'Cancel',
|
91
|
+
searchBtn: 'Search',
|
92
|
+
emptyBtn: 'Empty',
|
93
|
+
menuBtn: 'Menu',
|
94
|
+
saveBtn: 'Save',
|
95
|
+
viewBtn: 'View',
|
96
|
+
editBtn: 'Edit',
|
97
|
+
copyBtn: 'Copy',
|
98
|
+
delBtn: 'Delete'
|
99
|
+
}
|
100
|
+
};
|
package/lib/locale/lang/zh.js
CHANGED
@@ -1,100 +1,100 @@
|
|
1
|
-
export default {
|
2
|
-
common: {
|
3
|
-
submitBtn: '确 定',
|
4
|
-
cancelBtn: '取 消',
|
5
|
-
condition: '条件',
|
6
|
-
display: '显示',
|
7
|
-
hide: '隐藏'
|
8
|
-
},
|
9
|
-
tip: {
|
10
|
-
select: '请选择',
|
11
|
-
input: '请输入'
|
12
|
-
},
|
13
|
-
check: {
|
14
|
-
checkAll: '全选'
|
15
|
-
},
|
16
|
-
upload: {
|
17
|
-
upload: '点击上传',
|
18
|
-
tip: '将文件拖到此处,或'
|
19
|
-
},
|
20
|
-
time: {
|
21
|
-
start: '开始',
|
22
|
-
end: '结束'
|
23
|
-
},
|
24
|
-
date: {
|
25
|
-
start: '开始',
|
26
|
-
end: '结束',
|
27
|
-
t: '今日',
|
28
|
-
y: '昨日',
|
29
|
-
n: '近7天',
|
30
|
-
a: '全部'
|
31
|
-
},
|
32
|
-
form: {
|
33
|
-
printBtn: '打 印',
|
34
|
-
mockBtn: '模 拟',
|
35
|
-
submitBtn: '提 交',
|
36
|
-
emptyBtn: '清 空'
|
37
|
-
},
|
38
|
-
crud: {
|
39
|
-
excel: {
|
40
|
-
name: '文件名',
|
41
|
-
type: '数据',
|
42
|
-
typeDic: {
|
43
|
-
true: '当前数据(当前页全部的数据)',
|
44
|
-
false: '选中的数据(当前页选中的数据)'
|
45
|
-
},
|
46
|
-
prop: '字段',
|
47
|
-
params: '参数',
|
48
|
-
paramsDic: {
|
49
|
-
header: '表头',
|
50
|
-
data: '数据源',
|
51
|
-
headers: '复杂表头',
|
52
|
-
sum: '合计统计'
|
53
|
-
}
|
54
|
-
},
|
55
|
-
filter: {
|
56
|
-
addBtn: '新增条件',
|
57
|
-
clearBtn: '清空数据',
|
58
|
-
resetBtn: '清空条件',
|
59
|
-
cancelBtn: '取 消',
|
60
|
-
submitBtn: '确 定'
|
61
|
-
},
|
62
|
-
column: {
|
63
|
-
name: '列名',
|
64
|
-
hide: '隐藏',
|
65
|
-
fixed: '冻结',
|
66
|
-
filters: '过滤',
|
67
|
-
sortable: '排序',
|
68
|
-
index: '顺序',
|
69
|
-
width: '宽度'
|
70
|
-
},
|
71
|
-
emptyText: '暂无数据',
|
72
|
-
tipStartTitle: '当前表格已选择',
|
73
|
-
tipEndTitle: '项',
|
74
|
-
editTitle: '编 辑',
|
75
|
-
copyTitle: '复 制',
|
76
|
-
addTitle: '新 增',
|
77
|
-
viewTitle: '查 看',
|
78
|
-
filterTitle: '过滤条件',
|
79
|
-
showTitle: '列显隐',
|
80
|
-
menu: '操作',
|
81
|
-
addBtn: '新 增',
|
82
|
-
show: '显 示',
|
83
|
-
hide: '隐 藏',
|
84
|
-
open: '展 开',
|
85
|
-
shrink: '收 缩',
|
86
|
-
printBtn: '打 印',
|
87
|
-
mockBtn: '模 拟',
|
88
|
-
excelBtn: '导 出',
|
89
|
-
updateBtn: '修 改',
|
90
|
-
cancelBtn: '取 消',
|
91
|
-
searchBtn: '搜 索',
|
92
|
-
emptyBtn: '清 空',
|
93
|
-
menuBtn: '功 能',
|
94
|
-
saveBtn: '保 存',
|
95
|
-
viewBtn: '查 看',
|
96
|
-
editBtn: '编 辑',
|
97
|
-
copyBtn: '复 制',
|
98
|
-
delBtn: '删 除'
|
99
|
-
}
|
100
|
-
};
|
1
|
+
export default {
|
2
|
+
common: {
|
3
|
+
submitBtn: '确 定',
|
4
|
+
cancelBtn: '取 消',
|
5
|
+
condition: '条件',
|
6
|
+
display: '显示',
|
7
|
+
hide: '隐藏'
|
8
|
+
},
|
9
|
+
tip: {
|
10
|
+
select: '请选择',
|
11
|
+
input: '请输入'
|
12
|
+
},
|
13
|
+
check: {
|
14
|
+
checkAll: '全选'
|
15
|
+
},
|
16
|
+
upload: {
|
17
|
+
upload: '点击上传',
|
18
|
+
tip: '将文件拖到此处,或'
|
19
|
+
},
|
20
|
+
time: {
|
21
|
+
start: '开始',
|
22
|
+
end: '结束'
|
23
|
+
},
|
24
|
+
date: {
|
25
|
+
start: '开始',
|
26
|
+
end: '结束',
|
27
|
+
t: '今日',
|
28
|
+
y: '昨日',
|
29
|
+
n: '近7天',
|
30
|
+
a: '全部'
|
31
|
+
},
|
32
|
+
form: {
|
33
|
+
printBtn: '打 印',
|
34
|
+
mockBtn: '模 拟',
|
35
|
+
submitBtn: '提 交',
|
36
|
+
emptyBtn: '清 空'
|
37
|
+
},
|
38
|
+
crud: {
|
39
|
+
excel: {
|
40
|
+
name: '文件名',
|
41
|
+
type: '数据',
|
42
|
+
typeDic: {
|
43
|
+
true: '当前数据(当前页全部的数据)',
|
44
|
+
false: '选中的数据(当前页选中的数据)'
|
45
|
+
},
|
46
|
+
prop: '字段',
|
47
|
+
params: '参数',
|
48
|
+
paramsDic: {
|
49
|
+
header: '表头',
|
50
|
+
data: '数据源',
|
51
|
+
headers: '复杂表头',
|
52
|
+
sum: '合计统计'
|
53
|
+
}
|
54
|
+
},
|
55
|
+
filter: {
|
56
|
+
addBtn: '新增条件',
|
57
|
+
clearBtn: '清空数据',
|
58
|
+
resetBtn: '清空条件',
|
59
|
+
cancelBtn: '取 消',
|
60
|
+
submitBtn: '确 定'
|
61
|
+
},
|
62
|
+
column: {
|
63
|
+
name: '列名',
|
64
|
+
hide: '隐藏',
|
65
|
+
fixed: '冻结',
|
66
|
+
filters: '过滤',
|
67
|
+
sortable: '排序',
|
68
|
+
index: '顺序',
|
69
|
+
width: '宽度'
|
70
|
+
},
|
71
|
+
emptyText: '暂无数据',
|
72
|
+
tipStartTitle: '当前表格已选择',
|
73
|
+
tipEndTitle: '项',
|
74
|
+
editTitle: '编 辑',
|
75
|
+
copyTitle: '复 制',
|
76
|
+
addTitle: '新 增',
|
77
|
+
viewTitle: '查 看',
|
78
|
+
filterTitle: '过滤条件',
|
79
|
+
showTitle: '列显隐',
|
80
|
+
menu: '操作',
|
81
|
+
addBtn: '新 增',
|
82
|
+
show: '显 示',
|
83
|
+
hide: '隐 藏',
|
84
|
+
open: '展 开',
|
85
|
+
shrink: '收 缩',
|
86
|
+
printBtn: '打 印',
|
87
|
+
mockBtn: '模 拟',
|
88
|
+
excelBtn: '导 出',
|
89
|
+
updateBtn: '修 改',
|
90
|
+
cancelBtn: '取 消',
|
91
|
+
searchBtn: '搜 索',
|
92
|
+
emptyBtn: '清 空',
|
93
|
+
menuBtn: '功 能',
|
94
|
+
saveBtn: '保 存',
|
95
|
+
viewBtn: '查 看',
|
96
|
+
editBtn: '编 辑',
|
97
|
+
copyBtn: '复 制',
|
98
|
+
delBtn: '删 除'
|
99
|
+
}
|
100
|
+
};
|