xhtml.pp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. {
  2. This file is part of the Free Component Library
  3. XHTML helper classes
  4. Copyright (c) 2000 by
  5. Areca Systems GmbH / Sebastian Guenther, [email protected]
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. unit XHTML;
  13. {$MODE objfpc}
  14. {$H+}
  15. interface
  16. uses DOM, DOM_HTML;
  17. type
  18. TXHTMLTitleElement = class(TDOMElement);
  19. TXHTMLHeadElement = class(TDOMElement)
  20. private
  21. function GetTitleElement: TXHTMLTitleElement;
  22. public
  23. function RequestTitleElement: TXHTMLTitleElement;
  24. property TitleElement: TXHTMLTitleElement read GetTitleElement;
  25. end;
  26. TXHTMLBodyElement = class(TDOMElement);
  27. TXHTMLType = (xhtmlStrict, xhtmlTransitional);
  28. TXHTMLDocument = class(THTMLDocument)
  29. private
  30. function GetHeadElement: TXHTMLHeadElement;
  31. function GetBodyElement: TXHTMLBodyElement;
  32. public
  33. procedure CreateRoot(XHTMLType: TXHTMLType);
  34. function RequestHeadElement: TXHTMLHeadElement;
  35. function RequestBodyElement(const Lang: DOMString): TXHTMLBodyElement;
  36. property HeadElement: TXHTMLHeadElement read GetHeadElement;
  37. property BodyElement: TXHTMLBodyElement read GetBodyElement;
  38. end;
  39. implementation
  40. function TXHTMLHeadElement.RequestTitleElement: TXHTMLTitleElement;
  41. begin
  42. Result := TitleElement;
  43. if not Assigned(Result) then
  44. begin
  45. Result := TXHTMLTitleElement(OwnerDocument.CreateElement('title'));
  46. AppendChild(Result);
  47. end;
  48. end;
  49. function TXHTMLHeadElement.GetTitleElement: TXHTMLTitleElement;
  50. begin
  51. Result := TXHTMLTitleElement(FindNode('title'));
  52. end;
  53. procedure TXHTMLDocument.CreateRoot(XHTMLType: TXHTMLType);
  54. var
  55. s: DOMString;
  56. HtmlEl: TDOMElement;
  57. begin
  58. case XHTMLType of
  59. xhtmlStrict:
  60. s := 'html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"';
  61. xhtmlTransitional:
  62. s := 'html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd"';
  63. end;
  64. AppendChild(CreateProcessingInstruction('DOCTYPE', s));
  65. HtmlEl := CreateElement('html');
  66. AppendChild(HtmlEl);
  67. HtmlEl['xmlns'] := 'http://www.w3.org/1999/xhtml';
  68. end;
  69. function TXHTMLDocument.RequestHeadElement: TXHTMLHeadElement;
  70. begin
  71. Result := HeadElement;
  72. if not Assigned(Result) then
  73. begin
  74. Result := TXHTMLHeadElement(CreateElement('head'));
  75. DocumentElement.AppendChild(Result);
  76. end;
  77. end;
  78. function TXHTMLDocument.RequestBodyElement(const Lang: DOMString):
  79. TXHTMLBodyElement;
  80. begin
  81. Result := BodyElement;
  82. if not Assigned(Result) then
  83. begin
  84. Result := TXHTMLBodyElement(CreateElement('body'));
  85. DocumentElement.AppendChild(Result);
  86. Result['xmlns'] := 'http://www.w3.org/1999/xhtml';
  87. Result['xml:lang'] := Lang;
  88. Result['lang'] := Lang;
  89. end;
  90. end;
  91. function TXHTMLDocument.GetHeadElement: TXHTMLHeadElement;
  92. begin
  93. Result := TXHTMLHeadElement(DocumentElement.FindNode('head'));
  94. end;
  95. function TXHTMLDocument.GetBodyElement: TXHTMLBodyElement;
  96. begin
  97. Result := TXHTMLBodyElement(DocumentElement.FindNode('body'));
  98. end;
  99. end.