Compare commits

..

No commits in common. "main" and "profile-feature" have entirely different histories.

346 changed files with 17254 additions and 9549 deletions

8
.gitignore vendored
View File

@ -6,10 +6,4 @@ Server/sessions/
.vscode/settings.json .vscode/settings.json
Server/app/resources/emails/credentials.json Server/app/resources/emails/credentials.json
Server/db/connection.yml Server/db/connection.yml
Server/public/assets/groups.json Server/public/assets/groups.json
Server/public/assets/communes.json
Server/public/assets/coops.json
Server/public/assets/parties.json
Server/public/assets/cooperatives.json
Server/public/assets/partners.json
Server/public/assets/trade_unions.json

156
LICENSE
View File

@ -1,156 +0,0 @@
Creative Commons Attribution 4.0 International
Creative Commons Corporation (“Creative Commons”) is not a law firm and does not provide legal services or legal advice. Distribution of Creative Commons public licenses does not create a lawyer-client or other relationship. Creative Commons makes its licenses and related information available on an “as-is” basis. Creative Commons gives no warranties regarding its licenses, any material licensed under their terms and conditions, or any related information. Creative Commons disclaims all liability for damages resulting from their use to the fullest extent possible.
Using Creative Commons Public Licenses
Creative Commons public licenses provide a standard set of terms and conditions that creators and other rights holders may use to share original works of authorship and other material subject to copyright and certain other rights specified in the public license below. The following considerations are for informational purposes only, are not exhaustive, and do not form part of our licenses.
Considerations for licensors: Our public licenses are intended for use by those authorized to give the public permission to use material in ways otherwise restricted by copyright and certain other rights. Our licenses are irrevocable. Licensors should read and understand the terms and conditions of the license they choose before applying it. Licensors should also secure all rights necessary before applying our licenses so that the public can reuse the material as expected. Licensors should clearly mark any material not subject to the license. This includes other CC-licensed material, or material used under an exception or limitation to copyright. More considerations for licensors.
Considerations for the public: By using one of our public licenses, a licensor grants the public permission to use the licensed material under specified terms and conditions. If the licensors permission is not necessary for any reasonfor example, because of any applicable exception or limitation to copyrightthen that use is not regulated by the license. Our licenses grant only permissions under copyright and certain other rights that a licensor has authority to grant. Use of the licensed material may still be restricted for other reasons, including because others have copyright or other rights in the material. A licensor may make special requests, such as asking that all changes be marked or described. Although not required by our licenses, you are encouraged to respect those requests where reasonable. More considerations for the public.
Creative Commons Attribution 4.0 International Public License
By exercising the Licensed Rights (defined below), You accept and agree to be bound by the terms and conditions of this Creative Commons Attribution 4.0 International Public License ("Public License"). To the extent this Public License may be interpreted as a contract, You are granted the Licensed Rights in consideration of Your acceptance of these terms and conditions, and the Licensor grants You such rights in consideration of benefits the Licensor receives from making the Licensed Material available under these terms and conditions.
Section 1 Definitions.
a. Adapted Material means material subject to Copyright and Similar Rights that is derived from or based upon the Licensed Material and in which the Licensed Material is translated, altered, arranged, transformed, or otherwise modified in a manner requiring permission under the Copyright and Similar Rights held by the Licensor. For purposes of this Public License, where the Licensed Material is a musical work, performance, or sound recording, Adapted Material is always produced where the Licensed Material is synched in timed relation with a moving image.
b. Adapter's License means the license You apply to Your Copyright and Similar Rights in Your contributions to Adapted Material in accordance with the terms and conditions of this Public License.
c. Copyright and Similar Rights means copyright and/or similar rights closely related to copyright including, without limitation, performance, broadcast, sound recording, and Sui Generis Database Rights, without regard to how the rights are labeled or categorized. For purposes of this Public License, the rights specified in Section 2(b)(1)-(2) are not Copyright and Similar Rights.
d. Effective Technological Measures means those measures that, in the absence of proper authority, may not be circumvented under laws fulfilling obligations under Article 11 of the WIPO Copyright Treaty adopted on December 20, 1996, and/or similar international agreements.
e. Exceptions and Limitations means fair use, fair dealing, and/or any other exception or limitation to Copyright and Similar Rights that applies to Your use of the Licensed Material.
f. Licensed Material means the artistic or literary work, database, or other material to which the Licensor applied this Public License.
g. Licensed Rights means the rights granted to You subject to the terms and conditions of this Public License, which are limited to all Copyright and Similar Rights that apply to Your use of the Licensed Material and that the Licensor has authority to license.
h. Licensor means the individual(s) or entity(ies) granting rights under this Public License.
i. Share means to provide material to the public by any means or process that requires permission under the Licensed Rights, such as reproduction, public display, public performance, distribution, dissemination, communication, or importation, and to make material available to the public including in ways that members of the public may access the material from a place and at a time individually chosen by them.
j. Sui Generis Database Rights means rights other than copyright resulting from Directive 96/9/EC of the European Parliament and of the Council of 11 March 1996 on the legal protection of databases, as amended and/or succeeded, as well as other essentially equivalent rights anywhere in the world.
k. You means the individual or entity exercising the Licensed Rights under this Public License. Your has a corresponding meaning.
Section 2 Scope.
a. License grant.
1. Subject to the terms and conditions of this Public License, the Licensor hereby grants You a worldwide, royalty-free, non-sublicensable, non-exclusive, irrevocable license to exercise the Licensed Rights in the Licensed Material to:
A. reproduce and Share the Licensed Material, in whole or in part; and
B. produce, reproduce, and Share Adapted Material.
2. Exceptions and Limitations. For the avoidance of doubt, where Exceptions and Limitations apply to Your use, this Public License does not apply, and You do not need to comply with its terms and conditions.
3. Term. The term of this Public License is specified in Section 6(a).
4. Media and formats; technical modifications allowed. The Licensor authorizes You to exercise the Licensed Rights in all media and formats whether now known or hereafter created, and to make technical modifications necessary to do so. The Licensor waives and/or agrees not to assert any right or authority to forbid You from making technical modifications necessary to exercise the Licensed Rights, including technical modifications necessary to circumvent Effective Technological Measures. For purposes of this Public License, simply making modifications authorized by this Section 2(a)(4) never produces Adapted Material.
5. Downstream recipients.
A. Offer from the Licensor Licensed Material. Every recipient of the Licensed Material automatically receives an offer from the Licensor to exercise the Licensed Rights under the terms and conditions of this Public License.
B. No downstream restrictions. You may not offer or impose any additional or different terms or conditions on, or apply any Effective Technological Measures to, the Licensed Material if doing so restricts exercise of the Licensed Rights by any recipient of the Licensed Material.
6. No endorsement. Nothing in this Public License constitutes or may be construed as permission to assert or imply that You are, or that Your use of the Licensed Material is, connected with, or sponsored, endorsed, or granted official status by, the Licensor or others designated to receive attribution as provided in Section 3(a)(1)(A)(i).
b. Other rights.
1. Moral rights, such as the right of integrity, are not licensed under this Public License, nor are publicity, privacy, and/or other similar personality rights; however, to the extent possible, the Licensor waives and/or agrees not to assert any such rights held by the Licensor to the limited extent necessary to allow You to exercise the Licensed Rights, but not otherwise.
2. Patent and trademark rights are not licensed under this Public License.
3. To the extent possible, the Licensor waives any right to collect royalties from You for the exercise of the Licensed Rights, whether directly or through a collecting society under any voluntary or waivable statutory or compulsory licensing scheme. In all other cases the Licensor expressly reserves any right to collect such royalties.
Section 3 License Conditions.
Your exercise of the Licensed Rights is expressly made subject to the following conditions.
a. Attribution.
1. If You Share the Licensed Material (including in modified form), You must:
A. retain the following if it is supplied by the Licensor with the Licensed Material:
i. identification of the creator(s) of the Licensed Material and any others designated to receive attribution, in any reasonable manner requested by the Licensor (including by pseudonym if designated);
ii. a copyright notice;
iii. a notice that refers to this Public License;
iv. a notice that refers to the disclaimer of warranties;
v. a URI or hyperlink to the Licensed Material to the extent reasonably practicable;
B. indicate if You modified the Licensed Material and retain an indication of any previous modifications; and
C. indicate the Licensed Material is licensed under this Public License, and include the text of, or the URI or hyperlink to, this Public License.
2. You may satisfy the conditions in Section 3(a)(1) in any reasonable manner based on the medium, means, and context in which You Share the Licensed Material. For example, it may be reasonable to satisfy the conditions by providing a URI or hyperlink to a resource that includes the required information.
3. If requested by the Licensor, You must remove any of the information required by Section 3(a)(1)(A) to the extent reasonably practicable.
4. If You Share Adapted Material You produce, the Adapter's License You apply must not prevent recipients of the Adapted Material from complying with this Public License.
Section 4 Sui Generis Database Rights.
Where the Licensed Rights include Sui Generis Database Rights that apply to Your use of the Licensed Material:
a. for the avoidance of doubt, Section 2(a)(1) grants You the right to extract, reuse, reproduce, and Share all or a substantial portion of the contents of the database;
b. if You include all or a substantial portion of the database contents in a database in which You have Sui Generis Database Rights, then the database in which You have Sui Generis Database Rights (but not its individual contents) is Adapted Material; and
c. You must comply with the conditions in Section 3(a) if You Share all or a substantial portion of the contents of the database.
For the avoidance of doubt, this Section 4 supplements and does not replace Your obligations under this Public License where the Licensed Rights include other Copyright and Similar Rights.
Section 5 Disclaimer of Warranties and Limitation of Liability.
a. Unless otherwise separately undertaken by the Licensor, to the extent possible, the Licensor offers the Licensed Material as-is and as-available, and makes no representations or warranties of any kind concerning the Licensed Material, whether express, implied, statutory, or other. This includes, without limitation, warranties of title, merchantability, fitness for a particular purpose, non-infringement, absence of latent or other defects, accuracy, or the presence or absence of errors, whether or not known or discoverable. Where disclaimers of warranties are not allowed in full or in part, this disclaimer may not apply to You.
b. To the extent possible, in no event will the Licensor be liable to You on any legal theory (including, without limitation, negligence) or otherwise for any direct, special, indirect, incidental, consequential, punitive, exemplary, or other losses, costs, expenses, or damages arising out of this Public License or use of the Licensed Material, even if the Licensor has been advised of the possibility of such losses, costs, expenses, or damages. Where a limitation of liability is not allowed in full or in part, this limitation may not apply to You.
c. The disclaimer of warranties and limitation of liability provided above shall be interpreted in a manner that, to the extent possible, most closely approximates an absolute disclaimer and waiver of all liability.
Section 6 Term and Termination.
a. This Public License applies for the term of the Copyright and Similar Rights licensed here. However, if You fail to comply with this Public License, then Your rights under this Public License terminate automatically.
b. Where Your right to use the Licensed Material has terminated under Section 6(a), it reinstates:
1. automatically as of the date the violation is cured, provided it is cured within 30 days of Your discovery of the violation; or
2. upon express reinstatement by the Licensor.
c. For the avoidance of doubt, this Section 6(b) does not affect any right the Licensor may have to seek remedies for Your violations of this Public License.
d. For the avoidance of doubt, the Licensor may also offer the Licensed Material under separate terms or conditions or stop distributing the Licensed Material at any time; however, doing so will not terminate this Public License.
e. Sections 1, 5, 6, 7, and 8 survive termination of this Public License.
Section 7 Other Terms and Conditions.
a. The Licensor shall not be bound by any additional or different terms or conditions communicated by You unless expressly agreed.
b. Any arrangements, understandings, or agreements regarding the Licensed Material not stated herein are separate from and independent of the terms and conditions of this Public License.
Section 8 Interpretation.
a. For the avoidance of doubt, this Public License does not, and shall not be interpreted to, reduce, limit, restrict, or impose conditions on any use of the Licensed Material that could lawfully be made without permission under this Public License.
b. To the extent possible, if any provision of this Public License is deemed unenforceable, it shall be automatically reformed to the minimum extent necessary to make it enforceable. If the provision cannot be reformed, it shall be severed from this Public License without affecting the enforceability of the remaining terms and conditions.
c. No term or condition of this Public License will be waived and no failure to comply consented to unless expressly agreed to by the Licensor.
d. Nothing in this Public License constitutes or may be interpreted as a limitation upon, or waiver of, any privileges and immunities that apply to the Licensor or You, including from the legal processes of any jurisdiction or authority.
Creative Commons is not a party to its public licenses. Notwithstanding, Creative Commons may elect to apply one of its public licenses to material it publishes and in those instances will be considered the “Licensor.” Except for the limited purpose of indicating that material is shared under a Creative Commons public license or as otherwise permitted by the Creative Commons policies published at creativecommons.org/policies, Creative Commons does not authorize the use of the trademark “Creative Commons” or any other trademark or logo of Creative Commons without its prior written consent including, without limitation, in connection with any unauthorized modifications to any of its public licenses or any other arrangements, understandings, or agreements concerning use of licensed material. For the avoidance of doubt, this paragraph does not form part of the public licenses.
Creative Commons may be contacted at creativecommons.org.

View File

@ -12,10 +12,6 @@
<meta property="og:url" content=""> <meta property="og:url" content="">
<link rel="icon" type="image/png" href="/favicon.png"/> <link rel="icon" type="image/png" href="/favicon.png"/>
<!--Load fonts-->
<link rel="preload" href="/fonts/OpenSans/opensans.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="/fonts/LoraSerif/Lora-Regular.woff2" as="font" type="font/woff2" crossorigin>
<!--Load libraries--> <!--Load libraries-->
<!--Load fonts--> <!--Load fonts-->
@ -24,8 +20,6 @@
<!--Load components--> <!--Load components-->
<!--Preload-->
</head> </head>
<body> <body>
<!--<loadscreen-component></loadscreen-component>--> <!--<loadscreen-component></loadscreen-component>-->

View File

@ -1,151 +0,0 @@
module AdminController
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests, GenieAuthentication, DataFrames, GenieAuthorisation
using JSON3
using SearchLight,SearchLightPostgreSQL, LibPQ, JSON3
using Server.DatabaseSupport, Server.TemplateEditor, Server.Users
import Server.DatabaseSupport: select_from_table, insert_into_table, delete_from_table, exist_in_table
controller = "admin"
dict_layouts = Dict(
:admin_panel => generate_layout_html("main",controller,"admin_panel"),
)
#---Page info-----------------------------------------------------
const admin_panel_info = Dict(
"en" => Dict(
:title => "LibSoc - Admin panel",
:description => ""
),
"ru" => Dict(
:title => "",
:description => ""
),
"fr" => Dict(
:title => "LibSoc - Admin panel",
:description => ""
),
"ee" => Dict(
:title => "LibSoc - Admin panel",
:description => ""
),
)
function get_locale()
data = payload()
if :locale in keys(data)
return data[:locale]
else
return "en"
end
end
#---Helpers-----------------------------------------------------------
function table_to_json(name,df)
ar = []
for df_row in eachrow(df)
dict = Dict()
for id in names(df_row)
dict[id] = df_row[id]
end
push!(ar,dict)
end
open("public/assets/"*name*".json", "w") do io
JSON3.write(io, ar)
end
end
function compile(name)
df = select_from_table([name => ["*"]])
table_to_json(name,df)
end
function move_requests(name)
df_requests = select_from_table(["$(name)_requests" => ["*"]], where_data=["verified" => true, "added" => false])
df = select_from_table([name => ["*"]])
latitudes = df.latitude
longitudes = df.longitude
for df_row in eachrow(df_requests)
ind_id_given = ismissing(df_row.id_given) ? nothing : findfirst(df_row.id_given.==df.id)
if (!isnothing(ind_id_given))
id = df[ind_id_given,:id]
row_found = df[ind_id_given,Not(:id)]
dict = Dict(zip(names(row_found),values(row_found)))
dict["members"] += 1
update_table(name,dict, where_data=["id" => id])
else
id = df_row.id
dict_update = Dict("added" => true)
update_table("$(name)_requests",dict_update, where_data=["id" => id])
df_row_to_add = df_row[Not(:id_given)]
df_row_to_add = df_row_to_add[Not(:verified)]
df_row_to_add = df_row_to_add[Not(:added)]
df_row_to_add = df_row_to_add[Not(:id)]
dict = Dict(zip(names(df_row_to_add),values(df_row_to_add)))
dict["members"] = 1
insert_into_table(name,dict)
end
end
end
#---Functions---------------------------------------------------------
current_user() = findone(Users.User, id = get_authentication())
function admin_panel()
if has_permission(current_user(), "verification")
locale = get_locale()
html(:admin,:admin_panel, layout = dict_layouts[:admin_panel], context = @__MODULE__,
title = admin_panel_info[locale][:title],
description = admin_panel_info[locale][:description]
)
end
end
function verify()
if has_permission(current_user(), "verification")
data = copy(jsonpayload())
user_id = data["user_id"]
update_table("users",Dict("verified" => true), where_data=["id" => user_id])
return nothing
end
end
function get_unverified_users()
if has_permission(current_user(), "verification")
users = select_from_table("users" => ["id","email"], where_data = ["verified" => false])
data = []
if size(users,1)!=0
for x in eachrow(users)
dict = Dict("user_id" => x["id"],"email" => x["email"])
push!(data, dict)
end
end
return JSON3.write(data)
end
end
function add_verified_groups()
if has_permission(current_user(), "verification")
groups_create_requests_verified = select_from_table("groups_requests" => ["*"], where_data = ["group_id" => nothing, "status" => 1])
if size(groups_create_requests_verified,1)!=0
data = Dict(zip(names(groups_create_requests_verified),groups_create_requests_verified[end,:]))
user_id = data["user_id"]
delete!(data,"group_id")
delete!(data,"user_id")
delete!(data,"id")
delete!(data,"status")
group_id = insert_into_table("groups",data, "RETURNING id")[1,1]
dict_users_groups = Dict("user_id" => user_id, "group_id" => group_id)
insert_into_table("users_groups",dict_users_groups)
delete_from_table("groups_requests",["user_id" => user_id])
end
compile("groups")
end
end
end

View File

@ -1 +0,0 @@
<admin-panel></admin-panel>

View File

@ -82,33 +82,6 @@ const auth_info = Dict(
"ru" => Dict( "ru" => Dict(
:title => "LibSoc - Логин/Регистрация", :title => "LibSoc - Логин/Регистрация",
:description => "" :description => ""
),
"fr" => Dict(
:title => "LibSoc - Connexion/Inscription",
:description => ""
),
"ee" => Dict(
:title => "LibSoc - Logi sisse",
:description => ""
)
)
const reset_password_info = Dict(
"en" => Dict(
:title => "LibSoc - Reset password",
:description => ""
),
"ru" => Dict(
:title => "LibSoc - Восстановление пароля",
:description => ""
),
"fr" => Dict(
:title => "LibSoc - Réinitialiser le mot de passe",
:description => ""
),
"ee" => Dict(
:title => "LibSoc - Parooli lähtestamine",
:description => ""
) )
) )
@ -120,7 +93,6 @@ const dict_layouts = Dict(
:auth => generate_layout_html("main",controller,"auth",libraries=["GoogleAuth"]), :auth => generate_layout_html("main",controller,"auth",libraries=["GoogleAuth"]),
:profile => generate_layout_html("main",controller,"profile",libraries=["Leaflet"]), :profile => generate_layout_html("main",controller,"profile",libraries=["Leaflet"]),
:email_confirmation => generate_layout_html("main",controller,"email_confirmation"), :email_confirmation => generate_layout_html("main",controller,"email_confirmation"),
:reset_password => generate_layout_html("main",controller,"reset_password")
) )
function auth() function auth()
@ -148,15 +120,6 @@ function email_confirmation()
) )
end end
function reset_password()
locale = get_locale()
set_cookies(params())
html(:authentication,:reset_password, layout = dict_layouts[:reset_password], context = @__MODULE__,
title = reset_password_info[locale][:title],
description = reset_password_info[locale][:description]
)
end
function confirm_email() function confirm_email()
code = rawpayload() code = rawpayload()
user = current_user() user = current_user()
@ -177,6 +140,7 @@ function register()
password = data["password"] |> Users.hash_password, password = data["password"] |> Users.hash_password,
) |> save! ) |> save!
authenticate(user.id, GenieSession.session(params())) authenticate(user.id, GenieSession.session(params()))
assign_role(user, findone(Role, name = "free"))
confirmation_code = randstring('0':'9', 5) confirmation_code = randstring('0':'9', 5)
user.confirmation_code = confirmation_code user.confirmation_code = confirmation_code
save(user) save(user)

View File

@ -1,2 +0,0 @@
<reset-password-component></reset-password-component>

View File

@ -7,7 +7,7 @@ using Server.DatabaseSupport, Server.TemplateEditor
controller = "basic" controller = "basic"
dict_layouts = Dict( dict_layouts = Dict(
:landing => generate_layout_html("main",controller,"landing",css=["landing"],libraries=["Leaflet"],preload=[Dict("path"=>"/img/crowd.webp","type"=>"image")]), :landing => generate_layout_html("main",controller,"landing",css=["landing"],libraries=["Leaflet"]),
:manifesto => generate_layout_html("main",controller,"manifesto"), :manifesto => generate_layout_html("main",controller,"manifesto"),
:join_us => generate_layout_html("main",controller,"join_us",libraries=["Leaflet"]), :join_us => generate_layout_html("main",controller,"join_us",libraries=["Leaflet"]),
:compass => generate_layout_html("main",controller,"compass"), :compass => generate_layout_html("main",controller,"compass"),
@ -24,14 +24,6 @@ const landing_info = Dict(
:title => "LibSoc - Глобальная сеть либертарных социалистов", :title => "LibSoc - Глобальная сеть либертарных социалистов",
:description => "" :description => ""
), ),
"fr" => Dict(
:title => "LibSoc - Un réseau mondial de socialistes libertaires",
:description => ""
),
"ee" => Dict(
:title => "LibSoc - Libertaarsotsialistide ülemaailmne võrgustik",
:description => ""
)
) )
const manifesto_info = Dict( const manifesto_info = Dict(
@ -42,34 +34,18 @@ const manifesto_info = Dict(
"ru" => Dict( "ru" => Dict(
:title => "LibSoc - Манифест", :title => "LibSoc - Манифест",
:description => "" :description => ""
),
"fr" => Dict(
:title => "LibSoc - Manifeste",
:description => ""
),
"ee" => Dict(
:title => "LibSoc - Manifest",
:description => ""
) )
) )
const join_us_info = Dict( const join_us_info = Dict(
"en" => Dict( "en" => Dict(
:title => "LibSoc - Join Us", :title => "LibSoc - Manifesto",
:description => "" :description => ""
), ),
"ru" => Dict( "ru" => Dict(
:title => "LibSoc - Присоединяйся", :title => "LibSoc - Присоединяйся",
:description => "" :description => ""
), ),
"fr" => Dict(
:title => "LibSoc - Rejoignez-nous",
:description => ""
),
"ee" => Dict(
:title => "LibSoc - Liitu meiega",
:description => ""
)
) )
const compass_info = Dict( const compass_info = Dict(
@ -80,14 +56,6 @@ const compass_info = Dict(
"ru" => Dict( "ru" => Dict(
:title => "LibSoc - Политический компас", :title => "LibSoc - Политический компас",
:description => "" :description => ""
),
"fr" => Dict(
:title => "LibSoc - Political Compass",
:description => ""
),
"ee" => Dict(
:title => "LibSoc - Political Compass",
:description => ""
) )
) )

View File

@ -21,14 +21,6 @@ const communes_info = Dict(
"ru" => Dict( "ru" => Dict(
:title => "LibSoc - Коммуны", :title => "LibSoc - Коммуны",
:description => "" :description => ""
),
"fr" => Dict(
:title => "LibSoc - Communes",
:description => ""
),
"ee" => Dict(
:title => "LibSoc - Kommuunid",
:description => ""
) )
) )

View File

@ -21,14 +21,6 @@ const cooperatives_info = Dict(
"ru" => Dict( "ru" => Dict(
:title => "LibSoc - Кооперативы", :title => "LibSoc - Кооперативы",
:description => "" :description => ""
),
"fr" => Dict(
:title => "LibSoc - Coopératives",
:description => ""
),
"ee" => Dict(
:title => "LibSoc - Kooperatiivid",
:description => ""
) )
) )

View File

@ -22,14 +22,6 @@ const groups_info = Dict(
"ru" => Dict( "ru" => Dict(
:title => "LibSoc - Группы", :title => "LibSoc - Группы",
:description => "" :description => ""
),
"fr" => Dict(
:title => "LibSoc - Groupes",
:description => ""
),
"ee" => Dict(
:title => "LibSoc - Grupid",
:description => ""
) )
) )
@ -240,7 +232,6 @@ function approve_request()
update_table("groups_requests",Dict("status" => 1), where_data=["group_id" => group_id, "user_id" => data["user_id"]]) update_table("groups_requests",Dict("status" => 1), where_data=["group_id" => group_id, "user_id" => data["user_id"]])
dict_users_groups = Dict("user_id" => data["user_id"], "group_id" => group_id) dict_users_groups = Dict("user_id" => data["user_id"], "group_id" => group_id)
insert_into_table("users_groups",dict_users_groups) insert_into_table("users_groups",dict_users_groups)
compile("groups")
return nothing return nothing
end end
@ -253,35 +244,18 @@ function reject_request()
return nothing return nothing
end end
function changeMemberCount() function add_verified_groups()
user_id = get_authentication() groups_create_requests_verified = select_from_table("groups_requests" => ["*"], where_data = ["group_id" => nothing, "status" => 1])
groups_ids = select_from_table("users_groups" => ["group_id"], where_data = ["user_id" => user_id])[:,1] data = Dict(zip(names(groups_create_requests_verified),groups_create_requests_verified[end,:]))
group_id = isempty(groups_ids) ? nothing : groups_ids[1] user_id = data["user_id"]
data = copy(jsonpayload()) delete!(data,"group_id")
update_table("groups",data, where_data=["id" => group_id]) delete!(data,"user_id")
compile("groups") delete!(data,"id")
delete!(data,"status")
group_id = insert_into_table("groups",data, "RETURNING id")[1,1]
dict_users_groups = Dict("user_id" => user_id, "group_id" => group_id)
insert_into_table("users_groups",dict_users_groups)
delete_from_table("groups_requests",["user_id" => user_id])
end end
function change_group()
user_id = get_authentication()
groups_ids = select_from_table("users_groups" => ["group_id"], where_data = ["user_id" => user_id])[:,1]
group_id = isempty(groups_ids) ? nothing : groups_ids[1]
if !isnothing(group_id)
data = copy(jsonpayload())
data_new = Dict()
ks = keys(data)
for x in ["members","contact"]
if x in ks
data_new[x] = data[x]
end
end
if !isempty(data_new)
update_table("groups",data_new, where_data=["id" => group_id])
compile("groups")
end
end
return nothing
end
end end

View File

@ -21,14 +21,6 @@ const parties_info = Dict(
"ru" => Dict( "ru" => Dict(
:title => "LibSoc - Партии", :title => "LibSoc - Партии",
:description => "" :description => ""
),
"fr" => Dict(
:title => "LibSoc - Partis",
:description => ""
),
"ee" => Dict(
:title => "LibSoc - Parteid",
:description => ""
) )
) )

View File

@ -21,14 +21,6 @@ const partners_info = Dict(
"ru" => Dict( "ru" => Dict(
:title => "LibSoc - Партнеры", :title => "LibSoc - Партнеры",
:description => "" :description => ""
),
"fr" => Dict(
:title => "LibSoc - Partenaires",
:description => ""
),
"ee" => Dict(
:title => "LibSoc - Partners",
:description => ""
) )
) )

View File

@ -1,287 +0,0 @@
module TradeUnionsController
using Genie, Genie.Renderer, Genie.Renderer.Html, Genie.Requests, GenieAuthentication, DataFrames
using JSON3
using SearchLight,SearchLightPostgreSQL, LibPQ, JSON3
using Server.DatabaseSupport, Server.TemplateEditor, Server.Users
import Server.DatabaseSupport: select_from_table, insert_into_table, delete_from_table, exist_in_table
controller = "trade_unions"
dict_layouts = Dict(
:trade_unions => generate_layout_html("main",controller,"trade_unions",libraries=["Leaflet"]),
:trade_unions_add => generate_layout_html("main",controller,"trade_unions_add",libraries=["Leaflet"]),
)
#---Page info-----------------------------------------------------
const trade_unions_info = Dict(
"en" => Dict(
:title => "LibSoc - Trade Unions",
:description => ""
),
"ru" => Dict(
:title => "LibSoc - Профсоюзы",
:description => ""
),
"fr" => Dict(
:title => "LibSoc - Syndicats",
:description => ""
),
"ee" => Dict(
:title => "LibSoc - Ametiühingud",
:description => ""
)
)
function get_locale()
data = payload()
if :locale in keys(data)
return data[:locale]
else
return "en"
end
end
#---Helpers-----------------------------------------------------------
function table_to_json(name,df)
ar = []
for df_row in eachrow(df)
dict = Dict()
for id in names(df_row)
dict[id] = df_row[id]
end
push!(ar,dict)
end
open("public/assets/"*name*".json", "w") do io
JSON3.write(io, ar)
end
end
function compile(name)
df = select_from_table([name => ["*"]])
table_to_json(name,df)
end
function move_requests(name)
df_requests = select_from_table(["$(name)_requests" => ["*"]], where_data=["verified" => true, "added" => false])
df = select_from_table([name => ["*"]])
latitudes = df.latitude
longitudes = df.longitude
for df_row in eachrow(df_requests)
ind_id_given = ismissing(df_row.id_given) ? nothing : findfirst(df_row.id_given.==df.id)
if (!isnothing(ind_id_given))
id = df[ind_id_given,:id]
row_found = df[ind_id_given,Not(:id)]
dict = Dict(zip(names(row_found),values(row_found)))
dict["members"] += 1
update_table(name,dict, where_data=["id" => id])
else
id = df_row.id
dict_update = Dict("added" => true)
update_table("$(name)_requests",dict_update, where_data=["id" => id])
df_row_to_add = df_row[Not(:id_given)]
df_row_to_add = df_row_to_add[Not(:verified)]
df_row_to_add = df_row_to_add[Not(:added)]
df_row_to_add = df_row_to_add[Not(:id)]
dict = Dict(zip(names(df_row_to_add),values(df_row_to_add)))
dict["members"] = 1
insert_into_table(name,dict)
end
end
end
#---Functions---------------------------------------------------------
current_user() = findone(Users.User, id = get_authentication())
function trade_unions()
locale = get_locale()
html(:trade_unions,:trade_unions, layout = dict_layouts[:trade_unions], context = @__MODULE__,
title = trade_unions_info[locale][:title],
description = trade_unions_info[locale][:description]
)
end
function trade_unions_add()
locale = get_locale()
html(:trade_unions,:trade_unions_add, layout = dict_layouts[:trade_unions_add], context = @__MODULE__,
title = trade_unions_info[locale][:title],
description = trade_unions_info[locale][:description]
)
end
function trade_unions_add_post()
data = copy(jsonpayload())
mode = data["mode"]
delete!(data,"mode")
user = current_user()
user_id = user.id
if mode==0 # Create
if user.verified
existing_user_group_data = select_from_table(["users_trade_unions" => ["*"]], where_data=["user_id" => user_id])
has_group = !isempty(existing_user_group_data)
delete!(data,"group_id")
group_id = insert_into_table("trade_unions",data, "RETURNING id")[1,1]
if has_group
user_trade_unions_id = existing_user_group_data[1,"id"]
prev_group_id = existing_user_group_data[1,"group_id"]
update_table("users_trade_unions",Dict("group_id" => group_id), where_data=["id" => user_trade_unions_id])
members = select_from_table(["trade_unions" => ["members"]], where_data=["id" => prev_group_id])[1,1]
if (members==1)
delete_from_table("trade_unions",["id" => prev_group_id])
else
update_table("trade_unions",Dict("members" => members - 1), where_data=["id" => id])
end
else
dict_users_trade_unions = Dict("user_id" => user.id, "group_id" => group_id)
insert_into_table("users_trade_unions",dict_users_trade_unions)
end
compile("trade_unions")
else
data["status"] = 0
data["user_id"] = user_id
insert_into_table("trade_unions_requests",data)
end
elseif mode==1 # Join
data["user_id"] = user_id
if exist_in_table("users_trade_unions",["group_id" => data["group_id"]])
if exist_in_table("trade_unions_requests",["user_id" => user_id])
delete_from_table("trade_unions_requests",["user_id" => user_id])
end
data["status"] = 0
insert_into_table("trade_unions_requests",data)
else
group_id = data["group_id"]
members = select_from_table("trade_unions" => ["members"], where_data = ["id" => group_id])[1,1]
dict = Dict("members" => members + 1)
update_table("trade_unions",dict, where_data=["id" => group_id])
dict_users_trade_unions = Dict("user_id" => user_id, "group_id" => group_id)
insert_into_table("users_trade_unions",dict_users_trade_unions)
end
elseif mode==2 # Move
existing_user_group_data = select_from_table(["users_trade_unions" => ["*"]], where_data=["user_id" => user_id])
group_id = existing_user_group_data[1,"group_id"]
delete!(data,"group_id")
delete!(data,"members")
delete!(data,"contact")
update_table("trade_unions",data, where_data=["id" => group_id])
compile("trade_unions")
elseif mode==3 # Leave
existing_user_group_data = select_from_table(["users_trade_unions" => ["*"]], where_data=["user_id" => user_id])
if size(existing_user_group_data,1)==0
if exist_in_table("trade_unions_requests",["user_id" => user_id])
delete_from_table("trade_unions_requests",["user_id" => user_id])
end
else
delete_from_table("users_trade_unions",["user_id" => user_id])
end
end
return nothing
end
function get_user_trade_unions()
local data_dicts
user_id = get_authentication()
trade_unions_ids = select_from_table("users_trade_unions" => ["group_id"], where_data = ["user_id" => user_id])[:,1]
group_id = isempty(trade_unions_ids) ? nothing : trade_unions_ids[1]
data_dicts = []
if isnothing(group_id)
local data
data = select_from_table("trade_unions_requests" => ["*"], where_data = ["user_id" => user_id,"status" => 0])
if size(data,1)==0
data = select_from_table("trade_unions_requests" => ["*"], where_data = ["user_id" => user_id,"status" => 2])
if size(data,1)!=0
data = data[[end],:]
end
end
for row in eachrow(data)
dict = Dict(zip(names(row),values(row)))
if (!ismissing(row["group_id"]))
extra_data = select_from_table("trade_unions" => ["*"], where_data = ["id" => row["group_id"]])
merge!(dict, Dict(zip(names(extra_data[1,:]),values(extra_data[1,:]))))
end
push!(data_dicts, dict)
end
else
group_data = select_from_table("trade_unions" => ["*"], where_data = ["id" => group_id])
ns = names(group_data)
data_dicts = map(x -> Dict(zip(ns,values(x))),eachrow(group_data))
end
return JSON3.write(data_dicts)
end
function get_group_requests()
user_id = get_authentication()
trade_unions_ids = select_from_table("users_trade_unions" => ["group_id"], where_data = ["user_id" => user_id])[:,1]
group_id = isempty(trade_unions_ids) ? nothing : trade_unions_ids[1]
data_dicts = []
if !isnothing(group_id)
user_ids = select_from_table("trade_unions_requests" => ["user_id"], where_data = ["group_id" => group_id, "status" => 0])[:,1]
for user2_id in user_ids
email = select_from_table("users" => ["email"], where_data = ["id" => user2_id])[1,1]
push!(data_dicts,Dict("email" => email, "user_id" => user2_id))
end
end
return JSON3.write(data_dicts)
end
function approve_request()
data = copy(jsonpayload())
user_id = get_authentication()
trade_unions_ids = select_from_table("users_trade_unions" => ["group_id"], where_data = ["user_id" => user_id])[:,1]
group_id = isempty(trade_unions_ids) ? nothing : trade_unions_ids[1]
members = select_from_table("trade_unions" => ["members"], where_data = ["id" => group_id])[1,1]
dict = Dict("members" => members + 1)
update_table("trade_unions",dict, where_data=["id" => group_id])
update_table("trade_unions_requests",Dict("status" => 1), where_data=["group_id" => group_id, "user_id" => data["user_id"]])
dict_users_trade_unions = Dict("user_id" => data["user_id"], "group_id" => group_id)
insert_into_table("users_trade_unions",dict_users_trade_unions)
compile("trade_unions")
return nothing
end
function reject_request()
data = copy(jsonpayload())
user_id = get_authentication()
trade_unions_ids = select_from_table("users_trade_unions" => ["group_id"], where_data = ["user_id" => user_id])[:,1]
group_id = isempty(trade_unions_ids) ? nothing : trade_unions_ids[1]
update_table("trade_unions_requests",Dict("status" => 2), where_data=["group_id" => group_id, "user_id" => data["user_id"]])
return nothing
end
function changeMemberCount()
user_id = get_authentication()
trade_unions_ids = select_from_table("users_trade_unions" => ["group_id"], where_data = ["user_id" => user_id])[:,1]
group_id = isempty(trade_unions_ids) ? nothing : trade_unions_ids[1]
data = copy(jsonpayload())
update_table("trade_unions",data, where_data=["id" => group_id])
compile("trade_unions")
end
function change_group()
user_id = get_authentication()
trade_unions_ids = select_from_table("users_trade_unions" => ["group_id"], where_data = ["user_id" => user_id])[:,1]
group_id = isempty(trade_unions_ids) ? nothing : trade_unions_ids[1]
if !isnothing(group_id)
data = copy(jsonpayload())
data_new = Dict()
ks = keys(data)
for x in ["members","contact"]
if x in ks
data_new[x] = data[x]
end
end
if !isempty(data_new)
update_table("trade_unions",data_new, where_data=["id" => group_id])
compile("trade_unions")
end
end
return nothing
end
end

View File

@ -1 +0,0 @@
<trade-unions-component></trade-unions-component>

View File

@ -1 +0,0 @@
<trade-unions-add-component></trade-unions-add-component>

View File

@ -60,11 +60,9 @@ body {
font-style: normal; font-style: normal;
font-display: swap; font-display: swap;
src: src:
url('/fonts/LoraSerif/Lora-Regular.woff2') format('woff'), url('/fonts/LoraSerif/Lora-Regular.ttf') format('ttf'),
url('/fonts/LoraSerif/Lora-Regular.woff') format('woff'), url('/fonts/LoraSerif/Lora-Regular.woff') format('woff'),
url('/fonts/LoraSerif/Lora-Regular.ttf') format('ttf'); url('/fonts/LoraSerif/Lora-Regular.woff2') format('woff');
} }
.serif { .serif {
@ -274,11 +272,6 @@ a:focus { text-decoration: none; }
line-height: 140%; line-height: 140%;
} }
font {
font-size: inherit;
font-family: inherit;
}
/*---Button/input related--------------------------------------------------------------*/ /*---Button/input related--------------------------------------------------------------*/
button { button {

View File

@ -214,15 +214,15 @@
*/ */
/* Responsiveness */ /* Responsiveness */
@media only screen and (min-width: 1250px) { @media only screen and (min-width: 1200px) {
#navbar { #navbar {
position: relative; position: relative;
width: min(100%,116rem); width: min(100%,116rem);
left: 50%; left: 50%;
transform: translateX(-50%); transform: translateX(-50%);
padding-right: 0rem; padding-right: 4rem;
padding-left: 0rem; padding-left: 4rem;
} }
#nav { #nav {

View File

@ -1,4 +1,4 @@
let contactGeneral = "https://discord.gg/Qk8KUk787z" let contactGeneral =["https://discord.gg/4BUau4AZre","DiscordInviteLink"]
export function translate(content, x) { export function translate(content, x) {
let out = content[x] let out = content[x]

View File

@ -13,9 +13,9 @@ export function debounce(func, timeout){
} }
export function svgFromObject(object) { export function svgFromObject(object) {
var objectDoc = object.contentDocument var objectDoc = object.contentDocument;
var svgItems = objectDoc.querySelectorAll("path") var svgItem = objectDoc.querySelector("path");
return svgItems return svgItem
} }
export function rem2px(rem) { export function rem2px(rem) {
@ -85,8 +85,8 @@ export function validateAge(event,input,callback) {
} }
} }
export function validatePosNumber(event,input,max) { export function validatePosNumber(event,input,callback,max) {
event.preventDefault() event.returnValue = false
var key var key
if (event.type === 'paste') { if (event.type === 'paste') {
key = event.clipboardData.getData('text/plain'); key = event.clipboardData.getData('text/plain');
@ -101,9 +101,12 @@ export function validatePosNumber(event,input,max) {
if (val>max) { if (val>max) {
input.value = max input.value = max
} }
if (callback!=undefined) {
callback(input.value)
}
} }
else { else {
input.value = "" callback(input.value)
} }
} }

View File

@ -72,10 +72,7 @@ function onlyUnique(value, index, array) {
export let locales = { export let locales = {
en: "English", en: "English",
fr: "Français", ru: "Русский"
ee: "Eesti",
ru: "Русский",
} }
export function loadLocaleContent(content,componentName,loaded,callback) { export function loadLocaleContent(content,componentName,loaded,callback) {

View File

@ -6,15 +6,7 @@ export function addGroupPinContent(g,content,locale) {
for (let field of ["location","members","contact"]) { for (let field of ["location","members","contact"]) {
let fieldText = content[field] + ": " let fieldText = content[field] + ": "
if (field=="contact") { if (field=="contact") {
if (g.contact.includes("@") && g.contact.trim().split(" ").length==1) { text += fieldText + "<a href='" + g.contact + "' target='_blank' rel=noreferrer>" + g.contact + "</a>"
text += fieldText + "<a href='mailto:" + g.contact + "' target='_blank' rel=noreferrer>" + g.contact + "</a>"
}
else if (g.contact.includes("http")) {
text += fieldText + "<a href='" + g.contact + "' target='_blank' rel=noreferrer>" + g.contact + "</a>"
}
else {
text += fieldText + g.contact + "<br>"
}
} }
else if (field=="location") { else if (field=="location") {
let location = [g.country,g.state,g.town].filter(x => x!=null && x!=undefined) let location = [g.country,g.state,g.town].filter(x => x!=null && x!=undefined)
@ -183,31 +175,4 @@ export function addPartnersPinContent(g,content,locale) {
} }
} }
return {text,coordinates} return {text,coordinates}
}
export function addTradeUnionPinContent(g,content,locale) {
let coordinates
let text = "<b>"+content["TradeUnion"]+"</b><br>"
for (let field of ["name","location","members","contact"]) {
let fieldText = content[field] + ": "
if (field=="contact") {
text += fieldText + "<a href='" + g.contact + "' target='_blank' rel=noreferrer>" + g.contact + "</a>"
}
else if (field=="location") {
let location = [g.country,g.state,g.town].filter(x => x!=null && x!=undefined)
let locationString
if (locale=="en") {
locationString = location.map(x => x).join(", ")
}
else {
locationString = location.map(x => translate(content, x)).join(", ")
}
text += fieldText + locationString + "<br>"
coordinates = [g.latitude,g.longitude]
}
else {
text += fieldText + g[field] + "<br>"
}
}
return {text,coordinates}
} }

View File

@ -1,15 +0,0 @@
{
"communes": "Kommuunid",
"p1": "Me loome libertaarsotsialistlikke kommuune ostes maad, elamispinda ja tootmisvahendeid, mida kommuunide liikmed omama hakkavad. Nendes kommuunides puudub eraomand ja seega ka sellega kaasnev ärakasutamine ning kannatused. Otsused langetatakse demokraatlikult ja konsensuslikkust silmas pidades, mis tagab igale kommuuni liikmele võimaluse end mõjutavates otsustes kaasa rääkida. Kommuunid proovivad oma tegevuse rahastamiseks, püsivuse tagamiseks ja kasvamiseks, luua kooperatiive. Kommuunides proovitakse võimalikult palju kasutada kingimajandust. Iga kommuun on väike sotsialismimajakas pimedas kapitalistlikus maailmas, mis näitab meile, kui ilus elu võib olla, kui me oma eesmärgi saavutame.",
"subheading1": "Meie kommuunid",
"subheading2": "Euroopa",
"location": "Asukoht",
"status": "Hetkeolukord",
"members": "Liikmed",
"contact": "Kontakt",
"forming": "loomisel",
"WhatsAppInviteLink": "WhatsAppi link",
"DiscordInviteLink": "Discordi link",
"Commune": "Kommuun",
"map-prompt": "Tahad, et sind oleks kaardil näha? Võta meiega ühendust!"
}

View File

@ -1,16 +0,0 @@
{
"heading": "Kogukonnad",
"p1": "Me loome libertaarsotsialistlikke kogukondi ostes maad, elamispinda ja tootmisvahendeid, mida kogukonna liikmed omama hakkavad. Nendes kogukondades puudub eraomand ja seega ka sellega kaasnev ärakasutamine ning kannatused. Otsused langetatakse demokraatlikult ja konsensuslikkust silmas pidades, mis tagab igale kogukonna liikmele võimaluse end mõjutavates otsustes kaasa rääkida. Kogukonnad proovivad oma tegevuse rahastamiseks, püsivuse tagamiseks ja kasvamiseks, luua kooperatiive. Kogukondades proovitakse võimalikult palju kasutada kingimajandust. Iga kogukond on väike sotsialismimajakas pimedas kapitalistlikus maailmas, mis näitab meile, kui ilus elu võib olla, kui me oma eesmärgi saavutame.",
"subheading1": "Meie kogukonnad",
"subheading2": "Euroopa",
"location": "Asukoht",
"status": "Hetkeolukord",
"members": "Liikmed",
"contact": "Kontakt",
"EstoniaKohtlaJarve": "Eesti, Kohtla-Järve",
"forming": "loomisel",
"WhatsAppInviteLink": "WhatsAppi link",
"DiscordInviteLink": "Discordi link",
"CanadaMontreal": "Kanada, Montreal",
"Latvia": "Läti"
}

View File

@ -1,120 +0,0 @@
{
"heading": "Poliitiline kompass",
"qs": [
{
"q": "Tootmist peaks juhtima ...",
"as": [
["üksikisikute ettevõtlikkus ja vara",["C"]],
["juhtide määratud juhised ja plaanid",["V"]],
["ühiselt langetatud otsused ja kokkulepped",["LS"]]
]
},
{
"q": "Õigus langetada töökohas otsuseid peaks olema ...",
"as": [
["töökoha omanikel, kelle käes on vara ja poliitiline võim",["C"]],
["neil, kes seal töötavad",["LS"]]
]
},
{
"q": "Tööjaotus peaks põhinema ...",
"as": [
["tööturu pakutavatel võimalustel ja varalisel rikkusel",["C"]],
["juhtide määratud juhstel ja ülesannetel",["V"]],
["ühisel planeerimisel ja õiglasel sotsiaalsetest vajadustest tuleneval jaotusel",["LS"]]
]
},
{
"q": "Tootmisvahendeid peaksid omama ja juhtima ...",
"as": [
["jõukad isikud",["C"]],
["need, kes juhivad riiki",["V"]],
["kogukond tervikuna",["LS"]]
]
},
{
"q": "Tootmisel tuleks lähtuda eelkõige ...",
"as": [
["kulutõhususest",["C"]],
["sellest, mida juhid ütlevad",["V"]],
["vajadustest ja jätkusuutlikkusest",["LS"]]
]
},
{
"q": "Lõputu tootmise suurendamine viib ...",
"as": [
["kõigi heade asjadeni",["C","V"]],
["meie planeedi hävinguni",["LS"]]
]
},
{
"q": "Toodete jaotamisel tuleks lähtuda ...",
"as": [
["jõukusest",["C"]],
["juhtide otsustest",["V"]],
["ühistest kokkulepetest",["LS"]]
]
},
{
"q": "Sotsiaalsed turvavõrgud peaksid olema ...",
"as": [
["minimeeritud, et õhutada isiklikku vastutust ja toimetulekut",["C"]],
["juhtide kontrollitud ja nende poolt määratud",["V"]],
["laiaulatuslikud ja kollektiivsel kohustusel põhinevad",["LS"]]
]
},
{
"q": "Ligipääs haridusele peaks ...",
"as": [
["olenema rahalisest seisust",["C"]],
["olema ühiskondlike väärtuste kujundamiseks kontrollitud ja korraldatud juhtide poolt",["V"]],
["olema universaalne õigus",["LS"]]
]
},
{
"q": "Suurem osa inimkonnast on ...",
"as": [
["võimetud langetama häid otsuseid ja neid peab juhtima kui lambaid",["C","V"]],
["võimelised vaba ja iseseisvana häid otsuseid langetama",["LS"]]
]
},
{
"q": "Võim rikub ...",
"as": [
["mõnikord, mistõttu on meil vaja mitut gruppi, kes vahetevahel olenevalt oma oskusest reklaamikampaaniat korraldada omavahel võimu vahetavad",["C"]],
["kõiki peale meie armastatud juhtide",["V"]],
["kõiki",["LS"]]
]
},
{
"q": "Otsused peaksid põhinema ...",
"as": [
["sellel, mida võimu olijad ütlevad",["C","V"]],
["ühistel kokkulepetel",["LS"]]
]
},
{
"q": "Vägivald on ...",
"as": [
["õigustatud vahend võimu säilitamiseks",["C","V"]],
["lubamatu",["LS"]]
]
},
{
"q": "Teaduslikku ja tehnoloogilist arengut peaksid suunama ...",
"as": [
["konkurents turul ja isiklikud ajendid",["C"]],
["võimul olijate seatud eesmärgid",["V"]],
["ühised teadmised ja uuringud",["LS"]]
]
},
{
"q": "Intellektuaalse omandi õigused peaksid kuuluma ...",
"as": [
["üksikutele leiutajatele või nende töötajatele",["C"]],
["Juhtidele, kes intellektuaalset omandit kontrollivad ja jaotavad",["V"]],
["kogukonnale ühiseks kasutamiseks",["LS"]]
]
}
]
}

View File

@ -1,24 +0,0 @@
{
"cooperatives": "Kooperatiivid",
"p1": "Me loome kooperatiive, kus töötajad omavad ja juhivad äritegevust. Igal töötajal on õigus otsuste tegemisel kaasa rääkida ning kasum jagatakse individuaalse pingutuse alusel. Selline ülesehitus soosib omanikutunnet, motiveeritust ja rahulolu tööga, loob täisväärtuslikuma töökogemuse ja takistab kapitalistlikule struktuurile omast jõukuse koondumist. Töötajate vajadustele keskendudes loovad meie kooperatiivid toetavad ja jätkusuutlikud töökeskkonnad, kus on soositud sotsiaalne sidusus ja kindlustunne. Me keskendume ka kohaliku kogukonna huvidele ja mõtleme tulevikule pikas plaanis.",
"subheading1": "Meie kooperatiivid",
"subheading2": "Euroopa",
"name": "Nimi",
"location": "Asukoht",
"market": "Tegevusala",
"status": "Hetkeolukord",
"workers": "Töötajad",
"contact": "Kontakt",
"description": "Kirjeldus",
"website": "Veebilehekülg",
"wellnessAndHealth": "heaolu ja tervis",
"inDevelopment": "arendamisel",
"WhatsAppInviteLink": "WhatsAppi link",
"DiscordInviteLink": "Discord link",
"descriptionChironHealth": "Chiron Health on terviseprogramm, mis pakub toitumise, liikumise, une ja vaimse tervise alaseid kursuseid ja teenuseid.",
"herbalTeas": "taimeteed",
"kuuskDescription": "Kuusk on internetipood, mis müüb kohalikest metsikutest taimedest valmistatud taimeteid ja pakub ka veebipõhist koriluskursust.",
"Cooperative": "Kooperatiiv",
"map-prompt": "Tahad, et sind oleks kaardil näha? Võta meiega ühendust!"
}

View File

@ -1,3 +0,0 @@
{
}

View File

@ -1,5 +0,0 @@
{
"contactUs": "Võta meiega ühendust",
"inviteLink": "link liitumiseks",
"libertarianSocialists": "Libertaarsotsialistid"
}

View File

@ -1,13 +0,0 @@
{
"groups": "Grupid",
"p1": "Me tahame tõsta teadlikkust praeguste poliitilis-majanduslike süsteemide kajulikkusest kõigi heaolule. Me tegeleme vastastikuse abiga ja korraldame ühiseid aktsioone, et tegeleda vahetult kapitalistlikus süsteemis tekkivate probleemidega. Vastastikuse abi raames toetame me üksteist jagades ressursse, teadmisi ja oskuseid, kasvatame solidaarsust ja vastupidavust. Olgu selleks kogukondlikud peenrad, toidukooperatiivid või toetusvõrgustikud, meie eesmärk on muuta elu kapitalismi keskel talutavamaks ning luua süsteemi sisse vastupanu ja alternatiivsete võimaluste mulle.",
"subheading1": "Meie grupid",
"subheading2": "Euroopa",
"location": "Asukoht",
"members": "Liikmed",
"contact": "Kontakt",
"DiscordInviteLink": "Discordi link",
"WhatsAppInviteLink": "WhatsAppi link",
"Group": "Grupp",
"map-prompt": "Tahad, et sind oleks kaardil näha? Loo kasutaja ja mine oma profiilile!"
}

View File

@ -1,35 +0,0 @@
{
"heading": "Liitu meiega",
"condition1": "Kas oled vastu diktatuurile ja pooldad demokraatiat?",
"condition2": "Kas oled vastu inimeste omavahelisele ärakasutamisele?",
"condition3": "Kas nõustud, et me peaks töötama üksteisega koos, mitte üksteise vastu?",
"conditionsOutcome": "Kui vastus on <b>JAH</b>, siis oled juba libertaarsotsialist. <b>LIITU MEIEGA!</b>",
"subheading1": "Mida sa saad?",
"valueProposition1": "Kogukonna, mis on valmis sind mistahes murede korral aitama;",
"valueProposition2": "Ligipääsu meie kooperatiivide tootmisvahenditele;",
"valueProposition3": "Tooteid ja teenuseid omahinnaga või isegi tasuta;",
"valueProposition4": "Rahalist ja mitterahalist abi oma kooperatiivi ülesseadmisel;",
"valueProposition5": "ja veel palju enamat!",
"subheading2": "Leia meid",
"findOur": "Leia meie",
"group": "grupp",
"commune": "kommuun",
"party": "partei",
"or": "või",
"cooperative": "kooperatiiv",
"nearYou": "enda lähedal ning aita meie kõigi kujutletud maailm tõeks teha.",
"noneNear": "Ükski neist ei asu sinu lähedal? Pole probleemi! Liitu meie",
"WhatsAppGroup": "WhatsAppi grupiga",
"DiscordServer": "Discordi serveriga",
"helpStart": " ja me aitame sul need luua.",
"location": "Asukoht",
"members": "Liikmed",
"contact": "Kontakt",
"status": "Hetkeolukord",
"name": "Nimi",
"market": "tegevusala",
"workers": "Töötajad",
"description": "Kirjeldus",
"website": "Veebilehekülg",
"map-prompt": "Tahad, et sind oleks kaardil näha? Loo kasutaja ja mine oma profiilile!"
}

View File

@ -1,17 +0,0 @@
{
"top": "Meie organisatsioon on vabatahtliku kuuluvuse põhimõtte alusel loodud detsentraliseeritud föderatsioon. See koosneb paljudest inimgruppidest üle maailma, keda liidab tahtmine lammutada ärakasutamist soosivad poliitilis-majanduslikud süsteemid. Me soovime need asendada libertaarsotsialistlike süsteemidega, mille aluseks on detsentraliseeritus, otsedemokraatia ja tootmisvahendite kuulumine töötajatele ning mille eesmärk on õiglase, demokraatliku ja jätkusuutliku maailma loomine ning inimeste ja looduse ärakasutamise lõpetamine.",
"groupsTitle": "GRUPID",
"groupsText": "Me loome hariduse, teadlikkuse, antifašistliku tegevuse ja vastastikuse abi levitamiseks gruppe. Meie eesmärk on näidata, kuidas praegused poliitilis-majanduslikud süsteemid meie heaolu vähendavad, pakkuda välja alternatiivseid viise ja pakkuda vastastikust abi.",
"communesTitle": "KOMMUUNID",
"communesText": "Me loome libertaarsotsialistlikel põhimõtetel tegutsevaid kommuune, mille liikmed omavad ühiselt maad, hooneid ja tootmisvahendeid ning langetavad otsedemokraatiat rakendades otsuseid. Me laiendame oma sotsialistlikku maailma, üks kommuun korraga.",
"cooperativesTitle": "KOOPERATIIVID",
"cooperativesText": "Oma gruppide ja kommuunide finantseerimiseks loome me kooperatiive. Kuna majanduslik võim on tihedalt seotud poliitilise võimuga, peame kooperatiivide loomist väga oluliseks.",
"partiesTitle": "PARTEID",
"partiesText": "Me loome oma tegevust lihtsustavate reformide toetamiseks, Overtoni akna nihutamiseks ja populaarsuse kogumiseks poliitilisi parteisid. Siiski tunnistame, et libertaarsotsialismi pole võimalik saavutada kasutades meie eesmärkidega vastuolus olevaid institutsioone.",
"tradeUnionsTitle": "AMETIÜHINGUD",
"tradeUnionsText": "Me toetame ametiühinguid, mis annavad töötajatele võime ühiselt õiglast kohtlemist ja palka ning paremaid töötingimusi nõuda. Töökohtades peetav võitlus on meie libertaarsotsialisimi saavutamise strateegia oluline osa.",
"findUs": "Leia meid",
"whatNow": "Mis edasi?",
"joinUs": "Liitu meiega",
"talkWithUs": "Räägi meiega"
}

View File

@ -1,3 +0,0 @@
{
"tableOfContents": "SISUKORD"
}

View File

@ -1,14 +0,0 @@
{
"orgName": "Libertaarsotsialistid",
"manifesto": "Manifest",
"joinUs": "Liitu meiega",
"initiatives": "Ettevõtmised",
"groups": "Grupid",
"communes": "Kommuunid",
"cooperatives": "Kooperatiivid",
"parties": "Parteid",
"tradeUnions": "Ametiühingud",
"partners": "Partnerid",
"login": "Logi sisse",
"profile": "Profiil"
}

View File

@ -1,14 +0,0 @@
{
"parties": "Parteid",
"p1": "Me loome oma tegevust lihtsustavate reformide toetamiseks, Overtoni akna nihutamiseks ja populaarsuse kogumiseks poliitilisi parteisid. Siiski tunnistame, et libertaarsotsialismi pole võimalik saavutada kasutades meie eesmärkidega vastuolus olevaid institutsioone. Sellegipoolest tuleb kõiki strateegilisi võimalusi eduks ära kasutada.",
"subheading1": "Meie parteid",
"name": "Nimi",
"location": "Asukoht",
"members": "Liikmed",
"website": "Veebilehekülg",
"contact": "Kontakt",
"description": "Kirjeldus",
"descriptionRoots": "Oleme Iirimaal tegutsev vasaklibertaarne organisatsioon. Keskendume riigi taristu, valitsemistunnetuse, elamispindade, põllumajandustööstuse ja noortetegevuse uuestiehitamisele.",
"Party": "Partei",
"map-prompt": "Tahad, et sind oleks kaardil näha? Võta meiega ühendust!"
}

View File

@ -1,15 +0,0 @@
{
"heading": "Partnerid",
"p1": "Me teeme koostööd oma missiooniga ühilduvate organisatsioonidega. Koos oleme jagatud maailmavaatega jõud, mis saab töötada autoritaarsete ärakasutavate süsteemide vastu ja luua nende asemele õiglust ja demokraatiat.",
"subheading1": "Meie partnerid",
"subheading2": "Veebis",
"name": "Nimi",
"location": "Asukoht",
"website": "Veebilehekülg",
"contact": "Kontakt",
"description": "Kirjeldus",
"typeGaiasFall": "koht aruteludeks",
"descriptionGaiasFall": "Gaia's Fall on 'Solarpunk' ideaale, loodussõbralikkust, anarhismi ja antikapitalismi esindav server. Me julgustame inimesi pidama viisakaid vaidlusi, arutlema teooriate ja võimaluste üle ning looma parema maailma kujundamise eesmärgile pühendatud kommuune.",
"map-prompt": "Tahad, et sind oleks kaardil näha? Võta meiega ühendust!"
}

View File

@ -1,11 +0,0 @@
{
"tradeUnions": "Ametiühingud",
"p1": "Ametiühingud mängivad olulist rolli töötajate õiguste ja heaolu kaitsmisel. Ametiühingud on üks meie organisatsiooni põhilisi komponinte, mis laseb töötajatel ühineda ning õiglase palga, paremate töötingimuste ja õiguste saavutamiseks nõupidamisi pidada. Solidaarsust kasvatades ja ühistele tegudele kutsudes panustavad ametiühingud meie üldisesse eesmärki, milleks on ärakasutavate süsteemide kõrvaldamine ning detsentraliseeritud otsustelangetamise, otsedemokraatia ja töötajate isejuhtimise põhimõtetel toimiva maailma loomine.",
"subheading1": "Meie ametiühingud",
"location": "Asukoht",
"members": "Liikmed",
"contact": "Kontakt",
"TradeUnion": "Ametiühing",
"tradeUnion": "ametiühing",
"map-prompt": "Tahad, et sind oleks kaardil näha? Võta meiega ühendust!"
}

View File

@ -9,5 +9,5 @@
"DiscordInviteLink": "Discord invite link", "DiscordInviteLink": "Discord invite link",
"WhatsAppInviteLink": "WhatsApp invite link", "WhatsAppInviteLink": "WhatsApp invite link",
"Group": "Group", "Group": "Group",
"map-prompt": "Want to appear on our map? Sign up and go to your profile!" "map-prompt": "Want to appear on our map? Contact us!"
} }

View File

@ -30,6 +30,5 @@
"market": "Market", "market": "Market",
"workers": "Workers", "workers": "Workers",
"description": "Description", "description": "Description",
"website": "Website", "website": "Website"
"map-prompt": "Want to appear on our map? Sign up and go to your profile!"
} }

View File

@ -1,15 +1,13 @@
{ {
"top": "Our organization is a decentralized federation build upon the principle of free association. It consists of many groups of people united around a cause of bringing down exploitative politico-economic systems. We aim to replace them with libertarian socialist systems based on decentralization, direct democracy and worker-ownership of the means of production with the goal of creating an equitable, democratic and sustainable world by stopping exploitation of humans and nature.", "top": "Our organization is a decentralized federation build upon the principle of free association. It consists of many groups of people united around a cause of bringing down exploitative politico-economic systems. We aim to replace them with libertarian socialist systems based on decentralization, direct democracy and worker-ownership of the means of production with the goal of creating an equitable, democratic and sustainable world by stopping exploitation of humans and nature.",
"groupsTitle": "GROUPS", "groupsTitle": "GROUPS",
"groupsText": "We organize groups for the purposes of education, advocacy, anti-fascist action and mutual aid. Our objective is to demonstrate how the current politico-economic systems detrimentally impact our well-being, present alternative approaches, and engage in mutual aid.", "groupsText": "We organize groups for the purposes of education, advocacy, and mutual aid. Our objective is to demonstrate how the current politico-economic systems detrimentally impact our well-being, present alternative approaches, and engage in mutual aid to alleviate the challenges of living under capitalism.",
"communesTitle": "COMMUNES", "communesTitle": "COMMUNES",
"communesText": "We establish communes based on libertarian socialist principles, where commune members have ownership over land, houses, and the means of production as well as make decisions using direct democracy. We are gradually expanding our socialist world, one commune at a time.", "communesText": "We establish communes based on libertarian socialist principles, where commune members have ownership over land, houses, and the means of production as well as make decisions using direct democracy. We are gradually expanding our socialist world, one commune at a time.",
"cooperativesTitle": "COOPERATIVES", "cooperativesTitle": "COOPERATIVES",
"cooperativesText": "We form worker cooperatives to finance the operations of our groups and communes. Recognizing that economic power influences political power, we consider the establishment of cooperatives to be a vital activity.", "cooperativesText": "We form worker cooperatives to finance the operations of our groups and communes. Recognizing that economic power influences political power, we consider the establishment of cooperatives to be one of the initial steps towards achieving socialism.",
"partiesTitle": "PARTIES", "partiesTitle": "PARTIES",
"partiesText": "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.", "partiesText": "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.",
"tradeUnionsTitle": "TRADE UNIONS",
"tradeUnionsText": "We promote trade unions, which empower laborers to collectively advocate for fair treatment, just wages, and improved working conditions. Struggle at a place of work is an integral part of our strategy to achieve libertarian socialism.",
"findUs": "Find Us", "findUs": "Find Us",
"whatNow": "What Now?", "whatNow": "What Now?",
"joinUs": "Join Us", "joinUs": "Join Us",

View File

@ -7,7 +7,6 @@
"communes": "Communes", "communes": "Communes",
"cooperatives": "Cooperatives", "cooperatives": "Cooperatives",
"parties": "Parties", "parties": "Parties",
"tradeUnions": "Trade Unions",
"partners": "Partners", "partners": "Partners",
"login": "Login", "login": "Login",
"profile": "Profile" "profile": "Profile"

View File

@ -1,11 +0,0 @@
{
"tradeUnions": "Trade Unions",
"p1": "Trade unions play a pivotal role in safeguarding the rights and welfare of workers. Trade unions constitute an integral part of our organization, allowing workers to unite and collectively negotiate for fair wages, better working conditions, and improved labour rights. By fostering solidarity and mobilizing for collective action, trade unions contribute to our overarching mission of dismantling exploitative systems and ushering in a world centered on decentralized decision-making, direct democracy, and worker self-management.",
"subheading1": "Our Trade Unions",
"location": "Location",
"members": "Members",
"contact": "Contact",
"TradeUnion": "Trade union",
"tradeUnion": "trade union",
"map-prompt": "Want to appear on our map? Contact us!"
}

View File

@ -1,15 +0,0 @@
{
"communes": "Communes",
"p1": "Nous établissons des communes socialistes libertaires en aquérant des terres, des logements et les moyens de production qui sont par la suite détenus par les membres desdites communes. Il n'y a pas de propriété privée au sein des communes et, par conséquent, pas non plus ni l'exploitation ni la souffrance qui viennent avec. Les décisions sont prises au moyen de la démocratie directe avec une emphase sur le consensus, afin de s'assurer que chaque membre de la commune ait prise sur les décisions qui affectent sa vie. Les communes s'efforcent d'établir leurs propres coopératives afin de financer leur développement et de devenir économiquement indépendantes et durables, permettant ainsi leur survie et leur croissance. Au sein des communes, on se doit de recourir à l'économie de don aussi souvent que possible. Chaque commune est une petite lueur d'espoir socialiste qui transperce la pénombre du monde capitaliste et qui nous montre à quel point la vie pourrait être belle si nous parvenions à atteindre notre but.",
"subheading1": "Nos Communes",
"subheading2": "Europe",
"location": "Localisation",
"status": "Statut ",
"members": "Membres ",
"contact": "Contact ",
"forming": "en formation",
"WhatsAppInviteLink": "Lien d'invitation WhatsApp ",
"DiscordInviteLink": "Lien d'invitation Discord ",
"Commune": "Commune",
"map-prompt": "Vous voulez figurer sur notre carte ? Contactez-nous !"
}

View File

@ -1,16 +0,0 @@
{
"heading": "Communautés",
"p1": "Nous établissons des communautés socialistes libertaires en aquérant des terres, des logements et les moyens de production qui sont par la suite détenus par les membres desdites communautés. Il n'y a pas de propriété privée au sein des communautés et, par conséquent, pas non plus ni l'exploitation ni la souffrance qui viennent avec. Les décisions sont prises au moyen de la démocratie directe avec une emphase sur le consensus, afin de s'assurer que chaque membre de la commune ait prise sur les décisions qui affectent sa vie. Les communautés s'efforcent d'établir leurs propres coopératives afin de financer leur développement et de devenir économiquement indépendantes et durables, permettant ainsi leur survie et leur croissance. Au sein des communautés, on se doit de recourir à l'économie de don aussi souvent que possible. Chaque communauté est une petite lueur d'espoir socialiste qui transperce la pénombre du monde capitaliste et qui nous montre à quel point la vie pourrait être belle si nous parvenions à atteindre notre but.",
"subheading1": "Nos Communautés",
"subheading2": "Europe",
"location": "Localisation ",
"status": "Statut ",
"members": "Membres ",
"contact": "Contact ",
"EstoniaKohtlaJarve": "Estonie, Kohtla-Järve",
"forming": "en formation",
"WhatsAppInviteLink": "Lien d'invitation WhatsApp ",
"DiscordInviteLink": "Lien d'invitation Discord ",
"CanadaMontreal": "Canada, Montréal",
"Latvia": "Lettonie"
}

View File

@ -1,120 +0,0 @@
{
"heading": "Boussole politique",
"qs": [
{
"q": "La production devrait être régie par... ",
"as": [
["l'intiative entrepreneuriale et la richesse individuelles",["C"]],
["les directives et les planifications décidées par les responsables",["V"]],
["la prise de décision et l'adhésion collectives",["LS"]]
]
},
{
"q": "Le pouvoir décisionnel devrait appartenir à...",
"as": [
["ceux et celles qui possèdent le lieu en raison de leur richesse ou de leur pouvoir politique",["C"]],
["ceux et celles qui y travaillent",["LS"]]
]
},
{
"q": "La répartition du travail devrait se faire selon...",
"as": [
["les opportunités sur le marché de l'emploi et la richesse",["C"]],
["les directives et tâches fixées par les responsables",["V"]],
["la planification collective et l'allocation équitable en fonction des besoins sociétaux",["LS"]]
]
},
{
"q": "Les moyens de production devraient être détenus et contrôlés par...",
"as": [
["les personnes aisées",["C"]],
["les responsables de l'appareil d'état",["V"]],
["la communauté toute entière",["LS"]]
]
},
{
"q": "Les processus de production devraient prioriser...",
"as": [
["la réduction des coûts",["C"]],
["ce que disent les responsables",["V"]],
["les besoins et la durabilité",["LS"]]
]
},
{
"q": "La croissance infinie de la production mène à...",
"as": [
["tout un tas de bonnes choses",["C","V"]],
["la destruction de notre planète",["LS"]]
]
},
{
"q": "La distribution devrait être organisée selon...",
"as": [
["la richesse",["C"]],
["ce que disent les responsables",["V"]],
["ce sur quoi s'accorde le collectif",["LS"]]
]
},
{
"q": "Les réseaux de sécurité sociale devraient être...",
"as": [
["minimisés pour encourager la responsabilisation des individus",["C"]],
["contrôlées et alloués par les responsables",["V"]],
["adaptés et pourvus sur la base de la responsabilité collective",["LS"]]
]
},
{
"q": "L'accès à l'éducation devrait être...",
"as": [
["conditionné aux moyens financiers",["C"]],
["régulé et contrôlé par les responsables de sorte à susciter certaines valeur sociétales",["V"]],
["garanti en tant que droit universel",["LS"]]
]
},
{
"q": "La majorité des personnes sont...",
"as": [
["incapables de prendre de bonnes décisions et doivent être menées tels des moutons",["C","V"]],
["capables de prendre de bonnes déicisions pour peu qu'on leur en accorde l'opprtunité et une certaine indépendance",["LS"]]
]
},
{
"q": "Le pouvoir corrompt...",
"as": [
["parfois, c'est pourquoi il nous faut plusieurs groupes de personnes en charge qui s'échangent le pouvoir entre eux de temps en temps selon qui a réalisé la meilleure campagne électorale",["C"]],
["tout le monde sauf nos dictateurs suprêmes bienfaisants",["V"]],
["tout le monde",["LS"]]
]
},
{
"q": "Les décisions devraient être prise d'après...",
"as": [
["ce que disent les responsables",["C","V"]],
["l'approbation collective",["LS"]]
]
},
{
"q": "L'usage de la violence est...",
"as": [
["justifié pour permettre aux responsables de rester au pouvoir",["C","V"]],
["inacceptable",["LS"]]
]
},
{
"q": "L'innovation et le développement technologique devraient être motivés par...",
"as": [
["la compétition du marché et les incitations individuelles",["C"]],
["les objectifs instaurés par les responsables",["V"]],
["la recherche collective et le partage des connaissances",["LS"]]
]
},
{
"q": "Les droits de propriété intellectuelle devraient appartenir...",
"as": [
["aux inventeurs individuels ou à leurs employeurs",["C"]],
["aux responsables qui réglementent et contrôlent la propriété intellectuelle",["V"]],
["à la communauté et au partage des savoirs",["LS"]]
]
}
]
}

View File

@ -1,24 +0,0 @@
{
"cooperatives": "Coopératives",
"p1": "Nous établissons des coopératives ouvrières, qui sont un modèle d'entreprise où les travailleurs et les travailleuses détiennent et contrôlent l'entreprise. Chacun et chacune a une voix dans la prise de décision et les profits sont répartis selon les contributions individuelles. Cette structure participative entretient le sentiment de repossession, de motivation et de satisfaction pour son travail, en instituant une expérience de travail plus épanouissante tout en luttant contre la concentration de la richesse dans les entreprises capitalistes traditionnelles. En mettant l'accent sur les besoins des travailleurs et des travailleuses, nos coopératives participent à créer des environnements de travail respectueux et durables qui favorisent la cohésion sociale et la sécurité de l'emploi. Nous priorisons également les intérêts des communautés locales en adoptant une perspective à long-terme.",
"subheading1": "Nos Coopératives",
"subheading2": "Europe",
"name": "Nom ",
"location": "Localisation ",
"market": "Marché ",
"status": "Statut ",
"workers": "Travailleurs et Travailleuses ",
"contact": "Contact ",
"description": "Description ",
"website": "Site internet",
"wellnessAndHealth": "bien-être et santé",
"inDevelopment": "en développement",
"WhatsAppInviteLink": "Lien d'invitation WhatsApp ",
"DiscordInviteLink": "Lien d'invitation Discord ",
"descriptionChironHealth": "Chiron Health est une plateforme de santé proposant des cours et des enseignement sur des sujets comme la nutrition, l'exercice physique, le sommeil et la santé mentale.",
"herbalTeas": "tisanes",
"kuuskDescription": "Kuusk est un magasin en ligne qui propose des tisanes provenant exclusivement de plantes sauvages locales, ainsi que des cours de cueillette en ligne.",
"Cooperative": "Coopérative",
"map-prompt": "Vous voulez figurer sur notre carte ? Contactez-nous !"
}

View File

@ -1,3 +0,0 @@
{
}

View File

@ -1,5 +0,0 @@
{
"contactUs": "Nous Contacter",
"inviteLink": "Lien d'Invitation ",
"libertarianSocialists": "Socialistes Libertaires"
}

View File

@ -1,13 +0,0 @@
{
"groups": "Groupes",
"p1": "Nous cherchons à sensibiliser aux impacts négatifs des systèmes politico-économiques actuels sur notre bien-être. Nous mettons en oeuvre entraide et action collective pour faire face aux défis immédiats que nous impose le capitalisme. Par l'entraide, nous nous soutenons les uns les autres en partageant ressources, savoirs et compétences, favorisant ainsi la solidarité et la résilience. Que ce soit au travers de jardins communautaires, de coopératives alimentaires, ou de réseaux de soutien, notre objectif est de rendre la vie sous le capitalisme plus supportable et de créer des poches de résistance et des alternatives à l'intérieur même de l'ordre en place.",
"subheading1": "Nos Groupes",
"subheading2": "Europe",
"location": "Localisation ",
"members": "Membres ",
"contact": "Contact ",
"DiscordInviteLink": "Lien d'invitation Discord ",
"WhatsAppInviteLink": "Lien d'invitation WhatsApp ",
"Group": "Groupe ",
"map-prompt": "Vous voulez figurer sur notre carte ? Inscrivez-vous et rendez-vous sur votre profil !"
}

View File

@ -1,35 +0,0 @@
{
"heading": "Nous Rejoindre",
"condition1": "Tu t'opposes à la dictature et tu lui préfères la démocratie ?",
"condition2": "Tu refuses l'exploitation d'un humain sur un autre ?",
"condition3": "Tu reconnais que nous devrions travailler ensemble et non les uns contres les autres ?",
"conditionsOutcome": "Si tu as répondu <b>OUI</b>, alors tu es déjà un socialiste libertaire. <b>REJOINS-NOUS !</b>",
"subheading1": "Ce Que Tu Obtiendras",
"valueProposition1": "Une communauté toujours prête à t'aider avec tous tes ennuis ;",
"valueProposition2": "L'accès aux moyens de production de nos coopératives ;",
"valueProposition3": "Des produits et des services à prix coûtant voire gratuits ;",
"valueProposition4": "Une aide financière et non-fiancière dans le montage de ta propre coopérative ;",
"valueProposition5": "et bien plus encore !",
"subheading2": "Nous Trouver",
"findOur": "Trouve ici nos",
"group": "groupes",
"commune": "communes",
"party": "partis",
"or": "ou",
"cooperative": "coopératives",
"nearYou": "proche de chez toi et rejoins-les pour contribuer à bâtir le monde auquel nous aspirons.",
"noneNear": "Il n'y a rien près de chez toi ? Pas de problème ! Rejoins notre",
"WhatsAppGroup": "Groupe WhatsApp",
"DiscordServer": "Server Discord",
"helpStart": " et nous t'aiderons à bâtir les tiens propres.",
"location": "Localisation ",
"members": "Membres ",
"contact": "Contact ",
"status": "Statut ",
"name": "Nom ",
"market": "Marché ",
"workers": "Travailleurs et Travailleuses ",
"description": "Description ",
"website": "Site internet ",
"map-prompt": "Vous voulez figurer sur notre carte ? Inscrivez-vous et rendez-vous sur votre profil !"
}

View File

@ -1,17 +0,0 @@
{
"top": "Notre organisation est une fédération décentralisée fondée sur les principes de la libre association. Elle est composée d'une myriade de groupes d'individus rassemblés autour d'une même cause, celle d'abattre les systèmes politico-économiques d'exploitation. Nous cherchons à les remplacer par des systèmes socialistes libertaires fondés sur la décentralisation la démocratie directe et la propriété ouvrière des moyens de production dans l'optique de créer un monde équitable, démocratique et durable en stoppant l'exploitation des humains et de la nature.",
"groupsTitle": "GROUPES",
"groupsText": "Nous organisons des groupes afin d'éduquer, de militer ainsi que de mener des actions antifascistes et d'entraide. Notre objectif est de démontrer comment les systèmes politico-économiques actuels nuisent à notre bien-être, à mettre en avant des approches alternatives et à mettre en oeuvre l'entraide que nous prônons.",
"communesTitle": "COMMUNES",
"communesText": "Nous établissons des communes sur la base des principes socialistes libertaires, où les individus sont propriétaires de leur terre, de leurs maisons, et des moyens de production et où ils et elles peuvent prendre des décisions par le biais de la démocratie directe. Nous propageons graduellement notre monde socialiste, une commune à la fois.",
"cooperativesTitle": "COOPERATIVES",
"cooperativesText": "Nous formons des coopératives ouvrières pour financer les opérations de nos groupes et de nos communautés. Reconnaissant que le pouvoir économique influence le pouvoir politique, nous considérons létablissement de coopératives comme une des étapes initiales vers lavènement du socialisme.",
"partiesTitle": "PARTIS",
"partiesText": "Nous créons des partis politiques dans l'optique de promouvoir des réformes nous permettant plus facilement de mettre en oeuvre nos objectifs, de déplacer la fenêtre d'Overton ainsi que de gagner en popularité. Cependant, nous avons conscience que nous ne pourrons parvenir au socialisme libertaire par le biais des institutions qui luttent à son encontre.",
"tradeUnionsTitle": "SYNDICATS",
"tradeUnionsText": "Nous promouvons les syndicats qui émancipent et organisent les travailleurs et les travailleuses en militant pour un traitement et un salaire justes ainsi que pour une amélioration des conditions de travail. La lutte sur le lieu de travail est partie intégrante de notre stratégie dans l'avènement du socialisme libertaire.",
"findUs": "Nous Trouver",
"whatNow": "Et Maintenant ?",
"joinUs": "Nous Rejoindre",
"talkWithUs": "Discuter Avec Nous"
}

View File

@ -1,3 +0,0 @@
{
"tableOfContents": "SOMMAIRE"
}

View File

@ -1,145 +0,0 @@
# Du Capitalisme et de lÉtatisme<br>Y a-t-il une meilleure voie?
## Le Capitalisme
### Ses Principes fondamentaux
Le capitalisme est un système politique et économique, vanté comme une boussole de liberté et dopportunité, qui mène à lexploitation du grand nombre dans le but daccroître la richesse et le pouvoir dune minorité, et ce au prix dune perte de dignité pour tous et toutes. Si nous prenons le temps dexaminer les principes fondamentaux de ce système, les raisons qui conduisent à cet état de fait nous apparaissent clairement:
<b>La Recherche du Profit:</b> Le capitalisme se caractérise par une quête acharnée du profit privé comme principal moteur de lactivité économique. À lintérieur de ce système, les bénéfices destinés aux propriétaires des entreprises priment sur les considérations de bien-être humain, de besoins sociaux et de durabilité environnementale.
La centralité pour lentreprise de la recherche du profit, couplée à limpossibilité inhérente des propriétaires de se montrer représentatif/ve/s de leurs travailleur/se/s ainsi quà leurs intérêts de classe divergents, mène à des mesures qui font peser les coûts sur les consommateur/rice/s, sur les travailleur/se/s et sur lenvironnement, et qui leur extorque leur plus-value. Lasymétrie du pouvoir au sein de ce système conduit à une relation classiste dexploitation entre les propriétaires et les non-propriétaires, en tant que la représentation des intérêts des individus nest pas proportionnelle à leur participation et à leur importance dans la société. Non seulement ce système va-t-il à lencontre des intérêts du gros de la société qui ne constitue pas cette classe possédante, mais il est même moins efficace dans la création de la plus-value que les propriétaires extraient des entreprises. La clé de léchec de ce système centré sur le profit réside dans le concept même de propriété privée.
<b>La Propriété Privée des Moyens de Production:</b> Le principe au centre du capitalisme est celui de «propriété privée des moyens de production», cest-à-dire de lexistence dune classe dindividus détenant le monopole des ressources, des installations, des outils et des terres nécessaires à la production de biens et de services pour la société. Une telle concentration de la propriété entraîne une asymétrie considérable du pouvoir puisque que la classe capitaliste détient un monopole de contrôle sur la société dans son ensemble, tandis que la majeure partie de la population (la classe laborieuse) est contrainte de vendre sa force de travail à cette classe possédante (capitaliste) pour gagner sa vie. Cette disproportion de la propriété, qui est au centre de lorganisation de nos sociétés, permet une division fondamentale des intérêts sociétaux entre celles et ceux qui la détiennent et celles et ceux qui en pâtissent. Cette relation antagonique prive non seulement de pouvoir celles et ceux qui sont exploité/e/s en particulier, mais également la société dans son ensemble étant donné quafin de maintenir cette dynamique entre propriétaires et non-propriétaires, la classe laborieuse (et consommatrice) doit rester divisée, désorganisée et impuissante à part pour tout ce qui sert au maintien de cette relation parasitaire. Cette configuration restreint artificiellement les choix de société, tant collectivement quindividuellement, et engendre des divisions artificielles et injustifiées entre les individus plutôt que de permettre des efforts coordonnés vers des buts qui seraient partagés par tous et toutes, dont les seules limites seraient le monde matériel que nous habitons et nos propres décisions en tant quindividus y prenant part.
<b>LExploitation du Travail:</b> Sous le capitalisme, la recherche du profit motive seule la relation entre la classe capitaliste et la classe ouvrière. La classe capitaliste cherche à maximiser ses profits en soutirant la plus-value de leur labeur aux travailleur/se/s. Cette exploitation se traduit sous la forme du salariat, par lequel les travailleur/se/s sont payé/e/s une fraction de la valeur quils et elles produisent par leur travail. Cette plus-value, à savoir la différence entre la valeur que les travailleur/se/s produisent et le salaire qui leur est reversé, est accaparée par la classe capitaliste sous la forme de profit. Cette relation dexploitation, ancrée dans le mode de production capitaliste, perpétue les inégalités sociales et économiques puisque les travailleur/se/s sont constamment privé/e/s de la valeur totale de leur travail.
Tout comme une maison requiert une fondation solide pour tenir, tout système ordonnant nos vies exige une base robuste pour soutenir sa structure. Malheureusement, le capitalisme repose sur des fondations intrinsèquement défaillantes qui mènent à des asymétries de pouvoir, à lexploitation économique, à la compromission du bien-être collectif et à la perte de sens dans son travail. Il est évident que tant que lordre en place ne semparera pas de ces défauts fondamentaux, il ne saura jamais répondre aux attentes dune société juste et égalitaire.
### Le Prix Que Nous Payons
Le Capitalisme présente de nombreuses problématiques systémiques reliées entre elles qui impactent, dune manière ou dune autre, le bien-être de chacune des personnes à qui il simpose.
<b>LAliénation par le Travail:</b> Dans sa recherche de profit et de compétition, le capitalisme brise notre relation humaine innée avec le travail porteur de sens, ne nous laissant plus quun sentiment de déconnexion et daliénation. À mesure que le profit devient le but ultime, nous nous trouvons souvent réduit/e/s à de simples rouages dans la machinerie économique. Cette aliénation par le travail vient saper notre besoin de sens et daccomplissement, étouffant ainsi notre créativité et notre potentiel.
<b>Le Vol de Notre Travail:</b> Lidée centrale du capitalisme est laccaparement de notre travail. En nous rémunérant moins que la valeur que nous produisons, la classe capitaliste nous extorque du surtravail à nous, la classe laborieuse. Cette exploitation entretient les inégalités économiques, puisquon nous dépossède de la part du fruit de notre travail qui nous revient pourtant de droit. Lécart de richesse qui en résulte attise le sentiment dimpuissance et dinjustice, accroissant plus encore le clivage entre les possédant/e/s et celles et ceux qui nont rien.
<b>La Fragmentation Sociale:</b> Lenracinement du capitalisme dans la recherche frénétique du profit individuel érode les liens de coopération et de cohésion sociale authentique entre les individus. En outre, létat desprit du chacun pour soi impitoyable entretenu par le capitalisme place lintérêt personnel au-dessus du bien-être collectif, déchirant ainsi le tissu social. Dans cet environnement dhyper-compétitivité, nos liens sociaux sont fragilisés, notre empathie atrophiée et nos communautés fragmentées.
<b>Le Consumérisme et le Matérialisme:</b> Sous le joug capitaliste prospère une culture consumériste et matérialiste, qui fait coïncider la valeur personnelle avec laccumulation de possessions matérielles. Cette quête effrénée de biens matériels nous mène souvent tout droit à lendettement excessif, pèse sur nos relations et nous laisse avec un sentiment bien creux daccomplissement. La fixation sur la richesse matérielle éclipse la quête dexpériences épanouissantes, de mûrissement personnel ainsi que dun véritable bien-être, nous enfermant dans un cycle de consommation sans fin.
<b>La Destruction Environnementale:</b> La faim insatiable du capitalisme pour les bénéfices privés ne prend pas en compte léquilibre écologique à long-terme de notre planète. Les bénéfices à court-terme prennent le pas sur les considérations de durabilité de lenvironnement. Les pratiques capitalistes conduisent à lépuisement des ressources, à la pollution et au dérèglement climatique, compromettant ainsi les fondements mêmes de notre équilibre écologique. La relation dexploitation entre, dune part la classe propriétaire capitaliste, et dautre part, les travailleur/se/s et les consommateur/rice/s sétend au contrôle de toutes les ressources naturelles et à léquilibre écologique de la planète entière, sur laquelle le capitalisme est parvenu à instaurer sa domination.
Les valeurs et pratiques constituantes du capitalisme sétendent bien au-delà de considérations purement économiques, imprégnant chaque facette de nos vies.
## LÉtatisme
### Le Rôle de lÉtat
LÉtat est une institution centralisée qui régit un territoire spécifique, et la population qui lhabite, et au sein duquel il maintient le monopole de lorganisation politique hors de portée de la majorité. La notion dÉtat peut recouvrir un large éventail de structures, de systèmes légaux, dappareils bureaucratiques et de forces publiques. LÉtat se pique de représenter les intérêts collectifs de la population, de maintenir lordre et de fournir des services publics. Cependant, même le fonctionnement des services publics quil arrive à lÉtat de fournir ne sera accordé que dans le cadre étroit qui profite à lÉtat; un organe politique étranger aux intérêts de classe dune population quil prétend représenter.
<b>LAppareil Répressif:</b> Tant quun organe politique public maintient le monopole du pouvoir politique hors de portée du contrôle collectif de la population quil gouverne, cest un État. Si un État ne défend plus les intérêts de classe fondamentalement étrangers à ceux de la population quil se pique de représenter, il cesse dêtre un État et devient simplement le cadre organisationnel collectif constitué par la population sous son égide. Tout comme nimporte quel autre système social, lÉtat cherche à maintenir sa propre existence par tous les moyens à sa portée, ce qui lamène à réprimer toute atteinte à son pouvoir, quelle vienne de létranger ou de lintérieur de ses frontières, et ce même sil faut aller à lencontre des intérêts de la majorité afin de maintenir son emprise sur sa population.
<b>La Préservation de la Hiérarchie:</b> Derrière son masque de serviteur du peuple, lÉtat cherche avant tout à défendre et à faire progresser les intérêts de la classe dirigeante, dont les valeurs sincarnent dans lappareil dÉtat, en jouant un rôle crucial dans le maintien des hiérarchies sociales. Par lapplication de lois ou de réglementations, lÉtat protège le droit à la propriété privée, sassurant ainsi de laccumulation de richesse pour la classe dirigeante et du maintien des inégalités économiques.
<b>LAutopréservation:</b> Un État doit en outre satteler à son autopréservation, démarche qui va au-delà de la simple défense des intérêts de la classe régnante. Lautopréservation se réfère à la tendance inhérente à lÉtat de maintenir son autorité et son existence en tant quinstitution. LÉtat, en tant quil est une entité centralisée, cherche à assurer sa propre sauvegarde par la coercition, la propagande manipulatrice et le sabotage des organisations politiques qui menacent son autorité sur sa population. Cet instinct dautopréservation nest pas véritablement mû par les intérêts de sa population, mais plutôt par lintérêt mutuel de la classe possédante et de lÉtat à maintenir leur contrôle sur la population et sur le territoire quils gouvernent. Tandis que la classe dirigeante profite généralement du système dautopréservation de lÉtat, il faut néanmoins reconnaître que la classe régnante propriétaire et lÉtat ne partagent pas systématiquement des intérêts communs, en particulier dans des démocraties plus libérales qui ne présentent pas nécessairement une unité État/privé absolue à linstar des dictatures fascistes ou totalitaires, dautant que chacune des deux parties dispose dun degré de pouvoir variable en fonction du système en place.
<b>La Manipulation et la Propagande:</b> LÉtat façonne également lopinion publique par le biais de systèmes éducatifs et contrôle les organes médiatiques à travers une influence politique «soft» sur les médias privés, ou même en plaçant directement ces médias sous la tutelle de lÉtat. En contrôlant le prisme et lorientation du récit, lÉtat peut influer sur ce que que pense et croit la population. Ce contrôle exercé sur la communication de masse vise à créer un sentiment dadhésion et à conférer une légitimité aux actes de lÉtat, au mépris de leur réelle et authentique légitimité ou non. Ce contrôle vient remplacer ou sadditionner aux méthodes telles que la violence étatique directe ou les menaces envers la population, afin de contraindre celle-ci à obtempérer.
### La Démocratie Libérale
On nous soutient que la démocratie libérale incarne un système conçu «par et pour le peuple». Cependant, en tant quil existe un État qui défend des intérêts fondamentalement antagoniques à ceux de la multitude, cette affirmation ne sert à rien dautre quà camoufler un système autoritaire et sape les supposés principes démocratiques que ledit État prétend pourtant défendre, tels que la liberté dexpression, les élections libres et justes, la transparence et la responsabilité, légalité, etc.
<b>La Déconnexion:</b> Nous sommes tous et toutes envahi/e/s par un profond sentiment de déconnexion, ce qui entraîne une faible participation aux élections, et notre sentiment de pouvoir impacter les décisions qui modèlent nos vies sétiole jour après jour. Nous sommes désabusé/e/s de la politique, sceptiques de lefficacité des systèmes électoraux et la trahison de la confiance que nous avions placée dans nos institutions politiques a parachevé cette déconnexion. Quand on se sent aliéné/e du processus décisionnaire, on perd lespoir quun changement positif puisse se réaliser au sein du système actuel, dont on nous interdit de plus de penser la subversion.
<b>La Manipulation:</b> Les partis emploient pernicieusement des tactiques fourbes, agitant des promesses de campagnes mensongères et une rhétorique sensationnaliste pour nous soutirer notre vote. Nos choix sont façonnés par des manœuvres calculées, amputant notre possibilité de procéder à des décisions informées.
<b>Le Manque de Culture Politique:</b> La majeure partie des votant/e/s nont pas de culture, de conscience ou de compréhension suffisante des systèmes et des mesures politiques pour saisir la portée de leurs choix, ou dailleurs lexistence même de tel ou tel choix. Néanmoins, la faute nest pas à rejeter sur les votants, cest une externalité intentionnelle du système en place. Il est plus aisé de nous contrôler quand la compréhension de lessence et du fonctionnement de la politique nous fait défaut; alors, il ne suffit plus que dune bonne campagne de promotion pour nous imposer le mode de pensée voulu. Ne disposant pas dune compréhension solide des enjeux, nous soutenons sans le savoir des candidats qui ne défendent pas nos intérêts, mettant ainsi en péril lessence même de la démocratie.
<b>Des Choix Imposés:</b> Les élections périodiques qui viennent ponctuer notre système démocratique nous présente une offre de choix abominablement restreinte. Les partis politiques en lice présélectionnent leurs candidats, réduisant ainsi le spectre des possibilités pour les votant/e/s. Cette sélection imposée empêche la représentation de perspectives et dintérêts divers, sapant ainsi les principes dinclusivité et de représentativité au cœur de la démocratie.
Ces contraintes favorisent lillusion de la participation, ce qui nuit à lessence véritable de la démocratie. Vient sy ajouter le déséquilibre profond du pouvoir, avec une classe capitaliste exerçant sa domination via un éventail de divers mécanismes dinfluence. Cette domination qui modèle les implications de nos mesures politiques, perpétuant ainsi les inégalités au sein de nos systèmes politiques capitalistes.
<b>La Puissance des Lobbys:</b> La classe capitaliste, dotée de vaste ressources financières et de réseaux influents, peut maintenir des canaux privilégiés auprès du législateur et du processus décisionnaire. Cet accès inégal entretient un déséquilibre de pouvoir systémique, pavant la voie à des politiques qui servent en priorité les intérêts de lélite bourgeoise. Les principes de représentation et de participation démocratique égalitaires viennent à seffondrer sous le poids de cet accès à géométrie variable.
<b>LInfluence Médiatique et son Contrôle Capitaliste:</b> La classe capitaliste fait montre dun remarquable et considérable contrôle, ou en tous cas influence, sur les relais médiatiques, contribuant activement à la manipulation de lopinion publique et du discours politique de sorte à appuyer son agenda. Cette poigne de fer sur les canaux médiatiques renforce la domination des capitalistes, cimentant leur pouvoir et étouffant la portée didées et de perspectives diverses auprès du public.
<b>La Coercition Économique:</b> Les capitalistes ont la possibilité dexercer une coercition économique, jouant de leur influence pour menacer de délocaliser leurs entreprises ou dappliquer des mesures qui pourraient précipiter un ralentissement économique. La simple évocation de potentielles répercussions économiques suffit à susciter la terreur, contraignant le législateur à remodeler ses politiques de manière à apaiser la classe capitaliste, même si cela veut dire compromettre le bien-être et les intérêts des citoyens qui ne possèdent pas.
La classe capitaliste brandit ses ressources considérables, se constituant un puissant arsenal à trois facettes: lobbys, médias et coercition économique. Ces mécanismes dinfluence entretiennent les inégalités et façonnentlissue des mesures politiques de façon à favoriser la classe capitaliste, portant un coup dévastateur aux principes dégalité de représentation et de bien-être collectif du reste de la population.
### LAvant-Gardisme
Lavant-gardisme désigne une approche singulière qui prétend représenter les intérêts de la classe ouvrière. La plupart des révolutions «communistes» et des États qui en ont émergé, tels lURSS ou la République populaire de Chine, se réclamaient de cette approche. Cependant, un examen critique de lavant-gardisme permet de révéler son impact nocif sur les populations mêmes dont il prétend défendre les intérêts, affaiblissant par là même la classe ouvrière et entravant sérieusement la lutte de cette dernière pour sa libération.
<b>LInstauration dun Capitalisme dÉtat:</b> Lavant-gardisme promeut la concentration du pouvoir entre les mains uniques dun groupe ou dun parti qui se pique de détenir une connaissance et une compréhension supérieures de la véritable voie révolutionnaire. Le parti davant-garde et lappareil dÉtat, en prenant le contrôle des moyens de production et de distribution, se constitue en une nouvelle classe dominante, semblable à la classe bourgeoise sous le capitalisme de marché. Si initialement les partisans de lavant-garde peuvent sincèrement chercher un moyen de transition vers le socialisme ou le communisme, la centralisation du pouvoir inhérente à lavant-gardisme entretient une forme de capitalisme dÉtat où lÉtat et le parti au pouvoir maintiennent leur contrôle sur léconomie et la société, nuisant à la quête pour lauthentique émancipation et la propriété collective.
<b>LAliénation:</b> Les idéologies davant-garde insistent sur lidée quelles représentent la classe ouvrière. Cependant dans la pratique, cette représentation nest pas conforme aux vécus et aux aspirations de celle-ci. Lavant-garde, en tant quelle est une classe dominante et la représentante autoproclamée des classes populaires, est incapable de saisir les nuances, la diversité et la complexité de la classe laborieuse, menant à un sens daliénation et de déconnexion. Cette distance érode les principes démocratiques de la participation et de la prise de décision collectives.
<b>Assujettissement:</b> Les idéologies avant-gardistes tendent à percevoir les mouvements dinitiative horizontale et lorganisation autonome comme une menace à leur pouvoir centralisé. Plutôt que de susciter une culture de collaboration et démancipation, les approches avant-gardistes préfèreront soctroyer le droit de décider quelles initiatives autoriser selon si elles remettent en cause leur domination ou pas. Cet étouffement des actions dinitiative horizontale restreint le potentiel dun changement organique allant du bas vers le haut, et empêche la classe ouvrière de pleinement accomplir sa propre libération
Lapproche avant-gardiste qui consiste à imposer depuis en haut sest montrée nuisible à la classe ouvrière et à sa lutte démancipation. La seule manière de permettre aux intérêts des classes laborieuses dêtre authentiquement pris en compte est de voir cette classe prendre le contrôle de sa propre vie et être libre de prendre ses propres décisions.
## Cadre Théorique
La critique formulée précédemment se fonde sur des ouvrages tels que Le Capital, Critique de léconomie politique de Karl Marx et LHomme unidimensionnel, Essai sur lidéologie de la société industrielle avancée de Herbert Marcuse, de même que sur des observations réalisées par divers/es universitaires, activistes et penseur/se/s politiques. Étudions-en brièvement les principaux concepts:
### La Théorie de la Valeur
La théorie de la valeur est un concept marxiste qui affirme que la valeur dune marchandise, quelle soit un bien ou un service, découle de la quantité de travail socialement nécessaire pour la produire, cest-à-dire du temps et de leffort collectifs investis par les travailleur/se/s dans sa création.
Quand ce concept est appliqué à un système capitaliste, il en ressort un problème de taille. Les travailleur/se/s au sein de ce système échangent leur travail contre un salaire, dont ils et elles ont besoin pour subsister. Or, sous le capitalisme, les travailleur/se/s se trouvent dans une situation où leurs salaires ne reflètent pas la valeur réelle quils et elles contribuent à générer par leur travail. La compensation qui leur est donnée est inférieure à la valeur réelle quils et elles créent.
Cette disparité survient parce que le capitalisme laisse la classe capitaliste sapproprier la plus-value générée par le travail des ouvrier/re/s. La plus-value étant la valeur produite supérieure à la somme du salaire payé aux travailleur/se/s et aux coûts de production. Cette plus-value, souvent appelée profit, est accaparée par la classe capitaliste, lui permettant ainsi daccumuler de la richesse et du pouvoir par sa simple propriété des moyens de production.
Fondamentalement, la théorie de la valeur met en lumière lexploitation du travail dans le cadre capitaliste. Les travailleur/se/s, au travers de leur effort collectif, produisent de la valeur par leur travail dont la classe capitaliste extorque les bénéfices en en extrayant la plus-value, ne laissant ensuite aux travailleur/se/s que des salaires qui ne reflètent pas pleinement la valeur quils et elles ont générée. Ce mécanisme dextraction de la plus-value constitue un moyen fondamental pour les capitalistes damasser richesse et pouvoir.
### La Concentration de la Richesse et du Pouvoir
La concentration de la richesse et du pouvoir est un concept crucial dans la compréhension des failles et des critiques tant du capitalisme de marché que du capitalisme dÉtat régi par un parti davant-garde. Ce concept se réfère à la tendance quont la richesse et le pouvoir à se voir de plus en plus concentrés entre les mains dune petite élite au sein de la société, respectivement la classe capitaliste sous le capitalisme de marché, et le parti davant-garde sous le capitalisme dÉtat. Dans le premier cas, cette concentration découle des dynamiques inhérentes au capitalisme, dont le modèle économique est motivé par la recherche du profit et laccumulation du capital. Dans le second cas, cette concentration provient directement du désir du parti davant-garde de garder et accroître son contrôle.
Sous un capitalisme de marché, la classe capitaliste concentre la richesse et le pouvoir au moyen des mécanismes suivants:
<b>LExploitation du Travail:</b> Sous le capitalisme, les individus et les entreprises sévertuent à produire et échanger des marchandises en vue de générer du profit. Par le biais de mécanismes tels que lextraction de la plus-value du travail, la classe capitaliste accumule de la richesse et acquiert plus de moyens de production tandis que la classe laborieuse accumule rarement quelque montant important que ce soit et peine à joindre les deux bouts. Ce processus daccumulation mène à un accroissement des écarts de richesse, voyant celle-ci se concentrer entre les mains de quelques un/e/s.
<b>La Loyauté de lAppareil:</b> La concentration de la richesse induit également une concentration du pouvoir. Ceux et celles qui possèdent de larges richesses acquièrent une influence et un contrôle considérables sur les ressources économiques clés, en même temps que sur les institutions politiques et sociales.Cette concentration du pouvoir permet à lélite riche de modeler les politiques publiques, manipuler le système politique et faire valoir leurs propres intérêts au détriment de ceux de la majorité.
<b>La Transmission de la Richesse:</b> Par ailleurs, la concentration de la richesse et du pouvoir entretient un cycle de privilèges et dexclusion. Lélite privilégiée peut transmettre sa richesse et ses prérogatives aux générations suivantes, accentuant les disparités sociales et économiques au fil du temps. Dans le même temps, celles et ceux qui ne disposent pas de cette richesse ou de ce pouvoir sont largement limité/e/s dans leur possibilité de sélever socialement et se retrouvent piégé/e/s dans des cycles de pauvreté.
Quant au parti davant-garde et au capitalisme dÉtat, ils concentrent la richesse et le pouvoir au moyen des mécanismes suivants:
<b>La Domination Idéologique:</b> Le parti davant-garde instaure un cadre idéologique qui légitime sa gouvernance et prétend représenter les intérêts de la classe ouvrière. Il met en avant une doctrine ou une idéologie politique spécifique et œuvre à lendoctrinement de ses membres et de ses soutiens. Par la propagande, léducation et par un contrôle des relais médiatiques, le parti davant-garde formate lopinion publique et réprime les points de vue alternatifs.
<b>La Prise de Décisions Centralisée:</b> Le parti davant-garde centralise le pouvoir décisionnel en son sein, le concentrant auprès dun cercle restreint de chefs. Cela permet au parti de contrôler lélaboration des mesures politiques, la direction stratégique et lallocation des ressources. En maintenant de la sorte une poigne de fer sur la prise de décisions, le parti davant-garde limite la portée et la participation de la population, consolidant son autorité et prévenant toute atteinte à son contrôle.
<b>Appareil Répressif:</b> Le parti davant-garde met en place et utilise un appareil répressif, comprenant les forces de lordre et les mécanismes de surveillance afin de réprimer les dissidents et de maintenir son contrôle sur la société. Ces outils de coercition servent à faire taire les oppositions, étouffer les voix dissidentes et instiller la peur chez sa population. En créant une atmosphère de répression, le parti davant-garde décourage la résistance et maintient sa mainmise sur le pouvoir.
<b>Cooptation et Clientélisme:</b> Le parti davant-garde se sert de stratégies de cooptation et de clientélisme pour sattirer le soutien et la loyauté dindividus ou de groupes clés. En offrant des bénéfices matériels, des privilèges et des positions de pouvoir, le parti sévertue à créer un réseau dalliés qui dépendent de la continuation de son règne. Cette stratégie aide le parti davant-garde à maintenir une base de soutien loyale et à sassurer que les fractions dissidentes restent mineures et marginalisées.
La concentration du pouvoir mène systématiquement au même phénomène: le maintien de cette concentration.
### La Lutte des Classes
Dans un système capitaliste, la société est scindée en deux classes distinctes: la bourgeoisie et le prolétariat. La bourgeoisie représente la classe capitaliste, constituée de riches individus qui possèdent et contrôlent les moyens de production tels que les usines, la terre et les ressources. Leur motivation première est de maximiser le profit et de préserver leur richesse et leur influence. Lautre versant de ce système est le prolétariat, incarné par la classe ouvrière, qui doit vendre sa force de travail à la bourgeoisie afin de gagner sa vie et pourvoir à ses besoins et à ceux de sa famille.
Le cœur de la critique présentée ici découle de la lutte qui survient entre ces deux classes. En effet, la bourgeoisie cherche à engranger toujours plus de bénéfices en baissant les salaires, en réduisant les coûts et en exploitant la force de travail du prolétariat. Son objectif est de maintenir et accroître sa richesse aux dépens de la classe laborieuse. À linverse, le prolétariat, qui dépend de sa force de travail quil parvient à vendre pour survivre, sévertue à améliorer ses conditions de travail, gagner un meilleur salaire et obtenir une part plus juste de la valeur quil produit par son travail. Cette divergence dintérêts et de buts fait surgir différentes expressions de la lutte des classes comme les grèves, les manifestations et les mouvements organisés visant à défendre les droits des travailleur/se/s.
Les dynamiques de pouvoir entre la bourgeoisie et le prolétariat affectent lourdement les relations sociales au sein des sociétés capitalistes. La classe capitaliste possède des ressources économiques considérables ainsi quune importante influence et un contrôle sur les institutions clés quelle fait jouer pour maintenir sa domination et faire progresser ses intérêts. Cette classe modèle les processus politiques, influence les récits médiatiques et exerce un contrôle sur lopinion publique, tout cela dans le but de perpétuer ses avantages économiques et sociaux.
### LAliénation
Le concept daliénation (ou «Entfremdung», comme Marx lappelle en allemand) se réfère à la déconnexion psychologique et sociale ressentie par les travailleur/se/s dans une société capitaliste, en raison de la manière dont le travail est organisé. Il y a quatre dimensions à cette aliénation:
<b>LAliénation vis-à-vis du Produit:</b> Sous le capitalisme, les travailleur/se/s se voient assigner des tâches spécialisées et répétitives pour produire les marchandises qui seront détenues et contrôlées par les capitalistes. Les producteur/rice/s sont ainsi détaché/e/s des produits quils et elles créent car ces produits sont possédés par dautres qui le vendront pour leur profit propre. Le travail devient un moyen subordonné à une fin, plutôt quune expression gratifiante de sa créativité et de son talent.
<b>LAliénation vis-à-vis du Processus de Production:</b> Dans un système capitaliste, le processus de production est structuré hiérarchiquement de sorte que les travailleur/se/s ont très peu de contrôle ou dinfluence sur la prise de décision et lorganisation relatives au travail. Aussi, les travailleurs perdent en autonomie et se retrouvent aliénés du processus au travers duquel les biens sont produits.
<b>LAliénation vis-à-vis de Soi:</b> Le travail est un aspect essentiel de la nature humaine, donnant aux individus lopportunité dexprimer leur créativité, leurs talents et leurs désirs. Cependant, sous légide du capitalisme, le travail est détaché des intérêts et des besoins des ouvrier/e/s. En assignant aux travailleur/se/s des tâches spécifiques et sous le contrôle dexigences externes, on les condamne à ressentir un profond sentiment de détachement vis-à-vis de leur être et de leur potentiel.
<b>LAliénation vis-à-vis des Autres:</b> La production capitaliste instaure une compétition entre les travailleur/se/s en les montant les un/e/s contre les autres pour des salaires et des garanties demploi. Cette compétition favorise un sens disolement et daliénation vis-à-vis des autres travailleur/se/s, entravant ainsi le développement dune solidarité et dune coopération collectives.
Aliénation est une caractéristique inhérente au mode de production capitaliste. Elle constitue une forme doppression qui entrave lépanouissement humain et refuse aux individus lopportunité de réaliser pleinement leur potentiel créatif.
### Le Fétichisme de la Marchandise
Le fétichisme de la marchandise est un concept formulé par Marx qui dénote une caractéristique des sociétés capitalistes: la tendance à attribuer une valeur mystique aux marchandises, niant les relations sociales de production et la nature exploiteuse du capitalisme. Plutôt que dêtre perçues comme des produits du travail humain, les marchandises sont considérées comme des entités détenant une valeur et un pouvoir intrinsèques.
Dans les sociétés capitalistes, la valeur dune marchandise est déterminée par la quantité de travail socialement nécessaire à sa production. Cependant, le fétichisme de la marchandise transforme cette relation sociale en la perception que la valeur découle de léchangeabilité et du prix du marché. Cette question du processus déchange et du marché commande la compréhension populaire de la valeur, éclipsant ainsi le travail derrière la production.
Ce fétichisme nest pas accidentel mais inhérent au mode de production capitaliste. Dans la société capitaliste, les produits du travail prennent la forme de marchandises, ensuite achetées et vendues. Les relations sociales entre les personnes sont celées, détournant ainsi le regard vers les relations entre les objets. Aussi, le produit des travailleur/se/s est-il caché, dissimulant la nature exploiteuse du capitalisme.
Lillusion de la valeur entretient le système capitaliste en détournant lattention des masses laborieuses vers les marchandises. Cela permet à la classe capitaliste, qui contrôle la production, dextraire la plus-value sans résistance significative. Le capitalisme maintient la notion que la valeur dun produit réside uniquement dans son échangeabilité, plutôt que de reconnaître la quantité de travail investie dans sa production par la classe ouvrière.
Le fétichisme de la marchandise modèle également les désirs, les aspirations et les habitudes de consommation. Lattrait des marchandises, accrû par les emballages, les marques et la publicité, fait miroiter aux individus que leurs vies samélioreraient par lachat et la consommation. Cela renforce lillusion que la valeur réside purement dans la marchandise, perpétuant le cycle dexploitation du capitalisme.
### La Désublimation Répressive
Dans un système capitaliste, la désublimation répressive, concept introduit par Herbert Marcuse, peut être comprise comme un processus au travers duquel les désirs des individus sont orientés et manipulés vers la recherche de possessions matérielles, de gratification immédiate et de consommation, plutôt que de chercher lépanouissement et le sens par dautres aspects de la vie. Ce processus est appuyé par la promotion de besoins et de désirs artificiels par la publicité et les médias de masse qui formatent et moulent les désirs des individus selon les diktats du marché. Aussi, la recherche de biens matériels devient un axe central et occulte les autres sources potentielles dépanouissement et de connexion humaines.
En orientant les désirs et les aspirations dans la direction du consumérisme, la désublimation répressive sert de mécanisme de contrôle au capitalisme. Elle réprime ou redirige de possibles désirs transformateurs de changement social et de liberté humaine authentique. Plutôt que de questionner et de remettre en cause les structures sous-jacentes et les dynamiques de pouvoir du système, les individus sont incités à trouver satisfaction dans laccumulation de possessions matérielles et lassouvissement de désirs immédiats. Le mécanisme de diversion empêche lémergence dactions collectives et de conscience critique, maintenant ainsi le statu quo et entretenant les inégalités de pouvoir existantes.
Dans ce contexte, le terme «répressif» de la désublimation répressive se réfère à lidée que le consumérisme et la recherche des plaisirs matériels sont activement promus et encouragés par le système capitaliste pour assurer son contrôle social et sa stabilité. Le concept de désublimation souligne le relâchement des inhibitions et lexpression désinhibée des désirs, souvent de manière superficielle et immédiate, plutôt que de les orienter vers des quêtes plus profondes et transformatives.
### LAtomisation
LAtomisation se réfère à un état de fragmentation sociale et disolement où les individus sont déconnectés les uns des autres ce qui mène à un affaiblissement du sentiment de communauté et de solidarité.
Sous le capitalisme, latomisation résulte de plusieurs facteurs interconnectés:
<b>LIndividualisme et la Compétition:</b> Le capitalisme met lourdement laccent sur lindividualisme et la compétition et encourage la recherche de ses propres intérêts et du profit personnel. Cette emphase sur la réussite individuelle mène à un sentiment disolement puisque les individus font passer leurs propres besoins et buts devant le bien-être collectif. La constante compétition pour les ressources et les opportunités fragmente plus encore la société et favorise un état desprit de «chacun pour soi».
<b>Les Forces du Marché et la Marchandisation:</b> Dans les systèmes capitalistes, presque tous les aspects de la vie sont sujets aux forces du marché. La marchandisation se produit lorsque les biens, les services et même les relations humaines sont réduites à des marchandises échangeables. Cette mentalité de marchandisation érode les liens sociaux et les relations interpersonnelles en encourageant les individus à voir les autres dabord comme des acheteurs ou des vendeurs potentiels plutôt que comme des êtres humains.
<b>La Culture de la Consommation:</b> Le capitalisme pousse à une culture de la consommation qui met en avant la recherche de possessions matérielles et de gratification immédiate. Cette culture entretient un environnement de consommation individualiste où le bonheur et lidentité personnelles dépendent de lachat de produits. La recherche permanente de consommation isole les individus en leur faisant préférer laccumulation matérielle aux connexions sociales et aux expériences communes.
<b>Les Inégalités Sociales:</b> Les systèmes capitalistes entretiennent les inégalités sociales fondées sur la richesse, la classe, la couleur de peau et le genre. Ces inégalités entraînent la marginalisation, la discrimination et lexclusion de certains groupes, les tenant loin dune participation pleine et entière à la société. De telles divisions favorisent dautant plus latomisation sociale en créant des barrières à laction collective et en suscitant la méfiance entre différents groupes sociaux.
Latomisation capitaliste est un puissant outil nous empêchant de nous organiser et de défier les inégalités et les injustices inhérentes au système capitaliste.
### Les Externalités
Le terme dexternalité fait référence à lensemble des conséquences imprévues dactivités économiques qui ne sont pas reflétées dans le prix des biens et des services. Ces conséquences peuvent être aussi bien positives que négatives et impactent le plus souvent des individus ou des communautés qui ne sont pourtant pas directement impliquées dans les transactions économiques.
Dans le contexte capitaliste, les externalités surgissent suite à la recherche effrénée de profit et à la marchandisation des ressources et du travail. La production capitaliste vise à maximiser le profit en minimisant les coûts et en externalisant autant de dépenses que faire se peut. Cela conduit à une socialisation des coûts où les impacts négatifs de la production, tels que la pollution, lépuisement des ressources et la dislocation sociale, sont assumés par la société dans son ensemble plutôt que par les capitalistes eux-mêmes.
Les externalités sancrent dans la nature exploiteuse de la production capitaliste. La classe capitaliste, mue par limpératif daccumulation du capital, tend à prioriser les profits à court-terme plutôt que le bien-être environnemental et social à long-terme. La recherche du profit ne se soucie pas des limites écologiques de la planète ou du bien-être des travailleur/se/s et des communautés.
Par exemple, les externalités environnementales découlent de lextraction incessante des ressources naturelles et de la génération de pollution et de déchets, inhérentes au mode de production capitaliste. Ces externalités, telles que la pollution de lair et de leau, la déforestation et le dérèglement climatique, ont des conséquences considérables impactant les écosystèmes, la santé publique et les générations futures. Cependant, les coûts de ces externalités ne sont pas internalisés par les capitalistes mais plutôt remis à la charge de la société et de lenvironnement.
De la même manière, les externalités sociales découlent des relations dexploitation du capitalisme. La recherche du profit mène à lexploitation et à laliénation des travailleur/se/s ainsi quau déracinement des communautés. Des salaires bas, des mauvaises conditions de travail ou encore des emplois précaires sont autant dexternalités sociales qui résultent de la centralité de la maximisation du profit pour le système capitaliste. Ces externalités contribuent aux inégalités, à la pauvreté et à lérosion de la cohésion sociale.
Comme nous pouvons le voir, les externalités ne sont pas des conséquences accidentelles mais bien inhérentes au mode de production capitaliste. Les capitalistes sont mus par limpératif daccumuler du capital, ce qui requiert une externalisation des coûts et une exploitation du travail et des ressources.
### LImpérialisme
Limpérialisme est une caractéristique inhérente au système capitaliste, motivée par la nécessité quont les capitalistes détendre les marchés, davoir accès à une force de travail moins chère et dexploiter les ressources pour une maximisation des profits. Les puissances impérialistes, typiquement des nations capitalistes avancées, cherchent à contrôler et à extraire la richesse de régions moins développées à travers des mécanismes tels que la colonisation, le néocolonialisme et la dépendance économique.
Limpérialisme engendre des inégalités mondiales au travers de plusieurs mécanismes. Tout dabord, il instaure une relation dexploitation entre les nations dominantes et les nations subordonnées, les premières extorquant la plus-value des secondes. Les nations capitalistes avancées exploitent la force de travail et les ressources de pays moins développés, accordant des salaires bas et épuisant les ressources naturelles.
De plus, limpérialisme perpétue un échange inégal au sein du commerce mondial. Les nations dominantes imposent des cadres commerciaux défavorables afin de sassurer que les matériaux bruts et les marchandises des pays sous-développés soient sous-évaluées, tout en augmentant le prix des biens manufacturés provenant des pays dominants pour quils soient vendus plus chers. Ce phénomène conduit à un transfert net des richesses de la périphérie vers le centre du capitalisme mondialisé, accentuant plus encore les inégalités à léchelle du globe.
Limpérialisme renforce également la domination politique et militaire. En effet, les nations puissantes se servent de leur force économique pour exercer un contrôle sur les nations plus faibles en influençant leurs gouvernements, leurs politiques et le devenir de leurs ressources, tout cela afin de favoriser leurs propres intérêts. Ce contrôle est maintenu au moyen dinterventions militaires, dingérence politique et de létablissement dinstitutions internationales qui favorisent les intérêts des puissances impérialistes.
## Le Socialisme Libertaire
### Ses Principes Clés
Le socialisme libertaire est une philosophie politique et économique qui offre une alternative aux systèmes capitalistes et davant-gardes traditionnels. Prise de décision réellement démocratique, théorie socialiste et solidarité sont autant de piliers de cette pensée riche.
Le socialisme libertaire repose sur ces trois principes clés:
<b>La Décentralisation du Pouvoir:</b> Nous cherchons à démanteler les structures de pouvoir centralisées et à répartir lautorité décisionnelle au niveau local, afin de sassurer que nos communautés aient lautonomie nécessaire à leur auto-administration. Nous militons pour la participation active de chacun et chacune dentre nous à un processus politique qui nous accorde une voix dans la prise de décision et les mesures qui affectent nos vies.
<b>Un Mode de Production Socialiste:</b> Nous voulons parvenir à une justice économique en nous élevant contre la concentration de la richesse et du pouvoir mise entre les mains de quelques uns que permet le système capitaliste. Nous visons le socialisme, cest-à-dire un système où les moyens de production appartiennent directement aux travailleur/se/s.
<b>LEntraide:</b> Nous reconnaissons la valeur intrinsèque de la communauté et visons à développer les relations basées sur lentraide et le soin mutuel. Par lentraide, nous et nos communautés nous évertuons ensemble à satisfaire nos besoins communs, que ce soit en fournissant de la nourriture, un abri, du soin, de léducation ou dautres ressources essentielles à ceux et celles qui en ont besoin.
### La Décentralisation du Pouvoir et la Démocratie Directe
La Décentralisation se donne pour but de démanteler les structures de pouvoir centralisées et de permettre aux communautés locales de se gouverner elles-mêmes de manière autonome, tandis que la démocratie directe insiste sur limplication active des individus dans la prise de décision, en se passant de représentants intermédiaires. Ces deux principes nous permettent de participer directement à la conception des politiques et à la répartition des ressources selon les besoins propres à chaque communauté. La décentralisation du pouvoir fondée sur la démocratie directe nous apporte les avantages suivants:
<b>LÉmancipation et la Réappropriation:</b> La participation directe inculque à tous et à toutes un sentiment de réappropriation et démancipation. Elle accroît notre compréhension des responsabilités collectives et développe un plus fort sentiment de devoir civique et de cohésion entre les membres de la communauté.
<b>La Résolution des Conflits:</b> La démocratie directe fournit une plateforme pour dialoguer ouvertement, bâtir un consensus et résoudre paisiblement les conflits. Elle encourage léchange des idées, le compromis et la négociation, permettant de prendre des décisions qui jouissent dun soutien plus large et dainsi minimiser les divisions sociales.
<b>Une Cohésion Sociale Renforcée:</b> La décentralisation et la démocratie directe mettent en avant un sens de la communauté et des responsabilités communes. Elles nous encouragent à nous rassembler, à constituer un dialogue constructif et à travailler ensemble pour faire face aux défis communs, cimentant ainsi la cohésion sociale et lunité.
<b>Une Prise de Décision Réactive:</b> En distribuant le pouvoir au niveau local, la décentralisation mène à une gouvernance plus réactive puisque nous, les décisionnaires, sommes directement concerné/e/s par les conséquences de nos actes.
<b>La Protection contre lAutoritarisme:</b> En distribuant le pouvoir et lautorité décisionnelle, on empêche la concentration de pouvoir entre les mains de quelques individus ou institutions, instaurant ainsi un garde-fou contre lautoritarisme.
Pour conclure, la combinaison dun pouvoir décentralisé et de la démocratie directe offre de nombreux avantages. En adoptant ces principes, nous pouvons développer un système qui prenne en compte les besoins et les intérêts de toutes et tous.
### Le Mode de Production Socialiste
En tant que socialistes, nous militons pour un autre modèle économique où les moyens de production, tels que les usines, la terre ou encore les machines, seraient contrôlés par les travailleur/se/s mêmes. Le but est de sassurer que nous, les travailleur/se/s, ayons un intérêt direct à notre travail et notre mot à dire dans les décisions qui affectent nos vies et les communautés où nous évoluons.
<b>LÉmancipation des Travailleur/se/s:</b> Sous le socialisme, nous devenons des parties prenantes actives et volontaires au processus économique. Nous avons une voix dans la détermination des conditions de travail, des salaires et dans la distribution des ressources. Le socialisme élimine les relations dexploitation entre capitalistes et travailleur/se/s. Cela nous permet de prendre le contrôle sur notre travail et de contribuer au bien-être collectif de la société
<b>SÉlever contre lExploitation:</b> Dans un système socialiste, la plus-value créée par notre travail nest pas siphonnée par une classe capitaliste mais plutôt réinvestie ou distribuée au profit de tous les travailleur/se/s. Ce changement empêche les déséquilibres de pouvoir et permet de sassurer que les fruits de notre labeur seront partagés équitablement.
<b>La Solidarité Collective:</b> Le socialisme met en valeur limportance de la solidarité collective et de la coopération. En remplaçant la compétition par la coopération, le socialisme nous incite à nous rassembler, à partager notre savoir et à répondre collectivement aux défis qui simposent à nous. Ce sens de la solidarité nourrit un sentiment dappartenance et dun objectif collectif qui contribuent à cultiver un environnement de travail plus respectueux et plus harmonieux.
En somme, le socialisme offre une vision dune organisation économique rendant possible notre émancipation, luttant contre lexploitation et mettant en avant la solidarité collective. En tant quil insiste sur la coopération et la prospérité commune, le socialisme offre un cadre alternatif qui cherche à résoudre les problèmes systémiques et les inégalités inhérentes aux économies capitalistes.
### LEntraide
LEntraide est un principe fondamental de la pensée et de la pratique socialistes. Elle met laccent sur le pouvoir de la solidarité et de la coopération dans la satisfaction de nos besoins. Dans une société socialiste, lentraide devient la pierre angulaire de nos relations sociales qui nous conduit à apporter soutien, aide et ressources à ceux et celles qui en ont besoin, sans rien attendre directement en retour, sur la base du principe de solidarité.
<b>La Solidarité en Action:</b> Lentraide entretient un sentiment privilégié de solidarité et dinterconnexion entre les individus. Elle reconnaît que notre bien-être est socialement dépendant et quen nous soutenant les un/e/s les autres, nous pouvons prospérer collectivement.
<b>LÉmancipation Communautaire:</b> Lentraide nous émancipe, nous et nos communautés, en encourageant la participation et la prise de décision actives. Plutôt que de nous reposer sur des institutions externes ou des structures hiérarchiques, lentraide nous permet de reprendre le contrôle sur nos vies et de façonner collectivement le monde dans lequel nous voulons vivre. En travaillant ensemble, nous acquérons un sentiment dimplication, nous nous ressaisissons de notre autonomie et nous bâtissons des communautés résilientes, capables de satisfaire ses propres besoins sans dépendre de systèmes oppressifs.
<b>Transformer la Société:</b> Lentraide va bien plus loin que de simplement fournir un soulagement immédiat; elle vise à former des alternatives durables aux structures capitalistes. En sélevant contre la dépendance sur des entreprises motivées par le profit et contre la prise de décisions imposées par le haut, lentraide sert de catalyseur au changement radical, travaillant activement à la transformation des structures oppressives et en pavant la voie vers un monde plus juste, plus inclusif et plus empathique.
En définitive, lentraide est une composante essentielle de la pensée et de la pratique socialistes. Cest par lentraide uniquement que nous pouvons construire des solidarités, nous émanciper, lutter contre lexploitation et créer des structures alternatives qui mettront la considération du bien-être collectif au-dessus de toute autre.
### Comment Agir Maintenant?
<b>Par lÉducation et la Sensibilisation:</b> Une première étape importante est de séduquer soi-même au socialisme libertaire et à ses principes. En approfondissant sa compréhension de ses fondements et de ses valeurs centrales, on peut plus efficacement véhiculer sa vision auprès des autres. Lis des textes critiques, assiste à des ateliers ou prends part à des discussions afin de gagner en connaissance et mieux apprécier la théorie et la pratique socialiste libertaire.
<b>Par la Solidarité et lEntraide:</b> Développe une culture de solidarité et dentraide dans ta communauté. Entreprends des actions de soutien, de coopération et de soin collectif. Construis des réseaux dentraide qui fournissent ressources et assistance mutuelle. En favorisant la solidarité, nous renforçons les liens communautaires et nous nous opposons à la fragmentation sociale que nous inflige le capitalisme.
<b>Par lOrganisation Horizontale:</b> Implique-toi dans des mouvement horizontaux dinitiative citoyenne et dans des organisations qui reflètent les principes socialistes libertaires. Rejoins ou forme des groupes communautaires locaux et des groupes qui mettent en valeur la solidarité, légalité et la démocratie directe. Entreprends des actions collectives, du militantisme et des campagnes visant à répondre aux problèmes économiques, à favoriser lémancipation des travailleur/se/s et à lutter contre les structures oppressives.
<b>Par la Démocratie Participative:</b> Encourage et prends part aux modèles de démocratie participative de ta communauté. Assiste aux assemblées locales, aux réunions de voisinage ou aux conseils au sein de ta communauté. Incite les autres à devenir partie prenante des discussions, à exprimer leurs inquiétudes et à contribuer à modeler les mesures et les initiatives qui mettent laccent sur le bien-être collectif.
<b>Par lÉconomie Coopérative:</b> Soutiens et participe aux initiatives économiques coopératives. Les coopératives sont des entreprises possédées et contrôlées démocratiquement par les travailleur/se/s garantissant une distribution équitable des ressources et du pouvoir décisionnel. Songe à rejoindre ou à fonder des coopératives dans divers secteurs tels que lagriculture, le logement ou la production. En faisant la promotion de léconomie coopérative, nous court-circuitons le mode de production capitaliste et posons les fondements dun système économique plus équitable.
<b>Par la Participation aux Structures Existantes:</b> Même si nous luttons contre le système en place, il faut aussi entrer stratégiquement en relation avec celui-ci, que ce soit en militant pour des changements de politique, en mettant les élus devant leurs responsabilités, ou encore en participant aux processus démocratiques existants. En leur sein, lutte encore pour des réformes qui vont dans le sens des principes socialistes libertaires et qui contribuent plus généralement à loptique de la transformation du système.
## Notre Plan
Tu nas pas besoin de tembarquer tout/e seul/e dans le périple pour limplémentation de ces initiatives. Heureusement, il existe déjà une organisation composée de camarades avec les mêmes objectifs que toi, prêt/e/s à joindre leurs efforts aux tiens.
<b>Les Groupes:</b> Nous nous organisons en groupes en vue de militer et de fournir éducation et entraide. Notre objectif est de démontrer aux individus que le système politico-économique actuel nuit à notre bien-être, de leur présenter des approches alternatives et de mettre en œuvre le principe fondamental de lentraide afin de soulager le poids des épreuves que le capitalisme nous inflige.
<b>Les Communautés:</b> Nous établissons des communautés sur la base des principes socialistes libertaires, où les individus sont propriétaires de leur terre, de leurs maisons, et des moyens de production et où ils et elles peuvent prendre des décisions par le biais de la démocratie directe. Nous propageons graduellement notre monde socialiste, une communauté à la fois.
<b>Les Coopératives:</b> Nous formons des coopératives ouvrières pour financer les opérations de nos groupes et de nos communautés. Reconnaissant que le pouvoir économique influence le pouvoir politique, nous considérons létablissement de coopératives comme une des étapes initiales vers lavènement du socialisme.
<b>Les Partis:</b> Nous créons des partis politiques dans l'optique de promouvoir des réformes nous permettant plus facilement de mettre en oeuvre nos objectifs, de déplacer la fenêtre d'Overton ainsi que de gagner en popularité. Cependant, nous avons conscience que nous ne pourrons parvenir au socialisme libertaire par le biais des institutions qui luttent à son encontre.
<b>Les Syndicats:</b> Nous promouvons les syndicats qui émancipent et organisent les travailleurs et les travailleuses en militant pour un traitement et un salaire justes ainsi que pour une amélioration des conditions de travail. La lutte sur le lieu de travail est partie intégrante de notre stratégie dans l'avènement du socialisme libertaire.
En développant les initiatives mentionnées précédemment, nous nous efforçons de paver la voie à une société débarrassée de tout système de pouvoir oppressif et exploiteur et à linstauration de nouveaux systèmes fondés sur la coopération et la solidarité. Tout ce dont nous avons besoin, cest dune masse critique dindividus qui se rassemblent pour lutter conjointement contre loppression et lexploitation.

View File

@ -1,14 +0,0 @@
{
"orgName": "Socialistes Libertaires",
"manifesto": "Notre Manifeste",
"joinUs": "Nous Rejoindre",
"initiatives": "Nos Initiatives",
"groups": "Nos Groupes",
"communes": "Nos Communes",
"cooperatives": "Nos Coopératives",
"parties": "Nos Partis",
"tradeUnions": "Nos Syndicats",
"partners": "Nos Partenaires",
"login": "Connexion",
"profile": "Profil"
}

View File

@ -1,14 +0,0 @@
{
"parties": "Partis",
"p1": "Nous créons des partis politiques dans l'optique de promouvoir des réformes nous permettant plus facilement de mettre en oeuvre nos objectifs, de déplacer la fenêtre d'Overton ainsi que de gagner en popularité. Cependant, nous avons conscience que nous ne pourrons parvenir au socialisme libertaire par le biais des institutions qui luttent à son encontre.",
"subheading1": "Nos Partis",
"name": "Nom ",
"location": "Localisation ",
"members": "Membres ",
"website": "Site internet ",
"contact": "Contact ",
"description": "Description ",
"descriptionRoots": "Nous sommes une organisation libertaire basée en Irlande. Nous nous concentrons sur la reconstruction de l'infrastructure du pays, le développement d'un sentiment d'auto-administration, ainsi que sur la question du logement, de l'agro-industrie et des préoccupations de la jeunesse.",
"Party": "Parti",
"map-prompt": "Vous voulez figurer sur notre carte ? Contactez-nous !"
}

View File

@ -1,15 +0,0 @@
{
"heading": "Partenaires",
"p1": "Nous nous coordonnons avec des organisations et des initiatives qui correspondent à la mission que nous nous sommes donnée. Ensemble, nous constituons une force unie, mue par la même vision du monde, et dans laquelle nous ne laissons nulle place aux systèmes d'exploitation autoritaires mais où les systèmes promouvant l'équité et la démocratie peuvent s'épanouir librement.",
"subheading1": "Nos Partenaires",
"subheading2": "En ligne ",
"name": "Nom ",
"location": "Localisation ",
"website": "Site internet ",
"contact": "Contact ",
"description": "Description ",
"typeGaiasFall": "un lieu pour discuter",
"descriptionGaiasFall": "Gaia's Fall est un serveur qui met en avant les idéaux solarpunks, la lutte environnementale, l'anarchisme et l'anticapitalisme. Nous incitons à des débats respectueux, à des discussions théoriques et pratiques, et à la création de communautés centrées autour de l'idée de bâtir un monde meilleur.",
"map-prompt": "Vous voulez figurer sur notre carte ? Contactez-nous !"
}

View File

@ -1,11 +0,0 @@
{
"tradeUnions": "Syndicats",
"p1": "Les syndicats jouent un rôle clé dans la défense des droits et la protection des travailleurs et des travailleuses. Les syndicats font partie intégrante de notre organisation en permettant aux travailleurs et aux travailleuses de s'unir et de négocier collectivement de meilleurs salaires, de meilleures conditions de travail et des droits les protégeant plus efficacement. En favorisant la solidarité et en mobilisant dans l'optique de l'action collective, les syndicats contribuent à notre entreprise plus générale de démantelèment des systèmes oppressifs et à l'avènement d'un monde axé sur la prise de décisions décentralisée, la démocratie directe et l'autogestion ouvrière.",
"subheading1": "Nos Syndicats",
"location": "Localisation ",
"members": "Membres ",
"contact": "Contact ",
"TradeUnion": "Syndicat ",
"tradeUnion": "syndicat ",
"map-prompt": "Vous voulez figurer sur notre carte ? Contactez-nous !"
}

View File

@ -1,5 +1,5 @@
{ {
"top": "Наша организация представляет собой децентрализованную федерацию, основанную на принципе свободного объединения. Она состоит из многих групп людей, объединенных вокруг цели избавления от эксплуататорских политико-экономических систем. Мы стремимся заменить их либертарными социалистическими системами, основанными на децентрализации, прямой демократии и собственности рабочих на средства производства, с целью создания справедливого, демократического и устойчивого мира путем прекращения эксплуатации людей и природы.", "top": "Наша организация представляет собой децентрализованную федерацию, основанную на принципе свободного объединения. Она состоит из многих групп людей, объединенных вокруг цели свержения эксплуататорских политико-экономических систем. Мы стремимся заменить их либертарными социалистическими системами, основанными на децентрализации, прямой демократии и собственности рабочих на средства производства, с целью создания справедливого, демократического и устойчивого мира путем прекращения эксплуатации людей и природы.",
"groupsTitle": "ГРУППЫ", "groupsTitle": "ГРУППЫ",
"groupsText": "Мы организуем группы в целях образования, защиты наших интересов и взаимопомощи. Наша цель — продемонстрировать людям, как нынешние политико-экономические системы пагубно влияют на наше благополучие, представить им альтернативные варианты и заниматься взаимопомощью, чтобы сделать жизнь при капитализме легче.", "groupsText": "Мы организуем группы в целях образования, защиты наших интересов и взаимопомощи. Наша цель — продемонстрировать людям, как нынешние политико-экономические системы пагубно влияют на наше благополучие, представить им альтернативные варианты и заниматься взаимопомощью, чтобы сделать жизнь при капитализме легче.",
"communesTitle": "КОММУНЫ", "communesTitle": "КОММУНЫ",
@ -7,9 +7,7 @@
"cooperativesTitle": "КООПЕРАТИВЫ", "cooperativesTitle": "КООПЕРАТИВЫ",
"cooperativesText": "Мы формируем рабочие кооперативы для финансирования операций наших групп и коммун, а также формирования основы новой социалистической экономики. Признавая, что экономическая власть влияет на политическую власть, мы считаем создание кооперативов одним из первых шагов на пути к социализму.", "cooperativesText": "Мы формируем рабочие кооперативы для финансирования операций наших групп и коммун, а также формирования основы новой социалистической экономики. Признавая, что экономическая власть влияет на политическую власть, мы считаем создание кооперативов одним из первых шагов на пути к социализму.",
"partiesTitle": "ПАРТИИ", "partiesTitle": "ПАРТИИ",
"partiesText": "Мы создаем политические партии, чтобы продвигать реформы, которые позволят легче достичь наших целей, сдвигать окно Овертона и увеличивать нашу популярность. Однако мы признаем, что мы не можем достичь либертарного социализма с помощью институтов, действующих против наших целей.", "partiesText": "Мы создаем политические партии, чтобы продвигать реформы, которые позволят легче достичь наших целей, сдвигать окно Овертона и увеличивать нашу популярность. Однако мы признаем, что мы не можем достичь либертарианского социализма с помощью институтов, действующих против наших целей.",
"tradeUnionsTitle": "ПРОФСОЮЗЫ",
"tradeUnionsText": "Мы поддерживаем профсоюзы, которые дают возможность работникам коллективно выступать за справедливое обращение, справедливую заработную плату и улучшение условий труда. Борьба на месте работы — неотъемлемая часть нашей стратегии по достижению либертарного социализма.",
"findUs": "Найди нас", "findUs": "Найди нас",
"whatNow": "Что теперь?", "whatNow": "Что теперь?",
"joinUs": "Присоединяйся", "joinUs": "Присоединяйся",

View File

@ -2,19 +2,19 @@
## Капитализм ## Капитализм
### Основные принципы ### Основные принципы
Капитализм - политическая и экономическая система, рекламируемая как маяк свободы и возможностей, привела к эксплуатации большинства, накоплению богатства и власти меньшинством и потере достоинства для всех. Если мы посмотрим на основы данной системы, то причины этого станут очевидными. Капитализм - политическая и экономическая система, рекламируемая как маяк свободы и возможностей, привела к эксплуатации многих, накоплению богатства и власти меньшинством и потере достоинства для всех. Если мы посмотрим на основы данной системы, то причины этого станут очевидными.
<b>Погоня за прибылью:</b> Капитализм характеризуется неустанной погоней за частной прибылью как основным мотиватором экономической деятельности. В этой системе прибыль для владельцев бизнеса имеет приоритет над соображениями человеческого благополучия, социальных потребностей и экологической устойчивости. <b>Погоня за прибылью: </b> Капитализм характеризуется неустанной погоней за частной прибылью как основным мотиватором экономической деятельности. В этой системе прибыль для владельцев бизнеса имеет приоритет над соображениями человеческого благополучия, социальных потребностей и экологической устойчивости.
Фундаментальная нужда в погоне за прибылью бизнесами в сочетании с тем, что владельцы по своей природе не представляют своих рабочих и с тем, что их классовые интересы прямо противоположны, приводит к мерам, которые одновременно перекладывают издержки на потребителей, рабочих и окружающую среду и извлекают из них прибавочную ценность (новая ценность созданная руками рабочих, плоды труда). Дисбаланс власти в этой системе приводит к эксплуататорским и классовым отношениям между собственниками и несобственниками, поскольку интересы людей не представлены пропорционально их участию и важности в системе. Это не только наносит ущерб интересам большей части общества, не принадлежащей к классу собственников, но и менее эффективно создает прибавочную ценность, которую владельцы затем извлекают из бизнеса. Ключ к неудачам этой ориентированной на прибыль системы лежит в концепции частной собственности. Фундаментальная нужда в погоне за прибылью бизнесами в сочетании с тем, что владельцы по своей природе не представляют своих рабочих и с тем, что их классовые интересы прямо противоположны, приводит к мерам, которые одновременно перекладывают издержки на потребителей, рабочих и окружающую среду и извлекают из них прибавочную цену (новая ценность созданная руками рабочих, плоды труда). Дисбаланс власти в этой системе приводит к эксплуататорским и классовым отношениям между собственниками и несобственниками, поскольку интересы людей не представлены пропорционально их участию и важности в системе. Это не только наносит ущерб интересам большей части общества, не принадлежащей к классу собственников, но и менее эффективно создает прибавочную цену, которую владельцы затем извлекают из бизнеса. Ключ к неудачам этой ориентированной на прибыль системы лежит в концепции частной собственности.
<b>Частная собственность на средства производства:</b> Основополагающим принципом капитализма является «частная собственность на средства производства»; это означает наличие класса людей, владеющих монополией на ресурсы, средства, инструменты и пространство, необходимые для производства товаров и услуг в обществе. Эта концентрация собственности приводит к значительному дисбалансу сил, поскольку класс капиталистов обладает монополией на контроль над обществом в целом, в то время как большинство населения (рабочий класс) вынуждено полагаться на продажу своего труда классу собственников (капиталистов) для заработка на жизнь. Эта непропорциональная распределение собственности в обществе приводит к фундаментальному разделению социальных интересов между теми, кто это общество контролирует, и подавляющим большинством, кто в нем живет. Это антагонистическое отношение создает меньше власти не только для тех, кого эксплуатируют, но и для общества в целом, поскольку для поддержания этой динамики между собственниками и несобственниками рабочий (и потребительский) класс должен оставаться разделенным, дезорганизованным и бессильным вне того, что служит интересам поддержания этих паразитических отношений. Это искусственно ограничивает выбор общества как коллективно, так и индивидуально, и создает искусственные разделения среди людей, не позволяя нам объединить усилия для достижения общих целей, где единственное, что будет нас ограничивать, так это материальные условия в том мире, где мы живем, наши собственные силы и решения. <b>Частная собственность на средства производства:</b> Основополагающим принципом капитализма является «частная собственность на средства производства»; это означает наличие класса людей, владеющих монополией на ресурсы, средства, инструменты и пространство, необходимые для производства товаров и услуг в обществе. Эта концентрация собственности приводит к значительному дисбалансу сил, поскольку класс капиталистов обладает монополией на контроль над обществом в целом, в то время как большинство населения (рабочий класс) вынуждено полагаться на продажу своего труда классу собственников (капиталистов) для заработка на жизнь. Эта непропорциональная распределение собственности в обществе приводит к фундаментальному разделению социальных интересов между теми, кто это общество контролирует, и подавляющим большинством, кто в нем живет. Это антагонистическое отношение создает меньше власти не только для тех, кого эксплуатируют, но и для общества в целом, поскольку для поддержания этой динамики между собственниками и несобственниками рабочий (и потребительский) класс должен оставаться разделенным, дезорганизованным и бессильным вне того, что служит интересам поддержания этих паразитических отношений. Это искусственно ограничивает выбор общества как коллективно, так и индивидуально, и создает искусственные разделения среди людей, не позволяя нам объединить усилия для достижения общих целей, где единственное, что будет нас ограничивать, так это материальные условия в том мире, где мы живем, наши собственные силы и решения.
<b>Эксплуатация труда:</b> В рамках капитализма преследование прибыли определяет отношения между классом капиталистов и классом рабочих. Класс капиталистов стремится максимизировать свою прибыль, извлекая прибавочную ценность из труда рабочих. Это происходит через систему наемного труда, когда работники получают оплату, которая составляет лишь часть созданной ими ценности. Разница между созданной рабочими ценностью и их заработной платой остается у класса капиталистов в качестве прибыли. Эти эксплуатационные отношения, заложенные в капиталистическом способе производства, поддерживают социальное и экономическое неравенство, поскольку рабочие лишаются справедливой доли в созданном ими богатстве. <b>Эксплуатация труда: </b> В рамках капитализма преследование прибыли определяет отношения между классом капиталистов и классом рабочих. Класс капиталистов стремится максимизировать свою прибыль, извлекая прибавочную ценность из труда рабочих. Это происходит через систему наемного труда, когда работники получают оплату, которая составляет лишь часть созданной ими ценности. Разница между созданной рабочими ценностью и их заработной платой остается у класса капиталистов в качестве прибыли. Эти эксплуатационные отношения, заложенные в капиталистическом способе производства, поддерживают социальное и экономическое неравенство, поскольку рабочие лишаются справедливой доли в созданном ими богатстве.
Точно так же, как дом нуждается в хорошем фундаменте, чтобы прочно стоять, любая система, которая направляет нашу жизнь, нуждается в прочной основе, поддерживающей ее структуру. К сожалению, капитализм построен на плохом фундаменте. Это приводит к неравенству, экономической эксплуатации, подрыву общественного благосостояния и отчуждению. Ясно, что без устранения этих основных проблем сама система не сможет обеспечить справедливое и равноправное общество. Точно так же, как дом нуждается в хорошем фундаменте, чтобы прочно стоять, любая система, которая направляет нашу жизнь, нуждается в прочной основе, поддерживающей ее структуру. К сожалению, капитализм построен на плохом фундаменте. Это приводит к неравенству, экономической эксплуатации, подрыву общественного благосостояния и отчуждению. Ясно, что без устранения этих основных проблем сама система не сможет обеспечить справедливое и равноправное общество.
### Цена, которую мы платим ### Цена, которую мы платим
Капитализм имеет множество укоренившихся системных проблем, которые так или иначе влияют на благополучие каждого отдельного участника. Капитализм имеет множество укоренившихся системных проблем, которые так или иначе влияют на благополучие каждого отдельного участника.
<b>Ощущение отчуждения от работы:</b> В поиске прибыли и конкуренции, капитализм разрушает врожденную связь с нашей работой, что оставляет нас с ощущением отчуждения. Когда прибыль становится главной целью, мы оказываемся всего лишь винтиками в экономическом механизме. Это отчуждение от нашего труда уничтожает наше чувство цели и удовлетворения, подавляет наш творческий и личностный потенциал. Ощущение отчуждения от работы: В поиске прибыли и конкуренции, капитализм разрушает врожденную связь с нашей работой, что оставляет нас с ощущением отчуждения. Когда прибыль становится главной целью, мы оказываемся всего лишь винтиками в экономическом механизме. Это отчуждение от нашего труда уничтожает наше чувство цели и удовлетворения, подавляет наш творческий и личностный потенциал.
<b>Эксплуатация нашего труда:</b> В основе капитализма лежит присвоение нашего труда. Предоставляя нам заработную плату, которая не соответствует реальной ценности, которую мы произвели, капиталистический класс ворует труд рабочего класса. Эта эксплуатация закрепляет экономическое неравенство, так как мы лишаемся справедливой доли плодов своего труда. В результате возникает разрыв в уровне благосостояния между классами, что вызывает ощущение беспомощности и несправедливости, дополнительно увеличивая пропасть между имущими и неимущими. Эксплуатация нашего труда: В основе капитализма лежит присвоение нашего труда. Предоставляя нам заработную плату, которая не соответствует реальной ценности, которую мы произвели, капиталистический класс ворует труд рабочего класса. Эта эксплуатация закрепляет экономическое неравенство, так как мы лишаемся справедливой доли плодов своего труда. В результате возникает разрыв в уровне благосостояния между классами, что вызывает ощущение беспомощности и несправедливости, дополнительно увеличивая пропасть между имущими и неимущими.
<b>Социальная фрагментация:</b> Основанный на беспрекословной гонке за личной выгодой, фундамент капитализма разрушает нашу социальную связь друг с другом и не позволяет нам сотрудничать с друг другом. Конкурентное мышление, поощряемое капитализмом, ставит собственные интересы выше коллективного благосостояния, разрушая структуру нашего общества. В этой гиперконкурентной среде наши социальные связи рвутся, эмпатия ослабевает, а наши сообщества становятся раздробленными. Социальная фрагментация: Основанный на беспрекословной гонке за личной выгодой, фундамент капитализма разрушает нашу социальную связь друг с другом и не позволяет нам сотрудничать с друг другом. Конкурентное мышление, поощряемое капитализмом, ставит собственные интересы выше коллективного благосостояния, разрушая структуру нашего общества. В этой гиперконкурентной среде наши социальные связи рвутся, эмпатия ослабевает, а наши сообщества становятся раздробленными.
</b>Культура потребительства и материализма:</b> В капитализме процветает культура потребления и материализма, приравнивающая нашу личную ценность к накоплению материальных благ. Эта бесконечная гонка за материальным достатком приводит нас к долгам, обостряет наши взаимоотношения и оставляет нас с пустым чувством удовлетворения. Зацикленность на материальном богатстве препятствует стремлению к личному развитию, значимым опытам и настоящему благополучию, уводя нас в ловушку бесконечного потребления. Культура потребительства и материализма: В капитализме процветает культура потребления и материализма, приравнивающая нашу личную ценность к накоплению материальных благ. Эта бесконечная гонка за материальным достатком приводит нас к долгам, обостряет наши взаимоотношения и оставляет нас с пустым чувством удовлетворения. Зацикленность на материальном богатстве препятствует стремлению к личному развитию, значимым опытам и настоящему благополучию, уводя нас в ловушку бесконечного потребления.
<b>Деградация окружающей среды:</b> Жажда непрерывной прибыли в капитализме игнорирует долгосрочное благополучие нашей планеты. Краткосрочные экономические интересы имеют приоритет над экологической устойчивостью. Практики капитализма способствуют истощению ресурсов, загрязнению окружающей среды и изменению климата, что подвергает нашу экологическую благосостояние серьезной угрозе. Эти негативные последствия для окружающей среды отражаются на наших сообществах, влияют на наше физическое и психическое благополучие. Деградация окружающей среды: Жажда непрерывной прибыли в капитализме игнорирует долгосрочное благополучие нашей планеты. Краткосрочные экономические интересы имеют приоритет над экологической устойчивостью. Практики капитализма способствуют истощению ресурсов, загрязнению окружающей среды и изменению климата, что подвергает нашу экологическую благосостояние серьезной угрозе. Эти негативные последствия для окружающей среды отражаются на наших сообществах, влияют на наше физическое и психическое благополучие.
Ценности и практика, укоренившиеся в капитализме, выходят далеко за рамки экономических соображений, проникая во все аспекты нашей жизни. Ценности и практика, укоренившиеся в капитализме, выходят далеко за рамки экономических соображений, проникая во все аспекты нашей жизни.
## Государственность ## Государственность
@ -129,4 +129,5 @@
<b>Группы:</b> Мы организуем группы в целях обучения, защиты интересов и взаимопомощи. Наша цель — продемонстрировать людям, как нынешние политико-экономические системы пагубно влияют на наше благополучие, представить им альтернативные подходы и оказать взаимопомощь, чтобы облегчить проблемы жизни при капитализме. <b>Группы:</b> Мы организуем группы в целях обучения, защиты интересов и взаимопомощи. Наша цель — продемонстрировать людям, как нынешние политико-экономические системы пагубно влияют на наше благополучие, представить им альтернативные подходы и оказать взаимопомощь, чтобы облегчить проблемы жизни при капитализме.
<b>Коммуны:</b> Мы создаем коммуны на основе либертарных социалистических принципов, где люди владеют своей землей, домами и средствами производства, а также принимают решения, используя прямую демократию. Мы постепенно, по одной коммуне, расширяем наш социалистический мир. <b>Коммуны:</b> Мы создаем коммуны на основе либертарных социалистических принципов, где люди владеют своей землей, домами и средствами производства, а также принимают решения, используя прямую демократию. Мы постепенно, по одной коммуне, расширяем наш социалистический мир.
<b>Кооперативы:</b> Мы создаем рабочие кооперативы для финансирования деятельности наших групп и коммун. Признавая, что экономическая власть влияет на политическую власть, мы считаем создание кооперативов одним из первых шагов на пути к социализму. <b>Кооперативы:</b> Мы создаем рабочие кооперативы для финансирования деятельности наших групп и коммун. Признавая, что экономическая власть влияет на политическую власть, мы считаем создание кооперативов одним из первых шагов на пути к социализму.
Развитие вышеупомянутых инициатив прокладывает четкий путь к избавлению от эксплуататорских и репрессивных систем власти и созданию новых систем, основанных на сотрудничестве и солидарности. Все, что нам нужно, — это собрать критическую массу людей, чтобы противостоять угнетению и эксплуатации. Развитие вышеупомянутых инициатив прокладывает четкий путь к избавлению от эксплуататорских и репрессивных систем власти и созданию новых систем, основанных на сотрудничестве и солидарности. Все, что нам нужно, — это собрать критическую массу людей, чтобы противостоять угнетению и эксплуатации.

View File

@ -7,8 +7,5 @@
"communes": "Коммуны", "communes": "Коммуны",
"cooperatives": "Кооперативы", "cooperatives": "Кооперативы",
"parties": "Партии", "parties": "Партии",
"partners": "Партнеры", "partners": "Партнеры"
"tradeUnions": "Профсоюзы",
"login": "Войти",
"profile": "Профиль"
} }

View File

@ -1,11 +0,0 @@
{
"tradeUnions": "Профсоюзы",
"p1": "Профсоюзы играют ключевую роль в защите прав и благосостояния трудящихся. Профсоюзы составляют неотъемлемую часть нашей организации, позволяя работникам объединяться и вести коллективные переговоры о справедливой заработной плате, лучших условиях труда и улучшенных трудовых правах. Укрепляя солидарность и мобилизуя для коллективных действий, профсоюзы вносят свой вклад в нашу всеобъемлющую миссию по устранению эксплуататорских систем и установлению мира, основанного на децентрализованном принятии решений, прямой демократии и самоуправлении рабочих.",
"subheading1": "Наши профсоюзы",
"location": "Локация",
"members": "Участники",
"contact": "Контакт",
"TradeUnion": "Профсоюз",
"tradeUnion": "профсоюз",
"map-prompt": "Хочешь оказаться на нашей карте? Напиши нам!"
}

View File

@ -10,6 +10,7 @@ import watch from "rollup-plugin-watch";
const production = !process.env.ROLLUP_WATCH; const production = !process.env.ROLLUP_WATCH;
function serve() { function serve() {
let server; let server;

View File

@ -1,140 +0,0 @@
<svelte:options tag="admin-panel" />
<script>
// Import statements
import { onMount, getContext } from 'svelte'
import { writable } from 'svelte/store'
import { getData, sendData } from "/js/libraries/serverTools.js"
//Import components
import "/js/components/select-component.js"
import "/js/components/switch-component.js"
import "/js/components/pane-aligner.js"
//Export statements
// Main code
let section
let requests_verification = []
let loaded = writable(0)
let keyRequests = 0
let numLoaded = 1
let mainPane
let context = getContext("profile-component")
function requests_callback(response) {
let parsed = JSON.parse(response)
requests_verification.push(...parsed)
loaded.update((val) => {
return val + 1
})
}
getData("/xx/get-unverified-users",requests_callback)
function approveRequest(ind,user_id) {
sendData("/xx/verify",{user_id: user_id})
requests_verification.splice(ind,1)
keyRequests = keyRequests + 1
}
function addVerified() {
getData("/xx/add-verified-groups",() => "")
}
onMount(() => {
})
</script>
{#key $loaded}
{#if $loaded==numLoaded}
<pane-aligner>
<div bind:this={mainPane} slot="main">
<h3>User verification</h3>
<section bind:this={section} class="entries-section">
{#key keyRequests}
{#each requests_verification as req,ind}
<div>
<div class="change-field-line">
<span>{req.email}</span>
<div class="request-button-wrapper">
<button on:click={() => approveRequest(ind,req.user_id)} class="default-button approve-button">Approve</button>
</div>
</div>
</div>
{/each}
{/key}
<button on:click={addVerified} id="add-verified-button" class="default-button">Add verified pins</button>
</section>
</div>
</pane-aligner>
{/if}
{/key}
<style>
@import '/css/common.css';
.request-button-wrapper {
display: flex;
gap: 1rem;
}
.default-button {
height: 2.7rem;
padding: 0rem 1rem;
font-family: var(--sans-serif,sans-serif);
font-size: 1.15rem;
color: white;
background-color: var(--red);
border-color: var(--red);
border-radius: 0.5rem;
}
.approve-button {
margin-top: -0.45rem;
}
#add-verified-button {
margin-top: 1rem;
}
.entries-section {
margin-bottom: 1rem;
}
.entries-section >div {
height: 3.5rem;
padding-bottom: 0.75rem;
padding-top: 0.75rem;
border-bottom: 0.14rem solid;
border-color: #cdcdcd;
}
/* add padding to every line to center the diving line*/
.entries-section >div:last-child {
padding-bottom: 0.75rem;
padding-top: 0.75rem;
border-bottom: 0;
}
/*---Change field-------------------------------------------------------------------*/
.change-field-line {
display: flex;
justify-content: space-between;
}
/*---General section-----------------------------------------------------------*/
h3 {
margin-bottom: 0.5rem;
}
span {
font-family: var(--sans-serif,sans-serif);
font-size: 1.15rem;
}
</style>

View File

@ -25,7 +25,6 @@
let googleButton let googleButton
let parentProps = getContext("auth") let parentProps = getContext("auth")
let locale = "en"
function renderGoogle() { function renderGoogle() {
if (parentProps.googleInit) { if (parentProps.googleInit) {
@ -81,7 +80,7 @@
<input bind:this={rememberMe} type="checkbox" id="remember-me-checkbox"><label id="remember-me-label" for="passwordInput">remember me</label> <input bind:this={rememberMe} type="checkbox" id="remember-me-checkbox"><label id="remember-me-label" for="passwordInput">remember me</label>
</div> </div>
<button class="auth-button" on:click="{() => AuthTools.login(msgs,inputs)}">Log in</button> <button class="auth-button" on:click="{() => AuthTools.login(msgs,inputs)}">Log in</button>
<a id="forgot-password" href={"/"+locale+"/reset-password"}>Forgot password?</a> <a id="forgot-password" href="forgot-password">Forgot password?</a>
<!-- <!--
<hr class="auth-line"> <hr class="auth-line">
<div class="auth-methods-group"> <div class="auth-methods-group">

View File

@ -1,47 +0,0 @@
<svelte:options tag="reset-password-component" />
<script>
// Import statements
import { onMount } from 'svelte'
// Export statements
// Main code
onMount(() => {
})
</script>
<div id="container">
<div id="text-container">
<p>Contact us at our Discord Server. We are going to send a new password to the email that you used for registration.</p>
</div>
</div>
<style>
@import '/css/common.css';
#text-container {
position: relative;
max-width: calc(100vw - 4rem);
margin: auto;
}
#container {
margin: auto;
max-width: 800px;
margin-top: 1rem;
margin-bottom: 4rem;
}
#container p {
text-align: justify;
}
</style>

View File

@ -109,7 +109,7 @@
<div id="remember-me"> <div id="remember-me">
<input bind:this={rememberMe} type="checkbox" id="remember-me-checkbox"><label id="remember-me-label" for="passwordInput">remember me</label> <input bind:this={rememberMe} type="checkbox" id="remember-me-checkbox"><label id="remember-me-label" for="passwordInput">remember me</label>
</div> </div>
<button class="auth-button" on:click="{AuthTools.signup(msgs,inputs,AuthTools.toLandingPage)}">Sign up</button> <!--() => AuthTools.signup(msgs,inputs,AuthTools.toLandingPage)--> <button class="auth-button" on:click="{showDialog}">Sign up</button> <!--() => AuthTools.signup(msgs,inputs,AuthTools.toLandingPage)-->
<p id="forgot-password"></p> <p id="forgot-password"></p>
<!-- <!--
<hr class="auth-line"> <hr class="auth-line">

View File

@ -15,7 +15,7 @@
let mapContainer let mapContainer
function createMap(center,zoom) { function createMap(center,zoom) {
map = L.map(mapContainer, { let map = L.map(mapContainer, {
center: center, center: center,
zoom: zoom, zoom: zoom,
}); });

View File

@ -77,6 +77,7 @@
<h4 class="country-name">{getCountry(name)}</h4> <h4 class="country-name">{getCountry(name)}</h4>
<div class="country-block"> <div class="country-block">
{#each entries as entry} {#each entries as entry}
{console.log(entry)}
<div class="location-info"> <div class="location-info">
<div class="img-general-info"> <div class="img-general-info">
<div> <div>

View File

@ -53,7 +53,7 @@ footer {
position: relative; position: relative;
bottom: 0; bottom: 0;
width: 100%; width: 100%;
height: 13.2875rem; height: auto;
background: var(--gray); background: var(--gray);
border-top: var(--red) solid 0.5rem; border-top: var(--red) solid 0.5rem;
} }

View File

@ -6,7 +6,6 @@
import { writable } from 'svelte/store'; import { writable } from 'svelte/store';
import { loadLocaleContent, getData, sendData } from "/js/libraries/serverTools.js" import { loadLocaleContent, getData, sendData } from "/js/libraries/serverTools.js"
import { addMarkersEntries, translate } from "/js/libraries/mapTools.js" import { addMarkersEntries, translate } from "/js/libraries/mapTools.js"
import { validatePosNumber } from "/js/libraries/miscTools.js"
// Import components // Import components
import "/js/components/map-component.js" import "/js/components/map-component.js"
@ -370,7 +369,7 @@
<div id="members-input-wrapper" class="input-label-wrapper"> <div id="members-input-wrapper" class="input-label-wrapper">
<label for="members-input">Members: </label> <label for="members-input">Members: </label>
<div class="input-wrapper"> <div class="input-wrapper">
<input bind:this={membersInput} id="members-input" type="number" value={1} on:input={(event) => validatePosNumber(event,membersInput,10000)}> <input bind:this={membersInput} id="members-input" type="text" value={1}>
</div> </div>
</div> </div>
{/if} {/if}

View File

@ -43,10 +43,7 @@
function mapCallback(createMap,content,locale) { function mapCallback(createMap,content,locale) {
let map = createMap([22, 0],2) let map = createMap([22, 0],2)
let options = { addMarkersEntries(entries,entriesByCountry,map,content,locale,addGroupPinContent,"green")
enableCountryGrouping: true,
}
addMarkersEntries(entries,entriesByCountry,map,content,locale,addGroupPinContent,"green",options)
} }
function getCountry(x) { function getCountry(x) {
@ -81,13 +78,7 @@
<div class="location-info"> <div class="location-info">
<p><b>{$content.location}: </b>{getAddress(entry)}</p> <p><b>{$content.location}: </b>{getAddress(entry)}</p>
<p><b>{$content.members}: </b>{entry.members}</p> <p><b>{$content.members}: </b>{entry.members}</p>
{#if entry.contact.includes("@") && entry.contact.trim().split(" ").length==1} <p><b>{$content.contact}: </b><a href={entry.contact} target=;_blank; rel=noreferrer>{entry.contact}</a></p>
<p><b>{$content.contact}: </b><a href={"mailto:" + entry.contact} target=;_blank; rel=noreferrer>{entry.contact}</a></p>
{:else if entry.contact.includes("http")}
<p><b>{$content.contact}: </b><a href={entry.contact} target=;_blank; rel=noreferrer>{entry.contact}</a></p>
{:else}
<p><b>{$content.contact}: </b>{entry.contact}</p>
{/if}
</div> </div>
{/each} {/each}
</div> </div>

View File

@ -21,7 +21,6 @@
loadLocaleContent(content,"communes-component",loaded) loadLocaleContent(content,"communes-component",loaded)
loadLocaleContent(content,"cooperatives-component",loaded) loadLocaleContent(content,"cooperatives-component",loaded)
loadLocaleContent(content,"parties-component",loaded) loadLocaleContent(content,"parties-component",loaded)
loadLocaleContent(content,"trade-unions-component",loaded)
loadLocaleContent(content,"countries",loaded) loadLocaleContent(content,"countries",loaded)
let locale = loadLocaleContent(content,"join-us-component",loaded) let locale = loadLocaleContent(content,"join-us-component",loaded)
@ -49,27 +48,19 @@
getData("/assets/communes.json",(response) => callback(response,"communes")) getData("/assets/communes.json",(response) => callback(response,"communes"))
getData("/assets/cooperatives.json",(response) => callback(response,"cooperatives")) getData("/assets/cooperatives.json",(response) => callback(response,"cooperatives"))
getData("/assets/parties.json",(response) => callback(response,"parties")) getData("/assets/parties.json",(response) => callback(response,"parties"))
getData("/assets/trade-unions.json",(response) => callback(response,"tradeUnions"))
function mapCallback(createMap,content,locale) { function mapCallback(createMap,content,locale) {
let map = createMap([22, 0],2) let map = createMap([22, 0],2)
let options = { let groupsMarkersLayer = addMarkersEntries(entries["groups"],entriesByCountry["groups"],map,content,locale,addGroupPinContent,"green")
enableCountryGrouping: true, let communesMarkersLayer = addMarkersEntries(entries["communes"],entriesByCountry["communes"],map,content,locale,addCommunePinContent,"red")
} let coopsMarkersLayer = addMarkersEntries(entries["cooperatives"],entriesByCountry["cooperatives"],map,content,locale,addCoopPinContent,"blue")
let groupsMarkersLayer = addMarkersEntries(entries["groups"],entriesByCountry["groups"],map,content,locale,addGroupPinContent,"green",options) let partiesMarkersLayer = addMarkersEntries(entries["parties"],entriesByCountry["parties"],map,content,locale,addPartyPinContent,"gold")
let partiesMarkersLayer = addMarkersEntries(entries["parties"],entriesByCountry["parties"],map,content,locale,addPartyPinContent,"gold",options)
let tradeUnionsMarkersLayer = addMarkersEntries(entries["tradeUnions"],entriesByCountry["tradeUnions"],map,content,locale,addPartyPinContent,"violet",options)
let coopsMarkersLayer = addMarkersEntries(entries["cooperatives"],entriesByCountry["cooperatives"],map,content,locale,addCoopPinContent,"blue",options)
let communesMarkersLayer = addMarkersEntries(entries["communes"],entriesByCountry["communes"],map,content,locale,addCommunePinContent,"red",options)
let overlayMaps = {} let overlayMaps = {}
overlayMaps[content.groups] = groupsMarkersLayer overlayMaps[content.groups] = groupsMarkersLayer
overlayMaps[content.parties] = partiesMarkersLayer
overlayMaps[content.tradeUnions] = tradeUnionsMarkersLayer
overlayMaps[content.cooperatives] = coopsMarkersLayer
overlayMaps[content.communes] = communesMarkersLayer overlayMaps[content.communes] = communesMarkersLayer
overlayMaps[content.cooperatives] = coopsMarkersLayer
overlayMaps[content.parties] = partiesMarkersLayer
L.control.layers(null, overlayMaps).addTo(map) L.control.layers(null, overlayMaps).addTo(map)
} }
@ -79,7 +70,7 @@
</script> </script>
{#key $loaded} {#key $loaded}
{#if $loaded==12} {#if $loaded==10}
<div id="container"> <div id="container">
<div id="text-container"> <div id="text-container">
<h1>{$content.heading}</h1> <h1>{$content.heading}</h1>
@ -103,16 +94,14 @@
<p>{$content.findOur}</p> <p>{$content.findOur}</p>
<ol id="entities-list"> <ol id="entities-list">
<li><a href={"/" + locale + "/groups"}>{$content.group}</a>,</li> <li><a href={"/" + locale + "/groups"}>{$content.group}</a>,</li>
<li><a href={"/" + locale + "/parties"}>{$content.party}</a>,</li>
<li><a href={"/" + locale + "/trade-unions"}>{$content.tradeUnion}</a>,</li>
<li><a href={"/" + locale + "/cooperatives"}>{$content.cooperative}</a> {$content.or}</li>
<li><a href={"/" + locale + "/communes"}>{$content.commune}</a></li> <li><a href={"/" + locale + "/communes"}>{$content.commune}</a></li>
<li><a href={"/" + locale + "/cooperatives"}>{$content.cooperative}</a> {$content.or}</li>
<li><a href={"/" + locale + "/parties"}>{$content.party}</a></li>
</ol> </ol>
<p>{$content.nearYou}</p> <p>{$content.nearYou}</p>
</div> </div>
<p>{$content.noneNear} <a href="https://discord.gg/Qk8KUk787z" target="_blank" rel=noreferrer>{$content.DiscordServer}</a> {$content.or} <a href="https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh" target="_blank" rel=noreferrer>{$content.WhatsAppGroup}</a>{$content.helpStart}</p> <p>{$content.noneNear} <a href="https://chat.whatsapp.com/BhnmUNljUxJ2AjeHUwyTKh" target="_blank" rel=noreferrer>{$content.WhatsAppGroup}</a> {$content.or} <a href="https://discord.gg/Qk8KUk787z" target="_blank" rel=noreferrer>{$content.DiscordServer}</a>{$content.helpStart}</p>
<map-component id="map" callback={(createMap) => mapCallback(createMap,$content,locale)} colors={["#23AC20","#CA2437","#217BC9","#FFD326"]}></map-component> <map-component id="map" callback={(createMap) => mapCallback(createMap,$content,locale)} colors={["#23AC20","#CA2437","#217BC9","#FFD326"]}></map-component>
<p id="add-prompt">{$content["map-prompt"]}</p>
</div> </div>
</div> </div>
{/if} {/if}
@ -122,10 +111,6 @@
<style> <style>
@import '/css/common.css'; @import '/css/common.css';
#add-prompt {
margin-bottom: 2rem;
}
#entities-list li { #entities-list li {
list-style: none; list-style: none;
} }
@ -145,16 +130,13 @@
background-image: url(https://www.libsoc.org/img/common/markers/marker-green.png); background-image: url(https://www.libsoc.org/img/common/markers/marker-green.png);
} }
#entities-list li:nth-of-type(2):before { #entities-list li:nth-of-type(2):before {
background-image: url(https://www.libsoc.org/img/common/markers/marker-gold.png); background-image: url(https://www.libsoc.org/img/common/markers/marker-red.png);
} }
#entities-list li:nth-of-type(3):before { #entities-list li:nth-of-type(3):before {
background-image: url(https://www.libsoc.org/img/common/markers/marker-violet.png);
}
#entities-list li:nth-of-type(4):before {
background-image: url(https://www.libsoc.org/img/common/markers/marker-blue.png); background-image: url(https://www.libsoc.org/img/common/markers/marker-blue.png);
} }
#entities-list li:nth-of-type(5):before { #entities-list li:nth-of-type(4):before {
background-image: url(https://www.libsoc.org/img/common/markers/marker-red.png); background-image: url(https://www.libsoc.org/img/common/markers/marker-gold.png);
} }
#entities-list li::marker { #entities-list li::marker {
@ -194,7 +176,7 @@
#map { #map {
--height: 30rem; --height: 30rem;
--width: 100%; --width: 100%;
--margin-bottom: 0.5rem; --margin-bottom: 3rem;
} }
#call-to-action-list > ol>li { #call-to-action-list > ol>li {

View File

@ -51,14 +51,11 @@
getData("/assets/communes.json",(response) => callback(response,"communes")) getData("/assets/communes.json",(response) => callback(response,"communes"))
getData("/assets/cooperatives.json",(response) => callback(response,"cooperatives")) getData("/assets/cooperatives.json",(response) => callback(response,"cooperatives"))
getData("/assets/parties.json",(response) => callback(response,"parties")) getData("/assets/parties.json",(response) => callback(response,"parties"))
getData("/assets/trade-unions.json",(response) => callback(response,"tradeUnions"))
loadLocaleContent(content,"groups-component",loaded) loadLocaleContent(content,"groups-component",loaded)
loadLocaleContent(content,"communes-component",loaded) loadLocaleContent(content,"communes-component",loaded)
loadLocaleContent(content,"cooperatives-component",loaded) loadLocaleContent(content,"cooperatives-component",loaded)
loadLocaleContent(content,"parties-component",loaded) loadLocaleContent(content,"parties-component",loaded)
loadLocaleContent(content,"trade-unions-component",loaded)
loadLocaleContent(content,"countries",loaded) loadLocaleContent(content,"countries",loaded)
let locale = loadLocaleContent(content,"landing-component",loaded,changeWidth) let locale = loadLocaleContent(content,"landing-component",loaded,changeWidth)
changeWidth(locale) changeWidth(locale)
@ -69,18 +66,15 @@
enableCountryGrouping: true, enableCountryGrouping: true,
} }
let groupsMarkersLayer = addMarkersEntries(entries["groups"],entriesByCountry["groups"],map,content,locale,addGroupPinContent,"green",options) let groupsMarkersLayer = addMarkersEntries(entries["groups"],entriesByCountry["groups"],map,content,locale,addGroupPinContent,"green",options)
let partiesMarkersLayer = addMarkersEntries(entries["parties"],entriesByCountry["parties"],map,content,locale,addPartyPinContent,"gold",options)
let tradeUnionsMarkersLayer = addMarkersEntries(entries["tradeUnions"],entriesByCountry["tradeUnions"],map,content,locale,addPartyPinContent,"violet",options)
let coopsMarkersLayer = addMarkersEntries(entries["cooperatives"],entriesByCountry["cooperatives"],map,content,locale,addCoopPinContent,"blue",options)
let communesMarkersLayer = addMarkersEntries(entries["communes"],entriesByCountry["communes"],map,content,locale,addCommunePinContent,"red",options) let communesMarkersLayer = addMarkersEntries(entries["communes"],entriesByCountry["communes"],map,content,locale,addCommunePinContent,"red",options)
let coopsMarkersLayer = addMarkersEntries(entries["cooperatives"],entriesByCountry["cooperatives"],map,content,locale,addCoopPinContent,"blue",options)
let partiesMarkersLayer = addMarkersEntries(entries["parties"],entriesByCountry["parties"],map,content,locale,addPartyPinContent,"gold",options)
let overlayMaps = {} let overlayMaps = {}
overlayMaps[content.groups] = groupsMarkersLayer overlayMaps[content.groups] = groupsMarkersLayer
overlayMaps[content.parties] = partiesMarkersLayer
overlayMaps[content.tradeUnions] = tradeUnionsMarkersLayer
overlayMaps[content.cooperatives] = coopsMarkersLayer
overlayMaps[content.communes] = communesMarkersLayer overlayMaps[content.communes] = communesMarkersLayer
overlayMaps[content.cooperatives] = coopsMarkersLayer
overlayMaps[content.parties] = partiesMarkersLayer
L.control.layers(null, overlayMaps).addTo(map) L.control.layers(null, overlayMaps).addTo(map)
} }
@ -91,7 +85,7 @@
</script> </script>
{#key $loaded} {#key $loaded}
{#if $loaded==12} {#if $loaded==10}
<div id="container"> <div id="container">
<picture> <picture>
<source srcset="/img/crowd.webp"> <source srcset="/img/crowd.webp">
@ -112,12 +106,7 @@
<p>{$content.partiesText}</p> <p>{$content.partiesText}</p>
</div> </div>
<div> <div>
<a href={"/" + locale + "/trade-unions"}><h2>{$content.tradeUnionsTitle}</h2></a> <a href={"/" + locale + "/coops"}><h2>{$content.cooperativesTitle}</h2></a>
<img id="trade-unions-img" src="/img/common/trade-unions.svg" alt="trade unions">
<p>{$content.tradeUnionsText}</p>
</div>
<div>
<a href={"/" + locale + "/cooperatives"}><h2>{$content.cooperativesTitle}</h2></a>
<img id="coops-img" src="/img/common/coops.svg" alt="coops"> <img id="coops-img" src="/img/common/coops.svg" alt="coops">
<p>{$content.cooperativesText}</p> <p>{$content.cooperativesText}</p>
</div> </div>
@ -145,7 +134,7 @@
</div> </div>
--> -->
<h1 id="find-us">{$content.findUs}</h1> <h1 id="find-us">{$content.findUs}</h1>
<map-component id="map" callback={(createMap) => mapCallback(createMap,$content,locale)} colors={["#23AC20","#FFD326","#9D35CD","#217BC9","#CA2437"]}></map-component> <map-component id="map" callback={(createMap) => mapCallback(createMap,$content,locale)} colors={["#23AC20","#CA2437","#217BC9","#FFD326"]}></map-component>
<h1>{$content.whatNow}</h1> <h1>{$content.whatNow}</h1>
<div id="action-container"> <div id="action-container">
<a class="link-button" href={"/" + locale + "/join-us"}>{$content.joinUs}</a> <a class="link-button" href={"/" + locale + "/join-us"}>{$content.joinUs}</a>
@ -168,14 +157,14 @@
justify-content: space-between; justify-content: space-between;
margin: auto; margin: auto;
margin-top: 2rem; margin-top: 2rem;
max-width: 38rem; max-width: 34rem;
} }
.link-button { .link-button {
display: inline-block; display: inline-block;
font-size: 1.6rem; font-size: 1.6rem;
font-family: var(--sans-serif,sans-serif); font-family: var(--sans-serif,sans-serif);
width: 17rem; width: 14rem;
line-height: 4rem; line-height: 4rem;
background: var(--red); background: var(--red);
color: white; color: white;
@ -199,7 +188,7 @@
text-align: center; text-align: center;
} }
#groups-img, #communes-img, #coops-img, #parties-img, #trade-unions-img { #groups-img, #communes-img, #coops-img, #parties-img {
position: absolute; position: absolute;
left: 50%; left: 50%;
transform: translate(-50%); transform: translate(-50%);
@ -213,11 +202,6 @@
height: 7.5rem; height: 7.5rem;
} }
#trade-unions-img {
margin-top: 0.5rem;
height: 7.5rem;
}
#text-container { #text-container {
max-width: calc(100vw - 4rem); max-width: calc(100vw - 4rem);
margin: auto; margin: auto;
@ -225,7 +209,6 @@
#crowd { #crowd {
width: 100%; width: 100%;
height: min(248.25px,calc(100vw / 3.2225));
margin-bottom: 2rem; margin-bottom: 2rem;
} }
@ -247,18 +230,13 @@
#container-grid { #container-grid {
display: grid; display: grid;
grid-template-columns: var(--grid-width); grid-template-columns: var(--grid-width);
grid-template-rows: auto auto; grid-template-rows: var(--grid-width);
grid-gap: 4rem; grid-gap: 4rem;
row-gap: 2.5rem; row-gap: 2.5rem;
margin-top: 2rem; margin-top: 2rem;
margin-bottom: 1rem; margin-bottom: 1rem;
} }
#container-grid>:last-child {
grid-column: 1/span 2;
}
#container-grid > div { #container-grid > div {
position: relative; position: relative;
} }

View File

@ -101,11 +101,7 @@
<label id="hamb" for="side-menu"><span id="hamb-line"></span></label> <label id="hamb" for="side-menu"><span id="hamb-line"></span></label>
<!-- Logo --> <!-- Logo -->
<a id=logo-container href={"/" + locale + "/"}> <a id=logo-container href={"/" + locale + "/"}>
<picture> <img src="/img/common/flag.png" id="navbar-logo" alt="logo">
<source srcset="/img/common/flag.webp">
<source srcset="/img/common/flag.png">
<img id="navbar-logo" alt="logo">
</picture>
<span bind:this={logoText} id="navbar-logo-text" >{@html $content.orgName}</span> <span bind:this={logoText} id="navbar-logo-text" >{@html $content.orgName}</span>
</a> </a>
<!-- Menu --> <!-- Menu -->
@ -119,10 +115,9 @@
<button on:click={() => showDropdown(initiativesDropdown)} on:focusout={() => hide(initiativesDropdown)} class="options-button">{$content.initiatives}</button> <button on:click={() => showDropdown(initiativesDropdown)} on:focusout={() => hide(initiativesDropdown)} class="options-button">{$content.initiatives}</button>
<div bind:this={initiativesDropdown} class="options-dropdown"> <div bind:this={initiativesDropdown} class="options-dropdown">
<a href={"/"+locale+"/groups"}>{$content.groups}</a> <a href={"/"+locale+"/groups"}>{$content.groups}</a>
<a href={"/"+locale+"/parties"}>{$content.parties}</a>
<a href={"/"+locale+"/trade-unions"}>{$content.tradeUnions}</a>
<a href={"/"+locale+"/cooperatives"}>{$content.cooperatives}</a>
<a href={"/"+locale+"/communes"}>{$content.communes}</a> <a href={"/"+locale+"/communes"}>{$content.communes}</a>
<a href={"/"+locale+"/cooperatives"}>{$content.cooperatives}</a>
<a href={"/"+locale+"/parties"}>{$content.parties}</a>
<a href={"/"+locale+"/partners"}>{$content.partners}</a> <a href={"/"+locale+"/partners"}>{$content.partners}</a>
</div> </div>
</li> </li>

View File

@ -115,10 +115,9 @@
<button on:click={() => showDropdown(initiativesDropdown)} on:focusout={() => hide(initiativesDropdown)} class="options-button">{$content.initiatives}</button> <button on:click={() => showDropdown(initiativesDropdown)} on:focusout={() => hide(initiativesDropdown)} class="options-button">{$content.initiatives}</button>
<div bind:this={initiativesDropdown} class="options-dropdown"> <div bind:this={initiativesDropdown} class="options-dropdown">
<a href={"/"+locale+"/groups"}>{$content.groups}</a> <a href={"/"+locale+"/groups"}>{$content.groups}</a>
<a href={"/"+locale+"/parties"}>{$content.parties}</a>
<a href={"/"+locale+"/trade-unions"}>{$content.tradeUnions}</a>
<a href={"/"+locale+"/cooperatives"}>{$content.cooperatives}</a>
<a href={"/"+locale+"/communes"}>{$content.communes}</a> <a href={"/"+locale+"/communes"}>{$content.communes}</a>
<a href={"/"+locale+"/cooperatives"}>{$content.cooperatives}</a>
<a href={"/"+locale+"/parties"}>{$content.parties}</a>
<a href={"/"+locale+"/partners"}>{$content.partners}</a> <a href={"/"+locale+"/partners"}>{$content.partners}</a>
</div> </div>
</li> </li>

View File

@ -43,10 +43,7 @@
function mapCallback(createMap,content,locale) { function mapCallback(createMap,content,locale) {
let map = createMap([22, 0],2) let map = createMap([22, 0],2)
let options = { addMarkersEntries(entries,entriesByCountry,map,content,locale,addPartyPinContent,"gold")
enableCountryGrouping: true,
}
addMarkersEntries(entries,entriesByCountry,map,content,locale,addPartyPinContent,"gold",options)
} }
function getCountry(x) { function getCountry(x) {

View File

@ -43,10 +43,7 @@
function mapCallback(createMap,content,locale) { function mapCallback(createMap,content,locale) {
let map = createMap([22, 0],2) let map = createMap([22, 0],2)
let options = { addMarkersEntries(entries,entriesByCountry,map,content,locale,addPartnersPinContent,"blue")
enableCountryGrouping: true,
}
addMarkersEntries(entries,entriesByCountry,map,content,locale,addPartnersPinContent,"blue",options)
} }
function getCountry(x) { function getCountry(x) {
@ -58,15 +55,6 @@
return location.map(x => locale=="en" ? x : translate($content,x)).join(", ") return location.map(x => locale=="en" ? x : translate($content,x)).join(", ")
} }
function createMailToLink(link) {
if (link.includes("@")) {
return "mailto:" + link
}
else {
return link
}
}
onMount(() => { onMount(() => {
}) })
@ -98,7 +86,7 @@
<p><b>{$content.name}: </b>{entry.name}</p> <p><b>{$content.name}: </b>{entry.name}</p>
<p><b>{$content.location}: </b>{getAddress(entry)}</p> <p><b>{$content.location}: </b>{getAddress(entry)}</p>
<p><b>{$content.website}: </b><a href={entry.website} target=;_blank; rel=noreferrer>{entry.website}</a></p> <p><b>{$content.website}: </b><a href={entry.website} target=;_blank; rel=noreferrer>{entry.website}</a></p>
<p><b>{$content.contact}: </b><a href={createMailToLink(entry.contact)} target=;_blank; rel=noreferrer>{entry.contact}</a></p> <p><b>{$content.contact}: </b><a href={entry.website} target=;_blank; rel=noreferrer>{entry.contact}</a></p>
</div> </div>
</div> </div>
<p><b>{$content.description}: </b>{entry.description}</p> <p><b>{$content.description}: </b>{entry.description}</p>

View File

@ -15,7 +15,6 @@
import "/js/components/profile-communes.js" import "/js/components/profile-communes.js"
import "/js/components/profile-coops.js" import "/js/components/profile-coops.js"
import "/js/components/profile-parties.js" import "/js/components/profile-parties.js"
import "/js/components/profile-trade-unions.js"
import "/js/components/groups-add-component.js" import "/js/components/groups-add-component.js"
// Main code // Main code
@ -27,7 +26,6 @@
let communes let communes
let coops let coops
let parties let parties
let tradeUnions
let panes let panes
let groupsAdd let groupsAdd
@ -36,7 +34,6 @@
let communesButton let communesButton
let coopsButton let coopsButton
let partiesButton let partiesButton
let tradeUnionsButton
let buttons let buttons
let currentPaneIndex = 0 let currentPaneIndex = 0
@ -69,21 +66,18 @@
setTimeout(f,100) setTimeout(f,100)
} }
else { else {
let svgItems = svgFromObject(svgObject) let svgItem = svgFromObject(svgObject)
if (svgItems.length==0) { if (svgItem==null) {
let f = () => styleField(div,weight,color) let f = () => styleField(div,weight,color)
setTimeout(f,100) setTimeout(f,100)
} }
else { else {
div.style.fontWeight = weight div.style.fontWeight = weight
for (let item of svgItems) { svgItem.setAttribute("fill", color)
let fill = item.getAttribute("fill")
if (fill!="#fff" && fill!=null) {
item.setAttribute("fill", color)
}
}
} }
} }
} }
function fillFields() { function fillFields() {
@ -104,10 +98,10 @@
function init() { function init() {
panes = [general,groups,communes,coops,parties] panes = [general,groups,communes,coops,parties]
buttons = [generalButton,groupsButton,communesButton,coopsButton,partiesButton,tradeUnionsButton] buttons = [generalButton,groupsButton,communesButton,coopsButton,partiesButton]
if ($loaded==1 && panes.every(x => valid(x)) && buttons.every(x => valid(x))) { if ($loaded==1 && panes.every(x => valid(x)) && buttons.every(x => valid(x))) {
panes = [general,groups,communes,coops,parties,tradeUnions] panes = [general,groups,communes,coops,parties]
buttons = [generalButton,groupsButton,communesButton,coopsButton,partiesButton,tradeUnionsButton] buttons = [generalButton,groupsButton,communesButton,coopsButton,partiesButton]
fillFields() fillFields()
general.style.display = "initial" general.style.display = "initial"
@ -161,10 +155,6 @@
<object id="parties-img" class="icons" type="image/svg+xml" data="/img/common/parties.svg" title="parties"></object> <object id="parties-img" class="icons" type="image/svg+xml" data="/img/common/parties.svg" title="parties"></object>
<span>parties</span> <span>parties</span>
</button> </button>
<button bind:this={tradeUnionsButton} on:click={() => changePane(tradeUnions,tradeUnionsButton)}>
<object id="trade-unions-img" class="icons" type="image/svg+xml" data="/img/common/trade-unions.svg" title="trade unions"></object>
<span>trade unions</span>
</button>
<button on:click={AuthTools.logout} id="logout-button"> <button on:click={AuthTools.logout} id="logout-button">
<object id="logout-img" class="icons" type="image/svg+xml" data="/img/profile/icons/logout.svg" title=""></object> <object id="logout-img" class="icons" type="image/svg+xml" data="/img/profile/icons/logout.svg" title=""></object>
<span>logout</span> <span>logout</span>
@ -175,10 +165,9 @@
{#if $loaded==1} {#if $loaded==1}
<profile-general bind:this={general} style="display: none;"></profile-general> <profile-general bind:this={general} style="display: none;"></profile-general>
<profile-groups bind:this={groups} style="display: none;"></profile-groups> <profile-groups bind:this={groups} style="display: none;"></profile-groups>
<profile-parties bind:this={parties} style="display: none;"></profile-parties>
<profile-trade-unions bind:this={tradeUnions} style="display: none;"></profile-trade-unions>
<profile-coops bind:this={coops} style="display: none;"></profile-coops>
<profile-communes bind:this={communes} style="display: none;"></profile-communes> <profile-communes bind:this={communes} style="display: none;"></profile-communes>
<profile-coops bind:this={coops} style="display: none;"></profile-coops>
<profile-parties bind:this={parties} style="display: none;"></profile-parties>
{/if} {/if}
{/key} {/key}
</div> </div>

View File

@ -171,26 +171,13 @@
<div> <div>
<div id="verifiedDiv"> <div id="verifiedDiv">
<span>Verified:</span> <span>Verified:</span>
<span style="color: {user.verified ? "green" : "red"}">{user.verified} <span style="color: {user.verified ? "green" : "red"}">{user.verified}</span>
{#if !user.verified}
<span id="verify-span">(go <a href="https://discord.gg/Qk8KUk787z">here</a>)</span>
{/if}
</span>
</div> </div>
</div> </div>
</section> </section>
<style> <style>
@import '/css/common.css'; @import '/css/common.css';
#verify-span {
color: inherit;
}
#verify-span a {
color: inherit;
text-decoration: underline;
}
#verifiedDiv { #verifiedDiv {
display: inline; display: inline;

View File

@ -6,7 +6,6 @@
import { onMount, getContext } from 'svelte' import { onMount, getContext } from 'svelte'
import { writable } from 'svelte/store' import { writable } from 'svelte/store'
import { getData, sendData } from "/js/libraries/serverTools.js" import { getData, sendData } from "/js/libraries/serverTools.js"
import { validatePosNumber } from "/js/libraries/miscTools.js"
//Import components //Import components
import "/js/components/select-component.js" import "/js/components/select-component.js"
@ -35,11 +34,6 @@
let locale = "en" let locale = "en"
let oldValues = {
"contact": null,
"members": null,
}
let inputLocation let inputLocation
let inputContact let inputContact
let inputMembers let inputMembers
@ -91,6 +85,14 @@
} }
} }
function launchChangeLocation() {
showLocationOverlay()
}
function launchChangeMembers() {
}
function showSaveButton(button,input) { function showSaveButton(button,input) {
if (!input.readOnly) { if (!input.readOnly) {
button.style.display = "initial" button.style.display = "initial"
@ -99,33 +101,23 @@
function resetMembersField() { function resetMembersField() {
saveMembersButton.style.display = "none" saveMembersButton.style.display = "none"
inputMembers = oldValues["members"]
} }
function resetContactField() { function resetContactField() {
saveContactButton.style.display = "none" saveContactButton.style.display = "none"
inputContact = oldValues["contact"]
} }
function saveMembers() { function saveMembers() {
let val = parseInt(membersInput.value) let email = emailInput.value
let data = { if (AuthTools.checkEmail(email,emailMsg)) {
"members": val if (email!=user.email) {
AuthTools.changeUser("email",email,user)
}
resetMembersField()
} }
sendData("/xx/group-change",data)
oldValues["members"] = val
saveMembersButton.style.display = "none"
} }
function saveContact() { function saveContact() {}
let val = contactInput.value
let data = {
"contact": val
}
sendData("/xx/group-change",data)
oldValues["contact"] = val
saveContactButton.style.display = "none"
}
function updateUserGroup(newInfo) { function updateUserGroup(newInfo) {
if (newInfo!=undefined) { if (newInfo!=undefined) {
@ -167,9 +159,7 @@
let group = userGroups[0] let group = userGroups[0]
inputContact = getContact(group.contact) inputContact = getContact(group.contact)
oldValues["contact"] = inputContact
inputMembers = group.members inputMembers = group.members
oldValues["members"] = inputMembers
let status = group.status let status = group.status
if (status!=undefined) { if (status!=undefined) {
if (status==0) { if (status==0) {
@ -260,7 +250,7 @@
<div class="save-button-wrapper"> <div class="save-button-wrapper">
<button bind:this={saveMembersButton} on:click={saveMembers} class="save-button" style="display: none">save</button> <button bind:this={saveMembersButton} on:click={saveMembers} class="save-button" style="display: none">save</button>
</div> </div>
<input bind:this={membersInput} id="membersInput" class="text-input" type="number" bind:value={inputMembers} on:click={() => showSaveButton(saveMembersButton,membersInput)} on:input={(event) => validatePosNumber(event,membersInput,10000)}> <input bind:this={membersInput} id="membersInput" class="text-input" type="text" bind:value={inputMembers} on:click={() => showSaveButton(saveMembersButton,membersInput)}>
<button bind:this={pencilButtonMembers} class="text-input-pencil-button" on:click={() => {focus(membersInput)}}> <button bind:this={pencilButtonMembers} class="text-input-pencil-button" on:click={() => {focus(membersInput)}}>
<object bind:this={pencilMembers} type="image/svg+xml" data="/img/profile/icons/pencil.svg" title="pencil-icon" class="pencil"></object> <object bind:this={pencilMembers} type="image/svg+xml" data="/img/profile/icons/pencil.svg" title="pencil-icon" class="pencil"></object>
</button> </button>

View File

@ -1,29 +0,0 @@
<svelte:options tag="profile-trade-unions" />
<script>
// Import statements
import { onMount } from 'svelte'
import * as AuthTools from "/js/libraries/authTools.js"
// Main code
onMount(() => {
})
</script>
<h3>Under development</h3>
<p style=" position: relative; margin-top: 2rem;">Visit <a href="https://discord.gg/Qk8KUk787z" style="color: #c52a28;">https://discord.gg/Qk8KUk787z</a> and ask for your trade union to be added.</p>
<style>
@import '/css/common.css';
h3 {
text-align: center;
}
</style>

View File

@ -1,577 +0,0 @@
<svelte:options tag="trade-unions-add-component" />
<script>
// Import statements
import { onMount, getContext } from 'svelte'
import { writable } from 'svelte/store';
import { loadLocaleContent, getData, sendData } from "/js/libraries/serverTools.js"
import { addMarkersEntries, translate } from "/js/libraries/mapTools.js"
import { validatePosNumber } from "/js/libraries/miscTools.js"
// Import components
import "/js/components/map-component.js"
// Export statements
export let map = null
// Main code
let loaded = writable(0)
let content = writable({})
let entries
let entriesByCountry
let userData
let buttonsGroupMember
let buttonsNotGroupMember
let callback = (response) => {
entries = JSON.parse(response)
entriesByCountry = {}
for (let g of entries) {
let country = g.country
if (g.contact==null) {
g.contact = "https://discord.gg/Qk8KUk787z"
}
if (country in entriesByCountry) {
entriesByCountry[country].push(g)
}
else {
entriesByCountry[country] = [g]
}
}
loaded.update((val) => {
return val + 1
})
}
getData("/assets/trade-unions.json",callback)
let confirmationMsg
let addressInput
let contactInput
let membersInput
let addressVec = ["","",""]
let userPinData = {
}
let userPinLng = 0
let userPin = createPin(0,0)
userPin.setOpacity(0)
let modeButtons = []
let context = getContext("profile-component")
let closeGroupsAdd = context.closeGroupsAdd
let maps = context.maps
let onLoadedGroups = context.onLoadedGroups
let userGroups = context.userGroups
let user = context.user
let has_group = userGroups.length!=0
let mode = has_group ? 2 : 0
let pendingGroup
if (has_group) {
pendingGroup= userGroups[0].status!=undefined
if (pendingGroup) {
mode = 3
}
}
let locale = loadLocaleContent(content,"trade-unions-component",loaded)
loadLocaleContent(content,"countries",loaded)
function createPin(lat,lng) {
let markerIcon = new L.Icon({
iconUrl: '/img/common/markers/marker-black.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]
})
return L.marker([lat,lng], {icon: markerIcon})
}
function updatePin(marker,lat,lng) {
let newLatLng = L.latLng(lat, lng); // Replace with the desired coordinates
marker.setLatLng(newLatLng)
}
function reverseGeocodeLocal(latitude, longitude) {
let url = `https://nominatim.openstreetmap.org/reverse?lat=${latitude}&lon=${longitude}&format=jsonv2`;
let callback = (response) => {
// Parse the response JSON
response = JSON.parse(response)
// Extract the address information from the response
let address = response.address
let city = address.city || address.town || address.village || address.hamlet
let state = address.state
let country = address.country
let fullAddress = country
if (state!=undefined) {
fullAddress += ", " + state
}
else {
state = ""
}
if (city!=undefined) {
fullAddress += ", " + city
}
else {
city = ""
}
addressInput.value = fullAddress
resizeInput(addressInput)
}
getData(url,callback)
}
function reverseGeocode(latitude, longitude) {
let url = `https://nominatim.openstreetmap.org/reverse?lat=${latitude}&lon=${longitude}&format=jsonv2&accept-language=en`;
let callback = (response) => {
// Parse the response JSON
response = JSON.parse(response)
// Extract the address information from the response
let address = response.address
if (address!=undefined) {
let city = address.city || address.town || address.village || address.hamlet
let state = address.state
let country = address.country
let fullAddress = country
if (state!=undefined) {
fullAddress += ", " + state
}
else {
state = ""
}
if (city!=undefined) {
fullAddress += ", " + city
}
else {
city = ""
}
addressVec = [country,state,city]
}
}
getData(url,callback)
}
function addGroupPinContent(g,content,locale) {
let coordinates
let text = "<b>"+content["TradeUnion"]+"</b><br>"
for (let field of ["location","members","contact"]) {
let fieldText = content[field] + ": "
if (field=="contact") {
text += fieldText + "<a href='" + g.contact + "' target='_blank' rel=noreferrer>" + g.contact + "</a>"
}
else if (field=="location") {
let location = [g.country,g.state,g.town].filter(x => x!=null && x!=undefined)
let locationString
if (locale=="en") {
locationString = location.map(x => x).join(", ")
}
else {
locationString = location.map(x => translate(content, x)).join(", ")
}
text += fieldText + locationString + "<br>"
coordinates = [g.latitude,g.longitude]
}
else {
text += fieldText + g[field] + "<br>"
}
}
return {text,coordinates}
}
function mapCallback(createMap,content,locale) {
map = createMap([22, 0],2)
maps["groupsAdd"] = map
let options = {
enableCountryGrouping: false,
pinCallback: pinCallback
}
addMarkersEntries(entries,entriesByCountry,map,content,locale,addGroupPinContent,"green",options)
userPin.addTo(map)
map.on('click', function(event) {
if (mode==0) {
let lat = event.latlng.lat;
let lng = event.latlng.lng;
userPinData["latitude"] = lat
userPinData["longitude"] = lng
userPinData["id"] = null
updatePin(userPin,lat,lng)
userPin.setOpacity(1)
reverseGeocodeLocal(lat, lng)
reverseGeocode(lat, lng)
}
})
}
function updateConfirmationMsg(response) {
if (response!==false) {
if (mode==0 && !user.verified) {
confirmationMsg.innerHTML = "You have been added to our database! Now go to our Discord to verify yourself."
}
else {
confirmationMsg.innerHTML = "Success!"
}
confirmationMsg.style.color = "green"
if (mode==0 || mode==1) {
userGroups[0] = {}
}
userGroups[0].country = addressVec[0]=="" ? null : addressVec[0]
userGroups[0].state = addressVec[1]=="" ? null : addressVec[1]
userGroups[0].town = addressVec[2]=="" ? null : addressVec[2]
userGroups[0].members = userPinData["members"]
onLoadedGroups()
}
else {
confirmationMsg.innerHTML = "Something went wrong."
confirmationMsg.style.color = "red"
}
}
function submitLocation() {
if (addressVec[0]!="" || mode==3) {
let membersVal, contactVal
if (mode==0) { // Create
membersVal = membersInput.value
contactVal = contactInput.value
}
else if (mode==1) { // Join
contactVal = contactInput.value
}
else if (mode==2 || mode==3) { // Move
membersVal = ""
contactVal = ""
}
else if (mode==3) { // Leave
membersVal = ""
contactVal = ""
addressVec = [null,null,null]
userPinData["latitude"] = null
userPinData["longitude"] = null
}
userData = {
country: addressVec[0],
state: addressVec[1],
town: addressVec[2],
latitude: userPinData["latitude"],
longitude: userPinData["longitude"],
contact: contactVal=="" ? null : contactVal,
members: membersVal=="" ? null : parseInt(membersVal),
group_id: userPinData["id"],
mode: mode
}
if (userData.state=="") {
userData.state = null
}
if (userData.town=="") {
userData.town = null
}
let url = "/" + locale + "/trade-unions-add-post/"
sendData(url,userData,updateConfirmationMsg)
}
}
function resizeInput(el) {
el.nextElementSibling.innerHTML = el.value
}
function pinCallback(marker,event) {
if (mode==1) {
let lat = event.latlng.lat;
let lng = event.latlng.lng;
userPinData["latitude"] = lat
userPinData["longitude"] = lng
userPinData["id"] = marker.id
userPinData["members"] = marker.members
updatePin(userPin,lat,lng)
userPin.setOpacity(1)
reverseGeocodeLocal(lat, lng)
reverseGeocode(lat, lng)
}
}
function chooseButton(index) {
for (let b of modeButtons) {
if (b!=undefined) {
b.style.background = "rgba(197, 43, 40, 0.319)"
b.style.color = "black"
}
}
modeButtons[index].style.background = "rgb(197, 43, 40)"
modeButtons[index].style.color = "white"
mode = index
}
function getAddress(g) {
if (g!=undefined) {
let location = [g.country,g.state,g.town].filter(x => x!=null)
return location.map(x => locale=="en" ? x : translate($content,x)).join(", ")
}
else {
return "Create or join trade-union"
}
}
function onLoaded() {
if ($loaded==3) {
chooseButton(mode)
if (mode==2 || mode==3) {
addressInput.value = getAddress(userGroups[0])
}
}
else {
let f = () => onLoaded()
setTimeout(f, 100)
}
}
onMount(() => {
onLoaded()
})
</script>
{#key $loaded}
{#if $loaded==3}
<div id="container">
<button class="close-button" on:click={closeGroupsAdd}></button>
<!--<img src="img/crowd.png" id="crowd" alt="crowd">-->
<div id="text-container">
{#if !has_group}
<div bind:this={buttonsNotGroupMember} id="button-line">
<button bind:this={modeButtons[0]} on:click={() => chooseButton(0)}>Create</button>
<button bind:this={modeButtons[1]} on:click={() => chooseButton(1)}>Join</button>
</div>
{:else if has_group && !pendingGroup}
<div bind:this={buttonsGroupMember} id="button-line">
<button bind:this={modeButtons[2]} on:click={() => chooseButton(2)} style={"display: " + (pendingGroup ? "none" : "initial")}>Move</button>
<button bind:this={modeButtons[3]} on:click={() => chooseButton(3)}>Leave</button>
</div>
{:else}
<div bind:this={buttonsGroupMember} id="button-line">
<button bind:this={modeButtons[3]} on:click={() => chooseButton(3)}>Leave</button>
</div>
{/if}
<div id="address-input-wrapper" class="input-label-wrapper">
<label for="address-input">Location: </label>
<div class="input-wrapper">
<input bind:this={addressInput} on:input={() => resizeInput(addressInput)} id="address-input" type="text" readonly>
<div class="ghost-input"></div>
</div>
</div>
{#key mode}
{#if mode==0}
<div id="members-input-wrapper" class="input-label-wrapper">
<label for="members-input">Members: </label>
<div class="input-wrapper">
<input bind:this={membersInput} id="members-input" type="number" value={1} on:input={(event) => validatePosNumber(event,membersInput,10000)}>
</div>
</div>
{/if}
{#if mode==0 || mode==1}
<div class="input-label-wrapper">
<label for="contact-input">Contact: </label>
<div class="input-wrapper">
<input bind:this={contactInput} on:input={() => resizeInput(contactInput)} id="contact-input" type="text">
<div class="ghost-input"></div>
</div>
</div>
{/if}
{/key}
<button id="submit-button" on:click={submitLocation}>Submit</button>
<p id="confirmation-msg" bind:this={confirmationMsg}></p>
{#if !(has_group && pendingGroup)}
<map-component id="map" callback={(createMap) => mapCallback(createMap,$content,locale)}></map-component>
{/if}
</div>
</div>
{/if}
{/key}
<style>
@import '/css/common.css';
#button-line {
position: relative;
width: fit-content;
margin: auto;
margin-top: 1.5rem;
}
#button-line button{
font-family: var(--sans-serif,sans-serif);
font-size: 1.15rem;
padding: 1rem 0;
width: 7rem;
}
#button-line :first-child {
border-top-left-radius: 1rem;
border-bottom-left-radius: 1rem;
margin-right: 0.1rem;
}
#button-line :last-child {
margin-left: 0.1rem;
border-top-right-radius: 1rem;
border-bottom-right-radius: 1rem;
}
.close-button {
position: absolute;
top: 2rem;
right: 0rem;
width: 2rem;
height: 2rem;
border: none;
cursor: pointer;
z-index: 2;
}
.close-button:hover {
opacity: 0.7;
}
.close-button::before,
.close-button::after {
content: "";
position: absolute;
top: 50%;
left: 50%;
width: 0.2rem;
height: 2rem;
background-color: #000;
border-radius: 1rem;
}
.close-button::before {
transform: translate(-50%, -50%) rotate(45deg);
}
.close-button::after {
transform: translate(-50%, -50%) rotate(-45deg);
}
#confirmation-msg {
margin-top: 0.5rem;
margin-bottom: 2rem;
}
ol li {
margin-left: 1rem;
margin-bottom: 0.5rem;
}
label {
display: inline-block;
font-family: var(--serif,serif);
font-size: 1.15rem;
line-height: 160%;
color: #222222;
width: 6rem;
}
input, .ghost-input {
font-size: 1.15rem;
font-family: var(--serif,serif);
}
input {
height: 2.5rem;
display: inline-block;
position: relative;
}
#address-input, #contact-input {
width: 100%;
}
#address-input-wrapper {
margin-top: 2rem;
margin-bottom: 1rem;
}
#members-input-wrapper {
margin-bottom: 1rem;
}
#members-input {
width: 5rem;
}
.ghost-input {
display: block;
visibility: hidden;
height: 0;
padding-left: 0.5rem;
padding-right: 0.5rem;
}
.input-wrapper {
display: inline-block;
max-width: calc(100% - 5.5rem);
min-width: min(20rem, calc(100% - 5.5rem));
height: 2.5rem;
}
.input-label-wrapper {
display: flex;
justify-content: start;
}
.input-label-wrapper label {
position: relative;
top: 0.3rem;
}
.description {
margin-bottom: 1rem;
}
#submit-button {
display: block;
margin: auto;
margin-top: 2rem;
padding: 1rem 2rem;
font-size: 1.4rem;
font-family: var(--sans-serif,sans-serif);
border: 0rem solid black;
border-radius: 0.5rem;
background: #cb1816;
color: white;
}
#map {
--height: 30rem;
--width: 100%;
--margin-top: 2rem;
--margin-bottom: 0.5rem;
}
#text-container {
position: relative;
max-width: calc(100vw - 4rem);
margin: auto;
}
#container {
margin: auto;
max-width: 800px;
margin-top: 1rem;
margin-bottom: 4rem;
}
#container p {
text-align: justify;
}
</style>

View File

@ -1,178 +0,0 @@
<svelte:options tag="trade-unions-component" />
<script>
// Import statements
import { onMount } from 'svelte'
import { writable } from 'svelte/store';
import { loadLocaleContent, getData} from "/js/libraries/serverTools.js"
import { addMarkersEntries, translate } from "/js/libraries/mapTools.js"
import { addTradeUnionPinContent } from "/js/mapFuncs.js"
// Import components
import "/js/components/map-component.js"
// Main code
let loaded = writable(0)
let content = writable({})
let entries
let entriesByCountry
let locale = loadLocaleContent(content,"trade-unions-component",loaded)
loadLocaleContent(content,"countries",loaded)
let callback = (response) => {
entries = JSON.parse(response)
entriesByCountry = {}
for (let g of entries) {
let country = g.country
if (g.contact==null) {
g.contact = "https://discord.gg/Qk8KUk787z"
}
if (country in entriesByCountry) {
entriesByCountry[country].push(g)
}
else {
entriesByCountry[country] = [g]
}
}
loaded.update((val) => {
return val + 1
})
}
getData("/assets/trade-unions.json",callback)
function mapCallback(createMap,content,locale) {
let map = createMap([22, 0],2)
let options = {
enableCountryGrouping: true,
}
addMarkersEntries(entries,entriesByCountry,map,content,locale,addTradeUnionPinContent,"violet",options)
}
function getCountry(x) {
return locale=="en" ? x : translate($content,x)
}
function getAddress(g) {
let location = [g.country,g.state,g.town].filter(x => x!=null)
return location.map(x => locale=="en" ? x : translate($content,x)).join(", ")
}
onMount(() => {
})
</script>
{#key $loaded}
{#if $loaded==3}
<div id="container">
<!--<img src="img/crowd.png" id="crowd" alt="crowd">-->
<div id="text-container">
<h1>{$content.tradeUnions}</h1>
<img id="trade-unions-img" src="/img/common/trade-unions.svg" alt="trade unions">
<p class="description">{$content.p1}</p>
<h3>{$content.subheading1}</h3>
<map-component id="map" callback={(createMap) => mapCallback(createMap,$content,locale)}></map-component>
<p id="add-prompt">{$content["map-prompt"]}</p>
{#each Object.entries(entriesByCountry) as [name,entries]}
<h4 class="country-name">{getCountry(name)}</h4>
<div class="country-block">
{#each entries as entry}
<div class="location-info">
<p><b>{$content.name}: </b>{entry.name}</p>
<p><b>{$content.location}: </b>{getAddress(entry)}</p>
<p><b>{$content.members}: </b>{entry.members}</p>
{#if entry.contact.includes("@") && entry.contact.trim().split(" ").length==1}
<p><b>{$content.contact}: </b><a href={"mailto:" + entry.contact} target=;_blank; rel=noreferrer>{entry.contact}</a></p>
{:else if entry.contact.includes("http")}
<p><b>{$content.contact}: </b><a href={entry.contact} target=;_blank; rel=noreferrer>{entry.contact}</a></p>
{:else}
<p><b>{$content.contact}: </b>{entry.contact}</p>
{/if}
</div>
{/each}
</div>
{/each}
</div>
</div>
{/if}
{/key}
<style>
@import '/css/common.css';
.description {
margin-bottom: 1rem;
}
#add-prompt {
margin-bottom: 2rem;
}
#trade-unions-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: 0.5rem;
}
#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 p {
text-align: justify;
}
</style>

View File

@ -1,13 +0,0 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock

View File

@ -1,14 +0,0 @@
module.exports = {
root: true,
extends: ['eslint:recommended', 'plugin:svelte/recommended', 'prettier'],
parserOptions: {
sourceType: 'module',
ecmaVersion: 2020,
extraFileExtensions: ['.svelte']
},
env: {
browser: true,
es2017: true,
node: true
}
};

View File

@ -1,10 +0,0 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
vite.config.js.timestamp-*
vite.config.ts.timestamp-*

View File

@ -1 +0,0 @@
engine-strict=true

View File

@ -1,13 +0,0 @@
.DS_Store
node_modules
/build
/.svelte-kit
/package
.env
.env.*
!.env.example
# Ignore files for PNPM, NPM and YARN
pnpm-lock.yaml
package-lock.json
yarn.lock

View File

@ -1,9 +0,0 @@
{
"useTabs": true,
"singleQuote": true,
"trailingComma": "none",
"printWidth": 100,
"plugins": ["prettier-plugin-svelte"],
"pluginSearchDirs": ["."],
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
}

View File

@ -1,38 +0,0 @@
# create-svelte
Everything you need to build a Svelte project, powered by [`create-svelte`](https://github.com/sveltejs/kit/tree/master/packages/create-svelte).
## Creating a project
If you're seeing this, you've probably already done this step. Congrats!
```bash
# create a new project in the current directory
npm create svelte@latest
# create a new project in my-app
npm create svelte@latest my-app
```
## Developing
Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:
```bash
npm run dev
# or start the server and open the app in a new browser tab
npm run dev -- --open
```
## Building
To create a production version of your app:
```bash
npm run build
```
You can preview the production build with `npm run preview`.
> To deploy your app, you may need to install an [adapter](https://kit.svelte.dev/docs/adapters) for your target environment.

File diff suppressed because it is too large Load Diff

View File

@ -1,27 +0,0 @@
{
"name": "chrn.health",
"version": "0.0.1",
"private": true,
"scripts": {
"dev": "vite dev",
"preview": "vite preview",
"lint": "prettier --plugin-search-dir . --check . && eslint .",
"format": "prettier --plugin-search-dir . --write .",
"build": "vite build && cp -r build/* '../../public/'"
},
"devDependencies": {
"@sveltejs/adapter-auto": "^2.0.0",
"@sveltejs/kit": "^1.20.4",
"eslint": "^8.28.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-svelte": "^2.30.0",
"prettier": "^2.8.0",
"prettier-plugin-svelte": "^2.10.1",
"svelte": "^4.0.5",
"vite": "^4.4.2"
},
"type": "module",
"dependencies": {
"@sveltejs/adapter-static": "^2.0.3"
}
}

Some files were not shown because too many files have changed in this diff Show More