Changeset 4361

Show
Ignore:
Timestamp:
09/30/08 16:37:08 (2 months ago)
Author:
hoessler
Message:

port to trac 0.11

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • estimationtoolsplugin/trunk/estimationtools/hoursinplaceeditor.py

    r4332 r4361  
    2020 
    2121    def process_request(self, req): 
    22         req.hdf['edithours.field'] = self.estimation_field 
    23          
    24         return 'edithours.cs', 'text/javascript'  
     22        data = {} 
     23        data['field'] = self.estimation_field  
     24        return 'edithours.html', {'data': data}, 'text/javascript'  
    2525 
    2626    # IRequestFilter methods 
     
    2828        return handler 
    2929             
    30     def post_process_request(self, req, template, content_type): 
     30    def post_process_request(self, req, template, data, content_type): 
    3131        if (req.path_info.startswith('/query') 
    3232            and req.perm.has_permission('TICKET_MODIFY')  
    3333            and req.perm.has_permission('XML_RPC')): 
    34             add_script(req, 'estimationtools/jquery-1.2.3.min.js') 
     34            # add_script(req, 'estimationtools/jquery-1.2.3.min.js') 
    3535            add_script(req, 'estimationtools/jquery.jeditable.mini.js') 
    36             idx = 0 
    37             while True: 
    38                 js = req.hdf.get('chrome.scripts.%i.href'%idx) 
    39                 if not js: 
    40                     break 
    41                 idx += 1 
    42             req.hdf['chrome.scripts.%i' % idx] = { 
    43                 'href': req.href.estimationtools('edithours.js'),  
    44                 'type': 'text/javascript', 
    45             } 
    46         return template, content_type 
     36            add_script(req, '/estimationtools/edithours.js') 
     37        return template, data, content_type 
    4738 
    4839    # ITemplateProvider methods 
  • estimationtoolsplugin/trunk/estimationtools/htdocs/jquery.jeditable.mini.js

    r4332 r4361  
    11 
    22(function($){$.fn.editable=function(target,options){var settings={target:target,name:'value',id:'id',type:'text',width:'auto',height:'auto',event:'click',onblur:'cancel',loadtype:'GET',loadtext:'Loading...',placeholder:'Click to edit',loaddata:{},submitdata:{}};if(options){$.extend(settings,options);} 
    3 var plugin=$.editable.types[settings.type].plugin||function(){};var submit=$.editable.types[settings.type].submit||function(){};var buttons=$.editable.types[settings.type].buttons||$.editable.types['defaults'].buttons;var content=$.editable.types[settings.type].content||$.editable.types['defaults'].content;var element=$.editable.types[settings.type].element||$.editable.types['defaults'].element;var callback=settings.callback||function(){};if(!$.isFunction($(this)[settings.event])){$.fn[settings.event]=function(fn){return fn?this.bind(settings.event,fn):this.trigger(settings.event);}} 
    4 $(this).attr('title',settings.tooltip);settings.autowidth='auto'==settings.width;settings.autoheight='auto'==settings.height;return this.each(function(){if(!$.trim($(this).html())){$(this).html(settings.placeholder);} 
    5 $(this)[settings.event](function(e){var self=this;if(self.editing){return;} 
    6 $(self).css("visibility","hidden");if(settings.width!='none'){settings.width=settings.autowidth?$(self).width():settings.width;} 
    7 if(settings.height!='none'){settings.height=settings.autoheight?$(self).height():settings.height;} 
    8 $(this).css("visibility","");if($(this).html().toLowerCase().replace(/;/,'')==settings.placeholder.toLowerCase().replace(/;/,'')){$(this).html('');} 
     3var plugin=$.editable.types[settings.type].plugin||function(){};var submit=$.editable.types[settings.type].submit||function(){};var buttons=$.editable.types[settings.type].buttons||$.editable.types['defaults'].buttons;var content=$.editable.types[settings.type].content||$.editable.types['defaults'].content;var element=$.editable.types[settings.type].element||$.editable.types['defaults'].element;var reset=$.editable.types[settings.type].reset||$.editable.types['defaults'].reset;var callback=settings.callback||function(){};if(!$.isFunction($(this)[settings.event])){$.fn[settings.event]=function(fn){return fn?this.bind(settings.event,fn):this.trigger(settings.event);}} 
     4$(this).attr('title',settings.tooltip);settings.autowidth='auto'==settings.width;settings.autoheight='auto'==settings.height;return this.each(function(){var self=this;var savedwidth=$(self).width();var savedheight=$(self).height();if(!$.trim($(this).html())){$(this).html(settings.placeholder);} 
     5$(this)[settings.event](function(e){if(self.editing){return;} 
     6if(0==$(self).width()){settings.width=savedwidth;settings.height=savedheight;}else{if(settings.width!='none'){settings.width=settings.autowidth?$(self).width():settings.width;} 
     7if(settings.height!='none'){settings.height=settings.autoheight?$(self).height():settings.height;}} 
     8if($(this).html().toLowerCase().replace(/;/,'')==settings.placeholder.toLowerCase().replace(/;/,'')){$(this).html('');} 
    99self.editing=true;self.revert=$(self).html();$(self).html('');var form=$('<form/>');if(settings.cssclass){if('inherit'==settings.cssclass){form.attr('class',$(self).attr('class'));}else{form.attr('class',settings.cssclass);}} 
    1010if(settings.style){if('inherit'==settings.style){form.attr('style',$(self).attr('style'));form.css('display',$(self).css('display'));}else{form.attr('style',settings.style);}} 
    1111var input=element.apply(form,[settings,self]);var input_content;if(settings.loadurl){var t=setTimeout(function(){input.disabled=true;content.apply(form,[settings.loadtext,settings,self]);},100);var loaddata={};loaddata[settings.id]=self.id;if($.isFunction(settings.loaddata)){$.extend(loaddata,settings.loaddata.apply(self,[self.revert,settings]));}else{$.extend(loaddata,settings.loaddata);} 
    1212$.ajax({type:settings.loadtype,url:settings.loadurl,data:loaddata,async:false,success:function(result){window.clearTimeout(t);input_content=result;input.disabled=false;}});}else if(settings.data){input_content=settings.data;if($.isFunction(settings.data)){input_content=settings.data.apply(self,[self.revert,settings]);}}else{input_content=self.revert;} 
    13 content.apply(form,[input_content,settings,self]);input.attr('name',settings.name);buttons.apply(form,[settings,self]);plugin.apply(form,[settings,self]);$(self).append(form);$(':input:visible:enabled:first',form).focus();if(settings.select){input.select();} 
    14 input.keydown(function(e){if(e.keyCode==27){e.preventDefault();reset();}});var t;if('cancel'==settings.onblur){input.blur(function(e){t=setTimeout(reset,500);});}else if('submit'==settings.onblur){input.blur(function(e){form.submit();});}else if($.isFunction(settings.onblur)){input.blur(function(e){settings.onblur.apply(self,[input.val(),settings]);});}else{input.blur(function(e){});} 
     13content.apply(form,[input_content,settings,self]);input.attr('name',settings.name);buttons.apply(form,[settings,self]);$(self).append(form);plugin.apply(form,[settings,self]);$(':input:visible:enabled:first',form).focus();if(settings.select){input.select();} 
     14input.keydown(function(e){if(e.keyCode==27){e.preventDefault();reset.apply(form,[settings,self]);}});var t;if('cancel'==settings.onblur){input.blur(function(e){t=setTimeout(function(){reset.apply(form,[settings,self]);},500);});}else if('submit'==settings.onblur){input.blur(function(e){form.submit();});}else if($.isFunction(settings.onblur)){input.blur(function(e){settings.onblur.apply(self,[input.val(),settings]);});}else{input.blur(function(e){});} 
    1515form.submit(function(e){if(t){clearTimeout(t);} 
    16 e.preventDefault();submit.apply(form,[settings,self]);if($.isFunction(settings.target)){var str=settings.target.apply(self,[input.val(),settings]);$(self).html(str);self.editing=false;callback.apply(self,[self.innerHTML,settings]);if(!$.trim($(self).html())){$(self).html(settings.placeholder);}}else{var submitdata={};submitdata[settings.name]=input.val();submitdata[settings.id]=self.id;if($.isFunction(settings.submitdata)){$.extend(submitdata,settings.submitdata.apply(self,[self.revert,settings]));}else{$.extend(submitdata,settings.submitdata);} 
    17 $(self).html(settings.indicator);$.post(settings.target,submitdata,function(str){$(self).html(str);self.editing=false;callback.apply(self,[self.innerHTML,settings]);if(!$.trim($(self).html())){$(self).html(settings.placeholder);}});} 
    18 return false;});function reset(){$(self).html(self.revert);self.editing=false;if(!$.trim($(self).html())){$(self).html(settings.placeholder);}}});});};$.editable={types:{defaults:{element:function(settings,original){var input=$('<input type="hidden">');$(this).append(input);return(input);},content:function(string,settings,original){$(':input:first',this).val(string);},buttons:function(settings,original){if(settings.submit){var submit=$('<input type="submit">');submit.val(settings.submit);$(this).append(submit);} 
    19 if(settings.cancel){var cancel=$('<input type="button">');cancel.val(settings.cancel);$(this).append(cancel);$(cancel).click(function(){$(original).html(original.revert);original.editing=false;});}}},text:{element:function(settings,original){var input=$('<input>');if(settings.width!='none'){input.width(settings.width);} 
     16e.preventDefault();if(false!==submit.apply(form,[settings,self])){if($.isFunction(settings.target)){var str=settings.target.apply(self,[input.val(),settings]);$(self).html(str);self.editing=false;callback.apply(self,[self.innerHTML,settings]);if(!$.trim($(self).html())){$(self).html(settings.placeholder);}}else{var submitdata={};submitdata[settings.name]=input.val();submitdata[settings.id]=self.id;if($.isFunction(settings.submitdata)){$.extend(submitdata,settings.submitdata.apply(self,[self.revert,settings]));}else{$.extend(submitdata,settings.submitdata);} 
     17if('PUT'==settings.method){submitdata['_method']='put';} 
     18$(self).html(settings.indicator);$.post(settings.target,submitdata,function(str){$(self).html(str);self.editing=false;callback.apply(self,[self.innerHTML,settings]);if(!$.trim($(self).html())){$(self).html(settings.placeholder);}});}} 
     19return false;});});this.reset=function(){$(self).html(self.revert);self.editing=false;if(!$.trim($(self).html())){$(self).html(settings.placeholder);}}});};$.editable={types:{defaults:{element:function(settings,original){var input=$('<input type="hidden">');$(this).append(input);return(input);},content:function(string,settings,original){$(':input:first',this).val(string);},reset:function(settings,original){original.reset();},buttons:function(settings,original){var form=this;if(settings.submit){if(settings.submit.match(/>$/)){var submit=$(settings.submit).click(function(){if(submit.attr("type")!="submit"){form.submit();}});}else{var submit=$('<button type="submit">');submit.html(settings.submit);} 
     20$(this).append(submit);} 
     21if(settings.cancel){if(settings.cancel.match(/>$/)){var cancel=$(settings.cancel);}else{var cancel=$('<button type="cancel">');cancel.html(settings.cancel);} 
     22$(this).append(cancel);$(cancel).click(function(event){if($.isFunction($.editable.types[settings.type].reset)){var reset=$.editable.types[settings.type].reset;}else{var reset=$.editable.types['defaults'].reset;} 
     23reset.apply(form,[settings,original]);return false;});}}},text:{element:function(settings,original){var input=$('<input>');if(settings.width!='none'){input.width(settings.width);} 
    2024if(settings.height!='none'){input.height(settings.height);} 
    2125input.attr('autocomplete','off');$(this).append(input);return(input);}},textarea:{element:function(settings,original){var textarea=$('<textarea>');if(settings.rows){textarea.attr('rows',settings.rows);}else{textarea.height(settings.height);} 
  • estimationtoolsplugin/trunk/estimationtools/templates/edithours.html

    r4332 r4361  
    1  $(document).ready(function() { 
     1<script type="text/javascript" xmlns="http://www.w3.org/1999/xhtml" 
     2      xmlns:xi="http://www.w3.org/2001/XInclude" 
     3      xmlns:py="http://genshi.edgewall.org/" py:strip=""> 
     4$(document).ready(function() { 
    25    ids = $('td.id').each(function(i) { 
    3        var id = $(this).text() 
    4        var estimationField = '<?cs var:edithours.field ?>' 
    5        $('td.' + estimationField + ' span').eq(i).editable(function(value, settings) { 
     6       var id = $(this).text().substr(1); 
     7       var estimationField = '$data.field'; 
     8 
     9           var estimationCell = $('td.' + estimationField).eq(i); 
     10 
     11           estimationCell.editable(function(value, settings) { 
    612         var currentElement = this; 
    713         $.ajax({ 
    814           type: 'POST', 
    915           url: 'xmlrpc', 
    10            data: '<?xml version="1.0"?><methodCall><methodName>ticket.update</methodName>' + 
     16           data: '<methodCall><methodName>ticket.update</methodName>' + 
    1117                   '<params><param><value><int>' + id + '</int></value></param>' + 
    1218                   '<param><value><string></string></value></param>' + 
    1319                   '<param><value><struct><member><name>' + estimationField + '</name>' + 
    1420                   '<value><string>' + value + '</string></value></member></struct></value></param>' + 
    15                    '</params>  </methodCall>', 
     21                   '</params></methodCall>', 
    1622           contentType: 'text/xml', 
    1723           success: function(){ 
     
    2127         return('Saving...'); 
    2228       }, { 
     29                 data : jQuery.trim(estimationCell.text()), 
    2330                 tooltip   : 'Click to edit...', 
    2431                 placeholder: '', 
     
    3037    }); 
    3138 }); 
     39 </script> 
     40  
  • estimationtoolsplugin/trunk/estimationtools/tests/burndownchart.py

    r4332 r4361  
    33from trac.test import EnvironmentStub 
    44from trac.ticket.model import Ticket 
     5from trac.util.datefmt import utc 
    56import time 
    67import unittest 
     
    2728        for key in keys: 
    2829            ticket['hours_remaining'] = history[key] 
    29             ticket.save_changes("me", "testing", time.mktime(key.timetuple())) 
     30            ticket.save_changes("me", "testing", datetime.combine(key, datetime.now(utc).timetz())) 
    3031             
    3132    def test_parse_options(self): 
     
    5051    def test_calculate_timetable_simple(self): 
    5152        chart = BurndownChart(self.env) 
    52         day1 = datetime.now().date() 
     53        day1 = datetime.now(utc).date() 
    5354        day2 = day1 + timedelta(days=1) 
    5455        day3 = day2 + timedelta(days=1) 
     
    6061    def test_calculate_timetable_with_simple_changes(self): 
    6162        chart = BurndownChart(self.env) 
    62         day1 = datetime.now().date() 
     63        day1 = datetime.now(utc).date() 
    6364        day2 = day1 + timedelta(days=1) 
    6465        day3 = day2 + timedelta(days=1) 
     
    7273    def test_calculate_timetable_with_simple_changes_2(self): 
    7374        chart = BurndownChart(self.env) 
    74         day1 = datetime.now().date() 
     75        day1 = datetime.now(utc).date() 
    7576        day2 = day1 + timedelta(days=1) 
    7677        day3 = day2 + timedelta(days=1) 
     
    8687    def test_calculate_timetable_with_recent_changes(self): 
    8788        chart = BurndownChart(self.env) 
    88         day1 = datetime.now().date() 
     89        day1 = datetime.now(utc).date() 
    8990        day2 = day1 + timedelta(days=1) 
    9091        day3 = day2 + timedelta(days=1) 
  • estimationtoolsplugin/trunk/estimationtools/tests/hoursremaining.py

    r4332 r4361  
    66 
    77 
    8 class BurndownChartTestCase(unittest.TestCase): 
     8class HoursRemainingTestCase(unittest.TestCase): 
    99     
    1010    def setUp(self): 
  • estimationtoolsplugin/trunk/estimationtools/tests/workloadchart.py

    r4332 r4361  
    66 
    77 
    8 class BurndownChartTestCase(unittest.TestCase): 
     8class WorkloadChartTestCase(unittest.TestCase): 
    99     
    1010    def setUp(self): 
  • estimationtoolsplugin/trunk/setup.py

    r4332 r4361  
    1212    license='BSD', 
    1313    packages=['estimationtools'], 
    14     package_data = { 'estimationtools': ['htdocs/*.js', 'templates/*.cs'] }, 
     14    package_data = { 'estimationtools': ['htdocs/*.js', 'templates/*.html'] }, 
    1515    entry_points = { 
    1616        'trac.plugins': [