Author: matevz
Date: Tue Jun 4 08:49:53 2013
New Revision: 1489338
URL: http://svn.apache.org/r1489338
Log:
#544 - Inline expansion for quick ticket overlay (initial implementation)
Modified:
bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css
bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/js/theme.js
bloodhound/trunk/bloodhound_theme/bhtheme/templates/bh_path_general.html
bloodhound/trunk/bloodhound_theme/bhtheme/templates/bh_ticket.html
bloodhound/trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html
bloodhound/trunk/bloodhound_theme/bhtheme/theme.py
Modified: bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css?rev=1489338&r1=1489337&r2=1489338&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css (original)
+++ bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/bloodhound.css Tue Jun 4
08:49:53 2013
@@ -321,6 +321,21 @@ pre {
padding: 3px;
}
+#qct-inline {
+ position: relative;
+ max-width: inherit;
+ box-shadow: none;
+ z-index: 0;
+ margin-top: 20px;
+}
+#qct-inline h4 {
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
+#qct-inline-alert-cancel {
+ display: inline;
+}
+
/* @end */
/* @group Generic rules */
Modified: bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/js/theme.js
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/js/theme.js?rev=1489338&r1=1489337&r2=1489338&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/js/theme.js (original)
+++ bloodhound/trunk/bloodhound_theme/bhtheme/htdocs/js/theme.js Tue Jun 4
08:49:53 2013
@@ -20,11 +20,50 @@
$( function () {
var qct_result = {};
var qct_timeout = null;
+ var grayed_out_controls = '#content, [role*="application"], #vc-summary,
#inplace-propertyform, #attachments, .activityfeed, #help';
+
// Do not close dropdown menu if user interacts with form controls
$('.dropdown-menu input, .dropdown-menu label, .dropdown-menu select' +
', .dropdown-menu textarea').click(function (e) { e.stopPropagation();
});
+ function qct_inline_close()
+ {
+ $(grayed_out_controls).css('opacity', '');
+ $('form:not("#qct-inline-form") :input').removeAttr('disabled');
+ if ($('#qct-inline').is(':visible'))
+ {
+ $('#qct-inline').hide({'duration': 400});
+ }
+ }
+
+ // If the window is resized, close the inline form + re-enable
+ // all other forms to prevent undesirable behaviour. For example,
+ // resizing the window to a -desktop size when inline form is
+ // shown would result in the form disappearing (ok), but all other
+ // forms would still be disabled (not ok).
+ $(window).resize(function() {
+ qct_inline_close();
+ });
+
+ $('#qct-inline-newticket').click(function() {
+ $('#qct-inline-notice-success, #qct-inline-notice-error').hide();
+
+ if ($('#qct-inline').is(':visible'))
+ {
+ qct_inline_close();
+ }
+ else
+ {
+ $(grayed_out_controls).css('opacity', '0.3');
+ $('form:not("#qct-inline-form") :input').attr('disabled', 'disabled');
+ $('#qct-inline').show({'duration': 400});
+ $('#inline-field-summary').focus();
+ }
+ });
+ $('#qct-inline-cancel, #qct-inline-alert-cancel').click(qct_inline_close);
+
+
// Install popover for create ticket shortcut
// Important: Further options specified in markup
$('#qct-newticket').popover({
@@ -39,6 +78,7 @@ $( function () {
},
content : function () { return qct_info.msg; }
});
+
$('body').on('click.close', '#qct-alert-close',
function (e) { qct_alert_close() });
@@ -58,6 +98,7 @@ $( function () {
// Clear input controls inside quick create box
function qct_clearui() {
$('#qct-form input, #qct-form select, #qct-form textarea').val('');
+ $('#qct-inline-form input, #qct-inline-form select, #qct-inline-form
textarea').val('');
}
// We want to submit via #qct-create
@@ -65,6 +106,10 @@ $( function () {
$('#qct-create').click();
e.preventDefault();
});
+ $('#qct-inline-form').submit(function(e) {
+ $('#qct-inline-create').click();
+ e.preventDefault();
+ });
// Install quick create box click handlers
$('#qct-cancel').click(
@@ -103,8 +148,36 @@ $( function () {
});
qct_clearui();
}
- )
+ );
+ $('#qct-inline-create').click(function() {
+ var base_url = $('#qct-inline-create').attr('data-target');
+ if (base_url === '/')
+ base_url = '';
+
+ $.post(base_url + '/qct', $('#qct-inline-form').serialize(),
+ function(ticket_id) {
+ var href = base_url + '/ticket/' + ticket_id;
+ var msg = 'Ticket #' + ticket_id + ' has been created. ';
+ msg += '<a href="' + href + '">View / Edit</a>';
+ $('#qct-inline-notice-success span').html(msg);
+ $('#qct-inline-notice-success').show({'duration': 400});
+ })
+ .error(function(jqXHR, textStatus, errorMsg) {
+ var msg;
+ if (textStatus === 'timeout')
+ msg = 'Request timed out';
+ else if (textStatus === 'error')
+ msg = 'Could not create ticket. Error : ' + errorMsg;
+ else if (textStatus === 'abort')
+ msg = 'Aborted request';
+
+ $('#qct-inline-notice-error span').html(msg);
+ $('#qct-inline-notice-error').show({'duration': 400});
+ });
+ qct_clearui();
+ qct_inline_close();
+ });
})
// Event handlers for sticky panels , if any
Modified:
bloodhound/trunk/bloodhound_theme/bhtheme/templates/bh_path_general.html
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_theme/bhtheme/templates/bh_path_general.html?rev=1489338&r1=1489337&r2=1489338&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_theme/bhtheme/templates/bh_path_general.html
(original)
+++ bloodhound/trunk/bloodhound_theme/bhtheme/templates/bh_path_general.html
Tue Jun 4 08:49:53 2013
@@ -54,7 +54,7 @@
</li>
<div class="btn-group" py:strip="single_product">
<button class="btn btn-mini" py:strip="single_product">
- <a title="Current product"
href="${href.products(req.perm.env.product.prefix)}">${req.perm.env.product.name}</a>
+ <a title="Current product"
href="${href.products(req.perm.env.product.prefix)}"><span
class="hidden-phone">${req.perm.env.product.name}</span><span
class="visible-phone">${req.perm.env.product.prefix}</span></a>
</button>
<py:if test="not single_product">
<button class="btn btn-mini dropdown-toggle" data-toggle="dropdown">
Modified: bloodhound/trunk/bloodhound_theme/bhtheme/templates/bh_ticket.html
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_theme/bhtheme/templates/bh_ticket.html?rev=1489338&r1=1489337&r2=1489338&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_theme/bhtheme/templates/bh_ticket.html
(original)
+++ bloodhound/trunk/bloodhound_theme/bhtheme/templates/bh_ticket.html Tue Jun
4 08:49:53 2013
@@ -64,8 +64,7 @@
<py:if test="has_property_editor">
// Install in place editing
install_workflow();
- $('#edit-cancel').click(revert_ticket);
- $('#edit-cancel-below').click(revert_ticket);
+ $('#edit-cancel, #edit-cancel-below').click(revert_ticket);
var modify_elem = $('#modify');
modify_elem.parent().hide();
@@ -122,20 +121,14 @@
$('#inplace-propertyform').submit(function() {
$('#hidden-comment').val($('#edit-comment').val());
})
- $('#inplace-edit').hide();
- $('#edit-state-buttons').show();
- $('#edit-state-buttons-below').show();
- $('#vc-status a').hide();
- $('#edit-workflow-buttons').show();
- $('#edit-comment').show();
-
- $('.activityfeed').css('opacity', '0.3');
- $('.relations').css('opacity', '0.3');
- $('#attachments').css('opacity', '0.3');
- $('#comment').attr('disabled', 'disabled');
- $('#comment-submit').attr('disabled', 'disabled');
- $('#manage-relations').attr('disabled', 'disabled');
- $('#attachfilebutton').attr('disabled', 'disabled');
+
+ $('#inplace-edit, #vc-status a').hide();
+ $('#edit-state-buttons, #edit-state-buttons-below,
#edit-workflow-buttons, #edit-comment').show();
+ $('.activityfeed, .relations, #attachments').css('opacity', '0.3');
+ // disable input controls on all other forms
+ $('form:not("#inplace-propertyform") :input').attr('disabled',
'disabled');
+
+ $('#qct-inline, #qct-inline-notice-success,
#qct-inline-notice-error').hide({'duration': 400});
}
function add_update_hidden_summary_fn() {
@@ -154,21 +147,12 @@
//remove summary field and re-add the summary blur function
$('#dummy-vc-summary div').remove();
add_update_hidden_summary_fn();
- $('#inplace-edit').show();
$('#vc-summary').attr('contenteditable', 'false');
- $('#edit-state-buttons').hide();
- $('#edit-state-buttons-below').hide();
- $('#vc-status a').show();
- $('#edit-workflow-buttons').hide();
- $('#edit-comment').hide();
-
- $('#comment').removeAttr('disabled');
- $('#comment-submit').removeAttr('disabled');
- $('#manage-relations').removeAttr('disabled');
- $('#attachfilebutton').removeAttr('disabled');
- $('.activityfeed').css('opacity', '');
- $('.relations').css('opacity', '');
- $('#attachments').css('opacity', '');
+
+ $('#inplace-edit, #vc-status a').show();
+ $('#edit-state-buttons, #edit-state-buttons-below,
#edit-workflow-buttons, #edit-comment').hide();
+ $('form:not("#inplace-propertyform") :input').removeAttr('disabled');
+ $('.activityfeed, .relations, #attachments').css('opacity', '');
e.preventDefault();
}
Modified:
bloodhound/trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html?rev=1489338&r1=1489337&r2=1489338&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html
(original)
+++ bloodhound/trunk/bloodhound_theme/bhtheme/templates/bloodhound_theme.html
Tue Jun 4 08:49:53 2013
@@ -87,160 +87,164 @@
</div>
</py:with>
</div>
- <div class="sticky-header">
- <!--! search + main nav -->
- <div class="row">
- <!--! search box -->
- <div class="span6">
- <div id="searchbox" class="btn-toolbar">
- <div class="btn-group">
- <form id="mainsearch" class="form-inline"
- action="${search_handler or href.search()}"
- method="get">
- <div class="input-append">
- <input type="text" class="span3" id="q" name="q"
- placeholder="Search all products. Try TracLinks."
- value="${req.search_query}" />
- <input py:for="name, value in extra_search_fields"
- type="hidden"
- name="$name"
- value="$value" />
- <button type="submit" class="btn btn-warning">
- <span class="hidden-phone hidden-tablet">Search</span>
- <i class="icon-search icon-white"></i>
- </button>
- </div>
- </form>
- </div>
- <!--! create ticket button + dropdown -->
- <div class="btn-group">
- <py:def function="field_select(field, value)">
- <select id="field-${field.name}" name="field_${field.name}"
- class="input-block-level" data-empty="true"
data-field="${field.name}">
- <option py:if="field.optional"></option>
- <option py:for="option in field.options"
- selected="${value == option or None}"
- value = "$option"
- py:content="option"></option>
- <optgroup py:for="optgroup in field.optgroups"
- py:if="optgroup.options"
- label="${optgroup.label}">
- <option py:for="option in optgroup.options"
- selected="${value == option or None}"
- value = "$option"
- py:content="option"></option>
- </optgroup>
- </select>
- </py:def>
-
- <py:choose test="">
- <py:when test="qct">
- <a href="#" class="btn btn-primary dropdown-toggle"
- id="qct-newticket" data-animation="true"
data-html="true"
- data-trigger="manual" data-toggle="dropdown">
- <span class="visible-phone"><i class="icon-plus-sign
icon-white"></i></span>
- <span class="hidden-phone">Create Ticket <span
class="caret"></span></span>
- </a>
- <div id="qct-box" class="dropdown-menu"
- py:choose="">
- <div class="popover-title">
- <h3>New Ticket</h3>
- </div>
- <div class="popover-content">
- <py:when test="'TICKET_CREATE' in perm">
- <form id="qct-form" name="qct" method="post">
- <div class="control-group">
- <label for="field-summary">Summary</label>
- <input type="text" id="field-summary"
class="input-block-level"
- name="field_summary" placeholder="Ticket
summary" />
- </div>
-
- <div class="control-group">
- <label
for="field-description">Description</label>
- <textarea id="field-description"
class="input-block-level"
- name="field_description" rows="3" cols="28"
- placeholder="Ticket
description"></textarea>
- </div>
-
- <div class="control-group">
- <py:for each="field in qct.fields">
- <label
for="field-${field.name}">${field.label}</label>
- ${field_select(field, None)}
- </py:for>
- </div>
- </form>
-
- <div class="controls">
- <button id="qct-create" class="btn btn-primary"
data-target="${href()}">Create</button>
- <a id="qct-cancel" class="btn btn-link"
href="${href.newticket()}">More fields</a>
- <button id="qct-cancel" class="btn
btn-link">Cancel</button>
+ <!--! search + main nav -->
+ <div class="row">
+ <!--! search box -->
+ <div class="span6">
+ <div id="searchbox" class="btn-toolbar">
+ <div class="btn-group">
+ <form id="mainsearch" class="form-inline"
+ action="${search_handler or href.search()}"
+ method="get">
+ <div class="input-append">
+ <input type="text" class="span3" id="q" name="q"
+ placeholder="Search all products. Try TracLinks."
+ value="${req.search_query}" />
+ <input py:for="name, value in extra_search_fields"
+ type="hidden"
+ name="$name"
+ value="$value" />
+ <button type="submit" class="btn btn-warning">
+ <span class="hidden-phone hidden-tablet">Search</span>
+ <i class="icon-search icon-white"></i>
+ </button>
+ </div>
+ </form>
+ </div>
+
+ <!--! create ticket button + dropdown -->
+ <py:def function="field_select(field, value)">
+ <select id="field-${field.name}" name="field_${field.name}"
+ class="input-block-level" data-empty="true"
data-field="${field.name}">
+ <option py:if="field.optional"></option>
+ <option py:for="option in field.options"
+ selected="${value == option or None}"
+ value = "$option"
+ py:content="option"></option>
+ <optgroup py:for="optgroup in field.optgroups"
+ py:if="optgroup.options"
+ label="${optgroup.label}">
+ <option py:for="option in optgroup.options"
+ selected="${value == option or None}"
+ value = "$option"
+ py:content="option"></option>
+ </optgroup>
+ </select>
+ </py:def>
+
+ <py:choose test="">
+ <py:when test="qct">
+ <div class="btn-group visible-phone pull-right">
+ <a href="#" class="btn btn-primary dropdown-toggle"
id="qct-inline-newticket">
+ <i class="icon-plus-sign icon-white"></i> <span
class="caret"></span>
+ </a>
+ </div>
+
+ <div class="btn-group hidden-phone">
+ <a href="#" class="btn btn-primary dropdown-toggle"
+ id="qct-newticket" data-animation="true"
data-html="true"
+ data-trigger="manual" data-toggle="dropdown">
+ <span>Create Ticket <span
class="caret"></span></span>
+ </a>
+ <div id="qct-box" class="dropdown-menu" py:choose="">
+ <div class="popover-title">
+ <h3>New Ticket</h3>
+ </div>
+ <div class="popover-content">
+ <py:when test="'TICKET_CREATE' in perm">
+ <form id="qct-form" name="qct" method="post">
+ <div class="control-group">
+ <label for="field-summary">Summary</label>
+ <input type="text" id="field-summary"
class="input-block-level"
+ name="field_summary" placeholder="Ticket
summary" />
+ </div>
+
+ <div class="control-group">
+ <label
for="field-description">Description</label>
+ <textarea id="field-description"
class="input-block-level"
+ name="field_description" rows="3" cols="28"
+ placeholder="Ticket description"></textarea>
</div>
- </py:when>
- <div py:otherwise="" class="alert alert-info">
- <p>
- <span class="label
label-important">TICKET_CREATE</span>
- privileges are required to perform this
operation.
- You don't have the required permissions
- <py:choose>
- <py:when test="req.authname == 'anonymous'">
- <br/><br/>
- <a href="${href.login()}" class="btn"
style="display: inline;">Login</a>
- </py:when>
- <py:otherwise>
- Please contact your administrator or team
leader to
- request these.
- </py:otherwise>
- </py:choose>
- </p>
+
+ <div class="control-group">
+ <py:for each="field in qct.fields">
+ <label
for="field-${field.name}">${field.label}</label>
+ ${field_select(field, None)}
+ </py:for>
+ </div>
+ </form>
+
+ <div class="controls">
+ <button id="qct-create" class="btn btn-primary"
data-target="${href()}">Create</button>
+ <a id="qct-more" class="btn btn-link"
href="${href.newticket()}">More fields</a>
+ <button id="qct-cancel" class="btn
btn-link">Cancel</button>
</div>
+ </py:when>
+ <div py:otherwise="" class="alert alert-info">
+ <p>
+ <span class="label
label-important">TICKET_CREATE</span>
+ privileges are required to perform this operation.
+ You don't have the required permissions
+ <py:choose>
+ <py:when test="req.authname == 'anonymous'">
+ <br/><br/>
+ <a href="${href.login()}" class="btn"
style="display: inline;">Login</a>
+ </py:when>
+ <py:otherwise>
+ Please contact your administrator or team
leader to
+ request these.
+ </py:otherwise>
+ </py:choose>
+ </p>
</div>
</div>
- </py:when>
- <py:otherwise>
-
- </py:otherwise>
- </py:choose>
- </div>
- </div>
+ </div>
+ </div>
+ </py:when>
+ <py:otherwise>
+
+ </py:otherwise>
+ </py:choose>
</div>
+ </div>
-
- <!--! main navigation tabs -->
- <div class="span6">
- <ul py:if="chrome.nav.mainnav or chrome.nav.metanav"
- class="nav nav-tabs pull-right"
- id="mainnav"
- py:with="mainnav_show = ('wiki', 'tickets', 'browser');
- mainnav_to_meta = ('admin',);
- metanav_hide = ('login', 'logout', 'prefs', 'help',
'about', 'register')">
- <!--! TODO: Parameterize visible mainnav items in trac.ini -->
- <li py:if="chrome.nav.mainnav"
- py:for="idx, item in enumerate(i for i in
chrome.nav.mainnav if i.name in mainnav_show)"
- class="${classes(first_last(idx, chrome.nav.mainnav),
active=item.active)}">${item.label}</li>
- <li class="dropdown ${all(not i.active for i in
chrome.nav.mainnav if i.name in mainnav_show) and 'active' or None}"
- py:if="len([i for i in chrome.nav.metanav if i.name not in
metanav_hide] +
- [i for i in chrome.nav.mainnav if i.name not in
mainnav_show + mainnav_to_meta])">
- <a class="dropdown-toggle" data-toggle="dropdown"
href="#">More<b class="caret"></b></a>
- <ul class="dropdown-menu">
- <li py:if="chrome.nav.mainnav"
- py:for="idx, item in enumerate(i for i in
chrome.nav.mainnav if i.name not in mainnav_show)"
- class="${classes(first_last(idx, chrome.nav.mainnav),
active=item.active)}">${item.label}</li>
- <py:if test="chrome.nav.metanav">
- <li py:if="len([i for i in chrome.nav.metanav if i.name
not in metanav_hide])"
- class="divider"></li>
- <li py:for="idx, item in enumerate(chrome.nav.metanav)"
- py:if="item.name not in metanav_hide"
- class="${classes(first_last(idx,
chrome.nav.metanav), active=item.active)}">
- ${item.label}
- </li>
- </py:if>
- </ul>
- </li>
- </ul>
- </div>
+ <!--! main navigation tabs -->
+ <div class="span6">
+ <ul py:if="chrome.nav.mainnav or chrome.nav.metanav"
+ class="nav nav-tabs pull-right"
+ id="mainnav"
+ py:with="mainnav_show = ('wiki', 'tickets', 'browser');
+ mainnav_to_meta = ('admin',);
+ metanav_hide = ('login', 'logout', 'prefs', 'help',
'about', 'register')">
+ <!--! TODO: Parameterize visible mainnav items in trac.ini -->
+ <li py:if="chrome.nav.mainnav"
+ py:for="idx, item in enumerate(i for i in chrome.nav.mainnav
if i.name in mainnav_show)"
+ class="${classes(first_last(idx, chrome.nav.mainnav),
active=item.active)}">${item.label}</li>
+ <li class="dropdown ${all(not i.active for i in
chrome.nav.mainnav if i.name in mainnav_show) and 'active' or None}"
+ py:if="len([i for i in chrome.nav.metanav if i.name not in
metanav_hide] +
+ [i for i in chrome.nav.mainnav if i.name not in
mainnav_show + mainnav_to_meta])">
+ <a class="dropdown-toggle" data-toggle="dropdown"
href="#">More<b class="caret"></b></a>
+ <ul class="dropdown-menu">
+ <li py:if="chrome.nav.mainnav"
+ py:for="idx, item in enumerate(i for i in
chrome.nav.mainnav if i.name not in mainnav_show)"
+ class="${classes(first_last(idx, chrome.nav.mainnav),
active=item.active)}">${item.label}</li>
+ <py:if test="chrome.nav.metanav">
+ <li py:if="len([i for i in chrome.nav.metanav if i.name
not in metanav_hide])"
+ class="divider"></li>
+ <li py:for="idx, item in enumerate(chrome.nav.metanav)"
+ py:if="item.name not in metanav_hide"
+ class="${classes(first_last(idx, chrome.nav.metanav),
active=item.active)}">
+ ${item.label}
+ </li>
+ </py:if>
+ </ul>
+ </li>
+ </ul>
</div>
+ </div>
+ <div class="sticky-header">
<div class="row" id="breadcrumb-row">
<!--! breadcrumb (TODO: which ones do we hide on the
phones/tablets?) -->
<div id="stickyStatus" class="span12">
@@ -284,6 +288,80 @@
</div>
</div>
</div>
+
+ <!--! quick create ticket, inline version for the phone layout -->
+ <div class="row visible-phone">
+ <div id="qct-inline" class="span12 hide popover">
+ <div class="popover-title">
+ <h4>New Ticket</h4>
+ </div>
+ <div class="popover-content">
+ <py:choose test="">
+ <py:when test="'TICKET_CREATE' in perm">
+ <form id="qct-inline-form" name="qct" method="post">
+ <div class="control-group">
+ <label for="inline-field-summary">Summary</label>
+ <input type="text" id="inline-field-summary"
class="input-block-level"
+ name="field_summary" placeholder="Ticket summary" />
+ </div>
+
+ <div class="control-group">
+ <label for="inline-field-description">Description</label>
+ <textarea id="inline-field-description"
class="input-block-level"
+ name="field_description" rows="3" cols="28"
+ placeholder="Ticket description"></textarea>
+ </div>
+
+ <div class="control-group">
+ <py:for each="field in qct.fields">
+ <label for="field-${field.name}">${field.label}</label>
+ ${field_select(field, None)}
+ </py:for>
+ </div>
+ </form>
+
+ <div class="controls">
+ <button id="qct-inline-create" class="btn btn-primary"
data-target="${href()}">Create</button>
+ <a id="qct-inline-more" class="btn btn-link"
href="${href.newticket()}">More fields</a>
+ <button id="qct-inline-cancel" class="btn
btn-link">Cancel</button>
+ </div>
+ </py:when>
+
+ <div py:otherwise="" class="alert alert-info">
+ <p>
+ <span class="label label-important">TICKET_CREATE</span>
+ privileges are required to perform this operation.
+ You don't have the required permissions
+ <py:choose>
+ <py:when test="req.authname == 'anonymous'">
+ <br/><br/>
+ <a href="${href.login()}" class="btn" style="display:
inline;">Login</a>
+ </py:when>
+ <py:otherwise>
+ Please contact your administrator or team leader to
+ request these.
+ </py:otherwise>
+ </py:choose>
+ <a id="qct-inline-alert-cancel" class="btn">Close</a>
+ </p>
+ </div>
+ </py:choose>
+ </div>
+ </div>
+ </div>
+
+ <div class="row">
+ <div class="span12">
+ <div id="qct-inline-notice-success" class="alert alert-success
hide fade in">
+ <button type="button" class="close"
data-dismiss="alert">×</button>
+ <span></span>
+ </div>
+ <div id="qct-inline-notice-error" class="alert alert-error hide">
+ <button type="button" class="close"
data-dismiss="alert">×</button>
+ <span></span>
+ </div>
+ </div>
+ </div>
</header>
<div class="stickyOffset" style="height: 0px;"></div>
Modified: bloodhound/trunk/bloodhound_theme/bhtheme/theme.py
URL:
http://svn.apache.org/viewvc/bloodhound/trunk/bloodhound_theme/bhtheme/theme.py?rev=1489338&r1=1489337&r2=1489338&view=diff
==============================================================================
--- bloodhound/trunk/bloodhound_theme/bhtheme/theme.py (original)
+++ bloodhound/trunk/bloodhound_theme/bhtheme/theme.py Tue Jun 4 08:49:53 2013
@@ -523,10 +523,7 @@ class QuickCreateTicketDialog(Component)
t['status'] = 'new'
t['resolution'] = ''
t.insert()
- # Call ticket change listeners
- ts = TicketSystem(self.env)
- for listener in ts.change_listeners:
- listener.ticket_created(t)
+
if notify:
try:
tn = TicketNotifyEmail(self.env)