// ==UserScript==
// @name ACGN-stock營利統計外掛
// @namespace http://tampermonkey.net/
// @version 2.101
// @description try to take over the world!
// @author SoftwareSing
// @match http://acgn-stock.com/*
// @match https://acgn-stock.com/*
// @grant none
// ==/UserScript==
//版本號為'主要版本號 + "." + 次要版本號 + 錯誤修正版本號(兩位),ex 1.801
//修復導致功能失效的錯誤或更新重大功能提升主要或次要版本號
//優化UI,優化效能,優化小錯誤更新錯誤版本號
//兩個錯誤修正版本號防止迫不得已進位到次要版本號
//本腳本修改自 "ACGN股票系統每股營利外掛 2.200 by papago89"
var wasCompany, wasStockSummary, wasaccountInfo, wasfoundationPlan, oldUrl;
// 程式進入點
(function mainfunction() {
//設定狀態
wasCompany = (document.location.href.search(/company\/detail/) != -1);
wasStockSummary = (document.location.href.search(/company\/[0-9]+/) != -1);
//wasAccountInfo = (document.location.href.search(/accountInfo/) != -1);
//wasFoundationPlan = document.location.href.search(/foundation/) != -1;
oldUrl = document.location.href;
//針對現在的頁面做反應
if (wasCompany)
{
setTimeout(addCompanyClickListener, 1000);
}
else if (wasStockSummary)
{
//setTimeout(computeProfit, 1000);
setTimeout(addStockSummaryListener, 1000);
}
/*else if (wasaccountInfo)
{
setTimeout(AddTaxListener, 1000);
setTimeout(addShowSubscribesListener,1000);
}
else if (wasfoundationPlan)
setTimeout(addFPEvent, 1000);*/
//全域事件
setTimeout(addEvent, 5000);
checkDividendUpdataTime();
setTimeout(checkScriptEvent, 500);
})();
//Header新增按鈕並監聽 -----已刪除
// 監測main的變化並判斷當前屬於哪個頁面加入正確的事件監聽
function addEvent()
{
$('#main').bind("DOMNodeInserted DOMNodeRemoved", function() {
// 因AJAX動態生成不斷執行,所以有時候main的變動並不代表換頁,此時無須重新加入事件
if(oldUrl != document.location.href && document.location.href.search(/company\/detail/) != -1)
{
setTimeout(addCompanyClickListener, 1000);
}
else if(oldUrl != document.location.href && document.location.href.search(/company\/[0-9]+/) != -1)
{
//setTimeout(computeProfit, 1000);
setTimeout(addStockSummaryListener, 1000);
}
/*else if(oldUrl != document.location.href && document.location.href.search(/accountInfo/) != -1)
{
setTimeout(AddTaxListener, 1000);
setTimeout(addShowSubscribesListener,1000);
}
else if(oldUrl != document.location.href && document.location.href.search(/foundation/) != -1)
setTimeout(addFPEvent, 1000);*/
wasCompany = (document.location.href.search(/company\/detail/) != -1);
wasStockSummary = (document.location.href.search(/company\/[0-9]+/) != -1);
//wasAccountInfo = (document.location.href.search(/accountInfo/) != -1);
//wasFoundationPlan = document.location.href.search(/foundation/) != -1;
oldUrl = document.location.href;
});
}
function get_abcd1357_JsonObj()
{
var request = new XMLHttpRequest();
request.open("GET", "https://jsonbin.org/abcd1357/ACGNstock-company", false); // 連線 POST到該連線位址
request.send();
abcd1357_jsonObj = JSON.parse(request.responseText);
}
function checkDividendUpdataTime()
{
get_abcd1357_JsonObj();
//window.localStorage.removeItem ("Dividend_UpdataTime");
var Dividend_UpdataTime = null !== window.localStorage.getItem ("Dividend_UpdataTime") ? JSON.parse(window.localStorage.getItem ("Dividend_UpdataTime")) : null;
if (abcd1357_jsonObj.updataTime === Dividend_UpdataTime)
{
console.log("dont need updata " + Dividend_UpdataTime);
}
else
{
console.log("server updata time: " + abcd1357_jsonObj.updataTime);
console.log("local updata time: " + Dividend_UpdataTime);
console.log("start updata data");
updataDividendData();
}
}
function updataDividendData()
{
get_abcd1357_JsonObj();
var Dividends = [];
//console.log(abcd1357_jsonObj.companys[0].companyID);
//console.log(abcd1357_jsonObj.companys[0].companyDividend);
for (var n in abcd1357_jsonObj.companys)
{
Dividends.push({"companyID": String(abcd1357_jsonObj.companys[n].companyID), "companyDividend": String(abcd1357_jsonObj.companys[n].companyDividend)});
//console.log("push success");
}
window.localStorage.setItem ("Dividend", JSON.stringify(Dividends));
window.localStorage.setItem ("Dividend_UpdataTime", JSON.stringify(abcd1357_jsonObj.updataTime));
console.log("Dividend Cookie Updata Success!!");
}
/************UpdateScript*************/
function checkScriptEvent()
{
var myVersion = GM_info.script.version;
var oReq = new XMLHttpRequest();
oReq.addEventListener("load", checkScriptVersion);
oReq.open("GET", "https://gf.qytechs.cn/scripts/33542.json");
oReq.send();
}
function checkScriptVersion()
{
var obj = JSON.parse(this.responseText);
var myVersion = GM_info.script.version;
//console.log(obj.version.substr(0, 3) + "," + myVersion.substr(0, 3) + "," + (obj.version.substr(0, 3) > myVersion.substr(0, 3)));
if(obj.version.substr(0, 3) > myVersion.substr(0, 3))
$('<li class="nav-item"><a class="nav-link btn btn-primary" href="https://gf.qytechs.cn/zh-TW/scripts/33542" id="UpdateDividendScript" target="Blank">' + Dict[lan].updateDividendScript + '</a></li>').insertAfter($('.nav-item')[$('.nav-item').length - 1]);
else
setTimeout(checkScriptEvent, 600000);
}
/************UpdateScript*************/
/************stockSummary*************/
function addStockSummaryListener() {
setTimeout(computeProfit, 2100);
$(".btn.btn-secondary.mr-1")[0].addEventListener("click", ComputeEvt);
$(".btn.btn-secondary.mr-1")[1].addEventListener("click", ComputeEvt);
var pagesbtn = $(".page-item");
for (var i = 0; i < pagesbtn.length; i++) {
pagesbtn[i].addEventListener("click", ComputeEvt);
}
console.log("Triggered StockSummary");
}
function ComputeEvt() {
setTimeout(addStockSummaryListener, 2000);
}
//總獲利計算--加入分紅計算
function computeProfit() {
//加入變數 profit為總獲利, ID是公司網址, earnPerShare是每股獲利
var profit = 0,
tag, price, hold, classProfit, ID, earnPerShare, index;
var Dividends = null !== window.localStorage.getItem ("Dividend") ? JSON.parse(window.localStorage.getItem ("Dividend")) : [];
//方格模式
if ($(".col-12.col-md-6.col-lg-4.col-xl-3").length > 0)
{
for (var i = 0; i < $('.company-card').length; ++i)
{
price = Number($('.company-card')[i].innerText.match(/\$ [0-9]+\(([0-9]+)\)/)[1]);
hold = Number($('.company-card')[i].innerText.match(/([0-9]+).+%.+/)[1]);
ID = $('.company-card')[i].innerHTML.match(/<a href="\/company\/detail\/([0-z]+)">/)[1];
console.log("companyID = " + ID);
index = Dividends.findIndex(x => x.companyID == ID);
if (index == -1)
{
earnPerShare = 0;
}
else
{
earnPerShare = Dividends[index].companyDividend;
profit += earnPerShare * hold;
}
//console.log("companyID = " + ID);
console.log("earnPerShare = " + earnPerShare);
console.log("");
}
console.log("本頁預計分紅: " + profit);
classProfit = $("#totalProfitNumber");
if (classProfit.length === 0)
{
$('<div class="media company-summary-item border-grid-body" id = "totalProfit"><div class="col-6 text-right border-grid" id = "totalProfitTitle"><h2>' + Dict[lan].totalProfitInThisPage + '</h2></div></div>').insertAfter($('.card-title.mb-1')[0]);
$('<div class="col-6 text-right border-grid" id = "totalProfitNumber"><h2>$ ' + profit.toFixed() + '</h2></div>').insertAfter($('#totalProfitTitle')[0]);
}
else
{
$("#totalProfitNumber")[0].innerHTML = "<h2>$ " + profit.toFixed() + "</h2>";
}
}
/*else
{ //列表模式
//列表模式暫不開放
//console.log($(".col-8.col-lg-3.text-right.border-grid"));
for (var j = 0; j < $('.media-body.row.border-grid-body').length; ++j) {
price = Number($('.media-body.row.border-grid-body')[j].innerText.match(/\$ [0-9]+\(([0-9]+)\)/)[1]);
hold = Number($('.media-body.row.border-grid-body')[j].innerText.match(/您在該公司持有([0-9]+)數量的股份/)[1]); // 找出持股量
console.log("價= " + price + ",持= " + hold + ",總= " + (price * hold) );
assets += price * hold;
}
console.log("本頁持股價值: " + assets);
classAssets = $("#totalAssetsNumber");
if (classAssets.length === 0) {
$('<div class="media company-summary-item border-grid-body" id = "totalAssets"><div class="col-6 text-right border-grid" id = "totalAssetsTitle"><h2>' + Dict[lan].totalAssetsInThisPage + '</h2></div></div>').insertAfter($('.card-title.mb-1')[0]);
$('<div class="col-6 text-right border-grid" id = "totalAssetsNumber"><h2>$ ' + assets + '</h2></div>').insertAfter($('#totalAssetsTitle')[0]);
} else {
$("#totalAssetsNumber")[0].innerHTML = "<h2>$ " + assets + "</h2>";
}
}*/
//setTimeout(computeAssets,1000);
}
/************stockSummary*************/
/*************************************/
/**************company****************/
//---------------按鍵區---------------//
function addCompanyClickListener() {
if ($('.d-block.h4').length === 6) {
// 初始化 先看使用者有沒有預設打開資料夾
folderOpenString = "fa-folder-open";
folderCloseString = "12345678";
//chartEvent();
numbersEvent();
//orderEvent();
//productEvent();
//directorEvent();
//logEvent();
folderOpenString = "fa-folder";
folderCloseString = "fa-folder-open";
// 註冊事件
//$('.d-block.h4')[0].addEventListener("click", chartEvent); //股價趨勢
$('.d-block.h4')[1].addEventListener("click", numbersEvent); //數據資訊
//$('.d-block.h4')[2].addEventListener("click", orderEvent); //交易訂單
//$('.d-block.h4')[3].addEventListener("click", productEvent); //產品中心
//$('.d-block.h4')[4].addEventListener("click", directorEvent); //董事會
//$('.d-block.h4')[5].addEventListener("click", logEvent); //所有紀錄
console.log("OnclickListener Registered");
} else {
setTimeout(addCompanyClickListener, 500);
}
console.log("Triggered Company");
}
var folderOpenString, folderCloseString;
// 數據資訊
function numbersEvent() {
var folderstate = $(".d-block.h4 i")[1].classList[1];
if (folderstate === folderOpenString) {
//Open Event
console.log("Open numbersfolder");
//setTimeout(addSomeInfo, 1000);
setTimeout(AddDividendCookie, 1000); //總獲利計算--紀錄分紅
} else if (folderstate === folderCloseString) {
//Close Event
console.log("close numbersfolder");
}
}
//總獲利計算--紀錄分紅cookie 09/27
function AddDividendCookie()
{
//window.localStorage.removeItem ("Dividend");
var revenue, totalStock, earnPerShare, ID;
revenue = $('.col-8.col-md-4.col-lg-2.text-right.border-grid')[3].innerHTML.match(/[0-9]+/);
totalStock = $('.col-8.col-md-4.col-lg-2.text-right.border-grid')[4].innerHTML.match(/[0-9]+/);
earnPerShare = 0.8075 * revenue / totalStock;
//name = $('.card-title.text-truncate')[0].innerText;
ID = document.location.href.substr(38,99);
var Dividends = null !== window.localStorage.getItem ("Dividend") ? JSON.parse(window.localStorage.getItem ("Dividend")) : [];
//如果先前紀錄過該公司,則刪除重記
var index = Dividends.findIndex(x => x.companyID == ID);
if (index != -1)
{
if (Dividends[index].companyDividend == earnPerShare)
{
console.log(ID + "---" + earnPerShare);
console.log("dont need updata cookie");
}
else
{
Dividends.splice(index, 1);
console.log("AddDividendCookie---splice");
Dividends.push({"companyID":ID, "companyDividend":earnPerShare});
window.localStorage.setItem ("Dividend", JSON.stringify(Dividends));
console.log(ID + "---" + earnPerShare);
console.log("Add Dividend Cookie!!");
}
}
else
{
Dividends.push({"companyID":ID, "companyDividend":earnPerShare});
window.localStorage.setItem ("Dividend", JSON.stringify(Dividends));
console.log(ID + "---" + earnPerShare);
console.log("AddDividendCookie!!");
}
}
/**************company****************/
/*************************************/
/************accountInfo**************/
// -----已刪除
/************accountInfo**************/
/*************************************/
/************foundationPlan***********/
//-----已刪除
/************foundationPlan***********/
/**************aboutMe****************/
// -----已刪除
/**************aboutMe****************/
/*************Language***************/
var lan = "";
lan = null !== window.localStorage.getItem ("PM_language") ? window.localStorage.getItem ("PM_language") : "tw";
/*function ChangeLanguage(l){
if(lan === l)return;
lan = l;
window.localStorage.setItem ("PM_language",l);
window.location.reload();
}*/
var Dict = {
tw:
{
totalProfitInThisPage: "本頁預計分紅:",
updateDividendScript: "更新預估分紅腳本",
},
en:
{
totalProfitInThisPage: "Total profit in this page :",
updateDividendScript: "Update Dividend Script",
},
jp:
{
totalProfitInThisPage: "本頁預計分紅:",
updateDividendScript: "更新預估分紅腳本",
},
marstw:
{
totalProfitInThisPage: "這ㄘ可yee拿ㄉ$$:",
updateDividendScript: "有★版",
}
};
/*************Language***************/
/*************Subscribe***************/
// -----已刪除
/*************Subscribe***************/