diff --git a/Mac/MainWindow/Detail/DetailWebViewController.swift b/Mac/MainWindow/Detail/DetailWebViewController.swift
index c365727c6..c5b6e20c2 100644
--- a/Mac/MainWindow/Detail/DetailWebViewController.swift
+++ b/Mac/MainWindow/Detail/DetailWebViewController.swift
@@ -96,6 +96,18 @@ protocol DetailWebViewControllerDelegate: AnyObject {
userContentController.add(self, name: MessageName.windowDidScroll)
userContentController.add(self, name: MessageName.mouseDidEnter)
userContentController.add(self, name: MessageName.mouseDidExit)
+
+ let baseURL = ArticleRenderer.page.baseURL
+ let appScriptsWorld = WKContentWorld.world(name: "NetNewsWire")
+ for fileName in ["main.js", "main_mac.js", "newsfoot.js"] {
+ userContentController.addUserScript(
+ .init(source: try! String(contentsOf: baseURL.appending(path: fileName,
+ directoryHint: .notDirectory)),
+ injectionTime: .atDocumentStart,
+ forMainFrameOnly: true,
+ in: appScriptsWorld))
+ }
+
configuration.userContentController = userContentController
webView = DetailWebView(frame: NSRect.zero, configuration: configuration)
@@ -326,7 +338,7 @@ private extension DetailWebViewController {
]
let html = try! MacroProcessor.renderedText(withTemplate: ArticleRenderer.page.html, substitutions: substitutions)
- webView.loadHTMLString(html, baseURL: ArticleRenderer.page.baseURL)
+ webView.loadHTMLString(html, baseURL: URL(string: rendering.baseURL))
}
func scrollInfo() async -> ScrollInfo? {
diff --git a/Mac/MainWindow/Detail/page.html b/Mac/MainWindow/Detail/page.html
index ceaa13f7f..3d71f2c98 100644
--- a/Mac/MainWindow/Detail/page.html
+++ b/Mac/MainWindow/Detail/page.html
@@ -4,14 +4,6 @@
-
-
-
-
diff --git a/Mac/MainWindow/MainWindow.swift b/Mac/MainWindow/MainWindow.swift
index 18409f76a..6dd8abf8f 100644
--- a/Mac/MainWindow/MainWindow.swift
+++ b/Mac/MainWindow/MainWindow.swift
@@ -14,19 +14,31 @@ import Foundation
// Since the Toolbar intercepts right clicks we need to stop it from doing that here
// so that the ArticleExtractorButton can receive right click events.
- if event.isRightClick,
- let frameView = contentView?.superview,
- let view = frameView.hitTest(frameView.convert(event.locationInWindow, from: nil)),
- type(of: view).description() == "NSToolbarView" {
+ if #available(macOS 14.0, *) {
+ if event.isRightClick,
+ let frameView = contentView?.superview,
+ let view = frameView.hitTest(frameView.convert(event.locationInWindow, from: nil)),
+ let articleExtractorButton = view as? ArticleExtractorButton {
- for subview in view.subviews {
- for subsubview in subview.subviews {
- let candidateView = subsubview.hitTest(subsubview.convert(event.locationInWindow, from: nil))
- if candidateView is ArticleExtractorButton {
- candidateView?.rightMouseDown(with: event)
- return
+ articleExtractorButton.rightMouseDown(with: event)
+ return
+ }
+ } else {
+ if event.isRightClick,
+ let frameView = contentView?.superview,
+ let view = frameView.hitTest(frameView.convert(event.locationInWindow, from: nil)),
+ type(of: view).description() == "NSToolbarView" {
+
+ for subview in view.subviews {
+ for subsubview in subview.subviews {
+ let candidateView = subsubview.hitTest(subsubview.convert(event.locationInWindow, from: nil))
+ if candidateView is ArticleExtractorButton {
+ candidateView?.rightMouseDown(with: event)
+ return
+ }
}
}
+
}
}
diff --git a/Shared/Article Rendering/main.js b/Shared/Article Rendering/main.js
index 13f90b638..1cf76b59c 100644
--- a/Shared/Article Rendering/main.js
+++ b/Shared/Article Rendering/main.js
@@ -168,3 +168,8 @@ function processPage() {
removeWpSmiley()
postRenderProcessing();
}
+
+document.addEventListener("DOMContentLoaded", function(event) {
+ window.scrollTo(0, [[windowScrollY]]);
+ processPage();
+})
diff --git a/Shared/Article Rendering/stylesheet.css b/Shared/Article Rendering/stylesheet.css
index eabf7a21b..0d17ad8bd 100644
--- a/Shared/Article Rendering/stylesheet.css
+++ b/Shared/Article Rendering/stylesheet.css
@@ -263,6 +263,10 @@ figure {
margin-top: 1em;
}
+figure > * + * {
+ margin-top: 0.5em;
+}
+
figcaption {
font-size: 14px;
line-height: 1.3em;
diff --git a/iOS/Article/WebViewController.swift b/iOS/Article/WebViewController.swift
index 530108f6a..c87b5a870 100644
--- a/iOS/Article/WebViewController.swift
+++ b/iOS/Article/WebViewController.swift
@@ -529,6 +529,20 @@ private extension WebViewController {
}
configuration.setURLSchemeHandler(articleIconSchemeHandler, forURLScheme: ArticleRenderer.imageIconScheme)
+ let userContentController = WKUserContentController()
+ let baseURL = ArticleRenderer.page.baseURL
+ let appScriptsWorld = WKContentWorld.world(name: "NetNewsWire")
+ for fileName in ["main.js", "main_ios.js", "newsfoot.js"] {
+ userContentController.addUserScript(
+ .init(source: try! String(contentsOf: baseURL.appending(path: fileName,
+ directoryHint: .notDirectory)),
+ injectionTime: .atDocumentStart,
+ forMainFrameOnly: true,
+ in: appScriptsWorld))
+ }
+
+ configuration.userContentController = userContentController
+
let webView = WKWebView(frame: self.view.bounds, configuration: configuration)
webView.isOpaque = false;
webView.backgroundColor = .clear;
@@ -591,8 +605,8 @@ private extension WebViewController {
]
let html = try! MacroProcessor.renderedText(withTemplate: ArticleRenderer.page.html, substitutions: substitutions)
- webView.loadHTMLString(html, baseURL: ArticleRenderer.page.baseURL)
-
+ webView.loadHTMLString(html, baseURL: URL(string: rendering.baseURL))
+
}
func finalScrollPosition(scrollingUp: Bool) -> CGFloat {
diff --git a/iOS/Resources/page.html b/iOS/Resources/page.html
index 686c4612d..b6513009a 100644
--- a/iOS/Resources/page.html
+++ b/iOS/Resources/page.html
@@ -5,15 +5,6 @@
-
-
-
-