-
-
Save alexpes/b2e6356e510304feda9a19fbb0fe4f34 to your computer and use it in GitHub Desktop.
A Trello Dashboard integrating Trello API with javascript
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!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