@soonspacejs/plugin-poi-renderer 2.13.14 → 2.13.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js +1 -92
- package/package.json +3 -3
- package/dist/index.esm.js.map +0 -1
package/dist/index.esm.js
CHANGED
|
@@ -1,92 +1 @@
|
|
|
1
|
-
const
|
|
2
|
-
width: '400px',
|
|
3
|
-
height: '300px',
|
|
4
|
-
backgroundColor: 'black',
|
|
5
|
-
};
|
|
6
|
-
var PoiContentTypeEnum;
|
|
7
|
-
(function (PoiContentTypeEnum) {
|
|
8
|
-
PoiContentTypeEnum["PANEL"] = "PANEL";
|
|
9
|
-
PoiContentTypeEnum["VIDEO"] = "VIDEO";
|
|
10
|
-
PoiContentTypeEnum["VIDEO_STREAM"] = "VIDEO_STREAM";
|
|
11
|
-
})(PoiContentTypeEnum || (PoiContentTypeEnum = {}));
|
|
12
|
-
class PatrolControlsPlugin {
|
|
13
|
-
constructor(ssp) {
|
|
14
|
-
this.ssp = ssp;
|
|
15
|
-
this.poiIdSet = new Set();
|
|
16
|
-
}
|
|
17
|
-
resetStyleName(styleName) {
|
|
18
|
-
const strArr = [...styleName];
|
|
19
|
-
for (const i in strArr) {
|
|
20
|
-
if (strArr[i] !== strArr[i].toLowerCase()) {
|
|
21
|
-
strArr[i] = `-${strArr[i].toLowerCase()}`;
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return strArr.join('');
|
|
25
|
-
}
|
|
26
|
-
mergeElementStyle(style) {
|
|
27
|
-
let cssText = '';
|
|
28
|
-
for (const i in style) {
|
|
29
|
-
cssText += `${this.resetStyleName(i)}: ${style[i]};`;
|
|
30
|
-
}
|
|
31
|
-
return cssText;
|
|
32
|
-
}
|
|
33
|
-
renderCustom(options) {
|
|
34
|
-
const { tagName, style = DefaultStyle, innerHTML, } = options;
|
|
35
|
-
const el = document.createElement(tagName);
|
|
36
|
-
el.style.cssText = this.mergeElementStyle(style);
|
|
37
|
-
innerHTML && (el.innerHTML = innerHTML);
|
|
38
|
-
return this.ssp.createPoiNode(Object.assign(Object.assign({}, options), { element: el }));
|
|
39
|
-
}
|
|
40
|
-
renderVideo(options) {
|
|
41
|
-
const { src, style = DefaultStyle, isLoop = true, autoPlay = true, } = options;
|
|
42
|
-
const el = document.createElement('video');
|
|
43
|
-
el.style.cssText = this.mergeElementStyle(style);
|
|
44
|
-
el.controls = true;
|
|
45
|
-
el.muted = true;
|
|
46
|
-
el.loop = isLoop;
|
|
47
|
-
el.autoplay = autoPlay;
|
|
48
|
-
src && (el.src = src);
|
|
49
|
-
return this.ssp.createPoiNode(Object.assign(Object.assign({}, options), { element: el }));
|
|
50
|
-
}
|
|
51
|
-
renderPanel(options) {
|
|
52
|
-
const { dataSource, rowStyle, labelStyle, valueStyle, } = options;
|
|
53
|
-
const innerHTML = dataSource
|
|
54
|
-
.map((i) => `<div style="${this.mergeElementStyle(rowStyle || {})}">
|
|
55
|
-
<span style="${this.mergeElementStyle(labelStyle || {})}">${i.label}</span>
|
|
56
|
-
<span style="${this.mergeElementStyle(valueStyle || {})}">${i.value}</span>
|
|
57
|
-
</div>`)
|
|
58
|
-
.join('');
|
|
59
|
-
return this.renderCustom(Object.assign(Object.assign({ tagName: 'div' }, options), { innerHTML }));
|
|
60
|
-
}
|
|
61
|
-
batchRender(batchOptions) {
|
|
62
|
-
const { dataSource, } = batchOptions;
|
|
63
|
-
this.poiIdSet.forEach(id => {
|
|
64
|
-
this.ssp.removeObjectById(id);
|
|
65
|
-
});
|
|
66
|
-
this.poiIdSet.clear();
|
|
67
|
-
const createPoiNode = (poiData) => {
|
|
68
|
-
const { id, pid, width, height, dataSource, fileUrl, style, visible, } = poiData;
|
|
69
|
-
let poiNode = this.ssp.getObjectById(id);
|
|
70
|
-
const nexVisible = visible;
|
|
71
|
-
this.poiIdSet.add(id);
|
|
72
|
-
if (poiData.contentType === PoiContentTypeEnum.VIDEO) {
|
|
73
|
-
poiNode = this.renderVideo(Object.assign(Object.assign({}, poiData), { src: fileUrl, visible: nexVisible, style: {
|
|
74
|
-
width: width + 'px',
|
|
75
|
-
height: height + 'px',
|
|
76
|
-
} }));
|
|
77
|
-
}
|
|
78
|
-
else if (poiData.contentType === PoiContentTypeEnum.PANEL) {
|
|
79
|
-
const { panel: { bodyStyle, rowStyle, labelStyle, valueStyle, }, } = JSON.parse(style);
|
|
80
|
-
poiNode = this.renderPanel(Object.assign(Object.assign({}, poiData), { visible: nexVisible, style: Object.assign(Object.assign({ width: width + 'px', height: height + 'px', backgroundImage: `url(${fileUrl})`, overflow: 'auto' }, bodyStyle), { padding: bodyStyle.padding + 'px' }), rowStyle: Object.assign(Object.assign({}, rowStyle), { gap: rowStyle.gap + 'px' }), labelStyle: Object.assign(Object.assign({}, labelStyle), { fontSize: labelStyle.fontSize + 'px' }), valueStyle: Object.assign(Object.assign({}, valueStyle), { fontSize: valueStyle.fontSize + 'px' }), dataSource }));
|
|
81
|
-
}
|
|
82
|
-
if (poiNode && pid) {
|
|
83
|
-
const parent = this.ssp.getObjectById(pid);
|
|
84
|
-
parent && this.ssp.addObject(poiNode, parent);
|
|
85
|
-
}
|
|
86
|
-
};
|
|
87
|
-
dataSource.forEach(createPoiNode);
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
export { DefaultStyle, PoiContentTypeEnum, PatrolControlsPlugin as default };
|
|
92
|
-
//# sourceMappingURL=index.esm.js.map
|
|
1
|
+
const e={width:"400px",height:"300px",backgroundColor:"black"};var t;!function(e){e.PANEL="PANEL",e.VIDEO="VIDEO",e.VIDEO_STREAM="VIDEO_STREAM"}(t||(t={}));class s{constructor(e){this.ssp=e,this.poiIdSet=new Set}resetStyleName(e){const t=[...e];for(const e in t)t[e]!==t[e].toLowerCase()&&(t[e]=`-${t[e].toLowerCase()}`);return t.join("")}mergeElementStyle(e){let t="";for(const s in e)t+=`${this.resetStyleName(s)}: ${e[s]};`;return t}renderCustom(t){const{tagName:s,style:n=e,innerHTML:i}=t,a=document.createElement(s);return a.style.cssText=this.mergeElementStyle(n),i&&(a.innerHTML=i),this.ssp.createPoiNode(Object.assign(Object.assign({},t),{element:a}))}renderVideo(t){const{src:s,style:n=e,isLoop:i=!0,autoPlay:a=!0}=t,l=document.createElement("video");return l.style.cssText=this.mergeElementStyle(n),l.controls=!0,l.muted=!0,l.loop=i,l.autoplay=a,s&&(l.src=s),this.ssp.createPoiNode(Object.assign(Object.assign({},t),{element:l}))}renderPanel(e){const{dataSource:t,rowStyle:s,labelStyle:n,valueStyle:i}=e,a=t.map(e=>`<div style="${this.mergeElementStyle(s||{})}">\n<span style="${this.mergeElementStyle(n||{})}">${e.label}</span>\n<span style="${this.mergeElementStyle(i||{})}">${e.value}</span>\n</div>`).join("");return this.renderCustom(Object.assign(Object.assign({tagName:"div"},e),{innerHTML:a}))}batchRender(e){const{dataSource:s}=e;this.poiIdSet.forEach(e=>{this.ssp.removeObjectById(e)}),this.poiIdSet.clear();s.forEach(e=>{const{id:s,pid:n,width:i,height:a,dataSource:l,fileUrl:o,style:r,visible:c}=e;let d=this.ssp.getObjectById(s);const g=c;if(this.poiIdSet.add(s),e.contentType===t.VIDEO)d=this.renderVideo(Object.assign(Object.assign({},e),{src:o,visible:g,style:{width:i+"px",height:a+"px"}}));else if(e.contentType===t.PANEL){const{panel:{bodyStyle:t,rowStyle:s,labelStyle:n,valueStyle:c}}=JSON.parse(r);d=this.renderPanel(Object.assign(Object.assign({},e),{visible:g,style:Object.assign(Object.assign({width:i+"px",height:a+"px",backgroundImage:`url(${o})`,overflow:"auto"},t),{padding:t.padding+"px"}),rowStyle:Object.assign(Object.assign({},s),{gap:s.gap+"px"}),labelStyle:Object.assign(Object.assign({},n),{fontSize:n.fontSize+"px"}),valueStyle:Object.assign(Object.assign({},c),{fontSize:c.fontSize+"px"}),dataSource:l}))}if(d&&n){const e=this.ssp.getObjectById(n);e&&this.ssp.addObject(d,e)}})}}export{e as DefaultStyle,t as PoiContentTypeEnum,s as default};
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soonspacejs/plugin-poi-renderer",
|
|
3
3
|
"pluginName": "PoiRendererPlugin",
|
|
4
|
-
"version": "2.13.
|
|
4
|
+
"version": "2.13.16",
|
|
5
5
|
"description": "Poi-renderer plugin for SoonSpace.js",
|
|
6
6
|
"main": "dist/index.esm.js",
|
|
7
7
|
"module": "dist/index.esm.js",
|
|
@@ -13,9 +13,9 @@
|
|
|
13
13
|
],
|
|
14
14
|
"author": "xunwei",
|
|
15
15
|
"license": "UNLICENSED",
|
|
16
|
-
"gitHead": "
|
|
16
|
+
"gitHead": "aaf0c46565c740277fad34bc3a3ba9fa61d48278",
|
|
17
17
|
"peerDependencies": {
|
|
18
|
-
"soonspacejs": "2.13.
|
|
18
|
+
"soonspacejs": "2.13.16"
|
|
19
19
|
},
|
|
20
20
|
"dependencies": {
|
|
21
21
|
"csstype": "^3.1.2"
|
package/dist/index.esm.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../src/index.ts"],"sourcesContent":["import SoonSpace from 'soonspacejs'\nimport type { PoiNode, PoiNodeInfo, } from 'soonspacejs'\nimport * as CSS from 'csstype'\n\nexport type PoiNodeBaseOption = Omit<PoiNodeInfo, 'element'>\n\nexport interface PoiNodeCustomOptions extends PoiNodeBaseOption {\n tagName: keyof HTMLElementTagNameMap;\n style?: CSS.Properties;\n innerHTML?: string;\n}\n\nexport interface PoiNodeVideoOptions extends PoiNodeBaseOption {\n src?: string;\n style?: CSS.Properties;\n isLoop?: boolean;\n autoPlay?: boolean;\n}\n\nexport interface PoiNodePanelDataSource {\n label: string;\n value: string;\n}\n\nexport interface PoiNodePanelOptions extends PoiNodeBaseOption {\n dataSource: PoiNodePanelDataSource[];\n style?: CSS.Properties;\n rowStyle?: CSS.Properties;\n labelStyle?: CSS.Properties;\n valueStyle?: CSS.Properties;\n}\n\nexport type PoiImageOptions = PoiNodeVideoOptions\n\nexport const DefaultStyle: CSS.Properties = {\n width: '400px',\n height: '300px',\n backgroundColor: 'black',\n}\n\nexport enum PoiContentTypeEnum {\n PANEL = 'PANEL',\n VIDEO = 'VIDEO',\n VIDEO_STREAM = 'VIDEO_STREAM',\n}\n\nexport interface PoiNodeData extends PoiNodeBaseOption {\n pid?: string;\n width: number;\n height: number;\n dataSource: PoiNodePanelDataSource[];\n fileUrl?: string;\n contentType: PoiContentTypeEnum;\n style: string;\n}\n\nexport interface PoiNodeBatchOptions {\n dataSource: PoiNodeData[];\n}\n\nexport default class PatrolControlsPlugin {\n\n poiIdSet: Set<string>\n\n constructor ( readonly ssp: SoonSpace ) {\n\n this.poiIdSet = new Set()\n\n }\n\n private resetStyleName ( styleName: string ): string {\n\n const strArr = [ ...styleName ]\n\n for ( const i in strArr ) {\n\n if ( strArr[ i ] !== strArr[ i ].toLowerCase() ) {\n\n strArr[ i ] = `-${strArr[ i ].toLowerCase()}`\n \n }\n \n }\n\n return strArr.join( '' )\n \n }\n\n private mergeElementStyle ( style: CSS.Properties ): string {\n\n let cssText = ''\n\n for ( const i in style ) {\n\n cssText += `${this.resetStyleName( i )}: ${( style as any )[ i ]};`\n \n }\n\n return cssText\n \n }\n\n renderCustom ( options: PoiNodeCustomOptions ): PoiNode {\n\n const { tagName, style = DefaultStyle, innerHTML, } = options\n\n const el = document.createElement( tagName )\n\n el.style.cssText = this.mergeElementStyle( style )\n\n innerHTML && ( el.innerHTML = innerHTML )\n\n return this.ssp.createPoiNode( {\n ...options,\n element: el,\n } )\n \n }\n\n renderVideo ( options: PoiNodeVideoOptions ) {\n\n const {\n src,\n style = DefaultStyle,\n isLoop = true,\n autoPlay = true,\n } = options\n\n const el = document.createElement( 'video' )\n\n el.style.cssText = this.mergeElementStyle( style )\n el.controls = true\n el.muted = true\n el.loop = isLoop\n el.autoplay = autoPlay\n src && ( el.src = src )\n\n return this.ssp.createPoiNode( {\n ...options,\n element: el,\n } )\n \n }\n\n renderPanel ( options: PoiNodePanelOptions ) {\n\n const { dataSource, rowStyle, labelStyle, valueStyle, } = options\n\n const innerHTML = dataSource\n .map(\n ( i ) =>\n `<div style=\"${this.mergeElementStyle( rowStyle || {} )}\">\n<span style=\"${this.mergeElementStyle( labelStyle || {} )}\">${i.label}</span>\n<span style=\"${this.mergeElementStyle( valueStyle || {} )}\">${i.value}</span>\n</div>`\n )\n .join( '' )\n\n return this.renderCustom( {\n tagName: 'div',\n ...options,\n innerHTML,\n } )\n \n }\n\n batchRender ( batchOptions: PoiNodeBatchOptions ) {\n\n const { dataSource, } = batchOptions\n \n this.poiIdSet.forEach( id => {\n\n this.ssp.removeObjectById( id )\n\n } )\n\n this.poiIdSet.clear()\n\n const createPoiNode = ( poiData: PoiNodeData ) => {\n\n const { id, pid, width, height, dataSource, fileUrl, style, visible, } =\n poiData\n\n let poiNode = this.ssp.getObjectById( id )\n const nexVisible = visible\n\n this.poiIdSet.add( id )\n\n if ( poiData.contentType === PoiContentTypeEnum.VIDEO ) {\n\n poiNode = this.renderVideo( {\n ...poiData,\n src: fileUrl,\n visible: nexVisible,\n style: {\n width: width + 'px',\n height: height + 'px',\n },\n } )\n \n } else if ( poiData.contentType === PoiContentTypeEnum.PANEL ) {\n\n const {\n panel: { bodyStyle, rowStyle, labelStyle, valueStyle, },\n } = JSON.parse( style )\n\n poiNode = this.renderPanel( {\n ...poiData,\n visible: nexVisible,\n style: {\n width: width + 'px',\n height: height + 'px',\n backgroundImage: `url(${fileUrl})`,\n overflow: 'auto',\n ...bodyStyle,\n padding: bodyStyle.padding + 'px',\n },\n rowStyle: {\n ...rowStyle,\n gap: rowStyle.gap + 'px',\n },\n labelStyle: {\n ...labelStyle,\n fontSize: labelStyle.fontSize + 'px',\n },\n valueStyle: {\n ...valueStyle,\n fontSize: valueStyle.fontSize + 'px',\n },\n dataSource,\n } )\n \n }\n\n if ( poiNode && pid ) {\n\n const parent = this.ssp.getObjectById( pid )\n\n parent && this.ssp.addObject( poiNode, parent )\n \n }\n \n }\n\n dataSource.forEach( createPoiNode )\n \n }\n\n}\n"],"names":[],"mappings":"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"}
|