diff --git a/contributor_helper.py b/contributor_helper.py index ae429af..530c4a7 100644 --- a/contributor_helper.py +++ b/contributor_helper.py @@ -1,5 +1,6 @@ import util import math, random +import os import configparser import json import datetime @@ -8,6 +9,13 @@ class Contributor_helper: def __init__(self, serv_redis_db, cfg): self.serv_redis_db = serv_redis_db self.cfg = cfg + self.cfg_org_rank = configparser.ConfigParser() + self.cfg_org_rank.read(os.path.join(os.environ['DASH_CONFIG'], 'rankTitle.cfg')) + + self.org_rank_maxLevel = self.cfg_org_rank.getint('rankTitle', 'maxLevel') + self.org_rank = {} + for rank in range(1, self.org_rank_maxLevel+1): + self.org_rank[rank] = self.cfg_org_rank.get('rankTitle', str(rank)) self.misp_web_url = cfg.get('RedisGlobal', 'misp_web_url') self.MAX_NUMBER_OF_LAST_CONTRIBUTOR = cfg.getint('CONTRIB', 'max_number_of_last_contributor') @@ -187,6 +195,7 @@ class Contributor_helper: for d in range(15): dic = {} dic['rank'] = random.randint(1,self.levelMax) + dic['orgRank'] = random.randint(1,self.levelMax), dic['logo_path'] = 'logo' dic['org'] = 'Org'+str(d) dic['pnts'] = random.randint(1,2**self.levelMax) @@ -206,36 +215,42 @@ class Contributor_helper: data2 = [ { 'rank': random.randint(1,self.levelMax), + 'orgRank': random.randint(1,self.levelMax), 'logo_path': self.getOrgLogoFromRedis('MISP'), 'org': 'MISP', 'pnts': random.randint(1,2**self.levelMax) }, { 'rank': random.randint(1,self.levelMax), + 'orgRank': random.randint(1,self.levelMax), 'logo_path': 'logo1', 'org': 'CIRCL', 'pnts': random.randint(1,2**self.levelMax) }, { 'rank': random.randint(1,self.levelMax), + 'orgRank': random.randint(1,self.levelMax), 'logo_path': 'logo2', 'org': 'CASES', 'pnts': random.randint(1,2**self.levelMax) }, { 'rank': random.randint(1,self.levelMax), + 'orgRank': random.randint(1,self.levelMax), 'logo_path': 'logo3', 'org': 'SMILE', 'pnts': random.randint(1,2**self.levelMax) }, { 'rank': random.randint(1,self.levelMax), + 'orgRank': random.randint(1,self.levelMax), 'logo_path': 'logo4', 'org': 'ORG4', 'pnts': random.randint(1,2**self.levelMax) }, { 'rank': random.randint(1,self.levelMax), + 'orgRank': random.randint(1,self.levelMax), 'logo_path': 'logo5', 'org': 'ORG5', 'pnts': random.randint(1,2**self.levelMax) @@ -248,6 +263,7 @@ class Contributor_helper: data2 = [ { 'rank': random.randint(1,self.levelMax), + 'orgRank': random.randint(1,self.levelMax), 'logo_path': self.getOrgLogoFromRedis('MISP'), 'org': 'MISP', 'pnts': random.randint(1,2**self.levelMax), @@ -255,6 +271,7 @@ class Contributor_helper: }, { 'rank': random.randint(1,self.levelMax), + 'orgRank': random.randint(1,self.levelMax), 'logo_path': 'logo1', 'org': 'CIRCL', 'pnts': random.randint(1,2**self.levelMax), @@ -262,6 +279,7 @@ class Contributor_helper: }, { 'rank': random.randint(1,self.levelMax), + 'orgRank': random.randint(1,self.levelMax), 'logo_path': 'logo2', 'org': 'CASES', 'pnts': random.randint(1,2**self.levelMax), @@ -269,6 +287,7 @@ class Contributor_helper: }, { 'rank': random.randint(1,self.levelMax), + 'orgRank': random.randint(1,self.levelMax), 'logo_path': 'logo3', 'org': 'SMILE', 'pnts': random.randint(1,2**self.levelMax), @@ -276,6 +295,7 @@ class Contributor_helper: }, { 'rank': random.randint(1,self.levelMax), + 'orgRank': random.randint(1,self.levelMax), 'logo_path': 'logo4', 'org': 'ORG4', 'pnts': random.randint(1,2**self.levelMax), @@ -283,6 +303,7 @@ class Contributor_helper: }, { 'rank': random.randint(1,self.levelMax), + 'orgRank': random.randint(1,self.levelMax), 'logo_path': 'logo5', 'org': 'ORG5', 'pnts': random.randint(1,2**self.levelMax), diff --git a/server.py b/server.py index a743389..00a867d 100755 --- a/server.py +++ b/server.py @@ -151,6 +151,10 @@ def contrib(): categ_list = contributor_helper.categories_in_datatable categ_list_str = [ s[0].upper() + s[1:].replace('_', ' ') for s in contributor_helper.categories_in_datatable] categ_list_points = [contributor_helper.DICO_PNTS_REWARD[categ] for categ in categ_list] + org_rank = contributor_helper.org_rank + org_rank_list = [[rank, title] for rank, title in org_rank.items()] + org_rank_list.sort(key=lambda x: x[0]) + currOrg = request.args.get('org') if currOrg is None: currOrg = "" @@ -162,6 +166,8 @@ def contrib(): categ_list=json.dumps(categ_list), categ_list_str=categ_list_str, categ_list_points=categ_list_points, + org_rank_json=json.dumps(org_rank), + org_rank_list=org_rank_list, min_between_reload=cfg.getint('CONTRIB', 'min_between_reload') ) diff --git a/static/css/ranking.css b/static/css/ranking.css index c517c11..f29aac4 100644 --- a/static/css/ranking.css +++ b/static/css/ranking.css @@ -9,8 +9,13 @@ bottom: 18%; } +.orgRankClass { + top: 6px; + position: relative; +} + .questionBadgeDiv { - float: right; + float: left; width: 40px; height: 40px; background-color: #286090; @@ -19,12 +24,12 @@ color: white; top: 4px; position: relative; - left: 78%; + left: 1%; } .infoBlue { - background-color: #719bc0 !important; - color: white; + background-color: #d1d1d1 !important; + color: black; } .centerInBtn { @@ -60,9 +65,15 @@ margin-bottom: 0px; } -.table > tbody > tr > td.centerCellPic { +.table > tbody > tr > td.centerCellPicOrgLogo { padding: 5px; - text-align: center; + text-align: right; + min-width: 45px; +} + +.table > tbody > tr > td.centerCellPicOrgRank { + padding: 0px; + text-align: left; min-width: 45px; } diff --git a/static/js/contrib.js b/static/js/contrib.js index c9eb30b..67935f8 100644 --- a/static/js/contrib.js +++ b/static/js/contrib.js @@ -49,13 +49,17 @@ var optionDatatable_light = { "infoEmpty": "", }, "info": false, + "columnDefs": [ + { className: "centerCellPicOrgRank", "targets": [ 2 ] }, + { className: "centerCellPicOrgLogo", "targets": [ 3 ] } + ] }; var optionDatatable_top = jQuery.extend({}, optionDatatable_light) var optionDatatable_last = jQuery.extend({}, optionDatatable_light) optionDatatable_last.columnDefs = [ - { 'orderData':[4], 'targets': [0] }, + { 'orderData':[5], 'targets': [0] }, { - 'targets': [4], + 'targets': [5], 'visible': false, 'searchable': false }, @@ -71,6 +75,10 @@ var optionDatatable_Categ = { scrollCollapse: true, paging: false, "info": false, + "columnDefs": [ + { className: "centerCellPicOrgRank", "targets": [ 2 ] }, + { className: "centerCellPicOrgLogo", "targets": [ 3 ], 'searchable': false, 'sortable': false } + ] }; var typeaheadOption = { @@ -90,11 +98,11 @@ var typeaheadOption = { } /* FUNCTIONS */ -function getRankIcon(rank, size, header) { +function getMonthlyRankIcon(rank, size, header) { if (rank > 16) { - rankLogoPath = url_baseRankLogo+0+'.svg'; + var rankLogoPath = url_baseRankMonthlyLogo+0+'.svg'; } else { - rankLogoPath = url_baseRankLogo+rank+'.svg'; + var rankLogoPath = url_baseRankMonthlyLogo+rank+'.svg'; } var img = document.createElement('img'); img.src = rankLogoPath; @@ -118,13 +126,29 @@ function getRankIcon(rank, size, header) { return img.outerHTML; } -function createImg(source) { +function getOrgRankIcon(rank, size) { + if (rank > 16) { + var rankLogoPath = url_baseOrgRankLogo+0+'.svg'; + } else { + var rankLogoPath = url_baseOrgRankLogo+rank+'.svg'; + } + var obj = document.createElement('img'); + obj.height = size/2; + obj.width = size; + obj.src = rankLogoPath; + obj.type = "image/svg" + obj.title = org_rank_obj[rank]; + obj.classList.add('orgRankClass') + return obj.outerHTML; +} + +function createImg(source, size, return_obj) { var obj = document.createElement('object'); - obj.height = 22; - obj.width = 22; + obj.height = size; + obj.width = size; obj.style.margin = 'auto'; obj.data = source; - obj.type = "image/jpg" + obj.type = "image/png" return obj.outerHTML; } @@ -171,7 +195,7 @@ function generateRankingSheet(rank, rankDec, stepPnt, pnt, Rpnt) { for (var i=1; i<=maxRank; i++) { var tr = document.createElement('tr'); var td1 = document.createElement('td'); - td1.innerHTML = getRankIcon(i, 40); + td1.innerHTML = getMonthlyRankIcon(i, 40); td1.style.padding = "2px"; var td2 = document.createElement('td'); td2.innerHTML = Math.floor(Math.pow(rankMultiplier, i)); @@ -215,13 +239,15 @@ function generateRankingSheet(rank, rankDec, stepPnt, pnt, Rpnt) { function addToTableFromJson(datatable, url) { $.getJSON( url, function( data ) { + console.log(data); for (i in data) { var row = data[i]; i = parseInt(i); var to_add = [ row.pnts, - getRankIcon(row.rank), - createImg(row.logo_path), + getMonthlyRankIcon(row.rank), + getOrgRankIcon(row.orgRank, 60), + createImg(row.logo_path, 32), row.org ]; datatable.row.add(to_add); @@ -244,8 +270,9 @@ function addLastFromJson(datatable, url) { function addLastContributor(datatable, data, update) { var to_add = [ data.pnts, - getRankIcon(data.rank), - createImg(data.logo_path), + getMonthlyRankIcon(data.rank), + getOrgRankIcon(data.orgRank, 60), + createImg(data.logo_path, 32), data.org, data.epoch ]; @@ -270,8 +297,8 @@ function updateProgressHeader(org) { $('#orgText').text(data.org); var popoverRank = $('#btnCurrRank').data('bs.popover'); popoverRank.options.content = generateRankingSheet(rank, rankDec, data.stepPts, data.points, data.remainingPts); - $('#orgRankDiv').html(getRankIcon(rank, 40, true)); - $('#orgNextRankDiv').html(getRankIcon(rank+1, 40, true)); + $('#orgRankDiv').html(getMonthlyRankIcon(rank, 40, true)); + $('#orgNextRankDiv').html(getMonthlyRankIcon(rank+1, 40, true)); if (data.rank > 16){ $('#progressBarDiv').width(1*150); //150 is empty bar width } else { @@ -350,7 +377,8 @@ $(document).ready(function() { i = parseInt(i); var to_add = [ row.pnts, - getRankIcon(row.rank), + getMonthlyRankIcon(row.rank), + getOrgRankIcon(row.orgRank, 44), row.logo_path, row.org, ]; diff --git a/static/pics/rankingMISP/0.svg b/static/pics/rankingMISPMonthly/0.svg similarity index 100% rename from static/pics/rankingMISP/0.svg rename to static/pics/rankingMISPMonthly/0.svg diff --git a/static/pics/rankingMISP/1.svg b/static/pics/rankingMISPMonthly/1.svg similarity index 100% rename from static/pics/rankingMISP/1.svg rename to static/pics/rankingMISPMonthly/1.svg diff --git a/static/pics/rankingMISP/10.svg b/static/pics/rankingMISPMonthly/10.svg similarity index 100% rename from static/pics/rankingMISP/10.svg rename to static/pics/rankingMISPMonthly/10.svg diff --git a/static/pics/rankingMISP/11.svg b/static/pics/rankingMISPMonthly/11.svg similarity index 100% rename from static/pics/rankingMISP/11.svg rename to static/pics/rankingMISPMonthly/11.svg diff --git a/static/pics/rankingMISP/12.svg b/static/pics/rankingMISPMonthly/12.svg similarity index 100% rename from static/pics/rankingMISP/12.svg rename to static/pics/rankingMISPMonthly/12.svg diff --git a/static/pics/rankingMISP/13.svg b/static/pics/rankingMISPMonthly/13.svg similarity index 100% rename from static/pics/rankingMISP/13.svg rename to static/pics/rankingMISPMonthly/13.svg diff --git a/static/pics/rankingMISP/14.svg b/static/pics/rankingMISPMonthly/14.svg similarity index 100% rename from static/pics/rankingMISP/14.svg rename to static/pics/rankingMISPMonthly/14.svg diff --git a/static/pics/rankingMISP/15.svg b/static/pics/rankingMISPMonthly/15.svg similarity index 100% rename from static/pics/rankingMISP/15.svg rename to static/pics/rankingMISPMonthly/15.svg diff --git a/static/pics/rankingMISP/16.svg b/static/pics/rankingMISPMonthly/16.svg similarity index 100% rename from static/pics/rankingMISP/16.svg rename to static/pics/rankingMISPMonthly/16.svg diff --git a/static/pics/rankingMISP/2.svg b/static/pics/rankingMISPMonthly/2.svg similarity index 100% rename from static/pics/rankingMISP/2.svg rename to static/pics/rankingMISPMonthly/2.svg diff --git a/static/pics/rankingMISP/3.svg b/static/pics/rankingMISPMonthly/3.svg similarity index 100% rename from static/pics/rankingMISP/3.svg rename to static/pics/rankingMISPMonthly/3.svg diff --git a/static/pics/rankingMISP/4.svg b/static/pics/rankingMISPMonthly/4.svg similarity index 100% rename from static/pics/rankingMISP/4.svg rename to static/pics/rankingMISPMonthly/4.svg diff --git a/static/pics/rankingMISP/5.svg b/static/pics/rankingMISPMonthly/5.svg similarity index 100% rename from static/pics/rankingMISP/5.svg rename to static/pics/rankingMISPMonthly/5.svg diff --git a/static/pics/rankingMISP/6.svg b/static/pics/rankingMISPMonthly/6.svg similarity index 100% rename from static/pics/rankingMISP/6.svg rename to static/pics/rankingMISPMonthly/6.svg diff --git a/static/pics/rankingMISP/7.svg b/static/pics/rankingMISPMonthly/7.svg similarity index 100% rename from static/pics/rankingMISP/7.svg rename to static/pics/rankingMISPMonthly/7.svg diff --git a/static/pics/rankingMISP/8.svg b/static/pics/rankingMISPMonthly/8.svg similarity index 100% rename from static/pics/rankingMISP/8.svg rename to static/pics/rankingMISPMonthly/8.svg diff --git a/static/pics/rankingMISP/9.svg b/static/pics/rankingMISPMonthly/9.svg similarity index 100% rename from static/pics/rankingMISP/9.svg rename to static/pics/rankingMISPMonthly/9.svg diff --git a/static/pics/rankingMISP/png/0.png b/static/pics/rankingMISPMonthly/png/0.png similarity index 100% rename from static/pics/rankingMISP/png/0.png rename to static/pics/rankingMISPMonthly/png/0.png diff --git a/static/pics/rankingMISP/png/1.png b/static/pics/rankingMISPMonthly/png/1.png similarity index 100% rename from static/pics/rankingMISP/png/1.png rename to static/pics/rankingMISPMonthly/png/1.png diff --git a/static/pics/rankingMISP/png/10.png b/static/pics/rankingMISPMonthly/png/10.png similarity index 100% rename from static/pics/rankingMISP/png/10.png rename to static/pics/rankingMISPMonthly/png/10.png diff --git a/static/pics/rankingMISP/png/11.png b/static/pics/rankingMISPMonthly/png/11.png similarity index 100% rename from static/pics/rankingMISP/png/11.png rename to static/pics/rankingMISPMonthly/png/11.png diff --git a/static/pics/rankingMISP/png/12.png b/static/pics/rankingMISPMonthly/png/12.png similarity index 100% rename from static/pics/rankingMISP/png/12.png rename to static/pics/rankingMISPMonthly/png/12.png diff --git a/static/pics/rankingMISP/png/13.png b/static/pics/rankingMISPMonthly/png/13.png similarity index 100% rename from static/pics/rankingMISP/png/13.png rename to static/pics/rankingMISPMonthly/png/13.png diff --git a/static/pics/rankingMISP/png/14.png b/static/pics/rankingMISPMonthly/png/14.png similarity index 100% rename from static/pics/rankingMISP/png/14.png rename to static/pics/rankingMISPMonthly/png/14.png diff --git a/static/pics/rankingMISP/png/15.png b/static/pics/rankingMISPMonthly/png/15.png similarity index 100% rename from static/pics/rankingMISP/png/15.png rename to static/pics/rankingMISPMonthly/png/15.png diff --git a/static/pics/rankingMISP/png/16.png b/static/pics/rankingMISPMonthly/png/16.png similarity index 100% rename from static/pics/rankingMISP/png/16.png rename to static/pics/rankingMISPMonthly/png/16.png diff --git a/static/pics/rankingMISP/png/2.png b/static/pics/rankingMISPMonthly/png/2.png similarity index 100% rename from static/pics/rankingMISP/png/2.png rename to static/pics/rankingMISPMonthly/png/2.png diff --git a/static/pics/rankingMISP/png/3.png b/static/pics/rankingMISPMonthly/png/3.png similarity index 100% rename from static/pics/rankingMISP/png/3.png rename to static/pics/rankingMISPMonthly/png/3.png diff --git a/static/pics/rankingMISP/png/4.png b/static/pics/rankingMISPMonthly/png/4.png similarity index 100% rename from static/pics/rankingMISP/png/4.png rename to static/pics/rankingMISPMonthly/png/4.png diff --git a/static/pics/rankingMISP/png/5.png b/static/pics/rankingMISPMonthly/png/5.png similarity index 100% rename from static/pics/rankingMISP/png/5.png rename to static/pics/rankingMISPMonthly/png/5.png diff --git a/static/pics/rankingMISP/png/6.png b/static/pics/rankingMISPMonthly/png/6.png similarity index 100% rename from static/pics/rankingMISP/png/6.png rename to static/pics/rankingMISPMonthly/png/6.png diff --git a/static/pics/rankingMISP/png/7.png b/static/pics/rankingMISPMonthly/png/7.png similarity index 100% rename from static/pics/rankingMISP/png/7.png rename to static/pics/rankingMISPMonthly/png/7.png diff --git a/static/pics/rankingMISP/png/8.png b/static/pics/rankingMISPMonthly/png/8.png similarity index 100% rename from static/pics/rankingMISP/png/8.png rename to static/pics/rankingMISPMonthly/png/8.png diff --git a/static/pics/rankingMISP/png/9.png b/static/pics/rankingMISPMonthly/png/9.png similarity index 100% rename from static/pics/rankingMISP/png/9.png rename to static/pics/rankingMISPMonthly/png/9.png diff --git a/static/pics/rankingMISP/png/?.png b/static/pics/rankingMISPMonthly/png/?.png similarity index 100% rename from static/pics/rankingMISP/png/?.png rename to static/pics/rankingMISPMonthly/png/?.png diff --git a/static/pics/rankingMISPOrg/1.svg b/static/pics/rankingMISPOrg/1.svg new file mode 100644 index 0000000..93003c5 --- /dev/null +++ b/static/pics/rankingMISPOrg/1.svg @@ -0,0 +1,83 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/10.svg b/static/pics/rankingMISPOrg/10.svg new file mode 100644 index 0000000..d052c96 --- /dev/null +++ b/static/pics/rankingMISPOrg/10.svg @@ -0,0 +1,102 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/11.svg b/static/pics/rankingMISPOrg/11.svg new file mode 100644 index 0000000..04b95fc --- /dev/null +++ b/static/pics/rankingMISPOrg/11.svg @@ -0,0 +1,102 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/12.svg b/static/pics/rankingMISPOrg/12.svg new file mode 100644 index 0000000..fd021d1 --- /dev/null +++ b/static/pics/rankingMISPOrg/12.svg @@ -0,0 +1,102 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/13.svg b/static/pics/rankingMISPOrg/13.svg new file mode 100644 index 0000000..69c7b7d --- /dev/null +++ b/static/pics/rankingMISPOrg/13.svg @@ -0,0 +1,102 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/14.svg b/static/pics/rankingMISPOrg/14.svg new file mode 100644 index 0000000..3051dc1 --- /dev/null +++ b/static/pics/rankingMISPOrg/14.svg @@ -0,0 +1,102 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/15.svg b/static/pics/rankingMISPOrg/15.svg new file mode 100644 index 0000000..f2782eb --- /dev/null +++ b/static/pics/rankingMISPOrg/15.svg @@ -0,0 +1,204 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/16.svg b/static/pics/rankingMISPOrg/16.svg new file mode 100644 index 0000000..4ace1cb --- /dev/null +++ b/static/pics/rankingMISPOrg/16.svg @@ -0,0 +1,87 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/2.svg b/static/pics/rankingMISPOrg/2.svg new file mode 100644 index 0000000..46c1436 --- /dev/null +++ b/static/pics/rankingMISPOrg/2.svg @@ -0,0 +1,93 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/3.svg b/static/pics/rankingMISPOrg/3.svg new file mode 100644 index 0000000..ffdff77 --- /dev/null +++ b/static/pics/rankingMISPOrg/3.svg @@ -0,0 +1,103 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/4.svg b/static/pics/rankingMISPOrg/4.svg new file mode 100644 index 0000000..41b5ac2 --- /dev/null +++ b/static/pics/rankingMISPOrg/4.svg @@ -0,0 +1,103 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/5.svg b/static/pics/rankingMISPOrg/5.svg new file mode 100644 index 0000000..cdb7d84 --- /dev/null +++ b/static/pics/rankingMISPOrg/5.svg @@ -0,0 +1,113 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/6.svg b/static/pics/rankingMISPOrg/6.svg new file mode 100644 index 0000000..a8fb9a1 --- /dev/null +++ b/static/pics/rankingMISPOrg/6.svg @@ -0,0 +1,113 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/7.svg b/static/pics/rankingMISPOrg/7.svg new file mode 100644 index 0000000..c6fd30b --- /dev/null +++ b/static/pics/rankingMISPOrg/7.svg @@ -0,0 +1,123 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/8.svg b/static/pics/rankingMISPOrg/8.svg new file mode 100644 index 0000000..221c803 --- /dev/null +++ b/static/pics/rankingMISPOrg/8.svg @@ -0,0 +1,123 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/pics/rankingMISPOrg/9.svg b/static/pics/rankingMISPOrg/9.svg new file mode 100644 index 0000000..585c48b --- /dev/null +++ b/static/pics/rankingMISPOrg/9.svg @@ -0,0 +1,123 @@ + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + diff --git a/templates/contrib.html b/templates/contrib.html index 6fa8de0..dbc3c5a 100644 --- a/templates/contrib.html +++ b/templates/contrib.html @@ -46,7 +46,7 @@