Skip to content

Instantly share code, notes, and snippets.

@alexpes
Last active May 31, 2016 13:39
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save alexpes/b2e6356e510304feda9a19fbb0fe4f34 to your computer and use it in GitHub Desktop.
Save alexpes/b2e6356e510304feda9a19fbb0fe4f34 to your computer and use it in GitHub Desktop.
A Trello Dashboard integrating Trello API with javascript
<!DOCTYPE html>
<html lang="it">
<title>A Trello Dashboard</title>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1.0, maximum-scale=1.0" />
<link rel="apple-touch-icon" sizes="57x57" href="/trello/apple-icon-57x57.png">
<link rel="apple-touch-icon" sizes="60x60" href="/trello/apple-icon-60x60.png">
<link rel="apple-touch-icon" sizes="72x72" href="/trello/apple-icon-72x72.png">
<link rel="apple-touch-icon" sizes="76x76" href="/trello/apple-icon-76x76.png">
<link rel="apple-touch-icon" sizes="114x114" href="/trello/apple-icon-114x114.png">
<link rel="apple-touch-icon" sizes="120x120" href="/trello/apple-icon-120x120.png">
<link rel="apple-touch-icon" sizes="144x144" href="/trello/apple-icon-144x144.png">
<link rel="apple-touch-icon" sizes="152x152" href="/trello/apple-icon-152x152.png">
<link rel="apple-touch-icon" sizes="180x180" href="/trello/apple-icon-180x180.png">
<link rel="icon" type="image/png" sizes="192x192" href="/trello/android-icon-192x192.png">
<link rel="icon" type="image/png" sizes="32x32" href="/trello/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="96x96" href="/trello/favicon-96x96.png">
<link rel="icon" type="image/png" sizes="16x16" href="/trello/favicon-16x16.png">
<link rel="manifest" href="/trello/manifest.json">
<meta name="msapplication-TileColor" content="#ffffff">
<meta name="msapplication-TileImage" content="/trello/ms-icon-144x144.png">
<meta name="theme-color" content="#ffffff">
<!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" integrity="sha384-fLW2N01lMqjakBkx3l/M9EahuwpSfeNvV63J5ezn3uZzapT0u7EYsXMjQV+0En5r" crossorigin="anonymous">
<style>
body {background-color: #EEE; margin-top:15px;}
h2 {font-size: 16px; margin: 5px 12px; color: #666; }
#results {margin:0 10px;}
ul {list-style-type: none; padding:0; margin-bottom:20px;}
li {padding: 5px 10px; border: 1px solid #CCC; margin-bottom:5px; border-radius: 4px; background-color: white}
li a { margin: 0px; display: block; width: 100%; height: 100%; color: black;}
a, a:hover {text-decoration: none}
div.card_stickers {text-align: center;}
img.sticker {height: 50px; margin-top: -5px;}
.board_name {font-size:90%; color: #999;}
.list_name {font-size:90%; color: #999;}
.card_name {font-size:120%; color: black; display: block}
.card_label {float:right; margin:1px; width:30px; height:10px; border-radius: 5px;}
</style>
</head>
<body>
<!-- <h1>Trello Dashboard</h1> -->
<div id="results"></div>
</body>
<script src="http://code.jquery.com/jquery-1.11.3.min.js" type="text/javascript"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>
<script src="https://api.trello.com/1/client.js?key=<!-- REPLACE AppKey WITH YOUR APPLICATION KEY -->"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/locale/it.js"></script>
<script type="text/javascript">
var researches = [{
'searchText': 'is:open list:focus',
'label': 'Focus'
}, {
'searchText': 'is:open due:overdue',
'label': 'Scadute'
}, {
'searchText': 'is:open due:2',
'label': 'In scadenza tra 2 giorni'
}, {
'searchText': 'is:open @me is:starred',
'label': 'Board preferite, assegnate a @me'
}];
var loadedCards = function(cards, divId) {
var cardsContent = '';
if (cards.cards.length > 0) {
$.each(cards.cards, function(index, value) {
console.log(value);
var cardContent = '<li>';
if (value.stickers.length > 0) {
cardContent = cardContent + '<div class="card_stickers">';
$.each(value.stickers, function(label_index, sticker) {
cardContent = cardContent + '<img class="sticker" src="' + sticker.imageUrl + '"/>';
});
cardContent = cardContent + '</div>';
}
cardContent = cardContent + '<a href="' + value.url + '"><span class="board_name">' + value.board.name + '</span> - <span class="list_name">' + value.list.name + '</span>';
if (value.labels.length > 0) {
$.each(value.labels, function(label_index, label) {
cardContent = cardContent + '<span class="card_label" style="background-color:' + label.color + '"></span>';
});
}
cardContent = cardContent + '<span class="card_name">' + value.name + '</span>';
if (value.due !== null) {
var label_class = 'label-default';
if (moment(value.due) < moment().endOf('day').add(1, 'day')) {
var label_class = 'label-warning';
}
if (moment(value.due) < moment().endOf('day')) {
var label_class = 'label-danger';
}
cardContent = cardContent + '<span class="label ' + label_class + ' card_due">' + moment(value.due, "YYYYMMDDHHmm").fromNow() + '</span>';
}
cardContent = cardContent + '</a></li>';
cardsContent = cardsContent + cardContent;
});
$('div#' + divId).append($('<ul>').append(cardsContent));
}
};
var searchCards = function() {
$.each(researches, function(index, value) {
var divId = 'div_' + index;
$('#results').append($('<h2>').attr('id', 'h2_'+index).append(value.label));
$('#results').append($('<div>').attr('id', divId));
Trello.get(
"/search",
{"query": value.searchText, "card_board": true, "card_list": true, 'card_stickers': true, 'card_members': true, 'cards_limit': 50},
function(cards) {
$("#h2_" + index).append(' (' + cards.cards.length + ')');
loadedCards(cards, divId);
},
function() { console.log("Failed to load seach results"); }
);
});
};
Trello.authorize({
type: "redirect",
name: "Trello dashboard",
scope: {read: true, write: false},
expiration: "never",
success: searchCards,
error: function() { console.log("Failed authentication"); }
});
</script>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment