This commit is contained in:
a-ill 2023-07-13 14:32:49 +03:00
parent 9f5ec9e26a
commit 8a176b7c1b
58 changed files with 1756 additions and 317 deletions

View File

@ -1,25 +1,36 @@
export let communes = [ export let communes = [
{ {
location: ["CanadaMontreal",[45.55541047232767, -73.42859611607271]], location: [["Canada","Montreal"],[45.55541047232767, -73.42859611607271]],
status: "forming", status: "forming",
members: 2, members: 2,
contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["EstoniaKohtlaJarve",[59.409521829709504, 27.288415912535914]], location: [["Estonia","KohtlaJarve"],[59.409521829709504, 27.288415912535914]],
status: "forming", status: "forming",
members: 2, members: 2,
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["Latvia",[56.934159375258055, 25.269099001330265]], location: [["Latvia",""],[56.934159375258055, 25.269099001330265]],
status: "forming", status: "forming",
members: 1, members: 1,
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
} }
] ]
export let communesByCountry = {}
for (let c of communes) {
let country = c.location[0][0]
if (country in communesByCountry) {
communesByCountry[country].push(c)
}
else {
communesByCountry[country] = [c]
}
}
export function addMarkersCommunes(map,content) { export function addMarkersCommunes(map,content) {
for (let g of communes) { for (let g of communes) {
let coordinates let coordinates
@ -30,7 +41,9 @@ export function addMarkersCommunes(map,content) {
text += fieldText + "<a href='" + g.contact[0] + "' target='_blank' rel=noreferrer>" + content[g.contact[1]]+ "</a>" text += fieldText + "<a href='" + g.contact[0] + "' target='_blank' rel=noreferrer>" + content[g.contact[1]]+ "</a>"
} }
else if (field=="location") { else if (field=="location") {
text += fieldText + content[g[field][0]]+ "<br>" let location = g[field][0]
let town = location[1]=="" ? "" : ", " + content[location[1]]
text += fieldText + content[location[0]] + town + "<br>"
coordinates = g[field][1] coordinates = g[field][1]
} }
else if (field=="status") { else if (field=="status") {

View File

@ -2,27 +2,38 @@ export let coops = [
{ {
logo: "chiron_logo", logo: "chiron_logo",
name: "Chiron Health", name: "Chiron Health",
location: ["EstoniaKohtlaJarve",[59.40338782864918, 27.286240058760324]], location: [["Estonia","KohtlaJarve"],[59.41038769769602, 27.287802936242034]],
market: "wellnessAndHealth", market: "wellnessAndHealth",
workers: 2, workers: 2,
status: "inDevelopment", status: "inDevelopment",
website: "chrn.health", website: "chrn.health",
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"], contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"],
description: "descriptionChironHealth" description: "descriptionChironHealth"
}, },
{ {
logo: "kuusk_logo", logo: "kuusk_logo",
name: "Kuusk", name: "Kuusk",
location: ["EstoniaKohtlaJarve",[59.405466538976185, 27.289104862336302]], location: [["Estonia","KohtlaJarve"],[59.399947051803004, 27.277159931677055]],
market: "herbalTeas", market: "herbalTeas",
workers: 1, workers: 1,
status: "inDevelopment", status: "inDevelopment",
website: "-", website: "-",
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"], contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"],
description: "kuuskDescription" description: "kuuskDescription"
} }
] ]
export let coopsByCountry = {}
for (let g of coops) {
let country = g.location[0][0]
if (country in coopsByCountry) {
coopsByCountry[country].push(g)
}
else {
coopsByCountry[country] = [g]
}
}
export function addMarkersCoops(map,content) { export function addMarkersCoops(map,content) {
for (let g of coops) { for (let g of coops) {
let coordinates let coordinates
@ -42,7 +53,9 @@ export function addMarkersCoops(map,content) {
text += fieldText + "<a href='" + g.website + "' target='_blank' rel=noreferrer>" + g.website + "</a>" + "<br>" text += fieldText + "<a href='" + g.website + "' target='_blank' rel=noreferrer>" + g.website + "</a>" + "<br>"
} }
else if (field=="location") { else if (field=="location") {
text += fieldText + content[g[field][0]] + "<br>" let location = g[field][0]
let town = location[1]=="" ? "" : ", " + content[location[1]]
text += fieldText + content[location[0]] + town + "<br>"
coordinates = g[field][1] coordinates = g[field][1]
} }
else if (field=="market" || field=="status" || field=="description") { else if (field=="market" || field=="status" || field=="description") {

View File

@ -1,67 +1,134 @@
export let groups = [ export let groups = [
{ {
location: ["CanadaHalifax",[44.65166135030067, -63.59289968306866]], location: [["Canada","Halifax"],[44.65166135030067, -63.59289968306866]],
members: 2, members: 2,
contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["DenmarkCopenhagen",[55.6840661150132, 12.557133959514688]], location: [["Denmark","Copenhagen"],[55.6840661150132, 12.557133959514688]],
members: 1, members: 1,
contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["DenmarkKolding", [55.49261908652738, 9.470268969851743]], location: [["Denmark","Kolding"], [55.49261908652738, 9.470268969851743]],
members: 1, members: 1,
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["EstoniaKohtlaJarve", [59.40629447076191, 27.280605339416322]], location: [["Estonia","KohtlaJarve"], [59.40629447076191, 27.280605339416322]],
members: 3, members: 3,
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["GreeceAthens", [37.94877252621736, 23.677622972996158]], location: [["Greece","Athens"], [37.94877252621736, 23.677622972996158]],
members: 1, members: 1,
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["Ireland", [53.280192832733576, -7.688103518964818]], location: [["Ireland",""], [53.280192832733576, -7.688103518964818]],
members: 6, members: 6,
contact: ["https://discord.gg/4BUau4AZre","DiscordInviteLink"] contact: ["https://discord.gg/4BUau4AZre","DiscordInviteLink"]
}, },
{ {
location: ["LatviaRiga", [56.94748425529816, 24.003027136431925]], location: [["Latvia","Riga"], [56.94748425529816, 24.003027136431925]],
members: 2, members: 2,
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
] ]
export function addMarkersGroups(map,content) { export let groupsByCountry = {}
for (let g of groups) { for (let g of groups) {
let coordinates let country = g.location[0][0]
let text = "" if (country in groupsByCountry) {
for (let field in g) { groupsByCountry[country].push(g)
let fieldText = content[field] + ": " }
if (field=="contact") { else {
text += fieldText + "<a href='" + g.contact[0] + "' target='_blank' rel=noreferrer>" + content[g.contact[1]] + "</a>" groupsByCountry[country] = [g]
} }
else if (field=="location") { }
text += fieldText + content[g[field][0]] + "<br>"
coordinates = g[field][1] let groupsLoaded = false
} let groupsMarkersLayerOut = L.layerGroup()
else { let groupsMarkersLayerIn = L.layerGroup()
text += fieldText + g[field] + "<br>"
} let contactGeneral =["https://discord.gg/4BUau4AZre","DiscordInviteLink"]
}
var markerIcon = new L.Icon({ function addMarkerGroups(g,layer,content) {
iconUrl: 'https://www.libsoc.org/img/common/markers/marker-green.png', let coordinates
shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/images/marker-shadow.png', let text = ""
iconSize: [25, 41], for (let field in g) {
iconAnchor: [12, 41], let fieldText = content[field] + ": "
popupAnchor: [1, -34], if (field=="contact") {
shadowSize: [41, 41] text += fieldText + "<a href='" + g.contact[0] + "' target='_blank' rel=noreferrer>" + content[g.contact[1]] + "</a>"
}); }
let marker = L.marker(coordinates, {icon: markerIcon}) else if (field=="location") {
marker.addTo(map).bindPopup(text) let location = g[field][0]
let town = location[1]=="" ? "" : ", " + content[location[1]]
text += fieldText + content[location[0]] + town + "<br>"
coordinates = g[field][1]
}
else {
text += fieldText + g[field] + "<br>"
}
}
var markerIcon = new L.Icon({
iconUrl: 'https://www.libsoc.org/img/common/markers/marker-green.png',
shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/images/marker-shadow.png',
iconSize: [25, 41],
iconAnchor: [12, 41],
popupAnchor: [1, -34],
shadowSize: [41, 41]
})
let marker = L.marker(coordinates, {icon: markerIcon})
marker.addTo(layer).bindPopup(text)
}
export function addMarkersGroups(map,content) {
for (let g of groups) {
addMarkerGroups(g,groupsMarkersLayerIn,content)
}
for (let gs of Object.values(groupsByCountry)) {
if (gs.length==1) {
let g = {...gs[0]}
g.location[0][1] = ""
addMarkerGroups(g,groupsMarkersLayerOut,content)
}
else {
let locationName = [gs[0].location[0][0],""]
let locationCoordinates = [0,0]
let members = 0
let contact = gs[0].contact
for (let g of gs) {
locationCoordinates[0] += g.location[1][0]
locationCoordinates[1] += g.location[1][1]
members += g.members
if (g.contact[0]!=gs[0].contact[0]) {
contact = contactGeneral
}
}
locationCoordinates[0] = locationCoordinates[0]/gs.length
locationCoordinates[1] = locationCoordinates[1]/gs.length
let gNew = {
location: [locationName,locationCoordinates],
members: members,
contact: contact
}
addMarkerGroups(gNew,groupsMarkersLayerOut,content)
}
}
groupsMarkersLayerOut.addTo(map)
map.on("zoomend", () => onZoomEnd(map))
}
function onZoomEnd(map) {
let zoomLevel = map.getZoom()
if (zoomLevel==3) {
map.removeLayer(groupsMarkersLayerIn)
groupsMarkersLayerOut.addTo(map)
}
else if (zoomLevel==4) {
map.removeLayer(groupsMarkersLayerOut)
groupsMarkersLayerIn.addTo(map)
} }
} }

View File

@ -96,8 +96,13 @@ export function loadLocaleContent(content,componentName,loaded,callback) {
if (callback!=undefined) { if (callback!=undefined) {
callback(parsed) callback(parsed)
} }
content.set(parsed) content.update((obj) => {
loaded = 1 Object.assign(obj,parsed)
return obj
})
loaded.update((val) => {
return val + 1
})
}) })
return locale return locale
} }

View File

@ -2,13 +2,24 @@ export let parties = [
{ {
logo: "roots", logo: "roots",
name: "Roots", name: "Roots",
location: ["ireland",[52.98479517270413, -7.649233227534782]], location: ["Ireland",[52.98479517270413, -7.649233227534782]],
//members: 6, //members: 6,
link: "https://discord.gg/pSTMacJZsK", link: "https://discord.gg/pSTMacJZsK",
description: "descriptionRoots" description: "descriptionRoots"
} }
] ]
export let partiesByCountry = {}
for (let g of parties) {
let country = g.location[0]
if (country in partiesByCountry) {
partiesByCountry[country].push(g)
}
else {
partiesByCountry[country] = [g]
}
}
export function addMarkersParties(map,content) { export function addMarkersParties(map,content) {
for (let g of parties) { for (let g of parties) {
let coordinates let coordinates

View File

@ -2,8 +2,20 @@ export let partners = [
{ {
name: "Gaia's Fall", name: "Gaia's Fall",
type: "typeGaiasFall", type: "typeGaiasFall",
location: [["Online",""],[0,0]],
link: "https://discord.libsoc.org/invite/", link: "https://discord.libsoc.org/invite/",
description: "descriptionGaiasFall", description: "descriptionGaiasFall",
logo: "gaias_fall" logo: "gaias_fall"
} }
] ]
export let partnersByCountry = {}
for (let g of partners) {
let country = g.location[0][0]
if (country in partnersByCountry) {
partnersByCountry[country].push(g)
}
else {
partnersByCountry[country] = [g]
}
}

View File

@ -7,10 +7,7 @@
"status": "Status", "status": "Status",
"members": "Members", "members": "Members",
"contact": "Contact", "contact": "Contact",
"EstoniaKohtlaJarve": "Estonia, Kohtla-Järve",
"forming": "forming", "forming": "forming",
"WhatsAppInviteLink": "WhatsApp invite link", "WhatsAppInviteLink": "WhatsApp invite link",
"DiscordInviteLink": "Discord invite link", "DiscordInviteLink": "Discord invite link"
"CanadaMontreal": "Canada, Montreal",
"Latvia": "Latvia"
} }

View File

@ -1,7 +1,6 @@
{ {
"heading": "Cooperatives", "heading": "Cooperatives",
"p1": "We establish worker cooperatives, which is a business model where employees own and control the enterprise. Each worker has a voice in decision-making, and profits are distributed based on individual contributions. This participatory structure fosters ownership, motivation, and job satisfaction, creating a more fulfilling work experience as well as challenging the wealth concentration in traditional capitalist businesses.", "p1": "We establish worker cooperatives, which is a business model where employees own and control the enterprise. Each worker has a voice in decision-making, and profits are distributed based on individual contributions. This participatory structure fosters ownership, motivation, and job satisfaction, creating a more fulfilling work experience as well as challenging the wealth concentration in traditional capitalist businesses. By focusing on employees' needs, our cooperatives create supportive and sustainable work environments that foster social cohesion and job security. We also prioritize the interests of local communities, taking a long-term perspective.",
"p2": "By focusing on employees' needs, our cooperatives create supportive and sustainable work environments that foster social cohesion and job security. We also prioritize the interests of local communities, taking a long-term perspective. With workers making decisions, we avoid harmful short-term profit-driven strategies and instead reinvest our profits, contributing to community development and resilience.",
"subheading1": "Our Cooperatives", "subheading1": "Our Cooperatives",
"subheading2": "Europe", "subheading2": "Europe",
"name": "Name", "name": "Name",
@ -12,10 +11,10 @@
"contact": "Contact", "contact": "Contact",
"description": "Description", "description": "Description",
"website": "Website", "website": "Website",
"EstoniaKohtlaJarve": "Estonia, Kohtla-Järve",
"wellnessAndHealth": "wellness and health", "wellnessAndHealth": "wellness and health",
"inDevelopment": "in development", "inDevelopment": "in development",
"WhatsAppInviteLink": "WhatsApp invite link", "WhatsAppInviteLink": "WhatsApp invite link",
"DiscordInviteLink": "Discord invite link",
"descriptionChironHealth": "Chiron Health is a health platform providing courses and services on the topics of nutrition, exercise, sleep and mental wellbeing.", "descriptionChironHealth": "Chiron Health is a health platform providing courses and services on the topics of nutrition, exercise, sleep and mental wellbeing.",
"herbalTeas": "herbal teas", "herbalTeas": "herbal teas",
"kuuskDescription": "Kuusk is an online store that sells herbal teas from exclusively local wild plants, as well as an online gathering course." "kuuskDescription": "Kuusk is an online store that sells herbal teas from exclusively local wild plants, as well as an online gathering course."

View File

@ -0,0 +1,16 @@
{
"Online": "Online",
"Denmark": "Denmark",
"Estonia": "Estonia",
"Greece": "Greece",
"Latvia": "Latvia",
"Canada": "Canada",
"Copenhagen": "Copenhagen",
"Ireland": "Ireland",
"Montreal": "Montreal",
"Kolding": "Kolding",
"KohtlaJarve": "Kohtla-Järve",
"Athens": "Athens",
"Riga": "Riga",
"Halifax": "Halifax"
}

View File

@ -1,19 +1,11 @@
{ {
"heading": "Groups", "heading": "Groups",
"p1": "We aim to raise awareness about the negative impact of current politico-economic systems on our well-being. By highlighting these issues, we empower people to question the status quo and imagine fairer and more sustainable alternatives.", "p1": "We aim to raise awareness about the negative impact of current politico-economic systems on our well-being. We engage in mutual aid and collective action to address immediate challenges within capitalism. Through mutual aid, we support each other by sharing resources, knowledge, and skills, fostering solidarity and resilience. Whether it's community gardens, food cooperatives, or support networks, our goal is to make life under capitalism more bearable and create pockets of resistance and alternatives within the system.",
"p2": "But our mission goes beyond theory. We engage in mutual aid and collective action to address immediate challenges within capitalism. Through mutual aid, we support each other by sharing resources, knowledge, and skills, fostering solidarity and resilience. Whether it's community gardens, food cooperatives, or support networks, our goal is to make life under capitalism more bearable and create pockets of resistance and alternatives within the system.",
"subheading1": "Our Groups", "subheading1": "Our Groups",
"subheading2": "Europe", "subheading2": "Europe",
"location": "Location", "location": "Location",
"members": "Members", "members": "Members",
"contact": "Contact", "contact": "Contact",
"DiscordInviteLink": "Discord invite link", "DiscordInviteLink": "Discord invite link",
"WhatsAppInviteLink": "WhatsApp invite link", "WhatsAppInviteLink": "WhatsApp invite link"
"DenmarkCopenhagen": "Denmark, Copenhagen",
"DenmarkKolding": "Denmark, Kolding",
"EstoniaKohtlaJarve": "Estonia, Kohtla-Järve",
"GreeceAthens": "Greece, Athens",
"LatviaRiga": "Latvia, Riga",
"CanadaHalifax": "Canada, Halifax",
"Ireland": "Ireland"
} }

View File

@ -1,12 +1,11 @@
{ {
"heading": "Parties", "heading": "Parties",
"p1": "We create political parties in order to push for reforms allowing us to easier further our goals, to move the Overton window as well as to gain popularity. However, we recognize that we cannot achieve libertarian socialism through institutions which act contrary to our goals.", "p1": "We create political parties in order to push for reforms allowing us to easier further our goals, to move the Overton window as well as to gain popularity. However, we recognize that we cannot achieve libertarian socialism through institutions which act contrary to our goals. Nevertheless, we must strategically utilize any opportunity that we have in order to succeed.",
"subheading1": "Our Parties", "subheading1": "Our Parties",
"name": "Name", "name": "Name",
"location": "Location", "location": "Location",
"members": "Members", "members": "Members",
"link": "Link", "link": "Link",
"description": "Description", "description": "Description",
"ireland": "Ireland",
"descriptionRoots": "We are a left libertarian organization based in Ireland. We have a focus on rebuilding the country's infrastructure, sense of governance, housing, agricultural industries and youth affairs." "descriptionRoots": "We are a left libertarian organization based in Ireland. We have a focus on rebuilding the country's infrastructure, sense of governance, housing, agricultural industries and youth affairs."
} }

View File

@ -2,15 +2,11 @@
"heading": "Коммуны", "heading": "Коммуны",
"p1": "Мы создаем либертарные социалистические коммуны, покупая землю, жилье и средства производства, которые затем принадлежат членам этих коммун. В коммунах нет частной собственности и, следовательно, эксплуатации и страданий, которые с ней связаны. Решения принимаются с использованием прямой демократии с упором на консенсус, гарантируя, что каждый член сообщества имеет право принимать решения, влияющие на его жизнь. Сообщества пытаются создавать свои собственные кооперативы, чтобы финансировать свое развитие, становясь финансово независимыми и устойчивыми, что позволяет им выживать и расти. В сообществах по возможности используется экономика дарения. Каждая коммуна — это маленький маяк социализма в темном капиталистическом мире, показывающий нам, насколько хорошей может быть жизнь, если мы только достигнем своей цели.", "p1": "Мы создаем либертарные социалистические коммуны, покупая землю, жилье и средства производства, которые затем принадлежат членам этих коммун. В коммунах нет частной собственности и, следовательно, эксплуатации и страданий, которые с ней связаны. Решения принимаются с использованием прямой демократии с упором на консенсус, гарантируя, что каждый член сообщества имеет право принимать решения, влияющие на его жизнь. Сообщества пытаются создавать свои собственные кооперативы, чтобы финансировать свое развитие, становясь финансово независимыми и устойчивыми, что позволяет им выживать и расти. В сообществах по возможности используется экономика дарения. Каждая коммуна — это маленький маяк социализма в темном капиталистическом мире, показывающий нам, насколько хорошей может быть жизнь, если мы только достигнем своей цели.",
"subheading1": "Наши коммуны", "subheading1": "Наши коммуны",
"subheading2": "Европа",
"location": "Локация", "location": "Локация",
"status": "Статус", "status": "Статус",
"members": "Участники", "members": "Участники",
"contact": "Контакт", "contact": "Контакт",
"EstoniaKohtlaJarve": "Эстония, Кохтла-Ярве",
"forming": "формируется", "forming": "формируется",
"WhatsAppInviteLink": "WhatsApp ссылка", "WhatsAppInviteLink": "WhatsApp ссылка",
"DiscordInviteLink": "Discord ссылка", "DiscordInviteLink": "Discord ссылка"
"CanadaMontreal": "Канада, Монреаль",
"Latvia": "Латвия"
} }

View File

@ -1,7 +1,6 @@
{ {
"heading": "Кооперативы", "heading": "Кооперативы",
"p1": "Мы создаем рабочие кооперативы, которые представляют собой бизнес-модель, в которой работники владеют предприятием. Каждый работник имеет право голоса при принятии решений, а прибыль распределяется на основе индивидуальных вкладов. Эта структура способствует мотивации и удовлетворенности работой, создавая более приятные условия труда, а также бросает вызов концентрации богатства в традиционных капиталистических предприятиях.", "p1": "Мы создаем рабочие кооперативы, которые представляют собой бизнес-модель, в которой работники владеют предприятием. Каждый работник имеет право голоса при принятии решений, а прибыль распределяется на основе индивидуальных вкладов. Эта структура способствует мотивации и удовлетворенности работой, создавая более приятные условия труда, а также бросает вызов концентрации богатства в традиционных капиталистических предприятиях. Сосредоточив внимание на потребностях сотрудников, наши кооперативы создают благоприятную и устойчивую рабочую среду, которая способствует социальной сплоченности и гарантиям занятости. Мы также уделяем первостепенное внимание интересам местных сообществ, ориентируясь на долгосрочную перспективу.",
"p2": "Сосредоточив внимание на потребностях сотрудников, наши кооперативы создают благоприятную и устойчивую рабочую среду, которая способствует социальной сплоченности и гарантиям занятости. Мы также уделяем первостепенное внимание интересам местных сообществ, ориентируясь на долгосрочную перспективу. Когда решения принимают работники, мы избегаем вредных краткосрочных стратегий, ориентированных на получение прибыли, и вместо этого реинвестируем нашу прибыль, способствуя развитию и устойчивости сообщества.",
"subheading1": "Наши кооперативы", "subheading1": "Наши кооперативы",
"subheading2": "Европа", "subheading2": "Европа",
"name": "Название", "name": "Название",
@ -12,10 +11,10 @@
"contact": "Контакт", "contact": "Контакт",
"description": "Описание", "description": "Описание",
"website": "Вебсайт", "website": "Вебсайт",
"EstoniaKohtlaJarve": "Эстония, Кохтла-Ярве",
"wellnessAndHealth": "благополучие и здоровье", "wellnessAndHealth": "благополучие и здоровье",
"inDevelopment": "в разработке", "inDevelopment": "в разработке",
"WhatsAppInviteLink": "WhatsApp ссылка", "WhatsAppInviteLink": "WhatsApp ссылка",
"DiscordInviteLink": "Discord ссылка",
"descriptionChironHealth": "Chiron Health — это платформа о здоровье, предлагающая курсы и услуги по вопросам питания, физических упражнений, сна и психического благополучия", "descriptionChironHealth": "Chiron Health — это платформа о здоровье, предлагающая курсы и услуги по вопросам питания, физических упражнений, сна и психического благополучия",
"herbalTeas": "травяные чаи", "herbalTeas": "травяные чаи",
"kuuskDescription": "Kuusk — интернет-магазин, в котором продаются травяные чаи исключительно из местных дикорастущих растений, а также онлайн-курс по собирательству." "kuuskDescription": "Kuusk — интернет-магазин, в котором продаются травяные чаи исключительно из местных дикорастущих растений, а также онлайн-курс по собирательству."

View File

@ -0,0 +1,16 @@
{
"Online": "Онлайн",
"Denmark": "Дания",
"Estonia": "Эстония",
"Greece": "Греция",
"Latvia": "Латвия",
"Canada": "Канада",
"Ireland": "Ирландия",
"Copenhagen": "Копенгаген",
"Kolding": "Колдинг",
"KohtlaJarve": "Кохтла-Ярве",
"Athens": "Афины",
"Riga": "Рига",
"Halifax": "Галифакс",
"Montreal": "Монреаль"
}

View File

@ -1,19 +1,10 @@
{ {
"heading": "Группы", "heading": "Группы",
"p1": "Мы стремимся повышать осведомленность о негативном влиянии нынешних политико-экономических систем на наше благополучие. Выдвигая на первый план эти проблемы, мы даем людям возможность поставить под сомнение статус-кво и представить себе более справедливые и устойчивые альтернативы.", "p1": "Мы стремимся повышать осведомленность о негативном влиянии нынешних политико-экономических систем на наше благополучие. Мы участвуем во взаимопомощи и коллективных действиях для решения насущных проблем. Посредством взаимопомощи мы поддерживаем друг друга, делясь ресурсами, знаниями и навыками, укрепляя солидарность и устойчивость к негодам. Будь то общественные сады, продовольственные кооперативы или сети поддержки, наша цель — сделать жизнь при капитализме более терпимой и создать очаги сопротивления и альтернатив внутри системы.",
"p2": "Однако, наша миссия выходит за рамки теории. Мы участвуем во взаимопомощи и коллективных действиях для решения насущных проблем. Посредством взаимопомощи мы поддерживаем друг друга, делясь ресурсами, знаниями и навыками, укрепляя солидарность и устойчивость к негодам. Будь то общественные сады, продовольственные кооперативы или сети поддержки, наша цель — сделать жизнь при капитализме более терпимой и создать очаги сопротивления и альтернативы внутри системы.",
"subheading1": "Наши группы", "subheading1": "Наши группы",
"subheading2": "Европа",
"location": "Локация", "location": "Локация",
"members": "Участники", "members": "Участники",
"contact": "Контакт", "contact": "Контакт",
"DiscordInviteLink": "Discord ссылка", "DiscordInviteLink": "Discord ссылка",
"WhatsAppInviteLink": "WhatsApp ссылка", "WhatsAppInviteLink": "WhatsApp ссылка"
"DenmarkCopenhagen": "Дания, Копенгаген",
"DenmarkKolding": "Дания, Колдинг",
"EstoniaKohtlaJarve": "Эстония, Кохтла-Ярве",
"GreeceAthens": "Греция, Афины",
"LatviaRiga": "Латвия, Рига",
"CanadaHalifax": "Канада, Галифакс",
"Ireland": "Ирландия"
} }

View File

@ -1,6 +1,6 @@
{ {
"heading": "Партии", "heading": "Партии",
"p1": "Мы создаем политические партии, чтобы продвигать реформы, которые позволят легче достичь наших целей, сдвигать окно Овертона и увеличивать нашу популярность. Однако мы признаем, что мы не можем достичь либертарианского социализма с помощью институтов, действующих против наших целей.", "p1": "Мы создаем политические партии, чтобы продвигать реформы, которые позволят легче достичь наших целей, сдвигать окно Овертона и увеличивать нашу популярность. Однако мы признаем, что мы не можем достичь либертарного социализма с помощью институтов, действующих против наших целей. Тем не менее, мы должны стратегически использовать любую возможность, которая у нас есть, чтобы добиться успеха.",
"subheading1": "Наши партии", "subheading1": "Наши партии",
"name": "Имя", "name": "Имя",
"location": "Локация", "location": "Локация",

View File

@ -4,16 +4,17 @@
// Import statements // Import statements
import { onMount } from 'svelte' import { onMount } from 'svelte'
import { writable } from 'svelte/store'; import { writable } from 'svelte/store';
import { communes, addMarkersCommunes } from '/js/communes.js' import { communesByCountry, addMarkersCommunes } from '/js/communes.js'
import { loadLocaleContent } from "/js/libraries/serverTools.js" import { loadLocaleContent } from "/js/libraries/serverTools.js"
// Import components // Import components
import "/js/components/map-component.js" import "/js/components/map-component.js"
// Main code // Main code
let loaded let loaded = writable(0)
let content = writable({}) let content = writable({})
loadLocaleContent(content,"countries",loaded)
let locale = loadLocaleContent(content,"communes-component",loaded) let locale = loadLocaleContent(content,"communes-component",loaded)
function mapCallbackCommunes(createMap,content) { function mapCallbackCommunes(createMap,content) {
@ -26,8 +27,8 @@
}) })
</script> </script>
{#key loaded} {#key $loaded}
{#if Object.keys($content).length!=0} {#if $loaded==2}
<div id="container"> <div id="container">
<!--<img src="img/crowd.png" id="crowd" alt="crowd">--> <!--<img src="img/crowd.png" id="crowd" alt="crowd">-->
<div id="text-container"> <div id="text-container">
@ -36,15 +37,19 @@
<p>{$content.p1}</p> <p>{$content.p1}</p>
<h3>{$content.subheading1}</h3> <h3>{$content.subheading1}</h3>
<map-component id="map" callback={(createMap) => mapCallbackCommunes(createMap,$content,locale)}></map-component> <map-component id="map" callback={(createMap) => mapCallbackCommunes(createMap,$content,locale)}></map-component>
{#each communes as commune} {#each Object.entries(communesByCountry) as [name,communes]}
<div class="location-info"> <h4 class="country-name">{$content[name]}</h4>
<p><b>{$content.location}: </b>{$content[commune.location[0]]}</p> <div class="country-block">
<p><b>{$content.status}: </b>{$content[commune.status]}</p> {#each communes as commune}
<p><b>{$content.members}: </b>{commune.members}</p> <div class="location-info">
<p><b>{$content.contact}: </b><a href={commune.contact[0]} target=;_blank; rel=noreferrer>{$content[commune.contact[1]]}</a></p> <p><b>{$content.location}: </b>{$content[commune.location[0][0]] + (commune.location[0][1]=="" ? "" : ", " + $content[commune.location[0][1]])}</p>
<p><b>{$content.status}: </b>{$content[commune.status]}</p>
<p><b>{$content.members}: </b>{commune.members}</p>
<p><b>{$content.contact}: </b><a href={commune.contact[0]} target=;_blank; rel=noreferrer>{$content[commune.contact[1]]}</a></p>
</div>
{/each}
</div> </div>
{/each} {/each}
</div> </div>
</div> </div>
{/if} {/if}
@ -66,10 +71,15 @@
margin-top: 8rem; margin-top: 8rem;
} }
h4 { .country-name {
margin-bottom: 0.5rem;
}
.country-block {
margin-bottom: 2rem; margin-bottom: 2rem;
} }
.location-info { .location-info {
position: relative; position: relative;
margin-bottom: 2rem; margin-bottom: 2rem;

View File

@ -10,8 +10,9 @@
// Import components // Import components
// Main code // Main code
let loaded let loaded = writable(0)
let content = writable({}) let content = writable({})
loadLocaleContent(content,"countries",loaded)
let locale = loadLocaleContent(content,"compass-component",loaded,contentCallback) let locale = loadLocaleContent(content,"compass-component",loaded,contentCallback)
let qTag = 0 let qTag = 0
@ -52,8 +53,8 @@
/**/ /**/
</script> </script>
{#key loaded} {#key $loaded}
{#if Object.keys($content).length!=0} {#if $loaded==2}
<div id="container"> <div id="container">
<div id="text-container"> <div id="text-container">
<h1>{$content.heading}</h1> <h1>{$content.heading}</h1>

View File

@ -4,16 +4,17 @@
// Import statements // Import statements
import { onMount } from 'svelte' import { onMount } from 'svelte'
import { writable } from 'svelte/store'; import { writable } from 'svelte/store';
import { coops, addMarkersCoops } from '/js/coops.js' import { coopsByCountry, addMarkersCoops } from '/js/coops.js'
import { loadLocaleContent } from "/js/libraries/serverTools.js" import { loadLocaleContent } from "/js/libraries/serverTools.js"
// Import components // Import components
import "/js/components/map-component.js" import "/js/components/map-component.js"
// Main code // Main code
let loaded let loaded = writable(0)
let content = writable({}) let content = writable({})
loadLocaleContent(content,"countries",loaded)
let locale = loadLocaleContent(content,"cooperatives-component",loaded) let locale = loadLocaleContent(content,"cooperatives-component",loaded)
function mapCallbackCoops(createMap,content) { function mapCallbackCoops(createMap,content) {
@ -26,35 +27,39 @@
}) })
</script> </script>
{#key loaded} {#key $loaded}
{#if Object.keys($content).length!=0} {#if $loaded==2}
<div id="container"> <div id="container">
<div id="text-container"> <div id="text-container">
<h1>{$content.heading}</h1> <h1>{$content.heading}</h1>
<img id="coops-img" src="/img/common/coops.svg" alt="coops"> <img id="coops-img" src="/img/common/coops.svg" alt="coops">
<p>{$content.p1}</p> <p>{$content.p1}</p>
<p>{$content.p2}</p>
<h3>{$content.subheading1}</h3> <h3>{$content.subheading1}</h3>
<map-component id="map" callback={(createMap) => mapCallbackCoops(createMap,$content,locale)}></map-component> <map-component id="map" callback={(createMap) => mapCallbackCoops(createMap,$content,locale)}></map-component>
{#each coops as coop} {#each Object.entries(coopsByCountry) as [name,coops]}
<div class="location-info"> <h4 class="country-name">{$content[name]}</h4>
<div class="img-general-info"> <div class="country-block">
<div> {#each coops as coop}
<p><b>{$content.name}: </b>{coop.name}</p> <div class="location-info">
<p><b>{$content.location}: </b>{$content[coop.location[0]]}</p> <div class="img-general-info">
<p><b>{$content.market}: </b>{$content[coop.market]}</p> <div>
<p><b>{$content.workers}: </b>{coop.workers}</p> <p><b>{$content.name}: </b>{coop.name}</p>
<p><b>{$content.status}: </b>{$content[coop.status]}</p> <p><b>{$content.location}: </b>{$content[coop.location[0][0]] + (coop.location[0][1]=="" ? "" : ", " + $content[coop.location[0][1]])}</p>
<p><b>{$content.website}: </b><a href={"https://www."+coop.website} target="_blank" rel=noreferrer>{coop.website}</a></p> <p><b>{$content.market}: </b>{$content[coop.market]}</p>
<p><b>{$content.contact}: </b><a href={coop.contact[0]} target=;_blank; rel=noreferrer>{$content[coop.contact[1]]}</a></p> <p><b>{$content.workers}: </b>{coop.workers}</p>
<p><b>{$content.status}: </b>{$content[coop.status]}</p>
<p><b>{$content.website}: </b><a href={"https://www."+coop.website} target="_blank" rel=noreferrer>{coop.website}</a></p>
<p><b>{$content.contact}: </b><a href={coop.contact[0]} target=;_blank; rel=noreferrer>{$content[coop.contact[1]]}</a></p>
</div>
<picture>
<source srcset={"/img/coops/"+coop.logo+".webp"}>
<source srcset={"/img/coops/"+coop.logo+".png"}>
<img class="coop-logo" alt="logo">
</picture>
</div>
<p><b>{$content.description}: </b>{$content[coop.description]}</p>
</div> </div>
<picture> {/each}
<source srcset={"/img/coops/"+coop.logo+".webp"}>
<source srcset={"/img/coops/"+coop.logo+".png"}>
<img class="coop-logo" alt="logo">
</picture>
</div>
<p><b>{$content.description}: </b>{$content[coop.description]}</p>
</div> </div>
{/each} {/each}
</div> </div>
@ -98,13 +103,17 @@
max-width: 100%; max-width: 100%;
} }
h4 { .country-name {
margin-bottom: 1rem;
}
.country-block {
margin-bottom: 2rem; margin-bottom: 2rem;
} }
.location-info { .location-info {
position: relative; position: relative;
margin-bottom: 2rem; margin-bottom: 1rem;
} }
.location-info p { .location-info p {

View File

@ -9,15 +9,16 @@
// Import components // Import components
// Main code // Main code
let loaded let loaded = writable(0)
let content = writable({}) let content = writable({})
let locale = loadLocaleContent(content,"footer-component",loaded) loadLocaleContent(content,"countries",loaded)
loadLocaleContent(content,"footer-component",loaded)
</script> </script>
{#key loaded} {#key $loaded}
{#if Object.keys($content).length!=0} {#if $loaded==2}
<footer> <footer>
<div id="footer-content-container"> <div id="footer-content-container">
<div id="footer-grid-content-container" class="logged"> <div id="footer-grid-content-container" class="logged">

View File

@ -4,17 +4,18 @@
// Import statements // Import statements
import { onMount } from 'svelte' import { onMount } from 'svelte'
import { writable } from 'svelte/store'; import { writable } from 'svelte/store';
import { groups, addMarkersGroups } from '/js/groups.js' import { groupsByCountry, addMarkersGroups } from '/js/groups.js'
import { loadLocaleContent} from "/js/libraries/serverTools.js" import { loadLocaleContent} from "/js/libraries/serverTools.js"
// Import components // Import components
import "/js/components/map-component.js" import "/js/components/map-component.js"
// Main code // Main code
let loaded let loaded = writable(0)
let content = writable({}) let content = writable({})
let locale = loadLocaleContent(content,"groups-component",loaded) loadLocaleContent(content,"groups-component",loaded)
loadLocaleContent(content,"countries",loaded)
function mapCallbackGroups(createMap,content) { function mapCallbackGroups(createMap,content) {
let map = createMap([22, 0],2) let map = createMap([22, 0],2)
@ -22,26 +23,30 @@
} }
onMount(() => { onMount(() => {
// {console.log(loaded)}
}) })
</script> </script>
{#key loaded} {#key $loaded}
{#if Object.keys($content).length!=0} {#if $loaded==2}
<div id="container"> <div id="container">
<!--<img src="img/crowd.png" id="crowd" alt="crowd">--> <!--<img src="img/crowd.png" id="crowd" alt="crowd">-->
<div id="text-container"> <div id="text-container">
<h1>{$content.heading}</h1> <h1>{$content.heading}</h1>
<img id="groups-img" src="/img/common/groups.svg" alt="groups"> <img id="groups-img" src="/img/common/groups.svg" alt="groups">
<p>{$content.p1}</p> <p>{$content.p1}</p>
<p>{$content.p2}</p>
<h3>{$content.subheading1}</h3> <h3>{$content.subheading1}</h3>
<map-component id="map" callback={(createMap) => mapCallbackGroups(createMap,$content,locale)}></map-component> <map-component id="map" callback={(createMap) => mapCallbackGroups(createMap,$content)}></map-component>
{#each groups as group} {#each Object.entries(groupsByCountry) as [name,groups]}
<div class="location-info"> <h4 class="country-name">{$content[name]}</h4>
<p><b>{$content.location}: </b>{$content[group.location[0]]}</p> <div class="country-block">
<p><b>{$content.members}: </b>{group.members}</p> {#each groups as group}
<p><b>{$content.contact}: </b><a href={group.contact[0]} target=;_blank; rel=noreferrer>{$content[group.contact[1]]}</a></p> <div class="location-info">
<p><b>{$content.location}: </b>{$content[group.location[0][0]] + (group.location[0][1]=="" ? "" : ", " + $content[group.location[0][1]])}</p>
<p><b>{$content.members}: </b>{group.members}</p>
<p><b>{$content.contact}: </b><a href={group.contact[0]} target=;_blank; rel=noreferrer>{$content[group.contact[1]]}</a></p>
</div>
{/each}
</div> </div>
{/each} {/each}
</div> </div>
@ -65,12 +70,16 @@
margin-top: 8rem; margin-top: 8rem;
} }
h4 { .country-name {
margin-bottom: 0.5rem;
}
.country-block {
margin-bottom: 2rem; margin-bottom: 2rem;
} }
.location-info { .location-info {
margin-bottom: 2rem; margin-bottom: 0.75rem;
} }
.location-info p { .location-info p {

View File

@ -14,27 +14,22 @@
import "/js/components/map-component.js" import "/js/components/map-component.js"
// Main code // Main code
let loaded let loaded = writable(0)
let content = writable({}) let content = writable({})
let contentGroups = writable({}) loadLocaleContent(content,"groups-component",loaded)
let contentCommunities = writable({}) loadLocaleContent(content,"communities-component",loaded)
let contentCoops = writable({}) loadLocaleContent(content,"cooperatives-component",loaded)
let contentParties = writable({}) loadLocaleContent(content,"parties-component",loaded)
loadLocaleContent(content,"countries",loaded)
loadLocaleContent(contentGroups,"groups-component")
loadLocaleContent(contentCommunities,"communities-component")
loadLocaleContent(contentCoops,"cooperatives-component")
loadLocaleContent(contentParties,"parties-component")
let locale = loadLocaleContent(content,"join-us-component",loaded) let locale = loadLocaleContent(content,"join-us-component",loaded)
function mapCallback(createMap,content) { function mapCallback(createMap,content) {
let map = createMap([22, 0],2) let map = createMap([22, 0],2)
addMarkersGroups(map,$contentGroups) addMarkersGroups(map,content)
addMarkersCommunities(map,$contentCommunities) addMarkersCommunities(map,content)
addMarkersCoops(map,$contentCoops) addMarkersCoops(map,content)
addMarkersParties(map,$contentParties) addMarkersParties(map,content)
} }
onMount(() => { onMount(() => {
@ -42,8 +37,8 @@
}) })
</script> </script>
{#key loaded} {#key $loaded}
{#if Object.keys($content).length!=0} {#if $loaded==6}
<div id="container"> <div id="container">
<div id="text-container"> <div id="text-container">
<h1>{$content.heading}</h1> <h1>{$content.heading}</h1>

View File

@ -12,7 +12,7 @@
// Main code // Main code
let grid let grid
let gridWidth let gridWidth
let loaded let loaded = writable(0)
let content = writable({}) let content = writable({})
function changeWidth(locale) { function changeWidth(locale) {
@ -24,6 +24,7 @@
} }
} }
loadLocaleContent(content,"countries",loaded)
let locale = loadLocaleContent(content,"landing-component",loaded,changeWidth) let locale = loadLocaleContent(content,"landing-component",loaded,changeWidth)
changeWidth(locale) changeWidth(locale)
@ -32,8 +33,8 @@
}) })
</script> </script>
{#key loaded} {#key $loaded}
{#if Object.keys($content).length!=0} {#if $loaded==2}
<div id="container"> <div id="container">
<picture> <picture>
<source srcset="/img/crowd.webp"> <source srcset="/img/crowd.webp">
@ -121,6 +122,7 @@
grid-template-columns: var(--grid-width); grid-template-columns: var(--grid-width);
grid-template-rows: var(--grid-width); grid-template-rows: var(--grid-width);
grid-gap: 4rem; grid-gap: 4rem;
row-gap: 3rem;
margin-top: 2rem; margin-top: 2rem;
} }

View File

@ -26,12 +26,12 @@
let root let root
let main let main
let loaded let loaded = writable(0)
let content = writable({}) let content = writable({})
loadLocaleContent(content,"countries",loaded)
let locale = loadLocaleContent(content,"manifesto-component",loaded) let locale = loadLocaleContent(content,"manifesto-component",loaded)
const htmlDelims = ["ul","ol"] const htmlDelims = ["ul","ol"]
getData("/locales/"+ locale + "/manifesto.txt",function(response) { getData("/locales/"+ locale + "/manifesto.txt",function(response) {
let splitText = response.split(/\r?\n/) let splitText = response.split(/\r?\n/)
@ -164,8 +164,8 @@
}) })
</script> </script>
{#key loaded} {#key $loaded}
{#if Object.keys($content).length!=0} {#if $loaded==2}
<div id="container" bind:this={root}> <div id="container" bind:this={root}>
<div id="text-container"> <div id="text-container">
{#key key} {#key key}

View File

@ -11,7 +11,7 @@
let hambInput let hambInput
let navbar let navbar
let localesDropdown let localesDropdown
let loaded let loaded = writable(0)
let content = writable({}) let content = writable({})
let locale = loadLocaleContent(content,"navbar-component",loaded) let locale = loadLocaleContent(content,"navbar-component",loaded)

View File

@ -4,17 +4,18 @@
// Import statements // Import statements
import { onMount } from 'svelte' import { onMount } from 'svelte'
import { writable } from 'svelte/store'; import { writable } from 'svelte/store';
import { parties, addMarkersParties } from '/js/parties.js' import { partiesByCountry, addMarkersParties } from '/js/parties.js'
import { loadLocaleContent } from "/js/libraries/serverTools.js" import { loadLocaleContent } from "/js/libraries/serverTools.js"
// Import components // Import components
import "/js/components/map-component.js" import "/js/components/map-component.js"
// Main code // Main code
let loaded let loaded = writable(0)
let content = writable({}) let content = writable({})
let locale = loadLocaleContent(content,"parties-component",loaded) loadLocaleContent(content,"countries",loaded)
loadLocaleContent(content,"parties-component",loaded)
function mapCallbackParties(createMap,content) { function mapCallbackParties(createMap,content) {
let map = createMap([22, 0],2) let map = createMap([22, 0],2)
@ -26,8 +27,8 @@
}) })
</script> </script>
{#key loaded} {#key $loaded}
{#if Object.keys($content).length!=0} {#if $loaded==2}
<div id="container"> <div id="container">
<!--<img src="img/crowd.png" id="crowd" alt="crowd">--> <!--<img src="img/crowd.png" id="crowd" alt="crowd">-->
<div id="text-container"> <div id="text-container">
@ -36,21 +37,26 @@
<p>{$content.p1}</p> <p>{$content.p1}</p>
<h3>{$content.subheading1}</h3> <h3>{$content.subheading1}</h3>
<map-component id="map" callback={(createMap) => mapCallbackParties(createMap,$content)}></map-component> <map-component id="map" callback={(createMap) => mapCallbackParties(createMap,$content)}></map-component>
{#each parties as party} {#each Object.entries(partiesByCountry) as [name,parties]}
<div class="location-info"> <h4 class="country-name">{name}</h4>
<div class="img-general-info"> <div class="country-block">
<picture> {#each parties as party}
<source srcset={"/img/parties/"+party.logo+".webp"}> <div class="location-info">
<source srcset={"/img/parties/"+party.logo+".jpg"}> <div class="img-general-info">
<img class="party-logo" alt="logo"> <picture>
</picture> <source srcset={"/img/parties/"+party.logo+".webp"}>
<div> <source srcset={"/img/parties/"+party.logo+".jpg"}>
<p><b>{$content.name}: </b>{party.name}</p> <img class="party-logo" alt="logo">
<p><b>{$content.location}: </b>{$content[party.location[0]]}</p> </picture>
<p><b>{$content.link}: </b><a href={party.link} target=;_blank; rel=noreferrer>{party.link}</a></p> <div>
<p><b>{$content.name}: </b>{party.name}</p>
<p><b>{$content.location}: </b>{$content[party.location[0]]}</p>
<p><b>{$content.link}: </b><a href={party.link} target=;_blank; rel=noreferrer>{party.link}</a></p>
</div>
</div> </div>
<p><b>{$content.description}: </b>{$content[party.description]}</p>
</div> </div>
<p><b>{$content.description}: </b>{$content[party.description]}</p> {/each}
</div> </div>
{/each} {/each}
</div> </div>
@ -78,9 +84,17 @@
margin-bottom: 2rem; margin-bottom: 2rem;
} }
.country-name {
margin-bottom: 1rem;
}
.country-block {
margin-bottom: 2rem;
}
.location-info { .location-info {
position: relative; position: relative;
margin-bottom: 2rem; margin-bottom: 1rem;
} }
.location-info p { .location-info p {
@ -93,7 +107,7 @@
width: 100%; width: 100%;
gap: 1.5rem; gap: 1.5rem;
align-items: center; align-items: center;
margin-bottom: 1rem; margin-bottom: 0.75rem;
} }
.img-general-info>:nth-child(2) { .img-general-info>:nth-child(2) {
@ -103,7 +117,7 @@
.party-logo { .party-logo {
position: relative; position: relative;
right: 0; right: 0;
max-height: 6rem; max-height: 5.5rem;
max-width: 100%; max-width: 100%;
border-radius: 1rem; border-radius: 1rem;
} }

View File

@ -5,24 +5,25 @@
import { onMount } from 'svelte' import { onMount } from 'svelte'
import { writable } from 'svelte/store'; import { writable } from 'svelte/store';
import { loadLocaleContent } from "/js/libraries/serverTools.js" import { loadLocaleContent } from "/js/libraries/serverTools.js"
import { partners } from '/js/partners.js' import { partnersByCountry } from '/js/partners.js'
// Import components // Import components
import "/js/components/map-component.js" import "/js/components/map-component.js"
// Main code // Main code
let loaded let loaded = writable(0)
let content = writable({}) let content = writable({})
let locale = loadLocaleContent(content,"partners-component",loaded) loadLocaleContent(content,"countries",loaded)
loadLocaleContent(content,"partners-component",loaded)
onMount(() => { onMount(() => {
}) })
</script> </script>
{#key loaded} {#key $loaded}
{#if Object.keys($content).length!=0} {#if $loaded==2}
<div id="container"> <div id="container">
<!--<img src="img/crowd.png" id="crowd" alt="crowd">--> <!--<img src="img/crowd.png" id="crowd" alt="crowd">-->
<div id="text-container"> <div id="text-container">
@ -30,22 +31,27 @@
<img id="hands-img" src="/img/common/handshake.svg" alt="hands"> <img id="hands-img" src="/img/common/handshake.svg" alt="hands">
<p>{$content.p1}</p> <p>{$content.p1}</p>
<h3>{$content.subheading1}</h3> <h3>{$content.subheading1}</h3>
<h4>{$content.subheading2}</h4> {#each Object.entries(partnersByCountry) as [name,partners]}
{#each partners as partner} <h4 class="country-name">{$content[name]}</h4>
<div class="location-info"> <div class="country-block">
<div class="img-general-info"> {#each partners as partner}
<picture> <div class="location-info">
<source srcset={"/img/partners/"+partner.logo+".webp"}> <div class="img-general-info">
<source srcset={"/img/partners/"+partner.logo+".jpg"}> <picture>
<img class="partner-logo" alt="logo"> <source srcset={"/img/partners/"+partner.logo+".webp"}>
</picture> <source srcset={"/img/partners/"+partner.logo+".jpg"}>
<div> <img class="partner-logo" alt="logo">
<p><b>{$content.name}: </b>{partner.name}</p> </picture>
<p><b>{$content.type}: </b>{$content[partner.type]}</p> <div>
<p><b>{$content.link}: </b><a href={partner.link} target=;_blank; rel=noreferrer>{partner.link}</a></p> <p><b>{$content.name}: </b>{partner.name}</p>
<p><b>{$content.type}: </b>{$content[partner.type]}</p>
<p><b>{$content.location}: </b>{$content[partner.location[0][0]] + (partner.location[0][1]=="" ? "" : ", " + $content[partner.location[0][1]])}</p>
<p><b>{$content.link}: </b><a href={partner.link} target=;_blank; rel=noreferrer>{partner.link}</a></p>
</div>
</div> </div>
<p><b>{$content.description}: </b>{$content[partner.description]}</p>
</div> </div>
<p><b>{$content.description}: </b>{$content[partner.description]}</p> {/each}
</div> </div>
{/each} {/each}
</div> </div>
@ -76,7 +82,7 @@
width: 100%; width: 100%;
gap: 1.5rem; gap: 1.5rem;
align-items: center; align-items: center;
margin-bottom: 1rem; margin-bottom: 0.5rem;
} }
.img-general-info>:nth-child(2) { .img-general-info>:nth-child(2) {
@ -86,7 +92,7 @@
.partner-logo { .partner-logo {
position: relative; position: relative;
right: 0; right: 0;
max-height: 6rem; max-height: 6.5rem;
max-width: 100%; max-width: 100%;
border-radius: 1rem; border-radius: 1rem;
} }
@ -95,9 +101,17 @@
margin-bottom: 2rem; margin-bottom: 2rem;
} }
.country-name {
margin-bottom: 0.5rem;
}
.country-block {
margin-bottom: 2rem;
}
.location-info { .location-info {
position: relative; position: relative;
margin-bottom: 2rem; margin-bottom: 0.5rem;
} }
.location-info p { .location-info p {

View File

@ -1,25 +1,36 @@
export let communes = [ export let communes = [
{ {
location: ["CanadaMontreal",[45.55541047232767, -73.42859611607271]], location: [["Canada","Montreal"],[45.55541047232767, -73.42859611607271]],
status: "forming", status: "forming",
members: 2, members: 2,
contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["EstoniaKohtlaJarve",[59.409521829709504, 27.288415912535914]], location: [["Estonia","KohtlaJarve"],[59.409521829709504, 27.288415912535914]],
status: "forming", status: "forming",
members: 2, members: 2,
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["Latvia",[56.934159375258055, 25.269099001330265]], location: [["Latvia",""],[56.934159375258055, 25.269099001330265]],
status: "forming", status: "forming",
members: 1, members: 1,
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
} }
] ]
export let communesByCountry = {}
for (let c of communes) {
let country = c.location[0][0]
if (country in communesByCountry) {
communesByCountry[country].push(c)
}
else {
communesByCountry[country] = [c]
}
}
export function addMarkersCommunes(map,content) { export function addMarkersCommunes(map,content) {
for (let g of communes) { for (let g of communes) {
let coordinates let coordinates
@ -30,7 +41,9 @@ export function addMarkersCommunes(map,content) {
text += fieldText + "<a href='" + g.contact[0] + "' target='_blank' rel=noreferrer>" + content[g.contact[1]]+ "</a>" text += fieldText + "<a href='" + g.contact[0] + "' target='_blank' rel=noreferrer>" + content[g.contact[1]]+ "</a>"
} }
else if (field=="location") { else if (field=="location") {
text += fieldText + content[g[field][0]]+ "<br>" let location = g[field][0]
let town = location[1]=="" ? "" : ", " + content[location[1]]
text += fieldText + content[location[0]] + town + "<br>"
coordinates = g[field][1] coordinates = g[field][1]
} }
else if (field=="status") { else if (field=="status") {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{S as t,i as e,a as o,b as r,s as a,e as i,n,d as s,c as m,f as c,t as f,g as l,h as d,v as g,l as h,q as p,m as u}from"./index-4348483d.js";import{w as b}from"./index-71440b21.js";import{loadLocaleContent as w}from"../../../../../../../../../js/libraries/serverTools.js";function v(t){let e,o,a,i,n,m,b,w,v,y,k,x,j,L,_,z,B,C,T,U,A,H,M=t[0].contactUs+"",R=t[0].inviteLink+"",D=t[0].inviteLink+"";return{c(){e=c("footer"),o=c("div"),a=c("div"),i=c("div"),n=c("h2"),m=f(M),b=l(),w=c("p"),v=f("Discord: "),y=c("a"),k=f(R),x=l(),j=c("p"),L=f("WhatsApp: "),_=c("a"),z=f(D),B=l(),C=c("button"),C.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="42.545" height="72.601" viewBox="0 0 42.545 72.601"><g id="Group_268" data-name="Group 268" transform="translate(-6.177 -2.399)"><rect id="Rectangle_146" data-name="Rectangle 146" width="11" height="51" rx="5.5" transform="translate(22 24)" fill="#cb1816"></rect><path id="Path_1145" data-name="Path 1145" d="M23.814,4.021a5,5,0,0,1,7.372,0l16.134,17.6c2.94,3.207,1.046,10.4-3.686,8.379S28.02,14.081,28.391,13.524,16.544,27.976,11.366,30,4.741,24.828,7.68,21.621Z" fill="#DD1C1A"></path></g></svg>',T=l(),U=c("p"),U.innerHTML='Licensed under a Creative Commons <a href="https://creativecommons.org/licenses/by/4.0/legalcode " target="_blank" rel="noreferrer">CC BY 4.0 license.</a>',d(y,"href","https://discord.gg/xAPZmyr8B6"),d(y,"target","_blank"),d(y,"rel","noreferrer"),g(y,"margin-left","1.8rem"),d(_,"href","https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh"),d(_,"target","_blank"),d(_,"rel","noreferrer"),g(_,"margin-left","0.5rem"),d(i,"id","contact-us-container"),d(a,"id","footer-grid-content-container"),d(a,"class","logged"),d(C,"id","footer-up"),d(C,"aria-label","go up"),d(U,"id","footer-copyright"),d(o,"id","footer-content-container")},m(s,c){r(s,e,c),h(e,o),h(o,a),h(a,i),h(i,n),h(n,m),h(i,b),h(i,w),h(w,v),h(w,y),h(y,k),h(i,x),h(i,j),h(j,L),h(j,_),h(_,z),h(o,B),h(o,C),h(o,T),h(o,U),A||(H=p(C,"click",t[3]),A=!0)},p(t,e){1&e&&M!==(M=t[0].contactUs+"")&&u(m,M),1&e&&R!==(R=t[0].inviteLink+"")&&u(k,R),1&e&&D!==(D=t[0].inviteLink+"")&&u(z,D)},d(t){t&&s(e),A=!1,H()}}}function y(t){let e,o=0!=Object.keys(t[0]).length,a=o&&v(t);return{c(){a&&a.c(),e=i(),this.c=n},m(t,o){a&&a.m(t,o),r(t,e,o)},p(t,[r]){1&r&&(o=0!=Object.keys(t[0]).length),o?a?a.p(t,r):(a=v(t),a.c(),a.m(e.parentNode,e)):a&&(a.d(1),a=null)},i:n,o:n,d(t){a&&a.d(t),t&&s(e)}}}function k(t,e,o){let r,a,i=b({});m(t,i,(t=>o(0,r=t))),w(i,"footer-component",a);return[r,a,i,()=>{location.href="#"}]}class x extends t{constructor(t){super(),this.shadowRoot.innerHTML="<style>@import '/css/common.css';footer{position:relative;bottom:0;width:100%;height:auto;background:#5B6970;border-top:#cb1816 solid 0.5rem}footer p,footer a{font-family:var(--sans-serif)}#footer-content-container{position:relative;margin:auto;padding-top:2rem;max-width:116rem;width:97vw}#footer-grid-content-container{display:grid;margin-left:2rem;margin-right:2rem;margin-bottom:1rem}.logged{grid-template-columns:auto auto 2rem}footer h2{color:#ffffff;font-size:1.3rem;margin-bottom:0.5rem}#footer-copyright{position:relative;margin:auto;width:100%;bottom:0rem;height:3rem;top:0rem;margin-bottom:0;font-size:1rem;text-align:center}#footer-copyright *{font-size:1rem}footer a{font-size:1.1rem;color:#ffffff}footer p{display:block;font-size:1.1rem;color:#d8d8d8;font-family:var(--sans-serif,sans-serif);margin-bottom:0.5rem}#contact-us-container{width:16rem}#footer-up{position:absolute;width:4.8rem;height:4.8rem;border-radius:3.4rem;top:4rem;right:2rem;background:#ffffff}#footer-up svg{width:40%;height:auto}@media only screen and (max-width: 1170px){.logged{grid-template-rows:auto auto auto;grid-template-columns:auto;row-gap:2rem}#footer-copyright{height:1rem;top:-2rem}}</style>",e(this,{target:this.shadowRoot,props:o(this.attributes),customElement:!0},k,y,a,{},null),t&&t.target&&r(t.target,this,t.anchor)}}customElements.define("footer-component",x);export{x as default}; import{S as t,i as e,a as o,b as r,s as a,e as i,n,d as s,c as m,f as c,t as f,g as d,h as l,v as g,l as h,q as p,m as u}from"./index-4348483d.js";import{w as b}from"./index-71440b21.js";import{loadLocaleContent as w}from"../../../../../../../../../js/libraries/serverTools.js";function v(t){let e,o,a,i,n,m,b,w,v,y,x,k,L,j,_,z,B,C,T,U,A,H,M=t[1].contactUs+"",R=t[1].inviteLink+"",D=t[1].inviteLink+"";return{c(){e=c("footer"),o=c("div"),a=c("div"),i=c("div"),n=c("h2"),m=f(M),b=d(),w=c("p"),v=f("Discord: "),y=c("a"),x=f(R),k=d(),L=c("p"),j=f("WhatsApp: "),_=c("a"),z=f(D),B=d(),C=c("button"),C.innerHTML='<svg xmlns="http://www.w3.org/2000/svg" width="42.545" height="72.601" viewBox="0 0 42.545 72.601"><g id="Group_268" data-name="Group 268" transform="translate(-6.177 -2.399)"><rect id="Rectangle_146" data-name="Rectangle 146" width="11" height="51" rx="5.5" transform="translate(22 24)" fill="#cb1816"></rect><path id="Path_1145" data-name="Path 1145" d="M23.814,4.021a5,5,0,0,1,7.372,0l16.134,17.6c2.94,3.207,1.046,10.4-3.686,8.379S28.02,14.081,28.391,13.524,16.544,27.976,11.366,30,4.741,24.828,7.68,21.621Z" fill="#DD1C1A"></path></g></svg>',T=d(),U=c("p"),U.innerHTML='Licensed under a Creative Commons <a href="https://creativecommons.org/licenses/by/4.0/legalcode " target="_blank" rel="noreferrer">CC BY 4.0 license.</a>',l(y,"href","https://discord.gg/xAPZmyr8B6"),l(y,"target","_blank"),l(y,"rel","noreferrer"),g(y,"margin-left","1.8rem"),l(_,"href","https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh"),l(_,"target","_blank"),l(_,"rel","noreferrer"),g(_,"margin-left","0.5rem"),l(i,"id","contact-us-container"),l(a,"id","footer-grid-content-container"),l(a,"class","logged"),l(C,"id","footer-up"),l(C,"aria-label","go up"),l(U,"id","footer-copyright"),l(o,"id","footer-content-container")},m(s,c){r(s,e,c),h(e,o),h(o,a),h(a,i),h(i,n),h(n,m),h(i,b),h(i,w),h(w,v),h(w,y),h(y,x),h(i,k),h(i,L),h(L,j),h(L,_),h(_,z),h(o,B),h(o,C),h(o,T),h(o,U),A||(H=p(C,"click",t[4]),A=!0)},p(t,e){2&e&&M!==(M=t[1].contactUs+"")&&u(m,M),2&e&&R!==(R=t[1].inviteLink+"")&&u(x,R),2&e&&D!==(D=t[1].inviteLink+"")&&u(z,D)},d(t){t&&s(e),A=!1,H()}}}function y(t){let e,o=2==t[0]&&v(t);return{c(){o&&o.c(),e=i()},m(t,a){o&&o.m(t,a),r(t,e,a)},p(t,r){2==t[0]?o?o.p(t,r):(o=v(t),o.c(),o.m(e.parentNode,e)):o&&(o.d(1),o=null)},d(t){o&&o.d(t),t&&s(e)}}}function x(t){let e,o=t[0],m=y(t);return{c(){m.c(),e=i(),this.c=n},m(t,o){m.m(t,o),r(t,e,o)},p(t,[r]){1&r&&a(o,o=t[0])?(m.d(1),m=y(t),m.c(),m.m(e.parentNode,e)):m.p(t,r)},i:n,o:n,d(t){t&&s(e),m.d(t)}}}function k(t,e,o){let r,a,i=b(0);m(t,i,(t=>o(0,r=t)));let n=b({});m(t,n,(t=>o(1,a=t))),w(n,"countries",i),w(n,"footer-component",i);return[r,a,i,n,()=>{location.href="#"}]}class L extends t{constructor(t){super(),this.shadowRoot.innerHTML="<style>@import '/css/common.css';footer{position:relative;bottom:0;width:100%;height:auto;background:#5B6970;border-top:#cb1816 solid 0.5rem}footer p,footer a{font-family:var(--sans-serif)}#footer-content-container{position:relative;margin:auto;padding-top:2rem;max-width:116rem;width:97vw}#footer-grid-content-container{display:grid;margin-left:2rem;margin-right:2rem;margin-bottom:1rem}.logged{grid-template-columns:auto auto 2rem}footer h2{color:#ffffff;font-size:1.3rem;margin-bottom:0.5rem}#footer-copyright{position:relative;margin:auto;width:100%;bottom:0rem;height:3rem;top:0rem;margin-bottom:0;font-size:1rem;text-align:center}#footer-copyright *{font-size:1rem}footer a{font-size:1.1rem;color:#ffffff}footer p{display:block;font-size:1.1rem;color:#d8d8d8;font-family:var(--sans-serif,sans-serif);margin-bottom:0.5rem}#contact-us-container{width:16rem}#footer-up{position:absolute;width:4.8rem;height:4.8rem;border-radius:3.4rem;top:4rem;right:2rem;background:#ffffff}#footer-up svg{width:40%;height:auto}@media only screen and (max-width: 1170px){.logged{grid-template-rows:auto auto auto;grid-template-columns:auto;row-gap:2rem}#footer-copyright{height:1rem;top:-2rem}}</style>",e(this,{target:this.shadowRoot,props:o(this.attributes),customElement:!0},k,x,a,{},null),t&&t.target&&r(t.target,this,t.anchor)}}customElements.define("footer-component",L);export{L as default};

View File

@ -1 +1 @@
import{S as t,i as o,a as n,b as e,s as r,e as a,n as i,d as s,c as m,o as c,f as l,t as p,g,h,j as u,k as d,l as f,m as b,p as x}from"./index-4348483d.js";import{w as j}from"./index-71440b21.js";import{groups as v,addMarkersGroups as w}from"../../../../../../../../../js/groups.js";import{loadLocaleContent as k}from"../../../../../../../../../js/libraries/serverTools.js";import"../../../../../../../../../js/components/map-component.js";function y(t,o,n){const e=t.slice();return e[6]=o[n],e}function z(t){let o,n,r,a,i,m,c,j,w,k,z,E,O,R,T,A,C,H,L,M,N=t[0].heading+"",S=t[0].p1+"",_=t[0].p2+"",q=t[0].subheading1+"",B=v,F=[];for(let o=0;o<B.length;o+=1)F[o]=D(y(t,B,o));return{c(){o=l("div"),n=l("div"),r=l("h1"),a=p(N),i=g(),m=l("img"),j=g(),w=l("p"),k=p(S),z=g(),E=l("p"),O=p(_),R=g(),T=l("h3"),A=p(q),C=g(),H=l("map-component"),M=g();for(let t=0;t<F.length;t+=1)F[t].c();h(m,"id","groups-img"),u(m.src,c="/img/common/groups.svg")||h(m,"src","/img/common/groups.svg"),h(m,"alt","groups"),d(H,"id","map"),d(H,"callback",L=t[5]),h(n,"id","text-container"),h(o,"id","container")},m(t,s){e(t,o,s),f(o,n),f(n,r),f(r,a),f(n,i),f(n,m),f(n,j),f(n,w),f(w,k),f(n,z),f(n,E),f(E,O),f(n,R),f(n,T),f(T,A),f(n,C),f(n,H),f(n,M);for(let t=0;t<F.length;t+=1)F[t].m(n,null)},p(t,o){if(1&o&&N!==(N=t[0].heading+"")&&b(a,N),1&o&&S!==(S=t[0].p1+"")&&b(k,S),1&o&&_!==(_=t[0].p2+"")&&b(O,_),1&o&&q!==(q=t[0].subheading1+"")&&b(A,q),1&o&&L!==(L=t[5])&&d(H,"callback",L),1&o){let e;for(B=v,e=0;e<B.length;e+=1){const r=y(t,B,e);F[e]?F[e].p(r,o):(F[e]=D(r),F[e].c(),F[e].m(n,null))}for(;e<F.length;e+=1)F[e].d(1);F.length=B.length}},d(t){t&&s(o),x(F,t)}}}function D(t){let o,n,r,a,i,m,c,u,d,x,j,v,w,k,y,z,D,E,O,R,T=t[0].location+"",A=t[0][t[6].location[0]]+"",C=t[0].members+"",H=t[6].members+"",L=t[0].contact+"",M=t[0][t[6].contact[1]]+"";return{c(){o=l("div"),n=l("p"),r=l("b"),a=p(T),i=p(": "),m=p(A),c=g(),u=l("p"),d=l("b"),x=p(C),j=p(": "),v=p(H),w=g(),k=l("p"),y=l("b"),z=p(L),D=p(": "),E=l("a"),O=p(M),R=g(),h(E,"href",t[6].contact[0]),h(E,"target",";_blank;"),h(E,"rel","noreferrer"),h(o,"class","location-info")},m(t,s){e(t,o,s),f(o,n),f(n,r),f(r,a),f(r,i),f(n,m),f(o,c),f(o,u),f(u,d),f(d,x),f(d,j),f(u,v),f(o,w),f(o,k),f(k,y),f(y,z),f(y,D),f(k,E),f(E,O),f(o,R)},p(t,o){1&o&&T!==(T=t[0].location+"")&&b(a,T),1&o&&A!==(A=t[0][t[6].location[0]]+"")&&b(m,A),1&o&&C!==(C=t[0].members+"")&&b(x,C),1&o&&L!==(L=t[0].contact+"")&&b(z,L),1&o&&M!==(M=t[0][t[6].contact[1]]+"")&&b(O,M)},d(t){t&&s(o)}}}function E(t){let o,n=0!=Object.keys(t[0]).length,r=n&&z(t);return{c(){r&&r.c(),o=a(),this.c=i},m(t,n){r&&r.m(t,n),e(t,o,n)},p(t,[e]){1&e&&(n=0!=Object.keys(t[0]).length),n?r?r.p(t,e):(r=z(t),r.c(),r.m(o.parentNode,o)):r&&(r.d(1),r=null)},i:i,o:i,d(t){r&&r.d(t),t&&s(o)}}}function O(t,o,n){let e,r,a=j({});m(t,a,(t=>n(0,e=t)));let i=k(a,"groups-component",r);function s(t,o){let n=t([22,0],2);w(n,o)}c((()=>{}));return[e,r,a,i,s,t=>s(t,e)]}class R extends t{constructor(t){super(),this.shadowRoot.innerHTML="<style>@import '/css/common.css';#groups-img{position:absolute;width:14rem;left:50%;transform:translate(-50%);z-index:0;opacity:0.2}#text-container>:nth-child(3){margin-top:8rem}.location-info{margin-bottom:2rem}.location-info p{margin-bottom:0}a{color:#DD1C1A}#map{--height:30rem;--width:100%;--margin-bottom:3rem}#text-container{position:relative;max-width:calc(100vw - 4rem);margin:auto}h1{margin-bottom:1rem;font-size:2.2rem;text-align:center}h3{margin-bottom:1rem}#container{margin:auto;max-width:800px;margin-top:1rem;margin-bottom:4rem}#container>div>p{margin-bottom:1rem}#container p{text-align:justify}</style>",o(this,{target:this.shadowRoot,props:n(this.attributes),customElement:!0},O,E,r,{},null),t&&t.target&&e(t.target,this,t.anchor)}}customElements.define("groups-component",R);export{R as default}; import{S as t,i as o,a as n,b as e,s as r,e as i,n as a,d as c,c as s,o as m,f as l,t as g,g as p,h as u,j as h,k as d,l as f,m as b,p as x}from"./index-4348483d.js";import{w as j}from"./index-71440b21.js";import{addMarkersGroups as v,groupsByCountry as w}from"../../../../../../../../../js/groups.js";import{loadLocaleContent as y}from"../../../../../../../../../js/libraries/serverTools.js";import"../../../../../../../../../js/components/map-component.js";function k(t,o,n){const e=t.slice();return e[6]=o[n][0],e[7]=o[n][1],e}function z(t,o,n){const e=t.slice();return e[10]=o[n],e}function D(t){let o,n,r,i,a,s,m,j,v,y,z,D,E,O,R,T,A,C=t[1].heading+"",H=t[1].p1+"",L=t[1].subheading1+"",M=Object.entries(w),S=[];for(let o=0;o<M.length;o+=1)S[o]=N(k(t,M,o));return{c(){o=l("div"),n=l("div"),r=l("h1"),i=g(C),a=p(),s=l("img"),j=p(),v=l("p"),y=g(H),z=p(),D=l("h3"),E=g(L),O=p(),R=l("map-component"),A=p();for(let t=0;t<S.length;t+=1)S[t].c();u(s,"id","groups-img"),h(s.src,m="/img/common/groups.svg")||u(s,"src","/img/common/groups.svg"),u(s,"alt","groups"),d(R,"id","map"),d(R,"callback",T=t[5]),u(n,"id","text-container"),u(o,"id","container")},m(t,c){e(t,o,c),f(o,n),f(n,r),f(r,i),f(n,a),f(n,s),f(n,j),f(n,v),f(v,y),f(n,z),f(n,D),f(D,E),f(n,O),f(n,R),f(n,A);for(let t=0;t<S.length;t+=1)S[t].m(n,null)},p(t,o){if(2&o&&C!==(C=t[1].heading+"")&&b(i,C),2&o&&H!==(H=t[1].p1+"")&&b(y,H),2&o&&L!==(L=t[1].subheading1+"")&&b(E,L),2&o&&T!==(T=t[5])&&d(R,"callback",T),2&o){let e;for(M=Object.entries(w),e=0;e<M.length;e+=1){const r=k(t,M,e);S[e]?S[e].p(r,o):(S[e]=N(r),S[e].c(),S[e].m(n,null))}for(;e<S.length;e+=1)S[e].d(1);S.length=M.length}},d(t){t&&c(o),x(S,t)}}}function E(t){let o,n,r,i,a,s,m,h,d,x,j,v,w,y,k,z,D,E,N,O=t[1].location+"",R=t[1][t[10].location[0][0]]+(""==t[10].location[0][1]?"":", "+t[1][t[10].location[0][1]]),T=t[1].members+"",A=t[10].members+"",C=t[1].contact+"",H=t[1][t[10].contact[1]]+"";return{c(){o=l("div"),n=l("p"),r=l("b"),i=g(O),a=g(": "),s=g(R),m=p(),h=l("p"),d=l("b"),x=g(T),j=g(": "),v=g(A),w=p(),y=l("p"),k=l("b"),z=g(C),D=g(": "),E=l("a"),N=g(H),u(E,"href",t[10].contact[0]),u(E,"target",";_blank;"),u(E,"rel","noreferrer"),u(o,"class","location-info")},m(t,c){e(t,o,c),f(o,n),f(n,r),f(r,i),f(r,a),f(n,s),f(o,m),f(o,h),f(h,d),f(d,x),f(d,j),f(h,v),f(o,w),f(o,y),f(y,k),f(k,z),f(k,D),f(y,E),f(E,N)},p(t,o){2&o&&O!==(O=t[1].location+"")&&b(i,O),2&o&&R!==(R=t[1][t[10].location[0][0]]+(""==t[10].location[0][1]?"":", "+t[1][t[10].location[0][1]]))&&b(s,R),2&o&&T!==(T=t[1].members+"")&&b(x,T),2&o&&C!==(C=t[1].contact+"")&&b(z,C),2&o&&H!==(H=t[1][t[10].contact[1]]+"")&&b(N,H)},d(t){t&&c(o)}}}function N(t){let o,n,r,i,a,s=t[1][t[6]]+"",m=t[7],h=[];for(let o=0;o<m.length;o+=1)h[o]=E(z(t,m,o));return{c(){o=l("h4"),n=g(s),r=p(),i=l("div");for(let t=0;t<h.length;t+=1)h[t].c();a=p(),u(o,"class","country-name"),u(i,"class","country-block")},m(t,c){e(t,o,c),f(o,n),e(t,r,c),e(t,i,c);for(let t=0;t<h.length;t+=1)h[t].m(i,null);f(i,a)},p(t,o){if(2&o&&s!==(s=t[1][t[6]]+"")&&b(n,s),2&o){let n;for(m=t[7],n=0;n<m.length;n+=1){const e=z(t,m,n);h[n]?h[n].p(e,o):(h[n]=E(e),h[n].c(),h[n].m(i,a))}for(;n<h.length;n+=1)h[n].d(1);h.length=m.length}},d(t){t&&c(o),t&&c(r),t&&c(i),x(h,t)}}}function O(t){let o,n=2==t[0]&&D(t);return{c(){n&&n.c(),o=i()},m(t,r){n&&n.m(t,r),e(t,o,r)},p(t,e){2==t[0]?n?n.p(t,e):(n=D(t),n.c(),n.m(o.parentNode,o)):n&&(n.d(1),n=null)},d(t){n&&n.d(t),t&&c(o)}}}function R(t){let o,n=t[0],s=O(t);return{c(){s.c(),o=i(),this.c=a},m(t,n){s.m(t,n),e(t,o,n)},p(t,[e]){1&e&&r(n,n=t[0])?(s.d(1),s=O(t),s.c(),s.m(o.parentNode,o)):s.p(t,e)},i:a,o:a,d(t){t&&c(o),s.d(t)}}}function T(t,o,n){let e,r,i=j(0);s(t,i,(t=>n(0,e=t)));let a=j({});function c(t,o){let n=t([22,0],2);v(n,o)}s(t,a,(t=>n(1,r=t))),y(a,"groups-component",i),y(a,"countries",i),m((()=>{}));return[e,r,i,a,c,t=>c(t,r)]}class A extends t{constructor(t){super(),this.shadowRoot.innerHTML="<style>@import '/css/common.css';#groups-img{position:absolute;width:14rem;left:50%;transform:translate(-50%);z-index:0;opacity:0.2}#text-container>:nth-child(3){margin-top:8rem}.country-name{margin-bottom:0.5rem}.country-block{margin-bottom:2rem}.location-info{margin-bottom:0.75rem}.location-info p{margin-bottom:0}a{color:#DD1C1A}#map{--height:30rem;--width:100%;--margin-bottom:3rem}#text-container{position:relative;max-width:calc(100vw - 4rem);margin:auto}h1{margin-bottom:1rem;font-size:2.2rem;text-align:center}h3{margin-bottom:1rem}#container{margin:auto;max-width:800px;margin-top:1rem;margin-bottom:4rem}#container>div>p{margin-bottom:1rem}#container p{text-align:justify}</style>",o(this,{target:this.shadowRoot,props:n(this.attributes),customElement:!0},T,R,r,{},null),t&&t.target&&e(t.target,this,t.anchor)}}customElements.define("groups-component",A);export{A as default};

View File

@ -0,0 +1,53 @@
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
import { n as noop, s as safe_not_equal } from './index-2e2aa7d2.js';
const subscriber_queue = [];
/**
* Create a `Writable` store that allows both updating and reading by subscription.
* @param {*=}value initial value
* @param {StartStopNotifier=}start start and stop notifications for subscriptions
*/
function writable(value, start = noop) {
let stop;
const subscribers = new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) { // store is ready
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(value));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set) || noop;
}
run(value);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
export { writable as w };

View File

@ -0,0 +1,513 @@
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
function noop() { }
function add_location(element, file, line, column, char) {
element.__svelte_meta = {
loc: { file, line, column, char }
};
}
function run(fn) {
return fn();
}
function blank_object() {
return Object.create(null);
}
function run_all(fns) {
fns.forEach(run);
}
function is_function(thing) {
return typeof thing === 'function';
}
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
let src_url_equal_anchor;
function src_url_equal(element_src, url) {
if (!src_url_equal_anchor) {
src_url_equal_anchor = document.createElement('a');
}
src_url_equal_anchor.href = url;
return element_src === src_url_equal_anchor.href;
}
function is_empty(obj) {
return Object.keys(obj).length === 0;
}
function validate_store(store, name) {
if (store != null && typeof store.subscribe !== 'function') {
throw new Error(`'${name}' is not a store with a 'subscribe' method`);
}
}
function subscribe(store, ...callbacks) {
if (store == null) {
return noop;
}
const unsub = store.subscribe(...callbacks);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
function component_subscribe(component, store, callback) {
component.$$.on_destroy.push(subscribe(store, callback));
}
function append(target, node) {
target.appendChild(node);
}
function insert(target, node, anchor) {
target.insertBefore(node, anchor || null);
}
function detach(node) {
node.parentNode.removeChild(node);
}
function destroy_each(iterations, detaching) {
for (let i = 0; i < iterations.length; i += 1) {
if (iterations[i])
iterations[i].d(detaching);
}
}
function element(name) {
return document.createElement(name);
}
function svg_element(name) {
return document.createElementNS('http://www.w3.org/2000/svg', name);
}
function text(data) {
return document.createTextNode(data);
}
function space() {
return text(' ');
}
function empty() {
return text('');
}
function listen(node, event, handler, options) {
node.addEventListener(event, handler, options);
return () => node.removeEventListener(event, handler, options);
}
function attr(node, attribute, value) {
if (value == null)
node.removeAttribute(attribute);
else if (node.getAttribute(attribute) !== value)
node.setAttribute(attribute, value);
}
function set_custom_element_data(node, prop, value) {
if (prop in node) {
node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;
}
else {
attr(node, prop, value);
}
}
function children(element) {
return Array.from(element.childNodes);
}
function set_style(node, key, value, important) {
if (value === null) {
node.style.removeProperty(key);
}
else {
node.style.setProperty(key, value, important ? 'important' : '');
}
}
function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {
const e = document.createEvent('CustomEvent');
e.initCustomEvent(type, bubbles, cancelable, detail);
return e;
}
class HtmlTag {
constructor(is_svg = false) {
this.is_svg = false;
this.is_svg = is_svg;
this.e = this.n = null;
}
c(html) {
this.h(html);
}
m(html, target, anchor = null) {
if (!this.e) {
if (this.is_svg)
this.e = svg_element(target.nodeName);
else
this.e = element(target.nodeName);
this.t = target;
this.c(html);
}
this.i(anchor);
}
h(html) {
this.e.innerHTML = html;
this.n = Array.from(this.e.childNodes);
}
i(anchor) {
for (let i = 0; i < this.n.length; i += 1) {
insert(this.t, this.n[i], anchor);
}
}
p(html) {
this.d();
this.h(html);
this.i(this.a);
}
d() {
this.n.forEach(detach);
}
}
function attribute_to_object(attributes) {
const result = {};
for (const attribute of attributes) {
result[attribute.name] = attribute.value;
}
return result;
}
let current_component;
function set_current_component(component) {
current_component = component;
}
function get_current_component() {
if (!current_component)
throw new Error('Function called outside component initialization');
return current_component;
}
/**
* The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.
* It must be called during the component's initialisation (but doesn't need to live *inside* the component;
* it can be called from an external module).
*
* `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).
*
* https://svelte.dev/docs#run-time-svelte-onmount
*/
function onMount(fn) {
get_current_component().$$.on_mount.push(fn);
}
/**
* Associates an arbitrary `context` object with the current component and the specified `key`
* and returns that object. The context is then available to children of the component
* (including slotted content) with `getContext`.
*
* Like lifecycle functions, this must be called during component initialisation.
*
* https://svelte.dev/docs#run-time-svelte-setcontext
*/
function setContext(key, context) {
get_current_component().$$.context.set(key, context);
return context;
}
/**
* Retrieves the context that belongs to the closest parent component with the specified `key`.
* Must be called during component initialisation.
*
* https://svelte.dev/docs#run-time-svelte-getcontext
*/
function getContext(key) {
return get_current_component().$$.context.get(key);
}
const dirty_components = [];
const binding_callbacks = [];
const render_callbacks = [];
const flush_callbacks = [];
const resolved_promise = Promise.resolve();
let update_scheduled = false;
function schedule_update() {
if (!update_scheduled) {
update_scheduled = true;
resolved_promise.then(flush);
}
}
function add_render_callback(fn) {
render_callbacks.push(fn);
}
// flush() calls callbacks in this order:
// 1. All beforeUpdate callbacks, in order: parents before children
// 2. All bind:this callbacks, in reverse order: children before parents.
// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT
// for afterUpdates called during the initial onMount, which are called in
// reverse order: children before parents.
// Since callbacks might update component values, which could trigger another
// call to flush(), the following steps guard against this:
// 1. During beforeUpdate, any updated components will be added to the
// dirty_components array and will cause a reentrant call to flush(). Because
// the flush index is kept outside the function, the reentrant call will pick
// up where the earlier call left off and go through all dirty components. The
// current_component value is saved and restored so that the reentrant call will
// not interfere with the "parent" flush() call.
// 2. bind:this callbacks cannot trigger new flush() calls.
// 3. During afterUpdate, any updated components will NOT have their afterUpdate
// callback called a second time; the seen_callbacks set, outside the flush()
// function, guarantees this behavior.
const seen_callbacks = new Set();
let flushidx = 0; // Do *not* move this inside the flush() function
function flush() {
const saved_component = current_component;
do {
// first, call beforeUpdate functions
// and update components
while (flushidx < dirty_components.length) {
const component = dirty_components[flushidx];
flushidx++;
set_current_component(component);
update(component.$$);
}
set_current_component(null);
dirty_components.length = 0;
flushidx = 0;
while (binding_callbacks.length)
binding_callbacks.pop()();
// then, once components are updated, call
// afterUpdate functions. This may cause
// subsequent updates...
for (let i = 0; i < render_callbacks.length; i += 1) {
const callback = render_callbacks[i];
if (!seen_callbacks.has(callback)) {
// ...so guard against infinite loops
seen_callbacks.add(callback);
callback();
}
}
render_callbacks.length = 0;
} while (dirty_components.length);
while (flush_callbacks.length) {
flush_callbacks.pop()();
}
update_scheduled = false;
seen_callbacks.clear();
set_current_component(saved_component);
}
function update($$) {
if ($$.fragment !== null) {
$$.update();
run_all($$.before_update);
const dirty = $$.dirty;
$$.dirty = [-1];
$$.fragment && $$.fragment.p($$.ctx, dirty);
$$.after_update.forEach(add_render_callback);
}
}
const outroing = new Set();
function transition_in(block, local) {
if (block && block.i) {
outroing.delete(block);
block.i(local);
}
}
const globals = (typeof window !== 'undefined'
? window
: typeof globalThis !== 'undefined'
? globalThis
: global);
function mount_component(component, target, anchor, customElement) {
const { fragment, after_update } = component.$$;
fragment && fragment.m(target, anchor);
if (!customElement) {
// onMount happens before the initial afterUpdate
add_render_callback(() => {
const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);
// if the component was destroyed immediately
// it will update the `$$.on_destroy` reference to `null`.
// the destructured on_destroy may still reference to the old array
if (component.$$.on_destroy) {
component.$$.on_destroy.push(...new_on_destroy);
}
else {
// Edge case - component was destroyed immediately,
// most likely as a result of a binding initialising
run_all(new_on_destroy);
}
component.$$.on_mount = [];
});
}
after_update.forEach(add_render_callback);
}
function destroy_component(component, detaching) {
const $$ = component.$$;
if ($$.fragment !== null) {
run_all($$.on_destroy);
$$.fragment && $$.fragment.d(detaching);
// TODO null out other refs, including component.$$ (but need to
// preserve final state?)
$$.on_destroy = $$.fragment = null;
$$.ctx = [];
}
}
function make_dirty(component, i) {
if (component.$$.dirty[0] === -1) {
dirty_components.push(component);
schedule_update();
component.$$.dirty.fill(0);
}
component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));
}
function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {
const parent_component = current_component;
set_current_component(component);
const $$ = component.$$ = {
fragment: null,
ctx: [],
// state
props,
update: noop,
not_equal,
bound: blank_object(),
// lifecycle
on_mount: [],
on_destroy: [],
on_disconnect: [],
before_update: [],
after_update: [],
context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
// everything else
callbacks: blank_object(),
dirty,
skip_bound: false,
root: options.target || parent_component.$$.root
};
append_styles && append_styles($$.root);
let ready = false;
$$.ctx = instance
? instance(component, options.props || {}, (i, ret, ...rest) => {
const value = rest.length ? rest[0] : ret;
if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
if (!$$.skip_bound && $$.bound[i])
$$.bound[i](value);
if (ready)
make_dirty(component, i);
}
return ret;
})
: [];
$$.update();
ready = true;
run_all($$.before_update);
// `false` as a special case of no DOM component
$$.fragment = create_fragment ? create_fragment($$.ctx) : false;
if (options.target) {
if (options.hydrate) {
const nodes = children(options.target);
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
$$.fragment && $$.fragment.l(nodes);
nodes.forEach(detach);
}
else {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
$$.fragment && $$.fragment.c();
}
if (options.intro)
transition_in(component.$$.fragment);
mount_component(component, options.target, options.anchor, options.customElement);
flush();
}
set_current_component(parent_component);
}
let SvelteElement;
if (typeof HTMLElement === 'function') {
SvelteElement = class extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
}
connectedCallback() {
const { on_mount } = this.$$;
this.$$.on_disconnect = on_mount.map(run).filter(is_function);
// @ts-ignore todo: improve typings
for (const key in this.$$.slotted) {
// @ts-ignore todo: improve typings
this.appendChild(this.$$.slotted[key]);
}
}
attributeChangedCallback(attr, _oldValue, newValue) {
this[attr] = newValue;
}
disconnectedCallback() {
run_all(this.$$.on_disconnect);
}
$destroy() {
destroy_component(this, 1);
this.$destroy = noop;
}
$on(type, callback) {
// TODO should this delegate to addEventListener?
if (!is_function(callback)) {
return noop;
}
const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
callbacks.push(callback);
return () => {
const index = callbacks.indexOf(callback);
if (index !== -1)
callbacks.splice(index, 1);
};
}
$set($$props) {
if (this.$$set && !is_empty($$props)) {
this.$$.skip_bound = true;
this.$$set($$props);
this.$$.skip_bound = false;
}
}
};
}
function dispatch_dev(type, detail) {
document.dispatchEvent(custom_event(type, Object.assign({ version: '3.52.0' }, detail), { bubbles: true }));
}
function append_dev(target, node) {
dispatch_dev('SvelteDOMInsert', { target, node });
append(target, node);
}
function insert_dev(target, node, anchor) {
dispatch_dev('SvelteDOMInsert', { target, node, anchor });
insert(target, node, anchor);
}
function detach_dev(node) {
dispatch_dev('SvelteDOMRemove', { node });
detach(node);
}
function listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {
const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];
if (has_prevent_default)
modifiers.push('preventDefault');
if (has_stop_propagation)
modifiers.push('stopPropagation');
dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });
const dispose = listen(node, event, handler, options);
return () => {
dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });
dispose();
};
}
function attr_dev(node, attribute, value) {
attr(node, attribute, value);
if (value == null)
dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });
else
dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });
}
function prop_dev(node, property, value) {
node[property] = value;
dispatch_dev('SvelteDOMSetProperty', { node, property, value });
}
function set_data_dev(text, data) {
data = '' + data;
if (text.wholeText === data)
return;
dispatch_dev('SvelteDOMSetData', { node: text, data });
text.data = data;
}
function validate_each_argument(arg) {
if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {
let msg = '{#each} only iterates over array-like objects.';
if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {
msg += ' You can use a spread to convert this iterable into an array.';
}
throw new Error(msg);
}
}
function validate_slots(name, slot, keys) {
for (const slot_key of Object.keys(slot)) {
if (!~keys.indexOf(slot_key)) {
console.warn(`<${name}> received an unexpected slot "${slot_key}".`);
}
}
}
export { flush as A, globals as B, binding_callbacks as C, set_style as D, getContext as E, setContext as F, svg_element as G, is_function as H, HtmlTag as I, SvelteElement as S, attribute_to_object as a, insert_dev as b, validate_store as c, dispatch_dev as d, component_subscribe as e, empty as f, detach_dev as g, validate_each_argument as h, init as i, element as j, space as k, add_location as l, attr_dev as m, noop as n, onMount as o, src_url_equal as p, set_custom_element_data as q, append_dev as r, safe_not_equal as s, text as t, set_data_dev as u, validate_slots as v, destroy_each as w, listen_dev as x, run_all as y, prop_dev as z };

View File

@ -0,0 +1,53 @@
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
import { n as noop, s as safe_not_equal } from './index-d19aafba.js';
const subscriber_queue = [];
/**
* Create a `Writable` store that allows both updating and reading by subscription.
* @param {*=}value initial value
* @param {StartStopNotifier=}start start and stop notifications for subscriptions
*/
function writable(value, start = noop) {
let stop;
const subscribers = new Set();
function set(new_value) {
if (safe_not_equal(value, new_value)) {
value = new_value;
if (stop) { // store is ready
const run_queue = !subscriber_queue.length;
for (const subscriber of subscribers) {
subscriber[1]();
subscriber_queue.push(subscriber, value);
}
if (run_queue) {
for (let i = 0; i < subscriber_queue.length; i += 2) {
subscriber_queue[i][0](subscriber_queue[i + 1]);
}
subscriber_queue.length = 0;
}
}
}
}
function update(fn) {
set(fn(value));
}
function subscribe(run, invalidate = noop) {
const subscriber = [run, invalidate];
subscribers.add(subscriber);
if (subscribers.size === 1) {
stop = start(set) || noop;
}
run(value);
return () => {
subscribers.delete(subscriber);
if (subscribers.size === 0) {
stop();
stop = null;
}
};
}
return { set, update, subscribe };
}
export { writable as w };

View File

@ -0,0 +1,513 @@
(function(l, r) { if (!l || l.getElementById('livereloadscript')) return; r = l.createElement('script'); r.async = 1; r.src = '//' + (self.location.host || 'localhost').split(':')[0] + ':35729/livereload.js?snipver=1'; r.id = 'livereloadscript'; l.getElementsByTagName('head')[0].appendChild(r) })(self.document);
function noop() { }
function add_location(element, file, line, column, char) {
element.__svelte_meta = {
loc: { file, line, column, char }
};
}
function run(fn) {
return fn();
}
function blank_object() {
return Object.create(null);
}
function run_all(fns) {
fns.forEach(run);
}
function is_function(thing) {
return typeof thing === 'function';
}
function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
}
let src_url_equal_anchor;
function src_url_equal(element_src, url) {
if (!src_url_equal_anchor) {
src_url_equal_anchor = document.createElement('a');
}
src_url_equal_anchor.href = url;
return element_src === src_url_equal_anchor.href;
}
function is_empty(obj) {
return Object.keys(obj).length === 0;
}
function validate_store(store, name) {
if (store != null && typeof store.subscribe !== 'function') {
throw new Error(`'${name}' is not a store with a 'subscribe' method`);
}
}
function subscribe(store, ...callbacks) {
if (store == null) {
return noop;
}
const unsub = store.subscribe(...callbacks);
return unsub.unsubscribe ? () => unsub.unsubscribe() : unsub;
}
function component_subscribe(component, store, callback) {
component.$$.on_destroy.push(subscribe(store, callback));
}
function append(target, node) {
target.appendChild(node);
}
function insert(target, node, anchor) {
target.insertBefore(node, anchor || null);
}
function detach(node) {
node.parentNode.removeChild(node);
}
function destroy_each(iterations, detaching) {
for (let i = 0; i < iterations.length; i += 1) {
if (iterations[i])
iterations[i].d(detaching);
}
}
function element(name) {
return document.createElement(name);
}
function svg_element(name) {
return document.createElementNS('http://www.w3.org/2000/svg', name);
}
function text(data) {
return document.createTextNode(data);
}
function space() {
return text(' ');
}
function empty() {
return text('');
}
function listen(node, event, handler, options) {
node.addEventListener(event, handler, options);
return () => node.removeEventListener(event, handler, options);
}
function attr(node, attribute, value) {
if (value == null)
node.removeAttribute(attribute);
else if (node.getAttribute(attribute) !== value)
node.setAttribute(attribute, value);
}
function set_custom_element_data(node, prop, value) {
if (prop in node) {
node[prop] = typeof node[prop] === 'boolean' && value === '' ? true : value;
}
else {
attr(node, prop, value);
}
}
function children(element) {
return Array.from(element.childNodes);
}
function set_style(node, key, value, important) {
if (value === null) {
node.style.removeProperty(key);
}
else {
node.style.setProperty(key, value, important ? 'important' : '');
}
}
function custom_event(type, detail, { bubbles = false, cancelable = false } = {}) {
const e = document.createEvent('CustomEvent');
e.initCustomEvent(type, bubbles, cancelable, detail);
return e;
}
class HtmlTag {
constructor(is_svg = false) {
this.is_svg = false;
this.is_svg = is_svg;
this.e = this.n = null;
}
c(html) {
this.h(html);
}
m(html, target, anchor = null) {
if (!this.e) {
if (this.is_svg)
this.e = svg_element(target.nodeName);
else
this.e = element(target.nodeName);
this.t = target;
this.c(html);
}
this.i(anchor);
}
h(html) {
this.e.innerHTML = html;
this.n = Array.from(this.e.childNodes);
}
i(anchor) {
for (let i = 0; i < this.n.length; i += 1) {
insert(this.t, this.n[i], anchor);
}
}
p(html) {
this.d();
this.h(html);
this.i(this.a);
}
d() {
this.n.forEach(detach);
}
}
function attribute_to_object(attributes) {
const result = {};
for (const attribute of attributes) {
result[attribute.name] = attribute.value;
}
return result;
}
let current_component;
function set_current_component(component) {
current_component = component;
}
function get_current_component() {
if (!current_component)
throw new Error('Function called outside component initialization');
return current_component;
}
/**
* The `onMount` function schedules a callback to run as soon as the component has been mounted to the DOM.
* It must be called during the component's initialisation (but doesn't need to live *inside* the component;
* it can be called from an external module).
*
* `onMount` does not run inside a [server-side component](/docs#run-time-server-side-component-api).
*
* https://svelte.dev/docs#run-time-svelte-onmount
*/
function onMount(fn) {
get_current_component().$$.on_mount.push(fn);
}
/**
* Associates an arbitrary `context` object with the current component and the specified `key`
* and returns that object. The context is then available to children of the component
* (including slotted content) with `getContext`.
*
* Like lifecycle functions, this must be called during component initialisation.
*
* https://svelte.dev/docs#run-time-svelte-setcontext
*/
function setContext(key, context) {
get_current_component().$$.context.set(key, context);
return context;
}
/**
* Retrieves the context that belongs to the closest parent component with the specified `key`.
* Must be called during component initialisation.
*
* https://svelte.dev/docs#run-time-svelte-getcontext
*/
function getContext(key) {
return get_current_component().$$.context.get(key);
}
const dirty_components = [];
const binding_callbacks = [];
const render_callbacks = [];
const flush_callbacks = [];
const resolved_promise = Promise.resolve();
let update_scheduled = false;
function schedule_update() {
if (!update_scheduled) {
update_scheduled = true;
resolved_promise.then(flush);
}
}
function add_render_callback(fn) {
render_callbacks.push(fn);
}
// flush() calls callbacks in this order:
// 1. All beforeUpdate callbacks, in order: parents before children
// 2. All bind:this callbacks, in reverse order: children before parents.
// 3. All afterUpdate callbacks, in order: parents before children. EXCEPT
// for afterUpdates called during the initial onMount, which are called in
// reverse order: children before parents.
// Since callbacks might update component values, which could trigger another
// call to flush(), the following steps guard against this:
// 1. During beforeUpdate, any updated components will be added to the
// dirty_components array and will cause a reentrant call to flush(). Because
// the flush index is kept outside the function, the reentrant call will pick
// up where the earlier call left off and go through all dirty components. The
// current_component value is saved and restored so that the reentrant call will
// not interfere with the "parent" flush() call.
// 2. bind:this callbacks cannot trigger new flush() calls.
// 3. During afterUpdate, any updated components will NOT have their afterUpdate
// callback called a second time; the seen_callbacks set, outside the flush()
// function, guarantees this behavior.
const seen_callbacks = new Set();
let flushidx = 0; // Do *not* move this inside the flush() function
function flush() {
const saved_component = current_component;
do {
// first, call beforeUpdate functions
// and update components
while (flushidx < dirty_components.length) {
const component = dirty_components[flushidx];
flushidx++;
set_current_component(component);
update(component.$$);
}
set_current_component(null);
dirty_components.length = 0;
flushidx = 0;
while (binding_callbacks.length)
binding_callbacks.pop()();
// then, once components are updated, call
// afterUpdate functions. This may cause
// subsequent updates...
for (let i = 0; i < render_callbacks.length; i += 1) {
const callback = render_callbacks[i];
if (!seen_callbacks.has(callback)) {
// ...so guard against infinite loops
seen_callbacks.add(callback);
callback();
}
}
render_callbacks.length = 0;
} while (dirty_components.length);
while (flush_callbacks.length) {
flush_callbacks.pop()();
}
update_scheduled = false;
seen_callbacks.clear();
set_current_component(saved_component);
}
function update($$) {
if ($$.fragment !== null) {
$$.update();
run_all($$.before_update);
const dirty = $$.dirty;
$$.dirty = [-1];
$$.fragment && $$.fragment.p($$.ctx, dirty);
$$.after_update.forEach(add_render_callback);
}
}
const outroing = new Set();
function transition_in(block, local) {
if (block && block.i) {
outroing.delete(block);
block.i(local);
}
}
const globals = (typeof window !== 'undefined'
? window
: typeof globalThis !== 'undefined'
? globalThis
: global);
function mount_component(component, target, anchor, customElement) {
const { fragment, after_update } = component.$$;
fragment && fragment.m(target, anchor);
if (!customElement) {
// onMount happens before the initial afterUpdate
add_render_callback(() => {
const new_on_destroy = component.$$.on_mount.map(run).filter(is_function);
// if the component was destroyed immediately
// it will update the `$$.on_destroy` reference to `null`.
// the destructured on_destroy may still reference to the old array
if (component.$$.on_destroy) {
component.$$.on_destroy.push(...new_on_destroy);
}
else {
// Edge case - component was destroyed immediately,
// most likely as a result of a binding initialising
run_all(new_on_destroy);
}
component.$$.on_mount = [];
});
}
after_update.forEach(add_render_callback);
}
function destroy_component(component, detaching) {
const $$ = component.$$;
if ($$.fragment !== null) {
run_all($$.on_destroy);
$$.fragment && $$.fragment.d(detaching);
// TODO null out other refs, including component.$$ (but need to
// preserve final state?)
$$.on_destroy = $$.fragment = null;
$$.ctx = [];
}
}
function make_dirty(component, i) {
if (component.$$.dirty[0] === -1) {
dirty_components.push(component);
schedule_update();
component.$$.dirty.fill(0);
}
component.$$.dirty[(i / 31) | 0] |= (1 << (i % 31));
}
function init(component, options, instance, create_fragment, not_equal, props, append_styles, dirty = [-1]) {
const parent_component = current_component;
set_current_component(component);
const $$ = component.$$ = {
fragment: null,
ctx: [],
// state
props,
update: noop,
not_equal,
bound: blank_object(),
// lifecycle
on_mount: [],
on_destroy: [],
on_disconnect: [],
before_update: [],
after_update: [],
context: new Map(options.context || (parent_component ? parent_component.$$.context : [])),
// everything else
callbacks: blank_object(),
dirty,
skip_bound: false,
root: options.target || parent_component.$$.root
};
append_styles && append_styles($$.root);
let ready = false;
$$.ctx = instance
? instance(component, options.props || {}, (i, ret, ...rest) => {
const value = rest.length ? rest[0] : ret;
if ($$.ctx && not_equal($$.ctx[i], $$.ctx[i] = value)) {
if (!$$.skip_bound && $$.bound[i])
$$.bound[i](value);
if (ready)
make_dirty(component, i);
}
return ret;
})
: [];
$$.update();
ready = true;
run_all($$.before_update);
// `false` as a special case of no DOM component
$$.fragment = create_fragment ? create_fragment($$.ctx) : false;
if (options.target) {
if (options.hydrate) {
const nodes = children(options.target);
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
$$.fragment && $$.fragment.l(nodes);
nodes.forEach(detach);
}
else {
// eslint-disable-next-line @typescript-eslint/no-non-null-assertion
$$.fragment && $$.fragment.c();
}
if (options.intro)
transition_in(component.$$.fragment);
mount_component(component, options.target, options.anchor, options.customElement);
flush();
}
set_current_component(parent_component);
}
let SvelteElement;
if (typeof HTMLElement === 'function') {
SvelteElement = class extends HTMLElement {
constructor() {
super();
this.attachShadow({ mode: 'open' });
}
connectedCallback() {
const { on_mount } = this.$$;
this.$$.on_disconnect = on_mount.map(run).filter(is_function);
// @ts-ignore todo: improve typings
for (const key in this.$$.slotted) {
// @ts-ignore todo: improve typings
this.appendChild(this.$$.slotted[key]);
}
}
attributeChangedCallback(attr, _oldValue, newValue) {
this[attr] = newValue;
}
disconnectedCallback() {
run_all(this.$$.on_disconnect);
}
$destroy() {
destroy_component(this, 1);
this.$destroy = noop;
}
$on(type, callback) {
// TODO should this delegate to addEventListener?
if (!is_function(callback)) {
return noop;
}
const callbacks = (this.$$.callbacks[type] || (this.$$.callbacks[type] = []));
callbacks.push(callback);
return () => {
const index = callbacks.indexOf(callback);
if (index !== -1)
callbacks.splice(index, 1);
};
}
$set($$props) {
if (this.$$set && !is_empty($$props)) {
this.$$.skip_bound = true;
this.$$set($$props);
this.$$.skip_bound = false;
}
}
};
}
function dispatch_dev(type, detail) {
document.dispatchEvent(custom_event(type, Object.assign({ version: '3.52.0' }, detail), { bubbles: true }));
}
function append_dev(target, node) {
dispatch_dev('SvelteDOMInsert', { target, node });
append(target, node);
}
function insert_dev(target, node, anchor) {
dispatch_dev('SvelteDOMInsert', { target, node, anchor });
insert(target, node, anchor);
}
function detach_dev(node) {
dispatch_dev('SvelteDOMRemove', { node });
detach(node);
}
function listen_dev(node, event, handler, options, has_prevent_default, has_stop_propagation) {
const modifiers = options === true ? ['capture'] : options ? Array.from(Object.keys(options)) : [];
if (has_prevent_default)
modifiers.push('preventDefault');
if (has_stop_propagation)
modifiers.push('stopPropagation');
dispatch_dev('SvelteDOMAddEventListener', { node, event, handler, modifiers });
const dispose = listen(node, event, handler, options);
return () => {
dispatch_dev('SvelteDOMRemoveEventListener', { node, event, handler, modifiers });
dispose();
};
}
function attr_dev(node, attribute, value) {
attr(node, attribute, value);
if (value == null)
dispatch_dev('SvelteDOMRemoveAttribute', { node, attribute });
else
dispatch_dev('SvelteDOMSetAttribute', { node, attribute, value });
}
function prop_dev(node, property, value) {
node[property] = value;
dispatch_dev('SvelteDOMSetProperty', { node, property, value });
}
function set_data_dev(text, data) {
data = '' + data;
if (text.wholeText === data)
return;
dispatch_dev('SvelteDOMSetData', { node: text, data });
text.data = data;
}
function validate_each_argument(arg) {
if (typeof arg !== 'string' && !(arg && typeof arg === 'object' && 'length' in arg)) {
let msg = '{#each} only iterates over array-like objects.';
if (typeof Symbol === 'function' && arg && Symbol.iterator in arg) {
msg += ' You can use a spread to convert this iterable into an array.';
}
throw new Error(msg);
}
}
function validate_slots(name, slot, keys) {
for (const slot_key of Object.keys(slot)) {
if (!~keys.indexOf(slot_key)) {
console.warn(`<${name}> received an unexpected slot "${slot_key}".`);
}
}
}
export { prop_dev as A, flush as B, binding_callbacks as C, set_style as D, getContext as E, setContext as F, svg_element as G, is_function as H, HtmlTag as I, SvelteElement as S, attribute_to_object as a, insert_dev as b, validate_store as c, dispatch_dev as d, component_subscribe as e, empty as f, globals as g, detach_dev as h, init as i, validate_each_argument as j, element as k, space as l, add_location as m, noop as n, onMount as o, attr_dev as p, src_url_equal as q, set_custom_element_data as r, safe_not_equal as s, text as t, append_dev as u, validate_slots as v, set_data_dev as w, destroy_each as x, listen_dev as y, run_all as z };

File diff suppressed because one or more lines are too long

View File

@ -1 +1 @@
import{S as i,i as t,a as e,b as o,s as r,e as s,n as m,d as n,c as a,o as c,f as g,g as p,t as d,h as l,j as u,v as h,l as v,m as x,w}from"./index-4348483d.js";import{loadLocaleContent as T}from"../../../../../../../../../js/libraries/serverTools.js";import{w as f}from"./index-71440b21.js";function b(i){let t,e,r,s,m,a,c,w,T,f,b,y,j,k,z,E,H,L,M,O,R,N,S,q,A,B,C,D,F,G,I,J,K,P,Q,U,V,W,X,Y,Z,$,_,ii,ti,ei,oi,ri=i[2].top+"",si=i[2].groupsTitle+"",mi=i[2].groupsText+"",ni=i[2].communesTitle+"",ai=i[2].communesText+"",ci=i[2].cooperativesTitle+"",gi=i[2].cooperativesText+"",pi=i[2].partiesTitle+"",di=i[2].partiesText+"";return{c(){t=g("div"),e=g("picture"),e.innerHTML='<source srcset="/img/crowd.webp"/> \n <source srcset="/img/crowd.png"/> \n <img id="crowd" alt="crowd"/>',r=p(),s=g("div"),m=g("p"),a=d(ri),c=p(),w=g("div"),T=g("div"),f=g("h2"),b=d(si),y=p(),j=g("img"),z=p(),E=g("p"),H=d(mi),L=p(),M=g("div"),O=g("h2"),R=d(ni),N=p(),S=g("img"),A=p(),B=g("p"),C=d(ai),D=p(),F=g("div"),G=g("h2"),I=d(ci),J=p(),K=g("img"),Q=p(),U=g("p"),V=d(gi),W=p(),X=g("div"),Y=g("h2"),Z=d(pi),$=p(),_=g("img"),ti=p(),ei=g("p"),oi=d(di),l(j,"id","groups-img"),u(j.src,k="/img/common/groups.svg")||l(j,"src","/img/common/groups.svg"),l(j,"alt","groups"),l(S,"id","communes-img"),u(S.src,q="/img/common/commune.svg")||l(S,"src","/img/common/commune.svg"),l(S,"alt","communes"),l(K,"id","coops-img"),u(K.src,P="/img/common/coops.svg")||l(K,"src","/img/common/coops.svg"),l(K,"alt","coops"),l(_,"id","parties-img"),u(_.src,ii="/img/common/parties.svg")||l(_,"src","/img/common/parties.svg"),l(_,"alt","coops"),l(w,"id","container-grid"),h(w,"--grid-width",i[1]),l(s,"id","text-container"),l(t,"id","container")},m(n,g){o(n,t,g),v(t,e),v(t,r),v(t,s),v(s,m),v(m,a),v(s,c),v(s,w),v(w,T),v(T,f),v(f,b),v(T,y),v(T,j),v(T,z),v(T,E),v(E,H),v(w,L),v(w,M),v(M,O),v(O,R),v(M,N),v(M,S),v(M,A),v(M,B),v(B,C),v(w,D),v(w,F),v(F,G),v(G,I),v(F,J),v(F,K),v(F,Q),v(F,U),v(U,V),v(w,W),v(w,X),v(X,Y),v(Y,Z),v(X,$),v(X,_),v(X,ti),v(X,ei),v(ei,oi),i[5](w)},p(i,t){4&t&&ri!==(ri=i[2].top+"")&&x(a,ri),4&t&&si!==(si=i[2].groupsTitle+"")&&x(b,si),4&t&&mi!==(mi=i[2].groupsText+"")&&x(H,mi),4&t&&ni!==(ni=i[2].communesTitle+"")&&x(R,ni),4&t&&ai!==(ai=i[2].communesText+"")&&x(C,ai),4&t&&ci!==(ci=i[2].cooperativesTitle+"")&&x(I,ci),4&t&&gi!==(gi=i[2].cooperativesText+"")&&x(V,gi),4&t&&pi!==(pi=i[2].partiesTitle+"")&&x(Z,pi),4&t&&di!==(di=i[2].partiesText+"")&&x(oi,di),2&t&&h(w,"--grid-width",i[1])},d(e){e&&n(t),i[5](null)}}}function y(i){let t,e=0!=Object.keys(i[2]).length,r=e&&b(i);return{c(){r&&r.c(),t=s(),this.c=m},m(i,e){r&&r.m(i,e),o(i,t,e)},p(i,[o]){4&o&&(e=0!=Object.keys(i[2]).length),e?r?r.p(i,o):(r=b(i),r.c(),r.m(t.parentNode,t)):r&&(r.d(1),r=null)},i:m,o:m,d(i){r&&r.d(i),i&&n(t)}}}function j(i,t,e){let o,r,s,m,n=f({});function g(i){e(1,s="1fr 1fr")}a(i,n,(i=>e(2,o=i)));T(n,"landing-component",m,g);return g(),c((()=>{})),[r,s,o,m,n,function(i){w[i?"unshift":"push"]((()=>{r=i,e(0,r)}))}]}class k extends i{constructor(i){super(),this.shadowRoot.innerHTML="<style>@import '/css/common.css';#container-grid>div>h2{text-align:center}#groups-img,#communes-img,#coops-img,#parties-img{position:absolute;left:50%;transform:translate(-50%);z-index:0;opacity:0.2;height:8rem}#coops-img{margin-top:0.5rem;height:7.5rem}#text-container{max-width:calc(100vw - 4rem);margin:auto}#crowd{width:100%;margin-bottom:2rem}#container{margin:auto;max-width:800px;margin-top:2rem;margin-bottom:5rem}#container>div>p{margin-bottom:1rem}#container p{text-align:justify}#container-grid{display:grid;grid-template-columns:var(--grid-width);grid-template-rows:var(--grid-width);grid-gap:4rem;margin-top:2rem}#container-grid>div{position:relative}#container-grid>div>p{position:relative;margin-top:5rem;z-index:2}@media only screen and (max-width: 1060px){#container-grid{display:grid;grid-template-columns:1fr;grid-gap:2rem}}</style>",t(this,{target:this.shadowRoot,props:e(this.attributes),customElement:!0},j,y,r,{},null),i&&i.target&&o(i.target,this,i.anchor)}}customElements.define("landing-component",k);export{k as default}; import{S as i,i as t,a as o,b as e,s as r,e as s,n as m,d as n,c as a,o as c,w as g,f as p,g as d,t as l,h as u,j as v,v as h,l as x,m as w}from"./index-4348483d.js";import{loadLocaleContent as f}from"../../../../../../../../../js/libraries/serverTools.js";import{w as T}from"./index-71440b21.js";function b(i){let t,o,r,s,m,a,c,g,f,T,b,y,j,z,E,H,L,M,N,R,S,k,q,A,B,C,D,F,G,I,J,K,O,P,Q,U,V,W,X,Y,Z,$,_,ii,ti,oi,ei,ri=i[3].top+"",si=i[3].groupsTitle+"",mi=i[3].groupsText+"",ni=i[3].communesTitle+"",ai=i[3].communesText+"",ci=i[3].cooperativesTitle+"",gi=i[3].cooperativesText+"",pi=i[3].partiesTitle+"",di=i[3].partiesText+"";return{c(){t=p("div"),o=p("picture"),o.innerHTML='<source srcset="/img/crowd.webp"/> \n <source srcset="/img/crowd.png"/> \n <img id="crowd" alt="crowd"/>',r=d(),s=p("div"),m=p("p"),a=l(ri),c=d(),g=p("div"),f=p("div"),T=p("h2"),b=l(si),y=d(),j=p("img"),E=d(),H=p("p"),L=l(mi),M=d(),N=p("div"),R=p("h2"),S=l(ni),k=d(),q=p("img"),B=d(),C=p("p"),D=l(ai),F=d(),G=p("div"),I=p("h2"),J=l(ci),K=d(),O=p("img"),Q=d(),U=p("p"),V=l(gi),W=d(),X=p("div"),Y=p("h2"),Z=l(pi),$=d(),_=p("img"),ti=d(),oi=p("p"),ei=l(di),u(j,"id","groups-img"),v(j.src,z="/img/common/groups.svg")||u(j,"src","/img/common/groups.svg"),u(j,"alt","groups"),u(q,"id","communes-img"),v(q.src,A="/img/common/commune.svg")||u(q,"src","/img/common/commune.svg"),u(q,"alt","communes"),u(O,"id","coops-img"),v(O.src,P="/img/common/coops.svg")||u(O,"src","/img/common/coops.svg"),u(O,"alt","coops"),u(_,"id","parties-img"),v(_.src,ii="/img/common/parties.svg")||u(_,"src","/img/common/parties.svg"),u(_,"alt","coops"),u(g,"id","container-grid"),h(g,"--grid-width",i[1]),u(s,"id","text-container"),u(t,"id","container")},m(n,p){e(n,t,p),x(t,o),x(t,r),x(t,s),x(s,m),x(m,a),x(s,c),x(s,g),x(g,f),x(f,T),x(T,b),x(f,y),x(f,j),x(f,E),x(f,H),x(H,L),x(g,M),x(g,N),x(N,R),x(R,S),x(N,k),x(N,q),x(N,B),x(N,C),x(C,D),x(g,F),x(g,G),x(G,I),x(I,J),x(G,K),x(G,O),x(G,Q),x(G,U),x(U,V),x(g,W),x(g,X),x(X,Y),x(Y,Z),x(X,$),x(X,_),x(X,ti),x(X,oi),x(oi,ei),i[6](g)},p(i,t){8&t&&ri!==(ri=i[3].top+"")&&w(a,ri),8&t&&si!==(si=i[3].groupsTitle+"")&&w(b,si),8&t&&mi!==(mi=i[3].groupsText+"")&&w(L,mi),8&t&&ni!==(ni=i[3].communesTitle+"")&&w(S,ni),8&t&&ai!==(ai=i[3].communesText+"")&&w(D,ai),8&t&&ci!==(ci=i[3].cooperativesTitle+"")&&w(J,ci),8&t&&gi!==(gi=i[3].cooperativesText+"")&&w(V,gi),8&t&&pi!==(pi=i[3].partiesTitle+"")&&w(Z,pi),8&t&&di!==(di=i[3].partiesText+"")&&w(ei,di),2&t&&h(g,"--grid-width",i[1])},d(o){o&&n(t),i[6](null)}}}function y(i){let t,o=2==i[2]&&b(i);return{c(){o&&o.c(),t=s()},m(i,r){o&&o.m(i,r),e(i,t,r)},p(i,e){2==i[2]?o?o.p(i,e):(o=b(i),o.c(),o.m(t.parentNode,t)):o&&(o.d(1),o=null)},d(i){o&&o.d(i),i&&n(t)}}}function j(i){let t,o=i[2],a=y(i);return{c(){a.c(),t=s(),this.c=m},m(i,o){a.m(i,o),e(i,t,o)},p(i,[e]){4&e&&r(o,o=i[2])?(a.d(1),a=y(i),a.c(),a.m(t.parentNode,t)):a.p(i,e)},i:m,o:m,d(i){i&&n(t),a.d(i)}}}function z(i,t,o){let e,r,s,m,n=T(0);a(i,n,(i=>o(2,e=i)));let p=T({});function d(i){o(1,m="1fr 1fr")}a(i,p,(i=>o(3,r=i))),f(p,"countries",n);f(p,"landing-component",n,d);return d(),c((()=>{})),[s,m,e,r,n,p,function(i){g[i?"unshift":"push"]((()=>{s=i,o(0,s)}))}]}class E extends i{constructor(i){super(),this.shadowRoot.innerHTML="<style>@import '/css/common.css';#container-grid>div>h2{text-align:center}#groups-img,#communes-img,#coops-img,#parties-img{position:absolute;left:50%;transform:translate(-50%);z-index:0;opacity:0.2;height:8rem}#coops-img{margin-top:0.5rem;height:7.5rem}#text-container{max-width:calc(100vw - 4rem);margin:auto}#crowd{width:100%;margin-bottom:2rem}#container{margin:auto;max-width:800px;margin-top:2rem;margin-bottom:5rem}#container>div>p{margin-bottom:1rem}#container p{text-align:justify}#container-grid{display:grid;grid-template-columns:var(--grid-width);grid-template-rows:var(--grid-width);grid-gap:4rem;row-gap:3rem;margin-top:2rem}#container-grid>div{position:relative}#container-grid>div>p{position:relative;margin-top:5rem;z-index:2}@media only screen and (max-width: 1060px){#container-grid{display:grid;grid-template-columns:1fr;grid-gap:2rem}}</style>",t(this,{target:this.shadowRoot,props:o(this.attributes),customElement:!0},z,j,r,{},null),i&&i.target&&e(i.target,this,i.anchor)}}customElements.define("landing-component",E);export{E as default};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -2,27 +2,38 @@ export let coops = [
{ {
logo: "chiron_logo", logo: "chiron_logo",
name: "Chiron Health", name: "Chiron Health",
location: ["EstoniaKohtlaJarve",[59.40338782864918, 27.286240058760324]], location: [["Estonia","KohtlaJarve"],[59.41038769769602, 27.287802936242034]],
market: "wellnessAndHealth", market: "wellnessAndHealth",
workers: 2, workers: 2,
status: "inDevelopment", status: "inDevelopment",
website: "chrn.health", website: "chrn.health",
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"], contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"],
description: "descriptionChironHealth" description: "descriptionChironHealth"
}, },
{ {
logo: "kuusk_logo", logo: "kuusk_logo",
name: "Kuusk", name: "Kuusk",
location: ["EstoniaKohtlaJarve",[59.405466538976185, 27.289104862336302]], location: [["Estonia","KohtlaJarve"],[59.399947051803004, 27.277159931677055]],
market: "herbalTeas", market: "herbalTeas",
workers: 1, workers: 1,
status: "inDevelopment", status: "inDevelopment",
website: "-", website: "-",
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"], contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"],
description: "kuuskDescription" description: "kuuskDescription"
} }
] ]
export let coopsByCountry = {}
for (let g of coops) {
let country = g.location[0][0]
if (country in coopsByCountry) {
coopsByCountry[country].push(g)
}
else {
coopsByCountry[country] = [g]
}
}
export function addMarkersCoops(map,content) { export function addMarkersCoops(map,content) {
for (let g of coops) { for (let g of coops) {
let coordinates let coordinates
@ -42,7 +53,9 @@ export function addMarkersCoops(map,content) {
text += fieldText + "<a href='" + g.website + "' target='_blank' rel=noreferrer>" + g.website + "</a>" + "<br>" text += fieldText + "<a href='" + g.website + "' target='_blank' rel=noreferrer>" + g.website + "</a>" + "<br>"
} }
else if (field=="location") { else if (field=="location") {
text += fieldText + content[g[field][0]] + "<br>" let location = g[field][0]
let town = location[1]=="" ? "" : ", " + content[location[1]]
text += fieldText + content[location[0]] + town + "<br>"
coordinates = g[field][1] coordinates = g[field][1]
} }
else if (field=="market" || field=="status" || field=="description") { else if (field=="market" || field=="status" || field=="description") {

View File

@ -1,67 +1,134 @@
export let groups = [ export let groups = [
{ {
location: ["CanadaHalifax",[44.65166135030067, -63.59289968306866]], location: [["Canada","Halifax"],[44.65166135030067, -63.59289968306866]],
members: 2, members: 2,
contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["DenmarkCopenhagen",[55.6840661150132, 12.557133959514688]], location: [["Denmark","Copenhagen"],[55.6840661150132, 12.557133959514688]],
members: 1, members: 1,
contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["DenmarkKolding", [55.49261908652738, 9.470268969851743]], location: [["Denmark","Kolding"], [55.49261908652738, 9.470268969851743]],
members: 1, members: 1,
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["EstoniaKohtlaJarve", [59.40629447076191, 27.280605339416322]], location: [["Estonia","KohtlaJarve"], [59.40629447076191, 27.280605339416322]],
members: 3, members: 3,
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["GreeceAthens", [37.94877252621736, 23.677622972996158]], location: [["Greece","Athens"], [37.94877252621736, 23.677622972996158]],
members: 1, members: 1,
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
{ {
location: ["Ireland", [53.280192832733576, -7.688103518964818]], location: [["Ireland",""], [53.280192832733576, -7.688103518964818]],
members: 6, members: 6,
contact: ["https://discord.gg/4BUau4AZre","DiscordInviteLink"] contact: ["https://discord.gg/4BUau4AZre","DiscordInviteLink"]
}, },
{ {
location: ["LatviaRiga", [56.94748425529816, 24.003027136431925]], location: [["Latvia","Riga"], [56.94748425529816, 24.003027136431925]],
members: 2, members: 2,
contact: ["https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh","WhatsAppInviteLink"] contact: ["https://discord.gg/xAPZmyr8B6","DiscordInviteLink"]
}, },
] ]
export function addMarkersGroups(map,content) { export let groupsByCountry = {}
for (let g of groups) { for (let g of groups) {
let coordinates let country = g.location[0][0]
let text = "" if (country in groupsByCountry) {
for (let field in g) { groupsByCountry[country].push(g)
let fieldText = content[field] + ": " }
if (field=="contact") { else {
text += fieldText + "<a href='" + g.contact[0] + "' target='_blank' rel=noreferrer>" + content[g.contact[1]] + "</a>" groupsByCountry[country] = [g]
} }
else if (field=="location") { }
text += fieldText + content[g[field][0]] + "<br>"
coordinates = g[field][1] let groupsLoaded = false
} let groupsMarkersLayerOut = L.layerGroup()
else { let groupsMarkersLayerIn = L.layerGroup()
text += fieldText + g[field] + "<br>"
} let contactGeneral =["https://discord.gg/4BUau4AZre","DiscordInviteLink"]
}
var markerIcon = new L.Icon({ function addMarkerGroups(g,layer,content) {
iconUrl: 'https://www.libsoc.org/img/common/markers/marker-green.png', let coordinates
shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/images/marker-shadow.png', let text = ""
iconSize: [25, 41], for (let field in g) {
iconAnchor: [12, 41], let fieldText = content[field] + ": "
popupAnchor: [1, -34], if (field=="contact") {
shadowSize: [41, 41] text += fieldText + "<a href='" + g.contact[0] + "' target='_blank' rel=noreferrer>" + content[g.contact[1]] + "</a>"
}); }
let marker = L.marker(coordinates, {icon: markerIcon}) else if (field=="location") {
marker.addTo(map).bindPopup(text) let location = g[field][0]
let town = location[1]=="" ? "" : ", " + content[location[1]]
text += fieldText + content[location[0]] + town + "<br>"
coordinates = g[field][1]
}
else {
text += fieldText + g[field] + "<br>"
}
}
var markerIcon = new L.Icon({
iconUrl: 'https://www.libsoc.org/img/common/markers/marker-green.png',
shadowUrl: 'https://cdnjs.cloudflare.com/ajax/libs/leaflet/0.7.7/images/marker-shadow.png',
iconSize: [25, 41],
iconAnchor: [12, 41],
popupAnchor: [1, -34],
shadowSize: [41, 41]
})
let marker = L.marker(coordinates, {icon: markerIcon})
marker.addTo(layer).bindPopup(text)
}
export function addMarkersGroups(map,content) {
for (let g of groups) {
addMarkerGroups(g,groupsMarkersLayerIn,content)
}
for (let gs of Object.values(groupsByCountry)) {
if (gs.length==1) {
let g = {...gs[0]}
g.location[0][1] = ""
addMarkerGroups(g,groupsMarkersLayerOut,content)
}
else {
let locationName = [gs[0].location[0][0],""]
let locationCoordinates = [0,0]
let members = 0
let contact = gs[0].contact
for (let g of gs) {
locationCoordinates[0] += g.location[1][0]
locationCoordinates[1] += g.location[1][1]
members += g.members
if (g.contact[0]!=gs[0].contact[0]) {
contact = contactGeneral
}
}
locationCoordinates[0] = locationCoordinates[0]/gs.length
locationCoordinates[1] = locationCoordinates[1]/gs.length
let gNew = {
location: [locationName,locationCoordinates],
members: members,
contact: contact
}
addMarkerGroups(gNew,groupsMarkersLayerOut,content)
}
}
groupsMarkersLayerOut.addTo(map)
map.on("zoomend", () => onZoomEnd(map))
}
function onZoomEnd(map) {
let zoomLevel = map.getZoom()
if (zoomLevel==3) {
map.removeLayer(groupsMarkersLayerIn)
groupsMarkersLayerOut.addTo(map)
}
else if (zoomLevel==4) {
map.removeLayer(groupsMarkersLayerOut)
groupsMarkersLayerIn.addTo(map)
} }
} }

View File

@ -96,8 +96,13 @@ export function loadLocaleContent(content,componentName,loaded,callback) {
if (callback!=undefined) { if (callback!=undefined) {
callback(parsed) callback(parsed)
} }
content.set(parsed) content.update((obj) => {
loaded = 1 Object.assign(obj,parsed)
return obj
})
loaded.update((val) => {
return val + 1
})
}) })
return locale return locale
} }

View File

@ -2,13 +2,24 @@ export let parties = [
{ {
logo: "roots", logo: "roots",
name: "Roots", name: "Roots",
location: ["ireland",[52.98479517270413, -7.649233227534782]], location: ["Ireland",[52.98479517270413, -7.649233227534782]],
//members: 6, //members: 6,
link: "https://discord.gg/pSTMacJZsK", link: "https://discord.gg/pSTMacJZsK",
description: "descriptionRoots" description: "descriptionRoots"
} }
] ]
export let partiesByCountry = {}
for (let g of parties) {
let country = g.location[0]
if (country in partiesByCountry) {
partiesByCountry[country].push(g)
}
else {
partiesByCountry[country] = [g]
}
}
export function addMarkersParties(map,content) { export function addMarkersParties(map,content) {
for (let g of parties) { for (let g of parties) {
let coordinates let coordinates

View File

@ -2,8 +2,20 @@ export let partners = [
{ {
name: "Gaia's Fall", name: "Gaia's Fall",
type: "typeGaiasFall", type: "typeGaiasFall",
location: [["Online",""],[0,0]],
link: "https://discord.libsoc.org/invite/", link: "https://discord.libsoc.org/invite/",
description: "descriptionGaiasFall", description: "descriptionGaiasFall",
logo: "gaias_fall" logo: "gaias_fall"
} }
] ]
export let partnersByCountry = {}
for (let g of partners) {
let country = g.location[0][0]
if (country in partnersByCountry) {
partnersByCountry[country].push(g)
}
else {
partnersByCountry[country] = [g]
}
}

View File

@ -7,10 +7,7 @@
"status": "Status", "status": "Status",
"members": "Members", "members": "Members",
"contact": "Contact", "contact": "Contact",
"EstoniaKohtlaJarve": "Estonia, Kohtla-Järve",
"forming": "forming", "forming": "forming",
"WhatsAppInviteLink": "WhatsApp invite link", "WhatsAppInviteLink": "WhatsApp invite link",
"DiscordInviteLink": "Discord invite link", "DiscordInviteLink": "Discord invite link"
"CanadaMontreal": "Canada, Montreal",
"Latvia": "Latvia"
} }

View File

@ -1,7 +1,6 @@
{ {
"heading": "Cooperatives", "heading": "Cooperatives",
"p1": "We establish worker cooperatives, which is a business model where employees own and control the enterprise. Each worker has a voice in decision-making, and profits are distributed based on individual contributions. This participatory structure fosters ownership, motivation, and job satisfaction, creating a more fulfilling work experience as well as challenging the wealth concentration in traditional capitalist businesses.", "p1": "We establish worker cooperatives, which is a business model where employees own and control the enterprise. Each worker has a voice in decision-making, and profits are distributed based on individual contributions. This participatory structure fosters ownership, motivation, and job satisfaction, creating a more fulfilling work experience as well as challenging the wealth concentration in traditional capitalist businesses. By focusing on employees' needs, our cooperatives create supportive and sustainable work environments that foster social cohesion and job security. We also prioritize the interests of local communities, taking a long-term perspective.",
"p2": "By focusing on employees' needs, our cooperatives create supportive and sustainable work environments that foster social cohesion and job security. We also prioritize the interests of local communities, taking a long-term perspective. With workers making decisions, we avoid harmful short-term profit-driven strategies and instead reinvest our profits, contributing to community development and resilience.",
"subheading1": "Our Cooperatives", "subheading1": "Our Cooperatives",
"subheading2": "Europe", "subheading2": "Europe",
"name": "Name", "name": "Name",
@ -12,10 +11,10 @@
"contact": "Contact", "contact": "Contact",
"description": "Description", "description": "Description",
"website": "Website", "website": "Website",
"EstoniaKohtlaJarve": "Estonia, Kohtla-Järve",
"wellnessAndHealth": "wellness and health", "wellnessAndHealth": "wellness and health",
"inDevelopment": "in development", "inDevelopment": "in development",
"WhatsAppInviteLink": "WhatsApp invite link", "WhatsAppInviteLink": "WhatsApp invite link",
"DiscordInviteLink": "Discord invite link",
"descriptionChironHealth": "Chiron Health is a health platform providing courses and services on the topics of nutrition, exercise, sleep and mental wellbeing.", "descriptionChironHealth": "Chiron Health is a health platform providing courses and services on the topics of nutrition, exercise, sleep and mental wellbeing.",
"herbalTeas": "herbal teas", "herbalTeas": "herbal teas",
"kuuskDescription": "Kuusk is an online store that sells herbal teas from exclusively local wild plants, as well as an online gathering course." "kuuskDescription": "Kuusk is an online store that sells herbal teas from exclusively local wild plants, as well as an online gathering course."

View File

@ -0,0 +1,16 @@
{
"Online": "Online",
"Denmark": "Denmark",
"Estonia": "Estonia",
"Greece": "Greece",
"Latvia": "Latvia",
"Canada": "Canada",
"Copenhagen": "Copenhagen",
"Ireland": "Ireland",
"Montreal": "Montreal",
"Kolding": "Kolding",
"KohtlaJarve": "Kohtla-Järve",
"Athens": "Athens",
"Riga": "Riga",
"Halifax": "Halifax"
}

View File

@ -1,19 +1,11 @@
{ {
"heading": "Groups", "heading": "Groups",
"p1": "We aim to raise awareness about the negative impact of current politico-economic systems on our well-being. By highlighting these issues, we empower people to question the status quo and imagine fairer and more sustainable alternatives.", "p1": "We aim to raise awareness about the negative impact of current politico-economic systems on our well-being. We engage in mutual aid and collective action to address immediate challenges within capitalism. Through mutual aid, we support each other by sharing resources, knowledge, and skills, fostering solidarity and resilience. Whether it's community gardens, food cooperatives, or support networks, our goal is to make life under capitalism more bearable and create pockets of resistance and alternatives within the system.",
"p2": "But our mission goes beyond theory. We engage in mutual aid and collective action to address immediate challenges within capitalism. Through mutual aid, we support each other by sharing resources, knowledge, and skills, fostering solidarity and resilience. Whether it's community gardens, food cooperatives, or support networks, our goal is to make life under capitalism more bearable and create pockets of resistance and alternatives within the system.",
"subheading1": "Our Groups", "subheading1": "Our Groups",
"subheading2": "Europe", "subheading2": "Europe",
"location": "Location", "location": "Location",
"members": "Members", "members": "Members",
"contact": "Contact", "contact": "Contact",
"DiscordInviteLink": "Discord invite link", "DiscordInviteLink": "Discord invite link",
"WhatsAppInviteLink": "WhatsApp invite link", "WhatsAppInviteLink": "WhatsApp invite link"
"DenmarkCopenhagen": "Denmark, Copenhagen",
"DenmarkKolding": "Denmark, Kolding",
"EstoniaKohtlaJarve": "Estonia, Kohtla-Järve",
"GreeceAthens": "Greece, Athens",
"LatviaRiga": "Latvia, Riga",
"CanadaHalifax": "Canada, Halifax",
"Ireland": "Ireland"
} }

View File

@ -1,12 +1,11 @@
{ {
"heading": "Parties", "heading": "Parties",
"p1": "We create political parties in order to push for reforms allowing us to easier further our goals, to move the Overton window as well as to gain popularity. However, we recognize that we cannot achieve libertarian socialism through institutions which act contrary to our goals.", "p1": "We create political parties in order to push for reforms allowing us to easier further our goals, to move the Overton window as well as to gain popularity. However, we recognize that we cannot achieve libertarian socialism through institutions which act contrary to our goals. Nevertheless, we must strategically utilize any opportunity that we have in order to succeed.",
"subheading1": "Our Parties", "subheading1": "Our Parties",
"name": "Name", "name": "Name",
"location": "Location", "location": "Location",
"members": "Members", "members": "Members",
"link": "Link", "link": "Link",
"description": "Description", "description": "Description",
"ireland": "Ireland", "descriptionRoots": "We are a left libertarian organization based in Ireland. We have a focus on rebuilding the country's infrastructure, sense of governance, housing, agricultural industries and youth affairs."
"descriptionRoots": "We are a left libertarian organization based in Ireland. We have a focus on rebuilding the countries infrastructure, sense of governance, housing, agricultural industries and youth affairs."
} }

View File

@ -2,15 +2,11 @@
"heading": "Коммуны", "heading": "Коммуны",
"p1": "Мы создаем либертарные социалистические коммуны, покупая землю, жилье и средства производства, которые затем принадлежат членам этих коммун. В коммунах нет частной собственности и, следовательно, эксплуатации и страданий, которые с ней связаны. Решения принимаются с использованием прямой демократии с упором на консенсус, гарантируя, что каждый член сообщества имеет право принимать решения, влияющие на его жизнь. Сообщества пытаются создавать свои собственные кооперативы, чтобы финансировать свое развитие, становясь финансово независимыми и устойчивыми, что позволяет им выживать и расти. В сообществах по возможности используется экономика дарения. Каждая коммуна — это маленький маяк социализма в темном капиталистическом мире, показывающий нам, насколько хорошей может быть жизнь, если мы только достигнем своей цели.", "p1": "Мы создаем либертарные социалистические коммуны, покупая землю, жилье и средства производства, которые затем принадлежат членам этих коммун. В коммунах нет частной собственности и, следовательно, эксплуатации и страданий, которые с ней связаны. Решения принимаются с использованием прямой демократии с упором на консенсус, гарантируя, что каждый член сообщества имеет право принимать решения, влияющие на его жизнь. Сообщества пытаются создавать свои собственные кооперативы, чтобы финансировать свое развитие, становясь финансово независимыми и устойчивыми, что позволяет им выживать и расти. В сообществах по возможности используется экономика дарения. Каждая коммуна — это маленький маяк социализма в темном капиталистическом мире, показывающий нам, насколько хорошей может быть жизнь, если мы только достигнем своей цели.",
"subheading1": "Наши коммуны", "subheading1": "Наши коммуны",
"subheading2": "Европа",
"location": "Локация", "location": "Локация",
"status": "Статус", "status": "Статус",
"members": "Участники", "members": "Участники",
"contact": "Контакт", "contact": "Контакт",
"EstoniaKohtlaJarve": "Эстония, Кохтла-Ярве",
"forming": "формируется", "forming": "формируется",
"WhatsAppInviteLink": "WhatsApp ссылка", "WhatsAppInviteLink": "WhatsApp ссылка",
"DiscordInviteLink": "Discord ссылка", "DiscordInviteLink": "Discord ссылка"
"CanadaMontreal": "Канада, Монреаль",
"Latvia": "Латвия"
} }

View File

@ -1,7 +1,6 @@
{ {
"heading": "Кооперативы", "heading": "Кооперативы",
"p1": "Мы создаем рабочие кооперативы, которые представляют собой бизнес-модель, в которой работники владеют предприятием. Каждый работник имеет право голоса при принятии решений, а прибыль распределяется на основе индивидуальных вкладов. Эта структура способствует мотивации и удовлетворенности работой, создавая более приятные условия труда, а также бросает вызов концентрации богатства в традиционных капиталистических предприятиях.", "p1": "Мы создаем рабочие кооперативы, которые представляют собой бизнес-модель, в которой работники владеют предприятием. Каждый работник имеет право голоса при принятии решений, а прибыль распределяется на основе индивидуальных вкладов. Эта структура способствует мотивации и удовлетворенности работой, создавая более приятные условия труда, а также бросает вызов концентрации богатства в традиционных капиталистических предприятиях. Сосредоточив внимание на потребностях сотрудников, наши кооперативы создают благоприятную и устойчивую рабочую среду, которая способствует социальной сплоченности и гарантиям занятости. Мы также уделяем первостепенное внимание интересам местных сообществ, ориентируясь на долгосрочную перспективу.",
"p2": "Сосредоточив внимание на потребностях сотрудников, наши кооперативы создают благоприятную и устойчивую рабочую среду, которая способствует социальной сплоченности и гарантиям занятости. Мы также уделяем первостепенное внимание интересам местных сообществ, ориентируясь на долгосрочную перспективу. Когда решения принимают работники, мы избегаем вредных краткосрочных стратегий, ориентированных на получение прибыли, и вместо этого реинвестируем нашу прибыль, способствуя развитию и устойчивости сообщества.",
"subheading1": "Наши кооперативы", "subheading1": "Наши кооперативы",
"subheading2": "Европа", "subheading2": "Европа",
"name": "Название", "name": "Название",
@ -12,10 +11,10 @@
"contact": "Контакт", "contact": "Контакт",
"description": "Описание", "description": "Описание",
"website": "Вебсайт", "website": "Вебсайт",
"EstoniaKohtlaJarve": "Эстония, Кохтла-Ярве",
"wellnessAndHealth": "благополучие и здоровье", "wellnessAndHealth": "благополучие и здоровье",
"inDevelopment": "в разработке", "inDevelopment": "в разработке",
"WhatsAppInviteLink": "WhatsApp ссылка", "WhatsAppInviteLink": "WhatsApp ссылка",
"DiscordInviteLink": "Discord ссылка",
"descriptionChironHealth": "Chiron Health — это платформа о здоровье, предлагающая курсы и услуги по вопросам питания, физических упражнений, сна и психического благополучия", "descriptionChironHealth": "Chiron Health — это платформа о здоровье, предлагающая курсы и услуги по вопросам питания, физических упражнений, сна и психического благополучия",
"herbalTeas": "травяные чаи", "herbalTeas": "травяные чаи",
"kuuskDescription": "Kuusk — интернет-магазин, в котором продаются травяные чаи исключительно из местных дикорастущих растений, а также онлайн-курс по собирательству." "kuuskDescription": "Kuusk — интернет-магазин, в котором продаются травяные чаи исключительно из местных дикорастущих растений, а также онлайн-курс по собирательству."

View File

@ -0,0 +1,16 @@
{
"Online": "Онлайн",
"Denmark": "Дания",
"Estonia": "Эстония",
"Greece": "Греция",
"Latvia": "Латвия",
"Canada": "Канада",
"Ireland": "Ирландия",
"Copenhagen": "Копенгаген",
"Kolding": "Колдинг",
"KohtlaJarve": "Кохтла-Ярве",
"Athens": "Афины",
"Riga": "Рига",
"Halifax": "Галифакс",
"Montreal": "Монреаль"
}

View File

@ -1,19 +1,10 @@
{ {
"heading": "Группы", "heading": "Группы",
"p1": "Мы стремимся повышать осведомленность о негативном влиянии нынешних политико-экономических систем на наше благополучие. Выдвигая на первый план эти проблемы, мы даем людям возможность поставить под сомнение статус-кво и представить себе более справедливые и устойчивые альтернативы.", "p1": "Мы стремимся повышать осведомленность о негативном влиянии нынешних политико-экономических систем на наше благополучие. Мы участвуем во взаимопомощи и коллективных действиях для решения насущных проблем. Посредством взаимопомощи мы поддерживаем друг друга, делясь ресурсами, знаниями и навыками, укрепляя солидарность и устойчивость к негодам. Будь то общественные сады, продовольственные кооперативы или сети поддержки, наша цель — сделать жизнь при капитализме более терпимой и создать очаги сопротивления и альтернатив внутри системы.",
"p2": "Однако, наша миссия выходит за рамки теории. Мы участвуем во взаимопомощи и коллективных действиях для решения насущных проблем. Посредством взаимопомощи мы поддерживаем друг друга, делясь ресурсами, знаниями и навыками, укрепляя солидарность и устойчивость к негодам. Будь то общественные сады, продовольственные кооперативы или сети поддержки, наша цель — сделать жизнь при капитализме более терпимой и создать очаги сопротивления и альтернативы внутри системы.",
"subheading1": "Наши группы", "subheading1": "Наши группы",
"subheading2": "Европа",
"location": "Локация", "location": "Локация",
"members": "Участники", "members": "Участники",
"contact": "Контакт", "contact": "Контакт",
"DiscordInviteLink": "Discord ссылка", "DiscordInviteLink": "Discord ссылка",
"WhatsAppInviteLink": "WhatsApp ссылка", "WhatsAppInviteLink": "WhatsApp ссылка"
"DenmarkCopenhagen": "Дания, Копенгаген",
"DenmarkKolding": "Дания, Колдинг",
"EstoniaKohtlaJarve": "Эстония, Кохтла-Ярве",
"GreeceAthens": "Греция, Афины",
"LatviaRiga": "Латвия, Рига",
"CanadaHalifax": "Канада, Галифакс",
"Ireland": "Ирландия"
} }

View File

@ -1,6 +1,6 @@
{ {
"heading": "Партии", "heading": "Партии",
"p1": "Мы создаем политические партии, чтобы продвигать реформы, которые позволят легче достичь наших целей, сдвигать окно Овертона и увеличивать нашу популярность. Однако мы признаем, что мы не можем достичь либертарианского социализма с помощью институтов, действующих против наших целей.", "p1": "Мы создаем политические партии, чтобы продвигать реформы, которые позволят легче достичь наших целей, сдвигать окно Овертона и увеличивать нашу популярность. Однако мы признаем, что мы не можем достичь либертарного социализма с помощью институтов, действующих против наших целей. Тем не менее, мы должны стратегически использовать любую возможность, которая у нас есть, чтобы добиться успеха.",
"subheading1": "Наши партии", "subheading1": "Наши партии",
"name": "Имя", "name": "Имя",
"location": "Локация", "location": "Локация",