Depois de ter algumas idéias mirabolantes, que acabei deixando de lado, resolvi brincar um pouquinho com javascript e fazer um mini protótipo de um “Kanban Board”, sem usar nenhuma imagem, onde as tarefas fossem parecidas com aqueles alertas tipo “buble”, bom, o protótipo ficou beem feinho, mas deu pra tirar uma febre do meu CSS.
Para a parte Javascript usei o Jquery, a idéia básica é o seguinte:
Tenho 3 divs que representam 3 estados que qualquer tarefa pode estar: Backlog, Work In Progress e Done
Estas tem que estar uma ao lado da outra.
Dentro destas, quero ter blocos representando cada tarefa, e preciso conseguir mover estas tarefas entre os estados, para isto o JQuery facilita bastante a nossa vida, adicionei o jquery ui, e tudo o que eu precisei fazer foi o seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js"></script>
<script>
$(document).ready(function(){
$("#backlog,#wip,#done").sortable({
connectWith: '.connectedSortable',
receive: function(event, ui) {
/*alert($(ui.item).attr('data-id') + ' -> ' + $(this).attr('id'));*/
//Do something with the recently dropped item here
}
}).disableSelection();
});
</script> |
Onde #backlog, #wip e #done são os IDs das divs principais …
Para posicionar estas divs coloquei elas dentro de um container de ID bublecontainers, e usei o seguinte CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #bublecontainers { background-color: gray; width: 600px; margin: 0 0 0 0; padding: 0 0 0 0; } #backlog, #wip, #done { width: 190px; margin-left: 5px; height: 340px; display: inline-block; float:left; border: solid 1px; } |
E agora a parte importante, para fazer as tarefas parecerem bolhas, usei a seguinte estrutura HTML:
1 2 3 4 5 6 | <div class="buble"> <div class="buble-content"> Texto da task aqui </div> <div class="buble-arrow"></div> </div> |
E me aproveitei de como as bordas do HTML são montadas via CSS, para transformar isto em uma bolha, só precisei do CSS abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | .buble-content { width: 100%; top: 0; margin: 0 0 0 0; padding: 8px 8px 8px 8px; text-align:justify; overflow: hidden; border-radius:10px; -moz-border-radius:10px; -webkit-border-radius:10px; background-color:#FFF; border-style: outset; text-indent: 10px; } .buble { display:inline-block; width:90%; } .buble-arrow { border-color:#FFF transparent transparent transparent; border-style:solid; border-width:17px; margin: -4 0 0 0; height:0; width:0; position: relative; left: 30%; } |
As bordas arredondadas só vão aparecer em browsers mais modernos que tenham algum suporte a CSS3 rounded corners.
O experimento até que foi divertido, mas o código tem diversas falhas ainda, serviu para brincar um pouco
E o resultado vocês podem ver nesta coisa horrenda aqui de baixo
(deem uma folga, fiz isto em 20 minutos ais ou menos só pra brincar e ver se a minha idéia era viável
)
Se quiserem o código completo, segue abaixo:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | <html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.2/jquery-ui.min.js"></script>
<style>
#bublecontainers {
background-color: gray;
width: 600px;
margin: 0 0 0 0;
padding: 0 0 0 0;
}
.buble-content {
width: 100%;
top: 0;
margin: 0 0 0 0;
padding: 8px 8px 8px 8px;
text-align:justify;
overflow: hidden;
border-radius:10px;
-moz-border-radius:10px;
-webkit-border-radius:10px;
background-color:#FFF;
border-style: outset;
text-indent: 10px;
}
.buble
{
display:inline-block;
width:90%;
}
.buble-arrow
{
border-color:#FFF transparent transparent transparent;
border-style:solid;
border-width:17px;
margin: -4 0 0 0;
height:0;
width:0;
position: relative;
left: 30%;
}
#backlog, #wip, #done {
width: 190px;
margin-left: 5px;
height: 340px;
display: inline-block;
float:left;
border: solid 1px;
}
#bltitle, #wiptitle, #donetitle {
height: 15px;
text-align: center;
width: 190px;
display: inline-block;
font-size: 20;
font-height: bold;
}
</style>
<script>
$(document).ready(function(){
$("#backlog,#wip,#done").sortable({
connectWith: '.connectedSortable',
receive: function(event, ui) {
/*alert($(ui.item).attr('data-id') + ' -> ' + $(this).attr('id'));*/
//Do something with the recently dropped item here
}
}).disableSelection();
});
</script>
</head>
<body>
<div id="bublecontainers">
<div id="bltitle">Back Log</div>
<div id="wiptitle">Work In Progress</div>
<div id="donetitle">Done</div>
<div id="backlog" class="connectedSortable">
<div class="buble" data-id="buble1">
<div class="buble-content">
Create a virtual Kanban Board
</div>
<div class="buble-arrow"></div>
</div>
<div class="buble" data-id="buble2">
<div class="buble-content">
Make this VKB usable
</div>
<div class="buble-arrow"></div>
</div>
<div class="buble" data-id="buble2">
<div class="buble-content">
write a blog post about it
</div>
<div class="buble-arrow"></div>
</div>
<div class="buble" data-id="buble2">
<div class="buble-content">
make it using no images, just CSS
</div>
<div class="buble-arrow"></div>
</div>
</div>
<div id="wip" class="connectedSortable">
</div>
<div id="done" class="connectedSortable">
</div>
<div style="clear:both"></div>
</div>
</body>
</html> |
Tags: javascript, kanban, teste
Fala Uruba.
Toda a brincadeira com CSS + JS é legal e tal, mas se quiser um esquema profissional, paga 20 doletas e compra o Jira e o plugin Greenhoper da Atlassian.
Fica um Scrum Board igual ao do seu exemplo. De longe a melhor ferramenta web pra gerencimento de projetos (scrum ou não) que eu já usei.
Abraço,
Franklin
[Translate]
Olá Uburatan,
Bacana, gostei dos bubbles. Fiz um kanban board também com jQuery, mas com um backend em sinatra, com estados dinâmicos e validação. O legal que com jQuery da pra capturar os eventos e transmitir ações ao backend de maneira muito fácil. No exemplo que fiz, existe um workflow (ainda nao é dinamico), faço uma validação no backend (via ajax/json) e caso não passe pela validação eu anulo o movimento. Ah! E também se a tarefa esta com impedimento ela não pode ser movida até que o impedimento seja resolvido
Parece que vou ter que publicar meu kanban board já que você abriu concorrência
Abs!
[Translate]