chapter_selection() { # Novel page HTML novel_page="$(gum spin --spinner line --show-output -- \ curl --silent --get --data-urlencode "k=${args[title]}" "${1}")" # Chapter data IFS=$'\n' read -r -d '\n' -a chapter_locations <<<"$(echo "${novel_page}" | pup 'div.list-chapter a.list-group-item attr{href}')" || true IFS=$'\n' read -r -d '\n' -a chapter_names <<<"$(echo "${novel_page}" | pup 'div.list-chapter span.chapter-name text{}')" || true # Chapter collection for Gum chapters="" # Fix output format for Gum for ((i = 0; i < "${#chapter_locations[@]}"; i++)); do chapters+="$(printf "\nChapter $((i + 1)):%s" "${chapter_names[${i}]}")" done # Remove leading new-line chapters="$(echo "${chapters}" | sed '/./,$!d')" # Prompt for user's novel choice chapter_choice="$(echo "${chapters}" | gum filter)" # Remove chapter discriminator from chapter choice chapter_choice="${chapter_choice#Chapter [0-9]*: }" # Locate chapter choice location for ((i = 0; i < "${#chapter_locations[@]}"; i++)); do if [[ "${chapter_names[${i}]}" = " ${chapter_choice}" ]]; then chapter_location="https://www.honeyfeed.fm${chapter_locations[${i}]}" fi done # Return chapter location echo "${chapter_location}" }