325 lines
4.8 KiB
JavaScript
325 lines
4.8 KiB
JavaScript
|
var continents = {
|
||
|
XAD:"EEE",
|
||
|
ALA:"EEE",
|
||
|
ALB:"EEE",
|
||
|
AND:"EEE",
|
||
|
AUT:"EEE",
|
||
|
BLR:"EEE",
|
||
|
BEL:"EEE",
|
||
|
BIH:"EEE",
|
||
|
BGR:"EEE",
|
||
|
HRV:"EEE",
|
||
|
CYP:"EEE",
|
||
|
CZE:"EEE",
|
||
|
DNK:"EEE",
|
||
|
EST:"EEE",
|
||
|
FRO:"EEE",
|
||
|
FIN:"EEE",
|
||
|
FRA:"EEE",
|
||
|
DEU:"EEE",
|
||
|
GIB:"EEE",
|
||
|
GRC:"EEE",
|
||
|
GGY:"EEE",
|
||
|
HUN:"EEE",
|
||
|
ISL:"EEE",
|
||
|
IRL:"EEE",
|
||
|
IMN:"EEE",
|
||
|
ITA:"EEE",
|
||
|
JEY:"EEE",
|
||
|
KAZ:"EEE",
|
||
|
XKO:"EEE",
|
||
|
LVA:"EEE",
|
||
|
LIE:"EEE",
|
||
|
LTU:"EEE",
|
||
|
LUX:"EEE",
|
||
|
MLT:"EEE",
|
||
|
MDA:"EEE",
|
||
|
MCO:"EEE",
|
||
|
MNE:"EEE",
|
||
|
NLD:"EEE",
|
||
|
MKD:"EEE",
|
||
|
NOR:"EEE",
|
||
|
POL:"EEE",
|
||
|
PRT:"EEE",
|
||
|
ROU:"EEE",
|
||
|
RUS:"EEE",
|
||
|
SMR:"EEE",
|
||
|
SRB:"EEE",
|
||
|
SVK:"EEE",
|
||
|
SVN:"EEE",
|
||
|
ESP:"EEE",
|
||
|
SJM:"EEE",
|
||
|
SWE:"EEE",
|
||
|
CHE:"EEE",
|
||
|
UKR:"EEE",
|
||
|
GBR:"EEE",
|
||
|
VAT:"EEE",
|
||
|
|
||
|
AFG:"ABB",
|
||
|
ARM:"ABB",
|
||
|
AZE:"ABB",
|
||
|
BHR:"ABB",
|
||
|
BGD:"ABB",
|
||
|
BTN:"ABB",
|
||
|
IOT:"ABB",
|
||
|
BRN:"ABB",
|
||
|
KHM:"ABB",
|
||
|
CCK:"ABB",
|
||
|
CHN:"ABB",
|
||
|
CXR:"ABB",
|
||
|
GEO:"ABB",
|
||
|
HKG:"ABB",
|
||
|
IND:"ABB",
|
||
|
IDN:"ABB",
|
||
|
IRN:"ABB",
|
||
|
IRQ:"ABB",
|
||
|
ISR:"ABB",
|
||
|
JPN:"ABB",
|
||
|
JOR:"ABB",
|
||
|
KWT:"ABB",
|
||
|
KGZ:"ABB",
|
||
|
LAO:"ABB",
|
||
|
LBN:"ABB",
|
||
|
MAC:"ABB",
|
||
|
MYS:"ABB",
|
||
|
MDV:"ABB",
|
||
|
MNG:"ABB",
|
||
|
MMR:"ABB",
|
||
|
NPL:"ABB",
|
||
|
PRK:"ABB",
|
||
|
OMN:"ABB",
|
||
|
PAK:"ABB",
|
||
|
PSE:"ABB",
|
||
|
PHL:"ABB",
|
||
|
QAT:"ABB",
|
||
|
SAU:"ABB",
|
||
|
SGP:"ABB",
|
||
|
KOR:"ABB",
|
||
|
LKA:"ABB",
|
||
|
SYR:"ABB",
|
||
|
TWN:"ABB",
|
||
|
TJK:"ABB",
|
||
|
THA:"ABB",
|
||
|
TLS:"ABB",
|
||
|
TUR:"ABB",
|
||
|
TKM:"ABB",
|
||
|
ARE:"ABB",
|
||
|
UZB:"ABB",
|
||
|
VNM:"ABB",
|
||
|
YEM:"ABB",
|
||
|
ZNC:"ABB",
|
||
|
|
||
|
DZA:"FFF",
|
||
|
AGO:"FFF",
|
||
|
BDI:"FFF",
|
||
|
BEN:"FFF",
|
||
|
BWA:"FFF",
|
||
|
BFA:"FFF",
|
||
|
BDI:"FFF",
|
||
|
CPV:"FFF",
|
||
|
CMR:"FFF",
|
||
|
CAF:"FFF",
|
||
|
TCD:"FFF",
|
||
|
COM:"FFF",
|
||
|
COG:"FFF",
|
||
|
COD:"FFF",
|
||
|
CIV:"FFF",
|
||
|
DJI:"FFF",
|
||
|
EGY:"FFF",
|
||
|
GNQ:"FFF",
|
||
|
ERI:"FFF",
|
||
|
ETH:"FFF",
|
||
|
ATF:"FFF",
|
||
|
GAB:"FFF",
|
||
|
GMB:"FFF",
|
||
|
GHA:"FFF",
|
||
|
GIN:"FFF",
|
||
|
GNB:"FFF",
|
||
|
KEN:"FFF",
|
||
|
LSO:"FFF",
|
||
|
LBR:"FFF",
|
||
|
LBY:"FFF",
|
||
|
MDG:"FFF",
|
||
|
MWI:"FFF",
|
||
|
MLI:"FFF",
|
||
|
MRT:"FFF",
|
||
|
MUS:"FFF",
|
||
|
MYT:"FFF",
|
||
|
MAR:"FFF",
|
||
|
MOZ:"FFF",
|
||
|
NAM:"FFF",
|
||
|
NER:"FFF",
|
||
|
NGA:"FFF",
|
||
|
COD:"FFF",
|
||
|
REU:"FFF",
|
||
|
RWA:"FFF",
|
||
|
STP:"FFF",
|
||
|
SEN:"FFF",
|
||
|
SYC:"FFF",
|
||
|
SLE:"FFF",
|
||
|
SOM:"FFF",
|
||
|
ZAF:"FFF",
|
||
|
SSD:"FFF",
|
||
|
SHN:"FFF",
|
||
|
SDN:"FFF",
|
||
|
SWZ:"FFF",
|
||
|
TZA:"FFF",
|
||
|
TGO:"FFF",
|
||
|
TUN:"FFF",
|
||
|
UGA:"FFF",
|
||
|
COD:"FFF",
|
||
|
ZMB:"FFF",
|
||
|
ZWE:"FFF",
|
||
|
ESH:"FFF",
|
||
|
|
||
|
ABW:"NNN",
|
||
|
AIA:"NNN",
|
||
|
ATG:"NNN",
|
||
|
BHS:"NNN",
|
||
|
BRB:"NNN",
|
||
|
BLZ:"NNN",
|
||
|
BMU:"NNN",
|
||
|
BES:"NNN",
|
||
|
VGB:"NNN",
|
||
|
CAN:"NNN",
|
||
|
CYM:"NNN",
|
||
|
XCL:"NNN",
|
||
|
CRI:"NNN",
|
||
|
CUB:"NNN",
|
||
|
CUW:"NNN",
|
||
|
DMA:"NNN",
|
||
|
DOM:"NNN",
|
||
|
SLV:"NNN",
|
||
|
GRL:"NNN",
|
||
|
GRD:"NNN",
|
||
|
GLP:"NNN",
|
||
|
GTM:"NNN",
|
||
|
HTI:"NNN",
|
||
|
HND:"NNN",
|
||
|
JAM:"NNN",
|
||
|
MTQ:"NNN",
|
||
|
MEX:"NNN",
|
||
|
MSR:"NNN",
|
||
|
ANT:"NNN",
|
||
|
CUW:"NNN",
|
||
|
NIC:"NNN",
|
||
|
PAN:"NNN",
|
||
|
PRI:"NNN",
|
||
|
BLM:"NNN",
|
||
|
KNA:"NNN",
|
||
|
LCA:"NNN",
|
||
|
MAF:"NNN",
|
||
|
SPM:"NNN",
|
||
|
VCT:"NNN",
|
||
|
SXM:"NNN",
|
||
|
TTO:"NNN",
|
||
|
TCA:"NNN",
|
||
|
USA:"NNN",
|
||
|
UMI:"NNN",
|
||
|
VIR:"NNN",
|
||
|
|
||
|
ARG:"SRR",
|
||
|
BOL:"SRR",
|
||
|
BRA:"SRR",
|
||
|
CHL:"SRR",
|
||
|
COL:"SRR",
|
||
|
ECU:"SRR",
|
||
|
FLK:"SRR",
|
||
|
GUF:"SRR",
|
||
|
GUY:"SRR",
|
||
|
PRY:"SRR",
|
||
|
PER:"SRR",
|
||
|
SUR:"SRR",
|
||
|
URY:"SRR",
|
||
|
VEN:"SRR",
|
||
|
|
||
|
ASM:"UUU",
|
||
|
AUS:"UUU",
|
||
|
COK:"UUU",
|
||
|
FJI:"UUU",
|
||
|
PYF:"UUU",
|
||
|
GUM:"UUU",
|
||
|
KIR:"UUU",
|
||
|
MHL:"UUU",
|
||
|
FSM:"UUU",
|
||
|
NRU:"UUU",
|
||
|
NCL:"UUU",
|
||
|
NZL:"UUU",
|
||
|
NIU:"UUU",
|
||
|
NFK:"UUU",
|
||
|
MNP:"UUU",
|
||
|
PLW:"UUU",
|
||
|
PNG:"UUU",
|
||
|
PCN:"UUU",
|
||
|
WSM:"UUU",
|
||
|
SLB:"UUU",
|
||
|
TKL:"UUU",
|
||
|
TON:"UUU",
|
||
|
TUV:"UUU",
|
||
|
VUT:"UUU",
|
||
|
WLF:"UUU",
|
||
|
|
||
|
ATA:"XXX",
|
||
|
BVT:"XXX",
|
||
|
HMD:"XXX",
|
||
|
SGS:"XXX",
|
||
|
}
|
||
|
|
||
|
import fs from "fs"
|
||
|
import {JSDOM} from "jsdom"
|
||
|
|
||
|
function groupByContinent(svgFilePath) {
|
||
|
// Read the SVG file
|
||
|
fs.readFile(svgFilePath, 'utf-8', (err, data) => {
|
||
|
if (err) {
|
||
|
console.error('Error reading SVG file:', err);
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
// Create a virtual DOM with JSDOM
|
||
|
const dom = new JSDOM(data);
|
||
|
const document = dom.window.document;
|
||
|
|
||
|
// Select the root <svg> element
|
||
|
const svgElement = document.querySelector('svg');
|
||
|
|
||
|
// Group <g> elements representing countries by continent
|
||
|
const world = {}; // Renamed continents object to 'world'
|
||
|
svgElement.querySelectorAll('g').forEach(countryGroup => {
|
||
|
const countryId = countryGroup.getAttribute('id');
|
||
|
if (countryId!= null){
|
||
|
const continentId = continents[countryId.replace(/\d/g, "")] || "XXX"; // Remove numbers from country ID to get continent ID
|
||
|
if (!world[continentId]) {
|
||
|
world[continentId] = document.createElementNS('http://www.w3.org/2000/svg', 'g');
|
||
|
world[continentId].setAttribute('id', continentId);
|
||
|
}
|
||
|
world[continentId].innerHTML += countryGroup.outerHTML;
|
||
|
}else{
|
||
|
|
||
|
console.log(countryId,countryGroup.outerHTML)
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// Create new <g> elements for each continent
|
||
|
svgElement.innerHTML = '';
|
||
|
for (const continentId in world) {
|
||
|
svgElement.appendChild(world[continentId]);
|
||
|
}
|
||
|
|
||
|
// Output the modified SVG
|
||
|
fs.writeFile(svgFilePath, svgElement.outerHTML, 'utf-8', err => {
|
||
|
if (err) {
|
||
|
console.error('Error writing to SVG file:', err);
|
||
|
return;
|
||
|
}
|
||
|
console.log('SVG file updated successfully.');
|
||
|
});
|
||
|
});
|
||
|
}
|
||
|
|
||
|
|
||
|
// Example usage:
|
||
|
const svgFileBasePath = "./app/src/main/assets/" ;
|
||
|
groupByContinent(svgFileBasePath+ "webmercator01.svg");
|
||
|
groupByContinent(svgFileBasePath+ "aeqd01.svg");
|
||
|
groupByContinent(svgFileBasePath+ "loxim01.svg");
|