Comparing version 0.2.1 to 0.2.2
'use strict'; | ||
const {booleanAttribute} = require('../utils.js'); | ||
const {booleanAttribute, registerHTMLClass} = require('../utils.js'); | ||
const {HTMLElement} = require('./html-element.js'); | ||
const tagName = 'button'; | ||
/** | ||
@@ -9,14 +11,20 @@ * @implements globalThis.HTMLButtonElement | ||
class HTMLButtonElement extends HTMLElement { | ||
constructor(ownerDocument, localName = 'button') { | ||
constructor(ownerDocument, localName = tagName) { | ||
super(ownerDocument, localName); | ||
} | ||
get disabled() { | ||
return booleanAttribute.get(this, 'disabled'); | ||
} | ||
/* c8 ignore start */ | ||
get disabled() { return booleanAttribute.get(this, 'disabled'); } | ||
set disabled(value) { booleanAttribute.set(this, 'disabled', value); } | ||
set disabled(value) { | ||
booleanAttribute.set(this, 'disabled', value); | ||
} | ||
get name() { return this.getAttribute('name'); } | ||
set name(value) { this.setAttribute('name', value); } | ||
get type() { return this.getAttribute('type'); } | ||
set type(value) { this.setAttribute('type', value); } | ||
/* c8 ignore stop */ | ||
} | ||
exports.HTMLButtonElement = HTMLButtonElement | ||
registerHTMLClass(tagName, HTMLButtonElement); | ||
exports.HTMLButtonElement = HTMLButtonElement; |
'use strict'; | ||
const {booleanAttribute} = require('../utils.js'); | ||
const {booleanAttribute, registerHTMLClass} = require('../utils.js'); | ||
const {HTMLElement} = require('./html-element.js'); | ||
const tagName = 'input'; | ||
/** | ||
@@ -9,14 +11,24 @@ * @implements globalThis.HTMLInputElement | ||
class HTMLInputElement extends HTMLElement { | ||
constructor(ownerDocument, localName = 'input') { | ||
constructor(ownerDocument, localName = tagName) { | ||
super(ownerDocument, localName); | ||
} | ||
get disabled() { | ||
return booleanAttribute.get(this, 'disabled'); | ||
} | ||
/* c8 ignore start */ | ||
get disabled() { return booleanAttribute.get(this, 'disabled'); } | ||
set disabled(value) { booleanAttribute.set(this, 'disabled', value); } | ||
set disabled(value) { | ||
booleanAttribute.set(this, 'disabled', value); | ||
} | ||
get name() { return this.getAttribute('name'); } | ||
set name(value) { this.setAttribute('name', value); } | ||
get placeholder() { return this.getAttribute('placeholder'); } | ||
set placeholder(value) { this.setAttribute('placeholder', value); } | ||
get type() { return this.getAttribute('type'); } | ||
set type(value) { this.setAttribute('type', value); } | ||
/* c8 ignore stop */ | ||
} | ||
exports.HTMLInputElement = HTMLInputElement | ||
registerHTMLClass(tagName, HTMLInputElement); | ||
exports.HTMLInputElement = HTMLInputElement; |
'use strict'; | ||
const {booleanAttribute, registerHTMLClass} = require('../utils.js'); | ||
const {HTMLElement} = require('./html-element.js'); | ||
const tagName = 'select'; | ||
/** | ||
@@ -8,6 +11,17 @@ * @implements globalThis.HTMLSelectElement | ||
class HTMLSelectElement extends HTMLElement { | ||
constructor(ownerDocument, localName = 'select') { | ||
constructor(ownerDocument, localName = tagName) { | ||
super(ownerDocument, localName); | ||
} | ||
/* c8 ignore start */ | ||
get disabled() { return booleanAttribute.get(this, 'disabled'); } | ||
set disabled(value) { booleanAttribute.set(this, 'disabled', value); } | ||
get name() { return this.getAttribute('name'); } | ||
set name(value) { this.setAttribute('name', value); } | ||
/* c8 ignore stop */ | ||
} | ||
exports.HTMLSelectElement = HTMLSelectElement | ||
registerHTMLClass(tagName, HTMLSelectElement); | ||
exports.HTMLSelectElement = HTMLSelectElement; |
@@ -15,11 +15,19 @@ 'use strict'; | ||
get disabled() { | ||
return booleanAttribute.get(this, 'disabled'); | ||
} | ||
/* c8 ignore start */ | ||
get disabled() { return booleanAttribute.get(this, 'disabled'); } | ||
set disabled(value) { booleanAttribute.set(this, 'disabled', value); } | ||
set disabled(value) { | ||
booleanAttribute.set(this, 'disabled', value); | ||
} | ||
get name() { return this.getAttribute('name'); } | ||
set name(value) { this.setAttribute('name', value); } | ||
get placeholder() { return this.getAttribute('placeholder'); } | ||
set placeholder(value) { this.setAttribute('placeholder', value); } | ||
get type() { return this.getAttribute('type'); } | ||
set type(value) { this.setAttribute('type', value); } | ||
get value() { return this.textContent; } | ||
set value(content) { this.textContent = content; } | ||
/* c8 ignore stop */ | ||
} | ||
exports.HTMLTextAreaElement = HTMLTextAreaElement | ||
@@ -26,0 +34,0 @@ registerHTMLClass(tagName, HTMLTextAreaElement); |
@@ -1,19 +0,28 @@ | ||
import {booleanAttribute} from '../utils.js'; | ||
import {booleanAttribute, registerHTMLClass} from '../utils.js'; | ||
import {HTMLElement} from './html-element.js'; | ||
const tagName = 'button'; | ||
/** | ||
* @implements globalThis.HTMLButtonElement | ||
*/ | ||
export class HTMLButtonElement extends HTMLElement { | ||
constructor(ownerDocument, localName = 'button') { | ||
class HTMLButtonElement extends HTMLElement { | ||
constructor(ownerDocument, localName = tagName) { | ||
super(ownerDocument, localName); | ||
} | ||
get disabled() { | ||
return booleanAttribute.get(this, 'disabled'); | ||
} | ||
/* c8 ignore start */ | ||
get disabled() { return booleanAttribute.get(this, 'disabled'); } | ||
set disabled(value) { booleanAttribute.set(this, 'disabled', value); } | ||
set disabled(value) { | ||
booleanAttribute.set(this, 'disabled', value); | ||
} | ||
get name() { return this.getAttribute('name'); } | ||
set name(value) { this.setAttribute('name', value); } | ||
get type() { return this.getAttribute('type'); } | ||
set type(value) { this.setAttribute('type', value); } | ||
/* c8 ignore stop */ | ||
} | ||
registerHTMLClass(tagName, HTMLButtonElement); | ||
export {HTMLButtonElement}; |
@@ -1,4 +0,6 @@ | ||
import {booleanAttribute} from '../utils.js'; | ||
import {booleanAttribute, registerHTMLClass} from '../utils.js'; | ||
import {HTMLElement} from './html-element.js'; | ||
const tagName = 'input'; | ||
/** | ||
@@ -8,13 +10,23 @@ * @implements globalThis.HTMLInputElement | ||
export class HTMLInputElement extends HTMLElement { | ||
constructor(ownerDocument, localName = 'input') { | ||
constructor(ownerDocument, localName = tagName) { | ||
super(ownerDocument, localName); | ||
} | ||
get disabled() { | ||
return booleanAttribute.get(this, 'disabled'); | ||
} | ||
/* c8 ignore start */ | ||
get disabled() { return booleanAttribute.get(this, 'disabled'); } | ||
set disabled(value) { booleanAttribute.set(this, 'disabled', value); } | ||
set disabled(value) { | ||
booleanAttribute.set(this, 'disabled', value); | ||
} | ||
get name() { return this.getAttribute('name'); } | ||
set name(value) { this.setAttribute('name', value); } | ||
get placeholder() { return this.getAttribute('placeholder'); } | ||
set placeholder(value) { this.setAttribute('placeholder', value); } | ||
get type() { return this.getAttribute('type'); } | ||
set type(value) { this.setAttribute('type', value); } | ||
/* c8 ignore stop */ | ||
} | ||
registerHTMLClass(tagName, HTMLInputElement); | ||
export {HTMLInputElement}; |
@@ -0,10 +1,25 @@ | ||
import {booleanAttribute, registerHTMLClass} from '../utils.js'; | ||
import {HTMLElement} from './html-element.js'; | ||
const tagName = 'select'; | ||
/** | ||
* @implements globalThis.HTMLSelectElement | ||
*/ | ||
export class HTMLSelectElement extends HTMLElement { | ||
constructor(ownerDocument, localName = 'select') { | ||
class HTMLSelectElement extends HTMLElement { | ||
constructor(ownerDocument, localName = tagName) { | ||
super(ownerDocument, localName); | ||
} | ||
/* c8 ignore start */ | ||
get disabled() { return booleanAttribute.get(this, 'disabled'); } | ||
set disabled(value) { booleanAttribute.set(this, 'disabled', value); } | ||
get name() { return this.getAttribute('name'); } | ||
set name(value) { this.setAttribute('name', value); } | ||
/* c8 ignore stop */ | ||
} | ||
registerHTMLClass(tagName, HTMLSelectElement); | ||
export {HTMLSelectElement}; |
@@ -9,3 +9,3 @@ import {booleanAttribute, registerHTMLClass} from '../utils.js'; | ||
*/ | ||
export class HTMLTextAreaElement extends TextElement { | ||
class HTMLTextAreaElement extends TextElement { | ||
constructor(ownerDocument, localName = tagName) { | ||
@@ -15,9 +15,18 @@ super(ownerDocument, localName); | ||
get disabled() { | ||
return booleanAttribute.get(this, 'disabled'); | ||
} | ||
/* c8 ignore start */ | ||
get disabled() { return booleanAttribute.get(this, 'disabled'); } | ||
set disabled(value) { booleanAttribute.set(this, 'disabled', value); } | ||
set disabled(value) { | ||
booleanAttribute.set(this, 'disabled', value); | ||
} | ||
get name() { return this.getAttribute('name'); } | ||
set name(value) { this.setAttribute('name', value); } | ||
get placeholder() { return this.getAttribute('placeholder'); } | ||
set placeholder(value) { this.setAttribute('placeholder', value); } | ||
get type() { return this.getAttribute('type'); } | ||
set type(value) { this.setAttribute('type', value); } | ||
get value() { return this.textContent; } | ||
set value(content) { this.textContent = content; } | ||
/* c8 ignore stop */ | ||
} | ||
@@ -24,0 +33,0 @@ |
{ | ||
"name": "linkedom", | ||
"version": "0.2.1", | ||
"version": "0.2.2", | ||
"description": "A triple-linked lists based DOM implementation", | ||
@@ -5,0 +5,0 @@ "main": "./cjs/index.js", |
@@ -65,43 +65,2 @@ # 🔗 linkedom | ||
## Parsing VS Node Types | ||
This module parses, and works, only with the following `nodeType`: | ||
* `ELEMENT_NODE` | ||
* `ATTRIBUTE_NODE` | ||
* `TEXT_NODE` | ||
* `COMMENT_NODE` | ||
* `DOCUMENT_NODE` | ||
* `DOCUMENT_FRAGMENT_NODE` | ||
Everything else, at least for the time being, is considered *YAGNI*, and it won't likely ever land in this project, as there's no goal to replicate deprecated features of this aged Web. | ||
## Benchmarks | ||
To run the benchmark locally, please follow these commands: | ||
```sh | ||
git clone https://github.com/WebReflection/linkedom.git | ||
cd linkedom/test | ||
npm i | ||
cd .. | ||
npm i | ||
npm run benchmark | ||
``` | ||
Following a couple of (outdated) benchmark results example. | ||
### benchmark:dom | ||
 | ||
### benchmark:html | ||
 | ||
## How does it work? | ||
@@ -117,6 +76,6 @@ | ||
Node: ← node → | ||
Attr<Node>: ← attr → ↑ ownerElement | ||
Text<Node>: ← text → ↑ parentNode | ||
Comment<Node>: ← comment → ↑ parentNode | ||
Element<Node>: ← start ↔ end → ↑ parentNode | ||
Attr<Node>: ← attr → ↑ ownerElement? | ||
Text<Node>: ← text → ↑ parentNode? | ||
Comment<Node>: ← comment → ↑ parentNode? | ||
Element<Node>: ← start ↔ end → ↑ parentNode? | ||
@@ -164,1 +123,41 @@ Fragment<Element>: start ↔ end | ||
## Parsing VS Node Types | ||
This module parses, and works, only with the following `nodeType`: | ||
* `ELEMENT_NODE` | ||
* `ATTRIBUTE_NODE` | ||
* `TEXT_NODE` | ||
* `COMMENT_NODE` | ||
* `DOCUMENT_NODE` | ||
* `DOCUMENT_FRAGMENT_NODE` | ||
Everything else, at least for the time being, is considered *YAGNI*, and it won't likely ever land in this project, as there's no goal to replicate deprecated features of this aged Web. | ||
## Benchmarks | ||
To run the benchmark locally, please follow these commands: | ||
```sh | ||
git clone https://github.com/WebReflection/linkedom.git | ||
cd linkedom/test | ||
npm i | ||
cd .. | ||
npm i | ||
npm run benchmark | ||
``` | ||
Following a couple of (outdated) benchmark results example. | ||
### benchmark:dom | ||
 | ||
### benchmark:html | ||
 |
1618918
7559
161