fractal-core
Version:
A minimalist and well crafted app, content or component is our conviction
69 lines • 2.8 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const snabbdom_1 = require("snabbdom");
const class_1 = require("snabbdom/modules/class");
const attributes_1 = require("snabbdom/modules/attributes");
const props_1 = require("snabbdom/modules/props");
const style_1 = require("snabbdom/modules/style");
const eventListeners_1 = require("./eventListeners");
const globalListeners_1 = require("./globalListeners");
const sizeBinding_1 = require("./sizeBinding");
const h_1 = require("./h");
exports.h = h_1.default;
/* istanbul ignore next */
exports.viewHandler = (selectorElm, cb) => (mod) => {
let selector = (typeof selectorElm === 'string') ? selectorElm : '';
let state = {
lastContainer: undefined,
};
// Common snabbdom patch function (convention over configuration)
let patchFn = snabbdom_1.init([
class_1.default,
attributes_1.default,
props_1.default,
style_1.default,
eventListeners_1.default(mod),
globalListeners_1.default(mod, state),
sizeBinding_1.default(mod),
]);
function handler(vnode) {
let vnode_mapped = exports.h('div' + selector, { key: selector }, [vnode]);
state.lastContainer = patchFn(state.lastContainer, vnode_mapped);
}
return {
state,
handle: (__, value) => __awaiter(this, void 0, void 0, function* () {
if (typeof window === 'undefined') {
if (cb) {
cb(value);
}
return;
}
if (!state.lastContainer) {
let container = selector !== '' ? document.querySelector(selector) : selectorElm;
if (!container) {
return mod.error('view', `There are no element matching selector '${selector}'`);
}
state.lastContainer = container;
handler(state.lastContainer);
handler(value);
}
else {
handler(value);
}
if (cb) {
cb(value);
}
}),
destroy: () => { },
};
};
//# sourceMappingURL=index.js.map