NetNewsWire/Shared/Extensions/Node-Extensions.swift

66 lines
1.5 KiB
Swift
Raw Normal View History

2017-05-27 10:43:27 -07:00
//
// Node-Extensions.swift
// Local
//
// Created by Brent Simmons on 8/10/16.
// Copyright © 2016 Ranchero Software, LLC. All rights reserved.
//
import Foundation
import RSTree
import Articles
2017-11-04 14:53:21 -07:00
import RSCore
2017-05-27 10:43:27 -07:00
2017-11-18 16:56:36 -08:00
extension Array where Element == Node {
func sortedAlphabetically() -> [Node] {
return Node.nodesSortedAlphabetically(self)
}
func sortedAlphabeticallyWithFoldersAtEnd() -> [Node] {
return Node.nodesSortedAlphabeticallyWithFoldersAtEnd(self)
}
}
private extension Node {
2025-01-24 23:02:17 -08:00
static func nodesSortedAlphabetically(_ nodes: [Node]) -> [Node] {
2025-01-22 22:20:08 -08:00
2017-05-27 10:43:27 -07:00
return nodes.sorted { (node1, node2) -> Bool in
2025-01-22 22:20:08 -08:00
2017-05-27 10:43:27 -07:00
guard let obj1 = node1.representedObject as? DisplayNameProvider, let obj2 = node2.representedObject as? DisplayNameProvider else {
return false
}
2025-01-22 22:20:08 -08:00
2017-05-27 10:43:27 -07:00
let name1 = obj1.nameForDisplay
let name2 = obj2.nameForDisplay
2025-01-22 22:20:08 -08:00
2017-05-27 10:43:27 -07:00
return name1.localizedStandardCompare(name2) == .orderedAscending
}
}
2025-01-22 22:20:08 -08:00
2025-01-24 23:02:17 -08:00
static func nodesSortedAlphabeticallyWithFoldersAtEnd(_ nodes: [Node]) -> [Node] {
2025-01-22 22:20:08 -08:00
2017-05-27 10:43:27 -07:00
return nodes.sorted { (node1, node2) -> Bool in
2025-01-22 22:20:08 -08:00
2017-05-27 10:43:27 -07:00
if node1.canHaveChildNodes != node2.canHaveChildNodes {
if node1.canHaveChildNodes {
return false
}
return true
}
2025-01-22 22:20:08 -08:00
2017-05-27 10:43:27 -07:00
guard let obj1 = node1.representedObject as? DisplayNameProvider, let obj2 = node2.representedObject as? DisplayNameProvider else {
return false
}
2025-01-22 22:20:08 -08:00
2017-05-27 10:43:27 -07:00
let name1 = obj1.nameForDisplay
let name2 = obj2.nameForDisplay
2025-01-22 22:20:08 -08:00
2017-05-27 10:43:27 -07:00
return name1.localizedStandardCompare(name2) == .orderedAscending
}
}
}