Hatena::Diary::Profile

  • /*
     * @title Hatena::Diary::Profile
     * @description 閲覧中のはてなダイアリー/はてなブログのダイアリープロフィールにジャンプする(はてなグループ対応)
     * @include http://d.hatena.ne.jp/*
     * @include http://*g.hatena.ne.jp/*
     * @include http://*.hatenablog.com/*
     * @include http://*.hateblo.jp/*
     * @include http://*.hatenadiary.com/*
     * @include http://*.hatenadiary.jp/*
     * @license MIT License http://noromanba.mit-license.org/2012+
     * @require
     * @see http://let.hatelabo.jp/noromanba/let/gYC-yaLdm_rUcA (Permalink)
     * @see http://d.hatena.ne.jp/keyword/%A4%CF%A4%C6%A4%CAID
     */
    
    // Profile Pages -> origin + /about
    // http://d.hatena.ne.jp/@USERNAME/about
    // http://@USERNAME.hatenablog.com/about
    // ↓忘れてた。
    // http://g.hatena.ne.jp/@USERNAME/about
    // http://@GROUPNAME.g.hatena.ne.jp/about
    // http://@GROUPNAME.g.hatena.ne.jp/@USERNAME/about
    
    // @TODO はてダ/ブロを表現するクラスベースにした方が
    // http://let.hatelabo.jp/noromanba/let/gYC-yaKPiIfzXA とのからみで後々いいかも
    (function() {
        var domain = searchHatenaDomain();
        if (domain) {
            var topPage = location.origin || location.protocol + '//' + location.hostname;
            var userName = getUserName();
            if (userName && isReservedWord(userName)) {
                userName = '';
            }
            topPage += userName ? '/' + userName : '';
            var aboutPage = topPage + '/about';
            console.debug('::Let:: ' + 'topPage: ' + topPage);
            console.debug('::Let:: ' + 'aboutPage: ' + aboutPage);
            location.href =  aboutPage;
        }
    })();
    
    function searchHatenaDomain() {
        var domains = [
                'd.hatena.ne.jp',
                'g.hatena.ne.jp',
                'hatenablog.com',
                'hateblo.jp',
                'hatenadiary.com',
                'hatenadiary.jp'
            ];
        var host = location.hostname;
        for (var i = 0; i < domains.length; i++) {
            if (host.indexOf(domains[i]) != -1) {
                return domains[i];
            }
        }
        return '';
    }
    
    function getUserName() {
            // Ten http://www.hatena.ne.jp/js/Ten.js or http://s.hatena.ne.jp/js/HatenaStar.js
            var Hatena = Hatena || {};
            if (Hatena.Author && Hatena.Author.name) {
                 return Hatena.Author.name;
            }
            // Ten.Hatenaがいないはてブロは想定してない -> けどあったな・・
            var userName = location.pathname.split('/')[1];
            console.debug('::Let:: '+ 'userName: ' + userName);
            return userName;
    }
    
    // TenのHatena.Author.name が使えないと、はてなIDの判別がめんどくてこうなっちゃう。
    // これははてなサービス全般でいえる。かといってスクレイピングはちょっと。
    // Array.forEach使いたいですIE8先生・・
    function isReservedWord(userName) {
        // とりあえずグループ分だけ
        var reserved = [
                'about',
                'calendar',
                'diarylist',
                'keyword',
                'keywordlist',
                'task',
                'topictree'
            ];
        for (var i = 0; i < reserved.length ; i++) {
                if (reserved[i] == userName) {
                    return true;
                }
        }
        return false;
    }
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2012/02/07 07:43:30 - 2012-02-07
  2. 2012/01/31 02:23:29 - 2012-01-31
  3. 2012/01/29 22:04:35 - 2012-01-29
  4. 2012/01/29 06:18:45 - 2012-01-29
  5. 2012/01/29 06:14:36 - 2012-01-29
  6. 2012/01/27 05:17:00 - 2012-01-27
  7. 2012/01/27 05:16:46 - 2012-01-27
  8. 2012/01/27 04:50:16 - 2012-01-27
  9. 2012/01/27 04:44:24 - 2012-01-27
  10. 2012/01/27 03:27:26 - 2012-01-27
  11. 2012/01/26 02:04:36 - 2012-01-26