dbm 1.1.1 → 1.1.2
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/commands/CommandBaseObject.js +25 -0
- package/commands/SetProperty.js +18 -0
- package/commands/index.js +20 -8
- package/core/source/FromObject.js +8 -0
- package/core/source/index.js +9 -0
- package/flow/controllers/edit/EditMultipleValues.js +57 -0
- package/flow/controllers/edit/EditValue.js +52 -0
- package/flow/controllers/edit/index.js +2 -0
- package/flow/controllers/index.js +2 -1
- package/graphapi/webclient/admin/EditorGroup.js +59 -0
- package/graphapi/webclient/admin/ItemEditor.js +74 -0
- package/graphapi/webclient/admin/ItemSaveData.js +63 -0
- package/graphapi/webclient/admin/SaveData.js +60 -0
- package/graphapi/webclient/admin/SaveFunctions.js +7 -0
- package/graphapi/webclient/admin/ValueEditor.js +61 -0
- package/graphapi/webclient/admin/index.js +8 -0
- package/graphapi/webclient/decode/index.js +16 -3
- package/graphapi/webclient/index.js +17 -1
- package/package.json +1 -1
- package/react/admin/EditPage.js +87 -66
- package/react/admin/SelectImageFromLibrary.js +56 -0
- package/react/admin/editor/Editor.js +2 -0
- package/react/admin/editor/fields/ImageField.js +142 -4
- package/react/admin/index.js +1 -0
- package/react/area/OpenCloseExpandableArea.js +1 -1
- package/react/modules/index.js +11 -1
- package/react/text/index.js +2 -2
- package/site/BrowserUpdater.js +46 -0
- package/site/SiteDataLoader.js +9 -13
- package/site/SiteNavigation.js +0 -15
- package/site/index.js +20 -1
- package/utils/ArrayFunctions.js +0 -1
- package/utils/UrlFunctions.js +15 -11
package/react/admin/EditPage.js
CHANGED
|
@@ -7,42 +7,51 @@ export default class EditPage extends Dbm.react.BaseObject {
|
|
|
7
7
|
|
|
8
8
|
let page = this.context.page;
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
this.item.setValue("
|
|
12
|
-
this.item.
|
|
13
|
-
this.item.setValue("description", page["meta/description"]);
|
|
14
|
-
this.item.setValue("url", page.url);
|
|
10
|
+
let editorGroup = new Dbm.graphapi.webclient.admin.EditorGroup();
|
|
11
|
+
this.item.setValue("editorGroup", editorGroup);
|
|
12
|
+
this.item.requireProperty("changed", false).connectInput(editorGroup.item.properties.changed);
|
|
15
13
|
|
|
16
|
-
let
|
|
14
|
+
let id = page.id;
|
|
15
|
+
let itemEditor = editorGroup.getItemEditor(id);
|
|
17
16
|
|
|
18
|
-
|
|
17
|
+
itemEditor.addFieldEditor("title", page.title, "title");
|
|
18
|
+
itemEditor.addFieldEditor("navigationName", page.navigationName); //METODO: add update encoding
|
|
19
|
+
itemEditor.addFieldEditor("content", page.content, "content");
|
|
20
|
+
itemEditor.addEditor("url", page.url, Dbm.graphapi.webclient.admin.SaveFunctions.setUrl, "url");
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
let descriptionEditor = itemEditor.addFieldEditor("meta/description", page["meta/description"], "meta/description");
|
|
23
|
+
let descriptionLength = Dbm.flow.updatefunctions.basic.length(descriptionEditor.item.editValue.value);
|
|
24
|
+
this.item.requireProperty("descriptionLength", 0).connectInput(descriptionLength.output.properties.length);
|
|
21
25
|
}
|
|
22
26
|
|
|
23
27
|
_save() {
|
|
24
28
|
console.log("_save");
|
|
25
29
|
|
|
26
30
|
let page = this.context.page;
|
|
27
|
-
|
|
28
|
-
let
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
], ["content", "title", "url", "meta/description"]);
|
|
31
|
+
|
|
32
|
+
let editorGroup = this.item.editorGroup;
|
|
33
|
+
|
|
34
|
+
let saveData = editorGroup.getSaveData();
|
|
35
|
+
let itemSaveData = saveData.getItemSaveData(page.id);
|
|
36
|
+
|
|
37
|
+
itemSaveData.setField("lastModified", (new Date()).toISOString());
|
|
38
|
+
itemSaveData.createChange("clearCache", {});
|
|
39
|
+
|
|
40
|
+
console.log(editorGroup, saveData);
|
|
41
|
+
|
|
42
|
+
saveData.save();
|
|
40
43
|
}
|
|
41
44
|
|
|
42
45
|
_generateSeoSummary() {
|
|
46
|
+
|
|
47
|
+
let page = this.context.page;
|
|
48
|
+
|
|
49
|
+
let editorGroup = this.item.editorGroup;
|
|
50
|
+
let itemEditor = editorGroup.getItemEditor(page.id);
|
|
51
|
+
|
|
43
52
|
let graphApi = Dbm.getInstance().repository.getItem("graphApi").controller;
|
|
44
53
|
|
|
45
|
-
let request = graphApi.requestData("admin/seoSummary", {"value": {"title":
|
|
54
|
+
let request = graphApi.requestData("admin/seoSummary", {"value": {"title": itemEditor.getEditor("title").item.editValue.getValue(), "content": itemEditor.getEditor("content").item.editValue.getValue()}});
|
|
46
55
|
Dbm.flow.addUpdateCommandWhenMatched(request.properties.status, Dbm.loading.LoadingStatus.LOADED, Dbm.commands.callFunction(this._dataLoaded.bind(this), [request]));
|
|
47
56
|
|
|
48
57
|
}
|
|
@@ -50,66 +59,78 @@ export default class EditPage extends Dbm.react.BaseObject {
|
|
|
50
59
|
_dataLoaded(aRequest) {
|
|
51
60
|
let summary = Dbm.objectPath(aRequest, "data.seoSummary");
|
|
52
61
|
|
|
53
|
-
this.
|
|
62
|
+
let page = this.context.page;
|
|
63
|
+
|
|
64
|
+
let editorGroup = this.item.editorGroup;
|
|
65
|
+
let itemEditor = editorGroup.getItemEditor(page.id);
|
|
66
|
+
|
|
67
|
+
itemEditor.getEditor("meta/description").item.editValue.item.value = summary;
|
|
54
68
|
}
|
|
55
69
|
|
|
56
70
|
_renderMainElement() {
|
|
57
71
|
|
|
72
|
+
let page = this.context.page;
|
|
73
|
+
|
|
74
|
+
let editorGroup = this.item.editorGroup;
|
|
75
|
+
let itemEditor = editorGroup.getItemEditor(page.id);
|
|
76
|
+
|
|
58
77
|
return React.createElement("div", {},
|
|
59
|
-
React.createElement(
|
|
60
|
-
React.createElement("div", {},
|
|
61
|
-
React.createElement("
|
|
62
|
-
"
|
|
78
|
+
React.createElement(Dbm.react.context.AddContextVariables, {values: {"editorGroup": editorGroup, "itemEditor": itemEditor}},
|
|
79
|
+
React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
|
|
80
|
+
React.createElement("div", {},
|
|
81
|
+
React.createElement("label", {className: "standard-field-label"},
|
|
82
|
+
"Page title"
|
|
83
|
+
),
|
|
84
|
+
React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("title").item.editValue.value, className: "standard-field standard-field-padding full-width page-title-form-field", placeholder: "Title"}),
|
|
85
|
+
),
|
|
86
|
+
React.createElement("div", {className: "spacing standard"}),
|
|
87
|
+
React.createElement("div", {},
|
|
88
|
+
React.createElement("label", {className: "standard-field-label"},
|
|
89
|
+
"Navigation name"
|
|
90
|
+
),
|
|
91
|
+
React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("navigationName").item.editValue.value, className: "standard-field standard-field-padding full-width", placeholder: "Name showed in menues and breadcrumbs"}),
|
|
92
|
+
),
|
|
93
|
+
React.createElement("div", {className: "spacing standard"}),
|
|
94
|
+
React.createElement("div", {},
|
|
95
|
+
React.createElement("label", {className: "standard-field-label"},
|
|
96
|
+
"Url"
|
|
97
|
+
),
|
|
98
|
+
React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("url").item.editValue.value, className: "standard-field standard-field-padding full-width", placeholder: "Url"}),
|
|
63
99
|
),
|
|
64
|
-
React.createElement(Dbm.react.form.FormField, {"value": this.item.properties.title, className: "standard-field standard-field-padding full-width page-title-form-field", placeholder: "Title"}),
|
|
65
100
|
),
|
|
66
101
|
React.createElement("div", {className: "spacing standard"}),
|
|
67
|
-
React.createElement("div", {},
|
|
102
|
+
React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
|
|
68
103
|
React.createElement("label", {className: "standard-field-label"},
|
|
69
|
-
"
|
|
104
|
+
"Seo description"
|
|
70
105
|
),
|
|
71
|
-
React.createElement(Dbm.react.form.FormField, {"value":
|
|
106
|
+
React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("meta/description").item.editValue.value, className: "standard-field standard-field-padding full-width", placeholder: "Description"}),
|
|
107
|
+
React.createElement("div", {className: "spacing micro"}),
|
|
108
|
+
React.createElement("div", {className: "flex-row justify-between"},
|
|
109
|
+
React.createElement("div", {className: "flex-row-item"},
|
|
110
|
+
React.createElement("div", {onClick: () => {this._generateSeoSummary()}}, "Generate"),
|
|
111
|
+
),
|
|
112
|
+
React.createElement("div", {className: "flex-row-item"},
|
|
113
|
+
Dbm.react.text.text(this.item.properties.descriptionLength),
|
|
114
|
+
" / ",
|
|
115
|
+
"155"
|
|
116
|
+
)
|
|
117
|
+
)
|
|
72
118
|
),
|
|
73
119
|
React.createElement("div", {className: "spacing standard"}),
|
|
74
|
-
React.createElement("div", {},
|
|
120
|
+
React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
|
|
75
121
|
React.createElement("label", {className: "standard-field-label"},
|
|
76
|
-
"
|
|
77
|
-
),
|
|
78
|
-
React.createElement(Dbm.react.form.FormField, {"value": this.item.properties.url, className: "standard-field standard-field-padding full-width", placeholder: "Url"}),
|
|
79
|
-
),
|
|
80
|
-
),
|
|
81
|
-
React.createElement("div", {className: "spacing standard"}),
|
|
82
|
-
React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
|
|
83
|
-
React.createElement("label", {className: "standard-field-label"},
|
|
84
|
-
"Seo description"
|
|
85
|
-
),
|
|
86
|
-
React.createElement(Dbm.react.form.FormField, {"value": this.item.properties.description, className: "standard-field standard-field-padding full-width", placeholder: "Description"}),
|
|
87
|
-
React.createElement("div", {className: "spacing micro"}),
|
|
88
|
-
React.createElement("div", {className: "flex-row justify-between"},
|
|
89
|
-
React.createElement("div", {className: "flex-row-item"},
|
|
90
|
-
React.createElement("div", {onClick: () => {this._generateSeoSummary()}}, "Generate"),
|
|
122
|
+
"Content"
|
|
91
123
|
),
|
|
92
|
-
React.createElement("div", {
|
|
93
|
-
Dbm.react.
|
|
94
|
-
" / ",
|
|
95
|
-
"155"
|
|
124
|
+
React.createElement("div", {},
|
|
125
|
+
React.createElement(Dbm.react.admin.editor.Editor, {"value": itemEditor.getEditor("content").item.editValue.value}),
|
|
96
126
|
)
|
|
97
|
-
)
|
|
98
|
-
),
|
|
99
|
-
React.createElement("div", {className: "spacing standard"}),
|
|
100
|
-
React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
|
|
101
|
-
React.createElement("label", {className: "standard-field-label"},
|
|
102
|
-
"Content"
|
|
103
127
|
),
|
|
104
|
-
React.createElement("div", {},
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
React.createElement("div", {className: "flex-row-item"},
|
|
111
|
-
React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._save()}},
|
|
112
|
-
"Save"
|
|
128
|
+
React.createElement("div", {className: "spacing standard"}),
|
|
129
|
+
React.createElement("div", {className: "save-all-position"},
|
|
130
|
+
React.createElement(Dbm.react.area.OpenCloseExpandableArea, {open: this.item.properties.changed},
|
|
131
|
+
React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._save()}},
|
|
132
|
+
"Save all changes"
|
|
133
|
+
)
|
|
113
134
|
)
|
|
114
135
|
)
|
|
115
136
|
)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import React from "react";
|
|
2
|
+
import Dbm from "../../index.js";
|
|
3
|
+
|
|
4
|
+
export default class SelectImageFromLibrary extends Dbm.react.BaseObject {
|
|
5
|
+
_construct() {
|
|
6
|
+
super._construct();
|
|
7
|
+
|
|
8
|
+
this.item.requireProperty("loaded", false);
|
|
9
|
+
this.item.requireProperty("rows", []);
|
|
10
|
+
|
|
11
|
+
this._selectCommand = Dbm.commands.callFunction(this._selected.bind(this), [Dbm.react.source.contextVariable("item")]);
|
|
12
|
+
|
|
13
|
+
let graphApi = Dbm.getInstance().repository.getItem("graphApi").controller;
|
|
14
|
+
let request = graphApi.requestRange(
|
|
15
|
+
[
|
|
16
|
+
{"type": "byObjectType", "objectType": "image"}
|
|
17
|
+
],
|
|
18
|
+
["name", "image"]
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
Dbm.flow.addUpdateCommandWhenMatched(request.properties.status, Dbm.loading.LoadingStatus.LOADED, Dbm.commands.callFunction(this._dataLoaded.bind(this), [request]));
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
_dataLoaded(aRequest) {
|
|
25
|
+
console.log("_dataLoaded");
|
|
26
|
+
console.log(aRequest);
|
|
27
|
+
|
|
28
|
+
//METODO: create rows
|
|
29
|
+
this.item.rows = aRequest.items;
|
|
30
|
+
|
|
31
|
+
this.item.loaded = true;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
_selected(aImage) {
|
|
35
|
+
console.log("_selected");
|
|
36
|
+
console.log(aImage);
|
|
37
|
+
|
|
38
|
+
Dbm.commands.performCommands(this.getPropValue("selectedCommands"), this, aImage);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
_renderMainElement() {
|
|
42
|
+
|
|
43
|
+
return React.createElement("div", {},
|
|
44
|
+
React.createElement(Dbm.react.area.HasData, {check: this.item.properties.loaded},
|
|
45
|
+
React.createElement("div", {className: "flex-row flex-wrap"},
|
|
46
|
+
React.createElement(Dbm.react.area.List, {items: this.item.properties.rows},
|
|
47
|
+
React.createElement(Dbm.react.interaction.CommandButton, {command: this._selectCommand},
|
|
48
|
+
React.createElement(Dbm.react.image.WidthScaledImage, {image: Dbm.react.source.contextVariable("item"), targetWidth: 120, className: "background-contain image-library-preview image-library-margins"})
|
|
49
|
+
)
|
|
50
|
+
)
|
|
51
|
+
)
|
|
52
|
+
)
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
@@ -2,19 +2,27 @@ import React from "react";
|
|
|
2
2
|
import Dbm from "../../../../index.js";
|
|
3
3
|
|
|
4
4
|
export default class ImageField extends Dbm.react.BaseObject {
|
|
5
|
+
|
|
5
6
|
_construct() {
|
|
6
7
|
super._construct();
|
|
7
8
|
|
|
8
9
|
this._valueChangedBound = this._valueChanged.bind(this);
|
|
9
10
|
this._objectChangedBound = this._objectChanged.bind(this);
|
|
10
11
|
this._callback_fileChangedBound = this._callback_fileChanged.bind(this);
|
|
12
|
+
this._altTextChangedBound = this._altTextChanged.bind(this);
|
|
11
13
|
|
|
12
14
|
let fieldName = this.getPropValue("name");
|
|
13
15
|
|
|
16
|
+
|
|
17
|
+
|
|
14
18
|
let editorData = Dbm.objectPath(this.context, "moduleData.editorData");
|
|
15
19
|
|
|
16
20
|
Dbm.flow.addUpdateCommand(this.item.requireProperty("value", this._getObjectData()), Dbm.commands.callFunction(this._valueChangedBound));
|
|
17
21
|
|
|
22
|
+
let altText = Dbm.objectPath(this.item.value, "altText");
|
|
23
|
+
|
|
24
|
+
Dbm.flow.addUpdateCommand(this.item.requireProperty("altText", altText), Dbm.commands.callFunction(this._altTextChangedBound));
|
|
25
|
+
|
|
18
26
|
Dbm.flow.addUpdateCommand(editorData.properties.data, Dbm.commands.callFunction(this._objectChangedBound));
|
|
19
27
|
|
|
20
28
|
let imageElement = React.createElement("div", {className: "flex-row small-item-spacing"},
|
|
@@ -22,20 +30,136 @@ export default class ImageField extends Dbm.react.BaseObject {
|
|
|
22
30
|
React.createElement(Dbm.react.image.WidthScaledImage, {"image": Dbm.react.source.contextVariable("moduleData.editorData.data." + fieldName), targetWidth: 120, className: "editor-preview background-contain"}),
|
|
23
31
|
),
|
|
24
32
|
React.createElement("div", {className: "flex-row-item flex-resize"},
|
|
25
|
-
Dbm.react.text.text(Dbm.react.source.contextVariable("moduleData.editorData.data." + fieldName + ".url"))
|
|
33
|
+
Dbm.react.text.text(Dbm.react.source.contextVariable("moduleData.editorData.data." + fieldName + ".url")),
|
|
34
|
+
React.createElement("div", {className: "spacing small"}),
|
|
35
|
+
React.createElement("div", {},
|
|
36
|
+
React.createElement(Dbm.react.area.HasData, {check: Dbm.react.source.contextVariable("moduleData.editorData.data." + fieldName + ".id"), checkType: "invert/default"},
|
|
37
|
+
React.createElement(Dbm.react.interaction.CommandButton, {command: Dbm.commands.callFunction(this._addToLibrary.bind(this))},
|
|
38
|
+
React.createElement("div", {},
|
|
39
|
+
"Add to library"
|
|
40
|
+
)
|
|
41
|
+
)
|
|
42
|
+
|
|
43
|
+
),
|
|
44
|
+
React.createElement(Dbm.react.area.HasData, {check: Dbm.react.source.contextVariable("moduleData.editorData.data." + fieldName + ".id")},
|
|
45
|
+
React.createElement(Dbm.react.form.FormField, {value: this.item.properties.altText, className: "standard-field standard-field-padding full-width"}),
|
|
46
|
+
React.createElement("div", {className: "flex-row small-item-spacing"},
|
|
47
|
+
React.createElement("div", {className: "flex-row-item"},
|
|
48
|
+
React.createElement(Dbm.react.interaction.CommandButton, {command: Dbm.commands.callFunction(this._generateAltText.bind(this))},
|
|
49
|
+
React.createElement("div", {},
|
|
50
|
+
"Generate"
|
|
51
|
+
)
|
|
52
|
+
)
|
|
53
|
+
),
|
|
54
|
+
React.createElement("div", {className: "flex-row-item"},
|
|
55
|
+
React.createElement(Dbm.react.interaction.CommandButton, {command: Dbm.commands.callFunction(this._saveAltTextToLibrary.bind(this))},
|
|
56
|
+
React.createElement("div", {},
|
|
57
|
+
"Save to library"
|
|
58
|
+
)
|
|
59
|
+
)
|
|
60
|
+
)
|
|
61
|
+
)
|
|
62
|
+
)
|
|
63
|
+
),
|
|
26
64
|
),
|
|
27
65
|
React.createElement("div", {className: "flex-row-item flex-no-resize"},
|
|
28
66
|
React.createElement("div", {onClick: () => {this.removeImage()}}, "Remove")
|
|
29
67
|
)
|
|
30
68
|
);
|
|
31
69
|
|
|
32
|
-
|
|
70
|
+
this.item.requireProperty("selectMode", "overview");
|
|
71
|
+
|
|
72
|
+
let uploadElement = React.createElement("div", {className: "flex-row small-item-spacing halfs"},
|
|
73
|
+
React.createElement("div", {className: "flex-row-item"},
|
|
74
|
+
React.createElement("input", {"type": "file", onChange: this._callback_fileChangedBound, className: "full-width"})
|
|
75
|
+
),
|
|
76
|
+
React.createElement("div", {className: "flex-row-item"},
|
|
77
|
+
React.createElement(Dbm.react.interaction.CommandButton, {command: Dbm.commands.setProperty(this.item.properties.selectMode, "library")},
|
|
78
|
+
React.createElement("div", {className: "flex-row-item"}, "Select from library")
|
|
79
|
+
)
|
|
80
|
+
),
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
let libraryElement = React.createElement("div", {},
|
|
84
|
+
React.createElement(Dbm.react.admin.SelectImageFromLibrary, {selectedCommands: [
|
|
85
|
+
Dbm.commands.callFunction(this._imageSelected.bind(this), [Dbm.core.source.event()]),
|
|
86
|
+
Dbm.commands.setProperty(this.item.properties.selectMode, "overview")
|
|
87
|
+
]})
|
|
88
|
+
);
|
|
33
89
|
|
|
34
|
-
let
|
|
90
|
+
let selectSwitch = Dbm.flow.updatefunctions.logic.switchValue(this.item.properties.selectMode).setDefaultValue(uploadElement).addCase("library", libraryElement);
|
|
91
|
+
|
|
92
|
+
let selectElement = React.createElement("div", {},
|
|
93
|
+
React.createElement(Dbm.react.area.InsertElement, {element: selectSwitch.output.properties.value})
|
|
94
|
+
);
|
|
95
|
+
|
|
96
|
+
let elementSwitch = Dbm.flow.updatefunctions.logic.switchValue(this.item.properties.value).setDefaultValue(imageElement).addCase(null, selectElement);
|
|
35
97
|
|
|
36
98
|
this.item.requireProperty("element", null).connectInput(elementSwitch.output.properties.value);
|
|
37
99
|
}
|
|
38
100
|
|
|
101
|
+
_addToLibrary() {
|
|
102
|
+
let imageData = this.item.value;
|
|
103
|
+
|
|
104
|
+
let objectType = "image";
|
|
105
|
+
|
|
106
|
+
let parsedUrl = URL.parse(imageData.url);
|
|
107
|
+
|
|
108
|
+
let fileName = parsedUrl.pathname.substring(parsedUrl.pathname.lastIndexOf("/")+1);
|
|
109
|
+
|
|
110
|
+
let changes = [
|
|
111
|
+
{"type": "setIdentifier", "data": {"value": imageData.identifier, "field": "name"}},
|
|
112
|
+
{"type": "setField", "data": {"value": fileName, "field": "name"}},
|
|
113
|
+
{"type": "setField", "data": {"value": fileName, "field": "originalFileName"}},
|
|
114
|
+
{"type": "setField", "data": {"value": parsedUrl.pathname, "field": "path"}},
|
|
115
|
+
{"type": "setField", "data": {"value": imageData.url, "field": "url"}},
|
|
116
|
+
{"type": "setField", "data": {"value": imageData.resizeUrl, "field": "resizeUrl"}},
|
|
117
|
+
];
|
|
118
|
+
|
|
119
|
+
let request = Dbm.getInstance().repository.getItem("graphApi").controller.createItem([objectType], "public", changes);
|
|
120
|
+
|
|
121
|
+
Dbm.flow.addUpdateCommand(request.properties.status, Dbm.commands.callFunction(this._libraryImageCreated.bind(this), [request]));
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
_libraryImageCreated(aRequest) {
|
|
125
|
+
//console.log("_libraryImageCreated");
|
|
126
|
+
//console.log(aRequest);
|
|
127
|
+
|
|
128
|
+
let imageData = {...this.item.value};
|
|
129
|
+
|
|
130
|
+
imageData.id = aRequest.item.id;
|
|
131
|
+
this.item.value = imageData;
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
_generateAltText() {
|
|
135
|
+
|
|
136
|
+
let graphApi = Dbm.getInstance().repository.getItem("graphApi").controller;
|
|
137
|
+
|
|
138
|
+
let request = graphApi.requestData("admin/altText", {"id": this.item.value.id});
|
|
139
|
+
Dbm.flow.addUpdateCommandWhenMatched(request.properties.status, Dbm.loading.LoadingStatus.LOADED, Dbm.commands.callFunction(this._altTextLoaded.bind(this), [request]));
|
|
140
|
+
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
_altTextLoaded(aRequest) {
|
|
144
|
+
this.item.altText = Dbm.objectPath(aRequest, "data.altText");
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
_saveAltTextToLibrary() {
|
|
148
|
+
let changes = [
|
|
149
|
+
{"type": "setField", "data": {"value": this.item.altText, "field": "altText"}},
|
|
150
|
+
];
|
|
151
|
+
|
|
152
|
+
let request = Dbm.getInstance().repository.getItem("graphApi").controller.editItem(this.item.value.id, changes);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
_imageSelected(aImage) {
|
|
156
|
+
//console.log("_imageSelected");
|
|
157
|
+
//console.log(aImage);
|
|
158
|
+
|
|
159
|
+
let imageData = {id: aImage.id, url: aImage.url, resizeUrl: aImage.resizeUrl, identifier: aImage.identifier, altText: aImage.altText};
|
|
160
|
+
this.item.value = imageData;
|
|
161
|
+
}
|
|
162
|
+
|
|
39
163
|
_getObjectData() {
|
|
40
164
|
let fieldName = this.getPropValue("name");
|
|
41
165
|
|
|
@@ -61,6 +185,20 @@ export default class ImageField extends Dbm.react.BaseObject {
|
|
|
61
185
|
|
|
62
186
|
editorData.data = newData;
|
|
63
187
|
this.context.moduleData.editorData.editorBlock.dataUpdated();
|
|
188
|
+
|
|
189
|
+
if(newValue) {
|
|
190
|
+
this.item.altText = newValue.altText;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
_altTextChanged() {
|
|
196
|
+
|
|
197
|
+
if(this.item.value && this.item.value.altText !== this.item.altText) {
|
|
198
|
+
let newValue = {...this.item.value};
|
|
199
|
+
newValue.altText = this.item.altText;
|
|
200
|
+
this.item.value = newValue;
|
|
201
|
+
}
|
|
64
202
|
}
|
|
65
203
|
|
|
66
204
|
_objectChanged() {
|
|
@@ -121,7 +259,7 @@ export default class ImageField extends Dbm.react.BaseObject {
|
|
|
121
259
|
headers: new Headers(headers),
|
|
122
260
|
body: aFile
|
|
123
261
|
}).then(() => {
|
|
124
|
-
this.item.value = {url: aPreSign.data.publicUrl, resizeUrl: aPreSign.data.publicResizeUrl, identifier: aPreSign.data.identifier};
|
|
262
|
+
this.item.value = {id: aPreSign.data.id, url: aPreSign.data.publicUrl, resizeUrl: aPreSign.data.publicResizeUrl, identifier: aPreSign.data.identifier};
|
|
125
263
|
console.log("Uploaded", this.item.value);
|
|
126
264
|
//METODO: send update to editor
|
|
127
265
|
})
|
package/react/admin/index.js
CHANGED
|
@@ -25,7 +25,7 @@ export default class OpenCloseExpandableArea extends Dbm.react.BaseObject {
|
|
|
25
25
|
//console.log(aEnvelope, this, this.item.element);
|
|
26
26
|
|
|
27
27
|
if(aEnvelope === 0) {
|
|
28
|
-
return {"height": "0px", "overflow": "hidden"};
|
|
28
|
+
return {"height": "0px", "overflow": "hidden", "display": "none", "visibility": "hidden"};
|
|
29
29
|
}
|
|
30
30
|
else if(aEnvelope === 1 || !this.item.element) {
|
|
31
31
|
return {};
|
package/react/modules/index.js
CHANGED
|
@@ -1 +1,11 @@
|
|
|
1
|
-
|
|
1
|
+
import Dbm from "../../index.js";
|
|
2
|
+
|
|
3
|
+
export {default as ModuleCreator} from "./ModuleCreator.js";
|
|
4
|
+
|
|
5
|
+
export const addModuleCreator = function(aName, aElement) {
|
|
6
|
+
let module = new Dbm.react.modules.ModuleCreator();
|
|
7
|
+
module.setMainElement(aElement);
|
|
8
|
+
module.item.register("moduleCreators/" + aName);
|
|
9
|
+
|
|
10
|
+
return module;
|
|
11
|
+
}
|
package/react/text/index.js
CHANGED
|
@@ -12,9 +12,9 @@ export let text = function(aText) {
|
|
|
12
12
|
return createElement(Dbm.react.text.Text, {text: aText});
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
export let htmlText = function(aText, aElementType = "span") {
|
|
15
|
+
export let htmlText = function(aText, aElementType = "span", aAdditionalProps = {}) {
|
|
16
16
|
if(typeof(aText) === "string") {
|
|
17
17
|
//return createElement(aElementType, {"dangerouslySetInnerHTML": {__html: aText}});
|
|
18
18
|
}
|
|
19
|
-
return createElement(Dbm.react.text.HtmlText, {text: aText, elementType: aElementType});
|
|
19
|
+
return createElement(Dbm.react.text.HtmlText, {text: aText, elementType: aElementType, ...aAdditionalProps});
|
|
20
20
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import Dbm from "../index.js";
|
|
2
|
+
|
|
3
|
+
export default class BrowserUpdater extends Dbm.core.BaseObject {
|
|
4
|
+
_construct() {
|
|
5
|
+
super._construct();
|
|
6
|
+
|
|
7
|
+
this.item.setValue("titleSuffix", "");
|
|
8
|
+
this.item.setValue("pageData", null);
|
|
9
|
+
|
|
10
|
+
Dbm.flow.addUpdateCommand(this.item.properties.pageData, Dbm.commands.callFunction(this._pageDataUpdated.bind(this)));
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
setTitleSuffix(aSuffix, aDelimiter = " - ") {
|
|
14
|
+
this.item.titleSuffix = aDelimiter + aSuffix;
|
|
15
|
+
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
_trackPage(aUrl) {
|
|
20
|
+
//console.log("_trackPage");
|
|
21
|
+
|
|
22
|
+
let trackingController = Dbm.getInstance().repository.getItem("trackingController").controller;
|
|
23
|
+
if(trackingController) {
|
|
24
|
+
trackingController.trackPage(aUrl);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
_pageDataUpdated() {
|
|
29
|
+
|
|
30
|
+
let title = Dbm.objectPath(this.item.pageData, "page.title") + this.item.titleSuffix;
|
|
31
|
+
document.title = title;
|
|
32
|
+
document.querySelector('meta[property="og:title"]').setAttribute("content", title);
|
|
33
|
+
|
|
34
|
+
let description = Dbm.objectPath(this.item.pageData, "page.meta/description");
|
|
35
|
+
document.querySelector('meta[name="description"]').setAttribute("content", description);
|
|
36
|
+
document.querySelector('meta[property="og:description"]').setAttribute("content", description);
|
|
37
|
+
|
|
38
|
+
//METODO: set canonical
|
|
39
|
+
|
|
40
|
+
//METODO: set structured data
|
|
41
|
+
|
|
42
|
+
window.scrollTo(0, 0);
|
|
43
|
+
|
|
44
|
+
this._trackPage(document.location.href);
|
|
45
|
+
}
|
|
46
|
+
}
|
package/site/SiteDataLoader.js
CHANGED
|
@@ -29,12 +29,9 @@ export default class SiteDataLoader extends Dbm.core.BaseObject {
|
|
|
29
29
|
let graphApi = Dbm.getInstance().repository.getItem("graphApi").controller;
|
|
30
30
|
let request = graphApi.requestUrl(pathName);
|
|
31
31
|
|
|
32
|
-
let urlUpdate = new Dbm.flow.updatefunctions.basic.RunCommand();
|
|
33
|
-
urlUpdate.input.properties.value.connectInput(request.properties.status);
|
|
34
|
-
urlUpdate.input.command = Dbm.commands.callFunction(this._pageDataLoaded.bind(this), [pageData, request]);
|
|
35
|
-
|
|
36
32
|
this.item.setValue("status", 2);
|
|
37
|
-
|
|
33
|
+
Dbm.flow.addUpdateCommandWhenMatched(request.properties.status, 1, Dbm.commands.callFunction(this._pageDataLoaded.bind(this), [pageData, request]))
|
|
34
|
+
|
|
38
35
|
}
|
|
39
36
|
else {
|
|
40
37
|
this.item.currentPage = null;
|
|
@@ -46,17 +43,16 @@ export default class SiteDataLoader extends Dbm.core.BaseObject {
|
|
|
46
43
|
//console.log("_pageDataLoaded");
|
|
47
44
|
//console.log(aPageData, aRequest, aRequest.status);
|
|
48
45
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
aPageData.setValue("canRender", true);
|
|
46
|
+
aPageData.setValue("page", aRequest.item);
|
|
47
|
+
aPageData.setValue("canRender", true);
|
|
52
48
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
}
|
|
49
|
+
if(this.item.url === aPageData.url) {
|
|
50
|
+
this.item.currentPage = aPageData;
|
|
51
|
+
this.item.setValue("status", 1);
|
|
57
52
|
|
|
58
|
-
//METODO: remove updaters
|
|
59
53
|
}
|
|
54
|
+
|
|
55
|
+
//METODO: remove updaters
|
|
60
56
|
|
|
61
57
|
}
|
|
62
58
|
}
|
package/site/SiteNavigation.js
CHANGED
|
@@ -151,7 +151,6 @@ export default class SiteNavigation extends Dbm.core.BaseObject {
|
|
|
151
151
|
aEvent.preventDefault();
|
|
152
152
|
|
|
153
153
|
this._internalNavigation(finalUrl.href);
|
|
154
|
-
window.scrollTo(0, 0);
|
|
155
154
|
|
|
156
155
|
return false;
|
|
157
156
|
}
|
|
@@ -163,15 +162,6 @@ export default class SiteNavigation extends Dbm.core.BaseObject {
|
|
|
163
162
|
|
|
164
163
|
this.item.travelPaths = paths;
|
|
165
164
|
}
|
|
166
|
-
|
|
167
|
-
_trackPage(aUrl) {
|
|
168
|
-
//console.log("_trackPage");
|
|
169
|
-
|
|
170
|
-
let trackingController = Dbm.getInstance().repository.getItem("trackingController").controller;
|
|
171
|
-
if(trackingController) {
|
|
172
|
-
trackingController.trackPage(aUrl);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
165
|
|
|
176
166
|
_internalNavigation(aUrl) {
|
|
177
167
|
|
|
@@ -185,8 +175,6 @@ export default class SiteNavigation extends Dbm.core.BaseObject {
|
|
|
185
175
|
history.pushState({}, "Page", aUrl);
|
|
186
176
|
this.item.url = aUrl;
|
|
187
177
|
|
|
188
|
-
this._trackPage(aUrl);
|
|
189
|
-
|
|
190
178
|
this._addUrlToPath(aUrl);
|
|
191
179
|
}
|
|
192
180
|
|
|
@@ -196,8 +184,6 @@ export default class SiteNavigation extends Dbm.core.BaseObject {
|
|
|
196
184
|
let url = document.location.href;
|
|
197
185
|
this.item.url = url;
|
|
198
186
|
|
|
199
|
-
this._trackPage(url);
|
|
200
|
-
|
|
201
187
|
let paths = [].concat(this.item.travelPaths);
|
|
202
188
|
paths.pop();
|
|
203
189
|
this.item.travelPaths = paths;
|
|
@@ -209,7 +195,6 @@ export default class SiteNavigation extends Dbm.core.BaseObject {
|
|
|
209
195
|
|
|
210
196
|
if(this.item.active && originalUrl.hostname === finalUrl.hostname && this._shouldHandle(finalUrl.href)) {
|
|
211
197
|
this._internalNavigation(finalUrl.href);
|
|
212
|
-
window.scrollTo(0, 0);
|
|
213
198
|
}
|
|
214
199
|
else {
|
|
215
200
|
document.location.href = aUrl;
|