| <!DOCTYPE html> |
| <html> |
| <head> |
| <style> |
| body { |
| font-family: Verdana, sans-serif; |
| margin: 0px; |
| padding: 0px; |
| } |
| #bubbleContainer { |
| display: inline-block; |
| white-space: nowrap; |
| } |
| .status { |
| display: block; |
| float: left; |
| margin: 1px; |
| padding: 1px 2px; |
| -moz-border-radius: 5px; |
| -webkit-border-radius: 5px; |
| border-radius: 5px; |
| border: 1px solid #AAA; |
| background-color: white; |
| font-size: 11px; |
| cursor: pointer; |
| } |
| .none { |
| cursor: auto; |
| } |
| .pass { |
| background-color: #8FDF5F; |
| border: 1px solid #4F8530; |
| } |
| .fail { |
| background-color: #E98080; |
| border: 1px solid #A77272; |
| } |
| .pending { |
| background-color: #FFFC6C; |
| border: 1px solid #C5C56D; |
| } |
| .error { |
| background-color: #E0B0FF; |
| border: 1px solid #ACA0B3; |
| } |
| .queue_position { |
| font-size: 9px; |
| } |
| </style> |
| <script> |
| function statusDetail(patch_id) { |
| top.location = "/patch/" + patch_id |
| } |
| window.addEventListener("message", function(e) { |
| if (e.data == 'containerMetrics') { |
| e.source.postMessage({'width': bubbleContainer.offsetWidth, 'height': bubbleContainer.offsetHeight}, |
| e.origin); |
| } else |
| console.log("Unknown postMessage: " + e.data); |
| }, false); |
| </script> |
| </head> |
| <body> |
| <div id="bubbleContainer"> |
| {% for bubble in bubbles %} |
| <div class="status {{ bubble.state }}"{% if bubble.status %} |
| onclick="statusDetail({{ bubble.attachment_id }})" |
| title="{{ bubble.status.date|timesince }} ago"{% endif %}> |
| {{ bubble.name }} |
| {% if bubble.queue_position %} |
| <span class="queue_position">#{{ bubble.queue_position }}</span> |
| {% endif %} |
| </div> |
| {% endfor %} |
| </div> |
| </body> |
| </html> |