Check-in by ben on 2024-10-06 22:07:27 Preserve user list sort order through page navigation. Use "normal" sort order parameters, which makes selectors easier to read. INSERTED DELETED 13 11 src/list/index.dcgi.m4 8 8 src/listsort/index.dcgi.m4 21 19 TOTAL over 2 changed files Index: src/list/index.dcgi.m4 ================================================================== --- src/list/index.dcgi.m4 +++ src/list/index.dcgi.m4 @@ -11,29 +11,31 @@ incl(src/util.awk) function main( acct, client_url, cmd, count, creator, iaout, id, is_private, items, label, list_id, name, name_slug, numfound, order, order_name, order_names, order_param, page, pages, rows, - query, title, type, url) + query, sort_param, title, type, url) { - order_names["creatorSorter"] = creator + order_names["creator"] = "creatorSorter" order_names["date"] = "date" - order_names["titleSorter"] = "title" + order_names["title"] = "titleSorter" order_names["week"] = "week" rows = 15 page = 1 order = "" + sort_param = "" # parse out page number and sort order for (i in parts) { if (parts[i] ~ /^rows[0-9][0-9]*$/) { rows = substr(parts[i], 5) } else if (parts[i] ~ /^page[0-9][0-9]*$/) { page = substr(parts[i], 5) } else if (parts[i] ~ /^sort/) { if (length(order) == 0) { + sort_param = parts[i] order = substr(parts[i], 5) } } } @@ -88,19 +90,19 @@ gsub(/%20/, "-", name_slug) client_url = api_ssl_endpoint "/details/" acct "/lists/" list_id \ "/" name_slug order_param = "" if (length(order) > 0) { - split(order, parts, ":") + split(order, parts, " ") order_name = order_names[parts[1]] if (length(order_name) > 0) { if (parts[2] == "desc") { - client_url = client_url "?-" order_name + client_url = client_url "?-" parts[1] } else { - client_url = client_url "?" order_name + client_url = client_url "?" parts[1] } - order_param = "&sort=" uri_encode(order) + order_param = "&sort=" uri_encode(order_name ":" parts[2]) } } url = api_ssl_endpoint "/services/search/beta/page_production/" \ "?user_query=identifier:(" query ")" \ "&hits_per_page=" rows \ @@ -168,19 +170,19 @@ print "" # only show "page back" if the user is past page 1 if (page > 1) { - printf "[1|[<<] Page %d|%s/list/page%d/rows%d/%%09%s/%d|%s|%s]\n", - page - 1, cgipath, page - 1, rows, + printf "[1|[<<] Page %d|%s/list/page%d/rows%d/%s%%09%s/%d|%s|%s]\n", + page - 1, cgipath, page - 1, rows, sort_param, acct, list_id, server, port } # only show "next page" if the current page is completely full if (count == rows) { - printf "[1|[>>] Page %d|%s/list/page%d/rows%d/%%09%s/%d|%s|%s]\n", - page + 1, cgipath, page + 1, rows, + printf "[1|[>>] Page %d|%s/list/page%d/rows%d/%s%%09%s/%d|%s|%s]\n", + page + 1, cgipath, page + 1, rows, sort_param, acct, list_id, server, port } # only show "sort" if there's more than one item to sort if (numfound > 1) { Index: src/listsort/index.dcgi.m4 ================================================================== --- src/listsort/index.dcgi.m4 +++ src/listsort/index.dcgi.m4 @@ -10,25 +10,25 @@ function main( acct, i, lbl, list_id, opt) { lbl[1] = "Relevance" opt[1] = "" lbl[2] = "Weekly views [^]" - opt[2] = "week:asc" + opt[2] = "week asc" lbl[3] = "Weekly views [v]" - opt[3] = "week:desc" + opt[3] = "week desc" lbl[4] = "Title [^]" - opt[4] = "titleSorter:asc" + opt[4] = "title asc" lbl[5] = "Title [v]" - opt[5] = "titleSorter:desc" + opt[5] = "title desc" lbl[6] = "Date published [^]" - opt[6] = "date:asc" + opt[6] = "date asc" lbl[7] = "Date published [v]" - opt[7] = "date:desc" + opt[7] = "date desc" lbl[8] = "Creator [^]" - opt[8] = "creatorSorter:asc" + opt[8] = "creator asc" lbl[9] = "Creator [v]" - opt[9] = "creatorSorter:desc" + opt[9] = "creator desc" split(search, parts, "/") acct = parts[1] list_id = parts[2]