adding htmx
This commit is contained in:
parent
4173da5193
commit
71fe7865a2
6 changed files with 131 additions and 3 deletions
1
assets/htmx.min.js
vendored
Normal file
1
assets/htmx.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
103
assets/main.css
103
assets/main.css
|
|
@ -544,10 +544,72 @@ video {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.inline-flex {
|
||||||
|
display: inline-flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
.flex-row {
|
||||||
|
flex-direction: row;
|
||||||
|
}
|
||||||
|
|
||||||
|
.space-x-2 > :not([hidden]) ~ :not([hidden]) {
|
||||||
|
--tw-space-x-reverse: 0;
|
||||||
|
margin-right: calc(0.5rem * var(--tw-space-x-reverse));
|
||||||
|
margin-left: calc(0.5rem * calc(1 - var(--tw-space-x-reverse)));
|
||||||
|
}
|
||||||
|
|
||||||
|
.rounded-md {
|
||||||
|
border-radius: 0.375rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.bg-indigo-600 {
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(79 70 229 / var(--tw-bg-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.px-2 {
|
||||||
|
padding-left: 0.5rem;
|
||||||
|
padding-right: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.px-2\.5 {
|
||||||
|
padding-left: 0.625rem;
|
||||||
|
padding-right: 0.625rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.px-8 {
|
||||||
|
padding-left: 2rem;
|
||||||
|
padding-right: 2rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.py-1 {
|
||||||
|
padding-top: 0.25rem;
|
||||||
|
padding-bottom: 0.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.py-1\.5 {
|
||||||
|
padding-top: 0.375rem;
|
||||||
|
padding-bottom: 0.375rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.py-4 {
|
||||||
|
padding-top: 1rem;
|
||||||
|
padding-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-sm {
|
||||||
|
font-size: 0.875rem;
|
||||||
|
line-height: 1.25rem;
|
||||||
|
}
|
||||||
|
|
||||||
.font-bold {
|
.font-bold {
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.font-semibold {
|
||||||
|
font-weight: 600;
|
||||||
|
}
|
||||||
|
|
||||||
.text-green-500 {
|
.text-green-500 {
|
||||||
--tw-text-opacity: 1;
|
--tw-text-opacity: 1;
|
||||||
color: rgb(34 197 94 / var(--tw-text-opacity));
|
color: rgb(34 197 94 / var(--tw-text-opacity));
|
||||||
|
|
@ -557,3 +619,44 @@ video {
|
||||||
--tw-text-opacity: 1;
|
--tw-text-opacity: 1;
|
||||||
color: rgb(99 102 241 / var(--tw-text-opacity));
|
color: rgb(99 102 241 / var(--tw-text-opacity));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.text-white {
|
||||||
|
--tw-text-opacity: 1;
|
||||||
|
color: rgb(255 255 255 / var(--tw-text-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.underline {
|
||||||
|
text-decoration-line: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.shadow-sm {
|
||||||
|
--tw-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.05);
|
||||||
|
--tw-shadow-colored: 0 1px 2px 0 var(--tw-shadow-color);
|
||||||
|
box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow);
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover\:bg-indigo-500:hover {
|
||||||
|
--tw-bg-opacity: 1;
|
||||||
|
background-color: rgb(99 102 241 / var(--tw-bg-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.hover\:text-indigo-300:hover {
|
||||||
|
--tw-text-opacity: 1;
|
||||||
|
color: rgb(165 180 252 / var(--tw-text-opacity));
|
||||||
|
}
|
||||||
|
|
||||||
|
.focus-visible\:outline:focus-visible {
|
||||||
|
outline-style: solid;
|
||||||
|
}
|
||||||
|
|
||||||
|
.focus-visible\:outline-2:focus-visible {
|
||||||
|
outline-width: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.focus-visible\:outline-offset-2:focus-visible {
|
||||||
|
outline-offset: 2px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.focus-visible\:outline-indigo-600:focus-visible {
|
||||||
|
outline-color: #4f46e5;
|
||||||
|
}
|
||||||
|
|
|
||||||
1
package-lock.json
generated
1
package-lock.json
generated
|
|
@ -7,7 +7,6 @@
|
||||||
"": {
|
"": {
|
||||||
"name": "achubb_backend",
|
"name": "achubb_backend",
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"license": "ISC",
|
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"prettier": "^3.1.1",
|
"prettier": "^3.1.1",
|
||||||
"prettier-plugin-tailwindcss": "^0.5.9",
|
"prettier-plugin-tailwindcss": "^0.5.9",
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,9 @@ async fn main() -> anyhow::Result<()> {
|
||||||
let assets_path = std::env::current_dir().unwrap();
|
let assets_path = std::env::current_dir().unwrap();
|
||||||
let port = 8000_u16;
|
let port = 8000_u16;
|
||||||
let addr = std::net::SocketAddr::from(([0, 0, 0, 0], port));
|
let addr = std::net::SocketAddr::from(([0, 0, 0, 0], port));
|
||||||
|
let api_router = Router::new().route("/hello", get(hello_from_the_server));
|
||||||
let router = Router::new()
|
let router = Router::new()
|
||||||
|
.nest("/api", api_router)
|
||||||
.route("/", get(hello))
|
.route("/", get(hello))
|
||||||
.route("/another-page", get(another_page))
|
.route("/another-page", get(another_page))
|
||||||
.nest_service(
|
.nest_service(
|
||||||
|
|
@ -78,3 +80,7 @@ async fn another_page() -> impl IntoResponse {
|
||||||
#[derive(Template)]
|
#[derive(Template)]
|
||||||
#[template(path = "another-page.html")]
|
#[template(path = "another-page.html")]
|
||||||
struct AnotherPageTemplate;
|
struct AnotherPageTemplate;
|
||||||
|
|
||||||
|
async fn hello_from_the_server() -> &'static str {
|
||||||
|
"Hello!"
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,6 +6,9 @@
|
||||||
<link href="https://rsms.me/inter/inter.css" rel="stylesheet" />
|
<link href="https://rsms.me/inter/inter.css" rel="stylesheet" />
|
||||||
<!-- Allow any inheriting page to set it's own title -->
|
<!-- Allow any inheriting page to set it's own title -->
|
||||||
<title>{% block title %}{{ title }}{% endblock %}</title>
|
<title>{% block title %}{{ title }}{% endblock %}</title>
|
||||||
|
|
||||||
|
<script src="/assets/htmx.min.js"></script>
|
||||||
|
|
||||||
<!-- Allow any inheriting page to extend head with additional assets -->
|
<!-- Allow any inheriting page to extend head with additional assets -->
|
||||||
{% block head %}{% endblock %}
|
{% block head %}{% endblock %}
|
||||||
</head>
|
</head>
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,23 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
|
|
||||||
{% block title %}Hello!{% endblock %}
|
{% block title %}Hello!{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
<h1 class="text-green-500">Howdy!</h1>
|
<div class="inline-flex flex-row space-x-2 px-8 py-4">
|
||||||
|
<h1 class="text-green-500">Howdy!</h1>
|
||||||
|
<a
|
||||||
|
href="/another-page"
|
||||||
|
class="text-indigo-500 underline hover:text-indigo-300"
|
||||||
|
>
|
||||||
|
Another page
|
||||||
|
</a>
|
||||||
|
<button
|
||||||
|
type="button"
|
||||||
|
hx-get="/api/hello"
|
||||||
|
hx-swap="innerHtml"
|
||||||
|
class="rounded-md bg-indigo-600 px-2.5 py-1.5 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
|
||||||
|
>
|
||||||
|
Say hello
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue