mirror of
https://github.com/alibaba/lowcode-engine.git
synced 2026-04-20 12:28:08 +00:00
83 lines
2.0 KiB
TypeScript
83 lines
2.0 KiB
TypeScript
import isObject from 'lodash/isObject';
|
|
import { toCss } from '@ali/vu-css-style';
|
|
|
|
const engine = (window as any).VisualEngine;
|
|
const { Trunk, Viewport } = engine;
|
|
|
|
export const NativeNodeCache: any = {};
|
|
|
|
function ucfirst(s: string) {
|
|
return s.charAt(0).toUpperCase() + s.substring(1);
|
|
}
|
|
|
|
export function shallowEqual(obj: { [key: string]: string }, tObj: { [key: string]: string }) {
|
|
for (const i in obj) {
|
|
if (Object.prototype.hasOwnProperty.call(obj, i) && obj[i] !== tObj[i]) {
|
|
return false;
|
|
}
|
|
}
|
|
return true;
|
|
}
|
|
|
|
export function createNodeStyleSheet(props: any) {
|
|
if (props && props.fieldId) {
|
|
let styleProp = props.__style__;
|
|
|
|
if (isObject(styleProp)) {
|
|
styleProp = toCss(styleProp);
|
|
}
|
|
|
|
if (typeof styleProp === 'string') {
|
|
const s = document.createElement('style');
|
|
const cssId = '_style_pesudo_' + props.fieldId;
|
|
const cssClass = '_css_pesudo_' + props.fieldId;
|
|
|
|
props.className = cssClass;
|
|
s.setAttribute('type', 'text/css');
|
|
s.setAttribute('id', cssId);
|
|
document.getElementsByTagName('head')[0].appendChild(s);
|
|
|
|
s.appendChild(
|
|
document.createTextNode(
|
|
styleProp
|
|
.replace(/(\d+)rpx/g, (a, b) => {
|
|
return `${b / 2}px`;
|
|
})
|
|
.replace(/:root/g, '.' + cssClass),
|
|
),
|
|
);
|
|
return s;
|
|
}
|
|
}
|
|
}
|
|
|
|
export function setNativeNode(leaf: any, node: Rax.RaxNode) {
|
|
const id = leaf.getId();
|
|
if (NativeNodeCache[id] === node) {
|
|
return;
|
|
}
|
|
NativeNodeCache[id] = node;
|
|
leaf.mountChange();
|
|
}
|
|
|
|
export function getView(componentName: string) {
|
|
// let view = new Trunk().getPrototypeView(componentName);
|
|
let view = Trunk.getPrototypeView(componentName);
|
|
if (!view) {
|
|
return null;
|
|
}
|
|
const viewport = Viewport.getViewport();
|
|
if (viewport) {
|
|
const [mode, device] = viewport.split('-', 2).map(ucfirst);
|
|
if (view.hasOwnProperty(device)) {
|
|
view = view[device];
|
|
}
|
|
|
|
if (view.hasOwnProperty(mode)) {
|
|
view = view[mode];
|
|
}
|
|
}
|
|
|
|
return view;
|
|
}
|