no category list @ hatena blog
by
a-kuma3
2017-07-07 [2017/07/07 08:33:45]
カテゴリがない記事一覧 question:1499310079
-
/*
* @title no category list @ hatena blog
* @description カテゴリがない記事一覧 question:1499310079
* @include http://blog.hatena.ne.jp/ * /archive
* @license MIT http://opensource.org/licenses/MIT
* @javascript_url
*/
/*
http://q.hatena.ne.jp/1499310079
*/
(function() {
const forEach = Array.prototype.forEach;
const d_ = document;
function display(url) {
let title = d_.getElementById("title");
let e = title.querySelector(".message");
if (! e) {
e = title.appendChild(d_.createElement("span"));
e.className = "message";
e.style.marginLeft = "2em";
}
let m = /page=(\d+)/.exec(url);
if (m) {
e.innerHTML = "(" + m[1] + ")";
}
}
function hide_has_category(doc) {
forEach.call(doc.querySelectorAll("#main-inner > .archive-entries > section.archive-entry a.archive-category-link"), function(category_link) {
category_link.parentNode.parentNode.style.display = "none";
});
}
function get_next_page_url(doc) {
let url;
let pager_next = doc.querySelector('.pager-next > a[rel="next"]');
if (pager_next) {
url = pager_next.href;
}
return url;
}
let n = 0; // びびりなので、一応 ガード
function load_next(url) {
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onload = function(ev) {
console.log(ev.target.responseURL, n);
display(ev.target.responseURL);
let dest = d_.querySelector("#main-inner > .archive-entries");
hide_has_category(ev.target.response);
forEach.call(ev.target.response.querySelectorAll("#main-inner > .archive-entries > section.archive-entry"), function(entry) {
dest.appendChild(entry);
});
n += 1;
let url = get_next_page_url(ev.target.response);
if (url && n < 100) {
load_next(url);
} else {
let e = d_.querySelector("#title .message");
if (e) {
e.parentNode.removeChild(e);
}
}
};
xhr.responseType = 'document';
xhr.send(null);
}
hide_has_category(d_);
load_next(get_next_page_url(d_));
})();
-
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。