forked from quoid/userscripts
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSafariExtensionViewController.swift
More file actions
86 lines (74 loc) · 3.41 KB
/
Copy pathSafariExtensionViewController.swift
File metadata and controls
86 lines (74 loc) · 3.41 KB
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//
// SafariExtensionViewController.swift
// Userscripts Extension
//
// Created by Justin Wasack on 4/25/19.
// Copyright © 2019 Justin Wasack. All rights reserved.
//
import SafariServices
import WebKit
class SafariExtensionViewController: SFSafariExtensionViewController, WKScriptMessageHandler {
@IBOutlet var webView: WKWebView!
static let shared: SafariExtensionViewController = {
let shared = SafariExtensionViewController()
shared.preferredContentSize = NSSize(width:616, height:616)
return shared
}()
override func viewDidLoad() {
super.viewDidLoad()
webView.allowsLinkPreview = false
webView.configuration.preferences.setValue(true, forKey: "developerExtrasEnabled")
webView.configuration.userContentController.add(self, name: "webViewOnLoad")
webView.configuration.userContentController.add(self, name: "saveCode")
webView.configuration.userContentController.add(self, name: "getInfo")
webView.configuration.userContentController.add(self, name: "downloadScript")
webView.configuration.userContentController.add(self, name: "setCursor")
webView.configuration.userContentController.add(self, name: "setStatus")
let bundleURL = Bundle.main.resourceURL!.absoluteURL
let html = bundleURL.appendingPathComponent("editor.html")
webView.loadFileURL(html, allowingReadAccessTo:bundleURL)
}
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "saveCode" {
saveData(code: message.body as! String)
webView.evaluateJavaScript("___userscripts.setSaveDate('\(EditorData.lastEdited)');", completionHandler: nil)
}
if message.name == "webViewOnLoad" {
webView.evaluateJavaScript("___userscripts.loadCode('\(EditorData.code)');", completionHandler: nil)
if !EditorData.lastEdited.isEmpty {
webView.evaluateJavaScript("___userscripts.setEditorMessage('Last edited on \(EditorData.lastEdited)');", completionHandler: nil)
}
let status = UserDefaults.standard.string(forKey: "ToggleStatus")
if status == "off" {
webView.evaluateJavaScript("___userscripts.toggleOff();", completionHandler: nil)
}
let appVersion = Bundle.main.infoDictionary!["CFBundleShortVersionString"] as! String
webView.evaluateJavaScript("___userscripts.setVersion(' v\(appVersion)');", completionHandler: nil)
}
if message.name == "getInfo" {
openExtensionHomepage()
dismissPopover()
}
if message.name == "downloadScript" {
downloadScript()
dismissPopover()
}
if message.name == "setStatus" {
let st = message.body as! String
setToggleStatus(status: st)
}
//hack to get popover webview to set proper cursors
if message.name == "setCursor" {
let cursor = message.body as! String
if (cursor == "auto" || cursor == "default") {
NSCursor.arrow.set()
}
if (cursor == "pointer") {
NSCursor.pointingHand.set()
}
if (cursor == "text") {
NSCursor.iBeam.set()
}
}
}
}