Hatena::Diary::Profile
by
noromanba
2012-02-07 [2012/02/07 07:43:30]
閲覧中のはてなダイアリー/はてなブログのダイアリープロフィールにジャンプする(はてなグループ対応)
@@ -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 です。