From 0117568c2511da33dbe030b3986213486646b7dd Mon Sep 17 00:00:00 2001 From: michael Date: Thu, 24 Aug 2017 08:26:50 +0000 Subject: [PATCH] * Patch from Martok to let CreateElement create correct class (bug ID 32322) git-svn-id: trunk@37048 - --- packages/fcl-xml/src/dom_html.pp | 84 ++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 5 deletions(-) diff --git a/packages/fcl-xml/src/dom_html.pp b/packages/fcl-xml/src/dom_html.pp index 45622cf0fe..55e19e39ce 100644 --- a/packages/fcl-xml/src/dom_html.pp +++ b/packages/fcl-xml/src/dom_html.pp @@ -665,7 +665,7 @@ type function HashForName(const aName: DOMString): PHashItem; // Helper functions (not in DOM standard): - function CreateElement(const tagName: DOMString): THTMLElement; + function CreateElement(const tagName: DOMString; UseSpecificClass : Boolean = True): THTMLElement; function CreateSubElement: THTMLElement; function CreateSupElement: THTMLElement; function CreateSpanElement: THTMLElement; @@ -697,8 +697,9 @@ type function CreateHtmlElement: THTMLHtmlElement; function CreateHeadElement: THTMLHeadElement; function CreateLinkElement: THTMLLinkElement; -{ function CreateTitleElement: THTMLTitleElement; + function CreateTitleElement: THTMLTitleElement; function CreateMetaElement: THTMLMetaElement; +{ function CreateBaseElement: THTMLBaseElement; function CreateIsIndexElement: THTMLIsIndexElement; function CreateStyleElement: THTMLStyleElement;} @@ -1248,10 +1249,71 @@ begin Result := TByNameNodeList.Create(Self, ElementName); end; -function THTMLDocument.CreateElement(const tagName: DOMString): THTMLElement; +function THTMLDocument.CreateElement(const tagName: DOMString; UseSpecificClass : Boolean = True): THTMLElement; + +var + elClass: TDOMElementClass; begin - Result := THTMLElement.Create(Self); - Result.FNSI.QName := FNames.FindOrAdd(DOMPChar(tagName), Length(tagName)); + elClass:=THTMLElement; + if UseSpecificClass then + case UpperCase(tagName) of + 'HTML' : elClass:= THTMLHtmlElement; + 'HEAD' : elClass:= THTMLHeadElement; + 'BODY' : elClass:= THTMLBodyElement; + 'P' : elClass:= THTMLParagraphElement; + 'LINK' : elClass:= THTMLLinkElement; + 'TITLE' : elClass:= THTMLTitleElement; + 'META' : elClass:= THTMLMetaElement; + 'BASE' : elClass:= THTMLBaseElement; + 'ISINDEX' : elClass:= THTMLIsIndexElement; + 'STYLE' : elClass:= THTMLStyleElement; + 'FORM' : elClass:= THTMLFormElement; + 'SELECT' : elClass:= THTMLSelectElement; + 'OPTGROUP' : elClass:= THTMLOptGroupElement; + 'OPTION' : elClass:= THTMLOptionElement; + 'INPUT' : elClass:= THTMLInputElement; + 'TEXTAREA' : elClass:= THTMLTextAreaElement; + 'BUTTON' : elClass:= THTMLButtonElement; + 'LABEL' : elClass:= THTMLLabelElement; + 'FIELDSET' : elClass:= THTMLFieldSetElement; + 'LEGEND' : elClass:= THTMLLegendElement; + 'UL' : elClass:= THTMLUListElement; + 'OL' : elClass:= THTMLOListElement; + 'DL' : elClass:= THTMLDListElement; + 'DIRECTORY' : elClass:= THTMLDirectoryElement; + 'MENU' : elClass:= THTMLMenuElement; + 'LI' : elClass:= THTMLLIElement; + 'DIV' : elClass:= THTMLDivElement; + 'H1','H2','H3','H4','H5', + 'H6','H7','H8','H9' : elClass:= THTMLHeadingElement; + 'QUOTE' : elClass:= THTMLQuoteElement; + 'PRE' : elClass:= THTMLPreElement; + 'BR' : elClass:= THTMLBRElement; + 'BASEFONT' : elClass:= THTMLBaseFontElement; + 'FONT' : elClass:= THTMLFontElement; + 'HR' : elClass:= THTMLHRElement; + 'MOD' : elClass:= THTMLModElement; + 'A' : elClass:= THTMLAnchorElement; + 'IMG' : elClass:= THTMLImageElement; + 'OBJECT' : elClass:= THTMLObjectElement; + 'PARAM' : elClass:= THTMLParamElement; + 'APPLET' : elClass:= THTMLAppletElement; + 'MAP' : elClass:= THTMLMapElement; + 'AREA' : elClass:= THTMLAreaElement; + 'SCRIPT' : elClass:= THTMLScriptElement; + 'TABLE' : elClass:= THTMLTableElement; + 'CAPTION' : elClass:= THTMLTableCaptionElement; + //'TABLECOL' : elClass:= THTMLTableColElement; + 'THEAD','TBODY', + 'TFOOT' : elClass:= THTMLTableSectionElement; + 'TR' : elClass:= THTMLTableRowElement; + 'TD','TH' : elClass:= THTMLTableCellElement; + 'FRAMESET' : elClass:= THTMLFrameSetElement; + 'FRAME' : elClass:= THTMLFrameElement; + 'IFRAME' : elClass:= THTMLIFrameElement; + end; + Result := THTMLElement(elClass.Create(Self)); + Result.FNSI.QName:=HashForName(tagName); end; function THTMLDocument.HashForName(const aName: DOMString): PHashItem; @@ -1306,6 +1368,18 @@ begin Result.FNSI.QName := HashForName('a'); end; +function THTMLDocument.CreateTitleElement: THTMLTitleElement; +begin + Result := THTMLTitleElement.Create(Self); + Result.FNSI.QName := HashForName('title'); +end; + +function THTMLDocument.CreateMetaElement: THTMLMetaElement; +begin + Result := THTMLMetaElement.Create(Self); + Result.FNSI.QName := HashForName('meta'); +end; + function THTMLDocument.CreateBodyElement: THTMLBodyElement; begin Result := THTMLBodyElement.Create(Self);