diff --git a/assets/style.css b/assets/style.css index b011c16..a296dcf 100644 --- a/assets/style.css +++ b/assets/style.css @@ -1203,11 +1203,6 @@ select { line-height: 1; } -.text-blue-400 { - --tw-text-opacity: 1; - color: rgb(96 165 250 / var(--tw-text-opacity)); -} - .text-emerald-500 { --tw-text-opacity: 1; color: rgb(16 185 129 / var(--tw-text-opacity)); @@ -1305,11 +1300,6 @@ select { transition-timing-function: linear; } -.hover\:bg-blue-200:hover { - --tw-bg-opacity: 1; - background-color: rgb(191 219 254 / var(--tw-bg-opacity)); -} - .hover\:bg-gray-100:hover { --tw-bg-opacity: 1; background-color: rgb(243 244 246 / var(--tw-bg-opacity)); @@ -1325,11 +1315,6 @@ select { background-color: rgb(254 240 138 / var(--tw-bg-opacity)); } -.hover\:text-blue-900:hover { - --tw-text-opacity: 1; - color: rgb(30 58 138 / var(--tw-text-opacity)); -} - .hover\:text-neutral-700:hover { --tw-text-opacity: 1; color: rgb(64 64 64 / var(--tw-text-opacity)); @@ -1466,11 +1451,6 @@ select { color: rgb(156 163 175 / var(--tw-placeholder-opacity)); } - .dark\:hover\:bg-blue-800:hover { - --tw-bg-opacity: 1; - background-color: rgb(30 64 175 / var(--tw-bg-opacity)); - } - .dark\:hover\:bg-gray-600:hover { --tw-bg-opacity: 1; background-color: rgb(75 85 99 / var(--tw-bg-opacity)); @@ -1491,11 +1471,6 @@ select { background-color: rgb(133 77 14 / var(--tw-bg-opacity)); } - .dark\:hover\:text-blue-300:hover { - --tw-text-opacity: 1; - color: rgb(147 197 253 / var(--tw-text-opacity)); - } - .dark\:hover\:text-neutral-400:hover { --tw-text-opacity: 1; color: rgb(163 163 163 / var(--tw-text-opacity)); diff --git a/crates/oswilno-parking-space/src/lib.rs b/crates/oswilno-parking-space/src/lib.rs index 03d18b7..aeddd45 100644 --- a/crates/oswilno-parking-space/src/lib.rs +++ b/crates/oswilno-parking-space/src/lib.rs @@ -3,14 +3,17 @@ use actix_web::web::{scope, Data, Form, Path, ServiceConfig}; use actix_web::{get, post, put, HttpRequest, HttpResponse}; use askama_actix::Template; use autometrics::autometrics; +use oswilno_contract::parking_space_locations::Model as ParkingSpaceLocation; use oswilno_contract::parking_space_rents; +use oswilno_contract::parking_space_rents::Model as ParkingSpaceRent; use oswilno_contract::parking_spaces; +use oswilno_contract::parking_spaces::Model as ParkingSpace; use oswilno_contract::sea_orm_active_enums::ParkingSpaceState; use oswilno_contract::{accounts, parking_space_locations}; use oswilno_session::{Authenticated, MaybeAuthenticated}; use oswilno_view::{ - filters, is_partial, Blank, Errors, HelperContext, Lang, Layout, Main, MainOpts, SearchOpts, - SessionOpts, TranslationStorage, + filters, is_partial, Blank, Errors, HelperContext, Layout, Main, MainOpts, SearchOpts, + SessionOpts, }; use sea_orm::prelude::*; use sea_orm::ActiveValue::{NotSet, Set}; @@ -46,6 +49,10 @@ pub fn translations(l10n: &mut oswilno_view::TranslationStorage) { .add("Location", "Miejsce") .add("Spot", "Miejsce postojowe") .add("Register parking space", "Zarejestruj miejsce postojowe") + .add("Owned parking spaces", "Posiadane miejsca postojowe") + .add("Pending", "Oczekuje na akceptacjÄ™") + .add("Approved", "Zaakceptowane") + .add("Rejected", "Odrzucone") .done(); } @@ -62,8 +69,8 @@ async fn root() -> HttpResponse { #[template(path = "../templates/parking-spaces/all-partial.html")] struct AllPartialParkingSpace { parking_space_rents: Vec, - parking_space_by_id: BTreeMap>, - parking_spaces: Vec>, + parking_space_by_id: BTreeMap>, + parking_spaces: Vec>, account_by_id: BTreeMap, #[allow(dead_code)] locations: Vec>, @@ -88,7 +95,7 @@ async fn all_parking_spaces( tracing::debug!("session {session:?}"); - let mut parking_spaces = load_parking_spaces(db, account_id, htx).await; + let mut parking_spaces = load_parking_spaces(db, account_id, hcx.clone()).await; parking_spaces.session = session.clone(); let main = Main { body: parking_spaces, @@ -101,6 +108,7 @@ async fn all_parking_spaces( }), ..Default::default() }, + hcx: hcx.clone(), }; HttpResponse::Ok() .append_header(("HX-Retarget", "main")) @@ -215,7 +223,7 @@ async fn form_show( form: Default::default(), locations: load_locations(db.clone()).await, errors: Default::default(), - hcx, + hcx: hcx.clone(), }; let main = Main { body, @@ -225,6 +233,7 @@ async fn form_show( search: None, session: Some(session), }, + hcx: hcx.clone(), }; let html = if is_partial(&req) { main.render() @@ -341,10 +350,9 @@ async fn ensure_locations(db: Arc) { async fn edit_show( req: HttpRequest, session: Authenticated, - t: Data, - lang: Lang, db: Data, id: Path, + hcx: HelperContext, ) -> HttpResponse { let db = db.into_inner(); let id = id.into_inner(); @@ -368,9 +376,8 @@ async fn edit_show( id: Some(id), }, locations: load_locations(db.clone()).await, - lang, errors: Default::default(), - t: t.into_inner(), + hcx: hcx.clone(), }; let main = Main { body, @@ -380,6 +387,7 @@ async fn edit_show( search: None, session: Some(session), }, + hcx: hcx.clone(), }; let html = if is_partial(&req) { main.render() @@ -397,8 +405,7 @@ async fn update( db: Data, p: Form, session: Authenticated, - t: Data, - lang: Lang, + hcx: HelperContext, ) -> HttpResponse { use oswilno_contract::parking_spaces::*; let CreateParkingSpace { @@ -442,10 +449,9 @@ async fn update( spot, id: Some(id), }, - t: t.into_inner(), - lang, errors: Default::default(), locations: load_locations(db.clone()).await, + hcx, } .render() .unwrap(), @@ -469,10 +475,9 @@ struct ParkingSpaceRentForm { #[template(path = "../templates/parking-space-rents/form.html")] struct ParkingSpaceRentFormTemplate { pub form: ParkingSpaceRentForm, - pub parking_space: oswilno_contract::parking_spaces::Model, - pub location: oswilno_contract::parking_space_locations::Model, - lang: Lang, - t: Arc, + pub parking_space: ParkingSpace, + pub location: ParkingSpaceLocation, + hcx: HelperContext, } #[get("/{parking_space_id}/parking-space-rents/form")] @@ -481,14 +486,11 @@ async fn parking_space_rent_form( db: Data, session: MaybeAuthenticated, parking_space_id: Path, - t: Data, - lang: Lang, + hcx: HelperContext, ) -> HttpResponse { let parking_space_id = parking_space_id.into_inner(); let db = db.into_inner(); - let session = session.into_option(); let _account_id = session.as_ref().map(|s| s.account_id()); - let session = session.map(Into::into); let parking_space = { use ::oswilno_contract::parking_spaces::{Column, Entity}; let res = Entity::find() @@ -524,27 +526,14 @@ async fn parking_space_rent_form( } } }; - let body = ParkingSpaceRentFormTemplate { + let html = render_rent_form( + ParkingSpaceRentForm::default(), + &req, parking_space, location, - form: ParkingSpaceRentForm::default(), - lang, - t: t.into_inner(), - }; - let main = Main { - body, - title: Blank, - opts: MainOpts { - show: true, - search: None, - session, - }, - }; - let html = if is_partial(&req) { - main.render() - } else { - Layout { main }.render() - }; + session, + hcx, + ); HttpResponse::Ok() .append_header(( "HX-Redirect", @@ -555,7 +544,7 @@ async fn parking_space_rent_form( .as_str(), )) .append_header(("HX-Retarget", "main")) - .body(html.unwrap()) + .body(html) } #[get("/{parking_space_id}/parking-space-rents/edit/{id}")] async fn parking_space_rent_edit(_id: Path) -> HttpResponse { @@ -574,13 +563,19 @@ async fn parking_space_rent_update(form: Form) -> HttpResp todo!() } -fn render_rent_form(form: ParkingSpaceRentForm, req: &HttpRequest) -> String { +fn render_rent_form( + form: ParkingSpaceRentForm, + req: &HttpRequest, + parking_space: ParkingSpace, + location: ParkingSpaceLocation, + session: MaybeAuthenticated, + hcx: HelperContext, +) -> String { let body = ParkingSpaceRentFormTemplate { parking_space, location, form, - lang, - t: t.into_inner(), + hcx: hcx.clone(), }; let main = Main { body, @@ -588,12 +583,14 @@ fn render_rent_form(form: ParkingSpaceRentForm, req: &HttpRequest) -> String { opts: MainOpts { show: true, search: None, - session, + session: session.into_option().map(Into::into), }, + hcx: hcx.clone(), }; if is_partial(&req) { main.render() } else { Layout { main }.render() } + .unwrap() } diff --git a/crates/oswilno-parking-space/templates/parking-space-rents/form.html b/crates/oswilno-parking-space/templates/parking-space-rents/form.html index cfff142..168bab1 100644 --- a/crates/oswilno-parking-space/templates/parking-space-rents/form.html +++ b/crates/oswilno-parking-space/templates/parking-space-rents/form.html @@ -23,7 +23,7 @@ for="price" class="block mb-2 text-sm text-gray-600" > - {{ "Price"|t(lang,t) }} + {{ "Price"|t(hcx) }}
diff --git a/crates/oswilno-parking-space/templates/parking-spaces/all-partial.html b/crates/oswilno-parking-space/templates/parking-spaces/all-partial.html index 939364f..e2c6bf8 100644 --- a/crates/oswilno-parking-space/templates/parking-spaces/all-partial.html +++ b/crates/oswilno-parking-space/templates/parking-spaces/all-partial.html @@ -28,7 +28,9 @@ class="w-full p-4 bg-white border border-white-200 rounded-lg shadow sm:p-8 dark:bg-white-800 dark:border-white-700 mt-6" >
-
Owned parking spaces
+
+ {{"Owned parking spaces"|t(hcx)}} +
    @@ -53,13 +55,14 @@ id="create-rent-{{parking_space.id}}" hx-get="/parking-spaces/{{parking_space.id}}/parking-space-rents/form" hx-headers='{"Accept":"text/html-partial"}' - > + > {% endif %} + {% if parking_space.state != ParkingSpaceState::Banned %} + {% endif %}
diff --git a/crates/oswilno-parking-space/templates/parking-spaces/form-partial.html b/crates/oswilno-parking-space/templates/parking-spaces/form-partial.html index 7f9c3fd..c0c2b9e 100644 --- a/crates/oswilno-parking-space/templates/parking-spaces/form-partial.html +++ b/crates/oswilno-parking-space/templates/parking-spaces/form-partial.html @@ -1,8 +1,8 @@
-

{{ "Register parking space"|t(lang,t) }}

+

{{ "Register parking space"|t(hcx) }}

{% for error in errors.global() %} - {{error|t(lang,t)}} + {{error|t(hcx)}} {% endfor %}
- {{ "Location"|t(lang,t) }} + {{ "Location"|t(hcx) }} diff --git a/crates/oswilno-parking-space/templates/parking-spaces/parking_space_state.html b/crates/oswilno-parking-space/templates/parking-spaces/parking_space_state.html index 8e3c13f..fe01c49 100644 --- a/crates/oswilno-parking-space/templates/parking-spaces/parking_space_state.html +++ b/crates/oswilno-parking-space/templates/parking-spaces/parking_space_state.html @@ -1,14 +1,13 @@ {% match parking_space.state %} {% when ParkingSpaceState::Pending %} -
- {{"Pending"|t(lang,t)}} +
+ {{"Pending"|t(hcx)}}
{% when ParkingSpaceState::Verified %} -
- {{"Accepted"|t(lang,t)}} +
{% when ParkingSpaceState::Banned %} -
- {{"Rejected"|t(lang,t)}} +
+ {{"Rejected"|t(hcx)}}
{% endmatch %} diff --git a/crates/oswilno-session/src/lib.rs b/crates/oswilno-session/src/lib.rs index 73956d7..3a40a4c 100644 --- a/crates/oswilno-session/src/lib.rs +++ b/crates/oswilno-session/src/lib.rs @@ -7,9 +7,7 @@ use actix_web::{get, post, HttpRequest, HttpResponse}; use askama_actix::Template; use autometrics::autometrics; use garde::Validate; -use oswilno_view::{ - Blank, Errors, HelperContext, Lang, Layout, Main, MainOpts, TranslationStorage, -}; +use oswilno_view::{Blank, Errors, HelperContext, Layout, Main, MainOpts}; use sea_orm::DatabaseConnection; use serde::{Deserialize, Serialize}; @@ -168,7 +166,7 @@ async fn login_view(req: HttpRequest, hcx: HelperContext) -> HttpResponse { body: SignInPartialTemplate { form: SignInPayload::default(), errors: Errors::default(), - hcx, + hcx: hcx.clone(), }, opts: MainOpts { show: true, @@ -176,6 +174,7 @@ async fn login_view(req: HttpRequest, hcx: HelperContext) -> HttpResponse { session: None, }, title: Blank, + hcx, } .render() } else { @@ -184,13 +183,14 @@ async fn login_view(req: HttpRequest, hcx: HelperContext) -> HttpResponse { body: SignInPartialTemplate { form: SignInPayload::default(), errors: Errors::default(), - hcx, + hcx: hcx.clone(), }, opts: MainOpts { show: true, ..Default::default() }, title: Blank, + hcx, }, } .render() @@ -436,15 +436,14 @@ struct AccountInfo { } #[get("/register")] -async fn register_view(req: HttpRequest, t: Data) -> HttpResponse { +async fn register_view(req: HttpRequest, hcx: HelperContext) -> HttpResponse { HttpResponse::Ok().body( if oswilno_view::is_partial(&req) { Main { body: RegisterPartialTemplate { form: AccountInfo::default(), - t: t.into_inner(), - lang: Lang::Pl, errors: oswilno_view::Errors::default(), + hcx: hcx.clone(), }, title: Blank, opts: MainOpts { @@ -452,6 +451,7 @@ async fn register_view(req: HttpRequest, t: Data) -> HttpRes search: None, session: None, }, + hcx, } .render() } else { @@ -459,12 +459,12 @@ async fn register_view(req: HttpRequest, t: Data) -> HttpRes main: Main { body: RegisterPartialTemplate { form: AccountInfo::default(), - t: t.into_inner(), - lang: Lang::Pl, errors: oswilno_view::Errors::default(), + hcx: hcx.clone(), }, title: Blank, opts: MainOpts::default(), + hcx, }, } .render() @@ -477,9 +477,8 @@ async fn register_view(req: HttpRequest, t: Data) -> HttpRes #[template(path = "./register/partial.html")] struct RegisterPartialTemplate { form: AccountInfo, - t: Arc, - lang: Lang, errors: oswilno_view::Errors, + hcx: HelperContext, } #[autometrics] @@ -488,10 +487,8 @@ async fn register( req: HttpRequest, db: Data, payload: Form, - t: Data, - lang: Lang, + hcx: HelperContext, ) -> Result { - let t = t.into_inner(); let mut errors = oswilno_view::Errors::default(); Ok( match register_internal(req, db.into_inner(), payload.into_inner(), &mut errors).await { @@ -499,9 +496,8 @@ async fn register( Err(p) => HttpResponse::BadRequest().body( RegisterPartialTemplate { form: p, - t, - lang, errors, + hcx, } .render() .unwrap(), diff --git a/crates/oswilno-session/templates/register/partial.html b/crates/oswilno-session/templates/register/partial.html index 5df262b..ffeaa84 100644 --- a/crates/oswilno-session/templates/register/partial.html +++ b/crates/oswilno-session/templates/register/partial.html @@ -1,11 +1,11 @@
{% for error in errors.global() %} - {{error|t(lang,t)}} + {{error|t(hcx)}} {% endfor %}
- + {% for error in errors.field("input_login") %} - {{error|t(lang,t)}} + {{error|t(hcx)}} {% endfor %}
- + {% for error in errors.field("email") %} - {{error|t(lang,t)}} + {{error|t(hcx)}} {% endfor %}
- + {% for error in errors.field("password") %} - {{error|t(lang,t)}} + {{error|t(hcx)}} {% endfor %}
- + {% for error in errors.field("password_confirmation") %} - {{error|t(lang,t)}} + {{error|t(hcx)}} {% endfor %}
diff --git a/crates/oswilno-session/templates/sign-in/partial.html b/crates/oswilno-session/templates/sign-in/partial.html index e42913f..cfa4a7b 100644 --- a/crates/oswilno-session/templates/sign-in/partial.html +++ b/crates/oswilno-session/templates/sign-in/partial.html @@ -1,7 +1,9 @@
{% for error in errors.global() %} - {{error|t(lang,t)}} + + {{error|t(hcx)}} + {% endfor %}
@@ -14,19 +16,29 @@ {% for error in errors.field("password") %} - {{error|t(lang,t)}} + + {{error|t(hcx)}} + {% endfor %}
diff --git a/crates/oswilno-view/src/lib.rs b/crates/oswilno-view/src/lib.rs index 42f7ab8..f1ba73d 100644 --- a/crates/oswilno-view/src/lib.rs +++ b/crates/oswilno-view/src/lib.rs @@ -72,15 +72,16 @@ impl Default for MainOpts { #[template(source = "", ext = "txt")] pub struct Blank; -#[derive(Debug, Default, askama_actix::Template)] +#[derive(Debug, askama_actix::Template)] #[template(path = "../templates/main.html")] pub struct Main { pub title: TitleTemplate, pub body: BodyTemplate, pub opts: MainOpts, + pub hcx: HelperContext, } -#[derive(Debug, Default, askama_actix::Template)] +#[derive(Debug, askama_actix::Template)] #[template(path = "../templates/base.html")] pub struct Layout { pub main: Main, @@ -143,6 +144,9 @@ impl TranslationStorage { Self { storage: Arc::new(RwLock::new(HashMap::with_capacity(32))), } + .with_lang(Lang::Pl) + .add("Marketplace", "Targowisko") + .done() } pub fn to_lang(&self, lang: Lang, s: &str) -> String { diff --git a/crates/oswilno-view/templates/nav/links-large.html b/crates/oswilno-view/templates/nav/links-large.html index fccccd0..3b248ac 100644 --- a/crates/oswilno-view/templates/nav/links-large.html +++ b/crates/oswilno-view/templates/nav/links-large.html @@ -10,7 +10,7 @@ class="block py-2 pl-3 pr-4 text-white bg-blue-700 rounded md:bg-transparent md:text-blue-700 md:p-0 md:dark:text-blue-500" aria-current="page" > - Home + {{"Home"|t(hcx)}}
  • @@ -20,8 +20,8 @@ hx-headers='{"Accept":"text/html-partial"}' hx-target="main" class="block py-2 pl-3 pr-4 text-gray-900 rounded hover:bg-gray-100 md:hover:bg-transparent md:hover:text-blue-700 md:p-0 dark:text-white md:dark:hover:text-blue-500 dark:hover:bg-gray-700 dark:hover:text-white md:dark:hover:bg-transparent dark:border-gray-700" - > - Targowisko + > + {{"Marketplace"|t(hcx)}}
  • diff --git a/crates/oswilno-view/templates/nav/search.html b/crates/oswilno-view/templates/nav/search.html index cf84f6c..836c9ec 100644 --- a/crates/oswilno-view/templates/nav/search.html +++ b/crates/oswilno-view/templates/nav/search.html @@ -8,10 +8,10 @@