-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathTranslateWebView.swift
68 lines (52 loc) · 1.89 KB
/
TranslateWebView.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
//
// TranslateWebView.swift
// Translate Menu
//
// Created by Adrián Moreno Peña on 17/11/2024.
// Copyright © 2024 Adrian Moreno Peña. All rights reserved.
//
import WebKit
class TranslateWebView: WKWebView {
override var acceptsFirstResponder: Bool { return true }
override func becomeFirstResponder() -> Bool {
return true
}
override func keyDown(with event: NSEvent) {
NSLog("keyDown translateWebView: " + (event.characters ?? "") )
switch event.modifierFlags.intersection(.deviceIndependentFlagsMask) {
case [.command] where event.characters == "c":
self.copy(event)
case [.command] where event.characters == "v":
self.paste(event)
case [.command] where event.characters == "a":
self.selectAll(event)
default:
break
}
super.keyDown(with: event)
}
public func keyPress(event: NSEvent){
super.keyDown(with: event)
}
@IBAction override func selectAll(_ sender: Any?) {
NSLog("Select all");
super.selectAll(sender)
}
@IBAction func copy(_ sender: Any?) {
let pasteboard = NSPasteboard.general
pasteboard.clearContents()
let script = "window.getSelection().toString()";
self.evaluateJavaScript(script){ selectedText, error in
pasteboard.setString(selectedText as! String, forType: .string)
}
}
@IBAction func paste(_ sender: Any?) {
let pasteboard = NSPasteboard.general
if let copiedString = pasteboard.string(forType: .string) {
// Use the copied string
print("Pasted: \(copiedString)")
let javascript = "document.execCommand('insertText', false, '\(copiedString)');"
self.evaluateJavaScript(javascript, completionHandler: nil)
}
}
}