Author: ahorincar
Date: Tue Aug 13 20:02:15 2013
New Revision: 1513631
URL: http://svn.apache.org/r1513631
Log:
Custom queries are now embeddable
Added:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_query.html
Modified:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/api.py
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/embedding.css
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_milestone_view.html
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_query.html
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=1513631&r1=1513630&r2=1513631&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
Tue Aug 13 20:02:15 2013
@@ -46,7 +46,7 @@ class EmbeddingSystem(Component):
def query(self, req, qstr='status!=closed'):
- q = query.ProductQuery.from_string(self.env, qstr)
+ q = Query.from_string(self.env, qstr)
ticket_realm = Resource('ticket')
out = []
for t in q.execute(req):
@@ -132,14 +132,18 @@ class EmbeddingSystem(Component):
'component_num': component_num}
return 'bh_emb_product.html', data, None
elif name == 'query':
- # Feature not yet finished
- qstring = req.query_string
- q = self.query(self.env, qstring)
+ qstr = req.query_string
- print "Query results:"
- print q
+ if qstr=='' or qstr=='?':
+ if req.authname and req.authname != 'anonymous':
+ qstr = 'status!=closed&owner=$USER'
+ else:
+ qstr = 'status!=closed'
- data = {}
+ tickets = self.query(req, qstr)
+
+ data={'tickets': tickets,
+ 'query': qstr}
return 'bh_emb_query.html', data, None
else:
msg = "It is not possible to embed this resource."
Modified:
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=1513631&r1=1513630&r2=1513631&view=diff
==============================================================================
---
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/embedding.css
(original)
+++
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/embedding.css
Tue Aug 13 20:02:15 2013
@@ -12,3 +12,13 @@
padding-left: 0px;
}
+
+#query-embed-content {
+ width: 300px;
+}
+
+#query-results {
+ height: 150px;
+ overflow: scroll;
+ overflow-x: hidden;
+}
Added:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_query.html
URL:
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_query.html?rev=1513631&view=auto
==============================================================================
---
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_query.html
(added)
+++
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_query.html
Tue Aug 13 20:02:15 2013
@@ -0,0 +1,50 @@
+ <!DOCTYPE html
+ PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:xi="http://www.w3.org/2001/XInclude"
+ xmlns:py="http://genshi.edgewall.org/"
+ 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"
/>
+ <link rel="stylesheet" href="${href.chrome('embedding/embedding.css')}"
type="text/css" />
+
+ <head>
+ <title>Query</title>
+ </head>
+
+ <body>
+ <div id="query-embed-content">
+ <h2>Query</h2>
+
+ <h5 class="properties">Query String</h5>
+ <p>add query string here</p>
+ <h5 class="properties">Query Results</h5>
+
+ <py:choose>
+ <py:when test="len(tickets)>5">
+ <div id="query-results">
+ <py:for each="ticket in tickets">
+ <p>
+ <a target="_blank" href="${href.ticket(ticket)}">Ticket
#${ticket}</a>
+ </p>
+ </py:for>
+ </div>
+ </py:when>
+
+ <py:otherwise>
+ <div>
+ <py:for each="ticket in tickets">
+ <p>
+ <a target="_blank" href="${href.ticket(ticket)}">Ticket
#${ticket}</a>
+ </p>
+ </py:for>
+ </div>
+ </py:otherwise>
+
+ <p>tickets: ${tickets}</p>
+
+ </py:choose>
+ </div>
+ </body>
+</html>
Modified:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_milestone_view.html
URL:
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_milestone_view.html?rev=1513631&r1=1513630&r2=1513631&view=diff
==============================================================================
---
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_milestone_view.html
(original)
+++
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_milestone_view.html
Tue Aug 13 20:02:15 2013
@@ -116,7 +116,7 @@
<h3 id="myModalLabel">Embed this Milestone</h3>
</div>
<div class="modal-body">
- <textarea id="embed-textarea" class="input-block-level" rows="3"
style="width:100%;min-width:100%;max-width:100%;">
+ <textarea id="embed-textarea" class="input-block-level" rows="4"
style="width:100%;min-width:100%;max-width:100%;">
</textarea>
</div>
<div class="modal-footer">
Modified:
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_query.html
URL:
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_query.html?rev=1513631&r1=1513630&r2=1513631&view=diff
==============================================================================
---
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_query.html
(original)
+++
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_query.html
Tue Aug 13 20:02:15 2013
@@ -101,10 +101,10 @@
<th colspan="${1 if field.type == 'time' else
2}"><label>or</label></th>
</py:otherwise>
</py:choose>
-
+
<td class="filter" colspan="${2 if field.type in
('radio', 'checkbox', 'time') else None}"
py:choose="">
-
+
<py:when test="field.type == 'select'">
<select name="${n_field_name}">
<option></option>
@@ -120,7 +120,7 @@
</optgroup>
</select>
</py:when>
-
+
<py:when test="field.type == 'radio'">
<py:for each="option in field.options">
<input type="checkbox"
id="_${n_field_name}_$option" name="${n_field_name}"
@@ -129,7 +129,7 @@
<label for="_${n_field_name}_$option"
class="control">${option or 'none'}</label>
</py:for>
</py:when>
-
+
<py:when test="field.type == 'checkbox'">
<input type="radio" id="_${n_field_name}_on"
name="$n_field_name" value="1"
checked="${constraint.mode != '!' or
constraint_value == '1' or None}" />
@@ -138,11 +138,11 @@
checked="${constraint.mode == '!' or
constraint_value != '1' or None}" />
<label for="_${n_field_name}_off"
class="control">no</label>
</py:when>
-
+
<py:when test="field.type in ('text', 'textarea',
'id')">
<input type="text" name="${n_field_name}"
value="$constraint_value" size="42" />
</py:when>
-
+
<py:when test="field.type == 'time'"
py:with="(start, end) = '..' in
constraint_value and constraint_value.split('..', 1)
or
(constraint_value, '')">
@@ -156,7 +156,7 @@
</td>
</tr>
</tbody>
-
+
<tbody py:with="last_clause = clause_num ==
(len(clauses) or 1) - 1">
<tr class="actions">
<td class="and" colspan="2">
@@ -234,7 +234,7 @@
<input type="text" name="max" id="max" size="10"
value="${query.max}"
class="input-mini" />
</label>
-
+
<!--! Allow the user to decide what rows to include in the output
of the query -->
<label>Show under each result:
<py:for each="column in all_textareas">
@@ -243,7 +243,7 @@
${fields.get(column, {'label': column or
'none'}).label}</label>
</py:for>
</label>
-
+
</div>
</div>
@@ -251,7 +251,7 @@
<input py:if="report_resource" type="hidden" name="report"
value="$report_resource.id" />
<input type="hidden" name="order" value="$query.order" />
<input py:if="query.desc" type="hidden" name="desc" value="1" />
- <input type="submit" name="update" value="${_('Update')}"
+ <input type="submit" name="update" value="${_('Update')}"
class="btn" />
</div>
<hr />
@@ -266,6 +266,7 @@
</div>
</div>
+
<div class="buttons span12"
py:with="edit = report_resource and 'REPORT_MODIFY' in
perm(report_resource);
new = 'REPORT_CREATE' in perm;
@@ -287,6 +288,55 @@
else _('Create new report from current query')}" />
</div>
</form>
+
+
+ <!-- Embedding plugin -->
+ <a id="embed-btn" href="#embed-modal" role="button" class="btn"
data-toggle="modal">Embed Results</a>
+
+ <script language="JavaScript" type="text/javascript">
+ function make_iframe(src) {
+ iframe = document.createElement("iframe");
+ var root = get_root();
+ $(iframe).attr("src", root + src);
+ $(iframe).attr("width", "470");
+ $(iframe).attr("height", "480");
+ $(iframe).attr("frameborder", "0");
+ $(iframe).attr("scrolling", "no");
+ return $(iframe).get(0).outerHTML;
+ }
+
+ $('#embed-btn').click(function() {
+
$('#embed-textarea').val(make_iframe(prepare_embed_url('$query_href')));
+ });
+
+ function get_root() {
+ var root = window.location.protocol + '//' + window.location.host;
+ return root
+ }
+
+ function prepare_embed_url(url) {
+ var url_array = url.split('/');
+ var embed_url = '${href.embed()}';
+ return embed_url + '/' + url_array[url_array.length-1];
+ }
+ </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 Query Results</h3>
+ </div>
+ <div class="modal-body">
+ <textarea id="embed-textarea" rows="5" 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>
+
<form py:if="delete" method="get" action="${url_of(report_resource)}"
style="display: inline-block">
<input type="hidden" name="action" value="delete" />
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=1513631&r1=1513630&r2=1513631&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
Tue Aug 13 20:02:15 2013
@@ -396,7 +396,7 @@
<h3 id="myModalLabel">Embed this Ticket</h3>
</div>
<div class="modal-body">
- <textarea id="embed-textarea" rows="3" class="input-block-level"
style="width:100%;min-width:100%;max-width:100%;">
+ <textarea id="embed-textarea" rows="4" class="input-block-level"
style="width:100%;min-width:100%;max-width:100%;">
</textarea>
</div>
<div class="modal-footer">