GitHub: How many thumbs-up?

  • /*
     * @title          GitHub: How many thumbs-up?
     * @description    Counts :+1: etc. in issue threads
     * @version        1.0
     * @include        https://github.com/*
     * @license        CC0
     */
    
    // Inspired by
    // +1 badge · Issue #11 · azu/azu
    // https://github.com/azu/azu/issues/11
    
    (function(){
      if(!/^\/[^\/]+?\/[^\/]+\/(?:issues|pulls)\/\d+\/?$/.test(location.pathname))
        return;
    
      var thumb = false;
    
      var sum = Array.prototype.reduce.call(
        document.querySelectorAll('.discussion-timeline .js-comment-container:not(:first-of-type) img[alt]'),
        function(sum, node){
          var change = 0;
          switch(node.alt){
          case ':+1:':
          case ':thumbsup:':
            change = 1;
            break;
          case ':-1:':
          case ':thumbsdown:':
            change = -1;
            break;
          }
    
          if(change) thumb = true;
          return sum + change;
        }, 0);
    
      sum += Array.prototype.reduce.call(
        document.querySelectorAll('.discussion-timeline .js-comment-container:not(:first-of-type) .comment-body p'),
        function(sum, node){
          var change = 0;
          node.textContent.replace(/[+-]1/, function(str){
            thumb = true;
            change += parseInt(str);
          });
          return sum + change;
        }, 0);
    
      if(thumb){
        var firstComment = document.querySelector('.discussion-timeline .js-comment-container:first-of-type');
        var label = document.createElement('span');
        label.classList.add('timeline-comment-label');
        label.textContent = (sum >= 0 ? '+' : '') + sum;
        var header = firstComment.querySelector('.timeline-comment-header');
        header.insertBefore(label, header.querySelector('.timeline-comment-label + *'));
      }
    })();
    
  • Permalink
    このページへの個別リンクです。
    RAW
    書かれたコードへの直接のリンクです。
    Packed
    文字列が圧縮された書かれたコードへのリンクです。
    Userscript
    Greasemonkey 等で利用する場合の .user.js へのリンクです。
    Loader
    @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
    Metadata
    コード中にコメントで @xxx と書かれたメタデータの JSON です。

History

  1. 2014/07/19 17:49:16 - 2014-07-19
  2. 2014/07/17 23:48:30 - 2014-07-17