@idevs/corelib 0.0.89 → 0.0.91
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/dist/editors/checkboxButtonEditor.d.ts +5 -3
- package/dist/editors/checkboxButtonEditor.js +33 -34
- package/dist/editors/checkboxButtonEditor.js.map +1 -1
- package/dist/editors/dateMonthEditor.d.ts +3 -3
- package/dist/editors/dateMonthEditor.js +3 -4
- package/dist/editors/dateMonthEditor.js.map +1 -1
- package/dist/formatters/formatters.d.ts +20 -8
- package/dist/formatters/formatters.js +20 -31
- package/dist/formatters/formatters.js.map +1 -1
- package/dist/ui/DropdownToolButton.js +11 -11
- package/dist/ui/DropdownToolButton.js.map +1 -1
- package/dist/ui/ToggleToolButton.js +2 -2
- package/dist/ui/ToggleToolButton.js.map +1 -1
- package/package.json +3 -3
- package/src/editors/checkboxButtonEditor.ts +57 -32
- package/src/editors/dateMonthEditor.ts +4 -5
- package/src/formatters/formatters.ts +22 -31
- package/src/tsconfig.json +1 -1
- package/src/ui/DropdownToolButton.ts +11 -13
- package/src/ui/ToggleToolButton.ts +2 -2
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { EditorProps, EditorWidget, IReadOnly } from '@serenity-is/corelib';
|
|
2
2
|
export type CheckboxButtonEditorOptions = {
|
|
3
3
|
enumKey?: string;
|
|
4
4
|
enumType?: any;
|
|
5
5
|
lookupKey?: string;
|
|
6
6
|
isStringId?: boolean;
|
|
7
7
|
};
|
|
8
|
-
export declare class CheckboxButtonEditor extends
|
|
8
|
+
export declare class CheckboxButtonEditor<P extends CheckboxButtonEditorOptions = CheckboxButtonEditorOptions> extends EditorWidget<P> implements IReadOnly {
|
|
9
9
|
private _items;
|
|
10
10
|
private readonly _idField;
|
|
11
11
|
private readonly _textField;
|
|
12
12
|
private readonly _isStringId;
|
|
13
|
-
|
|
13
|
+
static createDefaultElement(): HTMLDivElement;
|
|
14
|
+
readonly domNode: HTMLElement;
|
|
15
|
+
constructor(props: EditorProps<P>);
|
|
14
16
|
protected renderCheckboxes(): void;
|
|
15
17
|
protected addCheckbox(value: string, text: string): void;
|
|
16
18
|
get_items(): Array<{
|
|
@@ -7,13 +7,14 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
7
7
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
8
8
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
9
9
|
};
|
|
10
|
-
import { Decorators, EnumKeyAttribute, EnumTypeRegistry,
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
import { Decorators, EditorWidget, Enum, EnumKeyAttribute, EnumTypeRegistry, Fluent, getCustomAttributes, getLookup, isEmptyOrNull, toId, tryGetText, } from '@serenity-is/corelib';
|
|
11
|
+
let CheckboxButtonEditor = class CheckboxButtonEditor extends EditorWidget {
|
|
12
|
+
static createDefaultElement() {
|
|
13
|
+
return Fluent('div').getNode();
|
|
14
|
+
}
|
|
15
|
+
constructor(props) {
|
|
15
16
|
var _a;
|
|
16
|
-
super(
|
|
17
|
+
super(props);
|
|
17
18
|
if (isEmptyOrNull(this.options.enumKey) && this.options.enumType == null && isEmptyOrNull(this.options.lookupKey)) {
|
|
18
19
|
return;
|
|
19
20
|
}
|
|
@@ -28,7 +29,7 @@ let CheckboxButtonEditor = class CheckboxButtonEditor extends Widget {
|
|
|
28
29
|
const enumType = this.options.enumType || EnumTypeRegistry.get(this.options.enumKey);
|
|
29
30
|
let enumKey = this.options.enumKey;
|
|
30
31
|
if (enumKey == null && enumType != null) {
|
|
31
|
-
const enumKeyAttr =
|
|
32
|
+
const enumKeyAttr = getCustomAttributes(enumType, EnumKeyAttribute, false);
|
|
32
33
|
if (enumKeyAttr.length > 0) {
|
|
33
34
|
enumKey = enumKeyAttr[0].value;
|
|
34
35
|
}
|
|
@@ -39,10 +40,13 @@ let CheckboxButtonEditor = class CheckboxButtonEditor extends Widget {
|
|
|
39
40
|
this.addCheckbox(x.toString(), (_a = tryGetText('Enums.' + enumKey + '.' + name)) !== null && _a !== void 0 ? _a : name);
|
|
40
41
|
}
|
|
41
42
|
}
|
|
42
|
-
this.
|
|
43
|
+
this.domNode.classList.add('d-flex', 'flex-wrap');
|
|
43
44
|
}
|
|
44
45
|
renderCheckboxes() {
|
|
45
|
-
this.
|
|
46
|
+
const childDivs = this.domNode.querySelectorAll('div');
|
|
47
|
+
childDivs.forEach(function (child) {
|
|
48
|
+
this.domNode.removeChild(child);
|
|
49
|
+
});
|
|
46
50
|
for (const item of this._items) {
|
|
47
51
|
const textValue = item[this._textField];
|
|
48
52
|
const text = textValue == null ? '' : textValue.toString();
|
|
@@ -60,7 +64,7 @@ let CheckboxButtonEditor = class CheckboxButtonEditor extends Widget {
|
|
|
60
64
|
.attr('value', value)
|
|
61
65
|
.prependTo(label);
|
|
62
66
|
label.appendTo(div);
|
|
63
|
-
div.appendTo(this.
|
|
67
|
+
div.appendTo(this.domNode);
|
|
64
68
|
}
|
|
65
69
|
get_items() {
|
|
66
70
|
return this._items;
|
|
@@ -77,8 +81,9 @@ let CheckboxButtonEditor = class CheckboxButtonEditor extends Widget {
|
|
|
77
81
|
}
|
|
78
82
|
get_value() {
|
|
79
83
|
const val = [];
|
|
80
|
-
this.
|
|
81
|
-
|
|
84
|
+
const inputs = this.domNode.querySelectorAll('input:checked');
|
|
85
|
+
inputs.forEach((input) => {
|
|
86
|
+
val.push(this._isStringId ? input.value : toId(input.value));
|
|
82
87
|
});
|
|
83
88
|
return val.join(',');
|
|
84
89
|
}
|
|
@@ -91,49 +96,43 @@ let CheckboxButtonEditor = class CheckboxButtonEditor extends Widget {
|
|
|
91
96
|
if (!isEmptyOrNull(value)) {
|
|
92
97
|
values = this._isStringId ? value.split(',') : value.split(',').map(p => Number(p));
|
|
93
98
|
}
|
|
94
|
-
const inputs = this.
|
|
95
|
-
inputs.
|
|
96
|
-
;
|
|
97
|
-
e.checked = false;
|
|
99
|
+
const inputs = this.domNode.querySelectorAll('input');
|
|
100
|
+
inputs.forEach(input => {
|
|
101
|
+
input.checked = false;
|
|
98
102
|
});
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
const checks = inputs.filter('[value=' + v + ']');
|
|
102
|
-
if (checks.length > 0) {
|
|
103
|
-
;
|
|
104
|
-
checks[0].checked = true;
|
|
105
|
-
}
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
else {
|
|
109
|
-
const checks = inputs.filter('[value=' + values + ']');
|
|
103
|
+
values.forEach(v => {
|
|
104
|
+
const checks = Array.from(inputs).filter(input => input.value === v);
|
|
110
105
|
if (checks.length > 0) {
|
|
111
|
-
;
|
|
112
106
|
checks[0].checked = true;
|
|
113
107
|
}
|
|
114
|
-
}
|
|
108
|
+
});
|
|
115
109
|
}
|
|
116
110
|
}
|
|
117
111
|
set value(v) {
|
|
118
112
|
this.set_value(v);
|
|
119
113
|
}
|
|
120
114
|
get_readOnly() {
|
|
121
|
-
return this.
|
|
115
|
+
return this.domNode.getAttribute('disabled') != null;
|
|
122
116
|
}
|
|
123
117
|
set_readOnly(value) {
|
|
124
118
|
if (this.get_readOnly() !== value) {
|
|
125
119
|
if (value) {
|
|
126
|
-
this.
|
|
120
|
+
this.domNode.setAttribute('disabled', 'disabled');
|
|
121
|
+
this.domNode.querySelectorAll('input').forEach(input => {
|
|
122
|
+
input.setAttribute('disabled', 'disabled');
|
|
123
|
+
});
|
|
127
124
|
}
|
|
128
125
|
else {
|
|
129
|
-
this.
|
|
126
|
+
this.domNode.removeAttribute('disabled');
|
|
127
|
+
this.domNode.querySelectorAll('input').forEach(input => {
|
|
128
|
+
input.removeAttribute('disabled');
|
|
129
|
+
});
|
|
130
130
|
}
|
|
131
131
|
}
|
|
132
132
|
}
|
|
133
133
|
};
|
|
134
134
|
CheckboxButtonEditor = __decorate([
|
|
135
|
-
Decorators.registerEditor('CheckboxButtonEditor')
|
|
136
|
-
Element('<div/>')
|
|
135
|
+
Decorators.registerEditor('CheckboxButtonEditor')
|
|
137
136
|
], CheckboxButtonEditor);
|
|
138
137
|
export { CheckboxButtonEditor };
|
|
139
138
|
export class idevsEditors {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkboxButtonEditor.js","sourceRoot":"","sources":["../../src/editors/checkboxButtonEditor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/adjacent-overload-signatures */\n// reference: https://github-wiki-see.page/m/serenity-is/Serenity/wiki/CheckBox-Group-Editor\n\nimport { Decorators, EnumKeyAttribute, EnumTypeRegistry, IReadOnly, Widget } from '@serenity-is/corelib'\nimport { Enum, getAttributes, getLookup, isArray, isEmptyOrNull, toId, tryGetText } from '@serenity-is/corelib'\nimport Element = Decorators.element\n\nexport type CheckboxButtonEditorOptions = {\n enumKey?: string\n enumType?: any\n lookupKey?: string\n isStringId?: boolean\n}\n\n@Decorators.registerEditor('CheckboxButtonEditor')\n@Element('<div/>')\nexport class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> implements IReadOnly {\n private _items: Array<{ [key: string]: any }>\n private readonly _idField: string\n private readonly _textField: string\n private readonly _isStringId: boolean\n\n constructor(input: JQuery, opt: CheckboxButtonEditorOptions) {\n super(input, opt)\n\n if (isEmptyOrNull(this.options.enumKey) && this.options.enumType == null && isEmptyOrNull(this.options.lookupKey)) {\n return\n }\n\n this._isStringId = this.options.isStringId\n\n if (!isEmptyOrNull(this.options.lookupKey)) {\n const lookup = getLookup(this.options.lookupKey)\n this._idField = lookup.idField\n this._textField = lookup.textField\n this.set_items(lookup.items as Array<{ [key: string]: any }>)\n } else {\n const enumType = this.options.enumType || EnumTypeRegistry.get(this.options.enumKey)\n let enumKey = this.options.enumKey\n\n if (enumKey == null && enumType != null) {\n const enumKeyAttr = getAttributes(enumType, EnumKeyAttribute, false)\n if (enumKeyAttr.length > 0) {\n enumKey = enumKeyAttr[0].value\n }\n }\n const values = Enum.getValues(enumType)\n for (const x of values) {\n const name = Enum.toString(enumType, x)\n this.addCheckbox(x.toString(), tryGetText('Enums.' + enumKey + '.' + name) ?? name)\n }\n }\n\n this.element.addClass('d-flex flex-wrap')\n }\n\n protected renderCheckboxes() {\n this.element.children('div').remove()\n\n for (const item of this._items) {\n const textValue = item[this._textField]\n const text = textValue == null ? '' : textValue.toString()\n const idValue = item[this._idField]\n const id = idValue == null ? '' : idValue.toString()\n this.addCheckbox(id, text)\n }\n }\n\n protected addCheckbox(value: string, text: string) {\n const div = $('<div class=\"col-12 col-sm-6 col-md-4 col-xl-3\" />')\n const label = $('<label/>').text(text.replace(/, /g, ',').replace(/,/g, ', '))\n $('<input type=\"checkbox\" class=\"me-2\" />')\n .attr('name', this.uniqueName)\n .attr('id', this.uniqueName + '_' + value)\n .attr('value', value)\n .prependTo(label)\n label.appendTo(div)\n div.appendTo(this.element)\n }\n\n get_items(): Array<{ [key: string]: any }> {\n return this._items\n }\n\n get items(): Array<{ [key: string]: any }> {\n return this.get_items()\n }\n\n set_items(value: Array<{ [key: string]: any }>) {\n this._items = value\n this.renderCheckboxes()\n }\n\n set items(v: Array<{ [key: string]: any }>) {\n this.set_items(v)\n }\n\n get_value(): string {\n const val: unknown[] = []\n this.element.find('input:checked').each((i, e) => {\n val.push(this._isStringId ? $(e).val() : toId($(e).val()))\n })\n return val.join(',')\n }\n\n get value(): string {\n return this.get_value()\n }\n\n set_value(value: string): void {\n if (value !== this.get_value()) {\n let values: unknown[] = []\n if (!isEmptyOrNull(value)) {\n values = this._isStringId ? value.split(',') : value.split(',').map(p => Number(p))\n }\n const inputs = this.element.find('input')\n inputs.each((i, e) => {\n ;(e as HTMLInputElement).checked = false\n })\n\n if (isArray(values)) {\n values.forEach(v => {\n const checks = inputs.filter('[value=' + v + ']')\n if (checks.length > 0) {\n ;(checks[0] as HTMLInputElement).checked = true\n }\n })\n } else {\n const checks = inputs.filter('[value=' + values + ']')\n if (checks.length > 0) {\n ;(checks[0] as HTMLInputElement).checked = true\n }\n }\n }\n }\n\n set value(v: string) {\n this.set_value(v)\n }\n\n get_readOnly(): boolean {\n return this.element.attr('disabled') != null\n }\n\n set_readOnly(value: boolean): void {\n if (this.get_readOnly() !== value) {\n if (value) {\n this.element.attr('disabled', 'disabled').find('input').attr('disabled', 'disabled')\n } else {\n this.element.removeAttr('disabled').find('input').removeAttr('disabled')\n }\n }\n }\n}\n\nexport class idevsEditors {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public static load() {}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"checkboxButtonEditor.js","sourceRoot":"","sources":["../../src/editors/checkboxButtonEditor.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/adjacent-overload-signatures */\n// reference: https://github-wiki-see.page/m/serenity-is/Serenity/wiki/CheckBox-Group-Editor\n\nimport {\n Decorators,\n EditorProps,\n EditorWidget,\n Enum,\n EnumKeyAttribute,\n EnumTypeRegistry,\n Fluent,\n IReadOnly,\n getCustomAttributes,\n getLookup,\n isArray,\n isEmptyOrNull,\n toId,\n tryGetText,\n} from '@serenity-is/corelib'\n\nexport type CheckboxButtonEditorOptions = {\n enumKey?: string\n enumType?: any\n lookupKey?: string\n isStringId?: boolean\n}\n\n@Decorators.registerEditor('CheckboxButtonEditor')\nexport class CheckboxButtonEditor<P extends CheckboxButtonEditorOptions = CheckboxButtonEditorOptions>\n extends EditorWidget<P>\n implements IReadOnly\n{\n private _items: Array<{ [key: string]: any }>\n private readonly _idField: string\n private readonly _textField: string\n private readonly _isStringId: boolean\n\n static override createDefaultElement() {\n return Fluent('div').getNode()\n }\n declare readonly domNode: HTMLElement\n\n constructor(props: EditorProps<P>) {\n super(props)\n\n if (isEmptyOrNull(this.options.enumKey) && this.options.enumType == null && isEmptyOrNull(this.options.lookupKey)) {\n return\n }\n\n this._isStringId = this.options.isStringId\n\n if (!isEmptyOrNull(this.options.lookupKey)) {\n const lookup = getLookup(this.options.lookupKey)\n this._idField = lookup.idField\n this._textField = lookup.textField\n this.set_items(lookup.items as Array<{ [key: string]: any }>)\n } else {\n const enumType = this.options.enumType || EnumTypeRegistry.get(this.options.enumKey)\n let enumKey = this.options.enumKey\n\n if (enumKey == null && enumType != null) {\n const enumKeyAttr = getCustomAttributes(enumType, EnumKeyAttribute, false)\n if (enumKeyAttr.length > 0) {\n enumKey = enumKeyAttr[0].value\n }\n }\n const values = Enum.getValues(enumType)\n for (const x of values) {\n const name = Enum.toString(enumType, x)\n this.addCheckbox(x.toString(), tryGetText('Enums.' + enumKey + '.' + name) ?? name)\n }\n }\n\n this.domNode.classList.add('d-flex', 'flex-wrap')\n }\n\n protected renderCheckboxes() {\n const childDivs = this.domNode.querySelectorAll('div')\n childDivs.forEach(function (child) {\n this.domNode.removeChild(child)\n })\n\n for (const item of this._items) {\n const textValue = item[this._textField]\n const text = textValue == null ? '' : textValue.toString()\n const idValue = item[this._idField]\n const id = idValue == null ? '' : idValue.toString()\n this.addCheckbox(id, text)\n }\n }\n\n protected addCheckbox(value: string, text: string) {\n const div = $('<div class=\"col-12 col-sm-6 col-md-4 col-xl-3\" />')\n const label = $('<label/>').text(text.replace(/, /g, ',').replace(/,/g, ', '))\n $('<input type=\"checkbox\" class=\"me-2\" />')\n .attr('name', this.uniqueName)\n .attr('id', this.uniqueName + '_' + value)\n .attr('value', value)\n .prependTo(label)\n label.appendTo(div)\n div.appendTo(this.domNode)\n }\n\n get_items(): Array<{ [key: string]: any }> {\n return this._items\n }\n\n get items(): Array<{ [key: string]: any }> {\n return this.get_items()\n }\n\n set_items(value: Array<{ [key: string]: any }>) {\n this._items = value\n this.renderCheckboxes()\n }\n\n set items(v: Array<{ [key: string]: any }>) {\n this.set_items(v)\n }\n\n get_value() {\n const val: string[] = []\n const inputs = this.domNode.querySelectorAll('input:checked')\n\n inputs.forEach((input: HTMLInputElement) => {\n val.push(this._isStringId ? input.value : toId(input.value))\n })\n\n return val.join(',')\n }\n\n get value(): string {\n return this.get_value()\n }\n\n set_value(value: string): void {\n if (value !== this.get_value()) {\n let values: unknown[] = []\n if (!isEmptyOrNull(value)) {\n values = this._isStringId ? value.split(',') : value.split(',').map(p => Number(p))\n }\n const inputs = this.domNode.querySelectorAll<HTMLInputElement>('input')\n inputs.forEach(input => {\n input.checked = false\n })\n\n values.forEach(v => {\n const checks = Array.from(inputs).filter(input => (input as HTMLInputElement).value === v)\n if (checks.length > 0) {\n (checks[0] as HTMLInputElement).checked = true\n }\n })\n }\n }\n\n set value(v: string) {\n this.set_value(v)\n }\n\n get_readOnly(): boolean {\n return this.domNode.getAttribute('disabled') != null\n }\n\n set_readOnly(value: boolean): void {\n if (this.get_readOnly() !== value) {\n if (value) {\n this.domNode.setAttribute('disabled', 'disabled')\n this.domNode.querySelectorAll<HTMLInputElement>('input').forEach(input => {\n input.setAttribute('disabled', 'disabled')\n })\n } else {\n this.domNode.removeAttribute('disabled')\n this.domNode.querySelectorAll<HTMLInputElement>('input').forEach(input => {\n input.removeAttribute('disabled')\n })\n }\n }\n }\n}\n\nexport class idevsEditors {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public static load() {}\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { SelectEditor, SelectEditorOptions } from '@serenity-is/corelib';
|
|
2
|
-
export declare class DateMonthEditor extends SelectEditor {
|
|
1
|
+
import { EditorProps, SelectEditor, SelectEditorOptions } from '@serenity-is/corelib';
|
|
2
|
+
export declare class DateMonthEditor<P extends DateMonthEditorOptions = DateMonthEditorOptions> extends SelectEditor<P> {
|
|
3
3
|
private months;
|
|
4
|
-
constructor(
|
|
4
|
+
constructor(props: EditorProps<P>);
|
|
5
5
|
get valueAsMonth(): number;
|
|
6
6
|
getItems(): any[];
|
|
7
7
|
}
|
|
@@ -4,11 +4,10 @@
|
|
|
4
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
6
|
};
|
|
7
|
-
import { Decorators, SelectEditor } from '@serenity-is/corelib';
|
|
8
|
-
import { indexOf } from '@serenity-is/corelib';
|
|
7
|
+
import { Decorators, SelectEditor, indexOf } from '@serenity-is/corelib';
|
|
9
8
|
let DateMonthEditor = class DateMonthEditor extends SelectEditor {
|
|
10
|
-
constructor(
|
|
11
|
-
super(
|
|
9
|
+
constructor(props) {
|
|
10
|
+
super(props);
|
|
12
11
|
this.updateItems();
|
|
13
12
|
}
|
|
14
13
|
get valueAsMonth() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateMonthEditor.js","sourceRoot":"","sources":["../../src/editors/dateMonthEditor.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"dateMonthEditor.js","sourceRoot":"","sources":["../../src/editors/dateMonthEditor.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAe,YAAY,EAAuB,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAGnG,IAAM,eAAe,GAArB,MAAM,eAA2E,SAAQ,YAAe;IAG7G,YAAY,KAAqB;QAC/B,KAAK,CAAC,KAAK,CAAC,CAAA;QAEZ,IAAI,CAAC,WAAW,EAAE,CAAA;IACpB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;IACnD,CAAC;IAED,QAAQ;;QACN,MAAM,GAAG,GAAG,IAAI,CAAC,OAAiC,CAAA;QAElD,IAAI,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YAC/C,OAAO,GAAG,CAAC,KAAK,CAAA;QAClB,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAA;QACxB,IAAI,CAAC,MAAM,GAAG,EAAE,CAAA;QAChB,MAAM,MAAM,GAAG,MAAA,GAAG,CAAC,MAAM,mCAAI,IAAI,CAAA;QACjC,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,MAAA,GAAG,CAAC,OAAO,mCAAI,SAAS,EAAE,CAAA;QACnD,MAAM,SAAS,GAAG,MAAA,GAAG,CAAC,SAAS,mCAAI,KAAK,CAAA;QAExC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7B,IAAI,CAAC,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;YAC/E,IAAI,SAAS,EAAE,CAAC;gBACd,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;YACrB,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACrB,CAAC;QAED,OAAO,IAAI,CAAC,MAAM,CAAA;IACpB,CAAC;CACF,CAAA;AApCY,eAAe;IAD3B,UAAU,CAAC,cAAc,CAAC,iBAAiB,CAAC;GAChC,eAAe,CAoC3B","sourcesContent":["import { Decorators, EditorProps, SelectEditor, SelectEditorOptions, indexOf } from '@serenity-is/corelib'\n\n@Decorators.registerEditor('DateMonthEditor')\nexport class DateMonthEditor<P extends DateMonthEditorOptions = DateMonthEditorOptions> extends SelectEditor<P> {\n private months: string[]\n\n constructor(props: EditorProps<P>) {\n super(props)\n\n this.updateItems()\n }\n\n get valueAsMonth() {\n return indexOf(this.months, x => x == this.value)\n }\n\n getItems() {\n const opt = this.options as DateMonthEditorOptions\n\n if (opt.items != null && opt.items.length >= 1) {\n return opt.items\n }\n\n const today = new Date()\n this.months = []\n const locale = opt.locale ?? 'en'\n const options = { month: opt.display ?? '2-digit' }\n const upperCase = opt.upperCase ?? false\n\n for (let i = 0; i <= 11; i++) {\n let m = new Date(today.getFullYear(), i, 1).toLocaleDateString(locale, options)\n if (upperCase) {\n m = m.toUpperCase()\n }\n this.months.push(m)\n }\n\n return this.months\n }\n}\n\n// eslint-disable-next-line @typescript-eslint/consistent-type-definitions\nexport interface DateMonthEditorOptions extends SelectEditorOptions {\n display?: '2-digit' | 'short' | 'long'\n locale?: 'en' | 'th'\n upperCase?: boolean\n}\n"]}
|
|
@@ -3,17 +3,29 @@ export type Formatter = {
|
|
|
3
3
|
format(ctx: FormatterContext): string;
|
|
4
4
|
};
|
|
5
5
|
export declare class ZeroDisplayFormatter implements Formatter {
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
readonly props: {
|
|
7
|
+
displayText?: string;
|
|
8
|
+
};
|
|
9
|
+
constructor(props?: {
|
|
10
|
+
displayText?: string;
|
|
11
|
+
});
|
|
8
12
|
format(ctx: FormatterContext): string;
|
|
9
13
|
}
|
|
10
14
|
export declare class CheckboxFormatter implements Formatter {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
15
|
+
readonly props: {
|
|
16
|
+
trueText?: string;
|
|
17
|
+
falseText?: string;
|
|
18
|
+
cssClass?: string;
|
|
19
|
+
trueValueIcon?: string;
|
|
20
|
+
falseValueIcon?: string;
|
|
21
|
+
};
|
|
22
|
+
constructor(props: {
|
|
23
|
+
trueText?: string;
|
|
24
|
+
falseText?: string;
|
|
25
|
+
cssClass?: string;
|
|
26
|
+
trueValueIcon?: string;
|
|
27
|
+
falseValueIcon?: string;
|
|
28
|
+
});
|
|
17
29
|
format(ctx: FormatterContext): string;
|
|
18
30
|
}
|
|
19
31
|
export declare class LookupFormatter implements Formatter {
|
|
@@ -7,61 +7,50 @@
|
|
|
7
7
|
import { Decorators } from '@serenity-is/corelib';
|
|
8
8
|
import { getLookup, htmlEncode } from '@serenity-is/corelib';
|
|
9
9
|
let ZeroDisplayFormatter = class ZeroDisplayFormatter {
|
|
10
|
-
constructor() {
|
|
11
|
-
|
|
10
|
+
constructor(props = {}) {
|
|
11
|
+
var _a, _b;
|
|
12
|
+
var _c;
|
|
13
|
+
this.props = props;
|
|
14
|
+
(_a = this.props) !== null && _a !== void 0 ? _a : (this.props = {});
|
|
15
|
+
(_b = (_c = this.props).displayText) !== null && _b !== void 0 ? _b : (_c.displayText = '');
|
|
12
16
|
}
|
|
13
17
|
format(ctx) {
|
|
14
18
|
const src = ctx.value;
|
|
15
19
|
const value = parseFloat(String(src || '0').replace(',', ''));
|
|
16
20
|
if (value == 0) {
|
|
17
|
-
return htmlEncode(this.displayText);
|
|
21
|
+
return htmlEncode(this.props.displayText);
|
|
18
22
|
}
|
|
19
23
|
return htmlEncode(src);
|
|
20
24
|
}
|
|
21
25
|
};
|
|
22
|
-
__decorate([
|
|
23
|
-
Decorators.option()
|
|
24
|
-
], ZeroDisplayFormatter.prototype, "displayText", void 0);
|
|
25
26
|
ZeroDisplayFormatter = __decorate([
|
|
26
27
|
Decorators.registerFormatter('Idevs.ZeroDisplayFormatter')
|
|
27
28
|
], ZeroDisplayFormatter);
|
|
28
29
|
export { ZeroDisplayFormatter };
|
|
29
30
|
let CheckboxFormatter = class CheckboxFormatter {
|
|
30
|
-
constructor() {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
this.
|
|
34
|
-
this.
|
|
35
|
-
this.
|
|
31
|
+
constructor(props) {
|
|
32
|
+
var _a, _b, _c, _d, _e;
|
|
33
|
+
var _f, _g, _h, _j, _k;
|
|
34
|
+
this.props = props;
|
|
35
|
+
(_a = (_f = this.props).cssClass) !== null && _a !== void 0 ? _a : (_f.cssClass = 'text-center fs-2 text-gray-1');
|
|
36
|
+
(_b = (_g = this.props).trueText) !== null && _b !== void 0 ? _b : (_g.trueText = '1');
|
|
37
|
+
(_c = (_h = this.props).falseText) !== null && _c !== void 0 ? _c : (_h.falseText = '0');
|
|
38
|
+
(_d = (_j = this.props).trueValueIcon) !== null && _d !== void 0 ? _d : (_j.trueValueIcon = 'mdi mdi-checkbox-marked-outline');
|
|
39
|
+
(_e = (_k = this.props).falseValueIcon) !== null && _e !== void 0 ? _e : (_k.falseValueIcon = 'mdi mdi-checkbox-blank-outline');
|
|
36
40
|
}
|
|
37
41
|
format(ctx) {
|
|
38
42
|
const src = ctx.value;
|
|
39
|
-
if (src == this.trueText) {
|
|
40
|
-
return `<i class="${this.trueValueIcon} ${this.cssClass}"></i>`;
|
|
43
|
+
if (src == this.props.trueText) {
|
|
44
|
+
return `<i class="${this.props.trueValueIcon} ${this.props.cssClass}"></i>`;
|
|
41
45
|
}
|
|
42
|
-
else if (src == this.falseText) {
|
|
43
|
-
return `<i class="${this.falseValueIcon} ${this.cssClass}"></i>`;
|
|
46
|
+
else if (src == this.props.falseText) {
|
|
47
|
+
return `<i class="${this.props.falseValueIcon} ${this.props.cssClass}"></i>`;
|
|
44
48
|
}
|
|
45
49
|
else {
|
|
46
50
|
return htmlEncode(src);
|
|
47
51
|
}
|
|
48
52
|
}
|
|
49
53
|
};
|
|
50
|
-
__decorate([
|
|
51
|
-
Decorators.option()
|
|
52
|
-
], CheckboxFormatter.prototype, "trueText", void 0);
|
|
53
|
-
__decorate([
|
|
54
|
-
Decorators.option()
|
|
55
|
-
], CheckboxFormatter.prototype, "falseText", void 0);
|
|
56
|
-
__decorate([
|
|
57
|
-
Decorators.option()
|
|
58
|
-
], CheckboxFormatter.prototype, "cssClass", void 0);
|
|
59
|
-
__decorate([
|
|
60
|
-
Decorators.option()
|
|
61
|
-
], CheckboxFormatter.prototype, "trueValueIcon", void 0);
|
|
62
|
-
__decorate([
|
|
63
|
-
Decorators.option()
|
|
64
|
-
], CheckboxFormatter.prototype, "falseValueIcon", void 0);
|
|
65
54
|
CheckboxFormatter = __decorate([
|
|
66
55
|
Decorators.registerFormatter('Idevs.CheckboxFormatter')
|
|
67
56
|
], CheckboxFormatter);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/formatters/formatters.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAOrD,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B;
|
|
1
|
+
{"version":3,"file":"formatters.js","sourceRoot":"","sources":["../../src/formatters/formatters.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAOrD,IAAM,oBAAoB,GAA1B,MAAM,oBAAoB;IAC/B,YAA4B,QAAkC,EAAE;;;QAApC,UAAK,GAAL,KAAK,CAA+B;QAC9D,MAAA,IAAI,CAAC,KAAK,oCAAV,IAAI,CAAC,KAAK,GAAK,EAAE,EAAA;QACjB,YAAA,IAAI,CAAC,KAAK,EAAC,WAAW,uCAAX,WAAW,GAAK,EAAE,EAAA;IAC/B,CAAC;IAED,MAAM,CAAC,GAAqB;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAe,CAAA;QAE/B,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAA;QAC7D,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YACf,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QAC3C,CAAC;QAED,OAAO,UAAU,CAAC,GAAG,CAAC,CAAA;IACxB,CAAC;CACF,CAAA;AAhBY,oBAAoB;IADhC,UAAU,CAAC,iBAAiB,CAAC,4BAA4B,CAAC;GAC9C,oBAAoB,CAgBhC;;AAGM,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YACkB,KAMf;;;QANe,UAAK,GAAL,KAAK,CAMpB;QAED,YAAA,IAAI,CAAC,KAAK,EAAC,QAAQ,uCAAR,QAAQ,GAAK,8BAA8B,EAAA;QACtD,YAAA,IAAI,CAAC,KAAK,EAAC,QAAQ,uCAAR,QAAQ,GAAK,GAAG,EAAA;QAC3B,YAAA,IAAI,CAAC,KAAK,EAAC,SAAS,uCAAT,SAAS,GAAK,GAAG,EAAA;QAC5B,YAAA,IAAI,CAAC,KAAK,EAAC,aAAa,uCAAb,aAAa,GAAK,iCAAiC,EAAA;QAC9D,YAAA,IAAI,CAAC,KAAK,EAAC,cAAc,uCAAd,cAAc,GAAK,gCAAgC,EAAA;IAChE,CAAC;IAED,MAAM,CAAC,GAAqB;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAe,CAAA;QAC/B,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YAC/B,OAAO,aAAa,IAAI,CAAC,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,QAAQ,CAAA;QAC7E,CAAC;aAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC;YACvC,OAAO,aAAa,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,QAAQ,CAAA;QAC9E,CAAC;aAAM,CAAC;YACN,OAAO,UAAU,CAAC,GAAG,CAAC,CAAA;QACxB,CAAC;IACH,CAAC;CACF,CAAA;AA3BY,iBAAiB;IAD7B,UAAU,CAAC,iBAAiB,CAAC,yBAAyB,CAAC;GAC3C,iBAAiB,CA2B7B;;AAGM,IAAM,eAAe,GAArB,MAAM,eAAe;IAI1B,MAAM,CAAC,GAAqB;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAe,CAAA;QAC/B,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAA;QAEnB,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO,GAAG,CAAA;QAE/B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QACxC,8DAA8D;QAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAsC,CAAA;QAC3D,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAA;QAC9B,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAA;QAClC,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QAExC,OAAO,MAAM;aACV,GAAG,CAAC,CAAC,CAAC,EAAE;YACP,MAAM,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAA;YAC1C,IAAI,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAA;YAEhB,OAAO,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAA;QACjC,CAAC,CAAC;aACD,IAAI,CAAC,IAAI,CAAC,CAAA;IACf,CAAC;CACF,CAAA;AAxBQ;IADN,UAAU,CAAC,MAAM,EAAE;kDACI;AAFb,eAAe;IAD3B,UAAU,CAAC,iBAAiB,CAAC,uBAAuB,CAAC;GACzC,eAAe,CA0B3B;;AAGM,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAO7B,MAAM,CAAC,GAAqB;;QAC1B,MAAM,GAAG,GAAG,GAAG,CAAC,KAAe,CAAA;QAC/B,IAAI,CAAC,GAAG;YAAE,OAAO,EAAE,CAAA;QAEnB,MAAM,MAAM,GAAG,MAAA,IAAI,CAAC,MAAM,mCAAI,IAAI,CAAA;QAClC,MAAM,OAAO,GAAG,EAAE,KAAK,EAAE,MAAA,IAAI,CAAC,OAAO,mCAAI,SAAS,EAAE,CAAA;QAEpD,OAAO,IAAI,IAAI,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,kBAAkB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvE,CAAC;CACF,CAAA;AAdQ;IADN,UAAU,CAAC,MAAM,EAAE;mDACwB;AAGrC;IADN,UAAU,CAAC,MAAM,EAAE;kDACM;AALf,kBAAkB;IAD9B,UAAU,CAAC,iBAAiB,CAAC,0BAA0B,CAAC;GAC5C,kBAAkB,CAgB9B;;AAED,MAAM,OAAO,eAAe;IAC1B,gEAAgE;IACzD,MAAM,CAAC,IAAI,KAAI,CAAC;CACxB","sourcesContent":["import { Decorators } from '@serenity-is/corelib'\nimport { FormatterContext } from '@serenity-is/sleekgrid'\nimport { getLookup, htmlEncode } from '@serenity-is/corelib'\n\nexport type Formatter = {\n format(ctx: FormatterContext): string\n}\n\n@Decorators.registerFormatter('Idevs.ZeroDisplayFormatter')\nexport class ZeroDisplayFormatter implements Formatter {\n constructor(public readonly props: { displayText?: string } = {}) {\n this.props ??= {}\n this.props.displayText ??= ''\n }\n\n format(ctx: FormatterContext): string {\n const src = ctx.value as string\n\n const value = parseFloat(String(src || '0').replace(',', ''))\n if (value == 0) {\n return htmlEncode(this.props.displayText)\n }\n\n return htmlEncode(src)\n }\n}\n\n@Decorators.registerFormatter('Idevs.CheckboxFormatter')\nexport class CheckboxFormatter implements Formatter {\n constructor(\n public readonly props: {\n trueText?: string\n falseText?: string\n cssClass?: string\n trueValueIcon?: string\n falseValueIcon?: string\n },\n ) {\n this.props.cssClass ??= 'text-center fs-2 text-gray-1'\n this.props.trueText ??= '1'\n this.props.falseText ??= '0'\n this.props.trueValueIcon ??= 'mdi mdi-checkbox-marked-outline'\n this.props.falseValueIcon ??= 'mdi mdi-checkbox-blank-outline'\n }\n\n format(ctx: FormatterContext): string {\n const src = ctx.value as string\n if (src == this.props.trueText) {\n return `<i class=\"${this.props.trueValueIcon} ${this.props.cssClass}\"></i>`\n } else if (src == this.props.falseText) {\n return `<i class=\"${this.props.falseValueIcon} ${this.props.cssClass}\"></i>`\n } else {\n return htmlEncode(src)\n }\n }\n}\n\n@Decorators.registerFormatter('Idevs.LookupFormatter')\nexport class LookupFormatter implements Formatter {\n @Decorators.option()\n public lookupKey: string\n\n format(ctx: FormatterContext): string {\n const src = ctx.value as string\n if (!src) return ''\n\n if (!this.lookupKey) return src\n\n const lookup = getLookup(this.lookupKey)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const items = lookup.items as Array<{ [key: string]: any }>\n const idField = lookup.idField\n const textField = lookup.textField\n const idList = src.toString().split(',')\n\n return idList\n .map(x => {\n const g = items.find(i => i[idField] == x)\n if (!g) return x\n\n return htmlEncode(g[textField])\n })\n .join(', ')\n }\n}\n\n@Decorators.registerFormatter('Idevs.DateMonthFormatter')\nexport class DateMonthFormatter implements Formatter {\n @Decorators.option()\n public display: '2-digit' | 'short' | 'long'\n\n @Decorators.option()\n public locale: 'en' | 'th'\n\n format(ctx: FormatterContext): string {\n const src = ctx.value as number\n if (!src) return ''\n\n const locale = this.locale ?? 'en'\n const options = { month: this.display ?? '2-digit' }\n\n return new Date(2000, src - 1, 1).toLocaleDateString(locale, options)\n }\n}\n\nexport class idevsFormatters {\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n public static load() {}\n}\n"]}
|
|
@@ -34,13 +34,13 @@ export class DropdownToolButton {
|
|
|
34
34
|
buildBaseDropdown() {
|
|
35
35
|
var _a, _b;
|
|
36
36
|
const dropdownTemplate = `<div class="buttons-inner dropdown" style="overflow: visible">
|
|
37
|
-
<div class="idevs-tool-dropdown-button tool-button icon-tool-button ${(
|
|
37
|
+
<div class="idevs-tool-dropdown-button tool-button icon-tool-button ${(_a = this.options.cssClass) !== null && _a !== void 0 ? _a : ''} ${this.options.isDropUp ? 'dropup' : ''} ${this.isDisabled ? 'disabled' : ''}" style="cursor: unset;">
|
|
38
38
|
<div class="button-outer dropdown-toggle ${this.isDisabled ? 'disabled' : ''}"
|
|
39
39
|
data-bs-toggle="dropdown"
|
|
40
40
|
style="cursor: pointer;">
|
|
41
41
|
<span class="button-inner">
|
|
42
42
|
<i class="${this.options.icon}"></i>
|
|
43
|
-
${(
|
|
43
|
+
${(_b = this.options.title) !== null && _b !== void 0 ? _b : ''}
|
|
44
44
|
</span>
|
|
45
45
|
<i class="caret"></i>
|
|
46
46
|
</div>
|
|
@@ -67,7 +67,7 @@ export class DropdownToolButton {
|
|
|
67
67
|
}
|
|
68
68
|
let dropdownItemElement;
|
|
69
69
|
if (button.isDropdownHeader && !isEmptyOrNull(button.dropdownHeaderTitle)) {
|
|
70
|
-
dropdownItemElement = $(`<li class="dropdown-header ${(
|
|
70
|
+
dropdownItemElement = $(`<li class="dropdown-header ${(_a = button.cssClass) !== null && _a !== void 0 ? _a : ''}">${button.dropdownHeaderTitle}</li>`);
|
|
71
71
|
}
|
|
72
72
|
else {
|
|
73
73
|
if (button.isSeparator) {
|
|
@@ -75,10 +75,10 @@ export class DropdownToolButton {
|
|
|
75
75
|
}
|
|
76
76
|
else {
|
|
77
77
|
dropdownItemElement = $(`<li class="${button.disabled ? 'disabled' : ''}"
|
|
78
|
-
title="${(
|
|
79
|
-
data-idevs-key="${(
|
|
80
|
-
<a href="#" class="${(
|
|
81
|
-
<i class="${(
|
|
78
|
+
title="${(_b = button.hint) !== null && _b !== void 0 ? _b : ''}"
|
|
79
|
+
data-idevs-key="${(_c = button.key) !== null && _c !== void 0 ? _c : ''}">
|
|
80
|
+
<a href="#" class="${(_d = button.cssClass) !== null && _d !== void 0 ? _d : 'dropdown-item'}">
|
|
81
|
+
<i class="${(_e = button.icon) !== null && _e !== void 0 ? _e : ''}"></i>
|
|
82
82
|
${button.title}
|
|
83
83
|
</a>
|
|
84
84
|
</li>`);
|
|
@@ -190,12 +190,12 @@ export class DropdownToolButton {
|
|
|
190
190
|
}
|
|
191
191
|
this.setDisablingStateItem(button.key, button.disabled || false);
|
|
192
192
|
}
|
|
193
|
-
const sideButtonTemplate = `<div class="tool-button add-button icon-tool-button ${(
|
|
194
|
-
data-idevs-key="${(
|
|
195
|
-
title="${(
|
|
193
|
+
const sideButtonTemplate = `<div class="tool-button add-button icon-tool-button ${(_a = button.cssClass) !== null && _a !== void 0 ? _a : ''} ${button.disabled ? 'disabled' : ''}"
|
|
194
|
+
data-idevs-key="${(_b = button.key) !== null && _b !== void 0 ? _b : ''}"
|
|
195
|
+
title="${(_c = button.title) !== null && _c !== void 0 ? _c : ''}">
|
|
196
196
|
<div class="button-outer">
|
|
197
197
|
<span class="button-inner">
|
|
198
|
-
<i class="${(
|
|
198
|
+
<i class="${(_d = button.icon) !== null && _d !== void 0 ? _d : ''}"></i>
|
|
199
199
|
</span>
|
|
200
200
|
</div>
|
|
201
201
|
</div>`;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DropdownToolButton.js","sourceRoot":"","sources":["../../src/ui/DropdownToolButton.ts"],"names":[],"mappings":"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","sourcesContent":["import { first, isEmptyOrNull, tryFirst } from '@serenity-is/corelib'\n\nexport type DropdownToolButtonOptions = {\n title?: string\n cssClass?: string\n icon?: string\n disabled?: boolean\n dropdownMenuPosition?: 'right'\n isDropUp?: boolean\n}\n\nexport type DropdownToolButtonItem = {\n key: string\n title?: string\n hint?: string\n cssClass?: string\n icon?: string\n onClick?: (e: Event) => void\n isSeparator?: boolean\n disabled?: boolean\n isDropdownHeader?: boolean\n dropdownHeaderTitle?: string\n}\n\nexport type ToolDropdownSideButtonItem = {\n key: string\n title?: string\n hint?: string\n cssClass?: string\n icon?: string\n onClick?: (e: Event) => void\n disabled?: boolean\n}\n\nexport class DropdownToolButton {\n public element: JQuery = null\n private isDisabled = false\n private itemDisablingState: { key: string; disabled: boolean }[] = []\n private options: DropdownToolButtonOptions\n\n public constructor(container: JQuery, buttons: DropdownToolButtonItem[], opt?: DropdownToolButtonOptions) {\n this.options = opt || {}\n this.isDisabled = this.options.disabled || false\n this.element = this.buildBaseDropdown()\n this.addDropdownItems(buttons)\n\n container.append(this.element)\n }\n\n private getDisablingStateItem(key: string): boolean {\n if (tryFirst(this.itemDisablingState, x => x.key == key) != null) {\n return first(this.itemDisablingState, x => x.key == key).disabled || false\n }\n\n return false\n }\n\n private setDisablingStateItem(key: string, value: boolean) {\n if (tryFirst(this.itemDisablingState, x => x.key == key) != null) {\n first(this.itemDisablingState, x => x.key == key).disabled = value || false\n return\n }\n\n this.itemDisablingState.push({ key: key, disabled: value || false })\n }\n\n private removeDisablingStateItem(key: string) {\n this.itemDisablingState.some((item, idx) => {\n if (item.key == key) {\n this.itemDisablingState.splice(idx, 1)\n\n return true\n }\n })\n }\n\n private buildBaseDropdown(): JQuery {\n const dropdownTemplate = `<div class=\"buttons-inner dropdown\" style=\"overflow: visible\">\n <div class=\"idevs-tool-dropdown-button tool-button icon-tool-button ${(this.options.cssClass ?? '')} ${\n this.options.isDropUp ? 'dropup' : ''\n } ${this.isDisabled ? 'disabled' : ''}\" style=\"cursor: unset;\">\n <div class=\"button-outer dropdown-toggle ${this.isDisabled ? 'disabled' : ''}\"\n data-bs-toggle=\"dropdown\"\n style=\"cursor: pointer;\">\n <span class=\"button-inner\">\n <i class=\"${this.options.icon}\"></i>\n ${(this.options.title ?? '')}\n </span>\n <i class=\"caret\"></i>\n </div>\n <ul class=\"dropdown-menu ${this.options.dropdownMenuPosition == 'right' ? 'dropdown-menu-right' : ''}\"></ul>\n </div>\n</div>`\n\n return $(dropdownTemplate)\n }\n\n public addDropdownItems(buttons: DropdownToolButtonItem[]) {\n if (buttons && buttons.length > 0) {\n buttons.forEach(button => {\n this.addDropdownItem(button)\n })\n }\n }\n\n public addDropdownItem(button: DropdownToolButtonItem, idx?: number) {\n if (!isEmptyOrNull(button.key)) {\n if (this.itemDisablingState.map(x => x.key).indexOf(button.key) > -1) {\n alert(`Dropdown has existed key: ${button.key}`)\n return\n }\n\n this.setDisablingStateItem(button.key, button.disabled || false)\n }\n\n let dropdownItemElement: JQuery\n\n if (button.isDropdownHeader && !isEmptyOrNull(button.dropdownHeaderTitle)) {\n dropdownItemElement = $(\n `<li class=\"dropdown-header ${(button.cssClass ?? '')}\">${button.dropdownHeaderTitle}</li>`,\n )\n } else {\n if (button.isSeparator) {\n dropdownItemElement = $(`<li class=\"dropdown-divider\"></li>`)\n } else {\n dropdownItemElement = $(`<li class=\"${button.disabled ? 'disabled' : ''}\"\n title=\"${(button.hint ?? '')}\"\n data-idevs-key=\"${(button.key ?? '')}\">\n <a href=\"#\" class=\"${(button.cssClass ?? 'dropdown-item')}\">\n <i class=\"${(button.icon ?? '')}\"></i>\n ${button.title}\n </a>\n </li>`)\n\n dropdownItemElement.on('click', (e: Event) => {\n e.preventDefault()\n\n if (this.isDisabled) {\n return\n }\n\n let buttonIsDisabled = button.disabled\n\n if (!isEmptyOrNull(button.key)) {\n buttonIsDisabled = this.getDisablingStateItem(button.key)\n }\n if (buttonIsDisabled) {\n return\n }\n\n button.onClick(e)\n })\n }\n }\n\n if (idx === null || typeof idx === 'undefined') {\n this.element.find('.dropdown-menu').append(dropdownItemElement)\n return\n }\n\n if (idx <= 0) {\n this.element.find('.dropdown-menu').prepend(dropdownItemElement)\n return\n }\n\n const nbrOfButtons = this.element.find(`.dropdown-menu > li`).length\n\n if (idx > nbrOfButtons) {\n idx = nbrOfButtons\n }\n\n this.element.find(`.dropdown-menu > li:nth-child(${idx})`).after(dropdownItemElement)\n }\n\n public enableDropdown(enable: boolean) {\n const drd = this.element.find('.dropdown').first()\n if (drd) {\n if (enable) {\n if (drd.hasClass('disabled')) {\n drd.removeClass('disabled')\n }\n } else {\n if (!drd.hasClass('disabled')) {\n drd.addClass('disabled')\n }\n }\n }\n\n const drdToggle = this.element.find('.dropdown-toggle').first()\n if (drdToggle) {\n if (enable) {\n if (drdToggle.hasClass('disabled')) {\n drd.removeClass('disabled')\n } else {\n if (!drdToggle.hasClass('disabled')) {\n drdToggle.addClass('disabled')\n }\n }\n }\n }\n\n this.isDisabled = !enable\n }\n\n public enableDropdownItemByKey(key: string, enable: boolean) {\n const drdItem = this.element.find(`.dropdown-menu li[data-idevs-key=\"${key}\"]`).first()\n if (drdItem) {\n if (enable) {\n if (drdItem.hasClass('disabled')) {\n drdItem.removeClass('disabled')\n }\n } else {\n if (!drdItem.hasClass('disabled')) {\n drdItem.addClass('disabled')\n }\n }\n }\n\n this.setDisablingStateItem(key, !enable)\n }\n\n public enableSideButtonByKey(key: string, enable: boolean) {\n const tButton = this.element.find(`.tool-button[data-idevs-key=\"${key}\"]`).first()\n if (tButton) {\n if (enable) {\n if (tButton.hasClass('disabled')) {\n tButton.removeClass('disabled')\n }\n } else {\n if (!tButton.hasClass('disabled')) {\n tButton.addClass('disabled')\n }\n }\n }\n\n this.setDisablingStateItem(key, !enable)\n }\n\n public removeDropdownItem(key: string) {\n this.element.find(`.dropdown-menu li[data-idevs-key=\"${key}\"]`).remove()\n this.removeDisablingStateItem(key)\n }\n\n public removeSideButtonItem(key: string) {\n this.element.find(`.tool-button[data-idevs-key=\"${key}\"]`).remove()\n this.removeDisablingStateItem(key)\n }\n\n public addSideButtonItem(button: ToolDropdownSideButtonItem, idx?: number) {\n if (!isEmptyOrNull(button.key)) {\n if (this.itemDisablingState.map(x => x.key).indexOf(button.key) > -1) {\n alert(`Dropdown has existed key: ${button.key}`)\n return\n }\n\n this.setDisablingStateItem(button.key, button.disabled || false)\n }\n\n const sideButtonTemplate = `<div class=\"tool-button add-button icon-tool-button ${(button.cssClass ?? '')} ${\n button.disabled ? 'disabled' : ''\n }\"\n data-idevs-key=\"${(button.key ?? '')}\"\n title=\"${(button.title ?? '')}\">\n <div class=\"button-outer\">\n <span class=\"button-inner\">\n <i class=\"${(button.icon ?? '')}\"></i>\n </span>\n </div>\n </div>`\n\n const sideButton = $(sideButtonTemplate)\n\n sideButton.on('click', (e: Event) => {\n e.preventDefault()\n\n let buttonIsDisabled = button.disabled\n\n if (!isEmptyOrNull(button.key)) {\n buttonIsDisabled = this.getDisablingStateItem(button.key)\n }\n\n if (buttonIsDisabled) {\n return\n }\n\n button.onClick(e)\n })\n\n if (idx === null || typeof idx === 'undefined') {\n this.element.append(sideButton)\n return\n }\n\n if (idx <= 0) {\n this.element.prepend(sideButton)\n return\n }\n\n const nbrOfButtons = this.element.find(`div.tool-button`).length\n\n if (idx > nbrOfButtons) {\n idx = nbrOfButtons\n }\n\n this.element.find(`div.tool-button:nth-child(${idx})`).after(sideButton)\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"DropdownToolButton.js","sourceRoot":"","sources":["../../src/ui/DropdownToolButton.ts"],"names":[],"mappings":"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","sourcesContent":["import { first, isEmptyOrNull, tryFirst } from '@serenity-is/corelib'\n\nexport type DropdownToolButtonOptions = {\n title?: string\n cssClass?: string\n icon?: string\n disabled?: boolean\n dropdownMenuPosition?: 'right'\n isDropUp?: boolean\n}\n\nexport type DropdownToolButtonItem = {\n key: string\n title?: string\n hint?: string\n cssClass?: string\n icon?: string\n onClick?: (e: Event) => void\n isSeparator?: boolean\n disabled?: boolean\n isDropdownHeader?: boolean\n dropdownHeaderTitle?: string\n}\n\nexport type ToolDropdownSideButtonItem = {\n key: string\n title?: string\n hint?: string\n cssClass?: string\n icon?: string\n onClick?: (e: Event) => void\n disabled?: boolean\n}\n\nexport class DropdownToolButton {\n public element: JQuery = null\n private isDisabled = false\n private itemDisablingState: { key: string; disabled: boolean }[] = []\n private options: DropdownToolButtonOptions\n\n public constructor(container: JQuery, buttons: DropdownToolButtonItem[], opt?: DropdownToolButtonOptions) {\n this.options = opt || {}\n this.isDisabled = this.options.disabled || false\n this.element = this.buildBaseDropdown()\n this.addDropdownItems(buttons)\n\n container.append(this.element)\n }\n\n private getDisablingStateItem(key: string): boolean {\n if (tryFirst(this.itemDisablingState, x => x.key == key) != null) {\n return first(this.itemDisablingState, x => x.key == key).disabled || false\n }\n\n return false\n }\n\n private setDisablingStateItem(key: string, value: boolean) {\n if (tryFirst(this.itemDisablingState, x => x.key == key) != null) {\n first(this.itemDisablingState, x => x.key == key).disabled = value || false\n return\n }\n\n this.itemDisablingState.push({ key: key, disabled: value || false })\n }\n\n private removeDisablingStateItem(key: string) {\n this.itemDisablingState.some((item, idx) => {\n if (item.key == key) {\n this.itemDisablingState.splice(idx, 1)\n\n return true\n }\n })\n }\n\n private buildBaseDropdown(): JQuery {\n const dropdownTemplate = `<div class=\"buttons-inner dropdown\" style=\"overflow: visible\">\n <div class=\"idevs-tool-dropdown-button tool-button icon-tool-button ${this.options.cssClass ?? ''} ${\n this.options.isDropUp ? 'dropup' : ''\n } ${this.isDisabled ? 'disabled' : ''}\" style=\"cursor: unset;\">\n <div class=\"button-outer dropdown-toggle ${this.isDisabled ? 'disabled' : ''}\"\n data-bs-toggle=\"dropdown\"\n style=\"cursor: pointer;\">\n <span class=\"button-inner\">\n <i class=\"${this.options.icon}\"></i>\n ${this.options.title ?? ''}\n </span>\n <i class=\"caret\"></i>\n </div>\n <ul class=\"dropdown-menu ${this.options.dropdownMenuPosition == 'right' ? 'dropdown-menu-right' : ''}\"></ul>\n </div>\n</div>`\n\n return $(dropdownTemplate)\n }\n\n public addDropdownItems(buttons: DropdownToolButtonItem[]) {\n if (buttons && buttons.length > 0) {\n buttons.forEach(button => {\n this.addDropdownItem(button)\n })\n }\n }\n\n public addDropdownItem(button: DropdownToolButtonItem, idx?: number) {\n if (!isEmptyOrNull(button.key)) {\n if (this.itemDisablingState.map(x => x.key).indexOf(button.key) > -1) {\n alert(`Dropdown has existed key: ${button.key}`)\n return\n }\n\n this.setDisablingStateItem(button.key, button.disabled || false)\n }\n\n let dropdownItemElement: JQuery\n\n if (button.isDropdownHeader && !isEmptyOrNull(button.dropdownHeaderTitle)) {\n dropdownItemElement = $(`<li class=\"dropdown-header ${button.cssClass ?? ''}\">${button.dropdownHeaderTitle}</li>`)\n } else {\n if (button.isSeparator) {\n dropdownItemElement = $(`<li class=\"dropdown-divider\"></li>`)\n } else {\n dropdownItemElement = $(`<li class=\"${button.disabled ? 'disabled' : ''}\"\n title=\"${button.hint ?? ''}\"\n data-idevs-key=\"${button.key ?? ''}\">\n <a href=\"#\" class=\"${button.cssClass ?? 'dropdown-item'}\">\n <i class=\"${button.icon ?? ''}\"></i>\n ${button.title}\n </a>\n </li>`)\n\n dropdownItemElement.on('click', (e: Event) => {\n e.preventDefault()\n\n if (this.isDisabled) {\n return\n }\n\n let buttonIsDisabled = button.disabled\n\n if (!isEmptyOrNull(button.key)) {\n buttonIsDisabled = this.getDisablingStateItem(button.key)\n }\n if (buttonIsDisabled) {\n return\n }\n\n button.onClick(e)\n })\n }\n }\n\n if (idx === null || typeof idx === 'undefined') {\n this.element.find('.dropdown-menu').append(dropdownItemElement)\n return\n }\n\n if (idx <= 0) {\n this.element.find('.dropdown-menu').prepend(dropdownItemElement)\n return\n }\n\n const nbrOfButtons = this.element.find(`.dropdown-menu > li`).length\n\n if (idx > nbrOfButtons) {\n idx = nbrOfButtons\n }\n\n this.element.find(`.dropdown-menu > li:nth-child(${idx})`).after(dropdownItemElement)\n }\n\n public enableDropdown(enable: boolean) {\n const drd = this.element.find('.dropdown').first()\n if (drd) {\n if (enable) {\n if (drd.hasClass('disabled')) {\n drd.removeClass('disabled')\n }\n } else {\n if (!drd.hasClass('disabled')) {\n drd.addClass('disabled')\n }\n }\n }\n\n const drdToggle = this.element.find('.dropdown-toggle').first()\n if (drdToggle) {\n if (enable) {\n if (drdToggle.hasClass('disabled')) {\n drd.removeClass('disabled')\n } else {\n if (!drdToggle.hasClass('disabled')) {\n drdToggle.addClass('disabled')\n }\n }\n }\n }\n\n this.isDisabled = !enable\n }\n\n public enableDropdownItemByKey(key: string, enable: boolean) {\n const drdItem = this.element.find(`.dropdown-menu li[data-idevs-key=\"${key}\"]`).first()\n if (drdItem) {\n if (enable) {\n if (drdItem.hasClass('disabled')) {\n drdItem.removeClass('disabled')\n }\n } else {\n if (!drdItem.hasClass('disabled')) {\n drdItem.addClass('disabled')\n }\n }\n }\n\n this.setDisablingStateItem(key, !enable)\n }\n\n public enableSideButtonByKey(key: string, enable: boolean) {\n const tButton = this.element.find(`.tool-button[data-idevs-key=\"${key}\"]`).first()\n if (tButton) {\n if (enable) {\n if (tButton.hasClass('disabled')) {\n tButton.removeClass('disabled')\n }\n } else {\n if (!tButton.hasClass('disabled')) {\n tButton.addClass('disabled')\n }\n }\n }\n\n this.setDisablingStateItem(key, !enable)\n }\n\n public removeDropdownItem(key: string) {\n this.element.find(`.dropdown-menu li[data-idevs-key=\"${key}\"]`).remove()\n this.removeDisablingStateItem(key)\n }\n\n public removeSideButtonItem(key: string) {\n this.element.find(`.tool-button[data-idevs-key=\"${key}\"]`).remove()\n this.removeDisablingStateItem(key)\n }\n\n public addSideButtonItem(button: ToolDropdownSideButtonItem, idx?: number) {\n if (!isEmptyOrNull(button.key)) {\n if (this.itemDisablingState.map(x => x.key).indexOf(button.key) > -1) {\n alert(`Dropdown has existed key: ${button.key}`)\n return\n }\n\n this.setDisablingStateItem(button.key, button.disabled || false)\n }\n\n const sideButtonTemplate = `<div class=\"tool-button add-button icon-tool-button ${button.cssClass ?? ''} ${\n button.disabled ? 'disabled' : ''\n }\"\n data-idevs-key=\"${button.key ?? ''}\"\n title=\"${button.title ?? ''}\">\n <div class=\"button-outer\">\n <span class=\"button-inner\">\n <i class=\"${button.icon ?? ''}\"></i>\n </span>\n </div>\n </div>`\n\n const sideButton = $(sideButtonTemplate)\n\n sideButton.on('click', (e: Event) => {\n e.preventDefault()\n\n let buttonIsDisabled = button.disabled\n\n if (!isEmptyOrNull(button.key)) {\n buttonIsDisabled = this.getDisablingStateItem(button.key)\n }\n\n if (buttonIsDisabled) {\n return\n }\n\n button.onClick(e)\n })\n\n if (idx === null || typeof idx === 'undefined') {\n this.element.append(sideButton)\n return\n }\n\n if (idx <= 0) {\n this.element.prepend(sideButton)\n return\n }\n\n const nbrOfButtons = this.element.find(`div.tool-button`).length\n\n if (idx > nbrOfButtons) {\n idx = nbrOfButtons\n }\n\n this.element.find(`div.tool-button:nth-child(${idx})`).after(sideButton)\n }\n}\n"]}
|
|
@@ -36,12 +36,12 @@ export class ToggleToolButton {
|
|
|
36
36
|
buildBaseButton() {
|
|
37
37
|
var _a, _b;
|
|
38
38
|
const buttonTemplate = `<div class="buttons-inner" style="overflow: visible">
|
|
39
|
-
<div class="idevs-toggle-button tool-button icon-tool-button ${(
|
|
39
|
+
<div class="idevs-toggle-button tool-button icon-tool-button ${(_a = this.options.cssClass) !== null && _a !== void 0 ? _a : ''} ${this.isDisabled ? 'disabled' : ''}" style="cursor: unset;">
|
|
40
40
|
<div class="button-outer ${this.isDisabled ? 'disabled' : ''}"
|
|
41
41
|
style="cursor: pointer;">
|
|
42
42
|
<span class="button-inner">
|
|
43
43
|
<i class="${this.options.icon}"></i>
|
|
44
|
-
${(
|
|
44
|
+
${(_b = this.options.title) !== null && _b !== void 0 ? _b : ''}
|
|
45
45
|
</span>
|
|
46
46
|
<i class="caret"></i>
|
|
47
47
|
</div>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ToggleToolButton.js","sourceRoot":"","sources":["../../src/ui/ToggleToolButton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAazC,MAAM,OAAO,gBAAgB;IAK3B,YAAmB,SAAiB,EAAE,GAA6B;QAJ5D,YAAO,GAAW,IAAI,CAAA;QACrB,eAAU,GAAG,KAAK,CAAA;QAIxB,IAAI,CAAC,OAAO,GAAG,GAAG,IAAI,EAAE,CAAA;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAA;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAErC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE;YAC3B,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAM;YAE3B,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,MAAqB,EAAE,sBAAsB,CAAC,CAAA;YAC5E,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;gBACtC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;gBACvC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;gBACpC,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACtD,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrD,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;gBAC9F,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;gBAC9F,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACzB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YACzB,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAEO,eAAe;;QACrB,MAAM,cAAc,GAAG;mEACwC,
|
|
1
|
+
{"version":3,"file":"ToggleToolButton.js","sourceRoot":"","sources":["../../src/ui/ToggleToolButton.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAazC,MAAM,OAAO,gBAAgB;IAK3B,YAAmB,SAAiB,EAAE,GAA6B;QAJ5D,YAAO,GAAW,IAAI,CAAA;QACrB,eAAU,GAAG,KAAK,CAAA;QAIxB,IAAI,CAAC,OAAO,GAAG,GAAG,IAAI,EAAE,CAAA;QACxB,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAA;QAChD,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,eAAe,EAAE,CAAA;QAErC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE;YAC3B,IAAI,IAAI,CAAC,UAAU;gBAAE,OAAM;YAE3B,MAAM,MAAM,GAAG,YAAY,CAAC,CAAC,CAAC,MAAqB,EAAE,sBAAsB,CAAC,CAAA;YAC5E,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,CAAA;gBACtC,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;oBACxC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAA;gBACvC,CAAC;qBAAM,CAAC;oBACN,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAA;gBACpC,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC;gBACtD,IAAI,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrD,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAA;gBAC9F,CAAC;qBAAM,CAAC;oBACN,MAAM,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAA;gBAC9F,CAAC;YACH,CAAC;YAED,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;gBACzB,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;YACzB,CAAC;QACH,CAAC,CAAC,CAAA;QAEF,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAChC,CAAC;IAEO,eAAe;;QACrB,MAAM,cAAc,GAAG;mEACwC,MAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,mCAAI,EAAE,IACxF,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EACjC;mCAC+B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;;;4BAGxC,IAAI,CAAC,OAAO,CAAC,IAAI;kBAC3B,MAAA,IAAI,CAAC,OAAO,CAAC,KAAK,mCAAI,EAAE;;;;;OAKnC,CAAA;QAEH,OAAO,CAAC,CAAC,cAAc,CAAC,CAAA;IAC1B,CAAC;CACF","sourcesContent":["import { neededTarget } from '../globals'\n\nexport type ToggleToolButtonOptions = {\n title?: string\n hint?: string\n cssClass?: string\n altCssClass?: string\n icon?: string\n altIcon?: string\n onClick?: (e: JQuery.ClickEvent<HTMLElement, null, HTMLElement, HTMLElement>) => void\n disabled?: boolean\n}\n\nexport class ToggleToolButton {\n public element: JQuery = null\n private isDisabled = false\n private options: ToggleToolButtonOptions\n\n public constructor(container: JQuery, opt?: ToggleToolButtonOptions) {\n this.options = opt || {}\n this.isDisabled = this.options.disabled || false\n this.element = this.buildBaseButton()\n\n this.element.on('click', e => {\n if (this.isDisabled) return\n\n const target = neededTarget(e.target as HTMLElement, '.idevs-toggle-button')\n if (this.options.altIcon) {\n const icon = target.querySelector(`i`)\n if (icon.className == this.options.icon) {\n icon.className = this.options.altIcon\n } else {\n icon.className = this.options.icon\n }\n }\n\n if (this.options.cssClass && this.options.altCssClass) {\n if (target.className.includes(this.options.cssClass)) {\n target.className = target.className.replace(this.options.cssClass, this.options.altCssClass)\n } else {\n target.className = target.className.replace(this.options.altCssClass, this.options.cssClass)\n }\n }\n\n if (this.options.onClick) {\n this.options.onClick(e)\n }\n })\n\n container.append(this.element)\n }\n\n private buildBaseButton(): JQuery {\n const buttonTemplate = `<div class=\"buttons-inner\" style=\"overflow: visible\">\n <div class=\"idevs-toggle-button tool-button icon-tool-button ${this.options.cssClass ?? ''} ${\n this.isDisabled ? 'disabled' : ''\n }\" style=\"cursor: unset;\">\n <div class=\"button-outer ${this.isDisabled ? 'disabled' : ''}\"\n style=\"cursor: pointer;\">\n <span class=\"button-inner\">\n <i class=\"${this.options.icon}\"></i>\n ${this.options.title ?? ''}\n </span>\n <i class=\"caret\"></i>\n </div>\n </div>\n</div>`\n\n return $(buttonTemplate)\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@idevs/corelib",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.91",
|
|
4
4
|
"description": "Extended library for Serenity Framework",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -30,9 +30,8 @@
|
|
|
30
30
|
"url": "git+https://github.com/klomkling/idevs.corelib"
|
|
31
31
|
},
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@serenity-is/corelib": "^8.
|
|
33
|
+
"@serenity-is/corelib": "^8.2.2",
|
|
34
34
|
"@serenity-is/sleekgrid": "^1.6.4",
|
|
35
|
-
"@types/bootstrap": "^5.2.10",
|
|
36
35
|
"@types/jquery": "^3.5.29",
|
|
37
36
|
"@types/jquery.validation": "^1.16.10",
|
|
38
37
|
"@types/jqueryui": "^1.12.21",
|
|
@@ -40,6 +39,7 @@
|
|
|
40
39
|
"bootstrap": "^5.3.2"
|
|
41
40
|
},
|
|
42
41
|
"devDependencies": {
|
|
42
|
+
"@serenity-is/tsbuild": "^8.0.1",
|
|
43
43
|
"@typescript-eslint/eslint-plugin": "^5.62.0",
|
|
44
44
|
"@typescript-eslint/parser": "^5.62.0",
|
|
45
45
|
"eslint": "^8.56.0",
|
|
@@ -2,9 +2,22 @@
|
|
|
2
2
|
/* eslint-disable @typescript-eslint/adjacent-overload-signatures */
|
|
3
3
|
// reference: https://github-wiki-see.page/m/serenity-is/Serenity/wiki/CheckBox-Group-Editor
|
|
4
4
|
|
|
5
|
-
import {
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
import {
|
|
6
|
+
Decorators,
|
|
7
|
+
EditorProps,
|
|
8
|
+
EditorWidget,
|
|
9
|
+
Enum,
|
|
10
|
+
EnumKeyAttribute,
|
|
11
|
+
EnumTypeRegistry,
|
|
12
|
+
Fluent,
|
|
13
|
+
IReadOnly,
|
|
14
|
+
getCustomAttributes,
|
|
15
|
+
getLookup,
|
|
16
|
+
isArray,
|
|
17
|
+
isEmptyOrNull,
|
|
18
|
+
toId,
|
|
19
|
+
tryGetText,
|
|
20
|
+
} from '@serenity-is/corelib'
|
|
8
21
|
|
|
9
22
|
export type CheckboxButtonEditorOptions = {
|
|
10
23
|
enumKey?: string
|
|
@@ -14,15 +27,22 @@ export type CheckboxButtonEditorOptions = {
|
|
|
14
27
|
}
|
|
15
28
|
|
|
16
29
|
@Decorators.registerEditor('CheckboxButtonEditor')
|
|
17
|
-
|
|
18
|
-
|
|
30
|
+
export class CheckboxButtonEditor<P extends CheckboxButtonEditorOptions = CheckboxButtonEditorOptions>
|
|
31
|
+
extends EditorWidget<P>
|
|
32
|
+
implements IReadOnly
|
|
33
|
+
{
|
|
19
34
|
private _items: Array<{ [key: string]: any }>
|
|
20
35
|
private readonly _idField: string
|
|
21
36
|
private readonly _textField: string
|
|
22
37
|
private readonly _isStringId: boolean
|
|
23
38
|
|
|
24
|
-
|
|
25
|
-
|
|
39
|
+
static override createDefaultElement() {
|
|
40
|
+
return Fluent('div').getNode()
|
|
41
|
+
}
|
|
42
|
+
declare readonly domNode: HTMLElement
|
|
43
|
+
|
|
44
|
+
constructor(props: EditorProps<P>) {
|
|
45
|
+
super(props)
|
|
26
46
|
|
|
27
47
|
if (isEmptyOrNull(this.options.enumKey) && this.options.enumType == null && isEmptyOrNull(this.options.lookupKey)) {
|
|
28
48
|
return
|
|
@@ -40,7 +60,7 @@ export class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> im
|
|
|
40
60
|
let enumKey = this.options.enumKey
|
|
41
61
|
|
|
42
62
|
if (enumKey == null && enumType != null) {
|
|
43
|
-
const enumKeyAttr =
|
|
63
|
+
const enumKeyAttr = getCustomAttributes(enumType, EnumKeyAttribute, false)
|
|
44
64
|
if (enumKeyAttr.length > 0) {
|
|
45
65
|
enumKey = enumKeyAttr[0].value
|
|
46
66
|
}
|
|
@@ -52,11 +72,14 @@ export class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> im
|
|
|
52
72
|
}
|
|
53
73
|
}
|
|
54
74
|
|
|
55
|
-
this.
|
|
75
|
+
this.domNode.classList.add('d-flex', 'flex-wrap')
|
|
56
76
|
}
|
|
57
77
|
|
|
58
78
|
protected renderCheckboxes() {
|
|
59
|
-
this.
|
|
79
|
+
const childDivs = this.domNode.querySelectorAll('div')
|
|
80
|
+
childDivs.forEach(function (child) {
|
|
81
|
+
this.domNode.removeChild(child)
|
|
82
|
+
})
|
|
60
83
|
|
|
61
84
|
for (const item of this._items) {
|
|
62
85
|
const textValue = item[this._textField]
|
|
@@ -76,7 +99,7 @@ export class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> im
|
|
|
76
99
|
.attr('value', value)
|
|
77
100
|
.prependTo(label)
|
|
78
101
|
label.appendTo(div)
|
|
79
|
-
div.appendTo(this.
|
|
102
|
+
div.appendTo(this.domNode)
|
|
80
103
|
}
|
|
81
104
|
|
|
82
105
|
get_items(): Array<{ [key: string]: any }> {
|
|
@@ -96,11 +119,14 @@ export class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> im
|
|
|
96
119
|
this.set_items(v)
|
|
97
120
|
}
|
|
98
121
|
|
|
99
|
-
get_value()
|
|
100
|
-
const val:
|
|
101
|
-
this.
|
|
102
|
-
|
|
122
|
+
get_value() {
|
|
123
|
+
const val: string[] = []
|
|
124
|
+
const inputs = this.domNode.querySelectorAll('input:checked')
|
|
125
|
+
|
|
126
|
+
inputs.forEach((input: HTMLInputElement) => {
|
|
127
|
+
val.push(this._isStringId ? input.value : toId(input.value))
|
|
103
128
|
})
|
|
129
|
+
|
|
104
130
|
return val.join(',')
|
|
105
131
|
}
|
|
106
132
|
|
|
@@ -114,24 +140,17 @@ export class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> im
|
|
|
114
140
|
if (!isEmptyOrNull(value)) {
|
|
115
141
|
values = this._isStringId ? value.split(',') : value.split(',').map(p => Number(p))
|
|
116
142
|
}
|
|
117
|
-
const inputs = this.
|
|
118
|
-
inputs.
|
|
119
|
-
|
|
143
|
+
const inputs = this.domNode.querySelectorAll<HTMLInputElement>('input')
|
|
144
|
+
inputs.forEach(input => {
|
|
145
|
+
input.checked = false
|
|
120
146
|
})
|
|
121
147
|
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
const checks = inputs.filter('[value=' + v + ']')
|
|
125
|
-
if (checks.length > 0) {
|
|
126
|
-
;(checks[0] as HTMLInputElement).checked = true
|
|
127
|
-
}
|
|
128
|
-
})
|
|
129
|
-
} else {
|
|
130
|
-
const checks = inputs.filter('[value=' + values + ']')
|
|
148
|
+
values.forEach(v => {
|
|
149
|
+
const checks = Array.from(inputs).filter(input => (input as HTMLInputElement).value === v)
|
|
131
150
|
if (checks.length > 0) {
|
|
132
|
-
|
|
151
|
+
(checks[0] as HTMLInputElement).checked = true
|
|
133
152
|
}
|
|
134
|
-
}
|
|
153
|
+
})
|
|
135
154
|
}
|
|
136
155
|
}
|
|
137
156
|
|
|
@@ -140,15 +159,21 @@ export class CheckboxButtonEditor extends Widget<CheckboxButtonEditorOptions> im
|
|
|
140
159
|
}
|
|
141
160
|
|
|
142
161
|
get_readOnly(): boolean {
|
|
143
|
-
return this.
|
|
162
|
+
return this.domNode.getAttribute('disabled') != null
|
|
144
163
|
}
|
|
145
164
|
|
|
146
165
|
set_readOnly(value: boolean): void {
|
|
147
166
|
if (this.get_readOnly() !== value) {
|
|
148
167
|
if (value) {
|
|
149
|
-
this.
|
|
168
|
+
this.domNode.setAttribute('disabled', 'disabled')
|
|
169
|
+
this.domNode.querySelectorAll<HTMLInputElement>('input').forEach(input => {
|
|
170
|
+
input.setAttribute('disabled', 'disabled')
|
|
171
|
+
})
|
|
150
172
|
} else {
|
|
151
|
-
this.
|
|
173
|
+
this.domNode.removeAttribute('disabled')
|
|
174
|
+
this.domNode.querySelectorAll<HTMLInputElement>('input').forEach(input => {
|
|
175
|
+
input.removeAttribute('disabled')
|
|
176
|
+
})
|
|
152
177
|
}
|
|
153
178
|
}
|
|
154
179
|
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
|
-
import { Decorators, SelectEditor, SelectEditorOptions } from '@serenity-is/corelib'
|
|
2
|
-
import { indexOf } from '@serenity-is/corelib'
|
|
1
|
+
import { Decorators, EditorProps, SelectEditor, SelectEditorOptions, indexOf } from '@serenity-is/corelib'
|
|
3
2
|
|
|
4
3
|
@Decorators.registerEditor('DateMonthEditor')
|
|
5
|
-
export class DateMonthEditor extends SelectEditor {
|
|
4
|
+
export class DateMonthEditor<P extends DateMonthEditorOptions = DateMonthEditorOptions> extends SelectEditor<P> {
|
|
6
5
|
private months: string[]
|
|
7
6
|
|
|
8
|
-
constructor(
|
|
9
|
-
super(
|
|
7
|
+
constructor(props: EditorProps<P>) {
|
|
8
|
+
super(props)
|
|
10
9
|
|
|
11
10
|
this.updateItems()
|
|
12
11
|
}
|
|
@@ -8,19 +8,17 @@ export type Formatter = {
|
|
|
8
8
|
|
|
9
9
|
@Decorators.registerFormatter('Idevs.ZeroDisplayFormatter')
|
|
10
10
|
export class ZeroDisplayFormatter implements Formatter {
|
|
11
|
-
constructor() {
|
|
12
|
-
this.
|
|
11
|
+
constructor(public readonly props: { displayText?: string } = {}) {
|
|
12
|
+
this.props ??= {}
|
|
13
|
+
this.props.displayText ??= ''
|
|
13
14
|
}
|
|
14
15
|
|
|
15
|
-
@Decorators.option()
|
|
16
|
-
public displayText: string
|
|
17
|
-
|
|
18
16
|
format(ctx: FormatterContext): string {
|
|
19
17
|
const src = ctx.value as string
|
|
20
18
|
|
|
21
19
|
const value = parseFloat(String(src || '0').replace(',', ''))
|
|
22
20
|
if (value == 0) {
|
|
23
|
-
return htmlEncode(this.displayText)
|
|
21
|
+
return htmlEncode(this.props.displayText)
|
|
24
22
|
}
|
|
25
23
|
|
|
26
24
|
return htmlEncode(src)
|
|
@@ -29,35 +27,28 @@ export class ZeroDisplayFormatter implements Formatter {
|
|
|
29
27
|
|
|
30
28
|
@Decorators.registerFormatter('Idevs.CheckboxFormatter')
|
|
31
29
|
export class CheckboxFormatter implements Formatter {
|
|
32
|
-
constructor(
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
30
|
+
constructor(
|
|
31
|
+
public readonly props: {
|
|
32
|
+
trueText?: string
|
|
33
|
+
falseText?: string
|
|
34
|
+
cssClass?: string
|
|
35
|
+
trueValueIcon?: string
|
|
36
|
+
falseValueIcon?: string
|
|
37
|
+
},
|
|
38
|
+
) {
|
|
39
|
+
this.props.cssClass ??= 'text-center fs-2 text-gray-1'
|
|
40
|
+
this.props.trueText ??= '1'
|
|
41
|
+
this.props.falseText ??= '0'
|
|
42
|
+
this.props.trueValueIcon ??= 'mdi mdi-checkbox-marked-outline'
|
|
43
|
+
this.props.falseValueIcon ??= 'mdi mdi-checkbox-blank-outline'
|
|
38
44
|
}
|
|
39
45
|
|
|
40
|
-
@Decorators.option()
|
|
41
|
-
public trueText: string
|
|
42
|
-
|
|
43
|
-
@Decorators.option()
|
|
44
|
-
public falseText: string
|
|
45
|
-
|
|
46
|
-
@Decorators.option()
|
|
47
|
-
public cssClass: string
|
|
48
|
-
|
|
49
|
-
@Decorators.option()
|
|
50
|
-
public trueValueIcon: string
|
|
51
|
-
|
|
52
|
-
@Decorators.option()
|
|
53
|
-
public falseValueIcon: string
|
|
54
|
-
|
|
55
46
|
format(ctx: FormatterContext): string {
|
|
56
47
|
const src = ctx.value as string
|
|
57
|
-
if (src == this.trueText) {
|
|
58
|
-
return `<i class="${this.trueValueIcon} ${this.cssClass}"></i>`
|
|
59
|
-
} else if (src == this.falseText) {
|
|
60
|
-
return `<i class="${this.falseValueIcon} ${this.cssClass}"></i>`
|
|
48
|
+
if (src == this.props.trueText) {
|
|
49
|
+
return `<i class="${this.props.trueValueIcon} ${this.props.cssClass}"></i>`
|
|
50
|
+
} else if (src == this.props.falseText) {
|
|
51
|
+
return `<i class="${this.props.falseValueIcon} ${this.props.cssClass}"></i>`
|
|
61
52
|
} else {
|
|
62
53
|
return htmlEncode(src)
|
|
63
54
|
}
|
package/src/tsconfig.json
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"forceConsistentCasingInFileNames": true,
|
|
13
13
|
"noImplicitAny": true,
|
|
14
14
|
"sourceMap": true,
|
|
15
|
-
"module": "
|
|
15
|
+
"module": "ESNext",
|
|
16
16
|
"moduleResolution": "Node",
|
|
17
17
|
"skipLibCheck": true,
|
|
18
18
|
"types": ["jquery", "jquery.validation", "jqueryui", "toastr"],
|
|
@@ -76,7 +76,7 @@ export class DropdownToolButton {
|
|
|
76
76
|
|
|
77
77
|
private buildBaseDropdown(): JQuery {
|
|
78
78
|
const dropdownTemplate = `<div class="buttons-inner dropdown" style="overflow: visible">
|
|
79
|
-
<div class="idevs-tool-dropdown-button tool-button icon-tool-button ${
|
|
79
|
+
<div class="idevs-tool-dropdown-button tool-button icon-tool-button ${this.options.cssClass ?? ''} ${
|
|
80
80
|
this.options.isDropUp ? 'dropup' : ''
|
|
81
81
|
} ${this.isDisabled ? 'disabled' : ''}" style="cursor: unset;">
|
|
82
82
|
<div class="button-outer dropdown-toggle ${this.isDisabled ? 'disabled' : ''}"
|
|
@@ -84,7 +84,7 @@ export class DropdownToolButton {
|
|
|
84
84
|
style="cursor: pointer;">
|
|
85
85
|
<span class="button-inner">
|
|
86
86
|
<i class="${this.options.icon}"></i>
|
|
87
|
-
${
|
|
87
|
+
${this.options.title ?? ''}
|
|
88
88
|
</span>
|
|
89
89
|
<i class="caret"></i>
|
|
90
90
|
</div>
|
|
@@ -116,18 +116,16 @@ export class DropdownToolButton {
|
|
|
116
116
|
let dropdownItemElement: JQuery
|
|
117
117
|
|
|
118
118
|
if (button.isDropdownHeader && !isEmptyOrNull(button.dropdownHeaderTitle)) {
|
|
119
|
-
dropdownItemElement = $(
|
|
120
|
-
`<li class="dropdown-header ${(button.cssClass ?? '')}">${button.dropdownHeaderTitle}</li>`,
|
|
121
|
-
)
|
|
119
|
+
dropdownItemElement = $(`<li class="dropdown-header ${button.cssClass ?? ''}">${button.dropdownHeaderTitle}</li>`)
|
|
122
120
|
} else {
|
|
123
121
|
if (button.isSeparator) {
|
|
124
122
|
dropdownItemElement = $(`<li class="dropdown-divider"></li>`)
|
|
125
123
|
} else {
|
|
126
124
|
dropdownItemElement = $(`<li class="${button.disabled ? 'disabled' : ''}"
|
|
127
|
-
title="${
|
|
128
|
-
data-idevs-key="${
|
|
129
|
-
<a href="#" class="${
|
|
130
|
-
<i class="${
|
|
125
|
+
title="${button.hint ?? ''}"
|
|
126
|
+
data-idevs-key="${button.key ?? ''}">
|
|
127
|
+
<a href="#" class="${button.cssClass ?? 'dropdown-item'}">
|
|
128
|
+
<i class="${button.icon ?? ''}"></i>
|
|
131
129
|
${button.title}
|
|
132
130
|
</a>
|
|
133
131
|
</li>`)
|
|
@@ -256,14 +254,14 @@ export class DropdownToolButton {
|
|
|
256
254
|
this.setDisablingStateItem(button.key, button.disabled || false)
|
|
257
255
|
}
|
|
258
256
|
|
|
259
|
-
const sideButtonTemplate = `<div class="tool-button add-button icon-tool-button ${
|
|
257
|
+
const sideButtonTemplate = `<div class="tool-button add-button icon-tool-button ${button.cssClass ?? ''} ${
|
|
260
258
|
button.disabled ? 'disabled' : ''
|
|
261
259
|
}"
|
|
262
|
-
data-idevs-key="${
|
|
263
|
-
title="${
|
|
260
|
+
data-idevs-key="${button.key ?? ''}"
|
|
261
|
+
title="${button.title ?? ''}">
|
|
264
262
|
<div class="button-outer">
|
|
265
263
|
<span class="button-inner">
|
|
266
|
-
<i class="${
|
|
264
|
+
<i class="${button.icon ?? ''}"></i>
|
|
267
265
|
</span>
|
|
268
266
|
</div>
|
|
269
267
|
</div>`
|
|
@@ -52,14 +52,14 @@ export class ToggleToolButton {
|
|
|
52
52
|
|
|
53
53
|
private buildBaseButton(): JQuery {
|
|
54
54
|
const buttonTemplate = `<div class="buttons-inner" style="overflow: visible">
|
|
55
|
-
<div class="idevs-toggle-button tool-button icon-tool-button ${
|
|
55
|
+
<div class="idevs-toggle-button tool-button icon-tool-button ${this.options.cssClass ?? ''} ${
|
|
56
56
|
this.isDisabled ? 'disabled' : ''
|
|
57
57
|
}" style="cursor: unset;">
|
|
58
58
|
<div class="button-outer ${this.isDisabled ? 'disabled' : ''}"
|
|
59
59
|
style="cursor: pointer;">
|
|
60
60
|
<span class="button-inner">
|
|
61
61
|
<i class="${this.options.icon}"></i>
|
|
62
|
-
${
|
|
62
|
+
${this.options.title ?? ''}
|
|
63
63
|
</span>
|
|
64
64
|
<i class="caret"></i>
|
|
65
65
|
</div>
|