您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Reports day's gain/loss of other players; hover profile link, or click ?
当前为
/*==================================================================================*\ | Nosy - GreaseMonkey Script for Hollywood Stock Exchange | | (c) 2016 by Eduardo Zepeda | | When reading inner messages on the forums, reports the message writer's gain or | | loss for the day, as a tooltip over the username, or as a pop-up, via clickable | | links on leaderboards, watchlists and leagues. Frienemy display option shows | | gains for the day, for up to 3 players, on most HSX pages. | \*==================================================================================*/ // ==UserScript== // @name HSX Nosy // @namespace edzep.scripts // @version 1.2.0 // @author EdZep at HSX // @description Reports day's gain/loss of other players; hover profile link, or click ? // @include http://*hsx.com/* // @exclude http://*hsx.com/portfolio/* // @exclude http://*hsx.com/profile/* // @exclude http://*hsx.com/trade/* // @grant GM_getValue // @grant GM_setValue // @grant GM_addStyle // @grant GM_xmlhttpRequest // ==/UserScript== // Start (function() { var announceBarRef = ""; var announceBarLink = "<a href='javascript:nView();' class='nLink'>?</a> "; var announceBarNormal = ""; var announceBarModified = "To see gain/loss of others here, enter IDs and/or refresh the page. Or, wait..."; var nosyViewState = 0; var firefox = true; //--- handle Greasemonkey APIs not supported by Chrome // @copyright 2009, 2010 James Campos // @license cc-by-3.0; http://creativecommons.org/licenses/by/3.0/ if (typeof GM_deleteValue == 'undefined') { firefox = false; GM_addStyle = function(css) { var style = document.createElement('style'); style.textContent = css; document.getElementsByTagName('head')[0].appendChild(style); } GM_getValue = function(name, defaultValue) { var value = localStorage.getItem(name); if (!value) return defaultValue; var type = value[0]; value = value.substring(1); switch (type) { case 'b': return value == 'true'; case 'n': return Number(value); default: return value; } } GM_setValue = function(name, value) { value = (typeof value)[0] + value; localStorage.setItem(name, value); } } function doNosyId1(allIDs) { GM_xmlhttpRequest({ method: 'GET', url: "http://www.hsx.com/profile/index.php?uname=" + allIDs[0], onload: function(response) { var doc = document.createElement('div'); doc.innerHTML = response.responseText; var findLabels = document.evaluate("//td[@class='label']", doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var netWorthTemp = findLabels.snapshotItem(1).nextSibling.textContent; var rank = findLabels.snapshotItem(2).nextSibling.textContent; var netWorth = parseInt(netWorthTemp.substring(2,netWorthTemp.length-3).replace(/\,/g,'')); rank = rank.substring(0,rank.indexOf(' ')).replace(/\,/g,''); var rankPage = parseInt(rank / 100); if(rank % 100 == 0) rankPage--; GM_xmlhttpRequest({ method: 'GET', url: "http://www.hsx.com/leader/?type=ltd&page=" + rankPage, onload: function(response) { var doc = document.createElement('div'); doc.innerHTML = response.responseText; var findRank = document.evaluate("//table[@class='sortable']//td[ . = " + rank + "]", doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var rankNode = findRank.snapshotItem(0); var resetWorth = parseInt(rankNode.parentNode.childNodes[9].textContent.replace(/\,/g,'')); var sstyle = "<span class='nGreen'>"; var change = netWorth - resetWorth; if(resetWorth > netWorth) { sstyle = "<span class='nRed'>-"; change = resetWorth - netWorth; } announceBarModified = "<span class='aText'>" + allIDs[0] + ": </span>" + sstyle + "H$" + numberFormat(change) + "</span> "; nosyView(false); if(allIDs.length > 1) doNosyId2(allIDs); } }); } }); } function doNosyId2(allIDs) { GM_xmlhttpRequest({ method: 'GET', url: "http://www.hsx.com/profile/index.php?uname=" + allIDs[1], onload: function(response) { var doc = document.createElement('div'); doc.innerHTML = response.responseText; var findLabels = document.evaluate("//td[@class='label']", doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var netWorthTemp = findLabels.snapshotItem(1).nextSibling.textContent; var rank = findLabels.snapshotItem(2).nextSibling.textContent; var netWorth = parseInt(netWorthTemp.substring(2,netWorthTemp.length-3).replace(/\,/g,'')); rank = rank.substring(0,rank.indexOf(' ')).replace(/\,/g,''); var rankPage = parseInt(rank / 100); if(rank % 100 == 0) rankPage--; GM_xmlhttpRequest({ method: 'GET', url: "http://www.hsx.com/leader/?type=ltd&page=" + rankPage, onload: function(response) { var doc = document.createElement('div'); doc.innerHTML = response.responseText; var findRank = document.evaluate("//table[@class='sortable']//td[ . = " + rank + "]", doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var rankNode = findRank.snapshotItem(0); var resetWorth = parseInt(rankNode.parentNode.childNodes[9].textContent.replace(/\,/g,'')); var sstyle = "<span class='nGreen'>"; var change = netWorth - resetWorth; if(resetWorth > netWorth) { sstyle = "<span class='nRed'>-"; change = resetWorth - netWorth; } announceBarModified += "<span class='aText'>" + allIDs[1] + ": </span>" + sstyle + "H$" + numberFormat(change) + "</span> "; nosyView(false); if(allIDs.length > 2) doNosyId3(allIDs); } }); } }); } function doNosyId3(allIDs) { GM_xmlhttpRequest({ method: 'GET', url: "http://www.hsx.com/profile/index.php?uname=" + allIDs[2], onload: function(response) { var doc = document.createElement('div'); doc.innerHTML = response.responseText; var findLabels = document.evaluate("//td[@class='label']", doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var netWorthTemp = findLabels.snapshotItem(1).nextSibling.textContent; var rank = findLabels.snapshotItem(2).nextSibling.textContent; var netWorth = parseInt(netWorthTemp.substring(2,netWorthTemp.length-3).replace(/\,/g,'')); rank = rank.substring(0,rank.indexOf(' ')).replace(/\,/g,''); var rankPage = parseInt(rank / 100); if(rank % 100 == 0) rankPage--; GM_xmlhttpRequest({ method: 'GET', url: "http://www.hsx.com/leader/?type=ltd&page=" + rankPage, onload: function(response) { var doc = document.createElement('div'); doc.innerHTML = response.responseText; var findRank = document.evaluate("//table[@class='sortable']//td[ . = " + rank + "]", doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var rankNode = findRank.snapshotItem(0); var resetWorth = parseInt(rankNode.parentNode.childNodes[9].textContent.replace(/\,/g,'')); var sstyle = "<span class='nGreen'>"; var change = netWorth - resetWorth; if(resetWorth > netWorth) { sstyle = "<span class='nRed'>-"; change = resetWorth - netWorth; } announceBarModified += "<span class='aText'>" + allIDs[2] + ": </span>" + sstyle + "H$" + numberFormat(change) + "</span>"; nosyView(false); } }); } }); } function getInfo(profileLink,asTooltip,x,y) { GM_xmlhttpRequest({ method: 'GET', url: profileLink, onload: function(response) { var doc = document.createElement('div'); doc.innerHTML = response.responseText; var findName = document.evaluate("//div[@class='security_data']//h1", doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var userName = findName.snapshotItem(0).textContent; var findLabels = document.evaluate("//td[@class='label']", doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var netWorthTemp = findLabels.snapshotItem(1).nextSibling.textContent; var rank = findLabels.snapshotItem(2).nextSibling.textContent; var netWorth = parseInt(netWorthTemp.substring(2,netWorthTemp.length-3).replace(/\,/g,'')); rank = rank.substring(0,rank.indexOf(' ')).replace(/\,/g,''); if(rank == "-") { if(asTooltip) profileLink.setAttribute("title", "Sorry, this port is unranked"); else { var message = "<table class='calc'><tr><td>Sorry, this port is unranked.</td><td><a href='javascript:closeTip();' style='display:block; text-align:right'> X </a></td></tr></table>"; displayTip(message,x,y); } return; } var rankPage = parseInt(rank / 100); if(rank % 100 == 0) rankPage--; GM_xmlhttpRequest({ method: 'GET', url: "http://www.hsx.com/leader/?type=ltd&page=" + rankPage, onload: function(response) { var doc = document.createElement('div'); doc.innerHTML = response.responseText; var findRank = document.evaluate("//table[@class='sortable']//td[ . = " + rank + "]", doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var rankNode = findRank.snapshotItem(0); var resetWorth = parseInt(rankNode.parentNode.childNodes[9].textContent.replace(/\,/g,'')); var status = "gain"; var sstyle = "<span style='color:#038013; font-weight:bold'>"; var change = netWorth - resetWorth; if(resetWorth > netWorth) { status = "loss"; sstyle = "<span style='color:#E30000; font-weight:bold'>"; change = resetWorth - netWorth; } var message = "Port rank: " + rank + ". Port value: H$" + numberFormat(netWorth) + ". Today's " + status + ": H$" + numberFormat(change); if(asTooltip) profileLink.setAttribute("title", message); else { message = "<table class='calc'><tr><td style='font-weight:bold'>" + userName + "</td><td><a href='javascript:closeTip();' style='display:block; text-align:right'>X </a></td></tr><tr><td colspan=2>Port rank: " + rank + "</td></tr>"; message += "<tr><td colspan=2>Port value: H$" + numberFormat(netWorth) + "</td></tr>"; message += "<tr><td colspan=2>Today's " + sstyle + status + "</span>: H$" + numberFormat(change) + "</td></tr></table>"; displayTip(message,x,y); } } }); } }); } // display info popup function displayTip(newHTML,clickX,clickY) { var popDiv = document.getElementById("popTip"); popDiv.innerHTML = newHTML; popDiv.style.top = clickY + 15 + "px"; popDiv.style.left = clickX + 25 + "px"; //keep popup display from appearing below screen edge var divHeight = popDiv.offsetHeight; var pageBottom = window.innerHeight + window.scrollY; if (parseInt(popDiv.style.top) > pageBottom - divHeight + 25) { popDiv.style.top = pageBottom - divHeight + 25 + "px"; } popDiv.style.visibility = "visible"; } // Function from Netlobo.com function insertAfter(referenceNode, newNode) { referenceNode.parentNode.insertBefore( newNode, referenceNode.nextSibling ); } // Function from Netlobo.com formats numbers with commas function numberFormat(nStr){ nStr += ''; x = nStr.split('.'); x1 = x[0]; x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) x1 = x1.replace(rgx, '$1' + ',' + '$2'); return x1 + x2; } function getParam(tempstr) { var paren1 = tempstr.indexOf('('); var paren2 = tempstr.indexOf(')'); return tempstr.substring(paren1+2,paren2-1); } function createNosyDisplay(savedIDlist) { var allIDs = new Array(); allIDs = savedIDlist.split(','); if(GM_getValue("nosyShowIDlistView", false) == true) { nosyViewState = 1; if(allIDs.length > 0) { var startIdx = 0; if(allIDs.length > 3) { startIdx = GM_getValue("nosyRotateIdx", 0) if(startIdx > allIDs.length - 3) startIdx = 0; GM_setValue("nosyRotateIdx", startIdx+1); } doNosyId1(allIDs.slice(startIdx)); } } nosyView(false); } function nosyView(cycle) { if(cycle) { if(nosyViewState == 2) { nosyInputShowHide(); return; } nosyViewState++; if(nosyViewState > 2) nosyViewState = 0; } if(nosyViewState == 0) { GM_setValue("nosyShowIDlistView", false); announceBarRef.innerHTML = announceBarLink + announceBarNormal; } else if(nosyViewState == 1) { GM_setValue("nosyShowIDlistView", true); announceBarRef.innerHTML = announceBarLink + announceBarModified; } else if(nosyViewState == 2) nosyInputShowHide(); } function nosyInputShowHide() { var idVisible = document.getElementById("idPanel"); var idUsers = document.getElementById("idUsers"); if(idVisible.style.visibility == "visible") { idVisible.style.visibility = "hidden"; if(idUsers.value.length > 0) GM_setValue("nosyIDlist", idUsers.value); announceBarRef.innerHTML = announceBarLink + "Any changes will be reflected on refresh"; GM_setValue("nosyShowIDlistView", true); nosyViewState = 3; } else { idVisible.style.visibility = "visible"; idUsers.value = GM_getValue("nosyIDlist", ""); idUsers.focus(); } } document.addEventListener('click', function(event) { var tempstr = new String(event.target); var quash = false; if(tempstr.indexOf('nosy') > -1) { var profileLink = getParam(tempstr); getInfo(profileLink, false, event.pageX, event.pageY); quash = true; } if(tempstr.indexOf('closeTip') > -1) { document.getElementById("popTip").style.visibility = "hidden"; quash = true; } if(tempstr.indexOf('nView') > -1) { nosyView(true); quash = true; } if(event.target.id == "inputOK") { nosyInputShowHide(); quash = true; } if(quash == true) { //quash any further actions of events handled here event.stopPropagation(); event.preventDefault(); } }, true); function HSXNosy_Run(){ if (window != window.top) return; // prevent run in IFRAME - forum text box GM_addStyle('table.calc {border: 2px ridge #FBEDBB} table.calc td {background-color: #FFF9E3; border: 1px solid #FFF9E3; padding: 0 3px}'); GM_addStyle('.nRed {color: red; font-weight: bold} .nGreen {color: #51B84D; font-weight: bold}'); GM_addStyle('.aText {color: white} .nLink, .nLink:visited {color: #03CFF4 !important; font-style: italic; font-weight: bold; text-decoration: none} .nLink:hover {color: white !important}'); var findProfileLink = document.evaluate("//a[contains(@href,'/profile/')]", document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); var url = window.location.href; // get URL, determine whether forum page if(url.indexOf('hsx.com/forum') > -1 && url.indexOf('pid=') > -1) { var profileLink = findProfileLink.snapshotItem(findProfileLink.snapshotLength-1); getInfo(profileLink, true,0,0); } else { for(var i=0; i<findProfileLink.snapshotLength; i++) { var profileLink = findProfileLink.snapshotItem(i); // create new ? link var nosyLink = document.createElement("a"); var spaceNode = document.createTextNode(" ") nosyLink.href = "javascript:nosy('" + profileLink + "');"; nosyLink.title = "Nosy?"; nosyLink.appendChild(document.createTextNode("?")); nosyLink.style.cssText = "color:navy; font-weight:bold; font-style:italic;"; insertAfter(profileLink,spaceNode); insertAfter(spaceNode,nosyLink); } } // div panel for info popup var popDiv = document.createElement("div"); popDiv.id = "popTip"; popDiv.style.visibility = "hidden"; popDiv.style.color = "444444"; popDiv.style.zIndex = "103"; popDiv.style.width = "auto"; popDiv.style.position = "absolute"; var item = document.getElementsByTagName("body")[0]; item.insertBefore(popDiv, item.firstChild); //--- make new add-in panel for IDs var idDiv = document.createElement("div"); idDiv.innerHTML = "<p style='margin-top:-.1em; margin-bottom:0'>Enter HSX user IDs, separated with commas (no spaces):<p style='margin-top:.4em; margin-bottom:-.5em'><input id='idUsers' type='text' style='width:28em' /> <input id='inputOK' type='button' value=' OK ' />"; idDiv.id = "idPanel"; idDiv.style.position = "fixed"; idDiv.style.visibility = "hidden"; idDiv.style.backgroundColor = "lightgray"; idDiv.style.padding = "10px"; idDiv.style.top = "0px"; idDiv.style.left = "50px"; idDiv.style.width = "620px"; idDiv.style.zIndex = "104"; idDiv.style.borderWidth = "5px"; idDiv.style.borderStyle = "ridge"; idDiv.style.borderColor = "gray"; //item = document.getElementsByTagName("body")[0]; item.insertBefore(idDiv, item.firstChild); // get announcement bar, and prep it with ? link announceBarRef = document.getElementById("announce_bar"); announceBarNormal = announceBarRef.innerHTML; announceBarRef.setAttribute("style","text-align: left"); announceBarRef.innerHTML = announceBarLink + announceBarNormal; var savedIDlist = GM_getValue("nosyIDlist", ""); if(savedIDlist.length > 0) createNosyDisplay(savedIDlist); } HSXNosy_Run(); })(); // End
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址