From e167a1f752251e4dcdb9ef289570153664898b32 Mon Sep 17 00:00:00 2001 From: null_null Date: Fri, 26 Jul 2019 00:12:25 +0900 Subject: [PATCH 1/7] fix --- AtCoderColorNEWS.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AtCoderColorNEWS.js b/AtCoderColorNEWS.js index d00bac8..a99bc2b 100644 --- a/AtCoderColorNEWS.js +++ b/AtCoderColorNEWS.js @@ -3,7 +3,7 @@ // @namespace https://github.com/null-null-programming // @version 0.1 // @author null_null -// @match https://atcoder.jp/* +// @match https://atcoder.jp // @require https://cdn.rawgit.com/jaredreich/notie.js/a9e4afbeea979c0e6ee50aaf5cb4ee80e65d225d/notie.js // @require https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js // ==/UserScript== From cb37237d85ad6f5812881714615d2c630a59d75e Mon Sep 17 00:00:00 2001 From: null_null Date: Fri, 26 Jul 2019 16:48:03 +0900 Subject: [PATCH 2/7] update get LatestContestScreenName() --- AtCoderColorNEWS.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/AtCoderColorNEWS.js b/AtCoderColorNEWS.js index a99bc2b..08f9d47 100644 --- a/AtCoderColorNEWS.js +++ b/AtCoderColorNEWS.js @@ -19,7 +19,8 @@ let color = ['灰', '茶', '緑', '水', '青', '黄', '橙', '赤', '自由']; //直近のコンテスト - const latestContestScreenName = getLatestContestScreenName(); + const latestContestScreenName = await getLatestContestScreenName(); + //直近コンテストの結果一覧 const latestContestResult = await getContestResultData(latestContestScreenName); @@ -87,13 +88,11 @@ function getColorIndex(rate) { //TODO:改良する。 //直近のコンテスト名を取得する。 -function getLatestContestScreenName() { - //AtCoder Grand Contest XXX - let contestScreenName = document.getElementById("collapse-contest").getElementsByClassName("table table-default table-striped table-hover table-condensed small")[2].getElementsByTagName('small')[1].innerHTML; - //contests/agcXXX - contestScreenName = contestScreenName.split('"')[1]; - //agcXXX - contestScreenName = contestScreenName.split('/').pop(); +async function getLatestContestScreenName() { + let parser = new DOMParser(); + let archiveDom = parser.parseFromString((await $.get("https://atcoder.jp/contests/archive")), "text/html"); + let contestScreenName = archiveDom.querySelector("#main-container > div.row > div.col-lg-9.col-md-8 > div.panel.panel-default > div > table > tbody > tr:nth-child(1) > td:nth-child(2) > a"); + contestScreenName = contestScreenName.toString().split('/').pop(); return contestScreenName; } From 14811af52a25eb19bd43a8c8be5adf77fa707b8d Mon Sep 17 00:00:00 2001 From: null_null Date: Fri, 26 Jul 2019 17:11:20 +0900 Subject: [PATCH 3/7] fix imformedFlag() --- AtCoderColorNEWS.js | 42 +++++++++++------------------------------- 1 file changed, 11 insertions(+), 31 deletions(-) diff --git a/AtCoderColorNEWS.js b/AtCoderColorNEWS.js index 08f9d47..0165b11 100644 --- a/AtCoderColorNEWS.js +++ b/AtCoderColorNEWS.js @@ -9,8 +9,11 @@ // ==/UserScript== (async function () { - //既に通知したかどうかをcookieで判定する。imformedFlagがtrueのときのみ通知する。 - if (imformedFlag() === false) return; + //直近のコンテスト + const latestContestScreenName = await getLatestContestScreenName(); + + //既に通知したかどうかをlocalStorageで判定する。imformedFlagがtrueのときのみ通知する。 + if (imformedFlag(latestContestScreenName) === false) return; //お気に入りリストを取得 let favList = JSON.parse(localStorage.fav); @@ -18,9 +21,6 @@ //レートを色に変換するリスト let color = ['灰', '茶', '緑', '水', '青', '黄', '橙', '赤', '自由']; - //直近のコンテスト - const latestContestScreenName = await getLatestContestScreenName(); - //直近コンテストの結果一覧 const latestContestResult = await getContestResultData(latestContestScreenName); @@ -52,33 +52,14 @@ notie.alert(3, string, 20); //20秒後、またはクリックで消える } - //cookieを1ヶ月保存する。今回のコンテスト名で上書きする。 - document.cookie = 'preContest=' + getLatestContestScreenName() + ',max-age=60*60*24*30'; + //localStorageに通知したコンテスト名を保存する。 + localStorage.setItem('keyContestName', latestContestScreenName); })(); -function imformedFlag() { - //cookieが存在するか? 存在しない場合は今回が初使用なので通知する。 - let res = true; - if (document.cookie.indexOf("preContest=") >= 0) { - //cookie_name:preContestを取得する - let cookieName = document.cookie.split(';'); - //各々のcookiezを取り出す - cookieName.forEach(function (value) { - //cookie名と値に分ける - let cookie_content = value.split('='); - - if (cookie_content[0] === ' preContest') { - //保存されているクッキーの名前を取得 - let cookieContestName = cookie_content[1].split(','); - //cookieに保存されているコンテスト名と直近のコンテスト名が同じ場合は通知済み - if (cookieContestName[0] === getLatestContestScreenName()) { - res = false; - return; - } - } - }) - } - return res; +//通知済みかどうかを調べる +function imformedFlag(latestContestScreenName) { + if (localStorage.getItem('keyContestName') !== latestContestScreenName) return true; + return false; } //Rateを色に変換する @@ -86,7 +67,6 @@ function getColorIndex(rate) { return Math.min(8, Math.floor(rate / 400)); } -//TODO:改良する。 //直近のコンテスト名を取得する。 async function getLatestContestScreenName() { let parser = new DOMParser(); From 01e190c9034664696dcb790ae4905ce7a56331ac Mon Sep 17 00:00:00 2001 From: null_null Date: Fri, 26 Jul 2019 17:27:23 +0900 Subject: [PATCH 4/7] add license --- AtCoderColorNEWS.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/AtCoderColorNEWS.js b/AtCoderColorNEWS.js index 0165b11..9f1f880 100644 --- a/AtCoderColorNEWS.js +++ b/AtCoderColorNEWS.js @@ -1,9 +1,11 @@ // ==UserScript== // @name AtcoderColorNEWS +// @description お気に入りの人々の、色の変化を通知します。 // @namespace https://github.com/null-null-programming // @version 0.1 // @author null_null -// @match https://atcoder.jp +// @license MIT +// @match https://atcoder.jp/* // @require https://cdn.rawgit.com/jaredreich/notie.js/a9e4afbeea979c0e6ee50aaf5cb4ee80e65d225d/notie.js // @require https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js // ==/UserScript== From 22e0f18ef78a46396a69735a7361ed64c4128cbf Mon Sep 17 00:00:00 2001 From: null_null Date: Fri, 26 Jul 2019 18:59:43 +0900 Subject: [PATCH 5/7] change alert --- AtCoderColorNEWS.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AtCoderColorNEWS.js b/AtCoderColorNEWS.js index 9f1f880..5e26817 100644 --- a/AtCoderColorNEWS.js +++ b/AtCoderColorNEWS.js @@ -51,7 +51,7 @@ }).join(""); if (string.length > 0) { - notie.alert(3, string, 20); //20秒後、またはクリックで消える + window.alert(string); //20秒後、またはクリックで消える } //localStorageに通知したコンテスト名を保存する。 From 2948feea3bb3f37f4d96f1938989689aa767f304 Mon Sep 17 00:00:00 2001 From: null_null Date: Fri, 26 Jul 2019 19:02:24 +0900 Subject: [PATCH 6/7] fix --- AtCoderColorNEWS.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/AtCoderColorNEWS.js b/AtCoderColorNEWS.js index 5e26817..9a8f097 100644 --- a/AtCoderColorNEWS.js +++ b/AtCoderColorNEWS.js @@ -6,7 +6,6 @@ // @author null_null // @license MIT // @match https://atcoder.jp/* -// @require https://cdn.rawgit.com/jaredreich/notie.js/a9e4afbeea979c0e6ee50aaf5cb4ee80e65d225d/notie.js // @require https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js // ==/UserScript== @@ -47,7 +46,7 @@ if (preRate >= nowRate) return ""; //繋げる文字列を返す - return `${E(username)}さんのレートが${color[nowRate]}色に変わりました!
`; + return `${E(username)}さんのレートが${color[nowRate]}色に変わりました!\n`; }).join(""); if (string.length > 0) { From 2414f51def3627baa6d415e44dd4cc748a70234c Mon Sep 17 00:00:00 2001 From: Null-Null <52847048+null-null-programming@users.noreply.github.com> Date: Fri, 26 Jul 2019 20:30:25 +0900 Subject: [PATCH 7/7] Update README.md --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 69ca770..e930fd6 100644 --- a/README.md +++ b/README.md @@ -4,3 +4,12 @@ AtCoderのuserscriptです。 お気に入りに入れている方の色の変化を通知します。 +# 使いかた +1:ブラウザにTampermonkeyをインストールします  +URL:https://www.tampermonkey.net + + +2:GreasyForkでAtCoderColorNEWSをインストールします +URL:https://greasyfork.org/en/scripts/387896-atcodercolornews + +