2020-08-14 11:34:14 +00:00
// modules are defined as an array
// [ module function, map of requires ]
//
// map of requires is short require name -> numeric require
//
// anything defined in a previous bundle is accessed via the
// orig method which is the require for previous bundles
parcelRequire = ( function ( modules , cache , entry , globalName ) {
// Save the require from previous bundle to this closure if any
var previousRequire = typeof parcelRequire === 'function' && parcelRequire ;
var nodeRequire = typeof require === 'function' && require ;
function newRequire ( name , jumped ) {
if ( ! cache [ name ] ) {
if ( ! modules [ name ] ) {
// if we cannot find the module within our internal map or
// cache jump to the current global require ie. the last bundle
// that was added to the page.
var currentRequire = typeof parcelRequire === 'function' && parcelRequire ;
if ( ! jumped && currentRequire ) {
return currentRequire ( name , true ) ;
}
// If there are other bundles on this page the require from the
// previous one is saved to 'previousRequire'. Repeat this as
// many times as there are bundles until the module is found or
// we exhaust the require chain.
if ( previousRequire ) {
return previousRequire ( name , true ) ;
}
// Try the node require function if it exists.
if ( nodeRequire && typeof name === 'string' ) {
return nodeRequire ( name ) ;
}
var err = new Error ( 'Cannot find module \'' + name + '\'' ) ;
err . code = 'MODULE_NOT_FOUND' ;
throw err ;
}
localRequire . resolve = resolve ;
localRequire . cache = { } ;
var module = cache [ name ] = new newRequire . Module ( name ) ;
modules [ name ] [ 0 ] . call ( module . exports , localRequire , module , module . exports , this ) ;
}
return cache [ name ] . exports ;
function localRequire ( x ) {
return newRequire ( localRequire . resolve ( x ) ) ;
}
function resolve ( x ) {
return modules [ name ] [ 1 ] [ x ] || x ;
}
}
function Module ( moduleName ) {
this . id = moduleName ;
this . bundle = newRequire ;
this . exports = { } ;
}
newRequire . isParcelRequire = true ;
newRequire . Module = Module ;
newRequire . modules = modules ;
newRequire . cache = cache ;
newRequire . parent = previousRequire ;
newRequire . register = function ( id , exports ) {
modules [ id ] = [ function ( require , module ) {
module . exports = exports ;
} , { } ] ;
} ;
var error ;
for ( var i = 0 ; i < entry . length ; i ++ ) {
try {
newRequire ( entry [ i ] ) ;
} catch ( e ) {
// Save first error but execute all entries
if ( ! error ) {
error = e ;
}
}
}
if ( entry . length ) {
// Expose entry point to Node, AMD or browser globals
// Based on https://github.com/ForbesLindesay/umd/blob/master/template.js
var mainExports = newRequire ( entry [ entry . length - 1 ] ) ;
// CommonJS
if ( typeof exports === "object" && typeof module !== "undefined" ) {
module . exports = mainExports ;
// RequireJS
} else if ( typeof define === "function" && define . amd ) {
define ( function ( ) {
return mainExports ;
} ) ;
// <script>
} else if ( globalName ) {
this [ globalName ] = mainExports ;
}
}
// Override the current require with this new one
parcelRequire = newRequire ;
if ( error ) {
// throw error from earlier, _after updating parcelRequire_
throw error ;
}
return newRequire ;
} ) ( { "Ph2E" : [ function ( require , module , exports ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . default = exports . API _URI = void 0 ;
const API _URI = 'https://api.tribalwarshelp.com/graphql' ;
exports . API _URI = API _URI ;
var _default = function _default ( ) {
let {
query ,
variables = { }
} = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
return fetch ( API _URI , {
method : 'POST' ,
body : JSON . stringify ( {
query ,
variables
} ) ,
headers : {
'Content-Type' : 'application/json'
}
} ) . then ( res => {
return res . json ( ) ;
} ) . then ( ( _ref ) => {
let {
data ,
errors
} = _ref ;
if ( errors && Array . isArray ( errors ) && errors . length > 0 ) {
throw new Error ( errors [ 0 ] . message ) ;
}
return new Promise ( resolve => resolve ( data ) ) ;
} ) ;
} ;
2020-08-14 11:44:23 +00:00
exports . default = _default ;
} , { } ] , "vPH5" : [ function ( require , module , exports ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . default = void 0 ;
const translations = {
pl _PL : {
conquers : 'Przejęcia' ,
sideOne : 'Strona 1' ,
sideTwo : 'Strona 2' ,
difference : 'Różnica' ,
tribeTag : 'Skrót plemienia' ,
delete : 'Usuń' ,
notEnoughTribesSideOne : 'Musisz dodać jakiekolwiek plemię do strony 1.' ,
notEnoughTribesSideTwo : 'Musisz dodać jakiekolwiek plemię do strony 2.' ,
from : 'Od' ,
to : 'Do' ,
2020-08-15 11:11:11 +00:00
warStatsGenerator : 'Generator statystyk wojennych' ,
generateWarStats : 'Wygeneruj statystyki wojenne' ,
addTribe : 'Dodaj plemię'
2020-08-14 11:44:23 +00:00
} ,
en _DK : {
conquers : 'Conquers' ,
sideOne : 'Side one' ,
sideTwo : 'Side two' ,
difference : 'Difference' ,
tribeTag : 'Tribe tag' ,
delete : 'Delete' ,
notEnoughTribesSideOne : 'Not enough tribes added to the side one.' ,
notEnoughTribesSideTwo : 'Not enough tribes added to the side two.' ,
from : 'From' ,
to : 'To' ,
2020-08-15 11:11:11 +00:00
warStatsGenerator : 'War stats generator' ,
generateWarStats : 'Generate war stats' ,
addTribe : 'Add tribe'
2020-08-14 11:44:23 +00:00
}
} ;
var _default = ( ) => translations [ window . game _data . locale ] || translations . en _DK ;
2020-08-14 11:34:14 +00:00
exports . default = _default ;
} , { } ] , "DMkL" : [ function ( require , module , exports ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . default = void 0 ;
var _default = ( ) => window . location . host . split ( '.' ) [ 0 ] ;
exports . default = _default ;
} , { } ] , "chDM" : [ function ( require , module , exports ) {
"use strict" ;
Object . defineProperty ( exports , "__esModule" , {
value : true
} ) ;
exports . default = exports . POPUP _SELECTOR = void 0 ;
const POPUP _WRAPPER _SELECTOR = '.popup_helper' ;
const POPUP _SELECTOR = '#inline_popup' ;
exports . POPUP _SELECTOR = POPUP _SELECTOR ;
var _default = function _default ( ) {
let {
e ,
title ,
html ,
id
} = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : { } ;
const popup = document . querySelector ( POPUP _SELECTOR ) ;
if ( popup ) {
popup . style . width = 'auto' ;
popup . style . maxWidth = '1000px' ;
}
if ( popup . classList . contains ( 'show' ) ) {
popup . querySelector ( '#inline_popup_title' ) . innerHTML = title ;
popup . querySelector ( '#inline_popup_content' ) . innerHTML = html ;
} else {
inlinePopup ( e , id , null , {
offset _x : 0 ,
offset _y : 0
} , html , title ) ;
}
const popupWrapper = document . querySelector ( POPUP _WRAPPER _SELECTOR ) ;
if ( popupWrapper ) {
popupWrapper . style . width = 'auto' ;
popupWrapper . style . position = 'fixed' ;
popupWrapper . style . zIndex = '50001' ;
}
} ;
exports . default = _default ;
} , { } ] , "H9GS" : [ function ( require , module , exports ) {
"use strict" ;
var _requestCreator = _interopRequireDefault ( require ( "./libs/requestCreator" ) ) ;
2020-08-14 11:44:23 +00:00
var _warStatsGenerator = _interopRequireDefault ( require ( "./i18n/warStatsGenerator" ) ) ;
2020-08-14 11:34:14 +00:00
var _getCurrentServer = _interopRequireDefault ( require ( "./utils/getCurrentServer" ) ) ;
var _showPopup = _interopRequireWildcard ( require ( "./utils/showPopup" ) ) ;
function _getRequireWildcardCache ( ) { if ( typeof WeakMap !== "function" ) return null ; var cache = new WeakMap ( ) ; _getRequireWildcardCache = function ( ) { return cache ; } ; return cache ; }
function _interopRequireWildcard ( obj ) { if ( obj && obj . _ _esModule ) { return obj ; } if ( obj === null || typeof obj !== "object" && typeof obj !== "function" ) { return { default : obj } ; } var cache = _getRequireWildcardCache ( ) ; if ( cache && cache . has ( obj ) ) { return cache . get ( obj ) ; } var newObj = { } ; var hasPropertyDescriptor = Object . defineProperty && Object . getOwnPropertyDescriptor ; for ( var key in obj ) { if ( Object . prototype . hasOwnProperty . call ( obj , key ) ) { var desc = hasPropertyDescriptor ? Object . getOwnPropertyDescriptor ( obj , key ) : null ; if ( desc && ( desc . get || desc . set ) ) { Object . defineProperty ( newObj , key , desc ) ; } else { newObj [ key ] = obj [ key ] ; } } } newObj . default = obj ; if ( cache ) { cache . set ( obj , newObj ) ; } return newObj ; }
function _interopRequireDefault ( obj ) { return obj && obj . _ _esModule ? obj : { default : obj } ; }
// ==UserScript==
2020-08-15 11:11:11 +00:00
// @name War stats generator
2020-08-14 11:34:14 +00:00
// @namespace https://github.com/tribalwarshelp/scripts
// @updateURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/warStatsGenerator.js
// @downloadURL https://raw.githubusercontent.com/tribalwarshelp/scripts/master/dist/warStatsGenerator.js
2020-08-16 13:49:32 +00:00
// @version 0.3.0
2020-08-15 11:11:11 +00:00
// @description War stats generator
2020-08-14 11:34:14 +00:00
// @author Kichiyaki http://dawid-wysokinski.pl/
// @match *://*/game.php*screen=ranking*mode=wars*
// @grant none
// @run-at document-end
// ==/UserScript==
const SERVER = ( 0 , _getCurrentServer . default ) ( ) ;
const SIDE _ONE _BUTTON _ID = 'sideOneAdd' ;
const SIDE _ONE _INPUT _CONTAINER _ID = 'sideOneInputs' ;
const SIDE _TWO _BUTTON _ID = 'sideTwoAdd' ;
const SIDE _TWO _INPUT _CONTAINER _ID = 'sideTwoInputs' ;
const TO _INPUT _ID = 'to' ;
const FROM _INPUT _ID = 'from' ;
const RESULT _CONTAINER _ID = 'warStatsResult' ;
const TRIBES _QUERY = "\n query tribes($server: String!, $filter: TribeFilter) {\n tribes(server: $server, filter: $filter) {\n items {\n id\n tag\n }\n }\n }\n" ;
2020-08-16 13:49:32 +00:00
const ENNOBLEMENTS _QUERY = "\n query ennoblements($server: String!, $sideOneFilter: EnnoblementFilter, $sideTwoFilter: EnnoblementFilter) {\n sideOneEnnoblements: ennoblements(server: $server, filter: $sideOneFilter) {\n total\n }\n sideTwoEnnoblements: ennoblements(server: $server, filter: $sideTwoFilter) {\n total\n }\n }\n" ;
2020-08-14 11:44:23 +00:00
const translations = ( 0 , _warStatsGenerator . default ) ( ) ;
2020-08-14 11:34:14 +00:00
const showResult = function showResult ( ) {
let sideOne = arguments . length > 0 && arguments [ 0 ] !== undefined ? arguments [ 0 ] : 0 ;
let sideTwo = arguments . length > 1 && arguments [ 1 ] !== undefined ? arguments [ 1 ] : 0 ;
2020-08-14 11:44:23 +00:00
const html = "\n <div>\n <h3>" . concat ( translations . conquers , ":</h3>\n <p style=\"margin: 0;\"><strong>" ) . concat ( translations . sideOne , ": " ) . concat ( sideOne , "</strong></p>\n <p style=\"margin: 0;\"><strong>" ) . concat ( translations . sideTwo , ": " ) . concat ( sideTwo , "</strong></p>\n <p style=\"margin: 0;\"><strong>" ) . concat ( translations . difference , ": " ) . concat ( Math . abs ( sideOne - sideTwo ) , "</strong></p>\n <hr style=\"margin: 10px 0;\" />\n </div>\n " ) ;
2020-08-14 11:34:14 +00:00
document . querySelector ( '#' + RESULT _CONTAINER _ID ) . innerHTML = html ;
} ;
const createAddTribeHandler = container => {
return ( ) => {
const div = document . createElement ( 'div' ) ;
2020-08-14 11:44:23 +00:00
div . innerHTML = "\n <label>" . concat ( translations . tribeTag , ": </label>\n <input type=\"text\" required />\n <button type=\"button\" class=\"btn\">" ) . concat ( translations . delete , "</button>\n " ) ;
2020-08-14 11:34:14 +00:00
div . querySelector ( 'button' ) . addEventListener ( 'click' , ( ) => {
div . remove ( ) ;
} ) ;
container . appendChild ( div ) ;
} ;
} ;
const handleFormSubmit = async e => {
e . preventDefault ( ) ;
const sideOneTags = [ ] ;
const sideTwoTags = [ ] ;
e . target . querySelectorAll ( "#" . concat ( SIDE _ONE _INPUT _CONTAINER _ID , " input" ) ) . forEach ( el => {
if ( el . value . trim ( ) ) {
sideOneTags . push ( el . value . trim ( ) ) ;
}
} ) ;
e . target . querySelectorAll ( "#" . concat ( SIDE _TWO _INPUT _CONTAINER _ID , " input" ) ) . forEach ( el => {
if ( el . value . trim ( ) ) {
sideTwoTags . push ( el . value . trim ( ) ) ;
}
} ) ;
console . log ( 'sideOneTags' , sideOneTags , 'sideTwoTags' , sideTwoTags ) ;
2020-08-14 11:44:23 +00:00
if ( sideOneTags . length === 0 ) return UI . ErrorMessage ( translations . notEnoughTribesSideOne ) ;
if ( sideTwoTags . length === 0 ) return UI . ErrorMessage ( translations . notEnoughTribesSideTwo ) ;
2020-08-14 11:34:14 +00:00
const fromInputs = document . querySelectorAll ( "" . concat ( _showPopup . POPUP _SELECTOR , " form #" ) . concat ( FROM _INPUT _ID , " input" ) ) ;
let ennobledAtGTE ;
if ( fromInputs . length === 2 && fromInputs [ 0 ] . value && fromInputs [ 1 ] . value ) {
ennobledAtGTE = new Date ( "" . concat ( fromInputs [ 0 ] . value , "T" ) . concat ( fromInputs [ 1 ] . value , ":00" ) ) ;
}
const toInputs = document . querySelectorAll ( "" . concat ( _showPopup . POPUP _SELECTOR , " form #" ) . concat ( TO _INPUT _ID , " input" ) ) ;
let ennobledAtLTE ;
if ( toInputs . length === 2 && toInputs [ 0 ] . value && toInputs [ 1 ] . value ) {
ennobledAtLTE = new Date ( "" . concat ( toInputs [ 0 ] . value , "T" ) . concat ( toInputs [ 1 ] . value , ":00" ) ) ;
}
e . target . querySelectorAll ( 'button' ) . forEach ( button => {
button . disabled = true ;
} ) ;
try {
const {
tribes
} = await ( 0 , _requestCreator . default ) ( {
query : TRIBES _QUERY ,
variables : {
server : SERVER ,
filter : {
tag : [ ... sideOneTags , ... sideTwoTags ]
}
}
} ) ;
const sideOneTribes = tribes . items . filter ( item => sideOneTags . some ( tag => item . tag === tag ) ) . map ( tribe => tribe . id ) ;
const sideTwoTribes = tribes . items . filter ( item => sideTwoTags . some ( tag => item . tag === tag ) ) . map ( tribe => tribe . id ) ;
const {
2020-08-16 13:49:32 +00:00
sideOneEnnoblements ,
sideTwoEnnoblements
2020-08-14 11:34:14 +00:00
} = await ( 0 , _requestCreator . default ) ( {
query : ENNOBLEMENTS _QUERY ,
variables : {
server : SERVER ,
2020-08-16 13:49:32 +00:00
sideOneFilter : {
2020-08-14 11:34:14 +00:00
newOwnerTribeID : sideOneTribes ,
oldOwnerTribeID : sideTwoTribes ,
ennobledAtGTE ,
ennobledAtLTE
2020-08-16 13:49:32 +00:00
} ,
sideTwoFilter : {
2020-08-14 11:34:14 +00:00
newOwnerTribeID : sideTwoTribes ,
oldOwnerTribeID : sideOneTribes ,
ennobledAtGTE ,
ennobledAtLTE
}
}
} ) ;
console . log ( 'sideOneEnnoblements' , sideOneEnnoblements , 'sideTwoEnnoblements' , sideTwoEnnoblements ) ;
showResult ( sideOneEnnoblements . total , sideTwoEnnoblements . total ) ;
} catch ( error ) {
console . log ( 'handleFormSubmit' , error ) ;
}
e . target . querySelectorAll ( 'button' ) . forEach ( button => {
button . disabled = false ;
} ) ;
} ;
const showWarStatsForm = e => {
2020-08-16 13:49:32 +00:00
const html = "\n <form>\n <div id=\"" . concat ( RESULT _CONTAINER _ID , "\">\n </div>\n <div style=\"margin-bottom: 10px;\">\n <div id=\"" ) . concat ( FROM _INPUT _ID , "\">\n <label>" ) . concat ( translations . from , ": </label>\n <input type=\"date\" required />\n <input type=\"time\" required />\n </div>\n <div id=\"" ) . concat ( TO _INPUT _ID , "\">\n <label>" ) . concat ( translations . to , ": </label>\n <input type=\"date\" required />\n <input type=\"time\" required />\n </div>\n </div>\n <div style=\"display: flex; justify-content: space-between; margin-bottom: 10px; min-width: 800px;\">\n <div>\n <h3>" ) . concat ( translations . sideOne , "</h3>\n <div id=\"" ) . concat ( SIDE _ONE _INPUT _CONTAINER _ID , "\">\n </div>\n <button id=\"" ) . concat ( SIDE _ONE _BUTTON _ID , "\" class=\"btn\" type=\"button\">" ) . concat ( translations . addTribe , "</button>\n </div>\n <div style=\"margin: 0 5px;\"></div>\n <div>\n <h3>" ) . concat ( translations . sideTwo , "</h3>\n <div id=\"" ) . concat ( SIDE _TWO _INPUT _CONTAINER _ID , "\">\n </div>\n <button id=\"" ) . concat ( SIDE _TWO _BUTTON _ID , "\" class=\"btn\" type=\"button\">" ) . concat ( translations . addTribe , "</button>\n </div>\n </div>\n <div style=\"text-align: center;\">\n <button class=\"btn\" type=\"submit\">" ) . concat ( translations . generateWarStats , "</button>\n </div>\n </form>\n " ) ;
2020-08-14 11:34:14 +00:00
( 0 , _showPopup . default ) ( {
2020-08-14 11:44:23 +00:00
title : translations . warStatsGenerator ,
2020-08-14 11:34:14 +00:00
id : 'warStats' ,
html ,
e
} ) ;
document . querySelector ( "" . concat ( _showPopup . POPUP _SELECTOR , " form #" ) . concat ( SIDE _ONE _BUTTON _ID ) ) . addEventListener ( 'click' , createAddTribeHandler ( document . querySelector ( '#' + SIDE _ONE _INPUT _CONTAINER _ID ) ) ) ;
document . querySelector ( "" . concat ( _showPopup . POPUP _SELECTOR , " form #" ) . concat ( SIDE _TWO _BUTTON _ID ) ) . addEventListener ( 'click' , createAddTribeHandler ( document . querySelector ( '#' + SIDE _TWO _INPUT _CONTAINER _ID ) ) ) ;
document . querySelector ( "" . concat ( _showPopup . POPUP _SELECTOR , " form" ) ) . addEventListener ( 'submit' , handleFormSubmit ) ;
} ;
const renderUI = ( ) => {
const div = document . createElement ( 'div' ) ;
const button = document . createElement ( 'button' ) ;
2020-08-14 11:44:23 +00:00
button . innerHTML = translations . generateWarStats ;
2020-08-14 11:34:14 +00:00
button . addEventListener ( 'click' , showWarStatsForm ) ;
div . appendChild ( button ) ;
document . querySelector ( '#wars_ranking_table' ) . parentElement . prepend ( div ) ;
} ;
( function ( ) {
try {
renderUI ( ) ;
} catch ( error ) {
console . log ( 'war stats' , error ) ;
}
} ) ( ) ;
2020-08-14 11:44:23 +00:00
} , { "./libs/requestCreator" : "Ph2E" , "./i18n/warStatsGenerator" : "vPH5" , "./utils/getCurrentServer" : "DMkL" , "./utils/showPopup" : "chDM" } ] } , { } , [ "H9GS" ] , null )