Skip to content

Commit

Permalink
speed pu
Browse files Browse the repository at this point in the history
  • Loading branch information
taoqf committed Jun 24, 2021
1 parent bd80104 commit 9589cba
Showing 1 changed file with 74 additions and 47 deletions.
121 changes: 74 additions & 47 deletions src/nodes/html.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,52 +30,79 @@ export interface RawAttributes {
export type InsertPosition = 'beforebegin' | 'afterbegin' | 'beforeend' | 'afterend';

// https://developer.mozilla.org/en-US/docs/Web/HTML/Block-level_elements
const kBlockElements = {
address: true,
article: true,
aside: true,
blockquote: true,
br: true,
details: true,
dialog: true,
dd: true,
div: true,
dl: true,
dt: true,
fieldset: true,
figcaption: true,
figure: true,
footer: true,
form: true,
h1: true,
h2: true,
h3: true,
h4: true,
h5: true,
h6: true,
header: true,
hgroup: true,
hr: true,
li: true,
main: true,
nav: true,
ol: true,
p: true,
pre: true,
section: true,
table: true,
td: true,
tr: true,
ul: true
};

function isBlockElement(node: HTMLElement) {
if (node && node.tagName) {
return Boolean(kBlockElements[node.tagName.toLowerCase()]);
}
return false;
}

const kBlockElements = new Set<string>();
kBlockElements.add('address');
kBlockElements.add('ADDRESS');
kBlockElements.add('article');
kBlockElements.add('ARTICLE');
kBlockElements.add('aside');
kBlockElements.add('ASIDE');
kBlockElements.add('blockquote');
kBlockElements.add('BLOCKQUOTE');
kBlockElements.add('br');
kBlockElements.add('BR');
kBlockElements.add('details');
kBlockElements.add('DETAILS');
kBlockElements.add('dialog');
kBlockElements.add('DIALOG');
kBlockElements.add('dd');
kBlockElements.add('DD');
kBlockElements.add('div');
kBlockElements.add('DIV');
kBlockElements.add('dl');
kBlockElements.add('DL');
kBlockElements.add('dt');
kBlockElements.add('DT');
kBlockElements.add('fieldset');
kBlockElements.add('FIELDSET');
kBlockElements.add('figcaption');
kBlockElements.add('FIGCAPTION');
kBlockElements.add('figure');
kBlockElements.add('FIGURE');
kBlockElements.add('footer');
kBlockElements.add('FOOTER');
kBlockElements.add('form');
kBlockElements.add('FORM');
kBlockElements.add('h1');
kBlockElements.add('H1');
kBlockElements.add('h2');
kBlockElements.add('H2');
kBlockElements.add('h3');
kBlockElements.add('H3');
kBlockElements.add('h4');
kBlockElements.add('H4');
kBlockElements.add('h5');
kBlockElements.add('H5');
kBlockElements.add('h6');
kBlockElements.add('H6');
kBlockElements.add('header');
kBlockElements.add('HEADER');
kBlockElements.add('hgroup');
kBlockElements.add('HGROUP');
kBlockElements.add('hr');
kBlockElements.add('HR');
kBlockElements.add('li');
kBlockElements.add('LI');
kBlockElements.add('main');
kBlockElements.add('MAIN');
kBlockElements.add('nav');
kBlockElements.add('NAV');
kBlockElements.add('ol');
kBlockElements.add('OL');
kBlockElements.add('p');
kBlockElements.add('P');
kBlockElements.add('pre');
kBlockElements.add('PRE');
kBlockElements.add('section');
kBlockElements.add('SECTION');
kBlockElements.add('table');
kBlockElements.add('TABLE');
kBlockElements.add('td');
kBlockElements.add('TD');
kBlockElements.add('tr');
kBlockElements.add('TR');
kBlockElements.add('ul');
kBlockElements.add('UL');

class DOMTokenList {
private _set: Set<string>;
Expand Down Expand Up @@ -274,7 +301,7 @@ export default class HTMLElement extends Node {
const blocks = [currentBlock];
function dfs(node: Node) {
if (node.nodeType === NodeType.ELEMENT_NODE) {
if (isBlockElement(node as HTMLElement)) {
if (kBlockElements.has((node as HTMLElement).rawTagName)) {
if (currentBlock.length > 0) {
blocks.push(currentBlock = []);
}
Expand Down

0 comments on commit 9589cba

Please sign in to comment.