您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
trello Card to Excel suppert custom fields
- // ==UserScript==
- // @name trello Card to Excel
- // @namespace http://www.hi-j.com/
- // @version 0.1.3
- // @description trello Card to Excel suppert custom fields
- // @author will
- // @match http*://*trello.com/b/*
- // @grant none
- // ==/UserScript==
- (function() {
- function Map(){
- this.container = new Object();
- }
- Map.prototype.put = function(key, value){
- this.container[key] = value;
- };
- Map.prototype.get = function(key){
- return this.container[key];
- };
- var tableToExcel = (function() {
- var uri = 'data:application/vnd.ms-excel;base64,',
- template = '<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns="http://www.w3.org/TR/REC-html40"><head><!--[if gte mso 9]><xml><x:ExcelWorkbook><x:ExcelWorksheets><x:ExcelWorksheet><x:Name>{worksheet}</x:Name><x:WorksheetOptions><x:DisplayGridlines/></x:WorksheetOptions></x:ExcelWorksheet></x:ExcelWorksheets></x:ExcelWorkbook></xml><![endif]--></head><body><table style="font-size:15px;" border="1">{table}</table></body></html>',
- base64 = function(s) {
- return window.btoa(unescape(encodeURIComponent(s)));
- },
- format = function(s, c) {
- return s.replace(/{(\w+)}/g,
- function(m, p) {
- return c[p];
- });
- };
- return function(table, name) {
- if (!table.nodeType) table = document.getElementById(table);
- var ctx = {
- worksheet: name || 'Worksheet',
- table: table.innerHTML
- };
- window.location.href = uri + base64(format(template, ctx));
- };
- })();
- var getPluginDataById = function(pluginData){
- var obj = null;
- if(pluginData.length > 0){
- //onsole.log(pluginData.length);
- $.each(pluginData,function(){
- if(this.idPlugin == '56d5e249a98895a9797bebb9'){ //判断是自定义字段的插件ID
- //onsole.log(this.value);
- eval('obj = '+this.value+';');
- return obj;
- }
- });
- }
- return obj;
- };
- var getPluginFields = function(data){
- var pluginFields = new Array();
- var tmp = getPluginDataById(data.pluginData);
- if(tmp){
- var fields = tmp.fields;
- $.each(fields,function(){
- pluginFields.push(this);
- });
- }
- return pluginFields;
- };
- // 获取{id,value} id == key , return value;
- var getPlauginVal = function(data,key){
- var ret = null;
- $.each(data,function(){
- if(this.id == key){
- ret = this.value;
- return ret;
- }
- });
- return ret;
- };
- var getListMap = function(data){
- var map = new Map();
- $.each(data.lists,function(){
- map.put(this.id,this.name);
- //onsole.log(this.id+":"+this.name);
- });
- return map;
- };
- var getMembersMap = function(data){
- var map = new Map();
- $.each(data.members,function(){
- map.put(this.id,this);
- });
- return map;
- };
- var init = function(){
- var test = $('<a class="board-header-btn board-header-btn-org-name board-header-btn-without-icon"><span class="board-header-btn-text" id="tableToExcel">导出Excel</span></a>');
- test.click(function(){
- $.getJSON(window.location.href+".json", function(data) {
- var members = getMembersMap(data);
- var pluginFields = getPluginFields(data);
- var table = document.createElement("table");
- // 标题开始
- tr = document.createElement("tr"); //tr start
- var tds = ['标题','状态','标签','成员','过期'];
- $.each(pluginFields,function(){
- tds.push(this.n);
- });
- $.each(tds,function(){
- td = document.createElement("td");
- td.style.backgroundColor = "red";
- td.innerHTML = this;
- tr.append(td);
- });
- table.append(tr); // tr end
- // 内容开始
- var listMap = getListMap(data);
- var tr,td,pluginData;
- $.each(data.cards,function(){
- if(this.name.indexOf('#') == -1){
- tr = document.createElement("tr"); // tr start
- // 标题
- td = document.createElement("td");
- td.innerHTML = this.name;
- tr.append(td);
- // 状态
- td = document.createElement("td");
- td.innerHTML = listMap.get(this.idList);
- tr.append(td);
- // 标签
- td = document.createElement("td");
- var str = "";
- if(this.labels.length > 0){
- $.each(this.labels,function(){
- str += this.name+",";
- });
- if(str.length > 0){
- str = str.substring(0,str.length-1);
- }
- }
- td.innerHTML = str;
- tr.append(td);
- // 成员
- td = document.createElement("td");
- str = "";
- if(this.idMembers.length > 0){
- $.each(this.idMembers,function(){
- str += members.get(this).fullName+",";
- });
- if(str.length > 0){
- str = str.substring(0,str.length-1);
- }
- }
- td.innerHTML = str;
- tr.append(td);
- // 过期
- td = document.createElement("td");
- td.innerHTML = this.due;
- tr.append(td);
- // 插件
- if(this.pluginData.length > 0){ // 判断没有插件的
- var pluginData = getPluginDataById(this.pluginData).fields;
- $.each(pluginFields,function(){
- td = document.createElement("td");
- if(this.t == '0'){
- td.innerHTML = pluginData[this.id] || '';
- }else if(this.t == '4'){
- td.innerHTML = getPlauginVal(this.o,pluginData[this.id]) || '';
- }else if(this.t == '3'){
- td.innerHTML = pluginData[this.id] || '';
- }else{
- console.log(this.t +"--"+ pluginData[this.id]);
- // todo
- }
- tr.append(td);
- });
- }
- table.append(tr); // tr end
- }
- });
- //onsole.log(table.innerHTML);
- tableToExcel(table);
- });
- });
- $('div.board-header').append(test);
- };
- setInterval(function(){
- if(!$('#tableToExcel').html()){
- init();
- }
- },1000);
- })();