Mercurial > hgrepos > hgweb.cgi > s4
comparison s4-main.js @ 997:f7cd4528926b draft
Warning message for BOM fixed
author | HIROSE Yuuji <yuuji@gentei.org> |
---|---|
date | Mon, 17 Oct 2022 17:11:04 +0859 |
parents | 83119d97a2f2 |
children | ddf85e80f64e |
comparison
equal
deleted
inserted
replaced
996:a50f5b0b2c3d | 997:f7cd4528926b |
---|---|
814 i.classList.add("hideauthor"); | 814 i.classList.add("hideauthor"); |
815 } | 815 } |
816 quizwarnVisible = true; | 816 quizwarnVisible = true; |
817 } | 817 } |
818 } | 818 } |
819 function downloadFile(filename, content) { | 819 function downloadFile(filename, content, BOM) { |
820 let bom = new Uint8Array([0xEF, 0xBB, 0xBF]); | 820 let bom = new Uint8Array([0xEF, 0xBB, 0xBF]); |
821 let str = new Blob([bom, content], {type: "text/csv"}); | 821 let str = new Blob(BOM ? [bom, content] : [content], |
822 {type: "text/csv"}); | |
822 var uri = URL.createObjectURL(str); | 823 var uri = URL.createObjectURL(str); |
823 let a = document.createElement("a"); | 824 let a = document.createElement("a"); |
824 a.download = filename; | 825 a.download = (BOM ? "BOM-" : "")+filename; |
825 a.href = uri; | 826 a.href = uri; |
826 document.body.appendChild(a); | 827 document.body.appendChild(a); |
827 a.click(); | 828 a.click(); |
828 document.body.removeChild(a); | 829 document.body.removeChild(a); |
829 } | 830 } |
830 function getTextContentCSV_1(e) { | 831 function getTextContentCSV_1(e) { |
831 let blogtbl = document.querySelector("table.blog_replies"); | 832 let blogtbl = document.querySelector("table.blog_replies"); |
833 let needBOM = e.ctrlKey; | |
832 if (!blogtbl) return; | 834 if (!blogtbl) return; |
833 let trw = blogtbl.querySelector("tr.warn"), a; | 835 let trw = blogtbl.querySelector("tr.warn"), a; |
834 if (trw && (a=trw.querySelector("th>a"))) { | 836 if (trw && (a=trw.querySelector("th>a"))) { |
835 if (a.title == "Show All") { | 837 if (a.title == "Show All") { |
836 if (window.confirm(`50件以下に表示制限されています。 | 838 if (window.confirm(`50件以下に表示制限されています。 |
840 Push OK to get all articles, Cancel to get only seen articles.`)) { | 842 Push OK to get all articles, Cancel to get only seen articles.`)) { |
841 a.click(); | 843 a.click(); |
842 return; | 844 return; |
843 } | 845 } |
844 } | 846 } |
847 } | |
848 if (navigator.userAgent.match(/Windows/)) { | |
849 if (!e.ctrlKey && !e.shiftKey && !window.confirm(`Excelで読ませるCSVの場合はBOMが必要です。 | |
850 その場合は一度キャンセルして Ctrl キーを押しながらボタンクリックして下さい。 | |
851 逆にExcel以外(GoogleスプレッドシートやLibreOfficeや他のツール)で読む場合はBOMをつけるとファイルの1行目の先頭にゴミのようなものが見える場合あるのでそのときは除去する必要があります。 | |
852 今後もBOM不要の場合はShiftキーを押しながらクリックして下さい。 | |
853 If you feed this CSV into Microsoft Excel, consider adding BOM sequence that can be prepended by pressing Control key with click. | |
854 In this case, click CSVget with ctrl key after Cancel this dialog. | |
855 If you never need BOM, press Shift key with click.`)) | |
856 return; | |
845 } | 857 } |
846 outcsv = [] | 858 outcsv = [] |
847 for (let row of blogtbl.querySelectorAll("tr[id]")) { | 859 for (let row of blogtbl.querySelectorAll("tr[id]")) { |
848 let tds = row.querySelectorAll("td"), | 860 let tds = row.querySelectorAll("td"), |
849 a = tds[0].querySelector("a.author"), | 861 a = tds[0].querySelector("a.author"), |
858 "id": "#"+id, "body": body}); | 870 "id": "#"+id, "body": body}); |
859 } | 871 } |
860 let line = new CSV(outcsv, {header:true}).encode(), | 872 let line = new CSV(outcsv, {header:true}).encode(), |
861 fn = myurl.replace(/.*\?/, "").replaceAll("+", "-") | 873 fn = myurl.replace(/.*\?/, "").replaceAll("+", "-") |
862 .replace(/#.*/, "").replace("-n:all", ""); | 874 .replace(/#.*/, "").replace("-n:all", ""); |
863 downloadFile(fn+".csv", line); | 875 downloadFile(fn+".csv", line, needBOM); |
864 } | 876 } |
865 function getTextContentCSV(e) { | 877 function getTextContentCSV(e) { |
866 if (!document.getElementById("csvminjs")) { | 878 if (!document.getElementById("csvminjs")) { |
867 let csvmin = document.createElement("script"); | 879 let csvmin = document.createElement("script"); |
868 csvmin.src="https://www.yatex.org/libcache/csv.min.js"; | 880 csvmin.src="https://www.yatex.org/libcache/csv.min.js"; |
911 let btn = document.createElement("button"); | 923 let btn = document.createElement("button"); |
912 btn.innerText = "CSVget"; | 924 btn.innerText = "CSVget"; |
913 btn.type = "button"; | 925 btn.type = "button"; |
914 btn.title = `見えている書き込みをCSVで取得します | 926 btn.title = `見えている書き込みをCSVで取得します |
915 全件表示されていることを確認してから利用して下さい。 | 927 全件表示されていることを確認してから利用して下さい。 |
928 Excelで利用する場合は Ctrl を押しながらクリックして下さい。 | |
916 Get seen TEXT content as CSV.`; | 929 Get seen TEXT content as CSV.`; |
917 btn.addEventListener("click", getTextContentCSV, false); | 930 btn.addEventListener("click", getTextContentCSV, false); |
918 let artlink = td.querySelector('a[accesskey="f"]'); | 931 let artlink = td.querySelector('a[accesskey="f"]'); |
919 let spacer = document.createElement("span"); | 932 let spacer = document.createElement("span"); |
920 if (artlink) { | 933 if (artlink) { |