Author: Manos Pitsidianakis [manos@pitsidianak.is]
Hash: 211700ad9af25d3054860ec226bfdb6108166ae0
Timestamp: Fri, 19 May 2023 09:01:25 +0000 (1 year ago)

+89 -8 +/-6 browse
core/schema: add trigger that sorts topics alphabetically
1diff --git a/core/migrations/003.sql b/core/migrations/003.sql
2new file mode 100644
3index 0000000..039c720
4--- /dev/null
5+++ b/core/migrations/003.sql
6 @@ -0,0 +1,20 @@
7+ PRAGMA foreign_keys=ON;
8+
9+ UPDATE list SET topics = arr FROM (SELECT json_group_array(ord.val) AS arr, ord.pk AS pk FROM (SELECT json_each.value AS val, list.pk AS pk FROM list, json_each(list.topics) ORDER BY val ASC) AS ord GROUP BY pk) AS ord WHERE ord.pk = list.pk;
10+
11+ CREATE TRIGGER
12+ IF NOT EXISTS sort_topics_update_trigger
13+ AFTER UPDATE ON list
14+ FOR EACH ROW
15+ WHEN NEW.topics != OLD.topics
16+ BEGIN
17+ UPDATE list SET topics = ord.arr FROM (SELECT json_group_array(ord.val) AS arr, ord.pk AS pk FROM (SELECT json_each.value AS val, list.pk AS pk FROM list, json_each(list.topics) ORDER BY val ASC) AS ord GROUP BY pk) AS ord WHERE ord.pk = list.pk AND list.pk = NEW.pk;
18+ END;
19+
20+ CREATE TRIGGER
21+ IF NOT EXISTS sort_topics_new_trigger
22+ AFTER INSERT ON list
23+ FOR EACH ROW
24+ BEGIN
25+ UPDATE list SET topics = arr FROM (SELECT json_group_array(ord.val) AS arr, ord.pk AS pk FROM (SELECT json_each.value AS val, list.pk AS pk FROM list, json_each(list.topics) ORDER BY val ASC) AS ord GROUP BY pk) AS ord WHERE ord.pk = list.pk AND list.pk = NEW.pk;
26+ END;
27 diff --git a/core/migrations/003.undo.sql b/core/migrations/003.undo.sql
28new file mode 100644
29index 0000000..f6c7d9a
30--- /dev/null
31+++ b/core/migrations/003.undo.sql
32 @@ -0,0 +1,4 @@
33+ PRAGMA foreign_keys=ON;
34+
35+ DROP TRIGGER sort_topics_update_trigger;
36+ DROP TRIGGER sort_topics_new_trigger;
37 diff --git a/core/src/migrations.rs.inc b/core/src/migrations.rs.inc
38index ffdaa44..cca184e 100644
39--- a/core/src/migrations.rs.inc
40+++ b/core/src/migrations.rs.inc
41 @@ -8,4 +8,28 @@ ALTER TABLE template RENAME TO templates;
42 ALTER TABLE list ADD COLUMN topics JSON NOT NULL CHECK (json_type(topics) == 'array') DEFAULT '[]';
43 ","PRAGMA foreign_keys=ON;
44 ALTER TABLE list DROP COLUMN topics;
45+ "),(3,"PRAGMA foreign_keys=ON;
46+
47+ UPDATE list SET topics = arr FROM (SELECT json_group_array(ord.val) AS arr, ord.pk AS pk FROM (SELECT json_each.value AS val, list.pk AS pk FROM list, json_each(list.topics) ORDER BY val ASC) AS ord GROUP BY pk) AS ord WHERE ord.pk = list.pk;
48+
49+ CREATE TRIGGER
50+ IF NOT EXISTS sort_topics_update_trigger
51+ AFTER UPDATE ON list
52+ FOR EACH ROW
53+ WHEN NEW.topics != OLD.topics
54+ BEGIN
55+ UPDATE list SET topics = ord.arr FROM (SELECT json_group_array(ord.val) AS arr, ord.pk AS pk FROM (SELECT json_each.value AS val, list.pk AS pk FROM list, json_each(list.topics) ORDER BY val ASC) AS ord GROUP BY pk) AS ord WHERE ord.pk = list.pk AND list.pk = NEW.pk;
56+ END;
57+
58+ CREATE TRIGGER
59+ IF NOT EXISTS sort_topics_new_trigger
60+ AFTER INSERT ON list
61+ FOR EACH ROW
62+ BEGIN
63+ UPDATE list SET topics = arr FROM (SELECT json_group_array(ord.val) AS arr, ord.pk AS pk FROM (SELECT json_each.value AS val, list.pk AS pk FROM list, json_each(list.topics) ORDER BY val ASC) AS ord GROUP BY pk) AS ord WHERE ord.pk = list.pk AND list.pk = NEW.pk;
64+ END;
65+ ","PRAGMA foreign_keys=ON;
66+
67+ DROP TRIGGER sort_topics_update_trigger;
68+ DROP TRIGGER sort_topics_new_trigger;
69 "),]
70\ No newline at end of file
71 diff --git a/core/src/schema.sql b/core/src/schema.sql
72index aba82bb..4db9f82 100644
73--- a/core/src/schema.sql
74+++ b/core/src/schema.sql
75 @@ -468,3 +468,20 @@ BEGIN
76 UPDATE template SET last_modified = unixepoch()
77 WHERE pk = NEW.pk;
78 END;
79+
80+ CREATE TRIGGER
81+ IF NOT EXISTS sort_topics_update_trigger
82+ AFTER UPDATE ON list
83+ FOR EACH ROW
84+ WHEN NEW.topics != OLD.topics
85+ BEGIN
86+ UPDATE list SET topics = ord.arr FROM (SELECT json_group_array(ord.val) AS arr, ord.pk AS pk FROM (SELECT json_each.value AS val, list.pk AS pk FROM list, json_each(list.topics) ORDER BY val ASC) AS ord GROUP BY pk) AS ord WHERE ord.pk = list.pk AND list.pk = NEW.pk;
87+ END;
88+
89+ CREATE TRIGGER
90+ IF NOT EXISTS sort_topics_new_trigger
91+ AFTER INSERT ON list
92+ FOR EACH ROW
93+ BEGIN
94+ UPDATE list SET topics = arr FROM (SELECT json_group_array(ord.val) AS arr, ord.pk AS pk FROM (SELECT json_each.value AS val, list.pk AS pk FROM list, json_each(list.topics) ORDER BY val ASC) AS ord GROUP BY pk) AS ord WHERE ord.pk = list.pk AND list.pk = NEW.pk;
95+ END;
96 diff --git a/core/src/schema.sql.m4 b/core/src/schema.sql.m4
97index 93324d6..e09b8f7 100644
98--- a/core/src/schema.sql.m4
99+++ b/core/src/schema.sql.m4
100 @@ -290,3 +290,20 @@ update_last_modified(`subscription')
101 update_last_modified(`account')
102 update_last_modified(`candidate_subscription')
103 update_last_modified(`template')
104+
105+ CREATE TRIGGER
106+ IF NOT EXISTS sort_topics_update_trigger
107+ AFTER UPDATE ON list
108+ FOR EACH ROW
109+ WHEN NEW.topics != OLD.topics
110+ BEGIN
111+ UPDATE list SET topics = ord.arr FROM (SELECT json_group_array(ord.val) AS arr, ord.pk AS pk FROM (SELECT json_each.value AS val, list.pk AS pk FROM list, json_each(list.topics) ORDER BY val ASC) AS ord GROUP BY pk) AS ord WHERE ord.pk = list.pk AND list.pk = NEW.pk;
112+ END;
113+
114+ CREATE TRIGGER
115+ IF NOT EXISTS sort_topics_new_trigger
116+ AFTER INSERT ON list
117+ FOR EACH ROW
118+ BEGIN
119+ UPDATE list SET topics = arr FROM (SELECT json_group_array(ord.val) AS arr, ord.pk AS pk FROM (SELECT json_each.value AS val, list.pk AS pk FROM list, json_each(list.topics) ORDER BY val ASC) AS ord GROUP BY pk) AS ord WHERE ord.pk = list.pk AND list.pk = NEW.pk;
120+ END;
121 diff --git a/web/src/templates/css.html b/web/src/templates/css.html
122index 2029514..203cb5f 100644
123--- a/web/src/templates/css.html
124+++ b/web/src/templates/css.html
125 @@ -1016,29 +1016,28 @@
126 }
127
128 .tag {
129- --padding-top-bottom: 1px;
130- --padding-left-right: 5.4px;
131+ --padding-top-bottom: 0.2rem;
132+ --padding-left-right: .5rem;
133
134 display: inline-block;
135 border: 1px solid var(--tag-border-color);
136 border-radius:.2rem;
137 color: #555;
138- font-size: .9rem;
139- padding: 0px 0.4em 1px 0.4em;
140- padding: var(--padding-top-bottom) var(--padding-left-right);
141+ font-size: 1.05rem;
142+ padding: calc(var(--padding-top-bottom) / 2) var(--padding-left-right) var(--padding-top-bottom) var(--padding-left-right);
143 text-decoration: none;
144-
145 --aa-brightness: ((var(--red) * 299) + (var(--green) * 587) + (var(--blue) * 114)) / 1000;
146 --aa-color: calc((var(--aa-brightness) - 128) * -1000);
147 background: rgb(var(--red), var(--green), var(--blue));
148 color: rgb(var(--aa-color), var(--aa-color), var(--aa-color));
149 min-width: max-content;
150+ /* fallback */
151+ max-height: 1rem;
152+ min-height: 1rem;
153 max-height: calc(1.5cap + var(--padding-top-bottom));
154 min-height: calc(1.5cap + var(--padding-top-bottom));
155 }
156
157-
158-
159 span.tag-name a {
160 text-decoration: none;
161 color: inherit;