From fac83e5789b5b68484ba8bdf7830c462a722d000 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Paul=20H=C3=A4nsch?= Date: Sat, 14 Jul 2018 15:48:28 +0200 Subject: [PATCH] implemented full multi file tagging --- index.cgi | 2 ++ list.sh | 34 ++++++++++++++++++++++++++++------ style.css | 53 +++++++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 77 insertions(+), 12 deletions(-) diff --git a/index.cgi b/index.cgi index 68d6b5b..8790fa9 100755 --- a/index.cgi +++ b/index.cgi @@ -57,6 +57,8 @@ elif [ -d "$_DATA/$ITEM" ]; then REDIRECT "$(POST ref)" ;; multitag) + . "$_EXEC/multitag.sh" + REDIRECT "$(POST ref)" ;; *) . "$_EXEC/list.sh" ;; diff --git a/list.sh b/list.sh index 324d8eb..d0868ba 100644 --- a/list.sh +++ b/list.sh @@ -15,11 +15,13 @@ list_item() { printf '[div .list .file [a href="%s" [img src="%s?a=thumbnail"][label %s]] [span .time %i:%imin] [span .dim %ix%i] %s + [checkbox "select" "%s" id="select_%s" form="multitag"][label for="select_%s" +] ]' \ "$path" "$path" "$name" \ "$((length / 60))" "$((length % 60))" \ "$width" "$height" \ - "$(printf %s\\n "${tags#tags=}" |tr , ' ' |xargs printf '[span .tag %s]')" + "$(printf %s\\n "${tags#tags=}" |tr , ' ' |xargs printf '[span .tag %s]')" \ + "$path" "$path" "$path" else printf '[div .list .file [a href="%s" [img src="%s?a=thumbnail"][label %s]]]' \ "$path" "$path" "$name" @@ -119,6 +121,23 @@ list_paginate() { printf ']' } +w_tagging(){ + printf '[div #multitag [input type="hidden" name="ref" value="%s"]' "$(HTML "$REQUEST_URI")" + printf '[a href="#" Hide][br]' + find "$_DATA/$ITEM" -path '*/.index/meta' \ + -exec cut -f4 '{}' + \ + | cut -d= -f2- |tr , '\n' | sort -u \ + | while read tag; do + cat_old="${category}"; category="${tag%%:*}" + [ "$category" = "$tag" ] && category="(none)" + [ "$cat_old" -a "$cat_old" != "$category" ] && printf ']]' + [ "$cat_old" != "$category" ] \ + && printf '[fieldset [legend %s:][select name="tag" size=4 multiple' $(HTML "$category") + printf '[option value="%s" %s]' "$(HTML "$tag")" "$(HTML "${tag#*:}")" + done + printf ']][fieldset [legend New:][textarea name=newtag\n][button type=Submit Add Tags]]]' +} + printf 'Content-Type: text/html;charset=utf-8\r\n\r\n' "$_EXEC/cgilite/html-sh.sed" <<-EOF @@ -134,11 +153,14 @@ printf 'Content-Type: text/html;charset=utf-8\r\n\r\n' ] $(w_prefs) - $(list_items \ - | list_paginate - ) - [div #editing - $(w_index) + [form method=POST action="?a=multitag" + $(list_items \ + | list_paginate + ) + [div #editing + [a href="#multitag" Add Tags] $(w_tagging) + $(w_index) + ] ] ] ] EOF diff --git a/style.css b/style.css index 0d2bd6e..1bbc2ff 100644 --- a/style.css +++ b/style.css @@ -8,16 +8,20 @@ a { color: inherit; text-decoration: none;} body { color: white; background-color: black; + min-height: 100%; } -#prefs, #bookmarks { +#prefs, #bookmarks, #multitag { display: block; overflow: hidden; height: 0; + text-align: left; } #prefs:target, +#multitag:target, #bookmarks:target { height: auto; + overflow: visible; } #navigation{ @@ -64,8 +68,11 @@ a[href="#advsearch"]:before { } #prefs:target a[href="#"] { - position: absolute; - right: .25em; margin-top: -1.5em; + display: block; + position: relative; + top: -1.5em; right: -.5em; + margin-left: 4em; + text-align: right; font-size: 1.5em; padding: 0 .25em; background-color: #333; @@ -90,7 +97,6 @@ a[href="#advsearch"]:before { max-width: 85%; } -.itemlist { display: block; overflow: hidden; } .list { position: relative; display: inline-block; @@ -101,6 +107,7 @@ a[href="#advsearch"]:before { word-wrap: break-word; vertical-align: top; color: black; + overflow: hidden; } .list.dir { padding: .5em 1em; @@ -129,6 +136,13 @@ a[href="#advsearch"]:before { background-color: rgba(0,0,0,.625); } +.list.file .time, +.list.file .dim, +.list.file .tag, +.list.file label { + display: inline-block; + margin-top: .125em; +} .list.file .time, .list.file .dim { color: white; @@ -136,6 +150,17 @@ a[href="#advsearch"]:before { padding: .125em .5em; } +.list.file input[type="checkbox"] { display: none; } +.list.file input[type="checkbox"] + label { + border: 1px solid; + border-radius: .125em; + padding: 0 .25em; + background-color: #FBB; +} +.list.file input[type="checkbox"]:checked + label { + background-color: #4F4; +} + .pagination { display: block; text-align: center; @@ -151,8 +176,8 @@ a[href="#advsearch"]:before { } #editing { - position: absolute; - width: 100%; bottom: 0; + text-align: left; + width: 100%; background-color: #333; border-top: 1px solid; padding: .25em; @@ -160,3 +185,19 @@ a[href="#advsearch"]:before { #index label:first-of-type { font-weight: bold; } #index input, #index button { margin-left: 1em;} + +#multitag:target a[href="#"] { + position: relative; + top: -1em; + padding-right: 10em; + background-color: #333; +} +#multitag fieldset{ + display: inline-block; + width: 25%; min-width: 250px; + vertical-align: top; + padding: 0 .25em; + border: none; +} +#multitag fieldset * { width: 100%; } +#multitag fieldset button { width: 50%; } -- 2.39.2