Newer
Older
// ==UserScript==
// @name Date Button
// @namespace http://hugo.hornquist.se
// @description Inputs the current date into the current text field.
// @updateURL https://git.lysator.liu.se/hugo/web-monkey-scripts/raw/master/date-button/index.js
// @downloadURL https://git.lysator.liu.se/hugo/web-monkey-scripts/raw/master/date-button/index.js
// @source https://git.lysator.liu.se/hugo/web-monkey-scripts/-/tree/master/date-button
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_addStyle
// ==/UserScript==
(function () {
'use strict';
let btn_id = 'id-37582c25-78ad-4922-a19b-244361f42ec0'
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
function serialize_event(e) {
return {
'key': e.key,
'ctrl': e.ctrlKey,
'alt': e.altKey,
'shift': e.shiftKey,
}
}
function deserialize_event(data) {
return new KeyboardEvent('keydown', {
ctrlKey: data.ctrl,
altKey: data.alt,
shiftKey: data.shift,
key: data.key,
})
}
function event_matches(a, b) {
return a.ctrlKey == b.ctrlKey &&
a.altKey == b.altKey &&
a.shiftKey == b.shiftKey &&
a.key == b.key;
}
function formatKeyEvent(e) {
let s = '';
if (e.ctrlKey) s += 'Ctrl-';
if (e.altKey) s += 'Alt-';
if (e.shiftKey) s += 'Shift-';
if (e.key != 'Shift' && e.key != 'Control' && e.key != 'Alt') s += e.key;
return s;
}
let btn = document.createElement('button');
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
let registered_key_combo = GM_getValue('date-key');
console.log(registered_key_combo);
if (registered_key_combo == null) {
btn.textContent = 'Register keycode'
} else {
registered_key_combo = deserialize_event(registered_key_combo)
btn.textContent = formatKeyEvent(registered_key_combo);
}
console.log(registered_key_combo);
btn.addEventListener('click', (e) => {
btn.textContent = 'Input key sequence ...'
})
document.body.appendChild(btn);
let state = false
btn.addEventListener('keydown', (e) => {
console.log(e);
let s = formatKeyEvent(e)
console.log(s);
btn.textContent = s
state = 'down'
})
btn.addEventListener('keyup', (e) => {
if (state != 'down') return;
state = 'up'
registered_key_combo = e;
GM_setValue('date-key', serialize_event(e))
btn.blur();
e.preventDefault();
})
document.addEventListener('keydown', (e) => {
if (event_matches(e, registered_key_combo)) {
if (! document.activeElement) return;
let start = document.activeElement.selectionStart;
let end = document.activeElement.selectionEnd;
if (start == undefined || end == undefined) return;
let s = document.activeElement.value
s = s.substring(0, start) + (new Date).toISOString() + s.substring(end)
document.activeElement.value = s;
e.preventDefault();
}
});
let style = document.createElement('style');
style.textContent = `
#${btn_id} {
position: absolute;
top: 1em;
left: 1em;
z-index: 10000;
background: lightgray;
border: 2px solid black;
}
#${btn_id}:focus {
background: pink;
}
`