-
Notifications
You must be signed in to change notification settings - Fork 20
/
go-button.js
129 lines (115 loc) · 5.83 KB
/
go-button.js
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
//GO buttons in addressbar
//Кнопки перехода для адресной и посковой строк
vivaldi.jdhooks.hookModule("vivaldiSettings", (moduleInfo, exports) => {
let oldGetDefault = exports.getDefault
exports.getDefault = name => {
switch (name) {
case "ADDRESS_BAR_URL_GO_ENABLED": return true
case "ADDRESS_BAR_SEARCH_GO_ENABLED": return true
default: return oldGetDefault(name)
}
}
return exports
})
vivaldi.jdhooks.hookClass("urlfield_UrlBar", oldClass => {
const React = vivaldi.jdhooks.require("React")
const ToolbarButton = vivaldi.jdhooks.require("toolbars_ToolbarButton")
const buttonImage = '<svg width="26" height="26" viewBox="0 0 26 26"><path d="M 12,4 10.400391,5.5996094 16.5,11.869141 l -13.5,0 0,2.261718 13.5,0 -6.099609,6.269532 L 12,22 21,13 12,4 Z"></path></svg>'
function btn(onclick) {
return React.createElement(ToolbarButton, {
tooltip: "Go!",
onClick: onclick,
onMiddleClick: onclick,
image: buttonImage,
})
}
class newUrlBar extends oldClass {
constructor(...e) { super(...e) }
render() {
let r = super.render()
if (this.props.vivaldiSettings.ADDRESS_BAR_URL_GO_ENABLED) {
const idx = r.props.children.findIndex(x => x && (x.props.className == "addressfield"))
if (idx > -1) r.props.children.splice(idx + 1, 0,
btn((evt) =>
this.handleUrlFieldSubmit({
url: this.state.editUrl || this.props.url,
options: { inCurrent: evt.button !== 1 }
})
))
}
if (this.props.vivaldiSettings.ADDRESS_BAR_SEARCH_GO_ENABLED) {
const idx = r.props.children.findIndex(x => x && (x.ref == "searchField"))
if (idx > -1) r.props.children.splice(idx + 1, 0,
btn((evt) =>
this.onSearch(
this.refs.searchField.state.editText,
this.refs.searchField.state.currentSearchEngine,
{ inCurrent: evt.button !== 1 }
)
))
}
return r
}
}
return newUrlBar
}, { settings: ["ADDRESS_BAR_URL_GO_ENABLED", "ADDRESS_BAR_SEARCH_GO_ENABLED"] })
vivaldi.jdhooks.hookClass("settings_addressbar_AddressBar", oldClass => {
const React = vivaldi.jdhooks.require("React")
const Settings_SettingsSearchCategoryChild = vivaldi.jdhooks.require("settings_SettingsSearchCategoryChild")
const VivaldiSettings = vivaldi.jdhooks.require("vivaldiSettings")
const settingsKeys = ["ADDRESS_BAR_URL_GO_ENABLED", "ADDRESS_BAR_SEARCH_GO_ENABLED"]
function changeHandler(oldValue, newValue, key) {
if (this.state.goButtonSettings[key] != newValue)
this.setState(state => ({ goButtonSettings: { ...state.goButtonSettings, [key]: newValue } }))
}
class newAddressBarSettings extends oldClass {
constructor(...e) {
super(...e)
this.state = { ...(this.state || {}), ...{ goButtonSettings: VivaldiSettings.getKeysSync(settingsKeys) } }
}
componentDidMount() {
if (super.componentDidMount) super.componentDidMount()
settingsKeys.forEach(key => VivaldiSettings.addListener(key, changeHandler.bind(this)))
}
componentWillUnmount() {
if (super.componentWillUnmount) super.componentWillUnmount()
settingsKeys.forEach(key => VivaldiSettings.removeListener(key, changeHandler.bind(this)))
}
render() {
let r = super.render()
r.props.children.push(
React.createElement(Settings_SettingsSearchCategoryChild, { filter: this.props.filter },
React.createElement("h3", null, "Go button"),
React.createElement("div", { className: "setting-group" },
React.createElement("div", { className: "setting-single" },
React.createElement("label", null,
React.createElement("input", {
type: "checkbox",
checked: this.state.goButtonSettings.ADDRESS_BAR_URL_GO_ENABLED,
onChange: () => VivaldiSettings.set({
ADDRESS_BAR_URL_GO_ENABLED: !this.state.goButtonSettings.ADDRESS_BAR_URL_GO_ENABLED
})
}),
React.createElement("span", null, "Go button after addressfield")
)
),
React.createElement("div", { className: "setting-single" },
React.createElement("label", null,
React.createElement("input", {
type: "checkbox",
checked: this.state.goButtonSettings.ADDRESS_BAR_SEARCH_GO_ENABLED,
onChange: () => VivaldiSettings.set({
ADDRESS_BAR_SEARCH_GO_ENABLED: !this.state.goButtonSettings.ADDRESS_BAR_SEARCH_GO_ENABLED
})
}),
React.createElement("span", null, "Go button after searchfield")
)
)
)
)
)
return r
}
}
return newAddressBarSettings
})