@opengis/fastify-table 1.3.71 → 1.3.73
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 +86 -86
- package/index.js +9 -0
- package/package.json +1 -1
- package/server/helpers/format/formatAuto.js +13 -13
- package/server/helpers/format/formatDate.js +258 -258
- package/server/helpers/format/formatDigit.js +20 -20
- package/server/helpers/format/formatNum.js +361 -361
- package/server/helpers/format/formatNumber.js +54 -54
- package/server/helpers/format/formatRelative.js +106 -106
- package/server/helpers/format/formatUnit.js +38 -38
- package/server/helpers/format/num_format.js +41 -41
- package/server/helpers/funcs/_math.js +49 -49
- package/server/helpers/funcs/empty.js +21 -21
- package/server/helpers/funcs/ifCond.js +106 -106
- package/server/helpers/funcs/ifCondAnd.js +96 -96
- package/server/helpers/funcs/ifCondOr.js +98 -98
- package/server/helpers/funcs/inc.js +20 -20
- package/server/helpers/funcs/json.js +2 -2
- package/server/helpers/funcs/round.js +27 -27
- package/server/helpers/string/coalesce.js +31 -31
- package/server/helpers/string/concat.js +28 -28
- package/server/helpers/string/split.js +19 -19
- package/server/helpers/string/str_replace.js +60 -60
- package/server/helpers/string/substr.js +31 -31
- package/server/helpers/string/translit.js +23 -23
- package/server/helpers/string/utils/alphabet.js +75 -75
- package/server/plugins/cron/funcs/addCron.js +52 -52
- package/server/plugins/cron/index.js +76 -76
- package/server/plugins/crud/funcs/getOpt.js +14 -14
- package/server/plugins/crud/funcs/setOpt.js +21 -21
- package/server/plugins/crud/funcs/setToken.js +43 -43
- package/server/plugins/crud/funcs/utils/getFolder.js +11 -11
- package/server/plugins/crud/index.js +23 -23
- package/server/plugins/hook/index.js +8 -8
- package/server/plugins/logger/errorStatus.js +19 -19
- package/server/plugins/logger/index.js +26 -26
- package/server/plugins/migration/index.js +7 -7
- package/server/plugins/pg/index.js +11 -2
- package/server/plugins/policy/sqlInjection.js +33 -33
- package/server/plugins/redis/client.js +8 -8
- package/server/plugins/redis/funcs/redisClients.js +3 -3
- package/server/plugins/redis/index.js +17 -17
- package/server/plugins/table/funcs/getFilterSQL/util/getCustomQuery.js +13 -13
- package/server/plugins/table/funcs/getFilterSQL/util/getTableSql.js +34 -34
- package/server/plugins/table/funcs/getTemplates.js +19 -19
- package/server/plugins/table/funcs/gisIRColumn.js +82 -82
- package/server/plugins/table/funcs/loadTemplate.js +1 -1
- package/server/plugins/table/funcs/loadTemplatePath.js +1 -1
- package/server/plugins/table/funcs/userTemplateDir.js +1 -1
- package/server/plugins/table/index.js +13 -13
- package/server/plugins/util/index.js +7 -7
- package/server/routes/cron/index.js +16 -14
- package/server/routes/crud/index.js +8 -7
- package/server/routes/data/controllers/cardData.js +144 -0
- package/server/routes/data/controllers/cardTabData.js +58 -0
- package/server/routes/data/controllers/funcs/getFilterSQL/index.js +92 -0
- package/server/routes/data/controllers/funcs/getFilterSQL/util/formatValue.js +170 -0
- package/server/routes/data/controllers/funcs/getFilterSQL/util/getCustomQuery.js +13 -0
- package/server/routes/data/controllers/funcs/getFilterSQL/util/getFilterQuery.js +64 -0
- package/server/routes/data/controllers/funcs/getFilterSQL/util/getOptimizedQuery.js +12 -0
- package/server/routes/data/controllers/funcs/getFilterSQL/util/getTableSql.js +34 -0
- package/server/routes/data/controllers/tableData.js +55 -0
- package/server/routes/data/controllers/tableFilter.js +16 -0
- package/server/routes/data/controllers/tableInfo.js +110 -0
- package/server/routes/data/controllers/tokenInfo.js +12 -0
- package/server/routes/data/controllers/utils/assignTokens.js +31 -0
- package/server/routes/data/controllers/utils/conditions.js +19 -0
- package/server/routes/data/controllers/utils/getColumns.js +9 -0
- package/server/routes/data/index.mjs +22 -0
- package/server/routes/data/schema.js +54 -0
- package/server/routes/dblist/index.mjs +9 -7
- package/server/routes/logger/controllers/logger.file.js +93 -93
- package/server/routes/logger/controllers/utils/checkUserAccess.js +19 -19
- package/server/routes/logger/controllers/utils/getRootDir.js +26 -26
- package/server/routes/logger/index.js +17 -17
- package/server/routes/menu/controllers/getMenu.js +97 -0
- package/server/routes/menu/controllers/interfaces.js +21 -0
- package/server/routes/menu/index.mjs +8 -0
- package/server/routes/menu/schema.js +0 -0
- package/server/routes/properties/controllers/properties.add.js +55 -55
- package/server/routes/properties/controllers/properties.get.js +17 -17
- package/server/routes/properties/index.js +16 -16
- package/server/routes/table/controllers/form.js +42 -42
- package/server/routes/table/controllers/search.js +74 -74
- package/server/routes/table/controllers/suggest.js +28 -14
- package/server/routes/table/index.js +10 -10
- package/server/routes/table/schema.js +65 -64
- package/server/routes/templates/controllers/getTemplate.js +51 -0
- package/server/routes/templates/index.mjs +10 -0
- package/server/routes/templates/schema.js +9 -0
- package/server/routes/util/controllers/status.monitor.js +8 -8
- package/server/routes/util/index.js +2 -2
- package/utils.js +2 -0
|
@@ -1,106 +1,106 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Перетинає два масиви
|
|
3
|
-
*
|
|
4
|
-
* @example
|
|
5
|
-
* // returns [1, 4, 5, 6]
|
|
6
|
-
* intersect([1,2,3,4,5,6],[1,4,5,6,7,8,9,11])
|
|
7
|
-
* @param {Array} a
|
|
8
|
-
* @param {Array} b
|
|
9
|
-
* @returns {Array} Returns new intersect array
|
|
10
|
-
*/
|
|
11
|
-
function intersect(a, b) {
|
|
12
|
-
let aN = a; let bN = b;
|
|
13
|
-
if (b.length > a.length) {
|
|
14
|
-
[aN, bN] = [bN, aN];
|
|
15
|
-
}
|
|
16
|
-
return aN.filter((e) => bN.includes(e));
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Створення шаблона або його частини внаслідок перевірки значення із веб-запиту та заздалегідь прописаного значення.
|
|
21
|
-
* Дозволяє змінювати наповнення сторінки через ряд перевірок. Є можливість внесення додаткової умови - що робити, коли умова не виконується.
|
|
22
|
-
*
|
|
23
|
-
* @summary Перевірка двох значень та виконання коду при виконанні умови, а також у всіх інших випадках.
|
|
24
|
-
* @priority 5
|
|
25
|
-
* @alias ifCond
|
|
26
|
-
* @type helper
|
|
27
|
-
* @tag condition
|
|
28
|
-
* @example
|
|
29
|
-
* {{#ifCond @root.req.domain 'in' 'help.softpro.ua,123'}} {{select user.uid data="get_full_uid"}} {{^}} Умова не виконана {{/ifCond}}
|
|
30
|
-
* @example
|
|
31
|
-
* {{#ifCond "1234567890" 'in' @root.user.group_list}} 1=1 {{^}} uid='{{uid}}' {{/ifCond}}
|
|
32
|
-
* @example
|
|
33
|
-
* {{#ifCond 'debug' 'in' @root.setting.core.setting}}Умова виконана{{^}}Не виконана умова{{/ifCond}}
|
|
34
|
-
* @param {Array} args Параметри для значень і умов
|
|
35
|
-
* @param {Array} args[0]] Перше значення
|
|
36
|
-
* @param {Array} args[1]] Оператор
|
|
37
|
-
* @param {Array} args[2]] Друге значення
|
|
38
|
-
* @returns {String} Returns HTML
|
|
39
|
-
*/
|
|
40
|
-
export default function ifCond(v1, operator, v2, options) {
|
|
41
|
-
const __obj = this;
|
|
42
|
-
|
|
43
|
-
const isEmpty = (val) => val === null || val === undefined || (Array.isArray(val) && val.length === 0) || val === '';
|
|
44
|
-
|
|
45
|
-
switch (operator) {
|
|
46
|
-
case '==':
|
|
47
|
-
return (v1 == v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
48
|
-
case '!=':
|
|
49
|
-
return (v1 != v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
50
|
-
case '===':
|
|
51
|
-
return (v1 === v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
52
|
-
case '!==':
|
|
53
|
-
return (v1 !== v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
54
|
-
case '&&':
|
|
55
|
-
return (v1 && v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
56
|
-
case '||':
|
|
57
|
-
return (v1 || v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
58
|
-
case '<':
|
|
59
|
-
return (v1 < v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
60
|
-
case '<=':
|
|
61
|
-
return (v1 <= v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
62
|
-
case '>':
|
|
63
|
-
return (v1 > v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
64
|
-
case '>=':
|
|
65
|
-
return (v1 >= v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
66
|
-
case '&':
|
|
67
|
-
return (!isEmpty(v1) && !isEmpty(v2) && intersect(v1, v2).length !== 0)
|
|
68
|
-
? options.fn(__obj)
|
|
69
|
-
: options.inverse(__obj);
|
|
70
|
-
case '!~':
|
|
71
|
-
return (v1 || '').indexOf(v2) === -1
|
|
72
|
-
? options.fn(__obj)
|
|
73
|
-
: options.inverse(__obj);
|
|
74
|
-
case '~':
|
|
75
|
-
return (v1 || '').indexOf(v2) !== -1
|
|
76
|
-
? options.fn(__obj)
|
|
77
|
-
: options.inverse(__obj);
|
|
78
|
-
case 'period':
|
|
79
|
-
return (!isEmpty(v1) && !isEmpty(v2) && new Date(v1) < new Date() && new Date(v2) > new Date())
|
|
80
|
-
? options.fn(__obj)
|
|
81
|
-
: options.inverse(__obj);
|
|
82
|
-
case 'in': {
|
|
83
|
-
if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
|
|
84
|
-
if (isEmpty(v1) || isEmpty(v2)) return options.inverse(__obj);
|
|
85
|
-
|
|
86
|
-
if (Array.isArray(v1)) {
|
|
87
|
-
return v1.some((value) => v2.includes(value.toString()))
|
|
88
|
-
? options.fn(__obj)
|
|
89
|
-
: options.inverse(__obj);
|
|
90
|
-
}
|
|
91
|
-
return v2.includes(v1.toString())
|
|
92
|
-
? options.fn(__obj)
|
|
93
|
-
: options.inverse(__obj);
|
|
94
|
-
}
|
|
95
|
-
case 'not in': {
|
|
96
|
-
if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
|
|
97
|
-
if (isEmpty(v1) || isEmpty(v2)) return options.inverse(__obj);
|
|
98
|
-
|
|
99
|
-
return !v2.includes(v1.toString())
|
|
100
|
-
? options.fn(__obj)
|
|
101
|
-
: options.inverse(__obj);
|
|
102
|
-
}
|
|
103
|
-
default:
|
|
104
|
-
return options.inverse(__obj);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Перетинає два масиви
|
|
3
|
+
*
|
|
4
|
+
* @example
|
|
5
|
+
* // returns [1, 4, 5, 6]
|
|
6
|
+
* intersect([1,2,3,4,5,6],[1,4,5,6,7,8,9,11])
|
|
7
|
+
* @param {Array} a
|
|
8
|
+
* @param {Array} b
|
|
9
|
+
* @returns {Array} Returns new intersect array
|
|
10
|
+
*/
|
|
11
|
+
function intersect(a, b) {
|
|
12
|
+
let aN = a; let bN = b;
|
|
13
|
+
if (b.length > a.length) {
|
|
14
|
+
[aN, bN] = [bN, aN];
|
|
15
|
+
}
|
|
16
|
+
return aN.filter((e) => bN.includes(e));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Створення шаблона або його частини внаслідок перевірки значення із веб-запиту та заздалегідь прописаного значення.
|
|
21
|
+
* Дозволяє змінювати наповнення сторінки через ряд перевірок. Є можливість внесення додаткової умови - що робити, коли умова не виконується.
|
|
22
|
+
*
|
|
23
|
+
* @summary Перевірка двох значень та виконання коду при виконанні умови, а також у всіх інших випадках.
|
|
24
|
+
* @priority 5
|
|
25
|
+
* @alias ifCond
|
|
26
|
+
* @type helper
|
|
27
|
+
* @tag condition
|
|
28
|
+
* @example
|
|
29
|
+
* {{#ifCond @root.req.domain 'in' 'help.softpro.ua,123'}} {{select user.uid data="get_full_uid"}} {{^}} Умова не виконана {{/ifCond}}
|
|
30
|
+
* @example
|
|
31
|
+
* {{#ifCond "1234567890" 'in' @root.user.group_list}} 1=1 {{^}} uid='{{uid}}' {{/ifCond}}
|
|
32
|
+
* @example
|
|
33
|
+
* {{#ifCond 'debug' 'in' @root.setting.core.setting}}Умова виконана{{^}}Не виконана умова{{/ifCond}}
|
|
34
|
+
* @param {Array} args Параметри для значень і умов
|
|
35
|
+
* @param {Array} args[0]] Перше значення
|
|
36
|
+
* @param {Array} args[1]] Оператор
|
|
37
|
+
* @param {Array} args[2]] Друге значення
|
|
38
|
+
* @returns {String} Returns HTML
|
|
39
|
+
*/
|
|
40
|
+
export default function ifCond(v1, operator, v2, options) {
|
|
41
|
+
const __obj = this;
|
|
42
|
+
|
|
43
|
+
const isEmpty = (val) => val === null || val === undefined || (Array.isArray(val) && val.length === 0) || val === '';
|
|
44
|
+
|
|
45
|
+
switch (operator) {
|
|
46
|
+
case '==':
|
|
47
|
+
return (v1 == v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
48
|
+
case '!=':
|
|
49
|
+
return (v1 != v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
50
|
+
case '===':
|
|
51
|
+
return (v1 === v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
52
|
+
case '!==':
|
|
53
|
+
return (v1 !== v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
54
|
+
case '&&':
|
|
55
|
+
return (v1 && v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
56
|
+
case '||':
|
|
57
|
+
return (v1 || v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
58
|
+
case '<':
|
|
59
|
+
return (v1 < v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
60
|
+
case '<=':
|
|
61
|
+
return (v1 <= v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
62
|
+
case '>':
|
|
63
|
+
return (v1 > v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
64
|
+
case '>=':
|
|
65
|
+
return (v1 >= v2) ? options.fn(__obj) : options.inverse(__obj);
|
|
66
|
+
case '&':
|
|
67
|
+
return (!isEmpty(v1) && !isEmpty(v2) && intersect(v1, v2).length !== 0)
|
|
68
|
+
? options.fn(__obj)
|
|
69
|
+
: options.inverse(__obj);
|
|
70
|
+
case '!~':
|
|
71
|
+
return (v1 || '').indexOf(v2) === -1
|
|
72
|
+
? options.fn(__obj)
|
|
73
|
+
: options.inverse(__obj);
|
|
74
|
+
case '~':
|
|
75
|
+
return (v1 || '').indexOf(v2) !== -1
|
|
76
|
+
? options.fn(__obj)
|
|
77
|
+
: options.inverse(__obj);
|
|
78
|
+
case 'period':
|
|
79
|
+
return (!isEmpty(v1) && !isEmpty(v2) && new Date(v1) < new Date() && new Date(v2) > new Date())
|
|
80
|
+
? options.fn(__obj)
|
|
81
|
+
: options.inverse(__obj);
|
|
82
|
+
case 'in': {
|
|
83
|
+
if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
|
|
84
|
+
if (isEmpty(v1) || isEmpty(v2)) return options.inverse(__obj);
|
|
85
|
+
|
|
86
|
+
if (Array.isArray(v1)) {
|
|
87
|
+
return v1.some((value) => v2.includes(value.toString()))
|
|
88
|
+
? options.fn(__obj)
|
|
89
|
+
: options.inverse(__obj);
|
|
90
|
+
}
|
|
91
|
+
return v2.includes(v1.toString())
|
|
92
|
+
? options.fn(__obj)
|
|
93
|
+
: options.inverse(__obj);
|
|
94
|
+
}
|
|
95
|
+
case 'not in': {
|
|
96
|
+
if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
|
|
97
|
+
if (isEmpty(v1) || isEmpty(v2)) return options.inverse(__obj);
|
|
98
|
+
|
|
99
|
+
return !v2.includes(v1.toString())
|
|
100
|
+
? options.fn(__obj)
|
|
101
|
+
: options.inverse(__obj);
|
|
102
|
+
}
|
|
103
|
+
default:
|
|
104
|
+
return options.inverse(__obj);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -1,96 +1,96 @@
|
|
|
1
|
-
function intersect(a, b) {
|
|
2
|
-
const aN = Array.isArray(a) ? a : typeof a === 'string' ? a.split(',') : [];
|
|
3
|
-
const bN = Array.isArray(b) ? b : typeof b === 'string' ? b.split(',') : [];
|
|
4
|
-
|
|
5
|
-
return aN.filter((e) => bN.includes(e));
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Створення шаблона або його частини внаслідок виконання одразу декількох перевірок, кожна з яких повинна повернути true.
|
|
10
|
-
* Якщо хоча б одна умова не виконується, код у межах хелпера також не виконується.
|
|
11
|
-
*
|
|
12
|
-
* @summary Створення шаблона за перевіркою виконання декількох умов.
|
|
13
|
-
* @priority 4
|
|
14
|
-
* @type helper
|
|
15
|
-
* @tag condition
|
|
16
|
-
* @alias ifCondAnd
|
|
17
|
-
* @example
|
|
18
|
-
* {{#ifCondAnd 1 '==' 1 2 'in' '2,3' 2 'in' '1,2' }}1{{^}}2{{/ifCondAnd}}
|
|
19
|
-
* @descr Виконання перевірки порівняння параметрів та їх входження до певного масиву (множини)
|
|
20
|
-
* @example
|
|
21
|
-
*/
|
|
22
|
-
export default function ifCondAnd() {
|
|
23
|
-
const args = Array.from(arguments);
|
|
24
|
-
const options = args.pop();
|
|
25
|
-
|
|
26
|
-
const conditions = [];
|
|
27
|
-
for (let i = 0; i < args.length; i += 3) {
|
|
28
|
-
const v1 = args[i];
|
|
29
|
-
const operator = args[i + 1];
|
|
30
|
-
let v2 = args[i + 2];
|
|
31
|
-
|
|
32
|
-
switch (operator) {
|
|
33
|
-
case '==':
|
|
34
|
-
conditions.push(v1 == v2);
|
|
35
|
-
break;
|
|
36
|
-
case '!=':
|
|
37
|
-
conditions.push(v1 != v2);
|
|
38
|
-
break;
|
|
39
|
-
case '===':
|
|
40
|
-
conditions.push(v1 === v2);
|
|
41
|
-
break;
|
|
42
|
-
case '!==':
|
|
43
|
-
conditions.push(v1 !== v2);
|
|
44
|
-
break;
|
|
45
|
-
case '&&':
|
|
46
|
-
conditions.push(v1 && v2);
|
|
47
|
-
break;
|
|
48
|
-
case '||':
|
|
49
|
-
conditions.push(v1 || v2);
|
|
50
|
-
break;
|
|
51
|
-
case '<':
|
|
52
|
-
conditions.push(v1 < v2);
|
|
53
|
-
break;
|
|
54
|
-
case '<=':
|
|
55
|
-
conditions.push(v1 <= v2);
|
|
56
|
-
break;
|
|
57
|
-
case '>':
|
|
58
|
-
conditions.push(v1 > v2);
|
|
59
|
-
break;
|
|
60
|
-
case '>=':
|
|
61
|
-
conditions.push(v1 >= v2);
|
|
62
|
-
break;
|
|
63
|
-
case '&':
|
|
64
|
-
conditions.push(intersect(v1, v2).length > 0);
|
|
65
|
-
break;
|
|
66
|
-
case '!~':
|
|
67
|
-
conditions.push((v1 || '').indexOf(v2) === -1);
|
|
68
|
-
break;
|
|
69
|
-
case '~':
|
|
70
|
-
conditions.push((v1 || '').indexOf(v2) !== -1);
|
|
71
|
-
break;
|
|
72
|
-
case 'period':
|
|
73
|
-
conditions.push(new Date(v1) < new Date() && new Date(v2) > new Date());
|
|
74
|
-
break;
|
|
75
|
-
case 'in': {
|
|
76
|
-
if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
|
|
77
|
-
if (Array.isArray(v1)) {
|
|
78
|
-
conditions.push(v1.some((value) => v2.includes(value.toString())));
|
|
79
|
-
} else {
|
|
80
|
-
conditions.push(v2.includes(v1.toString()));
|
|
81
|
-
}
|
|
82
|
-
break;
|
|
83
|
-
}
|
|
84
|
-
case 'not in': {
|
|
85
|
-
if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
|
|
86
|
-
conditions.push(!v2.includes(v1.toString()));
|
|
87
|
-
break;
|
|
88
|
-
}
|
|
89
|
-
default:
|
|
90
|
-
conditions.push(false);
|
|
91
|
-
break;
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
return conditions.every(Boolean) ? options.fn(this) : options.inverse(this);
|
|
96
|
-
}
|
|
1
|
+
function intersect(a, b) {
|
|
2
|
+
const aN = Array.isArray(a) ? a : typeof a === 'string' ? a.split(',') : [];
|
|
3
|
+
const bN = Array.isArray(b) ? b : typeof b === 'string' ? b.split(',') : [];
|
|
4
|
+
|
|
5
|
+
return aN.filter((e) => bN.includes(e));
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Створення шаблона або його частини внаслідок виконання одразу декількох перевірок, кожна з яких повинна повернути true.
|
|
10
|
+
* Якщо хоча б одна умова не виконується, код у межах хелпера також не виконується.
|
|
11
|
+
*
|
|
12
|
+
* @summary Створення шаблона за перевіркою виконання декількох умов.
|
|
13
|
+
* @priority 4
|
|
14
|
+
* @type helper
|
|
15
|
+
* @tag condition
|
|
16
|
+
* @alias ifCondAnd
|
|
17
|
+
* @example
|
|
18
|
+
* {{#ifCondAnd 1 '==' 1 2 'in' '2,3' 2 'in' '1,2' }}1{{^}}2{{/ifCondAnd}}
|
|
19
|
+
* @descr Виконання перевірки порівняння параметрів та їх входження до певного масиву (множини)
|
|
20
|
+
* @example
|
|
21
|
+
*/
|
|
22
|
+
export default function ifCondAnd() {
|
|
23
|
+
const args = Array.from(arguments);
|
|
24
|
+
const options = args.pop();
|
|
25
|
+
|
|
26
|
+
const conditions = [];
|
|
27
|
+
for (let i = 0; i < args.length; i += 3) {
|
|
28
|
+
const v1 = args[i];
|
|
29
|
+
const operator = args[i + 1];
|
|
30
|
+
let v2 = args[i + 2];
|
|
31
|
+
|
|
32
|
+
switch (operator) {
|
|
33
|
+
case '==':
|
|
34
|
+
conditions.push(v1 == v2);
|
|
35
|
+
break;
|
|
36
|
+
case '!=':
|
|
37
|
+
conditions.push(v1 != v2);
|
|
38
|
+
break;
|
|
39
|
+
case '===':
|
|
40
|
+
conditions.push(v1 === v2);
|
|
41
|
+
break;
|
|
42
|
+
case '!==':
|
|
43
|
+
conditions.push(v1 !== v2);
|
|
44
|
+
break;
|
|
45
|
+
case '&&':
|
|
46
|
+
conditions.push(v1 && v2);
|
|
47
|
+
break;
|
|
48
|
+
case '||':
|
|
49
|
+
conditions.push(v1 || v2);
|
|
50
|
+
break;
|
|
51
|
+
case '<':
|
|
52
|
+
conditions.push(v1 < v2);
|
|
53
|
+
break;
|
|
54
|
+
case '<=':
|
|
55
|
+
conditions.push(v1 <= v2);
|
|
56
|
+
break;
|
|
57
|
+
case '>':
|
|
58
|
+
conditions.push(v1 > v2);
|
|
59
|
+
break;
|
|
60
|
+
case '>=':
|
|
61
|
+
conditions.push(v1 >= v2);
|
|
62
|
+
break;
|
|
63
|
+
case '&':
|
|
64
|
+
conditions.push(intersect(v1, v2).length > 0);
|
|
65
|
+
break;
|
|
66
|
+
case '!~':
|
|
67
|
+
conditions.push((v1 || '').indexOf(v2) === -1);
|
|
68
|
+
break;
|
|
69
|
+
case '~':
|
|
70
|
+
conditions.push((v1 || '').indexOf(v2) !== -1);
|
|
71
|
+
break;
|
|
72
|
+
case 'period':
|
|
73
|
+
conditions.push(new Date(v1) < new Date() && new Date(v2) > new Date());
|
|
74
|
+
break;
|
|
75
|
+
case 'in': {
|
|
76
|
+
if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
|
|
77
|
+
if (Array.isArray(v1)) {
|
|
78
|
+
conditions.push(v1.some((value) => v2.includes(value.toString())));
|
|
79
|
+
} else {
|
|
80
|
+
conditions.push(v2.includes(v1.toString()));
|
|
81
|
+
}
|
|
82
|
+
break;
|
|
83
|
+
}
|
|
84
|
+
case 'not in': {
|
|
85
|
+
if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
|
|
86
|
+
conditions.push(!v2.includes(v1.toString()));
|
|
87
|
+
break;
|
|
88
|
+
}
|
|
89
|
+
default:
|
|
90
|
+
conditions.push(false);
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
return conditions.every(Boolean) ? options.fn(this) : options.inverse(this);
|
|
96
|
+
}
|
|
@@ -1,98 +1,98 @@
|
|
|
1
|
-
function intersect(a, b) {
|
|
2
|
-
const aN = Array.isArray(a) ? a : typeof a === 'string' ? a.split(',') : [];
|
|
3
|
-
const bN = Array.isArray(b) ? b : typeof b === 'string' ? b.split(',') : [];
|
|
4
|
-
|
|
5
|
-
return aN.filter((e) => bN.includes(e));
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Створення шаблона або його частини внаслідок виконання одразу декількох перевірок, хоча б одна з яких повинна повернути true
|
|
11
|
-
*
|
|
12
|
-
* @summary Створення шаблона за перевіркою "АБО". Повинна виконатись хоча б одна умова.
|
|
13
|
-
* @priority 4
|
|
14
|
-
* @type helper
|
|
15
|
-
* @tag condition
|
|
16
|
-
* @alias ifCondOr
|
|
17
|
-
* @example
|
|
18
|
-
* {{#ifCondOr 1 '==' 1 2 'in' '2,3' 2 'in' '1,2' }}Хоча б одна умова виконана{{^}}Жодна умова не була виконана{{/ifCondOr}}
|
|
19
|
-
* @descr Виконання перевірки порівняння параметрів та їх входження до певного масиву (множини)
|
|
20
|
-
* @example
|
|
21
|
-
* @param {Array} args Параметри для значень і умов
|
|
22
|
-
* @returns {String} Returns HTML
|
|
23
|
-
*/
|
|
24
|
-
export default function ifCondOr() {
|
|
25
|
-
const args = Array.from(arguments);
|
|
26
|
-
const options = args.pop();
|
|
27
|
-
|
|
28
|
-
const conditions = [];
|
|
29
|
-
for (let i = 0; i < args.length; i += 3) {
|
|
30
|
-
const v1 = args[i];
|
|
31
|
-
const operator = args[i + 1];
|
|
32
|
-
let v2 = args[i + 2];
|
|
33
|
-
|
|
34
|
-
switch (operator) {
|
|
35
|
-
case '==':
|
|
36
|
-
conditions.push(v1 == v2);
|
|
37
|
-
break;
|
|
38
|
-
case '!=':
|
|
39
|
-
conditions.push(v1 != v2);
|
|
40
|
-
break;
|
|
41
|
-
case '===':
|
|
42
|
-
conditions.push(v1 === v2);
|
|
43
|
-
break;
|
|
44
|
-
case '!==':
|
|
45
|
-
conditions.push(v1 !== v2);
|
|
46
|
-
break;
|
|
47
|
-
case '&&':
|
|
48
|
-
conditions.push(v1 && v2);
|
|
49
|
-
break;
|
|
50
|
-
case '||':
|
|
51
|
-
conditions.push(v1 || v2);
|
|
52
|
-
break;
|
|
53
|
-
case '<':
|
|
54
|
-
conditions.push(v1 < v2);
|
|
55
|
-
break;
|
|
56
|
-
case '<=':
|
|
57
|
-
conditions.push(v1 <= v2);
|
|
58
|
-
break;
|
|
59
|
-
case '>':
|
|
60
|
-
conditions.push(v1 > v2);
|
|
61
|
-
break;
|
|
62
|
-
case '>=':
|
|
63
|
-
conditions.push(v1 >= v2);
|
|
64
|
-
break;
|
|
65
|
-
case '&':
|
|
66
|
-
conditions.push(intersect(v1, v2).length > 0);
|
|
67
|
-
break;
|
|
68
|
-
case '!~':
|
|
69
|
-
conditions.push((v1 || '').indexOf(v2) === -1);
|
|
70
|
-
break;
|
|
71
|
-
case '~':
|
|
72
|
-
conditions.push((v1 || '').indexOf(v2) !== -1);
|
|
73
|
-
break;
|
|
74
|
-
case 'period':
|
|
75
|
-
conditions.push(new Date(v1) < new Date() && new Date(v2) > new Date());
|
|
76
|
-
break;
|
|
77
|
-
case 'in': {
|
|
78
|
-
if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
|
|
79
|
-
if (Array.isArray(v1)) {
|
|
80
|
-
conditions.push(v1.some((value) => v2.includes(value.toString())));
|
|
81
|
-
} else {
|
|
82
|
-
conditions.push(v2.includes(v1.toString()));
|
|
83
|
-
}
|
|
84
|
-
break;
|
|
85
|
-
}
|
|
86
|
-
case 'not in': {
|
|
87
|
-
if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
|
|
88
|
-
conditions.push(!v2.includes(v1.toString()));
|
|
89
|
-
break;
|
|
90
|
-
}
|
|
91
|
-
default:
|
|
92
|
-
conditions.push(false);
|
|
93
|
-
break;
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
return conditions.some(Boolean) ? options.fn(this) : options.inverse(this);
|
|
98
|
-
}
|
|
1
|
+
function intersect(a, b) {
|
|
2
|
+
const aN = Array.isArray(a) ? a : typeof a === 'string' ? a.split(',') : [];
|
|
3
|
+
const bN = Array.isArray(b) ? b : typeof b === 'string' ? b.split(',') : [];
|
|
4
|
+
|
|
5
|
+
return aN.filter((e) => bN.includes(e));
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Створення шаблона або його частини внаслідок виконання одразу декількох перевірок, хоча б одна з яких повинна повернути true
|
|
11
|
+
*
|
|
12
|
+
* @summary Створення шаблона за перевіркою "АБО". Повинна виконатись хоча б одна умова.
|
|
13
|
+
* @priority 4
|
|
14
|
+
* @type helper
|
|
15
|
+
* @tag condition
|
|
16
|
+
* @alias ifCondOr
|
|
17
|
+
* @example
|
|
18
|
+
* {{#ifCondOr 1 '==' 1 2 'in' '2,3' 2 'in' '1,2' }}Хоча б одна умова виконана{{^}}Жодна умова не була виконана{{/ifCondOr}}
|
|
19
|
+
* @descr Виконання перевірки порівняння параметрів та їх входження до певного масиву (множини)
|
|
20
|
+
* @example
|
|
21
|
+
* @param {Array} args Параметри для значень і умов
|
|
22
|
+
* @returns {String} Returns HTML
|
|
23
|
+
*/
|
|
24
|
+
export default function ifCondOr() {
|
|
25
|
+
const args = Array.from(arguments);
|
|
26
|
+
const options = args.pop();
|
|
27
|
+
|
|
28
|
+
const conditions = [];
|
|
29
|
+
for (let i = 0; i < args.length; i += 3) {
|
|
30
|
+
const v1 = args[i];
|
|
31
|
+
const operator = args[i + 1];
|
|
32
|
+
let v2 = args[i + 2];
|
|
33
|
+
|
|
34
|
+
switch (operator) {
|
|
35
|
+
case '==':
|
|
36
|
+
conditions.push(v1 == v2);
|
|
37
|
+
break;
|
|
38
|
+
case '!=':
|
|
39
|
+
conditions.push(v1 != v2);
|
|
40
|
+
break;
|
|
41
|
+
case '===':
|
|
42
|
+
conditions.push(v1 === v2);
|
|
43
|
+
break;
|
|
44
|
+
case '!==':
|
|
45
|
+
conditions.push(v1 !== v2);
|
|
46
|
+
break;
|
|
47
|
+
case '&&':
|
|
48
|
+
conditions.push(v1 && v2);
|
|
49
|
+
break;
|
|
50
|
+
case '||':
|
|
51
|
+
conditions.push(v1 || v2);
|
|
52
|
+
break;
|
|
53
|
+
case '<':
|
|
54
|
+
conditions.push(v1 < v2);
|
|
55
|
+
break;
|
|
56
|
+
case '<=':
|
|
57
|
+
conditions.push(v1 <= v2);
|
|
58
|
+
break;
|
|
59
|
+
case '>':
|
|
60
|
+
conditions.push(v1 > v2);
|
|
61
|
+
break;
|
|
62
|
+
case '>=':
|
|
63
|
+
conditions.push(v1 >= v2);
|
|
64
|
+
break;
|
|
65
|
+
case '&':
|
|
66
|
+
conditions.push(intersect(v1, v2).length > 0);
|
|
67
|
+
break;
|
|
68
|
+
case '!~':
|
|
69
|
+
conditions.push((v1 || '').indexOf(v2) === -1);
|
|
70
|
+
break;
|
|
71
|
+
case '~':
|
|
72
|
+
conditions.push((v1 || '').indexOf(v2) !== -1);
|
|
73
|
+
break;
|
|
74
|
+
case 'period':
|
|
75
|
+
conditions.push(new Date(v1) < new Date() && new Date(v2) > new Date());
|
|
76
|
+
break;
|
|
77
|
+
case 'in': {
|
|
78
|
+
if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
|
|
79
|
+
if (Array.isArray(v1)) {
|
|
80
|
+
conditions.push(v1.some((value) => v2.includes(value.toString())));
|
|
81
|
+
} else {
|
|
82
|
+
conditions.push(v2.includes(v1.toString()));
|
|
83
|
+
}
|
|
84
|
+
break;
|
|
85
|
+
}
|
|
86
|
+
case 'not in': {
|
|
87
|
+
if (typeof v2 === 'string') v2 = v2.split(',').map(item => item.trim());
|
|
88
|
+
conditions.push(!v2.includes(v1.toString()));
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
default:
|
|
92
|
+
conditions.push(false);
|
|
93
|
+
break;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
return conditions.some(Boolean) ? options.fn(this) : options.inverse(this);
|
|
98
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Складення двох значень з масива
|
|
3
|
-
*
|
|
4
|
-
* @summary Складення двох значень з масива. Є можливість використання у якості порядокового номеру
|
|
5
|
-
* @priority 3
|
|
6
|
-
* @type helper
|
|
7
|
-
* @alias inc
|
|
8
|
-
* @tag math
|
|
9
|
-
* @example
|
|
10
|
-
* {{{inc (coalesce @index 0)}}}
|
|
11
|
-
* @descr При використанні в межах циклу, дозволяє відображати віртуальний індекс
|
|
12
|
-
* @param {Array} args Масив чисел для складання
|
|
13
|
-
* @returns {String} Returns HTML
|
|
14
|
-
*/
|
|
15
|
-
export default function inc(...args) {
|
|
16
|
-
const firstValue = args[0] || 0;
|
|
17
|
-
const secondValue = typeof args[1] === 'number' ? args[1] : 1;
|
|
18
|
-
|
|
19
|
-
return firstValue + secondValue;
|
|
20
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Складення двох значень з масива
|
|
3
|
+
*
|
|
4
|
+
* @summary Складення двох значень з масива. Є можливість використання у якості порядокового номеру
|
|
5
|
+
* @priority 3
|
|
6
|
+
* @type helper
|
|
7
|
+
* @alias inc
|
|
8
|
+
* @tag math
|
|
9
|
+
* @example
|
|
10
|
+
* {{{inc (coalesce @index 0)}}}
|
|
11
|
+
* @descr При використанні в межах циклу, дозволяє відображати віртуальний індекс
|
|
12
|
+
* @param {Array} args Масив чисел для складання
|
|
13
|
+
* @returns {String} Returns HTML
|
|
14
|
+
*/
|
|
15
|
+
export default function inc(...args) {
|
|
16
|
+
const firstValue = args[0] || 0;
|
|
17
|
+
const secondValue = typeof args[1] === 'number' ? args[1] : 1;
|
|
18
|
+
|
|
19
|
+
return firstValue + secondValue;
|
|
20
|
+
}
|
|
21
21
|
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export default function (data) {
|
|
2
|
-
return JSON.stringify(data, null, 2)
|
|
1
|
+
export default function (data) {
|
|
2
|
+
return JSON.stringify(data, null, 2)
|
|
3
3
|
}
|