Author: ahorincar
Date: Fri Aug 9 00:02:55 2013
New Revision: 1512107
URL: http://svn.apache.org/r1512107
Log:
Added bootstrap modal to bh_ticket and modified the templates in bhembedding
Added:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/embedding.css
Modified:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/api.py
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_milestone.html
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_product.html
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_ticket.html
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/setup.py
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_ticket.html
Modified:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/api.py
URL:
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/api.py?rev=1512107&r1=1512106&r2=1512107&view=diff
==============================================================================
---
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/api.py
(original)
+++
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/api.py
Fri Aug 9 00:02:55 2013
@@ -1,5 +1,6 @@
import re
import pkg_resources
+from datetime import datetime, date, time
from trac.core import *
from trac.web.chrome import ITemplateProvider
@@ -61,22 +62,22 @@ class EmbeddingSystem(Component):
# IRequestHandler methods
def match_request(self, req):
- if re.match(r'/api/ticket/([0-9]+)$', req.path_info):
- match = re.match(r'/api/(ticket)/([0-9]+)$', req.path_info)
+ if re.match(r'/embed/ticket/([0-9]+)$', req.path_info):
+ match = re.match(r'/embed/(ticket)/([0-9]+)$', req.path_info)
req.args['name'] = match.group(1)
req.args['id'] = match.group(2)
return True
- elif re.match(r'/api/milestone/(.+)$', req.path_info):
- match = re.match(r'/api/(milestone)/(.+)$', req.path_info)
+ elif re.match(r'/embed/milestone/(.+)$', req.path_info):
+ match = re.match(r'/embed/(milestone)/(.+)$', req.path_info)
req.args['name'] = match.group(1)
req.args['id'] = match.group(2)
return True
- elif re.match(r'/api/products/(.+)$', req.path_info):
- match = re.match(r'/api/(products)/(.+)$', req.path_info)
+ elif re.match(r'/embed/products/(.+)$', req.path_info):
+ match = re.match(r'/embed/(products)/(.+)$', req.path_info)
req.args['name'] = match.group(1)
req.args['id'] = match.group(2)
return True
- elif req.path_info == '/api/query':
+ elif req.path_info == '/embed/query':
req.args['name'] = 'query'
return True
@@ -95,7 +96,11 @@ class EmbeddingSystem(Component):
if log[2] == 'comment' and log[4]:
comm_num += 1
+ # print "LAST LOG"
+ # print last_log
ticket = Ticket(self.env, id)
+ changetime = ticket['changetime']
+ c_time = changetime.strftime("%H:%M:%S, %Y-%m-%d ")
data = {'ticket': ticket,
'comm_num': comm_num,
@@ -166,4 +171,5 @@ class EmbeddingSystem(Component):
return [resource_filename('bhembedding', 'templates')]
def get_htdocs_dirs(self):
- return []
+ resource_filename = pkg_resources.resource_filename
+ return [('embedding', resource_filename('bhembedding', 'htdocs'))]
Added:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/embedding.css
URL:
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/embedding.css?rev=1512107&view=auto
==============================================================================
---
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/embedding.css
(added)
+++
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/embedding.css
Fri Aug 9 00:02:55 2013
@@ -0,0 +1,14 @@
+.properties {
+ color: rgb(120, 120, 120);
+ width: 35%;
+}
+
+.table th, .table td {
+ border-top: none;
+ }
+
+.table th {
+ width: 250px;
+ padding-left: 0px;
+}
+
Modified:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_milestone.html
URL:
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_milestone.html?rev=1512107&r1=1512106&r2=1512107&view=diff
==============================================================================
---
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_milestone.html
(original)
+++
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_milestone.html
Fri Aug 9 00:02:55 2013
@@ -34,7 +34,5 @@
<p><strong>Product:</strong> ${product.name}</p>
<p><strong>Number of tickets:</strong> ${ticket_number}</p>
<p><strong>Attachments:</strong> ${attachment_number}</p>
-
- <a class='btn' href="${href.milestone(milestone.name)}">Back to milestone
${milestone.name}</a>
</body>
</html>
Modified:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_product.html
URL:
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_product.html?rev=1512107&r1=1512106&r2=1512107&view=diff
==============================================================================
---
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_product.html
(original)
+++
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_product.html
Fri Aug 9 00:02:55 2013
@@ -27,7 +27,5 @@
<p><strong>Number of milestones:</strong> ${milestone_num}</p>
<p><strong>Number of versions:</strong> ${version_num}</p>
<p><strong>Number of components:</strong> ${component_num}</p>
-
- <a class='btn' href="${href.products(product.prefix)}">Back to product
${product.name}</a>
</body>
</html>
Modified:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_ticket.html
URL:
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_ticket.html?rev=1512107&r1=1512106&r2=1512107&view=diff
==============================================================================
---
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_ticket.html
(original)
+++
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_ticket.html
Fri Aug 9 00:02:55 2013
@@ -7,60 +7,101 @@
xmlns:i18n="http://genshi.edgewall.org/i18n">
<link rel="stylesheet"
href="${href.chrome('dashboard/css/bootstrap.css')}" type="text/css" />
<link rel="stylesheet"
href="${href.chrome('dashboard/css/bootstrap-responsive.css')}" type="text/css"
/>
- <!-- <xi:include href="layout.html" /> -->
-
+ <link rel="stylesheet" href="${href.chrome('embedding/embedding.css')}"
type="text/css" />
<head>
<title>Ticket ${ticket.id}</title>
</head>
<body>
- <div class="span4">
+ <div>
<h2>${ticket.summary}</h2>
- <p>
- <a href="${href.ticket(ticket.id)}">Ticket ${ticket.id}</a>
- - Assigned to
- <a href="${href.query(owner=ticket.owner, status='!closed',
- ticket=ticket.id, order='priority')}">${ticket.owner}</a>
- , last modified ${pretty_dateinfo(ticket.changetime)}
- </p>
- <p><strong>Reporter:</strong> ${ticket.reporter}</p>
- <py:choose>
- <p py:when="ticket.keywords">
- <strong>Keywords:</strong> ${ticket.keywords}</p>
- </py:choose>
- <p><strong>Type:</strong> ${ticket.type}</p>
- <p><strong>Status:</strong> ${ticket.status}</p>
- <py:choose>
- <p py:when="ticket.priority">
- <strong>Priority:</strong> ${ticket.priority}</p>
- </py:choose>
- <p><strong>Product:</strong> ${ticket.product}</p>
- <py:choose>
- <p py:when="ticket.milestone">
- <strong>Milestone:</strong> ${ticket.milestone}</p>
- </py:choose>
- <py:choose>
- <p py:when="ticket.milestone">
- <strong>Component:</strong> ${ticket.component}</p>
- </py:choose>
- <py:choose>
- <p py:when="ticket.milestone">
- <strong>Version:</strong> ${ticket.version}</p>
- </py:choose>
- <py:choose>
- <p py:when="ticket.severity">
- <strong>Severity:</strong> ${ticket.severity}</p>
- </py:choose>
- <py:choose>
- <p py:when="comm_num">
- <strong>Number of comments:</strong> $comm_num</p>
- </py:choose>
- <py:choose>
- <p py:when="attachment_num">
- <strong>Number of attachments:</strong> ${attachment_num}</p>
- </py:choose>
- <a class='btn' href="${href.ticket(ticket.id)}">Back to Ticket
${ticket.id}</a>
+ <h4><a target="_blank" href="${href.ticket(ticket.id)}">Ticket
#${ticket.id}</a></h4>
+ <h5>Assigned to
+ <a target="_blank" href="${href.query(owner=ticket.owner,
status='!closed',
+ ticket=ticket.id, order='priority')}">${ticket.owner}</a>
+ , last modified
+<!-- <a target="_blank" href="${href('timeline', {'from':
ticket.changetime})}">
+ ${ticket.changetime}</a> -->
+ ${pretty_dateinfo(ticket.changetime)}
+ </h5>
+
+ <table class="table table-condensed ticket-properties">
+ <tr>
+ <th class="properties">Reporter</th>
+ <td><a target="_blank" href="${href.query(reporter=ticket.reporter,
status='!closed',
+ ticket=ticket.id,
order='priority')}">${ticket.reporter}</a></td>
+ </tr>
+ <py:choose>
+ <tr py:when="ticket.keywords">
+ <th class="properties">Keywords</th>
+ <td><a target="_blank"
href="${href.query(keywords=ticket.keywords, status='!closed',
+ ticket=ticket.id,
order='priority')}">${ticket.keywords}</a></td>
+ </tr>
+ </py:choose>
+ <tr>
+ <th class="properties">Type</th>
+ <td><a target="_blank" href="${href.query(type=ticket.type,
status='!closed',
+ ticket=ticket.id, order='priority')}">${ticket.type}</a></td>
+ </tr>
+ <tr>
+ <th class="properties">Status</th>
+ <td><a target="_blank" href="${href.query(status=ticket.status,
+ ticket=ticket.id, order='priority')}">${ticket.status}</a></td>
+ </tr>
+ <py:choose>
+ <tr py:when="ticket.priority">
+ <th class="properties">Priority</th>
+ <td><a target="_blank"
href="${href.query(priority=ticket.priority, status='!closed',
+ ticket=ticket.id,
order='priority')}">${ticket.priority}</a></td>
+ </tr>
+ </py:choose>
+ <tr>
+ <th class="properties">Product</th>
+ <td><a target="_blank" href="${href.query(product=ticket.product,
status='!closed',
+ ticket=ticket.id,
order='priority')}">${ticket.product}</a></td>
+ </tr>
+ <py:choose>
+ <tr py:when="ticket.milestone">
+ <th class="properties">Milestone</th>
+ <td><a target="_blank"
href="${href.query(milestone=ticket.milestone, status='!closed',
+ ticket=ticket.id,
order='priority')}">${ticket.milestone}</a></td>
+ </tr>
+ </py:choose>
+ <py:choose>
+ <tr py:when="ticket.component">
+ <th class="properties">Component</th>
+ <td><a target="_blank"
href="${href.query(component=ticket.component, status='!closed',
+ ticket=ticket.id,
order='priority')}">${ticket.component}</a></td>
+ </tr>
+ </py:choose>
+ <py:choose>
+ <tr py:when="ticket.version">
+ <th class="properties">Version</th>
+ <td><a target="_blank" href="${href.query(version=ticket.version,
status='!closed',
+ ticket=ticket.id,
order='priority')}">${ticket.version}</a></td>
+ </tr>
+ </py:choose>
+ <py:choose>
+ <tr py:when="ticket.severity">
+ <th class="properties">Severity</th>
+ <td><a target="_blank"
href="${href.query(severity=ticket.severity, status='!closed',
+ ticket=ticket.id,
order='priority')}">${ticket.severity}</a></td>
+ </tr>
+ </py:choose>
+ <py:choose>
+ <tr py:when="comm_num">
+ <th class="properties">Number of comments</th>
+ <td><a target="_blank"
href="${href.ticket(ticket.id)}">${comm_num}</a></td>
+ </tr>
+ </py:choose>
+ <py:choose>
+ <tr py:when="attachment_num">
+ <th class="properties">Number of attachments</th>
+ <td><a target="_blank" href="${href.attachment('ticket',
ticket.id)}">${attachment_num}</a></td>
+ </tr>
+ </py:choose>
+ </table>
</div>
</body>
</html>
Modified:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/setup.py
URL:
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/setup.py?rev=1512107&r1=1512106&r2=1512107&view=diff
==============================================================================
---
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/setup.py
(original)
+++
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/setup.py
Fri Aug 9 00:02:55 2013
@@ -9,7 +9,7 @@ setup(
license = "Apache License v2",
url = "http://bloodhound.apache.org/",
packages = ['bhembedding', 'bhembedding.tests',],
- package_data = {'bhembedding' : ['templates/*.html',]},
+ package_data = {'bhembedding' : ['templates/*.html', 'htdocs/*.css',]},
entry_points = {'trac.plugins': [
'bhembedding.api = bhembedding.api',
],},
Modified:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_ticket.html
URL:
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_ticket.html?rev=1512107&r1=1512106&r2=1512107&view=diff
==============================================================================
---
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_ticket.html
(original)
+++
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_ticket.html
Fri Aug 9 00:02:55 2013
@@ -351,9 +351,10 @@
<span>${_('Modify Ticket')}</span>
</button>
- <!-- Embedding plugin -->
- <a href='#' class="btn" id="embed-btn">Embed ticket</a>
+
+ <!-- Embedding plugin -->
+ <a id="embed-btn" href="#embed-modal" role="button" class="btn"
data-toggle="modal">Embed Ticket</a>
<script language="JavaScript" type="text/javascript">
function make_iframe(src) {
@@ -361,16 +362,33 @@
$(iframe).attr("src", src);
$(iframe).attr("width", "640");
$(iframe).attr("height", "480");
+ $(iframe).attr("frameborder", "0");
return $(iframe).get(0).outerHTML;
}
$('#embed-btn').click(function() {
- alert(make_iframe('${href.api("ticket", ticket.id)}'));
-
- return false;
+ $('#embed-textarea').val(make_iframe('${href.embed("ticket",
ticket.id)}'));
});
</script>
+
+ <!-- Embedding Modal -->
+ <div id="embed-modal" class="modal hide fade" tabindex="-1"
role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+ <div class="modal-header">
+ <button type="button" class="close" data-dismiss="modal"
aria-hidden="true">Ã</button>
+ <h3 id="myModalLabel">Embed this Ticket</h3>
+ </div>
+ <div class="modal-body">
+ <textarea id="embed-textarea" class="input-block-level"
style="width:100%;min-width:100%;max-width:100%;">
+ </textarea>
+ </div>
+ <div class="modal-footer">
+ <button class="btn" data-dismiss="modal"
aria-hidden="true">Close</button>
+ </div>
+ </div>
+
+
+
<span id="edit-state-buttons" class="btn-toolbar" style="display:
None">
<button id="edit-submit" class="btn" type="submit"
value="Submit changes" name="submit">