<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array">
    <added>
      <filename>ldr_all-in-one_hatena_extension.css</filename>
    </added>
    <added>
      <filename>ldr_all-in-one_hatena_extension_locale.json</filename>
    </added>
  </added>
  <modified type="array">
    <modified>
      <diff>@@ -4,15 +4,16 @@
 // @description    add various features with services provided by Hatena, to LDR / Fastladder
 // @include        http://reader.livedoor.com/reader/*
 // @include        http://fastladder.com/reader/*
-// @version        0.61
+// @version        0.62
 // @author         janus_wel&lt;janus.wel.3@gmail.com&gt;
 // @require        http://github.com/januswel/jslibrary/raw/master/HTMLTemplate.js
-// @resource       HATEBU_COMMENT_CSS  ldr_all-in-one_hatena_extension_hatebu_comment.css
+// @resource       LOCALE_JSON         ldr_all-in-one_hatena_extension_locale.json
+// @resource       CSS                 ldr_all-in-one_hatena_extension.css
 // @resource       HATEBU_COMMENT_TMPL ldr_all-in-one_hatena_extension_hatebu_comment.tmpl
 // ==/UserScript==
 
 /*
- * Last Change: 2009/01/11 18:07:35.
+ * Last Change: 2009/01/12 03:41:38.
  *
  * ACKNOWLEDGMENT
  * this script is based on:
@@ -23,54 +24,28 @@
  *  - ( http://michilu.com/blog/posts/123/ )
  *  - http://zeromemory.sblo.jp/article/1230111.html
  *  - http://d.hatena.ne.jp/aki77/20060601/1149184418
- */
+ * */
 
 ( function () {
 
+// settings ---
+// change below keybinds as you like
 const KEY_ADD_HATENA_STAR = 'S';
 const KEY_HATENA_BOOKMARK_COMMENT = 'C';
 const KEY_TOGGLE_COMMENT_FILTER = 'F';
-const LOCALE = (function getLocale() {
-    const LOCALE_ALL = [
-        {
-            name: 'livedoor Reader',
-            url:  '^http://reader\.livedoor\.com/reader/',
-            data: {
-                SUMOF_HATENA_BOOKMARK_DESC: '&#29694;&#22312;&#12398;&#12501;&#12451;&#12540;&#12489;&#12398;&#12399;&#12390;&#12394;&#12502;&#12483;&#12463;&#12510;&#12540;&#12463;&#12395;&#12362;&#12369;&#12427;&#34987;&#12502;&#12483;&#12463;&#12510;&#12540;&#12463;&#25968;&#21512;&#35336;',
-                NUMOF_HATENA_BOOKMARK_DESC: '&#29694;&#22312;&#12398;&#12450;&#12452;&#12486;&#12512;&#12398;&#12399;&#12390;&#12394;&#12502;&#12483;&#12463;&#12510;&#12540;&#12463;&#12395;&#12362;&#12369;&#12427;&#34987;&#12502;&#12483;&#12463;&#12510;&#12540;&#12463;&#25968;&#21512;&#35336;',
-                SUMOF_HATENA_STAR_DESC:     '&#29694;&#22312;&#12398;&#12501;&#12451;&#12540;&#12489;&#12398;&#12399;&#12390;&#12394;&#12473;&#12479;&#12540;&#25968;&#21512;&#35336;',
-                HATEBU_COMMENT_TITLE:       '&#12399;&#12390;&#12394;&#12502;&#12483;&#12463;&#12510;&#12540;&#12463;&#12467;&#12513;&#12531;&#12488;',
-                HATEBU_COMMENT_NODATA:      '&#12371;&#12398;&#35352;&#20107;&#12399;&#12414;&#12384;&#12502;&#12483;&#12463;&#12510;&#12540;&#12463;&#12373;&#12428;&#12390;&#12356;&#12414;&#12379;&#12435;&#12290;',
-                HATEBU_COMMENT_LOADING:     '&#12399;&#12390;&#12394;&#12502;&#12483;&#12463;&#12510;&#12540;&#12463;&#12363;&#12425;&#12525;&#12540;&#12489;&#20013;&#8230;',
-                HATEBU_COMMENT_COMPLETE:    '&#12525;&#12540;&#12489;&#23436;&#20102;&#12290;',
-            },
-        },
-        {
-            name: 'Fastladder',
-            url:  '^http://fastladder\.com/reader/',
-            data: {
-                SUMOF_HATENA_BOOKMARK_DESC: 'the sum of bookmarked on the feed by Hatena Bookmark',
-                NUMOF_HATENA_BOOKMARK_DESC: 'the number of bookmarked on the entry by Hatena Bookmark',
-                SUMOF_HATENA_STAR_DESC:     'the sum of Hatena Star on the feed',
-                HATEBU_COMMENT_TITLE:       'comments on Hatena Bookmark',
-                HATEBU_COMMENT_NODATA:      'This entry is not yet bookmarked.',
-                HATEBU_COMMENT_LOADING:     'Loading Hatena Bookmark comments...',
-                HATEBU_COMMENT_COMPLETE:    'Loading completed.',
-            },
-        },
-    ];
 
-    for (var i=0, l=LOCALE_ALL.length ; i&lt;l ; ++i) {
-        var locale = LOCALE_ALL[i]
-        if (locale.url.match(document.location.href)) return locale.data;
-    }
-    return null;
-})();
+// global constants ---
+const LOCALE = getLocale(document.location.href);
+
 
 // main ---
 window.addEventListener(
     'load',
     function () {
+        // add style
+        GM_addStyle(GM_getResourceText('CSS'));
+
+        // register features
         sumofHatenaBookmark();
         numofHatenaBookmark();
         sumofHatenaStar();
@@ -81,6 +56,7 @@ window.addEventListener(
     false
 );
 
+// feature definition ---
 // assumption
 const w = unsafeWindow || window;
 with (w) {
@@ -97,7 +73,7 @@ function sumofHatenaBookmark() {
             };
 
             return &lt;a href={hatenaBookmark.url}&gt;
-                &lt;img style=&quot;vertical-align:middle; border:none;&quot; src={hatenaBookmark.counter} /&gt;
+                &lt;img src={hatenaBookmark.counter} /&gt;
             &lt;/a&gt;;
         },
         LOCALE.SUMOF_HATENA_BOOKMARK_DESC
@@ -117,8 +93,8 @@ function numofHatenaBookmark() {
             };
 
             return &lt;a href={hatenaBookmark.url}&gt;
-                &lt;img src=&quot;http://d.hatena.ne.jp/images/b_entry.gif&quot; style=&quot;border:none;&quot; /&gt;
-                &lt;img style=&quot;border:none; margin-left:3px;&quot; src={hatenaBookmark.counter} /&gt;
+                &lt;img src=&quot;http://d.hatena.ne.jp/images/b_entry.gif&quot; /&gt;
+                &lt;img src={hatenaBookmark.counter} /&gt;
             &lt;/a&gt;;
         },
         LOCALE.NUMOF_HATENA_BOOKMARK_DESC
@@ -128,22 +104,13 @@ function numofHatenaBookmark() {
 
 // display the sum of &#12399;&#12390;&#12394;&#12473;&#12479;&#12540; on the feed
 function sumofHatenaStar() {
-    // at first, invisible
-    // refer: http://d.hatena.ne.jp/brazil/20060820/1156056851
-    GM_addStyle(&lt;&gt;&lt;![CDATA[
-        span.widget_sum_of_HatenaStar {
-            display:     none;
-            color:       #f4b128;
-            font-weight: bold;
-        }
-    ]]&gt;&lt;/&gt;);
-
     function _onload(r) {
         // nothing to do, if data is not exist
         if (r.status !== 200) return;
 
-        // use call to avoid below error
-        //  function eval must be called directly, and not by way of a function of another name
+        // use &quot;call&quot; to avoid below error
+        //      function eval must be called directly,
+        //      and not by way of a function of another name
         // refer: http://d.hatena.ne.jp/brazil/20060821/1156164845
         var s = eval.call(window, '(' + r.responseText + ')');
 
@@ -158,7 +125,7 @@ function sumofHatenaStar() {
             if (node) {
                 clearInterval(t);
                 node.textContent = s.star_count;
-                node.parentNode.style.display = 'inline';
+                return;
             }
             if (++count &gt;= TIMEOUT_COUNT) clearInterval(t);
         }, 100);
@@ -181,10 +148,10 @@ function sumofHatenaStar() {
                 });
             })();
 
-            return &lt;&gt;
-                &lt;img style=&quot;border:none;&quot; src=&quot;http://s.hatena.ne.jp/images/star.gif&quot; /&gt;
+            return &lt;a href=&quot;http://s.hatena.ne.jp/&quot;&gt;
+                &lt;img src=&quot;http://s.hatena.ne.jp/images/star.gif&quot; /&gt;
                 &lt;span id={hatenaStar.id}&gt;-&lt;/span&gt;
-            &lt;/&gt;;
+            &lt;/a&gt;;
         },
         LOCALE.SUMOF_HATENA_STAR_DESC
     );
@@ -225,9 +192,6 @@ function addHatenaStar() {
 */
 
 function displayHatenaBookmarkComment() {
-    // add style
-    GM_addStyle(GM_getResourceText('HATEBU_COMMENT_CSS'));
-
     // prepare HTML Template
     const ht = HTMLTemplateFactory(GM_getResourceText('HATEBU_COMMENT_TMPL'));
 
@@ -239,7 +203,7 @@ function displayHatenaBookmarkComment() {
             if (!item) return;
             var url = 'http://b.hatena.ne.jp/entry/json/' + item.link;
 
-            orderNakaNoHito('loading');
+            orderToNakaNoHito('loading');
             wrapSecurely(function () {
                 GM_xmlhttpRequest({
                     method: 'GET',
@@ -251,7 +215,7 @@ function displayHatenaBookmarkComment() {
     );
 
     // order naka-no-hito
-    function orderNakaNoHito(state) {
+    function orderToNakaNoHito(state) {
         switch (state) {
             case 'loading':
                 $('loadicon').src = '/img/icon/loading.gif';
@@ -267,19 +231,14 @@ function displayHatenaBookmarkComment() {
         }
     }
 
-    function _onload(response) {
-        var itemSelector = 'item_body_' + this.id;
-        var itemNode = $(itemSelector);
+    function _onload(r) {
+        var itemNode = $('item_body_' + this.id);
         if (!itemNode) return;
 
-        var bookmarksNode;
-        if (response.status !== 200) bookmarksNode = buildBookmarksNode(null);
-        else {
-            // use &quot;call&quot; to specify &quot;window&quot; ( cause by security, in &quot;unsafeWindow&quot; )
-            // if no bookmarks, r will be &quot;null&quot; ( Hatena return string &quot;(null)&quot; )
-            var r = eval.call(window, '(' + response.responseText + ')');
-            bookmarksNode = buildBookmarksNode(r);
-        }
+        // if no bookmarks, r will be &quot;null&quot; ( Hatena return string &quot;(null)&quot; )
+        var bookmarksNode = (r.status !== 200)
+            ? buildBookmarksNode(null)
+            : buildBookmarksNode(eval.call(window, '(' + r.responseText + ')'));
 
         // remove inserted elements previously
         var l = itemNode.lastChild;
@@ -287,12 +246,12 @@ function displayHatenaBookmarkComment() {
         // remove unnecessary breaks and spaces, and insert !!
         itemNode.innerHTML += bookmarksNode.toXMLString().replace(/\n\s+/g, '');
 
-        orderNakaNoHito('complete');
+        orderToNakaNoHito('complete');
     }
 
     // just pack data
-    function buildBookmarksNode(response) {
-        var noData = !response || !response.bookmarks || (response.bookmarks.length &lt;= 0);
+    function buildBookmarksNode(hatena) {
+        var noData = !hatena || !hatena.bookmarks || (hatena.bookmarks.length &lt;= 0);
         if (noData) return ht.output({
             title:         LOCALE.HATEBU_COMMENT_TITLE,
             noData:        noData,
@@ -300,8 +259,8 @@ function displayHatenaBookmarkComment() {
         });
 
         // summary of the entry
-        var bookmarks = response.bookmarks;
-        var numofAll = parseInt(response.count, 10);
+        var bookmarks = hatena.bookmarks;
+        var numofAll = parseInt(hatena.count, 10);
         var numofPublic = bookmarks.length;
         var numofPrivate = numofAll - numofPublic;
         var numofComment = numofPublic;
@@ -355,7 +314,7 @@ function displayHatenaBookmarkComment() {
             numofPublic:        numofPublic,
             numofPrivate:       numofPrivate,
             numofComment:       numofComment,
-            screenshotImageURL: response.screenshot,
+            screenshotImageURL: hatena.screenshot,
             bookmarkList:       bookmarkList,
         };
 
@@ -365,7 +324,7 @@ function displayHatenaBookmarkComment() {
 
     // comment filter
     availableCommentFilter() ? hideComment() : showComment();
-    GM_registerMenuCommand('toggle comment filter', toggleCommentFilter);
+    GM_registerMenuCommand('LDR all-in-one Hatena extension - toggle comment filter', toggleCommentFilter);
     Keybind.add(KEY_TOGGLE_COMMENT_FILTER, wrapSecurely(toggleCommentFilter));
 
     function showComment() { LDR_addStyle('li.hatebu_invisible', 'display: list-item;'); }
@@ -390,12 +349,25 @@ function wrapSecurely(f) {
     };
 }
 
+// for GM_xmlhttpRequest
 function bind(func, object) {
     return function () {
         return func.apply(object, arguments);
     }
 }
 
+// judge locale automatically
+function getLocale(url) {
+    const LOCALE_ALL = eval('(' + GM_getResourceText('LOCALE_JSON') + ')');
+
+    for (var i=0, l=LOCALE_ALL.length ; i&lt;l ; ++i) {
+        var locale = LOCALE_ALL[i]
+        if (locale.url.match(url)) return locale.data;
+    }
+
+    throw new Error('Locale data is not found this page: ' + url);
+}
+
 } )();
 
 // vim: sw=4 sts=4 ts=4 et</diff>
      <filename>ldr_all-in-one_hatena_extension.user.js</filename>
    </modified>
  </modified>
  <removed type="array">
    <removed>
      <filename>ldr_all-in-one_hatena_extension_hatebu_comment.css</filename>
    </removed>
  </removed>
  <parents type="array">
    <parent>
      <id>7270842a153f69e4eaa9e1eb19663c229818e16c</id>
    </parent>
  </parents>
  <author>
    <name>janus</name>
    <email>janus.wel.3@gmail.com</email>
  </author>
  <url>http://github.com/januswel/userscript/commit/8f5119cf2da067c60775b93997bd796d83718cd7</url>
  <id>8f5119cf2da067c60775b93997bd796d83718cd7</id>
  <committed-date>2009-01-11T11:09:02-08:00</committed-date>
  <authored-date>2009-01-11T11:09:02-08:00</authored-date>
  <message>refactoring
cut out all style data to external file.
change css file name.
cut out locale data to external file.
add some comments.
add &quot;a&quot; element to the feature that show sum of Hatena Stars.
change function name: orderNakaNoHito -&gt; orderToNakaNoHito.
add script name to GM menu command to toggle comment filter.</message>
  <tree>95a73e34474cd8d9975f0c50da11de608a6e0496</tree>
  <committer>
    <name>janus</name>
    <email>janus.wel.3@gmail.com</email>
  </committer>
</commit>
