Skip to content

Commit

Permalink
Reverso Context #19: Implement PageWebView to Translator and ReversoC…
Browse files Browse the repository at this point in the history
…ontext
  • Loading branch information
filimo committed Oct 6, 2019
1 parent cf569be commit 507e619
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 87 deletions.
41 changes: 16 additions & 25 deletions ReaderTranslator/Components/ReversoContext.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,43 +12,34 @@ import WebKit
struct ReversoContext : ViewRepresentable {
@Binding var text: String

static private let webView: WKWebView = {
let config = WKWebViewConfiguration()
config.websiteDataStore = .nonPersistent()
static var pageView: PageWebView?
private var view: PageWebView {
if let view = Self.pageView { return view }

return WKWebView(frame: .zero, configuration: config)
}()

let view = PageWebView()
Self.pageView = view

return view
}

func makeView(context: Context) -> WKWebView { ReversoContext.webView }
func makeView(context: Context) -> PageWebView {
print("ReversoContext_makeView")
return view
}

func updateView(_ view: WKWebView, context: Context) {
func updateView(_ view: PageWebView, context: Context) {
print("ReversoContext_updateView")
let host = "https://context.reverso.net/translation/english-russian/"
let search = text.replacingOccurrences(of: " ", with: "+")
let urlString = "\(host)\(search)"

if(view.url?.absoluteString == urlString) { return }
if view.url?.absoluteString == urlString { return }

if let url = URL(string: urlString) {
print("ReversoContext_updateView_reload")
view.load(URLRequest(url: url))
}
}

#if os(macOS)
func makeNSView(context: Context) -> WKWebView {
makeView(context: context)
}
func updateNSView(_ view: WKWebView, context: Context) {
updateView(view, context: context)
}
#else
func makeUIView(context: Context) -> WKWebView {
makeView(context: context)
}
func updateUIView(_ view: WKWebView, context: Context) {
updateView(view, context: context)
}
#endif
}


Expand Down
43 changes: 16 additions & 27 deletions ReaderTranslator/Components/Translator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -11,21 +11,23 @@ import WebKit

struct Translator : ViewRepresentable {
@Binding var text: URLQueryItem

static private let webView: WKWebView = {
let config = WKWebViewConfiguration()
config.websiteDataStore = .nonPersistent()

return WKWebView(frame: .zero, configuration: config)
}()

static var pageView: PageWebView?
private var view: PageWebView {
if let view = Self.pageView { return view }

let view = PageWebView()
Self.pageView = view

return view
}

func makeView(context: Context) -> WKWebView {
func makeView(context: Context) -> PageWebView {
print("Translator_makeView")
return Translator.webView
return view
}

func updateView(_ view: WKWebView, context: Context) {
func updateView(_ view: PageWebView, context: Context) {
print("Translator_updateView")
let lastUrl = view.url?.absoluteString.replacingOccurrences(of: "#view=home", with: "")
let url = lastUrl ?? "https://translate.google.com?sl=auto&tl=ru"
Expand All @@ -46,24 +48,11 @@ struct Translator : ViewRepresentable {
self.text
]

view.load(URLRequest(url: urlComponent.url!))
}

#if os(macOS)
func makeNSView(context: Context) -> WKWebView {
makeView(context: context)
}
func updateNSView(_ view: WKWebView, context: Context) {
updateView(view, context: context)
}
#else
func makeUIView(context: Context) -> WKWebView {
makeView(context: context)
}
func updateUIView(_ view: WKWebView, context: Context) {
updateView(view, context: context)
if let url = urlComponent.url {
print("Translator_updateView_reload")
view.load(URLRequest(url: url))
}
}
#endif
}


Expand Down
42 changes: 9 additions & 33 deletions ReaderTranslator/Components/WebView/WebView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -8,63 +8,39 @@

import SwiftUI

#if os(macOS)

struct WebView: NSViewRepresentable {
struct WebView: ViewRepresentable {
@Binding var lastWebPage: String

static var pageView: PageWebView { views[Store.shared.currentTab]! }

@ObservedObject private var store = Store.shared
static private var views = [Int: PageWebView]()
private var view: PageWebView {
if let view = WebView.views[store.currentTab] { return view }
if let view = Self.views[store.currentTab] { return view }
let view = PageWebView()

WebView.views[self.store.currentTab] = view
Self.views[self.store.currentTab] = view
store.canGoBack = view.canGoBack

return view
}

func makeNSView(context: Context) -> PageWebView {
func makeView(context: Context) -> PageWebView {
print("WebView_makeNSView")
return view
}

func updateNSView(_ view: PageWebView, context: Context) {
func updateView(_ view: PageWebView, context: Context) {
print("WebView_updateNSView")
#if os(macOS)
//TODO: view.scrollView.zoomScale = store.zoom
view.setNeedsDisplay(view.bounds)
// TODO: view.scrollView.zoomScale = store.zoom
// view.setNeedsDisplay(view.bounds)
#else
view.scrollView.zoomScale = store.zoom
view.setZoom(zoomLevel: store.zoom)
if view.newUrl != lastWebPage { view.newUrl = lastWebPage }
#endif
if view.newUrl != lastWebPage { view.newUrl = lastWebPage }
}
}
#else
struct WebView: UIViewRepresentable {
@Binding var lastWebPage: String

@ObservedObject private var store = Store.shared
static private var views = [Int: PageWebView]()
private var view: PageWebView { WebView.views[store.currentTab] ?? PageWebView() }

static var pageView: PageWebView { views[Store.shared.currentTab]! }

func makeUIView(context: Context) -> PageWebView {
WebView.views[self.store.currentTab] = view
store.canGoBack = view.canGoBack

return view
}

func updateUIView(_ uiView: PageWebView, context: Context) {
uiView.setZoom(zoomLevel: store.zoom)
if uiView.newUrl != lastWebPage { uiView.newUrl = lastWebPage }
}
}
#endif


28 changes: 26 additions & 2 deletions ReaderTranslator/Extentions/ViewRepresentable.swift
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,31 @@
import SwiftUI

#if os(macOS)
typealias ViewRepresentable = NSViewRepresentable
typealias ViewRepresentableType = NSViewRepresentable
#else
typealias ViewRepresentable = UIViewRepresentable
typealias ViewRepresentableType = UIViewRepresentable
#endif


protocol ViewRepresentable: ViewRepresentableType {
func updateView(_ view: PageWebView, context: Context)
func makeView(context: Context) -> PageWebView
}

extension ViewRepresentable {
#if os(macOS)
func makeNSView(context: Context) -> PageWebView {
makeView(context: context)
}
func updateNSView(_ view: PageWebView, context: Context) {
updateView(view, context: context)
}
#else
func makeUIView(context: Context) -> PageWebView {
makeView(context: context)
}
func updateUIView(_ view: PageWebView, context: Context) {
updateView(view, context: context)
}
#endif
}

0 comments on commit 507e619

Please sign in to comment.