diff --git a/WebsiteGenerator/Content/Element.swift b/WebsiteGenerator/Content/Element.swift index aac8c63..fb766bb 100644 --- a/WebsiteGenerator/Content/Element.swift +++ b/WebsiteGenerator/Content/Element.swift @@ -250,11 +250,23 @@ extension Element { elements.contains { $0.containsElements } } - var sortedItems: [Element] { - if useManualSorting { - return elements.sorted { $0.sortIndex! < $1.sortIndex! } + func itemsForOverview(_ count: Int? = nil) -> [Element] { + if let shownItemCount = count { + return Array(sortedItems.prefix(shownItemCount)) + } else { + return sortedItems } - return elements.sorted { $0.date! > $1.date! } + } + + private var sortedItems: [Element] { + if useManualSorting { + return shownItems.sorted { $0.sortIndex! < $1.sortIndex! } + } + return shownItems.sorted { $0.date! > $1.date! } + } + + private var shownItems: [Element] { + elements.filter { $0.state.isShownInOverview } } /** @@ -340,9 +352,9 @@ extension Element { /** Get the next language to switch to with the language button. */ - func nextLanguage(for languageIdentifier: String) -> String? { + func nextLanguage(for language: String) -> String? { let langs = languages.map { $0.language } - guard let index = langs.firstIndex(of: languageIdentifier) else { + guard let index = langs.firstIndex(of: language) else { return nil } for i in 1.. Bool { - existingContentUrl(for: language) != nil + if !elements.isEmpty { + return true + } + return existingContentUrl(for: language) != nil } } diff --git a/WebsiteGenerator/Content/PageState.swift b/WebsiteGenerator/Content/PageState.swift index 74b52ed..d7c20e8 100644 --- a/WebsiteGenerator/Content/PageState.swift +++ b/WebsiteGenerator/Content/PageState.swift @@ -16,3 +16,26 @@ enum PageState: String { */ case hide } + +extension PageState { + + var isShownInOverview: Bool { + switch self { + case .standard, .draft: + return true + case .hide: + return false + } + } + + var hasThumbnailLink: Bool { + switch self { + case .standard: + return true + case .draft: + return false + case .hide: + return false + } + } +} diff --git a/WebsiteGenerator/Generators/OverviewSectionGenerator.swift b/WebsiteGenerator/Generators/OverviewSectionGenerator.swift index a6a857a..12876c5 100644 --- a/WebsiteGenerator/Generators/OverviewSectionGenerator.swift +++ b/WebsiteGenerator/Generators/OverviewSectionGenerator.swift @@ -23,7 +23,11 @@ struct OverviewSectionGenerator { var content = [OverviewSectionTemplate.Key : String]() content[.url] = relativeUrl content[.title] = metadata.title - content[.items] = sectionContent(section: section, in: parent, language: language, shownItemCount: sectionItemCount) + content[.items] = generator.generateContent( + items: section.itemsForOverview(sectionItemCount), + parent: parent, + language: language, + style: section.thumbnailStyle) content[.more] = metadata.moreLinkText return multipleSectionsTemplate.generate(content) @@ -33,21 +37,11 @@ struct OverviewSectionGenerator { func generate(section: Element, language: String) -> String { var content = [OverviewSectionCleanTemplate.Key : String]() - content[.items] = sectionContent(section: section, in: section, language: language, shownItemCount: nil) - return singleSectionsTemplate.generate(content) - } - - private func sectionContent(section: Element, in parent: Element, language: String, shownItemCount: Int?) -> String { - let sectionItems: [Element] - if let shownItemCount = shownItemCount { - sectionItems = Array(section.sortedItems.prefix(shownItemCount)) - } else { - sectionItems = section.sortedItems - } - return generator.generateContent( - items: sectionItems, - parent: parent, + content[.items] = generator.generateContent( + items: section.itemsForOverview(), + parent: section, language: language, style: section.thumbnailStyle) + return singleSectionsTemplate.generate(content) } } diff --git a/WebsiteGenerator/Generators/ThumbnailListGenerator.swift b/WebsiteGenerator/Generators/ThumbnailListGenerator.swift index ba9034c..8d7d38e 100644 --- a/WebsiteGenerator/Generators/ThumbnailListGenerator.swift +++ b/WebsiteGenerator/Generators/ThumbnailListGenerator.swift @@ -14,13 +14,18 @@ struct ThumbnailListGenerator { } private func itemContent(_ item: Element, parent: Element, language: String, style: ThumbnailStyle) -> String { - let fullPageUrl = item.fullPageUrl(for: language) - let relativePageUrl = parent.relativePathToFileWithPath(fullPageUrl) let fullThumbnailPath = item.thumbnailFilePath(for: language) let relativeImageUrl = parent.relativePathToFileWithPath(fullThumbnailPath) - + var content = [ThumbnailKey : String]() - content[.url] = "href=\"\(relativePageUrl)\"" + + if item.state.hasThumbnailLink { + #warning("If page in language is missing, link to different language") + let fullPageUrl = item.fullPageUrl(for: language) + let relativePageUrl = parent.relativePathToFileWithPath(fullPageUrl) + content[.url] = "href=\"\(relativePageUrl)\"" + } + content[.image] = relativeImageUrl content[.title] = item.title(for: language) #warning("Generate thumbnail suffix")