Skip to content

Commit

Permalink
Safari plugin: Part 1 #15
Browse files Browse the repository at this point in the history
Hack: it or `Divider()` required to display TranslatorView properly `Divider()` takes more space
Show Safari plugin status and click on status to switch on/off
  • Loading branch information
filimo committed Oct 5, 2019
1 parent 537842b commit bc40db1
Show file tree
Hide file tree
Showing 5 changed files with 57 additions and 17 deletions.
6 changes: 6 additions & 0 deletions ReaderTranslator.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,8 @@
F0EE0A122347AA0E004A5EAD /* DOMEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0EE0A0F23478C86004A5EAD /* DOMEvent.swift */; };
F0EE0A162347BF09004A5EAD /* PageWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0EE0A152347BF09004A5EAD /* PageWebView.swift */; };
F0EE0A172347BF09004A5EAD /* PageWebView.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0EE0A152347BF09004A5EAD /* PageWebView.swift */; };
F0EE0A19234897CC004A5EAD /* StatusBarView_Safari.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0EE0A18234897CC004A5EAD /* StatusBarView_Safari.swift */; };
F0EE0A1A234897CC004A5EAD /* StatusBarView_Safari.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0EE0A18234897CC004A5EAD /* StatusBarView_Safari.swift */; };
F0F256BD233D309F00C9D719 /* String.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F256BC233D309F00C9D719 /* String.swift */; };
F0F256C2233E6C4C00C9D719 /* FavoriteVoiceName.swift in Sources */ = {isa = PBXBuildFile; fileRef = F0F256C1233E6C4C00C9D719 /* FavoriteVoiceName.swift */; };
/* End PBXBuildFile section */
Expand Down Expand Up @@ -195,6 +197,7 @@
F0AB12B5233F59B4005B9F2A /* StatusBarView_Voice_Volume.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusBarView_Voice_Volume.swift; sourceTree = "<group>"; };
F0EE0A0F23478C86004A5EAD /* DOMEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DOMEvent.swift; sourceTree = "<group>"; };
F0EE0A152347BF09004A5EAD /* PageWebView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PageWebView.swift; sourceTree = "<group>"; };
F0EE0A18234897CC004A5EAD /* StatusBarView_Safari.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatusBarView_Safari.swift; sourceTree = "<group>"; };
F0F256BC233D309F00C9D719 /* String.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = String.swift; sourceTree = "<group>"; };
F0F256C1233E6C4C00C9D719 /* FavoriteVoiceName.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FavoriteVoiceName.swift; sourceTree = "<group>"; };
/* End PBXFileReference section */
Expand Down Expand Up @@ -444,6 +447,7 @@
isa = PBXGroup;
children = (
F0AA69D3232E9762007CC07B /* StatusBarView.swift */,
F0EE0A18234897CC004A5EAD /* StatusBarView_Safari.swift */,
F0AB12A7233F5802005B9F2A /* StatusBarView_Tabs.swift */,
F0AB12A9233F58A2005B9F2A /* StatusBarView_Zoom.swift */,
F0AB12AB233F5908005B9F2A /* StatusBarView_ViewMode.swift */,
Expand Down Expand Up @@ -705,6 +709,7 @@
F0BB43812344846200ADBEF1 /* ReaderView_PDF.swift in Sources */,
F06DB117234611BB00C2DE90 /* ExtensionManager.swift in Sources */,
F0BB43722344843D00ADBEF1 /* FavoriteVoiceName.swift in Sources */,
F0EE0A1A234897CC004A5EAD /* StatusBarView_Safari.swift in Sources */,
F0BB43712344843900ADBEF1 /* UserDefault.swift in Sources */,
F0BB437C2344845000ADBEF1 /* StatusBarView_PdfPage.swift in Sources */,
F026B1E82344830200E032B9 /* ReaderView_Safari.swift in Sources */,
Expand Down Expand Up @@ -743,6 +748,7 @@
F0EE0A162347BF09004A5EAD /* PageWebView.swift in Sources */,
F0F256C2233E6C4C00C9D719 /* FavoriteVoiceName.swift in Sources */,
F06DB10D23450B6000C2DE90 /* View.swift in Sources */,
F0EE0A19234897CC004A5EAD /* StatusBarView_Safari.swift in Sources */,
F0AA69DF232E97B0007CC07B /* TranslatorView.swift in Sources */,
F0AA69A3232E9710007CC07B /* SceneDelegate.swift in Sources */,
F06DB1042344975E00C2DE90 /* Stack.swift in Sources */,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,16 @@
</dict>
<key>SuppressBuildableAutocreation</key>
<dict>
<key>F0754436234479DA00E1D88E</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>F075444D23447A2700E1D88E</key>
<dict>
<key>primary</key>
<true/>
</dict>
<key>F0AA699C232E9710007CC07B</key>
<dict>
<key>primary</key>
Expand Down
30 changes: 17 additions & 13 deletions ReaderTranslator/Views/ReaderView/ReaderView_Safari.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,35 +15,39 @@ struct ReaderView_Safari: View {
var body: some View {
Group {
if store.viewMode == .safari {
Text(store.selectedText)
/** Hack: it or `Divider()` required to display TranslatorView properly `Divider()` takes more space **/
// Text("").frame(height: 1)
Text(store.selectedText) // temporarily disable
}
}
.onAppear {
SafariExtensionManager().start(onMessageChanged: self.onMessageChanged(notificationName:))
SafariExtensionManager()
.start(onMessageChanged: self.onMessageChanged(notificationName:))
}
}

private func onMessageChanged(notificationName: String) {
if let event = SharedContainer.getEvent() {
switch event.name {
case "keydown":
if let extra = event.extra {
if extra.altKey == true && extra.metaKey == true { //Alt+Cmd
if extra.keyCode == 88 { // x
self.store.isVoiceEnabled.toggle()
}
if extra.keyCode == 90 { // z
self.store.canSafariSendSelectedText.toggle()
if self.store.canSafariSendSelectedText {
self.store.selectedText = event.extra?.selectedText ?? ""
}
if let extra = event.extra,
extra.shiftKey == false,
extra.metaKey == false {

if extra.keyCode == 65 { // a
self.store.isVoiceEnabled.toggle()
}
if extra.keyCode == 83 { // s
self.store.canSafariSendSelectedText.toggle()
if self.store.canSafariSendSelectedText {
self.store.selectedText = event.extra?.selectedText ?? ""
}
}
}
case "selectionchange":
if store.canSafariSendSelectedText { store.selectedText = event.extra?.selectedText ?? "" }
default:
os_log("🐞🐞🐞DOMEvent %@ is not recognized", type: .error, event.name)
os_log("DOMEvent %@ is not recognized", type: .debug, event.name)
}
}else{
os_log("🐞🐞🐞DOMEvent is nil", type: .error)
Expand Down
5 changes: 1 addition & 4 deletions ReaderTranslator/Views/StatusBarView/StatusBarView.swift
Original file line number Diff line number Diff line change
Expand Up @@ -19,10 +19,7 @@ struct StatusBarView: View {
StatusBarView_Tabs(viewMode: $store.viewMode, currentTab: $store.currentTab)
StatusBarView_Zoom()
StatusBarView_Voice().padding([.top,.bottom], 5)
#if os(macOS)
Text("Safari plugin: \(store.canSafariSendSelectedText ? "on" : "off")")
.foregroundColor(store.canSafariSendSelectedText ? .green : .red)
#endif
StatusBarView_Safari()
}.padding(.trailing, 20)
}
}
Expand Down
23 changes: 23 additions & 0 deletions ReaderTranslator/Views/StatusBarView/StatusBarView_Safari.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
//
// StatusBarView_Safari.swift
// ReaderTranslator
//
// Created by Viktor Kushnerov on 10/5/19.
// Copyright © 2019 Viktor Kushnerov. All rights reserved.
//

import SwiftUI

struct StatusBarView_Safari: View {
@EnvironmentObject var store: Store
var body: some View {
Group {
#if os(macOS)
Text("Safari plugin: \(store.canSafariSendSelectedText ? "on" : "off")")
.foregroundColor(store.canSafariSendSelectedText ? .green : .red)
.onTapGesture { self.store.canSafariSendSelectedText.toggle() }
#endif
}
}
}

0 comments on commit bc40db1

Please sign in to comment.