Skip to content

Commit 1eeac54

Browse files
committed
add frontend tool for sorting the package list by name, owner, or star count
1 parent 20bcc65 commit 1eeac54

18 files changed

+401
-146
lines changed

Assets/js/Main.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/js/Main.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Sources/DOM/DOM.Attribute.swift

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
extension DOM
2+
{
3+
@usableFromInline
4+
typealias Attribute = _DOMAttribute
5+
}
6+
7+
/// The name of this protocol is ``DOM.Attribute``.
8+
@usableFromInline
9+
protocol _DOMAttribute
10+
{
11+
var name:String { get }
12+
}
13+
extension DOM.Attribute where Self:RawRepresentable<String>
14+
{
15+
@inlinable internal
16+
var name:String { self.rawValue }
17+
}

Sources/DOM/DOM.Property.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
extension DOM
22
{
3-
@frozen @usableFromInline internal
4-
struct Property<Attribute> where Attribute:RawRepresentable<String>
3+
@frozen @usableFromInline
4+
struct Property<ID> where ID:Attribute
55
{
66
@usableFromInline internal
7-
let attribute:Attribute
7+
let attribute:ID
88
@usableFromInline internal
99
let value:String
1010

1111
@inlinable internal
12-
init(_ attribute:Attribute, _ value:String)
12+
init(_ attribute:ID, _ value:String)
1313
{
1414
self.attribute = attribute
1515
self.value = value
@@ -22,7 +22,7 @@ extension DOM.Property
2222
func += (utf8:inout [UInt8], self:Self)
2323
{
2424
utf8.append(0x20) // ' '
25-
utf8 += self.attribute.rawValue.utf8
25+
utf8 += self.attribute.name.utf8
2626

2727
if self.value.isEmpty
2828
{

Sources/DOM/HTML/HTML.Attribute.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ extension HTML
44
{
55
@GenerateDynamicMemberFactory(excluding: "rel")
66
@frozen public
7-
enum Attribute:String, Equatable, Hashable, Sendable
7+
enum Attribute:String, DOM.Attribute, Equatable, Hashable, Sendable
88
{
99
case accept
1010
case accept_charset = "accept-charset"
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
extension HTML.AttributeEncoder
2+
{
3+
@frozen @usableFromInline
4+
enum CustomData
5+
{
6+
case data(String)
7+
}
8+
}
9+
extension HTML.AttributeEncoder.CustomData:DOM.Attribute
10+
{
11+
@inlinable internal
12+
var name:String
13+
{
14+
switch self
15+
{
16+
case .data(let suffix): "data-\(suffix)"
17+
}
18+
}
19+
}

Sources/DOM/HTML/HTML.AttributeEncoder.swift

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,25 @@ extension HTML.AttributeEncoder
4747
}
4848
}
4949
}
50+
extension HTML.AttributeEncoder
51+
{
52+
@inlinable public
53+
subscript(data suffix:String) -> String?
54+
{
55+
get
56+
{
57+
nil
58+
}
59+
set(text)
60+
{
61+
if let text:String
62+
{
63+
self.utf8 += DOM.Property<CustomData>.init(.data(suffix), text)
64+
}
65+
}
66+
}
67+
}
68+
5069
extension HTML.AttributeEncoder
5170
{
5271
@inlinable public

Sources/DOM/SVG/SVG.Attribute.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ extension SVG
44
{
55
@GenerateDynamicMemberFactory
66
@frozen public
7-
enum Attribute:String, Equatable, Hashable, Sendable
7+
enum Attribute:String, DOM.Attribute, Equatable, Hashable, Sendable
88
{
99
case accent_height = "accent-height"
1010
case accumulate

Sources/DOM/Sitemap/XMLNS.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
@frozen @usableFromInline internal
2-
enum XMLNS:String, Equatable, Hashable, Sendable
2+
enum XMLNS:String, DOM.Attribute, Equatable, Hashable, Sendable
33
{
44
case xmlns
55
}

Sources/SwiftinitPages/Surfaces/Packages/Swiftinit.PackageCard.swift

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,28 @@ extension Swiftinit
77
{
88
private
99
let package:Unidoc.PackageOutput
10+
/// Cached for sort performance.
11+
let order:String
1012

1113
init(_ package:Unidoc.PackageOutput)
1214
{
1315
self.package = package
16+
17+
let name:String = package.metadata.repo?.origin.name
18+
?? package.metadata.symbol.identifier
19+
self.order = name.lowercased()
1420
}
1521
}
1622
}
23+
extension Swiftinit.PackageCard
24+
{
25+
var owner:String? { self.package.metadata.repo?.origin.owner }
26+
var stars:Int? { self.package.metadata.repo?.stars }
27+
var name:String
28+
{
29+
self.package.metadata.repo?.origin.name ?? self.package.metadata.symbol.identifier
30+
}
31+
}
1732
extension Swiftinit.PackageCard:HTML.OutputStreamable
1833
{
1934
static
@@ -30,8 +45,7 @@ extension Swiftinit.PackageCard:HTML.OutputStreamable
3045
$0.href = "\(Swiftinit.Tags[self.package.metadata.symbol])"
3146
$0.class = dead ? "dead" : nil
3247

33-
} = self.package.metadata.repo?.origin.name ??
34-
self.package.metadata.symbol.identifier
48+
} = self.name
3549

3650
$0[.span] { $0.class = "owner" } = self.package.metadata.repo?.origin.owner
3751
}

0 commit comments

Comments
 (0)