From 4de568ae77370937e58b477b48f72510f41ae50c Mon Sep 17 00:00:00 2001 From: Ben Ashton Date: Sun, 25 Sep 2022 16:53:41 -0600 Subject: [PATCH] Added icon and improved template code --- images/food.png | Bin 0 -> 11869 bytes images/food.svg | 2 + index.n0m | 234 +++++++++++++++++++++++++----------------------- 3 files changed, 125 insertions(+), 111 deletions(-) create mode 100644 images/food.png create mode 100644 images/food.svg diff --git a/images/food.png b/images/food.png new file mode 100644 index 0000000000000000000000000000000000000000..45e31fafad4abe73df669e45b289a23dbfc09405 GIT binary patch literal 11869 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 literal 0 HcmV?d00001 diff --git a/images/food.svg b/images/food.svg new file mode 100644 index 0000000..115e127 --- /dev/null +++ b/images/food.svg @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/index.n0m b/index.n0m index 2d6fd90..64d888f 100755 --- a/index.n0m +++ b/index.n0m @@ -2,144 +2,156 @@ $ #!/bin/bash Content-Type: text/html +<{ # Constants # ========= -$ true=1; -$ false=0; -# -$ restaurant_file="restaurants.txt"; -$ title="FeedMe"; -# +true=1; +false=0; + +restaurant_file="restaurants.txt"; +title="FeedMe"; + # Components # ========== -# + # $1: string: input value # $2: number: 0=existing restaurant, 1=new restaurant -$ restaurant_form () { -$ enforce_arguments "${FUNCNAME[0]}" "$#" 2; -$ local icon_class; -$ if [ "$2" -eq 0 ]; then -$ icon_class="ri-save-2-fill"; -$ else -$ icon_class="ri-add-line"; -$ fi -
- - - +restaurant_form () { + enforce_arguments "${FUNCNAME[0]}" "$#" 2; + local icon_class; + if [ "$2" -eq 0 ]; then + icon_class="ri-save-2-fill"; + else + icon_class="ri-add-line"; + fi + }> + + + +
+ $ if [ "$2" -eq 0 ]; then + + $ fi + + <{ +} + # Utility Functions # ================= -# + # $1: string: function name # $2: number: $# # $3: number: expected number of arguments -$ enforce_arguments () { -$ if [ "$2" -lt "$3" ]; then -$ printf '%s %s %s\n' 'Function:' "$1" 'called with too few arguments'; -$ exit 1; -$ elif [ "$2" -gt "$3" ]; then -$ printf '%s %s %s\n' 'Function:' "$1" 'called with too many arguments'; -$ exit 1; -$ fi; -$ } -# -$ decode_uri () { -$ local i="${*//+/ }"; -$ echo -e "${i//%/\\x}"; -$ } -# -# +enforce_arguments () { + if [ "$2" -lt "$3" ]; then + printf '%s %s %s\n' 'Function:' "$1" 'called with too few arguments'; + exit 1; + elif [ "$2" -gt "$3" ]; then + printf '%s %s %s\n' 'Function:' "$1" 'called with too many arguments'; + exit 1; + fi; +} + +decode_uri () { + local i="${*//+/ }"; + echo -e "${i//%/\\x}"; +} + + # Restaurant List Functions # ========================= -# + # $1: string: restaurant to remove -$ remove_restaurant () { -$ enforce_arguments "${FUNCNAME[0]}" "$#" 1; -$ local temp_file; -$ temp_file=$(mktemp); -$ grep -Fxv "$1" "$restaurant_file" > "$temp_file"; -$ mv "$temp_file" "$restaurant_file"; -$ } -# +remove_restaurant () { + enforce_arguments "${FUNCNAME[0]}" "$#" 1; + local temp_file; + temp_file=$(mktemp); + grep -Fxv "$1" "$restaurant_file" > "$temp_file"; + mv "$temp_file" "$restaurant_file"; +} + # $1: string: restuarant to add -$ add_restaurant () { -$ enforce_arguments "${FUNCNAME[0]}" "$#" 1; -$ local temp_file; -$ temp_file=$(mktemp); -$ (grep -Fxv "$1" "$restaurant_file"; printf '%s\n' "$1") > "$temp_file"; -$ mv "$temp_file" "$restaurant_file"; -$ } -# +add_restaurant () { + enforce_arguments "${FUNCNAME[0]}" "$#" 1; + local temp_file; + temp_file=$(mktemp); + (grep -Fxv "$1" "$restaurant_file"; printf '%s\n' "$1") > "$temp_file"; + mv "$temp_file" "$restaurant_file"; +} + # $1 (optional): number: 0=don't overwrite, 1=overwrite -$ todays_restaurant () { -$ local today; -$ today="$(date +'%Y%m%d')"; -$ local filename="$today.pick"; -$ if [ -n "$1" ] && [ "$1" -ne 0 ]; then -$ rm "$filename"; -$ fi; -$ if [ ! -f "$filename" ]; then -$ shuf -n 1 "$restaurant_file" > "$filename"; -$ fi; -$ cat "$filename"; -$ } -# +todays_restaurant () { + local today; + today="$(date +'%Y%m%d')"; + local filename="$today.pick"; + if [ -n "$1" ] && [ "$1" -ne 0 ]; then + rm "$filename"; + fi; + if [ ! -f "$filename" ]; then + shuf -n 1 "$restaurant_file" > "$filename"; + fi; + cat "$filename"; +} + # Initialization # ============== -# + # Make sure restaurant file eixsts -$ touch -a "$restaurant_file"; -# +touch -a "$restaurant_file"; + # Parse body # ---------- -$ declare -A body; -$ while IFS= read -d '&' -r pair || [ "$pair" ]; do -$ name=$(decode_uri "${pair%%=*}"); -$ value=$(decode_uri "${pair#*=}"); -$ if [ -n "$name" ]; then -$ body["$name"]="$value"; -$ fi; -$ done #> -# +declare -A body; +while IFS= read -d '&' -r pair || [ "$pair" ]; do + name=$(decode_uri "${pair%%=*}"); + value=$(decode_uri "${pair#*=}"); + if [ -n "$name" ]; then + body["$name"]="$value"; + fi; +done + # Perform requested action # ------------------------ -$ case "${body['action']}" in -$ add) -$ add_restaurant "${body['new']}"; -$ ;; -$ delete) -$ remove_restaurant "${body['old']}"; -$ ;; -$ save) -$ remove_restaurant "${body['old']}"; -$ add_restaurant "${body['new']}"; -$ ;; -$ new_restaurant) -$ todays_restaurant $true >/dev/null; -$ ;; -$ esac -# -# - +case "${body['action']}" in + add) + add_restaurant "${body['new']}"; + ;; + delete) + remove_restaurant "${body['old']}"; + ;; + save) + remove_restaurant "${body['old']}"; + add_restaurant "${body['new']}"; + ;; + new_restaurant) + todays_restaurant $true >/dev/null; + ;; +esac + +}> + + + + + <% $title %>