tangled
alpha
login
or
join now
ericwood.org
/
photos-site
1
fork
atom
A little app to serve my photography from my personal website
1
fork
atom
overview
issues
pulls
pipelines
header links
ericwood.org
4 months ago
618594ff
da51a768
0/0
Waiting for spindle ...
+59
-24
5 changed files
expand all
collapse all
unified
split
src
db.rs
templates.rs
templates
layout.jinja
photos
index.jinja
show.jinja
+2
-2
src/db.rs
···
97
97
Ok((count, photos))
98
98
}
99
99
100
100
-
fn build_photo_query(pq: &PhotoQuery) -> QueryBuilder<Sqlite> {
100
100
+
fn build_photo_query(pq: &PhotoQuery) -> QueryBuilder<'_, Sqlite> {
101
101
let offset = pq.pagination.limit * (pq.pagination.page - 1);
102
102
103
103
let mut query = QueryBuilder::new("SELECT photos.* FROM photos");
···
127
127
query
128
128
}
129
129
130
130
-
fn build_photo_count_query(pq: &PhotoQuery) -> QueryBuilder<Sqlite> {
130
130
+
fn build_photo_count_query(pq: &PhotoQuery) -> QueryBuilder<'_, Sqlite> {
131
131
if pq.tags.is_empty() {
132
132
return QueryBuilder::new("SELECT COUNT(*) FROM photos");
133
133
}
+32
-15
src/templates.rs
···
1
1
-
use minijinja::{Environment, Error, ErrorKind};
1
1
+
use minijinja::{Environment, Error, ErrorKind, Value};
2
2
use minijinja_autoreload::AutoReloader;
3
3
use serde::Serialize;
4
4
use std::{env, fs::read_to_string, path::Path};
5
5
6
6
-
//#[derive(Serialize)]
7
7
-
//struct NavLink<'a> {
8
8
-
// id: &'a str,
9
9
-
// label: &'a str,
10
10
-
// href: &'a str,
11
11
-
//}
6
6
+
#[derive(Serialize)]
7
7
+
struct NavLink<'a> {
8
8
+
id: &'a str,
9
9
+
label: &'a str,
10
10
+
href: &'a str,
11
11
+
}
12
12
13
13
pub fn load_templates_dyn() -> AutoReloader {
14
14
AutoReloader::new(move |notifier| {
···
23
23
notifier.watch_path(template_path, true);
24
24
}
25
25
env.add_function("url_escape", url_escape);
26
26
-
//env.add_global(
27
27
-
// "nav_links",
28
28
-
// [NavLink {
29
29
-
// id: "photos",
30
30
-
// label: "Photos",
31
31
-
// href: "/photos",
32
32
-
// }],
33
33
-
//);
26
26
+
env.add_global(
27
27
+
"nav_links",
28
28
+
Value::from_serialize([
29
29
+
NavLink {
30
30
+
id: "photos",
31
31
+
label: "Photos",
32
32
+
href: "/photos",
33
33
+
},
34
34
+
NavLink {
35
35
+
id: "music",
36
36
+
label: "Music",
37
37
+
href: "/music",
38
38
+
},
39
39
+
NavLink {
40
40
+
id: "blog",
41
41
+
label: "Blog",
42
42
+
href: "/blog",
43
43
+
},
44
44
+
NavLink {
45
45
+
id: "projects",
46
46
+
label: "Projects",
47
47
+
href: "/projects",
48
48
+
},
49
49
+
]),
50
50
+
);
34
51
Ok(env)
35
52
})
36
53
}
+23
-7
templates/layout.jinja
···
36
36
37
37
header {
38
38
display: flex;
39
39
-
align-items: center;
40
40
-
gap: 30px;
41
39
font-size: 16pt;
42
40
width: 100%;
43
41
border-bottom: solid black 3px;
···
54
52
55
53
header nav ul {
56
54
display: flex;
57
57
-
gap: 30px;
55
55
+
height: 100%;
58
56
list-style-type: none;
59
57
margin: 0;
60
58
padding: 0;
61
59
}
62
60
63
61
header nav ul a {
62
62
+
display: flex;
63
63
+
align-items: center;
64
64
+
height: 100%;
64
65
text-decoration: none;
65
66
color: black;
67
67
+
padding: 0 30px;
68
68
+
}
69
69
+
70
70
+
header nav ul a.active, header nav ul a:hover {
71
71
+
background-color: black;
72
72
+
color: white;
66
73
}
67
74
</style>
68
75
<title>
···
73
80
<body>
74
81
<div class="container">
75
82
<header>
83
83
+
<div>
76
84
<h1>Eric Wood</h1>
85
85
+
</div>
77
86
<nav>
78
87
<ul>
79
79
-
<li><a href="/photos">Photos</a></li>
80
80
-
<li><a href="">Music</a></li>
81
81
-
<li><a href="">Blog</a></li>
82
82
-
<li><a href="">Projects</a></li>
88
88
+
{% set active_page = active_page|default('') %}
89
89
+
{% for link in nav_links %}
90
90
+
<li>
91
91
+
<a
92
92
+
href="{{ link.href }}"
93
93
+
{% if active_page == link.id %}
94
94
+
class="active"
95
95
+
{% endif %}
96
96
+
>{{ link.label }}</a>
97
97
+
</li>
98
98
+
{% endfor %}
83
99
</ul>
84
100
</nav>
85
101
</header>
+1
templates/photos/index.jinja
···
1
1
{% extends "layout" %}
2
2
+
{% set active_page = 'photos' %}
2
3
{% block title %}Photos{% endblock %}
3
4
{% block head %}<link rel="stylesheet" href="/photos/assets/photos/index.css" />{% endblock %}
4
5
{% block body %}
+1
templates/photos/show.jinja
···
1
1
{% extends "layout" %}
2
2
+
{% set active_page = 'photos' %}
2
3
{% block title %}Photos / View{% endblock %}
3
4
{% block head %}<link rel="stylesheet" href="/photos/assets/photos/show.css" />{% endblock %}
4
5
{% block body %}