iobroker.coronavirus-statistics
Version:
Adapter to show Global Corona Virus information and current reports
325 lines (314 loc) • 15.1 kB
HTML
<!--
ioBroker.vis coronavirus-statistics Widget-Set
version: "0.1.0"
-->
<style>
.covid-div {
display: inline-block;
height: calc(100% - 20px);
text-align: center;
}
.covid-div-title {
font-weight: bold;
white-space: nowrap;
text-align: center;
width: 100%;
}
.covid-div-img {
width: 100%;
height: calc(100% - 40px);
}
.covid-div-number {
font-size: smaller;
text-align: center;
width: 100%;
}
.covid-title {
font-weight: bold;
font-size: larger;
}
</style>
<script type="text/javascript">
$.extend(true, systemDictionary, {
"cases": {
"en": "Confirmed",
"de": "Bestätigt",
"ru": "Всего",
"pt": "Confirmado",
"nl": "Bevestigd",
"fr": "Confirmé",
"it": "Confermato",
"es": "Confirmado",
"pl": "Potwierdzony",
"zh-cn": "已确认"
},
"deaths": {
"en": "Deaths",
"de": "Todesfälle",
"ru": "Смертей",
"pt": "Mortes",
"nl": "Sterfgevallen",
"fr": "Des morts",
"it": "morti",
"es": "Muertes",
"pl": "Zgony",
"zh-cn": "死亡人数"
},
"recovered": {
"en": "Recovered",
"de": "wieder gesund",
"ru": "Здоровы",
"pt": "Recuperado",
"nl": "Hersteld",
"fr": "Rétabli",
"it": "recuperato",
"es": "Recuperado",
"pl": "Odzyskany",
"zh-cn": "已恢复"
},
"active": {
"en": "Current",
"de": "infiziert",
"ru": "Больны",
"pt": "Atual",
"nl": "Huidige",
"fr": "Courant",
"it": "attuale",
"es": "Actual",
"pl": "obecny",
"zh-cn": "当前"
},
"critical": {
"en": "Critical",
"de": "Kritisch",
"ru": "Критическое",
"pt": "Crítico",
"nl": "Kritiek",
"fr": "Critique",
"it": "critico",
"es": "Crítico",
"pl": "Krytyczny",
"zh-cn": "危急"
},
"todayCases": {
"en": "Today cases",
"de": "Heute infiziert",
"ru": "Сегодня",
"pt": "Casos de hoje",
"nl": "Gevallen van vandaag",
"fr": "Cas d'aujourd'hui",
"it": "Casi oggi",
"es": "Hoy casos",
"pl": "Dzisiaj przypadki",
"zh-cn": "今天的情况"
},
"todayDeaths": {
"en": "Today death",
"de": "Heute verstorben",
"ru": "Сегодня",
"pt": "Hoje a morte",
"nl": "Vandaag dood",
"fr": "Aujourd'hui la mort",
"it": "Oggi morte",
"es": "Hoy muerte",
"pl": "Dziś śmierć",
"zh-cn": "今天死亡"
},
"Worldwide": {
"en": "Worldwide",
"de": "Weltweit",
"ru": "По всему миру",
"pt": "No mundo todo",
"nl": "Wereldwijd",
"fr": "À l'échelle mondiale",
"it": "In tutto il mondo",
"es": "En todo el mundo",
"pl": "Na całym świecie",
"zh-cn": "全世界"
}
});
if (vis.editMode) {
// Add words for basic widgets
$.extend(true, systemDictionary, {
"country": {
"en": "Country",
"de": "Land",
"ru": "Страна",
"pt": "País",
"nl": "Land",
"fr": "Pays",
"it": "Nazione",
"es": "País",
"pl": "Kraj",
"zh-cn": "国家"
},
"showCountry": {
"en": "Show country",
"de": "Land anzeigen",
"ru": "Показать страну",
"pt": "Mostrar país",
"nl": "Land weergeven",
"fr": "Afficher le pays",
"it": "Mostra paese",
"es": "Mostrar país",
"pl": "Pokaż kraj",
"zh-cn": "显示国家"
},
"countryFontSize": {
"en": "Country",
"de": "Land",
"ru": "Страна",
"pt": "País",
"nl": "Land",
"fr": "Pays",
"it": "Nazione",
"es": "País",
"pl": "Kraj",
"zh-cn": "国家"
},
"typeFontSize": {
"en": "Type",
"de": "Bezeichnungen",
"ru": "Тип",
"pt": "Tipo",
"nl": "Type",
"fr": "Type",
"it": "genere",
"es": "Tipo",
"pl": "Rodzaj",
"zh-cn": "类型"
},
"numberFontSize": {
"en": "Numbers",
"de": "Zahlen",
"ru": "чисел",
"pt": "Números",
"nl": "Nummers",
"fr": "Nombres",
"it": "Numeri",
"es": "Números",
"pl": "Liczby",
"zh-cn": "号码"
},
"group_fonts": {
"en": "Font size",
"de": "Schriftgröße",
"ru": "Размер шрифта",
"pt": "Tamanho da fonte",
"nl": "Lettertypegrootte",
"fr": "Taille de police",
"it": "Dimensione del font",
"es": "Tamaño de fuente",
"pl": "Rozmiar czcionki",
"zh-cn": "字体大小"
}
});
}
vis.binds['coronavirus-statistics'] = {
version: "0.1.0",
showVersion: function () {
if (vis.binds['coronavirus-statistics'].version) {
console.log('Version coronavirus-statistics: ' + vis.binds['coronavirus-statistics'].version);
vis.binds['coronavirus-statistics'].version = null;
}
},
one: function (data, type, count, fontTitleSize, fontNumberSize) {
return '<div class="covid-div" style="width: ' + ((100 / count) - 0.5).toFixed(2) +'%">\n' +
' <div class="covid-div-title" style="' + (fontTitleSize ? 'font-size: ' + fontTitleSize : '') + '">' + _(type) + '</div>\n' +
' <img class="covid-div-img" src="widgets/coronavirus-statistics/img/' + type + '.svg" alt="' + type + '"/>\n' +
' <div class="covid-div-number" style="' + (fontNumberSize ? 'font-size: ' + fontNumberSize : '') + '">' + data[type].toLocaleString() + '</div>\n' +
' </div>';
},
init: function (wid, view, data, style) {
var $div = $('#' + wid);
if (!$div.length) {
setTimeout(function () {
vis.binds['coronavirus-statistics'].init(wid, view, data, style);
}, 100);
return;
}
var text = '<div class="vis-widget-body">';
if (data.showCountry !== 'false' && data.showCountry !== false) {
var countryFontSize = data.countryFontSize;
if (countryFontSize && countryFontSize.match(/\d$/)) {
countryFontSize += 'px';
}
text += '<div class="covid-title" style="' + (countryFontSize ? 'font-size: ' + countryFontSize : '') + '">' + _(!data.country || data.country === 'all' ? 'Worldwide' : data.country) + '</div>';
}
var fontTitleSize = data.typeFontSize;
if (fontTitleSize && fontTitleSize.match(/\d$/)) {
fontTitleSize += 'px';
}
var fontNumberSize = data.numberFontSize;
if (fontNumberSize && fontNumberSize.match(/\d$/)) {
fontNumberSize += 'px';
}
if (!data.country || data.country === 'all') {
// https://coronavirus-19-api.herokuapp.com/all
fetch('https://coronavirus-19-api.herokuapp.com/all')
.then((response) => {
return response.json();
})
.then((info) => {
var count = 0;
count += data.cases === true || data.cases === 'true' ? 1 : 0;
count += data.deaths === true || data.deaths === 'true' ? 1 : 0;
count += data.recovered === true || data.recovered === 'true' ? 1 : 0;
text += data.cases === true || data.cases === 'true' ? vis.binds['coronavirus-statistics'].one(info, 'cases', count, fontTitleSize, fontNumberSize) : '';
text += data.recovered === true || data.recovered === 'true' ? vis.binds['coronavirus-statistics'].one(info, 'recovered', count, fontTitleSize, fontNumberSize) : '';
text += data.deaths === true || data.deaths === 'true' ? vis.binds['coronavirus-statistics'].one(info, 'deaths', count, fontTitleSize, fontNumberSize) : '';
$div.html(text + '</div>');
});
} else {
// https://coronavirus-19-api.herokuapp.com/countries
fetch('https://coronavirus-19-api.herokuapp.com/countries')
.then((response) => {
return response.json();
})
.then((datas) => {
var count = 0;
count += data.cases === true || data.cases === 'true' ? 1 : 0;
count += data.todayCases === true || data.todayCases === 'true' ? 1 : 0;
count += data.recovered === true || data.recovered === 'true' ? 1 : 0;
count += data.deaths === true || data.deaths === 'true' ? 1 : 0;
count += data.todayDeaths === true || data.todayDeaths === 'true' ? 1 : 0;
count += data.active === true || data.active === 'true' ? 1 : 0;
count += data.critical === true || data.critical === 'true' ? 1 : 0;
var info = datas.find(it => it.country === data.country);
text += data.cases === true || data.cases === 'true' ? vis.binds['coronavirus-statistics'].one(info, 'cases', count, fontTitleSize, fontNumberSize) : '';
text += data.todayCases === true || data.todayCases === 'true' ? vis.binds['coronavirus-statistics'].one(info, 'todayCases', count, fontTitleSize, fontNumberSize) : '';
text += data.recovered === true || data.recovered === 'true' ? vis.binds['coronavirus-statistics'].one(info, 'recovered', count, fontTitleSize, fontNumberSize) : '';
text += data.active === true || data.active === 'true' ? vis.binds['coronavirus-statistics'].one(info, 'active', count, fontTitleSize, fontNumberSize) : '';
text += data.critical === true || data.critical === 'true' ? vis.binds['coronavirus-statistics'].one(info, 'critical', count, fontTitleSize, fontNumberSize) : '';
text += data.deaths === true || data.deaths === 'true' ? vis.binds['coronavirus-statistics'].one(info, 'deaths', count, fontTitleSize, fontNumberSize) : '';
text += data.todayDeaths === true || data.todayDeaths === 'true' ? vis.binds['coronavirus-statistics'].one(info, 'todayDeaths', count, fontTitleSize, fontNumberSize) : '';
$div.html(text + '</div>');
});
}
$div.data('destroy', function () {
var interval = $div.data('interval');
interval && clearInterval(interval);
});
// every 3 hours
$div.data('interval', setInterval(function () {
vis.binds['coronavirus-statistics'].init(wid, view, data, style);
}, 3 * 3600000));
},
};
vis.binds['coronavirus-statistics'].showVersion();
</script>
<script id="tplCovidInfo"
type="text/ejs"
class="vis-tpl"
data-vis-prev='<img src="widgets/coronavirus-statistics/img/Prev_tplCovidInfo.png"></img>'
data-vis-set="coronavirus-statistics"
data-vis-type="ctrl,color"
data-vis-name="Covid-19 info"
data-vis-attrs="country/select,all,Germany,Austria,Switzerland,Russia,China,Italy,Iran,S. Korea,Spain,France,USA,UK,Norway,Netherlands,Sweden,Belgium,Denmark,Japan,Diamond Princess,Malaysia,Qatar,Greece,Canada,Australia,Portugal,Finland,Czechia,Singapore,Slovenia,Bahrain,Israel,Estonia,Iceland,Hong Kong,Philippines,Romania,Ireland,Brazil,Poland,Indonesia,Thailand,Kuwait,Iraq,India,Egypt,Saudi Arabia,San Marino,Lebanon,UAE,Chile,Luxembourg,Taiwan,Vietnam,Slovakia,Pakistan,Bulgaria,South Africa,Brunei,Croatia,Algeria,Serbia,Argentina,Panama,Peru,Albania,Mexico,Palestine,Colombia,Georgia,Hungary,Latvia,Ecuador,Morocco,Belarus,Costa Rica,Armenia,Cyprus,Senegal,Bosnia and Herzegovina,Azerbaijan,Moldova,Oman,Malta,North Macedonia,Sri Lanka,Tunisia,Afghanistan,Maldives,Cambodia,Lithuania,Dominican Republic,Faeroe Islands,Macao,Bolivia,Martinique,Venezuela,Kazakhstan,Jordan,New Zealand,Jamaica,French Guiana,Liechtenstein,Paraguay,Reunion,Ghana,Turkey,Uruguay,Andorra,Bangladesh,Guyana,Ivory Coast,Cuba,Ethiopia,Puerto Rico,Ukraine,Burkina Faso,Channel Islands,French Polynesia,Guadeloupe,Guam,Honduras,Kenya,Monaco,Nigeria,Aruba,Cameroon,Curacao,DRC,Namibia,Saint Lucia,Saint Martin,Seychelles,Trinidad and Tobago,Sudan,Nepal,Antigua and Barbuda,Bhutan,Cayman Islands,CAR,Congo,Equatorial Guinea,Gabon,Gibraltar,Guatemala,Guinea,Vatican City,Mauritania,Mayotte,Mongolia,Rwanda,St. Barth,St. Vincent Grenadines,Suriname,Eswatini,Togo,U.S. Virgin Islands,Uzbekistan;"
data-vis-attrs0="showCountry[true]/checkbox;todayCases[true]/checkbox;recovered[true]/checkbox;active[true]/checkbox;critical[true]/checkbox;deaths[true]/checkbox;todayDeaths[true]/checkbox;"
data-vis-attrs1="group.fonts;countryFontSize[16]/slider,6,32,1;typeFontSize[14]/slider,6,32,1;numberFontSize[12]/slider,6,32,1;"
>
<div class="vis-widget <%== this.data.attr('class') %>" style="width: 400px; height: 110px; font-size: 14px" id="<%= this.data.attr('wid') %>">
<%= (el) -> vis.binds['coronavirus-statistics'].init(this.data.wid, this.view, this.data, this.style) %>
</div>
</script>