Yet Another 勝手にスター
by
a-kuma3
2017-02-21 [2017/02/21 19:36:31]
クリックしたところに、勝手に はてなスターを置きます(一回だけ)
@@ -6,93 +6,93 @@
* @license MIT License
* @javascript_url
*/
-// inspired by
-// http://let.hatelabo.jp/noromanba/let/hLHWyeejvP4c
-// http://let.hatelabo.jp/pacochi/let/hLHWyNLcvcJD
+// inspired by
+// http://let.hatelabo.jp/noromanba/let/hLHWyeejvP4c
+// http://let.hatelabo.jp/pacochi/let/hLHWyNLcvcJD
(() => {
- const d_ = document;
+ const d_ = document;
- function put_star_container(e) {
- if (! d_.querySelector('script[src*="s.hatena.ne.jp"]')) {
- d_.head.appendChild(Object.assign(d_.createElement("script"), {
- type: "text/javascript",
- src: "//s.hatena.ne.jp/js/HatenaStar.js",
- onload: () => put_star_container(e),
- }));
- return;
- }
-
- function insert_entry_node_next(e) {
- return e.parentNode.insertBefore(d_.createElement("span"), e.nextSibling);
- }
-
- let p = {
- node: e,
- uri: d_.location.href,
- title: d_.title,
- }
-
- let link = e.tagName == "A" && e.href ? e : e.querySelector("a[href]");
- if (link) {
- p.uri = link.href;
- p.title = link.textContent.trim();
- p.node = insert_entry_node_next(link);
- /*
- TODO: invisible a
- e.g.
- <div>
- <div>visible</div> click !
- <div style="display: none;">
- invisible
- <a href="...">...
- </div>
- */
- }
-
- // img にも appendChild できちゃうんだねえ
- if (e.tagName == "IMG") {
- p.node = insert_entry_node_next(e);
- }
-
- // hr にも appendChild できちゃうけど、childNode は見える
- // 他にも駄目なタグありそう
-
- console.log(p);
-
- let c = Hatena.Star.EntryLoader;
- c.loadEntries = function(p) {
- return [ new Hatena.Star.Entry({
- entryNode: p.node,
- uri: p.uri,
- title: p.title,
- comment_container: p.node.appendChild(c.createCommentContainer()),
- star_container: p.node.appendChild(c.createStarContainer()),
- }) ];
- };
- c.loadNewEntries(p);
- delete c.loadEntries;
-
- }
-
- function once_handler(e) {
- e.stopPropagation();
- e.preventDefault();
-
- put_star_container(e.target);
-
- d_.removeEventListener('click', once_handler);
- d_.removeEventListener('touchstart', once_handler);
- /*
- http://h.hatena.ne.jp/unarist/228182015329663515
- https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener#Parameters
-
- addEventListener(..., ..., { once: true })
-
- click と touchstart が一回ずつ使えちゃうか
- */
- }
- d_.addEventListener('click', once_handler);
- d_.addEventListener('touchstart', once_handler);
+ function put_star_container(e) {
+ if (! d_.querySelector('script[src*="s.hatena.ne.jp"]')) {
+ d_.head.appendChild(Object.assign(d_.createElement("script"), {
+ type: "text/javascript",
+ src: "//s.hatena.ne.jp/js/HatenaStar.js",
+ onload: () => put_star_container(e),
+ }));
+ return;
+ }
+
+ function insert_entry_node_next(e) {
+ return e.parentNode.insertBefore(d_.createElement("span"), e.nextSibling);
+ }
+
+ let p = {
+ node: e,
+ uri: d_.location.href,
+ title: d_.title,
+ }
+
+ let link = e.tagName == "A" && e.href ? e : e.querySelector("a[href]");
+ if (link) {
+ p.uri = link.href;
+ p.title = link.textContent.trim();
+ p.node = insert_entry_node_next(link);
+ /*
+ TODO: invisible a
+ e.g.
+ <div>
+ <div>visible</div> click !
+ <div style="display: none;">
+ invisible
+ <a href="...">...
+ </div>
+ */
+ }
+
+ // img にも appendChild できちゃうんだねえ
+ if (e.tagName == "IMG") {
+ p.node = insert_entry_node_next(e);
+ }
+
+ // hr にも appendChild できちゃうけど、childNode は見える
+ // 他にも駄目なタグありそう
+
+ console.log(p);
+
+ let c = Hatena.Star.EntryLoader;
+ c.loadEntries = function(p) {
+ return [ new Hatena.Star.Entry({
+ entryNode: p.node,
+ uri: p.uri,
+ title: p.title,
+ comment_container: p.node.appendChild(c.createCommentContainer()),
+ star_container: p.node.appendChild(c.createStarContainer()),
+ }) ];
+ };
+ c.loadNewEntries(p);
+ delete c.loadEntries;
+
+ }
+
+ function once_handler(e) {
+ e.stopPropagation();
+ e.preventDefault();
+
+ put_star_container(e.target);
+
+ d_.removeEventListener('click', once_handler);
+ d_.removeEventListener('touchstart', once_handler);
+ /*
+ http://h.hatena.ne.jp/unarist/228182015329663515
+ https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener#Parameters
+
+ addEventListener(..., ..., { once: true })
+
+ click と touchstart が一回ずつ使えちゃうか
+ */
+ }
+ d_.addEventListener('click', once_handler);
+ d_.addEventListener('touchstart', once_handler);
})();
/*
* @title Yet Another 勝手にスター
* @description クリックしたところに、勝手に はてなスターを置きます(一回だけ)
* @include http://*
* @include https://*
* @license MIT License
* @javascript_url
*/
// inspired by
// http://let.hatelabo.jp/noromanba/let/hLHWyeejvP4c
// http://let.hatelabo.jp/pacochi/let/hLHWyNLcvcJD
(() => {
const d_ = document;
function put_star_container(e) {
if (! d_.querySelector('script[src*="s.hatena.ne.jp"]')) {
d_.head.appendChild(Object.assign(d_.createElement("script"), {
type: "text/javascript",
src: "//s.hatena.ne.jp/js/HatenaStar.js",
onload: () => put_star_container(e),
}));
return;
}
function insert_entry_node_next(e) {
return e.parentNode.insertBefore(d_.createElement("span"), e.nextSibling);
}
let p = {
node: e,
uri: d_.location.href,
title: d_.title,
}
let link = e.tagName == "A" && e.href ? e : e.querySelector("a[href]");
if (link) {
p.uri = link.href;
p.title = link.textContent.trim();
p.node = insert_entry_node_next(link);
/*
TODO: invisible a
e.g.
<div>
<div>visible</div> click !
<div style="display: none;">
invisible
<a href="...">...
</div>
*/
}
// img にも appendChild できちゃうんだねえ
if (e.tagName == "IMG") {
p.node = insert_entry_node_next(e);
}
// hr にも appendChild できちゃうけど、childNode は見える
// 他にも駄目なタグありそう
console.log(p);
let c = Hatena.Star.EntryLoader;
c.loadEntries = function(p) {
return [ new Hatena.Star.Entry({
entryNode: p.node,
uri: p.uri,
title: p.title,
comment_container: p.node.appendChild(c.createCommentContainer()),
star_container: p.node.appendChild(c.createStarContainer()),
}) ];
};
c.loadNewEntries(p);
delete c.loadEntries;
}
function once_handler(e) {
e.stopPropagation();
e.preventDefault();
put_star_container(e.target);
d_.removeEventListener('click', once_handler);
d_.removeEventListener('touchstart', once_handler);
/*
http://h.hatena.ne.jp/unarist/228182015329663515
https://developer.mozilla.org/ja/docs/Web/API/EventTarget/addEventListener#Parameters
addEventListener(..., ..., { once: true })
click と touchstart が一回ずつ使えちゃうか
*/
}
d_.addEventListener('click', once_handler);
d_.addEventListener('touchstart', once_handler);
})();
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。