| UNSTRING | HTML \
| sed -E 's;
\;;\n;g; s;\n+;\n;g;'
}
-
-tclist(){
- printf %s "$*" \
- | sed -rn '/:/s;^-?([^:]+):.*$;\1;p' \
- |sort -u
+tagorder(){
+ printf '*\n%s\n$\n' "$w_tagcategories" \
+ | while read -r category; do
+ printf '%s\n' "$w_tags" \
+ | { [ "$category" = '*' ] && grep -avF ':' || grep -awF "${category}"; } \
+ | { sed -u 10q; sort; }
+ done
}
c_tags="$_DATA/.index/tags.cache";
mv "$c_tags.$$" "$c_tags"
fi
w_tags="$(cat "$c_tags")"
-
-c_tagcategories="$_DATA/.index/tagcategories.cache"
-if [ ! -s "$c_tagcategories" ]; then
- tclist "$w_tags" >"$c_tagcategories.$$"
- mv "$c_tagcategories.$$" "$c_tagcategories"
-fi
-w_tagcategories="$(cat "$c_tagcategories")"
+w_tagcategories="$(
+ printf %s "$w_tags" \
+ | sed -rn '/:/s;^-?([^:]+):.*$;\1;p' \
+ |sort -u
+)"
+w_tags="$(tagorder)"
[ "$ORDER" = Name ] && w_coname=checked
[ "$ORDER" = Date ] && w_codate=checked
EOF
f="|${f#\~}|"
- printf '*\n%s\n$\n' "$w_tagcategories" \
- | while read -r category; do
- lbid="cat_${n}_${category}"
-
- t=''
- [ "$category" = '*' -a "${f%%|${category}:*}" ] && t=checked
- [ "$category" != '*' -a ! "${f%%|${category}:*}" ] && t=checked
- [ "$category" != '*' -a ! "${f%%|-${category}:*}" ] && t=checked
-
- printf '[radio "cat_%i" "%s" .cat %s id="%s"][label for="%s" %s]
- [div .catselect\n' \
- $n "$category" "$t" "$lbid" "$lbid" "$category"
-
- printf '%s\n' "$w_tags" \
- | { [ "$category" = '*' ] && grep -avF ':' || grep -awF "${category}"; } \
- | { sed -u 10q; sort; } \
- | while read -r tag; do
- [ "$tag" ] || continue
- t=''; [ ! "${f%%*|${tag}|*}" ] && t=checked
- d="${tag#-}"; d="${d#*:}"
- printf '[label [checkbox "tag_%s" "%s" %s] %s]' "$n" "$tag" "$t" "$d"
- done
- d="${f##*\$:}" d="${d%%\|*}"
- [ "$category" = \$ ] && printf '[input name="tag_%i" value="%s"]' "$n" "$(HTML "$d")"
- printf '\n]'
+ printf '%s\n$:\n' "$w_tags" \
+ | while read tctag; do
+ [ "$tctag" ] || continue
+ category="${tctag#-}"; category="${category%%:*}"
+ tag="${tctag#-}"; tag="${tag#*:}"
+ [ "${tag}" = "${tctag#-}" ] \
+ && category="*"
+
+ if [ "$category" != "$oldcat" ]; then
+ [ "$oldcat" ] && printf '\n]'
+ lbid="cat_${n}_${category}"
+
+ t=''
+ [ "$category" = '*' -a "${f%%|${category}:*}" ] && t=checked
+ [ "$category" != '*' -a ! "${f%%|${category}:*}" ] && t=checked
+ [ "$category" != '*' -a ! "${f%%|-${category}:*}" ] && t=checked
+
+ printf '[radio "cat_%i" "%s" .cat %s id="%s"][label for="%s" %s]
+ [div .catselect\n' \
+ $n "$category" "$t" "$lbid" "$lbid" "$category"
+ fi
+
+ if [ "$category" = '$' ]; then
+ tag="${f##*\$:}" tag="${tag%%\|*}"
+ printf '[input name="tag_%i" value="%s"]' "$n" "$(HTML "$tag")"
+ else
+ t=''; [ ! "${f%%*|${tctag}|*}" ] && t=checked
+ printf '[label [checkbox "tag_%s" "%s" %s] %s]' "$n" "$tctag" "$t" "$tag"
+ fi
+
+ oldcat="$category"
done
+ [ "$w_tags" ] && printf '\n]'
printf ']'
done
}
w_tagging(){
- local tag category d
+ local tctag oldcat="" category tag
cat <<-EOF
[a href="#multitag" Add Tags / Remove Tags]
[a href="#" X]
EOF
- printf 'Tags\n%s\n' "$w_tagcategories" \
- | while read -r category; do
- [ "$category" ] || continue
- printf '[fieldset [legend %s:][div .tagselect\n' "$category"
- printf %s "$w_tags" \
- | { [ "$category" = 'Tags' ] && grep -avF ':' || grep -awF "${category}"; } \
- | { sed -u 10q; sort; } \
- | while read -r tag; do
- [ "$tag" ] || continue
- d="${tag#-}"; d="${d#*:}"
- printf '[label [checkbox "tag" "%s"] %s]\n' "$tag" "$d"
- done
- printf ']]'
+ printf '%s\n' "$w_tags" \
+ | while read tctag; do
+ [ "$tctag" ] || continue
+ category="${tctag#-}"; category="${category%%:*}"
+ tag="${tctag#-}"; tag="${tag#*:}"
+
+ [ "${tag}" = "${tctag#-}" ] \
+ && category="Tags"
+
+ if [ "$category" != "$oldcat" ]; then
+ [ "$oldcat" ] && printf ']]'
+ printf '[fieldset [legend %s:][div .tagselect\n' "$category"
+ fi
+ printf '[label [checkbox "tag" "%s"] %s]\n' "$tctag" "$tag"
+
+ oldcat="$category"
done
+ [ "$w_tags" ] && printf ']]'
cat <<-EOF
[fieldset [legend New:][textarea name=newtag\n]