Combine all card templates into cards.html.
This commit is contained in:
		
							parent
							
								
									fb5f2f2470
								
							
						
					
					
						commit
						5e7b90cbe4
					
				
					 14 changed files with 253 additions and 246 deletions
				
			
		|  | @ -50,6 +50,12 @@ def file_link(photo, short=False): | ||||||
| def islice(gen, start, stop): | def islice(gen, start, stop): | ||||||
|     return itertools.islice(gen, start, stop) |     return itertools.islice(gen, start, stop) | ||||||
| 
 | 
 | ||||||
|  | @filter_function | ||||||
|  | def join_and_trail(l, s): | ||||||
|  |     if not l: | ||||||
|  |         return '' | ||||||
|  |     return s.join(l) + s | ||||||
|  | 
 | ||||||
| @filter_function | @filter_function | ||||||
| def timestamp_to_8601(timestamp): | def timestamp_to_8601(timestamp): | ||||||
|     return datetime.datetime.utcfromtimestamp(timestamp).isoformat(' ') + ' UTC' |     return datetime.datetime.utcfromtimestamp(timestamp).isoformat(' ') + ' UTC' | ||||||
|  |  | ||||||
|  | @ -146,9 +146,9 @@ | ||||||
|     position: relative; |     position: relative; | ||||||
|     display: grid; |     display: grid; | ||||||
|     grid-template: |     grid-template: | ||||||
|         "checkbox filename metadata" auto |         "checkbox filename metadata tags" auto | ||||||
|         /auto     1fr      auto; |         /auto     1fr      auto     auto; | ||||||
| 
 |     grid-column-gap: 4px; | ||||||
|     margin: 8px; |     margin: 8px; | ||||||
|     padding: 4px; |     padding: 4px; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -64,7 +64,7 @@ h2, h3 | ||||||
| 
 | 
 | ||||||
| <head> | <head> | ||||||
|     {% import "header.html" as header %} |     {% import "header.html" as header %} | ||||||
|     {% import "album_card.html" as album_card %} |     {% import "cards.html" as cards %} | ||||||
|     <title>Albums</title> |     <title>Albums</title> | ||||||
|     <meta charset="UTF-8"> |     <meta charset="UTF-8"> | ||||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> |     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> | ||||||
|  | @ -85,7 +85,7 @@ h2, h3 | ||||||
|         <div id="album_list" class="panel"> |         <div id="album_list" class="panel"> | ||||||
|             <h2>Albums</h2> |             <h2>Albums</h2> | ||||||
|             {% for album in albums %} |             {% for album in albums %} | ||||||
|             {{album_card.create_album_card(album, view=view, draggable=true)}} |             {{cards.create_album_card(album, view=view, draggable=true)}} | ||||||
|             {% endfor %} |             {% endfor %} | ||||||
|         </div> |         </div> | ||||||
|     </div> |     </div> | ||||||
|  | @ -116,8 +116,7 @@ const ALBUM_ID = undefined; | ||||||
| 
 | 
 | ||||||
| <head> | <head> | ||||||
|     {% import "header.html" as header %} |     {% import "header.html" as header %} | ||||||
|     {% import "album_card.html" as album_card %} |     {% import "cards.html" as cards %} | ||||||
|     {% import "photo_card.html" as photo_card %} |  | ||||||
|     {% import "clipboard_tray.html" as clipboard_tray %} |     {% import "clipboard_tray.html" as clipboard_tray %} | ||||||
|     <title>{{album.display_name}} | Albums</title> |     <title>{{album.display_name}} | Albums</title> | ||||||
|     <meta charset="UTF-8"> |     <meta charset="UTF-8"> | ||||||
|  | @ -221,11 +220,11 @@ const ALBUM_ID = undefined; | ||||||
|             {% if parents %} |             {% if parents %} | ||||||
|                 <h3>{{parents|length}} Parents</h3> |                 <h3>{{parents|length}} Parents</h3> | ||||||
|                 {% for parent in parents %} |                 {% for parent in parents %} | ||||||
|                     {{album_card.create_album_card(parent, view=view)}} |                     {{cards.create_album_card(parent, view=view)}} | ||||||
|                 {% endfor %} |                 {% endfor %} | ||||||
|             {% else %} |             {% else %} | ||||||
|                 <h3>1 Parent</h3> |                 <h3>1 Parent</h3> | ||||||
|                 {{album_card.create_album_card("root", view=view)}} |                 {{cards.create_album_card("root", view=view)}} | ||||||
|             {% endif %} |             {% endif %} | ||||||
|         </div> |         </div> | ||||||
| 
 | 
 | ||||||
|  | @ -234,7 +233,7 @@ const ALBUM_ID = undefined; | ||||||
|         <div id="hierarchy_children" class="panel"> |         <div id="hierarchy_children" class="panel"> | ||||||
|             <h3>{{sub_albums|length}} Children</h3> |             <h3>{{sub_albums|length}} Children</h3> | ||||||
|             {% for sub_album in sub_albums|sort(attribute='title') %} |             {% for sub_album in sub_albums|sort(attribute='title') %} | ||||||
|                 {{album_card.create_album_card(sub_album, view=view, unlink_parent=album, draggable=true)}} |                 {{cards.create_album_card(sub_album, view=view, unlink_parent=album, draggable=true)}} | ||||||
|             {% endfor %} |             {% endfor %} | ||||||
|         </div> |         </div> | ||||||
|         {% endif %} |         {% endif %} | ||||||
|  | @ -245,7 +244,7 @@ const ALBUM_ID = undefined; | ||||||
|             <h3>{{photos|length}} Photos</h3> |             <h3>{{photos|length}} Photos</h3> | ||||||
|             <div id="photo_list"> |             <div id="photo_list"> | ||||||
|             {% for photo in photos|sort(attribute='basename', case_sensitive=False) %} |             {% for photo in photos|sort(attribute='basename', case_sensitive=False) %} | ||||||
|                 {{photo_card.create_photo_card(photo, view=view)}} |                 {{cards.create_photo_card(photo, view=view)}} | ||||||
|             {% endfor %} |             {% endfor %} | ||||||
|             </div> |             </div> | ||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|  | @ -1,63 +0,0 @@ | ||||||
| {% macro create_album_card(album, view="grid", unlink_parent=none, draggable=false) %} |  | ||||||
| {% set id = "album_card_root" if album == "root" else "album_card_" + album.id %} |  | ||||||
| {% set view = (view if view in ("list", "grid") else "grid") %} |  | ||||||
| {% set viewparam = "?view=list" if view == "list" else "" %} |  | ||||||
| <div |  | ||||||
| id="{{id}}" |  | ||||||
| class="album_card album_card_{{view}}" |  | ||||||
| data-id="{{'root' if album == 'root' else album.id}}" |  | ||||||
| ondragstart="return on_album_drag_start(event);" |  | ||||||
| ondragend="return on_album_drag_end(event);" |  | ||||||
| ondragover="return on_album_drag_over(event);" |  | ||||||
| ondrop="return on_album_drag_drop(event);" |  | ||||||
| {% if album != "root" and draggable %} |  | ||||||
| draggable=true |  | ||||||
| {% endif %} |  | ||||||
| > |  | ||||||
|     {% if album == "root" %} |  | ||||||
|     <a class="album_card_thumbnail" href="/albums{{viewparam}}"> |  | ||||||
|     {% else %} |  | ||||||
|     <a class="album_card_thumbnail" href="/album/{{album.id}}{{viewparam}}"> |  | ||||||
|     {% endif %} |  | ||||||
|     {% if album.thumbnail_photo %} |  | ||||||
|     {% set thumbnail_src = "/thumbnail/" + album.thumbnail_photo.id + ".jpg" %} |  | ||||||
|     {% else %} |  | ||||||
|     {% set thumbnail_src = "/static/basic_thumbnails/album.png" %} |  | ||||||
|     {% endif %} |  | ||||||
|     <img src="{{thumbnail_src}}"/> |  | ||||||
|     </a> |  | ||||||
| 
 |  | ||||||
|     <div class="album_card_tools"> |  | ||||||
|         {% if unlink_parent is not none %} |  | ||||||
|         <button |  | ||||||
|         class="remove_child_button button_with_confirm red_button" |  | ||||||
|         data-onclick="return api.albums.remove_child('{{unlink_parent.id}}', '{{album.id}}', common.refresh_or_alert);" |  | ||||||
|         data-prompt="Remove child?" |  | ||||||
|         data-holder-class="remove_child_button" |  | ||||||
|         data-confirm-class="red_button" |  | ||||||
|         data-cancel-class="gray_button" |  | ||||||
|         >Unlink |  | ||||||
|         </button> |  | ||||||
|         {% endif %} |  | ||||||
|     </div> |  | ||||||
| 
 |  | ||||||
|     <div class="album_card_title"> |  | ||||||
|         {% if album == "root" %} |  | ||||||
|         <a href="/albums{{viewparam}}">Albums</a> |  | ||||||
|         {% else %} |  | ||||||
|         <a href="/album/{{album.id}}{{viewparam}}">{{album.display_name}}</a> |  | ||||||
|         {% endif %} |  | ||||||
|     </div> |  | ||||||
| 
 |  | ||||||
|     <div class="album_card_metadata"> |  | ||||||
|         {% if album == "root" %} |  | ||||||
|         {% else %} |  | ||||||
|         {% set child_count = album.sum_children(recurse=False) %} |  | ||||||
|         {% set photo_count = album.sum_photos(recurse=False) %} |  | ||||||
|         <span class="album_card_child_count" title="{{child_count}} child albums">{{child_count}}</span> |  | ||||||
|         {{-' | '-}} |  | ||||||
|         <span class="album_card_photo_count" title="{{photo_count}} photos">{{photo_count}}</span> |  | ||||||
|         {% endif %} |  | ||||||
|     </div> |  | ||||||
| </div> |  | ||||||
| {% endmacro %} |  | ||||||
|  | @ -1,20 +0,0 @@ | ||||||
| {% macro create_bookmark_card(bookmark, add_delete_button=False) %} |  | ||||||
| <div class="bookmark_card" data-id="{{bookmark.id}}"> |  | ||||||
|     <a href="{{bookmark.url}}" class="bookmark_title">{{bookmark.display_name}}</a> |  | ||||||
| 
 |  | ||||||
|     <a href="{{bookmark.url}}" class="bookmark_url">{{bookmark.url}}</a> |  | ||||||
| 
 |  | ||||||
|     <div class="bookmark_toolbox"> |  | ||||||
|         {% if add_delete_button %} |  | ||||||
|         <button |  | ||||||
|         class="red_button button_with_confirm" |  | ||||||
|         data-onclick="return delete_bookmark_form(event);" |  | ||||||
|         data-prompt="Delete Bookmark?" |  | ||||||
|         data-cancel-class="gray_button" |  | ||||||
|         > |  | ||||||
|             Delete |  | ||||||
|         </button> |  | ||||||
|         {% endif %} |  | ||||||
|     </div> |  | ||||||
| </div> |  | ||||||
| {% endmacro %} |  | ||||||
|  | @ -1,8 +1,8 @@ | ||||||
| <!DOCTYPE html5> | <!DOCTYPE html5> | ||||||
| <html> | <html> | ||||||
| <head> | <head> | ||||||
|     {% import "bookmark_card.html" as bookmark_card %} |  | ||||||
|     {% import "header.html" as header %} |     {% import "header.html" as header %} | ||||||
|  |     {% import "cards.html" as cards %} | ||||||
|     <title>Bookmarks</title> |     <title>Bookmarks</title> | ||||||
|     <meta charset="UTF-8"> |     <meta charset="UTF-8"> | ||||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> |     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> | ||||||
|  | @ -31,7 +31,7 @@ | ||||||
|         <div id="bookmark_list"> |         <div id="bookmark_list"> | ||||||
|             <h2>Bookmarks</h2> |             <h2>Bookmarks</h2> | ||||||
|             {% for bookmark in bookmarks %} |             {% for bookmark in bookmarks %} | ||||||
|             {{bookmark_card.create_bookmark_card(bookmark, add_delete_button=True)}} |             {{cards.create_bookmark_card(bookmark, add_delete_button=True)}} | ||||||
|             {% endfor %} |             {% endfor %} | ||||||
| 
 | 
 | ||||||
|             <div class="bookmark_card new_bookmark_card"> |             <div class="bookmark_card new_bookmark_card"> | ||||||
|  |  | ||||||
							
								
								
									
										202
									
								
								frontends/etiquette_flask/templates/cards.html
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										202
									
								
								frontends/etiquette_flask/templates/cards.html
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,202 @@ | ||||||
|  | {# ALBUM ######################################################################} | ||||||
|  | 
 | ||||||
|  | {% macro create_album_card(album, view="grid", unlink_parent=none, draggable=false) %} | ||||||
|  | {% set id = "album_card_root" if album == "root" else "album_card_" + album.id %} | ||||||
|  | {% set view = (view if view in ("list", "grid") else "grid") %} | ||||||
|  | {% set viewparam = "?view=list" if view == "list" else "" %} | ||||||
|  | <div | ||||||
|  | id="{{id}}" | ||||||
|  | class="album_card album_card_{{view}}" | ||||||
|  | data-id="{{'root' if album == 'root' else album.id}}" | ||||||
|  | ondragstart="return on_album_drag_start(event);" | ||||||
|  | ondragend="return on_album_drag_end(event);" | ||||||
|  | ondragover="return on_album_drag_over(event);" | ||||||
|  | ondrop="return on_album_drag_drop(event);" | ||||||
|  | {% if album != "root" and draggable %} | ||||||
|  | draggable=true | ||||||
|  | {% endif %} | ||||||
|  | > | ||||||
|  |     {% if album == "root" %} | ||||||
|  |     <a class="album_card_thumbnail" href="/albums{{viewparam}}"> | ||||||
|  |     {% else %} | ||||||
|  |     <a class="album_card_thumbnail" href="/album/{{album.id}}{{viewparam}}"> | ||||||
|  |     {% endif %} | ||||||
|  |     {% if album.thumbnail_photo %} | ||||||
|  |     {% set thumbnail_src = "/thumbnail/" + album.thumbnail_photo.id + ".jpg" %} | ||||||
|  |     {% else %} | ||||||
|  |     {% set thumbnail_src = "/static/basic_thumbnails/album.png" %} | ||||||
|  |     {% endif %} | ||||||
|  |     <img src="{{thumbnail_src}}"/> | ||||||
|  |     </a> | ||||||
|  | 
 | ||||||
|  |     <div class="album_card_title"> | ||||||
|  |         {% if album == "root" %} | ||||||
|  |         <a href="/albums{{viewparam}}">Albums</a> | ||||||
|  |         {% else %} | ||||||
|  |         <a href="/album/{{album.id}}{{viewparam}}">{{album.display_name}}</a> | ||||||
|  |         {% endif %} | ||||||
|  |     </div> | ||||||
|  | 
 | ||||||
|  |     <div class="album_card_metadata"> | ||||||
|  |         {% if album != "root" %} | ||||||
|  |         {% set child_count = album.sum_children(recurse=False) %} | ||||||
|  |         {% set photo_count = album.sum_photos(recurse=False) %} | ||||||
|  |         <span class="album_card_child_count" title="{{child_count}} child albums">{{child_count}}</span> | ||||||
|  |         {{-' | '-}} | ||||||
|  |         <span class="album_card_photo_count" title="{{photo_count}} photos">{{photo_count}}</span> | ||||||
|  |         {% endif %} | ||||||
|  |     </div> | ||||||
|  | 
 | ||||||
|  |     <div class="album_card_tools"> | ||||||
|  |         {% if unlink_parent is not none %} | ||||||
|  |         <button | ||||||
|  |         class="remove_child_button button_with_confirm red_button" | ||||||
|  |         data-onclick="return api.albums.remove_child('{{unlink_parent.id}}', '{{album.id}}', common.refresh_or_alert);" | ||||||
|  |         data-prompt="Remove child?" | ||||||
|  |         data-holder-class="remove_child_button" | ||||||
|  |         data-confirm-class="red_button" | ||||||
|  |         data-cancel-class="gray_button" | ||||||
|  |         >Unlink | ||||||
|  |         </button> | ||||||
|  |         {% endif %} | ||||||
|  |     </div> | ||||||
|  | </div> | ||||||
|  | {% endmacro %} | ||||||
|  | 
 | ||||||
|  | {# BOOKMARK ###################################################################} | ||||||
|  | 
 | ||||||
|  | {% macro create_bookmark_card(bookmark, add_delete_button=False) %} | ||||||
|  | <div class="bookmark_card" data-id="{{bookmark.id}}"> | ||||||
|  |     <a href="{{bookmark.url}}" class="bookmark_title">{{bookmark.display_name}}</a> | ||||||
|  | 
 | ||||||
|  |     <a href="{{bookmark.url}}" class="bookmark_url">{{bookmark.url}}</a> | ||||||
|  | 
 | ||||||
|  |     <div class="bookmark_toolbox"> | ||||||
|  |         {% if add_delete_button %} | ||||||
|  |         <button | ||||||
|  |         class="red_button button_with_confirm" | ||||||
|  |         data-onclick="return delete_bookmark_form(event);" | ||||||
|  |         data-prompt="Delete Bookmark?" | ||||||
|  |         data-cancel-class="gray_button" | ||||||
|  |         > | ||||||
|  |             Delete | ||||||
|  |         </button> | ||||||
|  |         {% endif %} | ||||||
|  |     </div> | ||||||
|  | </div> | ||||||
|  | {% endmacro %} | ||||||
|  | 
 | ||||||
|  | {# PHOTO ######################################################################} | ||||||
|  | 
 | ||||||
|  | {# Priority: specific extensions > specific mimetypes > general mimtypes #} | ||||||
|  | {% set thumbnails = | ||||||
|  |     { | ||||||
|  |         "svg": "svg", | ||||||
|  | 
 | ||||||
|  |         "application/zip": "archive", | ||||||
|  |         "application/x-tar": "archive", | ||||||
|  | 
 | ||||||
|  |         "archive": "archive", | ||||||
|  |         "audio": "audio", | ||||||
|  |         "image": "image", | ||||||
|  |         "video": "video", | ||||||
|  |         "text": "txt", | ||||||
|  | 
 | ||||||
|  |     } | ||||||
|  | %} | ||||||
|  | {% macro create_photo_card(photo, view="grid") %} | ||||||
|  | {% set view = (view if view in ("list", "grid") else "grid") %} | ||||||
|  | 
 | ||||||
|  | {% set metadatas = [] %} | ||||||
|  | {% if photo.width %} | ||||||
|  |     {% do metadatas.append("{w}×{h}".format(w=photo.width, h=photo.height)) %} | ||||||
|  | {% endif %} | ||||||
|  | {% if photo.duration %} | ||||||
|  |     {% do metadatas.append("{d}".format(d=photo.duration_string)) %} | ||||||
|  | {% endif -%} | ||||||
|  | 
 | ||||||
|  | {% set tag_names_title = [] %} | ||||||
|  | {% for tag in photo.get_tags() %} | ||||||
|  |     {% do tag_names_title.append(tag.name) %} | ||||||
|  | {% endfor -%} | ||||||
|  | {% set tag_names_title = tag_names_title|comma_join %} | ||||||
|  | {% set tag_names_inner = "T" if tag_names_title else "" %} | ||||||
|  | 
 | ||||||
|  | <div | ||||||
|  | data-id="{{photo.id}}" | ||||||
|  | class="photo_card photo_card_{{view}} photo_card_unselected {%if photo.searchhidden%}photo_card_searchhidden{%endif%}" | ||||||
|  | > | ||||||
|  |     <div class="photo_card_filename"><a target="_blank" href="/photo/{{photo.id}}">{{photo.basename}}</a></div> | ||||||
|  | 
 | ||||||
|  |     <span class="photo_card_metadata"> | ||||||
|  |         {{- metadatas|join_and_trail(", ")|safe -}} | ||||||
|  |         <a target="_blank" href="{{photo|file_link}}">{{photo.bytestring}}</a> | ||||||
|  |     </span> | ||||||
|  | 
 | ||||||
|  |     {% if view == "grid" %} | ||||||
|  |     {% if photo.thumbnail %} | ||||||
|  |         {% set thumbnail_src = "/thumbnail/" + photo.id + ".jpg" %} | ||||||
|  |     {% else %} | ||||||
|  |         {% set thumbnail_src = | ||||||
|  |             thumbnails.get(photo.extension, "") or | ||||||
|  |             thumbnails.get(photo.mimetype, "") or | ||||||
|  |             thumbnails.get(photo.simple_mimetype, "") or | ||||||
|  |             "other" | ||||||
|  |         %} | ||||||
|  |         {% set thumbnail_src = "/static/basic_thumbnails/" + thumbnail_src + ".png" %} | ||||||
|  |     {% endif -%}{# if thumbnail #} | ||||||
|  | 
 | ||||||
|  |     <a class="photo_card_thumbnail" target="_blank" href="/photo/{{photo.id}}"><img loading="lazy" src="{{thumbnail_src}}"></a> | ||||||
|  |     {% endif %}{# if grid #} | ||||||
|  | 
 | ||||||
|  |     <span class="photo_card_tags" title="{{tag_names_title}}">{{tag_names_inner}}</span> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  | {% endmacro %} | ||||||
|  | 
 | ||||||
|  | {# TAG ########################################################################} | ||||||
|  | 
 | ||||||
|  | <!-- | ||||||
|  |     tag: The Tag object | ||||||
|  |     extra_classes: | ||||||
|  |         Space-separated string, if you want more than "tag_card". | ||||||
|  |     innertext: | ||||||
|  |         A string to use as the innertext. | ||||||
|  |         Otherwise, will use the name based on the other parameters. | ||||||
|  |     link: | ||||||
|  |         None = no link, just a <span> | ||||||
|  |         'search' = link to /search?tag_musts=tagname | ||||||
|  |         'search_musts' = link to /search?tag_musts=tagname | ||||||
|  |         'search_mays' = link to /search?tag_mays=tagname | ||||||
|  |         'search_forbids' = link to /search?tag_forbids=tagname | ||||||
|  |         'info' = link to /tags/tagname | ||||||
|  |     with_alt_description: | ||||||
|  |         True: Include the description in the alt text | ||||||
|  | --> | ||||||
|  | {%- macro create_tag_card( | ||||||
|  |     tag, | ||||||
|  |     extra_classes="", | ||||||
|  |     innertext=None, | ||||||
|  |     innertext_safe=None, | ||||||
|  |     link='info', | ||||||
|  |     onclick=None, | ||||||
|  |     with_alt_description=False | ||||||
|  | ) -%} | ||||||
|  | 
 | ||||||
|  | {%- set href = { | ||||||
|  |         "search": "/search?tag_musts=" + (tag.name|urlencode), | ||||||
|  |         "search_musts": "/search?tag_musts=" + (tag.name|urlencode), | ||||||
|  |         "search_mays": "/search?tag_mays=" + (tag.name|urlencode), | ||||||
|  |         "search_forbids": "/search?tag_forbids=" + (tag.name|urlencode), | ||||||
|  |         "info": "/tag/" + tag.name, | ||||||
|  |         None: None, | ||||||
|  |     }.get(link, link) | ||||||
|  | -%} | ||||||
|  | {%- set class = ("tag_card" + " " + extra_classes).strip() -%} | ||||||
|  | {%- set title = (with_alt_description and tag.description) or None -%} | ||||||
|  | {%- set innertext = innertext_safe or (innertext or tag.name)|e -%} | ||||||
|  | {%- set element = "a" if (link or onclick) else "span" -%} | ||||||
|  | 
 | ||||||
|  | <{{element}} {{make_attributes(class=class, title=title, href=href, onclick=onclick, **kwargs)|safe}}>{{innertext|safe}}</{{element}}> | ||||||
|  | {{-''-}} | ||||||
|  | {%- endmacro -%} | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| <html> | <html> | ||||||
| <head> | <head> | ||||||
|     {% import "header.html" as header %} |     {% import "header.html" as header %} | ||||||
|     {% import "tag_card.html" as tag_card %} |     {% import "cards.html" as cards %} | ||||||
|     <title>{{photo.basename}} | Photos</title> |     <title>{{photo.basename}} | Photos</title> | ||||||
|     <meta charset="UTF-8"> |     <meta charset="UTF-8"> | ||||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> |     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> | ||||||
|  | @ -162,7 +162,7 @@ | ||||||
|             {% set tags = photo.get_tags()|sort(attribute='name') %} |             {% set tags = photo.get_tags()|sort(attribute='name') %} | ||||||
|             {% for tag in tags %} |             {% for tag in tags %} | ||||||
|             <li> |             <li> | ||||||
|                 {{tag_card.create_tag_card(tag, link="info", with_alt_description=True)}}<!-- |                 {{cards.create_tag_card(tag, link="info", with_alt_description=True)}}<!-- | ||||||
|                 --><button |                 --><button | ||||||
|                 class="remove_tag_button red_button" |                 class="remove_tag_button red_button" | ||||||
|                 onclick="return remove_photo_tag_form('{{photo.id}}', '{{tag.name}}');"> |                 onclick="return remove_photo_tag_form('{{photo.id}}', '{{tag.name}}');"> | ||||||
|  |  | ||||||
|  | @ -1,67 +0,0 @@ | ||||||
| {# Specific extensions, then specific mimetypes, then general mimtypes #} |  | ||||||
| {% set thumbnails = |  | ||||||
|     { |  | ||||||
|         "svg": "svg", |  | ||||||
| 
 |  | ||||||
|         "application/zip": "archive", |  | ||||||
|         "application/x-tar": "archive", |  | ||||||
| 
 |  | ||||||
|         "archive": "archive", |  | ||||||
|         "audio": "audio", |  | ||||||
|         "image": "image", |  | ||||||
|         "video": "video", |  | ||||||
|         "text": "txt", |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| %} |  | ||||||
| {% macro create_photo_card(photo, view="grid") %} |  | ||||||
| {% set view = (view if view in ("list", "grid") else "grid") %} |  | ||||||
| 
 |  | ||||||
| {% set metadata_inner = "" %} |  | ||||||
| {% if photo.width %} |  | ||||||
|     {% set metadata_inner = "{m}{w}×{h}, ".format(m=metadata_inner, w=photo.width, h=photo.height) %} |  | ||||||
| {% endif %} |  | ||||||
| {% if photo.duration %} |  | ||||||
|     {% set metadata_inner = "{m}{d}, ".format(m=metadata_inner, d=photo.duration_string) %} |  | ||||||
| {% endif -%} |  | ||||||
| 
 |  | ||||||
| <div |  | ||||||
|     data-id="{{photo.id}}" |  | ||||||
|     class="photo_card photo_card_{{view}} photo_card_unselected {%if photo.searchhidden%}photo_card_searchhidden{%endif%}" |  | ||||||
| > |  | ||||||
|     <div class="photo_card_filename"><a target="_blank" href="/photo/{{photo.id}}">{{photo.basename}}</a></div> |  | ||||||
|     <span class="photo_card_metadata"> |  | ||||||
|         {{- metadata_inner|safe -}} |  | ||||||
|         <a target="_blank" href="{{photo|file_link}}">{{photo.bytestring}}</a> |  | ||||||
|     </span> |  | ||||||
| 
 |  | ||||||
|     {% if view == "grid" %} |  | ||||||
|     {% if photo.thumbnail %} |  | ||||||
|         {% set thumbnail_src = "/thumbnail/" + photo.id + ".jpg" %} |  | ||||||
|     {% else %} |  | ||||||
|         {% set thumbnail_src = |  | ||||||
|             thumbnails.get(photo.extension, "") or |  | ||||||
|             thumbnails.get(photo.mimetype, "") or |  | ||||||
|             thumbnails.get(photo.simple_mimetype, "") or |  | ||||||
|             "other" |  | ||||||
|         %} |  | ||||||
|         {% set thumbnail_src = "/static/basic_thumbnails/" + thumbnail_src + ".png" %} |  | ||||||
|     {% endif -%} |  | ||||||
| 
 |  | ||||||
|     {% set tag_names_title = [] %} |  | ||||||
|     {% for tag in photo.get_tags() %} |  | ||||||
|         {% do tag_names_title.append(tag.name) %} |  | ||||||
|     {% endfor -%} |  | ||||||
| 
 |  | ||||||
|     {% set tag_names_title = ", ".join(tag_names_title) %} |  | ||||||
|     {% if tag_names_title %} |  | ||||||
|         {% set tag_names_inner = "T" %} |  | ||||||
|     {% else %} |  | ||||||
|         {% set tag_names_inner = "" %} |  | ||||||
|     {% endif -%} |  | ||||||
|     <a class="photo_card_thumbnail" target="_blank" href="/photo/{{photo.id}}"><img loading="lazy" src="{{thumbnail_src}}"></a> |  | ||||||
|     <span class="photo_card_tags" title="{{tag_names_title}}">{{tag_names_inner}}</span> |  | ||||||
|     {% endif %} |  | ||||||
| </div> |  | ||||||
| 
 |  | ||||||
| {% endmacro %} |  | ||||||
|  | @ -2,9 +2,7 @@ | ||||||
| <html> | <html> | ||||||
| <head> | <head> | ||||||
|     {% import "header.html" as header %} |     {% import "header.html" as header %} | ||||||
|     {% import "album_card.html" as album_card %} |     {% import "cards.html" as cards %} | ||||||
|     {% import "photo_card.html" as photo_card %} |  | ||||||
|     {% import "tag_card.html" as tag_card %} |  | ||||||
|     {% import "clipboard_tray.html" as clipboard_tray %} |     {% import "clipboard_tray.html" as clipboard_tray %} | ||||||
|     <title>Search</title> |     <title>Search</title> | ||||||
|     <meta charset="UTF-8"> |     <meta charset="UTF-8"> | ||||||
|  | @ -200,7 +198,7 @@ | ||||||
|                 {% if search_kwargs[key] %} |                 {% if search_kwargs[key] %} | ||||||
|                     {% for tag in search_kwargs[key] %} |                     {% for tag in search_kwargs[key] %} | ||||||
|                         <li class="search_builder_{{tagtype}}_inputted"> |                         <li class="search_builder_{{tagtype}}_inputted"> | ||||||
|                             {{tag_card.create_tag_card(tag, link='info', with_alt_description=True)}}<!-- |                             {{cards.create_tag_card(tag, link='info', with_alt_description=True)}}<!-- | ||||||
|                             --><button class="remove_tag_button red_button" |                             --><button class="remove_tag_button red_button" | ||||||
|                             onclick="return remove_searchtag(ul_{{tagtype}}, '{{tag.name}}', inputted_{{tagtype}});"></button> |                             onclick="return remove_searchtag(ul_{{tagtype}}, '{{tag.name}}', inputted_{{tagtype}});"></button> | ||||||
|                         </li> |                         </li> | ||||||
|  | @ -327,28 +325,28 @@ | ||||||
|         <ul id="tags_on_this_page_list"> |         <ul id="tags_on_this_page_list"> | ||||||
|             {% for tag in total_tags %} |             {% for tag in total_tags %} | ||||||
|             <li> |             <li> | ||||||
|                 {{tag_card.create_tag_card( |                 {{cards.create_tag_card( | ||||||
|                     tag, |                     tag, | ||||||
|                     link=None, |                     link=None, | ||||||
|                     onclick="return tags_on_this_page_add_must(event, '" + tag.name + "');", |                     onclick="return tags_on_this_page_add_must(event, '" + tag.name + "');", | ||||||
|                     innertext="(+)", |                     innertext="(+)", | ||||||
|                 )}} |                 )}} | ||||||
| 
 | 
 | ||||||
|                 {{tag_card.create_tag_card( |                 {{cards.create_tag_card( | ||||||
|                     tag, |                     tag, | ||||||
|                     link=None, |                     link=None, | ||||||
|                     onclick="return tags_on_this_page_add_may(event, '" + tag.name + "');", |                     onclick="return tags_on_this_page_add_may(event, '" + tag.name + "');", | ||||||
|                     innertext="(~)", |                     innertext="(~)", | ||||||
|                 )}} |                 )}} | ||||||
| 
 | 
 | ||||||
|                 {{tag_card.create_tag_card( |                 {{cards.create_tag_card( | ||||||
|                     tag, |                     tag, | ||||||
|                     link=None, |                     link=None, | ||||||
|                     onclick="return tags_on_this_page_add_forbid(event, '" + tag.name + "');", |                     onclick="return tags_on_this_page_add_forbid(event, '" + tag.name + "');", | ||||||
|                     innertext="(x)", |                     innertext="(x)", | ||||||
|                 )}} |                 )}} | ||||||
| 
 | 
 | ||||||
|                 {{tag_card.create_tag_card( |                 {{cards.create_tag_card( | ||||||
|                     tag, |                     tag, | ||||||
|                     link="info", |                     link="info", | ||||||
|                     with_alt_description=True, |                     with_alt_description=True, | ||||||
|  | @ -375,9 +373,9 @@ | ||||||
|         <div id="search_results_holder" class="photos_holder"> |         <div id="search_results_holder" class="photos_holder"> | ||||||
|             {% for result in results %} |             {% for result in results %} | ||||||
|                 {% if result.__class__.__name__ == 'Photo' %} |                 {% if result.__class__.__name__ == 'Photo' %} | ||||||
|                 {{photo_card.create_photo_card(result, view=search_kwargs["view"])}} |                 {{cards.create_photo_card(result, view=search_kwargs["view"])}} | ||||||
|                 {% elif result.__class__.__name__ == 'Album' %} |                 {% elif result.__class__.__name__ == 'Album' %} | ||||||
|                 {{album_card.create_album_card(result, view=search_kwargs["view"])}} |                 {{cards.create_album_card(result, view=search_kwargs["view"])}} | ||||||
|                 {% endif %} |                 {% endif %} | ||||||
|             {% endfor %} |             {% endfor %} | ||||||
|         </div> |         </div> | ||||||
|  |  | ||||||
|  | @ -16,13 +16,12 @@ body | ||||||
| 
 | 
 | ||||||
| <body> | <body> | ||||||
|     <div> |     <div> | ||||||
|     {% import "photo_card.html" as photo_card %} |     {% import "cards.html" as cards %} | ||||||
|     {% import "album_card.html" as album_card %} |  | ||||||
|     {% for result in results %} |     {% for result in results %} | ||||||
|         {% if result.__class__.__name__ == 'Photo' %} |         {% if result.__class__.__name__ == 'Photo' %} | ||||||
|         {{photo_card.create_photo_card(result, view=search_kwargs["view"])}} |         {{cards.create_photo_card(result, view=search_kwargs["view"])}} | ||||||
|         {% elif result.__class__.__name__ == 'Album' %} |         {% elif result.__class__.__name__ == 'Album' %} | ||||||
|         {{album_card.create_album_card(result, view=search_kwargs["view"])}} |         {{cards.create_album_card(result, view=search_kwargs["view"])}} | ||||||
|         {% endif %} |         {% endif %} | ||||||
|     {% endfor %} |     {% endfor %} | ||||||
|     </div> |     </div> | ||||||
|  |  | ||||||
|  | @ -1,44 +0,0 @@ | ||||||
| <!-- |  | ||||||
|     tag: The Tag object |  | ||||||
|     extra_classes: |  | ||||||
|         Space-separated string, if you want more than "tag_card". |  | ||||||
|     innertext: |  | ||||||
|         A string to use as the innertext. |  | ||||||
|         Otherwise, will use the name based on the other parameters. |  | ||||||
|     link: |  | ||||||
|         None = no link, just a <span> |  | ||||||
|         'search' = link to /search?tag_musts=tagname |  | ||||||
|         'search_musts' = link to /search?tag_musts=tagname |  | ||||||
|         'search_mays' = link to /search?tag_mays=tagname |  | ||||||
|         'search_forbids' = link to /search?tag_forbids=tagname |  | ||||||
|         'info' = link to /tags/tagname |  | ||||||
|     with_alt_description: |  | ||||||
|         True: Include the description in the alt text |  | ||||||
| --> |  | ||||||
| {%- macro create_tag_card( |  | ||||||
|     tag, |  | ||||||
|     extra_classes="", |  | ||||||
|     innertext=None, |  | ||||||
|     innertext_safe=None, |  | ||||||
|     link='info', |  | ||||||
|     onclick=None, |  | ||||||
|     with_alt_description=False |  | ||||||
| ) -%} |  | ||||||
| 
 |  | ||||||
| {%- set href = { |  | ||||||
|         "search": "/search?tag_musts=" + (tag.name|urlencode), |  | ||||||
|         "search_musts": "/search?tag_musts=" + (tag.name|urlencode), |  | ||||||
|         "search_mays": "/search?tag_mays=" + (tag.name|urlencode), |  | ||||||
|         "search_forbids": "/search?tag_forbids=" + (tag.name|urlencode), |  | ||||||
|         "info": "/tag/" + tag.name, |  | ||||||
|         None: None, |  | ||||||
|     }.get(link, link) |  | ||||||
| -%} |  | ||||||
| {%- set class = ("tag_card" + " " + extra_classes).strip() -%} |  | ||||||
| {%- set title = (with_alt_description and tag.description) or None -%} |  | ||||||
| {%- set innertext = innertext_safe or (innertext or tag.name)|e -%} |  | ||||||
| {%- set element = "a" if (link or onclick) else "span" -%} |  | ||||||
| 
 |  | ||||||
| <{{element}} {{make_attributes(class=class, title=title, href=href, onclick=onclick, **kwargs)|safe}}>{{innertext|safe}}</{{element}}> |  | ||||||
| {{-''-}} |  | ||||||
| {%- endmacro -%} |  | ||||||
|  | @ -2,7 +2,7 @@ | ||||||
| <html> | <html> | ||||||
| <head> | <head> | ||||||
|     {% import "header.html" as header %} |     {% import "header.html" as header %} | ||||||
|     {% import "tag_card.html" as tag_card %} |     {% import "cards.html" as cards %} | ||||||
|     {% if specific_tag is none %} |     {% if specific_tag is none %} | ||||||
|         <title>Tags</title> |         <title>Tags</title> | ||||||
|     {% else %} |     {% else %} | ||||||
|  | @ -96,7 +96,7 @@ h2, h3 | ||||||
|         {% if specific_tag %} |         {% if specific_tag %} | ||||||
|         <div id="hierarchy_self" class="panel"> |         <div id="hierarchy_self" class="panel"> | ||||||
|             <div id="tag_metadata"> |             <div id="tag_metadata"> | ||||||
|                 <h2>{{tag_card.create_tag_card( |                 <h2>{{cards.create_tag_card( | ||||||
|                     specific_tag, |                     specific_tag, | ||||||
|                     link="search", |                     link="search", | ||||||
|                     id="name_text", |                     id="name_text", | ||||||
|  | @ -130,9 +130,9 @@ h2, h3 | ||||||
|             <ul id="parent_list"> |             <ul id="parent_list"> | ||||||
|             {% for ancestor in specific_tag.get_parents() %} |             {% for ancestor in specific_tag.get_parents() %} | ||||||
|             <li> |             <li> | ||||||
|                 {{tag_card.create_tag_card(ancestor, link="search_musts", innertext="(+)")}} |                 {{cards.create_tag_card(ancestor, link="search_musts", innertext="(+)")}} | ||||||
|                 {{tag_card.create_tag_card(ancestor, link="search_forbids", innertext="(x)")}} |                 {{cards.create_tag_card(ancestor, link="search_forbids", innertext="(x)")}} | ||||||
|                 {{tag_card.create_tag_card(ancestor, link="info", innertext=ancestor.name, with_alt_description=True)}} |                 {{cards.create_tag_card(ancestor, link="info", innertext=ancestor.name, with_alt_description=True)}} | ||||||
|             </li> |             </li> | ||||||
|             {% endfor %} |             {% endfor %} | ||||||
|             </ul> |             </ul> | ||||||
|  | @ -149,9 +149,9 @@ h2, h3 | ||||||
|             <ul id="tag_list"> |             <ul id="tag_list"> | ||||||
|             {% for (qualified_name, tag) in tags %} |             {% for (qualified_name, tag) in tags %} | ||||||
|                 <li> |                 <li> | ||||||
|                     {{tag_card.create_tag_card(tag, link="search_musts", innertext="(+)")}} |                     {{cards.create_tag_card(tag, link="search_musts", innertext="(+)")}} | ||||||
|                     {{tag_card.create_tag_card(tag, link="search_forbids", innertext="(x)")}} |                     {{cards.create_tag_card(tag, link="search_forbids", innertext="(x)")}} | ||||||
|                     {{tag_card.create_tag_card(tag, link="info", innertext=qualified_name, with_alt_description=True)-}} |                     {{cards.create_tag_card(tag, link="info", innertext=qualified_name, with_alt_description=True)-}} | ||||||
|                     {% if specific_tag or '.' in qualified_name -%} |                     {% if specific_tag or '.' in qualified_name -%} | ||||||
|                     <button |                     <button | ||||||
|                     class="remove_tag_button red_button button_with_confirm" |                     class="remove_tag_button red_button button_with_confirm" | ||||||
|  | @ -182,9 +182,9 @@ h2, h3 | ||||||
|                 {% if include_synonyms %} |                 {% if include_synonyms %} | ||||||
|                 {% for synonym in tag.get_synonyms()|sort %} |                 {% for synonym in tag.get_synonyms()|sort %} | ||||||
|                 <li> |                 <li> | ||||||
|                     {{-tag_card.create_tag_card(tag, link="search_musts", innertext="(+)")}} |                     {{-cards.create_tag_card(tag, link="search_musts", innertext="(+)")}} | ||||||
|                     {{tag_card.create_tag_card(tag, link="search_forbids", innertext="(x)")}} |                     {{cards.create_tag_card(tag, link="search_forbids", innertext="(x)")}} | ||||||
|                     {{tag_card.create_tag_card(tag, link='info', innertext=qualified_name + '+' + synonym)-}} |                     {{cards.create_tag_card(tag, link='info', innertext=qualified_name + '+' + synonym)-}} | ||||||
|                     <button |                     <button | ||||||
|                     class="remove_tag_button red_button button_with_confirm" |                     class="remove_tag_button red_button button_with_confirm" | ||||||
|                     data-holder-class="confirm_holder_remove_synonym" |                     data-holder-class="confirm_holder_remove_synonym" | ||||||
|  | @ -217,11 +217,11 @@ h2, h3 | ||||||
|             <ul> |             <ul> | ||||||
|             {% for synonym in synonyms %} |             {% for synonym in synonyms %} | ||||||
|             <li> |             <li> | ||||||
|                 {{tag_card.create_tag_card(specific_tag, link="search_musts", innertext="(+)")}} |                 {{cards.create_tag_card(specific_tag, link="search_musts", innertext="(+)")}} | ||||||
| 
 | 
 | ||||||
|                 {{tag_card.create_tag_card(specific_tag, link="search_forbids", innertext="(x)")}} |                 {{cards.create_tag_card(specific_tag, link="search_forbids", innertext="(x)")}} | ||||||
| 
 | 
 | ||||||
|                 {{tag_card.create_tag_card(specific_tag, link=none, innertext=synonym)-}} |                 {{cards.create_tag_card(specific_tag, link=none, innertext=synonym)-}} | ||||||
|                 <button |                 <button | ||||||
|                 class="remove_tag_button red_button button_with_confirm" |                 class="remove_tag_button red_button button_with_confirm" | ||||||
|                 data-onclick="return remove_synonym_form(event);" |                 data-onclick="return remove_synonym_form(event);" | ||||||
|  |  | ||||||
|  | @ -1,11 +1,8 @@ | ||||||
| <!DOCTYPE html5> | <!DOCTYPE html5> | ||||||
| <html> | <html> | ||||||
| <head> | <head> | ||||||
|     {% import "album_card.html" as album_card %} |  | ||||||
|     {% import "bookmark_card.html" as bookmark_card %} |  | ||||||
|     {% import "photo_card.html" as photo_card %} |  | ||||||
|     {% import "tag_card.html" as tag_card %} |  | ||||||
|     {% import "header.html" as header %} |     {% import "header.html" as header %} | ||||||
|  |     {% import "cards.html" as cards %} | ||||||
|     <title class="dynamic_user_display_name">{{user.display_name}}</title> |     <title class="dynamic_user_display_name">{{user.display_name}}</title> | ||||||
|     <meta charset="UTF-8"> |     <meta charset="UTF-8"> | ||||||
|     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> |     <meta name="viewport" content="width=device-width, initial-scale=1.0"/> | ||||||
|  | @ -46,7 +43,7 @@ h2, h3 | ||||||
|         <div id="hierarchy_photos" class="panel"> |         <div id="hierarchy_photos" class="panel"> | ||||||
|             <h3><a href="/search?author={{user.username}}">Photos by <span class="dynamic_user_display_name">{{user.display_name}}</span></a></h3> |             <h3><a href="/search?author={{user.username}}">Photos by <span class="dynamic_user_display_name">{{user.display_name}}</span></a></h3> | ||||||
|             {% for photo in photos %} |             {% for photo in photos %} | ||||||
|             {{photo_card.create_photo_card(photo)}} |             {{cards.create_photo_card(photo)}} | ||||||
|             {% endfor %} |             {% endfor %} | ||||||
|         </div> |         </div> | ||||||
|         {% endif %} |         {% endif %} | ||||||
|  | @ -56,7 +53,7 @@ h2, h3 | ||||||
|         <div id="hierarchy_tags" class="panel"> |         <div id="hierarchy_tags" class="panel"> | ||||||
|             <h3>Tags by <span class="dynamic_user_display_name">{{user.display_name}}</span></h3> |             <h3>Tags by <span class="dynamic_user_display_name">{{user.display_name}}</span></h3> | ||||||
|             {% for tag in tags %} |             {% for tag in tags %} | ||||||
|             {{tag_card.create_tag_card(tag, with_alt_description=True)}} |             {{cards.create_tag_card(tag, with_alt_description=True)}} | ||||||
|             {% endfor %} |             {% endfor %} | ||||||
|         </div> |         </div> | ||||||
|         {% endif %} |         {% endif %} | ||||||
|  | @ -66,7 +63,7 @@ h2, h3 | ||||||
|         <div id="hierarchy_albums" class="panel"> |         <div id="hierarchy_albums" class="panel"> | ||||||
|             <h3>Albums by <span class="dynamic_user_display_name">{{user.display_name}}</span></h3> |             <h3>Albums by <span class="dynamic_user_display_name">{{user.display_name}}</span></h3> | ||||||
|             {% for album in albums %} |             {% for album in albums %} | ||||||
|             {{album_card.create_album_card(album)}} |             {{cards.create_album_card(album)}} | ||||||
|             {% endfor %} |             {% endfor %} | ||||||
|         </div> |         </div> | ||||||
|         {% endif %} |         {% endif %} | ||||||
|  | @ -76,7 +73,7 @@ h2, h3 | ||||||
|         <div id="hierarchy_bookmarks" class="panel"> |         <div id="hierarchy_bookmarks" class="panel"> | ||||||
|             <h3>Bookmarks by <span class="dynamic_user_display_name">{{user.display_name}}</span></h3> |             <h3>Bookmarks by <span class="dynamic_user_display_name">{{user.display_name}}</span></h3> | ||||||
|             {% for bookmark in bookmarks %} |             {% for bookmark in bookmarks %} | ||||||
|             {{bookmark_card.create_bookmark_card(bookmark)}} |             {{cards.create_bookmark_card(bookmark)}} | ||||||
|             {% endfor %} |             {% endfor %} | ||||||
|         </div> |         </div> | ||||||
|         {% endif %} |         {% endif %} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue