Hatena::Diary::Profile

    @@ -2,6 +2,7 @@ * @title Hatena::Diary::Profile * @description Go to HatenaDiary/HatenaBlog Profile (閲覧中のはてなダイアリー/ブログのダイアリープロフィールにジャンプする) * @include http://d.hatena.ne.jp/* + * @include http://*g.hatena.ne.jp/* * @include http://*.hatenablog.com/* * @include http://*.hateblo.jp/* * @include http://*.hatenadiary.com/* @@ -15,27 +16,38 @@ // Profile Pages -> origin + /about // http://d.hatena.ne.jp/@USERNAME/about // http://@USENAME.hatenablog.com/about +// ↓忘れてた。 +// http://g.hatena.ne.jp/@USERNAME/about +// http://@GROUPNAME.g.hatena.ne.jp/@USENAME/about -// @TODO はてダ/ブロを表現するクラスベースにした方がいいかも +// @TODO はてダ/ブロを表現するクラスベースにした方が +// http://let.hatelabo.jp/noromanba/let/gYC-yaKPiIfzXA とのからみで後々いいかも (function() { var domain = searchHatenaDomain(); if (domain) { var topPage = location.origin || location.protocol + '//' + location.hostname; - if (domain == 'd.hatena.ne.jp') { - topPage += '/' + Hatena.Author.name; + // Ten http://www.hatena.ne.jp/js/Ten.js or http://s.hatena.ne.jp/js/HatenaStar.js + var userName = getUserName(); + if (userName && isReservedWord(userName)) { + userName = ''; } - location.href = topPage + '/about'; + topPage += userName ? '/' + userName : ''; + var aboutPage = topPage + '/about'; + location.href = aboutPage; + console.debug('::Let:: ' + 'topPage: ' + topPage); + console.debug('::Let:: ' + 'aboutPage: ' + aboutPage); } })(); function searchHatenaDomain() { var domains = [ - 'd.hatena.ne.jp', - 'hatenablog.com', - 'hateblo.jp', - 'hatenadiary.com', - 'hatenadiary.jp' - ]; + '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) { @@ -44,3 +56,37 @@ } 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がいないはてブロは想定してない + 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; +}
  • /*
     * @title Hatena::Diary::Profile
     * @description Go to HatenaDiary/HatenaBlog Profile (閲覧中のはてなダイアリー/ブログのダイアリープロフィールにジャンプする)
     * @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://@USENAME.hatenablog.com/about
    // ↓忘れてた。
    // http://g.hatena.ne.jp/@USERNAME/about
    // http://@GROUPNAME.g.hatena.ne.jp/@USENAME/about
    
    // @TODO はてダ/ブロを表現するクラスベースにした方が
    // http://let.hatelabo.jp/noromanba/let/gYC-yaKPiIfzXA とのからみで後々いいかも
    (function() {
        var domain = searchHatenaDomain();
        if (domain) {
            var topPage = location.origin || location.protocol + '//' + location.hostname;
            // Ten http://www.hatena.ne.jp/js/Ten.js or http://s.hatena.ne.jp/js/HatenaStar.js
            var userName = getUserName();
            if (userName && isReservedWord(userName)) {
                userName = '';
            }
            topPage += userName ? '/' + userName : '';
            var aboutPage = topPage + '/about';
            location.href =  aboutPage;
            console.debug('::Let:: ' + 'topPage: ' + topPage);
            console.debug('::Let:: ' + 'aboutPage: ' + 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がいないはてブロは想定してない
            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