0.7.0 • Published 3 years ago
object-dom v0.7.0
object-dom
Declarative dom with 1:1 mapping of objects and tags, typed css, reactive updates and no bundler needed.
- ✅ No Dependencies
- ✅ ES Modules
- ✅ Full Browser Support
- ✅ Full types for CSS
- ✅ Full types for DOM Events
- ✅ Full types for Attributes
- ✅ 100% Typescript
Supported Tags
https://www.w3schools.com/TAGS/default.ASP
Tag | Class | Description |
---|---|---|
<a> | A | Defines a hyperlink |
<abbr> | Abbr | Defines an abbreviation or an acronym |
<address> | Address | Defines contact information for the author/owner of a document |
<area> | Area | Defines an area inside an image map |
<article> | Article | Defines an article |
<aside> | Aside | Defines content aside from the page content |
<audio> | Audio | Defines embedded sound content |
<b> | B | Defines bold text |
<base> | Base | Specifies the base URL/target for all relative URLs in a document |
<bdi> | Bdi | Isolates a part of text that might be formatted in a different direction from other text outside it |
<bdo> | Bdo | Overrides the current text direction |
<blockquote> | Blockquote | Defines a section that is quoted from another source |
<body> | Body | Defines the document's body |
<br> | Br | Defines a single line break |
<button> | Button | Defines a clickable button |
<canvas> | Canvas | Used to draw graphics, on the fly, via scripting (usually JavaScript) |
<caption> | Caption | Defines a table caption |
<cite> | Cite | Defines the title of a work |
<code> | Code | Defines a piece of computer code |
<col> | Col | Specifies column properties for each column within a <colgroup> element |
<colgroup> | Colgroup | Specifies a group of one or more columns in a table for formatting |
<data> | Data | Adds a machine-readable translation of a given content |
<datalist> | Datalist | Specifies a list of pre-defined options for input controls |
<dd> | Dd | Defines a description/value of a term in a description list |
<del> | Del | Defines text that has been deleted from a document |
<details> | Details | Defines additional details that the user can view or hide |
<dfn> | Dfn | Specifies a term that is going to be defined within the content |
<dialog> | Dialog | Defines a dialog box or window |
<div> | Div | Defines a section in a document |
<dl> | Dl | Defines a description list |
<dt> | Dt | Defines a term/name in a description list |
<em> | Em | Defines emphasized text |
<embed> | Embed | Defines a container for an external application |
<fieldset> | Fieldset | Groups related elements in a form |
<figcaption> | Figcaption | Defines a caption for a <figure> element |
<figure> | Figure | Specifies self-contained content |
<footer> | Footer | Defines a footer for a document or section |
<form> | Form | Defines an HTML form for user input |
<h1> | H1 | Defines HTML headings |
<h2> | H2 | Defines HTML headings |
<h3> | H3 | Defines HTML headings |
<h4> | H4 | Defines HTML headings |
<h5> | H5 | Defines HTML headings |
<h6> | H6 | Defines HTML headings |
<head> | Head | Contains metadata/information for the document |
<header> | Header | Defines a header for a document or section |
<hr> | Hr | Defines a thematic change in the content |
<html> | Html | Defines the root of an HTML document |
<i> | I | Defines a part of text in an alternate voice or mood |
<iframe> | Iframe | Defines an inline frame |
<img> | Img | Defines an image |
<input> | Input | Defines an input control |
<ins> | Ins | Defines a text that has been inserted into a document |
<kbd> | Kbd | Defines keyboard input |
<label> | Label | Defines a label for an <input> element |
<legend> | Legend | Defines a caption for a <fieldset> element |
<li> | Li | Defines a list item |
<link> | Link | Defines the relationship between a document and an external resource (most used to link to style sheets) |
<main> | Main | Specifies the main content of a document |
<map> | Map | Defines an image map |
<mark> | Mark | Defines marked/highlighted text |
<meta> | Meta | Defines metadata about an HTML document |
<meter> | Meter | Defines a scalar measurement within a known range (a gauge) |
<nav> | Nav | Defines navigation links |
<noscript> | Noscript | Defines an alternate content for users that do not support client-side scripts |
<object> | Obj | Defines a container for an external application |
<ol> | Ol | Defines an ordered list |
<optgroup> | Optgroup | Defines a group of related options in a drop-down list |
<option> | Option | Defines an option in a drop-down list |
<output> | Output | Defines the result of a calculation |
<p> | P | Defines a paragraph |
<param> | Param | Defines a parameter for an object |
<picture> | Picture | Defines a container for multiple image resources |
<pre> | Pre | Defines preformatted text |
<progress> | Progress | Represents the progress of a task |
<q> | Q | Defines a short quotation |
<rp> | Rp | Defines what to show in browsers that do not support ruby annotations |
<rt> | Rt | Defines an explanation/pronunciation of characters (for East Asian typography) |
<ruby> | Ruby | Defines a ruby annotation (for East Asian typography) |
<s> | S | Defines text that is no longer correct |
<samp> | Samp | Defines sample output from a computer program |
<script> | Script | Defines a client-side script |
<section> | Section | Defines a section in a document |
<select> | Select | Defines a drop-down list |
<small> | Small | Defines smaller text |
<source> | Source | Defines multiple media resources for media elements (<video> and <audio> ) |
<span> | Span | Defines a section in a document |
<strong> | Strong | Defines important text |
<style> | Style | Defines style information for a document |
<sub> | Sub | Defines subscripted text |
<summary> | Summary | Defines a visible heading for a <details> element |
<sup> | Sup | Defines superscripted text |
<svg> | Svg | Defines a container for SVG graphics |
<table> | Table | Defines a table |
<tbody> | Tbody | Groups the body content in a table |
<td> | Td | Defines a cell in a table |
<template> | Template | Defines a container for content that should be hidden when the page loads |
<textarea> | Textarea | Defines a multiline input control (text area) |
<tfoot> | Tfoot | Groups the footer content in a table |
<th> | Th | Defines a header cell in a table |
<thead> | Thead | Groups the header content in a table |
<time> | Time | Defines a specific time (or datetime) |
<title> | Title | Defines a title for the document |
<tr> | Tr | Defines a row in a table |
<track> | Track | Defines text tracks for media elements (<video> and <audio> ) |
<u> | U | Defines some text that is unarticulated and styled differently from normal text |
<ul> | Ul | Defines an unordered list |
<var> | Var | Defines a variable |
<video> | Video | Defines embedded video content |
<wbr> | Wbr | Defines a possible line-break |
Available Methods
- jsonTable
- render
- generateHtml
- parseHtml
- textContent
Getting Started
Functional Approach
<div id="root"></div>
<script type="module">
import { Div, P, Button, Row, Column, render } from "object-dom";
const label = new P({ text: "Hello World!" });
const button = new Button({
text: "Update",
styles: { width: "100px" },
});
const app = new Div({
children: [
new Column({
children: [
label,
button,
new Row({
styles: { padding: "10px" },
children: ["A", "B", "C"],
}),
],
}),
],
});
button.addEventListener('click', () => {
label.text = "New Update!";
}, false);
render(app, document.body.querySelector("#root"));
</script>
Class Approach
import { ObjectDom, Div, H1, Button, Row, Canvas } from "object-dom";
export class MyApp extends ObjectDom {
render = () => {
return new Div({
children: [new H1({ text: "Counter Example" }), new Counter(), new CanvasExample()],
});
};
}
class Counter extends ObjectDom {
value = 0;
render() {
return new Div({
styles: { margin: "5px" },
children: [
`${this.value}`,
new Row({
children: [
new Button({
text: "-",
styles: { width: "50px" },
events: {
click: () => {
this.value -= 1;
this.update();
},
},
}),
new Button({
text: "+",
styles: { width: "50px", marginLeft: "5px" },
events: {
click: () => {
this.value += 1;
this.update();
},
},
}),
],
}),
],
});
}
}
class CanvasExample extends ObjectDom {
render() {
return new Canvas({
styles: { width: "200px", height: "200px" },
onCreate: (node) => {
const canvas = node as HTMLCanvasElement;
const ctx = canvas.getContext("2d")!;
// Create gradient
const grd = ctx.createRadialGradient(75, 50, 5, 90, 60, 100);
grd.addColorStop(0, "red");
grd.addColorStop(1, "white");
// Fill with gradient
ctx.fillStyle = grd;
ctx.fillRect(10, 10, 150, 80);
},
});
}
}
render(new MyApp(), document.body.querySelector("#root"));
JSON Table
jsonTable(
[
{
first_name: "John",
last_name: "Smith",
company: "N/A",
},
{
first_name: "Steve",
last_name: "Jobs",
company: "Apple",
},
{
first_name: "Bill",
last_name: "Gates",
company: "Microsoft",
},
{
first_name: "Elon",
last_name: "Musk",
company: "Tesla",
},
],
{ style: { margin: "10px" } }
);
Which renders the following html:
<table>
<tr>
<th>first_name</th>
<th>last_name</th>
<th>company</th>
</tr>
<tr>
<td>John</td>
<td>Smith</td>
<td>N/A</td>
</tr>
<tr>
<td>Steve</td>
<td>Jobs</td>
<td>Apple</td>
</tr>
<tr>
<td>Bill</td>
<td>Gates</td>
<td>Microsoft</td>
</tr>
<tr>
<td>Elon</td>
<td>Musk</td>
<td>Tesla</td>
</tr>
</table>
0.6.6
3 years ago
0.1.0
3 years ago
0.3.0
3 years ago
0.2.1
3 years ago
0.1.2
3 years ago
0.0.3
3 years ago
0.2.0
3 years ago
0.1.1
3 years ago
0.0.2
3 years ago
0.4.5
3 years ago
0.6.2
3 years ago
0.4.4
3 years ago
0.6.5
3 years ago
0.6.4
3 years ago
0.4.6
3 years ago
0.5.0
3 years ago
0.4.1
3 years ago
0.3.2
3 years ago
0.2.3
3 years ago
0.1.4
3 years ago
0.4.0
3 years ago
0.3.1
3 years ago
0.2.2
3 years ago
0.1.3
3 years ago
0.7.0
3 years ago
0.6.1
3 years ago
0.5.2
3 years ago
0.4.3
3 years ago
0.3.4
3 years ago
0.1.6
3 years ago
0.6.0
3 years ago
0.5.1
3 years ago
0.4.2
3 years ago
0.3.3
3 years ago
0.2.4
3 years ago
0.1.5
3 years ago
0.0.1
3 years ago
0.0.0
3 years ago