dbm 1.1.20 → 1.1.21

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dbm",
3
- "version": "1.1.20",
3
+ "version": "1.1.21",
4
4
  "main": "index.js",
5
5
  "type": "module",
6
6
  "scripts": {},
@@ -10,12 +10,17 @@ export default class BaseObject extends Component {
10
10
  this._construct();
11
11
 
12
12
  this._prepareProps();
13
+ this._constructAfterProps();
13
14
  }
14
15
 
15
16
  _construct() {
16
17
 
17
18
  }
18
19
 
20
+ _constructAfterProps() {
21
+
22
+ }
23
+
19
24
  _prepareProps() {
20
25
  //console.log("_prepareProps");
21
26
  let props = this.props;
@@ -0,0 +1,54 @@
1
+ import React from "react";
2
+ import Dbm from "../../index.js";
3
+
4
+ export default class EditObjectById extends Dbm.react.BaseObject {
5
+ _constructAfterProps() {
6
+ super._constructAfterProps();
7
+
8
+ let editorGroup = this.context.editorGroup;
9
+ if(!editorGroup) {
10
+ editorGroup = new Dbm.graphapi.webclient.admin.EditorGroup();
11
+ }
12
+ this.item.setValue("editorGroup", editorGroup);
13
+
14
+
15
+ let graphApi = Dbm.getInstance().repository.getItem("graphApi").controller;
16
+
17
+ let id = this.getPropValue("id");
18
+ console.log(id);
19
+
20
+ let allLoaded = Dbm.flow.updatefunctions.logic.allAtValue(Dbm.loading.LoadingStatus.LOADED);
21
+ this.item.requireProperty("loaded", false);
22
+
23
+ {
24
+ let request = graphApi.requestRange(
25
+ [
26
+ {"type": "includePrivate"},
27
+ {"type": "includeDraft"},
28
+ {"type": "idSelection", "ids": [id]},
29
+ ],
30
+ ["admin_fields", "relations"]
31
+ );
32
+ allLoaded.addCheck(request.properties.status);
33
+ }
34
+
35
+ this.item.properties.loaded.connectInput(allLoaded.output.properties.value);
36
+ }
37
+
38
+ _renderMainElement() {
39
+
40
+ let id = this.getPropValue("id");
41
+ let item = Dbm.getInstance().repository.getItem(id);
42
+ let itemEditor = this.item.editorGroup.getItemEditor(id);
43
+
44
+ let children = this.getPropValue("children");
45
+
46
+ return React.createElement("div", {},
47
+ React.createElement(Dbm.react.area.HasData, {check: this.item.properties.loaded},
48
+ React.createElement(Dbm.react.context.AddContextVariables, {values: {"editorGroup": this.item.editorGroup, "item": item, "itemEditor": itemEditor}},
49
+ children
50
+ )
51
+ )
52
+ );
53
+ }
54
+ }
@@ -42,6 +42,18 @@ export default class EditPage extends Dbm.react.BaseObject {
42
42
  let saveData = editorGroup.getSaveData();
43
43
  let itemSaveData = saveData.getItemSaveData(page.id);
44
44
 
45
+ let itemEditor = editorGroup.getItemEditor(page.id);
46
+ let content = itemEditor.getEditor("content").item.editValue.getValue();
47
+
48
+ let preloadImages = [];
49
+
50
+ let pageEditorItem = Dbm.getInstance().repository.getItem("admin/editor/pageEditor");
51
+ if(pageEditorItem.generateContentPreload) {
52
+ preloadImages = pageEditorItem.generateContentPreload(content);
53
+ }
54
+ debugger;
55
+
56
+ itemSaveData.setField("contentPreloadTags", preloadImages);
45
57
  itemSaveData.setField("lastModified", (new Date()).toISOString());
46
58
  itemSaveData.createChange("clearCache", {});
47
59
 
@@ -162,125 +174,139 @@ export default class EditPage extends Dbm.react.BaseObject {
162
174
  let editorGroup = this.item.editorGroup;
163
175
  let itemEditor = editorGroup.getItemEditor(page.id);
164
176
 
177
+ let admin = Dbm.getInstance().repository.getItem("admin");
178
+ let pageEditors = admin.requireProperty("pageEditors", []);
179
+
165
180
  return React.createElement("div", {},
166
181
  React.createElement(Dbm.react.context.AddContextVariables, {values: {"editorGroup": editorGroup, "itemEditor": itemEditor}},
167
- React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
168
- React.createElement("div", {},
169
- React.createElement("label", {className: "standard-field-label"},
170
- "Page title"
182
+ React.createElement(Dbm.react.admin.EditObjectById, {id: page.id},
183
+ React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
184
+ React.createElement("div", {},
185
+ React.createElement("label", {className: "standard-field-label"},
186
+ "Page title"
187
+ ),
188
+ 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"}),
171
189
  ),
172
- 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"}),
173
- ),
174
- React.createElement("div", {className: "spacing standard"}),
175
- React.createElement("div", {},
176
- React.createElement("label", {className: "standard-field-label"},
177
- "Navigation name"
190
+ React.createElement("div", {className: "spacing standard"}),
191
+ React.createElement("div", {},
192
+ React.createElement("label", {className: "standard-field-label"},
193
+ "Navigation name"
194
+ ),
195
+ 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"}),
178
196
  ),
179
- 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"}),
180
- ),
181
- React.createElement("div", {className: "spacing standard"}),
182
- React.createElement("div", {},
183
- React.createElement("label", {className: "standard-field-label"},
184
- "Url"
197
+ React.createElement("div", {className: "spacing standard"}),
198
+ React.createElement("div", {},
199
+ React.createElement("label", {className: "standard-field-label"},
200
+ "Url"
201
+ ),
202
+ React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("url").item.editValue.value, className: "standard-field standard-field-padding full-width", placeholder: "Url"}),
185
203
  ),
186
- React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("url").item.editValue.value, className: "standard-field standard-field-padding full-width", placeholder: "Url"}),
187
- ),
188
- React.createElement("div", {className: "spacing standard"}),
189
- React.createElement("div", {},
190
- React.createElement("label", {className: "standard-field-label"},
191
- "Publish date"
204
+ React.createElement("div", {className: "spacing standard"}),
205
+ React.createElement("div", {},
206
+ React.createElement("label", {className: "standard-field-label"},
207
+ "Publish date"
208
+ ),
209
+ React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("publishDate").item.editValue.value, className: "standard-field standard-field-padding full-width", placeholder: "YYYY-MM-DD", "type": "date"}),
210
+ ),
211
+ React.createElement("div", {className: "spacing standard"}),
212
+ React.createElement("div", {},
213
+ React.createElement("label", {className: "standard-field-label"},
214
+ "Category"
215
+ ),
216
+ React.createElement(Dbm.react.form.GraphApiObjectSelection, {"value": itemEditor.getEditor("relation_out_in_group/pageCategory").item.editValue.value, objectType: "group/pageCategory", className: "standard-field standard-field-padding full-width"}),
192
217
  ),
193
- React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("publishDate").item.editValue.value, className: "standard-field standard-field-padding full-width", placeholder: "YYYY-MM-DD", "type": "date"}),
194
218
  ),
195
219
  React.createElement("div", {className: "spacing standard"}),
196
- React.createElement("div", {},
220
+ React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
197
221
  React.createElement("label", {className: "standard-field-label"},
198
- "Category"
222
+ "Seo description"
199
223
  ),
200
- React.createElement(Dbm.react.form.GraphApiObjectSelection, {"value": itemEditor.getEditor("relation_out_in_group/pageCategory").item.editValue.value, objectType: "group/pageCategory", className: "standard-field standard-field-padding full-width"}),
201
- ),
202
- ),
203
- React.createElement("div", {className: "spacing standard"}),
204
- React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
205
- React.createElement("label", {className: "standard-field-label"},
206
- "Seo description"
207
- ),
208
- React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("meta/description").item.editValue.value, className: "standard-field standard-field-padding full-width", placeholder: "Description"}),
209
- React.createElement("div", {className: "spacing micro"}),
210
- React.createElement("div", {className: "flex-row justify-between"},
211
- React.createElement("div", {className: "flex-row-item"},
212
- React.createElement("div", {onClick: () => {this._generateSeoSummary()}, className: "action-button action-button-padding"}, "Generate"),
224
+ React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("meta/description").item.editValue.value, className: "standard-field standard-field-padding full-width", placeholder: "Description"}),
225
+ React.createElement("div", {className: "spacing micro"}),
226
+ React.createElement("div", {className: "flex-row justify-between"},
227
+ React.createElement("div", {className: "flex-row-item"},
228
+ React.createElement("div", {onClick: () => {this._generateSeoSummary()}, className: "action-button action-button-padding"}, "Generate"),
229
+ ),
230
+ React.createElement("div", {className: "flex-row-item"},
231
+ Dbm.react.text.text(this.item.properties.descriptionLength),
232
+ " / ",
233
+ "155"
234
+ )
235
+ ),
236
+ React.createElement("div", {className: "spacing standard"}),
237
+ React.createElement(Dbm.react.form.LabelledArea, {label: "Main image"},
238
+ React.createElement(Dbm.react.admin.editorsgroup.EditRelation, {"direction": "in", "relationType": "isMainImageFor", "objectType": "image"},
239
+ React.createElement(Dbm.react.form.GraphApiImage, {value: Dbm.react.source.contextVariable("valueEditor.editValue.value"), "objectType": "page", "encoding": "title", nameField: "title", className: "standard-field standard-field-padding full-width"})
240
+ )
213
241
  ),
214
- React.createElement("div", {className: "flex-row-item"},
215
- Dbm.react.text.text(this.item.properties.descriptionLength),
216
- " / ",
217
- "155"
242
+ React.createElement("div", {className: "spacing standard"}),
243
+ React.createElement("div", {className: "flex-row small-item-spacing"},
244
+ React.createElement("div", {className: "flex-row-item"},
245
+ React.createElement(Dbm.react.form.Checkbox, {checked: itemEditor.getEditor("seo/noIndex").item.editValue.value}),
246
+ "Noindex"
247
+ ),
248
+ React.createElement("div", {className: "flex-row-item"},
249
+ React.createElement(Dbm.react.form.Checkbox, {checked: itemEditor.getEditor("seo/noFollow").item.editValue.value}),
250
+ "Nofollow"
251
+ ),
218
252
  )
219
253
  ),
220
254
  React.createElement("div", {className: "spacing standard"}),
221
- React.createElement(Dbm.react.form.LabelledArea, {label: "Main image"},
222
- React.createElement(Dbm.react.admin.editorsgroup.EditRelation, {"direction": "in", "relationType": "isMainImageFor", "objectType": "image"},
223
- React.createElement(Dbm.react.form.GraphApiImage, {value: Dbm.react.source.contextVariable("valueEditor.editValue.value"), "objectType": "page", "encoding": "title", nameField: "title", className: "standard-field standard-field-padding full-width"})
255
+ React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
256
+ React.createElement("label", {className: "standard-field-label"},
257
+ "Content"
258
+ ),
259
+ React.createElement("div", {},
260
+ React.createElement(Dbm.react.admin.editor.Editor, {"value": itemEditor.getEditor("content").item.editValue.value, "ref": this.createRef("editor")}),
224
261
  )
225
262
  ),
226
- React.createElement("div", {className: "spacing standard"}),
227
- React.createElement("div", {className: "flex-row small-item-spacing"},
228
- React.createElement("div", {className: "flex-row-item"},
229
- React.createElement(Dbm.react.form.Checkbox, {checked: itemEditor.getEditor("seo/noIndex").item.editValue.value}),
230
- "Noindex"
231
- ),
232
- React.createElement("div", {className: "flex-row-item"},
233
- React.createElement(Dbm.react.form.Checkbox, {checked: itemEditor.getEditor("seo/noFollow").item.editValue.value}),
234
- "Nofollow"
263
+ React.createElement(Dbm.react.area.HasData, {check: pageEditors},
264
+ React.createElement("div", {className: "spacing standard"}),
265
+ React.createElement(Dbm.react.area.List, {items: pageEditors, as: "editor"},
266
+ React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
267
+ React.createElement(Dbm.react.area.InsertElement, {element: Dbm.react.source.contextVariable("editor.element")})
268
+ ),
269
+ React.createElement("div", {className: "spacing standard", "data-slot": "spacing"}),
235
270
  ),
236
- )
237
- ),
238
- React.createElement("div", {className: "spacing standard"}),
239
- React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
240
- React.createElement("label", {className: "standard-field-label"},
241
- "Content"
242
271
  ),
243
- React.createElement("div", {},
244
- React.createElement(Dbm.react.admin.editor.Editor, {"value": itemEditor.getEditor("content").item.editValue.value, "ref": this.createRef("editor")}),
245
- )
246
- ),
247
- React.createElement("div", {className: "spacing standard"}),
248
- React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
249
- React.createElement("label", {className: "standard-field-label", "onClick": () => {this._toggleImportExport()}},
250
- "Import/export"
251
- ),
252
- React.createElement(Dbm.react.area.OpenCloseExpandableArea, {open: this.item.properties.importExportOpen},
253
- React.createElement("div", {},
254
- React.createElement("div", {className: "flex-row small-item-spacing"},
255
- React.createElement("div", {className: "flex-row-item"},
256
- React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._export()}},
257
- "Export"
272
+ React.createElement("div", {className: "spacing standard"}),
273
+ React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
274
+ React.createElement("label", {className: "standard-field-label", "onClick": () => {this._toggleImportExport()}},
275
+ "Import/export"
276
+ ),
277
+ React.createElement(Dbm.react.area.OpenCloseExpandableArea, {open: this.item.properties.importExportOpen},
278
+ React.createElement("div", {},
279
+ React.createElement("div", {className: "flex-row small-item-spacing"},
280
+ React.createElement("div", {className: "flex-row-item"},
281
+ React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._export()}},
282
+ "Export"
283
+ )
258
284
  )
259
- )
260
- ),
261
- React.createElement("div", {className: "spacing standard"}),
262
- React.createElement(Dbm.react.form.TextArea, {value: this.item.properties.importText, className: "standard-field standard-field-padding full-width"}),
263
- React.createElement("div", {className: "flex-row small-item-spacing"},
264
- React.createElement("div", {className: "flex-row-item"},
265
- React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._import()}},
266
- "Import"
285
+ ),
286
+ React.createElement("div", {className: "spacing standard"}),
287
+ React.createElement(Dbm.react.form.TextArea, {value: this.item.properties.importText, className: "standard-field standard-field-padding full-width"}),
288
+ React.createElement("div", {className: "flex-row small-item-spacing"},
289
+ React.createElement("div", {className: "flex-row-item"},
290
+ React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._import()}},
291
+ "Import"
292
+ )
267
293
  )
268
294
  )
295
+ /*
296
+ React.createElement("div", {className: "flex-row-item"},
297
+ React.createElement("div", {onClick: () => {this._generateHelpSectionSuggestions()}, className: "action-button action-button-padding"}, "Dev: Help sections"),
298
+ ),
299
+ */
269
300
  )
270
- /*
271
- React.createElement("div", {className: "flex-row-item"},
272
- React.createElement("div", {onClick: () => {this._generateHelpSectionSuggestions()}, className: "action-button action-button-padding"}, "Dev: Help sections"),
273
- ),
274
- */
275
301
  )
276
- )
277
-
278
- ),
279
- React.createElement("div", {className: "spacing standard"}),
280
- React.createElement("div", {className: "save-all-position"},
281
- React.createElement(Dbm.react.area.OpenCloseExpandableArea, {open: this.item.properties.changed},
282
- React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._save()}},
283
- "Save all changes"
302
+
303
+ ),
304
+ React.createElement("div", {className: "spacing standard"}),
305
+ React.createElement("div", {className: "save-all-position"},
306
+ React.createElement(Dbm.react.area.OpenCloseExpandableArea, {open: this.item.properties.changed},
307
+ React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._save()}},
308
+ "Save all changes"
309
+ )
284
310
  )
285
311
  )
286
312
  )
@@ -2,9 +2,11 @@ export {default as CreatePage} from "./CreatePage.js";
2
2
  export {default as EditPage} from "./EditPage.js";
3
3
  export {default as SelectImageFromLibrary} from "./SelectImageFromLibrary.js";
4
4
  export {default as SelectedImage} from "./SelectedImage.js";
5
+ export {default as EditObjectById} from "./EditObjectById.js";
5
6
 
6
7
  export * as editor from "./editor/index.js";
7
8
  export * as pages from "./pages/index.js";
8
9
  export * as website from "./website/index.js";
9
10
  export * as objects from "./objects/index.js";
10
- export * as editorsgroup from "./editorsgroup/index.js";
11
+ export * as editorsgroup from "./editorsgroup/index.js";
12
+ export * as pageeditors from "./pageeditors/index.js";
@@ -0,0 +1,96 @@
1
+ import React from "react";
2
+ import Dbm from "../../../index.js";
3
+
4
+ export default class HelpSections extends Dbm.react.BaseObject {
5
+ _construct() {
6
+ super._construct();
7
+
8
+ let item = this.context.item;
9
+ let itemEditor = this.context.itemEditor;
10
+
11
+ {
12
+ let direction = "in";
13
+ let relationType = "for";
14
+ let objectType = "helpSection";
15
+ let relations = Dbm.utils.ArrayFunctions.filterByField(Dbm.objectPath(item, "relations/" + direction + "." + relationType + ".objects"), "objectTypes", objectType, "arrayContains");
16
+ let editor = itemEditor.addMultipleIncomingRelationsEditor(relationType, objectType, Dbm.utils.ArrayFunctions.mapField(relations, "id"), ["relations"]);
17
+ console.log(relations, editor);
18
+ }
19
+ }
20
+
21
+ _addArrayRow(aArrayEditor) {
22
+ console.log("_addArrayRow");
23
+
24
+ let changes = [
25
+ {"type": "addOutgoingRelation", "data": {"value": this.context.item.id, "type": "for"}}
26
+ ];
27
+
28
+ let request = Dbm.getInstance().repository.getItem("graphApi").controller.createItem(["helpSection"], "public", changes, ["id"]);
29
+
30
+ Dbm.flow.addUpdateCommandWhenMatched(request.properties.status, 1, Dbm.commands.callFunction(this._created.bind(this), [request, aArrayEditor]));
31
+ }
32
+
33
+ _created(aRequest, aArrayEditor) {
34
+ console.log("_created");
35
+ console.log(aRequest);
36
+
37
+ aArrayEditor.push(aRequest.item.id);
38
+ }
39
+
40
+ _removeArrayRow(aArrayEditor, aItem) {
41
+ aArrayEditor.removeItem(aItem);
42
+ }
43
+
44
+ _renderMainElement() {
45
+
46
+ let direction = "in";
47
+ let relationType = "for";
48
+ let objectType = "helpSection";
49
+
50
+ return React.createElement("div", {},
51
+ React.createElement("h2", {}, "Faq questions"),
52
+
53
+ React.createElement(Dbm.react.form.EditArray, {"value": Dbm.react.source.contextVariable("itemEditor.item.editor_multipleRelations_" + direction + "_" + relationType + "_" + objectType + ".item.editValue.item.properties.value")},
54
+ React.createElement("div", {},
55
+ React.createElement("h3", {}, "Question ", Dbm.react.text.text(Dbm.react.source.contextVariable("item.properties.value"))),
56
+ React.createElement(Dbm.react.admin.EditObjectById, {id: Dbm.react.source.contextVariable("item.value")},
57
+ React.createElement("div", {},
58
+ React.createElement(Dbm.react.form.LabelledArea, {label: "Question"},
59
+ React.createElement(Dbm.react.admin.editorsgroup.EditField, {"fieldName": "question"},
60
+ React.createElement(Dbm.react.form.FormField, {value: Dbm.react.source.contextVariable("valueEditor.editValue.value"), className: "standard-field standard-field-padding full-width"})
61
+ )
62
+ ),
63
+ React.createElement(Dbm.react.form.LabelledArea, {label: "Title"},
64
+ React.createElement(Dbm.react.admin.editorsgroup.EditField, {"fieldName": "title", "initialDataPath": "title"},
65
+ React.createElement(Dbm.react.form.FormField, {value: Dbm.react.source.contextVariable("valueEditor.editValue.value"), className: "standard-field standard-field-padding full-width"})
66
+ )
67
+ )
68
+ ),
69
+ React.createElement(Dbm.react.form.LabelledArea, {label: "Description"},
70
+ React.createElement(Dbm.react.admin.editorsgroup.EditField, {"fieldName": "description"},
71
+ React.createElement(Dbm.react.form.TextArea, {value: Dbm.react.source.contextVariable("valueEditor.editValue.value"), className: "standard-field standard-field-padding full-width"})
72
+ )
73
+ ),
74
+ React.createElement(Dbm.react.form.LabelledArea, {label: "Link text"},
75
+ React.createElement(Dbm.react.admin.editorsgroup.EditField, {"fieldName": "linkText"},
76
+ React.createElement(Dbm.react.form.FormField, {value: Dbm.react.source.contextVariable("valueEditor.editValue.value"), className: "standard-field standard-field-padding full-width"})
77
+ )
78
+ )
79
+ ),
80
+ ),
81
+ React.createElement("div", {"data-slot": "after"},
82
+ React.createElement("div", {"className": "spacing standard"}),
83
+ React.createElement(Dbm.react.interaction.CommandButton, {command: Dbm.commands.callFunction(this._addArrayRow.bind(this), [Dbm.react.source.contextVariable("arrayEditor")])},
84
+ React.createElement("div", {"className": "flex-row"},
85
+ React.createElement("div", {"className": "flex-row-item"},
86
+ React.createElement("div", {"className": "action-button action-button-padding"}, "Add")
87
+ )
88
+ ),
89
+
90
+ )
91
+ )
92
+ ),
93
+ );
94
+ }
95
+ }
96
+
@@ -0,0 +1 @@
1
+ export {default as HelpSections} from "./HelpSections.js";
@@ -117,9 +117,11 @@ export default class AskAQuestion extends Dbm.react.BaseObject {
117
117
  }
118
118
 
119
119
  _renderMainElement() {
120
- return React.createElement("div", {
121
- className: "content-narrow"
122
- }, React.createElement("form", {
120
+
121
+ let askElement = null;
122
+ if(!this.context.blockData.skipSearch) {
123
+ askElement = React.createElement("div", {},
124
+ React.createElement("form", {
123
125
  onSubmit: aEvent => {
124
126
  aEvent.preventDefault();
125
127
  this._search();
@@ -146,6 +148,11 @@ export default class AskAQuestion extends Dbm.react.BaseObject {
146
148
  )
147
149
  ),
148
150
  React.createElement("div", {className: "spacing small"}),
151
+ );
152
+ }
153
+
154
+ return React.createElement("div", {className: "content-narrow"},
155
+ askElement,
149
156
  React.createElement(Dbm.react.area.InsertElement, {element: this.item.properties.resultElement})
150
157
  );
151
158
  }
@@ -1,3 +1,4 @@
1
+ import React from "react";
1
2
  import Dbm from "../../index.js";
2
3
  import {createElement} from "react";
3
4
 
@@ -219,6 +220,10 @@ export let registerAllBlocks = function() {
219
220
  createElement(Dbm.react.form.LabelledArea, {label: "Initial sections"},
220
221
  createElement(Dbm.react.admin.editor.fields.SelectObjectsField, {objectType: "helpSection", name:"initialSections", "encoding": "title", "nameField": "title"})
221
222
  ),
223
+ createElement(Dbm.react.form.LabelledArea, {label: "Hide ask a question"},
224
+ createElement(Dbm.react.admin.editor.fields.CheckboxField, {"name": "skipSearch"}),
225
+ "Hide"
226
+ ),
222
227
  );
223
228
  registerBlock("faq/askAQuestion", "FAQ / Ask a question", createElement(Dbm.react.blocks.faq.AskAQuestion, {}), editor, {}, {});
224
229
  }
@@ -359,4 +364,18 @@ export let registerAllBlocks = function() {
359
364
 
360
365
  objectTypeEditor.editors = newArray;
361
366
  }
367
+
368
+
369
+ let admin = Dbm.getInstance().repository.getItem("admin");
370
+ admin.requireProperty("pageEditors", []);
371
+
372
+ let pageEditors = [].concat(admin.pageEditors);
373
+
374
+ {
375
+ let newEditor = Dbm.getInstance().repository.getItem("admin/pageEditors/helpSections");
376
+ newEditor.setValue("element", React.createElement(Dbm.react.admin.pageeditors.HelpSections));
377
+ pageEditors.push(newEditor);
378
+ }
379
+
380
+ admin.pageEditors = pageEditors;
362
381
  }
@@ -212,6 +212,30 @@ export default class Controller extends Dbm.core.BaseObject {
212
212
  this.trackEvent("Checkout started", data);
213
213
  }
214
214
 
215
+ trackAddShipping(aProductOrProducts) {
216
+ let items = Dbm.utils.ArrayFunctions.singleOrArray(aProductOrProducts);
217
+
218
+ let data = {
219
+ currency: this.item.currency,
220
+ value: this._getValueFromItems(items),
221
+ items: items
222
+ }
223
+
224
+ this.trackEvent("Add shipping", data);
225
+ }
226
+
227
+ trackAddPayment(aProductOrProducts) {
228
+ let items = Dbm.utils.ArrayFunctions.singleOrArray(aProductOrProducts);
229
+
230
+ let data = {
231
+ currency: this.item.currency,
232
+ value: this._getValueFromItems(items),
233
+ items: items
234
+ }
235
+
236
+ this.trackEvent("Add payment", data);
237
+ }
238
+
215
239
  trackPurchase(aTransactionId, aProductOrProducts) {
216
240
  let items = Dbm.utils.ArrayFunctions.singleOrArray(aProductOrProducts);
217
241
 
@@ -1,4 +1,4 @@
1
- export let createScaledImageUrl = function(aImageData, aWantedWidth) {
1
+ export let createScaledImageUrlWithPixelDensity = function(aImageData, aWantedWidth, aPixelDensity, aMaxSize) {
2
2
  if(!aImageData || !aImageData["url"]) {
3
3
  return null;
4
4
  }
@@ -10,10 +10,10 @@ export let createScaledImageUrl = function(aImageData, aWantedWidth) {
10
10
 
11
11
  if(aImageData["resizeUrl"]) {
12
12
  let scaleToWidth = Math.min(
13
- Math.round(window.devicePixelRatio*aWantedWidth),
13
+ Math.round(aPixelDensity*aWantedWidth),
14
14
  Math.max(
15
15
  100,
16
- 100*Math.round(window.devicePixelRatio*window.innerWidth/100)
16
+ 100*Math.round(aPixelDensity*aMaxSize/100)
17
17
  )
18
18
  );
19
19
 
@@ -30,7 +30,36 @@ export let createScaledImageUrl = function(aImageData, aWantedWidth) {
30
30
  return url;
31
31
  }
32
32
 
33
- export let createCoverScaledImageUrl = function(aImageData, aWantedWidth, aWantedHeight) {
33
+ export let createScaledImageUrl = function(aImageData, aWantedWidth) {
34
+ return createScaledImageUrlWithPixelDensity(aImageData, aWantedWidth, window.devicePixelRatio, window.innerWidth);
35
+ }
36
+
37
+ export let getCoverScaledImageUrlWithPixelDensity = function(aUrl, aWantedWidth, aWantedHeight, aPixelDensity, aMaxSize) {
38
+ let scaleToWidth = Math.min(
39
+ Math.round(aPixelDensity*aWantedWidth),
40
+ Math.max(
41
+ 100,
42
+ 100*Math.round(aPixelDensity*aMaxSize/100)
43
+ )
44
+ );
45
+
46
+ let scaleToHeight = Math.round(aWantedHeight*scaleToWidth/aWantedWidth);
47
+
48
+ let scaleString = "width=" + scaleToWidth + ",height=" + scaleToHeight + ",fit=cover";
49
+
50
+ let format = "webp";
51
+ if(format) {
52
+ scaleString += ",format=" + format;
53
+ }
54
+
55
+ return aUrl.split("{scale}").join(scaleString);
56
+ }
57
+
58
+ export const getCoverScaledImageUrl = function(aUrl, aWantedWidth, aWantedHeight) {
59
+ return getCoverScaledImageUrlWithPixelDensity(aUrl, aWantedWidth, aWantedHeight, window.devicePixelRatio, window.innerWidth);
60
+ }
61
+
62
+ export let createCoverScaledImageUrlWithPixelDensity = function(aImageData, aWantedWidth, aWantedHeight, aPixelDensity, aMaxSize) {
34
63
  if(!aImageData || !aImageData["url"]) {
35
64
  return null;
36
65
  }
@@ -41,35 +70,22 @@ export let createCoverScaledImageUrl = function(aImageData, aWantedWidth, aWante
41
70
  }
42
71
 
43
72
  if(aImageData["resizeUrl"]) {
44
- let scaleToWidth = Math.min(
45
- Math.round(window.devicePixelRatio*aWantedWidth),
46
- Math.max(
47
- 100,
48
- 100*Math.round(window.devicePixelRatio*window.innerWidth/100)
49
- )
50
- );
51
-
52
- let scaleToHeight = Math.round(aWantedHeight*scaleToWidth/aWantedWidth);
53
-
54
- let scaleString = "width=" + scaleToWidth + ",height=" + scaleToHeight + ",fit=cover";
55
-
56
- let format = "webp";
57
- if(format) {
58
- scaleString += ",format=" + format;
59
- }
60
-
61
- url = aImageData["resizeUrl"].split("{scale}").join(scaleString);
73
+ url = getCoverScaledImageUrl(aImageData["resizeUrl"], aWantedWidth, aWantedHeight);
62
74
  }
63
75
 
64
76
  return url;
65
77
  }
66
78
 
67
- export const getContainScaledImageUrl = function(aUrl, aWantedWidth, aWantedHeight) {
79
+ export let createCoverScaledImageUrl = function(aImageData, aWantedWidth, aWantedHeight) {
80
+ return createCoverScaledImageUrlWithPixelDensity(aImageData, aWantedWidth, aWantedHeight, window.devicePixelRatio, window.innerWidth);
81
+ }
82
+
83
+ export const getContainScaledImageUrlWithPixelDensity = function(aUrl, aWantedWidth, aWantedHeight, aPixelDensity, aMaxSize) {
68
84
  let scaleToWidth = Math.min(
69
- Math.round(window.devicePixelRatio*aWantedWidth),
85
+ Math.round(aPixelDensity*aWantedWidth),
70
86
  Math.max(
71
87
  100,
72
- 100*Math.round(window.devicePixelRatio*window.innerWidth/100)
88
+ 100*Math.round(aPixelDensity*aMaxSize/100)
73
89
  )
74
90
  );
75
91
 
@@ -85,6 +101,10 @@ export const getContainScaledImageUrl = function(aUrl, aWantedWidth, aWantedHeig
85
101
  return aUrl.split("{scale}").join(scaleString);
86
102
  }
87
103
 
104
+ export const getContainScaledImageUrl = function(aUrl, aWantedWidth, aWantedHeight) {
105
+ return getContainScaledImageUrlWithPixelDensity(aUrl, aWantedWidth, aWantedHeight, window.devicePixelRatio, window.innerWidth);
106
+ }
107
+
88
108
  export let createContainScaledImageUrl = function(aImageData, aWantedWidth, aWantedHeight) {
89
109
  if(!aImageData || !aImageData["url"]) {
90
110
  return null;