--- /dev/null
+#!/bin/sh
+
+["$include_widgets" ] && return 0
+include_widgets="$0"
+
+. "$_EXEC/db_channel.sh"
+. "$_EXEC/db_video.sh"
+
+AUTHOR(){
+ if [ "$CHANNEL_ID" -a "$USER_ID" -a ! "${CHANNEL_AUTHORS##*${USER_ID}*}" ]; then
+ return 0
+ else
+ return 1
+ fi
+}
+
+w_video(){
+ local thumb
+ eval "$LOCAL_VIDEO"
+
+ if read_video; then
+ VIDEO_LENGTH="${VIDEO_LENGTH%.*}"
+ [ "${VIDEO_STATUS}" = public ] || AUTHOR || return 0
+
+ thumb="${_BASE}/video/${CHANNEL_ID}/${VIDEO_ID}.thumb.jpg"
+ [ "$NAME" = \\ ] && NAME="(Unnamed Video)"
+ printf '[div .video .thumb
+ [a href="%s/channel/%s/%s/"
+ [h3 . %s]
+ [figure [img src="%s" alt=""]]
+ [span .duration . %i:%02i]
+ [div .description . %s]
+ ]
+ ]' "$_BASE" "$CHANNEL_ID" "$VIDEO_ID" \
+ "$(HTML "${VIDEO_NAME:-(Unnamed Video)}")" \
+ "$thumb" \
+ "$((VIDEO_LENGTH / 60))" "$((VIDEO_LENGTH % 60))" \
+ "$(UNSTRING "$DESCR_CACHE")"
+ else
+ return 1
+ fi
+}
+
+w_channel(){
+ local vid_db
+ eval "$LOCAL_CHANNEL"
+
+ if read_channel; then
+ vid_db="${_DATA}/${CHANNEL_ID}/videos.db"
+
+ cat <<-EOF
+ [div .channel
+ [div .description
+ [h2 [a href="${_BASE}/channel/${CHANNEL_ID}/" $(HTML "${CHANNEL_NAME:-(Unnamed Channel)}")]]
+ ${CHANNEL_DESCR_CACHE}
+ ]$(
+ [ -f "$vid_db" -a -r "$vid_db" ] \
+ && while w_video; do :; done <"$vid_db"
+ )
+ ]
+ EOF
+ else
+ return 1
+ fi
+}