derya
Version:
Multi-Parser & Code-Generator, developed with TypeScript on node.js.
1,012 lines (965 loc) • 26.6 kB
text/typescript
//Imports
import {HTMLElement} from "./html_element";
import {ObjectContainer} from "samara";
import {isClosedTag, isTag, validatePage} from "./html_validation";
import * as sys from "samara";
import * as tags from "./ref/html_tags.json";
//Classes
export class HTMLSourceCode{
//Declarations
private _ids:number = 0;
private _sc:HTMLElement[];
//Constructor
constructor(sourceCode?:string){
this.sc = [];
if(!sys.isNull(sourceCode)){
this.parse(sourceCode);
}
}
//Methods
addCharset(charset:string):HTMLElement{
let tag:HTMLElement = new HTMLElement(this.getNewID(), "meta", true, false);
if(!sys.isNull(charset)){
tag.addAttributeCharset(charset.toUpperCase());
return this.addElement(tag);
}
return undefined;
}
addComment(comment:string):HTMLElement{
if(!sys.isNull(comment)){
return this.addContent("<!-- " + comment + " -->")
}
return undefined;
}
addContent(content:string):HTMLElement{
content = sys.removeTags(content).trim();
if(!sys.isNull(content)){
return this.addElement(new HTMLElement(this.getNewID(), content, false, undefined));
}
return undefined;
}
addContentUnsafe(content:string):HTMLElement{
if(!sys.isNull(content)){
return this.addElement(new HTMLElement(this.getNewID(), content.trim(), false, undefined));
}
return undefined;
}
addDoctype():HTMLElement{
return this.addElement(new HTMLElement(this.getNewID(), "!DOCTYPE html", true, false));
}
addElement(element:HTMLElement):HTMLElement{
this.sc.push(element);
return element;
}
addFontFace(family:string, url:string):HTMLElement{
return this.addContent("@font-face{font-family: \"" + family + "\"; src: url(\"/" + url + "\");}")
}
addIcon(name:string, md:string[]):HTMLElement{
let tag:HTMLElement = this.openSpan();
if(md.length < 1){
tag.addAttributeClass("material-icons");
}else{
let str:string = "material-icons";
for(let i:number = 0; i < md.length; i++){
str += " " + md[i];
}
tag.addAttributeClass(str);
}
tag = this.addContent(name);
this.closeSpan();
return tag;
}
addImgDefault(src:string, alt:string):HTMLElement{
let tag:HTMLElement = this.addImg();
tag.addAttributeSrc(src);
tag.addAttributeAlt(alt);
return tag;
}
addInputDefault(type:string, id:string, name:string){
let tag:HTMLElement = this.addInput();
tag.addAttributeType(type);
tag.addAttributeId(id);
tag.addAttributeName(name);
return tag;
}
addMetaDefault(name:string, content:string):HTMLElement{
let tag:HTMLElement = new HTMLElement(this.getNewID(), "meta", true, false);
if(!sys.isNull(name) && !sys.isNull(content)){
tag.addAttributeName(name.toLowerCase());
tag.addAttributeContent(content);
return this.addElement(tag);
}
return undefined;
}
addSourceCode(sc:HTMLSourceCode):void{
for(let element of sc.sc){
this.sc.push(element);
}
}
addTag(tag:string):HTMLElement{
if(isTag(tag.toLowerCase())){
return this.addTagUnsafe(tag);
}
return undefined;
}
addTagUnsafe(tag:string):HTMLElement{
return this.addElement(new HTMLElement(this.getNewID(), tag.toLowerCase(), true, false));
}
addTitle(value:string):void{
this.openTitle()
this.addContent(value)
this.closeTitle();
}
closeTag(tag:string):HTMLElement{
if(isClosedTag(tag.toLowerCase())){
return this.closeTagUnsafe(tag);
}
return undefined;
}
closeTagUnsafe(tag:string):HTMLElement{
return this.addElement(new HTMLElement(this.getNewID(), tag.toLowerCase(), true, true));
}
static containsTags(sourceCode:string):Boolean{
if(sourceCode.indexOf("<") > -1 && sourceCode.indexOf(">") > sourceCode.indexOf("<")){
return true;
}else{
return false;
}
}
static extractComment(str:string):string{
str = str.substring(4, str.length);
str = sys.removeAll(str, "-->");
if(str.indexOf(">") > -1){
str = str.substring(0, str.indexOf(">"))
}
return str.trim();
}
getElement(id:number):HTMLElement{
for(let element of this.sc){
if(element.id === id){
return element;
}
}
return undefined;
}
getHTML(validate?:Boolean):string{
let html:string = "";
if(validate === true){
let errors:ObjectContainer = validatePage(this.sc);
if(errors.getLength() > 0){
for(let error of errors.objects){
html += "ERROR: " + error.object + "!\r\n";
}
}
}
//Generate format String
let lvl:number = 0;
for(let element of this.sc){
if(element.tag && isClosedTag(element.content) && element.closed){
lvl--;
}
let tabs:string = "";
for(let i = 0; i < lvl; i++){
tabs += "\t";
}
html += tabs + element.getContent() + "\r\n";
//console.log("YYY: " + element.getContent());
if(element.tag && isClosedTag(element.content) && !element.closed){
lvl++;
}
}
return html;
}
private getNewID():number{
return this.ids++;
}
static getTag(name:string){
if(name.indexOf("/") === 0){
name = name.substring(name.indexOf("/") + 1, name.length);
}
if(name.indexOf(" ") > -1){
name = name.substring(0, name.indexOf(" "));
}
//console.log("NAME: " + name)
for(let tag of tags.tags){
if(tag.name === name){
return tag;
}
}
return undefined;
}
static isComment(str:string):Boolean{
if(str.indexOf("<!--") === 0 && str.indexOf("-->") > 3){
return true;
}else{
return false;
}
}
openBodyDefault():HTMLElement{
let tag:HTMLElement = this.openBody();
tag.addStyleSizes("100%", "100%");
tag.addStyleMarginPadding("0em", "0em");
return tag;
}
openDivWithClass(value:string):HTMLElement{
let element:HTMLElement = this.openDiv();
element.addAttributeClass(value);
return element;
}
openDivWithID(value:string):HTMLElement{
let element:HTMLElement = this.openDiv();
element.addAttributeId(value);
return element;
}
openHTMLDefault():HTMLElement{
let tag:HTMLElement = this.openHtml();
tag.addStyleSizes("100%", "100%");
return tag;
}
openScriptDefault(src:string):HTMLElement{
let tag:HTMLElement = this.openScript();
tag.addAttributeType("text/javascript");
tag.addAttributeSrc(src);
return tag;
}
openTag(tag:string):HTMLElement{
if(isClosedTag(tag.toLowerCase())){
return this.openTagUnsafe(tag);
}
return undefined;
}
openTagUnsafe(tag:string):HTMLElement{
return this.addElement(new HTMLElement(this.getNewID(), tag.toLowerCase(), true, false));
}
openTagWithClass(tag:string, value:string):HTMLElement{
let element:HTMLElement = this.openTag(tag);
element.addAttributeClass(value);
return element;
}
openTagWithID(tag:string, value:string):HTMLElement{
let element:HTMLElement = this.openTag(tag);
element.addAttributeId(value);
return element;
}
parse(sourceCode:string):void{
sourceCode = cleanSourceCode(sourceCode);
let isScript:Boolean = false;
while(HTMLSourceCode.containsTags(sourceCode)){
let index1:number;
if(isScript){
index1 = sourceCode.indexOf("</script>");
//console.log("SCRIPT: " + sourceCode.substring(0, index1).trim());
this.addContentUnsafe(sourceCode.substring(0, index1).trim());
sourceCode = sourceCode.substring(index1, sourceCode.length);
isScript = false;
}
index1 = sourceCode.indexOf("<");
if(index1 > 0){
//console.log("CONTENT: " + sourceCode.substring(0, index1).trim());
this.addContent(sourceCode.substring(0, index1).trim());
sourceCode = sourceCode.substring(index1, sourceCode.length);
}else{
let index2:number = sourceCode.indexOf(">") + 1;
let tag:string = sourceCode.substring(0, index2);
tag = sys.replaceAll(tag, "/>", ">");
if(HTMLSourceCode.isComment(tag)){
this.addComment(HTMLSourceCode.extractComment(tag));
}else{
if(tag.toLowerCase().indexOf("doctype") > -1){
this.addDoctype();
}else{
//console.log("TAG: " + tag);
let name:string = tag.substring(1, tag.length - 1);
if(name === "script"){
isScript = true;
}
//console.log("TAG-NAME: " + name);
let t = HTMLSourceCode.getTag(name);
if(t !== undefined){
if(t.closed){
if(name.indexOf("/") === 0){
name = name.substring(name.indexOf("/") + 1, name.length);
if(name.indexOf(" ") > -1){
name = name.substring(0, name.indexOf(" "));
}
name = name.trim();
//console.log("CLOSE: " + name);
this.closeTagUnsafe(name);
}else{
//console.log("OPEN: " + name);
createElement(this.openTagUnsafe(extractName(name)), getParas(name));
}
}else{
//console.log("ADD: " + name);
createElement(this.addTagUnsafe(extractName(name)), getParas(name));
}
}
}
}
sourceCode = sourceCode.substring(index2, sourceCode.length);
}
}
sourceCode = sourceCode.trim();
if(sourceCode.length > 0){
this.addContent(sourceCode);
}
//console.log("sourceCode: " + sourceCode);
//SubFunctions
function cleanSourceCode(sourceCode:string):string{
sourceCode = sys.removeBreaksAndTabs(sourceCode);
sourceCode = sys.removeDoubleSpaces(sourceCode);
return sourceCode.trim();
}
function createElement(tag:HTMLElement, paras:string[]):HTMLElement{
for(let p of paras){
//console.log("PARA: " + p);
if(p.indexOf("=") < 0){
//console.log("PARA1: " + p);
tag.addAttribute(p);
}else{
let split:string[] = p.split("=");
//console.log("PARA2: " + split[0] + " || " + split[1]);
tag.addAttribute(split[0].toLowerCase().trim(), sys.removeAll(split[1], "\"").trim());
}
}
//console.log("TTT: " + tag.attributes.length);
return tag;
}
function extractName(str:string):string{
str = str.trim();
if(str.indexOf(" ") < 0){
return str;
}else{
return str.substring(0, str.indexOf(" "));
}
}
function getParas(str:string):string[]{
str = str.trim();
let paras:string[] = [];
if(str.indexOf(" ") > -1){
str = str.substring(str.indexOf(" ") + 1, str.length);
//console.log("GP: " + str);
if(str.indexOf("\" ") < 0){
paras.push(str);
}else{
paras = str.split("\" ");
}
//paras = str.split(" ");
//paras.shift();
}
return paras;
}
}
//Get-Methods
get ids():number{
return this._ids;
}
get sc():HTMLElement[]{
return this._sc;
}
//Set-Methods
set ids(value:number){
this._ids = value;
}
set sc(values:HTMLElement[]){
this._sc = values;
}
//Generated-Methods
addArea():HTMLElement{
return this.addTagUnsafe("area");
}
addBase():HTMLElement{
return this.addTagUnsafe("base");
}
addEmbed():HTMLElement{
return this.addTagUnsafe("embed");
}
addHr():HTMLElement{
return this.addTagUnsafe("hr");
}
addImg():HTMLElement{
return this.addTagUnsafe("img");
}
addInput():HTMLElement{
return this.addTagUnsafe("input");
}
addLink():HTMLElement{
return this.addTagUnsafe("link");
}
addMeta():HTMLElement{
return this.addTagUnsafe("meta");
}
addParam():HTMLElement{
return this.addTagUnsafe("param");
}
addTrack():HTMLElement{
return this.addTagUnsafe("track");
}
addWbr():HTMLElement{
return this.addTagUnsafe("wbr");
}
closeA():HTMLElement{
return this.closeTagUnsafe("a");
}
closeAbbr():HTMLElement{
return this.closeTagUnsafe("abbr");
}
closeAddress():HTMLElement{
return this.closeTagUnsafe("address");
}
closeArticle():HTMLElement{
return this.closeTagUnsafe("article");
}
closeAside():HTMLElement{
return this.closeTagUnsafe("aside");
}
closeAudio():HTMLElement{
return this.closeTagUnsafe("audio");
}
closeB():HTMLElement{
return this.closeTagUnsafe("b");
}
closeBdi():HTMLElement{
return this.closeTagUnsafe("bdi");
}
closeBdo():HTMLElement{
return this.closeTagUnsafe("bdo");
}
closeBlockquote():HTMLElement{
return this.closeTagUnsafe("blockquote");
}
closeBody():HTMLElement{
return this.closeTagUnsafe("body");
}
closeBr():HTMLElement{
return this.closeTagUnsafe("br");
}
closeButton():HTMLElement{
return this.closeTagUnsafe("button");
}
closeCanvas():HTMLElement{
return this.closeTagUnsafe("canvas");
}
closeCaption():HTMLElement{
return this.closeTagUnsafe("caption");
}
closeCite():HTMLElement{
return this.closeTagUnsafe("cite");
}
closeCode():HTMLElement{
return this.closeTagUnsafe("code");
}
closeCol():HTMLElement{
return this.closeTagUnsafe("col");
}
closeColgroup():HTMLElement{
return this.closeTagUnsafe("colgroup");
}
closeData():HTMLElement{
return this.closeTagUnsafe("data");
}
closeDatalist():HTMLElement{
return this.closeTagUnsafe("datalist");
}
closeDd():HTMLElement{
return this.closeTagUnsafe("dd");
}
closeDel():HTMLElement{
return this.closeTagUnsafe("del");
}
closeDetails():HTMLElement{
return this.closeTagUnsafe("details");
}
closeDfn():HTMLElement{
return this.closeTagUnsafe("dfn");
}
closeDialog():HTMLElement{
return this.closeTagUnsafe("dialog");
}
closeDiv():HTMLElement{
return this.closeTagUnsafe("div");
}
closeDl():HTMLElement{
return this.closeTagUnsafe("dl");
}
closeDt():HTMLElement{
return this.closeTagUnsafe("dt");
}
closeEm():HTMLElement{
return this.closeTagUnsafe("em");
}
closeFieldset():HTMLElement{
return this.closeTagUnsafe("fieldset");
}
closeFigcaption():HTMLElement{
return this.closeTagUnsafe("figcaption");
}
closeFigure():HTMLElement{
return this.closeTagUnsafe("figure");
}
closeFooter():HTMLElement{
return this.closeTagUnsafe("footer");
}
closeForm():HTMLElement{
return this.closeTagUnsafe("form");
}
closeH1():HTMLElement{
return this.closeTagUnsafe("h1");
}
closeHead():HTMLElement{
return this.closeTagUnsafe("head");
}
closeHeader():HTMLElement{
return this.closeTagUnsafe("header");
}
closeHtml():HTMLElement{
return this.closeTagUnsafe("html");
}
closeI():HTMLElement{
return this.closeTagUnsafe("i");
}
closeIframe():HTMLElement{
return this.closeTagUnsafe("iframe");
}
closeIns():HTMLElement{
return this.closeTagUnsafe("ins");
}
closeKbd():HTMLElement{
return this.closeTagUnsafe("kbd");
}
closeLabel():HTMLElement{
return this.closeTagUnsafe("label");
}
closeLegend():HTMLElement{
return this.closeTagUnsafe("legend");
}
closeLi():HTMLElement{
return this.closeTagUnsafe("li");
}
closeMain():HTMLElement{
return this.closeTagUnsafe("main");
}
closeMap():HTMLElement{
return this.closeTagUnsafe("map");
}
closeMark():HTMLElement{
return this.closeTagUnsafe("mark");
}
closeMeter():HTMLElement{
return this.closeTagUnsafe("meter");
}
closeNav():HTMLElement{
return this.closeTagUnsafe("nav");
}
closeNoscript():HTMLElement{
return this.closeTagUnsafe("noscript");
}
closeObject():HTMLElement{
return this.closeTagUnsafe("object");
}
closeOl():HTMLElement{
return this.closeTagUnsafe("ol");
}
closeOptgroup():HTMLElement{
return this.closeTagUnsafe("optgroup");
}
closeOption():HTMLElement{
return this.closeTagUnsafe("option");
}
closeOutput():HTMLElement{
return this.closeTagUnsafe("output");
}
closeP():HTMLElement{
return this.closeTagUnsafe("p");
}
closePicture():HTMLElement{
return this.closeTagUnsafe("picture");
}
closePre():HTMLElement{
return this.closeTagUnsafe("pre");
}
closeProgress():HTMLElement{
return this.closeTagUnsafe("progress");
}
closeQ():HTMLElement{
return this.closeTagUnsafe("q");
}
closeRp():HTMLElement{
return this.closeTagUnsafe("rp");
}
closeRt():HTMLElement{
return this.closeTagUnsafe("rt");
}
closeRuby():HTMLElement{
return this.closeTagUnsafe("ruby");
}
closeS():HTMLElement{
return this.closeTagUnsafe("s");
}
closeSamp():HTMLElement{
return this.closeTagUnsafe("samp");
}
closeScript():HTMLElement{
return this.closeTagUnsafe("script");
}
closeSection():HTMLElement{
return this.closeTagUnsafe("section");
}
closeSelect():HTMLElement{
return this.closeTagUnsafe("select");
}
closeSmall():HTMLElement{
return this.closeTagUnsafe("small");
}
closeSource():HTMLElement{
return this.closeTagUnsafe("source");
}
closeSpan():HTMLElement{
return this.closeTagUnsafe("span");
}
closeStrong():HTMLElement{
return this.closeTagUnsafe("strong");
}
closeStyle():HTMLElement{
return this.closeTagUnsafe("style");
}
closeSub():HTMLElement{
return this.closeTagUnsafe("sub");
}
closeSummary():HTMLElement{
return this.closeTagUnsafe("summary");
}
closeSup():HTMLElement{
return this.closeTagUnsafe("sup");
}
closeSvg():HTMLElement{
return this.closeTagUnsafe("svg");
}
closeTable():HTMLElement{
return this.closeTagUnsafe("table");
}
closeTbody():HTMLElement{
return this.closeTagUnsafe("tbody");
}
closeTd():HTMLElement{
return this.closeTagUnsafe("td");
}
closeTemplate():HTMLElement{
return this.closeTagUnsafe("template");
}
closeTextarea():HTMLElement{
return this.closeTagUnsafe("textarea");
}
closeTfoot():HTMLElement{
return this.closeTagUnsafe("tfoot");
}
closeTh():HTMLElement{
return this.closeTagUnsafe("th");
}
closeThead():HTMLElement{
return this.closeTagUnsafe("thead");
}
closeTime():HTMLElement{
return this.closeTagUnsafe("time");
}
closeTitle():HTMLElement{
return this.closeTagUnsafe("title");
}
closeTr():HTMLElement{
return this.closeTagUnsafe("tr");
}
closeU():HTMLElement{
return this.closeTagUnsafe("u");
}
closeUl():HTMLElement{
return this.closeTagUnsafe("ul");
}
closeVar():HTMLElement{
return this.closeTagUnsafe("var");
}
closeVideo():HTMLElement{
return this.closeTagUnsafe("video");
}
openA():HTMLElement{
return this.openTagUnsafe("a");
}
openAbbr():HTMLElement{
return this.openTagUnsafe("abbr");
}
openAddress():HTMLElement{
return this.openTagUnsafe("address");
}
openArticle():HTMLElement{
return this.openTagUnsafe("article");
}
openAside():HTMLElement{
return this.openTagUnsafe("aside");
}
openAudio():HTMLElement{
return this.openTagUnsafe("audio");
}
openB():HTMLElement{
return this.openTagUnsafe("b");
}
openBdi():HTMLElement{
return this.openTagUnsafe("bdi");
}
openBdo():HTMLElement{
return this.openTagUnsafe("bdo");
}
openBlockquote():HTMLElement{
return this.openTagUnsafe("blockquote");
}
openBody():HTMLElement{
return this.openTagUnsafe("body");
}
openBr():HTMLElement{
return this.openTagUnsafe("br");
}
openButton():HTMLElement{
return this.openTagUnsafe("button");
}
openCanvas():HTMLElement{
return this.openTagUnsafe("canvas");
}
openCaption():HTMLElement{
return this.openTagUnsafe("caption");
}
openCite():HTMLElement{
return this.openTagUnsafe("cite");
}
openCode():HTMLElement{
return this.openTagUnsafe("code");
}
openCol():HTMLElement{
return this.openTagUnsafe("col");
}
openColgroup():HTMLElement{
return this.openTagUnsafe("colgroup");
}
openData():HTMLElement{
return this.openTagUnsafe("data");
}
openDatalist():HTMLElement{
return this.openTagUnsafe("datalist");
}
openDd():HTMLElement{
return this.openTagUnsafe("dd");
}
openDel():HTMLElement{
return this.openTagUnsafe("del");
}
openDetails():HTMLElement{
return this.openTagUnsafe("details");
}
openDfn():HTMLElement{
return this.openTagUnsafe("dfn");
}
openDialog():HTMLElement{
return this.openTagUnsafe("dialog");
}
openDiv():HTMLElement{
return this.openTagUnsafe("div");
}
openDl():HTMLElement{
return this.openTagUnsafe("dl");
}
openDt():HTMLElement{
return this.openTagUnsafe("dt");
}
openEm():HTMLElement{
return this.openTagUnsafe("em");
}
openFieldset():HTMLElement{
return this.openTagUnsafe("fieldset");
}
openFigcaption():HTMLElement{
return this.openTagUnsafe("figcaption");
}
openFigure():HTMLElement{
return this.openTagUnsafe("figure");
}
openFooter():HTMLElement{
return this.openTagUnsafe("footer");
}
openForm():HTMLElement{
return this.openTagUnsafe("form");
}
openH1():HTMLElement{
return this.openTagUnsafe("h1");
}
openHead():HTMLElement{
return this.openTagUnsafe("head");
}
openHeader():HTMLElement{
return this.openTagUnsafe("header");
}
openHtml():HTMLElement{
return this.openTagUnsafe("html");
}
openI():HTMLElement{
return this.openTagUnsafe("i");
}
openIframe():HTMLElement{
return this.openTagUnsafe("iframe");
}
openIns():HTMLElement{
return this.openTagUnsafe("ins");
}
openKbd():HTMLElement{
return this.openTagUnsafe("kbd");
}
openLabel():HTMLElement{
return this.openTagUnsafe("label");
}
openLegend():HTMLElement{
return this.openTagUnsafe("legend");
}
openLi():HTMLElement{
return this.openTagUnsafe("li");
}
openMain():HTMLElement{
return this.openTagUnsafe("main");
}
openMap():HTMLElement{
return this.openTagUnsafe("map");
}
openMark():HTMLElement{
return this.openTagUnsafe("mark");
}
openMeter():HTMLElement{
return this.openTagUnsafe("meter");
}
openNav():HTMLElement{
return this.openTagUnsafe("nav");
}
openNoscript():HTMLElement{
return this.openTagUnsafe("noscript");
}
openObject():HTMLElement{
return this.openTagUnsafe("object");
}
openOl():HTMLElement{
return this.openTagUnsafe("ol");
}
openOptgroup():HTMLElement{
return this.openTagUnsafe("optgroup");
}
openOption():HTMLElement{
return this.openTagUnsafe("option");
}
openOutput():HTMLElement{
return this.openTagUnsafe("output");
}
openP():HTMLElement{
return this.openTagUnsafe("p");
}
openPicture():HTMLElement{
return this.openTagUnsafe("picture");
}
openPre():HTMLElement{
return this.openTagUnsafe("pre");
}
openProgress():HTMLElement{
return this.openTagUnsafe("progress");
}
openQ():HTMLElement{
return this.openTagUnsafe("q");
}
openRp():HTMLElement{
return this.openTagUnsafe("rp");
}
openRt():HTMLElement{
return this.openTagUnsafe("rt");
}
openRuby():HTMLElement{
return this.openTagUnsafe("ruby");
}
openS():HTMLElement{
return this.openTagUnsafe("s");
}
openSamp():HTMLElement{
return this.openTagUnsafe("samp");
}
openScript():HTMLElement{
return this.openTagUnsafe("script");
}
openSection():HTMLElement{
return this.openTagUnsafe("section");
}
openSelect():HTMLElement{
return this.openTagUnsafe("select");
}
openSmall():HTMLElement{
return this.openTagUnsafe("small");
}
openSource():HTMLElement{
return this.openTagUnsafe("source");
}
openSpan():HTMLElement{
return this.openTagUnsafe("span");
}
openStrong():HTMLElement{
return this.openTagUnsafe("strong");
}
openStyle():HTMLElement{
return this.openTagUnsafe("style");
}
openSub():HTMLElement{
return this.openTagUnsafe("sub");
}
openSummary():HTMLElement{
return this.openTagUnsafe("summary");
}
openSup():HTMLElement{
return this.openTagUnsafe("sup");
}
openSvg():HTMLElement{
return this.openTagUnsafe("svg");
}
openTable():HTMLElement{
return this.openTagUnsafe("table");
}
openTbody():HTMLElement{
return this.openTagUnsafe("tbody");
}
openTd():HTMLElement{
return this.openTagUnsafe("td");
}
openTemplate():HTMLElement{
return this.openTagUnsafe("template");
}
openTextarea():HTMLElement{
return this.openTagUnsafe("textarea");
}
openTfoot():HTMLElement{
return this.openTagUnsafe("tfoot");
}
openTh():HTMLElement{
return this.openTagUnsafe("th");
}
openThead():HTMLElement{
return this.openTagUnsafe("thead");
}
openTime():HTMLElement{
return this.openTagUnsafe("time");
}
openTitle():HTMLElement{
return this.openTagUnsafe("title");
}
openTr():HTMLElement{
return this.openTagUnsafe("tr");
}
openU():HTMLElement{
return this.openTagUnsafe("u");
}
openUl():HTMLElement{
return this.openTagUnsafe("ul");
}
openVar():HTMLElement{
return this.openTagUnsafe("var");
}
openVideo():HTMLElement{
return this.openTagUnsafe("video");
}
}