@soonspacejs/plugin-poi-renderer 2.13.7 → 2.13.9
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/README.md +5 -5
- package/dist/index.d.ts +56 -0
- package/dist/index.esm.js +1 -92
- package/package.json +3 -3
- package/dist/index.esm.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
# @soonspacejs/plugin-poi-renderer
|
|
2
|
-
|
|
3
|
-
> Poi-renderer plugin for SoonSpace.js
|
|
4
|
-
|
|
5
|
-
Document: [http://www.xwbuilders.com:8800/plugin/poi-renderer.html](http://www.xwbuilders.com:8800/plugin/poi-renderer.html)
|
|
1
|
+
# @soonspacejs/plugin-poi-renderer
|
|
2
|
+
|
|
3
|
+
> Poi-renderer plugin for SoonSpace.js
|
|
4
|
+
|
|
5
|
+
Document: [http://www.xwbuilders.com:8800/plugin/poi-renderer.html](http://www.xwbuilders.com:8800/plugin/poi-renderer.html)
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import SoonSpace from 'soonspacejs';
|
|
2
|
+
import type { PoiNode, PoiNodeInfo } from 'soonspacejs';
|
|
3
|
+
import * as CSS from 'csstype';
|
|
4
|
+
export type PoiNodeBaseOption = Omit<PoiNodeInfo, 'element'>;
|
|
5
|
+
export interface PoiNodeCustomOptions extends PoiNodeBaseOption {
|
|
6
|
+
tagName: keyof HTMLElementTagNameMap;
|
|
7
|
+
style?: CSS.Properties;
|
|
8
|
+
innerHTML?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface PoiNodeVideoOptions extends PoiNodeBaseOption {
|
|
11
|
+
src?: string;
|
|
12
|
+
style?: CSS.Properties;
|
|
13
|
+
isLoop?: boolean;
|
|
14
|
+
autoPlay?: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface PoiNodePanelDataSource {
|
|
17
|
+
label: string;
|
|
18
|
+
value: string;
|
|
19
|
+
}
|
|
20
|
+
export interface PoiNodePanelOptions extends PoiNodeBaseOption {
|
|
21
|
+
dataSource: PoiNodePanelDataSource[];
|
|
22
|
+
style?: CSS.Properties;
|
|
23
|
+
rowStyle?: CSS.Properties;
|
|
24
|
+
labelStyle?: CSS.Properties;
|
|
25
|
+
valueStyle?: CSS.Properties;
|
|
26
|
+
}
|
|
27
|
+
export type PoiImageOptions = PoiNodeVideoOptions;
|
|
28
|
+
export declare const DefaultStyle: CSS.Properties;
|
|
29
|
+
export declare enum PoiContentTypeEnum {
|
|
30
|
+
PANEL = "PANEL",
|
|
31
|
+
VIDEO = "VIDEO",
|
|
32
|
+
VIDEO_STREAM = "VIDEO_STREAM"
|
|
33
|
+
}
|
|
34
|
+
export interface PoiNodeData extends PoiNodeBaseOption {
|
|
35
|
+
pid?: string;
|
|
36
|
+
width: number;
|
|
37
|
+
height: number;
|
|
38
|
+
dataSource: PoiNodePanelDataSource[];
|
|
39
|
+
fileUrl?: string;
|
|
40
|
+
contentType: PoiContentTypeEnum;
|
|
41
|
+
style: string;
|
|
42
|
+
}
|
|
43
|
+
export interface PoiNodeBatchOptions {
|
|
44
|
+
dataSource: PoiNodeData[];
|
|
45
|
+
}
|
|
46
|
+
export default class PatrolControlsPlugin {
|
|
47
|
+
readonly ssp: SoonSpace;
|
|
48
|
+
poiIdSet: Set<string>;
|
|
49
|
+
constructor(ssp: SoonSpace);
|
|
50
|
+
private resetStyleName;
|
|
51
|
+
private mergeElementStyle;
|
|
52
|
+
renderCustom(options: PoiNodeCustomOptions): PoiNode;
|
|
53
|
+
renderVideo(options: PoiNodeVideoOptions): PoiNode;
|
|
54
|
+
renderPanel(options: PoiNodePanelOptions): PoiNode;
|
|
55
|
+
batchRender(batchOptions: PoiNodeBatchOptions): void;
|
|
56
|
+
}
|
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.9",
|
|
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": "a5596909f48bd136905b85f239e13690f9f2c66e",
|
|
17
17
|
"peerDependencies": {
|
|
18
|
-
"soonspacejs": "2.13.
|
|
18
|
+
"soonspacejs": "2.13.9"
|
|
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'\r\nimport type { PoiNode, PoiNodeInfo, } from 'soonspacejs'\r\nimport * as CSS from 'csstype'\r\n\r\nexport type PoiNodeBaseOption = Omit<PoiNodeInfo, 'element'>\r\n\r\nexport interface PoiNodeCustomOptions extends PoiNodeBaseOption {\r\n tagName: keyof HTMLElementTagNameMap;\r\n style?: CSS.Properties;\r\n innerHTML?: string;\r\n}\r\n\r\nexport interface PoiNodeVideoOptions extends PoiNodeBaseOption {\r\n src?: string;\r\n style?: CSS.Properties;\r\n isLoop?: boolean;\r\n autoPlay?: boolean;\r\n}\r\n\r\nexport interface PoiNodePanelDataSource {\r\n label: string;\r\n value: string;\r\n}\r\n\r\nexport interface PoiNodePanelOptions extends PoiNodeBaseOption {\r\n dataSource: PoiNodePanelDataSource[];\r\n style?: CSS.Properties;\r\n rowStyle?: CSS.Properties;\r\n labelStyle?: CSS.Properties;\r\n valueStyle?: CSS.Properties;\r\n}\r\n\r\nexport type PoiImageOptions = PoiNodeVideoOptions\r\n\r\nexport const DefaultStyle: CSS.Properties = {\r\n width: '400px',\r\n height: '300px',\r\n backgroundColor: 'black',\r\n}\r\n\r\nexport enum PoiContentTypeEnum {\r\n PANEL = 'PANEL',\r\n VIDEO = 'VIDEO',\r\n VIDEO_STREAM = 'VIDEO_STREAM',\r\n}\r\n\r\nexport interface PoiNodeData extends PoiNodeBaseOption {\r\n pid?: string;\r\n width: number;\r\n height: number;\r\n dataSource: PoiNodePanelDataSource[];\r\n fileUrl?: string;\r\n contentType: PoiContentTypeEnum;\r\n style: string;\r\n}\r\n\r\nexport interface PoiNodeBatchOptions {\r\n dataSource: PoiNodeData[];\r\n}\r\n\r\nexport default class PatrolControlsPlugin {\r\n\r\n poiIdSet: Set<string>\r\n\r\n constructor ( readonly ssp: SoonSpace ) {\r\n\r\n this.poiIdSet = new Set()\r\n\r\n }\r\n\r\n private resetStyleName ( styleName: string ): string {\r\n\r\n const strArr = [ ...styleName ]\r\n\r\n for ( const i in strArr ) {\r\n\r\n if ( strArr[ i ] !== strArr[ i ].toLowerCase() ) {\r\n\r\n strArr[ i ] = `-${strArr[ i ].toLowerCase()}`\r\n \r\n }\r\n \r\n }\r\n\r\n return strArr.join( '' )\r\n \r\n }\r\n\r\n private mergeElementStyle ( style: CSS.Properties ): string {\r\n\r\n let cssText = ''\r\n\r\n for ( const i in style ) {\r\n\r\n cssText += `${this.resetStyleName( i )}: ${( style as any )[ i ]};`\r\n \r\n }\r\n\r\n return cssText\r\n \r\n }\r\n\r\n renderCustom ( options: PoiNodeCustomOptions ): PoiNode {\r\n\r\n const { tagName, style = DefaultStyle, innerHTML, } = options\r\n\r\n const el = document.createElement( tagName )\r\n\r\n el.style.cssText = this.mergeElementStyle( style )\r\n\r\n innerHTML && ( el.innerHTML = innerHTML )\r\n\r\n return this.ssp.createPoiNode( {\r\n ...options,\r\n element: el,\r\n } )\r\n \r\n }\r\n\r\n renderVideo ( options: PoiNodeVideoOptions ) {\r\n\r\n const {\r\n src,\r\n style = DefaultStyle,\r\n isLoop = true,\r\n autoPlay = true,\r\n } = options\r\n\r\n const el = document.createElement( 'video' )\r\n\r\n el.style.cssText = this.mergeElementStyle( style )\r\n el.controls = true\r\n el.muted = true\r\n el.loop = isLoop\r\n el.autoplay = autoPlay\r\n src && ( el.src = src )\r\n\r\n return this.ssp.createPoiNode( {\r\n ...options,\r\n element: el,\r\n } )\r\n \r\n }\r\n\r\n renderPanel ( options: PoiNodePanelOptions ) {\r\n\r\n const { dataSource, rowStyle, labelStyle, valueStyle, } = options\r\n\r\n const innerHTML = dataSource\r\n .map(\r\n ( i ) =>\r\n `<div style=\"${this.mergeElementStyle( rowStyle || {} )}\">\r\n<span style=\"${this.mergeElementStyle( labelStyle || {} )}\">${i.label}</span>\r\n<span style=\"${this.mergeElementStyle( valueStyle || {} )}\">${i.value}</span>\r\n</div>`\r\n )\r\n .join( '' )\r\n\r\n return this.renderCustom( {\r\n tagName: 'div',\r\n ...options,\r\n innerHTML,\r\n } )\r\n \r\n }\r\n\r\n batchRender ( batchOptions: PoiNodeBatchOptions ) {\r\n\r\n const { dataSource, } = batchOptions\r\n \r\n this.poiIdSet.forEach( id => {\r\n\r\n this.ssp.removeObjectById( id )\r\n\r\n } )\r\n\r\n this.poiIdSet.clear()\r\n\r\n const createPoiNode = ( poiData: PoiNodeData ) => {\r\n\r\n const { id, pid, width, height, dataSource, fileUrl, style, visible, } =\r\n poiData\r\n\r\n let poiNode = this.ssp.getObjectById( id )\r\n const nexVisible = visible\r\n\r\n this.poiIdSet.add( id )\r\n\r\n if ( poiData.contentType === PoiContentTypeEnum.VIDEO ) {\r\n\r\n poiNode = this.renderVideo( {\r\n ...poiData,\r\n src: fileUrl,\r\n visible: nexVisible,\r\n style: {\r\n width: width + 'px',\r\n height: height + 'px',\r\n },\r\n } )\r\n \r\n } else if ( poiData.contentType === PoiContentTypeEnum.PANEL ) {\r\n\r\n const {\r\n panel: { bodyStyle, rowStyle, labelStyle, valueStyle, },\r\n } = JSON.parse( style )\r\n\r\n poiNode = this.renderPanel( {\r\n ...poiData,\r\n visible: nexVisible,\r\n style: {\r\n width: width + 'px',\r\n height: height + 'px',\r\n backgroundImage: `url(${fileUrl})`,\r\n overflow: 'auto',\r\n ...bodyStyle,\r\n padding: bodyStyle.padding + 'px',\r\n },\r\n rowStyle: {\r\n ...rowStyle,\r\n gap: rowStyle.gap + 'px',\r\n },\r\n labelStyle: {\r\n ...labelStyle,\r\n fontSize: labelStyle.fontSize + 'px',\r\n },\r\n valueStyle: {\r\n ...valueStyle,\r\n fontSize: valueStyle.fontSize + 'px',\r\n },\r\n dataSource,\r\n } )\r\n \r\n }\r\n\r\n if ( poiNode && pid ) {\r\n\r\n const parent = this.ssp.getObjectById( pid )\r\n\r\n parent && this.ssp.addObject( poiNode, parent )\r\n \r\n }\r\n \r\n }\r\n\r\n dataSource.forEach( createPoiNode )\r\n \r\n }\r\n\r\n}\r\n"],"names":[],"mappings":"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"}
|