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.
@@ -7,42 +7,51 @@ export default class EditPage extends Dbm.react.BaseObject {
7
7
 
8
8
  let page = this.context.page;
9
9
 
10
- this.item.setValue("title", page.title);
11
- this.item.setValue("navigationName", page.navigationName);
12
- this.item.setValue("content", page.content);
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 descriptionLength = Dbm.flow.updatefunctions.basic.length(this.item.properties.description);
14
+ let id = page.id;
15
+ let itemEditor = editorGroup.getItemEditor(id);
17
16
 
18
- this.item.requireProperty("descriptionLength", 0).connectInput(descriptionLength.output.properties.length);
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
- //METODO: add editors
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
- let id = page.id;
28
- let graphApi = Dbm.getInstance().repository.getItem("graphApi").controller;
29
- //console.log(this.item.content);
30
- //console.log(this.item.content.blocks[1].data.text);
31
-
32
- graphApi.editItem(id, [
33
- {"type": "setField", "data": {"value": this.item.content, "field": "content"}},
34
- {"type": "setField", "data": {"value": this.item.title, "field": "title"}},
35
- {"type": "setField", "data": {"value": this.item.navigationName, "field": "navigationName"}},
36
- {"type": "setField", "data": {"value": this.item.description, "field": "meta/description"}},
37
- {"type": "setField", "data": {"value": (new Date()).toISOString(), "field": "lastModified"}},
38
- {"type": "setUrl", "data": {"value": this.item.url}}
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": this.item.title, "content": this.item.content}});
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.item.description = summary;
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("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
60
- React.createElement("div", {},
61
- React.createElement("label", {className: "standard-field-label"},
62
- "Page title"
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
- "Navigation name"
104
+ "Seo description"
70
105
  ),
71
- React.createElement(Dbm.react.form.FormField, {"value": this.item.properties.navigationName, className: "standard-field standard-field-padding full-width", placeholder: "Name showed in menues and breadcrumbs"}),
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
- "Url"
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", {className: "flex-row-item"},
93
- Dbm.react.text.text(this.item.properties.descriptionLength),
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
- React.createElement(Dbm.react.admin.editor.Editor, {"value": this.item.properties.content}),
106
- )
107
- ),
108
- React.createElement("div", {className: "spacing standard"}),
109
- React.createElement("div", {className: "flex-row justify-center"},
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
+
@@ -138,6 +138,8 @@ export default class Editor extends Dbm.react.BaseObject {
138
138
  }
139
139
 
140
140
  tools = {...tools, ...toolsFromConfig};
141
+
142
+ console.log(">>>>>>>", content);
141
143
 
142
144
  const editor = new window.EditorJS({
143
145
  minHeight: 0,
@@ -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
- let uploadElement = React.createElement("input", {"type": "file", onChange: this._callback_fileChangedBound, className: "full-width"});
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 elementSwitch =Dbm.flow.updatefunctions.logic.switchValue(this.item.properties.value).setDefaultValue(imageElement).addCase(null, uploadElement);
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
  })
@@ -1,4 +1,5 @@
1
1
  export {default as CreatePage} from "./CreatePage.js";
2
2
  export {default as EditPage} from "./EditPage.js";
3
+ export {default as SelectImageFromLibrary} from "./SelectImageFromLibrary.js";
3
4
 
4
5
  export * as editor from "./editor/index.js";
@@ -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 {};
@@ -1 +1,11 @@
1
- export {default as ModuleCreator} from "./ModuleCreator.js";
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
+ }
@@ -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
+ }
@@ -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
- urlUpdate.output.properties.value.startUpdating();
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
- if(aRequest.status === 1) {
50
- aPageData.setValue("page", aRequest.item);
51
- aPageData.setValue("canRender", true);
46
+ aPageData.setValue("page", aRequest.item);
47
+ aPageData.setValue("canRender", true);
52
48
 
53
- if(this.item.url === aPageData.url) {
54
- this.item.currentPage = aPageData;
55
- this.item.setValue("status", 1);
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
  }
@@ -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;