404 motivation not found | t_ishidaのブログ

8月/08

27

viっぽく見るグリモン(ちゃんとリリース)

使い方

  1. グリモンにインストールします
  2. wassrでポップアップ禁止を外します
  3. 使います
  4. LDRize使ってる人は、これを使わないか、LDRizeをWassr上で実行しないように設定して下さい。
  5. Firemacs使ってる人は挙動が訳分からなくなるかも知れません
  6. AutoPagerizeで開いたページはイイネボタンのイベントが登録されてないと思います。が、これを使ってイイネすればページ遷移しないで、イイネの実行が出来ます
  7. AutoPagerizeでの通信が遅い時とかは、せっかちにjボタン押さないで、ちょっと待ったほうが良いです。このグリモンは画面遷移型の勝手にページングに対応してますが、AutoPagerizeが始まる前に、勝手にページングが始まると、AutoPagerize使うタイプの人は逆にそれがウザイと思うので

インストール

viっぽく見る奴

http://ishida-tak.sakura.ne.jp/gm/wassr-key.user.js

「全部イイネ・イラネ」ボタンを設置

http://ishida-tak.sakura.ne.jp/gm/irane.user.js

治ったところ

  • URLのゴミ
  • rでリプライができるようになった
  • sで写真が見れるようになった
  • oで個人別のページに飛べるようになった

コマンド

  • rでリプライ
  • sで写真(写真開いた窓はキーボード押すと閉じます)
  • oで個人別ページ
  • 0でmyに飛ぶ
  • jで下に下がる
  • kで上に上がる
  • iでイイネする(イイネしてたらイラネする)

その他

コメントつけたので、適当にメンテして使ってください。

追記

2008/08/28

  • autopagerizeを考慮に入れて修正しました。割と便利。
  • 「f」で、全国のヒトコト出すようにしてみました。
  • window.openとか、画面遷移してたのを全部フロートパネルに出すようにしました。
  • 「q」で、フロートパネル閉じます
TODO

・LDRizeと併用できるようにLDRizeをハックする方法を考えたり考えなかったりする

// ==UserScript==
// @name           [Wassr] viっぽいの
// @description    viっぽく見るグリモン
// @include        http://wassr.jp/*
// @author         t_ishida
// ==/UserScript==
(function() {
//設定の類
var COLOR = 'rgb(240, 150, 240)';
var divs        = [];
var current_idx = 0;
var float_panel     = document.createElement( 'div' );
var button      = document.createElement( 'input' );
var iframe      = document.createElement( 'iframe' );
var p           = document.createElement( 'p' );
iframe.width    = '600px';
iframe.height   = '300px';
iframe.name     = '__ifr';

button.type     = 'button';
button.value    = '(^o^)/~';
observe( button, 'click', function(){ this.parentNode.parentNode.style.display = 'none'; } );
p.appendChild( button );
float_panel.appendChild( p );
float_panel.appendChild( iframe );
float_panel.id = '__float_panel';
float_panel.style.position        = 'fixed';
float_panel.style.top             = 0;
float_panel.style.left            = 0;
float_panel.style.display         = 'none';
float_panel.style.backgroundColor = 'black';
document.body.appendChild( float_panel );

initDivs();
if( location.href.match( /prev=1/ ) ){
// 前方ページングの時にはメッセージ末尾に移動
current_idx = divs.length - 2;
scrollDown();
} else {
// それ以外なら頭に移動
divs[current_idx].style.backgroundColor = COLOR;
}

//イベントのインストール
observe( document.all ? document.body : window, 'keydown', main  );

/***************************************************
   * main
   ***************************************************/
function main( e ){
if( document.activeElement.tagName.match( /(?:text|select|input)/i ) ) return;
initDivs();
if( !e ) e = event;
var cmds = {
'79' : showUser ,                         //o
'83' : showPicture ,                      //s
'73' : toggleIine ,                       //i
'74' : scrollDown ,                       //j
'75' : scrollUp ,                         //k
'82' : showEditor ,                       //r
'70' : showSearcher ,                     //f
'48' : function(){ location.href = 'http://wassr.jp/my'; } ,        //0
'81' : function(){ $('__float_panel').style.display = 'none'; } //q
};
setActive();
if( cmds[e.keyCode] ) cmds[e.keyCode]();
}

/*****************************************************
   * コマンド群
   *****************************************************/
//
// 一個上ににさがる
//
function scrollUp(){
if( current_idx < 1 ) {
if( !$('PagerPreviousLink') ) return;
var url_param = $('PagerNextLink').href.split( /?/ );
var url   = url_param[0];
var param = url_param[1].split( /&/ );
var buf = [];
for( var i = 0, l = param.length; i < l; i++ ){
if( !param[i].match( /ws_key/ ) ){
buf.push(  param[i] );
}
}
location.href =  url + '?' + buf.join( '&' ) + '&ws_key_prev=1';
return;
}
divs[current_idx].style.backgroundColor = '';
current_idx--;
window.scrollTo( 0, getLT( divs[current_idx] )[1] - 50 );
divs[current_idx].style.backgroundColor = COLOR;
}

//
// 一個下にさがる
//
function scrollDown(){
if( !divs[current_idx + 1] ){
if( !$('PagerNextLink') ) return;
var url_param = $('PagerNextLink').href.split( /?/ );
var url   = url_param[0];
var param = url_param[1].split( /&/ );
var buf = [];
for( var i = 0, l = param.length; i < l; i++ ){
if( !param[i].match( /ws_key/ ) ){
buf.push( param[i] );
}
}
location.href =  url + '?' + buf.join( '&' );
return;
}
divs[current_idx].style.backgroundColor = '';
current_idx++;
window.scrollTo( 0, getLT( divs[current_idx] )[1] -50 );
divs[current_idx].style.backgroundColor = COLOR;
}

//
// イイネする
//
function toggleIine(){
var elms = divs[current_idx].getElementsByTagName('input');
for( var i = 0, l = elms.length; i < l; i++ ){
if( elms[i].className != 'favorite_button' ) continue;
elms[i].parentNode.target = '__ifr';
if( elms[i].src.match( /E725/ ) ){
elms[i].src = "/img/pictogram/E72A.gif";
} else {
elms[i].src = "/img/pictogram/E725.gif";
}
elms[i].click();
break;
}
}

//
// リプライを表示
//
function showEditor(){
var elms = divs[current_idx].getElementsByTagName('a');
for( var i = 0, l = elms.length; i < l; i++ ){
if( elms[i].className.match(/taggedlink/) ) continue;
$('__float_panel').getElementsByTagName( 'iframe' )[0].src = elms[i].href;
$('__float_panel').style.display = '';
break;
}
}

//
// 写真を表示
//
function showPicture(){
var elms = divs[current_idx].getElementsByTagName('img');
for( var i = 0, l = elms.length; i < l; i++ ){
if( elms[i].alt == 'photo' ){
$('__float_panel').getElementsByTagName( 'iframe' )[0].src = elms[i].parentNode.href;
$('__float_panel').style.display = '';
break;
}
}
}

//
// その人の単票を開く
//
function showUser(){
var elms = divs[current_idx].getElementsByTagName('a');
for( var i = 0, l = elms.length; i < l; i++ ){
if( elms[i].className == 'MsgUserName' ){
$('__float_panel').getElementsByTagName( 'iframe' )[0].src = elms[i].href;
$('__float_panel').style.display = '';
break;
}
}
}

//
// メッセージブロックを収集
//
function initDivs(){
divs = [];
var buf = document.getElementsByTagName('div');
for( var i = 0, l = buf.length; i < l; i++ ){
if( buf[i].className == 'MsgBody' ){
divs.push( buf[i] );
}
}
}

function setActive(){
var elm = getParentNodeByClassName( 'MsgBody' ,document.activeElement  );
for( var i = 0, l = divs.length; i < l; i++ ){
if( elm == divs[i] ) {
current_idx = i;
elm.focus();
window.scrollTo( 0, getLT( elm )[1] );
break;
}
}
}
/*****************************************
   * 共通関数の類
   *****************************************/
//
// 長いから
//
function $( id ){ return document.getElementById( id ); }

//
// イベント設定のなんかほらアレ
//
function observe(target, type, listener) {
if   (target.addEventListener) target.addEventListener(type, listener, false);
else target.attachEvent('on' + type, function() { listener.call(target, window.event); });
}

//
// エレメントの絶対位置の取得
//
function getLT(element) {
var valueT = 0, valueL = 0;
do {
valueT += element.offsetTop  || 0;
valueL += element.offsetLeft || 0;
element = element.offsetParent;
} while (element);
return [valueL, valueT];
}

function getParentNodeByClassName( class_nm, elm ){
if( !elm ) return null;
if( elm.tagName.match( /body/i ) ) return null;
if( elm.className == class_nm )    return elm;
return getParentNodeByClassName( class_nm, elm.parentNode );
}
function showSearcher( ){
$('__float_panel').getElementsByTagName( 'iframe' )[0].src = 'http://wassr.jp/search/status';
$('__float_panel').style.display = '';
}
})();
Share and Enjoy:
  • Digg
  • del.icio.us
  • Google Bookmarks
  • Tumblr
  • email
  • Facebook
  • FriendFeed

RSS Feed

コメントはまだありません。

Leave a comment!

<< 更新してなかった間にしてたこと

ワッサーをviっぽっく読むためのグリモン >>

Find it!

Theme Design by devolux.org

Tag Cloud