trello Cart to Excel

trello Cart to Excel suppert custom fields

À partir de 2016-12-23. Voir la dernière version.

Vous devrez installer une extension telle que Tampermonkey, Greasemonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Violentmonkey pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey ou Userscripts pour installer ce script.

Vous devrez installer une extension telle que Tampermonkey pour installer ce script.

Vous devrez installer une extension de gestionnaire de script utilisateur pour installer ce script.

(J'ai déjà un gestionnaire de scripts utilisateur, laissez-moi l'installer !)

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension telle que Stylus pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

Vous devrez installer une extension du gestionnaire de style pour utilisateur pour installer ce style.

(J'ai déjà un gestionnaire de style utilisateur, laissez-moi l'installer!)

// ==UserScript==
// @name         trello Cart to Excel
// @namespace    http://www.hi-j.com/
// @version      0.1.1
// @description  trello Cart 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
                    console.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 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 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);
                        // 插件
                        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{
                                    // todo
                                }
                                tr.append(td);
                            });
                        }
                        table.append(tr); // tr end
                    }
                });
                console.log(table.innerHTML);
                tableToExcel(table);
            });
        });
        $('div.board-header').append(test);
    };
    setInterval(function(){
        if(!$('#tableToExcel').html()){
            init();
        }
    },1000);
})();