/******/ (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] = { /******/ exports: {}, /******/ id: moduleId, /******/ loaded: false /******/ }; /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ // Flag the module as loaded /******/ module.loaded = 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; /******/ // __webpack_public_path__ /******/ __webpack_require__.p = ""; /******/ // Load entry module and return exports /******/ return __webpack_require__(0); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; var _matrices = __webpack_require__(1); var _matrices2 = _interopRequireDefault(_matrices); var _diagram = __webpack_require__(2); var _diagram2 = _interopRequireDefault(_diagram); var _ui = __webpack_require__(4); var _ui2 = _interopRequireDefault(_ui); var _hotfixes = __webpack_require__(5); var _hotfixes2 = _interopRequireDefault(_hotfixes); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } __webpack_require__(6); __webpack_require__(7); __webpack_require__(8); __webpack_require__(9); __webpack_require__(10); __webpack_require__(11); __webpack_require__(12); __webpack_require__(13); var main = { changeEvent: function changeEvent(e) { var target = _ui2.default.findRoot(e.target); main.setState({ eventKey: target.getAttribute(_ui2.default.DATA.EVENT) }); main.updateUI(); }, changeSort: function changeSort(e) { var target = _ui2.default.findRoot(e.target); main.setState({ sort: target.getAttribute(_ui2.default.DATA.SORT) }); main.updateUI(); }, changeScheme: function changeScheme(e) { var target = _ui2.default.findRoot(e.target); main.setState({ scheme: target.getAttribute(_ui2.default.DATA.SCHEME) }); main.updateUI(); }, changeRound: function changeRound(e) { var target = _ui2.default.findRoot(e.target); var r = target.getAttribute(_ui2.default.DATA.ROUND); var state = main.getState(); var roundsToShow = state.rounds ? state.rounds.split(',') : []; var i = roundsToShow.indexOf(r); i === -1 ? roundsToShow.push(r) : roundsToShow.splice(i, 1); main.setState({ rounds: roundsToShow }); main.updateUI(); }, // DEPRECATED? 161120 // getRounds: (eventKey) => { // const rounds = {}; // // main.json.tourneys[eventKey].games.forEach(game => { // const name = UI.getRoundName(main.json.rounds[game.rId]); // if (rounds[name] === undefined) { // rounds[name] = []; // } // // rounds[name].push({ // id: game.rId, // name: name, // }); // }); // // return rounds; // }, getDuplicates: function getDuplicates(eventKey) { var games = {}; main.json.tourneys[eventKey].games.forEach(function (game) { var teams = [game.t1, game.t2].sort(); var addr = teams[0] + '-' + teams[1]; if (games[addr] === undefined) { games[addr] = []; } games[addr].push(game); }); return Object.keys(games).reduce(function (acc, k) { if (games[k].length > 1) { acc.push(games[k]); } return acc; }, []); }, generateUI: function generateUI() { var state = main.getState(); _ui2.default.buildTourneyPane(); _ui2.default.buildEventsPane(main.changeEvent); _ui2.default.buildSortPane(main.changeSort); _ui2.default.buildSchemePane(main.changeScheme); _ui2.default.buildRoundsPane(main.changeRound); }, updateUI: function updateUI() { var state = main.getState(); var eventKey = state.eventKey; var matrix = _matrices2.default.buildMatrix(main.json, eventKey); var duplicates = main.getDuplicates(eventKey); var tmp = _diagram2.default.buildChords({ data: main.json, sort: state.sort, eventKey: eventKey, matrix: matrix, SORT_TYPES: _ui2.default.SORT_TYPES }); var getScore = function getScore(game) { var s1 = game.s1; var s2 = game.s2; if (game.sp1 !== null) { s1 = game.sp1; } else if (game.se1 !== null) { s1 = game.se1; } if (game.sp2 !== null) { s2 = game.sp2; } else if (game.se2 !== null) { s2 = game.se2; } return { s1: s1, s2: s2 }; }; var chords = tmp.reduce(function (acc, d) { var tSrc = main.json.tourneys[eventKey].teams[d.source.index].tId; var tTgt = main.json.tourneys[eventKey].teams[d.target.index].tId; d.game = main.json.tourneys[eventKey].games.find(function (g) { return g.t1 === tSrc && g.t2 === tTgt || g.t1 === tTgt && g.t2 === tSrc; }); duplicates.forEach(function (games) { if (games[0] === d.game || games[1] === d.game) { var gameNew = games[0] === d.game ? games[1] : games[0]; var sourceNew = Object.assign({}, d.source); var targetNew = Object.assign({}, d.target); var sourceAngle = d.source.endAngle - d.source.startAngle; var targetAngle = d.target.endAngle - d.target.startAngle; var _getScore = getScore(games[0]), s1g0 = _getScore.s1, s2g0 = _getScore.s2; var _getScore2 = getScore(games[1]), s1g1 = _getScore2.s1, s2g1 = _getScore2.s2; var totals = { src: 0, tgt: 0 }; var offset = { src: 0, tgt: 0 }; totals.src += games[0].t1 === tSrc ? s1g0 : s2g0; totals.tgt += games[0].t1 === tTgt ? s1g0 : s2g0; totals.src += games[1].t1 === tSrc ? s1g1 : s2g1; totals.tgt += games[1].t1 === tTgt ? s1g1 : s2g1; offset.src = games[0].t1 === tSrc ? s1g0 : s2g0; offset.tgt = games[0].t1 === tTgt ? totals.tgt - s1g0 : totals.tgt - s2g0; sourceNew.startAngle = d.source.startAngle + sourceAngle * (offset.src / totals.src); d.source.endAngle = d.source.startAngle + sourceAngle * (offset.src / totals.src); targetNew.endAngle = d.target.startAngle + targetAngle * (offset.tgt / totals.tgt); d.target.startAngle = d.target.startAngle + targetAngle * (offset.tgt / totals.tgt); acc.push({ source: sourceNew, target: targetNew, game: gameNew }); } }); acc.push(d); return acc; }, []); chords.groups = tmp.groups; _diagram2.default.clear(); var color = _diagram2.default.buildColorScheme({ scheme: parseInt(state.scheme), len: main.json.tourneys[state.eventKey].teams.length }); var container = _diagram2.default.buildContainer(chords); _diagram2.default.buildArcs({ container: container, color: color, eventKey: eventKey, data: main.json }); _diagram2.default.buildRibbons({ container: container, color: color, chords: chords, eventKey: eventKey, data: main.json }); _ui2.default.updateTourneyPane(state.eventKey); _ui2.default.updateEventsPane(state.eventKey); _ui2.default.updateSortPane(state.sort); _ui2.default.updateSchemePane(state.scheme); _ui2.default.updateRoundsPane(state.rounds.split(','), main.json.rounds); }, fetch: function fetch(url) { return new Promise(function (resolve, reject) { var listener = function listener(_ref) { var req = _ref.srcElement; req.status === 200 ? resolve(req.responseText) : reject("busted"); }; var req = new XMLHttpRequest(); req.addEventListener('load', listener); req.open('GET', url); req.send(); }); }, initJSON: function initJSON(strData) { main.json = JSON.parse(strData); }, patchErrors: function patchErrors() { main.json.tourneys['1934'] = _hotfixes2.default.patch1934(main.json.tourneys['1934']); }, getState: function getState() { var params = window.location.href.split('?')[1]; if (!params) { return {}; } return params.split('&').reduce(function (acc, v) { var tmp = v.split('='); acc[tmp[0]] = tmp[1]; return acc; }, {}); }, initState: function initState() { var state = main.getState(); state.eventKey = state.eventKey || "2014"; state.sort = state.sort || null; state.scheme = state.scheme || Math.ceil(Math.random() * 4); state.rounds = state.rounds || Object.values(_ui2.default.ROUND_TYPES); main.setState(state); }, setState: function setState(next) { var state = main.getState(); var url = window.location.href.split('?')[0]; state.eventKey = next.eventKey || state.eventKey; state.rounds = next.rounds || state.rounds; state.scheme = next.scheme || state.scheme; state.sort = next.sort || state.sort || null; var params = []; for (var key in state) { params.push(key + '=' + state[key]); } history.pushState(null, null, url + '?' + params.join('&')); } }; main.fetch('worldcup.json').then(main.initJSON).then(main.patchErrors).then(main.initState).then(main.generateUI).then(main.updateUI); /***/ }, /* 1 */ /***/ function(module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Matrices = { // A x A array of nulls; null-null relationships are omitted in chord diagram. createEmptyMatrix: function createEmptyMatrix(len) { var empty = Array.apply(null, Array(len)); return empty.map(function () { return empty.map(function () { return null; }); }); }, // Scalar data points (sum of goals scored). buildMatrix: function buildMatrix(json, eventKey) { var teams = json.tourneys[eventKey].teams; var matrix = Matrices.createEmptyMatrix(teams.length); json.tourneys[eventKey].games.forEach(function (g) { var i1 = teams.findIndex(function (v) { return v.tId === g.t1; }); var i2 = teams.findIndex(function (v) { return v.tId === g.t2; }); var s1 = matrix[i1][i2] || 0; var s2 = matrix[i2][i1] || 0; if (g.sp1 !== null) { s1 += g.sp1; } else if (g.se1 !== null) { s1 += g.se1; } else { s1 += g.s1; } if (g.sp2 !== null) { s2 += g.sp2; } else if (g.se2 !== null) { s2 += g.se2; } else { s2 += g.s2; } matrix[i1][i2] = s1; matrix[i2][i1] = s2; }, []); return matrix; }, swapIndices: function swapIndices(arr, i, j) { var tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; return arr; } }; exports.default = Matrices; /***/ }, /* 2 */ /***/ function(module, exports, __webpack_require__) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _sorter = __webpack_require__(3); var _sorter2 = _interopRequireDefault(_sorter); var _matrices = __webpack_require__(1); var _matrices2 = _interopRequireDefault(_matrices); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var Diagram = { clear: function clear() { return d3.select('svg').selectAll("*").remove(); }, swapGroupArcs: function swapGroupArcs(chords, i, j) { if (i < 0 || j < 0 || i === j) { return chords; } // Determine which arc is closer to 0, so earlier arc always swaps with later. var f = chords.groups[i].endAngle < chords.groups[j].endAngle ? i : j; var s = chords.groups[i].endAngle < chords.groups[j].endAngle ? j : i; var fst = Object.assign({}, chords.groups[f]); var snd = Object.assign({}, chords.groups[s]); var fstAngle = fst.endAngle - fst.startAngle; var sndAngle = snd.endAngle - snd.startAngle; var offsetAngle = sndAngle - fstAngle; // Bring first forward. chords.groups[f].startAngle = snd.endAngle - fstAngle; chords.groups[f].endAngle = snd.endAngle; chords.groups[f].index = snd.index; // Bring second back. chords.groups[s].startAngle = fst.startAngle; chords.groups[s].endAngle = fst.startAngle + sndAngle; chords.groups[s].index = fst.index; // Bump other groups forward. for (var ii = f + 1; ii < s; ii++) { chords.groups[ii].startAngle += offsetAngle; chords.groups[ii].endAngle += offsetAngle; } chords.forEach(function (v) { if (v.source.index === f) { v.source.startAngle += snd.endAngle - fst.endAngle; v.source.endAngle += snd.endAngle - fst.endAngle; } if (v.target.index === f) { v.target.startAngle += snd.endAngle - fst.endAngle; v.target.endAngle += snd.endAngle - fst.endAngle; } if (v.source.index === s) { v.source.startAngle -= snd.startAngle - fst.startAngle; v.source.endAngle -= snd.startAngle - fst.startAngle; } if (v.target.index === s) { v.target.startAngle -= snd.startAngle - fst.startAngle; v.target.endAngle -= snd.startAngle - fst.startAngle; } if (v.source.index > f && v.source.index < s) { v.source.startAngle += offsetAngle; v.source.endAngle += offsetAngle; } if (v.target.index > f && v.target.index < s) { v.target.startAngle += offsetAngle; v.target.endAngle += offsetAngle; } if ((v.source.index === f || v.source.index === s) && (v.target.index === f || v.target.index === s)) { var _tmp = v.source.index; v.source.index = v.target.index; v.target.index = _tmp; } else if (v.source.index === f) { v.source.index = s; } else if (v.target.index === f) { v.target.index = s; } else if (v.source.index === s) { v.source.index = f; } else if (v.target.index === s) { v.target.index = f; } }); // Swap array positions. var tmp = chords.groups[f]; chords.groups[f] = chords.groups[s]; chords.groups[s] = tmp; return chords; }, swapGroups: function swapGroups(data, eventKey, chords, i, j) { Diagram.swapGroupArcs(chords, i, j); _matrices2.default.swapIndices(data.tourneys[eventKey].teams, i, j); return chords; }, getCountryName: function getCountryName(data, eventKey, n) { var team = data.tourneys[eventKey].teams[n]; return data.countries[team.cId]; }, getPopulation: function getPopulation(data, eventKey, n) { var team = data.tourneys[eventKey].teams[n]; return team.p; }, getGoalsFor: function getGoalsFor(data, eventKey, n) { var team = data.tourneys[eventKey].teams[n]; return team.gf; }, getGoalsAgainst: function getGoalsAgainst(data, eventKey, n) { var team = data.tourneys[eventKey].teams[n]; return team.ga; }, buildChords: function buildChords(_ref) { var matrix = _ref.matrix, data = _ref.data, eventKey = _ref.eventKey, sort = _ref.sort, SORT_TYPES = _ref.SORT_TYPES; var chords = d3.chord().padAngle(0.05).call(null, matrix); switch (sort) { case SORT_TYPES.COUNTRY: return _sorter2.default.sort(chords, 0, chords.groups.length - 1, Diagram.getCountryName.bind(null, data, eventKey), Diagram.swapGroups.bind(null, data, eventKey)); case SORT_TYPES.GOALS: return _sorter2.default.sort(chords, 0, chords.groups.length - 1, Diagram.getGoalsFor.bind(null, data, eventKey), Diagram.swapGroups.bind(null, data, eventKey)); case SORT_TYPES.POPULATION: return _sorter2.default.sort(chords, 0, chords.groups.length - 1, Diagram.getPopulation.bind(null, data, eventKey), Diagram.swapGroups.bind(null, data, eventKey)); } return chords; }, buildDimensions: function buildDimensions() { var svgW = d3.select("svg").attr("width"); var svgH = d3.select("svg").attr("height"); var arcT = 5; var outerR = Math.min(svgW, svgH) * 0.5 - 130; var innerR = outerR - arcT; return { svgW: svgW, svgH: svgH, arcT: arcT, outerR: outerR, innerR: innerR }; }, buildColorScheme: function buildColorScheme(_ref2) { var scheme = _ref2.scheme, len = _ref2.len; if (scheme === 1) { return d3.scaleLinear().domain([0, len]).range(["#fff", "green"]).interpolate(d3.interpolateRgb); } else if (scheme === 2) { var _ret = function () { var colors = ["#ffffd9", "#edf8b1", "#c7e9b4", "#7fcdbb", "#41b6c4", "#1d91c0", "#225ea8", "#253494", "#081d58"]; return { v: function v(i) { return colors[i % colors.length]; } }; }(); if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v; } else if (scheme === 3) { return d3.scaleLinear().domain([0, len]).range(["red", "blue"]).interpolate(d3.interpolateRgb); } else if (scheme === 4) { return d3.scaleOrdinal(d3.schemeCategory10); } return d3.scaleOrdinal(d3.schemeCategory20); }, buildRibbons: function buildRibbons(_ref3) { var container = _ref3.container, color = _ref3.color, chords = _ref3.chords, data = _ref3.data, eventKey = _ref3.eventKey; var dimensions = Diagram.buildDimensions(); var ribbon = d3.ribbon().radius(dimensions.innerR); container.append("g").attr("class", "ribbons").selectAll("path").data(function (chords) { return chords; }).enter().append("path").attr("d", ribbon).attr('data-round-id', function (d) { return d.game.rId; }).style('fill', function (d) { return color(d.target.index); }).style('stroke', function (d) { return d3.rgb(color(d.target.index)).darker(); }).classed("ribbon", true).append("title").text(function (d) { var t1 = data.tourneys[eventKey].teams[d.source.index]; var t2 = data.tourneys[eventKey].teams[d.target.index]; var c1 = data.countries[t1.cId]; var c2 = data.countries[t2.cId]; var s1 = d.game.t1 === t1.tId ? d.game.s1 : d.game.s2; var s2 = d.game.t2 === t2.tId ? d.game.s2 : d.game.s1; if (d.game.sp1 !== null && d.game.sp2 !== null) { s1 = d.game.t1 === t1.tId ? d.game.sp1 : d.game.sp2; s2 = d.game.t2 === t2.tId ? d.game.sp2 : d.game.sp1; s1 += " (Penalties)"; s2 += " (Penalties)"; } else if (d.game.se1 !== null && d.game.se2 !== null) { s1 = d.game.t1 === t1.tId ? d.game.se1 : d.game.se2; s2 = d.game.t2 === t2.tId ? d.game.se2 : d.game.se1; s1 += " (Extended time)"; s2 += " (Extended time)"; } return c1 + ': ' + s1 + '\n' + c2 + ': ' + s2 + '\n' + data.rounds[d.game.rId]; }); }, buildArcs: function buildArcs(_ref4) { var container = _ref4.container, color = _ref4.color, eventKey = _ref4.eventKey, data = _ref4.data; var dimensions = Diagram.buildDimensions(); var arc = d3.arc().innerRadius(dimensions.innerR).outerRadius(dimensions.outerR); var group = container.append("g").attr("class", "groups").selectAll("g").data(function (chords) { return chords.groups; }).enter().append("g"); group.append("path").style("fill", function (d) { return color(d.index); }).style("stroke", function (d) { return d3.rgb(color(d.index)).darker(); }).attr("d", arc); group.append("text").each(function (d) { d.angle = (d.startAngle + d.endAngle) / 2; }).attr("dy", ".35em").attr("transform", function (d) { return "rotate(" + (d.angle * 180 / Math.PI - 91) + ")" + "translate(" + (dimensions.innerR + 26) + ")" + (d.angle > Math.PI ? "rotate(180)" : ""); }).style("text-anchor", function (d) { return d.angle > Math.PI ? "end" : null; }).text(function (d) { var team = data.tourneys[eventKey].teams[d.index]; var metric = ''; // switch (sort) { // case SORT_TYPES.GOALS: // metric = `(${team.gf})`; // break; // // case SORT_TYPES.POPULATION: // // metric = `(${Number(team.p).toLocaleString()})`; // // break; // } return data.countries[team.cId] + ' ' + metric; }); }, buildContainer: function buildContainer(chords) { var svg = d3.select("svg"); var dimensions = Diagram.buildDimensions(); return svg.append("g").attr("transform", 'translate(' + dimensions.svgW / 2 + ',' + dimensions.svgH / 2 + ')').datum(chords); } }; exports.default = Diagram; /***/ }, /* 3 */ /***/ function(module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var Sorter = { sort: function sort(chords, start, end, getVal, swap) { if (end <= start) { return chords; } var left = start; var right = end; var pivot = Math.floor((right + left) / 2); var pivotval = getVal(pivot); var tmp; var rval; while (left <= right) { while (getVal(left) < pivotval) { left++; } while (getVal(right) > pivotval) { right--; } if (left <= right) { chords = swap(chords, left, right); left++; right--; } break; } Sorter.sort(chords, start, right, getVal, swap); Sorter.sort(chords, left, end, getVal, swap); return chords; } }; exports.default = Sorter; /***/ }, /* 4 */ /***/ function(module, exports) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var UI = { CLASSNAMES: { TOURNEY: { IMAGE: 'tourney-image', COUNTRY: 'tourney-country', YEAR: 'tourney-year' }, EVENT: { ITEM: 'event-item', YEAR: 'event-year', FLAG: 'event-flag' }, SCHEME: { SCHEME1: 'scheme-item scheme1', SCHEME2: 'scheme-item scheme2', SCHEME3: 'scheme-item scheme3', SCHEME4: 'scheme-item scheme4' }, SORT: { ICON: 'sort-icon', ITEM: 'sort-item', TEXT: 'sort-text', TINY: 'sort-tiny' }, ROUND: { ICON: 'round-icon', ITEM: 'round-item', TEXT: 'round-text', TINY: 'round-tiny' } }, SORT_TYPES: { GOALS: 'goals', COUNTRY: 'country', POPULATION: 'population' }, ROUND_TYPES: { PRELIM: '1', ROUNDOF16: '2', QUARTERFINAL: '3', SEMIFINAL: '4', CONSOLATION: '5', FINAL: '6' }, DATA: { ROOT: 'data-root', EVENT: 'data-event-key', ROUND: 'data-round-key', SCHEME: 'data-round-scheme', SORT: 'data-sort-key' }, I18N: { HIDE: 'hide', SHOW: 'show' }, findRoot: function findRoot(node) { while (node !== document.body && node.getAttribute(UI.DATA.ROOT) === null) { node = node.parentNode; } return node; }, clearActive: function clearActive(nodes) { nodes.forEach(function (node) { var classes = node.className.split(' '); var i = classes.indexOf('active'); if (i !== -1) { classes.splice(i, 1); node.className = classes.join(' '); } }); }, updateTourneyPane: function updateTourneyPane(eventKey) { var tourneyList = { '1930': "Uruguay", '1934': "Italy", '1938': "France", '1950': "Brazil", '1954': "Switzerland", '1958': "Sweden", '1962': "Chile", '1966': "England", '1970': "Mexico", '1974': "West Germany", '1978': "Argentina", '1982': "Spain", '1986': "Mexico", '1990': "Italy", '1994': "USA", '1998': "France", '2002': "Japan / South Korea", '2006': "Germany", '2010': "Johannesburg", '2014': "Brazil" }; var ek = tourneyList[eventKey] === undefined ? null : eventKey; var href = 'https://en.wikipedia.org/wiki/' + ek + '_FIFA_World_Cup'; var tourneyPane = document.querySelector('.tourney'); tourneyPane.querySelector('.' + UI.CLASSNAMES.TOURNEY.IMAGE).src = 'res/' + ek + '.jpg'; tourneyPane.querySelector('.' + UI.CLASSNAMES.TOURNEY.COUNTRY).innerHTML = tourneyList[ek]; tourneyPane.querySelector('.' + UI.CLASSNAMES.TOURNEY.COUNTRY).href = href; tourneyPane.querySelector('.' + UI.CLASSNAMES.TOURNEY.YEAR).innerHTML = ek; tourneyPane.querySelector('.' + UI.CLASSNAMES.TOURNEY.YEAR).href = href; }, updateEventsPane: function updateEventsPane(eventKey) { var eventItems = document.querySelectorAll('.' + UI.CLASSNAMES.EVENT.ITEM); UI.clearActive(eventItems); var activeEventNode = document.querySelector('[' + UI.DATA.EVENT + '="' + eventKey + '"'); activeEventNode.className += ' active'; }, updateRoundsPane: function updateRoundsPane(roundsToShow, allRounds) { var roundsItems = document.querySelectorAll('.' + UI.CLASSNAMES.ROUND.ITEM); UI.clearActive(roundsItems); roundsItems.forEach(function (item) { var type = item.getAttribute(UI.DATA.ROUND); var tiny = item.querySelector('.' + UI.CLASSNAMES.ROUND.TINY); tiny.innerHTML = UI.I18N.SHOW; if (roundsToShow.indexOf(type) > -1) { item.className += ' active'; tiny.innerHTML = UI.I18N.HIDE; } }); var ribbons = document.querySelectorAll('.ribbon'); ribbons.forEach(function (ribbon) { var name = allRounds[ribbon.getAttribute("data-round-id")]; var type = UI.getRoundType(name); roundsToShow.indexOf(type) === -1 ? ribbon.style.display = 'none' : ribbon.style.display = 'inline'; }); }, updateSchemePane: function updateSchemePane(scheme) { var schemeItems = document.querySelectorAll('.scheme-item'); UI.clearActive(schemeItems); schemeItems.forEach(function (node) { if (node.getAttribute(UI.DATA.SCHEME) === scheme) { node.className += ' active'; } }); }, updateSortPane: function updateSortPane(sort) { var sortItems = document.querySelectorAll('.sort-item'); UI.clearActive(sortItems); sortItems.forEach(function (node) { if (node.getAttribute(UI.DATA.SORT) === sort) { node.className += ' active'; } }); }, buildTourneyPane: function buildTourneyPane() { var img = document.createElement('img'); var country = document.createElement('a'); var year = document.createElement('a'); img.className = UI.CLASSNAMES.TOURNEY.IMAGE; country.className = UI.CLASSNAMES.TOURNEY.COUNTRY; country.target = '_blank'; year.className = UI.CLASSNAMES.TOURNEY.YEAR; year.target = '_blank'; var tourneyPane = document.querySelector('.tourney'); tourneyPane.appendChild(img); tourneyPane.appendChild(year); tourneyPane.appendChild(country); }, buildEventsPane: function buildEventsPane(onClick) { var eventsList = [{ year: 1930, icon: "uy" }, { year: 1934, icon: "it" }, { year: 1938, icon: "fr" }, { year: 1950, icon: "br" }, { year: 1954, icon: "ch" }, { year: 1958, icon: "se" }, { year: 1962, icon: "cl" }, { year: 1966, icon: "gb" }, { year: 1970, icon: "mx" }, { year: 1974, icon: "de" }, { year: 1978, icon: "ar" }, { year: 1982, icon: "es" }, { year: 1986, icon: "mx" }, { year: 1990, icon: "it" }, { year: 1994, icon: "us" }, { year: 1998, icon: "fr" }, { year: 2002, icon: "jp" }, { year: 2006, icon: "de" }, { year: 2010, icon: "za" }, { year: 2014, icon: "br" }]; var eventsDiv = document.querySelector('.events'); while (eventsDiv.hasChildNodes()) { eventsDiv.firstChild.remove(); } eventsList.forEach(function (evt) { var item = document.createElement('div'); var year = document.createElement('div'); var flag = document.createElement('div'); item.className = UI.CLASSNAMES.EVENT.ITEM; item.addEventListener('click', onClick); item.setAttribute(UI.DATA.EVENT, evt.year); item.setAttribute(UI.DATA.ROOT, true); year.className = UI.CLASSNAMES.EVENT.YEAR; year.innerHTML = evt.year; flag.className = UI.CLASSNAMES.EVENT.FLAG + ' flag-icon flag-icon-' + evt.icon; item.appendChild(year); item.appendChild(flag); eventsDiv.appendChild(item); }); }, buildSortPane: function buildSortPane(onClick) { var sortList = [{ text: 'Default', value: null }, { text: 'Goals Scored', value: UI.SORT_TYPES.GOALS }, { text: 'Country Name', value: UI.SORT_TYPES.COUNTRY }]; var sortDiv = document.querySelector('.sort'); while (sortDiv.hasChildNodes()) { sortDiv.firstChild.remove(); } sortList.forEach(function (sort) { var icon = document.createElement('img'); var item = document.createElement('div'); var text = document.createElement('div'); var tiny = document.createElement('div'); item.className = UI.CLASSNAMES.SORT.ITEM; item.addEventListener('click', onClick); item.setAttribute(UI.DATA.SORT, sort.value); item.setAttribute(UI.DATA.ROOT, true); text.className = UI.CLASSNAMES.SORT.TEXT; text.innerHTML = sort.text; tiny.className = UI.CLASSNAMES.SORT.TINY; tiny.innerHTML = 'sort'; icon.className = UI.CLASSNAMES.SORT.ICON; icon.src = 'res/sort.svg'; item.appendChild(icon); item.appendChild(text); item.appendChild(tiny); sortDiv.appendChild(item); }); }, buildSchemePane: function buildSchemePane(onClick) { var schemePane = document.querySelector('.schemes'); var scheme1 = document.createElement('div'); var scheme2 = document.createElement('div'); var scheme3 = document.createElement('div'); var scheme4 = document.createElement('div'); scheme1.className = UI.CLASSNAMES.SCHEME.SCHEME1; scheme1.setAttribute(UI.DATA.SCHEME, 1); scheme1.addEventListener('click', onClick); scheme1.setAttribute(UI.DATA.ROOT, true); scheme2.className = UI.CLASSNAMES.SCHEME.SCHEME2; scheme2.setAttribute(UI.DATA.SCHEME, 2); scheme2.addEventListener('click', onClick); scheme2.setAttribute(UI.DATA.ROOT, true); scheme3.className = UI.CLASSNAMES.SCHEME.SCHEME3; scheme3.setAttribute(UI.DATA.SCHEME, 3); scheme3.addEventListener('click', onClick); scheme3.setAttribute(UI.DATA.ROOT, true); scheme4.className = UI.CLASSNAMES.SCHEME.SCHEME4; scheme4.setAttribute(UI.DATA.SCHEME, 4); scheme4.addEventListener('click', onClick); scheme4.setAttribute(UI.DATA.ROOT, true); schemePane.appendChild(scheme1); schemePane.appendChild(scheme2); schemePane.appendChild(scheme3); schemePane.appendChild(scheme4); }, buildRoundsPane: function buildRoundsPane(onClick) { var roundsList = [{ text: 'Preliminaries', value: UI.ROUND_TYPES.PRELIM }, { text: 'Round of 16', value: UI.ROUND_TYPES.ROUNDOF16 }, { text: 'Quarterfinals', value: UI.ROUND_TYPES.QUARTERFINAL }, { text: 'Semifinals', value: UI.ROUND_TYPES.SEMIFINAL }, { text: 'Consolation', value: UI.ROUND_TYPES.CONSOLATION }, { text: 'Final', value: UI.ROUND_TYPES.FINAL }]; var roundsDiv = document.querySelector('.rounds'); while (roundsDiv.hasChildNodes()) { roundsDiv.firstChild.remove(); } roundsList.forEach(function (round) { var icon = document.createElement('img'); var item = document.createElement('div'); var text = document.createElement('div'); var tiny = document.createElement('div'); item.className = UI.CLASSNAMES.ROUND.ITEM; item.addEventListener('click', onClick); item.setAttribute(UI.DATA.ROUND, round.value); item.setAttribute(UI.DATA.ROOT, true); tiny.className = UI.CLASSNAMES.ROUND.TINY; tiny.innerHTML = 'hide'; text.className = UI.CLASSNAMES.ROUND.TEXT; text.innerHTML = round.text; icon.className = UI.CLASSNAMES.ROUND.ICON; icon.src = 'res/check.svg'; item.appendChild(icon); item.appendChild(text); item.appendChild(tiny); roundsDiv.appendChild(item); }); }, getRoundType: function getRoundType(name) { var name2 = name.match(/^Matchday/) ? 'First round' : name; switch (name2) { case 'Preliminary round': case 'First round': case 'First round replays': case 'Group-1 Play-off': case 'Group-2 Play-off': case 'Group-3 Play-off': case 'Group-4 Play-off': return UI.ROUND_TYPES.PRELIM; case 'Round of 16': return UI.ROUND_TYPES.ROUNDOF16; case 'Third place match': case 'Third-place match': case 'Match for third place': case 'Third place play-off': case 'Third-place play-off': return UI.ROUND_TYPES.CONSOLATION; case 'Quarterfinals': case 'Quarter-finals': case 'Quarter-finals replays': return UI.ROUND_TYPES.QUARTERFINAL; case 'Semifinals': case 'Semi-finals': return UI.ROUND_TYPES.SEMIFINAL; case 'Final': case 'Finals': case 'Final Round': return UI.ROUND_TYPES.FINAL; } console.error('Unknown round name: ' + name); return name; } }; exports.default = UI; /***/ }, /* 5 */ /***/ function(module, exports) { "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var hotfixes = { patch1934: function patch1934(data) { data.games.forEach(function (g) { if (g.t1 === 149 && g.t2 === 2 && g.rId === 13) { g.s1 = 4; g.s2 = 2; } if (g.t1 === 223 && g.t2 === 146 && g.rId === 13) { g.s1 = 2; g.s2 = 1; } if (g.t1 === 134 && g.t2 === 223 && g.rId === 18) { g.s1 = 2; g.s2 = 1; } if (g.t1 === 223 && g.t2 === 153 && g.rId === 14) { g.s1 = 3; g.s2 = 2; } if (g.t1 === 223 && g.t2 === 127 && g.rId === 16) { g.s1 = 3; g.s2 = 1; } if (g.t1 === 134 && g.t2 === 129 && g.rId === 14) { g.s1 = 1; g.s2 = 1; } if (g.t1 === 134 && g.t2 === 191 && g.rId === 13) { g.s1 = 7; g.s2 = 1; } if (g.t1 === 153 && g.t2 === 137 && g.rId === 13) { g.s1 = 3; g.s2 = 2; } if (g.t1 === 129 && g.t2 === 211 && g.rId === 13) { g.s1 = 3; g.s2 = 1; } if (g.t1 === 127 && g.t2 === 125 && g.rId === 13) { g.s1 = 5; g.s2 = 2; } if (g.t1 === 124 && g.t2 === 131 && g.rId === 13) { g.s1 = 3; g.s2 = 2; } if (g.t1 === 147 && g.t2 === 210 && g.rId === 13) { g.s1 = 3; g.s2 = 2; } if (g.t1 === 127 && g.t2 === 124 && g.rId === 17) { g.s1 = 3; g.s2 = 2; } if (g.t1 === 124 && g.t2 === 149 && g.rId === 14) { g.s1 = 2; g.s2 = 1; } }); return data; } }; exports.default = hotfixes; /***/ }, /* 6 */ /***/ function(module, exports) { // removed by extract-text-webpack-plugin /***/ }, /* 7 */ /***/ function(module, exports) { // removed by extract-text-webpack-plugin /***/ }, /* 8 */ /***/ function(module, exports) { // removed by extract-text-webpack-plugin /***/ }, /* 9 */ /***/ function(module, exports) { // removed by extract-text-webpack-plugin /***/ }, /* 10 */ /***/ function(module, exports) { // removed by extract-text-webpack-plugin /***/ }, /* 11 */ /***/ function(module, exports) { // removed by extract-text-webpack-plugin /***/ }, /* 12 */ /***/ function(module, exports) { // removed by extract-text-webpack-plugin /***/ }, /* 13 */ /***/ function(module, exports) { // removed by extract-text-webpack-plugin /***/ } /******/ ]);