- // ==UserScript==
- // @name IITC plugin: Cell score graph plugin
- // @version 0.0.1
- // @author Odr1ck
- // @description Cell score graph plugin
- // @match https://*.ingress.com/*
- // @match http://*.ingress.com/*
- // @match https://*.ingress.com/mission/*
- // @match http://*.ingress.com/mission/*
- // @id iitc-plugin-cell-score
- // @category Misc
- // @license MIT
- // @include https://*.ingress.com/*
- // @include http://*.ingress.com/*
- // @include https://*.ingress.com/mission/*
- // @include http://*.ingress.com/mission/*
- // @grant none
- // @namespace https://greasyfork.org/users/410740
- // ==/UserScript==
-
- /******/ (function(modules) { // webpackBootstrap
- /******/ // The module cache
- /******/ var installedModules = {};
- /******/
- /******/ // The require function
- /******/ function __webpack_require__(moduleId) {
- /******/
- /******/ // Check if module is in cache
- /******/ if(installedModules[moduleId]) {
- /******/ return installedModules[moduleId].exports;
- /******/ }
- /******/ // Create a new module (and put it into the cache)
- /******/ var module = installedModules[moduleId] = {
- /******/ i: moduleId,
- /******/ l: false,
- /******/ exports: {}
- /******/ };
- /******/
- /******/ // Execute the module function
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
- /******/
- /******/ // Flag the module as loaded
- /******/ module.l = true;
- /******/
- /******/ // Return the exports of the module
- /******/ return module.exports;
- /******/ }
- /******/
- /******/
- /******/ // expose the modules object (__webpack_modules__)
- /******/ __webpack_require__.m = modules;
- /******/
- /******/ // expose the module cache
- /******/ __webpack_require__.c = installedModules;
- /******/
- /******/ // define getter function for harmony exports
- /******/ __webpack_require__.d = function(exports, name, getter) {
- /******/ if(!__webpack_require__.o(exports, name)) {
- /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
- /******/ }
- /******/ };
- /******/
- /******/ // define __esModule on exports
- /******/ __webpack_require__.r = function(exports) {
- /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
- /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
- /******/ }
- /******/ Object.defineProperty(exports, '__esModule', { value: true });
- /******/ };
- /******/
- /******/ // create a fake namespace object
- /******/ // mode & 1: value is a module id, require it
- /******/ // mode & 2: merge all properties of value into the ns
- /******/ // mode & 4: return value when already ns object
- /******/ // mode & 8|1: behave like require
- /******/ __webpack_require__.t = function(value, mode) {
- /******/ if(mode & 1) value = __webpack_require__(value);
- /******/ if(mode & 8) return value;
- /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
- /******/ var ns = Object.create(null);
- /******/ __webpack_require__.r(ns);
- /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
- /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
- /******/ return ns;
- /******/ };
- /******/
- /******/ // getDefaultExport function for compatibility with non-harmony modules
- /******/ __webpack_require__.n = function(module) {
- /******/ var getter = module && module.__esModule ?
- /******/ function getDefault() { return module['default']; } :
- /******/ function getModuleExports() { return module; };
- /******/ __webpack_require__.d(getter, 'a', getter);
- /******/ return getter;
- /******/ };
- /******/
- /******/ // Object.prototype.hasOwnProperty.call
- /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
- /******/
- /******/ // __webpack_public_path__
- /******/ __webpack_require__.p = "";
- /******/
- /******/
- /******/ // Load entry module and return exports
- /******/ return __webpack_require__(__webpack_require__.s = 2);
- /******/ })
- /************************************************************************/
- /******/ ([
- /* 0 */
- /***/ (function(module, exports, __webpack_require__) {
-
-
- var result = __webpack_require__(4);
-
- if (result && result.__esModule) {
- result = result.default;
- }
-
- if (typeof result === "string") {
- module.exports = result;
- } else {
- module.exports = result.toString();
- }
-
-
- /***/ }),
- /* 1 */
- /***/ (function(module, exports, __webpack_require__) {
-
-
- var result = __webpack_require__(5);
-
- if (result && result.__esModule) {
- result = result.default;
- }
-
- if (typeof result === "string") {
- module.exports = result;
- } else {
- module.exports = result.toString();
- }
-
-
- /***/ }),
- /* 2 */
- /***/ (function(module, exports, __webpack_require__) {
-
- module.exports = __webpack_require__(3);
-
-
- /***/ }),
- /* 3 */
- /***/ (function(module, __webpack_exports__, __webpack_require__) {
-
- "use strict";
- __webpack_require__.r(__webpack_exports__);
- /* harmony import */ var _ui_main_html__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(0);
- /* harmony import */ var _ui_main_html__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_ui_main_html__WEBPACK_IMPORTED_MODULE_0__);
- /* harmony import */ var _ui_main_css__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(1);
- /* harmony import */ var _ui_main_css__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_ui_main_css__WEBPACK_IMPORTED_MODULE_1__);
-
-
-
- function wrapper(plugin_info) {
- if (typeof window.plugin !== 'function') window.plugin = function () {};
- plugin_info.buildName = 'Cell Score';
- plugin_info.dateTimeVersion = '20220013115848';
- plugin_info.pluginId = 'iitc-plugin-cell-score';
- var e = {};
- var logo = new Image();
- logo.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAFoAAABaAQMAAAACZtNBAAAABlBMVEUAAAD///+l2Z/dAAAAAXRSTlMAQObYZgAAAaNJREFUOMuV1EFq6zAQBuAReqAuHk8XENU13iJU18pOzqqXCPQqMl30FKUKvcBANyqoUkeayHLponQCcT6L8MfxL8MPY/Zwe9RlfpY1Tui3NGHXMuHpNUZksGFApb8KB3S8k3mLXOpSBoqo0V1jZVYVdWQotDWrxLDBn73II7IYOsGRRSajkWNl0tHQG3KkCwZo+RoJBhzHVpEJtseKrJBAYYGANhLoXAOtE8CLjgINbm14TXxRlw7skIzQIX5EbbPucbrCf8P4jqPDBIIsAzaBzhsKuA2arvw4oB4ueeK+Ig7Ita4TwZ/igKA7FzagmQA0atlw/AoNGw7G7nG74ebWHP4M/Lfm8G8ga3O0J8ZjUuejvjCeojqjfGe8BPmM8MGovbCekUHUAJaBHYqReskZlwLgF6pzQ/SEcbdbG1zrVkNSCHdUZ02gPrXuaK5s65Pp3aJpfbpp3eLy6sjdoqFj4oa18X2X+KXDUY09t5Iby33lLr9RnRkUW2nxCr9Ubj/vDMeRHGsU7ndjnFubfucGx5E8+jVNyIoT7X+b478+Q34zn/dfSp2/U9a6AAAAAElFTkSuQmCC";
- var dialogID = "cell-score-ui";
- var canvasID = "cell-score-canvas";
- var canvasWidth = 960;
- var canvasHeight = 500;
- var EPOCH = 1389150000000;
- var CYCLE_LENGTH = 630000000;
- var CHECKPOINT_LENGTH = 18000000; ////////////////////////////////////////
-
- e.toggleBox = function () {
- var scale = 0.58;
- var html = "<canvas width=\"".concat(canvasWidth, "\" height=\"").concat(canvasHeight, "\" id=\"").concat(canvasID, "\" style=\"width: ").concat(canvasWidth * scale, "px; height: ").concat(canvasHeight * scale, "px\"></canvas>");
- dialog({
- html: html,
- title: 'Cell score',
- width: "auto",
- id: dialogID
- });
- var center = window.map.getCenter();
- latE6 = Math.floor(center.lat * 1e6);
- lngE6 = Math.floor(center.lng * 1e6);
- window.postAjax('getRegionScoreDetails', {
- latE6: latE6,
- lngE6: lngE6
- }, draw);
- };
-
- var getCurrentCycleNumber = function getCurrentCycleNumber() {
- return Math.floor((Date.now() - EPOCH) / CYCLE_LENGTH);
- };
-
- var getCycleNumber = function getCycleNumber(date) {
- return Math.floor((date.getTime() - EPOCH) / CYCLE_LENGTH);
- };
-
- var getCurrentCycle = function getCurrentCycle() {
- var timezone = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
- var cycle = getCurrentCycleNumber();
- return calcCycle(cycle, timezone);
- };
-
- var calcCycle = function calcCycle(cycle) {
- var timezone = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;
- var start = new Date();
- var currentOffest = start.getTimezoneOffset();
- var diff = currentOffest - timezone * 60 * -1;
- diff = diff * 60 * 1000;
- var now = start.getTime();
- var localNow = new Date(now + diff);
- var cycleDisplay = cycle + 1;
- start.setTime(EPOCH + cycle * CYCLE_LENGTH);
- year = start.getFullYear();
- start.setTime(start.getTime() + CHECKPOINT_LENGTH);
- var checkpoints = [];
- var naturalCheckpoints = [];
- var nextCp = null;
-
- for (var i = 0; i < 35; i++) {
- var next = isNext(start, now);
- var d = new Date(start.getTime() + diff);
- var item = {
- id: i,
- year: d.getFullYear(),
- month: d.getMonth() + 1,
- date: d.getDate(),
- hours: d.getHours(),
- minutes: d.getMinutes(),
- day: d.getDay(),
- status: next ? 'next' : start.getTime() < now ? 'past' : 'upcoming',
- "final": i == 34,
- fake: false,
- diff: d.getTime() - localNow.getTime(),
- next: next
- };
- if (next) nextCp = item;
- checkpoints.push(item);
- naturalCheckpoints.push(item);
-
- if (d.getHours() === 0) {
- var last = checkpoints.pop();
-
- var _d = new Date(start.getTime() - 60000 + diff);
-
- checkpoints.push({
- id: i,
- year: _d.getFullYear(),
- month: _d.getMonth() + 1,
- date: _d.getDate(),
- hours: 24,
- minutes: 0,
- day: _d.getDay(),
- status: last.status,
- "final": last["final"],
- fake: true,
- diff: last.diff,
- next: last.next
- });
- checkpoints.push(last);
- }
-
- start.setTime(start.getTime() + CHECKPOINT_LENGTH);
- }
-
- if (year > 2014) {
- var yearEnd = new Date(year - 1, 11, 31, 23, 59);
- var lastCycle = Math.floor((yearEnd.getTime() - EPOCH) / CYCLE_LENGTH);
- cycleDisplay = cycle - lastCycle;
- }
-
- if (cycleDisplay < 10) {
- cycleDisplay = '0' + cycleDisplay;
- }
-
- return {
- cycle: year + '.' + cycleDisplay,
- cycleId: parseInt(cycleDisplay),
- checkpoints: checkpoints,
- naturalCheckpoints: naturalCheckpoints,
- nextCheckPoint: nextCp,
- localDate: {
- year: localNow.getFullYear(),
- month: localNow.getMonth() + 1,
- date: localNow.getDate(),
- hours: localNow.getHours(),
- minutes: localNow.getMinutes(),
- day: localNow.getDay()
- }
- };
- };
-
- var isNext = function isNext(start, now) {
- return start.getTime() > now && now + CHECKPOINT_LENGTH > start.getTime();
- };
-
- var draw = function draw(data) {
- var date = new Date();
- var cycleData = getCurrentCycle(-(date.getTimezoneOffset() / 60));
- var width = canvasWidth;
- var height = canvasHeight;
- var resColor = '#3b8bff';
- var enlColor = '#03e500';
- var fontFamily = '-apple-system,BlinkMacSystemFont,Roboto,Helvetica,Arial,sans-serif';
- var cns = $("#".concat(canvasID))[0];
- var ctx = cns.getContext('2d');
- ctx.fillStyle = "#000000";
- ctx.fillRect(0, 0, width, height);
- var leftSpace = 70;
- var rightSpace = 20;
- var topSpace = 110;
- var bottomSpace = 40;
- var cw = (width - leftSpace - rightSpace) / 35;
- ctx.lineWidth = 1;
- ctx.strokeStyle = "#818181";
- var cpPoints = [];
-
- for (var c = 0; c < 35; c++) {
- var x = Math.floor(leftSpace + c * cw + 5);
- cpPoints[c] = x;
- ctx.beginPath();
- ctx.moveTo(x, topSpace);
- ctx.lineTo(x, height - bottomSpace);
- ctx.stroke();
- ctx.save();
- ctx.translate(x, height - bottomSpace + 15);
- ctx.rotate(-Math.PI / 4);
- ctx.fillStyle = '#ffffff';
- ctx.font = "bold 14px " + fontFamily;
- ctx.textAlign = "center";
- ctx.textBaseline = "middle";
- ctx.fillText(c + 1 + '', 0, 0);
- ctx.restore();
- }
-
- var score = data.result.scoreHistory.sort(function (a, b) {
- var av = parseInt(a[0]);
- var bv = parseInt(b[0]);
- if (av > bv) return 1;
- if (av < bv) return -1;
- return 0;
- });
- var max = Number.MIN_VALUE;
-
- for (var i = 0; i < score.length; i++) {
- var item = score[i];
- item[0] = parseInt(item[0]);
- item[1] = parseInt(item[1]);
- item[2] = parseInt(item[2]);
- if (item[1] > max) max = item[1];
- if (item[2] > max) max = item[2];
- }
-
- var maxPoints = [100, 200, 400, 600, 800];
- var mult = 1;
- var maxFinded = false;
- var newMax = 0;
-
- while (!maxFinded) {
- for (var _i = 0; _i < maxPoints.length; _i++) {
- var val = maxPoints[_i];
- var mv = val * mult;
-
- if (mv >= max) {
- newMax = mv;
- maxFinded = true;
- break;
- }
- }
-
- mult *= 10;
- }
-
- max = newMax;
- var h = height - topSpace - bottomSpace - 20;
- var cnt = 5;
- var ch = Math.floor(h / (cnt - 1));
- var yStep = max / (cnt - 1);
-
- function formatYVal(val) {
- if (val < 1000) return val;else if (val < 1000000) return val / 1000 + "K";else return val / 1000000 + "M";
- }
-
- for (var _c = cnt - 1; _c >= 0; _c--) {
- var y = _c * ch + topSpace + 10;
- ctx.beginPath();
- ctx.moveTo(leftSpace - 10, y);
- ctx.lineTo(width - rightSpace, y);
- ctx.stroke();
- ctx.fillStyle = '#ffffff';
- ctx.font = "bold 14px " + fontFamily;
- ctx.textAlign = "right";
- ctx.textBaseline = "middle";
- var yv = formatYVal((cnt - _c - 1) * yStep);
- ctx.fillText(yv + '', leftSpace - 20, y);
- }
-
- function drawLine(ix) {
- var color = '#ffffff';
- ctx.lineWidth = 3;
- if (ix == 1) color = enlColor;
- if (ix == 2) color = resColor;
- ctx.strokeStyle = color;
- ctx.fillStyle = color;
- var points = [];
- ctx.beginPath();
-
- for (var _i2 = 0; _i2 < score.length; _i2++) {
- var _x = cpPoints[_i2];
-
- var _y = h - h * (score[_i2][ix] / max) + topSpace + 10;
-
- points.push({
- x: _x,
- y: _y
- });
- if (_i2 == 0) ctx.moveTo(_x, _y);else ctx.lineTo(_x, _y);
- }
-
- ctx.stroke();
-
- for (var _i3 = 0; _i3 < points.length; _i3++) {
- ctx.beginPath();
- ctx.arc(points[_i3].x, points[_i3].y, 5, 0, Math.PI * 2);
- ctx.fill();
- }
- }
-
- function padNumber(val) {
- val = val + '';
- if (val.length < 3) return val;
- var parts = [];
-
- while (val.length > 3) {
- parts.unshift(val.substr(val.length - 3));
- val = val.substr(0, val.length - 3);
- }
-
- if (val) parts.unshift(val);
- return parts.join(',');
- }
-
- function zeroPad(val) {
- if (val >= 10) return val + '';
- return '0' + val;
- }
-
- drawLine(1);
- drawLine(2);
- ctx.fillStyle = '#d4ab75';
- ctx.font = "bold 20px " + fontFamily;
- ctx.textAlign = "left";
- ctx.textBaseline = "middle";
- ctx.fillText(data.result.regionName, 30, 20);
-
- if (cycleData) {
- ctx.fillStyle = '#ffffff';
- ctx.font = "bold 18px " + fontFamily;
- ctx.fillText(cycleData.cycle + '.' + score.length, 30, 45);
- ctx.fillStyle = '#cccccc';
- ctx.font = "bold 14px " + fontFamily;
- var localDate = zeroPad(cycleData.localDate.date) + '.' + zeroPad(cycleData.localDate.month) + '.' + cycleData.localDate.year;
- localDate += ' ';
- localDate += zeroPad(cycleData.localDate.hours) + ':' + zeroPad(cycleData.localDate.minutes);
- ctx.fillText(localDate, 30, 80);
- }
-
- var tw = width * 0.9 / 5; /////////////////////
-
- ctx.fillStyle = '#ffffff';
- ctx.font = "18px " + fontFamily;
- ctx.fillText('Счет:', tw + leftSpace, 20);
- ctx.fillStyle = enlColor;
- ctx.font = "18px " + fontFamily;
- ctx.fillText(padNumber(data.result.gameScore[0]), tw + leftSpace, 45);
- ctx.fillStyle = resColor;
- ctx.font = "18px " + fontFamily;
- ctx.fillText(padNumber(data.result.gameScore[1]), tw + leftSpace, 68); /////////////////////
-
- ctx.fillStyle = '#ffffff';
- ctx.font = "18px " + fontFamily;
- ctx.fillText('Отсечка:', tw * 2 + leftSpace, 20);
- ctx.fillStyle = enlColor;
- ctx.font = "18px " + fontFamily;
- ctx.fillText(padNumber(score[score.length - 1][1]), tw * 2 + leftSpace, 45);
- ctx.fillStyle = resColor;
- ctx.font = "18px " + fontFamily;
- ctx.fillText(padNumber(score[score.length - 1][2]), tw * 2 + leftSpace, 68); /////////////////////
-
- ctx.fillStyle = '#ffffff';
- ctx.font = "18px " + fontFamily;
- ctx.fillText('Топ:', tw * 3 + leftSpace, 20);
-
- for (var _i4 = 0; _i4 < data.result.topAgents.length; _i4++) {
- var _item = data.result.topAgents[_i4];
- ctx.fillStyle = _item.team === 'RESISTANCE' ? resColor : enlColor;
- ctx.font = "18px " + fontFamily;
- ctx.fillText(_item.nick, tw * 3 + leftSpace, 45 + _i4 * 23);
- }
-
- ctx.drawImage(logo, width - 140, 10);
- }; ////////////////////////////////////////
-
-
- window.plugin.cellScore = e;
-
- function setup() {
- $('<style>').prop('type', 'text/css').html(plugin_info.css).appendTo('head');
- $('body').append(plugin_info.ui);
- $('#toolbox').append('<a onclick="window.plugin.cellScore.toggleBox();return false;">Cell Score</a>');
- }
-
- setup.info = plugin_info;
- if (!window.bootPlugins) window.bootPlugins = [];
- window.bootPlugins.push(setup);
- if (window.iitcLoaded && typeof setup === 'function') setup();
- }
-
- var script = document.createElement('script');
- var info = {};
- info.ui = _ui_main_html__WEBPACK_IMPORTED_MODULE_0___default.a;
- info.css = _ui_main_css__WEBPACK_IMPORTED_MODULE_1___default.a;
-
- if (typeof GM_info !== 'undefined' && GM_info && GM_info.script) {
- info.script = {
- version: GM_info.script.version,
- name: GM_info.script.name,
- description: GM_info.script.description
- };
- }
-
- var textContent = document.createTextNode('(' + wrapper + ')(' + JSON.stringify(info) + ')');
- script.appendChild(textContent);
- (document.body || document.head || document.documentElement).appendChild(script);
-
- /***/ }),
- /* 4 */
- /***/ (function(module, exports) {
-
- module.exports = "";
-
- /***/ }),
- /* 5 */
- /***/ (function(module, exports, __webpack_require__) {
-
- // Imports
- var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(6);
- exports = ___CSS_LOADER_API_IMPORT___(false);
- // Module
- exports.push([module.i, "", ""]);
- // Exports
- module.exports = exports;
-
-
- /***/ }),
- /* 6 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
-
-
- /*
- MIT License http://www.opensource.org/licenses/mit-license.php
- Author Tobias Koppers @sokra
- */
- // css base code, injected by the css-loader
- // eslint-disable-next-line func-names
- module.exports = function (useSourceMap) {
- var list = []; // return the list of modules as css string
-
- list.toString = function toString() {
- return this.map(function (item) {
- var content = cssWithMappingToString(item, useSourceMap);
-
- if (item[2]) {
- return "@media ".concat(item[2], " {").concat(content, "}");
- }
-
- return content;
- }).join('');
- }; // import a list of modules into the list
- // eslint-disable-next-line func-names
-
-
- list.i = function (modules, mediaQuery, dedupe) {
- if (typeof modules === 'string') {
- // eslint-disable-next-line no-param-reassign
- modules = [[null, modules, '']];
- }
-
- var alreadyImportedModules = {};
-
- if (dedupe) {
- for (var i = 0; i < this.length; i++) {
- // eslint-disable-next-line prefer-destructuring
- var id = this[i][0];
-
- if (id != null) {
- alreadyImportedModules[id] = true;
- }
- }
- }
-
- for (var _i = 0; _i < modules.length; _i++) {
- var item = [].concat(modules[_i]);
-
- if (dedupe && alreadyImportedModules[item[0]]) {
- // eslint-disable-next-line no-continue
- continue;
- }
-
- if (mediaQuery) {
- if (!item[2]) {
- item[2] = mediaQuery;
- } else {
- item[2] = "".concat(mediaQuery, " and ").concat(item[2]);
- }
- }
-
- list.push(item);
- }
- };
-
- return list;
- };
-
- function cssWithMappingToString(item, useSourceMap) {
- var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring
-
- var cssMapping = item[3];
-
- if (!cssMapping) {
- return content;
- }
-
- if (useSourceMap && typeof btoa === 'function') {
- var sourceMapping = toComment(cssMapping);
- var sourceURLs = cssMapping.sources.map(function (source) {
- return "/*# sourceURL=".concat(cssMapping.sourceRoot || '').concat(source, " */");
- });
- return [content].concat(sourceURLs).concat([sourceMapping]).join('\n');
- }
-
- return [content].join('\n');
- } // Adapted from convert-source-map (MIT)
-
-
- function toComment(sourceMap) {
- // eslint-disable-next-line no-undef
- var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
- var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
- return "/*# ".concat(data, " */");
- }
-
- /***/ })
- /******/ ]);