92 lines
2.5 KiB
JavaScript
92 lines
2.5 KiB
JavaScript
import { JSDOM } from "jsdom";
|
|
import { loadBudibase } from "../src/index";
|
|
|
|
export const load = async (props) => {
|
|
const dom = new JSDOM(`<!DOCTYPE html><html><body></body><html>`);
|
|
setAppDef(dom.window, props);
|
|
const app = await loadBudibase({
|
|
componentLibraries: allLibs(dom.window),
|
|
window: dom.window,
|
|
localStorage: createLocalStorage(),
|
|
props
|
|
});
|
|
return {dom, app};
|
|
}
|
|
|
|
const setAppDef = (window, props) => {
|
|
window["##BUDIBASE_APPDEFINITION##"] = ({
|
|
componentLibraries: [],
|
|
props,
|
|
hierarchy: {},
|
|
appRootPath: ""
|
|
});
|
|
}
|
|
|
|
const allLibs = (window) => ({
|
|
testlib: maketestlib(window)
|
|
});
|
|
|
|
const createLocalStorage = () => {
|
|
const data = {};
|
|
return ({
|
|
getItem: key => data[key],
|
|
setItem: (key, value) => data[key] = value
|
|
});
|
|
}
|
|
|
|
const maketestlib = (window) => ({
|
|
div: function(opts) {
|
|
|
|
const node = window.document.createElement("DIV");
|
|
const defaultChild = window.document.createElement("DIV");
|
|
defaultChild.className = "default-child";
|
|
node.appendChild(defaultChild);
|
|
|
|
let currentProps = {...opts.props};
|
|
let childNodes = [];
|
|
|
|
const set = (props) => {
|
|
currentProps = Object.assign(currentProps, props);
|
|
node.className = currentProps.className || "";
|
|
if(currentProps._children && currentProps._children.length > 0) {
|
|
if(currentProps.append) {
|
|
for(let c of childNodes) {
|
|
node.removeChild(c);
|
|
}
|
|
const components = currentProps._bb.appendChildren(currentProps._children, node);
|
|
childNodes = components.map(c => c._element);
|
|
} else {
|
|
currentProps._bb.hydrateChildren(currentProps._children, node);
|
|
}
|
|
}
|
|
}
|
|
|
|
this.$set = set;
|
|
this._element = node;
|
|
set(opts.props);
|
|
opts.target.appendChild(node);
|
|
},
|
|
|
|
h1: function(opts) {
|
|
|
|
const node = window.document.createElement("H1");
|
|
|
|
let currentProps = {...opts.props};
|
|
|
|
const set = (props) => {
|
|
currentProps = Object.assign(currentProps, props);
|
|
if(currentProps.text) {
|
|
node.innerText = currentProps.text;
|
|
}
|
|
}
|
|
|
|
this.$set = set;
|
|
this._element = node;
|
|
set(opts.props);
|
|
opts.target.appendChild(node);
|
|
}
|
|
});
|
|
|
|
|
|
|