mirror of
https://github.com/cesanta/mongoose.git
synced 2026-11-06 15:51:25 +00:00
Fix and improve sorting on Mongoose index pages
Remember sorting settings in url fragment, reverse order on repeated header click. PUBLISHED_FROM=faa033eddc86d0aafc12a86aea4145646ea2c89c
This commit is contained in:
1 parent
c907e6c5fb
commit
fc0bf1953a
1 file changed
+17
-10
+17
-10
@@ -5886,21 +5886,28 @@ static void mg_send_directory_listing(struct mg_connection *nc, const char *dir,
|
|||||||
struct http_message *hm,
|
struct http_message *hm,
|
||||||
struct mg_serve_http_opts *opts) {
|
struct mg_serve_http_opts *opts) {
|
||||||
static const char *sort_js_code =
|
static const char *sort_js_code =
|
||||||
"<script>function srt(tb, col) {"
|
"<script>function srt(tb, sc, so, d) {"
|
||||||
"var tr = Array.prototype.slice.call(tb.rows, 0),"
|
"var tr = Array.prototype.slice.call(tb.rows, 0),"
|
||||||
"tr = tr.sort(function (a, b) { var c1 = a.cells[col], c2 = b.cells[col],"
|
"tr = tr.sort(function (a, b) { var c1 = a.cells[sc], c2 = b.cells[sc],"
|
||||||
"n1 = c1.getAttribute('name'), n2 = c2.getAttribute('name'), "
|
"n1 = c1.getAttribute('name'), n2 = c2.getAttribute('name'), "
|
||||||
"t1 = a.cells[2].getAttribute('name'), "
|
"t1 = a.cells[2].getAttribute('name'), "
|
||||||
"t2 = b.cells[2].getAttribute('name'); "
|
"t2 = b.cells[2].getAttribute('name'); "
|
||||||
"return t1 < 0 && t2 >= 0 ? -1 : t2 < 0 && t1 >= 0 ? 1 : "
|
"return so * (t1 < 0 && t2 >= 0 ? -1 : t2 < 0 && t1 >= 0 ? 1 : "
|
||||||
"n1 ? parseInt(n2) - parseInt(n1) : "
|
"n1 ? parseInt(n2) - parseInt(n1) : "
|
||||||
"c1.textContent.trim().localeCompare(c2.textContent.trim()); });";
|
"c1.textContent.trim().localeCompare(c2.textContent.trim())); });";
|
||||||
static const char *sort_js_code2 =
|
static const char *sort_js_code2 =
|
||||||
"for (var i = 0; i < tr.length; i++) tb.appendChild(tr[i]);}"
|
"for (var i = 0; i < tr.length; i++) tb.appendChild(tr[i]); "
|
||||||
"window.onload = function() { "
|
"if (!d) window.location.hash = ('sc=' + sc + '&so=' + so); "
|
||||||
|
"};"
|
||||||
|
"window.onload = function() {"
|
||||||
"var tb = document.getElementById('tb');"
|
"var tb = document.getElementById('tb');"
|
||||||
"document.onclick = function(ev){ "
|
"var m = /sc=([012]).so=(1|-1)/.exec(window.location.hash) || [0, 2, 1];"
|
||||||
"var c = ev.target.rel; if (c) srt(tb, c)}; srt(tb, 2); };</script>";
|
"var sc = m[1], so = m[2]; document.onclick = function(ev) { "
|
||||||
|
"var c = ev.target.rel; if (c) {if (c == sc) so *= -1; srt(tb, c, so); "
|
||||||
|
"sc = c; ev.preventDefault();}};"
|
||||||
|
"srt(tb, sc, so, true);"
|
||||||
|
"}"
|
||||||
|
"</script>";
|
||||||
|
|
||||||
mg_send_response_line(nc, 200, opts->extra_headers);
|
mg_send_response_line(nc, 200, opts->extra_headers);
|
||||||
mg_printf(nc, "%s: %s\r\n%s: %s\r\n\r\n", "Transfer-Encoding", "chunked",
|
mg_printf(nc, "%s: %s\r\n%s: %s\r\n\r\n", "Transfer-Encoding", "chunked",
|
||||||
@@ -5922,8 +5929,8 @@ static void mg_send_directory_listing(struct mg_connection *nc, const char *dir,
|
|||||||
(int) hm->uri.len, hm->uri.p);
|
(int) hm->uri.len, hm->uri.p);
|
||||||
mg_scan_directory(nc, dir, opts, mg_print_dir_entry);
|
mg_scan_directory(nc, dir, opts, mg_print_dir_entry);
|
||||||
mg_printf_http_chunk(nc,
|
mg_printf_http_chunk(nc,
|
||||||
"<tr><td colspan=3><hr></td></tr>\n"
|
"</tbody><tr><td colspan=3><hr></td></tr>\n"
|
||||||
"</tbody></table>\n"
|
"</table>\n"
|
||||||
"<address>%s</address>\n"
|
"<address>%s</address>\n"
|
||||||
"</body></html>",
|
"</body></html>",
|
||||||
mg_version_header);
|
mg_version_header);
|
||||||
|
|||||||
Reference in new issue
Block a user