@ccrpc/webmapgl 0.18.4 → 0.18.6

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.
@@ -1 +1 @@
1
- {"file":"gl-form.entry.cjs.js","mappings":"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","names":["_t","h"],"sources":["src/components/form/form.tsx"],"sourcesContent":["import {\n h,\n Component,\n Element,\n Event,\n EventEmitter,\n Listen,\n Method,\n Prop,\n} from \"@stencil/core\";\nimport { _t } from \"../i18n/i18n\";\n\n@Component({\n tag: \"gl-form\",\n})\nexport class Form {\n private _schema: any;\n\n @Element() el: HTMLGlFormElement;\n\n /**\n * Emitted when the user cancels a form submission.\n */\n @Event() glFormCancel: EventEmitter;\n\n /**\n * Emitted when the feature properties are updated due to a field value\n * change.\n */\n @Event() glFormFeatureChanged: EventEmitter;\n\n /**\n * Emitted when the user submits the form.\n */\n @Event() glFormSubmit: EventEmitter;\n\n /**\n * Text for the cancel button.\n */\n @Prop() readonly cancelText: string;\n\n /**\n * The feature being modified by the form.\n * The form sets values in the 'properties' object of the feature.\n */\n @Prop() readonly feature: { properties: { [key: string]: any } };\n\n /**\n * ID of the form.\n */\n @Prop() readonly formId: string = `gl-form-${formId++}`;\n\n /**\n * The label displayed in the toolbar of the `gl-form-page`.\n */\n @Prop() readonly label: string;\n\n /**\n * The URL of the form schema JSON.\n */\n @Prop() readonly schema: string;\n\n /**\n * Text for the submit button.\n */\n @Prop() readonly submitText: string;\n\n /**\n * Treat labels in the form as i18n keys.\n */\n @Prop() readonly translateText: boolean = false;\n\n async componentWillLoad() {\n let res = await fetch(this.schema);\n this._schema = await res.json();\n }\n\n componentDidLoad() {\n let page = this.createFormPage(this.label);\n this.el.querySelector(\"ion-nav\").setRoot(page);\n }\n\n @Listen(\"glFieldValueChanged\")\n setValue(e: CustomEvent) {\n if (this.feature == undefined) return;\n this.feature.properties = this.feature.properties || {};\n this.feature.properties[e.detail.field.attribute] = e.detail.value;\n this.glFormFeatureChanged.emit({\n formId: this.formId,\n feature: this.feature,\n });\n }\n\n @Listen(\"glFormFacet\")\n handleFacet(e: CustomEvent) {\n let page = this.createFormPage(e.detail.label, e.detail.value);\n this.el.querySelector(\"ion-nav\").push(page);\n }\n\n /**\n * Cancels and closes the form\n */\n @Method()\n async cancel() {\n this.glFormCancel.emit({\n formId: this.formId,\n feature: this.feature,\n });\n }\n\n /**\n * Submits the form and passes the feature that has been edited along to glFormSubmit\n */\n @Method()\n async submit() {\n this.glFormSubmit.emit({\n formId: this.formId,\n feature: this.feature,\n });\n }\n\n private createFormPage(label?: string, formFacet?: string) {\n let page = document.createElement(\"gl-form-page\");\n page.formFacet = formFacet;\n page.facets = this.filter(this._schema.facets || [], formFacet);\n page.fields = this.filter(this._schema.fields || [], formFacet);\n page.root = formFacet != undefined;\n\n if (label != undefined) page.label = label;\n if (this.submitText != undefined) page.submitText = this.submitText;\n if (this.cancelText != undefined) page.cancelText = this.cancelText;\n\n return page;\n }\n\n private filter(items: any[], formFacet?: string) {\n return items\n .filter((item) => {\n let facets = item.facets || [];\n if (!facets.length && formFacet == undefined) return true;\n for (let facet of facets) {\n let escaped = facet.replace(/[.?+^$[\\]\\\\(){}|-]/g, \"\\\\$&\");\n let re = new RegExp(\"^\" + escaped.split(\"*\").join(\".*\") + \"$\");\n if (re.test(formFacet)) return true;\n }\n return false;\n })\n .map((item) => {\n let result = { ...item };\n if (this.translateText) result.label = _t(item.label);\n if (item.options) result.options = this.filter(item.options, formFacet);\n return result;\n });\n }\n\n render() {\n return <ion-nav></ion-nav>;\n }\n}\n\nlet formId = 0;\n"],"version":3}
1
+ {"file":"gl-form.entry.cjs.js","mappings":";;;;;;;;MAea,IAAI;;;;;;;;kBAmCmB,WAAW,MAAM,EAAE,EAAE;;;;yBAoBb,KAAK;;EAE/C,MAAM,iBAAiB;IACrB,IAAI,GAAG,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACnC,IAAI,CAAC,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;GACjC;EAED,gBAAgB;IACd,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;GAChD;EAGD,QAAQ,CAAC,CAAc;IACrB,IAAI,IAAI,CAAC,OAAO,IAAI,SAAS;MAAE,OAAO;IACtC,IAAI,CAAC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,EAAE,CAAC;IACxD,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;IACnE,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC;MAC7B,MAAM,EAAE,IAAI,CAAC,MAAM;MACnB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;GACJ;EAGD,WAAW,CAAC,CAAc;IACxB,IAAI,IAAI,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC/D,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;GAC7C;;;;EAMD,MAAM,MAAM;IACV,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;MACrB,MAAM,EAAE,IAAI,CAAC,MAAM;MACnB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;GACJ;;;;EAMD,MAAM,MAAM;IACV,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;MACrB,MAAM,EAAE,IAAI,CAAC,MAAM;MACnB,OAAO,EAAE,IAAI,CAAC,OAAO;KACtB,CAAC,CAAC;GACJ;EAEO,cAAc,CAAC,KAAc,EAAE,SAAkB;IACvD,IAAI,IAAI,GAAG,QAAQ,CAAC,aAAa,CAAC,cAAc,CAAC,CAAC;IAClD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC3B,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IAChE,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,SAAS,CAAC,CAAC;IAChE,IAAI,CAAC,IAAI,GAAG,SAAS,IAAI,SAAS,CAAC;IAEnC,IAAI,KAAK,IAAI,SAAS;MAAE,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IAC3C,IAAI,IAAI,CAAC,UAAU,IAAI,SAAS;MAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IACpE,IAAI,IAAI,CAAC,UAAU,IAAI,SAAS;MAAE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC;IAEpE,OAAO,IAAI,CAAC;GACb;EAEO,MAAM,CAAC,KAAY,EAAE,SAAkB;IAC7C,OAAO,KAAK;OACT,MAAM,CAAC,CAAC,IAAI;MACX,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC;MAC/B,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,SAAS,IAAI,SAAS;QAAE,OAAO,IAAI,CAAC;MAC1D,KAAK,IAAI,KAAK,IAAI,MAAM,EAAE;QACxB,IAAI,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,EAAE,GAAG,IAAI,MAAM,CAAC,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC;QAC/D,IAAI,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC;UAAE,OAAO,IAAI,CAAC;OACrC;MACD,OAAO,KAAK,CAAC;KACd,CAAC;OACD,GAAG,CAAC,CAAC,IAAI;MACR,IAAI,MAAM,qBAAQ,IAAI,CAAE,CAAC;MACzB,IAAI,IAAI,CAAC,aAAa,EAAE;QACtB,IAAI,MAAM,CAAC,KAAK;UAAE,MAAM,CAAC,KAAK,GAAGA,OAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChD,IAAI,MAAM,CAAC,WAAW;UAAE,MAAM,CAAC,WAAW,GAAGA,OAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;OACnE;MACD,IAAI,IAAI,CAAC,OAAO;QAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;MACxE,OAAO,MAAM,CAAC;KACf,CAAC,CAAC;GACN;EAED,MAAM;IACJ,OAAOC,wBAAmB,CAAC;GAC5B;;;AAGH,IAAI,MAAM,GAAG,CAAC;;;;","names":["_t","h"],"sources":["src/components/form/form.tsx"],"sourcesContent":["import {\n h,\n Component,\n Element,\n Event,\n EventEmitter,\n Listen,\n Method,\n Prop,\n} from \"@stencil/core\";\nimport { _t } from \"../i18n/i18n\";\n\n@Component({\n tag: \"gl-form\",\n})\nexport class Form {\n private _schema: any;\n\n @Element() el: HTMLGlFormElement;\n\n /**\n * Emitted when the user cancels a form submission.\n */\n @Event() glFormCancel: EventEmitter;\n\n /**\n * Emitted when the feature properties are updated due to a field value\n * change.\n */\n @Event() glFormFeatureChanged: EventEmitter;\n\n /**\n * Emitted when the user submits the form.\n */\n @Event() glFormSubmit: EventEmitter;\n\n /**\n * Text for the cancel button.\n */\n @Prop() readonly cancelText: string;\n\n /**\n * The feature being modified by the form.\n * The form sets values in the 'properties' object of the feature.\n */\n @Prop() readonly feature: { properties: { [key: string]: any } };\n\n /**\n * ID of the form.\n */\n @Prop() readonly formId: string = `gl-form-${formId++}`;\n\n /**\n * The label displayed in the toolbar of the `gl-form-page`.\n */\n @Prop() readonly label: string;\n\n /**\n * The URL of the form schema JSON.\n */\n @Prop() readonly schema: string;\n\n /**\n * Text for the submit button.\n */\n @Prop() readonly submitText: string;\n\n /**\n * Treat labels in the form as i18n keys.\n */\n @Prop() readonly translateText: boolean = false;\n\n async componentWillLoad() {\n let res = await fetch(this.schema);\n this._schema = await res.json();\n }\n\n componentDidLoad() {\n let page = this.createFormPage(this.label);\n this.el.querySelector(\"ion-nav\").setRoot(page);\n }\n\n @Listen(\"glFieldValueChanged\")\n setValue(e: CustomEvent) {\n if (this.feature == undefined) return;\n this.feature.properties = this.feature.properties || {};\n this.feature.properties[e.detail.field.attribute] = e.detail.value;\n this.glFormFeatureChanged.emit({\n formId: this.formId,\n feature: this.feature,\n });\n }\n\n @Listen(\"glFormFacet\")\n handleFacet(e: CustomEvent) {\n let page = this.createFormPage(e.detail.label, e.detail.value);\n this.el.querySelector(\"ion-nav\").push(page);\n }\n\n /**\n * Cancels and closes the form\n */\n @Method()\n async cancel() {\n this.glFormCancel.emit({\n formId: this.formId,\n feature: this.feature,\n });\n }\n\n /**\n * Submits the form and passes the feature that has been edited along to glFormSubmit\n */\n @Method()\n async submit() {\n this.glFormSubmit.emit({\n formId: this.formId,\n feature: this.feature,\n });\n }\n\n private createFormPage(label?: string, formFacet?: string) {\n let page = document.createElement(\"gl-form-page\");\n page.formFacet = formFacet;\n page.facets = this.filter(this._schema.facets || [], formFacet);\n page.fields = this.filter(this._schema.fields || [], formFacet);\n page.root = formFacet != undefined;\n\n if (label != undefined) page.label = label;\n if (this.submitText != undefined) page.submitText = this.submitText;\n if (this.cancelText != undefined) page.cancelText = this.cancelText;\n\n return page;\n }\n\n private filter(items: any[], formFacet?: string) {\n return items\n .filter((item) => {\n let facets = item.facets || [];\n if (!facets.length && formFacet == undefined) return true;\n for (let facet of facets) {\n let escaped = facet.replace(/[.?+^$[\\]\\\\(){}|-]/g, \"\\\\$&\");\n let re = new RegExp(\"^\" + escaped.split(\"*\").join(\".*\") + \"$\");\n if (re.test(formFacet)) return true;\n }\n return false;\n })\n .map((item) => {\n let result = { ...item };\n if (this.translateText) {\n if (result.label) result.label = _t(item.label);\n if (result.placeholder) result.placeholder = _t(item.placeholder);\n }\n if (item.options) result.options = this.filter(item.options, formFacet);\n return result;\n });\n }\n\n render() {\n return <ion-nav></ion-nav>;\n }\n}\n\nlet formId = 0;\n"],"version":3}
@@ -68,6 +68,11 @@ export class Field {
68
68
  getInputField() {
69
69
  return (h("ion-item", null, h("ion-label", { "text-wrap": true, position: "floating" }, this.label), h("ion-input", { onIonInput: this.onInput, type: "text", placeholder: this.placeholder, value: this._getValue() })));
70
70
  }
71
+ componentDidLoad() {
72
+ if (this.widget === "value") {
73
+ this.changed(this.placeholder);
74
+ }
75
+ }
71
76
  render() {
72
77
  if (this.widget === "radio") {
73
78
  return this.getRadioField();
@@ -81,6 +86,9 @@ export class Field {
81
86
  else if (this.widget == "instructions") {
82
87
  return this.getInstructionsField();
83
88
  }
89
+ else if (this.widget == "value") {
90
+ return null;
91
+ }
84
92
  else {
85
93
  return this.getInputField();
86
94
  }
@@ -197,8 +205,8 @@ export class Field {
197
205
  "type": "string",
198
206
  "mutable": false,
199
207
  "complexType": {
200
- "original": "| \"input\"\n | \"radio\"\n | \"select\"\n | \"textarea\"\n | \"instructions\"",
201
- "resolved": "\"input\" | \"instructions\" | \"radio\" | \"select\" | \"textarea\"",
208
+ "original": "| \"input\"\n | \"radio\"\n | \"select\"\n | \"textarea\"\n | \"instructions\"\n | \"value\"",
209
+ "resolved": "\"input\" | \"instructions\" | \"radio\" | \"select\" | \"textarea\" | \"value\"",
202
210
  "references": {}
203
211
  },
204
212
  "required": false,
@@ -1 +1 @@
1
- {"version":3,"file":"field.js","sourceRoot":"","sources":["../../../src/components/field/field.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n h,\n Component,\n Element,\n Event,\n EventEmitter,\n Listen,\n Method,\n Prop,\n State,\n Host,\n} from \"@stencil/core\";\nimport { _t } from \"../i18n/i18n\";\nimport {\n InputCustomEvent,\n SelectCustomEvent,\n TextareaCustomEvent,\n RadioGroupCustomEvent,\n} from \"@ionic/core\";\n\n@Component({\n tag: \"gl-field\",\n})\nexport class Field {\n @Element() el: HTMLGlFieldElement;\n\n /**\n * Emitted when the field value is changed by the user.\n */\n @Event() glFieldValueChanged: EventEmitter;\n\n @State() message: string;\n\n /**\n * The feature property that corresponds to the form field.\n */\n @Prop() readonly attribute: string;\n\n /**\n * Image URL for the field item.\n */\n @Prop() readonly image: string;\n\n /**\n * Label text for the field item.\n */\n @Prop() readonly label: string = \"\";\n\n /**\n * A placeholder prompt text to display to the user, valid only for textarea and input fields.\n */\n @Prop() readonly placeholder: string = \"\";\n\n /**\n * The field must be filled out before the form can be submitted.\n */\n @Prop() readonly required: boolean = false;\n\n /**\n * Field type. It is not currently used.\n */\n @Prop() readonly type: any;\n\n /**\n * Widget used to render the field.\n */\n @Prop() readonly widget:\n | \"input\"\n | \"radio\"\n | \"select\"\n | \"textarea\"\n | \"instructions\";\n\n @Listen(\"glOptionChanged\")\n optionChanged(e) {\n this.changed(e.detail);\n }\n\n private _getValue() {\n const form = this.el.closest(\"gl-form\");\n if (form.feature == undefined || form.feature.properties == undefined)\n return;\n return form.feature.properties[this.attribute];\n }\n\n /**\n * Returns whether this field is valid\n * @returns\n */\n @Method()\n async isValid() {\n return this.validate() == null;\n }\n\n /**\n * Returns the value of the attribute of the feature this form is editing\n * @returns value of the attribute of the feature\n */\n @Method()\n async getValue() {\n return this._getValue();\n }\n\n /**\n * Checks whether the value is required and also present\n * If it is not returns an error text, if it is valid returns null\n * @returns\n */\n @Method()\n async validate() {\n const value = await this.getValue();\n if (this.required && (value == undefined || value === \"\"))\n return _t(\"webmapgl.field.required\", { field: this.label });\n\n return null;\n }\n\n private changed(value: any) {\n this.glFieldValueChanged.emit({\n field: this,\n value: value,\n });\n }\n\n private onChange = (e: SelectCustomEvent | RadioGroupCustomEvent) =>\n this.changed(e.detail.value);\n\n private getRadioField() {\n return (\n <Host>\n <ion-list-header>{this.label}</ion-list-header>\n <ion-radio-group onIonChange={this.onChange}>\n <slot />\n </ion-radio-group>\n </Host>\n );\n }\n\n private getSelectField() {\n return (\n <ion-item>\n <ion-label>{this.label}</ion-label>,\n <ion-select onIonChange={this.onChange} value={this.getValue()}>\n <slot />\n </ion-select>\n </ion-item>\n );\n }\n\n private onInput = (e: TextareaCustomEvent | InputCustomEvent) =>\n this.changed(e.detail.value);\n\n private getTextareaField() {\n return (\n <ion-item>\n {this.label !== \"\" ? (\n <ion-label text-wrap position=\"floating\">\n {this.label}\n </ion-label>\n ) : (\n \"\"\n )}\n <ion-textarea\n onIonInput={this.onInput}\n placeholder={this.placeholder}\n value={this._getValue() || \"\"}\n legacy={true} // We are opting for the legacy version of labels for textarea as there is no other way to text-wrap the label\n ></ion-textarea>\n </ion-item>\n );\n }\n\n private getInstructionsField() {\n return (\n <ion-item>\n <ion-textarea readonly={true} value={this.label}></ion-textarea>\n </ion-item>\n );\n }\n\n private getInputField() {\n return (\n <ion-item>\n <ion-label text-wrap position=\"floating\">\n {this.label}\n </ion-label>\n <ion-input\n onIonInput={this.onInput}\n type=\"text\"\n placeholder={this.placeholder}\n value={this._getValue()}\n ></ion-input>\n </ion-item>\n );\n }\n\n render() {\n if (this.widget === \"radio\") {\n return this.getRadioField();\n } else if (this.widget === \"select\") {\n return this.getSelectField();\n } else if (this.widget == \"textarea\") {\n return this.getTextareaField();\n } else if (this.widget == \"instructions\") {\n return this.getInstructionsField();\n } else {\n return this.getInputField();\n }\n }\n}\n"]}
1
+ {"version":3,"file":"field.js","sourceRoot":"","sources":["../../../src/components/field/field.tsx"],"names":[],"mappings":"AAAA,OAAO,EACL,CAAC,EACD,SAAS,EACT,OAAO,EACP,KAAK,EAEL,MAAM,EACN,MAAM,EACN,IAAI,EACJ,KAAK,EACL,IAAI,GACL,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAWlC,MAAM,OAAO,KAAK;;IAsGR,aAAQ,GAAG,CAAC,CAA4C,EAAE,EAAE,CAClE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAwBvB,YAAO,GAAG,CAAC,CAAyC,EAAE,EAAE,CAC9D,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;;;;iBAzGE,EAAE;uBAKI,EAAE;oBAKJ,KAAK;;;;EAmB1C,aAAa,CAAC,CAAC;IACb,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;EACzB,CAAC;EAEO,SAAS;IACf,MAAM,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACxC,IAAI,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,SAAS;MACnE,OAAO;IACT,OAAO,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EACjD,CAAC;EAED;;;KAGG;EAEH,KAAK,CAAC,OAAO;IACX,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC;EACjC,CAAC;EAED;;;KAGG;EAEH,KAAK,CAAC,QAAQ;IACZ,OAAO,IAAI,CAAC,SAAS,EAAE,CAAC;EAC1B,CAAC;EAED;;;;KAIG;EAEH,KAAK,CAAC,QAAQ;IACZ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;IACpC,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,KAAK,IAAI,SAAS,IAAI,KAAK,KAAK,EAAE,CAAC;MACvD,OAAO,EAAE,CAAC,yBAAyB,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IAE9D,OAAO,IAAI,CAAC;EACd,CAAC;EAEO,OAAO,CAAC,KAAU;IACxB,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC;MAC5B,KAAK,EAAE,IAAI;MACX,KAAK,EAAE,KAAK;KACb,CAAC,CAAC;EACL,CAAC;EAKO,aAAa;IACnB,OAAO,CACL,EAAC,IAAI;MACH,2BAAkB,IAAI,CAAC,KAAK,CAAmB;MAC/C,uBAAiB,WAAW,EAAE,IAAI,CAAC,QAAQ;QACzC,eAAQ,CACQ,CACb,CACR,CAAC;EACJ,CAAC;EAEO,cAAc;IACpB,OAAO,CACL;MACE,qBAAY,IAAI,CAAC,KAAK,CAAa;;MACnC,kBAAY,WAAW,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE;QAC5D,eAAQ,CACG,CACJ,CACZ,CAAC;EACJ,CAAC;EAKO,gBAAgB;IACtB,OAAO,CACL;MACG,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC,CACnB,oCAAqB,QAAQ,EAAC,UAAU,IACrC,IAAI,CAAC,KAAK,CACD,CACb,CAAC,CAAC,CAAC,CACF,EAAE,CACH;MACD,oBACE,UAAU,EAAE,IAAI,CAAC,OAAO,EACxB,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,EAC7B,MAAM,EAAE,IAAI,GACE,CACP,CACZ,CAAC;EACJ,CAAC;EAEO,oBAAoB;IAC1B,OAAO,CACL;MACE,oBAAc,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,GAAiB,CACvD,CACZ,CAAC;EACJ,CAAC;EAEO,aAAa;IACnB,OAAO,CACL;MACE,oCAAqB,QAAQ,EAAC,UAAU,IACrC,IAAI,CAAC,KAAK,CACD;MACZ,iBACE,UAAU,EAAE,IAAI,CAAC,OAAO,EACxB,IAAI,EAAC,MAAM,EACX,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,KAAK,EAAE,IAAI,CAAC,SAAS,EAAE,GACZ,CACJ,CACZ,CAAC;EACJ,CAAC;EAED,gBAAgB;IACd,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;MAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;KAChC;EACH,CAAC;EAED,MAAM;IACJ,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;MAC3B,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;KAC7B;SAAM,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE;MACnC,OAAO,IAAI,CAAC,cAAc,EAAE,CAAC;KAC9B;SAAM,IAAI,IAAI,CAAC,MAAM,IAAI,UAAU,EAAE;MACpC,OAAO,IAAI,CAAC,gBAAgB,EAAE,CAAC;KAChC;SAAM,IAAI,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE;MACxC,OAAO,IAAI,CAAC,oBAAoB,EAAE,CAAC;KACpC;SAAM,IAAI,IAAI,CAAC,MAAM,IAAI,OAAO,EAAE;MACjC,OAAO,IAAI,CAAC;KACb;SAAM;MACL,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;KAC7B;EACH,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CACF","sourcesContent":["import {\n h,\n Component,\n Element,\n Event,\n EventEmitter,\n Listen,\n Method,\n Prop,\n State,\n Host,\n} from \"@stencil/core\";\nimport { _t } from \"../i18n/i18n\";\nimport {\n InputCustomEvent,\n SelectCustomEvent,\n TextareaCustomEvent,\n RadioGroupCustomEvent,\n} from \"@ionic/core\";\n\n@Component({\n tag: \"gl-field\",\n})\nexport class Field {\n @Element() el: HTMLGlFieldElement;\n\n /**\n * Emitted when the field value is changed by the user.\n */\n @Event() glFieldValueChanged: EventEmitter;\n\n @State() message: string;\n\n /**\n * The feature property that corresponds to the form field.\n */\n @Prop() readonly attribute: string;\n\n /**\n * Image URL for the field item.\n */\n @Prop() readonly image: string;\n\n /**\n * Label text for the field item.\n */\n @Prop() readonly label: string = \"\";\n\n /**\n * A placeholder prompt text to display to the user, valid only for textarea and input fields.\n */\n @Prop() readonly placeholder: string = \"\";\n\n /**\n * The field must be filled out before the form can be submitted.\n */\n @Prop() readonly required: boolean = false;\n\n /**\n * Field type. It is not currently used.\n */\n @Prop() readonly type: any;\n\n /**\n * Widget used to render the field.\n */\n @Prop() readonly widget:\n | \"input\"\n | \"radio\"\n | \"select\"\n | \"textarea\"\n | \"instructions\"\n | \"value\";\n\n @Listen(\"glOptionChanged\")\n optionChanged(e) {\n this.changed(e.detail);\n }\n\n private _getValue() {\n const form = this.el.closest(\"gl-form\");\n if (form.feature == undefined || form.feature.properties == undefined)\n return;\n return form.feature.properties[this.attribute];\n }\n\n /**\n * Returns whether this field is valid\n * @returns\n */\n @Method()\n async isValid() {\n return this.validate() == null;\n }\n\n /**\n * Returns the value of the attribute of the feature this form is editing\n * @returns value of the attribute of the feature\n */\n @Method()\n async getValue() {\n return this._getValue();\n }\n\n /**\n * Checks whether the value is required and also present\n * If it is not returns an error text, if it is valid returns null\n * @returns\n */\n @Method()\n async validate() {\n const value = await this.getValue();\n if (this.required && (value == undefined || value === \"\"))\n return _t(\"webmapgl.field.required\", { field: this.label });\n\n return null;\n }\n\n private changed(value: any) {\n this.glFieldValueChanged.emit({\n field: this,\n value: value,\n });\n }\n\n private onChange = (e: SelectCustomEvent | RadioGroupCustomEvent) =>\n this.changed(e.detail.value);\n\n private getRadioField() {\n return (\n <Host>\n <ion-list-header>{this.label}</ion-list-header>\n <ion-radio-group onIonChange={this.onChange}>\n <slot />\n </ion-radio-group>\n </Host>\n );\n }\n\n private getSelectField() {\n return (\n <ion-item>\n <ion-label>{this.label}</ion-label>,\n <ion-select onIonChange={this.onChange} value={this.getValue()}>\n <slot />\n </ion-select>\n </ion-item>\n );\n }\n\n private onInput = (e: TextareaCustomEvent | InputCustomEvent) =>\n this.changed(e.detail.value);\n\n private getTextareaField() {\n return (\n <ion-item>\n {this.label !== \"\" ? (\n <ion-label text-wrap position=\"floating\">\n {this.label}\n </ion-label>\n ) : (\n \"\"\n )}\n <ion-textarea\n onIonInput={this.onInput}\n placeholder={this.placeholder}\n value={this._getValue() || \"\"}\n legacy={true} // We are opting for the legacy version of labels for textarea as there is no other way to text-wrap the label\n ></ion-textarea>\n </ion-item>\n );\n }\n\n private getInstructionsField() {\n return (\n <ion-item>\n <ion-textarea readonly={true} value={this.label}></ion-textarea>\n </ion-item>\n );\n }\n\n private getInputField() {\n return (\n <ion-item>\n <ion-label text-wrap position=\"floating\">\n {this.label}\n </ion-label>\n <ion-input\n onIonInput={this.onInput}\n type=\"text\"\n placeholder={this.placeholder}\n value={this._getValue()}\n ></ion-input>\n </ion-item>\n );\n }\n\n componentDidLoad() {\n if (this.widget === \"value\") {\n this.changed(this.placeholder);\n }\n }\n\n render() {\n if (this.widget === \"radio\") {\n return this.getRadioField();\n } else if (this.widget === \"select\") {\n return this.getSelectField();\n } else if (this.widget == \"textarea\") {\n return this.getTextareaField();\n } else if (this.widget == \"instructions\") {\n return this.getInstructionsField();\n } else if (this.widget == \"value\") {\n return null;\n } else {\n return this.getInputField();\n }\n }\n}\n"]}
@@ -80,8 +80,12 @@ export class Form {
80
80
  })
81
81
  .map((item) => {
82
82
  let result = Object.assign({}, item);
83
- if (this.translateText)
84
- result.label = _t(item.label);
83
+ if (this.translateText) {
84
+ if (result.label)
85
+ result.label = _t(item.label);
86
+ if (result.placeholder)
87
+ result.placeholder = _t(item.placeholder);
88
+ }
85
89
  if (item.options)
86
90
  result.options = this.filter(item.options, formFacet);
87
91
  return result;
@@ -1 +1 @@
1
- {"version":3,"file":"form.js","sourceRoot":"","sources":["../../../src/components/form/form.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n h,\n Component,\n Element,\n Event,\n EventEmitter,\n Listen,\n Method,\n Prop,\n} from \"@stencil/core\";\nimport { _t } from \"../i18n/i18n\";\n\n@Component({\n tag: \"gl-form\",\n})\nexport class Form {\n private _schema: any;\n\n @Element() el: HTMLGlFormElement;\n\n /**\n * Emitted when the user cancels a form submission.\n */\n @Event() glFormCancel: EventEmitter;\n\n /**\n * Emitted when the feature properties are updated due to a field value\n * change.\n */\n @Event() glFormFeatureChanged: EventEmitter;\n\n /**\n * Emitted when the user submits the form.\n */\n @Event() glFormSubmit: EventEmitter;\n\n /**\n * Text for the cancel button.\n */\n @Prop() readonly cancelText: string;\n\n /**\n * The feature being modified by the form.\n * The form sets values in the 'properties' object of the feature.\n */\n @Prop() readonly feature: { properties: { [key: string]: any } };\n\n /**\n * ID of the form.\n */\n @Prop() readonly formId: string = `gl-form-${formId++}`;\n\n /**\n * The label displayed in the toolbar of the `gl-form-page`.\n */\n @Prop() readonly label: string;\n\n /**\n * The URL of the form schema JSON.\n */\n @Prop() readonly schema: string;\n\n /**\n * Text for the submit button.\n */\n @Prop() readonly submitText: string;\n\n /**\n * Treat labels in the form as i18n keys.\n */\n @Prop() readonly translateText: boolean = false;\n\n async componentWillLoad() {\n let res = await fetch(this.schema);\n this._schema = await res.json();\n }\n\n componentDidLoad() {\n let page = this.createFormPage(this.label);\n this.el.querySelector(\"ion-nav\").setRoot(page);\n }\n\n @Listen(\"glFieldValueChanged\")\n setValue(e: CustomEvent) {\n if (this.feature == undefined) return;\n this.feature.properties = this.feature.properties || {};\n this.feature.properties[e.detail.field.attribute] = e.detail.value;\n this.glFormFeatureChanged.emit({\n formId: this.formId,\n feature: this.feature,\n });\n }\n\n @Listen(\"glFormFacet\")\n handleFacet(e: CustomEvent) {\n let page = this.createFormPage(e.detail.label, e.detail.value);\n this.el.querySelector(\"ion-nav\").push(page);\n }\n\n /**\n * Cancels and closes the form\n */\n @Method()\n async cancel() {\n this.glFormCancel.emit({\n formId: this.formId,\n feature: this.feature,\n });\n }\n\n /**\n * Submits the form and passes the feature that has been edited along to glFormSubmit\n */\n @Method()\n async submit() {\n this.glFormSubmit.emit({\n formId: this.formId,\n feature: this.feature,\n });\n }\n\n private createFormPage(label?: string, formFacet?: string) {\n let page = document.createElement(\"gl-form-page\");\n page.formFacet = formFacet;\n page.facets = this.filter(this._schema.facets || [], formFacet);\n page.fields = this.filter(this._schema.fields || [], formFacet);\n page.root = formFacet != undefined;\n\n if (label != undefined) page.label = label;\n if (this.submitText != undefined) page.submitText = this.submitText;\n if (this.cancelText != undefined) page.cancelText = this.cancelText;\n\n return page;\n }\n\n private filter(items: any[], formFacet?: string) {\n return items\n .filter((item) => {\n let facets = item.facets || [];\n if (!facets.length && formFacet == undefined) return true;\n for (let facet of facets) {\n let escaped = facet.replace(/[.?+^$[\\]\\\\(){}|-]/g, \"\\\\$&\");\n let re = new RegExp(\"^\" + escaped.split(\"*\").join(\".*\") + \"$\");\n if (re.test(formFacet)) return true;\n }\n return false;\n })\n .map((item) => {\n let result = { ...item };\n if (this.translateText) result.label = _t(item.label);\n if (item.options) result.options = this.filter(item.options, formFacet);\n return result;\n });\n }\n\n render() {\n return <ion-nav></ion-nav>;\n }\n}\n\nlet formId = 0;\n"]}
1
+ {"version":3,"file":"form.js","sourceRoot":"","sources":["../../../src/components/form/form.tsx"],"names":[],"mappings":"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","sourcesContent":["import {\n h,\n Component,\n Element,\n Event,\n EventEmitter,\n Listen,\n Method,\n Prop,\n} from \"@stencil/core\";\nimport { _t } from \"../i18n/i18n\";\n\n@Component({\n tag: \"gl-form\",\n})\nexport class Form {\n private _schema: any;\n\n @Element() el: HTMLGlFormElement;\n\n /**\n * Emitted when the user cancels a form submission.\n */\n @Event() glFormCancel: EventEmitter;\n\n /**\n * Emitted when the feature properties are updated due to a field value\n * change.\n */\n @Event() glFormFeatureChanged: EventEmitter;\n\n /**\n * Emitted when the user submits the form.\n */\n @Event() glFormSubmit: EventEmitter;\n\n /**\n * Text for the cancel button.\n */\n @Prop() readonly cancelText: string;\n\n /**\n * The feature being modified by the form.\n * The form sets values in the 'properties' object of the feature.\n */\n @Prop() readonly feature: { properties: { [key: string]: any } };\n\n /**\n * ID of the form.\n */\n @Prop() readonly formId: string = `gl-form-${formId++}`;\n\n /**\n * The label displayed in the toolbar of the `gl-form-page`.\n */\n @Prop() readonly label: string;\n\n /**\n * The URL of the form schema JSON.\n */\n @Prop() readonly schema: string;\n\n /**\n * Text for the submit button.\n */\n @Prop() readonly submitText: string;\n\n /**\n * Treat labels in the form as i18n keys.\n */\n @Prop() readonly translateText: boolean = false;\n\n async componentWillLoad() {\n let res = await fetch(this.schema);\n this._schema = await res.json();\n }\n\n componentDidLoad() {\n let page = this.createFormPage(this.label);\n this.el.querySelector(\"ion-nav\").setRoot(page);\n }\n\n @Listen(\"glFieldValueChanged\")\n setValue(e: CustomEvent) {\n if (this.feature == undefined) return;\n this.feature.properties = this.feature.properties || {};\n this.feature.properties[e.detail.field.attribute] = e.detail.value;\n this.glFormFeatureChanged.emit({\n formId: this.formId,\n feature: this.feature,\n });\n }\n\n @Listen(\"glFormFacet\")\n handleFacet(e: CustomEvent) {\n let page = this.createFormPage(e.detail.label, e.detail.value);\n this.el.querySelector(\"ion-nav\").push(page);\n }\n\n /**\n * Cancels and closes the form\n */\n @Method()\n async cancel() {\n this.glFormCancel.emit({\n formId: this.formId,\n feature: this.feature,\n });\n }\n\n /**\n * Submits the form and passes the feature that has been edited along to glFormSubmit\n */\n @Method()\n async submit() {\n this.glFormSubmit.emit({\n formId: this.formId,\n feature: this.feature,\n });\n }\n\n private createFormPage(label?: string, formFacet?: string) {\n let page = document.createElement(\"gl-form-page\");\n page.formFacet = formFacet;\n page.facets = this.filter(this._schema.facets || [], formFacet);\n page.fields = this.filter(this._schema.fields || [], formFacet);\n page.root = formFacet != undefined;\n\n if (label != undefined) page.label = label;\n if (this.submitText != undefined) page.submitText = this.submitText;\n if (this.cancelText != undefined) page.cancelText = this.cancelText;\n\n return page;\n }\n\n private filter(items: any[], formFacet?: string) {\n return items\n .filter((item) => {\n let facets = item.facets || [];\n if (!facets.length && formFacet == undefined) return true;\n for (let facet of facets) {\n let escaped = facet.replace(/[.?+^$[\\]\\\\(){}|-]/g, \"\\\\$&\");\n let re = new RegExp(\"^\" + escaped.split(\"*\").join(\".*\") + \"$\");\n if (re.test(formFacet)) return true;\n }\n return false;\n })\n .map((item) => {\n let result = { ...item };\n if (this.translateText) {\n if (result.label) result.label = _t(item.label);\n if (result.placeholder) result.placeholder = _t(item.placeholder);\n }\n if (item.options) result.options = this.filter(item.options, formFacet);\n return result;\n });\n }\n\n render() {\n return <ion-nav></ion-nav>;\n }\n}\n\nlet formId = 0;\n"]}
@@ -103,6 +103,11 @@ const Field = class {
103
103
  getInputField() {
104
104
  return (h("ion-item", null, h("ion-label", { "text-wrap": true, position: "floating" }, this.label), h("ion-input", { onIonInput: this.onInput, type: "text", placeholder: this.placeholder, value: this._getValue() })));
105
105
  }
106
+ componentDidLoad() {
107
+ if (this.widget === "value") {
108
+ this.changed(this.placeholder);
109
+ }
110
+ }
106
111
  render() {
107
112
  if (this.widget === "radio") {
108
113
  return this.getRadioField();
@@ -116,6 +121,9 @@ const Field = class {
116
121
  else if (this.widget == "instructions") {
117
122
  return this.getInstructionsField();
118
123
  }
124
+ else if (this.widget == "value") {
125
+ return null;
126
+ }
119
127
  else {
120
128
  return this.getInputField();
121
129
  }