dbm 1.4.18 → 1.4.19
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/css/form-field.css +5 -0
- package/css/icons.css +5 -23
- package/flow/controllers/interaction/SpeechRecognition.js +83 -0
- package/flow/controllers/interaction/index.js +2 -1
- package/graphapi/webclient/index.js +4 -3
- package/package.json +1 -1
- package/react/admin/editor/fields/ArrayField.js +2 -2
- package/react/admin/objects/itemeditors/DraggableHierarchyDisplay.js +3 -3
- package/react/admin/objects/itemeditors/MultipleRelations.js +1 -1
- package/react/cookies/CookieOverlayMessage.js +2 -2
- package/react/svg/AddGlobalFilterClasses.js +5 -23
- package/react/svg/index.js +9 -3
- package/utils/css/AddStyles.js +60 -0
- package/utils/css/index.js +41 -0
- package/utils/index.js +2 -1
package/css/form-field.css
CHANGED
package/css/icons.css
CHANGED
|
@@ -13,30 +13,12 @@
|
|
|
13
13
|
height: var(--field-icon-size, 16px);
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
/*
|
|
17
|
-
.standard-icon-color {
|
|
18
|
-
filter: url("#standard-icon-color");
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
.action-icon-color {
|
|
22
|
-
filter: url("#action-icon-color");
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
.text-icon-color {
|
|
26
|
-
filter: url("#text-icon-color");
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
.white-icon-color {
|
|
30
|
-
filter: url("#white-icon-color");
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
.hover-item:hover .remove-action-icon-color,
|
|
34
|
-
.hover-icon.remove-action-icon-color:hover {
|
|
35
|
-
filter: url("#remove-action-icon-hover-color");
|
|
36
|
-
}
|
|
37
|
-
*/
|
|
38
|
-
|
|
39
16
|
.drag-handle-icon {
|
|
40
17
|
width: 8px;
|
|
41
18
|
height: 12px;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
.big-status-icon {
|
|
22
|
+
width: var(--big-status-icon-size, 64px);
|
|
23
|
+
height: var(--big-status-icon-size, 64px);
|
|
42
24
|
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import Dbm from "../../../index.js";
|
|
2
|
+
|
|
3
|
+
export default class SpeechRecognition extends Dbm.core.BaseObject {
|
|
4
|
+
_construct() {
|
|
5
|
+
super._construct();
|
|
6
|
+
|
|
7
|
+
this.item.requireProperty("record", false).addUpdate(this._getScopedCallFunctionCommand(this._recordChanged));
|
|
8
|
+
this.item.requireProperty("startValue", "");
|
|
9
|
+
this.item.requireProperty("value", "");
|
|
10
|
+
this.item.requireProperty("language", "en-GB");
|
|
11
|
+
this.item.requireProperty("state", "waiting");
|
|
12
|
+
|
|
13
|
+
let SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
|
|
14
|
+
|
|
15
|
+
let dictationRecorder = null;
|
|
16
|
+
if(SpeechRecognition) {
|
|
17
|
+
dictationRecorder = new SpeechRecognition();
|
|
18
|
+
|
|
19
|
+
dictationRecorder.continuous = true;
|
|
20
|
+
dictationRecorder.interimResults = true;
|
|
21
|
+
|
|
22
|
+
dictationRecorder.addEventListener("result", this._callback_result.bind(this));
|
|
23
|
+
dictationRecorder.addEventListener("error", this._callback_error.bind(this));
|
|
24
|
+
dictationRecorder.addEventListener("start", this._callback_started.bind(this));
|
|
25
|
+
dictationRecorder.addEventListener("end", this._callback_ended.bind(this));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
this.item.requireProperty("dictationRecorder", dictationRecorder);
|
|
29
|
+
this.item.requireProperty("isAvailable", dictationRecorder ? true : false);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
_recordChanged() {
|
|
33
|
+
if(this.item.record) {
|
|
34
|
+
this.item.dictationRecorder.lang = this.item.language;
|
|
35
|
+
this.item.startValue = this.item.value;
|
|
36
|
+
this.item.state = "checkingPermissions";
|
|
37
|
+
this.item.dictationRecorder.start();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
this.item.dictationRecorder.stop();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
_callback_result(aEvent) {
|
|
45
|
+
console.log("_callback_result");
|
|
46
|
+
console.log(aEvent);
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
let transcripts = [this.item.startValue];
|
|
50
|
+
|
|
51
|
+
let currentArray = aEvent.results;
|
|
52
|
+
let currentArrayLength = currentArray.length;
|
|
53
|
+
|
|
54
|
+
for (let i = 0; i < currentArrayLength; i++) {
|
|
55
|
+
transcripts.push(currentArray[i][0].transcript);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
console.log(transcripts.join(" "));
|
|
59
|
+
|
|
60
|
+
this.item.properties.value.getMostUpstreamProperty().value = transcripts.join(" ");
|
|
61
|
+
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
_callback_error(aEvent) {
|
|
65
|
+
console.log("_callback_error");
|
|
66
|
+
console.log(aEvent);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
_callback_started(aEvent) {
|
|
70
|
+
console.log("_callback_started");
|
|
71
|
+
console.log(aEvent);
|
|
72
|
+
|
|
73
|
+
this.item.state = "recording";
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
_callback_ended(aEvent) {
|
|
77
|
+
console.log("_callback_ended");
|
|
78
|
+
console.log(aEvent);
|
|
79
|
+
|
|
80
|
+
this.item.properties.record.getMostUpstreamProperty().value = false;
|
|
81
|
+
this.item.state = "waiting";
|
|
82
|
+
}
|
|
83
|
+
}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
export {default as MoveElement} from "./MoveElement.js";
|
|
1
|
+
export {default as MoveElement} from "./MoveElement.js";
|
|
2
|
+
export {default as SpeechRecognition} from "./SpeechRecognition.js";
|
|
@@ -67,13 +67,14 @@ export const performAction = function(aType, aData, aCallback = null) {
|
|
|
67
67
|
return request.properties.data;
|
|
68
68
|
}
|
|
69
69
|
|
|
70
|
-
export const loadRange = function(aSelects, aEncodings,
|
|
70
|
+
export const loadRange = function(aSelects, aEncodings, aCallback = null) {
|
|
71
71
|
let graphApi = Dbm.getRepositoryItem("cachedGraphApi").controller;
|
|
72
72
|
|
|
73
73
|
let request = graphApi.requestRange(aSelects, aEncodings);
|
|
74
74
|
|
|
75
|
-
if(
|
|
76
|
-
Dbm.
|
|
75
|
+
if(aCallback) {
|
|
76
|
+
let callbackCommand = Dbm.commands.callFunction(aCallback, [Dbm.core.source.staticObject(request, "items")]);
|
|
77
|
+
Dbm.flow.runWhenMatched(request.properties.status, Dbm.loading.LoadingStatus.LOADED, callbackCommand);
|
|
77
78
|
}
|
|
78
79
|
|
|
79
80
|
return request.properties.items;
|
package/package.json
CHANGED
|
@@ -73,9 +73,9 @@ export default class ArrayField extends Dbm.react.BaseObject {
|
|
|
73
73
|
React.createElement("div", {"className": "flex-row-item flex-no-resize"},
|
|
74
74
|
React.createElement("div", {className: "spacing small"}),
|
|
75
75
|
React.createElement(Dbm.react.interaction.ConfirmButton, {"command": this._getScopedCallFunctionCommand(this._removeItem, [Dbm.react.source.contextVariable("arrayEditor"), Dbm.react.source.contextVariable("item")])},
|
|
76
|
-
React.createElement(Dbm.react.image.Image, {"src": "/assets/img/icons/delete.svg", "className": "background-contain text-row-icon
|
|
76
|
+
React.createElement(Dbm.react.image.Image, {"src": "/assets/img/icons/delete.svg", "className": "background-contain text-row-icon icon-color:action cursor-pointer"}),
|
|
77
77
|
React.createElement("div", {"data-slot": "confirm", className: "absolute-container cursor-pointer", title: "Click to remove"},
|
|
78
|
-
React.createElement(Dbm.react.image.Image, {"src": "/assets/img/icons/delete.svg", "className": "background-contain text-row-icon hover-icon remove-action
|
|
78
|
+
React.createElement(Dbm.react.image.Image, {"src": "/assets/img/icons/delete.svg", "className": "background-contain text-row-icon hover-icon icon-color:remove-action cursor-pointer"}),
|
|
79
79
|
React.createElement("div", {className:"centered-tip-text no-pointer-events"},
|
|
80
80
|
"Remove?"
|
|
81
81
|
)
|
|
@@ -31,7 +31,7 @@ export default class DraggableHierarchyDisplay extends Dbm.react.BaseObject {
|
|
|
31
31
|
React.createElement("div", {className: "flex-row micro-item-spacing"},
|
|
32
32
|
React.createElement("div", {className: "flex-row-item flex-no-resize cursor-grab", draggable: true},
|
|
33
33
|
React.createElement("div", {className: "spacing small"}),
|
|
34
|
-
React.createElement(Dbm.react.image.Image, {"src": "/assets/img/icons/drag-handle.svg", "className": "background-contain drag-handle-icon
|
|
34
|
+
React.createElement(Dbm.react.image.Image, {"src": "/assets/img/icons/drag-handle.svg", "className": "background-contain drag-handle-icon icon-color:action"})
|
|
35
35
|
),
|
|
36
36
|
React.createElement("div", {className: "flex-row-item flex-resize"},
|
|
37
37
|
children
|
|
@@ -39,9 +39,9 @@ export default class DraggableHierarchyDisplay extends Dbm.react.BaseObject {
|
|
|
39
39
|
React.createElement("div", {className: "flex-row-item flex-no-resize"},
|
|
40
40
|
React.createElement("div", {className: "spacing small"}),
|
|
41
41
|
React.createElement(Dbm.react.interaction.ConfirmButton, {"command": this._getScopedCallFunctionCommand(this._remove)},
|
|
42
|
-
React.createElement(Dbm.react.image.Image, {"src": "/assets/img/icons/delete.svg", "className": "background-contain text-row-icon
|
|
42
|
+
React.createElement(Dbm.react.image.Image, {"src": "/assets/img/icons/delete.svg", "className": "background-contain text-row-icon icon-color:action cursor-pointer"}),
|
|
43
43
|
React.createElement("div", {"data-slot": "confirm", className: "absolute-container cursor-pointer", title: "Click to remove"},
|
|
44
|
-
React.createElement(Dbm.react.image.Image, {"src": "/assets/img/icons/delete.svg", "className": "background-contain text-row-icon hover-icon remove-action
|
|
44
|
+
React.createElement(Dbm.react.image.Image, {"src": "/assets/img/icons/delete.svg", "className": "background-contain text-row-icon hover-icon icon-color:remove-action cursor-pointer"}),
|
|
45
45
|
React.createElement("div", {className:"centered-tip-text no-pointer-events"},
|
|
46
46
|
"Remove?"
|
|
47
47
|
)
|
|
@@ -112,7 +112,7 @@ export default class MultipleRelations extends Dbm.react.BaseObject {
|
|
|
112
112
|
),
|
|
113
113
|
React.createElement("div", {"className": "flex-row"},
|
|
114
114
|
React.createElement(Dbm.react.interaction.CommandButton, {"commands": [Dbm.commands.callFunction(this._remove.bind(this), [Dbm.react.source.item()])]},
|
|
115
|
-
React.createElement(Dbm.react.image.Image, {"src": "/assets/img/icons/remove.svg", "className": "background-contain cursor-pointer
|
|
115
|
+
React.createElement(Dbm.react.image.Image, {"src": "/assets/img/icons/remove.svg", "className": "background-contain cursor-pointer icon-color:action field-icon"})
|
|
116
116
|
)
|
|
117
117
|
)
|
|
118
118
|
)
|
|
@@ -68,7 +68,7 @@ export default class CookieOverlayMessage extends Dbm.react.BaseObject {
|
|
|
68
68
|
Dbm.react.text.translatedText("Take full control over how we use cookies:", "text/settingsLinkDescription")
|
|
69
69
|
),
|
|
70
70
|
React.createElement("div", {"className": "spacing small"}),
|
|
71
|
-
React.createElement(
|
|
71
|
+
React.createElement(Dbm.react.text.Link, {"href": settingsUrl, className:"custom-styled-link"},
|
|
72
72
|
React.createElement("div", {"className": "secondary-button standard-button-padding text-align-center"},
|
|
73
73
|
Dbm.react.text.translatedText("Settings", "settings")
|
|
74
74
|
)
|
|
@@ -108,7 +108,7 @@ export default class CookieOverlayMessage extends Dbm.react.BaseObject {
|
|
|
108
108
|
Dbm.react.text.translatedText("Take full control over how we use cookies:", "text/settingsLinkDescription")
|
|
109
109
|
),
|
|
110
110
|
React.createElement("div", {"className": "flex-row-item"},
|
|
111
|
-
React.createElement(
|
|
111
|
+
React.createElement(Dbm.react.text.Link, {"href": settingsUrl, className:"custom-styled-link"},
|
|
112
112
|
React.createElement("div", {"className": "cookie-settings-link"},
|
|
113
113
|
Dbm.react.text.translatedText("Settings", "settings")
|
|
114
114
|
)
|
|
@@ -1,34 +1,16 @@
|
|
|
1
1
|
import Dbm from "../../index.js";
|
|
2
2
|
|
|
3
|
-
export default class
|
|
3
|
+
export default class AddGlobalFilterClasses extends Dbm.utils.css.AddStyles {
|
|
4
|
+
|
|
4
5
|
_construct() {
|
|
6
|
+
//METODO: this does not need to be it's own class
|
|
5
7
|
super._construct();
|
|
6
8
|
|
|
7
|
-
this.
|
|
9
|
+
this.createHeadElement();
|
|
8
10
|
|
|
9
11
|
let colorFilters = Dbm.getRepositoryItem("globalSvg");
|
|
10
12
|
let filtersProperty = colorFilters.requireProperty("filters", []);
|
|
11
13
|
|
|
12
|
-
|
|
13
|
-
this._updateStyles();
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
_updateStyles() {
|
|
17
|
-
console.log("_updateStyles");
|
|
18
|
-
|
|
19
|
-
let colorFilters = Dbm.getRepositoryItem("globalSvg");
|
|
20
|
-
|
|
21
|
-
if(colorFilters.filters.length) {
|
|
22
|
-
|
|
23
|
-
if(!this._styleTag) {
|
|
24
|
-
this._styleTag = document.createElement("style");
|
|
25
|
-
document.head.appendChild(this._styleTag);
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
let declarations = Dbm.utils.ArrayFunctions.mapField(colorFilters.filters, "classDeclaration");
|
|
29
|
-
this._styleTag.innerHTML = declarations.join("\n");
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
14
|
+
this.item.properties.styles.connectInput(filtersProperty);
|
|
33
15
|
}
|
|
34
16
|
}
|
package/react/svg/index.js
CHANGED
|
@@ -12,8 +12,14 @@ export const addGlobalRgbColorFilter = function(aName, aR, aG, aB) {
|
|
|
12
12
|
colorFilters.requireProperty("filters", []);
|
|
13
13
|
|
|
14
14
|
let item = Dbm.getRepositoryItem("globalSvg/filters/" + aName);
|
|
15
|
-
|
|
16
|
-
item.setValue("
|
|
15
|
+
let filterId = aName + "-color-filter";
|
|
16
|
+
item.setValue("element", React.createElement(Dbm.react.svg.MatrixFilter, {"id": filterId, "matrix": Dbm.utils.svg.ColorMatrixFunctions.floodColor(aR, aG, aB)}));
|
|
17
|
+
let selectors = [
|
|
18
|
+
"." + CSS.escape("icon-color:" + aName),
|
|
19
|
+
"." + CSS.escape("group(icon-color:" + aName + ")") + " " + "." + CSS.escape("use(icon-color)"),
|
|
20
|
+
];
|
|
21
|
+
|
|
22
|
+
item.setValue("cssDeclaration", selectors.join(", ") + "{filter:url(\"#" + filterId + "\")}");
|
|
17
23
|
|
|
18
24
|
let filters = [].concat(colorFilters.filters);
|
|
19
25
|
filters.push(item);
|
|
@@ -51,7 +57,7 @@ export const createGlobalHexBlendFilter = function(aName, aColor, aBlendMode = "
|
|
|
51
57
|
|
|
52
58
|
let item = Dbm.getRepositoryItem("globalSvg/filters/" + aName);
|
|
53
59
|
item.setValue("element", React.createElement(Dbm.react.svg.BlendColorFilter, {"id": aName, "color": aColor, "blendMode": aBlendMode, "saturation": aSaturation, "min": aMin, "max": aMax}));
|
|
54
|
-
item.setValue("
|
|
60
|
+
item.setValue("cssDeclaration", "." + aName + "{filter:url(\"#" + aName + "\")}");
|
|
55
61
|
|
|
56
62
|
let filters = [].concat(colorFilters.filters);
|
|
57
63
|
filters.push(item);
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import Dbm from "../../index.js";
|
|
2
|
+
|
|
3
|
+
export default class AddStyles extends Dbm.core.BaseObject {
|
|
4
|
+
_construct() {
|
|
5
|
+
super._construct();
|
|
6
|
+
|
|
7
|
+
this._updateCommand = this._getScopedCallFunctionCommand(this.updateStyles);
|
|
8
|
+
|
|
9
|
+
this.item.requireProperty("element", null).addUpdate(this._updateCommand);
|
|
10
|
+
this.item.requireProperty("styles", []).addUpdate(this._updateCommand);
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
setElement(aElement) {
|
|
14
|
+
this.item.element = aElement;
|
|
15
|
+
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
createHeadElement() {
|
|
20
|
+
let element = document.createElement("style");
|
|
21
|
+
document.head.appendChild(element);
|
|
22
|
+
this.setElement(element);
|
|
23
|
+
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
updateStyles() {
|
|
28
|
+
|
|
29
|
+
let declarations = Dbm.utils.ArrayFunctions.mapField(this.item.styles, "cssDeclaration");
|
|
30
|
+
|
|
31
|
+
if(this.item.element) {
|
|
32
|
+
this.item.element.innerHTML = declarations.join("\n");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
createStyle(aName, aDeclaration) {
|
|
37
|
+
let styleItem = new Dbm.repository.Item();
|
|
38
|
+
styleItem.requireProperty("name", aName);
|
|
39
|
+
styleItem.requireProperty("cssDeclaration", "." + CSS.escape(aName) + "{" + aDeclaration + "}").addUpdate(this._updateCommand);
|
|
40
|
+
|
|
41
|
+
this.item.addToArray("styles", styleItem);
|
|
42
|
+
|
|
43
|
+
return styleItem;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
createGroupedStyle(aGroupName, aName, aDeclaration) {
|
|
47
|
+
let styleItem = new Dbm.repository.Item();
|
|
48
|
+
styleItem.requireProperty("groupName", aGroupName);
|
|
49
|
+
styleItem.requireProperty("name", aName);
|
|
50
|
+
let selectors = [
|
|
51
|
+
"." + CSS.escape(aGroupName + ":" + aName),
|
|
52
|
+
"." + CSS.escape("group(" + aGroupName + ":" + aName + ")") + " " + "." + CSS.escape("use(" + aGroupName + ")")
|
|
53
|
+
];
|
|
54
|
+
styleItem.requireProperty("cssDeclaration", selectors.join(", ") + "{" + aDeclaration + "}").addUpdate(this._updateCommand);
|
|
55
|
+
|
|
56
|
+
this.item.addToArray("styles", styleItem);
|
|
57
|
+
|
|
58
|
+
return styleItem;
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import Dbm from "../../index.js";
|
|
2
|
+
|
|
3
|
+
export {default as AddStyles} from "./AddStyles.js";
|
|
4
|
+
|
|
5
|
+
export const getGlobalCss = function() {
|
|
6
|
+
|
|
7
|
+
let globalStyling = Dbm.repository.getControllerIfExists("globalCss");
|
|
8
|
+
|
|
9
|
+
if(!globalStyling) {
|
|
10
|
+
globalStyling = new Dbm.utils.css.AddStyles();
|
|
11
|
+
globalStyling.item.register("globalCss");
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
return globalStyling;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export const setupGlobalColoring = function() {
|
|
18
|
+
let globalStyling = getGlobalCss();
|
|
19
|
+
globalStyling.createHeadElement();
|
|
20
|
+
globalStyling.item.element.id = "dbm-global-styles";
|
|
21
|
+
|
|
22
|
+
let colorFilters = Dbm.getRepositoryItem("globalSvg");
|
|
23
|
+
let filtersProperty = colorFilters.requireProperty("filters", []);
|
|
24
|
+
|
|
25
|
+
let globalFilterStyling = new Dbm.utils.css.AddStyles();
|
|
26
|
+
globalFilterStyling.item.properties.styles.connectInput(filtersProperty);
|
|
27
|
+
globalFilterStyling.createHeadElement();
|
|
28
|
+
globalFilterStyling.item.element.id = "dbm-global-filter-styles";
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export const addGlobalHexColor = function(aName, aColor) {
|
|
32
|
+
let globalStyling = getGlobalCss();
|
|
33
|
+
|
|
34
|
+
//METODO: add css variable
|
|
35
|
+
|
|
36
|
+
globalStyling.createGroupedStyle("text-color", aName, "color: " + aColor);
|
|
37
|
+
globalStyling.createGroupedStyle("background-color", aName, "background-color: " + aColor);
|
|
38
|
+
globalStyling.createGroupedStyle("border-color", aName, "border-color: " + aColor);
|
|
39
|
+
|
|
40
|
+
Dbm.react.svg.addGlobalHexColorFilter(aName, aColor);
|
|
41
|
+
}
|
package/utils/index.js
CHANGED
|
@@ -15,4 +15,5 @@ export {default as KeywordReplace} from "./KeywordReplace.js";
|
|
|
15
15
|
export {default as NamedArray} from "./NamedArray.js";
|
|
16
16
|
|
|
17
17
|
export * as thirdparty from "./thirdparty/index.js";
|
|
18
|
-
export * as svg from "./svg/index.js";
|
|
18
|
+
export * as svg from "./svg/index.js";
|
|
19
|
+
export * as css from "./css/index.js";
|