filters="$(echo -E "$_GET[\"f\"]" |sed -r 's;^!*\^*;;; s;\^*!*$;;; s;!+;!;g; s;\^+;^;g')"
debug "FILTERS: $filters"
+quicklinks(){
+ output=''
+ tac ${_DATA}/meta/recent |while [ "$(echo "$output" |wc -l)" -lt 10 ] && read line; do
+ line="<a href="$line">$line</a>"
+ echo "$output" |grep -qF "$line" || output="$output$line\n"
+ done
+ echo $output
+}
+
+list_categories(){
+ echo none
+ printf %s "$taglist" |sed -rn 's;^([^:]+):.*$;\1;p' |sort -u
+}
+
+category_selected(){
+ cat="${1}:"
+ filter="$2"
+ [ "$cat" = "none:" ] && cat=''
+
+ printf %s "$taglist" \
+ | sed -r 's;^('"$filter"')$;1 &;;t;s;^;0 ;' \
+ | sed -rn 's;^(0|1) '"$cat"'([^:]+)$;\1 \2;p' \
+ | sed 's;^0 ;<option>;;s;^1 ;<option selected>;;s;$;</option>;'
+}
+
case "$1" in
title)
echo "Videos"
# You should have received a copy of the GNU Affero General Public License
# along with Serve0 If not, see <http://www.gnu.org/licenses/>.
-quicklinks(){
- output=''
- tac ${_DATA}/meta/recent |while [ "$(echo "$output" |wc -l)" -lt 10 ] && read line; do
- line="<a href="$line">$line</a>"
- echo "$output" |grep -qF "$line" || output="$output$line\n"
- done
- echo $output
-}
-
-list_categories(){
- echo none
- printf %s "$taglist" |sed -rn 's;^([^:]+):.*$;\1;p' |sort -u
-}
-
-category_selected(){
- cat="$1"
- filter="$2"
-
- printf %s "$taglist" \
- | sed -r 's;^('"$filter"')$;1 &;;t;s;^;0 ;' \
- | sed -rn 's;^(0|1) '"$cat"'([^:]+)$;\1 \2;p' \
- | sed 's;^0 ;<option>;;s;^1 ;<option selected>;;s;$;</option>;'
-}
-
category_tabs(){
for cat in "$@"; do
cat <<EOF
<input class="tabhandle" type="radio" name="category$n" id="cat${n}_$cat" value="$cat" $([ "$cat" = "$fcat" ] && echo checked)>
<label class="category tabhandle" for="cat${n}_$cat">$([ "$cat" = none ] && printf %s general || printf %s "$cat")</label>
<select class="category tabcontent" class="input tagfilter" name="cfilter${n}_" size="12" multiple>
- $([ "$cat" = none ] && category_selected "" "$filter" || category_selected "${cat}:" "$filter")
+ $(category_selected "$cat" "$filter")
</select>
</div>
EOF
}
filterbox(){
- n=$1
- filter="$(printf '%s^' "$filters" |cut -d^ -f$(($n+1)))"
- fneg="${filter%%[a-zA-Z]*}"
- filter="${filter#!}"
- fcat="${filter%%:*}"
- [ "$fcat" = "$filter" ] && fcat=none
-
- debug "fneg: $fneg fcat: $fcat filter: $filter"
-
- cat <<EOF
- <input class="tabhandle" type="checkbox" id="filter$n" $([ $n = 0 -o -n "$filter" ] && echo checked) >
- <label class="tabhandle filter" for="filter$n">+ and</label>
- <div class="tabcontent filter">
- <input type="radio" name="type$n" value="pos" id="pos$n" ${fneg:-checked} ><label for="pos$n" class="conjunction">Any</label>
- <input type="radio" name="type$n" value="neg" id="neg$n" ${fneg:+checked} ><label for="neg$n" class="conjunction">None</label>
- <span class="help">of the items selected here:</span>
-
- <label class="category">Category:</label>
- <div class="category tabcontainer">
- $(category_tabs $(list_categories) )
- </div>
- </div>
-EOF
+ for n in "$@"; do
+ filter="$(printf '%s^' "$filters" |cut -d^ -f$(($n+1)))"
+ fneg="${filter%%[a-zA-Z]*}"
+ filter="${filter#!}"
+ fcat="${filter%%:*}"
+ [ "$fcat" = "$filter" ] && fcat=none
+
+ debug "fneg: $fneg fcat: $fcat filter: $filter"
+
+ cat <<-EOF
+ <input class="tabhandle" type="checkbox" id="filter$n" $([ $n = 0 -o -n "$filter" ] && echo checked) >
+ <label class="tabhandle filter" for="filter$n">+ and</label>
+ <div class="tabcontent filter">
+ <input type="radio" name="type$n" value="pos" id="pos$n" ${fneg:-checked} ><label for="pos$n" class="conjunction">Any</label>
+ <input type="radio" name="type$n" value="neg" id="neg$n" ${fneg:+checked} ><label for="neg$n" class="conjunction">None</label>
+ <span class="help">of the items selected here:</span>
+
+ <label class="category">Category:</label>
+ <div class="category tabcontainer">
+ $(category_tabs $(list_categories) )
+ </div>
+ </div>
+ EOF
+ done
}
cat <<EOF
<hr>
<p class="help">Up to <strong>10</strong> filter boxes will appear as you start selecting tags. You can select <strong>multiple</strong> tags in each box by holding down the <strong>Ctrl</strong>-key. Click the "<strong>Filter!</strong>" button when you are ready.</p>
- $(for n in {0..9}; do filterbox "$n"; done)
+ $(filterbox {0..9})
<p class="filter final">
<label for="o3" class="order">Order by:</label>
# You should have received a copy of the GNU Affero General Public License
# along with Serve0 If not, see <http://www.gnu.org/licenses/>.
+category_options(){
+ cat="${1}:"
+ [ "$cat" = "none:" ] && cat=''
+
+ printf %s "$taglist" \
+ | sed -rn 's;^('"$cat"')([^:]+)$;<option value="\1\2">\2</option>;p'
+}
+
+category_box(){
+ for cat in "$@"; do
+ cat <<EOF
+ <p class="newtag">
+ <label class="category">${cat}:</label>
+ <input type="hidden" name="category" value="$cat">
+ <select name="ctag" size="12" multiple>
+ $(category_options "$cat")
+ </select>
+ </p>
+EOF
+ done
+}
+
cat <<EOF
<div class="panel footer" id="tagger">
<a class="panel tagger hide" href="#foot">Hide</a>
<hr>
<p class="help">Add selectetd tags to selected videos.</p>
- <p class="newtag">
- <label class="category">None:</label>
- <select name="ctag" size="12" multiple id="${n}_none">
- $(echo "$taglist" |sed -rn 's;^([^:]+)$;<option value="\1">\1</option>;p')
- </select>
- </p>
- $(echo "$taglist" |sed -rn 's;^([^:]+):.*$;\1;p' |sort -u |while read cat; do echo "
- <p class=\"newtag\">
- <label class=\"category\">${cat}:</label>
- <input type=\"hidden\" name=\"category\" value=\"$cat\">
- <select name=\"ctag\" size=\"12\" multiple id=\"${n}_$cat\">
- $(echo "$taglist" |sed -rn "s;^${cat}:(.*)$;<option value=\"${cat}:\\1\">\\1</option>;p")
- </select>
- </p>"
- done)
+ $(category_box $(list_categories))
<p class="newtag additional">
<label class="additional">Additional Tags (one per line):</label>
<textarea name="tags" rows="2"></textarea>