Skip to content

Commit

Permalink
Improve asset handling
Browse files Browse the repository at this point in the history
  • Loading branch information
samuelmeuli committed Mar 10, 2020
1 parent 965f79f commit 59f7377
Show file tree
Hide file tree
Showing 9 changed files with 97 additions and 26 deletions.
20 changes: 20 additions & 0 deletions Glance.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@
7E9F0D5F24164290007F1008 /* chroma-v0.7.0 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 7E9F0D592416286A007F1008 /* chroma-v0.7.0 */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
7E9F0D6124164D35007F1008 /* code.css in Resources */ = {isa = PBXBuildFile; fileRef = 7E9F0D6024164D35007F1008 /* code.css */; };
7E9F0D7424168685007F1008 /* github-markdown-css.min.css in Resources */ = {isa = PBXBuildFile; fileRef = 7E9F0D7324168685007F1008 /* github-markdown-css.min.css */; };
7E9F0D7D24168870007F1008 /* Stylesheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E9F0D7A24168870007F1008 /* Stylesheet.swift */; };
7E9F0D7E24168870007F1008 /* Script.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E9F0D7B24168870007F1008 /* Script.swift */; };
7E9F0D7F24168870007F1008 /* Asset.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7E9F0D7C24168870007F1008 /* Asset.swift */; };
7EAC01EA240D2063009505D0 /* PreviewWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EAC01E9240D2063009505D0 /* PreviewWebView.swift */; };
7EAC01EC240D220B009505D0 /* FileInfo.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7EAC01EB240D220B009505D0 /* FileInfo.swift */; };
7ECC8CF2240CB4CC000D6970 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7ECC8CF1240CB4CC000D6970 /* AppDelegate.swift */; };
Expand Down Expand Up @@ -88,6 +91,9 @@
7E9F0D592416286A007F1008 /* chroma-v0.7.0 */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.executable"; path = "chroma-v0.7.0"; sourceTree = "<group>"; };
7E9F0D6024164D35007F1008 /* code.css */ = {isa = PBXFileReference; lastKnownFileType = text.css; path = code.css; sourceTree = "<group>"; };
7E9F0D7324168685007F1008 /* github-markdown-css.min.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = "github-markdown-css.min.css"; sourceTree = "<group>"; };
7E9F0D7A24168870007F1008 /* Stylesheet.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Stylesheet.swift; sourceTree = "<group>"; };
7E9F0D7B24168870007F1008 /* Script.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Script.swift; sourceTree = "<group>"; };
7E9F0D7C24168870007F1008 /* Asset.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Asset.swift; sourceTree = "<group>"; };
7EAC01E9240D2063009505D0 /* PreviewWebView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PreviewWebView.swift; sourceTree = "<group>"; };
7EAC01EB240D220B009505D0 /* FileInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileInfo.swift; sourceTree = "<group>"; };
7ECC8CEE240CB4CC000D6970 /* Glance.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Glance.app; sourceTree = BUILT_PRODUCTS_DIR; };
Expand Down Expand Up @@ -122,6 +128,7 @@
7E1DC51C240E674300D0A061 /* Utils */ = {
isa = PBXGroup;
children = (
7E9F0D7924168870007F1008 /* Asset */,
7EAC01EB240D220B009505D0 /* FileInfo.swift */,
7E9F0D56241625A9007F1008 /* Shell.swift */,
);
Expand Down Expand Up @@ -204,6 +211,16 @@
path = markdown;
sourceTree = "<group>";
};
7E9F0D7924168870007F1008 /* Asset */ = {
isa = PBXGroup;
children = (
7E9F0D7A24168870007F1008 /* Stylesheet.swift */,
7E9F0D7B24168870007F1008 /* Script.swift */,
7E9F0D7C24168870007F1008 /* Asset.swift */,
);
path = Asset;
sourceTree = "<group>";
};
7EAC01E1240D1E94009505D0 /* Renderers */ = {
isa = PBXGroup;
children = (
Expand Down Expand Up @@ -365,11 +382,14 @@
7EAC01EC240D220B009505D0 /* FileInfo.swift in Sources */,
7EAC01EA240D2063009505D0 /* PreviewWebView.swift in Sources */,
7E1DC51F240E6CE300D0A061 /* Renderer.swift in Sources */,
7E9F0D7F24168870007F1008 /* Asset.swift in Sources */,
7E6EF200240CC802009E4199 /* PreviewViewController.swift in Sources */,
7E1DC528240E6F4A00D0A061 /* RendererFactory.swift in Sources */,
7E1DC521240E6D8000D0A061 /* MarkdownRenderer.swift in Sources */,
7E9F0D57241625A9007F1008 /* Shell.swift in Sources */,
7E1DC52A240E6FDE00D0A061 /* CodeRenderer.swift in Sources */,
7E9F0D7E24168870007F1008 /* Script.swift in Sources */,
7E9F0D7D24168870007F1008 /* Stylesheet.swift in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
Expand Down
4 changes: 2 additions & 2 deletions QLPlugin/PreviewViewController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ class PreviewViewController: NSViewController, QLPreviewingController {
// Render file preview in web view
webView.renderPage(
htmlBody: htmlBody,
cssFiles: renderer.getCssFiles(),
jsFiles: renderer.getJsFiles()
stylesheets: renderer.getStylesheets(),
scripts: renderer.getScripts()
)
} catch {
os_log("Error loading file preview: %s", type: .error, error.localizedDescription)
Expand Down
10 changes: 5 additions & 5 deletions QLPlugin/Renderers/FileTypeRenderers/CodeRenderer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@ class CodeRenderer: Renderer {
private let binaryUrl = Bundle.main.url(forAuxiliaryExecutable: "chroma-v0.7.0")
private let cssUrl = Bundle.main.url(forResource: "code", withExtension: "css")

override func getCssFiles() -> [URL] {
var cssFiles = super.getCssFiles()
if let cssUrlResolved = cssUrl {
cssFiles.append(cssUrlResolved)
override func getStylesheets() -> [Stylesheet] {
var stylesheets = super.getStylesheets()
if let cssUrl = cssUrl {
stylesheets.append(Stylesheet(url: cssUrl))
} else {
os_log("Could not find code stylesheet", type: .error)
}
return cssFiles
return stylesheets
}

override func getHtml() -> String {
Expand Down
10 changes: 5 additions & 5 deletions QLPlugin/Renderers/FileTypeRenderers/MarkdownRenderer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,14 @@ class MarkdownRenderer: Renderer {
withExtension: "css"
)

override func getCssFiles() -> [URL] {
var cssFiles = super.getCssFiles()
if let cssUrlResolved = cssUrl {
cssFiles.append(cssUrlResolved)
override func getStylesheets() -> [Stylesheet] {
var stylesheets = super.getStylesheets()
if let cssUrl = cssUrl {
stylesheets.append(Stylesheet(url: cssUrl))
} else {
os_log("Could not find Markdown stylesheet", type: .error)
}
return cssFiles
return stylesheets
}

override func getHtml() -> String {
Expand Down
16 changes: 8 additions & 8 deletions QLPlugin/Renderers/Renderer.swift
Original file line number Diff line number Diff line change
Expand Up @@ -20,29 +20,29 @@ class Renderer {
self.fileUrl = fileUrl
}

func getCssFiles() -> [URL] {
var cssFiles: [URL] = []
func getStylesheets() -> [Stylesheet] {
var stylesheets: [Stylesheet] = []

if let normalizeCssUrlResolved = normalizeCssUrl {
cssFiles.append(normalizeCssUrlResolved)
if let normalizeCssUrl = normalizeCssUrl {
stylesheets.append(Stylesheet(url: normalizeCssUrl))
} else {
os_log("Could not find normalize stylesheet", type: .error)
}

if let sharedCssUrlResolved = sharedCssUrl {
cssFiles.append(sharedCssUrlResolved)
if let sharedCssUrl = sharedCssUrl {
stylesheets.append(Stylesheet(url: sharedCssUrl))
} else {
os_log("Could not find shared stylesheet", type: .error)
}

return cssFiles
return stylesheets
}

func getHtml() -> String {
""
}

func getJsFiles() -> [URL] {
func getScripts() -> [Script] {
[]
}
}
7 changes: 7 additions & 0 deletions QLPlugin/Utils/Asset/Asset.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import Foundation

protocol Asset {
init(content: String)
init(url: URL)
func getHtml() -> String
}
22 changes: 22 additions & 0 deletions QLPlugin/Utils/Asset/Script.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import Foundation

class Script: Asset {
private var content: String?
private var url: URL?

required init(content: String) {
self.content = content
}

required init(url: URL) {
self.url = url
}

func getHtml() -> String {
if let url = url {
return "<script src=\"\(url.path)\"></script>"
} else {
return "<script>\(content ?? "")</script>"
}
}
}
22 changes: 22 additions & 0 deletions QLPlugin/Utils/Asset/Stylesheet.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import Foundation

class Stylesheet: Asset {
private var content: String?
private var url: URL?

required init(content: String) {
self.content = content
}

required init(url: URL) {
self.url = url
}

func getHtml() -> String {
if let url = url {
return "<link rel=\"stylesheet\" type=\"text/css\" href=\"\(url.path)\" />"
} else {
return "<style>\(content ?? "")</style>"
}
}
}
12 changes: 6 additions & 6 deletions QLPlugin/Views/PreviewWebView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,12 @@ class PreviewWebView: WKWebView {
fatalError("init(coder:) has not been implemented")
}

func renderPage(htmlBody: String = "", cssFiles: [URL] = [], jsFiles: [URL] = []) {
let linkTags = cssFiles
.map { "<link rel=\"stylesheet\" type=\"text/css\" href=\"\($0.path)\" />" }
func renderPage(htmlBody: String = "", stylesheets: [Stylesheet] = [], scripts: [Script] = []) {
let linkTags = stylesheets
.map { $0.getHtml() }
.joined(separator: "\n")
let scriptTags = jsFiles
.map { "<script src=\"\($0.path)\" />" }
let scriptTags = scripts
.map { $0.getHtml() }
.joined(separator: "\n")

let html = """
Expand All @@ -37,7 +37,7 @@ class PreviewWebView: WKWebView {
\(linkTags)
</head>
<body>
<div id="content">\(htmlBody)</div>
\(htmlBody)
\(scriptTags)
</body>
</html>
Expand Down

0 comments on commit 59f7377

Please sign in to comment.