-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathiframeFeatureInfoView.js
86 lines (77 loc) · 2.24 KB
/
iframeFeatureInfoView.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import { renderTemplate } from '../components/form-output/markdownHelper.js';
import AbstractFeatureInfoView from './abstractFeatureInfoView.js';
import IframeComponent from './IframeComponent.vue';
/**
* @typedef {import("./abstractFeatureInfoView.js").FeatureInfoViewOptions & { src: string, title?: string }} IframeFeatureInfoViewOptions
* @property {string} src - Specifies the address of the document to embed in the <iframe>. Variables wrapped in `${}` are replaced by their values, e.g. `${featureId}` or `${gml:name}`
* @property {string} [title] - optional title for the <iframe>
*/
/**
* @typedef {import("./abstractFeatureInfoView.js.js").FeatureInfoProps & { src: string, title?: string }} IframeFeatureInfoViewProps
*/
/**
* @class
* @description An iframe view.
* @extends {AbstractFeatureInfoView}
*/
class IframeFeatureInfoView extends AbstractFeatureInfoView {
/**
* @type {string}
*/
static get className() {
return 'IframeFeatureInfoView';
}
/**
* @param {IframeFeatureInfoViewOptions} options
*/
constructor(options) {
super(options, IframeComponent);
/**
* @type {string}
*/
this.src = options.src;
/**
* @type {string|undefined}
*/
this.title = options.title || undefined;
}
/**
* @param {Record<string, unknown>} attributes
* @protected
* @returns {string}
*/
_renderTemplate(attributes) {
return renderTemplate(this.src, attributes);
}
/**
* Supports markdown templates (e.g. {{someProperty}}) and style expressions to derive a URL
* @param {import("./featureInfo.js").FeatureInfoEvent} featureInfo
* @param {import("@vcmap/core").Layer} layer
* @returns {IframeFeatureInfoViewProps}
*/
getProperties(featureInfo, layer) {
const properties = super.getProperties(featureInfo, layer);
return {
...properties,
src: this._renderTemplate({
...properties,
...properties.attributes,
}),
title: this.title,
};
}
/**
* @returns {IframeFeatureInfoViewOptions}
*/
toJSON() {
const config = super.toJSON();
if (this.src) {
config.src = this.src;
}
if (this.title) {
config.title = this.title;
}
return config;
}
}
export default IframeFeatureInfoView;