Changeset 7575


Ignore:
Timestamp:
11/28/12 17:06:43 (11 years ago)
Author:
angelo
Message:

Ticket #3197 - Reduzir tempo de carregamento do modulo Expresso Mail

Location:
trunk
Files:
103 added
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/expressoMail1_2/index.php

    r7567 r7575  
    1616                'enable_nextmatchs_class' => True 
    1717        ); 
     18         
    1819        require_once('../header.inc.php'); 
     20        include_once dirname(__FILE__) . '/../header.inc.php'; 
     21        require_once dirname(__FILE__) . '/../services/class.servicelocator.php'; 
     22        $template = CreateObject('phpgwapi.Template',PHPGW_APP_TPL); 
     23        $alternativeMailService = ServiceLocator::getService('ldap'); 
     24        $AlternateEmailExpresso = Array(); 
     25        $AlternateEmailExpresso = $alternativeMailService->getMailAlternateByUidNumber($_SESSION['phpgw_info']['expressomail']['user']['account_id']); 
     26        $template->set_var("user_email_alternative", implode(",", $AlternateEmailExpresso));     
     27 
    1928        $update_version = $GLOBALS['phpgw_info']['apps']['expressoMail1_2']['version']; 
    2029        $_SESSION['phpgw_info']['expressomail']['user'] = $GLOBALS['phpgw_info']['user']; 
    2130        echo "<script type='text/javascript'>var template = '".$_SESSION['phpgw_info']['expressoMail1_2']['user']['preferences']['common']['template_set']."';</script>"; 
     31 
     32        //jquery and Editor  
    2233        echo ' 
     34                <link rel="stylesheet" type="text/css" href="../prototype/plugins/jquery/jquery-ui.css" /> 
     35                <link rel="stylesheet" type="text/css" href="../prototype/plugins/jqgrid/css/ui.jqgrid.css"/> 
     36                <link rel="stylesheet" type="text/css" href="../prototype/plugins/treeview/jquery.treeview.css"/> 
     37                <link rel="stylesheet" type="text/css" href="../prototype/modules/attach_message/attach_message.css"/> 
     38                <link rel="stylesheet" type="text/css" href="templates/default/main.css"/> 
     39                <link rel="stylesheet" type="text/css" href="../prototype/modules/filters/filters.css"/> 
    2340                <link rel="stylesheet" type="text/css" href="../prototype/plugins/freeow/style/freeow/freeow.css" > 
    24                 <link rel="stylesheet" type="text/css" href="templates/default/main.css"></link> 
    25                 <link rel="stylesheet" type="text/css" href="../phpgwapi/js/dftree/dftree.css"></link> 
    26                 <link rel="Stylesheet" type="text/css" href="../prototype/plugins/jquery/jquery-ui.css" /> 
     41                <link rel="stylesheet" type="text/css" href="../phpgwapi/js/dftree/dftree.css"/> 
     42                 
     43                <link rel="stylesheet" type="text/css" href="../prototype/modules/filters/filters.css"/> 
     44                <link rel="stylesheet" type="text/css" href="../prototype/modules/mail/css/followupflag.css"/>   
     45                <link rel="stylesheet" href="../prototype/plugins/farbtastic/farbtastic.css" type="text/css" >   
     46                <link rel="stylesheet" href="../prototype/plugins/fileupload/jquery.fileupload-ui.css" type="text/css" >         
     47                <link rel="stylesheet" type="text/css" href="../prototype/plugins/jqgrid/themes/prognusone/jquery-ui-1.8.2.custom.css" /> 
     48                <link rel="stylesheet" type="text/css" href="../prototype/modules/mail/css/foldertree.css" />                                            
     49                <link rel="stylesheet" type="text/css" href="../prototype/plugins/contextmenu/jquery.contextMenu.css"></link> 
    2750                <link rel="stylesheet" type="text/css" href="../prototype/plugins/zebradialog/css/zebra_dialog.css"></link> 
    28                 <link rel="stylesheet" href="../prototype/plugins/treeview/jquery.treeview.css" type="text/css" media="screen" /> 
    29                 <link rel="stylesheet" href="../prototype/modules/mail/css/followupflag.css" type="text/css" /> 
    30                 <link rel="stylesheet" href="../prototype/modules/attach_message/attach_message.css" type="text/css" /> 
    31                 <link rel="stylesheet" href="../prototype/plugins/jqgrid/themes/prognusone/jquery-ui-1.8.2.custom.css" type="text/css" /> 
    32                 <link rel="stylesheet" type="text/css" href="../prototype/plugins/contextmenu/jquery.contextMenu.css"></link> 
    33                 <link rel="stylesheet" type="text/css" href="../prototype/plugins/fullcalendar/fullcalendar.css"></link> 
    34                 <link rel="stylesheet" type="text/css" href="../prototype/plugins/fullcalendar/fullcalendar.print.css"></link> 
    35                 <!-- <link rel="stylesheet" href="../prototype/modules/mail/css/label.css" type="text/css" /> --> 
    36                  
    37                 <script src="js/modal/modal.js"></script> 
    38                 <script type="text/javascript" src="../prototype/plugins/jquery/jquery.min.js"></script> 
    39                 <script type="text/javascript" src="../prototype/plugins/jquery/jquery-ui.min.js"></script> 
     51                 
     52                 
     53                <link rel="stylesheet" type="text/css" href="../prototype/modules/calendar/css/layout.css"/> 
     54                <link rel="stylesheet" type="text/css" href="../prototype/plugins/jquery.spinner/jquery.spinner.css"/> 
     55                <link rel="stylesheet" type="text/css" href="../prototype/plugins/fullcalendar/fullcalendar.css"/> 
     56                <link rel="stylesheet" type="text/css" href="../prototype/plugins/fullcalendar/fullcalendar.print.css"/> 
     57                <link rel="stylesheet" type="text/css" href="../prototype/plugins/icalendar/jquery.icalendar.css"/> 
     58                <link rel="stylesheet" type="text/css" href="../prototype/plugins/jquery.jrating/jRating.jquery.css"/> 
     59                <link rel="stylesheet" type="text/css" href="../prototype/plugins/timepicker/jquery-ui-timepicker-addon.css"/> 
     60 
     61                <script src="../prototype/plugins/jquery/jquery.min.js" language="javascript" charset="utf-8"></script> 
     62                <script src="../library/ckeditor/ckeditor.js" language="javascript" charset="utf-8"></script> 
     63                <script src="../library/ckeditor/adapters/jquery.js" language="javascript" charset="utf-8"></script> 
     64                <script src="../prototype/plugins/jquery/jquery-ui.min.js" language="javascript" charset="utf-8"></script> 
     65                <script type="text/javascript" src="../prototype/plugins/farbtastic/farbtastic.js"></script> 
     66                <script src="../prototype/plugins/countdown/jquery.countdown.min.js" language="javascript" charset="utf-8"></script> 
     67                <script src="../prototype/plugins/countdown/jquery.countdown-pt-BR.js" language="javascript" charset="utf-8"></script> 
     68                <script src="../prototype/plugins/fileupload/jquery.fileupload.js" language="javascript" charset="utf-8"></script> 
    4069                <script type="text/javascript" src="../prototype/plugins/contextmenu/jquery.contextMenu.js"></script> 
    41                 <script src="../prototype/plugins/json2/json2.js" language="javascript"></script> 
    42                 <script src="../prototype/plugins/ejs/ejs.js" language="javascript"></script> 
    43                 <script src="../prototype/plugins/store/jquery.store.js" language="javascript"></script> 
    44                 <script src="../prototype/plugins/farbtastic/farbtastic.js" language="javascript"></script> 
    45                 <script src="../prototype/api/datalayer.js" language="javascript"></script>                                      
    46                 <script src="../prototype/api/rest.js" language="javascript"></script>                                   
    47                 <script type="text/javascript" src="../prototype/plugins/scrollto/jquery.scrollTo.js"></script> 
    48                 <script language="javascript"> 
    49                         DataLayer.dispatchPath = "../prototype/"; 
    50                         REST.dispatchPath = "../prototype/"; 
    51                         REST.load(""); 
    52                 </script>                                        
    53                 <script src="../library/ckeditor/ckeditor.js" language="javascript" charset="utf-8"></script>  
    54                 <script src="../library/ckeditor/adapters/jquery.js" language="javascript"></script>  
    55                 <script src="../prototype/plugins/lazy/jquery.lazy.js" language="javascript"></script> 
    56                 <script type="text/javascript" src="../prototype/plugins/zebradialog/javascript/zebra_dialog.js"></script> 
    57                 <script src="js/rich_text_editor.js" type="text/javascript"></script> 
    58                 <script src="js/base64.js" type="text/javascript"></script> 
    59                 <script type="text/javascript" src="../prototype/plugins/treeview/jquery.treeview.js"></script> 
    60                 <script type="text/javascript" src="../prototype/plugins/treeview/lib/jquery.cookie.js"></script> 
    61                 <script type="text/javascript" src="../prototype/plugins/block/jquery.blockUI.js"></script> 
    62                 <script type="text/javascript" src="../prototype/plugins/scrollto/jquery.scrollTo.js"></script>          
    63                 <script src="../prototype/modules/mail/js/foldertree.js" type="text/javascript"></script>                
    64                 <script src="../prototype/modules/mail/js/label.js" type="text/javascript"></script>     
    65                 <script src="../prototype/modules/mail/js/followupflag.js" type="text/javascript"></script> 
    66                 <script type="text/javascript" src="../prototype/plugins/freeow/jquery.freeow.min.js"></script> 
    67     '; 
    68         //---------------------------// 
     70                <script type="text/javascript" src="../prototype/plugins/mask/jquery.maskedinput.js"></script> 
     71                '; 
     72 
    6973        echo "<script src='js/globals.js?".$update_version."' type='text/javascript'></script>"; 
    7074        echo "<script src='js/sniff_browser.js?".$update_version."' type='text/javascript'></script>"; 
    71         echo "<script src='js/QuickCatalogSearch.js' type='text/javascript'></script>"; 
     75        //echo "<script src='js/QuickCatalogSearch.js' type='text/javascript'></script>"; 
    7276        //echo "<style type='text/css'>@import url(../phpgwapi/js/jscalendar/calendar-win2k-1.css);</style>"; 
    7377        //echo "<script src='../phpgwapi/js/jscalendar/calendar.js?".$update_version."' type='text/javascript'></script>"; 
     
    7579        //echo "<script src='../phpgwapi/js/jscalendar/lang/calendar-br.js?".$update_version."' type='text/javascript'></script>"; 
    7680        echo '<script type="text/javascript" src="../phpgwapi/js/wz_dragdrop/wz_dragdrop.js?'.$update_version.'"></script> 
    77                 <script type="text/javascript" src="../phpgwapi/js/dJSWin/dJSWin.js?'.$update_version.'"></script> 
    78                 <script type="text/javascript" src="../phpgwapi/js/x_tools/xtools.js?'.$update_version.'"></script>';    
    79  
     81                  <script type="text/javascript" src="../phpgwapi/js/dJSWin/dJSWin.js?'.$update_version.'"></script> 
     82                  <script type="text/javascript" src="js/connector.js"></script> 
     83                  <script type="text/javascript" src="../phpgwapi/js/x_tools/xtools.js?'.$update_version.'"></script> 
     84                  <script type="text/javascript" src="js/DropDownContacts.js"></script> 
     85                  '; 
     86         
    8087        /* 
    8188         * TODO: implementar o controle como preferência do usuário  
     
    93100 
    94101        echo "<div id='overlay' style='background-color: #AAAAAAA; opacity: .50; filter:Alpha(Opacity=50); height: 100%; width: 100%; position: absolute; top: 0; left: 0; visibility: hidden; z-index: 30000000000000000000000'></div>"; 
     102 
     103         
    95104        //Enable/Disable VoIP Service -> Voip Server Config 
    96105        $voip_enabled = false; 
     
    110119                } 
    111120        } 
     121 
    112122        //Local messages 
    113123        $_SESSION['phpgw_info']['server']['expressomail']['enable_local_messages'] = $current_config['enable_local_messages']; 
     
    180190 
    181191        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['auto_close_first_tab'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['auto_close_first_tab'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['auto_close_first_tab'] : "0"; 
    182          
    183         $template = CreateObject('phpgwapi.Template',PHPGW_APP_TPL); 
    184192        $template->set_var("txt_loading",lang("Loading")); 
    185193        $template->set_var("txt_clear_trash",lang("message(s) deleted from your trash folder.")); 
     
    194202        $template->set_var("msg_number",$_GET['msgball']['msgnum'] ? $_GET['msgball']['msgnum'] : $_GET['to']); 
    195203        $template->set_var("user_email",$_SESSION['phpgw_info']['expressomail']['user']['email']); 
    196         include_once dirname(__FILE__) . '/../header.inc.php'; 
    197         require_once dirname(__FILE__) . '/../services/class.servicelocator.php'; 
    198         $alternativeMailService = ServiceLocator::getService('ldap'); 
    199         $AlternateEmailExpresso = Array(); 
    200         $AlternateEmailExpresso = $alternativeMailService->getMailAlternateByUidNumber($_SESSION['phpgw_info']['expressomail']['user']['account_id']); 
    201         $template->set_var("user_email_alternative", implode(",", $AlternateEmailExpresso));     
     204 
    202205        $acc = CreateObject('phpgwapi.accounts'); 
    203206        $template->set_var("user_organization", $acc->get_organization($GLOBALS['phpgw_info']['user']['account_dn'])); 
     
    279282    </script> 
    280283 
    281         <!--<link rel="stylesheet" type="text/css" href="../prototype/modules/calendar/css/style.css" /> --> 
    282         <script type="text/javascript" src="../prototype/modules/filters/filters.js"></script> 
     284                <script type="text/javascript" src="../prototype/plugins/store/jquery.store.js"></script> 
     285                <script type="text/javascript" src="../prototype/api/datalayer.js"</script> 
     286                 
     287                <script type="text/javascript" src="../prototype/modules/mail/js/label.js"></script> 
     288                <script type="text/javascript" src="../prototype/api/rest.js"></script> 
    283289        '; 
    284  
     290     
    285291    // End Set Imap Folder names options 
    286292        //User info 
     
    300306            $mail_archiver_protocol = "https"; 
    301307            $mail_archiver_port = "4334"; 
    302         }    
     308        } 
     309     
    303310        //JS Variables (to add on jscripts variables, needed by dependence scripts following) 
    304         echo '<script type="text/javascript">var mail_archive_protocol="'.$mail_archiver_protocol.'"; var mail_archive_port="'.$mail_archiver_port.'";</script>';   
     311        echo '<script type="text/javascript">var mail_archive_protocol="'.$mail_archiver_protocol.'"; var mail_archive_port="'.$mail_archiver_port.'";</script>'; 
     312     
    305313        //CXF custom js files, from MailArchiver ArcServUtil JS files repository, intended to be running already: CORS support and custom TRANSPORT object 
    306314        echo '<script type="text/javascript" src="'.$mail_archiver_protocol.'://'.$mail_archiver_host.':'.$mail_archiver_port.'/arcservutil/cxf-addon-xdr-adapter.js"></script>'; 
    307315        echo '<script type="text/javascript" src="'.$mail_archiver_protocol.'://'.$mail_archiver_host.':'.$mail_archiver_port.'/arcservutil/cxf-addon-cors-request-object.js"></script>'; 
    308316        echo '<script type="text/javascript" src="'.$mail_archiver_protocol.'://'.$mail_archiver_host.':'.$mail_archiver_port.'/arcservutil/cxf-addon-cors-utils.js"></script>'; 
     317 
    309318        //CXF UTILS MAIN FILE 
    310         echo '<script type="text/javascript" src="'.$mail_archiver_protocol.'://'.$mail_archiver_host.':'.$mail_archiver_port.'/arcserv/ArchiveServices?js&nojsutils"></script>';    
     319        echo '<script type="text/javascript" src="'.$mail_archiver_protocol.'://'.$mail_archiver_host.':'.$mail_archiver_port.'/arcserv/ArchiveServices?js&nojsutils"></script>'; 
     320     
    311321        //QueryConfig add on 
    312322        echo '<script src="js/MAQueryConfig.js?'.$update_version.'"></script>';         
    313323        //Expresso serialized format add on 
    314         echo '<script src="js/MAExpressoPattern.js?'.$update_version.'"></script>';            
     324        echo '<script src="js/MAExpressoPattern.js?'.$update_version.'"></script>';         
     325     
    315326        //echo $obj -> getFilesJs("js/mail_archiver.js," . $GLOBALS['phpgw_info']['flags']['update_version']); 
    316         echo '<script src="js/mail_archiver.js?'.$update_version.'"></script>';  
     327        echo '<script src="js/mail_archiver.js?'.$update_version.'"></script>'; 
     328     
    317329    } 
    318330        //echo "<script language='javascript'> var account_id = ".$GLOBALS['phpgw_info']['user']['account_id'].";var expresso_offline = false;</script>"; 
     331 
    319332        $obj = createobject("expressoMail1_2.functions"); 
     333 
    320334        // setting timezone preference 
    321335        $zones = $obj->getTimezones(); 
    322336        $_SESSION['phpgw_info']['user']['preferences']['expressoMail']['timezone'] = $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['timezone'] ? $GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['timezone'] : sprintf("%s", array_search("America/Sao_Paulo", $zones)); 
     337 
    323338        // este arquivo deve ser carregado antes que 
    324339        // os demais pois nele contem a função get_lang 
    325340        // que é utilizada em diversas partes 
    326         echo $obj -> getFilesJs("js/common_functions.js",$update_version); 
     341        //echo $obj -> getFilesJs("js/common_functions.js",$update_version); 
    327342        include("inc/load_lang.php"); 
    328  
     343     
    329344    // INCLUDE these JS Files: 
    330345        if ($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_local_messages'])  
     
    332347        echo '<script src="../phpgwapi/js/dftree/dftree.js?'.$update_version.'"></script>';  
    333348     
    334         $scripts = "js/abas.js," . 
    335                                 "js/main.js," . 
    336                                 "js/draw_api.js,"; 
     349        $scripts = ""; 
    337350         
    338351        if ($GLOBALS['phpgw_info']['user']['preferences']['expressoMail']['use_shortcuts']) 
     
    343356        echo "<script> use_local_messages = ".$_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_local_messages']."</script>";          
    344357        if($_SESSION['phpgw_info']['user']['preferences']['expressoMail']['use_local_messages']) 
    345                 $scripts .= "js/local_messages.js,"; 
    346         $scripts .= "js/messages_controller.js," . 
    347                                 "js/DropDownContacts.js," . 
    348                                 "js/doiMenuData.js," . 
    349                                 "js/connector.js";               
     358                $scripts .= "js/local_messages.js";      
     359         
     360        echo ' 
     361                <script type="text/javascript" src="../prototype/modules/mail/js/followupflag.js"></script> 
     362                <script language="javascript"> 
     363                        DataLayer.dispatchPath = "../prototype/"; 
     364                        REST.dispatchPath = "../prototype/"; 
     365                        REST.load(""); 
     366                </script> 
     367        '; 
     368 
    350369        echo $obj -> getFilesJs($scripts, $update_version); 
    351         echo ' 
    352                 <script type="text/javascript"> 
    353                         init(); 
    354                 </script> 
    355                 <script type="text/javascript">connector.updateVersion = "'.$update_version.'";</script>'; 
     370        echo '<script type="text/javascript">connector.updateVersion = "'.$update_version.'";</script>'; 
     371         
     372         
     373        echo '<script src="assetic.php"></script>';      
     374        //echo '<script src="assetic_css.php"></script>'; 
    356375 
    357376        // Get Preferences or redirect to preferences page. 
     
    363382        unset($_SESSION['phpgw_info']['expressomail']['server']['global_denied_users']); 
    364383        unset($_SESSION['phpgw_info']['expressomail']['server']['global_denied_groups']); 
    365  
    366 echo ' 
    367         <link rel="stylesheet" type="text/css" href="../prototype/plugins/jquery.spinner/jquery.spinner.css"></link> 
    368         <link rel="stylesheet" type="text/css" href="../prototype/plugins/icalendar/jquery.icalendar.css"></link> 
    369         <link rel="stylesheet" type="text/css" href="../prototype/plugins/jquery.jrating/jRating.jquery.css"></link> 
    370         <link href="../prototype/modules/filters/filters.css" rel="stylesheet" type="text/css"> 
    371         <link rel="stylesheet" href="../prototype/plugins/farbtastic/farbtastic.css" type="text/css" >   
    372         <link rel="stylesheet" href="../prototype/plugins/fileupload/jquery.fileupload-ui.css" type="text/css" >                 
    373         <link rel="stylesheet" href="../prototype/plugins/jqgrid/css/ui.jqgrid.css" type="text/css" /> 
    374         <link rel="Stylesheet" type="text/css" href="../prototype/plugins/timepicker/jquery-ui-timepicker-addon.css" /> 
    375         <link rel="stylesheet" type="text/css" href="../prototype/modules/calendar/css/layout.css" /> 
    376  
    377         <script type="text/javascript" src="../prototype/plugins/datejs/date-pt-BR.js"></script> 
    378         <script type="text/javascript" src="../prototype/plugins/datejs/sugarpak.js"></script> 
    379         <script type="text/javascript" src="../prototype/plugins/datejs/parser.js"></script> 
    380         <script type="text/javascript" src="../prototype/plugins/jq-raty/js/jquery.raty.min.js"></script> 
    381         <script type="text/javascript" src="../prototype/plugins/jquery.jrating/jRating.jquery.js"></script>             
    382         <script type="text/javascript" src="../prototype/plugins/watermark/jquery.watermarkinput.js"></script> 
    383         <script type="text/javascript" src="../prototype/plugins/mask/jquery.maskedinput.js"></script> 
    384         <script type="text/javascript" src="../prototype/plugins/alphanumeric/jquery.alphanumeric.js"></script> 
    385         <script type="text/javascript" src="../prototype/plugins/fileupload/jquery.fileupload.js"></script> 
    386         <script type="text/javascript" src="../prototype/plugins/fileupload/jquery.iframe-transport.js"></script> 
    387         <script type="text/javascript" src="../prototype/plugins/qtip/jquery.qtip-1.0.0-rc3.min.js"></script>    
    388         <script type="text/javascript" src="../prototype/modules/calendar/js/timezone.js"></script> 
    389         <script type="text/javascript" src="../prototype/plugins/dateFormat/dateFormat.js"></script> 
    390         <script type="text/javascript" src="../prototype/modules/calendar/js/calendar.date.js"></script> 
    391         <script type="text/javascript" src="../prototype/modules/calendar/js/desktop.notification.js"></script> 
    392         <script type="text/javascript" src="../prototype/modules/calendar/js/calendar.codecs.js"></script> 
    393         <script type="text/javascript" src="../prototype/modules/calendar/js/calendar.alarms.js"></script> 
    394         <script type="text/javascript" src="../prototype/modules/calendar/js/helpers.js"></script> 
    395         <script src="../prototype/plugins/jqgrid/js/i18n/grid.locale-pt-br.js" type="text/javascript"></script> 
    396         <script src="../prototype/plugins/jqgrid/js/jquery.jqGrid.min.js" type="text/javascript"></script> 
    397         <script src="../prototype/plugins/countdown/jquery.countdown.min.js" type="text/javascript"></script> 
    398         <script src="../prototype/plugins/countdown/jquery.countdown-pt-BR.js" type="text/javascript"></script>        
    399         <script type="text/javascript" src="../prototype/plugins/timepicker/jquery-ui-timepicker-addon.js"></script> 
    400         <script type="text/javascript" src="../prototype/plugins/timepicker/localization/jquery-ui-timepicker-pt-BR.js"></script> 
    401         <script type="text/javascript" src="../prototype/plugins/jquery/i18n/jquery.ui.datepicker-pt-BR.js"></script> 
    402     <script type="text/javascript">  
    403         User.moduleName = "expressoMail1_2"; 
    404         </script>        
    405 '; 
    406384?> 
    407385<!-----Expresso Mail - Version Updated:<?=$update_version?>--------> 
  • trunk/expressoMail1_2/js/draw_api.js

    r7561 r7575  
    50055005                $( "#mailpreview_container span.ui-icon-close" ).click(); 
    50065006                jQuery('#message-attach-dialog').dialog({ 
    5007                         width:920, 
     5007                        width:945, 
    50085008                        height:550, 
    50095009                        resizable:false, 
Note: See TracChangeset for help on using the changeset viewer.