galho
Version:
galho is js library for create and manipulate dom elements without need compiling, configuration or VirtualDom
717 lines • 55.9 kB
JavaScript
import { emit, off, on } from "./event.js";
import { def, filter, is, isA, isF, isN, isO, isS, isU, l } from "./util.js";
export function g(e, arg0, arg1) {
if (!e)
return null;
let r = isS(e) ?
new G(document.createElement(e)) :
'render' in e ?
e.render() :
is(e, G) ? e : new G(e);
if (arg0)
isS(arg0) ?
isS(e) ?
r.attr("class", arg0) :
r.c(arg0) :
isA(arg0) || isF(arg0) ?
r.add(arg0) :
r.p(arg0);
arg1 != null && r.add(arg1);
return r;
}
export default g;
export const m = (...elements) => new M(...elements);
export function div(arg0, arg1) {
let r = new G(document.createElement("div"));
if (arg0)
isS(arg0) ?
r.attr("class", arg0) :
isA(arg0) || isF(arg0) ?
r.add(arg0) :
r.p(arg0);
arg1 != null && r.add(arg1);
return r;
}
const cssPropRgx = /[A-Z]/g;
/**html empty char */
export const empty = '​';
/**get `document.activeElement` */
export const active = () => g(document.activeElement);
/** @ignore */
export const isE = (v) => v.e && v.e?.nodeType === 1;
/** convert to DOM Element @ignore */
export const asE = (v) => v.e ? v.e : v;
/** check if dom element */
const isD = (v) => v.nodeType === 1;
/**create an element using ns:`http://www.w3.org/1999/xhtml` */
export function html(tag, props, child) {
return g(document.createElementNS('http://www.w3.org/1999/xhtml', tag), props, child);
}
/**
* create an svg element
* @param tag
* @param attrs
* @param child
* @returns
*/
export function svg(tag, attrs, child) {
var s = new G(document.createElementNS('http://www.w3.org/2000/svg', tag));
if (attrs)
if (isS(attrs) || isA(attrs))
s.c(attrs);
else
s.attr(attrs);
if (child || child === 0)
s.add(child);
return s;
}
/**convert html string to svg element */
export function toSVG(text) {
let parser = new DOMParser(), doc = parser.parseFromString(text, "image/svg+xml");
return new M(...Array.from(doc.children));
}
export function onfocusout(e, handler) {
handler && e.on('focusout', ev => e.contains(ev.relatedTarget) || handler.call(e, ev));
return e;
}
export function wrap(c, p, tag) {
if (isF(c))
c = c();
if (isF(c?.render))
c = c.render();
if (c instanceof Element)
c = new G(c);
else if (!(c instanceof G))
c = g(tag || "div", 0, c);
p && g(c, p);
return c;
}
/** select first element that match query same as `document.querySelect` */
export const get = (selectors) => g(document.querySelector(selectors));
/** select all element that match query same as `document.querySelectAll` */
export const getAll = (selectors) => new M(...Array.from(document.querySelectorAll(selectors)));
export function delay(e, event, time, handler) {
handler = handler.bind(e.e);
return e.on(event, function (e) {
var t = `__${event}`;
clearTimeout(this[t]);
this[t] = setTimeout(handler, time, e);
});
}
/** wrap for stopImmediatePropagation and preventDefault on Event */
export function clearEvent(e) {
e.stopImmediatePropagation();
e.preventDefault();
}
export function css(props, s, defSub = " ") {
let subs = [">", " ", ":", "~", "+"];
let r = "", subSel = "", split;
function sub(parent, child) {
return child.split(',')
.map(s => parent.map(p => {
if (subs.indexOf(s[0]) != -1)
return p + s;
if (s.includes("&"))
return s.replaceAll("&", p);
return p + defSub + s;
}).join(',')).join(',');
}
if (!s || s[0] == '@') {
for (let k in props)
r += css(props[k], k, defSub);
return r ? s ? s + "{" + r + "}" : r : '';
}
for (let key in props) {
let val = props[key];
if (val || val === 0) {
if (isO(val)) {
subSel += css(val, sub(split || (split = s.split(',')), key), defSub);
}
else
r += key.replace(cssPropRgx, m => "-" + m.toLowerCase()) + ":" + val + ";";
}
}
return (r ? s + "{" + r + "}" : "") + subSel;
}
// #endregion
// #region ----------main structures ----------------------
/**
* A Wrapper for an HTML OR SVG Element
*/
export class G {
e;
constructor(e) { this.e = e; }
static empty;
get active() {
return this.e.ownerDocument.activeElement == this.e;
}
get parent() {
let e = this.e.parentElement;
return e && new G(e);
}
/**get previus element sibling */
get prev() {
let e = this.e.previousElementSibling;
return e && new G(e);
}
/**get next element sibling */
get next() {
let e = this.e.nextElementSibling;
return e && new G(e);
}
/**first children element */
get first() {
let e = this.e.firstElementChild;
return e && new G(e);
}
/**last children element */
get last() {
let e = this.e.lastElementChild;
return e && new G(e);
}
/**get bounding client rect */
get rect() { return this.e.getBoundingClientRect(); }
/** @ignore */
toJSON() { }
/** check if `this` contains `child` */
contains(child) {
return child ? this.e.contains(asE(child)) : false;
}
v(v) {
let e = this.e;
return isU(v) ? e.value : (e.value = v, this);
}
on(e, l, o) {
if (isS(e)) {
if (l)
this.e.addEventListener(e, l, o);
}
else if (isA(e)) {
if (l)
for (let _ of e)
this.e.addEventListener(_, l, o);
}
else
for (let _ in e) {
let t = e[_];
if (t)
this.e.addEventListener(_, t, l);
}
return this;
}
one(event, listener) {
return this.on(event, listener, { once: true });
}
emit(event, init) {
this.e.dispatchEvent(isS(event) ? new Event(event, init) : event);
return this;
}
/**remove event listener */
off(event, listener) {
for (let e of isS(event) ? [event] : event)
this.e.removeEventListener(e, listener);
return this;
}
/** insert adjacent content to `this`
* @param child can be any valid content
*/
put(position, child) {
switch (typeof child) {
case 'object':
if (!child)
break;
if (isE(child) ? child = child.e : isD(child))
this.e.insertAdjacentElement(position, child);
else if (isF(child.render))
this.put(position, child.render());
else if (isF(child.then))
child.then(c => this.put(position, c));
else if (position[0] == 'a')
for (let i = child.length - 1; i >= 0; i--)
this.put(position, child[i]);
else
for (let i = 0, l = child.length; i < l; i++)
this.put(position, child[i]);
break;
case 'string':
case 'number':
case 'bigint':
this.e.insertAdjacentText(position, child);
break;
case 'function':
this.put(position, child());
break;
}
return this;
}
/**insert adjacent after end */
after(child) {
return this.put('afterend', child);
}
/**insert adjacent before begin */
before(child) {
return this.put('beforebegin', child);
}
putText(pos, text) {
this.e.insertAdjacentText(pos, text);
return this;
}
putHTML(pos, html) {
this.e.insertAdjacentHTML(pos, html);
return this;
}
/**append child */
add(child) {
switch (typeof child) {
case 'object':
if (!child)
break;
if (isE(child) ? child = child.e : isD(child))
this.e.append(child);
else if (isF(child.render))
this.add(child.render());
else if (isF(child.then))
child.then(c => this.add(c));
else
for (let i = 0, l = child.length; i < l; i++)
this.add(child[i]);
break;
case 'string':
case 'number':
case 'bigint':
this.e.append(child);
break;
case 'function':
this.add(child());
break;
}
return this;
}
/**(begin add) add child at begin of element */
badd(child) { return this.put('afterbegin', child); }
/**
* insert content at an specified index
* @throws `invalid index` if index is outside [0, `children.length`[
* @param index
* @param content
* @returns `this`
*/
place(index, content) {
if (!index)
return this.badd(content);
var c = this.e.children, temp = c[index < 0 ? c.length + index : index - 1];
if (!temp)
throw "invalid index";
new G(temp).put('afterend', content);
return this;
}
/**remove child at an specified index @returns `this` */
unplace(index) {
this.e.children[index].remove();
return this;
}
addHTML(html) {
return this.putHTML("beforeend", html);
}
/**clear content and append new content */
set(content) {
this.e.textContent = '';
this.add(content);
return this;
}
is(filter) {
return isS(filter) ? this.e.matches(filter) : this.e == asE(filter);
}
id(v) {
if (v)
this.e.id = v;
else
return this.e.id;
return this;
}
text(v) {
if (isU(v))
return this.e.textContent;
this.e.textContent = v;
return this;
}
/** add `this` to another element
* @param parent element to insert into
*/
addTo(parent) {
asE(parent).appendChild(this.e);
return this;
}
;
html(value) {
if (arguments.length) {
this.e.innerHTML = value;
return this;
}
return this.e.innerHTML;
}
replace(child) {
// if (this.parent) {
this.put('beforebegin', child);
this.remove();
// }
return this;
}
focus(options) {
this.e.focus(options);
return this;
}
blur() {
this.e.blur();
return this;
}
child(filter) {
let childs = this.e.children, child;
if (isS(filter)) {
for (let i = 0; i < childs.length; i++) {
if ((child = childs[i]).matches(filter))
return new G(child);
}
return null;
}
else if (isN(filter))
return (child = childs[filter < 0 ? l(childs) + filter : filter]) ? new G(child) : null;
}
childs(filter, to) {
let childs = Array.from(this.e.children);
return new M(...(isS(filter) ? childs.filter(c => c.matches(filter)) :
isN(filter) ? childs.slice(filter, to) :
isF(filter) ? childs.filter(c => filter(new G(c))) :
childs));
}
query(filter) {
let e = this.e.querySelector(filter);
return e && new G(e);
}
queryAll(filter) {
return new M(...Array.from(this.e.querySelectorAll(filter)));
}
closest(filter) {
return g(this.e.closest(filter));
}
parents(filter) {
let l = new M(), p = this.e;
while (p = p.parentElement)
if (!filter || p.matches(filter))
l.push(p);
return l;
}
clone(deep) {
return new G(this.e.cloneNode(deep));
}
p(a0, a1) {
if (isS(a0))
if (isU(a1))
return this.e[a0];
else
this.e[a0] = a1;
else
for (let key in a0) {
let v = a0[key];
if (!(a1 || isU(v)))
this.e[key] = v;
}
return this;
}
call(key, ...args) {
this.e[key](...args);
return this;
}
css(k, v, i) {
let s = this.e.style;
if (isS(k))
if (isU(v))
return s[k];
else
s.setProperty(k.replace(cssPropRgx, m => "-" + m), v, i ? "important" : "");
else
for (let _ in k)
s.setProperty(_.replace(cssPropRgx, m => "-" + m), k[_], v ? "important" : "");
return this;
}
uncss(...p) {
if (p.length)
for (let i = 0; i < p.length; i++)
this.e.style[p[i]] = "";
else
this.e.removeAttribute('style');
return this;
}
c(names, set) {
if (names)
this.e.classList[set === false ? 'remove' : 'add'].apply(this.e.classList, (isS(names) ? names.trim().split(' ') : names).filter(n => n));
return this;
}
/**toggle class */
tcls(names) {
for (let n of names.split(' '))
if (n)
this.e.classList.toggle(n);
return this;
}
attr(attr, value) {
let fn = (k, v) => v === false ?
this.e.removeAttribute(k) :
this.e.setAttribute(k, v === true ? '' : v);
if (isS(attr)) {
if (isU(value)) {
return this.e.getAttribute(attr);
}
else
fn(attr, value);
}
else
for (let key in attr)
fn(key, attr[key]);
return this;
}
d(data) {
let e = this.e;
if (isU(data))
return def(e._d, (e = e.parentElement) && new G(e).d());
e._d = data;
return this;
}
remove() {
this.e.remove();
return this;
}
}
/**
* Represent Multiples {@link Element} have part of the functions of {@link G} but applied to multple element at once
*/
export class M extends Array {
constructor(...elements) {
if (isN(elements[0]))
super(elements[0]);
else
super(...filter(elements).map(i => "e" in i ? i.e : i));
}
e(i) { return new G(this[i]); }
on(event, listener, options) {
for (let i = 0; i < this.length; i++)
this[i].addEventListener(event, listener, options);
return this;
}
emit(event, init) {
if (isS(event))
event = new Event(event, init);
for (let i = 0, l = this.length; i < l; i++)
this[i].dispatchEvent(event);
return this;
}
css(props, important) {
for (let i = 0; i < this.length; i++) {
let t = this[i].style;
for (let key in props)
t.setProperty(key.replace(cssPropRgx, m => "-" + m), props[key], important ? "important" : "");
}
return this;
}
uncss(p) {
for (let i = 0; i < this.length; i++) {
let t = this[i];
if (p)
for (let i = 0; i < p.length; i++)
t.style.removeProperty(p[i]);
else
t.removeAttribute('style');
}
return this;
}
c(names, set) {
isS(names) && (names = names.split(' ').filter(v => v));
for (let i = 0; i < this.length; i++) {
this[i].classList[set === false ? 'remove' : 'add'](...names);
}
return this;
}
p(prop, value) {
for (let i = 0; i < this.length; i++)
this[i][prop] = value;
return this;
}
remove() {
for (let e of this)
e.remove();
return this;
}
child(filter) {
let result = new M();
for (let item of this)
if (isS(filter))
for (let i = 0; i < item.children.length; i++) {
let child = item.children[i];
if (child.matches(filter))
result.push(child);
}
else
isN(filter) ?
(filter in item.children) && result.push(item.children[filter]) :
result.push(...Array.from(item.children));
return result;
}
next() {
return new M(...this.map(e => e.nextElementSibling));
}
prev() {
return new M(...this.map(e => e.previousElementSibling));
}
do(cb) {
for (let i = 0; i < this.length; i++)
cb(new G(this[i]), i);
return this;
}
eachS(callbackfn) {
this.forEach((value, index) => callbackfn(new G(value), index));
return this;
}
push(...items) {
return super.push(...items.map(i => g(i).e));
}
}
export class Component {
/**properties */
p;
$;
// #bonds: { prop, handler(s: One, p: P): void, e: G | Render }[];
validators;
constructor(i) {
// this.#bonds = [];
this.eh = {};
this.p = i || {};
}
focus() {
this.$.focus();
return this;
}
render() {
if (this.$ === void 0) {
let view = this.view();
this.$ = (view ?
'render' in view ?
view.render() : isE(view) ?
view : new G(view) :
null);
}
return this.$;
}
dispose() {
if (this.$) {
this.$.remove();
delete this.$;
}
// this.#bonds.length = 0;
}
addValidators(field, validator) {
var _a, _b;
((_a = (this.validators || (this.validators = {})))[_b = field] || (_a[_b] = [])).push(validator);
return this;
}
_valid(key, value) {
let temp = this.validators[key];
if (temp)
for (let i = 0; i < temp.length; i++)
if (!temp[i](value, key))
return false;
return true;
}
set(key, value) {
let dt = this.p;
if (isO(key)) {
if (isA(key)) {
let t = {};
for (let i = 0; i < key.length; i++) {
let t2 = key[i];
t[t2] = dt[t2];
}
key = t;
}
else {
let t = {};
for (let k in key) {
let val = key[k];
if (val !== dt[k] && (!this.validators || this._valid(k, val)))
dt[k] = t[k] = val;
}
if (!Object.keys(key = t).length)
return this;
}
}
else if (!key) {
key = dt;
}
else {
if (dt[key] === value || (this.validators && !this._valid(key, value)))
return this;
dt[key] = value;
key = { [key]: value };
}
// for (let i = 0, b = this.#bonds; i < b.length; i++) {
// let bond = b[i];
// if (!bond.prop || bond.prop in key)
// bond.handler.call(this, bond.e, key);
// }
emit(this, 'set', key);
return this;
}
toggle(key) {
return this.set(key, !this.p[key]);
}
clone() {
return new this.constructor(this.p);
}
eh;
on(event, callback, options) {
if (isF(event)) {
callback = event;
event = "set";
}
return on(this, event, callback, options);
}
off(event, callback) {
return off(this, event, callback);
}
emit(event, ...args) {
return emit(this, event, ...args);
}
onset(props, callback, options = {}) {
options.check = isS(props) ?
e => props in e : e => props.some(prop => prop in e);
return on(this, "set", callback, options);
}
bind(e, handler, p, noInit) {
let cb = () => handler.call(this, e, this.p);
if (p)
cb.check = props => p in props;
if (!noInit)
cb();
this.on(cb);
return 'render' in e ? e.render() : e;
// if ('render' in e) {
// this.#bonds.push({ e: e, handler: handler, prop: prop });
// if (!noInit)
// handler.call(this, e, this.p);
// return e.render();
// } else {
// this.#bonds.push({ e: e, handler: handler, prop: prop });
// if (!noInit)
// handler.call(this, e, this.p);
// return e;
// }
}
// unbind(s: One) {
// var i = this.#bonds.findIndex(b => (b.e as G).e == (s as G).e || (s as Render) == b.e as Render);
// if (i != -1)
// this.#bonds.splice(i, 1);
// }
//@ts-ignore
toJSON() { }
}
// #endregion
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2FsaG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJnYWxoby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQTZDLElBQUksRUFBRSxHQUFHLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ3RGLE9BQU8sRUFBK0IsR0FBRyxFQUFTLE1BQU0sRUFBTyxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFZLE1BQU0sV0FBVyxDQUFDO0FBb0ZoSSxNQUFNLFVBQVUsQ0FBQyxDQUFDLENBQTBCLEVBQUUsSUFBK0QsRUFBRSxJQUFVO0lBQ3ZILElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTyxJQUFJLENBQUM7SUFDcEIsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDZCxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDYixDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNaLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUIsSUFBSSxJQUFJO1FBQ04sR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDVCxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDTixDQUFDLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDO2dCQUN2QixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDYixHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLElBQUksQ0FB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