Skip to content

Instantly share code, notes, and snippets.

@nyem69
Last active July 7, 2022 16:14
Show Gist options
  • Save nyem69/29896289104af5b5a5e27a61041756a9 to your computer and use it in GitHub Desktop.
Save nyem69/29896289104af5b5a5e27a61041756a9 to your computer and use it in GitHub Desktop.
multi sources
license: mit

d3.js table

  • load from selectable sources
  • select & sort columns
{
"rows": [
{
"alpha3": "BRN",
"name": "Brunei",
"alpha2": "BN",
"numeric": 99
},
{
"alpha3": "KHM",
"name": "Cambodia",
"alpha2": "KH",
"numeric": 116
},
{
"alpha3": "IDN",
"name": "Indonesia",
"alpha2": "ID",
"numeric": 360
},
{
"alpha3": "LAO",
"name": "Laos",
"alpha2": "LA",
"numeric": 418
},
{
"alpha3": "MYS",
"name": "Malaysia",
"alpha2": "MY",
"numeric": 458
},
{
"alpha3": "MMR",
"name": "Myanmar",
"alpha2": "MM",
"numeric": 458
},
{
"alpha3": "PHL",
"name": "Phillippines",
"alpha2": "PH",
"numeric": 608
},
{
"alpha3": "SGP",
"name": "Singapore",
"alpha2": "SG",
"numeric": 702
},
{
"alpha3": "THA",
"name": "Thailand",
"alpha2": "TH",
"numeric": 764
},
{
"alpha3": "TIL",
"name": "Timor Leste",
"alpha2": "TL",
"numeric": 603
},
{
"alpha3": "VNM",
"name": "Vietnam",
"alpha2": "VN",
"numeric": 704
}
]
}
[
{
"type": "json",
"url": "data.json",
"path": "rows"
},
{
"type": "json",
"url": "test.json"
},
{
"type": "json",
"url": "https://sandbox.darylphuah.com/invq1/data.php"
},
{
"type": "csv",
"url": "https://raw.githubusercontent.com/MoH-Malaysia/covid19-public/main/epidemic/deaths_state.csv"
},
{
"type": "csv",
"url": "https://raw.githubusercontent.com/MoH-Malaysia/covid19-public/main/epidemic/cases_age.csv"
}
]
<!DOCTYPE html>
<meta charset="utf-8">
<html>
<head>
<title>d3.js table</title>
<script type="text/javascript" src="//d3js.org/d3.v7.min.js"></script>
<style>
body {
font-family:sans-serif;
}
form, table, .error {
margin:12px;
}
</style>
</head>
<body>
<script>
d3.json('endpoints.json').then(endpoints=>{
d3.select('body')
.selectAll('select').data([endpoints])
.join('select')
.on('change',function(e,d){
let url = d3.select(this).property('value'),
endpoint = endpoints.find(d=>d.url==url);
console.log('url', url);
d3.selectAll('.error').data([])
.join('div');
d3.select('.root').remove();
window.setTimeout(()=>{
datasource(endpoint);
},300);
})
.selectAll('option').data(d=>d)
.join('option')
.html(d=>d.url);
datasource(
endpoints.find(d=>d.url==d3.select('select').property('value'))
);
});
function datasource(endpoint) {
console.log('endpoint', endpoint);
let links = [endpoint],
sources = links
.map(d=>d.type=='json' ? d3.json(d.url)
: d.type=='csv' ? d3.csv(d.url)
: d.type=='tsv' ? d3.tsv(d.url)
: d3.text(d.url)
);
console.log('links', links);
console.time('loading');
Promise.all(sources)
.then((raw)=>{
console.timeEnd('loading');
console.log('raw', raw);
let data = endpoint.path ? raw[0][endpoint.path] : raw[0];
console.log('data', data);
d3.select('body')
.selectAll('.root').data([data])
.join('div').attr('class','root')
.call(sel=>{
sel.selectAll('h1').data(d=>[d])
.join('h1')
.html('select & sort columns')
sel.selectAll('.rowsize').data(d=>[d])
.join('div').attr('class','rowsize')
.html(d=>'no of rows: '+ d3.format(',')(d.length) )
sel.selectAll('.colsize').data(d=>[d])
.join('div').attr('class','colsize')
.html(d=>'no of columns: '+ d3.format(',')( Object.entries(d[0]).length) )
sel.selectAll('form').data(d=>[d])
.join('form')
.style('display','flex')
.style('flex-wrap','wrap')
.style('justify-content','flex-start')
.selectAll('.inputs').data(d=>Object.entries(d[0]).map(d=>d[0]))
.join('div').attr('class','inputs')
.style('flex','1 1 auto')
.call(sel=>{
sel.selectAll('input').data(d=>[d])
.join('input')
.attr('type','checkbox')
.attr('checked', 'checked')
.on('input', function(e,d){
window.setTimeout(()=>{
d3.select('.root').call(renderTable);
},100);
})
.html(d=>d)
sel.selectAll('span').data(d=>[d])
.join('span')
.html(d=>d)
});
sel.call(renderTable)
function renderTable(sel) {
let columns = d3.selectAll('input:checked').data();
sel.selectAll('table').data(d=>[d])
.join('table')
.call(sel=>{
sel.selectAll('thead').data(d=>[d])
.join('thead')
.selectAll('tr').data(d=>[d])
.join('tr')
.selectAll('th').data(d=>{
return Object.entries(d[0])
.filter(d=>columns.includes(d[0]))
.map(d=>d[0])
})
.join('th')
.style('cursor','pointer')
.on('click', function(e,d){
let sel = d3.select(this),
order_descending = !sel.classed('order_descending');
sel.classed('order_descending', order_descending);
window.setTimeout(()=>{
d3.select(this.closest('table'))
.select('tbody')
.selectAll('tr')
.sort((a,b)=>order_descending
? d3.descending(a[d],b[d])
: d3.ascending(a[d],b[d])
)
},100);
})
.html(d=>d)
sel.selectAll('tbody').data(d=>[d]).join('tbody')
.selectAll('tr').data(d=>d).join('tr')
.selectAll('td').data(d=>{
return Object.entries(d)
.filter(d=>columns.includes(d[0]))
.map(d=>d[1])
}).join('td')
.call(sel=>{
sel.selectAll('img').data(d=>d&&d.toString().match(/^data:image/) ? [d] : [])
.join('img')
.attr('src', d=>d)
sel.selectAll('span').data(d=>!(d&&d.toString().match(/^data:image/)) ? [d] : [])
.join('span')
.html(d=>d)
})
});
}
});
})
.catch(function(err) {
d3.selectAll('.error').data([err])
.join('div').attr('class','error')
.style('color','red')
.html(d=>d.message)
});
}
</script>
</body>
[{"id":1,"name":"Jaxspan","city":"Busalangga","country":"Indonesia","description":"1E2","timezone":null,"image":null},
{"id":2,"name":"Flashset","city":"Velká nad Veličkou","country":"Czech Republic","description":"!@#$%^&*()","timezone":null,"image":null},
{"id":3,"name":"Skalith","city":"Skidal’","country":"Belarus","description":"test⁠test‫","timezone":"Europe/Minsk","image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKZSURBVDjLpVPdS5NRGP+97tVpw9nm5tpShiSsFhMMImiCQlAOk+im7Ma6UKK86g+oCMKwgi66CLuQ7rqqBRVRQS2aFIFeCA7xQjC3qbkcus/345zTc5aNoqALX3h4znPO+X085z1HEUJgJ18Ndvip84+uJBljezlnYMykMGCaMvRqNgw51t+cvBk78ReBBLeEIxCCQTAOwU1IMkFkgsh4JZuYeT55/J8OpAonkLaZrmzkspZAmUldhtXuxUTjbTy48Z62kFOTvBrm5fjd/oeqtOgJDvy3VxZ7h2vnDoFxgeR63nL/yfQtmv5JcPXlIubTOTCdw9RJgcLUWLXe77OBFKGbAgf9DnS1O3Dv8WdnpQXD0HDRHUexZmnbskEW9ap9We9q9mMkeRj2BgVLq1kEWh0wdANVAk6nzPTSNtCoAmUW2+chAYbJkUjmUSJXVQJdL1eAdY2eyomXS2UklvJIFRvhavFiNb2II5YSFL2A2LNJeFua8WVmA62qhp6eHps6Gf8G8XGC/gQHFxyszoFj/WcwdOEsCoUCksl9eP3qBbpqp3FqYBgN9fVYWVlBvXUab7/bryvyKgeDwcVwONxeLBbhdrvF+eFh5c7YGLa2toTP51NCoVAFlMlkkE6nYbfbMTo6img0uvnrKg9NTU19mpub++p0Ok05MTs7+yGfz5cGBwfR3d2NSCSCvr4+5HI5JtfknqamJqsqB4lEIk7paGdn5yVSGKPx7kAgoGWz2drx8XHYbLaKimzJYrFwuSbrVCpVVn5/jdTKgY6Ojqe9vb172trauKqqzrW1NSwsLMBqtcLv98Pj8dC7MDeWl5drYrHY6h8ExGzxer0hUoxS724CWeSLpd5HpKDL5YpSrtU0jZHTdXJ0+gdZxaA90+h/PAAAAABJRU5ErkJggg=="},
{"id":4,"name":"Plajo","city":"Cafarnaum","country":"Brazil","description":"社會科學院語學研究所","timezone":"America/Bahia","image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAF/SURBVDjLpZN/S8JgEMd9i1JURPSDIoIkS1FQI4iQgihStExrhGmydGObyZyyYRaybBRFQb/8vxcgBIF92275ApoHx7jjns/37p49LgCuQdzlXmEXd8RON1L4QPjM9NwbQtkXBE+eEWCe4D9+hC99j+XDO3j3b+FJ3CCcvu5a5wgQLXV6ceUT/3Xv3mWPAJayE5/fboAA4dw7nNjspmoDQqevlDAMA+12G61WC1/fP1BVFfV6HbIsUyyKIgRBAMdxVD8drf0BzIU5scl12QZY27ZM13VSbzQapFir1VCtViFJEsUsy6JQKCCfz1P9xFrFBlhX5cTGVyUb4D96oESz2SR1RVFIsVKpoFwuo1gsUpzNZsEwDDKZDNWPhQUb4D0wHHUwHCjZgKVEmxKaptHc/ZmtL8/zNLMVp1IpJJNJxGIxqh/yn9sAT1x31IHbx6L/FtiF3Sv6s+a2NMxE65jaUMwtX9CixiIiRkM8RoKc2XbRVGZhnrGcJcDAr3FQwC803UMOARws7QAAAABJRU5ErkJggg=="},
{"id":5,"name":"Jabbersphere","city":"Canhestros","country":"Portugal","description":"ثم نفس سقطت وبالتحديد،, جزيرتي باستخدام أن دنو. إذ هنا؟ الستار وتنصيب كان. أهّل ايطاليا، بريطانيا-فرنسا قد أخذ. سليمان، إتفاقية بين ما, يذكر الحدود أي بعد, معاملة بولندا، الإطلاق عل إيو.","timezone":"Europe/Lisbon","image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAE3SURBVDjLY/j//z8DJZhh6BgQMuWBQumq5xdaNr/84Nt1t4FkA5LnPd4A1Kjg1XaroWH98/9keyFx1sMLKfMePcAwoLy8/EBxcfGB3NzcA2lpaQfi4+MVwsPDD/j5+R1wdXU9AFJjX3GtIWzSvQvmOZcMMAwAag4Aav6QkpLyH6h5AkgMqLkBqHmBjY2NgnXRlQCn6msLTDIuCBgmX3DQiz+rgOEFoM0OQM3/IyMj/wM1F8BsBmHv1psH0uc+/J8868H/sIl3P+AMA6CzJwQGBv53c3P7D7RZgORoBNosANLs4uLy38jIaALJBoCcDbS5wNra+r+BgcF/BQUFB6IMANkMDbACEF9TU3MC0AX/JSQkPggKChoQNABq8wGQs4GaDYA2HwBqPgDUfICLi+sACwuLweDMTAA2jKFj5WHetwAAAABJRU5ErkJggg=="},
{"id":6,"name":"Reallinks","city":"Quatro Barras","country":"Brazil","description":null,"timezone":null,"image":null},
{"id":7,"name":"Zooxo","city":"Kolkhozobod","country":"Tajikistan","description":"../../../../../../../../../../../etc/passwd%00","timezone":null,"image":null},
{"id":8,"name":"Yadel","city":"Sangar Sarāy","country":"Afghanistan","description":"␢","timezone":null,"image":null},
{"id":9,"name":"Dynabox","city":"Tuchkovo","country":"Russia","description":"
test
","timezone":"Europe/Moscow","image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAMOSURBVDjLVZNNaBxlAIafb+ab2Z3N7Oxv/nYTEyv2LzQJpKBgrQqNUKmY4kUIXqUHT70p9iB48CKIiN5E0It6KFiwiv9FpAVpKUggNc3mZ7vpJpv9n93ZnZ35PNRI+8B7e9/n9gqlFAeIVUfPeN3zh0R0eVpYM1OanhvTCEY0f3tU79+ctnpfHM73fuQhxIHAWHnmkOGXPjgZyS09l5hnNv4YOdMhoQmigzqGt4nhfeub1fpnVsl/e+hMv/q/QKy+Me0EO5dfso/OvzB8grgV4HGXJC7jwAQ2oxxDuC36xZ+Rhe+v6iutZf2iqklReNe0tPSHZ2Nz84ujR7ht3iJKjcexiOIQI8SiixxcR7QtRORFlK7O9t0rlyy4KBEj5+YisVeez85wy9zGIUeGDDYhDhYOITYuoh2BvTJ68y7B0GnCym8XGq+KL2U0MrE8Z2SRVhqdPmlCsvgk8RlCkgAivRbUNKj1YPMeeu4wcnjRql7/+jVpyvxsPjbK3whi5LEAB0WWgBRgqwAaFah04X4V7puwdwddz+FXjJMSbXI8aSTYCgU2oKMwEdgCEoDhug/G5SjsmFDUoV+DXJ7BnpiUVCNBaJqEXfDVfwG6CjoKnF4crZGCVvNBug0IPXzPZOCnAunfk8W6ro7H2gK3A02gGoDeA1MDGx2nkYG6C24bvDaMSzq7ZfxBsiC7O+aNDaWOn0oLfl0HMwDlQRCAHYUkEGvFkLsp2G9Bo0n41AiNG6sMBvY1yZr6/JsV//XZZ3WZaEp2t6DvgWFA1QRHQbwjSDeTUGvCiSPU1ovU/typQPIrTV0yrrl3vE+/+8XlaCIgq8H+BtSLUN2C2ibsl8ArR+HYGE0rwvbvRTr96HsL6od1CUDDf+enK92JwT+982cWEswvRmiug6qAr0E4AV4uoFXosnV1g8bN5kcp7E8eOZOYKtmUqm/ZiDdfPhV3Zp6IM5k0SIUBstwmXKvCX5UdM6y9n2b34wV1IXxEcEBU3J4dprU0zODpjFBTIyoIxgjXxlB/PIl1eUmdLjzc/xceOVXddrB6BQAAAABJRU5ErkJggg=="},
{"id":10,"name":"Realblab","city":"Merke","country":"Kazakhstan","description":"`⁄€‹›fifl‡°·‚—±","timezone":"Asia/Almaty","image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKFSURBVDjLfZNNSFRRFMd/b96Mb0ZHEbFPTfqQNKpFkVZYFO1MSFpEkBAYhBht2rnKHIogCNq0qIX2QdHOKFHJooIKlDIrykxLM0VzbMYZx9F57360GC0lpgOHc7j3/H8czrnX0FqzYKefVOuDm8rpDr1CaoVUct4VQglKcvfQdP8W7WeeGQsaN4tMOAKlk8VSSYRS8/Gv27ZYLMG1BGALtAZHSmwp2BgJc/T7V2zpIOT8XcJJDXBsgUU6lsuLIwV7JyfZLvysjEawTB8+7cex/w8IfBrqZY1VyAphsn5mGrW6jLLxMOu8RXS/68GxRSAl4O6x5vrnn54GJkZCHJgxYMNhZG4JJeEwE/1B2jpbA28uva9frDG01nC7zIfLLEJjApyPumpqsq2TWVtqkY4b60cz9/peP6xaldNAsgTEXJATL4aTgJulI+QU52kM0Bq0Qi7fTcKdj4pNYooprHg/xlwo2bR0IDaGKxo+ngRcXHMIoe+o/bV+WXgEFQ0iopOo6SAqPoW2E6AVRlo6JgL3hxa8gwMPyPBUGX8e0tm8QhQtamdlUaKgEhkeR8bDqHgEPRNFGxpLhPC/fSyJiXqaxi8sHWJgdAC/Z4frc3uze+ojWtnouRl0Io4Ss7g9bvy9T0PYunxB/M8WqBuKkZ3V4ZoeQgsHhANKgjMf09wxro12pFwjAKa3QmYXJ1OPwGtGcPmykcpC5iwroKF4a2pA4y4f2jgg/Wvxfmsj81HjQPrLthuZwU4scxqRtQ6kUZEaINU+mZHv87SeI62r6zpCb+PqSLVnbLg8o6d1VM/OgqOXAJb8RiJTeeaX8UF+2ado/Nn+5/zyUDt1RZu9fe+vICldLPkNkalgK6EwqgIAAAAASUVORK5CYII="},
{"id":11,"name":"Linkbuzz","city":"Jutrosin","country":"Poland","description":"⁰⁴⁵","timezone":null,"image":null},
{"id":12,"name":"Lazzy","city":"Wŏnsan","country":"North Korea","description":"/dev/null; touch /tmp/blns.fail ; echo","timezone":"Asia/Pyongyang","image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALkSURBVDjLlZJrSJNRHMaFvtWXvvShT6ltb6Qz1EorZDZv5ZwNJ4UQQYJLnfZhmTJDtthUUpi2UcyELKI0l3My57zkEE2kmszyOi8jLyi75GVaXpr59L4vNBgV0oEH/ud/nud3zuGcAAAB/6OpVsI4pmN63z8O1lPz/QMG4ojNQISQwcM2A1Mxa4yEuy0B7Yog774AezvxhAzOT+gJD7nrz3nTWQxUB+0NKFnQlQS2/hNABpnTJmLLOXQb265u7Dg7sTYohquVg9GacBhkgbLf3r+F02d7zsM9XokfLhM81mtYeRcHpz4UjpZoODriYZIH2v4AkMGjpN4uWTKwMduI7YUX8Fi4WO3n4Kv5Atwdp+EynoKrOxmDVQyvDzBtJJhkcIm86557RArvmgXf7aVwD1yC08zGYls0ZurDsNDEgrOFPEXnZfSUBe/4ABM6Zrd7+Cp2HE+xOSfBpi0TWyMCuHo5mNZGYPxZKD5rCMw2nKCvsWRKQsu9wHkfYPg5Y3Hdnot1uxwfX7LwSRuCscYozJBydkTBomLA+vA4FuoZcHclYq4pBo13jzX5AB8eBddOGWOwMlmC0WY+9NJz0NxPR0WZFHV1dahQFKC7MgLDNQQqSwvpXnmZYkMkEhWy2exDNKWvKmhgqCESy5MSFN9kQ6VSweFwwG63o7e3F9UPCqFWCDFpG6N7/f39tIfH41X6XqGrPGiyVhoBSZEY1pERlEmzkMpLgVAohFqtRnFxMV3zUrjIyMgwUZCCgoI1vz+QeSV0qlQuowFvilhIjI+F2WyG1WpFX18fdDod4jnsPT6ff5ACyOXyLT9AWFhYbk72rQ0KcEeYjIQEDpKSkpCWlkaLquPiLu4JBIJOCpCdnb3qBzhJjtTU1AmlUrmqff1qs7m5GRqNBmKxGBKJhK6pnlarXaY8lNcPQBDEgdjY2HAul/slKyvrW15e3lZ+nmhXduOMR36d5ckX5eySvW1qjfJQ3l9oR6i5wBWqZAAAAABJRU5ErkJggg=="},
{"id":13,"name":"Zoombox","city":"Čoka","country":"Serbia","description":"0/0","timezone":"Europe/Belgrade","image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAG7SURBVDjLjZMxi1NREIXPC9HCKGGN2MgWdio2utZxA0KKVPkBwqaR/IS0dqYx/0LIVpsuBMFKA5LdQotF1kJWcMvYmBfemzPH4r4X3+pDMjDM3MvMx5m53Gg4HJ5L2pV0OhgMHmAL6/f779I03Sd5WgGw2+l0QPIetrQ4jvd7vR7iOL5fJXkymUweXb1+OzparCQATiCPDsAFkMDz5rUIANbr9dvRaPTMzN5HkgAAR4uVdmoVQKFJHhqlEC9+Og6eBkDRqnlCD8V5Q+4S4A6Yl4+zAeSFyiS7/wVhOWEzwuGHlW7eqEACPp0vgyoJJCA6zAE3hxlgJF4d3I0uKTABLIxwZ+dKUOECXXCGSApff6QlO2BBNpWdBXcHHSAdZAAkqZcABFwsHXQPxS44HSSyuz9K0lT/AopP9PJwKZpvJNMdbgp7oMOsBFA0M8EKkjc7yHIz/h+QJoRZddNoVLZMhxOXFXS73UWSJHskj6fT6RMASM1x9v0XUgdoDiNgRjjD03588wK3Xn+RmZ2h3W5rNpup2WxKErbxRqOh8XisWq2mqNVqHSdJ8pjkyXw+39vmN9br9c9m9pDkt98JJaJgEg+kbwAAAABJRU5ErkJggg=="},
{"id":14,"name":"Skajo","city":"Chernukha","country":"Russia","description":"`⁄€‹›fifl‡°·‚—±","timezone":null,"image":null},
{"id":15,"name":"Zava","city":"Manadhoo","country":"Maldives","description":"<>?:\"{}|_+","timezone":null,"image":null},
{"id":16,"name":"Katz","city":"Sapporo","country":"Japan","description":"١٢٣","timezone":"Asia/Tokyo","image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJ6SURBVDjLjZM7aJNhFIaf77/k/9OkJpBWjSWtaUEREVEXL6uoiIOLULCigyi4VRy8gHQo4uIsuIhOOuigCJKCLWpx8kLRQqFWhV4SQ1PTNGn+5Ls4RGlrq/jyLd9wHs57znvEvafvbmktTlZq2g8kq2VWfl0HfJe7Z4/v7gVwtBE9xw6kWn3fF0LY/EtVDUrWefxi/AzQAFQC7XmeL+4PzVFllpIYI73hO2G3iDSawnyYT+Mxmsw2HBJcOpFGaSF+Q52aBMuysQTUrCzplu94oW8UgxJSSRzPozOV5MtEhHioBa1XduUAaMCyBIHJE3Ln+LFYJFBValIiTRnP8ygHYRJhC4NZMZglgBAYqQlUnaoMWKwH1LREaUDUMVrhWAJjVk7VAjCmAfBppVSOYHAJtCKQCiFClEtRoqFN2LYFRqy2YEzDQtRuYyqbI+bP0BSx8IRkodBELpskGevEscSqzThmOcBdz6bwLibfDxKPTiOUwq220t7VQ9RPorT+MxZLHYzNnkNpjdKaLUGefakONDAxk+P5whW2f5xj6/gko7fnSTcnmjN38pcPZeRNxxiDAI40ggWAveMHlfIs/swILfvP0TOcYV39DVtOX8VLb2dxJGONvhroHzjolh2xRl5VOI4KxwlauhoJzDxgz6le/M9D8LKfpliczR0ddmHM9Dq+K4roemznhr0gxC+U+f0AeJvP4W9Mw9GLS977kthabHZCjnj4aHBiX02ZHcasfQOd0URz5cMzK/LkAsFilgpQmrdRNtPC/K1qmV53t/WFmiPXUgnpONYkpbzka85W9aq5/l8AgOHu9svlwvR5W4kOZZspA7cPZ+SNn/95GW/b/Tx4AAAAAElFTkSuQmCC"},
{"id":17,"name":"Skinder","city":"Kaltungo","country":"Nigeria","description":"̗̺͖̹̯͓Ṯ̤͍̥͇͈h̲́e͏͓̼̗̙̼̣͔ ͇̜̱̠͓͍ͅN͕͠e̗̱z̘̝̜̺͙p̤̺̹͍̯͚e̠̻̠͜r̨̤͍̺̖͔̖̖d̠̟̭̬̝͟i̦͖̩͓͔̤a̠̗̬͉̙n͚͜ ̻̞̰͚ͅh̵͉i̳̞v̢͇ḙ͎͟-҉̭̩̼͔m̤̭̫i͕͇̝̦n̗͙ḍ̟ ̯̲͕͞ǫ̟̯̰̲͙̻̝f ̪̰̰̗̖̭̘͘c̦͍̲̞͍̩̙ḥ͚a̮͎̟̙͜ơ̩̹͎s̤.̝̝ ҉Z̡̖̜͖̰̣͉̜a͖̰͙̬͡l̲̫̳͍̩g̡̟̼̱͚̞̬ͅo̗͜.̟","timezone":"Africa/Lagos","image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJjSURBVDjLpZNLbxJhFIb7A/wF/A5YunTDzuqmO+PdsDFx0dSVpJq4aIyQmUIU06a1gUqCJlXb1Ehb6QhiGgsdKFNAwAIOhWEcBobLUI5zPpgRLzsneRfz5bzPec93mQCAiXGdc4FJk0WTVdPUSNbRmunP+nHjGU3muy8lW+DjMR3ZTzMHiUMhziaF3b0U82InR0/76zaswdrfACPzWV+obI8fZjm+JoGs9EA9HRA1Wl0oVeoQ3mO5hc2sHWt1iA4wo5lNfZXbHRXwU7p9qMs9EDQ1O32yJitd2I3GZM/6EULMBIBzYWzsrJurUhcqP7rAi0OVxQ6U6h0DsrkV5m6v8DiOCQGWAPONxti6+eKDENxyJw3z5OwOXHclSBr8UrnvQPkjNHoRYA1/OWJwZoyKpgv3EZAgXYtCWwNsE0Ct0QOppcKJqMDi6msGvQiYih0kBNwsLEAAdryhAY5rbaJJ+zZcm2dJOvzvqqew4l0V0EsA+3GWALAAu+qRsbhQbcP5e0G4Sg8B+C+1erC49NwAWD98TjKi3IGGog47ksgs5E8UyFUUDfCeAHBj8WTSRREoj9cYweINZuhCqQaDAZAOGBeV5RUiNF+mWDJerz+ArU9JsLvfGptouuOr2oKhKCdIbeMkdKXLLeM40ZzRujufLHNX3OnhMeoXiXoVt6+9C8l8vUmSiE2VpMEx8PjQnC7WweHxyTPU+q+LNH6V57xR+7J/jYvEMlDgJbInOHMyL8BGKA5z1AI37Xzz91Uef0w3n+Vts0836EeuJYaadwuPnbTw0OFhZhwB+hKd+vdj+p/n/BMZPwxzcSL1lgAAAABJRU5ErkJggg=="},
{"id":18,"name":"Dynazzy","city":"Dimitrovgrad","country":"Serbia","description":"田中さんにあげて下さい","timezone":"Europe/Belgrade","image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAJUSURBVDjLpZNbaJJhHMZHUES51SoiqssWm5SMQekoFwvnYR4RP02dh/yMMhJpW3PaFOuzURfNi8GUDusw3QGDgl0k0Y3QcbjVqtsY3cVAu9uMwqf3ey+EwXBFFw/vgef58X94eesA1P2P1r284DDfDp/ajUhHPQZOCuBr3wXWrLv/VwAf64pFtM0YO3sUN1U7MOo+gr4OAdzSA2Cd1pENASGjGKO2JgyQ0A3TIRJuQJw5DF/HXhha91Q2BJw/3ojLaiHGr2gwwp6A/VgjrhqbYW0/CKZtJ0b6zmyvCRhU7ltdfH4XxfcT+P76AeYf9ePrs2tYmB1DVLP/56eHF7fUBCQcre9Kc5NYLmSx8nGKaJruS/NTuOMRFWpWaJP7tkql0ux4oBPlwj2sfnlKtfIhg8mBTojF4iei0+e2rQtQKpUNKpWKU6vVSKVS6OnpwcQQQ6XRaOidTqfj93HiFawBkOCmYDB4izfypmQyCavVimw2i0wmA5PJhOHhYXg8HnR3d1dkMtkggWyuAkjwEsuySKfTMBgMMBqNsNvtyOVyyOfzsFgs0Gq1sNlsiEajcLvdFblc3lcFLAw1/16eHUQ4HAbHcdTkcDhAJqPjMwwDr9cLl8sFv9+PYi6Kt/0t5SpgMdJSKb24Tg2JRIKCSCVq5iv19vYiEAggHo9T2I+XHOaCwkoV8PmxPzQfavrldDqh1+upkVcsFqP9+an4M+mPrq4uLERFZZLh1rzC0rSvnnRsIs/4ivRdIuOXFQoFePEhshYlEskbs9ks/Dbjq6/5G/9FfwAGy37p9rgYIQAAAABJRU5ErkJggg=="},
{"id":19,"name":"Bubblemix","city":"Gjøvik","country":"Norway","description":"ÅÍÎÏ˝ÓÔÒÚÆ☃","timezone":"Europe/Oslo","image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKtSURBVDjLpZPrT5JRHMfdetn/4evet3QrhGayZathrbwNppMU8ckFONEhoiGFeMNL4o3yBoi37lQQ89rYypaLIitTQVSUWKC9+Haeg5P5svXi+5zf7/t8f59zzrM9SQCS/kf0MeAKKfudodWe19vofhlE54sg2p4F0Px4A43T69BN/ET92A+oLd9QPexD5YMvUAx4F44Afc6dYCT6B/+iW73LsSOA6dUWNWEWAQNCoDcXMN0AOrKAtstAIx9o4AHqs0DVGZqVdH3AEaDLETwEkGGHHHheDjyVAk+KgclCwJ4HjF4DBgms8jTNFhnfJQDt5L7HTtCfD/SRoZ4coPs60EmG2wVAKwG0XKJZYbMnAWghH4s1H74JsCaG3X66jszEe8tsvLfPxdfgXhQ5+sUEQD+1hvDvAzpgYTW7CetsALb5AOxEUvtNlIwVodhaiOm3fnzdCOOqdi4B0I2vYo8AbPOb8Z0O18nF+AmYcQla39+DZExM+89re7iimUkA6mzfsRs5wMTiJmwzq2CaS6GuV8NkMqFGcweMWQJmVIKKGgX1tFodsuVdSElJOUkBqpEVhH7tY2phnQYMBgP8fj98Ph+cTifqG/QwtnfC6/VSz+1200xGRoaWApRDPgpo7JnAbZkCnqUl5DO5JHABIpEITU1NkMvltObz+VDXaiiEYZhdClCYP2GHAMoq6qDRaCggFoshjcuDw+GAx+OBy+WC1WoFj3cega0wBahUqigFlPctYzscw/1eMySSUgqQVSjB4XDA5XKRmZlJxdYcThqUVdUUUFBQEKKAMtNHd0nHUiRb/QgXs/KgvWuAecgCm80Go9EIqVQKmUxGa9YzD1qg1ekPyHWWj/2aycnJJ1JTU0+lp6evCIXCiFgsjhLtCwSCbKJzpA6zHvuOzbDZv+ti+O9p0FSiAAAAAElFTkSuQmCC"},
{"id":20,"name":"Jabbercube","city":"Semiluki","country":"Russia","description":"ثم نفس سقطت وبالتحديد،, جزيرتي باستخدام أن دنو. إذ هنا؟ الستار وتنصيب كان. أهّل ايطاليا، بريطانيا-فرنسا قد أخذ. سليمان، إتفاقية بين ما, يذكر الحدود أي بعد, معاملة بولندا، الإطلاق عل إيو.","timezone":"Europe/Moscow","image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAKoSURBVDjLpVM9TFNRFP7ubWvb1x+QQAtRIFaRmEakaYiGiJaAurioiYsxXXVxMHESB40TJI5OOihxq0sZTDBq6kANikAJNLSBAokQ29q/1x/69673PoSoMS6c5Oa8c979zv2+k3MIYwz7MYp9mvb3IBKJ9HB3T7BSFAXcW8Q3P/KvWOTHXC5XaBdDRDIajZ7jflyn03VYrVYQQnZ+cr9bTJjwyWQSxWJxg+dv9vX1fST81SEevLXZbKRWlLE++wlyfBO5+BZq5ZIK1BkkWGxtsNoPoePUaTCdHqurqxzGLpDl5eVZDu41m8148+QBVoLv/qv5aP8QBm/fR6lUEsznNF6vd2xtbU3vcDhw7IwHBTmrXqxXymC1GpdB0XnSDvfFw7C0n0XXwGUYG5pUOYlEQtJyBrnh4WFLuVwG7wEGvHeg0WjUIoVCAay+jVx4FJbWfjQVMjB1diEej6t3uIQkTafTU3a7HQaDQaUVi8WQSqWQzWZR4wwK3yZhanbD2uZCfuMDVhYDKrharQoWE9Tn8z3f1ScKCGr5fF59XU6uIL8+CUtzI+o5P2zOG6CJ99BpqcqCMxihCwsLOQEWIJE0mUzQ6/WglKC6NYmW7ivA9ldMv3wFc2MJJL2E2o95wS7l8XjyVJZlRXRTkiQIKep4Uop6JowDrAzLwSKUcgxgCur5zzjiuYvU/DhQyYyqd7mWkNPpvOX3+8O8H8hkMqCEoRD1obGjF0oxxLEluK91Q6ls8l5F0OI4D33osX5vEsnO6EmBQOCFVqu92lRbIhKR0XrcyF+d5lormHkd5kVOgGgaAOMlfHk2EmeKMkj+3sZgMNhO5x5u9Fx/Cg1d47OQ5ln2x/5pjN34vjiHyMQjH/nXOk+NuZOsrkhM4YsklmjvsD2PneWa+QnIJn6IP3aTNQAAAABJRU5ErkJggg=="},
{"id":21,"name":"Midel","city":"Pulap","country":"Micronesia","description":"𠜎𠜱𠝹𠱓𠱸𠲖𠳏","timezone":null,"image":null},
{"id":22,"name":"Pixonyx","city":"Idvor","country":"Serbia","description":null,"timezone":null,"image":null},
{"id":23,"name":"Tagchat","city":"Pingdingbu","country":"China","description":"","timezone":"Asia/Harbin","image":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAEYSURBVBgZBcHPio5hGAfg6/2+R980k6wmJgsJ5U/ZOAqbSc2GnXOwUg7BESgLUeIQ1GSjLFnMwsKGGg1qxJRmPM97/1zXFAAAAEADdlfZzr26miup2svnelq7d2aYgt3rebl585wN6+K3I1/9fJe7O/uIePP2SypJkiRJ0vMhr55FLCA3zgIAOK9uQ4MS361ZOSX+OrTvkgINSjS/HIvhjxNNFGgQsbSmabohKDNoUGLohsls6BaiQIMSs2FYmnXdUsygQYmumy3Nhi6igwalDEOJEjPKP7CA2aFNK8Bkyy3fdNCg7r9/fW3jgpVJbDmy5+PB2IYp4MXFelQ7izPrhkPHB+P5/PjhD5gCgCenx+VR/dODEwD+A3T7nqbxwf1HAAAAAElFTkSuQmCC"},
{"id":24,"name":"Thoughtbridge","city":"Tembau","country":"Indonesia","description":"1/0","timezone":null,"image":null},
{"id":25,"name":"Zoombox","city":"Villejuif","country":"France","description":"🐵 🙈 🙉 🙊","timezone":null,"image":null}]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment