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">