@startinblox/core 0.17.21-beta.10 → 0.17.21-beta.12

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.
@@ -0,0 +1,130 @@
1
+ function _templateObject() {
2
+ const data = _taggedTemplateLiteral(["\n <button\n data-id=\"prev\"\n ?disabled=", "\n @click=", "\n >\u2190</button>\n <button\n data-id=\"next\"\n ?disabled=", "\n @click=", "\n >\u2192</button>\n <span>\n <span data-id=\"current\">\n ", "\n </span> / \n <span data-id=\"count\">\n ", "\n </span>\n </span>\n "]);
3
+
4
+ _templateObject = function () {
5
+ return data;
6
+ };
7
+
8
+ return data;
9
+ }
10
+
11
+ function _taggedTemplateLiteral(strings, raw) { if (!raw) { raw = strings.slice(0); } return Object.freeze(Object.defineProperties(strings, { raw: { value: Object.freeze(raw) } })); }
12
+
13
+ import { html, render } from "../_snowpack/pkg/lit-html.js";
14
+ const ServerPaginationMixin = {
15
+ name: 'server-pagination-mixin',
16
+ use: [],
17
+ attributes: {
18
+ limit: {
19
+ type: Number,
20
+ default: undefined
21
+ },
22
+ offset: {
23
+ type: Number,
24
+ default: undefined
25
+ },
26
+ pageCount: {
27
+ type: Number,
28
+ default: 1000
29
+ },
30
+ pageNumber: {
31
+ type: Number,
32
+ default: 0
33
+ }
34
+ },
35
+ initialState: {
36
+ currentOffset: []
37
+ },
38
+
39
+ attached() {
40
+ if (this.limit) {
41
+ this.setCurrentOffset(this.resourceId, 0);
42
+ const parentDiv = this.initServerPaginationDiv(this.div);
43
+ this.renderCallbacks.push({
44
+ template: this.renderServerPaginationNav(this.resourceId, parentDiv),
45
+ parent: parentDiv
46
+ });
47
+ }
48
+ },
49
+
50
+ getCurrentOffset(resourceId, limit) {
51
+ return this.currentOffset[resourceId + "#p" + limit];
52
+ },
53
+
54
+ async setCurrentOffset(resourceId, offset) {
55
+ let index = resourceId + "#p" + this.limit;
56
+ this.currentOffset[index] = this.offset = offset;
57
+ this.pageNumber = Number(this.offset / this.limit);
58
+ this.currentPage[resourceId] = this.pageNumber;
59
+ await this.fetchData(this.dataSrc);
60
+ },
61
+
62
+ async decreaseCurrentOffset(resourceId) {
63
+ let index = resourceId + "#p" + this.limit;
64
+ this.currentOffset[index] = this.offset = this.offset - this.limit;
65
+ this.currentPage[index] = this.offset / this.limit;
66
+ this.pageNumber = this.offset / this.limit;
67
+ this.updateNavButtons(resourceId, index, -1);
68
+ await this.fetchData(this.dataSrc);
69
+ },
70
+
71
+ async increaseCurrentOffset(resourceId) {
72
+ let index = resourceId + "#p" + this.limit;
73
+ this.currentOffset[index] = this.offset = this.offset + this.limit;
74
+ this.currentPage[index] = this.offset / this.limit;
75
+ this.updateNavButtons(resourceId, index, 1);
76
+ await this.fetchData(this.dataSrc);
77
+ },
78
+
79
+ updateNavButtons(resourceId, index, variance) {
80
+ this.element.querySelector("[data-id='prev']").disabled = this.currentOffset[index] <= 0;
81
+ this.element.querySelector("[data-id='next']").disabled = this.currentOffset[index] * this.limit >= this.pageCount;
82
+ this.element.querySelector("[data-id='current']").innerText = this.getCurrentServedPage(resourceId, variance);
83
+ },
84
+
85
+ getServerNavElement(div) {
86
+ if (div) {
87
+ const insertNode = div.parentNode || div;
88
+ return insertNode.querySelector("nav[data-id=\"nav\"]");
89
+ }
90
+
91
+ return null;
92
+ },
93
+
94
+ getCurrentServedPage(context, variance) {
95
+ this.currentPage[context] = Number(this.currentPage[context]) + variance;
96
+ return this.currentPage[context];
97
+ },
98
+
99
+ /**
100
+ * Find nav element or create it if not existing
101
+ * @param div - insert nav next to this div
102
+ */
103
+ initServerPaginationDiv(div) {
104
+ let nav = this.getServerNavElement(div);
105
+
106
+ if (!nav) {
107
+ nav = document.createElement('nav');
108
+ nav.setAttribute('data-id', 'nav');
109
+ const insertNode = div.parentNode || div;
110
+ insertNode.appendChild(nav);
111
+ }
112
+
113
+ return nav;
114
+ },
115
+
116
+ /**
117
+ * Create pagination template
118
+ */
119
+ renderServerPaginationNav(resourceId, div) {
120
+ if (this.limit) {
121
+ const currentOffset = this.getCurrentOffset(resourceId, this.limit);
122
+ var currentPageNumber = this.getCurrentServedPage(resourceId, 1);
123
+ const pageCount = Math.ceil(this.pageCount / this.limit);
124
+ render(html(_templateObject(), currentOffset <= 0, () => this.decreaseCurrentOffset(resourceId), currentOffset >= (pageCount - 1) * this.limit, () => this.increaseCurrentOffset(resourceId), currentPageNumber, this.pageCount), div);
125
+ }
126
+ }
127
+
128
+ };
129
+ export { ServerPaginationMixin };
130
+ //# sourceMappingURL=serverPaginationMixin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["serverPaginationMixin.ts"],"names":["html","render","ServerPaginationMixin","name","use","attributes","limit","type","Number","default","undefined","offset","pageCount","pageNumber","initialState","currentOffset","attached","setCurrentOffset","resourceId","parentDiv","initServerPaginationDiv","div","renderCallbacks","push","template","renderServerPaginationNav","parent","getCurrentOffset","index","currentPage","fetchData","dataSrc","decreaseCurrentOffset","updateNavButtons","increaseCurrentOffset","variance","element","querySelector","disabled","innerText","getCurrentServedPage","getServerNavElement","insertNode","parentNode","context","nav","document","createElement","setAttribute","appendChild","currentPageNumber","Math","ceil"],"mappings":"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","sourcesContent":["import { html, render } from \"lit-html\";\n\nconst ServerPaginationMixin = {\n name: 'server-pagination-mixin',\n use: [],\n attributes: {\n limit: {\n type: Number,\n default: undefined\n },\n offset: {\n type: Number,\n default: undefined\n },\n pageCount: {\n type: Number,\n default: 1000\n },\n pageNumber: {\n type: Number,\n default: 0\n }\n },\n initialState: {\n currentOffset: [],\n },\n\n attached(): void {\n if (this.limit) {\n this.setCurrentOffset(this.resourceId, 0);\n const parentDiv = this.initServerPaginationDiv(this.div);\n \n this.renderCallbacks.push({\n template: this.renderServerPaginationNav(this.resourceId, parentDiv),\n parent: parentDiv\n });\n }\n },\n\n getCurrentOffset(resourceId: string, limit: number) {\n return this.currentOffset[resourceId + \"#p\" + limit];\n },\n\n async setCurrentOffset(resourceId: string, offset: number): Promise<void> {\n let index = resourceId + \"#p\" + this.limit;\n this.currentOffset[index] = this.offset = offset;\n this.pageNumber = Number(this.offset / this.limit);\n this.currentPage[resourceId] = this.pageNumber;\n\n await this.fetchData(this.dataSrc);\n },\n\n async decreaseCurrentOffset(resourceId: string): Promise<void> {\n let index = resourceId + \"#p\" + this.limit;\n this.currentOffset[index] = this.offset = this.offset - this.limit;\n this.currentPage[index] = this.offset / this.limit;\n this.pageNumber = this.offset / this.limit;\n\n this.updateNavButtons(resourceId, index, -1);\n await this.fetchData(this.dataSrc);\n },\n\n async increaseCurrentOffset(resourceId: string): Promise<void> {\n let index = resourceId + \"#p\" + this.limit;\n this.currentOffset[index] = this.offset = this.offset + this.limit;\n this.currentPage[index] = this.offset / this.limit;\n\n this.updateNavButtons(resourceId, index, 1);\n await this.fetchData(this.dataSrc);\n },\n\n updateNavButtons(resourceId: string, index: string, variance: number) {\n this.element.querySelector(\"[data-id='prev']\").disabled = this.currentOffset[index] <= 0;\n this.element.querySelector(\"[data-id='next']\").disabled = this.currentOffset[index] * this.limit >= this.pageCount;\n this.element.querySelector(\"[data-id='current']\").innerText = this.getCurrentServedPage(resourceId, variance);\n },\n\n getServerNavElement(div: HTMLElement) {\n if(div) {\n const insertNode = div.parentNode || div;\n return insertNode.querySelector(`nav[data-id=\"nav\"]`);\n }\n\n return null;\n },\n\n getCurrentServedPage(context: string, variance: number): Promise<void> {\n this.currentPage[context] = Number(this.currentPage[context]) + variance;\n return this.currentPage[context];\n },\n\n /**\n * Find nav element or create it if not existing\n * @param div - insert nav next to this div\n */\n initServerPaginationDiv(div: HTMLElement) {\n let nav = this.getServerNavElement(div);\n if (!nav) {\n nav = document.createElement('nav');\n nav.setAttribute('data-id', 'nav');\n const insertNode = div.parentNode || div;\n insertNode.appendChild(nav);\n }\n return nav;\n },\n\n /**\n * Create pagination template\n */\n renderServerPaginationNav(resourceId: string, div: HTMLElement): void {\n if (this.limit) {\n const currentOffset = this.getCurrentOffset(resourceId, this.limit);\n var currentPageNumber = this.getCurrentServedPage(resourceId, 1);\n const pageCount = Math.ceil(this.pageCount / this.limit);\n\n render(html`\n <button\n data-id=\"prev\"\n ?disabled=${currentOffset <= 0}\n @click=${() => this.decreaseCurrentOffset(resourceId)}\n >←</button>\n <button\n data-id=\"next\"\n ?disabled=${currentOffset >= (pageCount - 1) * this.limit}\n @click=${ () => this.increaseCurrentOffset(resourceId)}\n >→</button>\n <span>\n <span data-id=\"current\">\n ${currentPageNumber}\n </span> / \n <span data-id=\"count\">\n ${this.pageCount}\n </span>\n </span>\n `, div);\n }\n },\n}\n\nexport {\n ServerPaginationMixin\n}"]}
@@ -1,9 +1,12 @@
1
1
  import { store } from '../libs/store/store.js';
2
+ import { formatAttributesToServerSearchOptions, mergeServerSearchOptions } from '../libs/store/server-search.js';
2
3
  import { AttributeBinderMixin } from './attributeBinderMixin.js';
3
4
  import { ContextMixin } from './contextMixin.js';
5
+ import { ServerPaginationMixin } from './serverPaginationMixin.js';
6
+ import { formatAttributesToServerPaginationOptions } from '../libs/store/server-pagination.js';
4
7
  const StoreMixin = {
5
8
  name: 'store-mixin',
6
- use: [AttributeBinderMixin, ContextMixin],
9
+ use: [AttributeBinderMixin, ContextMixin, ServerPaginationMixin],
7
10
  attributes: {
8
11
  noRender: {
9
12
  type: String,
@@ -16,7 +19,10 @@ const StoreMixin = {
16
19
  type: String,
17
20
  default: null,
18
21
  callback: async function (value) {
19
- if (this.noRender === null) await this.fetchData(value);
22
+ var _this$element$attribu;
23
+
24
+ const filteredOnServer = ((_this$element$attribu = this.element.attributes['filtered-on']) === null || _this$element$attribu === void 0 ? void 0 : _this$element$attribu.value) === 'server';
25
+ if (this.noRender === null && !filteredOnServer) await this.fetchData(value);
20
26
  }
21
27
  },
22
28
  loaderId: {
@@ -42,7 +48,17 @@ const StoreMixin = {
42
48
  },
43
49
 
44
50
  get resource() {
45
- return this.resourceId ? store.get(this.resourceId) : null;
51
+ var _this$getDynamicServe;
52
+
53
+ let id = this.resourceId;
54
+
55
+ if (this.limit) {
56
+ id = this.resourceId + "#p" + this.limit + "?o" + this.offset;
57
+ }
58
+
59
+ const serverSearch = mergeServerSearchOptions(formatAttributesToServerSearchOptions(this.element.attributes), (_this$getDynamicServe = this.getDynamicServerSearch) === null || _this$getDynamicServe === void 0 ? void 0 : _this$getDynamicServe.call(this) // from `filterMixin`
60
+ );
61
+ return id ? store.get(id, serverSearch) : null;
46
62
  },
47
63
 
48
64
  get loader() {
@@ -50,6 +66,8 @@ const StoreMixin = {
50
66
  },
51
67
 
52
68
  async fetchData(value) {
69
+ var _this$getDynamicServe2;
70
+
53
71
  this.empty();
54
72
  if (this.subscription) PubSub.unsubscribe(this.subscription);
55
73
  if (!value || value == "undefined") return;
@@ -64,7 +82,12 @@ const StoreMixin = {
64
82
 
65
83
  this.updateNavigateSubscription();
66
84
  this.subscription = PubSub.subscribe(this.resourceId, this.updateDOM.bind(this));
67
- await store.getData(this.resourceId, this.context);
85
+ const serverPagination = formatAttributesToServerPaginationOptions(this.element.attributes);
86
+ const dynamicServerSearch = (_this$getDynamicServe2 = this.getDynamicServerSearch) === null || _this$getDynamicServe2 === void 0 ? void 0 : _this$getDynamicServe2.call(this); // from `filterMixin`
87
+
88
+ const serverSearch = mergeServerSearchOptions(formatAttributesToServerSearchOptions(this.element.attributes), dynamicServerSearch);
89
+ const forceRefetch = !!dynamicServerSearch;
90
+ await store.getData(this.resourceId, this.context, undefined, undefined, forceRefetch, serverPagination, serverSearch);
68
91
  this.updateDOM();
69
92
  },
70
93
 
@@ -1 +1 @@
1
- {"version":3,"sources":["storeMixin.ts"],"names":["store","AttributeBinderMixin","ContextMixin","StoreMixin","name","use","attributes","noRender","type","String","default","callback","value","fetchData","dataSrc","loaderId","nestedField","initialState","resourceId","subscription","created","element","closest","detached","PubSub","unsubscribe","resource","get","loader","document","getElementById","empty","getData","context","nestedResource","updateNavigateSubscription","subscribe","updateDOM","bind","toggleLoaderHidden","toggle","toggleAttribute","replaceAttributesData","populate","setTimeout","dispatchEvent","CustomEvent","detail","update"],"mappings":"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","sourcesContent":["import { store } from '../libs/store/store';\nimport { AttributeBinderMixin } from './attributeBinderMixin';\nimport type { Resource } from './interfaces';\nimport { ContextMixin } from './contextMixin';\n\nconst StoreMixin = {\n name: 'store-mixin',\n use: [AttributeBinderMixin, ContextMixin],\n attributes: {\n noRender: {\n type: String,\n default: null,\n callback: function (value: boolean) {\n if (value === null) this.fetchData(this.dataSrc);\n }\n },\n dataSrc: {\n type: String,\n default: null,\n callback: async function (value: string) {\n if (this.noRender === null) await this.fetchData(value);\n },\n },\n loaderId: {\n type: String,\n default: ''\n },\n nestedField: {\n type: String,\n default: null\n },\n },\n initialState: {\n resourceId: null,\n subscription: null,\n },\n created() {\n if (this.element.closest('[no-render]')) this.noRender = ''; // if embedded in no-render, apply no-render to himself\n },\n detached() {\n if (this.subscription) PubSub.unsubscribe(this.subscription);\n },\n get resource(): Resource|null{\n return this.resourceId ? store.get(this.resourceId) : null;\n },\n get loader(): HTMLElement | null {\n return this.loaderId ? document.getElementById(this.loaderId) : null;\n },\n async fetchData(value: string) {\n this.empty();\n if (this.subscription) PubSub.unsubscribe(this.subscription);\n if (!value || value == \"undefined\") return;\n\n this.resourceId = value;\n\n if (this.nestedField) {\n const resource = await store.getData(value, this.context);\n const nestedResource = resource ? await resource[this.nestedField] : null;\n this.resourceId = nestedResource ? nestedResource['@id'] : null;\n if (!this.resourceId) throw `Error: the key \"${this.nestedField}\" does not exist on the resource`\n }\n this.updateNavigateSubscription();\n\n this.subscription = PubSub.subscribe(this.resourceId, this.updateDOM.bind(this));\n await store.getData(this.resourceId, this.context);\n this.updateDOM();\n },\n toggleLoaderHidden(toggle: boolean): void {\n if (this.loader) this.loader.toggleAttribute('hidden', toggle);\n },\n updateNavigateSubscription() { },\n async updateDOM(): Promise<void> {\n this.toggleLoaderHidden(false); // brings a loader out if the attribute is set\n this.empty();\n await this.replaceAttributesData();\n await this.populate();\n setTimeout(() => ( // Brings the dispatchEvent at the end of the queue\n this.element.dispatchEvent(new CustomEvent('populate', { detail: { resource: {\"@id\": this.dataSrc} } })))\n );\n this.toggleLoaderHidden(true);\n },\n empty():void {\n },\n update() {\n if (this.noRender === null) this.updateDOM();\n }\n};\n\nexport {\n StoreMixin\n}"]}
1
+ {"version":3,"sources":["storeMixin.ts"],"names":["store","formatAttributesToServerSearchOptions","mergeServerSearchOptions","AttributeBinderMixin","ContextMixin","ServerPaginationMixin","formatAttributesToServerPaginationOptions","StoreMixin","name","use","attributes","noRender","type","String","default","callback","value","fetchData","dataSrc","filteredOnServer","element","loaderId","nestedField","initialState","resourceId","subscription","created","closest","detached","PubSub","unsubscribe","resource","id","limit","offset","serverSearch","getDynamicServerSearch","get","loader","document","getElementById","empty","getData","context","nestedResource","updateNavigateSubscription","subscribe","updateDOM","bind","serverPagination","dynamicServerSearch","forceRefetch","undefined","toggleLoaderHidden","toggle","toggleAttribute","replaceAttributesData","populate","setTimeout","dispatchEvent","CustomEvent","detail","update"],"mappings":"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","sourcesContent":["import { store } from '../libs/store/store';\nimport { formatAttributesToServerSearchOptions, mergeServerSearchOptions } from '../libs/store/server-search';\nimport { AttributeBinderMixin } from './attributeBinderMixin';\nimport type { Resource } from './interfaces';\nimport { ContextMixin } from './contextMixin';\nimport { ServerPaginationMixin } from './serverPaginationMixin';\nimport { formatAttributesToServerPaginationOptions } from '../libs/store/server-pagination';\n\nconst StoreMixin = {\n name: 'store-mixin',\n use: [AttributeBinderMixin, ContextMixin, ServerPaginationMixin],\n attributes: {\n noRender: {\n type: String,\n default: null,\n callback: function (value: boolean) {\n if (value === null) this.fetchData(this.dataSrc);\n }\n },\n dataSrc: {\n type: String,\n default: null,\n callback: async function (value: string) {\n const filteredOnServer = this.element.attributes['filtered-on']?.value === 'server';\n if (this.noRender === null && !filteredOnServer) await this.fetchData(value);\n },\n },\n loaderId: {\n type: String,\n default: ''\n },\n nestedField: {\n type: String,\n default: null\n },\n },\n initialState: {\n resourceId: null,\n subscription: null,\n },\n created() {\n if (this.element.closest('[no-render]')) this.noRender = ''; // if embedded in no-render, apply no-render to himself\n },\n detached() {\n if (this.subscription) PubSub.unsubscribe(this.subscription);\n },\n get resource(): Resource|null{\n let id = this.resourceId;\n if (this.limit) {\n id = this.resourceId + \"#p\" + this.limit + \"?o\" + this.offset;\n }\n const serverSearch = mergeServerSearchOptions(\n formatAttributesToServerSearchOptions(this.element.attributes),\n this.getDynamicServerSearch?.() // from `filterMixin`\n );\n return id ? store.get(id, serverSearch) : null;\n },\n get loader(): HTMLElement | null {\n return this.loaderId ? document.getElementById(this.loaderId) : null;\n },\n async fetchData(value: string) {\n this.empty();\n if (this.subscription) PubSub.unsubscribe(this.subscription);\n if (!value || value == \"undefined\") return;\n\n this.resourceId = value;\n if (this.nestedField) {\n const resource = await store.getData(value, this.context);\n const nestedResource = resource ? await resource[this.nestedField] : null;\n this.resourceId = nestedResource ? nestedResource['@id'] : null;\n if (!this.resourceId) throw `Error: the key \"${this.nestedField}\" does not exist on the resource`\n }\n this.updateNavigateSubscription();\n\n this.subscription = PubSub.subscribe(this.resourceId, this.updateDOM.bind(this));\n const serverPagination = formatAttributesToServerPaginationOptions(this.element.attributes);\n const dynamicServerSearch = this.getDynamicServerSearch?.(); // from `filterMixin`\n const serverSearch = mergeServerSearchOptions(\n formatAttributesToServerSearchOptions(this.element.attributes),\n dynamicServerSearch\n );\n const forceRefetch = !!dynamicServerSearch;\n await store.getData(this.resourceId, this.context, undefined, undefined, forceRefetch, serverPagination, serverSearch);\n\n this.updateDOM();\n },\n\n toggleLoaderHidden(toggle: boolean): void {\n if (this.loader) this.loader.toggleAttribute('hidden', toggle);\n },\n updateNavigateSubscription() { },\n async updateDOM(): Promise<void> {\n this.toggleLoaderHidden(false); // brings a loader out if the attribute is set\n this.empty();\n await this.replaceAttributesData();\n await this.populate();\n setTimeout(() => ( // Brings the dispatchEvent at the end of the queue\n this.element.dispatchEvent(new CustomEvent('populate', { detail: { resource: {\"@id\": this.dataSrc} } })))\n );\n this.toggleLoaderHidden(true);\n },\n empty():void {\n },\n update() {\n if (this.noRender === null) this.updateDOM();\n }\n};\n\nexport {\n StoreMixin\n}"]}
@@ -111,13 +111,15 @@ const WidgetMixin = {
111
111
  * Return field list of the component
112
112
  */
113
113
  async getFields() {
114
+ var _resource$isContainer, _resource;
115
+
114
116
  // TODO : improve code
115
117
  const attr = this.fields;
116
118
  if (attr === '') return [];
117
119
  if (attr) return parseFieldsString(attr);
118
120
  let resource = this.resource;
119
121
 
120
- if (resource && resource.isContainer()) {
122
+ if (resource && (_resource$isContainer = (_resource = resource).isContainer) !== null && _resource$isContainer !== void 0 && _resource$isContainer.call(_resource)) {
121
123
  // If container, keep the 1rst resource
122
124
  for (let res of resource['ldp:contains']) {
123
125
  resource = res;
@@ -194,7 +196,9 @@ const WidgetMixin = {
194
196
  * @param resource - Resource
195
197
  */
196
198
  async fetchValue(field, resource) {
197
- return resource && !resource.isContainer() ? await resource[field] : undefined;
199
+ var _resource$isContainer2;
200
+
201
+ return resource && !((_resource$isContainer2 = resource.isContainer) !== null && _resource$isContainer2 !== void 0 && _resource$isContainer2.call(resource)) ? await resource[field] : undefined;
198
202
  },
199
203
 
200
204
  /**
@@ -1 +1 @@
1
- {"version":3,"sources":["widgetMixin.ts"],"names":["spread","preHTML","parseFieldsString","findClosingBracketMatchIndex","newWidgetFactory","WidgetType","html","render","ifDefined","WidgetMixin","name","use","attributes","fields","type","String","default","undefined","initialState","nameWidgets","_div","created","attached","dataSrc","resource","noRender","populate","parentElement","div","document","createElement","element","appendChild","value","widgets","map","querySelector","getFields","attr","isContainer","res","console","error","Error","prop","properties","startsWith","push","getAction","field","action","getAttribute","editable","hasAttribute","getSetRegexp","RegExp","getSet","setString","match","firstSetBracket","indexOf","length","lastSetBracket","set","substring","isSet","foundSets","isString","fetchValue","getValue","escapedField","getEscapedField","resourceValue","empty","widgetFromTagName","tagName","CUSTOM","USER","customElements","get","NATIVE","getWidget","widget","defaultWidget","defaultSetWidget","multiple","attribute","defaultMultipleWidget","addToAttributes","lookForAttr","setAttrKey","widgetAttributes","attrs","multipleAttributes","defaultAttributes","addableAttributes","Array","from","filter","a","replace","resourceId","createWidgetTemplate","transformAttributes","createString","createSet","currentResource","widgetMeta","widgetTemplate","class","defineAttribute","setAttribute","setWidget","setAttributes","initializing","Object","keys","component","setFields","hasOnlyEmpty","valueSet","widgetsTemplate","Promise","all","template","slice"],"mappings":"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","sourcesContent":["import { spread, preHTML } from '../libs/lit-helpers';\nimport { parseFieldsString, findClosingBracketMatchIndex } from '../libs/helpers';\nimport { newWidgetFactory } from '../new-widgets/new-widget-factory';\nimport { WidgetInterface, WidgetType, Resource } from './interfaces';\nimport { html, render, TemplateResult } from 'lit-html';\nimport { ifDefined } from 'lit-html/directives/if-defined';\n\nconst WidgetMixin = {\n name: 'widget-mixin',\n use: [],\n attributes: {\n fields: {\n type: String,\n default: undefined,\n }\n },\n initialState: {\n nameWidgets: null,\n _div: null\n },\n created(): void {\n this.nameWidgets = [];\n },\n attached(): void {\n if (!this.dataSrc && !this.resource && this.noRender === null) this.populate();\n },\n get parentElement(): string {\n return 'div';\n },\n get div(): HTMLElement {\n if (this._div) return this._div;\n this._div = document.createElement(this.parentElement);\n this.element.appendChild(this._div);\n return this._div;\n },\n set div(value) {\n this._div = value\n },\n get widgets() {\n return this.nameWidgets.map((name: string) => this.element.querySelector(`[name=\"${name}\"]`));\n },\n /**\n * Return field list of the component\n */\n async getFields(): Promise<string[]>{ // TODO : improve code\n const attr = this.fields;\n if (attr === '') return [];\n if (attr) return parseFieldsString(attr);\n\n let resource = this.resource as Resource;\n if (resource && resource.isContainer()) { // If container, keep the 1rst resource\n for (let res of resource['ldp:contains']) {\n resource = res;\n break;\n }\n }\n\n if (!this.dataSrc) console.error(new Error('You must provide a \"fields\" attribute'));\n if(!resource) return [];\n\n let fields: string[] = [];\n for (const prop of resource.properties) {\n if ((!prop.startsWith('@') && !(prop === \"permissions\")) && await resource[prop]) fields.push(prop);\n }\n return fields;\n },\n /**\n * return attribute if \"field\" is an action\n * @param field - string\n */\n getAction(field: string): string {\n const action = this.element.getAttribute('action-' + field);\n return action;\n },\n /**\n * return true if \"field\" is editable\n * @param field - string\n */\n editable(field: string): string {\n return this.element.hasAttribute('editable-' + field);\n },\n /**\n * Return regexp to check if \"field\" is a set\n * @param field - string\n */\n getSetRegexp(field: string) {\n return new RegExp(`(^|\\\\,|\\\\(|\\\\s)\\\\s*${field}\\\\s*\\\\(`, 'g')\n },\n /**\n * Return fields contained in set \"field\"\n * @param field - string\n */\n getSet(field: string): string[] {\n const setString = this.fields.match(this.getSetRegexp(field));\n if (!setString) return [];\n const firstSetBracket = this.fields.indexOf(setString[0]) + (setString[0].length) - 1;\n const lastSetBracket = findClosingBracketMatchIndex(this.fields, firstSetBracket);\n const set = this.fields.substring(firstSetBracket + 1, lastSetBracket);\n return parseFieldsString(set);\n },\n /**\n * Return true if \"field\" is a set\n * @param field - string\n */\n isSet(field: string): boolean {\n if (!this.fields) return false;\n let foundSets = this.fields.match(this.getSetRegexp(field));\n return foundSets ? foundSets.length > 0 : false;\n },\n isString(field: string): boolean {\n return field.startsWith('\\'') || field.startsWith('\\\"');\n },\n /**\n * Return the value of \"resource\" for predicate \"field\"\n * @param field - string\n * @param resource - Resource\n */\n async fetchValue(field: string, resource: Resource) {\n return resource && !resource.isContainer() ? await resource[field] : undefined;\n },\n /**\n * Return the value of the field\n * @param field - field\n */\n async getValue(field: string, resource: Resource) {\n const escapedField = this.getEscapedField(field);\n if (this.getAction(escapedField)) {\n return this.getAction(escapedField);\n }\n if (this.element.hasAttribute('value-' + field)) {\n return this.element.getAttribute('value-' + field);\n }\n let resourceValue = await this.fetchValue(field, resource);\n\n // Empty value\n if (resourceValue === undefined || resourceValue === '' || resourceValue === null) // If null or empty, return field default value\n return this.element.hasAttribute('default-' + field) ?\n this.element.getAttribute('default-' + field) : '';\n\n return resourceValue;\n },\n empty(): void {},\n /**\n * Return a widget from a tagName, and create it if necessary\n * @param tagName - string\n */\n widgetFromTagName(tagName: string) {\n let type = tagName.startsWith('solid') ? WidgetType.CUSTOM : WidgetType.USER;\n if (!customElements.get(tagName)) { // component does not exist\n if (tagName.startsWith('solid')) newWidgetFactory(tagName); // solid- -> create it\n else type = WidgetType.NATIVE; // or use a native tag\n }\n return { tagName, type }; // return tagName\n },\n /**\n * Return widget for field \"field\"\n * @param field - string\n * @param isSet - boolean\n */\n getWidget(field: string, isSet: boolean = false): WidgetInterface {\n const widget = this.element.getAttribute('widget-' + field);\n\n if (widget) return this.widgetFromTagName(widget);\n if (this.getAction(field)) return this.widgetFromTagName('solid-action');\n\n return !isSet ? this.widgetFromTagName(this.defaultWidget) : this.widgetFromTagName(this.defaultSetWidget);\n },\n /**\n * Return multiple widget if \"field\" is a multiple, false if it's not\n * @param field - string\n */\n multiple(field: string): WidgetInterface|null {\n const attribute = 'multiple-' + field;\n if (!this.element.hasAttribute(attribute)) return null;\n const widget = this.element.getAttribute(attribute) || this.defaultMultipleWidget;\n return this.widgetFromTagName(widget);\n },\n /**\n * If attribute \"lookForAttr\" is set on element, add \"attrKey\" to the \"attributes\" list\n * @param lookForAttr - string\n * @param setAttrKey - string\n * @param attributes - object\n */\n addToAttributes(lookForAttr: string, setAttrKey: string, attributes: object) {\n const attribute = this.element.getAttribute(lookForAttr);\n if (attribute == null) return;\n attributes[setAttrKey] = attribute;\n },\n /**\n * Return all the attributes of widget \"field\"\n * @param field - string\n * @param resource - Resource\n */\n widgetAttributes(field: string, resource: Resource): object {\n const attrs = { name: field };\n const escapedField = this.getEscapedField(field);\n\n // transfer all multiple-[field]-[attr] attributes as [attr] for multiple widget [field]\n const multipleAttributes = [\n 'fields',\n 'label',\n 'widget',\n 'add-label',\n 'remove-label',\n 'next', \n 'empty-widget',\n 'add-class',\n 'remove-class'\n ];\n for (let attr of multipleAttributes) this.addToAttributes(`multiple-${escapedField}-${attr}`, attr, attrs)\n\n // transfer all [attr]-[field] attributes as [attr] attribute for widget [field]\n const defaultAttributes = [\n 'range',\n 'enum',\n 'label',\n 'placeholder',\n 'class',\n /* 'widget', */,\n 'required',\n 'editable',\n 'autocomplete',\n 'upload-url',\n 'option-label',\n 'option-value',\n 'order-by', // deprecated. Remove in 0.15\n 'each-label',\n 'order-asc',\n 'order-desc',\n 'min',\n 'max',\n 'pattern',\n 'title',\n 'start-value',\n 'end-value',\n 'alt',\n 'step',\n 'maxlength',\n 'minlength',\n 'search-text',\n 'search-placeholder',\n 'link-text',\n ];\n for (let attr of defaultAttributes) this.addToAttributes(`${attr}-${escapedField}`, attr, attrs)\n\n const addableAttributes: Attr[] = (Array.from(this.element.attributes) as Attr[]).filter((a: Attr) => a.name.startsWith(`addable-${escapedField}`));\n for (let attr of addableAttributes) this.addToAttributes(attr.name, attr.name.replace(`addable-${escapedField}`, 'addable'), attrs)\n\n const resourceId = resource ? resource!['@id'] : null;\n if (this.multiple(escapedField)) attrs['widget'] = this.getWidget(escapedField).tagName;\n if (this.getAction(escapedField) && resourceId) attrs['src'] = this.element.getAttribute('src-' + escapedField) || resourceId;\n if (this.editable(escapedField) && resourceId) attrs['value-id'] = resourceId;\n\n return attrs;\n },\n /**\n * Creates and return a widget for field + add it to the widget list\n * @param field - string\n */\n async createWidgetTemplate(field: string, resource = null, transformAttributes = false): Promise<TemplateResult> {\n if (this.isString(field)) return this.createString(field); // field is a static string\n if (this.isSet(field)) return await this.createSet(field);\n\n const currentResource = resource || this.resource;\n let attributes = this.widgetAttributes(field, currentResource);\n const escapedField = this.getEscapedField(field);\n const widgetMeta = this.multiple(escapedField) || this.getWidget(escapedField);\n let tagName = widgetMeta.tagName;\n let widgetTemplate = html``;\n\n // Set attributes\n let value = await this.getValue(field, currentResource);\n if (widgetMeta.type === WidgetType.NATIVE) { // native widget (ie: h1)\n widgetTemplate = preHTML`\n <${tagName}\n name=\"${ifDefined(attributes.name)}\"\n class=\"${ifDefined(attributes.class)}\"\n >${value}</${tagName}>\n `;\n } else { // custom widget (ie: solid-display-value)\n // Check if value is defined, and if the default widget is needed\n if ((value === null || value === '') && this.element.hasAttribute('default-widget-' + field)) {\n tagName = this.element.getAttribute('default-widget-' + field);\n }\n // Set attributes to the widget\n // setAttribute set a string. Make sure null values are empty\n if (value === null || value === undefined) attributes.value = '';\n if (widgetMeta.type === WidgetType.USER && value['@id']) { // if value is a resource and solid-widget used, set data-src\n attributes['data-src'] = value['@id'];\n } else { // otherwise, set value attribute\n attributes['value'] = value;\n }\n\n // Subscribe widgets if they show a resource\n if (value && value['@id']) attributes['auto-subscribe'] = value['@id'];\n\n // Transform store://XXX attributes\n if (transformAttributes) attributes = await this.transformAttributes(attributes, currentResource);\n\n widgetTemplate = preHTML`<${tagName} ...=${spread(attributes)}></${tagName}>`;\n }\n\n this.nameWidgets.push(field);\n return widgetTemplate;\n },\n defineAttribute(widget: HTMLElement, attribute: string, value: any) {\n if (widget.getAttribute(attribute) !== value) { // if attribute is different than previous one\n widget.setAttribute(attribute, value); // set it\n }\n },\n /**\n * Create a set and add fields to it\n * @param field - string\n */\n async createSet(field: string): Promise<TemplateResult> {\n const setWidget = this.getWidget(field, true);\n\n // Get set attributes\n const attrs = { name: field };\n const setAttributes = [\n 'class',\n 'label'\n ];\n for (let attr of setAttributes) this.addToAttributes(`${attr}-${field}`, attr, attrs);\n\n // Create widget if not already existing\n let widget = this.element.querySelector(`${setWidget.tagName}[name=\"${field}\"]`);\n let initializing = false; // used to render widget only first time\n if (!widget) {\n widget = document.createElement(setWidget.tagName);\n initializing = true;\n }\n for (let name of Object.keys(attrs)) {\n this.defineAttribute(widget, name, attrs[name], setWidget.type);\n }\n if (widget.component && initializing) widget.component.render();\n let setFields = this.getSet(field);\n // Catch widget for the set if all these fields are empty\n if (this.element.hasAttribute('empty-' + field)) {\n let hasOnlyEmpty = true;\n for(let field of setFields) {\n let value: string = await this.getValue(field, this.resource);\n if (value !== '') { // if one not empty\n hasOnlyEmpty = false;\n continue; // break loop\n }\n };\n if(hasOnlyEmpty) { // if only empty values, return empty-widget\n const attributes = this.widgetAttributes(field, this.resource);\n const tagName = this.element.getAttribute(`empty-${field}`);\n const valueSet = this.element.getAttribute(`empty-${field}-value`);\n if (valueSet) attributes.value = valueSet;\n return preHTML`<${tagName} ...=${spread(attributes)}></${tagName}>`;\n };\n }\n\n // Render template\n const widgetsTemplate = await Promise.all(setFields.map((field: string) => this.createWidgetTemplate(field)));\n const template = html`${widgetsTemplate}`;\n render(template, widget.querySelector('[data-content]') || widget);\n return widget;\n },\n createString(value: string): TemplateResult {\n return html`\n <span>${value.slice(1, -1).replace(/\\\\(['\"])/g, '$1')}</span>\n `;\n },\n /**\n * Returns field name without starting \"@\"\n * @param field\n */\n getEscapedField(field: string): string {\n return field.startsWith('@') ? field.slice(1, field.length) : field;\n }\n}\n\nexport {\n WidgetMixin\n}"]}
1
+ {"version":3,"sources":["widgetMixin.ts"],"names":["spread","preHTML","parseFieldsString","findClosingBracketMatchIndex","newWidgetFactory","WidgetType","html","render","ifDefined","WidgetMixin","name","use","attributes","fields","type","String","default","undefined","initialState","nameWidgets","_div","created","attached","dataSrc","resource","noRender","populate","parentElement","div","document","createElement","element","appendChild","value","widgets","map","querySelector","getFields","attr","isContainer","res","console","error","Error","prop","properties","startsWith","push","getAction","field","action","getAttribute","editable","hasAttribute","getSetRegexp","RegExp","getSet","setString","match","firstSetBracket","indexOf","length","lastSetBracket","set","substring","isSet","foundSets","isString","fetchValue","getValue","escapedField","getEscapedField","resourceValue","empty","widgetFromTagName","tagName","CUSTOM","USER","customElements","get","NATIVE","getWidget","widget","defaultWidget","defaultSetWidget","multiple","attribute","defaultMultipleWidget","addToAttributes","lookForAttr","setAttrKey","widgetAttributes","attrs","multipleAttributes","defaultAttributes","addableAttributes","Array","from","filter","a","replace","resourceId","createWidgetTemplate","transformAttributes","createString","createSet","currentResource","widgetMeta","widgetTemplate","class","defineAttribute","setAttribute","setWidget","setAttributes","initializing","Object","keys","component","setFields","hasOnlyEmpty","valueSet","widgetsTemplate","Promise","all","template","slice"],"mappings":"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","sourcesContent":["import { spread, preHTML } from '../libs/lit-helpers';\nimport { parseFieldsString, findClosingBracketMatchIndex } from '../libs/helpers';\nimport { newWidgetFactory } from '../new-widgets/new-widget-factory';\nimport { WidgetInterface, WidgetType, Resource } from './interfaces';\nimport { html, render, TemplateResult } from 'lit-html';\nimport { ifDefined } from 'lit-html/directives/if-defined';\n\nconst WidgetMixin = {\n name: 'widget-mixin',\n use: [],\n attributes: {\n fields: {\n type: String,\n default: undefined,\n }\n },\n initialState: {\n nameWidgets: null,\n _div: null\n },\n created(): void {\n this.nameWidgets = [];\n },\n attached(): void {\n if (!this.dataSrc && !this.resource && this.noRender === null) this.populate();\n },\n get parentElement(): string {\n return 'div';\n },\n get div(): HTMLElement {\n if (this._div) return this._div;\n this._div = document.createElement(this.parentElement);\n this.element.appendChild(this._div);\n return this._div;\n },\n set div(value) {\n this._div = value\n },\n get widgets() {\n return this.nameWidgets.map((name: string) => this.element.querySelector(`[name=\"${name}\"]`));\n },\n /**\n * Return field list of the component\n */\n async getFields(): Promise<string[]>{ // TODO : improve code\n const attr = this.fields;\n if (attr === '') return [];\n if (attr) return parseFieldsString(attr);\n\n let resource = this.resource as Resource;\n if (resource && resource.isContainer?.()) { // If container, keep the 1rst resource\n for (let res of resource['ldp:contains']) {\n resource = res;\n break;\n }\n }\n\n if (!this.dataSrc) console.error(new Error('You must provide a \"fields\" attribute'));\n if(!resource) return [];\n\n let fields: string[] = [];\n for (const prop of resource.properties) {\n if ((!prop.startsWith('@') && !(prop === \"permissions\")) && await resource[prop]) fields.push(prop);\n }\n return fields;\n },\n /**\n * return attribute if \"field\" is an action\n * @param field - string\n */\n getAction(field: string): string {\n const action = this.element.getAttribute('action-' + field);\n return action;\n },\n /**\n * return true if \"field\" is editable\n * @param field - string\n */\n editable(field: string): string {\n return this.element.hasAttribute('editable-' + field);\n },\n /**\n * Return regexp to check if \"field\" is a set\n * @param field - string\n */\n getSetRegexp(field: string) {\n return new RegExp(`(^|\\\\,|\\\\(|\\\\s)\\\\s*${field}\\\\s*\\\\(`, 'g')\n },\n /**\n * Return fields contained in set \"field\"\n * @param field - string\n */\n getSet(field: string): string[] {\n const setString = this.fields.match(this.getSetRegexp(field));\n if (!setString) return [];\n const firstSetBracket = this.fields.indexOf(setString[0]) + (setString[0].length) - 1;\n const lastSetBracket = findClosingBracketMatchIndex(this.fields, firstSetBracket);\n const set = this.fields.substring(firstSetBracket + 1, lastSetBracket);\n return parseFieldsString(set);\n },\n /**\n * Return true if \"field\" is a set\n * @param field - string\n */\n isSet(field: string): boolean {\n if (!this.fields) return false;\n let foundSets = this.fields.match(this.getSetRegexp(field));\n return foundSets ? foundSets.length > 0 : false;\n },\n isString(field: string): boolean {\n return field.startsWith('\\'') || field.startsWith('\\\"');\n },\n /**\n * Return the value of \"resource\" for predicate \"field\"\n * @param field - string\n * @param resource - Resource\n */\n async fetchValue(field: string, resource: Resource) {\n return resource && !resource.isContainer?.() ? await resource[field] : undefined;\n },\n /**\n * Return the value of the field\n * @param field - field\n */\n async getValue(field: string, resource: Resource) {\n const escapedField = this.getEscapedField(field);\n if (this.getAction(escapedField)) {\n return this.getAction(escapedField);\n }\n if (this.element.hasAttribute('value-' + field)) {\n return this.element.getAttribute('value-' + field);\n }\n let resourceValue = await this.fetchValue(field, resource);\n\n // Empty value\n if (resourceValue === undefined || resourceValue === '' || resourceValue === null) // If null or empty, return field default value\n return this.element.hasAttribute('default-' + field) ?\n this.element.getAttribute('default-' + field) : '';\n\n return resourceValue;\n },\n empty(): void {},\n /**\n * Return a widget from a tagName, and create it if necessary\n * @param tagName - string\n */\n widgetFromTagName(tagName: string) {\n let type = tagName.startsWith('solid') ? WidgetType.CUSTOM : WidgetType.USER;\n if (!customElements.get(tagName)) { // component does not exist\n if (tagName.startsWith('solid')) newWidgetFactory(tagName); // solid- -> create it\n else type = WidgetType.NATIVE; // or use a native tag\n }\n return { tagName, type }; // return tagName\n },\n /**\n * Return widget for field \"field\"\n * @param field - string\n * @param isSet - boolean\n */\n getWidget(field: string, isSet: boolean = false): WidgetInterface {\n const widget = this.element.getAttribute('widget-' + field);\n\n if (widget) return this.widgetFromTagName(widget);\n if (this.getAction(field)) return this.widgetFromTagName('solid-action');\n\n return !isSet ? this.widgetFromTagName(this.defaultWidget) : this.widgetFromTagName(this.defaultSetWidget);\n },\n /**\n * Return multiple widget if \"field\" is a multiple, false if it's not\n * @param field - string\n */\n multiple(field: string): WidgetInterface|null {\n const attribute = 'multiple-' + field;\n if (!this.element.hasAttribute(attribute)) return null;\n const widget = this.element.getAttribute(attribute) || this.defaultMultipleWidget;\n return this.widgetFromTagName(widget);\n },\n /**\n * If attribute \"lookForAttr\" is set on element, add \"attrKey\" to the \"attributes\" list\n * @param lookForAttr - string\n * @param setAttrKey - string\n * @param attributes - object\n */\n addToAttributes(lookForAttr: string, setAttrKey: string, attributes: object) {\n const attribute = this.element.getAttribute(lookForAttr);\n if (attribute == null) return;\n attributes[setAttrKey] = attribute;\n },\n /**\n * Return all the attributes of widget \"field\"\n * @param field - string\n * @param resource - Resource\n */\n widgetAttributes(field: string, resource: Resource): object {\n const attrs = { name: field };\n const escapedField = this.getEscapedField(field);\n\n // transfer all multiple-[field]-[attr] attributes as [attr] for multiple widget [field]\n const multipleAttributes = [\n 'fields',\n 'label',\n 'widget',\n 'add-label',\n 'remove-label',\n 'next', \n 'empty-widget',\n 'add-class',\n 'remove-class'\n ];\n for (let attr of multipleAttributes) this.addToAttributes(`multiple-${escapedField}-${attr}`, attr, attrs)\n\n // transfer all [attr]-[field] attributes as [attr] attribute for widget [field]\n const defaultAttributes = [\n 'range',\n 'enum',\n 'label',\n 'placeholder',\n 'class',\n /* 'widget', */,\n 'required',\n 'editable',\n 'autocomplete',\n 'upload-url',\n 'option-label',\n 'option-value',\n 'order-by', // deprecated. Remove in 0.15\n 'each-label',\n 'order-asc',\n 'order-desc',\n 'min',\n 'max',\n 'pattern',\n 'title',\n 'start-value',\n 'end-value',\n 'alt',\n 'step',\n 'maxlength',\n 'minlength',\n 'search-text',\n 'search-placeholder',\n 'link-text',\n ];\n for (let attr of defaultAttributes) this.addToAttributes(`${attr}-${escapedField}`, attr, attrs)\n\n const addableAttributes: Attr[] = (Array.from(this.element.attributes) as Attr[]).filter((a: Attr) => a.name.startsWith(`addable-${escapedField}`));\n for (let attr of addableAttributes) this.addToAttributes(attr.name, attr.name.replace(`addable-${escapedField}`, 'addable'), attrs)\n\n const resourceId = resource ? resource!['@id'] : null;\n if (this.multiple(escapedField)) attrs['widget'] = this.getWidget(escapedField).tagName;\n if (this.getAction(escapedField) && resourceId) attrs['src'] = this.element.getAttribute('src-' + escapedField) || resourceId;\n if (this.editable(escapedField) && resourceId) attrs['value-id'] = resourceId;\n\n return attrs;\n },\n /**\n * Creates and return a widget for field + add it to the widget list\n * @param field - string\n */\n async createWidgetTemplate(field: string, resource = null, transformAttributes = false): Promise<TemplateResult> {\n if (this.isString(field)) return this.createString(field); // field is a static string\n if (this.isSet(field)) return await this.createSet(field);\n\n const currentResource = resource || this.resource;\n let attributes = this.widgetAttributes(field, currentResource);\n const escapedField = this.getEscapedField(field);\n const widgetMeta = this.multiple(escapedField) || this.getWidget(escapedField);\n let tagName = widgetMeta.tagName;\n let widgetTemplate = html``;\n\n // Set attributes\n let value = await this.getValue(field, currentResource);\n if (widgetMeta.type === WidgetType.NATIVE) { // native widget (ie: h1)\n widgetTemplate = preHTML`\n <${tagName}\n name=\"${ifDefined(attributes.name)}\"\n class=\"${ifDefined(attributes.class)}\"\n >${value}</${tagName}>\n `;\n } else { // custom widget (ie: solid-display-value)\n // Check if value is defined, and if the default widget is needed\n if ((value === null || value === '') && this.element.hasAttribute('default-widget-' + field)) {\n tagName = this.element.getAttribute('default-widget-' + field);\n }\n // Set attributes to the widget\n // setAttribute set a string. Make sure null values are empty\n if (value === null || value === undefined) attributes.value = '';\n if (widgetMeta.type === WidgetType.USER && value['@id']) { // if value is a resource and solid-widget used, set data-src\n attributes['data-src'] = value['@id'];\n } else { // otherwise, set value attribute\n attributes['value'] = value;\n }\n\n // Subscribe widgets if they show a resource\n if (value && value['@id']) attributes['auto-subscribe'] = value['@id'];\n\n // Transform store://XXX attributes\n if (transformAttributes) attributes = await this.transformAttributes(attributes, currentResource);\n\n widgetTemplate = preHTML`<${tagName} ...=${spread(attributes)}></${tagName}>`;\n }\n\n this.nameWidgets.push(field);\n return widgetTemplate;\n },\n defineAttribute(widget: HTMLElement, attribute: string, value: any) {\n if (widget.getAttribute(attribute) !== value) { // if attribute is different than previous one\n widget.setAttribute(attribute, value); // set it\n }\n },\n /**\n * Create a set and add fields to it\n * @param field - string\n */\n async createSet(field: string): Promise<TemplateResult> {\n const setWidget = this.getWidget(field, true);\n\n // Get set attributes\n const attrs = { name: field };\n const setAttributes = [\n 'class',\n 'label'\n ];\n for (let attr of setAttributes) this.addToAttributes(`${attr}-${field}`, attr, attrs);\n\n // Create widget if not already existing\n let widget = this.element.querySelector(`${setWidget.tagName}[name=\"${field}\"]`);\n let initializing = false; // used to render widget only first time\n if (!widget) {\n widget = document.createElement(setWidget.tagName);\n initializing = true;\n }\n for (let name of Object.keys(attrs)) {\n this.defineAttribute(widget, name, attrs[name], setWidget.type);\n }\n if (widget.component && initializing) widget.component.render();\n let setFields = this.getSet(field);\n // Catch widget for the set if all these fields are empty\n if (this.element.hasAttribute('empty-' + field)) {\n let hasOnlyEmpty = true;\n for(let field of setFields) {\n let value: string = await this.getValue(field, this.resource);\n if (value !== '') { // if one not empty\n hasOnlyEmpty = false;\n continue; // break loop\n }\n };\n if(hasOnlyEmpty) { // if only empty values, return empty-widget\n const attributes = this.widgetAttributes(field, this.resource);\n const tagName = this.element.getAttribute(`empty-${field}`);\n const valueSet = this.element.getAttribute(`empty-${field}-value`);\n if (valueSet) attributes.value = valueSet;\n return preHTML`<${tagName} ...=${spread(attributes)}></${tagName}>`;\n };\n }\n\n // Render template\n const widgetsTemplate = await Promise.all(setFields.map((field: string) => this.createWidgetTemplate(field)));\n const template = html`${widgetsTemplate}`;\n render(template, widget.querySelector('[data-content]') || widget);\n return widget;\n },\n createString(value: string): TemplateResult {\n return html`\n <span>${value.slice(1, -1).replace(/\\\\(['\"])/g, '$1')}</span>\n `;\n },\n /**\n * Returns field name without starting \"@\"\n * @param field\n */\n getEscapedField(field: string): string {\n return field.startsWith('@') ? field.slice(1, field.length) : field;\n }\n}\n\nexport {\n WidgetMixin\n}"]}
@@ -193,6 +193,8 @@ export class BaseWidget extends HTMLElement {
193
193
  let index = 0;
194
194
 
195
195
  for (let res of resource['ldp:contains']) {
196
+ var _res$isContainer, _res;
197
+
196
198
  if (!res) {
197
199
  // child not in cache yet
198
200
  try {
@@ -203,7 +205,7 @@ export class BaseWidget extends HTMLElement {
203
205
  }
204
206
  }
205
207
 
206
- if (res.isContainer()) {
208
+ if ((_res$isContainer = (_res = res).isContainer) !== null && _res$isContainer !== void 0 && _res$isContainer.call(_res)) {
207
209
  // if nested container
208
210
  let resourcesFromContainer = await store.getData(res['@id'], this.context); // fetch the datas
209
211
 
@@ -1 +1 @@
1
- {"version":3,"sources":["baseWidget.ts"],"names":["evalTemplateString","store","BaseWidget","HTMLElement","Map","connectedCallback","render","disconnectedCallback","_subscriptions","forEach","subscription","PubSub","unsubscribe","innerHTML","template","src","name","label","placeholder","value","id","_value","escapedValue","range","htmlRange","multiple","editable","required","addEditButtons","initChangeEvents","hasAttribute","getAttribute","setAttribute","dataHolder","values","map","element","HTMLInputElement","type","checked","getValueHolder","length","undefined","dispatchEvent","Event","el","index","widgetDataHolders","Array","from","querySelectorAll","filter","dataHolderAncestor","parentElement","closest","contains","childTemplate","replace","context","_context","fetchSources","_range","_listen","getData","resource","resources","res","resourceId","getChildren","e","isContainer","resourcesFromContainer","push","rangeResources","selected","component","subscribe","event","callback","get","set","editableField","querySelector","editButton","document","createElement","innerText","onclick","activateEditableField","insertAdjacentElement","addEventListener","save","focus","bubbles","preventDefault","stopPropagation","removeAttribute","patch"],"mappings":"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","sourcesContent":["import { evalTemplateString } from '../libs/helpers';\nimport { store } from '../libs/store/store';\n\nexport class BaseWidget extends HTMLElement {\n private src: string | undefined;\n private multiple: string | undefined;\n private editable: string | undefined;\n private required: string | undefined;\n private resourceId: string | undefined;\n public _value: any | undefined;\n private _range: any | undefined;\n private _context: object | undefined;\n private _subscriptions = new Map();\n\n connectedCallback(): void {\n this.render();\n }\n disconnectedCallback(): void {\n this._subscriptions.forEach((subscription) => {\n PubSub.unsubscribe(subscription);\n })\n }\n async render() {\n this.innerHTML = await evalTemplateString(this.template, {\n src: this.src,\n name: this.name,\n label: this.label,\n placeholder: this.placeholder,\n value: this.value,\n id: (this._value && this._value['@id']) || '',\n escapedValue: this.escapedValue,\n range: await this.htmlRange,\n multiple: this.multiple,\n editable: this.editable === '' ? true : false,\n required: this.required === '' ? true : false\n });\n\n this.addEditButtons();\n this.initChangeEvents();\n }\n get label(): string | null {\n return this.hasAttribute('label') ? this.getAttribute('label') : this.name;\n }\n set label(label: string | null) {\n if(label != null) this.setAttribute('label', label);\n this.render();\n }\n get placeholder(): string | null {\n return this.hasAttribute('placeholder') ? this.getAttribute('placeholder') : this.label;\n }\n set placeholder(placeholder: string | null) {\n if(placeholder != null) this.setAttribute('placeholder', placeholder);\n this.render();\n }\n get name(): string | null {\n return this.getAttribute('name');\n }\n set name(name: string | null) {\n if(name) this.setAttribute('name', name);\n this.render();\n }\n get value() {\n if (this.dataHolder) {\n let values = this.dataHolder.map(element => {\n if (element instanceof HTMLInputElement && element.type == \"checkbox\") return element.checked;\n // if value is defined, push it in the array\n return this.getValueHolder(element).value;\n });\n // If only one value, do not return an array\n return values.length === 1 ? values[0] : values;\n }\n return this._value || '';\n }\n set value(value) {\n this._value = value; // ... store `value` in the widget\n if (this._value == null || this._value == undefined) return;\n\n if (this.dataHolder && this.dataHolder.length === 1) {\n // if one dataHolder in the widget...\n const element = this.getValueHolder(this.dataHolder[0]);\n if (element.type == \"checkbox\") {\n element.checked = value;\n } else {\n element.value = value; // ... set `value` to the dataHolder element\n }\n // remove when https://git.happy-dev.fr/startinblox/framework/sib-core/issues/426 fixed\n if (element.dispatchEvent) element.dispatchEvent(new Event('change')); // trigger change manually\n } else if (this.dataHolder && this.dataHolder.length > 1) {\n // if multiple dataHolder in the widget ...\n this.dataHolder.forEach(\n (el, index) => {\n const element = this.getValueHolder(el);\n if (element.type == \"checkbox\") {\n element.checked = value ? value[index] : ''\n } else {\n element.value = value ? value[index] : ''\n }\n element.dispatchEvent(new Event('change')); // trigger change manually\n },\n ); // ... set each `value` to each dataHolder element\n }\n\n this.render();\n }\n get ['each-label'](): string{\n return this.getAttribute('each-label') || '';\n }\n set ['each-label'](label: string) {\n this.setAttribute('each-label', label);\n }\n set ['add-label'](label: string) {\n this.setAttribute('add-label', label);\n }\n set ['remove-label'](label: string) {\n this.setAttribute('remove-label', label);\n }\n get dataHolder(): Element[] | null {\n const widgetDataHolders = Array.from(this.querySelectorAll('[data-holder]')).filter(element => {\n const dataHolderAncestor = element.parentElement ? element.parentElement.closest('[data-holder]') : null;\n // get the dataHolder of the widget only if no dataHolder ancestor in the current widget\n return dataHolderAncestor === this || !dataHolderAncestor || !this.contains(dataHolderAncestor)\n });\n\n return widgetDataHolders.length ? widgetDataHolders : null;\n }\n get template(): string {\n return '';\n }\n get childTemplate(): string {\n return '';\n }\n get escapedValue(): string {\n return ('' + this.value)\n .replace(/&/g, '&amp;')\n .replace(/'/g, '&apos;')\n .replace(/\"/g, '&quot;');\n }\n set context(value) {\n this._context = value;\n }\n get context() {\n return this._context || {};\n }\n\n get range(): any {\n return this.fetchSources(this._range);\n }\n set range(range) {\n (async () => {\n this._listen(range, async () => this._range = await store.getData(range, this.context));\n this._range = await store.getData(range, this.context);\n this.render();\n })();\n }\n async fetchSources(resource: any) {\n if (!resource || !resource['ldp:contains']) return null;\n let resources: any[] = [];\n let index = 0;\n for (let res of resource['ldp:contains']) {\n if (!res) { // child not in cache yet\n try {\n const resourceId = resource.getChildren()[index]['@id'];\n res = await store.getData(resourceId, this.context)\n } catch (e) { continue; }\n }\n if (res.isContainer()) { // if nested container\n let resourcesFromContainer = await store.getData(res['@id'], this.context); // fetch the datas\n this._listen(res['@id']);\n if (resourcesFromContainer) resources.push(...resourcesFromContainer['ldp:contains']);\n } else {\n resources.push(res);\n }\n index++;\n }\n return resources;\n }\n\n get htmlRange(): Promise<string | undefined> {\n return (async () => {\n let htmlRange = '';\n const rangeResources = await this.range;\n if (!rangeResources) return;\n for await (let element of rangeResources) {\n element = await store.getData(element['@id'], this.context); // fetch the resource to display the name\n this._listen(element['@id']);\n\n let selected: boolean;\n if (this._value && this._value.isContainer && this._value.isContainer()) { // selected options for multiple select\n selected = false;\n for await (let value of this._value[\"ldp:contains\"]) {\n if (value['@id'] == element['@id']) {\n selected = true;\n break;\n }\n }\n } else { // selected options for simple dropdowns\n selected = this._value ? this._value['@id'] == element['@id'] : false;\n }\n htmlRange += await evalTemplateString(this.childTemplate, {\n name: await element.name,\n id: element['@id'],\n selected: selected\n });\n }\n return htmlRange || '';\n })();\n }\n getValueHolder(element) {\n return element.component ? element.component : element;\n }\n\n subscribe(event: string) {\n this._listen(event);\n }\n\n _listen(id: string, callback: Function = () => {}) {\n if (!this._subscriptions.get(id)) {\n this._subscriptions.set(id, PubSub.subscribe(id, async () => {\n await callback();\n this.render();\n }))\n }\n }\n\n // Editable widgets\n addEditButtons(): void {\n const editableField = this.querySelector('[data-editable]') as HTMLElement;\n\n if (editableField) {\n // Add edit button\n const editButton = document.createElement('button');\n editButton.innerText = \"Modifier\";\n editButton.onclick = () => this.activateEditableField(editableField, editButton);\n editableField.insertAdjacentElement('afterend', editButton);\n\n // Save on focusout\n editableField.addEventListener('focusout', () => this.save(editableField, editButton));\n }\n }\n activateEditableField(editableField: HTMLElement, editButton: HTMLButtonElement): void {\n editableField.setAttribute('contenteditable', 'true');\n editableField.focus();\n editButton.setAttribute(\"disabled\", \"disabled\");\n }\n /**\n * Dispatch change events of data holders from the current widget\n */\n initChangeEvents(): void {\n if (this.dataHolder) {\n const event = new Event('change', { bubbles: true });\n this.dataHolder.forEach(element => {\n element.addEventListener('change', e => {\n e.preventDefault();\n e.stopPropagation();\n this.dispatchEvent(event);\n });\n });\n }\n }\n save(editableField: HTMLElement, editButton: HTMLButtonElement): void {\n editableField.setAttribute('contenteditable', 'false');\n editButton.removeAttribute(\"disabled\");\n\n if (!this.name) return;\n const resource = {};\n resource[this.name] = editableField.innerText;\n resource['@context'] = this.context;\n\n if(this.resourceId && resource) store.patch(resource, this.resourceId)\n }\n}\n"]}
1
+ {"version":3,"sources":["baseWidget.ts"],"names":["evalTemplateString","store","BaseWidget","HTMLElement","Map","connectedCallback","render","disconnectedCallback","_subscriptions","forEach","subscription","PubSub","unsubscribe","innerHTML","template","src","name","label","placeholder","value","id","_value","escapedValue","range","htmlRange","multiple","editable","required","addEditButtons","initChangeEvents","hasAttribute","getAttribute","setAttribute","dataHolder","values","map","element","HTMLInputElement","type","checked","getValueHolder","length","undefined","dispatchEvent","Event","el","index","widgetDataHolders","Array","from","querySelectorAll","filter","dataHolderAncestor","parentElement","closest","contains","childTemplate","replace","context","_context","fetchSources","_range","_listen","getData","resource","resources","res","resourceId","getChildren","e","isContainer","resourcesFromContainer","push","rangeResources","selected","component","subscribe","event","callback","get","set","editableField","querySelector","editButton","document","createElement","innerText","onclick","activateEditableField","insertAdjacentElement","addEventListener","save","focus","bubbles","preventDefault","stopPropagation","removeAttribute","patch"],"mappings":"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","sourcesContent":["import { evalTemplateString } from '../libs/helpers';\nimport { store } from '../libs/store/store';\n\nexport class BaseWidget extends HTMLElement {\n private src: string | undefined;\n private multiple: string | undefined;\n private editable: string | undefined;\n private required: string | undefined;\n private resourceId: string | undefined;\n public _value: any | undefined;\n private _range: any | undefined;\n private _context: object | undefined;\n private _subscriptions = new Map();\n\n connectedCallback(): void {\n this.render();\n }\n disconnectedCallback(): void {\n this._subscriptions.forEach((subscription) => {\n PubSub.unsubscribe(subscription);\n })\n }\n async render() {\n this.innerHTML = await evalTemplateString(this.template, {\n src: this.src,\n name: this.name,\n label: this.label,\n placeholder: this.placeholder,\n value: this.value,\n id: (this._value && this._value['@id']) || '',\n escapedValue: this.escapedValue,\n range: await this.htmlRange,\n multiple: this.multiple,\n editable: this.editable === '' ? true : false,\n required: this.required === '' ? true : false\n });\n\n this.addEditButtons();\n this.initChangeEvents();\n }\n get label(): string | null {\n return this.hasAttribute('label') ? this.getAttribute('label') : this.name;\n }\n set label(label: string | null) {\n if(label != null) this.setAttribute('label', label);\n this.render();\n }\n get placeholder(): string | null {\n return this.hasAttribute('placeholder') ? this.getAttribute('placeholder') : this.label;\n }\n set placeholder(placeholder: string | null) {\n if(placeholder != null) this.setAttribute('placeholder', placeholder);\n this.render();\n }\n get name(): string | null {\n return this.getAttribute('name');\n }\n set name(name: string | null) {\n if(name) this.setAttribute('name', name);\n this.render();\n }\n get value() {\n if (this.dataHolder) {\n let values = this.dataHolder.map(element => {\n if (element instanceof HTMLInputElement && element.type == \"checkbox\") return element.checked;\n // if value is defined, push it in the array\n return this.getValueHolder(element).value;\n });\n // If only one value, do not return an array\n return values.length === 1 ? values[0] : values;\n }\n return this._value || '';\n }\n set value(value) {\n this._value = value; // ... store `value` in the widget\n if (this._value == null || this._value == undefined) return;\n\n if (this.dataHolder && this.dataHolder.length === 1) {\n // if one dataHolder in the widget...\n const element = this.getValueHolder(this.dataHolder[0]);\n if (element.type == \"checkbox\") {\n element.checked = value;\n } else {\n element.value = value; // ... set `value` to the dataHolder element\n }\n // remove when https://git.happy-dev.fr/startinblox/framework/sib-core/issues/426 fixed\n if (element.dispatchEvent) element.dispatchEvent(new Event('change')); // trigger change manually\n } else if (this.dataHolder && this.dataHolder.length > 1) {\n // if multiple dataHolder in the widget ...\n this.dataHolder.forEach(\n (el, index) => {\n const element = this.getValueHolder(el);\n if (element.type == \"checkbox\") {\n element.checked = value ? value[index] : ''\n } else {\n element.value = value ? value[index] : ''\n }\n element.dispatchEvent(new Event('change')); // trigger change manually\n },\n ); // ... set each `value` to each dataHolder element\n }\n\n this.render();\n }\n get ['each-label'](): string{\n return this.getAttribute('each-label') || '';\n }\n set ['each-label'](label: string) {\n this.setAttribute('each-label', label);\n }\n set ['add-label'](label: string) {\n this.setAttribute('add-label', label);\n }\n set ['remove-label'](label: string) {\n this.setAttribute('remove-label', label);\n }\n get dataHolder(): Element[] | null {\n const widgetDataHolders = Array.from(this.querySelectorAll('[data-holder]')).filter(element => {\n const dataHolderAncestor = element.parentElement ? element.parentElement.closest('[data-holder]') : null;\n // get the dataHolder of the widget only if no dataHolder ancestor in the current widget\n return dataHolderAncestor === this || !dataHolderAncestor || !this.contains(dataHolderAncestor)\n });\n\n return widgetDataHolders.length ? widgetDataHolders : null;\n }\n get template(): string {\n return '';\n }\n get childTemplate(): string {\n return '';\n }\n get escapedValue(): string {\n return ('' + this.value)\n .replace(/&/g, '&amp;')\n .replace(/'/g, '&apos;')\n .replace(/\"/g, '&quot;');\n }\n set context(value) {\n this._context = value;\n }\n get context() {\n return this._context || {};\n }\n\n get range(): any {\n return this.fetchSources(this._range);\n }\n set range(range) {\n (async () => {\n this._listen(range, async () => this._range = await store.getData(range, this.context));\n this._range = await store.getData(range, this.context);\n this.render();\n })();\n }\n async fetchSources(resource: any) {\n if (!resource || !resource['ldp:contains']) return null;\n let resources: any[] = [];\n let index = 0;\n for (let res of resource['ldp:contains']) {\n if (!res) { // child not in cache yet\n try {\n const resourceId = resource.getChildren()[index]['@id'];\n res = await store.getData(resourceId, this.context)\n } catch (e) { continue; }\n }\n if (res.isContainer?.()) { // if nested container\n let resourcesFromContainer = await store.getData(res['@id'], this.context); // fetch the datas\n this._listen(res['@id']);\n if (resourcesFromContainer) resources.push(...resourcesFromContainer['ldp:contains']);\n } else {\n resources.push(res);\n }\n index++;\n }\n return resources;\n }\n\n get htmlRange(): Promise<string | undefined> {\n return (async () => {\n let htmlRange = '';\n const rangeResources = await this.range;\n if (!rangeResources) return;\n for await (let element of rangeResources) {\n element = await store.getData(element['@id'], this.context); // fetch the resource to display the name\n this._listen(element['@id']);\n\n let selected: boolean;\n if (this._value && this._value.isContainer && this._value.isContainer()) { // selected options for multiple select\n selected = false;\n for await (let value of this._value[\"ldp:contains\"]) {\n if (value['@id'] == element['@id']) {\n selected = true;\n break;\n }\n }\n } else { // selected options for simple dropdowns\n selected = this._value ? this._value['@id'] == element['@id'] : false;\n }\n htmlRange += await evalTemplateString(this.childTemplate, {\n name: await element.name,\n id: element['@id'],\n selected: selected\n });\n }\n return htmlRange || '';\n })();\n }\n getValueHolder(element) {\n return element.component ? element.component : element;\n }\n\n subscribe(event: string) {\n this._listen(event);\n }\n\n _listen(id: string, callback: Function = () => {}) {\n if (!this._subscriptions.get(id)) {\n this._subscriptions.set(id, PubSub.subscribe(id, async () => {\n await callback();\n this.render();\n }))\n }\n }\n\n // Editable widgets\n addEditButtons(): void {\n const editableField = this.querySelector('[data-editable]') as HTMLElement;\n\n if (editableField) {\n // Add edit button\n const editButton = document.createElement('button');\n editButton.innerText = \"Modifier\";\n editButton.onclick = () => this.activateEditableField(editableField, editButton);\n editableField.insertAdjacentElement('afterend', editButton);\n\n // Save on focusout\n editableField.addEventListener('focusout', () => this.save(editableField, editButton));\n }\n }\n activateEditableField(editableField: HTMLElement, editButton: HTMLButtonElement): void {\n editableField.setAttribute('contenteditable', 'true');\n editableField.focus();\n editButton.setAttribute(\"disabled\", \"disabled\");\n }\n /**\n * Dispatch change events of data holders from the current widget\n */\n initChangeEvents(): void {\n if (this.dataHolder) {\n const event = new Event('change', { bubbles: true });\n this.dataHolder.forEach(element => {\n element.addEventListener('change', e => {\n e.preventDefault();\n e.stopPropagation();\n this.dispatchEvent(event);\n });\n });\n }\n }\n save(editableField: HTMLElement, editButton: HTMLButtonElement): void {\n editableField.setAttribute('contenteditable', 'false');\n editButton.removeAttribute(\"disabled\");\n\n if (!this.name) return;\n const resource = {};\n resource[this.name] = editableField.innerText;\n resource['@context'] = this.context;\n\n if(this.resourceId && resource) store.patch(resource, this.resourceId)\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@startinblox/core",
3
- "version": "0.17.21-beta.10",
3
+ "version": "0.17.21-beta.12",
4
4
  "description": "This is a series of web component respecting both the web components standards and the Linked Data Platform convention.",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",