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&nbsp;<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&nbsp;<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>
-                      &nbsp;
-                    </py:otherwise>
-                  </py:choose>
-                </div>
-              </div>
+                    </div>
+                  </div>
+                </py:when>
+                <py:otherwise>
+                  &nbsp;
+                </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">&times;</button>
+              <span></span>
+            </div>
+            <div id="qct-inline-notice-error" class="alert alert-error hide">
+              <button type="button" class="close" 
data-dismiss="alert">&times;</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)


Reply via email to