Greasy Fork 支持简体中文。

Trello - Thenow Trello Extend

Extend trello.com

// Generated by CoffeeScript 1.12.2

/*
// ==UserScript==
// @name              Trello - Thenow Trello Extend
// @namespace         http://ejiasoft.com/
// @version           1.1.7
// @description       Extend trello.com
// @description:zh-CN 扩展trello.com看板的功能
// @homepageurl       https://github.com/thenow/ThenowTrelloExtend
// @author            thenow
// @run-at            document-end
// @license           MIT license
// @match             http*://*trello.com
// @match             http*://*trello.com/*
// @grant             none
// ==/UserScript==
 */

(function() {
  var addBgBtn, addBoardBtn, addImgSwitchBtn, addMemberToggleBtn, boardId, boardInit, btnClass, btnTextClass, cardLabelCss, curUrl, listCardFormat, listFormatInit, listTitleFormat, listToggle, pageRegex;

  pageRegex = {
    CardLimit: /\[\d+\]/,
    Category: /\{.+\}/g,
    User: /`\S+`/g,
    CardCount: /^\d+/,
    Number: /\d+/,
    CardNum: /^#\d+/,
    HomePage: /com[\/]$/,
    BoardId: /\/b\/.{8}\/-$/
  };

  curUrl = window.location.href;

  boardId = pageRegex.BoardId.exec(curUrl);

  cardLabelCss = "<style type=\"text/css\">\n    .card-short-id {\n        display: inline;\n        font-weight: bold;\n    }\n    .card-short-id:after {\n        content:\" \";\n    }\n    .column-list{padding:5px 15px 10px;}\n    .column-list li{height:30px;width:100%;display:block;}\n    .column-list li a{display:block;height:100%;line-height:30px;position:relative;}\n    .column-list li a:before{font-family: trellicons;content:\"\\e910\";display:block;position:absolute;right:5px;top:2px;color:#333;}\n    .column-list li a.false:before{content:\"-\";color:#DDD;}\n    .card-label.mod-card-front {\n        width: auto;\n        height: 12px;\n        line-height: 12px;\n        font-size: 12px;\n        text-shadow: none;\n        padding: 3px 6px;\n        font-family: Microsoft Yahei;\n        font-weight: 400;\n    }\n    .list-card-title .card-short-id {\n        display: inline;\n        margin-right: 4px;\n        color: #0079bf;\n    }\n    .list .list-header-num-cards {\n        display: block;\n        font-size: 12px;\n        line-height: 18px;\n    }\n</style>";

  listCardFormat = function(objCard) {
    var listCardTitle;
    return listCardTitle = objCard.find('div.list-card-details>a.list-card-title').each(function() {
      var cardCate, cardCategoryArray, cardTitle, cardUser, cardUserArray, curCardTitle, i, j, len, len1, results;
      curCardTitle = $(this);
      cardTitle = curCardTitle.html();
      cardUserArray = cardTitle.match(pageRegex.User);
      cardCategoryArray = cardTitle.match(pageRegex.Category);
      if (cardUserArray !== null) {
        for (i = 0, len = cardUserArray.length; i < len; i++) {
          cardUser = cardUserArray[i];
          cardTitle = cardTitle.replace(cardUser, "<code>" + (cardUser.substring(1, cardUser.length - 1)) + "</code>");
          curCardTitle.html(cardTitle);
        }
      }
      if (cardCategoryArray !== null) {
        results = [];
        for (j = 0, len1 = cardCategoryArray.length; j < len1; j++) {
          cardCate = cardCategoryArray[j];
          cardTitle = cardTitle.replace(cardCate, "<code style=\"color:#0f9598\">" + (cardCate.substring(1, cardCate.length - 1)) + "</code>");
          results.push(curCardTitle.html(cardTitle));
        }
        return results;
      }
    });
  };

  listTitleFormat = function(objList) {
    var cardCount, cardLimit, cardLimitInfo, curCardCountP, curListHeader, curListTitle;
    curListHeader = objList.find('div.list-header');
    curListTitle = curListHeader.find('textarea.list-header-name').val();
    cardLimitInfo = pageRegex.CardLimit.exec(curListTitle);
    if (cardLimitInfo === null) {
      return false;
    }
    curCardCountP = curListHeader.find('p.list-header-num-cards');
    cardCount = pageRegex.CardCount.exec(curCardCountP.text())[0];
    cardLimit = pageRegex.Number.exec(cardLimitInfo[0])[0];
    if (cardCount > cardLimit) {
      return objList.css('background', '#903');
    } else if (cardCount === cardLimit) {
      return objList.css('background', '#c93');
    } else {
      return objList.css('background', '#e2e4e6');
    }
  };

  listToggle = function(objList) {
    var listMenu, toggleBtn;
    if (objList.find('.toggleBtn').length > 0) {
      return;
    }
    listMenu = objList.find('div.list-header-extras');
    toggleBtn = $('<a class="toggleBtn list-header-extras-menu dark-hover"><span class="icon-sm">隐</span></a>');
    toggleBtn.click(function() {
      var base;
      base = objList.parent();
      if (base.width() === 30) {
        base.css('width', '');
      } else {
        base.width(30);
      }
      objList.find('.js-open-list-menu').toggle();
      objList.find('div.list-cards').toggle();
      return objList.find('.open-card-composer').toggle();
    });
    return listMenu.append(toggleBtn);
  };

  listFormatInit = function() {
    return $('div.list').each(function() {
      listTitleFormat($(this));
      listToggle($(this));
      return $(this).find('div.list-card').each(function() {
        return listCardFormat($(this));
      });
    });
  };

  btnClass = 'board-header-btn board-header-btn-org-name board-header-btn-without-icon';

  btnTextClass = 'board-header-btn-text';

  addBoardBtn = function(id, text, eventAction, eventName) {
    var newBtn;
    if (eventName == null) {
      eventName = 'click';
    }
    if ($("#" + id).length > 0) {
      return $("#" + id);
    }
    newBtn = $("<a id=\"" + id + "\" class=\"" + btnClass + "\"><span class=\"" + btnTextClass + "\">" + text + "</span></a>");
    $('div.board-header').append(newBtn);
    if (eventAction !== null) {
      newBtn.bind(eventName, eventAction);
    }
    return newBtn;
  };

  addImgSwitchBtn = function() {
    return addBoardBtn('btnImgSwitch', '隐藏/显示图片', function() {
      return $('div.list-card-cover').slideToggle();
    });
  };

  addBgBtn = function() {
    return addBoardBtn('setBgBtn', '设置背景图片', function() {
      var newBgUrl, oldBgUrl;
      oldBgUrl = localStorage[boardId[0]];
      newBgUrl = prompt('请输入背景图片地址', oldBgUrl);
      if (newBgUrl === oldBgUrl) {
        return;
      }
      if (newBgUrl === null || newBgUrl === '') {
        localStorage.removeItem(boardId[0]);
        $('body').css('background-image', '');
        return;
      }
      return localStorage[boardId[0]] = newBgUrl;
    });
  };

  addMemberToggleBtn = function() {
    return addBoardBtn('memberSwitchBtn', '隐藏/显示成员', function() {
      return $('div.list-card-members').slideToggle();
    });
  };

  boardInit = function() {
    var bgUrl, localBgUrl;
    if (pageRegex.HomePage.exec(curUrl) !== null) {
      return;
    }
    bgUrl = $('body').css('background-image');
    localBgUrl = localStorage[boardId[0]];
    if (localBgUrl !== void 0 && bgUrl !== localBgUrl) {
      $('body').css('background-image', "url(\"" + localBgUrl + "\")");
    }
    $('p.list-header-num-cards').show();
    listFormatInit();
    addImgSwitchBtn();
    addBgBtn();
    return addMemberToggleBtn();
  };

  $(function() {
    $('head').append(cardLabelCss);
    return setInterval((function() {
      curUrl = window.location.href;
      boardId = pageRegex.BoardId.exec(curUrl);
      return boardInit();
    }), 1000);
  });

}).call(this);