Mercurial > hgrepos > hgweb.cgi > s4
changeset 1035:e8f73df7ed5d draft
Add "sort by uid" button to blog table
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Wed, 06 Mar 2024 09:37:52 +0900 |
parents | 17e21e7dcfaa |
children | 9c392ddb4d8a |
files | s4-main.js |
diffstat | 1 files changed, 55 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/s4-main.js Wed Mar 06 09:32:51 2024 +0900 +++ b/s4-main.js Wed Mar 06 09:37:52 2024 +0900 @@ -894,8 +894,11 @@ } } function initBlogs() { - // Auto-complete #xxxx + // (1)Auto-complete #xxxx, (2)Prepare sort + + // (1)Complete #xxxx let i, check = collectElementsByAttr("input", "name", "notifyto"); + let blogheadtd = document.querySelector("table.bloghead tr td"); if (check) for (i of check) { i.addEventListener("click", insertRedirect, false); @@ -924,8 +927,7 @@ i = document.getElementById("reload"); if (i) i.addEventListener("click", ajaxPost, false); // Add CSV download button - let td = document.querySelector("table.bloghead tr td"); - if (td) { + if (blogheadtd) { let btn = document.createElement("button"); btn.innerText = "CSVget"; btn.type = "button"; @@ -936,7 +938,7 @@ Excelで利用する場合は Ctrl を押しながらクリックして下さい。 Get seen TEXT content as CSV.`; btn.addEventListener("click", getTextContentCSV, false); - let artlink = td.querySelector('a[accesskey="f"]'); + let artlink = blogheadtd.querySelector('a[accesskey="f"]'); let spacer = document.createElement("span"); if (artlink) { spacer.innerText = "|"; @@ -944,8 +946,8 @@ artlink.insertAdjacentElement('beforebegin', spacer); } else { spacer.innerText = " "; - td.appendChild(spacer); - td.appendChild(btn); + blogheadtd.appendChild(spacer); + blogheadtd.appendChild(btn); } } } @@ -960,6 +962,53 @@ // Hack article_m links registPjaxViewers(document.querySelectorAll("a[href]")); atMarkView(document); + /*****************************************************************/ + //(2) Prepare sort + let warn = document.querySelector("tr.warn span.warn"); + if (blogheadtd && warn==null) { + let umode = "UserSORT", amode = "ArticleSort"; + let sbtn = document.createElement("button"); + sbtn.textContent = umode; + sbtn.type = 'button'; + let spacer = document.createElement("span"); + spacer.textContent = " "; + let hide = document.getElementById("hideauth"); + if (hide) { + hide.insertAdjacentElement('afterend', sbtn); + hide.insertAdjacentElement('afterend', spacer); + } else { + blogheadtd.appendChild(spacer); + blogheadtd.appendChild(sbtn); + } + function compareRowsByUid(a, b) { + if (a.key1 < b.key1) return -1; + if (a.key1 > b.key1) return 1; + if (a.key2 < b.key2) return -1; + if (a.key2 > b.key2) return 1; + return 0; + } + function compareRowsByAid(a, b) { + if (a.key2 < b.key2) return -1; + if (a.key2 > b.key2) return 1; + return 0; + } + sbtn.addEventListener("click", (e)=>{ + let uidsort = (sbtn.textContent.indexOf(umode) >= 0); + let rows = [], elm, + tbl = document.querySelector("table.blog_replies"); + for (let tr of tbl.rows) { + elm = {}; + elm.tr = tr; + elm.key1 = tr.querySelector("a.author").title; // userid + tr.innerHTML.match(/<a href="(#[0-9]+)">\1</); // ArticleID + elm.key2 = RegExp.$1; + rows.push(elm); + } + rows.sort(uidsort ? compareRowsByUid : compareRowsByAid); + for (let r of rows) tbl.appendChild(r.tr); + sbtn.textContent = uidsort ? amode : umode; + }); + } } function initGrpAction() { var rev = document.getElementById("reverse");