您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
ぼけおめ大リーグ 昇格/残留/降格の自動チェック
当前为
/* // ==UserScript== // @name bog-league // @namespace http://userscripts.taiman.xyz // @version 0.1 // @description ぼけおめ大リーグ 昇格/残留/降格の自動チェック // @include /http://2\.pro\.tok2\.com/(~|%7E)reflection/league\d+/vote\.cgi.*$/ // @run-at document-end // @require https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.js // @require https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.7.0/underscore.js // ==/UserScript== */ (function() { var CharacteristicNamesManager, Color, EndResultPageManager, InterimResultPageManager, LeagueConfig, LeagueConfig1A, LeagueConfig2A, LeagueConfig3A, LeagueConfigMajor, Player, PlayersManager, Progress, Range, ResultPageManager, getLeagueConfig, getLeagueId, getProgress, main, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }, __hasProp = {}.hasOwnProperty; Player = (function() { function Player(_at_name) { this.name = _at_name; this.scores = []; this.rank = null; } Player.prototype.addScore = function(score) { return this.scores.push(score); }; return Player; })(); PlayersManager = (function() { function PlayersManager() { this.players = []; } PlayersManager.prototype.addScore = function(name, score) { var player; player = _.findWhere(this.players, { name: name }); if (!player) { player = new Player(name); this.players.push(player); } return player.addScore(parseInt(score, 10)); }; PlayersManager.prototype.getPlayers = function() { var maxScores; maxScores = _.map(this.players, function(player) { return _.max(player.scores); }); maxScores.sort(function(a, b) { return b - a; }); _.each(this.players, function(player) { return player.rank = _.indexOf(maxScores, _.max(player.scores)); }); return this.players; }; return PlayersManager; })(); CharacteristicNamesManager = (function() { function CharacteristicNamesManager() { localStorage.characteristicNames = localStorage.characteristicNames || JSON.stringify([]); } CharacteristicNamesManager.prototype.toggle = function(name) { var names; names = JSON.parse(localStorage.characteristicNames); if (_.contains(names, name)) { names = _.without(names, name); } else { names.push(name); } return localStorage.characteristicNames = JSON.stringify(names); }; CharacteristicNamesManager.prototype.getNames = function() { return JSON.parse(localStorage.characteristicNames); }; return CharacteristicNamesManager; })(); Range = (function() { function Range(_at_begin, _at_end, _at_color) { this.begin = _at_begin; this.end = _at_end; this.color = _at_color; } return Range; })(); Color = (function() { function Color() {} Color.promotion = "#ff99ff"; Color.stay = "#99cc00"; Color.demotion = "#66ccff"; Color.characteristic = "#ffd900"; return Color; })(); Progress = (function() { function Progress() {} Progress.unexpected = 0; Progress.interim = 1; Progress.end = 2; return Progress; })(); ResultPageManager = (function() { function ResultPageManager(_at_leagueConfig) { this.leagueConfig = _at_leagueConfig; } ResultPageManager.prototype.extractRankTable = function() {}; ResultPageManager.prototype.extractRankRows = function() { var rankTable; rankTable = this.extractRankTable(); return _.filter($(rankTable).find("tr"), function(tr) { var regexp; regexp = /^\d+位$/; return regexp.test($(tr).find("td").eq(0).text()); }); }; ResultPageManager.prototype.extractName = function(row) {}; ResultPageManager.prototype.extractScore = function(row) {}; ResultPageManager.prototype.extractPlayers = function() { var playersManager, rows; playersManager = new PlayersManager; rows = this.extractRankRows(); _.each(rows, (function(_this) { return function(row) { var name, score; name = _this.extractName(row); score = _this.extractScore(row); return playersManager.addScore(name, score); }; })(this)); return playersManager.getPlayers(); }; ResultPageManager.prototype.highlightRankTable = function() { var highlightedNames, players, ranges, rows; players = this.extractPlayers(); rows = this.extractRankRows(); ranges = this.leagueConfig.getRanges(); highlightedNames = []; return _.each(rows, (function(_this) { return function(row) { var name, player, range; name = _this.extractName(row); if (!_.contains(highlightedNames, name)) { player = _.findWhere(players, { name: name }); range = _.find(ranges, function(range) { return range.begin <= player.rank && player.rank < range.end; }); _this.highlightRankRow(row, range.color); return highlightedNames.push(name); } }; })(this)); }; ResultPageManager.prototype.highlightRankRow = function(row, color) {}; ResultPageManager.prototype.characterizeRankTable = function(playersName) { var characterizedNames, rows; rows = this.extractRankRows(); characterizedNames = []; return _.each(rows, (function(_this) { return function(row) { var name; name = _this.extractName(row); if (_.contains(playersName, name) && !_.contains(characterizedNames, name)) { _this.characterizeRankRow(row, Color.characteristic); return characterizedNames.push(name); } }; })(this)); }; ResultPageManager.prototype.characterizeRankRow = function(row, color) {}; ResultPageManager.prototype.setEvents = function() {}; return ResultPageManager; })(); InterimResultPageManager = (function(_super) { __extends(InterimResultPageManager, _super); function InterimResultPageManager(leagueConfig) { InterimResultPageManager.__super__.constructor.call(this, leagueConfig); } InterimResultPageManager.prototype.extractRankTable = function() { return _.find($("table"), function(table) { var regexp; regexp = /人が投票した時点での順位$/; return regexp.test($(table).find("tr").eq(0).find("td").eq(0).text()); }); }; InterimResultPageManager.prototype.extractName = function(row) { return $(row).find("td").eq(5).text(); }; InterimResultPageManager.prototype.extractScore = function(row) { return parseInt($(row).find("td").eq(1).text(), 10); }; InterimResultPageManager.prototype.highlightRankRow = function(row, color) { return $(row).find("td").css({ backgroundColor: color }); }; InterimResultPageManager.prototype.characterizeRankRow = function(row, color) { return $(row).find("td").eq(5).css({ backgroundColor: color }); }; InterimResultPageManager.prototype.setEvents = function() { var rows; rows = this.extractRankRows(); return _.each(rows, (function(_this) { return function(row) { $(row).css({ cursor: "pointer" }); return $(row).on("click", function() { var cnm; cnm = new CharacteristicNamesManager; cnm.toggle(_this.extractName(row)); _this.highlightRankTable(); return _this.characterizeRankTable(cnm.getNames()); }); }; })(this)); }; return InterimResultPageManager; })(ResultPageManager); EndResultPageManager = (function(_super) { __extends(EndResultPageManager, _super); function EndResultPageManager(leagueConfig) { EndResultPageManager.__super__.constructor.call(this, leagueConfig); } EndResultPageManager.prototype.extractRankTable = function() { return _.find($("table"), function(table) { var regexp; regexp = /終了日:\d{4}年\d{2}月\d{2}日\d{2}時$/; return regexp.test($(table).find("tr").eq(0).find("td").eq(0).text()); }); }; EndResultPageManager.prototype.extractName = function(row) { var container, regexp; regexp = /^(?:\d+\/\d+\/\d+ \[一言\] )(.+)(?:さんの作品)$/; container = $(row).find("td").eq(2).find("div.SMALL1"); return regexp.exec(container.text().trim())[1]; }; EndResultPageManager.prototype.extractScore = function(row) { return parseInt($(row).find("td").eq(1).text(), 10); }; EndResultPageManager.prototype.highlightRankRow = function(row, color) { return $(row).find("td").eq(0).css({ backgroundColor: color }); }; return EndResultPageManager; })(ResultPageManager); LeagueConfig = (function() { function LeagueConfig(_at_beginStay, _at_beginDemotion) { this.beginStay = _at_beginStay != null ? _at_beginStay : 5; this.beginDemotion = _at_beginDemotion != null ? _at_beginDemotion : 15; } LeagueConfig.prototype.getRanges = function() { var ranges; ranges = []; ranges.push(new Range(0, this.beginStay, Color.promotion)); ranges.push(new Range(this.beginStay, this.beginDemotion, Color.stay)); ranges.push(new Range(this.beginDemotion, Number.POSITIVE_INFINITY, Color.demotion)); return ranges; }; return LeagueConfig; })(); LeagueConfigMajor = (function(_super) { __extends(LeagueConfigMajor, _super); function LeagueConfigMajor() { LeagueConfigMajor.__super__.constructor.call(this, 1, 10); } return LeagueConfigMajor; })(LeagueConfig); LeagueConfig3A = (function(_super) { __extends(LeagueConfig3A, _super); function LeagueConfig3A() { LeagueConfig3A.__super__.constructor.call(this, 5, 15); } return LeagueConfig3A; })(LeagueConfig); LeagueConfig2A = (function(_super) { __extends(LeagueConfig2A, _super); function LeagueConfig2A() { LeagueConfig2A.__super__.constructor.call(this, 5, 15); } return LeagueConfig2A; })(LeagueConfig); LeagueConfig1A = (function(_super) { __extends(LeagueConfig1A, _super); function LeagueConfig1A() { LeagueConfig1A.__super__.constructor.call(this, 10, 10); } return LeagueConfig1A; })(LeagueConfig); getLeagueId = function() { var matches; matches = location.href.match(/\/league(\d+)\//); if (matches !== null) { return parseInt(matches[1]); } else { return null; } }; getLeagueConfig = function(leagueId) { switch (leagueId) { case 4: return new LeagueConfigMajor; case 3: return new LeagueConfig3A; case 2: return new LeagueConfig2A; case 1: return new LeagueConfig1A; default: return new LeagueConfig; } }; getProgress = function() { var isEndResultPage, isInterimResultPage; isInterimResultPage = _.find($("table"), function(table) { var regexp; regexp = /人が投票した時点での順位$/; return regexp.test($(table).find("tr").eq(0).find("td").eq(0).text()); }); isEndResultPage = _.find($("table"), function(table) { var regexp; regexp = /終了日:\d{4}年\d{2}月\d{2}日\d{2}時$/; return regexp.test($(table).find("tr").eq(0).find("td").eq(0).text()); }); if (isInterimResultPage) { return Progress.interim; } if (isEndResultPage) { return Progress.end; } return Progress.unexpected; }; main = function() { var leagueConfig, leagueId, resultPageManager; leagueId = getLeagueId(); if (leagueId === null) { return; } leagueConfig = getLeagueConfig(leagueId); resultPageManager = null; switch (getProgress()) { case Progress.interim: resultPageManager = new InterimResultPageManager(leagueConfig); break; case Progress.end: resultPageManager = new EndResultPageManager(leagueConfig); break; default: resultPageManager = null; } if (resultPageManager === null) { return; } resultPageManager.highlightRankTable(); resultPageManager.characterizeRankTable((new CharacteristicNamesManager).getNames()); return resultPageManager.setEvents(); }; main(); }).call(this);