-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathdndbeyond-jumping.user.js
More file actions
155 lines (136 loc) · 4.54 KB
/
Copy pathdndbeyond-jumping.user.js
File metadata and controls
155 lines (136 loc) · 4.54 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
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
// ==UserScript==
// @name D&D Beyond - Jumping Distance
// @namespace https://greasyfork.org/users/649
// @version 1.0.10
// @description Adds a jumping distance section to D&D Beyond
// @author Adrien Pyke
// @match *://www.dndbeyond.com/profile/*/characters/*
// @grant GM_getValue
// @grant GM_setValue
// @require https://cdn.jsdelivr.net/gh/fuzetsu/userscripts@ec863aa92cea78a20431f92e80ac0e93262136df/wait-for-elements/wait-for-elements.js
// ==/UserScript==
(() => {
'use strict';
const SCRIPT_NAME = 'D&D Beyond - Jumping Distance';
const Util = {
log(...args) {
args.unshift(`%c${SCRIPT_NAME}:`, 'font-weight: bold;color: #233c7b;');
console.log(...args);
},
q(query, context = document) {
return context.querySelector(query);
},
qq(query, context = document) {
return Array.from(context.querySelectorAll(query));
}
};
const App = {
createSpeedManagerItem(label, amount) {
const div = document.createElement('div');
div.classList.add('speed-manager-item');
const lblSpan = document.createElement('span');
lblSpan.classList.add('speed-manager-item-label');
lblSpan.textContent = label;
div.appendChild(lblSpan);
const lblAmount = document.createElement('span');
lblAmount.classList.add('speed-manager-item-amount');
lblAmount.textContent = `${amount} ft.`;
div.appendChild(lblAmount);
return div;
},
createOverrideItem(label, key) {
const div = document.createElement('div');
div.classList.add('speed-manager-override-item');
div.dataset.key = key;
const lblDiv = document.createElement('div');
lblDiv.classList.add('speed-manager-override-item-label');
lblDiv.textContent = label;
div.appendChild(lblDiv);
const inputDiv = document.createElement('div');
inputDiv.classList.add('speed-manager-override-item-input');
const value = document.createElement('input');
value.type = 'number';
value.min = 0;
value.value = GM_getValue(`${Character.id}-${key}`) || '';
inputDiv.appendChild(value);
div.appendChild(inputDiv);
const sourceDiv = document.createElement('div');
sourceDiv.classList.add('speed-manager-override-item-source');
const source = document.createElement('input');
source.type = 'text';
source.value = GM_getValue(`${Character.id}-${key}-source`) || '';
sourceDiv.appendChild(source);
div.appendChild(sourceDiv);
return div;
},
saveOverrideItem(item) {
if (item) {
const key = item.dataset.key;
const value = Util.q(
'.speed-manager-override-item-input > input',
item
).value;
const source = Util.q(
'.speed-manager-override-item-source > input',
item
).value;
GM_setValue(`${Character.id}-${key}`, value);
GM_setValue(`${Character.id}-${key}-source`, source);
}
}
};
const Character = {
id: parseInt(location.pathname.match(/\/([0-9]+)$/u)[1]),
get strength() {
return parseInt(
Util.q('.character-ability-strength > .character-ability-score')
.textContent
);
},
get strengthModifier() {
return parseInt(
Util.q(
'.character-ability-strength > .character-ability-modifier > .character-ability-stat-value'
).textContent
);
},
get longJump() {
return parseInt(
GM_getValue(`${Character.id}-long-jump`) || Character.strength
);
},
get highJump() {
return parseInt(
GM_getValue(`${Character.id}-high-jump`) ||
Math.max(Character.strengthModifier + 3, 0)
);
}
};
waitForElems({
sel: '.speed-manager-view',
onmatch(view) {
const items = Util.q('.speed-manager-items', view);
items.appendChild(
App.createSpeedManagerItem('Long Jump', Character.longJump)
);
items.appendChild(
App.createSpeedManagerItem('High Jump', Character.highJump)
);
Util.q('.fullscreen-modal-accept > button').addEventListener(
'click',
() => {
Util.qq('.speed-manager-override-item[data-key]').forEach(item =>
App.saveOverrideItem(item)
);
}
);
}
});
waitForElems({
sel: '.speed-manager-override-list',
onmatch(overrides) {
overrides.appendChild(App.createOverrideItem('Long Jump', 'long-jump'));
overrides.appendChild(App.createOverrideItem('High Jump', 'high-jump'));
}
});
})();