@@ -17,7 +17,7 @@ const (
17
17
func cardSpan (text , icon string ) elem.Node {
18
18
return elem .Span (
19
19
attrs.Props {
20
- "class" : "inline-block bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text -gray-700 mr-2 mb-2" ,
20
+ "class" : "inline-flex items-center px-3 py-1 rounded-lg text-xs font-medium bg -gray-700/70 text-gray-300 border border-gray-600/50 mr-2 mb-2" ,
21
21
},
22
22
elem .I (attrs.Props {
23
23
"class" : icon + " pr-2" ,
@@ -39,19 +39,20 @@ func searchableElement(text, icon string) elem.Node {
39
39
),
40
40
elem .Span (
41
41
attrs.Props {
42
- "class" : "inline-block bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2 hover:bg-gray-300 hover:shadow -gray-2 " ,
42
+ "class" : "inline-flex items-center text-xs px-3 py-1 rounded-full bg-gray-700/60 text-gray-300 border border-gray-600/50 hover:bg-gray-600 hover:text -gray-100 transition duration-200 ease-in-out " ,
43
43
},
44
44
elem .A (
45
45
attrs.Props {
46
46
// "name": "search",
47
47
// "value": text,
48
48
//"class": "inline-block bg-gray-200 rounded-full px-3 py-1 text-sm font-semibold text-gray-700 mr-2 mb-2",
49
- "href" : "#!" ,
50
- "hx-post" : "browse/search/models" ,
51
- "hx-target" : "#search-results" ,
49
+ //"href": "#!",
50
+ "href" : "browse?term=" + text ,
51
+ //"hx-post": "browse/search/models",
52
+ //"hx-target": "#search-results",
52
53
// TODO: this doesn't work
53
54
// "hx-vals": `{ \"search\": \"` + text + `\" }`,
54
- "hx-indicator" : ".htmx-indicator" ,
55
+ // "hx-indicator": ".htmx-indicator",
55
56
},
56
57
elem .I (attrs.Props {
57
58
"class" : icon + " pr-2" ,
@@ -101,7 +102,7 @@ func modalName(m *gallery.GalleryModel) string {
101
102
return m .Name + "-modal"
102
103
}
103
104
104
- func modelDescription (m * gallery.GalleryModel ) elem.Node {
105
+ func modelModal (m * gallery.GalleryModel ) elem.Node {
105
106
urls := []elem.Node {}
106
107
for _ , url := range m .URLs {
107
108
urls = append (urls ,
@@ -118,137 +119,140 @@ func modelDescription(m *gallery.GalleryModel) elem.Node {
118
119
119
120
return elem .Div (
120
121
attrs.Props {
121
- "class" : "p-6 text-surface dark:text-white" ,
122
+ "id" : modalName (m ),
123
+ "tabindex" : "-1" ,
124
+ "aria-hidden" : "true" ,
125
+ "class" : "hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full" ,
122
126
},
123
- elem .H5 (
124
- attrs.Props {
125
- "class" : "mb-2 text-xl font-bold leading-tight" ,
126
- },
127
- elem .Text (bluemonday .StrictPolicy ().Sanitize (m .Name )),
128
- ),
129
- elem .Div ( // small description
130
- attrs.Props {
131
- "class" : "mb-4 text-sm truncate text-base" ,
132
- },
133
- elem .Text (bluemonday .StrictPolicy ().Sanitize (m .Description )),
134
- ),
135
-
136
127
elem .Div (
137
128
attrs.Props {
138
- "id" : modalName (m ),
139
- "tabindex" : "-1" ,
140
- "aria-hidden" : "true" ,
141
- "class" : "hidden overflow-y-auto overflow-x-hidden fixed top-0 right-0 left-0 z-50 justify-center items-center w-full md:inset-0 h-[calc(100%-1rem)] max-h-full" ,
129
+ "class" : "relative p-4 w-full max-w-2xl max-h-full" ,
142
130
},
143
131
elem .Div (
144
132
attrs.Props {
145
- "class" : "relative p-4 w-full max-w-2xl max-h-full" ,
133
+ "class" : "relative p-4 w-full max-w-2xl max-h-full bg-white rounded-lg shadow dark:bg-gray-700 " ,
146
134
},
135
+ // header
147
136
elem .Div (
148
137
attrs.Props {
149
- "class" : "relative p-4 w-full max-w-2xl max-h-full bg-white rounded-lg shadow dark:bg -gray-700 " ,
138
+ "class" : "flex items-center justify-between p-4 md:p-5 border-b rounded-t dark:border -gray-600 " ,
150
139
},
151
- // header
152
- elem .Div (
140
+ elem .H3 (
153
141
attrs.Props {
154
- "class" : "flex items-center justify-between p-4 md:p-5 border-b rounded-t dark:border-gray-600 " ,
142
+ "class" : "text-xl font-semibold text-gray-900 dark:text-white " ,
155
143
},
156
- elem .H3 (
157
- attrs.Props {
158
- "class" : "text-xl font-semibold text-gray-900 dark:text-white" ,
159
- },
160
- elem .Text (bluemonday .StrictPolicy ().Sanitize (m .Name )),
144
+ elem .Text (bluemonday .StrictPolicy ().Sanitize (m .Name )),
145
+ ),
146
+ elem .Button ( // close button
147
+ attrs.Props {
148
+ "class" : "text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center dark:hover:bg-gray-600 dark:hover:text-white" ,
149
+ "data-modal-hide" : modalName (m ),
150
+ },
151
+ elem .Raw (
152
+ `<svg class="w-3 h-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 14">
153
+ <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"/>
154
+ </svg>` ,
161
155
),
162
- elem .Button ( // close button
156
+ elem .Span (
163
157
attrs.Props {
164
- "class" : "text-gray-400 bg-transparent hover:bg-gray-200 hover:text-gray-900 rounded-lg text-sm w-8 h-8 ms-auto inline-flex justify-center items-center dark:hover:bg-gray-600 dark:hover:text-white" ,
165
- "data-modal-hide" : modalName (m ),
158
+ "class" : "sr-only" ,
166
159
},
167
- elem .Raw (
168
- `<svg class="w-3 h-3" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 14 14">
169
- <path stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m1 1 6 6m0 0 6 6M7 7l6-6M7 7l-6 6"/>
170
- </svg>` ,
171
- ),
172
- elem .Span (
173
- attrs.Props {
174
- "class" : "sr-only" ,
175
- },
176
- elem .Text ("Close modal" ),
177
- ),
160
+ elem .Text ("Close modal" ),
178
161
),
179
162
),
180
- // body
163
+ ),
164
+ // body
165
+ elem .Div (
166
+ attrs.Props {
167
+ "class" : "p-4 md:p-5 space-y-4" ,
168
+ },
181
169
elem .Div (
182
170
attrs.Props {
183
- "class" : "p-4 md:p-5 space-y-4" ,
171
+ "class" : "flex justify-center items-center" ,
172
+ },
173
+ elem .Img (attrs.Props {
174
+ // "class": "rounded-t-lg object-fit object-center h-96",
175
+ "class" : "lazy rounded-t-lg max-h-48 max-w-96 object-cover mt-3 entered loaded" ,
176
+ "src" : m .Icon ,
177
+ "loading" : "lazy" ,
178
+ }),
179
+ ),
180
+ elem .P (
181
+ attrs.Props {
182
+ "class" : "text-base leading-relaxed text-gray-500 dark:text-gray-400" ,
184
183
},
184
+ elem .Text (bluemonday .StrictPolicy ().Sanitize (m .Description )),
185
+ ),
186
+ elem .Hr (
187
+ attrs.Props {},
188
+ ),
189
+ elem .P (
190
+ attrs.Props {
191
+ "class" : "text-sm font-semibold text-gray-900 dark:text-white" ,
192
+ },
193
+ elem .Text ("Links" ),
194
+ ),
195
+ elem .Ul (
196
+ attrs.Props {},
197
+ urls ... ,
198
+ ),
199
+ elem .If (
200
+ len (m .Tags ) > 0 ,
185
201
elem .Div (
186
- attrs.Props {
187
- "class" : "flex justify-center items-center" ,
188
- },
189
- elem .Img (attrs.Props {
190
- // "class": "rounded-t-lg object-fit object-center h-96",
191
- "class" : "lazy rounded-t-lg max-h-48 max-w-96 object-cover mt-3 entered loaded" ,
192
- "src" : m .Icon ,
193
- "loading" : "lazy" ,
194
- }),
195
- ),
196
- elem .P (
197
- attrs.Props {
198
- "class" : "text-base leading-relaxed text-gray-500 dark:text-gray-400" ,
199
- },
200
- elem .Text (bluemonday .StrictPolicy ().Sanitize (m .Description )),
201
- ),
202
- elem .Hr (
203
202
attrs.Props {},
204
- ),
205
- elem .P (
206
- attrs.Props {
207
- "class" : "text-sm font-semibold text-gray-900 dark:text-white" ,
208
- },
209
- elem .Text ("Links" ),
210
- ),
211
- elem .Ul (
212
- attrs.Props {},
213
- urls ... ,
214
- ),
215
- elem .If (
216
- len (m .Tags ) > 0 ,
203
+ elem .P (
204
+ attrs.Props {
205
+ "class" : "text-sm mb-5 font-semibold text-gray-900 dark:text-white" ,
206
+ },
207
+ elem .Text ("Tags" ),
208
+ ),
217
209
elem .Div (
218
- attrs.Props {},
219
- elem .P (
220
- attrs.Props {
221
- "class" : "text-sm mb-5 font-semibold text-gray-900 dark:text-white" ,
222
- },
223
- elem .Text ("Tags" ),
224
- ),
225
- elem .Div (
226
- attrs.Props {
227
- "class" : "flex flex-row flex-wrap content-center" ,
228
- },
229
- tagsNodes ... ,
230
- ),
210
+ attrs.Props {
211
+ "class" : "flex flex-row flex-wrap content-center" ,
212
+ },
213
+ tagsNodes ... ,
231
214
),
232
- elem .Div (attrs.Props {}),
233
215
),
216
+ elem .Div (attrs.Props {}),
234
217
),
235
- // Footer
236
- elem .Div (
218
+ ),
219
+ // Footer
220
+ elem .Div (
221
+ attrs.Props {
222
+ "class" : "flex items-center p-4 md:p-5 border-t border-gray-200 rounded-b dark:border-gray-600" ,
223
+ },
224
+ elem .Button (
237
225
attrs.Props {
238
- "class" : "flex items-center p-4 md:p-5 border-t border-gray-200 rounded-b dark:border-gray-600" ,
226
+ "data-modal-hide" : modalName (m ),
227
+ "class" : "py-2.5 px-5 ms-3 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700" ,
239
228
},
240
- elem .Button (
241
- attrs.Props {
242
- "data-modal-hide" : modalName (m ),
243
- "class" : "py-2.5 px-5 ms-3 text-sm font-medium text-gray-900 focus:outline-none bg-white rounded-lg border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:ring-gray-100 dark:focus:ring-gray-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700" ,
244
- },
245
- elem .Text ("Close" ),
246
- ),
229
+ elem .Text ("Close" ),
247
230
),
248
231
),
249
232
),
250
233
),
251
234
)
235
+
236
+ }
237
+
238
+ func modelDescription (m * gallery.GalleryModel ) elem.Node {
239
+ return elem .Div (
240
+ attrs.Props {
241
+ "class" : "p-6 text-surface dark:text-white" ,
242
+ },
243
+ elem .H5 (
244
+ attrs.Props {
245
+ "class" : "mb-2 text-xl font-bold leading-tight" ,
246
+ },
247
+ elem .Text (bluemonday .StrictPolicy ().Sanitize (m .Name )),
248
+ ),
249
+ elem .Div ( // small description
250
+ attrs.Props {
251
+ "class" : "mb-4 text-sm truncate text-base" ,
252
+ },
253
+ elem .Text (bluemonday .StrictPolicy ().Sanitize (m .Description )),
254
+ ),
255
+ )
252
256
}
253
257
254
258
func modelActionItems (m * gallery.GalleryModel , processTracker ProcessTracker , galleryService * services.GalleryService ) elem.Node {
@@ -397,7 +401,7 @@ func ListModels(models []*gallery.GalleryModel, processTracker ProcessTracker, g
397
401
modelsElements = append (modelsElements ,
398
402
elem .Div (
399
403
attrs.Props {
400
- "class" : " me-4 mb-2 block rounded-lg bg-white shadow-secondary-1 dark:bg-gray-800 dark:bg-surface-dark dark:text-white text-surface pb-2" ,
404
+ "class" : " me-4 mb-2 block rounded-lg bg-white shadow-secondary-1 dark:bg-gray-800 dark:bg-surface-dark dark:text-white text-surface pb-2 bg-gray-800/90 border border-gray-700/50 rounded-xl overflow-hidden transition-all duration-300 hover:shadow-lg hover:shadow-blue-900/20 hover:-translate-y-1 hover:border-blue-700/50 " ,
401
405
},
402
406
elem .Div (
403
407
attrs.Props {
@@ -406,6 +410,7 @@ func ListModels(models []*gallery.GalleryModel, processTracker ProcessTracker, g
406
410
elems ... ,
407
411
),
408
412
),
413
+ modelModal (m ),
409
414
)
410
415
}
411
416
0 commit comments