dbm 1.1.20 → 1.1.22

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.22",
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,17 @@ 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
+
55
+ itemSaveData.setField("contentPreloadTags", preloadImages);
45
56
  itemSaveData.setField("lastModified", (new Date()).toISOString());
46
57
  itemSaveData.createChange("clearCache", {});
47
58
 
@@ -162,125 +173,139 @@ export default class EditPage extends Dbm.react.BaseObject {
162
173
  let editorGroup = this.item.editorGroup;
163
174
  let itemEditor = editorGroup.getItemEditor(page.id);
164
175
 
176
+ let admin = Dbm.getInstance().repository.getItem("admin");
177
+ let pageEditors = admin.requireProperty("pageEditors", []);
178
+
165
179
  return React.createElement("div", {},
166
180
  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"
181
+ React.createElement(Dbm.react.admin.EditObjectById, {id: page.id},
182
+ React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
183
+ React.createElement("div", {},
184
+ React.createElement("label", {className: "standard-field-label"},
185
+ "Page title"
186
+ ),
187
+ 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
188
  ),
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"
189
+ React.createElement("div", {className: "spacing standard"}),
190
+ React.createElement("div", {},
191
+ React.createElement("label", {className: "standard-field-label"},
192
+ "Navigation name"
193
+ ),
194
+ 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
195
  ),
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"
196
+ React.createElement("div", {className: "spacing standard"}),
197
+ React.createElement("div", {},
198
+ React.createElement("label", {className: "standard-field-label"},
199
+ "Url"
200
+ ),
201
+ React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("url").item.editValue.value, className: "standard-field standard-field-padding full-width", placeholder: "Url"}),
185
202
  ),
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"
203
+ React.createElement("div", {className: "spacing standard"}),
204
+ React.createElement("div", {},
205
+ React.createElement("label", {className: "standard-field-label"},
206
+ "Publish date"
207
+ ),
208
+ 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"}),
209
+ ),
210
+ React.createElement("div", {className: "spacing standard"}),
211
+ React.createElement("div", {},
212
+ React.createElement("label", {className: "standard-field-label"},
213
+ "Category"
214
+ ),
215
+ 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
216
  ),
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
217
  ),
195
218
  React.createElement("div", {className: "spacing standard"}),
196
- React.createElement("div", {},
219
+ React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
197
220
  React.createElement("label", {className: "standard-field-label"},
198
- "Category"
221
+ "Seo description"
199
222
  ),
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"),
223
+ React.createElement(Dbm.react.form.FormField, {"value": itemEditor.getEditor("meta/description").item.editValue.value, className: "standard-field standard-field-padding full-width", placeholder: "Description"}),
224
+ React.createElement("div", {className: "spacing micro"}),
225
+ React.createElement("div", {className: "flex-row justify-between"},
226
+ React.createElement("div", {className: "flex-row-item"},
227
+ React.createElement("div", {onClick: () => {this._generateSeoSummary()}, className: "action-button action-button-padding"}, "Generate"),
228
+ ),
229
+ React.createElement("div", {className: "flex-row-item"},
230
+ Dbm.react.text.text(this.item.properties.descriptionLength),
231
+ " / ",
232
+ "155"
233
+ )
234
+ ),
235
+ React.createElement("div", {className: "spacing standard"}),
236
+ React.createElement(Dbm.react.form.LabelledArea, {label: "Main image"},
237
+ React.createElement(Dbm.react.admin.editorsgroup.EditRelation, {"direction": "in", "relationType": "isMainImageFor", "objectType": "image"},
238
+ 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"})
239
+ )
213
240
  ),
214
- React.createElement("div", {className: "flex-row-item"},
215
- Dbm.react.text.text(this.item.properties.descriptionLength),
216
- " / ",
217
- "155"
241
+ React.createElement("div", {className: "spacing standard"}),
242
+ React.createElement("div", {className: "flex-row small-item-spacing"},
243
+ React.createElement("div", {className: "flex-row-item"},
244
+ React.createElement(Dbm.react.form.Checkbox, {checked: itemEditor.getEditor("seo/noIndex").item.editValue.value}),
245
+ "Noindex"
246
+ ),
247
+ React.createElement("div", {className: "flex-row-item"},
248
+ React.createElement(Dbm.react.form.Checkbox, {checked: itemEditor.getEditor("seo/noFollow").item.editValue.value}),
249
+ "Nofollow"
250
+ ),
218
251
  )
219
252
  ),
220
253
  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"})
254
+ React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
255
+ React.createElement("label", {className: "standard-field-label"},
256
+ "Content"
257
+ ),
258
+ React.createElement("div", {},
259
+ React.createElement(Dbm.react.admin.editor.Editor, {"value": itemEditor.getEditor("content").item.editValue.value, "ref": this.createRef("editor")}),
224
260
  )
225
261
  ),
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"
262
+ React.createElement(Dbm.react.area.HasData, {check: pageEditors},
263
+ React.createElement("div", {className: "spacing standard"}),
264
+ React.createElement(Dbm.react.area.List, {items: pageEditors, as: "editor"},
265
+ React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
266
+ React.createElement(Dbm.react.area.InsertElement, {element: Dbm.react.source.contextVariable("editor.element")})
267
+ ),
268
+ React.createElement("div", {className: "spacing standard", "data-slot": "spacing"}),
235
269
  ),
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
270
  ),
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"
271
+ React.createElement("div", {className: "spacing standard"}),
272
+ React.createElement("div", {"className": "dbm-admin-box dbm-admin-box-padding"},
273
+ React.createElement("label", {className: "standard-field-label", "onClick": () => {this._toggleImportExport()}},
274
+ "Import/export"
275
+ ),
276
+ React.createElement(Dbm.react.area.OpenCloseExpandableArea, {open: this.item.properties.importExportOpen},
277
+ React.createElement("div", {},
278
+ React.createElement("div", {className: "flex-row small-item-spacing"},
279
+ React.createElement("div", {className: "flex-row-item"},
280
+ React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._export()}},
281
+ "Export"
282
+ )
258
283
  )
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"
284
+ ),
285
+ React.createElement("div", {className: "spacing standard"}),
286
+ React.createElement(Dbm.react.form.TextArea, {value: this.item.properties.importText, className: "standard-field standard-field-padding full-width"}),
287
+ React.createElement("div", {className: "flex-row small-item-spacing"},
288
+ React.createElement("div", {className: "flex-row-item"},
289
+ React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._import()}},
290
+ "Import"
291
+ )
267
292
  )
268
293
  )
294
+ /*
295
+ React.createElement("div", {className: "flex-row-item"},
296
+ React.createElement("div", {onClick: () => {this._generateHelpSectionSuggestions()}, className: "action-button action-button-padding"}, "Dev: Help sections"),
297
+ ),
298
+ */
269
299
  )
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
300
  )
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"
301
+
302
+ ),
303
+ React.createElement("div", {className: "spacing standard"}),
304
+ React.createElement("div", {className: "save-all-position"},
305
+ React.createElement(Dbm.react.area.OpenCloseExpandableArea, {open: this.item.properties.changed},
306
+ React.createElement("div", {"className": "standard-button standard-button-padding", "onClick": () => {this._save()}},
307
+ "Save all changes"
308
+ )
284
309
  )
285
310
  )
286
311
  )
@@ -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;