-
Notifications
You must be signed in to change notification settings - Fork 9
/
position-targets.user.js
90 lines (79 loc) · 2.99 KB
/
position-targets.user.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
// ==UserScript==
// @name Cryptohopper Position Targets
// @namespace https://github.com/markrickert/cryptohopper-dashboard-watchlist
// @version 0.3
// @description Adds a red or green icon after position names when currently targeted by the bot.
// @author @markrickert
// @homepage https://github.com/markrickert/cryptohopper-dashboard-watchlist
// @updateURL https://github.com/markrickert/cryptohopper-dashboard-watchlist/raw/main/position-targets.user.js
// @match https://www.cryptohopper.com/dashboard
// @icon https://www.google.com/s2/favicons?domain=cryptohopper.com
// @grant GM_addStyle
// ==/UserScript==
try {
// Only run this code on the intended page(s) (useful when @required in a parent script)
if (["/dashboard"].includes(window.location.pathname))
(function () {
"use strict";
function addStyles() {
GM_addStyle(`
table.dataTable tr td.target-buy::after, table.dataTable tr td.target-sell::after {
display: inline-block;
font-style: normal;
font-variant: normal;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
font-family:'Material Design Iconic Font';
padding-left:3px;
font-size: 0.9em;
content:"\\f140";
color: #06cc98;
}
table.dataTable tr td.target-sell::after {
color: #f6887d;
}
`);
}
function processResponse(event, xhr, settings) {
const response = JSON.parse(xhr.responseText);
if (response.data && response.data.ta_values) {
const { current_sells, ta_values } = response.data;
const allCoinTDs = jQuery(
`table:contains('Currency'):contains('Action') tr td:has("a[data-target='.chart-modal'] strong")`
);
allCoinTDs.removeClass("target-buy target-sell");
if (current_sells && current_sells.length > 0) {
const sellTargets = current_sells.split(",");
allCoinTDs.each((i, td) => {
if (sellTargets.includes(td.innerText)) {
jQuery(td).addClass("target-sell");
}
});
}
let buyTargets = [];
for (const target in ta_values) {
if (ta_values[target].signals == "buy") buyTargets.push(target);
}
if (buyTargets && buyTargets.length > 0) {
allCoinTDs.each((i, td) => {
if (buyTargets.includes(td.innerText)) {
jQuery(td).addClass("target-buy");
}
});
}
}
}
// This function listens for network requests and intercepts the target list to turn their icon on and off.
function watchTargets() {
jQuery(document).ajaxComplete(processResponse);
}
jQuery(() => {
addStyles();
watchTargets();
});
})();
} catch (err) {
console.log(
`Error in script position-targets.user.js: ${err.name}: ${err.message}`
);
}