Edgewall Software

TimeTracking: CustomFields0.11Rev7651.patch

File CustomFields0.11Rev7651.patch, 4.9 KB (added by FelixCollins, 6 years ago)

Integer Custom ticket fields patch for Genshi

  • trac/htdocs/js/trac.js

     
    7272    return $(elem).parents(tagName).get(0);
    7373  }
    7474
    75 })(jQuery);
    76  No newline at end of file
     75})(jQuery);
     76
     77//Functions for the processing of special custom fields
     78
     79//Add the contents of newfield to oldfield
     80function accumulateInt(oldfield,newfield)
     81{
     82  if (checkInt(newfield.value))
     83  {
     84    if (checkInt(oldfield.defaultValue))
     85    {
     86      oldfield.value = parseInt(oldfield.defaultValue, 10) + parseInt(newfield.value, 10);
     87    }
     88    else
     89    {
     90      oldfield.value = newfield.value;
     91    }
     92    newfield.value = "0";
     93  }
     94  else
     95  {
     96    newfield.value = newfield.defaultValue;
     97    oldfield.value = oldfield.defaultValue;
     98  }
     99}
     100
     101//Check whether the string can be parsed into an integer
     102function checkInt(text)
     103{
     104  var result = true;
     105  if (isBlank(text))
     106  {
     107    result = false;
     108  }
     109  for(var i=0;i<text.length;i++)
     110  {
     111    if(!isDigit(text.charAt(i)))
     112    {
     113      result = false;
     114    }
     115  }
     116
     117  return result;
     118}
     119
     120function isDigit(num)
     121{
     122  if (num.length>1)
     123  {
     124    return false;
     125  }
     126  var string="-1234567890";
     127  if (string.indexOf(num)!=-1)
     128  {
     129    return true;
     130  }
     131  return false;
     132}
     133
     134function isBlank(val)
     135{
     136  if(val==null)
     137  {
     138    return true;
     139  }
     140  for(var i=0;i<val.length;i++)
     141  {
     142    if ((val.charAt(i)!=' ')&&(val.charAt(i)!="\t")&&(val.charAt(i)!="\n")&&(val.charAt(i)!="\r"))
     143    {
     144      return false;
     145    }
     146  }
     147return true;
     148}
     149 No newline at end of file
  • trac/ticket/templates/ticket.html

     
    337337                    </label>
    338338                    <py:otherwise><!--! Text input fields -->
    339339                      <py:choose>
    340                         <span py:when="field.cc_entry"><!--! Special case for Cc: field -->
     340                         <!--! Special case for Cc: field -->
     341                        <span py:when="field.cc_entry">
    341342                          <em>${field.cc_entry}</em>
    342343                          <input type="checkbox" id="field-cc" name="cc_update"
    343344                            title="This checkbox allows you to add or remove yourself from the CC list."
     
    349350                            title="Space or comma delimited email addresses and usernames are accepted."
    350351                            name="field_${field.name}" value="${ticket[field.name]}" />
    351352                        </span>
     353                        <!--! Integer Field -->
     354                        <span py:when="field.type == 'integer'">
     355                          <input  type="text" id="field-${field.name}"
     356                            title="Integer data only"
     357                            name="field_${field.name}" value="${ticket[field.name]}"
     358                             onchange="javascript:if (!checkInt(this.value)){this.value = this.defaultValue;};" />
     359                        </span>
     360                        <!--! Cumulative Integer Field -->
     361                        <span py:when="field.type == 'cumulative_integer'">
     362                          <input  type="text" id="field-${field.name}" readonly="true"
     363                            title="Add the value in the right hand box to the total. Integer data only"
     364                            name="field_${field.name}" value="${ticket[field.name]}"/>
     365                             
     366                          <input  type="text" id="field-${field.name}-acc"
     367                            title="Add the value in the this box to the total on the left. Integer data only"
     368                            name="field_${field.name}_acc" value="0"
     369                             onchange="javascript:accumulateInt(document.getElementById('field-${field.name}'),this);" />
     370                        </span>
     371                        <!--! WriteOnce Integer Field -->
     372                        <span py:when="field.type == 'set_once_integer'">
     373                             <py:if test="ticket.exists">       
     374                                 <input  type="text" id="field-${field.name}" readonly="true"
     375                                    title="Integer data only"
     376                                    name="field_${field.name}" value="${ticket[field.name]}"/>
     377                            </py:if>
     378                             <py:if test="not ticket.exists">   
     379                                 <input  type="text" id="field-${field.name}"
     380                                    title="This value can only be edited on New tickets. Integer data only"
     381                                    name="field_${field.name}" value="${ticket[field.name]}"
     382                                     onchange="javascript:if (!checkInt(this.value)){this.value = this.defaultValue;};" />
     383                            </py:if>
     384                        </span>
    352385                        <!--! All the other text input fields -->
    353386                        <input py:otherwise="" type="text" id="field-${field.name}"
    354387                          name="field_${field.name}" value="${ticket[field.name]}" />