trello Cart to Excel

trello Cart to Excel suppert custom fields

Versión del día 23/12/2016. Echa un vistazo a la versión más reciente.

Tendrás que instalar una extensión para tu navegador como Tampermonkey, Greasemonkey o Violentmonkey si quieres utilizar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Violentmonkey para instalar este script.

Necesitarás instalar una extensión como Tampermonkey o Userscripts para instalar este script.

Necesitará instalar una extensión como Tampermonkey para instalar este script.

Necesitarás instalar una extensión para administrar scripts de usuario si quieres instalar este script.

(Ya tengo un administrador de scripts de usuario, déjame instalarlo)

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión como Stylus para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

Necesitará instalar una extensión del gestor de estilos de usuario para instalar este estilo.

(Ya tengo un administrador de estilos de usuario, déjame instalarlo)

// ==UserScript==
// @name         trello Cart to Excel
// @namespace    http://www.hi-j.com/
// @version      0.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;
        //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 fields = getPluginDataById(data.pluginData).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);
})();