PIXIV Hacks
はてなスター透明化グリモン
最終更新:
pixivhacker
はてなスター透明化グリースモンキー
注意(おことわり)
当時からはてぶもずいぶん仕様変更して
下記のグリモンもすっかり動かなくなってます。
旬もずいぶん過ぎたネタですしはてぶの使われ方もずいぶん変わりました。
私が今後対応することもないでしょう。
やる気のある人は適当にソース拾って自由に改変するといいよ!
はてなスター透明化グリモンできました。
集合知(笑)を汚す汚物は消毒ダー!なモヒカンの人も、
クラス全員にチロルチョコ配っちゃう優しい人も
これで安心共存共栄。
(プログラミング自体を楽しむ目的で作った一種のジョークソフトみたいなもんなので実用性とかあまり考えないように。)
-
transparentHatenaStar.1.2.user.js
(インストールの前に下記の免責事項とソースも見てね)
バージョンアップしました。
上記新ファイルをインストールするとそのまま上書きされると思います。
前バージョンのファイルはこちら。
transparentHatenaStar.1.1.user.js(濃さ計算に多少バグあり)
transparentHatenaStar.user.js
*** これは何? 安売りされたはてなスターの色をその人がつけたエントリ数に応じて薄くします。
ほとんどのエントリにつけている人の星は消え去ります。
あと、はてな内部だけしか動きません。
(実ははてなブックマーク以外ではほとんど動作確認してなかったりします)
使用前
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (使用前)
使用後
#ref error :ご指定のファイルが見つかりません。ファイル名を確認して、再度指定してください。 (使用前)
作ろうと思ったのは下記のエントリを見たから。
はてなスターの安売りはありがた迷惑
はてなブックマーク > はてなスターの安売りはありがた迷惑←ここで動作確認もできます(笑)
濃さとか調整できないの?
ソースをエディタで開いて頭のほうにある
var GAMMA = 1.0;
とかを自分で適当に調整してください。
仕様の話とか
★100★とかなってるところは、押してみないと数えられないんで見えないところの星は最初は透明度に反映されません。(押せば反映されます)。
(これは私の腕の限界もあるけど、こんなことではてなのサーバに負荷かけるのもどうかと思うので、、、)
同じエントリに対してたくさん星をつけている場合、
たとえば全体の半分のエントリに1個の星をつけ、残りのほぼ半分に2個の星、
ひとつのエントリだけ星3つだったとき、最初の星は消えて見えなくなり、二つ目の星は半分の濃さ、三つ目の星は100%の濃さで見えるようになります。
新バージョンははてなブックマーク向けの微調整として、コメント無しのエントリは分母として数えないようにするオプションをつけました。
デフォルトでONなのでOFFにするにはソースの
var SKIP_BLANK_HATEBU = true;
のところを
var SKIP_BLANK_HATEBU = false;
にしてください。
免責事項
免責を参照
謝辞
このスクリプトを作るにあたっては下記のグリモンを参考にさせていただきました。
(0x集積蔵)はてなスターの星をプロフィールアイコンに置き換えるGreasemonkey Script
っていうか、自分がこのスクリプトと一緒に使いたかったので、
競合しないようがんばりました。
おすすめなのでぜひ一緒にどうぞ。
あと、下記のTimeLagライブラリからコピペさせていただいてます。
これがなければこのグリモンはできなかったとおもいます。多謝。
(0x集積蔵)時間差を設定し、最後にセットした関数だけを実行する
動作報告とかバグとかは↓にどうぞ。
(荒れるようなら容赦なく消します。)
- 書き込みテスト -- nanakoso (2008-01-12 21:31:00)
-
とりあえあずだいぶ前から動いてませんが、めんどいので放置 -- UP主 (2009-02-28 21:39:03)
関連リンク
●はてなスターに連射ボタンをつけるBookmarklet 改造版
// ==UserScript==
// @name transparent hatena star
// @namespace http://www14.atwiki.jp/pixivhacker/
// @include http://*.hatena.ne.jp/*
// @version 1.2
// ==/UserScript==
// 更新履歴
//
// 1.2 はてブのコメント無しエントリスキップのバグを修正。
//
// 1.1 スターの個数によって濃度を変えるようにした。
// はてブのコメント無しエントリを分母に加えないようにするオプションを加えた。
//
// 1.0 最初のリリース
// このグリモンは下記のグリモンを参考にして作りました。
// いかしたスクリプトなんで同時に使うことをおすすめします。
//
// 「はてなスターの星をプロフィールアイコンに置き換えるGreasemonkey Script」
// http://d.hatena.ne.jp/os0x/20070911/1189544433
//
// っていうか、自分がこのスクリプトと一緒に使いたかったので、
// 競合しないようがんばりました。
(function(){
// 可視最低保障エントリ数。
// 下記の数以下のエントリに対する星ならは薄くならずに表示されることが保障されます。
var MIN_COUNT = 5;
// ディスプレイやCGの明るさ調整のガンマとほぼ同じ?
// 大きくすると全体的に薄く、小さくすると濃くなります。
// 0 < GAMMA < ∞の実数値
var GAMMA = 1.0;
// 非表示の閾値。デフォルトの0.1では透明度90%以上の星は消えて
// その表示場所は詰められます。
// ガンマ補正後の値で判断されることに注意、ガンマで薄くすると非表示の星も増えます。
var THRESHOLD = 0.1;
// はてなブックマーク専用の設定。
// コメント無しのブックマークエントリは分母として数えない。
var SKIP_BLANK_HATEBU = true;
// 下記サイトのTimeLagライブラリからコピペ。 多謝
// http://d.hatena.ne.jp/os0x/20071205
var TimeLag = function(){this.initialize();};
TimeLag.prototype ={
initialize:function(ms){
this.ms = ms;
this.exe = null;
}
,set:function(func,obj){
if (this.exe && !this.exe.complete) {
this.exe.cancel();
}
return this.later(func,obj);
}
,later:function(func,thisObject) {
var self = this;
return function(){
var args = arguments;
var res = {
complete: false,
cancel: function(){clearTimeout(PID);},
notify: function(){clearTimeout(PID);later_func()}
};
var later_func = function(){
func.apply(thisObject,args);
res.complete = true;
};
var PID = setTimeout(later_func,self.ms);
self.exe = res;
return res;
}
}
};
var $uw = unsafeWindow;
if($uw.Hatena && $uw.Hatena.Star){
init();
}
function calcOpacity(count,all) {
var opacity;
if(count <= MIN_COUNT || all <= MIN_COUNT){
opacity = 1;
}else{
opacity = 1 - (count-MIN_COUNT) / (all-MIN_COUNT);
}
opacity = Math.max(opacity,0);
opacity = Math.min(opacity,1);
return Math.pow( opacity , GAMMA );
}
function isBlankEntry(title,name){
var pre=title;
if(typeof(title)!="string"){
return false;
}
title = title.replace(/^(\[[^\]]+\])*/,"");
title = title.replace(/^[\w]+のブックマーク/,"");
title = title.replace(/ - .*/,"");
title = title.replace(/^[\s ]+|[\s ]+$/g,"");
if(title.length==0){
return true;
}
return false;
}
function init() {
var lag = new TimeLag(1000);
var bindStarEntry_bkup =
$uw.Hatena.Star.Entry.prototype.bindStarEntry;
$uw.Hatena.Star.Entry.prototype.bindStarEntry = function(se){
lag.set(function(){
var users = {};
var all = $uw.Hatena.Star.EntryLoader.entries.length;
var es = $uw.Hatena.Star.EntryLoader.entries;
var stars,s;
var prev_name = "";
var star_count = 0;
var name;
var all_count = 0;
for(var i = 0; i< es.length; i++){
if( !isBlankEntry(es[i].title) ){
all_count++;
}
var uri = es[i].uri;
stars = es[i].stars;
prev_name = "";
star_count=0;
for(var j = 0; j < stars.length; j++ ){
s = stars[j];
if (typeof(s.name) != 'undefined') {
name = s.name;
if(prev_name !=name){
prev_name=name;
star_count=0;
}
}
if( !users[name+","+star_count] ) {
users[name+","+star_count] = {count:0};
}
users[name+","+star_count].count++;
star_count++;
}
}
for( var n in users ){
users[n].opacity = calcOpacity(
users[n].count, (SKIP_BLANK_HATEBU ? all_count : all) );
}
for(var l = 0; l < es.length; l++){
stars = es[l].stars;
prev_name = "";
star_count=0;
for(var k = 0, klen=stars.length; k < klen; k++){
s = stars[k];
if (typeof(s.name) != 'undefined') {
name = s.name;
if(prev_name!=name){
star_count = 0;
prev_name=name;
}
var opacity = users[name+","+star_count].opacity;
var img = s.img;
if( opacity < THRESHOLD ){
img.style.display = "none";
}else{
img.style.opacity = opacity;
}
}
star_count ++;
}
}
})();
bindStarEntry_bkup.apply(this, [se]);
}
}
})();