From 92b55c633c9f4f31b1f0ea0e6d35ee3db7538214 Mon Sep 17 00:00:00 2001 From: bgisme <55024704+bgisme@users.noreply.github.com> Date: Mon, 2 Jan 2023 12:07:48 -0500 Subject: [PATCH 001/141] Tag subclasses can customize html name --- Sources/SwiftHtml/Tags/Comment.swift | 6 +++--- Sources/SwiftRss/LastBuildDate.swift | 6 ++---- Sources/SwiftRss/PubDate.swift | 4 +--- Sources/SwiftSgml/EmptyTag.swift | 6 ++---- Sources/SwiftSgml/GroupTag.swift | 6 +++--- Sources/SwiftSgml/Tag.swift | 25 ++++++++++++++----------- 6 files changed, 25 insertions(+), 28 deletions(-) diff --git a/Sources/SwiftHtml/Tags/Comment.swift b/Sources/SwiftHtml/Tags/Comment.swift index f6c00bd..21be1ab 100644 --- a/Sources/SwiftHtml/Tags/Comment.swift +++ b/Sources/SwiftHtml/Tags/Comment.swift @@ -14,9 +14,9 @@ /// This is especially useful if you have a lot of code. open class Comment: Tag { - open override class func createNode() -> Node { - Node(type: .comment) - } + open class override var name: String? { nil } + + open class override var type: Node.NodeType { .comment } public init(_ contents: String) { super.init() diff --git a/Sources/SwiftRss/LastBuildDate.swift b/Sources/SwiftRss/LastBuildDate.swift index ab35883..c5eb9e2 100644 --- a/Sources/SwiftRss/LastBuildDate.swift +++ b/Sources/SwiftRss/LastBuildDate.swift @@ -7,8 +7,6 @@ open class LastBuildDate: Tag { - - open override class func createNode() -> Node { - Node(type: .standard, name: "lastBuildDate") - } + + open class override var name: String? { "lastBuildDate" } } diff --git a/Sources/SwiftRss/PubDate.swift b/Sources/SwiftRss/PubDate.swift index 872905c..d826191 100644 --- a/Sources/SwiftRss/PubDate.swift +++ b/Sources/SwiftRss/PubDate.swift @@ -7,7 +7,5 @@ open class PubDate: Tag { - open override class func createNode() -> Node { - Node(type: .standard, name: "pubDate") - } + open class override var name: String? { "pubDate" } } diff --git a/Sources/SwiftSgml/EmptyTag.swift b/Sources/SwiftSgml/EmptyTag.swift index 2083a29..cea900b 100644 --- a/Sources/SwiftSgml/EmptyTag.swift +++ b/Sources/SwiftSgml/EmptyTag.swift @@ -6,11 +6,9 @@ // open class EmptyTag: Tag { - - open override class func createNode() -> Node { - Node(type: .empty, name: String(describing: self).lowercased()) - } + open class override var type: Node.NodeType { .empty } + public init() { super.init() } diff --git a/Sources/SwiftSgml/GroupTag.swift b/Sources/SwiftSgml/GroupTag.swift index 41f3b36..9bc6b78 100644 --- a/Sources/SwiftSgml/GroupTag.swift +++ b/Sources/SwiftSgml/GroupTag.swift @@ -7,8 +7,8 @@ open class GroupTag: Tag { + + open class override var name: String? { nil } - open override class func createNode() -> Node { - .init(type: .group) - } + open class override var type: Node.NodeType { .group } } diff --git a/Sources/SwiftSgml/Tag.swift b/Sources/SwiftSgml/Tag.swift index 7464a64..4efaed0 100644 --- a/Sources/SwiftSgml/Tag.swift +++ b/Sources/SwiftSgml/Tag.swift @@ -11,25 +11,29 @@ open class Tag { public private(set) var children: [Tag] // MARK: - init + + open class var name: String? { String(describing: self).lowercased() } + + open class var type: Node.NodeType { .standard } - open class func createNode() -> Node { - Node(type: .standard, name: String(describing: self).lowercased()) + open class func createNode(_ type: Node.NodeType, _ name: String?) -> Node { + Node(type: type, name: name) } /// initialize a new Tag with child tags - public init(_ children: [Tag] = []) { - self.node = Self.createNode() + public init(name: String? = nil, type: Node.NodeType? = nil, _ children: [Tag] = []) { + self.node = Self.createNode(type ?? Self.type, name ?? Self.name) self.children = children } /// initialize a new Tag with a single child tag - public convenience init(_ child: Tag) { - self.init([child]) + public convenience init(name: String? = nil, type: Node.NodeType? = nil, _ child: Tag) { + self.init(name: name, type: type, [child]) } /// initialize a new Tag with children using a builder - public convenience init(@TagBuilder _ builder: () -> [Tag]) { - self.init(builder()) + public convenience init(name: String? = nil, type: Node.NodeType? = nil, @TagBuilder _ builder: () -> [Tag]) { + self.init(name: name, type: type, builder()) } // /// initialize a new Tag with children using an async throwing builder @@ -37,10 +41,9 @@ open class Tag { // self.init(try await builder()) // } - /// initialize a new Tag with some contents - public convenience init(_ contents: String?) { - self.init() + public convenience init(name: String? = nil, type: Node.NodeType? = nil, _ contents: String?) { + self.init(name: name, type: type) if let contents = contents { setContents(contents) } From e0d330ca8b6e34d5a90f771db22b2e8c005d1c2f Mon Sep 17 00:00:00 2001 From: bgisme <55024704+bgisme@users.noreply.github.com> Date: Mon, 2 Jan 2023 12:49:34 -0500 Subject: [PATCH 002/141] name lowercased() --- Sources/SwiftSgml/Tag.swift | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/Sources/SwiftSgml/Tag.swift b/Sources/SwiftSgml/Tag.swift index 4efaed0..36a1b81 100644 --- a/Sources/SwiftSgml/Tag.swift +++ b/Sources/SwiftSgml/Tag.swift @@ -12,7 +12,7 @@ open class Tag { // MARK: - init - open class var name: String? { String(describing: self).lowercased() } + open class var name: String? { String(describing: self) } open class var type: Node.NodeType { .standard } @@ -22,7 +22,8 @@ open class Tag { /// initialize a new Tag with child tags public init(name: String? = nil, type: Node.NodeType? = nil, _ children: [Tag] = []) { - self.node = Self.createNode(type ?? Self.type, name ?? Self.name) + let name = name ?? Self.name + self.node = Self.createNode(type ?? Self.type, name?.lowercased()) self.children = children } From afcbf3e83e87f72e655e7774cd3350b89d9bb46b Mon Sep 17 00:00:00 2001 From: bgisme <55024704+bgisme@users.noreply.github.com> Date: Wed, 4 Jan 2023 15:10:32 -0500 Subject: [PATCH 003/141] Need to make rawValue public so any Tag can set the attribute --- Sources/SwiftHtml/Attributes/Target.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Sources/SwiftHtml/Attributes/Target.swift b/Sources/SwiftHtml/Attributes/Target.swift index b02493d..558d8b7 100644 --- a/Sources/SwiftHtml/Attributes/Target.swift +++ b/Sources/SwiftHtml/Attributes/Target.swift @@ -28,7 +28,7 @@ public enum TargetFrame { /// Opens the linked document in the named iframe case frame(String) - var rawValue: String { + public var rawValue: String { switch self { case .blank: return "_blank" From 6344acef0190c61c38618db7a86a9c300b3d6f7e Mon Sep 17 00:00:00 2001 From: bgisme <55024704+bgisme@users.noreply.github.com> Date: Tue, 14 Feb 2023 10:29:39 -0500 Subject: [PATCH 004/141] Class name var --- Sources/SwiftHtml/Tags/H6.swift | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Sources/SwiftHtml/Tags/H6.swift b/Sources/SwiftHtml/Tags/H6.swift index a15b271..735a345 100644 --- a/Sources/SwiftHtml/Tags/H6.swift +++ b/Sources/SwiftHtml/Tags/H6.swift @@ -12,5 +12,6 @@ /// **Note:** Only use one `

` per page - this should represent the main heading/subject for the whole page. /// Also, do not skip heading levels - start with `

`, then use `

`, and so on. open class H6: Tag { - + + open class override var name: String? { "h6" } } From 480e2fbce5d3dd5204dc596fef859ba8471f615b Mon Sep 17 00:00:00 2001 From: bgisme <55024704+bgisme@users.noreply.github.com> Date: Tue, 14 Feb 2023 10:47:49 -0500 Subject: [PATCH 005/141] Class names for all tags --- Sources/SwiftHtml/Tags/A.swift | 1 + Sources/SwiftHtml/Tags/Abbr.swift | 1 + Sources/SwiftHtml/Tags/Address.swift | 1 + Sources/SwiftHtml/Tags/Area.swift | 1 + Sources/SwiftHtml/Tags/Article.swift | 1 + Sources/SwiftHtml/Tags/Aside.swift | 1 + Sources/SwiftHtml/Tags/Audio.swift | 1 + Sources/SwiftHtml/Tags/B.swift | 1 + Sources/SwiftHtml/Tags/Base.swift | 2 +- Sources/SwiftHtml/Tags/Bdi.swift | 1 + Sources/SwiftHtml/Tags/Bdo.swift | 2 ++ Sources/SwiftHtml/Tags/Blockquote.swift | 1 + Sources/SwiftHtml/Tags/Body.swift | 1 + Sources/SwiftHtml/Tags/Br.swift | 2 +- Sources/SwiftHtml/Tags/Button.swift | 1 + Sources/SwiftHtml/Tags/Canvas.swift | 1 + Sources/SwiftHtml/Tags/Caption.swift | 1 + Sources/SwiftHtml/Tags/Cite.swift | 1 + Sources/SwiftHtml/Tags/Code.swift | 1 + Sources/SwiftHtml/Tags/Col.swift | 1 + Sources/SwiftHtml/Tags/Colgroup.swift | 1 + Sources/SwiftHtml/Tags/Data.swift | 3 ++- Sources/SwiftHtml/Tags/Datalist.swift | 1 + Sources/SwiftHtml/Tags/Dd.swift | 1 + Sources/SwiftHtml/Tags/Del.swift | 1 + Sources/SwiftHtml/Tags/Details.swift | 1 + Sources/SwiftHtml/Tags/Dfn.swift | 1 + Sources/SwiftHtml/Tags/Dialog.swift | 1 + Sources/SwiftHtml/Tags/Div.swift | 1 + Sources/SwiftHtml/Tags/Dl.swift | 1 + Sources/SwiftHtml/Tags/Dt.swift | 1 + Sources/SwiftHtml/Tags/Em.swift | 1 + Sources/SwiftHtml/Tags/Embed.swift | 1 + Sources/SwiftHtml/Tags/Fieldset.swift | 1 + Sources/SwiftHtml/Tags/Figcaption.swift | 1 + Sources/SwiftHtml/Tags/Figure.swift | 1 + Sources/SwiftHtml/Tags/Footer.swift | 1 + Sources/SwiftHtml/Tags/Form.swift | 1 + Sources/SwiftHtml/Tags/H1.swift | 1 + Sources/SwiftHtml/Tags/H2.swift | 1 + Sources/SwiftHtml/Tags/H3.swift | 1 + Sources/SwiftHtml/Tags/H4.swift | 1 + Sources/SwiftHtml/Tags/H5.swift | 1 + Sources/SwiftHtml/Tags/Head.swift | 1 + Sources/SwiftHtml/Tags/Header.swift | 1 + Sources/SwiftHtml/Tags/Hr.swift | 1 + Sources/SwiftHtml/Tags/Html.swift | 1 + Sources/SwiftHtml/Tags/I.swift | 1 + Sources/SwiftHtml/Tags/Iframe.swift | 1 + Sources/SwiftHtml/Tags/Img.swift | 2 ++ Sources/SwiftHtml/Tags/Input.swift | 1 + Sources/SwiftHtml/Tags/Ins.swift | 1 + Sources/SwiftHtml/Tags/Kbd.swift | 1 + Sources/SwiftHtml/Tags/Label.swift | 1 + Sources/SwiftHtml/Tags/Legend.swift | 1 + Sources/SwiftHtml/Tags/Li.swift | 1 + Sources/SwiftHtml/Tags/Link.swift | 2 ++ Sources/SwiftHtml/Tags/MainTag.swift | 1 + Sources/SwiftHtml/Tags/Map.swift | 2 ++ Sources/SwiftHtml/Tags/Mark.swift | 1 + Sources/SwiftHtml/Tags/Meta.swift | 1 + Sources/SwiftHtml/Tags/Meter.swift | 1 + Sources/SwiftHtml/Tags/Nav.swift | 1 + Sources/SwiftHtml/Tags/Noscript.swift | 1 + Sources/SwiftHtml/Tags/Object.swift | 1 + Sources/SwiftHtml/Tags/Ol.swift | 1 + Sources/SwiftHtml/Tags/Optgroup.swift | 1 + Sources/SwiftHtml/Tags/Option.swift | 1 + Sources/SwiftHtml/Tags/Output.swift | 1 + Sources/SwiftHtml/Tags/P.swift | 1 + Sources/SwiftHtml/Tags/Param.swift | 1 + Sources/SwiftHtml/Tags/Picture.swift | 1 + Sources/SwiftHtml/Tags/Pre.swift | 1 + Sources/SwiftHtml/Tags/Progress.swift | 1 + Sources/SwiftHtml/Tags/Q.swift | 2 +- Sources/SwiftHtml/Tags/Rp.swift | 3 ++- Sources/SwiftHtml/Tags/Rt.swift | 1 + Sources/SwiftHtml/Tags/Ruby.swift | 1 + Sources/SwiftHtml/Tags/S.swift | 1 + Sources/SwiftHtml/Tags/Samp.swift | 1 + Sources/SwiftHtml/Tags/Script.swift | 2 ++ Sources/SwiftHtml/Tags/Section.swift | 1 + Sources/SwiftHtml/Tags/Select.swift | 1 + Sources/SwiftHtml/Tags/Small.swift | 1 + Sources/SwiftHtml/Tags/Source.swift | 1 + Sources/SwiftHtml/Tags/Span.swift | 1 + Sources/SwiftHtml/Tags/Strong.swift | 1 + Sources/SwiftHtml/Tags/Style.swift | 1 + Sources/SwiftHtml/Tags/Sub.swift | 1 + Sources/SwiftHtml/Tags/Summary.swift | 1 + Sources/SwiftHtml/Tags/Sup.swift | 1 + Sources/SwiftHtml/Tags/Table.swift | 1 + Sources/SwiftHtml/Tags/Tbody.swift | 1 + Sources/SwiftHtml/Tags/Td.swift | 1 + Sources/SwiftHtml/Tags/Template.swift | 1 + Sources/SwiftHtml/Tags/Textarea.swift | 1 + Sources/SwiftHtml/Tags/Tfoot.swift | 1 + Sources/SwiftHtml/Tags/Th.swift | 1 + Sources/SwiftHtml/Tags/Thead.swift | 1 + Sources/SwiftHtml/Tags/Time.swift | 1 + Sources/SwiftHtml/Tags/Title.swift | 1 + Sources/SwiftHtml/Tags/Tr.swift | 1 + Sources/SwiftHtml/Tags/Track.swift | 2 ++ Sources/SwiftHtml/Tags/U.swift | 1 + Sources/SwiftHtml/Tags/Ul.swift | 1 + Sources/SwiftHtml/Tags/Var.swift | 1 + Sources/SwiftHtml/Tags/Video.swift | 1 + Sources/SwiftHtml/Tags/Wbr.swift | 1 + 108 files changed, 116 insertions(+), 5 deletions(-) diff --git a/Sources/SwiftHtml/Tags/A.swift b/Sources/SwiftHtml/Tags/A.swift index 0a342fd..a5eb06b 100644 --- a/Sources/SwiftHtml/Tags/A.swift +++ b/Sources/SwiftHtml/Tags/A.swift @@ -16,6 +16,7 @@ /// - An active link is underlined and red open class A: Tag { + open class override var name: String? { "a" } } public extension A { diff --git a/Sources/SwiftHtml/Tags/Abbr.swift b/Sources/SwiftHtml/Tags/Abbr.swift index bbc38fc..adba283 100644 --- a/Sources/SwiftHtml/Tags/Abbr.swift +++ b/Sources/SwiftHtml/Tags/Abbr.swift @@ -10,5 +10,6 @@ /// **Tip:** Use the global title attribute to show the description for the abbreviation/acronym when you mouse over the element. open class Abbr: Tag { + open class override var name: String? { "abbr" } } diff --git a/Sources/SwiftHtml/Tags/Address.swift b/Sources/SwiftHtml/Tags/Address.swift index 4d3fe25..426957a 100644 --- a/Sources/SwiftHtml/Tags/Address.swift +++ b/Sources/SwiftHtml/Tags/Address.swift @@ -12,4 +12,5 @@ /// The text in the `
` element usually renders in italic, and browsers will always add a line break before and after the `
` element. open class Address: Tag { + open class override var name: String? { "address" } } diff --git a/Sources/SwiftHtml/Tags/Area.swift b/Sources/SwiftHtml/Tags/Area.swift index 0ce5ca8..46f76ab 100644 --- a/Sources/SwiftHtml/Tags/Area.swift +++ b/Sources/SwiftHtml/Tags/Area.swift @@ -51,6 +51,7 @@ open class Area: EmptyTag { case poly } + open class override var name: String? { "area" } } public extension Area { diff --git a/Sources/SwiftHtml/Tags/Article.swift b/Sources/SwiftHtml/Tags/Article.swift index b78d593..4f7ebaa 100644 --- a/Sources/SwiftHtml/Tags/Article.swift +++ b/Sources/SwiftHtml/Tags/Article.swift @@ -26,5 +26,6 @@ public extension Node { /// However, you can use CSS to style the `
` element (see example below). open class Article: Tag { + open class override var name: String? { "article" } } diff --git a/Sources/SwiftHtml/Tags/Aside.swift b/Sources/SwiftHtml/Tags/Aside.swift index 93b1ab9..e3afcce 100644 --- a/Sources/SwiftHtml/Tags/Aside.swift +++ b/Sources/SwiftHtml/Tags/Aside.swift @@ -15,5 +15,6 @@ /// However, you can use CSS to style the `